Как выгрузить номенклатуру с нулевым остатком из 1С:Управление торговлей 11 на сайт?

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

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

Понимание структуры файлов обмена: import.xml и offers.xml

Прежде всего, проанализируем механизм формирования данных. Стандартный обмен в формате CommerceML создает два основных файла:

  1. import.xml — содержит классификатор (группы) и основные реквизиты номенклатуры (наименование, описание, свойства).
  2. offers.xml — содержит так называемые "предложения": цены и остатки.

Если товар присутствует в import.xml, но отсутствует в offers.xml, сайт может либо вообще не отображать его, либо скрывать из-за отсутствия цены и остатка. Выясним причину, по которой 1С игнорирует позиции с нулем при формировании предложений.

Шаг 1. Проверка фильтров в узле обмена

Первым делом проанализируем настройки самого узла обмена с сайтом. Перейдем в раздел "Настройка интеграции с сайтом" и откроем наш узел обмена. На вкладке "Выгрузка товаров" нажмем кнопку "Настроить фильтры".

Рассмотрим ситуацию подробнее: часто там по умолчанию или по ошибке установлено условие Остаток > 0. Проверим список отборов. Если такое условие присутствует, его необходимо удалить или изменить. Также убедимся, что товар не исключен из выгрузки из-за сегментации номенклатуры. Если используется фильтр по Сегменту номенклатуры, товар с нулевым остатком должен обязательно входить в этот сегмент.

Шаг 2. Настройка складов в узле обмена

Посмотрим на поле "Склад" в форме настроек обмена. Если в настройках жестко указан конкретный склад, 1С будет проверять наличие товара именно на нем. Рассмотрим два варианта решения:

  1. Очистить поле "Склад". В этом случае система будет пытаться собрать общие остатки или выгружать данные без привязки к конкретному месту хранения. Это часто помогает "протолкнуть" товары с нулевым остатком в файл предложений.
  2. Настроить список складов. Если выгрузка идет по нескольким точкам, убедимся, что в список включены все необходимые склады, даже если на них сейчас пусто.

Шаг 3. Влияние типа цен и соглашений

Проанализируем важный нюанс: 1С может не включать товар в offers.xml, если для него не задана цена. В настройках обмена всегда указывается Тип цен (или Соглашение). Если у товара нулевой остаток и при этом не зарегистрирована цена по выбранному типу, система считает такое предложение неинформативным и пропускает его.

Для решения этой проблемы необходимо убедиться, что для всех товаров, которые должны попасть на сайт, установлены цены (пусть даже нулевые или старые). Регистрация цены делается документом Установка цен номенклатуры.

Шаг 4. Анализ программного кода формирования выборки

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

Проанализируем ситуацию с точки зрения программиста: в этой процедуре формируется запрос к базе данных. Часто в коде используется ВНУТРЕННЕЕ СОЕДИНЕНИЕ (INNER JOIN) между таблицей номенклатуры и таблицей остатков. Если записи в регистре ТоварыНаСкладах нет (остаток равен 0 и движений не было), то внутреннее соединение просто исключит эту строку из результата запроса.

Чтобы исправить это, необходимо изменить логику на ЛЕВОЕ СОЕДИНЕНИЕ (LEFT JOIN). Пример того, как концептуально может выглядеть изменение запроса:


// Было (упрощенно):
// "ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура
// ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки ..."

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

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

Шаг 5. Использование модуля обмена от Битрикс

Если ваш сайт работает на CMS 1С-Битрикс, мы рекомендуем отказаться от штатного модуля обмена в пользу специализированного модуля, разрабатываемого командой Битрикса. Разберем его преимущества:

Шаг 6. Глобальные настройки системы

Иногда корень проблемы кроется в общих настройках УТ 11. Проверим опцию "Контроль остатков" (раздел "НСИ и администрирование" — "Настройка разделов" — "Продажи"). В некоторых релизах логика формирования XML-файлов неявно завязана на эту настройку: если системе запрещено работать с товаром, которого нет в наличии, она может игнорировать его и при обмене с внешними системами.

Также проверим карточку номенклатуры на наличие признака "Архивный". Архивные товары всегда исключаются из обмена, независимо от остатков и цен.

Резюме для настройки

Для того чтобы успешно выгрузить товары с нулями, выполним следующие действия:

  1. Убедимся, что в отборах узла обмена нет условия Остаток > 0.
  2. Проверим наличие установленных цен на эти товары по выбранному типу цен.
  3. Попробуем очистить список складов в настройках обмена, чтобы система не ограничивала выборку.
  4. Если используется штатный модуль, и ничего не помогло — проверим код процедуры ПолучитьДанныеДляВыгрузкиПакетаПредложений на предмет использования ВНУТРЕННЕГО СОЕДИНЕНИЯ.

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

← На главную