![]() |
#17 |
Участник
|
![]()
Вот интересная "фича" от создателей.
Задача совершенно простая - вернуть товар ("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; И вообще зачем вызывать так, если у нас есть ЧЁТКАЯ привязка???: 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); Код: 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"); |
|