0

Letztes zugehöriges Datum finden

Hallo,

ich stehe auf dem Schlauch. Warum funktioniert das mal richtig und mal nicht?

Bildschirmfoto 2021-09-28 um 14.33.53

Das ergebniss past

Bildschirmfoto 2021-09-28 um 14.34.56

hier nicht ! 

 

Es soll doch nur den letzen Lieferschein (Eingangsdatum) vor der 1.Abrechnung suchen und Ausgeben.

Im fx Letzter Lieferschein :

let me := this;
let aa := '1. Abrechnung';
last(for i in select Lieferscheine where 'Aufträge' = me and Eingangsdatum <= aa do
i.Eingangsdatum
end)

Im fx 1.Abrechnung:

do as server
let me := this;
last(for i in select Abrechnungen where 'Aufträge' = me and 'Abrechnung vom' do
i.'Abrechnung vom'
end)
end

im letzten fx sind nur die workdays('1. Abrechnung', 'Letzter Lieferschein vor 1. Abrechnung')

Kann mir einer auf die spur helfen?

Danke

4 Antworten

null
    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Michi,

    für fx Letzter Lieferschein:

    let me := this;
    last(Lieferscheine [Eingangsdatum <= me.'1. Abrechnung'] order by 'Abrechnung vom'). 'Abrechnung vom'

     

    fx 1.Abrechnung

    last(Abrechnungen ['Abrechnung vom']  do order by 'Abrechnung vom').'Abrechnung vom'

     

    Leo

    • Michi.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Danke Leo. 

    Werde ich natürlich gern umsetzen. Aber warum ist order by jetzt wichtig?  Dachte immer mit last oder first bekomm ich den ersten oder den letzten von den filterkriterien entsprechenden Eintrag. 

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Michi,

    die Befehle last() und first() beziehen sich immer auf ein Array. Die Datensätze in dem select Aufruf (oder eben  ohne select für Untertabellen) werden auch als Array ausgegeben. Die Datensätze sind standardmäßig nach ID sortiert. Wenn deine Datumsangaben mit der ID Sortierung übereinstimmen, dann kriegst du auch die richtigen Datumsangaben als Antwort für first() oder last(). 

    in deiner Konstelletion:

    last(for i in select Lieferscheine where 'Aufträge' = me and Eingangsdatum <= aa do
    i.Eingangsdatum
    end)

    erstellst du aber ein Array aus Datums. Das sind im eigentlichen Sinne Zahlen. Um hier das größte Datum zu ermitteln, muss man mit max(Array) arbeiten.

    Wenn man aber bei Datensätzen bleiben möchte, sortiert man diese zuerst mit order by  nach Datum. Dann ist der Datensatz mit dem  größten Datum auch automatich als letzte im Array

    Leo

    • Michi.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Wieder was gelernt 

    👍