06.03.2007, 10:42 | #1 |
Участник
|
Ошибка при регистрации
Ax 3.0 SP4
Заметил интересную особенность поведения Аксапты при выполнении регистрации в журналах переноса. Рисунок 1: Еще нет регистрации, мы только собираемся ее сделать. Рисунок 2: Мы зарегестрировали номенклатуру Рисунок 3: Мы отменили регистрацию При отмене регистрации склад становится как у отправителя. Если глянуть в табличку InventTrans - то там у обеих записей поле InventDimId соответствует аналитике склада-отправителя. И после разноски журнала ситуация не меняется, т.е. номенклатура со склада никуда не уйдет. будет приход и расход по одному складу. Залез в дебаггер и нашел очень интересное место в классе InventUpd_Registered, в методе updateRegisterLess() на строке #67: X++: ... inventTrans.inventDimId = movement.inventDimId(); ... Кто что может сказать по этому поводу? Разве я первый кто заметил эту ошибку? Последний раз редактировалось AraraT®; 06.03.2007 в 10:47. |
|
06.03.2007, 11:37 | #2 |
Участник
|
Не знаю кто первый это заметил, но ошибка известная. Дело в том, что к конструктор класса InventMovement в одном месте не передается признак того, что нужно смотреть ту сторону журнала переноса, которая является "В". Мы просто в классе InventTransWMS_Register, в методе updateInvent устранили этот баг.
|
|
06.03.2007, 11:59 | #3 |
Member
|
Суть в следующем. При регистрации/комплектации вы можете изменить аналитики в складской проводке. И они станут не такими, которые указаны в строке журнала. Причем сделать это можно даже не не делая регистрацию и комплектацию, а просто поменяв в форме регистрации и комплектации аналитику и сохранив изменения.
Так вот. При отмене регистрации и комплектации система пытается вернуть (восстановить) аналитику из строки журнала (типа вдруг вы ее поменяли при регистрации/комплектации). Обнаруженный вами код, очевидно, без проблем работает на всех видах складских журналов, кроме переноса. На переносе возникает ошибка . То, что вы закомментировали строчку, к ошибке не приведет, но уводит вас от стандартного поведения системы. По идее, правильным решением будет отловить факт работы с журналом вида "Перенос", и взять аналитику из поля ToInventDimId строк журнала складских проводок. Кстати, в 4.01 не воспроизводится. В 30сп4 не проверял. Ради любопытства проверил еще одну багу, с которой столкнулся в сп5. Тоже не воспроизводится в 4.01... Хорошо.
__________________
С уважением, glibs® |
|
06.03.2007, 12:07 | #4 |
Участник
|
В принципе даже отлавливать ничего не нужно. Достаточно в указанном мной методе в месте создания класса Inventmovement немного расширить код: там в стандарте идет одна вется для закупок, другая для прочих. В этом месте можно еще один путь задать для складских журналов: передать в последнем параметре True. На остальные журналы это не повлияет, а ошибку для переноса устранит (работает так уже 6 месяцев без проблем)
|
|
06.03.2007, 12:58 | #5 |
Участник
|
Спасибо за ответы/советы.
Регистрация у нас больше нигде, кроме переносов не используется и я думаю, что не будет. Поэтому я пока оставлю строку закомментированной. |
|