|
05.04.2011, 23:44 | #1 |
Участник
|
По данному вопросу прошерстил весь форум и буржуйские форумы, но ничего подобного не нашел.
Опишу задачу, способ решения и ошибку. Через "Журнал инвентаризации" делаю расчет запасов, получаю некоторое количество строк с товаром. Лезу датапортом в таблицу 83, Item Journal line, экспортирую в файл следующие строки "Journal Template Name", "Journal Batch Name","Line No.", "Item No.", "Qty. (Phys. Inventory)" В файле получаю что-то типа: (в кодировке конечно же 866 DOS) Код: ИНВЕНТАР;СТАНДАРТ;10000;Item-No01; 134 Затем делаю импорт этим же датапортом, импорт происходит без ошибок. Открываю таблицу 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 |
Участник
|
Вам нужно вызвать VALIDATE для этого поля (например, в триггере датапорта OnAfterImportRecord).
Код: rItemInventory.VALIDATE("Qty. (Phys. Inventory)",1211); |
|
06.04.2011, 18:51 | #3 |
Участник
|
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; |
|