[Gelöst] Artikelbuchungsblatt mit Artikelposten füllen

26. Oktober 2006 12:46

Hi,

habe ein Problem mit unten stehende Funktion, ich möchte ein Artikelbuchungsblatt befüllen mit Daten aus den Artikelposten, aber irgendwie werden die Felder nicht richtig gefüllt, so das beim buchen des ABB Fehler auftreten, EP oder Menge wird nicht richtig verbucht, bzw mit Wert Null.

Manchmal werden Sachen aus dem Lager für Eigenbedarf benutzt, um den Mitarbeitern die Ausbuchung über ein ABB zu ersparen, haben wir ein Lager Verbrauch erstellt, wenn etwas gebracuht wird, wird dann eine Umlagerung von LAGER STANDORT zum LAGER VERBRAUCH erstellt. Da die ARtikel ja verbraucht wurden, stimmt natürlich der positive Lager Bestand des Lager Verbrauch nicht. und müssen ausgebucht werden.

Hier soll meine FUnktion ins Spiel kommen, und zwar soll Sie alle offenen Artikelposten im Lager Verbrauch rauspicken und in ein Artikelbuchungsblatt zusammenfassen, so das nur noch gebucht werden muss. Das klappt aber leider nicht :(

Code:

// Prüfen ob Buchungsblatt gefüllt ist, wenn ja, Funktion abbrechen
ItemJournalLine.SETFILTER("Journal Template Name",'ARTIKEL');
ItemJournalLine.SETFILTER("Journal Batch Name",'VERBRAUCH');

// PKA280206 -->
// Prüft ob im Lager Offene Posten im Lager Verbrauch sind und übertraegt diese in ein Artikelbuchungsblatt
ItemLedgerEntry.SETFILTER("Location Code", 'VERBRAUCH');
ItemLedgerEntry.SETFILTER(Open, 'Ja');
ItemLedgerEntry.SETFILTER("Document No.", 'UML*');


IF ItemLedgerEntry.FIND('-') THEN REPEAT
  ItemJournalLine.SETFILTER("Applies-to Entry",FORMAT(ItemLedgerEntry."Entry No."));
  IF NOT ItemJournalLine.FIND('-') THEN BEGIN
    ZL += 10000;
    ItemJournalLine.INIT;
    ItemJournalLine."Journal Template Name" := 'ARTIKEL';
    ItemJournalLine."Journal Batch Name" := 'VERBRAUCH';
    ItemJournalLine."Line No." := ZL;
    ItemJournalLine.INSERT;
    ItemJournalLine.VALIDATE("Document No.",'VERBRAUCH');
    ItemJournalLine.VALIDATE("Posting Date",ItemLedgerEntry."Posting Date");
    ItemJournalLine.VALIDATE("Entry Type",ItemLedgerEntry."Entry Type");
    ItemJournalLine.VALIDATE("Item No.",ItemLedgerEntry."Item No.");
    ItemJournalLine.VALIDATE("Location Code",'VERBRAUCH');
    ItemJournalLine.VALIDATE("Variant Code",ItemLedgerEntry."Variant Code");
    ItemJournalLine.VALIDATE("Entry Type",3);
    ItemJournalLine.VALIDATE("Number of Parcel",ItemLedgerEntry."Number of Parcel"); // Anzahl pro Paket
    ItemJournalLine.VALIDATE(Quantity,ItemLedgerEntry."Quantity (Base)"); // Menge
    ItemJournalLine."Quantity (Base)" := ItemLedgerEntry."Quantity (Base)"; // Menge Basis
    ItemJournalLine.VALIDATE("Applies-to Entry",ItemLedgerEntry."Entry No."); // Ausgleich-mit Lfd. Nr.
    ItemJournalLine.MODIFY;
  END ELSE BEGIN
    MESSAGE(FORMAT(ItemLedgerEntry."Entry No.") + ' - ' +  FORMAT(ItemJournalLine."Applies-to Entry"));
  END;
UNTIL ItemLedgerEntry.NEXT=0;
Zuletzt geändert von elTorito am 27. Oktober 2006 12:41, insgesamt 1-mal geändert.

Re: Artikelbuchungsblatt anhand von Artikelposten füllen

26. Oktober 2006 13:06

elTorito hat geschrieben:Das klappt aber leider nicht :(


Ein bisschen mehr Informationen müsstest du schon liefern. So ist es schwierig. Was klappt denn nicht? Fehlermeldungen?

26. Oktober 2006 13:15

Keine Fehlermeldung, waere schön wenn es eine gebe, der bucht aber ohne weiteres durch, so wie die Funktion oben steht, wurde kein Einstandspreis verbucht, sprich nach der Ausbuchung hab ich Einstandsbetrag = 0, und wenn ich Lagewert Bericht ancshaue habe ich noch die Stückzahl samt wert stehen, die ich vor der asubuchung hatte. Mit dem Unterschied der Soll Kosten (welche nach der ausbuchung Menge = 0 und Wert = Wert der Artikel betragen)

26. Oktober 2006 13:37

Das ist eigenartig, wirklich. Du füllst relativ viele Felder mit VALIDATE. Könnte es sein, dass dadurch gewisse Werte im Hintergrund wieder geändert werden, nachdem du sie z.B. einige Zeilen vorher eingefüllt hast? Das System führt ja alle Codezeilen aus, die in den Valdiate-Triggern drinstehen.

Ich mache das jeweils so. Ich lasse die Funktion das Journal füllen. Dann füge ich unter einer oder zwei maschinell erstellter Zeilen manuell Zeilen ein und tippe die Werte von der maschinell erstellen ab. Dann schaue ich mir die Zeilen Feld für Feld an indem ich über den ObjectDesigner die Tabelle starte und die Zeilen untereinander darstelle. So sehe ich sofort, ob die Records abweichen.

26. Oktober 2006 14:07

Wenn ich z.B. statt :

ItemJournalLine."Quantity (Base)" := ItemLedgerEntry."Quantity (Base)"; // Menge Basis

ein

ItemJournalLine.VALIDATE("Quantity (Base)",ItemLedgerEntry."Quantity (Base)");

mache, validiert der mir nichts. (Menge Basis = 0 wird dann ins ABB eingetragen) , IMHO stoßt die Validierung der Menge alle anderen Prozesse an, Berechnung des EP , Betrag usw...

Werde jetzt nochmal die Felder vergleichen. Vielleicht hab ich ja etwas übersehen.

26. Oktober 2006 14:19

Ja, das ist korrekt. Die Validierung muss natürlich durchgeführt werden, wenn die Berechnungen auf dem betroffenen Feld ausgeführt werden sollen. Manchmal kommt es auf die Reihenfolge an, in welcher die Werte gefüllt werden. Deshalb erfasse ich immer auch manuelle Zeilen. Dann laufe ich so über die Erfassung, wie es der Anwnder normalerweise auch tut.

26. Oktober 2006 14:45

Ein Filter auf "Positive" bei den Artikelposten ist auch notwendig.

Der vorläufige Einstandspreis kommt vom Artikel oder der Lagerhaltungskarte, der regulierte Einstandsbetrag aber von der Zugangsbuchung ( bei Lagerabgangsmethode FIFO, LIFO oder Ausgewählt). Wenn hier
"Applies-to Entry" gefüllt wird und die Lagerregulierung läuft, muss der Einstandsbetrag an dem Abgangsposten stehen. Das ist nur dann nicht der Fall wenn der Artikel bei "Ohne Lagerbewertung" ein Häkchen hat.

26. Oktober 2006 15:08

Sogesehen muss ich also bei den Feldern, welche in der Tabelle kein OnValidate haben, eigentlich kein VALIDATE(xyz,abc); machen ?

26. Oktober 2006 15:34

Ja, VALIDATE macht nur dort Sinn, wo auf dem OnValidate-Trigger des Feldes Code hinterlegt ist.

Zudem könnte es sein, dass irgendwann später mal Code im Trigger hinterlegt wird, von dem du keine Kenntnis hast. Da wird dann plötzlich Code ausgeführt der u.U. zu Fehlern führen kann, über die man sich dann sehr wundert (so nach dem Motto: bis jetzt lief doch alles korrekt...)

27. Oktober 2006 12:40

So. Hab jetzt alle Felder identisch, bis auf das Feld "Art", welches Option ist und die Werte Arbeitsplatzgruppe oder Arbeitsplatz haben kann. Wofür wird das verwendet?

Bei den restlichen Feldern kam es scheinbar wirklich auf die Reihenfolge der Validierung an.

Wenn ich Versuche Art zu validieren, mit 0 (Arbeitsplatzgruppe) bekomme ich ein Fehler das Postenart Istmeldung sein soll .... hmm... also bleibts erstmal leer, anschl. Buchung scheint Ok zu sein.

Nun muss ich noch prüfen warum einige Felder im Artikelposten falsch gefüllt sind. Nach der Ausbuchung über den Umlagerungsauftrag. Vermute aber mal das es sich hierbei um ein Fehler der für uns angepassten Version ist.

Also sag ich mal : gelöst.

27. Oktober 2006 12:58

Na fein, Wochenende verdient :-D