Top.Mail.Ru

Продукты в Dynamics Ax 2012. Выпуск продукта и номенклатурные группы

Выпуск продукта в 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.

Методы таблиц

Для получения связанного с продуктом кода группы или записи группы рекомендуется использовать методы, объявленные в таблице:

  1. InventTable:
  • itemGroupId(): InventItemGroupId

    Метод получает код номенклатурной группы для текущей записи InventTable. Этот метод вызовет InventItemGroupItem::itemGroupId и поэтому будет вызвана ошибка, если не указан код номенклатурной группы для продукта.

  • modelGroupId(): InventModelGroupId

    Метод получает код группы номенклатурной модели для текущей записи InventTable. Этот метод вызовет InventModelGroupItem::modelGroupId и поэтому будет вызвана ошибка, если не указан код группы номенклатурной модели для продукта.

  1. InventItemGroupItem
  • itemGroupId(in itemId: ItemId, in legaEntity: DataAreaId): InventItemGroupId

    Статический метод, который возвращает код номенклатурной группы для указанных кода номенклатуры и идентификатора юридического лица. Будет вызвана ошибка, если не указан код номенклатурной группы для продукта.

  • itemGroupByItemIdLegalEntity(in itemId: ItemId, in legalEntity: DataAreaId): InventItemGroup

    Статический метод, который возвращает запись номенклатурной группы. Будет вызвана ошибка, если не указан код номенклатурной группы для продукта.

  1. 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())
{ … }

 

Первая часть

Вторая часть

microsoft.com

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar