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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.04.2011, 23:44   #1  
AlexEgorov is offline
AlexEgorov
Участник
 
2 / 10 (1) +
Регистрация: 05.04.2011
По данному вопросу прошерстил весь форум и буржуйские форумы, но ничего подобного не нашел.
Опишу задачу, способ решения и ошибку.

Через "Журнал инвентаризации" делаю расчет запасов, получаю некоторое количество строк с товаром.
Лезу датапортом в таблицу 83, Item Journal line, экспортирую в файл следующие строки
"Journal Template Name", "Journal Batch Name","Line No.", "Item No.", "Qty. (Phys. Inventory)"
В файле получаю что-то типа: (в кодировке конечно же 866 DOS)

Код:
ИНВЕНТАР;СТАНДАРТ;10000;Item-No01; 134
Меняю значение "кол-во(инвентаризация)" товара с 134 на 130
Затем делаю импорт этим же датапортом, импорт происходит без ошибок. Открываю таблицу 83 или форму "журнал инвентаризации"
вижу что в поле Qty. (Phys. Inventory) соответствующего товара значение 130.
НО не срабатывает триггер onValidate() этого поля, соответственно, значения "кол-во" не изменяется, "кол-во по выставленным счетам", "тип операции" с прихода на расход.
Соответственно учесть это все нельзя
Триггер на поле срабатывает ок, если вводить в поле значение руками.

В триггере увидел вызов функции кодеюнита WMS Management под названием CheckItemJnlLineFieldChange(Rec,xRec,FIELDCAPTION("Qty. (Phys. Inventory)"));
Попытался сделать примерно тоже самое руками в коде триггера датапорта, но ничего не вышло.Ошибок при этом не было



Попробовал выполнить что-то подобное (см ниже) в триггере поля "Qty. (Phys. Inventory)" onBeforeEvaluateField() //исключительно для теста
Но не изменилось вообще ничего.
Код:
rCurItemInv := "Item Journal Line"; //т.к. из-за длинной строки "Item Journal Line" не получится использовать GET (компилятор говорит что длинновато для него)

rItemInventory.RESET;
IF rItemInventory.GET(rCurItemInv."Journal Template Name", rCurItemInv."Journal Batch Name", rCurItemInv."Line No.") //здесь даже нужная строка сидит
 THEN
  BEGIN
  rItemInventory."Qty. (Phys. Inventory)" := 1211;
  rItemInventory.MODIFY(TRUE);
  CurrDataport.SKIP;
  END;
Дебагером смотрел, код в ИФе выполняется.

Недавно присоединился к сообществу разработчиков Navision, очень надеюсь что коллеги подскажут может быть ошибка.
Городить огород на такой простой задаче не хочется, уверен что можно решить эту задачку как-то попроще
Старый 06.04.2011, 08:24   #2  
Cheb is offline
Cheb
Участник
Лучший по профессии 2017
 
138 / 13 (1) ++
Регистрация: 22.09.2002
Адрес: Ростов-на-Дону -> Москва
Вам нужно вызвать VALIDATE для этого поля (например, в триггере датапорта OnAfterImportRecord).
Код:
rItemInventory.VALIDATE("Qty. (Phys. Inventory)",1211);
Также можно указать свойство CallFieldValidate = TRUE для нужного поля в Dataport Fields, правда, не уверен, что это работает, никогда не пользовался
Старый 06.04.2011, 18:51   #3  
AlexEgorov is offline
AlexEgorov
Участник
 
2 / 10 (1) +
Регистрация: 05.04.2011
Chebv, спасибо за совет, но ничего не помогло.
Примерно нашел ошибку, onValidate() вызывался для "Item Journal Line" до вставки в таблицу.(не содержащей нужной информации, типа Phys. Inventory)

Решил задачу очень костыльным методом. В триггере поля onBeforeEvaluateField()
Код:
rCurItemInv := "Item Journal Line";
rItemInventory.RESET;
IF rItemInventory.GET(rCurItemInv."Journal Template Name", rCurItemInv."Journal Batch Name", rCurItemInv."Line No.")
 THEN
 BEGIN
  EVALUATE(quatVal, Text);
  rItemInventory.VALIDATE("Qty. (Phys. Inventory)", quatVal);
  rItemInventory.MODIFY(TRUE);

  END;
Если кто подскажет менее костыльное решение - буду благодарен.
 


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

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

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