Как реализовать автоматическое удаление или скрытие товаров на сайте Битрикс при их исключении из обмена в 1С:УТ 11

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

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

Анализ механизма инкрементальной выгрузки

Проанализируем ситуацию: стандартный механизм обмена работает на основе ПланыОбмена. Когда мы меняем реквизиты номенклатуры, система регистрирует изменения для конкретного узла. Однако, если мы настроили фильтр в узле обмена (например, по иерархии или по конкретному булеву свойству), и товар перестал соответствовать этому фильтру, он просто не попадает в выборку запроса, формирующего import.xml.

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

Решение №1: Использование признака «Активность» вместо жесткой фильтрации

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

  1. В 1С создадим дополнительный реквизит для справочника Номенклатура с названием, например, АктивностьНаСайте (тип: Булево).
  2. В настройках узла обмена в 1С (раздел "Служебные поля") найдем соответствие поля "Активность" (на стороне Bitrix это поле ACTIVE).
  3. Привяжем наш новый доп. реквизит к этому полю.
  4. Важный момент: в настройках фильтрации (отбора) товаров в 1С нужно убрать условие, которое жестко отсекает товар. Товар должен попадать в XML-файл в любом случае, пока он существует в базе.

Теперь, когда мы снимаем галочку в 1С, товар попадает в выгрузку со значением false в поле активности. Битрикс, прочитав это, мгновенно снимет товар с публикации на сайте, но сама карточка и её URL сохранятся, что полезно для SEO (страница не будет отдавать 404 ошибку).

Решение №2: Настройка действий над отсутствующими товарами в Bitrix

Выясним, какие инструменты предоставляет сама CMS. В административной панели Битрикса (путь: Магазин -> Настройки -> Интеграция с 1С) на вкладке "Каталог" есть раздел "Настройки выгрузки товаров". Там присутствуют параметры:

Доступные варианты: "Ничего не делать", "Деактивировать" или "Удалить". Обратите внимание: эти настройки корректно отрабатывают преимущественно при полной выгрузке. Если вы используете только изменения, Битрикс не может знать, пропал ли товар из выборки навсегда или он просто не менялся.

Поэтому проанализируем стратегию комбинированного обмена:

  1. Настройте регламентное задание в 1С на выгрузку изменений каждые 15-30 минут.
  2. Настройте второе задание на полную выгрузку один раз в сутки (например, в 3:00 ночи).
  3. В настройках Битрикса установите "Деактивировать" для отсутствующих товаров. Таким образом, ночью сайт будет автоматически "очищаться" от хвостов, созданных за день.

Решение №3: Специализированный модуль обмена «Битрикс»

Если стандартный функционал 1С:УТ 11 не справляется, рекомендуется рассмотреть установку внешнего модуля от разработчиков Битрикс (модуль bitrix.eshop). В этом модуле реализована интеллектуальная система отслеживания товаров.

Посмотрим на алгоритм его работы: модуль хранит во внутренней таблице 1С информацию о том, какие ID товаров были выгружены в последний раз. При следующей итерации обмена он сравнивает текущую выборку (с учетом всех фильтров) с предыдущей. Если товар был в прошлой выгрузке, но исчез из текущей, модуль принудительно добавляет этот товар в XML-файл со статусом ПометкаУдаления = Истина или Деактивация.

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

Решение №4: Программная обработка события перед выгрузкой

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


// Пример логики для регистрации изменений при снятии флага
Процедура ПриЗаписиНоменклатуры(Источник, Отказ) Экспорт
    Если Источник.ОбменНаСайт = Ложь И Источник.Ссылка.ОбменНаСайт = Истина Тогда
        // Товар только что исключили из выгрузки. 
        // Нужно принудительно зарегистрировать его на узлах обмена, 
        // чтобы он попал в файл изменений с актуальным статусом.
        УзлыОбмена = ПланыОбмена.ИнтеграцияСБитрикс.Выбрать();
        Пока УзлыОбмена.Следующий() Цикл
            ПланыОбмена.ЗарегистрироватьИзменения(УзлыОбмена.Ссылка, Источник.Ссылка);
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Этот метод заставит систему включить товар в ближайший пакет обмена, даже если он не проходит по основным фильтрам запроса (если запрос построен грамотно и учитывает необходимость передачи деактивированных объектов).

Особенности работы с торговыми предложениями (SKU)

Проанализируем ситуацию с характеристиками товаров. Удаление одной характеристики (SKU) из 1С часто не приводит к её удалению на сайте. Для корректной синхронизации характеристик важно:

Важный совет: Никогда не используйте физическое удаление товаров (способ "Удалить" в настройках Битрикса), если у вас есть входящий трафик из поисковых систем. Используйте деактивацию. Это позволит сохранить структуру базы и при необходимости настроить автоматический редирект пользователя со старого товара на новый аналог или в категорию.

Итоговые рекомендации

Для стабильной работы связки 1С:УТ 11 и Битрикс выберите один из двух путей:

  1. Простой (настроечный): Установите внешний модуль обмена от Битрикс и включите опцию деактивации товаров, не попавших в отбор.
  2. Надежный (архитектурный): Перейдите на управление видимостью через свойство Активность, отказавшись от жестких фильтров в узле обмена, которые полностью вырезают товар из XML.

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

← На главную