Обмен сайта с 1С: как устроен и где чаще всего ломается
Обмен сайта с 1С устроен так: 1С по расписанию отдаёт сайту каталог, цены и остатки, а сайт отдаёт в 1С новые заказы. Технически это делается тремя способами: стандартным протоколом CommerceML (XML-файлы, которые понимают Битрикс, Shop-Script на Webasyst и модули для WooCommerce), REST-интерфейсом OData, который есть в типовых конфигурациях 1С, или собственными HTTP-сервисами внутри 1С. Ломается обмен чаще всего не из-за техники, а из-за данных: пустых и повторяющихся артикулов, характеристик товаров, разных единиц измерения и настроек облачной 1С. Ниже разбираем, как работает каждый вариант, что проверять и где искать причину, когда цены на сайте вдруг перестали обновляться.
Что именно передаётся между сайтом и 1С
Прежде чем выбирать способ, договоритесь внутри компании, какая система главная для каждого типа данных. Если это не решить, через месяц цену поправят на сайте, а ночной обмен перезапишет её ценой из 1С, и никто не поймёт, куда делась правка.
| Данные | Направление | Где обычно «главная» версия |
|---|---|---|
| Номенклатура: название, артикул, группа | 1С → сайт | 1С |
| Описания, фото, SEO-тексты | только на сайте | сайт |
| Цены | 1С → сайт | 1С, конкретный вид цен |
| Остатки | 1С → сайт | 1С, конкретные склады |
| Заказы | сайт → 1С | сайт создаёт, 1С ведёт дальше |
| Статусы заказов, оплаты | 1С → сайт | 1С |
| Клиенты | в обе стороны | зависит от процесса |
Описания и фотографии лучше держать на сайте. Тексты для карточек пишутся под поиск и под покупателя, а в 1С поле «Описание» обычно заполнено кое-как или пустое. Если обмен настроен на полную перезапись карточки, он сотрёт работу контент-менеджера. Подробнее о том, что должно быть в карточке, в статье как написать описание товара.
CommerceML: стандартный обмен с интернет-магазином
CommerceML это формат на основе XML, который фирма «1С» разработала для обмена с торговыми площадками. Он встроен в типовые конфигурации: 1С:Управление торговлей, 1С:УНФ, 1С:Комплексная автоматизация, ERP.
Как это работает
Инициатор обмена всегда 1С. Она обращается к сайту по адресу обработчика (в Битриксе это /bitrix/admin/1c_exchange.php, у других CMS свой путь) и проходит несколько шагов:
mode=checkauth: авторизация по логину и паролю, которые вы указали в 1С и на сайте.mode=init: сайт сообщает, принимает ли он zip-архивы и какой максимальный размер файла.mode=file: 1С передаёт файлыimport.xml(каталог: группы, товары, свойства) иoffers.xml(предложения: цены, остатки, характеристики).mode=import: сайт разбирает файлы и обновляет каталог. Если файл большой, сайт отвечаетprogress, и 1С повторяет запрос, пока не получитsuccess.- Для заказов отдельный цикл с
type=sale: 1С забирает новые заказы в XML и подтверждает получение.
В 1С:Управление торговлей 11 настройка находится в разделе «НСИ и администрирование», пункт «Синхронизация данных», затем «Обмен с сайтами». Там выбирают, какие группы номенклатуры выгружать, какой вид цен, какие склады и как часто запускать обмен.
Плюсы и минусы
Плюс CommerceML в том, что его не нужно программировать: с обеих сторон есть готовые модули. Минус в том, что он тяжёлый. Каталог на 20-30 тысяч позиций с характеристиками даёт XML на десятки мегабайт, полная выгрузка идёт долго и упирается в лимиты хостинга по времени выполнения скрипта и памяти. Поэтому после первой полной выгрузки включают выгрузку «только изменений», а цены и остатки гоняют отдельно и чаще, чем каталог.
OData: когда нужен не магазин, а данные
OData это REST-интерфейс, который есть в платформе 1С начиная с версии 8.3. Через него внешняя программа может читать справочники, документы и регистры по HTTP и получать ответ в JSON. Например, запрос к /odata/standard.odata/Catalog_Номенклатура вернёт номенклатуру, а запрос к регистру остатков вернёт остатки по складам.
Чтобы OData заработал, нужно:
- опубликовать базу на веб-сервере (Apache или IIS) с галочкой публикации стандартного интерфейса OData;
- включить нужные объекты в состав интерфейса: по умолчанию он пустой, объекты добавляют обработкой «Настройка стандартного интерфейса OData» (в ряде типовых конфигураций она встроена, в остальных её берут с ИТС);
- завести отдельного пользователя 1С с правами только на чтение того, что нужно.
OData удобен, когда сайт не типовой интернет-магазин: каталог на Astro, который пересобирается раз в час, витрина для дилеров, CRM, которой нужны остатки и оплаты. Сайт сам забирает то, что ему нужно, и не зависит от расписания обмена в 1С. По похожей схеме устроена связь с 1С в CRM, которую мы написали и поддерживаем для торговой компании: CRM сама забирает из учёта то, что нужно менеджерам, и не ждёт ночного обмена.
Ограничение: OData медленный на больших выборках и неудобен для сложной логики. Посчитать «остаток минус резерв по трём складам с учётом заказов в пути» одним запросом не получится, придётся собирать на своей стороне.
HTTP-сервисы: свой API внутри 1С
Третий способ: программист 1С пишет в конфигураторе HTTP-сервис, который отдаёт ровно те данные и в том виде, в каком их ждёт сайт. Или принимает заказ и сразу создаёт документ с нужными реквизитами.
Это самый гибкий вариант, но и самый дорогой в поддержке. HTTP-сервис живёт внутри конфигурации, и при её обновлении его нужно проверять. Чтобы не снимать типовую конфигурацию с поддержки, сервис оформляют расширением конфигурации. Тогда обновления ставятся штатно, а расширение подключается поверх.
Что выбрать
| Ситуация | Способ |
|---|---|
| Типовой интернет-магазин на Битриксе, Webasyst, WooCommerce | CommerceML |
| Нужно читать остатки, цены, оплаты в CRM или в своём сайте | OData |
| Сложная логика, свои документы, мгновенная реакция | HTTP-сервис в расширении |
| Облачная 1С без доступа к конфигуратору | CommerceML или OData, если провайдер его публикует |
Заказы обратно в 1С
Выгрузка каталога на сайт обычно заводится за пару дней. Обратная дорога, заказы с сайта в 1С, приносит больше проблем, потому что тут встречаются два разных учёта.
Дубли контрагентов. Каждый заказ от физлица создаёт в 1С нового контрагента, если обмен не умеет искать существующего по телефону или почте. Через полгода в справочнике десять «Ивановых». Решение: настроить поиск по ИНН для юрлиц и по нормализованному телефону для физлиц, а розничные заказы без ИНН вести на одного общего контрагента «Розничный покупатель».
Доставка и скидки. Доставку на сайте считают отдельной строкой, а в 1С она должна быть услугой из справочника номенклатуры. Если такой услуги нет или у неё другой код, заказ приходит без доставки или не приходит вовсе. Скидки по промокодам в CommerceML передаются, но по-разному обрабатываются в разных конфигурациях: проверьте на тестовом заказе, что итоговая сумма в 1С совпадает с суммой на сайте до копейки.
Статусы. Покупатель хочет видеть на сайте «Оплачен», «Отгружен». Для этого 1С должна отдавать статусы обратно, а на сайте должна быть таблица соответствия статусов 1С и статусов магазина. Без неё в личном кабинете покупателя заказ вечно «В обработке».
Номера заказов. На сайте заказ № 1024, в 1С он стал «УТ-000512». Менеджер ищет по одному номеру, клиент называет другой. Номер сайта нужно сохранять в комментарии или в отдельном реквизите документа, чтобы по нему находился заказ.
Где обмен ломается: типичные поломки
Артикулы
Самая частая причина. Сайт сопоставляет товары с 1С либо по внутреннему идентификатору 1С (GUID), либо по артикулу. Проблемы начинаются, когда:
- у части товаров артикул пустой, и они на сайте создаются заново при каждом обмене;
- один артикул у двух разных позиций, и цена одного товара записывается в карточку другого;
- товар в 1С пересоздали (удалили и завели заново), GUID сменился, и на сайте появилась вторая карточка с пустым описанием, а старая с текстами и отзывами ушла в «нет в наличии».
Перед запуском обмена выгрузите номенклатуру из 1С в Excel и проверьте артикулы: пустые, дубли, лишние пробелы, латинская «С» вместо кириллической. Это скучная работа на пару часов, которая убирает половину будущих проблем.
Характеристики
В 1С размер и цвет обычно заведены характеристиками номенклатуры: один товар «Футболка», у неё 12 характеристик. В offers.xml каждая характеристика приходит отдельным предложением с идентификатором вида GUID-товара#GUID-характеристики. Если модуль сайта не умеет превращать их в варианты одного товара, на сайте появляется 12 отдельных карточек или одна карточка с остатком, который на самом деле сумма всех размеров. Решение зависит от CMS: в Битриксе это торговые предложения, в Shop-Script артикулы товара, в WooCommerce вариативные товары. Проверьте это на одном товаре до полной выгрузки.
Единицы измерения
В 1С товар учитывается в штуках, а продаётся упаковкой по 10. Или наоборот: на складе коробки, а на сайте нужна цена за штуку. Если обмен передаёт остаток в базовой единице, а цену за упаковку, покупатель видит «в наличии 240» и цену за коробку. Нужно явно решить, в какой единице показывается товар на сайте, и настроить пересчёт по коэффициенту.
Цены и остатки
- Выгружается не тот вид цен: розничная вместо интернет-цены, или цена без НДС.
- Остатки берутся по всем складам, включая брак и витрину, и сайт продаёт то, чего нет.
- Не учитывается резерв: товар уже отложен под другой заказ, а на сайте он в наличии.
- Цена ноль. Если у товара в выбранном виде цен нет цены, на сайте он появится за 0 ₽ или исчезнет. Проверьте, как ваш модуль обрабатывает этот случай, и лучше скрывайте такие позиции.
Облачная 1С
Многие работают в 1С в облаке у провайдера. Тут свои особенности:
- Обмен по расписанию запускается регламентным заданием. В части облачных тарифов регламентные задания работают с ограничениями или только пока кто-то в базе, и ночной обмен просто не происходит.
- Публикация OData и HTTP-сервисов делается провайдером. У одних это галочка в личном кабинете, у других отдельная заявка, у третьих недоступно. Выясните это до того, как выбирать архитектуру.
- Сайт должен быть доступен из облака 1С по HTTPS с нормальным сертификатом. Самоподписанный сертификат или редирект с
wwwна домен безwwwломают авторизацию на первом же шаге. - Доработать конфигурацию в облаке обычно нельзя, расширения разрешены не везде.
Как проверить, что обмен работает
Раз в неделю, а после любых обновлений 1С или сайта обязательно, пройдите короткий список:
- Откройте журнал обмена в 1С: были ли ошибки за последние сутки, сколько объектов выгружено.
- Измените цену одного товара в 1С и дождитесь обмена. Проверьте цену на сайте, в карточке и в корзине.
- Проведите приход на один товар, которого не было в наличии. Проверьте, что на сайте он стал доступен к заказу.
- Оформите тестовый заказ на сайте с доставкой и промокодом. Найдите его в 1С, сверьте сумму, контрагента, доставку.
- Сравните число активных товаров на сайте и в выгружаемых группах 1С. Расхождение больше пары процентов означает, что часть товаров теряется по дороге.
Для каталога из тысяч позиций эту проверку стоит автоматизировать: скрипт раз в сутки сравнивает цены и остатки на сайте с данными 1С через OData и присылает список расхождений в Telegram. Это проще, чем узнавать о сбое от покупателя, которому продали отсутствующий товар.
Частые вопросы
Сколько стоит настроить обмен сайта с 1С?
Если сайт на CMS с готовым модулем, а данные в 1С в порядке, настройка CommerceML занимает от нескольких дней. Основное время уходит на чистку артикулов, характеристик и единиц, а также на заказы обратно в 1С. Обмен через OData или HTTP-сервисы под нестандартную задачу оценивается после того, как понятны объём данных и логика.
Как часто запускать обмен?
Каталог обычно раз в сутки ночью. Цены и остатки каждые 15-60 минут, если товар быстро заканчивается. Заказы с сайта лучше забирать каждые 5-10 минут, чтобы менеджер видел их в 1С почти сразу.
Можно ли связать с 1С сайт на Tilda или на Astro?
Готового обмена CommerceML у таких сайтов нет, но есть другой путь: скрипт по расписанию забирает остатки и цены из 1С через OData и обновляет каталог сайта, а заказы передаются в 1С или в CRM через API. Для статического сайта на Astro это работает быстро: данные подтягиваются при пересборке.
Почему обмен с 1С перестал работать после обновления?
Чаще всего после обновления конфигурации сбрасываются настройки узла обмена, меняется версия формата CommerceML или перестаёт работать доработка, внесённая прямо в конфигурацию. Проверьте журнал обмена в 1С и логи обработчика на сайте: ошибка обычно видна в первых строках.
Если обмен уже есть, но работает через раз, или его только предстоит настроить, мы можем разобрать ваши данные и выбрать способ под вашу 1С и ваш сайт. Подробнее на странице интеграции с 1С. Если магазин ещё только планируется, обмен с учётной системой лучше заложить сразу при разработке интернет-магазина, а связь с отделом продаж описана в статье какую CRM выбрать.