We need two events in procedure CopySalesShptLinesToDoc.
The first one is intended to calculate the boolean SplitLine in a custom way.
At the moment there are no other available events that give me the SplitLine variable as var parameter. Moreover I need to skip the standard code where SplitLine is set. That's why IsHandled variable is necessary.
The second one is needed to add a further condition before testing the variable CopyItemTrkg.
There are no other available events to skip CollectItemTrkgPerPostedDocLine, according to my custom condition, I want to add.
In procedure CopySalesShptLinesToDoc of codeunit 6620 "Copy Document Mgt." we need two events:
procedure CopySalesShptLinesToDoc(ToSalesHeader: Record "Sales Header"; var FromSalesShptLine: Record "Sales Shipment Line"; var LinesNotCopied: Integer; var MissingExCostRevLink: Boolean)
var
ItemLedgEntry: Record "Item Ledger Entry";
TempTrkgItemLedgEntry: Record "Item Ledger Entry" temporary;
FromSalesHeader: Record "Sales Header";
FromSalesLine: Record "Sales Line";
ToSalesLine: Record "Sales Line";
TempFromSalesLineBuf: Record "Sales Line" temporary;
FromSalesShptHeader: Record "Sales Shipment Header";
TempItemTrkgEntry: Record "Reservation Entry" temporary;
TempDocSalesLine: Record "Sales Line" temporary;
PostedAssemblyHeader: Record "Posted Assembly Header";
ItemTrackingMgt: Codeunit "Item Tracking Management";
OldDocNo: Code[20];
NextLineNo: Integer;
NextItemTrkgEntryNo: Integer;
FromLineCounter: Integer;
ToLineCounter: Integer;
CopyItemTrkg: Boolean;
SplitLine: Boolean;
FillExactCostRevLink: Boolean;
CopyLine: Boolean;
InsertDocNoLine: Boolean;
IsHandled: Boolean;
begin
MissingExCostRevLink := false;
InitCurrency(ToSalesHeader."Currency Code");
OpenWindow();
OnBeforeCopySalesShptLinesToDoc(TempDocSalesLine, ToSalesHeader, FromSalesShptLine);
if FromSalesShptLine.FindSet() then
repeat
FromLineCounter := FromLineCounter + 1;
if IsTimeForUpdate() then
UpdateWindow(1, FromLineCounter);
if FromSalesShptHeader."No." <> FromSalesShptLine."Document No." then begin
FromSalesShptHeader.Get(FromSalesShptLine."Document No.");
TransferOldExtLines.ClearLineNumbers();
end;
IsHandled := false;
OnCopySalesShptLinesToDocOnBeforeTestPricesInclVAT(ToSalesHeader, IncludeHeader, RecalculateLines, IsHandled);
if not IsHandled then
FromSalesShptHeader.TestField("Prices Including VAT", ToSalesHeader."Prices Including VAT");
OnCopySalesShptLinesToDocOnBeforeFromSalesHeaderTransferFields(FromSalesShptHeader, FromSalesHeader, ToSalesHeader, FromSalesShptLine);
FromSalesHeader.TransferFields(FromSalesShptHeader);
OnCopySalesShptLinesToDocOnAfterFromSalesHeaderTransferFields(FromSalesShptHeader, FromSalesHeader);
FillExactCostRevLink :=
IsSalesFillExactCostRevLink(ToSalesHeader, 0, FromSalesHeader."Currency Code");
FromSalesLine.TransferFields(FromSalesShptLine);
FromSalesLine."Appl.-from Item Entry" := 0;
FromSalesLine."Copied From Posted Doc." := true;
CheckUpdateOldDocumentNoFromSalesShptLine(FromSalesShptLine, OldDocNo, InsertDocNoLine);
OnBeforeCopySalesShptLinesToBuffer(FromSalesLine, FromSalesShptLine, ToSalesHeader);
**Ishandled := false;
OnBeforeCopySalesShptLinesToBuffer2(Ishandled, FromSalesLine, FromSalesShptLine, ToSalesHeader, SplitLine);
if not Ishandled then begin**
SplitLine := true;
FromSalesShptLine.FilterPstdDocLnItemLedgEntries(ItemLedgEntry);
OnCopySalesShptLinesToDocOnBeforeSplitPstdSalesLinesPerILE(ItemLedgEntry, FromSalesShptLine);
if not SplitPstdSalesLinesPerILE(
ToSalesHeader, FromSalesHeader, ItemLedgEntry, TempFromSalesLineBuf,
FromSalesLine, TempDocSalesLine, NextLineNo, CopyItemTrkg, MissingExCostRevLink, FillExactCostRevLink, true)
then
if CopyItemTrkg then
SplitLine :=
SplitSalesDocLinesPerItemTrkg(
ItemLedgEntry, TempItemTrkgEntry, TempFromSalesLineBuf,
FromSalesLine, TempDocSalesLine, NextLineNo, NextItemTrkgEntryNo, MissingExCostRevLink, true)
else
SplitLine := false;
**end;**
if not SplitLine then begin
TempFromSalesLineBuf := FromSalesLine;
CopyLine := true;
end else
CopyLine := TempFromSalesLineBuf.FindSet() and FillExactCostRevLink;
OnCopySalesShptLinesToDocOnAfterSplitPstdSalesLinesPerILE(TempFromSalesLineBuf, FromSalesShptLine);
UpdateWindow(1, FromLineCounter);
if CopyLine then begin
NextLineNo := GetLastToSalesLineNo(ToSalesHeader);
OnCopySalesShptLinesToDocOnAfterCalcNextLineNo(ToSalesHeader, FromSalesShptLine, FromSalesHeader, NextLineNo, InsertDocNoLine, FromLineCounter, TempFromSalesLineBuf);
AsmHdrExistsForFromDocLine := FromSalesShptLine.AsmToShipmentExists(PostedAssemblyHeader);
InitAsmCopyHandling(true);
if AsmHdrExistsForFromDocLine then begin
QtyToAsmToOrder := FromSalesShptLine.Quantity;
QtyToAsmToOrderBase := FromSalesShptLine."Quantity (Base)";
GenerateAsmDataFromPosted(PostedAssemblyHeader, ToSalesHeader."Document Type");
end;
if InsertDocNoLine then begin
InsertOldSalesDocNoLine(ToSalesHeader, FromSalesShptLine."Document No.", 1, NextLineNo);
InsertDocNoLine := false;
end;
repeat
ToLineCounter := ToLineCounter + 1;
if IsTimeForUpdate() then
UpdateWindow(2, ToLineCounter);
OnCopySalesShptLinesToDocOnBeforeCopySalesLine(ToSalesHeader, TempFromSalesLineBuf, FromSalesShptLine, CopyItemTrkg);
if CopySalesDocLine(
ToSalesHeader, ToSalesLine, FromSalesHeader, TempFromSalesLineBuf, NextLineNo, LinesNotCopied, false,
"Sales Document Type From"::"Posted Shipment", CopyPostedDeferral, TempFromSalesLineBuf."Line No.")
then begin
**Ishandled := false;
OnCopySalesShptLinesToDocOnBeforeCopyItemTrkg(Ishandled, ToSalesHeader);
if not Ishandled then**
if CopyItemTrkg then begin
if SplitLine then
ItemTrackingDocMgt.CollectItemTrkgPerPostedDocLine(
TempItemTrkgEntry, TempTrkgItemLedgEntry, false, TempFromSalesLineBuf."Document No.", TempFromSalesLineBuf."Line No.")
else
ItemTrackingDocMgt.CopyItemLedgerEntriesToTemp(TempTrkgItemLedgEntry, ItemLedgEntry);
ItemTrackingMgt.CopyItemLedgEntryTrkgToSalesLn(
TempTrkgItemLedgEntry, ToSalesLine,
FillExactCostRevLink and ExactCostRevMandatory, MissingExCostRevLink,
FromSalesHeader."Prices Including VAT", ToSalesHeader."Prices Including VAT", true);
end;
OnAfterCopySalesLineFromSalesShptLineBuffer(
ToSalesLine, FromSalesShptLine, IncludeHeader, RecalculateLines, TempDocSalesLine, ToSalesHeader, TempFromSalesLineBuf, ExactCostRevMandatory);
end;
OnCopySalesShptLinesToDocOnAfterCopySalesLine(ToSalesHeader, ToSalesLine, FromSalesShptLine);
until TempFromSalesLineBuf.Next() = 0;
end;
OnCopySalesShptLinesToDocOnAfterCopySalesShptLineToSalesLine(FromSalesShptLine, ToSalesLine);
until FromSalesShptLine.Next() = 0;
CloseWindow();
OnAfterCopySalesShptLinesToDoc(ToSalesHeader, FromSalesShptLine, LinesNotCopied, MissingExCostRevLink);
end;
Why do you need this change?
We need two events in procedure CopySalesShptLinesToDoc.
The first one is intended to calculate the boolean SplitLine in a custom way.
At the moment there are no other available events that give me the SplitLine variable as var parameter. Moreover I need to skip the standard code where SplitLine is set. That's why IsHandled variable is necessary.
The second one is needed to add a further condition before testing the variable CopyItemTrkg.
There are no other available events to skip CollectItemTrkgPerPostedDocLine, according to my custom condition, I want to add.
Describe the request
In procedure CopySalesShptLinesToDoc of codeunit 6620 "Copy Document Mgt." we need two events:
Changes between **: