Как настроить выгрузку дополнительных реквизитов номенклатуры и характеристик для сайта

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При интеграции 1С с интернет-магазинами одной из самых частых задач является выгрузка не только базовых данных (наименование, артикул, цена), но и специфических свойств товара: цвета, размера, материала или бренда. В современных конфигурациях (таких как УТ 11, ERP 2 или КА 2) эти данные хранятся в механизме дополнительных реквизитов. Разберем ситуацию, когда запрос для выгрузки написан, но вместо значений свойств на сайт уходят пустые поля (NULL).

Анализ структуры запроса для выгрузки

Для начала проанализируем типовой подход к решению этой задачи. Нам необходимо собрать данные из регистров остатков, цен и соединить их с табличными частями дополнительных реквизитов. Рассмотрим структуру пакета запросов, который эффективно решает эту задачу.

В первой временной таблице мы получаем остатки товаров в разрезе характеристик. Это база, к которой мы будем «приклеивать» остальные данные:


ВЫБРАТЬ
    СвободныеОстаткиОстатки.Номенклатура,
    СвободныеОстаткиОстатки.Характеристика,
    СУММА(СвободныеОстаткиОстатки.ВНаличииОстаток) КАК ВНаличииОстаток,
    СУММА(СвободныеОстаткиОстатки.ВНаличииОстаток - (СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток + СвободныеОстаткиОстатки.ВРезервеПодЗаказОстаток)) КАК СвободныйОстаток
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
    РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
СГРУППИРОВАТЬ ПО
    СвободныеОстаткиОстатки.Номенклатура,
    СвободныеОстаткиОстатки.Характеристика
;

Следующим шагом мы должны развернуть дополнительные реквизиты из строк в колонки. В 1С дополнительные реквизиты хранятся в подчиненной табличной части ДополнительныеРеквизиты. Чтобы получить «Цвет» и «Размер» в одну строку с товаром, используется метод группировки с агрегатной функцией МАКСИМУМ и условием ВЫБОР.

Соединение с дополнительными реквизитами: важные нюансы

Проанализируем, как правильно соединять характеристики с их свойствами. Основная проблема часто кроется в условии связи через Наборы свойств. В конфигурациях 1С свойства привязаны не напрямую к товару, а к набору свойств, который определяется в Виде номенклатуры.

Рассмотрим правильный пример связи для характеристик:


ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ДополнительныеРеквизитыХ
ПО ВТ.Характеристика = ДополнительныеРеквизитыХ.Ссылка
И ВТ.Номенклатура.ВидНоменклатуры.НаборСвойствХарактеристик = ДополнительныеРеквизитыХ.Свойство.НаборСвойств

Здесь важно понимать два сценария:

  1. Общие характеристики для вида номенклатуры: В этом случае набор свойств действительно берется из ВидНоменклатуры.НаборСвойствХарактеристик.
  2. Индивидуальные характеристики для номенклатуры: Если в виде номенклатуры выбрано использование индивидуальных характеристик, то набор свойств у каждой характеристики может быть уникальным или привязанным к самой карточке номенклатуры. В этом случае жесткое условие на ВидНоменклатуры может вернуть NULL.

Выясним причину, по которой свойства могут не отображаться, даже если связь по ссылкам кажется верной. Проанализируем условия фильтрации по заголовкам свойств:


МАКСИМУМ(ВЫБОР
    КОГДА ДополнительныеРеквизитыХ.Свойство.Заголовок = "Цвет"
    ТОГДА ДополнительныеРеквизитыХ.Значение
    ИНАЧЕ NULL
КОНЕЦ) КАК ДопСвойствоХЦвет

Важный совет: Использование строковых констант типа "Цвет" в коде запроса — это плохая практика. Если в базе заголовок свойства изменится на "Цвет (общий)" или появится лишний пробел, запрос перестанет работать. Правильнее передавать ссылки на конкретные элементы плана видов характеристик через параметры запроса.

Почему запрос выдает NULL: пошаговый чек-лист

Если вы столкнулись с тем, что доп. реквизиты не выгружаются, пройдемся по следующим пунктам:

  1. Проверка типа данных: Убедитесь, что вы обращаетесь именно к реквизитам, а не к сведениям. Дополнительные реквизиты хранятся в табличной части объекта (Номенклатура.ДополнительныеРеквизиты), а дополнительные сведения — в регистре сведений ДополнительныеСведения.
  2. Параметры в СКД: Если вы используете макет компоновки данных (СКД) в узле обмена, проверьте закладку "Параметры". Если вы сравниваете свойства по ссылкам (например, ДополнительныеРеквизиты.Свойство = &СвойствоЦвет), этот параметр должен быть заполнен в общем модуле, который инициализирует выгрузку.
  3. Наборы свойств номенклатуры: Проверьте условие для общих реквизитов номенклатуры. В коде часто встречается сравнение с предопределенным набором:
    
    ИЛИ ДополнительныеРеквизитыН.Свойство.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура_Общие)
    
    Если свойство помечено как общее для всей номенклатуры, оно не будет привязано к конкретному виду номенклатуры, и без этого условия вы его не получите.

Окончательная сборка данных с ценами

После того как мы подготовили временную таблицу ВТ1 со всеми развернутыми свойствами, мы соединяем её с ценами. Рекомендуется использовать ЛЕВОЕ СОЕДИНЕНИЕ, чтобы товары без цен все равно попадали в выборку (если это предусмотрено логикой сайта):


ВЫБРАТЬ
    ВТ1.Номенклатура.Наименование КАК Наименование,
    ВТ1.СвободныйОстаток,
    ВТ1.ДопСвойствоХЦвет,
    ВТ1.ДопСвойствоХРазмер,
    ЕСТЬNULL(ЦеныРозничная.Цена, 0) КАК ЦенаРозничная
ИЗ
    ВТ1 КАК ВТ1
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены = &ВидЦеныРозничная) КАК ЦеныРозничная
    ПО ВТ1.Номенклатура = ЦеныРозничная.Номенклатура
    И ВТ1.Характеристика = ЦеныРозничная.Характеристика

Проанализируем работу со СрезомПоследних. В СКД важно, чтобы параметр &Период был явно определен, иначе система может взять текущую дату сеанса, что при наличии цен, введенных «будущим числом», приведет к пустым значениям.

Резюме: Если выгрузка доп. реквизитов характеристик выдает NULL, первым делом проверьте соответствие НаборСвойств в условии связи и убедитесь, что параметры со ссылками на нужные свойства корректно передаются в запрос. Отказ от поиска по строковому заголовку в пользу ссылок сделает вашу выгрузку стабильной и защищенной от ошибок пользователей при переименовании свойств.

← На главную