Продукты в Dynamics Ax 2012. Выпуск продукта и номенклатурные группы
Contents
Выпуск продукта в Dynamics Ax 2012
В Dynamics AX 2012, таблица InventTable представляет концепцию «выпуск продукта», которые будут доступны для юридического лица.
В таблицу InventTable был добавлен обязательный внешний ключ продукта, поле Product (тип int64). Добавленная связь представлена ниже:
Пример поиска используемого продукта для текущего юридического лица, если продукт найден, то будет выведено его наименование на русском языке:
InventTable inventTable = InventTable::findByProduct(ProductRecId) if (inventTable) { info(inventTable.productName("ru")); }
В Dynamics AX 2012, таблица InventDimCombination представляет концепцию выпуска вариантов продукта, которые будут доступны для юридического лица.
В таблицу InventDimCombination был добавлен обязательный внешний ключ варианта продукта, поле DistinctProductVariant (int64). Добавленная связь представлена ниже:
Пример поиска варианта продукта для текущего юридического лица, если продукт найден, то будет выведено его наименование на русском языке:
InventDimCombination inventDimCombination = InventDimCombination::findByDistinctProductVariant(ProductVariantRecId); if (inventDimCombination) { info(inventDimCombination.productName("ru")); }
Номенклатурные группы и группы номенклатурных моделей
В Dynamics AX 2012 номенклатурные группы и группы номенклатурных моделей являются необязательными политиками для выпущенного продукта. Эти политики не устанавливаются по умолчанию в процессе выпуска продукта, если они не были определены в шаблоне продукта.
Таблица InventItemGroup описывает номенклатурные группы. Связь между группой и выпущенным продуктом описывается в таблице InventItemGroupItem.
Таблица ItemModelGroup описывает группы номенклатурных моделей. Связь между группой и выпущенным продуктом описывается в таблице InventModelGroupItem.
Методы таблиц
Для получения связанного с продуктом кода группы или записи группы рекомендуется использовать методы, объявленные в таблице:
-
InventTable:
-
itemGroupId(): InventItemGroupId
Метод получает код номенклатурной группы для текущей записи InventTable. Этот метод вызовет InventItemGroupItem::itemGroupId и поэтому будет вызвана ошибка, если не указан код номенклатурной группы для продукта.
-
modelGroupId(): InventModelGroupId
Метод получает код группы номенклатурной модели для текущей записи InventTable. Этот метод вызовет InventModelGroupItem::modelGroupId и поэтому будет вызвана ошибка, если не указан код группы номенклатурной модели для продукта.
-
InventItemGroupItem
-
itemGroupId(in itemId: ItemId, in legaEntity: DataAreaId): InventItemGroupId
Статический метод, который возвращает код номенклатурной группы для указанных кода номенклатуры и идентификатора юридического лица. Будет вызвана ошибка, если не указан код номенклатурной группы для продукта.
-
itemGroupByItemIdLegalEntity(in itemId: ItemId, in legalEntity: DataAreaId): InventItemGroup
Статический метод, который возвращает запись номенклатурной группы. Будет вызвана ошибка, если не указан код номенклатурной группы для продукта.
-
InventModelGroupItem
-
modelGroupId(in itemId: ItemId, in legalEntity: DataAreaId): InventModelGroupId
Статический метод, который возвращает код группы номенклатурной модели для указанных кода номенклатуры и идентификатора юридического лица. Будет вызвана ошибка, если не указан код группы номенклатурной модели для продукта.
-
modelGroupByItemIdLegalEntity (in itemId: ItemId, in legalEntity: DataAreaId): InventModelGroup
Статический метод, который возвращает запись группы номенклатурной модели. Будет вызвана ошибка, если не указан код группы номенклатурной модели для продукта.
Пример, который показывает верный подход:
if (!itemGroupId) { itemGroupId = InventTable::find(_itemId).itemGroupId(); } if (!modelGroupId) { modelGroupId = InventTable::find(_itemId).modelGroupId(); }
Необходимо обратить внимание, что по умолчанию, эти методы вызовут исключительную ошибку, если группы не настроена (но такие ошибки должны быть редким случаем, т.к. данные политики являются частью настройки выпуска продуктов в рамках юридического лица). Данные методы должны гарантировать, что процессы, которым требуются номенклатурная группа и группа номенклатурной модели, будет завершены с ошибкой, если эти группы отсутствуют или не установлены. В некоторых случаях, например, когда создается договор и модель может быть не нужна для текущего процесса, то следующий способ поиска номенклатурной группы и группы номенклатурной модели рекомендуется для использования:
inventTable = InventTable::find(_itemId); if (InventModelGroupItem::findByItemIdLegalEntity(inventTable.ItemId, inventTable.dataAreaId)) { // do something } if (InventitemGroupItem::findByItemIdLegalEntity(inventTable.ItemId, inventTable.dataAreaId)) { // do something }
Типы продуктов
В Dynamics AX 2009 существовали следующие типы:
- Номенклатура (используется для заказов)
- Спецификация (используется для производства)
- Услуга (услуги)
Проблема с этим подходом заключалась в том, что существует искусственное разделение между номенклатурой и спецификацией. В реальности, оба типа являлись номенклатурами. Кроме того, некоторые номенклатуры, которые обычно закупались, могли также быть произведены, и наоборот. Чтобы избавиться от ограничения, в Dynamics AX 2012 все продукты объединены под общим типом «Номенклатура», а тип «Спецификация» был удален. В тоже время, система должны знать, какой по умолчанию способ приобретения применять (закупка или производство).
Новая таблица InventItemSetupSupplyType определяет, какой тип заказа применять по умолчанию – закупка или производство. Кроме этого была изменена иерархия классов, которые применялись при работе с типами, новая схема представлена ниже:
Тип «Номенклатура» также может иметь связанную спецификацию и маршруты. Однако, фактический заказ, который должен быть создан по умолчанию, определяется вызовом метода isProducedByDefault(), который определен в InvenTable (или путем получения значения из InventItemSetupSupplyType.DefaultOrderType).
Пример кода, который позволяет проверить типа заказа по умолчанию:
if (bomChanged.inventTable().isProducedByDefault()) { … }
Comments
So empty here ... leave a comment!