09.04.2014, 10:30 | #1 |
Участник
|
Изменения спецификации номенклатуры – бага?
В стандарте DAX2012 (и в предыдущих версиях кажется тоже) есть функция Управление запасами и складами \ ПО \ Спецификации \ Изменения спецификации номенклатуры.
Функция позволяет массово менять в спецификациях одну номенклатуру на другую. У этой функции есть параметр «Удалить из выбора конфигурации». Активация этого параметра позволяет очистить данные из таблицы «Выбор конфигурации» (ConfigChoise), которые относятся к старой номенклатуре. Метод выглядит следующим образом: X++: void deleteConfigChoice(BOM bom, ItemId itemId) { ConfigChoice configChoice; BOMVersion bomVersion; ; select firstonly bomVersion where bomVersion.bomId == bom.bomId; if (bomVersion) { delete_from configChoice where configChoice.ItemId == bomVersion.ItemId && configChoice.ChosenItemId == itemId && configChoice.ChosenGroupId == bom.ConfigGroupId; } } |
|
29.04.2014, 11:02 | #2 |
Участник
|
В данной функции есть еще один странный момент касающийся метода deleteConfigChoice. В качестве значения параметра itemId передается значение переменной fromItemId с помощью метода parmFromItemId(). А значение для переменной fromItemId устанавливается в методе validateItem() из критерия запроса по полю ItemId this.parmFromItemId(queryBuildRangeItemId.value()).
В случае если в этом критерии указана не одна номенклатура, а какие-то символы фильтрации или список номенклатур через "," , то как видно из кода (configChoice.ChosenItemId == itemId) - удаление корректно работать не будет. Да и EDT ItemID в стандарте имеет длину в 10 символов, так что при передачи параметра критерия запроса по полю ItemId будет обрезан до 10 символов. Я так понимаю, что в методе validateItem() нужно добавлять проверку на проставлении в критерии по полю ItemId только одного кода номенклатуры, без всяких "излишеств". Тогда проще его вынести в параметры, а критерий по полю ItemId в запросе скрыть от пользователя. |
|
|
|