В процессе интеграции 1С:Управление торговлей 11 (УТ 11) с интернет-магазином часто возникает ситуация, когда на сайт попадают только те товары, которые есть в наличии на складе. Однако для бизнеса важно показывать даже отсутствующие позиции (например, с пометкой "Под заказ" или просто для сохранения SEO-трафика). Разберем подробно, почему товары с нулевым остатком могут не попадать в выгрузку и как это исправить.
Прежде всего, проанализируем механизм формирования данных. Стандартный обмен в формате CommerceML создает два основных файла:
import.xml — содержит классификатор (группы) и основные реквизиты номенклатуры (наименование, описание, свойства).offers.xml — содержит так называемые "предложения": цены и остатки.Если товар присутствует в import.xml, но отсутствует в offers.xml, сайт может либо вообще не отображать его, либо скрывать из-за отсутствия цены и остатка. Выясним причину, по которой 1С игнорирует позиции с нулем при формировании предложений.
Первым делом проанализируем настройки самого узла обмена с сайтом. Перейдем в раздел "Настройка интеграции с сайтом" и откроем наш узел обмена. На вкладке "Выгрузка товаров" нажмем кнопку "Настроить фильтры".
Рассмотрим ситуацию подробнее: часто там по умолчанию или по ошибке установлено условие Остаток > 0. Проверим список отборов. Если такое условие присутствует, его необходимо удалить или изменить. Также убедимся, что товар не исключен из выгрузки из-за сегментации номенклатуры. Если используется фильтр по Сегменту номенклатуры, товар с нулевым остатком должен обязательно входить в этот сегмент.
Посмотрим на поле "Склад" в форме настроек обмена. Если в настройках жестко указан конкретный склад, 1С будет проверять наличие товара именно на нем. Рассмотрим два варианта решения:
Проанализируем важный нюанс: 1С может не включать товар в offers.xml, если для него не задана цена. В настройках обмена всегда указывается Тип цен (или Соглашение). Если у товара нулевой остаток и при этом не зарегистрирована цена по выбранному типу, система считает такое предложение неинформативным и пропускает его.
Для решения этой проблемы необходимо убедиться, что для всех товаров, которые должны попасть на сайт, установлены цены (пусть даже нулевые или старые). Регистрация цены делается документом Установка цен номенклатуры.
Если стандартные настройки не помогают, придется заглянуть "под капот" конфигурации. Выясним, в каком месте формируется выборка данных для выгрузки. Основная логика сосредоточена в общем модуле ОбменССайтом. Конкретно нас интересует процедура ПолучитьДанныеДляВыгрузкиПакетаПредложений.
Проанализируем ситуацию с точки зрения программиста: в этой процедуре формируется запрос к базе данных. Часто в коде используется ВНУТРЕННЕЕ СОЕДИНЕНИЕ (INNER JOIN) между таблицей номенклатуры и таблицей остатков. Если записи в регистре ТоварыНаСкладах нет (остаток равен 0 и движений не было), то внутреннее соединение просто исключит эту строку из результата запроса.
Чтобы исправить это, необходимо изменить логику на ЛЕВОЕ СОЕДИНЕНИЕ (LEFT JOIN). Пример того, как концептуально может выглядеть изменение запроса:
// Было (упрощенно):
// "ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура
// ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки ..."
// Должно быть:
// "ВЫБРАТЬ Номенклатура.Ссылка, ЕСТЬNULL(Остатки.ВНаличииОстаток, 0) КАК КоличествОстаток
// ИЗ Справочник.Номенклатура КАК Номенклатура
// ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
// ПО Номенклатура.Ссылка = Остатки.Номенклатура"
Такая правка гарантирует, что в выборку попадут все товары, соответствующие фильтрам по справочнику, независимо от наличия записей в регистре остатков.
Если ваш сайт работает на CMS 1С-Битрикс, мы рекомендуем отказаться от штатного модуля обмена в пользу специализированного модуля, разрабатываемого командой Битрикса. Разберем его преимущества:
Иногда корень проблемы кроется в общих настройках УТ 11. Проверим опцию "Контроль остатков" (раздел "НСИ и администрирование" — "Настройка разделов" — "Продажи"). В некоторых релизах логика формирования XML-файлов неявно завязана на эту настройку: если системе запрещено работать с товаром, которого нет в наличии, она может игнорировать его и при обмене с внешними системами.
Также проверим карточку номенклатуры на наличие признака "Архивный". Архивные товары всегда исключаются из обмена, независимо от остатков и цен.
Для того чтобы успешно выгрузить товары с нулями, выполним следующие действия:
Остаток > 0.ПолучитьДанныеДляВыгрузкиПакетаПредложений на предмет использования ВНУТРЕННЕГО СОЕДИНЕНИЯ.Применяя эти шаги, мы добьемся полной синхронизации каталога 1С с сайтом, включая все позиции, временно отсутствующие на складе.