AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.06.2009, 18:32   #1  
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");
Старый 23.06.2009, 13:47   #2  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Talking
Цитата:
Сообщение от 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.
Миниатюры
Нажмите на изображение для увеличения
Название: Copy_In_Retirn.JPG
Просмотров: 203
Размер:	101.8 Кб
ID:	10481  
Старый 24.06.2009, 00:00   #3  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Цитата:
Сообщение от 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  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от apanko Посмотреть сообщение
Любопытная бага. Я помещу ее в Антибаг если ты не против.
Я же ранее давал согласие на все баги в этой ветке
Цитата:
Хочу отметить, что НАВ shipment date в заголовок документа получателя копирует, но затем затирает (если документ-получатель является возвратом). Однако проблема не в заголовке. Если формировать документ вручную, то можно заметить, что shipment date заполняется в строках при вводе товара, не смотря на то, что заголовок пуст. А вот при копировании документа, хотя shipment date и копируется из строк-документа источника, затем он затирается значением из заголовка документа-получателя (а как я уже говорил, для возвратов туда принудительно устанавливается значение 0D).

Т.е. на первый взгляд проблема кроется в CU 6620 Copy Document Mgt. в функции CopySalesLine - не в том месте стоит END
Ну для себя я сделал немного другое изменение - обнуление "shipment date" только при условии, что не копируется заголовок (NOT IncludeHeader), так как меня не устраивает пустое значение в Заголовке Возврата (тоесть для меня неприемлема фраза "а как я уже говорил, для возвратов туда принудительно устанавливается значение 0D").
А вот с END ты может быть прав, но у меня признак для ExactCostRevMandatory не стоял
Я исправил так:
Код:
	IF "Document Type" IN ["Document Type"::"Return Order","Document Type"::"Credit Memo"] THEN BEGIN
	 IF NOT IncludeHeader THEN //RedFox
		"Shipment Date" := 0D;
Старый 03.07.2009, 12:57   #6  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от RedFox Посмотреть сообщение
Вот интересная "фича" от создателей
Вот поставил FP3 for NAV 5.0 RU и поссмотрел код триггера PrintRecords(ShowRequestForm : Boolean) для таблиц 12451 Item Receipt Header и 12454 Item Shipment Header.
Разница в коде просто впечатляет:
Вопрос - неужели трудно было ReportSelection."Excel Export" сделать для списания? Или народ считает, что всегда можно доделать или он там не нужен?
Миниатюры
Нажмите на изображение для увеличения
Название: PrintRecords___12451_12454.JPG
Просмотров: 83
Размер:	192.5 Кб
ID:	10484  
Старый 06.07.2009, 10:15   #7  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Иногда интересно поссмотреть код от создателей в CodeUnit'ах.
Например в данном примере проверяется сначала на общее совпадение заполнения параметров, а потом поотдельности.
Вопрос - зачем так сложно?
Миниатюры
Нажмите на изображение для увеличения
Название: Double_TESTFIELD_Quantity__in_CodeUnit_.JPG
Просмотров: 208
Размер:	161.2 Кб
ID:	10485  
Старый 08.07.2009, 13:48   #8  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от RedFox Посмотреть сообщение
Иногда интересно поссмотреть код от создателей в CodeUnit'ах.
Ещё немного об албанской логике... в NAV
В данном случае про ЛОТ:
У нас есть товар 80216-T и на карточке товара устанавливаем ОБЯЗАТЕЛЬНО резервировать. Делаем 2 документа покупки с лотами ЛОТ1 и ЛОТ2, например по 5 и 10 шт.
В заказе продажи делаем строку для 2 шт и система резервирует товар из ЛОТ1. Но с помощью Трасинга устанавливаем привязку к ЛОТ 2.
И в итоге 2 шт. товара из ЛОТ1 блокируется (по крайней мере у меня на Кронусе - не последний) до учёта документа.

Вопрос - ЗАЧЕМ так делается или почему?
Например, если резервируется и есть ЛОТ Но., то не делать привязку трассировки сразу? И если меняется Трассировка, то не менять строки резервирования?
Старый 13.07.2009, 10:42   #9  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от RedFox Посмотреть сообщение
Например, если резервируется и есть ЛОТ Но., то не делать привязку трассировки сразу? И если меняется Трассировка, то не менять строки резервирования?
Вот ещё немного про Трассировки.
На тестовой базе настраиваем трассировку Lot Info. Inbound Must Exist для товара 80216-T и получаем "счастье" в виде ошибки.

Вопрос - как пользователю прописать данные в таблице 6505 чтобы можно было сделать учёт без захода на форму 6505 Lot No. Information Card, которая вставляет запись в эту таблицу?
Миниатюры
Нажмите на изображение для увеличения
Название: LotInfoSetup1.JPG
Просмотров: 74
Размер:	179.1 Кб
ID:	10487   Нажмите на изображение для увеличения
Название: LotInfoSetup2.JPG
Просмотров: 57
Размер:	185.7 Кб
ID:	10488  

Нажмите на изображение для увеличения
Название: LotInfoRequired.JPG
Просмотров: 60
Размер:	181.0 Кб
ID:	10489  
Старый 13.07.2009, 11:25   #10  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Цитата:
Сообщение от 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  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от apanko Посмотреть сообщение
Не понял проблемы:
Если включить Lot Info. Inbound Must Exist, значит пользователь должен вводить данную информацию через Lot No. Information Card.
Если не ввел - получи ошибку.
Ну связь нужно тут додумать, а не напрямую следует из функционала. В твоём случае где-то должно существовать меню ввода эти Номеров ЛОТ & Серий. Например Покупки\Серийные номера или Покупки\ЛОТ
Цитата:
Чесно говоря запись уже должна была существовать, судя по скриншоту, система бы не дала оприходовать этот товар.
*Видать не внеслось редактирование или удалилось.*
Проблема в том, что я нажал "Присвоить &Лот Но." и обычно людям достаточно, если всё настроено правильно. А вот если хочешь менять
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:18.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.