[gelöst]Datumsfilter im Dataport

24. Februar 2017 18:03

Hallo zusammen,
ich möchte in einem Dataport vor dem Export anhand des Warenausgangsdatums einen Datumsbereich filtern.
Ich möchte alle Aufträge ausgeben, deren Warenausgangsdatum zwischen morgen und dem nächsten Arbeitstag liegen.
NextWorkDate ist eine Variable vom Typ Date.
Bei Dataport - OnInitDataport() wird die Variable NextWorkDate auch korrekt ermittelt.
Das DataItem SalesHeader hat als Eigenschaft DataItemTableView: SORTING(Filterstatus,Shipment Date).

Nun habe ich im DataItem SalesHeader im Trigger Sales Header - OnBeforeExportRecord() folgendes angegeben:
SETRANGE("Shipment Date", TODAY+1, NextWorkDate);

Es funktioniert im Prinzip auch alles richtig, nur schummelt sich ein Datensatz immer wieder dazu, obwohl dieser herausgefiltert werden müsste :roll:
Beispiel:
Es gibt diese Aufträge:
Zähler Nr. Warenausg.-Datum
01 A148565 24.02.2017
02 A148848 27.02.2017
03 A148984 27.02.2017
04 A149081 27.02.2017
05 A149086 27.02.2017
07 A148868 27.02.2017

08 A148903 28.02.2017
09 A148995 27.02.2017
10 A149055 28.02.2017

Dann soll mein Dataport diese Datensätze ausgeben: 02-07 und 09.
Aber der erste Datensatz (01) kommt mit, egal, was ich mache.
Habe es auch mit Setfilter probiert, gleiches Ergebnis.

Als Lösung habe ich mir nun damit beholfen ( im Trigger Sales Header - OnBeforeExportRecord() ):
IF "Sales Header"."Shipment Date" <= TODAY THEN
CurrDataport.SKIP;

Das funktioniert, aber ich würde sehr gerne verstehen, warum mein Filter nicht funktioniert :-(

LG,
Daggi
Zuletzt geändert von DaggiLiehr am 26. Februar 2017 15:10, insgesamt 1-mal geändert.

Re: Datumsfilter im Dataport

24. Februar 2017 20:17

Hallo Daggi,
ich habe zwar derzeit (am privaten Rechner) kein NAV verfügbar, aber ich denke, dass der OnBeforeExport-Triger zu spät kommt, um dort einen Filter für das DataItem zu setzen.
Zu diesem Zeitpunkt bzw. bei Verarbeitung des Triggers dürfte NAV diesen Datensatz schon in der Hand haben und dann kommt der Filter, der dann aber erst nach dem nächsten Trigger für deine Verarbeitung wirksam wird.
Ich meine, es gibt beim Dataport auch ein OnPreDataItem-Trigger - meiner Meinung nach, wäre dies die richtige Stelle zum Filtern.

Re: Datumsfilter im Dataport

25. Februar 2017 02:35

Hallo Jörg,

wenn der Filter an der Stelle zu spät käme, dann müssten die Datensätze 08 und 10 eigentlich auch mit ausgegeben werden, diese werden jedoch weg gefiltert (was ja auch gewünscht ist).
Das ich den Filter an diese Stelle setze habe ich einem Tipp von Natalie entnommen aus diesem Beitrag: http://www.msdynamics.de/viewtopic.php?f=7&t=7194&p=33747&hilit=dataport+workdate+filter#p33747

Wenn gar nicht gefiltert werden würde, dann würde ich es ja verstehen, aber ich erkenne keine Logik hinter der Ausgabe :roll:

Naja, vielleicht mag Navision mich heute einfach nicht ;-)
LG,
Daggi

Re: Datumsfilter im Dataport

25. Februar 2017 08:54

Jörg hat schon Recht. OnBeforeExportRecord() wird ausgeführt nachdem der Record geholt ist. Wird dann ein Filter gesetzt, gilt der für alle folgenden Datensätze. Deshalb ist der erste falsch, alle folgenden korrekt. OnPreDataItem() wird ausgeführt BEVOR der erste Datensatz gelesen wird. Dort sollte der Filter gesetzt werden.

Re: Datumsfilter im Dataport

26. Februar 2017 15:10

Ohoh... hab das Brett vorm Kopf weg gesägt und bin auch vom Schlauch aufgestanden :oops:
Ihr habt natürlich recht!