Золотой партнер 1с Презентация БЛАГОАЙТИ

121596, Россия, Москва, ул. Горбунова, 8с1, Офис 2
143005, Россия, МO, Oдинцово, ул. Можайское шоссе, 112А,Офис 1

работаем: пн-пт, выходные: сб-вс
c 9:00-18:00 мск

Баковка

Сетунь

190005 Санкт-Петербург, набережная Обводного канала, 116А , офис 314

работаем: пн-пт, выходные: сб-вс
c 9:00-18:00 мск

Балтийская

Пишите нам в любое время!
info@blagoit.com

ГлавнаяБлогБлог о разработке сайтовКак интегрировать интернет-магазин с 1С без дублей и ошибок

Как интегрировать интернет-магазин с 1С без дублей и ошибок

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


Если два контура по-разному идентифицируют один объект, не определен владелец информации или отсутствует обработка повторных запросов, появляются дубли, устаревшие сведения и ошибки. Поэтому при проектировании важно разобраться, как интегрировать интернет-магазин с 1С, и определить правила работы каждого типа информации.


Какие данные участвуют в обмене?


Чтобы понять, как работает интеграция 1С и интернет-магазина, сначала составляют карту объектов. Для каждого из них определяют источник, направление движения, периодичность и идентификатор.


Объект

Источник

Направление

Частота

Идентификатор

Номенклатура

1С

1С → витрина

По регламенту

ID позиции

Характеристики и SKU

1С

1С → витрина

По изменению

ID предложения

Цены

1С

1С → витрина

По регламенту

ID + тип цены

Наличие

1С

1С → витрина

Регулярно

ID + склад

Покупки

Интернет-магазин

В 1С

По событию

ID заказа

Статусы

1С

В интернет-магазин

По изменению

ID заказа


Такая матрица позволяет избежать ситуации, когда один параметр одновременно редактируется в двух местах.

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


Какие сведения передаются из 1С на сайт?


В типовой конфигурации могут передаваться:

  • • номенклатура;

  • • характеристики;

  • • изображения;

  • • свойства;

  • • цены;

  • • наличие;

  • • сведения о складах.


В обратном направлении обычно отправляется информация о созданных покупках и необходимых для их обработки реквизитах.


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


Схема взаимодействия


При простом проекте достаточно штатного механизма. Для магазина со сложными правилами между CMS и учетной программой может использоваться дополнительный интеграционный слой.


Схема обмена сайта с 1С:


┌─────────────────────┐

│  Интернет-магазин   │

│      CMS / API      │

└──────────┬──────────┘


↕

┌─────────────────────┐

│ Интеграционный слой │

│                     │

│ ID                  │

│ очередь             │

│ retry               │

│ логи                │

│ обработка ошибок    │

└──────────┬──────────┘

↕

┌─────────────────────┐

│         1С          │

│ учет / склады /     │

│ цены / номенклатура │

└─────────────────────┘


Если стандартных возможностей достаточно, добавлять промежуточную архитектуру только ради усложнения проекта не стоит. При этом архитектуру обмена важно учитывать еще на этапе создания интернет-магазина на 1С-Битрикс: состав интеграций, структура каталога и правила обмена проще заложить до запуска, чем переделывать их после накопления данных и заказов. 


В «1С-Битрикс» предусмотрен обмен с 1С в формате CommerceML, включая работу с каталогом и заказами. При этом CommerceML обмен с 1С определяет формат представления информации, но не решает за компанию вопросы приоритетов, идентификаторов и обработки конфликтов. Именно бизнес-правила определяют, что считать актуальным значением.


Идентификаторы и защита от дублей


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


Особенно внимательно следует проектировать связь основной карточки с торговыми предложениями. Размер, цвет, объем или комплектация должны однозначно относиться к нужной позиции.


Если этого не сделать, возникают дубли товаров при обмене с 1С. Система не узнает уже существующую запись и создает новую.


Похожая ситуация возможна с заказами. Например, запрос ушел в учетную программу, но ответ не вернулся из-за сетевого сбоя. Повторная отправка без проверки состояния способна привести к дубли заказов при обмене с 1С.


Идемпотентность


Здесь применяется принцип идемпотентности.


Идемпотентность обмена с 1С означает, что повторная обработка одной операции не должна создавать новый объект, если предыдущая попытка уже была принята.


Жизненный цикл заказа можно представить так:


Создание → очередь → отправка → подтверждение → обработка → обновление состояния


При временном сбое:


Ошибка → проверка → повторная попытка → подтверждение


Если проблема постоянная, операция переводится в состояние, требующее ручной проверки.


Именно поэтому ответ на вопрос как избежать дублей при обмене с 1С связан не с запретом повторных запросов, а с контролем идентификаторов и состояния каждой операции.


Каталог и SKU


Выгрузка товаров из 1С на сайт технически может выполняться штатными средствами. Но перед запуском необходимо проверить исходный справочник.


Проблемы могут возникнуть из-за:


  • • старых позиций;

  • • дублей;

  • • разных вариантов названий;

  • • неиспользуемых характеристик;

  • • отсутствующих идентификаторов;

  • • неправильных связей SKU.


Автоматизация не исправляет такую структуру самостоятельно.


Поэтому синхронизация каталогов 1С и сайта должна начинаться с сопоставления справочников.


Также заранее определяется, кто отвечает за описание и другие контентные поля.


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


Для каждого поля выбирается один из вариантов:


1С → интернет-магазин


интернет-магазин → 1С


поле не участвует в автоматической передаче.


Такой подход снижает вероятность конфликтов.


Цены, остатки и склады


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


До запуска определяют:


  • • какие типы стоимости используются;

  • • где рассчитываются скидки;

  • • кто выполняет округление;

  • • какое значение считается итоговым;

  • • что происходит при отсутствии цены.


С наличием ситуация сложнее.


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


фактическое количество → резерв → доступное количество.


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


Если используется несколько складов, дополнительно определяется: какие из них участвуют в расчете доступности и в каком порядке.


Передача заказов и статусов


Передача заказов с сайта в 1С представляет собой отдельный поток. В зависимости от конфигурации туда передаются состав покупки, количество, стоимость, сведения о клиенте, способ доставки, оплата и другие необходимые реквизиты.


Номер в CMS и внутренний номер учетной программы могут различаться. Связь между ними должна сохраняться на протяжении всего жизненного цикла.


После этого настраивается обмен статусами заказов с 1С. Например:


Новый → В обработке → Комплектация → Доставка → Выполнен.


Внутри учетной системы может существовать значительно больше состояний. Покупателю необязательно показывать всю внутреннюю классификацию, поэтому статусы сопоставляют.


Также заранее описываются нестандартные ситуации:


  • • отмена;

  • • возврат;

  • • отсутствие позиции;

  • • изменение количества;

  • • ошибка оплаты;

  • • частичная отгрузка.


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


Двусторонний обмен и API


Двусторонний обмен сайта с 1С не означает, что каждый параметр должен свободно перемещаться в обе стороны.


Например:


1С → интернет-магазин


каталог


стоимость


наличие


статусы


интернет-магазин → 1С


заказы


реквизиты покупки


данные клиента


Для нестандартной логики может использоваться интеграция сайта с 1С через API.


Такой вариант оправдан, когда штатный механизм не покрывает конкретный сценарий. Например, требуется собственная логика сопоставления, дополнительная проверка или взаимодействие с несколькими системами.


При этом API само по себе не делает решение надежным. Необходимы идентификаторы, журналирование, повторные попытки и контроль результата.


Очередь и повторные попытки


Не каждый запрос завершается успешно с первой попытки. Возможны сетевой сбой, временная недоступность сервера или длительная операция в учетной системе.


Поэтому очередь обмена сайта с 1С позволяет отделить создание операции от ее выполнения.


Пример:


Создано → поставлено в очередь → отправлено → подтверждено → завершено.


При временной ошибке используется retry.


Для каждой задачи стоит хранить:


  • • идентификатор;

  • • время первой попытки;

  • • количество повторов;

  • • последний результат;

  • • текст ошибки;

  • • время следующей попытки.


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


Также необходимо исключить одновременную обработку одной операции несколькими процессами.


Ошибки и журналирование


Типовые ошибки обмена сайта с 1С могут быть связаны не только с полной остановкой процесса.


Например, из нескольких тысяч позиций часть обновилась, а несколько десятков остались со старыми значениями. Формально процедура завершилась, но результат нельзя считать полностью корректным.


Поэтому журнал должен показывать не только общий итог.


Проблема

Возможная причина

Последствие

Проверка

Дубли карточек

Некорректное сопоставление

Повторные позиции

ID

Повтор заказа

Нет проверки состояния

Две одинаковые записи

ID заказа

Неверное наличие

Не учтен резерв

Продажа недоступной позиции

Правила склада

Исчезновение описания

Поле перезаписывается

Потеря ручных изменений

Владелец поля

Зависшая операция

Таймаут / блокировка

Обновление остановилось

Очередь и журнал


Хорошие логи обмена 1С с сайтом позволяют найти конкретную операцию и восстановить ее историю. Но одного журналирования недостаточно: после запуска необходимо регулярно контролировать обмен, отслеживать ошибки и проверять корректность обновления каталога и заказов. Поэтому для работающего проекта важна системная поддержка интернет-магазинов, а не только разовая настройка интеграции.


Минимально полезно сохранять:


  • • идентификатор;

  • • тип действия;

  • • направление;

  • • время;

  • • результат;

  • • сообщение об ошибке;

  • • число попыток.


Таймаут и частичный обмен


Таймаут обмена с 1С должен соответствовать реальной продолжительности операций.


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


Когда процедура регулярно превышает установленный предел, сначала ищут причину: объем данных, блокировки, медленные запросы или нагрузку.


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


Метод эффективен, если система точно определяет изменения. В противном случае можно пропустить обновление.


Поэтому переход на частичную передачу имеет смысл после анализа фактической нагрузки.


Безопасность


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


Минимальные требования:


  • • защищенное соединение;

  • • ограничение доступа к служебным адресам;

  • • разграничение прав;

  • • безопасное хранение секретов;

  • • контроль авторизации;

  • • журналирование критических операций.


CommerceML отвечает за формат передачи, а не за всю безопасность решения. Защита канала, сервера и учетных записей настраивается отдельно.


Тестирование и rollback


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


Обязательно тестируют:


  • • создание позиции;

  • • изменение характеристики;

  • • изменение стоимости;

  • • изменение наличия;

  • • несколько складов;

  • • резерв;

  • • создание заказа;

  • • повторную передачу;

  • • изменение статуса;

  • • отмену;

  • • возврат;

  • • недоступность 1С;

  • • недоступность CMS;

  • • превышение таймаута;

  • • частичный сбой;

  • • восстановление;

  • • повторный запуск;

  • • отсутствие дублей.


Нужен и сценарий rollback.


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


При этом rollback не всегда означает автоматическое восстановление всех изменений. Возможность отката зависит от конкретной архитектуры и уже выполненных операций.


Повторная отправка должна использовать исходные идентификаторы. Иначе восстановление способно само создать новые дубли.


Чек-лист перед запуском


▢ Определена мастер-система для каждого объекта.

▢ Определена частота.

▢ Проверены дубли.

▢ Проверены категории и свойства.

▢ Определены владельцы контентных полей.

▢ Настроены типы стоимости.

▢ Проверено округление.

▢ Учтены склады.

▢ Учтены резервы.

▢ Связаны номера заказов.

▢ Сопоставлены статусы.

▢ Проверены возвраты.

▢ Реализована защита от повторного создания.

▢ Настроена очередь.

▢ Ограничено количество retry.

▢ Ведутся журналы.

▢ Настроены таймауты.

▢ Создана резервная копия.

▢ Проведено тестирование.


Что проверить до начала разработки?


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


Сначала анализируют структуру каталога, SKU, склады, стоимость, текущие настройки CMS и 1С, существующие правила передачи и журнал ошибок. Если интернет-магазин уже работает на «1С-Битрикс», отдельно оценивают состояние CMS, настройки обмена и накопленные ошибки. В таких проектах может потребоваться не только доработка интеграции, но и регулярная поддержка сайтов на 1С-Битрикс, особенно если магазин получает заказы и обновления каталога ежедневно. 


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


Для типовой связки «1С-Битрикс» и 1С часть задач решается штатными средствами. Индивидуальный API или промежуточный слой имеет смысл добавлять только там, где стандартного функционала недостаточно.


Качественное решение можно определить по простому признаку: при сбое система должна позволять установить какая операция выполнялась, какой объект затронут, принят ли запрос и можно ли безопасно повторить его.


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