Заказы интернет-магазина в 1С: от выбора способа обмена до сверки остатков
Содержание
Чтобы подключить заказы интернет-магазина к 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 с логином и паролем. Для заказов цепочка такая:
mode=checkauth— авторизация, сайт возвращает cookie сессии.mode=init— сайт сообщает, принимает ли архив и какой размер файла допустим.type=sale&mode=query— сайт отдаёт XML с новыми и изменёнными заказами.mode=success— 1С подтверждает, что загрузила заказы, и сайт помечает их как выгруженные.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С заходит в скрипт обмена. На стороне сайта у этого пользователя должны быть права на обмен.
- Что выгружать. Группы номенклатуры, склады для остатков, вид цен.
- Что загружать. Включите загрузку заказов, выберите организацию, склад, вид цен по умолчанию.
- Как искать контрагентов. По ИНН, по наименованию или создавать одного розничного покупателя.
- Расписание. Для заказов разумно 5–15 минут, для полной выгрузки каталога — раз в сутки ночью.
Перед включением расписания запустите обмен вручную и посмотрите, сколько заказов загрузилось и сколько ушло с ошибками.
Карта полей заказа
Какой бы способ ни выбрали, сначала составьте таблицу соответствия: какое поле сайта в какой реквизит 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 заказов разных типов: с доставкой, со скидкой, с товаром с характеристикой, отменённый.
Перед переключением обмена на рабочую базу сделайте её резервную копию. Первая загрузка может создать сотни контрагентов и номенклатуры, и откатывать их вручную гораздо дольше, чем восстановить копию.
В копии базы отключите регламентные задания обмена с рабочим сайтом. Иначе копия заберёт настоящие заказы, сайт пометит их выгруженными, и в рабочую базу они не попадут.