Обмен сайта с 1С: как устроен и где чаще всего ломается

Автоматизация 11 мин чтения

Обмен сайта с 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 свой путь) и проходит несколько шагов:

  1. mode=checkauth: авторизация по логину и паролю, которые вы указали в 1С и на сайте.
  2. mode=init: сайт сообщает, принимает ли он zip-архивы и какой максимальный размер файла.
  3. mode=file: 1С передаёт файлы import.xml (каталог: группы, товары, свойства) и offers.xml (предложения: цены, остатки, характеристики).
  4. mode=import: сайт разбирает файлы и обновляет каталог. Если файл большой, сайт отвечает progress, и 1С повторяет запрос, пока не получит success.
  5. Для заказов отдельный цикл с 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, WooCommerceCommerceML
Нужно читать остатки, цены, оплаты в 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С: были ли ошибки за последние сутки, сколько объектов выгружено.
  2. Измените цену одного товара в 1С и дождитесь обмена. Проверьте цену на сайте, в карточке и в корзине.
  3. Проведите приход на один товар, которого не было в наличии. Проверьте, что на сайте он стал доступен к заказу.
  4. Оформите тестовый заказ на сайте с доставкой и промокодом. Найдите его в 1С, сверьте сумму, контрагента, доставку.
  5. Сравните число активных товаров на сайте и в выгружаемых группах 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 выбрать.

Заявка

Обсудим вашу задачу

Опишите, что нужно, и пришлите адрес сайта, если он есть. Посмотрим, предложим решение и назовём цену и срок. Консультация бесплатная.

  • Ответим в течение рабочего дня
  • Работаем по договору, оплата по счёту
  • Сначала план и смета, потом работа

Или напишите: hello@sitekod.ru

Заявка

Расскажите о задаче

Ответим в течение рабочего дня: уточним детали, назовём срок и цену. Ни к чему не обязывает.