Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Verknüpfung mit Unterbericht

Begonnen von Daniela1967, Juni 23, 2017, 11:28:41

⏪ vorheriges - nächstes ⏩

Daniela1967

Hallo an Alle,

ich benötige für 2 verschieden Verknüpfungen für eine Unterformular und habe mir folgenden Code zusammengebastelt:

Private Sub Rechnungspositionen_Enter()
If Me.Rechnungsstellung = "Lizenznehmer" Then
Me.LinkMasterFields = [LizenznehmerNr]
Me.LinkChildFields = [LizenznehmerNr]
Else
Me.LinkMasterFields = [LadengeschäftNr]
Me.LinkChildFields = [LadengeschäftNr]
End If
End Sub

Es funktioniert leider nicht und für mich als VBA-Neuling auch nicht lösbar.

Der Unterbericht heißt Rechnungspositionen und der Hauptbericht RechnungsdatenGesamtTest. Die Felder Rechnungsstellung, LizenznehmerNr und LadengeschäftNr sind im Haupt- sowie im Unterbericht vorhanden.

Ich für eine Hilfe sehr dankbar.

Daniela

Beaker s.a.

Hallo Daniela,
ZitatDie Felder Rechnungsstellung, LizenznehmerNr und LadengeschäftNr sind im Haupt- sowie im Unterbericht vorhanden.
Die müssen in den beteiligten Tabellen (1:n) mit diesen Namen enthalten sein.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Daniela1967

Hallo Beaker s.a.,

vielen Dank für die Rückmeldung.

Die Gruppierung des Hauptbericht ist keine Anschrift, sondern die RechnungNr.
Da die Kunden einige Sonderwünsche haben musste ich basteln, um die verschiedenen Rechnungsanschriften richtig zuzuordnen. Nicht jede Rechnungsanschrift hat auch Rechnungspositionen zu Grunde liegen. Daher die unübliche Weise.

Hintergrund für die 2 verschiedenen Verknüpfungen ist, dass einige Kunden die Rechnungspositionen an die einzelnen Geschäfte möchten und einige gesammelt für alle Geschäfte an eine Anschrift.

Gibt es denn eine Lösung. Momentan arbeite ich mit 2 Berichten und muss dann zusammensortieren.

Viele Grüße

Daniela

Beaker s.a.

Hallo Daniela,
Du hast meine/n Frage/Hinweis nicht verstanden.
Deine Berichte (H & U) haben doch eine Datensatzherkunft.
In diesen müssen die Felder enthalten sein, die du "verLink"en
willst, und sie müssen dort so heissen, wie in deinem Code.
Ausserdem müssen sie IMO als String übergeben werden.
ZitatMe.LinkMasterFields = "LizenznehmerNr"

Ich vermute allerdings auch noch Fehler im Datenmodell.
Vielleicht zeigst du uns mal ein Bild des Beziehungsfensters.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Daniela1967

Hallo Ekkehard,

vermutlich habe ich da wirklich etwas falsch verstanden. Nützt die SQL-Ansicht der zwei Datenquellen etwas?

Ich bin ein Laie in VBA und tue mich immer ganz schwer damit, wo ein Code überhaupt hin gehört. Wenn ich in der Berichtseigenschaft die Verknüpfungsfelder manuell auswähle, funktioniert die Verknüpfung.

Danke für die Bemühungen
Daniela


Beaker s.a.

Hallo Daniela,
Wie vermutet, das stimmt noch nicht.
Wie ich es aus den Abb. entnehme, gibt es Lizenznehmer, die 1 bis n
Ladengeschäfte betreiben. Wenn das so ist, haben die Ladengeschäfte
nur peripher etwas mit der Rechnung zu tun, m.E. nämlich nur als
Lieferanschrift.
Im HFO kannst du die Beziehung zwischen "Rechnungsdaten" und
"Ladengeschäfte" entfernen, hast du schon über die "Lizenznehmer".

Die "RechnungsdatenBest..." gehört auch nicht mit "Ladengeschäfte"
verknüpft sondern mit "Rechnungsdaten", - entsprechend gehört da
der Fremdschlüssel "Rechnungsnummer" rein. Und auch die vier Felder
neben "EPreis" gehören in die "Rechnungsdaten".
Im Unterbericht brauchst deshalb auch nur die Positionstabelle, und das
LinkField ist "RechnungsNr"/"RechnungsNr_F"/. (s.u.)

Noch ein paar übliche Anmerkungen:
Verwende keine Sonderzeichen in Objektnamen (Tabellen, Felder,
Formulare usw.); - Ausnahme ist der Unterstrich _
Kennzeichne Fremdschlüsselfelder, - die meisten verwenden wohl ein
Suffix "_F"

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Daniela1967

Hallo Ekkehard,

ich weiß, dass die Datenstruktur sehr chaotisch ist. Dir nun zu erklären, wie es dazu gekommen ist, würde hier glaube ich den Rahmen sprengen.

Auf jeden Fall wird die Tab. Rechnungsdaten per Anfügeabfrage bestückt. Ich musste mehrere Tabellen miteinander vergleichen, dass die richtigen Rechnungsanschriften zugeordnet werden und die nötige Rechnungsnummer vergeben wird. Ich bin froh, glücklich und auch ein bisschen stolz auf mich, dass ich das mit meinen Kenntnissen so hin bekommen habe. Ich befürchte, ich bin nicht bereit, nachträglich meine Datenstruktur zu verändern. Ich saß daran Stunden. Nicht bereit, ist falsch ausgedrückt, ich weiß nicht, wie ich es ohne Hilfe professioneller hinbekomme.

Meine Frage war, ob es mit meinem anfänglich erwähnten Code, eine Möglichkeit gibt, 2 verschiedene Verknüpfungen hinzubekommen. Wenn du klar sagst: "Nööö, geht nicht" werde ich mit diesem Schönheitsfehler "2 Berichte" leben und meine Kollegin muss dann die Rechnungen eben zusammensortieren.

Viele Grüße

Beaker s.a.

Hallo Daniela,
ZitatIch saß daran Stunden.
Hast du vorher auch mal ein paar Stunden mit Grundlagenlektüre verbracht?
Wenn du dir am Anfang nicht die Zeit lässt das Datenmodell ordentlich
aufzubauen, wird sich der Aufwand bei der Entwicklung potenzieren.
Hilfe dazu bekommst du hier normalerweise immer.
Vielleicht kannst du hier deine DB (nur Tabellen mit ein paar Beispieldaten)
mal hochladen (für andere Helfer bitte als .mdb komprimiert und gezippt).
Vielleicht könntest du auch noch auf meine versteckte Frage bezügl. Verhältnis
von Lizenznehmer und Ladengeschäft antworten. Oder präziser formuliert,
wer bekommt Rechnungen? Beide, und/oder?

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Daniela1967

Halle Ekkehard,

Oh je, habe ich mich so ausgedrückt, dass ich von euch keine Hilfe bekomme? Das tut mir Leid. Vielleicht sollte ich mich doch mal den Smilies bedienen  :D
Nachdem ich wirklich 2 Tage daran gebastelt habe, bin ich dadurch schon ein bisschen genervt und habe auf schnelle Problemlösung gehofft. Sorry, wenn ich das habe raushängen lassen.

Die Datenbank ist immer komplexer und chaotischer geworden, weil die Ansprüche gestiegen sind und sich verändert haben. Es wurde dazu- und nachgebastelt. Wenn ich mal viel Ruhe und Zeit habe, muss die komplette Datenbank neu strukturiert werden.

Ich habe jetzt erst mal eine Lösung gefunden. Ich habe 2 Unterformulare eingefügt. Je nach Rechnungsstellung wird das eine ausgeblendet. Jetzt habe ich nur noch einen Bericht.

Aber die Überarbeitung der Datenstruktur steht an und da werdet Ihr bestimmt noch von mir hören.  ;)

Übrigens ist es für mich nicht selbstverständlich, wenn Ihr Helferlein eure Zeit in uns "Suchende" investiert. Deswegen auch nochmals vielen Dank für die Zeit und die Bemühungen aus dem Chaos schlau zu werden.

Viele Grüße

Daniela

Daniela1967

Ach so, deine Frage:

Die Lizenznehmer haben teilweise mehrere Ladengeschäfte. Im Zuge der Lizensierung fallen verschiedene Kosten an (Gebühren, aus Bestellungen, für Mitarbeiterschulungen etc.). Diese Kosten befinden sich alle gesammelt in der Tabelle RechnungsdatenBestellungen. Zum Monatsende gibt es für alle Lizenznehmer eine Monatsrechnung.

Das Problem fing für mich bei der Vergabe der Rechnungsnummer und der Rechnungsanschrift an:
- Manche Lizenznehmer haben Lieferanschrift gleich Rechnungsanschrift
- Manche Lizenznehmer haben für die Rechnungsanschrift eine Hauptverwaltung, der keine Berechnungen zugrunde liegen. D. h. diese Anschrift taucht in der Abfrage gar nicht auf.
- Manche Lizenznehmer haben externe Lieferanschriften (Fremdlager)
usw.

Da wir als Dienstleister und Wegbereiter alle Kundenwünsche erfüllen, habe ich auch eine chaotische Datenbank  ;) und bin glaube ich zu recht auch ein bisschen stolz, wenn dann alles funktioniert. Zwar ein unprofessioneller Weg aber funktioniert!  ;D

Gruß

Daniela

Beaker s.a.

Hallo Daniela,
ZitatOh je, habe ich mich so ausgedrückt, dass ich von euch keine
Hilfe bekomme?
Nein, so war das nicht gemeint.

Deine Beschreibungen hören sich nach einer Franchiseverwaltung an.

IMO gibt es da nur einen Rechnungsempfänger, - den LN. Und der hat
sicher auch eine Adresse. Deshalb, und vor allem wegen der abweichenden
Adressen von Läden und Lägern, würde ich alle Adressen in einer Tabelle
speichern mit einem Fremdschlüssel zum LN.

Zitat- Manche Lizenznehmer haben Lieferanschrift gleich Rechnungsanschrift ...
Wo ist das Problem? Im Rechnungskopf gibt es zwei Fremdschlüssel zu den
Adressen, 1x Rechnungs- + 1x Lieferanschrift. Wenn beides gleich, bleibt
LAns leer oder bekommt den gleichen Schlüssel.

Zitateine Hauptverwaltung, der keine Berechnungen zugrunde liegen
Das kann ich nicht nachvollziehen.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Daniela1967

Hallo Ekkehard,

ja, mit Franchise liegst du im weitesten Sinne richtig.

Nein, dem Lizenznehmer liegt keine Anschrift zugrunde. Bei den Ladengeschäften frage ich ab, ob es die Rechnungsanschrift ist oder nicht.

Die Tabellen sind schon alle richtig angelegt und auch miteinander Verknüpft.

tblLizenznehmer 1:n Beziehung zu
tblLadengeschäfte 1:n Beziehung zu
tblBerechnungen

Die Tab RechnungsdatenBestellungen ist eine Kopie von tblBerechnungen zum Testen und steht eigentlich auch dann in 1:n zu tblLadengeschäfte.

Also in der tblBerechnungen sind alle Positionen enthalten, die für das jeweilige Ladengeschäft anfallen. In dieser Tabelle wird auch das Rechnungsdatum vorgegeben. Das ist immer der Monatsletzte zu der jeweiligen Position.

Wenn die Voraussetzung immer Rechnungsanschrift = Ladengeschäft wäre, hätte ich kein Problem.

Nun habe ich folgende Ausgangsbasis:
Lizenznehmer X hat 5 Ladengeschäfte angelegt
- Geschäft 1 = 5 Rechnungspositionen
- Geschäft 2 = 3 Rechnungspositionen
- Geschäft 3 = 0 Rechnungspositionen (Rechnungsanschrift)
- Geschäft 4 = 0 Rechnungspositionen
- Geschäft 5 = 7 Rechnungspositionen

Lizenznehmer X wünscht seine Rechnung mit den gesammelten Rechnungspositionen an das Geschäft 3. Erstelle ich nun eine Abfrage, tauchen Geschäft 3 und 4 nicht auf, weil keine Rechnungspositionen da sind. Wenn ich die Beziehung ändere, dass er mir alle Ladengeschäfte anzeigen soll, wird's chaotisch.

Also bin ich wie folgt vorgegangen (Monatsrechnung 06-2017):

  • Ich erstelle eine Abfrage (Kriterium Rechnungsdatum 30.06.2017) und simuliere erstmal Lieferanschrift = Rechnungsanschrift.
  • Diese füge ich gruppiert an eine Tab. RechnungsdatenSammeln. Nun habe ich in dieser Tabelle alle LizenznehmerNr und LadengeschäftNr, die Rechnungspositionen haben.
  • Dann habe ich eine Abfrage in der alle Rechnungsanschriften enthalten sind.
  • Diese beiden Tabellen vergleiche ich miteinander, welche LizenznehmerNr. noch keine Rechnungsanschrift hat und füge diese dann auch der Tab RechnungsdatenSammeln hinzu.
  • Die Tab RechnungsdatenSammeln wird gruppiert an die Tab Rechnungsdaten angefügt und danach wieder geleert.
  • In der Tab Rechnungdaten erhalte ich dann durch den Autowert die Rechnungsnummer zu dem Rechnungsdatum 30.06.2017.

Sehr kompliziert und vermutlich unprofessionell, aber funktionell!

Viele Grüße und Wünsche für ein erholsames Wochenende

Daniela

PS: Was ist oder meinst du mit "IMO"?




Beaker s.a.

Hallo Daniela,
ZitatNein, dem Lizenznehmer liegt keine Anschrift zugrunde
Das verstehe ich weiterhin nicht, - schon rechtlich. Der LN ist doch eine
Firma, die hat eine/n Gewerbeanmeldung/Eintrag im HR, und somit einen
Firmensitz. Und da das wohl kein Hochsitz ist  ;) auch eine Adresse. Ob die
nun als Rechnungs- oder Lieferanschrift verwendet wird ist doch egal.

Den Rest verstehe ich soweit. Bezügl. Sammelrechnung ist dann wohl auch
der Aufbau der Tabelle "tblBerechnungen" richtig, da du die ja im Bericht
gruppieren willst nach Ladengeschäft.

<Pause> denk, les, denk ... <Pause> ;)
Drehe mich hier irgendwie im Kreis   >:(.
Inzwischen denke ich jedoch, dass es das einfachste wäre dem LN eine eigene
Adresse zu gönnen, indem du den mit in die [tblLadengeschäfte] aufnimmst.
So zu sagen als "Geschäft 0". Dann taucht der mit seiner "LGNr." auch in
tblBerechnungen auf, und du brauchst deinen U-Bericht nur noch mit diesem
Schlüssel ver"Link"en.

ZitatWas ist oder meinst du mit "IMO"?
IMO = InMyOpinion, meiner (bescheidenen) Meinung nach

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Daniela1967

Hallo Ekkehard,

ich hoffe, du hattest ein angenehmes Wochenende.

Alle Anschriften, die ich für den Lizenznehmer benötige, sind auch unter tblLadengeschäfte erfasst. Auch die abweichenden Rechnungs- und Vertragsanschriften. Die Datenbank ist rein zum Verwalten der verschiedenen Vorfälle, die im Zuge der Lizensierung entstehen. Die Verträge schreibe ich in Word.

Aber Access fängt ja bei der Abfrage immer von hinten an auszuwerten:
Lizenznehmer -> vorhandene Ladengeschäfte -> Bestellungen
Wenn das Ladengeschäft mit der Rechnungsanschrift keine Bestellung hatte, taucht es auch nicht in der Abfrage auf. Drehe ich die Geschichte in der Abfrage um, dass er mir alle Ladengeschäfte anzeigen soll, blicke ich überhaupt nicht mehr durch, weil viele Felder dann leer bleiben.
Deswegen vergleiche ich dann die Tabellen miteinander und füge die fehlenden Rechnungsanschriften, bevor die Rechnungsnummer erstellt wird dazu.

1. Ich  habe die Tab RechnungsdatenSammeln. In diese Tabelle füge ich die Abfrage wie oben beschrieben gruppiert an. Also habe ich schon mal alle LizenznehmerNr und LadengeschäftNr, der auch Bestellungen zu grunde liegen.
2. Ich habe eine Abfrage Rechnungsanschriften. In dieser Abfrage befinden sich alle LizenznehmerNr und LadengeschäftNr, die Rechnungsanschriften sind.
3. Ich vergleiche die Tab RechnungsdatenSammeln mit der Abfrage Rechnungsdaten und lasse mir die LizenznehmerNr anzeigen, die Bestellungen haben.
4. Dann vergleiche in einer Abfrage Rechnungsanschriften2 die LadengeschäftNr mit der Tab RechnungsdatenSammeln und füge die Rechnungsanschriften mit den fehlenden LadengeschäftNr hinzu (auch an die Tab RechnungsdatenSammeln).
5. Jetzt habe ich alle Rechnungsanschriften beisammen, die zu dem von mir gefilterten Rechnungsdatum gehören und füge die TabRechnungsdatenSammeln an die Tab Rechnungsdaten an und erhalte meine Rechnungsnummern.

Der Hauptbericht enthält dann alle Rechnungsdaten und der Unterbericht alle Berechnungspositionen. Deswegen der Wunsch mit den 2 Verknüpfungen des Unterberichts. 1 x nach LizenznehmerNr und 1 x nach LadengeschäftNr. Je nachdem, was in meinem Feld Rechnungsstellung drin steht. Aber die Lösung mit den 2 Unterberichten führt ja auch zum Ziel.

Ich bin natürlich auch für einen anderen, vielleicht optimaleren Weg offen. Meine Lösung ist aus meinen Kenntnissen entstanden.

Viele Grüße

Daniela

Beaker s.a.

Hallo Daniela,
Danke der Nachfrage.
ZitatAber Access fängt ja bei der Abfrage immer von hinten an auszuwerten:
Lizenznehmer -> vorhandene Ladengeschäfte -> Bestellungen
Wenn das Ladengeschäft mit der Rechnungsanschrift keine Bestellung hatte, taucht es auch nicht in der Abfrage auf.
Ich würde das eher als "von oben" bezeichnen.
Die LG ohne Bestellung bekommst du auch mit angezeigt, wenn du
die Bestellungen per LEFT JOIN mit den LG verknüpfst.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)