Заказы интернет-магазина в 1С: от выбора способа обмена до сверки остатков

· 10 мин

Содержание

Чтобы подключить заказы интернет-магазина к 1С, включите в программе обмен с сайтом и создайте узел обмена. В «1С:Управление торговлей 11» и «1С:Бухгалтерии 3.0» это флажок «Обмен с сайтами» в разделе Синхронизация данных (в УТ он лежит в НСИ и администрирование, в БП — в Администрирование). Обмен идёт по протоколу CommerceML: 1С сама обращается к сайту, забирает новые заказы и отдаёт каталог, цены и остатки. Если сайт самописный или нужен обмен в реальном времени, вместо CommerceML публикуют HTTP-сервис 1С и сайт отправляет заказы в него сам.

Что привести в порядок в базе до подключения заказов

Заказ с сайта — это покупатель, товары, цены и склад. Если хоть один справочник не готов, обмен либо остановится с ошибкой, либо создаст в базе мусор: дубли покупателей и номенклатуры.

Номенклатура и идентификаторы

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

  • 🔑 Уникальный идентификатор 1С (GUID). CommerceML передаёт его в теге <Ид>. Если каталог на сайт изначально выгружали из 1С, совпадение гарантировано.
  • 🏷️ Артикул. Подходит, если каталог на сайте завели вручную. Но артикулы должны быть заполнены у всех позиций и не повторяться.
  • 📦 Штрихкод. Удобен для маркетплейсов, где товар уже привязан к штрихкоду.

Не меняйте ключ сопоставления после запуска обмена. Если перейти с GUID на артикул на живом магазине, следующая загрузка не найдёт ни одного товара.

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

Покупатели, склады, цены

СправочникЧто подготовить
КонтрагентыРешите, как идентифицировать покупателя: по ИНН (для юрлиц), телефону или email. Розничных можно собирать на одного контрагента «Розничный покупатель»
СкладыУкажите, с какого склада отгружаются заказы сайта и по каким складам считать остаток
Виды цен (УТ) / Типы цен (БП)Заведите отдельную цену для сайта, если она отличается от прайса для опта
ОрганизацияОпределите, от какой организации оформлять заказы, если их в базе несколько
Способы доставки и оплатыДоставку чаще всего загружают услугой — заведите для неё позицию номенклатуры с видом «Услуга»

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

CommerceML, HTTP-сервис или модуль маркетплейса: какой способ выбрать

Способов подключить заказы в 1С три. Они отличаются тем, кто инициирует обмен и насколько быстро заказ попадает в базу.

СпособКто инициируетЗадержкаКогда подходитОграничения
Типовой обмен с сайтами (CommerceML)1С по расписаниюОт нескольких минут — по интервалу расписания1С-Битрикс, CMS с готовым модулем обменаФормат фиксирован, доработки — на стороне сайта
HTTP-сервис 1С (REST, JSON)Сайт в момент оформленияСекундыСамописный сайт, свой формат, нужен мгновенный резервНужна публикация на веб-сервере и программист 1С
Модуль интеграции с маркетплейсом1С через API площадкиПо расписаниюOzon, Wildberries, Яндекс МаркетНабор полей задаёт площадка

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

Как устроен обмен по CommerceML

Обмен инициирует 1С: она обращается к скрипту обмена на сайте по HTTP с логином и паролем. Для заказов цепочка такая:

  1. mode=checkauth — авторизация, сайт возвращает cookie сессии.
  2. mode=init — сайт сообщает, принимает ли архив и какой размер файла допустим.
  3. type=sale&mode=query — сайт отдаёт XML с новыми и изменёнными заказами.
  4. mode=success — 1С подтверждает, что загрузила заказы, и сайт помечает их как выгруженные.
  5. mode=file — 1С отправляет обратно заказы с изменёнными статусами.

Каталог при этом уходит отдельными файлами: товары в import.xml, цены и остатки в offers.xml.

Если шаг mode=success не прошёл, сайт отдаст те же заказы ещё раз. Поэтому обмен должен опознавать уже загруженный заказ по номеру сайта и обновлять его, а не создавать второй.

Когда нужен HTTP-сервис

HTTP-сервис выбирают, когда заказ должен зарезервировать товар сразу, а не через 15 минут. Его создают в расширении конфигурации, чтобы не снимать типовую конфигурацию с поддержки, и публикуют на веб-сервере через Конфигуратор: Администрирование → Публикация на веб-сервере. Сайт отправляет POST-запрос с JSON по адресу вида https://сервер/база/hs/orders/new.

Минимальный обработчик принимает тело запроса, разбирает JSON и отвечает сайту:

Функция OrdersNewPOST(Запрос)

    ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку("UTF-8");

    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(ТелоЗапроса);
    ДанныеЗаказа = ПрочитатьJSON(Чтение, Истина);
    Чтение.Закрыть();

    НомерНаСайте = ДанныеЗаказа.Получить("number");

    // Здесь: поиск заказа по номеру сайта, создание или обновление документа
    РезультатЗаписи = Новый Структура("status, number", "accepted", НомерНаСайте);

    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, РезультатЗаписи);

    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    Ответ.УстановитьТелоИзСтроки(Запись.Закрыть());
    Возврат Ответ;

КонецФункции

Флаг Истина во втором параметре ПрочитатьJSON возвращает соответствие, поэтому значение берут через Получить. Если ключа в JSON нет, вернётся Неопределено, а не ошибка — проверяйте обязательные поля перед созданием документа.

Правила обмена: как настроить сопоставление и расписание

Настройка узла типового обмена

После включения флажка «Обмен с сайтами» создайте новый узел обмена и заполните его по вкладкам:

  1. Адрес сайта, логин и пароль пользователя, под которым 1С заходит в скрипт обмена. На стороне сайта у этого пользователя должны быть права на обмен.
  2. Что выгружать. Группы номенклатуры, склады для остатков, вид цен.
  3. Что загружать. Включите загрузку заказов, выберите организацию, склад, вид цен по умолчанию.
  4. Как искать контрагентов. По ИНН, по наименованию или создавать одного розничного покупателя.
  5. Расписание. Для заказов разумно 5–15 минут, для полной выгрузки каталога — раз в сутки ночью.

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

Карта полей заказа

Какой бы способ ни выбрали, сначала составьте таблицу соответствия: какое поле сайта в какой реквизит 1С попадает. Это главный документ интеграции — по нему потом ищут любую ошибку.

Сопоставление полей
Номер заказа на сайте→Номер по данным клиента (для поиска дублей)
Дата оформления→Дата документа
Email / телефон покупателя→Поиск контрагента
ИНН (для юрлиц)→Контрагент и договор
Ид или артикул товара→Номенклатура
Размер, цвет→Характеристика номенклатуры
Количество и цена→Табличная часть «Товары»
Скидка по промокоду→Ручная скидка в строке
Стоимость доставки→Услуга «Доставка» в табличной части
Способ оплаты→Форма оплаты
Статус на сайте→Статус заказа в 1С

Номер заказа сайта храните в отдельном реквизите, а не в комментарии. По комментарию нельзя надёжно найти заказ при повторной загрузке.

Что происходит с заказом после загрузки: документы и статусы

Какой документ создаётся

В УТ 11 заказ с сайта превращается в документ «Заказ клиента ». Дальше он живёт как обычный заказ: резервирует товар, по нему выставляют счёт, оформляют реализацию.

В «1С:Бухгалтерии 3.0» документа заказа нет, поэтому заказы загружаются счетами на оплату покупателю. Резерва в БП нет — остаток уменьшится только после реализации.

Сопоставление статусов

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

Статус на сайтеДействие в 1СЧто уходит на сайт
НовыйЗаказ создан, статус «Не согласован»—
ОплаченОтражена оплата, заказ переведён в работу («К выполнению»)«Принят в работу»
ОтгруженСоздана реализация«Передан в доставку»
Отменён покупателемСтроки отменены с причиной отмены, резерв снят—
ВыполненЗаказ закрыт«Выполнен»

Ключевое правило: у каждого статуса один хозяин. Если оплату фиксирует сайт, а отгрузку — склад в 1С, нельзя разрешать менеджеру менять статус «Отгружен» на сайте вручную. Иначе следующий обмен перезапишет его обратно, и покупатель получит два противоречивых уведомления.

Что делать с изменённым заказом

Покупатель позвонил и попросил заменить товар. Если заказ на сайте поменяли после загрузки, обмен привезёт новую версию. Решите заранее:

  • ✏️ Обновлять заказ в 1С, пока по нему нет отгрузки.
  • 🔒 Запрещать изменение после создания реализации — и вести такие правки только в 1С.

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

Синхронизация остатков и цен с сайтом

Заказы — только половина обмена. Вторая половина — не дать покупателю купить то, чего нет.

Какой остаток отдавать

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

Пример: на складе 12 штук, под заказы клиентов зарезервировано 9, страховой запас для сайта — 2. На сайт уходит 12 − 9 − 2 = 1.

Как часто выгружать

ЧтоЧастотаПочему
ОстаткиКаждые 5–15 минут, только измененияИначе продаёте отсутствующий товар
ЦеныПри изменении прайса или раз в часЦены меняются реже, полная выгрузка тяжелее
Каталог целикомРаз в сутки ночьюОписания и картинки весят много

Полная выгрузка каталога на 20–30 тысяч позиций может идти десятки минут и упираться в лимиты сайта по размеру файла и времени выполнения скрипта. Выгружайте в рабочее время только изменения, а полную — ночью.

Маркетплейсы

У маркетплейса остаток — это ваше обещание. Площадки снижают рейтинг продавца за отмены, поэтому на Ozon и Wildberries обычно отдают остаток с бо́льшим страховым запасом, чем на свой сайт. Если товар продаётся в нескольких каналах одновременно, делите свободный остаток между ними явно, а не отдавайте всем площадкам одну и ту же цифру.

Ошибки обмена заказами: где смотреть журнал и как найти причину

Где искать следы

  • 📜 Журнал регистрации 1С. Администрирование → Обслуживание → Журнал регистрации. Отберите события за время обмена и уровень «Ошибка» — там текст исключения и пользователь, под которым шёл обмен.
  • 📊 Протокол узла обмена. В форме узла видно дату последнего успешного обмена и результат последнего сеанса.
  • 🌐 Лог сайта. Модули обмена CMS пишут свой журнал: какие запросы пришли от 1С и что им ответили.
  • 🧾 Ответ HTTP-сервиса. Для своей интеграции пишите в журнал регистрации каждый входящий запрос через ЗаписьЖурналаРегистрации с номером заказа — без этого искать потерянный заказ нечем.

Скрипт обмена CommerceML отвечает одним из слов: success, progress (продолжаю обработку, повторите запрос) или failure с текстом причины. Текст после failure — первое, что стоит прочитать.

Частые симптомы и причины

Диагностика: выберите симптом

Проверка на тестовой копии

Первый запуск делайте не на рабочей базе. Выгрузите копию, переключите в ней узел на тестовый сайт или тестовый кабинет маркетплейса и прогоните 10–20 заказов разных типов: с доставкой, со скидкой, с товаром с характеристикой, отменённый.

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

В копии базы отключите регламентные задания обмена с рабочим сайтом. Иначе копия заберёт настоящие заказы, сайт пометит их выгруженными, и в рабочую базу они не попадут.

Частые вопросы о подключении заказов к 1С

Можно ли подключить заказы к 1С, если сайт не на 1С-Битрикс?
Да. У большинства популярных CMS есть модули обмена по CommerceML. Если модуля нет, сайт может отправлять заказы в HTTP-сервис 1С в своём формате.
Нужен ли белый IP-адрес у сервера 1С?
Для типового обмена — нет: 1С сама ходит на сайт, достаточно исходящего доступа в интернет. Для HTTP-сервиса — да, сайт должен достучаться до веб-сервера с опубликованной базой, и публикацию стоит закрыть HTTPS и авторизацией.
Работает ли обмен с сайтом в файловой базе?
Да, типовой обмен с сайтами работает и в файловом варианте. Но регламентное задание по расписанию выполняется, только когда база открыта хотя бы у одного пользователя, поэтому для круглосуточного обмена лучше клиент-серверный вариант.
Как загрузить заказы, которые пришли, пока обмен был выключен?
Сайт копит невыгруженные заказы, пока не получит подтверждение. После включения обмена они придут одной пачкой при первом сеансе.
Сколько стоит подключение заказов сайта к 1С?
Ориентировочно: настройка типового обмена по CommerceML силами специалиста — от одного до нескольких рабочих дней. Своя интеграция через HTTP-сервис с картой полей, статусами и тестами обычно занимает от одной до нескольких недель работы программиста.