Почему новые товары из 1С не выгружаются на сайт Битрикс, а после повторного сохранения появляются?

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

В процессе интеграции «1С:Управление торговлей 11» (в том числе версии для Молдовы) и интернет-магазина на «1С-Битрикс» часто возникает загадочная ситуация: созданные в 1С новые товары не появляются на сайте после обмена, даже если в настройках узла установлена полная выгрузка. Однако стоит зайти в карточку нового товара, внести минимальное изменение (например, добавить и удалить пробел в названии) и сохранить, как товар успешно выгружается при следующей синхронизации. Разберем, почему возникает такой феномен и как его исправить, даже если вы используете синхронизацию с WordPress.

Анализ проблемы и первоначальные гипотезы

Рассмотрим ситуацию подробнее. У нас есть настроенный обмен между 1С и Битрикс (включая возможность настраивать группы каталога из карточек номенклатуры). Мы создаем новый товар со всеми необходимыми атрибутами: характеристиками, свойствами, ценами. Запускаем обмен, он проходит без ошибок, но товара на сайте нет. Почему так происходит?

Первая гипотеза, которая приходит на ум, связана с механизмом регистрации изменений в 1С. Обмен данными работает на основе планов обмена. Чтобы объект попал в выгрузку, он должен быть зарегистрирован в специальной таблице изменений. Возможно, при создании нового товара (событие ПриЗаписи) его ссылка (уникальный идентификатор) еще не сформирована, и поэтому система не может корректно зарегистрировать его для обмена. А при повторном сохранении, когда ссылка уже существует, регистрация проходит успешно. Эта теория логична, но не всегда объясняет все случаи, особенно когда требуется сопоставление номенклатуры.

Другой важный момент, который можно заметить при диагностике, — это анализ самого файла выгрузки (обычно `import.xml`). Даже при установленной галочке «Полная выгрузка» в настройках узла обмена в 1С, в XML-файле можно увидеть атрибут СодержитТолькоИзменения="true". Это не ошибка, а особенность протокола CommerceML. При больших объемах данных 1С выгружает каталог порциями (пакетами), и этот флаг сообщает сайту, что данный файл — это лишь часть данных, а не весь каталог целиком. Сайт, в свою очередь, не должен деактивировать товары, отсутствующие в этом файле. Проблема может возникнуть, если логика обработки этого флага на стороне сайта нарушена.

Основная причина и решение на стороне Битрикс

Как показывает практика, в большинстве случаев корень проблемы кроется не в 1С, а в настройках модуля обмена на стороне сайта «1С-Битрикс». Существует параметр, предназначенный для оптимизации, который и вызывает такое поведение.

Решение проблемы заключается в отключении использования контрольных сумм.

Разберем по шагам, что нужно сделать:

  1. Зайдите в административную панель вашего сайта на «1С-Битрикс».
  2. Перейдите в раздел, отвечающий за интеграцию с 1С. Обычно это «Магазин» -> «Настройки» -> «Интеграция с 1С».
  3. Найдите настройку с названием «Использовать контрольные суммы элементов для оптимизации обновления каталога».
  4. Снимите галочку с этого пункта и сохраните настройки.

После этого выполните обмен данными из 1С снова. Новые товары должны выгрузиться корректно с первого раза.

Как работает механизм контрольных сумм и почему он мешает?

Чтобы понять, почему эта настройка так влияет на выгрузку, давайте разберемся в ее механизме. Когда эта опция включена, Битрикс для каждого товара, приходящего из 1С, вычисляет хеш-сумму (MD5) на основе его данных: названия, описания, свойств и т.д. Эта сумма сохраняется в базе данных сайта.

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

Дополнительные методы диагностики и решения

Хотя отключение контрольных сумм является основным решением, полезно знать и о других возможных причинах и способах диагностики, если проблема не ушла или проявляется иначе.

1. Принудительная регистрация объектов в 1С

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

  1. В 1С откройте «НСИ и администрирование» -> «Синхронизация данных».
  2. Найдите пункт «Состав отправляемых данных» или аналогичный, где можно управлять узлами обмена.
  3. Рядом с нужным узлом обмена с сайтом найдите команду «Зарегистрировать изменения» или воспользуйтесь обработкой «Регистрация изменений для обмена данными».
  4. В открывшемся окне выберите тип объекта (например, Номенклатура), отберите нужные товары и нажмите кнопку «Зарегистрировать».

После этой процедуры выбранные товары гарантированно будут включены в следующий пакет выгрузки.

2. Проверка активности товара и кеша на сайте

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

3. Настройка пакетного обмена

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

В этом случае попробуйте в настройках узла обмена в 1С уменьшить размер пакета выгрузки (например, выгружать не по 100 товаров за раз, а по 20). Это увеличит количество запросов, но каждый из них будет обрабатываться быстрее и стабильнее.

Таким образом, «феномен» с невыгрузкой новых товаров — это чаще всего следствие работы механизма оптимизации на стороне Битрикс. Отключение контрольных сумм является наиболее простым и эффективным решением этой распространенной проблемы.

← На главную