Arrays vergleichen
Hallo Ninox-Guros,
ich stehe jetzt grade völlig auf dem Schlauch. Ich möchte meine Zahlungsaufträge, die ich in der Tabelle Zahllauf sammle gegen eine Kontroll-Liste laufen lassen. Dazu habe ich ein Array angelegt
let myEmbArray := (select Zahllauf where 'Embargoprüfung' = 0)
Dann habe ich die Kontrollliste ebenfalls in ein Array gebracht. Let mySLArray := (select Embargoliste). Die Embargoliste enthält nur 1 Textfeld 'Name'
Ich möchte diese beiden Arrays innerhalb einer Schleife vergleichen und zwar auf Einzeldatensatzebene der Zahlungsaufträge. Das zu vergleichende Feld bei den Zahlungsaufträgen ist der Empfänger.
Soll heißen, wenn ein Empfänger einer Zahlung im mySLArray steht, dann soll in einem Textfeld der Status abgelehnt eingetragen werden, wird keine Entsprechung gefunden, soll als Status Freigegeben eingetragen werden.
Hat jemand eine Idee, wie man das umsetzen kann?
Freue mich auf Feedback
Michael
6 Antworten
-
Versuch mal so. Mirko
let embargo := (select Embargoliste).Name; let zahllauf := (select Zahllauf)['Embargoprüfung' = null]; for i in zahllauf do if contains(concat(embargo), i.'Empfänger') then i.('Embargoprüfung' := "abgelehnt") else i.('Embargoprüfung' := "freigegeben") end end
-
Hallo Mirko,
vielen Dank für Dein Skript!
Ich habe es als Grundlage hergenommen und noch ein wenig angepasst:
let embargo := (select Embargo).EMB_Name;
let zahllauf := (select Zahllauf)['Embargo-Prüfung' = 0];
for i in zahllauf do
if contains(concat(embargo), i.Fremdkontoname) then
i.('Status Embargoprüfung' := 2);
i.('Embargo-Prüfung' := 1);
i.('Datum Embargoprüfung' := today())
else
i.('Status Embargoprüfung' := 1);
i.('Embargo-Prüfung' := 1);
i.('Datum Embargoprüfung' := today())
end
endLeider ist der Test nicht so gelaufen wie ich mir das vorgestellt habe. Entspricht der zu prüfende Name exakt der Embargoliste (EMB_Name), dann wir der Status korrekt auf abgelehnt gesetzt. Gibt es allerdings eine leichte Abweichung, zusätzliche Buchstaben oder zusätzlicher Name, dann geht die Prüfung auf freigegeben.
Gibt es eine Möglichkeit hier die Trennschärfe zu reduzieren?
Viele Grüße
Michael
-
Hallo Michael. Das geht schon, es muß nur irgendwie klar sein, was genau aus den zu vergleichenden Feldern übereinstimmen soll. So offen, wie Du es beschrieben hast, reicht es nicht um weiter zu helfen.
-
Hallo Mirko,
vielen Dank fürs Feedback.
Ich vergleiche nur zwei Felder miteinander, das Feld Fremdkontoinhaber stammt aus dem Zahllauf und hat zum Beispiel den Inhalt AIDA.
Das Feld EMB_Name kommt aus der Tabelle Embargo. AIDA ist dort nicht enthalten und somit erfolgt die Freigabe.
Steht in der Embargo Tabelle "Mir Ali" wird, sofern dieser Name auch beim Fremdkontoinhaber seht, eine Ablehnung ausgegeben, was auch richtig ist.
Habe ich als Fremdkontoinhaber aber "AIDA Mir Ali" stehen, dann bekomme ich aktuell eine Freigabe, da dieser Name nicht in der Embargoliste steht. Hier würde ich mir eine Ablehnung oder eine Warnung wünschen.
Ich hoffe, meine Gedanken sind etwas klarer geworden.
Gruß
Michael
-
Hallo Michael. Ohne Nachstellung der Tabellen ging es dann doch nicht. Mir fiel noch ein, dass Du ja vielleicht auch Namen von der Embargoliste löschen willst. Bei 'Embargoprüfung' bin ich davon ausgegangen, dass es ein Ja/Nein Feld ist, sonst mußt Du es noch ändern. Also versuche mal dies. Mirko
let embargo := (select Embargoliste).EMB_Name; let zahllauf := (select Zahllauf); for i in zahllauf do i.('Status Embargoprüfung' := null); i.('Embargoprüfung' := null); i.'Datum Embargoprüfung' := null; for j in embargo do if contains(i.Fremdkontoname, j) then i.( 'Status Embargoprüfung' := 2; 'Embargoprüfung' := true; 'Datum Embargoprüfung' := today() ) end end; if i.'Status Embargoprüfung' != 2 then i.('Embargoprüfung' := true); i.('Status Embargoprüfung' := 1); i.('Datum Embargoprüfung' := today()) end end
-
Top!
Läuft so wie ich es mir vorstelle.
Vielen DANK
Michael
Content aside
- Status Answered
- vor 2 JahrenZuletzt aktiv
- 6Antworten
- 81Ansichten
-
2
Folge bereits