При обмене данными между 1С:Управление торговлей (УТ 11) и сайтом на платформе Битрикс пользователи нередко сталкиваются с рядом специфических проблем. Две наиболее частые из них, которые мы подробно разберем, это: некорректная выгрузка товаров с нулевым остатком, несмотря на установленные фильтры, и неожиданная деактивация или удаление товаров с сайта после обмена, даже при отключенной соответствующей опции. Эти ситуации могут существенно затруднить работу интернет-магазина и требуют внимательного анализа настроек как в 1С, так и на стороне Битрикс.
Давайте рассмотрим эти проблемы пошагово и выясним, как их можно решить, используя информацию из форума и дополнительные технические рекомендации.
Одной из основных сложностей, с которой сталкиваются пользователи, является ситуация, когда товары, имеющие нулевой остаток на складах в 1С, тем не менее, выгружаются на сайт. Автор темы подтверждает это, указывая, что в настройках обмена установлен отбор "Остаток >= 1", но на сайте все равно присутствуют товары, которых фактически нет в наличии. Более того, при просмотре файла выгрузки автор обнаружил, что позиции с нулевым остатком действительно передаются в XML-файл, как показано в примере:
<Предложение>
<Ид>badeebee-5d18-11e9-8da5-00155dbe9500#06a7282a-38a2-11ec-8dad-00155dbe9500</Ид>
<Остатки>
<Остаток>
<Склад>
<Ид>5aef289c-b1a6-11de-9886-0014852875f7</Ид>
<Количество>0</Количество>
</Склад>
</Остаток>
</Остатки>
</Предложение>
Подобное поведение может быть вызвано несколькими причинами. Рассмотрим их подробнее.
Настройки модуля обмена в 1С. В обработке "Обмен с сайтом" (для 1С) необходимо убедиться, что функция, отвечающая за формирование XML-файла выгрузки, корректно обрабатывает нулевые остатки. В некоторых случаях, если в коде заложено условие типа Если Остаток > 0 Тогда ..., то при нулевом остатке информация о количестве может просто не попадать в файл обмена вовсе. В таком сценарии Битрикс не получит актуальных данных и оставит старый, положительный остаток. Возможно, потребуется внести изменения в код, чтобы при нулевом остатке явно выгружалось <Количество>0</Количество>. Это гарантирует, что сайт получит четкое указание об отсутствии товара.
Режим выгрузки данных. Обратим внимание на выбранный режим выгрузки данных в 1С. Если используется режим "Изменения", и отбор по остаткам больше нуля не применяется корректно или срабатывает не всегда, то даже товары с нулевыми остатками могут попадать в пакет изменений. В режиме "Все данные" происходит полная выгрузка с замещением данных на сайте, и здесь особенно важно, чтобы отборы работали безупречно, иначе на сайт будет передаваться вся номенклатура.
Настройки соответствия полей. В 1С в настройках узла обмена для выгрузки товаров присутствует раздел "Настройка соответствий полей номенклатуры". Мы должны убедиться, что поле, отвечающее за остаток, правильно сопоставлено и выгружается. Неправильное соответствие может привести к тому, что информация об остатках не будет передаваться или будет передаваться некорректно.
Особенности CommerceML и Bitrix. Стандарт CommerceML активно используется для обмена каталогами товаров и коммерческими предложениями. Битрикс обрабатывает файлы offers.xml для остатков торговых предложений. Если в файле offers.xml для товара с нулевым остатком не передается явное значение Количество=0, то остатки на сайте могут не обнуляться, сохраняя предыдущее значение.
Версии модуля обмена. Старые версии модуля обмена между 1С и Битрикс могут иметь ограниченный функционал, содержать ошибки или не поддерживаться официально. Мы настоятельно рекомендуем использовать актуальные версии модулей, так как в них часто исправляются подобные недочеты и добавляется новый функционал.
Множественные склады. Если в 1С настроено несколько складов, а на Битрикс выгружается только общий остаток или остатки по отдельным складам, это также может приводить к путанице. В некоторых редакциях Битрикс (например, "Малый бизнес") доступен только один склад, что требует дополнительной настройки агрегации остатков в 1С перед выгрузкой.
Проблемы с характеристиками. Если проблема наблюдается с товарами, имеющими характеристики, возможно, некорректно формируются данные в файлах выгрузки XML для таких товаров, или на стороне Битрикса не включена настройка использования торговых предложений, что мешает правильному сопоставлению остатков по характеристикам.
Вторая проблема, которую озвучил автор, заключается в том, что после загрузки товаров на сайт они сначала появляются, а затем удаляются или деактивируются в процессе обмена, даже если опция "Деактивировать товары и разделы, не попавшие в полную выгрузку" отключена. Это проявляется в сообщении "Процесс выполнения обмена: Деактивация/Удаление элементов завершены.". Давайте проанализируем, почему такое может происходить.
Деактивация на стороне Битрикс. После импорта файла из 1С, Битрикс запускает внутренний процесс деактивации разделов и элементов каталога, которые не попали в текущий импорт. Если опция "Деактивировать товары и разделы, не попавшие в полную выгрузку" отключена, но товары все равно удаляются, это может указывать на то, что Битрикс по каким-то причинам не "видит" эти товары в файле выгрузки как актуальные. Даже если они присутствуют с нулевым остатком, Битрикс может воспринимать их как отсутствующие в текущем каталоге, подлежащие деактивации.
Флаг CATALOG_AVAILABLE. Штатные компоненты Битрикс могут использовать фильтрацию по наличию с помощью флага CATALOG_AVAILABLE. Этот флаг вычисляется, если для товара включен количественный учет. Если этот флаг по какой-то причине всегда установлен в "в наличии" (например, из-за особенностей настройки или ошибок), то товары будут доступны на сайте, независимо от их фактических остатков, и для их сокрытия придется использовать ручную деактивацию или кастомные фильтры.
Модификация компонента выгрузки. В некоторых случаях для решения проблемы деактивации товаров без цены или с нулевым остатком может потребоваться кастомизация компонента bitrix:catalog.import.1c на стороне Битрикса. Это может включать добавление дополнительного шага для контроля деактивации или изменение логики обработки флагов доступности.
Отладка обмена. Для глубокой диагностики обмена мы рекомендуем включить сохранение файлов обмена на стороне Битрикс. Для этого в файле dbconn.php нужно объявить константу define("BX_CATALOG_IMPORT_1C_PRESERVE", true);. Это позволит нам анализировать содержимое файлов offers.xml и import.xml после каждой выгрузки, чтобы понять, какие данные фактически передаются и как они обрабатываются Битриксом. Также крайне полезно включить режим отладки на стороне 1С, чтобы проследить формирование данных перед их отправкой.
События обмена. В Битрикс существуют события OnBeforeCatalogImport1C и OnSuccessCatalogImport1C, которые срабатывают до и после успешной обработки XML-файла обмена. Мы можем использовать их для создания собственных обработчиков и корректировки логики обмена, например, для дополнительной проверки или модификации статусов товаров перед или после импорта.
Проблемы с синхронизацией времени. Автор упомянул возможную рассинхронизацию времени. Действительно, для деактивации Битрикс сравнивает время последнего изменения товара с timestamp, который передает 1С – время начала текущей сессии, полученное на шаге авторизации. Если системное время на сервере Битрикс сбито или отличается от времени 1С, это может привести к некорректной логике определения "актуальности" товаров.
Для успешного и стабильного обмена данными между 1С и Битрикс мы предлагаем следовать следующим общим рекомендациям, которые помогут выявить и устранить большинство проблем:
Проверка соответствия версий. Убедитесь, что версии вашей 1С:Управление торговлей, модуля обмена 1С-Битрикс и самой платформы Битрикс являются актуальными и совместимыми. Несоответствие версий часто является причиной необъяснимых ошибок.
Права пользователя. Проверьте, что пользователь, под которым 1С авторизуется на сайте Битрикс для обмена данными, имеет все необходимые права доступа для записи, чтения и удаления элементов каталога, а также для работы с заказами и торговыми предложениями.
Логи обмена. Внимательно анализируйте логи обмена как на стороне 1С (обычно доступны в журнале регистрации или в отчете об обмене), так и на стороне Битрикс (логи ошибок PHP, логи модуля обмена, если они включены). Логи могут содержать ценную информацию о конкретных ошибках и моментах их возникновения.
Тестирование на тестовом контуре. Прежде чем применять изменения на рабочей системе, всегда тестируйте их на отдельном тестовом контуре. Это позволит избежать потенциальных проблем и сбоев в работе интернет-магазина.
Использование дополнительных модулей. Рассмотрите возможность использования сторонних или дополнительных модулей для продвинутого обмена с 1С, которые могут предоставить более гибкие настройки для деактивации товаров, работы с остатками и синхронизации других данных. Иногда стандартный функционал требует расширения для специфических задач.
Консистентность данных. Периодически проводите проверку консистентности данных между 1С и Битрикс. Убедитесь, что все товары, разделы, цены и остатки совпадают после обмена. Это поможет своевременно выявлять расхождения и принимать меры.
Решение проблем обмена между 1С и Битрикс часто требует комплексного подхода и внимательной проверки настроек на обеих сторонах системы. Применяя предложенные рекомендации, вы сможете значительно повысить стабильность и корректность работы вашего интернет-магазина.