Урок 2: Загрузка справочника номенклатуры
На первом уроке мы изучили, как создавать источники, объекты загрузки и простые соответствия. Для загрузки справочника Номенклатура нам понадобится табличное соответствие. Причем таблица может меняться, в зависимости от данных, находящихся в Axapta.
Итак, во-первых создадим источник для справочника НоменклатурныеГруппы.
Как видно из текста запроса, наименования групп можно устанавить самостоятельно. Объект для справочника НоменклатурныеГруппы будет очень прост, поэтому я не буду тут его описывать.
Далее создадим источник для определения неких групп номенклатуры в Аксапте и после этого сопоставим эти группы одинэсовским.
ВНИМАНИЕ: В источнике для соответствия поля (Наименование, Тип, Значение) обязательны!
Далее создаем необходимое нам соответствие на основании источника:
В данном случае поле Тип является информационным, для ввода строкового значения.
В поле значение мы поместим соответствующие наименования номенклатурных групп. Строки, где не будет внесено Значение, в дальнейшем создании окончательного запроса участвовать не будут.
Далее создадим источник непосредственно для элементов справочника номенклатуры. Вот текст запроса:
Недостаток демоверсий – нехватка «нормальных» данных. Поэтому приходится вставлять в код запроса замену неких типов. Для демоверсии Аксапты столы – продукция. Нам же приходится использовать их как товары, из-за отсутствия последних в выбранной версии Axapta.
Теперь посмотрим на конечную версию запроса, которая будет выполнятся после обработки нашего «метазапроса»:
select Код, Наименование, casewhen left(Наименование, 4) = 'Стол' then 'Товар'else НоменклатурнаяГруппаend НоменклатурнаяГруппа, ЕдиницаИзмеренияfrom (select a.itemid as Код,a.itemname as Наименование,a.itemgroupid as Родитель,0 as ЭтоГруппа,a.itemname as ПолнНаименование,b.unitid as ЕдиницаИзмерения,b.priceSecCur_ru as Себестоимость,1 ПорядокХраненияОтпускнойЦены,b.price as Цена,(select currencyCodefrom axdb..companyinfo as ciwhere ci.dataareaid = a.dataareaid) as Валюта,case a.itemgroupidwhen 'Готовые' then 'Продукция'when 'СтолыКухон' then 'Товар'when 'СтолыОбед' then 'Товар'when 'СтолыПисьм' then 'Товар'when 'Услуги' then 'Услуга'else ''end НоменклатурнаяГруппа,b.priceSecCur_ru as ПлановаяСебестоимость, -- необходимо уточнениеa.itemId as ИдАfrom axdb..inventtable as aleft outer joinaxdb..inventtablemodule as bon (a.itemid = b.itemidand 0 = b.moduletypeand a.dataareaid = b.dataareaid)where a.dataareaid = 'dmo') swhere НоменклатурнаяГруппа <> ''
Вот и видим каким же образом совершена подстановка для табличного соответствия. В селекте вставляется выбор по значению поля, описанного в соответствии, как Строка-значение по парам Наименование – Значение.
Далее для объекта вроде все понятно. Остановлюсь только на двух полях, в одном из которых будет выбираться значение перечисления, а во втором логическое значение.
По умолчанию выставляем НДС 18%.
Поле Услуга будет принимать значение Истина, если Номенклатурная группа данного товара Услуга.
Вот теперь точно все. Можно загружать: