'nabend!
Vielleicht sehe ich den Wald vor lauter Bäumen nicht mehr, aber ich habe folgendes Problem:
Wenn ich mit einem @DBLookup und einer Keyliste arbeiten möchte, bekomme ich immer Werte mehrerer Dokumente zurück.
Ich habe einen Lieferantenstamm-Dokument (LIF) und als Antwortdokumente mehrere Bankverbindung-Dokumente (BV).
Zur Bezahlung von Eingangsrechnungen müssen diese zuerst einer Rechnungsprüfung (Rep) unterzogen und dazu erfasst werden. Dabei soll nach der Auswahl des Lieferanten eine Auswahl der Bankverbindung erfolgen, wenn es für den Lieferanten mehrere gibt.
Es gibt eine Ansicht viewLIF15 mit den Bankverbindungen zu LIF, die folgenden Aufbau hat:
Spalte 1: LIFUID (DocUID von LIF); kategorisiert, sortiert, versteckt
Spalte 2: BVUID (DocUID von BV); sortiert, versteckt
Spalte 3: Feld Bank
Spalte 4: Feld KTO
...
Dazu habe ich folgende Schaltfläche gebastelt:
// Ort der Lieferantenstammdaten herausfinden
Serv := @Subset(@DbName; 1);
Db := @DbLookup("Notes":"NoCache";"";"ViewStm";"MCStm";"StmLif");
BVUID := @PickList([Custom]:[Single];Serv:Db; "viewLIF15";"TEO - Auswahl Bankverbindung";"Bitte wählen Sie einen Datensatz aus!"; 2; LIFUID);
@If(BVUID != "";
@Do(
Key1 := LIFUID + ";" + BVUID;
Key2 := @Explode(Key1);
@SetField("Bank"; @DbLookup("Notes":"NoCache"; Serv:Db;"viewLIF15";Key2;3;[FailSilent]));
@SetField("KTO"; @DbLookup("Notes":"NoCache"; Serv:Db;"viewLIF15";Key2;4;[FailSilent]));
@SetField("IBAN"; @DbLookup("Notes":"NoCache"; Serv:Db;"viewLIF15";Key2;5;[FailSilent]));
@SetField("Inhaber"; @DbLookup("Notes":"NoCache"; Serv:Db;"viewLIF15";Key2;6;[FailSilent]));
@Command([ViewRefreshFields])
);
"")
Wenn zwei Bankverbindungen existieren, werden auch die Felder Bank, KTO usw. mit zwei Werten gefüllt. Ok, das kommt von der Kategorisierung der Ansicht viewLIF15, dachte ich.
Also habe ich eine zweite Ansicht viewLIF16 gebaut (was ich eigentlich vermeiden wollte), gleich aufgebaut, wie viewLIF15, nur mit dem Unterschied, dass die erste Spalte LIFUID nun nicht mehr kategorisiert ist, sondern nur noch sortiert.
// Ort der Lieferantenstammdaten herausfinden
Serv := @Subset(@DbName; 1);
Db := @DbLookup("Notes":"NoCache";"";"ViewStm";"MCStm";"StmLif");
BVUID := @PickList([Custom]:[Single];Serv:Db; "viewLIF15";"TEO - Auswahl Bankverbindung";"Bitte wählen Sie einen Datensatz aus!"; 2; LIFUID);
@If(BVUID != "";
@Do(
Key1 := LIFUID + ";" + BVUID;
Key2 := @Explode(Key1);
@SetField("Bank"; @DbLookup("Notes":"NoCache"; Serv:Db;"viewLIF16";Key2;3;[FailSilent]));
@SetField("KTO"; @DbLookup("Notes":"NoCache"; Serv:Db;"viewLIF16";Key2;4;[FailSilent]));
@SetField("IBAN"; @DbLookup("Notes":"NoCache"; Serv:Db;"viewLIF16";Key2;5;[FailSilent]));
@SetField("Inhaber"; @DbLookup("Notes":"NoCache"; Serv:Db;"viewLIF16";Key2;6;[FailSilent]));
@Command([ViewRefreshFields])
);
"")
Leider ist das Ergebnis das gleiche: Zwei Werte in jedem Maskenfeld, wenn zwei BV-Dokumente existieren.
Wie funktioniert das mit zwei Schlüsselwerten beim @DbLookup? Oder muss ich da bei der Definition der Ansicht was beachten? Ist eine Option (nicht) gesetzt?
Vielleicht kann mir jemand meinen Fehler zeigen.
Danke im voraus.