CU 21, Checkwarehouse: Warum Fehler bei Istmeldung?

4. Mai 2015 14:32

Bei der Verbuchung von Artikelbuchblattzeilen wird u.a. die Funktion Checkwarehouse in Codeunit 21 durchlaufen.
Liefert die Funktion ShowError = TRUE, führt das zur Fehlermeldung
Lagerdurchlauf ist notwendig für Postenart = XX, Belegnr. = XX, Zeilennr. = XX.


Ich habe mal ein paar Fragen zum von mir markierten Abschnitt, von Programmierer zu Berater:
Code:
IF (ItemJnlLine.Quantity = 0) OR
   
(ItemJnlLine."Item Charge No." <> '') OR
   
(ItemJnlLine."Value Entry Type" IN
     
[ItemJnlLine."Value Entry Type"::Revaluation,ItemJnlLine."Value Entry Type"::Rounding]) OR
   ItemJnlLine
.Adjustment
THEN
  EXIT
;

GetLocation(ItemJnlLine."Location Code");
IF Location."Directed Put-away and Pick" THEN
  EXIT
;

CASE ItemJnlLine."Entry Type" OF
  
// >> --------- BITTE MAL HIER DRAUF ACHTEN --------------- >>
  ItemJnlLine."Entry Type"::Output:
    IF ((NOT Location."Require Receive" AND Location."Require Put-away") AND
        
(ItemJnlLine.Quantity >= 0)) OR
       
((NOT Location."Require Shipment" AND Location."Require Pick") AND
        
(ItemJnlLine.Quantity < 0))
    THEN
      IF ItemJnlLine
.LastOutputOperation(ItemJnlLine) THEN
        ShowError 
:= TRUE;
  // << --------- BITTE MAL HIER DRAUF ACHTEN ---------------- <<
  ItemJnlLine."Entry Type"::Consumption:
    IF ((NOT Location."Require Receive" AND Location."Require Put-away") AND
        
(ItemJnlLine.Quantity < 0)) OR
       
((NOT Location."Require Shipment" AND Location."Require Pick") AND
        
(ItemJnlLine.Quantity >= 0))
    THEN
      IF WhseValidateSourceLine
.WhseLinesExist(
           DATABASE::"Prod. Order Component",
           3,
           ItemJnlLine."Prod. Order No.",
           ItemJnlLine."Prod. Order Line No.",
           ItemJnlLine."Prod. Order Comp. Line No.",
           ItemJnlLine.Quantity)
      THEN
        ShowError 
:= TRUE;
END;
IF ShowError THEN
  ERROR
(
    Text012,
    ItemJnlLine.FIELDCAPTION("Entry Type"),
    ItemJnlLine."Entry Type",
    ItemJnlLine.FIELDCAPTION("Document No."),
    ItemJnlLine."Document No.",
    ItemJnlLine.FIELDCAPTION("Line No."),
    ItemJnlLine."Line No."); 


Im Falle einer Istmeldung:
  1. Warum sind die Prüfungen nur für den letzten Istmeldungsarbeitsgang (?? = ItemJnlLine.LastOutputOperation) relevant, und nicht generell?
  2. Warum darf Lagerort."Einlagerung erforderlich" nur zusammen mit Lagerort."Wareneingang erforderlich" verwendet werden?

Re: CU 21, Checkwarehouse: Warum Fehler bei Istmeldung?

4. Mai 2015 16:21

Also 1. kann ich dir beantworten: Weil nur beim letzten Arbeitsgang eine Lagerbewegung entstehen kann. Davor entstehen nur Kapazitätsposten.

Edit:

Zu 2. habe ich nochmal Code studiert. Diese Funktion wird nur durchlaufen, wenn die Istmeldung aus einer Einlagerung oder Kommissionierung entsteht. Dies kann bei der Einlagerung nur bedeuten, das eine Bestellung mit FA-Verbindung eingeht. Deshalb wird der Lagerort auf "Wareneingang erforderlich"=nein und "Einlagerung erforderlich"=ja überprüft.
Das ergibt wahrscheinlich in der Lagerbuchung eine Konstellation, die nicht sein darf. Aber ganz verstanden habe ich es noch nicht.

Re: CU 21, Checkwarehouse: Warum Fehler bei Istmeldung?

5. Mai 2015 08:35

Soweit ich das sehe, geht es darum, dass hier "spezielle Fälle" abgefangen werden, bei denen ein Lagerort zwar an die Logistik angebunden ist (Einlagerung, Kommissionierung), aber keine Warenein- und -ausgänge genutzt warden. Ich nehme an der fall der kompletten Logistik wird an anderer Stelle geprüft.

In Dynamics NAV 2015, aktuelles CU, wird dies mit der Funktion WhseOrderHandlingReqd() geprüft und ist etwas übersichtlicher.