Почему при выгрузке из 1С в интернет-магазин не обновляются нулевые остатки товаров и как это исправить?

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

При организации регулярного обмена между типовыми конфигурациями 1С (например, Комплексная автоматизация 1.1 или Управление торговлей 10.3) и интернет-магазином на платформе 1С-Битрикс часто возникает неприятная ситуация: товар полностью распродан на складе, однако на витрине сайта по-прежнему отображается его старый положительный остаток. Покупатели продолжают оформлять заказы на отсутствующие позиции, что приводит к конфликтам и срывам поставок.

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

Причина поведения системы и логика формата CommerceML

Проанализируем структуру формируемого файла выгрузки предложений offers.xml. В типовых механизмах обмена 1С формирование узла <Количество> для каждого торгового предложения зачастую обернуто в условие проверки наличия положительного остатка в регистрах накопления. Если по учетным данным остаток товара равен нулю или запись в регистре вовсе отсутствует, узел <Количество> в XML-файл не записывается.

На стороне интернет-магазина обработчик импорта каталога работает по следующему принципу: значение поля остатка обновляется только тогда, когда для конкретного предложения в переданном пакете найден тег <Количество>. Если тег отсутствует, система интерпретирует это как «данные по остатку не передавались» и сохраняет предыдущее значение остатка в базе данных без изменений.

Способ 1. Программная корректировка формирования XML в 1С

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

Посмотрим на пример логики формирования XML-узла предложения:


// В процедуре выгрузки торговых предложений
ЗаписьXML.ЗаписатьНачалоЭлемента("Предложение");
// ... запись реквизитов предложения ...

// Принудительно выгружаем количество даже при нулевом значении
Если ЗначениеЗаполнено(ВыборкаПоОстаткам.Количество) И ВыборкаПоОстаткам.Количество > 0 Тогда
    ЗаписьXML.ЗаписатьЭлемент("Количество", Формат(ВыборкаПоОстаткам.Количество, "ЧЦ=15; ЧДЦ=3; ЧРД=.; ЧГ=0"));
Иначе
    ЗаписьXML.ЗаписатьЭлемент("Количество", "0");
КонецЕсли;

ЗаписьXML.ЗаписатьКонецЭлемента(); // Предложение

После такой доработки в файл offers.xml для всех отсутствующих на складе позиций начнет гарантированно попадать узел <Количество>0</Количество>, и интернет-магазин корректно установит нулевой остаток при импорте.

Способ 2. Решение без снятия 1С с типовой поддержки

Если конфигурация 1С находится на замке и вносить изменения в основную конфигурацию нежелательно, воспользуемся альтернативными вариантами:

  1. Подключение внешней обработки обмена. Сохраняем типовую обработку обмена с сайтом во внешний файл, вносим правку в алгоритм формирования XML и подключаем её как внешнюю обработку через меню дополнительных обработок или запускаем вручную для регламентных обменов.
  2. Использование внешнего специализированного модуля. Устанавливаем официальный модуль обмена для 1С-Битрикс, который поставляется в виде внешней обработки. В его настройках штатно предусмотрена гибкая работа с остатками, включая принудительную выгрузку нулевых значений и передачу остатков по конкретным складам.

Способ 3. Настройка параметров импорта на стороне сайта

Разберем вариант, когда в 1С настраивается жесткий отбор позиций в узле обмена по правилу Количество > 0. В этом случае отсутствующие товары вообще не попадают в выгрузку, а управление остатками делегируется логике интернет-магазина.

Разберем по шагам порядок настройки:

  1. В 1С в настройках выгрузки на сайт устанавливаем отбор каталога предложений: остаток строго больше нуля. При этом выгружаются только актуальные позиции с наличием.
  2. В административной панели интернет-магазина переходим в параметры импорта CommerceML (модуль обмена с 1С).
  3. Находим параметр «Что делать с товарами, отсутствующими в файле импорта» и переключаем его в режим «Устанавливать количество товара в ноль» или «Деактивировать» (в зависимости от бизнес-логики: показывать товар под заказ или скрывать с витрины).

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

← На главную