|
|
#1 |
|
Участник
|
В версии 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=974:cu6520.txt] |
|
|