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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.04.2014, 10:30   #1  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
Изменения спецификации номенклатуры – бага?
В стандарте 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;
    }
}
Если для текущей спецификации существует только одна версия, то код будет работать корректно. Но если у спецификации, есть несколько версия для различных номенклатур, то удаление будет выполнено только для первой из них (fistOnly). Очень похоже на багу.
Старый 29.04.2014, 11:02   #2  
Vasilenko Alexsandr is offline
Vasilenko Alexsandr
Участник
Дети Юза
 
90 / 16 (1) ++
Регистрация: 05.09.2002
Адрес: Одесса
В данной функции есть еще один странный момент касающийся метода deleteConfigChoice. В качестве значения параметра itemId передается значение переменной fromItemId с помощью метода parmFromItemId(). А значение для переменной fromItemId устанавливается в методе validateItem() из критерия запроса по полю ItemId this.parmFromItemId(queryBuildRangeItemId.value()).
В случае если в этом критерии указана не одна номенклатура, а какие-то символы фильтрации или список номенклатур через "," , то как видно из кода (configChoice.ChosenItemId == itemId) - удаление корректно работать не будет. Да и EDT ItemID в стандарте имеет длину в 10 символов, так что при передачи параметра критерия запроса по полю ItemId будет обрезан до 10 символов.
Я так понимаю, что в методе validateItem() нужно добавлять проверку на проставлении в критерии по полю ItemId только одного кода номенклатуры, без всяких "излишеств". Тогда проще его вынести в параметры, а критерий по полю ItemId в запросе скрыть от пользователя.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: О заполнении Наименования и Кода номенклатуры в печатной форме Накладной (Ax2009 ru7) Blog bot DAX Blogs 0 07.06.2011 09:11
Amand: Видео: Спецификации (BOM) в Microsoft Dynamics AX 4.0 Часть 1-3 Этапы создания спецификации. Blog bot DAX Blogs 0 25.01.2010 22:05
Проверка цикличности в спецификации vey DAX: Функционал 2 24.03.2005 11:03
Можно ли создать версии спецификации для номенклатуры с разными конфигурациями? Hard DAX: Функционал 4 08.12.2003 19:20
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:27.