0

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

null
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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
    
    • Michael.3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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
    end

     

    Leider 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

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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.

    • Michael.3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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
    
    • Michael.3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Top!

     

    Läuft so wie ich es mir vorstelle.

     

    Vielen DANK

     

    Michael