![]() |
#3 |
Участник
|
Уточню терминологию. Таким образом вы получили список номенклатур с типом спецификаця. Т.е. таких номенклатур, которые могут иметь спецификацию.
Дело в том что в аксапте термин "Спецификация" используется для обозначения не номенклатуры со списком входящих, а для обозначения непостредственно самого списка составляющих номенклатуры. Спецификации в аксапте имеют отдельные коды, вообще говоря отличные от кодов номенклатурных. Причём связь между номенклатурными кодами и спецификациями - многие ко многим. Это сделано, например, для того чтобы одну и туже аксаптовскую спецификацию можно было назначить одновременно нескольким номенклатурам. Это будут разные номенклатурные коды, но состав у них будет одинаковым, и если потом внести изменения в такую спецификацию, то эти изменения отразятся на всех номенклатурах использующих эту спецификацию. Иногда это бывает полезно. И наоборот чтобы на один и тот же номенклатурный код можно было назначить несколько разных спецификаций. Теперь о структуре таблиц. Сами спецификации хранятся в двух таблицах. Заголовки спецификаций (BOMTable) и строки спецификаций (BOM). Связь между ними один ко многим по полю BOMId. Связь между таблицей спецификаций (BOMTable) и таблицей номенклатур (InventTable), как я уже говорил - многие ко многим. Реализуется она через таблицу версий спецификации (BOMVersion). В случае когда одному ItemId в таблице BOMVersion соответствует несколько BOMId возникает необходимость в определении какой именно состав номенклатуры нужно использовать в данный момент для текущей задачи. Для этого в таблице BOMVersion присутствуют дополнительные атрибуты, которые помогают идентифицировать искомую версию спецификации. В зависимости от версии аксапты набор этих признаков может различаться. Как минимум, это период действия версии спецификации и её активность. Помимо этих характеристик в составной ключ могут входить номенклатурные аналитики, складская аналитика сайт и размер партии. Подробности смотрите в методе BOMVersion::findActive() Цитата:
X++: while select InventTable where InventTable.itemType == ItemType::BOM join TableId from BOMVersion where BOMVersion.ItemId == InventTable.ItemId && BOMVersion.Active == NoYes::Yes && BOMVersion.FromDate <= _date && BOMVersion.ToDate >= _date join TableId from BOM where BOM.BOMId == BOMVersion.BOMId join InventTableChild where InventTableChild.ItemId == BOM.ItemId { info(strfmt("%1, %2", InventTable.ItemId, InventTableChild.ItemId)); } |
|
|
За это сообщение автора поблагодарили: 1349 (1). |
|
|