BC14 C/AL: Auswertung Tabelle für XMLPort

15. Juli 2024 15:38

Hallo zusammen,
ich versuche eine Tabelle für einen XMLPort auszuwerten. Die Tabelle hat folgenden Aufbau:

Code:
Mitarbeiternr   Monatsdatum   Abrechnungsmonatsdatum   Arbeitszeitvereinbarung
MA-120958   01.01.2020   01.01.2020   5WT0300W
MA-120958   01.01.2020   01.04.2020   4WT1000M
MA-120958   01.02.2020   01.02.2020   5WT0300W
MA-120958   01.02.2020   01.04.2020   4WT1000M
MA-120958   01.03.2020   01.03.2020   5WT0300W
MA-120958   01.03.2020   01.04.2020   4WT1000M
MA-120958   01.04.2020   01.04.2020   4WT1000M
MA-120958   01.05.2020   01.05.2020   4WT1000M
MA-120958   01.06.2020   01.06.2020   4WT1000M
MA-120958   01.07.2020   01.07.2020   4WT1000M
MA-120958   01.08.2020   01.08.2020   4WT1000M
MA-120958   01.09.2020   01.09.2020   4WT1000M
MA-120958   01.10.2020   01.10.2020   4WT1000M
MA-120958   01.11.2020   01.11.2020   4WT1000M
MA-120958   01.12.2020   01.12.2020   4WT1000M
MA-120958   01.01.2021   01.01.2021   4WT1000M
MA-120958   01.02.2021   01.02.2021   4WT1000M
MA-120958   01.03.2021   01.03.2021   4WT1000M
MA-120958   01.04.2021   01.04.2021   4WT1000M
MA-120958   01.05.2021   01.05.2021   4WT1000M
MA-120958   01.06.2021   01.06.2021   4WT1000M
MA-120958   01.07.2021   01.07.2021   4WT1000M
MA-120958   01.08.2021   01.08.2021   4WT1000M
MA-120958   01.08.2021   01.09.2021   4WT1000M
MA-120958   01.09.2021   01.09.2021   4WT1000M
MA-120958   01.10.2021   01.10.2021   4WT1000M
MA-120958   01.11.2021   01.11.2021   4WT1000M
MA-120958   01.12.2021   01.12.2021   4WT1000M
MA-120958   01.01.2022   01.01.2022   4WT1000M
MA-120958   01.02.2022   01.02.2022   4WT1000M
MA-120958   01.03.2022   01.03.2022   4WT1000M
MA-120958   01.04.2022   01.04.2022   4WT1000M
MA-120958   01.05.2022   01.05.2022   4WT1000M
MA-120958   01.06.2022   01.06.2022   4WT1000M
MA-120958   01.07.2022   01.07.2022   4WT1000M
MA-120958   01.08.2022   01.08.2022   4WT1000M
MA-120958   01.09.2022   01.09.2022   4WT1000M
MA-120958   01.10.2022   01.10.2022   4WT1000M
MA-120958   01.11.2022   01.11.2022   4WT1000M
MA-120958   01.12.2022   01.12.2022   4WT1000M
MA-120958   01.01.2023   01.01.2023   4WT1000M
MA-120958   01.02.2023   01.02.2023   4WT1000M
MA-120958   01.03.2023   01.03.2023   4WT1000M
MA-120958   01.03.2023   01.12.2023   4WT1000M
MA-120958   01.04.2023   01.04.2023   4WT1000M
MA-120958   01.04.2023   01.12.2023   4WT1000M
MA-120958   01.05.2023   01.05.2023   4WT1000M
MA-120958   01.05.2023   01.12.2023   4WT1000M
MA-120958   01.06.2023   01.06.2023   4WT1000M
MA-120958   01.06.2023   01.12.2023   4WT1000M
MA-120958   01.07.2023   01.07.2023   4WT1000M
MA-120958   01.07.2023   01.12.2023   4WT1000M
MA-120958   01.08.2023   01.08.2023   4WT1000M
MA-120958   01.08.2023   01.12.2023   4WT1000M
MA-120958   01.09.2023   01.09.2023   4WT1000M
MA-120958   01.09.2023   01.12.2023   4WT1000M
MA-120958   01.09.2023   01.06.2024   4WT1000M
MA-120958   01.10.2023   01.10.2023   4WT1000M
MA-120958   01.10.2023   01.12.2023   4WT1000M
MA-120958   01.10.2023   01.06.2024   4WT1000M
MA-120958   01.11.2023   01.11.2023   4WT1000M
MA-120958   01.11.2023   01.12.2023   4WT1000M
MA-120958   01.11.2023   01.06.2024   4WT1000M
MA-120958   01.12.2023   01.12.2023   4WT1000M
MA-120958   01.12.2023   01.06.2024   4WT1000M
MA-120958   01.01.2024   01.01.2024   4WT1000M
MA-120958   01.01.2024   01.06.2024   4WT1000M
MA-120958   01.02.2024   01.02.2024   4WT1000M
MA-120958   01.02.2024   01.06.2024   4WT1000M
MA-120958   01.03.2024   01.03.2024   4WT1000M
MA-120958   01.03.2024   01.06.2024   4WT1000M
MA-120958   01.04.2024   01.04.2024   4WT1000M
MA-120958   01.04.2024   01.06.2024   4WT1000M
MA-120958   01.05.2024   01.05.2024   4WT1000M
MA-120958   01.05.2024   01.06.2024   4WT1000M
MA-120958   01.06.2024   01.06.2024   4WT1000M


Nun möchte ich auswerten ab wann für den Mitarbeiter die Arbeitszeitvereinbarung 4WT1000M galt, weil das die aktuell gesetzte ist. In dem Beispiel also ab Monatsdatum 01.01.2020, da es in 01.04.2020 eine rückwirkende Änderung gültig ab 01.01.2020 gab.

Der Fallstrick sind also die Rückrechnungen bzw. Zeilen dazwischen. Hat jemand einen passenden Ansatz für mich wie ich das am besten auswerten kann?

Re: BC14 C/AL: Auswertung Tabelle für XMLPort

17. Juli 2024 10:32

Hi,

lies die Dateien in eine Tabelle ein und erstelle ein Query mit Group By auf Mitarbeiternr., Arbeitszeitvereinbarung und als Berechnung kleinste Monatsdatum.

Gruß
Daniel

Re: BC14 C/AL: Auswertung Tabelle für XMLPort

17. Juli 2024 10:46

Wenn man eine Tabelle hat dann braucht man doch nur einen passenden Schlüssel?

Re: BC14 C/AL: Auswertung Tabelle für XMLPort

23. Juli 2024 08:36

SubNatural hat geschrieben:lies die Dateien in eine Tabelle ein und erstelle ein Query mit Group By auf Mitarbeiternr., Arbeitszeitvereinbarung und als Berechnung kleinste Monatsdatum.


Sorry, ich habe mich etwas falsch ausgedrückt. Es handelt sich um einen ausschließlichen Export XMLPort. Die Tabelle besteht bereits.

enh hat geschrieben:Wenn man eine Tabelle hat dann braucht man doch nur einen passenden Schlüssel?


Das ist zu einfach gedacht meiner Meinung nach. Schau dir bitte die Beispiel-Datensätze an, gerade auch die ersten Zeilen. Dort wechselt mit jeder Zeile der Wert für "Arbeitszeitvereinbarung".


Aktuell habe ich folgende Funktion. Allerdings liefert diese nicht das gewünschte Ergebnis, da jeder Wechsel übergeben wird. Irgendwie muss ich vorher noch das Feld "Abrechnungsmonatsdatum" auswerten, wenn "Monatsdatum" mehrfach vorkommt. Das wäre so mein Gedankengang. Gibt es andere Vorschläge?

Code:
TempMA_P.DeleteAll();
MA_P.SetCurrentKey("Mitarbeiternr", "Monatsdatum", "Abrechnungsmonatsdatum");
MA_P.SetFilter("Arbeitszeitvereinbarung", '<>%1', '');

LastArbeitszeitvereinbarung := '';
CurrentMitarbeiternr := '';

if MA_P.FindSet then
  repeat
    // Neuer Mitarbeiter?
    if MA_P.Mitarbeiternr <> CurrentMitarbeiternr then begin
      LastArbeitszeitvereinbarung := '';
      CurrentMitarbeiternr := MA_P.Mitarbeiternr;
    end;

    // Arbeitszeitvereinbarung wechselt?
    if MA_P.Arbeitszeitvereinbarung <> LastArbeitszeitvereinbarung then begin
      TempMA_P.Init();
      TempMA_P.TRANSFERFIELDS(MA_P);
      TempMA_P.Insert();
               
      // Letzte Arbeitszeitvereinbarung
      LastArbeitszeitvereinbarung := MA_P.Arbeitszeitvereinbarung;
    end;

  until MA_P.Next() = 0;

Re: BC14 C/AL: Auswertung Tabelle für XMLPort

23. Juli 2024 09:18

Wenn fest auf Arbeitszeitvereinbarung 4WT1000M gefiltert werden soll (das kommt in der Funktion gar nicht vor) und ("Mitarbeiternr", "Monatsdatum", "Abrechnungsmonatsdatum") ein vorhandener Schlüssel ist, reicht es doch, eine zweite Instanz (Recoredvariable) der Tabelle zu entsprechend zu filtern und darauf Findfirst zu setzen. Dann landet man für den Mitarbeiter auf dem ersten "Monatsdatum" dieser Arbeitszeitvereinbarung.