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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.09.2011, 12:12   #1  
niksen is offline
niksen
Участник
Самостоятельные клиенты AX
 
284 / 28 (1) +++
Регистрация: 05.07.2011
Адрес: Татарстан
Переименование полей в одной таблице на основе данных из другой
Есть простая задача, интересно, как можно сделать её изящнее и правильнее, чтобы увеличилась скорость работы.
Вот постановка задачи:
В спецификациях забыли указать правильный тип строки, иногда пользователи могут сами это забывать, соответственно не происходит правильный заказ на производство, точнее неполный, т.к. в нём нет производства той самой подспецификации, т.к. тип строки стоит "номенклатура", а не "производство".
Теперь нужно исправить это поле в соответствии с тем, что, если в таблице InventTable стоит тип спецификация, то в таблице BOM для данной строки будет стоять производство.
Решение:
Сделать всё в цикле, который будет перебирать все строки спецификаций, т.е. таблицу BOM и для каждой строки искать соответствующее значение ItemId в InventTable, проверять его тип, если он спецификация, то обновляем значение строки в таблице BOM с "номенклатура" на "производство".
Возможное решение:
Сделать всё в цикле, который будет перебирать строки таблицы InventTable, искать там номенклатуры с типом BOM, при нахождении данного типа он должен найти все связанные записи в таблице спецификаций BOM и изменить тип строки с "номенклатура" на "производство".

Конечно же возможны и другие решения. Интересно мнение, какое решение лучше, не только сейчас, но и в дальнейших ситуациях, когда что-то требуется поменять из одной таблице в соответствии с записями в другой. Может какие-то другие решения?

Заранее благодарен.

С уважением, Николай
Старый 14.09.2011, 12:34   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от niksen Посмотреть сообщение
Сделать всё в цикле, который будет перебирать все строки спецификаций, т.е. таблицу BOM...
Возможное решение:

Сделать всё в цикле, который будет перебирать строки таблицы InventTable...
Лучше будет сделать всё в цикле (а ещё лучше без цикла - одним групповым запросом), который будет перебирать все строки запроса, в котором будут сразу обе таблицы. Тогда при построении плана выплнения в каждой конкретной ситуации автоматически будет выбран оптимальны способ соединения таблиц.

X++:
update_recordset BOM
setting BOMType = BOMType::Production
where
    BOM.BOMType == BOMType::Item
exists join InventTable
where
    InventTable.ItemId == BOM.ItemId &&
    InventTable.ItemType == ItemType::BOM;

Последний раз редактировалось S.Kuskov; 14.09.2011 в 12:48.
За это сообщение автора поблагодарили: niksen (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Изменение группы полей (Field Group) на таблице Lucky13 DAX: Программирование 11 04.03.2009 17:51
Программное создание полей в таблице. _AV_ DAX: Программирование 7 22.05.2008 15:20
Стандартный импорт данных. Обновление sparur DAX: Функционал 0 24.03.2008 19:07
Вопрос к пользователю при сохранении данных в таблице Anais DAX: Программирование 1 23.03.2004 19:46
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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