Вот интересная "фича" от создателей.
Задача совершенно простая - вернуть товар ("Reservation Status" <> Reservation), который имеет номер ЛОТ при установленной галочке "Exact Cost Reversing Mandatory".
Вроде всё ОК - заполнил строку, потому Трассировку и учитываешь. НО!! Система говорит, что нужно заполнить поле "Appl.-from Item Entry".
При попытке заполнить значение система проверяет - а не нужно ли ЛОТ привязать и выругивается... ERROR(Text040, ... (процедура CheckApplFromItemLedgEntry(ItemLedgEntry)) и больше никуда не пускает!
Хотя перед этим я сделал привязку к нужному ЛОТ для возврата.
В итоге - либо галочку при учёте снимать, либо кодить...
Если поссмотреть Codeunit 99000832 Sales Line-Reserve\TransferSalesLineToItemJnlLine(SalesLine,ItemJnlLine,TransferQty,CheckApplF
romItemEntry), то дело в коде:
Код:
IF CheckApplFromItemEntry AND
(OldReservEntry."Item Tracking" <> OldReservEntry."Item Tracking"::None)
THEN BEGIN
OldReservEntry.TESTFIELD("Appl.-from Item Entry");
CreateReservEntry.SetApplyFromEntryNo(OldReservEntry."Appl.-from Item Entry");
NewCheckApplFromItemEntry := FALSE;
END;
В моем случае это OldReservEntry."Item Tracking"::"Lot No." и система не учитывается, потому что не проходит TESTFIELD("Appl.-from Item Entry");
И вообще зачем вызывать так, если у нас есть ЧЁТКАЯ привязка???: InitRecordSet(ReservEntry)
EXIT(InitRecordSet2(ReservEntry,
'',''));
Сперва я подумал, что баг! Но вовремя начал шариться по форме 6510 "Item Tracking Lines" и нашёл тут поле "Appl.-from Item Entry". Начал радоваться...
Но при LookUp получил фильтры:
Field Filter
Item No. 10041604
Positive No
Location Code Kiev
Variant Code ''
Serial No. ''
Lot No. ''
Shipped Qty. Not Returned <0
По идее всё правильно - я не внёс свой код Lot No. Но сделать это нельзя автоматически (только либо на память вбить, либо скопировать в буфер, а потом вставить в поле), так как форма, которая вызывается из поля,
НЕ LookUp'ая
Так что пришлось поправить только форму... (может и неправильно, но по другому я не уверен, что будет лучше):
РЕШЕНИЕ
Код:
Lot No. - OnAssistEdit()
MaxQuantity := UndefinedQtyArray[1];
"Bin Code" := ForBinCode;
//--RedFox
IF "Quantity (Base)" = 0 THEN
ItemTrackingDataCollection.AssistEditLotSerialNo(Rec, TRUE, CurrentSignFactor, 1, MaxQuantity)
ELSE
//++RedFox
ItemTrackingDataCollection.AssistEditLotSerialNo(Rec,
CurrentSignFactor * SourceQuantityArray[1] < 0,CurrentSignFactor,1,MaxQuantity);
P.S. Дальше я уже начинаю молчать про проверку ГТД, так как это не входило в мои планы проверки:
Код:
IF Type = Type::Item THEN BEGIN
Item.GET("No.");
IF Item."CD Specific Tracking" THEN
IF "Document Type" IN ["Document Type"::"Return Order","Document Type"::"Credit Memo"] THEN
IF Quantity > 0 THEN
TESTFIELD("Appl.-from Item Entry");