Показать сообщение отдельно
Старый 22.06.2009, 18:32   #39  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Talking
Вот интересная "фича" от создателей.
Задача совершенно простая - вернуть товар ("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");