|
22.06.2009, 18:32 | #1 |
Участник
|
Вот интересная "фича" от создателей.
Задача совершенно простая - вернуть товар ("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"); |
|
23.06.2009, 13:47 | #2 |
Участник
|
У нас есть Товар 1 (пользовался у себя товар 80206 - Кронус), у которого устнавнолено Reserve=Always
Продали его, а теперь пытаемся вернуть. Для Этого создаем (но не заполняем) Возврат и просто пытаемся копировать документ (чтобы типа сохранить все условия отгрузки для корректировки). И получаем ошибку, что поле "Shipment Date" не заполнено (см. вложение). Но в исходном документе оно заполнено!!! Тоесть система не копирует значения??? P.S. Читаю, что написано в про галочку "Include Header" - Place a check mark in this field if you want the program to copy the information from the document header you are copying to the document you are creating. The document lines will be copied whether or not there is a check mark in this field. |
|
24.06.2009, 00:00 | #3 |
MCTS
|
Цитата:
Сообщение от RedFox
У нас есть Товар 1 (пользовался у себя товар 80206 - Кронус), у которого устнавнолено Reserve=Always
Продали его, а теперь пытаемся вернуть. Для Этого создаем (но не заполняем) Возврат и просто пытаемся копировать документ (чтобы типа сохранить все условия отгрузки для корректировки). И получаем ошибку, что поле "Shipment Date" не заполнено (см. вложение). Но в исходном документе оно заполнено!!! Тоесть система не копирует значения??? P.S. Читаю, что написано в про галочку "Include Header" - Place a check mark in this field if you want the program to copy the information from the document header you are copying to the document you are creating. The document lines will be copied whether or not there is a check mark in this field. Хочу отметить, что НАВ shipment date в заголовок документа получателя копирует, но затем затирает (если документ-получатель является возвратом). Однако проблема не в заголовке. Если формировать документ вручную, то можно заметить, что shipment date заполняется в строках при вводе товара, не смотря на то, что заголовок пуст. А вот при копировании документа, хотя shipment date и копируется из строк-документа источника, затем он затирается значением из заголовка документа-получателя (а как я уже говорил, для возвратов туда принудительно устанавливается значение 0D). Т.е. на первый взгляд проблема кроется в CU 6620 Copy Document Mgt. в функции CopySalesLine - не в том месте стоит END Код: IF ExactCostRevMandatory AND (FromSalesLine.Type = FromSalesLine.Type::Item) AND (FromSalesLine."Appl.-from Item Entry" <> 0) AND NOT MoveNegLines THEN BEGIN IF RecalculateAmount THEN BEGIN ToSalesLine.VALIDATE("Unit Price",FromSalesLine."Unit Price"); ToSalesLine.VALIDATE( "Line Discount Amount", ROUND(FromSalesLine."Line Discount Amount",Currency."Amount Rounding Precision")); ToSalesLine.VALIDATE( "Inv. Discount Amount", ROUND(FromSalesLine."Inv. Discount Amount",Currency."Amount Rounding Precision")); END; //Считаю, что здесь должен быть END IF NOT CreateToHeader THEN IF ToSalesLine."Shipment Date" = 0D THEN BEGIN IF ToSalesHeader."Shipment Date" <> 0D THEN ToSalesLine."Shipment Date" := ToSalesHeader."Shipment Date" ELSE ToSalesLine."Shipment Date" := WORKDATE; END; END; //А здесь его быть не должно |
|
24.06.2009, 00:37 | #4 |
Участник
|
Я же ранее давал согласие на все баги в этой ветке
Цитата:
Хочу отметить, что НАВ shipment date в заголовок документа получателя копирует, но затем затирает (если документ-получатель является возвратом). Однако проблема не в заголовке. Если формировать документ вручную, то можно заметить, что shipment date заполняется в строках при вводе товара, не смотря на то, что заголовок пуст. А вот при копировании документа, хотя shipment date и копируется из строк-документа источника, затем он затирается значением из заголовка документа-получателя (а как я уже говорил, для возвратов туда принудительно устанавливается значение 0D).
Т.е. на первый взгляд проблема кроется в CU 6620 Copy Document Mgt. в функции CopySalesLine - не в том месте стоит END А вот с END ты может быть прав, но у меня признак для ExactCostRevMandatory не стоял Я исправил так: Код: IF "Document Type" IN ["Document Type"::"Return Order","Document Type"::"Credit Memo"] THEN BEGIN IF NOT IncludeHeader THEN //RedFox "Shipment Date" := 0D; |
|
24.06.2009, 00:53 | #5 |
MCTS
|
Перенес, спасибо.
|
|
03.07.2009, 12:57 | #6 |
Участник
|
Вот поставил FP3 for NAV 5.0 RU и поссмотрел код триггера PrintRecords(ShowRequestForm : Boolean) для таблиц 12451 Item Receipt Header и 12454 Item Shipment Header.
Разница в коде просто впечатляет: Вопрос - неужели трудно было ReportSelection."Excel Export" сделать для списания? Или народ считает, что всегда можно доделать или он там не нужен? |
|
06.07.2009, 10:15 | #7 |
Участник
|
Иногда интересно поссмотреть код от создателей в CodeUnit'ах.
Например в данном примере проверяется сначала на общее совпадение заполнения параметров, а потом поотдельности. Вопрос - зачем так сложно? |
|
08.07.2009, 13:48 | #8 |
Участник
|
Ещё немного об албанской логике... в NAV
В данном случае про ЛОТ: У нас есть товар 80216-T и на карточке товара устанавливаем ОБЯЗАТЕЛЬНО резервировать. Делаем 2 документа покупки с лотами ЛОТ1 и ЛОТ2, например по 5 и 10 шт. В заказе продажи делаем строку для 2 шт и система резервирует товар из ЛОТ1. Но с помощью Трасинга устанавливаем привязку к ЛОТ 2. И в итоге 2 шт. товара из ЛОТ1 блокируется (по крайней мере у меня на Кронусе - не последний) до учёта документа. Вопрос - ЗАЧЕМ так делается или почему? Например, если резервируется и есть ЛОТ Но., то не делать привязку трассировки сразу? И если меняется Трассировка, то не менять строки резервирования? |
|
13.07.2009, 10:42 | #9 |
Участник
|
Цитата:
На тестовой базе настраиваем трассировку Lot Info. Inbound Must Exist для товара 80216-T и получаем "счастье" в виде ошибки. Вопрос - как пользователю прописать данные в таблице 6505 чтобы можно было сделать учёт без захода на форму 6505 Lot No. Information Card, которая вставляет запись в эту таблицу? |
|
13.07.2009, 11:25 | #10 |
MCTS
|
Цитата:
Сообщение от RedFox
Вот ещё немного про Трассировки.
На тестовой базе настраиваем трассировку Lot Info. Inbound Must Exist для товара 80216-T и получаем "счастье" в виде ошибки. Вопрос - как пользователю прописать данные в таблице 6505 чтобы можно было сделать учёт без захода на форму 6505 Lot No. Information Card, которая вставляет запись в эту таблицу? Не понял проблемы: Если включить Lot Info. Inbound Must Exist, значит пользователь должен вводить данную информацию через Lot No. Information Card. Если не ввел - получи ошибку. Чесно говоря запись уже должна была существовать, судя по скриншоту, система бы не дала оприходовать этот товар. |
|
13.07.2009, 14:40 | #11 |
Участник
|
Цитата:
Цитата:
Чесно говоря запись уже должна была существовать, судя по скриншоту, система бы не дала оприходовать этот товар.
Проблема в том, что я нажал "Присвоить &Лот Но." и обычно людям достаточно, если всё настроено правильно. А вот если хочешь менять |
|