11. Dezember 2025 15:05
trigger OnClosePage()
var
SkipWriteToDatabase: Boolean;
begin
SkipWriteToDatabase := false;
OnBeforeClosePage(Rec, SkipWriteToDatabase, CurrentRunMode, CurrentSourceType, SourceTrackingSpecification, SourceQuantityArray, TotalTrackingSpecification);
if UpdateUndefinedQty() and not SkipWriteToDatabase then
WriteToDatabase();
if CurrentRunMode = CurrentRunMode::"Drop Shipment" then
case CurrentSourceType of
Database::"Sales Line":
SynchronizeLinkedSources(StrSubstNo(Text015, Text016));
Database::"Purchase Line":
SynchronizeLinkedSources(StrSubstNo(Text015, Text017));
end;
....
15. Dezember 2025 12:47
16. Dezember 2025 20:24
#region Sync Charge / Item Tracking
[EventSubscriber(ObjectType::Codeunit, codeunit::"Purch. Line-Reserve", OnCallItemTrackingOnBeforeItemTrackingFormRunModal, '', false, false)]
local procedure OnBeforeItemTrackingRunModal(var PurchLine: Record "Purchase Line"; var ItemTrackingForm: Page "Item Tracking Lines")
begin
// Nur für Spezialauftrag
if IsSpecialOrder(PurchLine) then begin
// Sicherstellen, dass wir im Drop-Shipment-ähnlichen Modus sind
ItemTrackingForm.SetRunMode(Enum::"Item Tracking Run Mode"::"Drop Shipment");
// Second Source explizit korrekt setzen
ItemTrackingForm.SetSecondSourceRowID(ComposeSalesLineRowIDForSpecialOrder(PurchLine));
end;
end;
[EventSubscriber(ObjectType::page, page::"Item Tracking Lines", OnSetSourceSpecOnAfterSetCurrentSourceRowID, '', false, false)]
local procedure OnSetSourceSpecOnAfterSetCurrentSourceRowID(CurrentRunMode: Enum "Item Tracking Run Mode"; var CurrentSourceRowID: Text[250]; TrackingSpecification: Record "Tracking Specification")
begin
if IsSpecialOrder(TrackingSpecification) then begin //ja
// Drop Shipment erzwingen
CurrentRunMode := CurrentRunMode::"Drop Shipment";
// CurrentSourceRowID setzen (Purchase / Special Order)
CurrentSourceRowID := ComposePurchLineRowIDForSpecialOrder(TrackingSpecification);
end;
end;
local procedure IsSpecialOrder(PurchaseLine: Record "Purchase Line"): Boolean
begin
exit(
PurchaseLine."Special Order" and
(PurchaseLine."Special Order Sales No." <> '')
);
end;
local procedure IsSpecialOrder(TrackingSpecification: Record "Tracking Specification"): Boolean
var
PurchLine: Record "Purchase Line";
begin
if TrackingSpecification."Source Type" = DATABASE::"Purchase Line" then begin
PurchLine.Setrange("Document Type", PurchLine."Document Type"::Order);
PurchLine.Setrange("Document No.", TrackingSpecification."Source ID");
PurchLine.SetRange("Line No.", TrackingSpecification."Source Ref. No.");
if PurchLine.FindLast() then begin
exit(PurchLine."Special Order" and (PurchLine."Special Order Sales No." <> ''));
end;
end;
exit(false);
end;
local procedure ComposePurchLineRowIDForSpecialOrder(TrackingSpecification: Record "Tracking Specification"): Text[250]
begin
exit(ItemTrackingManagement.ComposeRowID(
Database::"Purchase Line",
TrackingSpecification."Source Subtype",
TrackingSpecification."Source ID",
TrackingSpecification."Source Batch Name",
TrackingSpecification."Source Prod. Order Line",
TrackingSpecification."Source Ref. No."));
end;
local procedure ComposeSalesLineRowIDForSpecialOrder(PurchLine: record "Purchase Line"): Text[250]
begin
exit(ItemTrackingManagement.ComposeRowID(
Database::"Sales Line",
1,
PurchLine."Special Order Sales No.",
'',
0,
PurchLine."Special Order Sales Line No.")
);
end;
#endregion
var
ItemTrackingManagement: Codeunit "Item Tracking Management";