В версии 5.1 появилась такая полезная вещь как Трассировка товаров (Производство - История - Трассировка товаров). По ней можно посмотреть из какой партии был произведен расход в удобной древовидной форме. Но она работает исходя из названия только с товарами, где есть лоты или серийные номера. У меня на проекте ни того, ни другого не используется, по этому я решил заставить работать этот функционал для обыкновенных товаров без трассировки. Прошу не судить строго, но возможно это кому-то пригодиться.
Тестирование Кода на товарах с лотами или серийными номерами не производилось.
Нужно сделать следующие изменения в коде:
cu6520
функция FirstLevel(VAR TempTrackEntry...
исходный код
Код:
ItemLedgEntry.SETFILTER("Lot No.",LotNoFilter);
ItemLedgEntry.SETFILTER("Serial No.",SerialNoFilter);
ItemLedgEntry.SETFILTER("Item No.",ItemNoFilter);
ItemLedgEntry.SETFILTER("Variant Code",VariantFilter);
новый код
Код:
IF LotNoFilter<>'' THEN//ctaga
ItemLedgEntry.SETFILTER("Lot No.",LotNoFilter);
IF SerialNoFilter <>'' THEN//ctaga
ItemLedgEntry.SETFILTER("Serial No.",SerialNoFilter);
IF ItemNoFilter<>'' THEN//ctaga
ItemLedgEntry.SETFILTER("Item No.",ItemNoFilter);
IF VariantFilter<>'' THEN//ctaga
ItemLedgEntry.SETFILTER("Variant Code",VariantFilter);
исходный код в тойже функции
Код:
FirstLevelEntries.ASCENDING(Direction = Direction::Forward);
IF FirstLevelEntries.FIND('-') THEN
REPEAT
ItemLedgEntry.GET(FirstLevelEntries."Item Ledger Entry No.");
IF (ItemLedgEntry."Serial No." <> '') OR (ItemLedgEntry."Lot No." <> '') THEN BEGIN//ctaga
ItemLedgEntry2 := ItemLedgEntry;
// Test for Reclass
IF (Direction = Direction::Backward) AND
(ItemLedgEntry."Entry Type" = ItemLedgEntry."Entry Type"::Transfer) AND
NOT ItemLedgEntry.Positive THEN BEGIN
ItemApplnEntry.RESET;
ItemApplnEntry.SETCURRENTKEY("Outbound Item Entry No.");
ItemApplnEntry.SETRANGE("Outbound Item Entry No.",ItemLedgEntry2."Entry No.");
ItemApplnEntry.SETRANGE("Item Ledger Entry No.",ItemLedgEntry2."Entry No.");
ItemApplnEntry.SETRANGE("Transferred-from Entry No.",0);
IF ItemApplnEntry.FIND('-') THEN BEGIN
ItemApplnEntry.SETFILTER("Item Ledger Entry No.",'<>%1',ItemLedgEntry2."Entry No.");
ItemApplnEntry.SETRANGE("Transferred-from Entry No.",ItemApplnEntry."Inbound Item Entry No.");
IF ItemApplnEntry.FIND('-') THEN BEGIN
ItemLedgEntry2.RESET;
IF NOT ItemLedgEntry2.GET(ItemApplnEntry."Item Ledger Entry No.") THEN
ItemLedgEntry2 := ItemLedgEntry;
END;
END;
END;
IF SearchCriteria = SearchCriteria::Item THEN
ItemLedgEntry2.SETRANGE("Item No.",ItemLedgEntry."Item No.");
TransferData(ItemLedgEntry2,TempTrackEntry);
IF InsertRecord(TempTrackEntry,0) THEN BEGIN
FindComponents(ItemLedgEntry2,TempTrackEntry,Direction,ShowComponents,ItemLedgEntry2."Entry No.");
NextLevel(TempTrackEntry,TempTrackEntry,Direction,ShowComponents,ItemLedgEntry2."Entry No.");
END;
END;
новый код
Код:
FirstLevelEntries.ASCENDING(Direction = Direction::Forward);
IF FirstLevelEntries.FIND('-') THEN
REPEAT
ItemLedgEntry.GET(FirstLevelEntries."Item Ledger Entry No.");
//IF (ItemLedgEntry."Serial No." <> '') OR (ItemLedgEntry."Lot No." <> '') THEN BEGIN//ctaga
ItemLedgEntry2 := ItemLedgEntry;
// Test for Reclass
IF (Direction = Direction::Backward) AND
(ItemLedgEntry."Entry Type" = ItemLedgEntry."Entry Type"::Transfer) AND
NOT ItemLedgEntry.Positive THEN BEGIN
ItemApplnEntry.RESET;
ItemApplnEntry.SETCURRENTKEY("Outbound Item Entry No.");
ItemApplnEntry.SETRANGE("Outbound Item Entry No.",ItemLedgEntry2."Entry No.");
ItemApplnEntry.SETRANGE("Item Ledger Entry No.",ItemLedgEntry2."Entry No.");
ItemApplnEntry.SETRANGE("Transferred-from Entry No.",0);
IF ItemApplnEntry.FIND('-') THEN BEGIN
ItemApplnEntry.SETFILTER("Item Ledger Entry No.",'<>%1',ItemLedgEntry2."Entry No.");
ItemApplnEntry.SETRANGE("Transferred-from Entry No.",ItemApplnEntry."Inbound Item Entry No.");
IF ItemApplnEntry.FIND('-') THEN BEGIN
ItemLedgEntry2.RESET;
IF NOT ItemLedgEntry2.GET(ItemApplnEntry."Item Ledger Entry No.") THEN
ItemLedgEntry2 := ItemLedgEntry;
END;
END;
END;
IF SearchCriteria = SearchCriteria::Item THEN
ItemLedgEntry2.SETRANGE("Item No.",ItemLedgEntry."Item No.");
TransferData(ItemLedgEntry2,TempTrackEntry);
IF InsertRecord(TempTrackEntry,0) THEN BEGIN
FindComponents(ItemLedgEntry2,TempTrackEntry,Direction,ShowComponents,ItemLedgEntry2."Entry No.");
NextLevel(TempTrackEntry,TempTrackEntry,Direction,ShowComponents,ItemLedgEntry2."Entry No.");
END;
//END;////ctaga
функция ExitLevel(TempTrackEntry : Record "Item Tracing Buffer") : Boolean
исходный код
Код:
WITH TempTrackEntry DO BEGIN
IF ("Serial No." = '') AND ("Lot No." = '') THEN
EXIT(TRUE);
IF CurrentLevel > 50 THEN
EXIT(TRUE);
IF NOT SpecificTracking("Item No.","Serial No.","Lot No.") THEN
EXIT(TRUE);
END;
EXIT(FALSE);
новый код
Код:
WITH TempTrackEntry DO BEGIN
{
IF ("Serial No." = '') AND ("Lot No." = '') THEN
EXIT(TRUE);
}//ctaga
IF CurrentLevel > 50 THEN
EXIT(TRUE);
{IF NOT SpecificTracking("Item No.","Serial No.","Lot No.") THEN
EXIT(TRUE);}//ctagaEND;
EXIT(FALSE);
[attachment=973:cu6520.fob]
[attachment=974:cu6520.txt]