Если обмен сайта на 1С-Битрикс с 1С не работает, сначала найдите, на каком шаге он обрывается: авторизация, передача файла, импорт каталога или запрос заказов. Шаг виден в протоколе обмена в 1С и в ответе сайта на адрес /bitrix/admin/1c_exchange.php. Чаще всего причина в правах пользователя обмена, в ограничениях сервера или в настройках на странице «Магазин → Настройки → Интеграция с 1С».
Обращение обычно звучит так: «вчера все работало, сегодня цены на сайте старые, а заказы в 1С не пришли». Бухгалтер жмет «Выполнить обмен», 1С думает несколько минут и пишет что-то невнятное про ошибку. Разработчик говорит, что на сайте ничего не трогал, хостинг говорит, что сервер в порядке. Чтобы не гадать, нужно понимать, из каких шагов состоит обмен, и проверять их по очереди.
Как устроен обмен 1С-Битрикс с 1С
Обмен между 1С и сайтом на 1С-Битрикс идет по открытому протоколу, который разработали компании «1С» и «1С-Битрикс», а данные передаются в формате CommerceML 2. CommerceML: это стандарт XML-файлов для обмена каталогами товаров, предложениями и заказами между учетной системой и сайтом.
Из описания протокола обмена с сайтом на сайте 1С для диагностики полезно следующее. Инициатор обмена всегда 1С, сайт сам ничего никуда не отправляет. Обмен делится на два блока: выгрузка каталога, цен и остатков на сайт и обмен заказами. Каждый блок проходит несколько шагов, и на каждом сайт отвечает коротким словом.
Выгрузка каталога идет так:
mode=checkauth: 1С авторизуется на сайте, сайт отвечает «success» и передает cookie сеанса.mode=init: сайт сообщает, принимает ли он zip-архивы (zip=yesилиzip=no) и какой максимальный размер файла можно передать за один запрос (file_limit).mode=file: 1С передает файлы обмена, при необходимости частями.mode=import: сайт пошагово загружает данные. Ответ «progress» значит, что нужно повторить запрос, «success» означает, что файл обработан.
Обмен заказами начинается так же, с checkauth и init, но с параметром type=sale. Затем 1С запрашивает заказы (mode=query), сайт отдает их в CommerceML, и после успешной записи 1С подтверждает получение запросом mode=success. Потом 1С может отправить на сайт свой файл с изменениями заказов.
В протоколе прямо записано правило, которое помогает больше всего: если на каком-то шаге произошла ошибка, первая строка ответа сайта содержит слово «failure», а следующие строки описывают ошибку. Если упала необработанная ошибка ядра или SQL-запроса, сайт вернет HTML-код вместо короткого ответа. По этим двум признакам почти всегда понятно, где искать.
Где смотреть, на каком шаге оборвался обмен
Шаг, на котором оборвался обмен, проще всего найти по протоколу обмена в самой 1С: там видны этапы и текст, который вернул сайт. Если в протоколе написано только «ошибка» без подробностей, нужен ответ сайта целиком.
Порядок проверки, который мы используем на проектах B2BPRO.KZ:
- Откройте протокол обмена в 1С и найдите последний успешный этап. Например, «авторизация прошла, файл передан, ошибка при загрузке».
- Посмотрите текст после слова «failure». В нем обычно есть суть: нет прав, не удалось открыть файл, не найден инфоблок.
- Если вместо короткого ответа пришел HTML (в протоколе это выглядит как кусок разметки страницы), проблема на стороне сервера или кода: фатальная ошибка PHP, ошибка базы данных, страница блокировки от защиты хостинга.
- Посмотрите журнал ошибок веб-сервера и PHP на хостинге за время обмена. Часто там видно превышение времени выполнения или памяти.
- Если обмен идет через модуль обмена 1С-Битрикс в 1С, проверьте его версию и настройки узла: модуль может работать по-своему, и часть настроек сайта он не учитывает.
Стоит отдельно проверить, доходит ли запрос до сайта вообще. Откройте в браузере адрес https://ваш-сайт/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth. Без логина ответ будет с ошибкой авторизации, и это нормально: значит, скрипт отвечает. Если вместо этого открывается страница хостинга, капча, редирект на другой домен или 404, обмен ломается еще до 1С-Битрикс.
Почему не проходит авторизация при обмене с 1С
Авторизация при обмене чаще всего падает из-за прав пользователя на сайте, а не из-за неверного пароля. В уроке 1С-Битрикс о форме «Интеграция с 1С» сказано, что пользователь обмена должен входить в группу, указанную в поле «Разрешить загрузку группам пользователей» для каталога и в поле «Группы, пользователям которых разрешена выгрузка» для заказов. Даже администратор сайта сможет обмениваться данными, только если группа «Администраторы» отмечена в этих списках.
Что проверить по шагам:
- в 1С указаны логин и пароль существующего пользователя сайта, без лишних пробелов и с правильной раскладкой;
- пользователь активен, пароль не истек и не сменился по политике безопасности;
- группа пользователя отмечена в обоих полях на странице «Магазин → Настройки → Интеграция с 1С», если обмениваются и каталогом, и заказами;
- адрес сайта в 1С совпадает с рабочим: с https, если сайт работает по https, и без лишнего «www», если сайт без него. Редирект с http на https для обмена иногда превращается в потерю данных запроса;
- на хостинге не включена дополнительная защита паролем на папку
/bitrix/admin/и не стоит блокировка по IP, которая не пропускает сервер 1С.
Типичный случай на практике: каталог выгружается нормально, а обмен заказами падает на авторизации. Причина в том, что группа пользователя обмена отмечена только в настройках каталога, а в поле групп для заказов ее нет. Это два разных списка, и их легко пропустить.
Товары не выгружаются из 1С на сайт: частые причины
Если авторизация прошла, а товары на сайте не появились или не обновились, причина обычно в одном из трех мест: сервер не успевает обработать файл, настройки каталога не совпадают со структурой 1С, или обновленные данные не показываются из-за кеша.
Сервер не успевает или не принимает файл
Большой каталог с картинками передается и загружается частями. Размер части сайт сообщает на шаге init, а загрузка идет шагами. Если хостинг обрывает выполнение скрипта раньше, чем закончился шаг, или не принимает файл нужного размера, обмен падает на этапе передачи или импорта. В журнале сервера это видно как превышение времени выполнения, нехватка памяти или слишком большой размер запроса. Решения разные: уменьшить интервал шага и размер части файла в настройках обмена, поднять лимиты PHP, перенести сайт на тариф или сервер, где эти лимиты можно менять.
Настройки каталога не совпадают с 1С
Здесь важны несколько параметров формы «Интеграция с 1С», которые описаны в уроке 1С-Битрикс:
- Тип инфоблока. Товары могут попасть не в тот инфоблок, если на сайте уже есть инфоблок с таким же идентификатором, как в файле импорта. Чтобы импорт шел именно в выбранный тип, в расширенных настройках отмечают опцию «При выгрузке учитывать тип инфоблока».
- Торговые предложения. Если у товаров в 1С есть характеристики (размеры, цвета), опция «Загружать торговые предложения (характеристики) в отдельный инфоблок» должна быть отмечена обязательно, иначе предложения не выгрузятся.
- Товары и группы, которых нет в файле. Для них можно выбрать удалить, деактивировать или ничего не делать. Если обмен идет через модуль обмена, эти настройки сайта не учитываются, работает параметр самого модуля, и товары могут только деактивироваться.
Отсюда частая ситуация «товары пропали с сайта после обмена». В 1С выгрузили не весь каталог, а часть, и сайт или модуль деактивировал все, чего не было в файле. Проверьте, что включено в настройках выгрузки и полная это выгрузка или только изменения.
Данные загрузились, но сайт показывает старое
Иногда обмен проходит успешно, в административной части цены новые, а посетители видят старые. В уроке 1С-Битрикс есть настройка тегированного кеша инфоблока с вариантами сброса: после каждой операции, в конце каждого шага импорта или после окончания импорта. Если выбрано «Не сбрасывать», информация на сайте не обновляется. Проверьте этот параметр, прежде чем искать ошибку в самом обмене.
Заказы с сайта не приходят в 1С: что проверить
Если заказы с сайта не приходят в 1С, в большинстве случаев они просто не подходят под условия выгрузки на закладке «Заказы» формы «Интеграция с 1С». Там задаются фильтры, и заказ, который им не соответствует, сайт в 1С не отдает, хотя ошибки при этом нет.
| Настройка на закладке «Заказы» | Как мешает | Что проверить |
|---|---|---|
| Выгружать только оплаченные заказы | Неоплаченные заказы в 1С не попадают | Нужна ли опция, если оплата идет по счету после звонка менеджера |
| Выгружать только заказы с разрешенной доставкой | Заказы без разрешенной доставки остаются на сайте | Кто и когда разрешает доставку в заказе |
| Выгружать заказы начиная со статуса | Заказы в более ранних статусах не выгружаются | Какой статус у новых заказов и меняют ли его менеджеры |
| Выбор сайта для выгрузки | На многосайтовой установке выгружаются заказы не того сайта | Указан нужный сайт или все сайты |
| Группы, которым разрешена выгрузка | Обмен заказами падает на авторизации | Отмечена ли группа пользователя обмена |
| Профили обмена | Не те поля заказа передаются в 1С, 1С не может сопоставить контрагента | Настроены ли поля для каждого типа плательщика |
Со стороны 1С тоже есть обязательные условия. В курсе 1С-Битрикс об интеграции с 1С указано, что для обмена заказами в настройках узла обмена должна быть отмечена опция «Активировать обмен документами» на закладке «Режим обмена данными». Там же есть важное предупреждение: для одного узла нельзя одновременно использовать обмен по расписанию и обмен в режиме реального времени. Если оба режима включены, обмен ведет себя непредсказуемо.
Еще одна деталь из протокола: после того как 1С получила заказы, она подтверждает это запросом mode=success. Если запись в 1С не удалась, подтверждения не будет. Поэтому при сбоях на стороне 1С заказы на сайте могут выглядеть невыгруженными и приходить повторно при следующем обмене.
По протоколу, состояния оплаты и отгрузки возвращаются из 1С на сайт только при полном выполнении операции, то есть при полной оплате и полной отгрузке. Если клиент оплатил половину, на сайте заказ останется неоплаченным, и это не ошибка обмена, а правило протокола.
Пример: магазин после переезда на новый хостинг
Пример условный, но собран из типичных ситуаций. Магазин стройматериалов в Алматы перенес сайт на 1С-Битрикс на новый сервер. Сайт открывается, заказы оформляются, а обмен с 1С перестал работать.
Разбор по шагам выглядел бы так:
- В протоколе 1С видно, что авторизация проходит, а передача файла каталога падает, и в ответ вместо «success» приходит HTML-страница.
- В журнале веб-сервера за время обмена есть ошибка о слишком большом теле запроса. На старом хостинге лимит был выше.
- Размер части файла в настройках уменьшили, лимит на сервере подняли, каталог выгрузился.
- Следом обнаружилось, что новые заказы в 1С не приходят. На новом сервере сайт перевели на https, а в 1С остался старый адрес с http, и при редиректе запрос заказов терялся. Адрес исправили.
- Последний штрих: часть цен на сайте не обновлялась. После переезда в настройках кеша инфоблока оказалось выбрано «Не сбрасывать».
Ни одна из трех проблем не связана с поломкой 1С или 1С-Битрикс: при переезде просто никто не перенес настройки окружения.
Как снизить нагрузку и не ловить те же сбои снова
Большинство повторных сбоев обмена связано с объемом: каталог растет, картинок становится больше, и обмен, который год назад шел за пять минут, начинает упираться в лимиты сервера. В форме «Интеграция с 1С» есть несколько настроек, которые помогают заранее.
Опция «Использовать контрольные суммы элементов для оптимизации обновления каталога» включает режим, при котором даже при полной выгрузке каталога на сайте меняются только изменившиеся товары. По описанию 1С-Битрикс, это заметно снижает нагрузку на сервер и сокращает время обновления. Для магазина с тысячами позиций, где за день меняются цены у сотни товаров, разница ощутимая.
Опции «Автоматически генерировать картинку анонса» и «Изменять детальную картинку» заставляют сайт самостоятельно уменьшать изображения, пришедшие из 1С, до заданных размеров. Так на сайт не попадают огромные фотографии прямо с камеры, которые раздувают и обмен, и вес страниц каталога.
Кроме настроек, помогает простой порядок работы:
- заведите отдельного пользователя только для обмена и не используйте для него учетную запись сотрудника;
- перед обновлением 1С-Битрикс, модуля обмена или конфигурации 1С проверяйте обмен на тестовой копии сайта;
- после любых работ на сервере (переезд, смена PHP, включение защиты от ботов) запускайте обмен вручную и смотрите протокол;
- запишите, какие фильтры заказов включены и зачем, чтобы новый сотрудник не менял их наугад.
Когда звать разработчика, а когда хватит администратора
Права пользователя, адрес сайта в 1С, фильтры на закладке «Заказы» и сброс кеша администратор магазина проверяет сам за полчаса. Разработчик нужен, если сайт отвечает HTML-кодом с ошибкой PHP или SQL, если обмен доработан под нестандартную конфигурацию 1С, если каталог в 1С устроен так, что «не ложится» в структуру сайта без доработок, или если нужны свои обработчики при загрузке товаров.
В уроке 1С-Битрикс об импорте из 1С есть полезный совет: импорт не всегда применим в чистом виде, и при кастомизированной конфигурации или сложной номенклатуре лучше сначала наполнить магазин другими способами, а затем отдельно наладить интеграцию с учетной системой. Из 1С при этом нужно получать как минимум название, артикул, описание и структуру каталога, а картинки и дополнительные свойства можно вести на сайте.
Обзор способов связать магазин с учетом мы давали в статье об интеграции интернет-магазина на 1С-Битрикс с 1С:Бухгалтерией. Если обмен падает регулярно, а разбираться с ним приходится каждый раз заново, имеет смысл один раз описать настройки обмена и окружение сервера, а сам обмен поставить на мониторинг. Такие задачи мы берем в рамках разработки и сопровождения сайтов на 1С-Битрикс: от разбора конкретного сбоя до доработки обмена под вашу конфигурацию 1С.
У магазинов в Казахстане, с которыми мы работаем, схема обычно одна: учет ведется в 1С, сайт продает, и любой разрыв между ними означает неверные остатки на витрине и заказы, которые менеджер переносит руками. Чем раньше найден шаг, на котором ломается обмен, тем меньше таких заказов накопится.
Частые вопросы
Где в 1С-Битрикс настраивается обмен с 1С?
Обмен с 1С настраивается в административной части сайта на странице «Магазин → Настройки → Интеграция с 1С». Там есть закладки для выгрузки каталога, экспорта каталога, обмена заказами и профилей обмена. Для большинства магазинов подходят параметры по умолчанию, но группы пользователей с правом обмена и условия выгрузки заказов нужно проверить под свой процесс.
Что значит ответ failure при обмене 1С с сайтом?
Ответ «failure» значит, что на одном из шагов обмена сайт столкнулся с ошибкой и прервал обработку. По протоколу обмена в следующих строках ответа идет описание ошибки, поэтому смотреть нужно текст после этого слова. Если вместо короткого ответа пришел HTML-код, значит, упала ошибка уровня ядра, базы данных или сервера.
Почему заказы с сайта не выгружаются в 1С, хотя ошибок нет?
Чаще всего заказы не подходят под фильтры на закладке «Заказы» в настройках интеграции с 1С. Там можно выгружать только оплаченные заказы, только заказы с разрешенной доставкой или заказы начиная с определенного статуса. Заказ, который не прошел фильтр, сайт в 1С не отдает и ошибкой это не считает.
Можно ли использовать для обмена учетную запись администратора сайта?
Можно, если группа «Администраторы» отмечена в поле «Разрешить загрузку группам пользователей» и в списке групп, которым разрешена выгрузка заказов. Надежнее завести отдельного пользователя только для обмена: тогда смена пароля администратора или его увольнение не остановят обмен, а в журналах сразу видно действия 1С.
Почему после обмена с 1С пропали товары на сайте?
Обычно товары пропадают, когда из 1С выгрузили не весь каталог, а сайт или модуль обмена деактивировал все, чего не было в файле. Это задается настройками для товаров и групп, отсутствующих в файле импорта, а при работе через модуль обмена его собственным параметром деактивации. Проверьте состав выгрузки и эти настройки.
