[Gelöst] Teillieferung eines Warenausgang

26. Juni 2012 08:26

Hallo zusammen,

ich arbeite gerade in einem Projekt zur Einführung eines kundenspezifischen Lagerverwaltungssystem. Dabei bedienen wir uns der Standard-Funktionalität Wareneingang/Warenausgang (ohne Kommissionierung) und ab dem Moment setzt als technische Grundlage das Sievers SNC/Logistics Modul ein. Das funktioniert auch alles ganz toll und ohne Störungen. Nun haben wir aber alles kommissioniert, verpackt, etc. und wollen den Warenausgang verbuchen.
Sofern ich den Warenausgang komplett buche funktioniert das auch einwandfrei.

Nun gibt es aber die Anforderung, dass ein Warenausgang aus 1-n Herkunftsbelegen (z.B. mehrere Verkaufsaufträge, Artikel Buch.-Blätter, Reklamationen, o.ä.) bestehen kann. Weiterhin - bzw. daraus resultierend - besteht nun noch die Anforderung, dass diese Herkunftsbelege einzeln aus dem Warenausgang heraus gebucht werden können und da liegt der Knackpunkt. Im Ersten Moment dachte ich, dass man das ja über das "Zu liefern" Feld im Warenausgang lösen kann, aber scheinbar scheint das nicht sauber zu funktionieren. Ich setze das "Zu liefern" über eine Funktion mit folgendem Code:
Code:
lcWhseShptNo := "No.";
lcSourceNo := pSourceNo;

lcRecWhseShptHdr.GET("No.");

PostWarehouse.CheckWarehouseActivityHeader(lcRecWhseShptHdr);

lcRecWhseShptLine.RESET();
lcRecWhseShptLine.SETCURRENTKEY("No.","Source Document","Source No.");
lcRecWhseShptLine.SETRANGE("No.", "No.");
IF (pSourceNo <> '') THEN
  lcRecWhseShptLine.SETRANGE("Source No.", pSourceNo);
IF (lcRecWhseShptLine.ISEMPTY()) THEN
  ERROR(Text002);

IF (pSourceNo <> '') THEN BEGIN
  lcRecWhseShptLine.SETFILTER("Source No.", '<>%1', pSourceNo);
  lcRecWhseShptLine.MODIFYALL("Qty. to Ship", 0, TRUE);

  lcRecWhseShptLine.SETRANGE("Source No.", pSourceNo);
  lcRecWhseShptLine.FINDSET(TRUE);
  REPEAT
    lcRecWhseShptLine.VALIDATE("Qty. to Ship", lcRecWhseShptLine."Qty. Outstanding");
    lcRecWhseShptLine.MODIFY(TRUE);
  UNTIL lcRecWhseShptLine.NEXT = 0;

  lcRecWhseShptLine.SETRANGE("Source No.");
END;

lcRecWhseShptLine.FINDFIRST();
IF (pPrint) THEN
  lcWhsePostShptPrintShipInvoice.RUN(lcRecWhseShptLine)
ELSE
  lcWhsePostShptShipInvoice.RUN(lcRecWhseShptLine);

lcRecWhseShptLine.RESET;
lcRecWhseShptLine.SETCURRENTKEY("No.","Sorting Sequence No.");
lcRecWhseShptLine.SETRANGE("No.", lcWhseShptNo);
lcRecWhseShptLine.SETFILTER("Source No.", '<>%1', pSourceNo);
IF (lcRecWhseShptLine.FINDSET(TRUE)) THEN BEGIN
  REPEAT
    lcRecWhseShptLine.VALIDATE("Qty. to Ship", lcRecWhseShptLine."Qty. Outstanding");
    lcRecWhseShptLine.MODIFY(TRUE);
  UNTIL lcRecWhseShptLine.NEXT = 0;
END;


Interessanterweise interessiert sich NAV aber nicht wirklich dafür und bucht einfach mal froh und munter alle Zeilen und somit alle enthaltenen Herkunftsbelege durch. Zwischenzeitlich hatte ich auch EINMAL ein Phänomen, dass die richtigen Zeilen durchgebucht wurden, der WA dann aber gelöscht wurde und somit die noch nicht gebuchten Zeilen auch weg waren.

Habt Ihr schon mal so eine "Teillieferung" im Warenausgang umgesetzt und wenn ja wie? Habt Ihr einen Tipp/Idee was ich falsch mache? Stehe irgendwie gerade mächtig auf dem Schlauch :(

Danke
Christoph
Zuletzt geändert von Christoph am 26. Juni 2012 09:24, insgesamt 1-mal geändert.

Re: Teillieferung eines Warenausgang

26. Juni 2012 08:57

Hallo,

im Standard sollte das kein Problem sein.
Was mir aber aufgefallen ist, ist der "lcRecWhseShptLine.MODIFYALL("Qty. to Ship", 0, TRUE);", der ruft keine Feldtrigger auf, sondern nur den Tabellentrigger. Das dazu führt dazu, dass die "..(Base)"- Felder nicht aktualisiert werden. Was wiederum dazu führen könnte, dass in der WA- Zeile noch die volle "Menge zu Liefern (Basis)" drin steht, und er deshalb die volle Menge bucht.

Gruß, Fiddi

Re: Teillieferung eines Warenausgang

26. Juni 2012 09:24

Stimmt auffallend... ist fast schon ein bisschen peinlich, aber jetzt läufts wie am Schnürchen :mrgreen:

Merci :)