[Gelöst] Inventurauftrag enthält keine neuen Artikel

28. November 2008 11:17

Moin,
Bei der Erstellung eines neuen Inventurauftrags lasse ich die Auftragszeilen berechnen. Dabei habe ich ein Häkchen gesetzt bei der Option "Artikel nicht auf Lager".
Es werden die entsprechenden Inventurzeilen erstellt. Es werden aber leider keine neuen Artikel (ohne Posten) aufgelistet.

Im Inventur Buch.-blatt werden die neuen Artikel (ohne Posten) jedoch aufgelistet.

Wie bekomme ich die neuen Artikel (ohne Posten) in einen Inventurauftrag?
Zuletzt geändert von WieMa am 3. Dezember 2008 10:23, insgesamt 1-mal geändert.

Re: Inventurauftrag enthält keine neuen Artikel

28. November 2008 16:26

Das Inventurbuchblatt hatte in älteren Versionen noch das gleiche Problem :-).
Für die neuen Artikel kann ein Entwickler z.B. ein paar Dummyartikelposten ohne Menge anlegen und nach der Erstellung wieder löschen, siehe hier, das Ganze aber nur wenn man genau weiß, was man da tut! Das muss dann aber jedes Mal wieder passieren. Besser wäre daher auf jeden Fall, die Berechnungsroutine der Inventuraufträge entsprechend dem aktuellen Standard anzupassen, dann benötigt man diese zeitraubenden Klimmzüge nicht mehr.

Re: Inventurauftrag enthält keine neuen Artikel

3. Dezember 2008 10:23

@Kowa
Dank Dir für die Info.

Re: [Gelöst] Inventurauftrag enthält keine neuen Artikel

3. Dezember 2008 11:29

Ergänzung dazu: Die neue Berechnungsroutine (in Report 790) ist erst ab Version 5 SP1 verfügbar, und setzt Lagerhaltungsdaten auch für alle neuen Artikel ohne Posten voraus (sonst erscheint nur ein Zeile ohne Lagerort, aber nicht eine pro Lagerort).

Re: [Gelöst] Inventurauftrag enthält keine neuen Artikel

3. Dezember 2008 12:47

Aus aktuellem Anlass :wink: habe ich in der SP1 Version von Report 790 in der Funktion AddZeroQtySKU den Code ergänzt (ab //- START), damit auch ohne vorhandene Lagerhaltungsdaten eine Zeile für Artikel ohne Posten mit Menge 0 pro Lagerort (ein eventueller Lagerortfilter auf der Artikeltabelle wird dabei berücksichtigt) erscheint. ItemLedgEntry2 und Location2 müssen als zusätzliche (lokale) Variablen angelegt werden.
Code:
IF SKU.FIND('-') THEN BEGIN
  QuantityOnHandBuffer.RESET;
  QuantityOnHandBuffer.SETRANGE("Item No.",Item."No.");
  REPEAT
    QuantityOnHandBuffer.SETRANGE("Variant Code",SKU."Variant Code");
    QuantityOnHandBuffer.SETRANGE("Location Code",SKU."Location Code");
      IF NOT QuantityOnHandBuffer.FIND('-') THEN BEGIN
        CLEAR(QuantityOnHandBuffer);
        QuantityOnHandBuffer."Item No." := SKU."Item No.";
        QuantityOnHandBuffer."Variant Code" := SKU."Variant Code";
        QuantityOnHandBuffer."Location Code" := SKU."Location Code";
        QuantityOnHandBuffer.INSERT;
     END;
  UNTIL SKU.NEXT = 0;
END ELSE BEGIN  // - START wenn keine Lagerhaltungsdaten vorhanden sind
  ItemLedgEntry2.SETCURRENTKEY("Item No.");
  ItemLedgEntry2.SETRANGE("Item No.",Item."No.");
  IF NOT ItemLedgEntry2.FIND('-') THEN BEGIN
    Location2.SETFILTER(Code,Item.GETFILTER("Location Filter"));
    IF Location2.FIND('-') THEN REPEAT
    QuantityOnHandBuffer.RESET;
    QuantityOnHandBuffer.SETRANGE("Item No.",Item."No.");
    QuantityOnHandBuffer.SETRANGE("Location Code",Location2.Code);
      IF NOT QuantityOnHandBuffer.FIND('-') THEN BEGIN
          CLEAR(QuantityOnHandBuffer);
          QuantityOnHandBuffer."Item No." := Item."No.";
          QuantityOnHandBuffer."Location Code" := Location2.Code;
          QuantityOnHandBuffer.INSERT;
      END;
    UNTIL Location2.NEXT = 0;
  END;
END;
// + ENDE

Re: [Gelöst] Inventurauftrag enthält keine neuen Artikel

4. Dezember 2008 16:18

@Kowa
Perfekt, nochmals vielen Dank.

PS. Sind wir die Einzigsten die eine Inventur mit ungebuchten Artikeln machen? :-)

Re: [Gelöst] Inventurauftrag enthält keine neuen Artikel

5. Dezember 2008 12:32

Nachtrag: Wenn der Artikel in einem Lager Artikelposten hat, aber in einem anderen Lager Inventur gemacht wird, für das keine Posten existieren, dann wird es etwas komplexer die Nullzeilen zu erzeugen. Außerdem können ggf. noch Varianten für den Artikel existieren, dann muss pro Variante eine Zeile generiert werden und eine ohne Variantencode.
Ich habe den Code dazu noch mal erweitert. ItemVariant2 kommt als Variable auch noch dazu. Tests sind jederzeit willkommen :-).
Code:
IF SKU.FIND('-') THEN BEGIN
  QuantityOnHandBuffer.RESET;
  QuantityOnHandBuffer.SETRANGE("Item No.",Item."No.");
  REPEAT
    QuantityOnHandBuffer.SETRANGE("Variant Code",SKU."Variant Code");
    QuantityOnHandBuffer.SETRANGE("Location Code",SKU."Location Code");
    IF NOT QuantityOnHandBuffer.FIND('-') THEN BEGIN
      CLEAR(QuantityOnHandBuffer);
      QuantityOnHandBuffer."Item No." := SKU."Item No.";
      QuantityOnHandBuffer."Variant Code" := SKU."Variant Code";
      QuantityOnHandBuffer."Location Code" := SKU."Location Code";
      QuantityOnHandBuffer.INSERT;
    END;
  UNTIL SKU.NEXT = 0;
END ELSE BEGIN  // - GENERAL wenn keine Lagerhaltungsdaten vorhanden sind
  ItemLedgEntry2.SETCURRENTKEY(
  "Item No.","Entry Type","Variant Code","Drop Shipment","Location Code","Posting Date");
  Location2.SETFILTER(Code,Item.GETFILTER("Location Filter"));
  IF Location2.FINDSET THEN REPEAT
    ItemVariant2.SETRANGE("Item No.",Item."No.");
    ItemVariant2.SETFILTER(Code,Item.GETFILTER("Variant Filter"));
    IF ItemVariant2.FINDSET THEN BEGIN  // Artikel hat Varianten
      REPEAT
          ItemLedgEntry2.SETRANGE("Item No.",Item."No.");
          ItemLedgEntry2.SETRANGE("Location Code",Location2.Code);
          ItemLedgEntry2.SETRANGE("Drop Shipment",FALSE);
          ItemLedgEntry2.SETRANGE("Variant Code",ItemVariant2.Code);
          IF NOT ItemLedgEntry2.FIND('-') THEN BEGIN
            QuantityOnHandBuffer.RESET;
            QuantityOnHandBuffer.SETRANGE("Item No.",Item."No.");
            QuantityOnHandBuffer.SETRANGE("Variant Code",ItemVariant2.Code); // neu
            QuantityOnHandBuffer.SETRANGE("Location Code",Location2.Code);
            IF NOT QuantityOnHandBuffer.FIND('-') THEN BEGIN
               CLEAR(QuantityOnHandBuffer);
               QuantityOnHandBuffer."Item No." := Item."No.";
               QuantityOnHandBuffer."Location Code" := Location2.Code;
               QuantityOnHandBuffer."Variant Code" := ItemVariant2.Code; // neu
               QuantityOnHandBuffer.INSERT;
            END;
          END;
     UNTIL ItemVariant2.NEXT = 0;
      // Artikel hat Varianten, zusätzlich noch einen Zeile ohne Variantencode
      ItemLedgEntry2.SETRANGE("Item No.",Item."No.");
      ItemLedgEntry2.SETRANGE("Location Code",Location2.Code);
      ItemLedgEntry2.SETRANGE("Drop Shipment",FALSE);
      ItemLedgEntry2.SETRANGE("Variant Code",'');
      IF NOT ItemLedgEntry2.FIND('-') THEN BEGIN
        QuantityOnHandBuffer.RESET;
        QuantityOnHandBuffer.SETRANGE("Item No.",Item."No.");
        QuantityOnHandBuffer.SETRANGE("Location Code",Location2.Code);
        IF NOT QuantityOnHandBuffer.FIND('-') THEN BEGIN
          CLEAR(QuantityOnHandBuffer);
          QuantityOnHandBuffer."Item No." := Item."No.";
          QuantityOnHandBuffer."Location Code" := Location2.Code;
          QuantityOnHandBuffer.INSERT;
        END;
      END;
    END ELSE BEGIN  // Artikel hat keine Varianten, allg. Variantenfilter liegt ggf. auf Artikeltabelle
      ItemLedgEntry2.SETRANGE("Item No.",Item."No.");
      ItemLedgEntry2.SETRANGE("Location Code",Location2.Code);
      ItemLedgEntry2.SETRANGE("Drop Shipment",FALSE);
      ItemLedgEntry2.SETFILTER("Variant Code",Item.GETFILTER("Variant Filter"));
      IF NOT ItemLedgEntry2.FIND('-') THEN BEGIN
        QuantityOnHandBuffer.RESET;
        QuantityOnHandBuffer.SETRANGE("Item No.",Item."No.");
        QuantityOnHandBuffer.SETRANGE("Variant Code",'');       
        QuantityOnHandBuffer.SETRANGE("Location Code",Location2.Code);
        IF NOT QuantityOnHandBuffer.FIND('-') THEN BEGIN
          CLEAR(QuantityOnHandBuffer);
          QuantityOnHandBuffer."Item No." := Item."No.";
          QuantityOnHandBuffer."Location Code" := Location2.Code;
          QuantityOnHandBuffer.INSERT;
        END;
      END;
    END;
  UNTIL Location2.NEXT = 0;
END;