BC26 - Welches Event für Sachposten ändern/ergänzen

Heute 12:16

Hi,

beim Buchen von EK Rechung und VK Rechnungen soll die Sachposten Beschreibung geändert werden, und ein neues Feld soll befüllt werden.

In Sachposten Tabelle habe ich ein neues Feld : "Vendor Order No." , das Feld ist auch neu in "Gen. Journal Line"

da benutze ich momentan die Events:
Code:
    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Purch. Post Invoice Events", OnPostLedgerEntryOnBeforeGenJnlPostLine, '', true, true)]
    local procedure PurchOnPostLedgerEntryOnBeforeGenJnlPostLine(
        var GenJnlLine: Record "Gen. Journal Line"; var PurchHeader: Record "Purchase Header"; var TotalPurchLine: Record "Purchase Line"; var TotalPurchLineLCY: Record "Purchase Line"; PreviewMode: Boolean; SuppressCommit: Boolean; var GenJnlPostLine: Codeunit "Gen. Jnl.-Post Line"
    )
    var
        SalesSetup: Record "Sales & Receivables Setup";
    begin
        if (Purchheader."Document Type" = PurchHeader."Document Type"::Invoice) then begin
            SalesSetup.Get();
            if SalesSetup.CustomGLEntryDescription then begin
                GenJnlLine."Vendor Order No." := PurchHeader."Vendor Order No.";
            end;
        end;
    end;


und

Code:
    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Purch. Post Invoice Events", OnAfterPrepareGenJnlLine, '', true, true)]
    local procedure PurchOnAfterPrepareGenJnlLine(
        var GenJnlLine: Record "Gen. Journal Line"; PurchHeader: Record "Purchase Header"; InvoicePostingBuffer: Record "Invoice Posting Buffer"
    )
    var
        SalesSetup: Record "Sales & Receivables Setup";
    begin
        if (Purchheader."Document Type" = PurchHeader."Document Type"::Invoice) then begin
            SalesSetup.Get();
            if SalesSetup.CustomGLEntryDescription then begin
                GenJnlLine."Vendor Order No." := PurchHeader."Vendor Order No.";
            end;
        end;
    end;


und
Code:
    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Gen. Jnl.-Post Line", 'OnBeforeInsertGLEntry', '', true, true)]
    local procedure TransferVendorOrderNo(var GLEntry: Record "G/L Entry"; GenJnlLine: Record "Gen. Journal Line")
    begin
        GLEntry."Vendor Order No." := GenJnlLine."Vendor Order No.";
    end;


Beim Buchen der Kreditor Rechnung , mit 1 Artikelzeile, werden mir 5 Sachposten generiert, davon haben 2 Posten in der Beschreibung "Direkte Kosten ... " , bei diesen Posten wird das Feld "Vendor Order No." nicht übernommen.

Das legt mir den Verdacht nahe, dass es vielleicht noch ein "allgemeineren" Event gibt wo ich den Sachposten ändern kann,

auf der Verkaufsseite versuche ich die Beschreibung zu ändern:

Code:
    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales Post Invoice Events", OnPostLedgerEntryOnBeforeGenJnlPostLine, '', true, true)]
    local procedure SalesOnBeforePostCustomerEntry(var GenJnlLine: Record "Gen. Journal Line"; var SalesHeader: Record "Sales Header"; var TotalSalesLine: Record "Sales Line"; var TotalSalesLineLCY: Record "Sales Line"; PreviewMode: Boolean; SuppressCommit: Boolean; var GenJnlPostLine: Codeunit "Gen. Jnl.-Post Line")
    var
        SalesSetup: Record "Sales & Receivables Setup";
        locItemDescription: Text;
    begin
        SalesSetup.Get();
        if SalesSetup.CustomGLEntryDescription then begin
            If (GenJnlLine."Document Type" = GenJnlLine."Document Type"::Invoice) then begin
                locItemDescription := GetItemDescriptionFromFirstSalesLine(SalesHeader);
                if (locItemDescription <> '') then
                    GenJnlLine.Description := CopyStr(GenJnlLine.Description + ' - ' + SalesHeader."Sell-to Customer No." + ' - ' + locItemDescription, 1, 100);
            end;
        end;
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales Post Invoice Events", OnAfterPrepareGenJnlLine, '', true, true)]

    local procedure SalesOnAfterPrepareGenJnlLine(var GenJnlLine: Record "Gen. Journal Line"; SalesHeader: Record "Sales Header"; InvoicePostingBuffer: Record "Invoice Posting Buffer")
    var
        SalesSetup: Record "Sales & Receivables Setup";
        locItemDescription: Text;
    begin
        SalesSetup.Get();
        if SalesSetup.CustomGLEntryDescription then begin
            If (GenJnlLine."Document Type" = GenJnlLine."Document Type"::Invoice) then begin
                locItemDescription := GetItemDescriptionFromFirstSalesLine(SalesHeader);
                if (locItemDescription <> '') then
                    GenJnlLine.Description := CopyStr(GenJnlLine.Description + ' - ' + SalesHeader."Sell-to Customer No." + ' - ' + locItemDescription, 1, 100);
            end;
        end;
    end;


Aber auch hier werden die Sachposten, welche "Direkte Kosten" in der Beschreibung bekommen, nicht geändert.

Kann mir jemand eine passende Stelle /Event verraten wo ich die Sachposten "manipulieren" kann.

Vielen Dank.

Re: BC26 - Welches Event für Sachposten ändern/ergänzen

Heute 12:37

Hallo,

für die Belegbuchungen solltest du schon die Buchungsbeschreibung im Belegkopf ändern können. Wenn da niemand anderes dazwischen funkt, sollte das auch in den Posten ankommen.

Gruß Fiddi

Re: BC26 - Welches Event für Sachposten ändern/ergänzen

Heute 12:43

So sieht das bei mir aus:
sachposten.jpg


Da die Externe BelegNr ja auch durchgehend in allen Sachposten ist, hätte ich nun vermuttet dass das neue Feld "Kreditor Bestell Nr" auch überall hinzugefügt würde.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: BC26 - Welches Event für Sachposten ändern/ergänzen

Heute 13:04

Die Sachposten mit "Direkte Kosten..." kommen doch sicher aus der Lagerregulierung, die hier offenbar automatisch mitgebucht wird. Daher haben die keine Belegart. In Codeunit "Purch.-Post" wird Codeunit "Inventory Adjustment" aufgerufen, da müsstest du mal auf die Suche gehen wie du das weiter durchreichen kannst.

Re: BC26 - Welches Event für Sachposten ändern/ergänzen

Heute 13:42

Guter Tipp, mit der Lagerregulierung.

Diese generierten Sachposten kann ich im Event OnPostInvtPostBufOnAfterInitGenJnlLine manipulieren,
kann mir jemand sagen wie ich an der Stelle ein Bezug zur Bestellung / Auftrag bekommen kann?
ValueEntry Source No, hätte ich gedacht, ist aber leer, und auf die gebuchten zeilen zugreifen (Document No), geht nicht, da diese scheinbar noch nicht existieren.

Code:
    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Inventory Posting To G/L", OnPostInvtPostBufOnAfterInitGenJnlLine, '', true, true)]
    local procedure ChangeGenJnlLineInvPost(var GenJournalLine: Record "Gen. Journal Line"; var ValueEntry: Record "Value Entry")
    var
        PurchLine: Record "Purchase Line";
        SalesLine: Record "Sales Line";
    begin

        if ValueEntry."Source Type" = ValueEntry."Source Type"::Vendor then begin
            PurchLine.SetRange("Document No.", ValueEntry."Source No.");
            PurchLine.SetRange(Type, PurchLine.Type::Item);
            PurchLine.SetRange("No.", ValueEntry."Item No.");
            if PurchLine.findfirst() then
                GenJournalLine.Description := CopyStr(ValueEntry."Item No." + PurchLine.Description, 1, MaxStrLen(GenJournalLine.Description));
        end else
            if ValueEntry."Source Type" = ValueEntry."Source Type"::Customer then begin
                SalesLine.SetRange("Document No.", ValueEntry."Source No.");
                SalesLine.SetRange(Type, PurchLine.Type::Item);
                SalesLine.SetRange("No.", ValueEntry."Item No.");
                if SalesLine.findfirst() then
                    GenJournalLine.Description := CopyStr(SalesLine.Description, 1, MaxStrLen(GenJournalLine.Description));
            end;
    end;

Re: BC26 - Welches Event für Sachposten ändern/ergänzen

Heute 14:05

"Lagerregulierung buchen" läuft ja über die Tabelle "Post Value Entry to G/L". Dort hast du die "Value Entry No." die reguliert wird, d. h. den kannst du holen und von dort mit der "Document No." den gebuchten Beleg holen. Du muss jetzt nur noch einen Event Publisher finden der dir das liefert.

Re: BC26 - Welches Event für Sachposten ändern/ergänzen

Heute 14:14

elTorito hat geschrieben:Diese generierten Sachposten kann ich im Event OnPostInvtPostBufOnAfterInitGenJnlLine manipulieren,
kann mir jemand sagen wie ich an der Stelle ein Bezug zur Bestellung / Auftrag bekommen kann?

Das ist nicht immer ein 1:1 Bezug. Die Sachposten ergeben sich aus Regulierungswertposten der Transaktion.
Aber
  • Artikelposten und Wertposten haben 1:n Beziehung
  • Artikelposten und Artikelausgleichsposten haben auch 1:n Beziehung, also ein Verkauf kann sich z.B. von mehreren Einkäufen/Bestellungen abgebucht haben, wenn die Verkaufsmenge höher als die Restmenge des ältesten Artikelpostens, der anfangs benutzt wurde, um den Verkauf abzubuchen. Dann kommt nach FIFO der nächstjüngere Artikelposten dran usw., bis die Verkaufsmenge gedeckt ist
Um alle möglichen Bezüge einzusammeln, muss man sich durch alle Tabellen durcharbeiten.

Re: BC26 - Welches Event für Sachposten ändern/ergänzen

Heute 14:19

Ich würde auch in die Sachposten aus der Lagerregulierung nicht die Bestellnummer oder ähnliches reinschreiben. Das sollte genügen wenn die in den Posten im Materialaufwand steht, in denen in Vorratsvermögen und Bestandsveränderung hat die m. E. nix zu suchen.

Re: BC26 - Welches Event für Sachposten ändern/ergänzen

Heute 14:44

Hallo,

Das ist nicht immer ein 1:1 Bezug. Die Sachposten ergeben sich aus Regulierungswertposten der Transaktion.

und wenn due mit Seriennummern arbeitest, hast du pro Belegzeile u.U. eine Beziehung 1:N:N (Beleg, Artikelposten, Wertposten)

Wenn du das alles nachhalten willst während der Buchung bremst du das System so dermaßen aus, dass das arbeiten damit keinen Spaß mehr macht.

Gruß Fiddi