В завершающей части рассказа о нашей реализации интеграции интернет-магазина 1С: Битрикс с системой 1С: Управление торговлей, хотелось бы рассказать о решении бизнес-задачи по обмену данными по заказам покупателей.
![image](https://habrastorage.org/r/w1560/storage1/55ec91a5/c650199f/08e55a21/5987f99c.png)
Напомню суть предыдущих топиков на эту тему:
В первом посте мы рассуждали о том, как были проанализированы задачи, которые стоят перед владельцами интернет-магазинов, выбрана концепция обмена данными и разработан протокол обмена между 1С и интернет-магазином.
Во втором демонстрировалось конкретное решение бизнес-задачи по выгрузке на сайт базы товаров из 1С, включая выбор номенклатуры для выгрузки, настроек обработки данных на стороне сайта, а также некоторые технические решения по обеспечению стабильности работы выгрузки на больших объемах данных.
Ну что же, теперь в нашем интернет-магазине мы имеем каталог товаров, выгруженный из 1С, и теперь товары нужно продать клиенту с точки зрения самого процесса обработки заказа.
Добавив товар в корзину, клиент перешел к форме оформления заказа для заполнения реквизитов.
![](https://habrastorage.org/r/w1560/storage1/0b7a813d/bfec64a4/9a182157/2a4a1afe.png)
указал контактную информацию, способ оплаты и выбрал вариант доставки. Заказу присвоен определенный номер, он сохранился в системе, клиенту доступен личный кабинет для просмотра истории заказов.
Что делать теперь? Конечно, «обработать заказ». Но где его обработать — на сайте или в 1С? Ведь у нас интеграция. Необходимо выбрать бизнес-модель обработки заказов, а таких моделей в общем случае три:
Используются возможности административной части CMS по управлению заказами. Объективно говоря, такие возможности в системе 1С-Битрикс: Управление сайтом очень широкие и достаточны для большинства магазинов:
— поиск заказов по фильтру
— просмотр данных по заказу,
— редактирование заказа (контактных данных, состава заказа, ),
— неограниченное число статусов заказов и различные полномочия пользователей по работе с каждым из статусов
— печать документов и многое другое
![](https://habrastorage.org/r/w1560/storage1/10f23da1/971abae3/57c6319a/8734b944.png)
Обычно такую модель выбирают те, для кого магазин единственный или практически основной источник продаж. Все сразу в одной системе, клиенты сразу видят изменения по их заказам, получают уведомления.
Если есть 1С, то когда заказ уже обработан, деньги получены, заказ доставлен — заказ хотят выгрузить в 1С, для отчетности.
Некоторые клиенты, даже, увидев обилие возможностей по обработке заказов в админке сайта, настаивают на том, чтобы вся обработка велась в системе 1С. Иными словами, клиенты хотят, чтобы созданный на сайте заказ сразу появился в 1С для последующей обработки.
Обычно это компании, для которых интернет-магазин всего лишь один из каналов продаж, наряду, например, с розницей, или дилерскими продажами. В этом случае такая модель обусловлена исключительно потребностью обеспечить всю обработку в едином месте, в едином центре обработки заказов.
В этом случае вся обработка ведется в единой системе, в которой хранится номенклатура, складские остатки, резервы и так далее. Это, безусловно, также очень удобно.
Для такой бизнес-модели — ключевое требование к интеграции 1С с интернет-магазином — оперативность и полнота получения данных по заказу с сайта. Дополнительная сложность здесь: для того, чтобы клиенты отслеживали процесс исполнения заказа в личном кабинете, необходимо чтобы 1С сообщала сайту о тех изменениях в заказах, которые возникают в ней в ходе работы.
Иногда требуется организовать различные комбинированные схемы, когда часть операций производится на сайте, а часть в 1С. Можно выполнять частичную обработку заказов на сайте (например, прием заказа и его уточнение у покупателя), а когда заказ переходит в заданный статус передавать его в 1С.
Как вы видите, бизнес-задача по интеграции заказов на первый взгляд проста, но имеет ряд нюансов. Теперь давайте посмотрим на наш функционал реализации интеграции.
Согласно протоколу обмена, 1С регулярно отправляет на сайт запросы и получает результирующий ответ в формате CommerceML. В административной части системы 1С-Битрикс есть набор настроек, влияющих на процесс формирования данного ответа.
Первая часть настроек интеграции по заказам находится в общих настройках интеграции с 1С, на вкладке «Заказы» (вкладку «Каталог» мы рассмотрели в предыдущей части, она касалась импорта товаров).
![](https://habrastorage.org/r/w1560/storage1/b6ffd8ca/0ec40c3c/9da140f2/496fda1b.png)
Здесь указываются:
Выгрузка только оплаченных или только заказов с разрешенной отгрузкой — жестко ограничивает выгрузку заказов по флагам «оплачен» и «к отгрузке», вне зависимости от статуса. Ведь статусы — вещь пользовательская, и они могут быть не связаны с этими флагами.
Сайт подготовил CommerceML файл с данными по заказу, включая данные контрагента, список товарных позиций и служебную информацию и отдал 1С в ответ на запрос. Теперь нужно настроить, как этот заказ теперь будет обработан и сохранен в 1С.
Процесс сохранения заказа включает несколько шагов:
![](https://habrastorage.org/r/w1560/storage1/6bc4dab9/c0a626e6/ac797328/b5b45d9d.png)
Напомню, что на вкладке «Основные настройки» можно настроить интервал обращения 1С к сайту. Например, заказы можно забирать каждые 5 минут.
На вкладке обмен заказами настраиваются:
![](https://habrastorage.org/r/w1560/storage1/6621ad3e/5eb4902e/e5478927/9d916d7c.png)
1) Способ идентификации контрагентов.
Данная настройка управляет алгоритмом поиска контрагента с сайта среди уже существующих контрагентов в 1С. Сегодня на выбор дается 2 способа идентификации — по наименованию (обычно для физ.лиц) и по комбинации ИНН+КПП для юрлиц. В ближайшем времени планируем добавить еще один вариант идентификации — по ID пользователя сайта (наименование для крупных магазинов все же может повторяться).
Если контрагента найти не удалось, создается новый.
2) Параметры создания новых элементов справочника «Номенклатура»
Данная настройка нужна для случаев, когда товар есть в заказе, но его нет в 1С. Или не удается найти. В этом случае для обеспечения логической целостности данных в 1С, необходимо, чтобы товар существовал — и в этом случае 1С просто импортирует его в свой справочник номенклатуры.
На вкладке «Дополнительно» указываются параметры проведения документов в 1С, включая отмену заказов, и важная настройка — «Соответствие статусов заказов»:
![](https://habrastorage.org/r/w1560/storage1/749b7f77/42cd7bdc/20116590/5ad20aa2.png)
Как и на стороне сайта, 1С тоже может устанавливать статус документа «Заказ клиента» по данным статуса заказа на сайте. Например, если заказ на сайте подтвержден, то в 1С он автоматически получает статус «Согласован». Это удобно.
Обмен заказами в отличие от обмена товарами в схеме интеграции является двухсторонним. Не только сайт отдает 1С данные по поступившим заказам, но и 1С сообщает сайту информацию о тех заказах, которые ранее были выгружены и были изменены в 1С. Обычно это пример модели обработки заказов в 1С, когда оплата и отгрузка выполняются не на сайте.
Менеджер в 1С может созвониться с клиентом и в ходе общения изменить список позиций, цену, сделать скидку, изменить параметры доставки или оплаты. Если сайту не сообщить об этих изменениях, то у клиента в личном кабинете будет устаревшая информация по его заказам.
Схема работы 1С такая. Если заказы, загруженные с сайта, были изменены, то в ближайший сеанс обмена 1С выгрузит эти изменения на сайт (также в формате CommerceML), а сайт примет их и обновит информацию по заказам.
Еще один случай изменения заказа в 1С — это изменение его статуса. Бухгалтер получил оплату и сформировал платежное поручение, заказ теперь стал оплаченным и на сайте нам также нужно изменить статус. В настройках модуля «интернет-магазин» на сайте есть еще 2 параметра:
![](https://habrastorage.org/r/w1560/storage1/8c5ed62b/ed776933/f43b39f9/42bd75d6.png)
то есть сайт автоматом изменит статус заказа при получении данных от 1С по оплате и(или) отгрузке. А на изменение статуса можно «повесить» обработчик, отправить сообщение клиенту (по email или sms).
Итого: интеграция задачу информирования покупателя, несмотря на то, что обработка заказа происходит вне сайта.
Все настройки интеграции с 1С со стороны сайта на 1С-Битрикс, которые мы рассмотрели — являются всего лишь дефолтными настройками по умолчанию, которые относятся к дефолтному скрипту интеграции http://<ваш_сайт>/bitrix/admin/1c_exchange.php.
Но с технической точки зрения, весь интерфейс интеграции со стороны сайта представляет собой два компонента системы 1С-Битрикс, которые разработчик может использовать для создания своего собственного произвольного интерфейса взаимодействия с 1С, доработки и расширения существующего функционала.
Это компоненты «bitrix:catalog.import.1c» и «bitrix: sale.export.1c». Они доступны прямо в визуальном редакторе. Вы можете создать свой собственный скрипт интеграции с индивидуальными настройками. Делается все элементарно:
1) Создать страницу на сайте, можно прямо в визуальном редакторе (можно сделать единый URL и для товаров и для заказов, как в дефолтном интерфейсе, а можно и разные)
2) Разместить на странице компоненты обмена с 1С настроить необходимые параметры
![](https://habrastorage.org/r/w1560/storage1/01832575/40efce49/a43aff41/ff336f7f.png)
В принципе, с помощью шагов 1 и 2 можно настроить индивидуальный интерфейс обмена для каждой 1С, которая интегрируется с сайтом. Например, у вас несколько интернет-магазинов на одном движке, и с каждым из них обменивается своя 1С. Либо у вас один интернет-магазин, но несколько поставщиков, у каждого из которых одна 1С. Логичнее и правильнее сделать для каждой 1С свой интерфейс импорта товаров.
Но и это еще не все.
Компоненты «catalog.import.1c» и «sale.export.1c» являются обычными компонентами 2.0 платформы 1С-Битрикс. Их можно кастомизировать типовыми приемами, либо вообще вынести в свое пространство имен и произвольно изменить их исходный код.
Например, можно делать дополнительную обработку данных перед записью в БД сайта, связывать данные с другими сущностями сайта и так далее.
Одним словом, мы даем возможность не только создать свои настройки интерфейса, отличные от умолчательных, но и вообще изменить свой интерфейс.
Используя данную возможность, можно реализовать обмен и с другими продуктами 1С (естественно при наличии механизма интеграции на той стороне), или с продуктами других вендоров.
Подведем итоги трех постов по этой теме.
Да, не все удалось сделать максимально удобным, но работа по улучшению интеграции ведется непрерывно уже несколько лет и будет продолжаться.
Мы имеем очень сильную обратную связь с клиентами и партнерами. В составе службы поддержки есть тех.специалисты по продуктам 1С, что позволяет совместно с разработчиками 1С-Битрикс решать сложные вопросы, которые часто находятся на стыке систем. Все пожелания фиксируются и разумные предложения обязательно реализовываются.
Совместно с компанией 1С мы не создали какую-то закрытую архитектуру интеграции и обмена данными, а наоборот, постарались сделать ее удобной для использования, открытой для доработок и модификаций, а распространенность такой интеграции среди современных CMS для интернет-магазинов подтверждает то, эта цель была достигнута!
А чтобы читать следующие записи в своей ленте, нажмите «Мне нравится» в профиле компании, и проверьте свою настройку ленты.
![image](https://habrastorage.org/storage1/55ec91a5/c650199f/08e55a21/5987f99c.png)
Напомню суть предыдущих топиков на эту тему:
В первом посте мы рассуждали о том, как были проанализированы задачи, которые стоят перед владельцами интернет-магазинов, выбрана концепция обмена данными и разработан протокол обмена между 1С и интернет-магазином.
Во втором демонстрировалось конкретное решение бизнес-задачи по выгрузке на сайт базы товаров из 1С, включая выбор номенклатуры для выгрузки, настроек обработки данных на стороне сайта, а также некоторые технические решения по обеспечению стабильности работы выгрузки на больших объемах данных.
Ну что же, теперь в нашем интернет-магазине мы имеем каталог товаров, выгруженный из 1С, и теперь товары нужно продать клиенту с точки зрения самого процесса обработки заказа.
Добавив товар в корзину, клиент перешел к форме оформления заказа для заполнения реквизитов.
![](https://habrastorage.org/storage1/0b7a813d/bfec64a4/9a182157/2a4a1afe.png)
указал контактную информацию, способ оплаты и выбрал вариант доставки. Заказу присвоен определенный номер, он сохранился в системе, клиенту доступен личный кабинет для просмотра истории заказов.
![](https://habrastorage.org/storage1/28a60c2a/b61a6426/0d8218c9/d00b2f6e.png)
Что делать теперь? Конечно, «обработать заказ». Но где его обработать — на сайте или в 1С? Ведь у нас интеграция. Необходимо выбрать бизнес-модель обработки заказов, а таких моделей в общем случае три:
Обработка заказов непосредственно на сайте
Используются возможности административной части CMS по управлению заказами. Объективно говоря, такие возможности в системе 1С-Битрикс: Управление сайтом очень широкие и достаточны для большинства магазинов:
— поиск заказов по фильтру
— просмотр данных по заказу,
— редактирование заказа (контактных данных, состава заказа, ),
— неограниченное число статусов заказов и различные полномочия пользователей по работе с каждым из статусов
— печать документов и многое другое
![](https://habrastorage.org/storage1/10f23da1/971abae3/57c6319a/8734b944.png)
Обычно такую модель выбирают те, для кого магазин единственный или практически основной источник продаж. Все сразу в одной системе, клиенты сразу видят изменения по их заказам, получают уведомления.
Если есть 1С, то когда заказ уже обработан, деньги получены, заказ доставлен — заказ хотят выгрузить в 1С, для отчетности.
Обработка заказов в 1С
Некоторые клиенты, даже, увидев обилие возможностей по обработке заказов в админке сайта, настаивают на том, чтобы вся обработка велась в системе 1С. Иными словами, клиенты хотят, чтобы созданный на сайте заказ сразу появился в 1С для последующей обработки.
Обычно это компании, для которых интернет-магазин всего лишь один из каналов продаж, наряду, например, с розницей, или дилерскими продажами. В этом случае такая модель обусловлена исключительно потребностью обеспечить всю обработку в едином месте, в едином центре обработки заказов.
В этом случае вся обработка ведется в единой системе, в которой хранится номенклатура, складские остатки, резервы и так далее. Это, безусловно, также очень удобно.
Для такой бизнес-модели — ключевое требование к интеграции 1С с интернет-магазином — оперативность и полнота получения данных по заказу с сайта. Дополнительная сложность здесь: для того, чтобы клиенты отслеживали процесс исполнения заказа в личном кабинете, необходимо чтобы 1С сообщала сайту о тех изменениях в заказах, которые возникают в ней в ходе работы.
Смешанная модель
Иногда требуется организовать различные комбинированные схемы, когда часть операций производится на сайте, а часть в 1С. Можно выполнять частичную обработку заказов на сайте (например, прием заказа и его уточнение у покупателя), а когда заказ переходит в заданный статус передавать его в 1С.
Реализация бизнес-моделей в интеграции 1С и 1С-Битрикс
Как вы видите, бизнес-задача по интеграции заказов на первый взгляд проста, но имеет ряд нюансов. Теперь давайте посмотрим на наш функционал реализации интеграции.
Настройки на стороне сайта
Согласно протоколу обмена, 1С регулярно отправляет на сайт запросы и получает результирующий ответ в формате CommerceML. В административной части системы 1С-Битрикс есть набор настроек, влияющих на процесс формирования данного ответа.
Первая часть настроек интеграции по заказам находится в общих настройках интеграции с 1С, на вкладке «Заказы» (вкладку «Каталог» мы рассмотрели в предыдущей части, она касалась импорта товаров).
![](https://habrastorage.org/storage1/b6ffd8ca/0ec40c3c/9da140f2/496fda1b.png)
Здесь указываются:
- Сайт, заказы с которого выгружаются в 1С. На одном движке может быть несколько магазинов и нужно уточнить, с которого именно отдавать заказы по запросу 1С
- Группы пользователей, которым разрешена загрузка — права пользователя под которым 1С будет забирать заказы
- Использовать zip-сжатие — как и в передаче товаров, позволяет уменьшить объем передаваемого трафика, хотя для списка заказов это дает не столь большую выгрузку
- Выгружать только оплаченные заказы
- Выгружать только заказы с разрешенной отгрузкой
- Выгружать заказы начиная со статуса
Выгрузка только оплаченных или только заказов с разрешенной отгрузкой — жестко ограничивает выгрузку заказов по флагам «оплачен» и «к отгрузке», вне зависимости от статуса. Ведь статусы — вещь пользовательская, и они могут быть не связаны с этими флагами.
Настройки на стороне 1С
Сайт подготовил CommerceML файл с данными по заказу, включая данные контрагента, список товарных позиций и служебную информацию и отдал 1С в ответ на запрос. Теперь нужно настроить, как этот заказ теперь будет обработан и сохранен в 1С.
Процесс сохранения заказа включает несколько шагов:
- Идентификация контрагента (поиск среди существующих или создание нового)
- Идентификация заказанных позиций (поиск в справочнике номенклатуры или создание новых)
- Создание и проведения документа «Заказ клиента»
- Идентификация статуса заказа и установка статуса документа «Заказ клиента»
![](https://habrastorage.org/storage1/6bc4dab9/c0a626e6/ac797328/b5b45d9d.png)
Напомню, что на вкладке «Основные настройки» можно настроить интервал обращения 1С к сайту. Например, заказы можно забирать каждые 5 минут.
На вкладке обмен заказами настраиваются:
![](https://habrastorage.org/storage1/6621ad3e/5eb4902e/e5478927/9d916d7c.png)
1) Способ идентификации контрагентов.
Данная настройка управляет алгоритмом поиска контрагента с сайта среди уже существующих контрагентов в 1С. Сегодня на выбор дается 2 способа идентификации — по наименованию (обычно для физ.лиц) и по комбинации ИНН+КПП для юрлиц. В ближайшем времени планируем добавить еще один вариант идентификации — по ID пользователя сайта (наименование для крупных магазинов все же может повторяться).
Если контрагента найти не удалось, создается новый.
2) Параметры создания новых элементов справочника «Номенклатура»
Данная настройка нужна для случаев, когда товар есть в заказе, но его нет в 1С. Или не удается найти. В этом случае для обеспечения логической целостности данных в 1С, необходимо, чтобы товар существовал — и в этом случае 1С просто импортирует его в свой справочник номенклатуры.
На вкладке «Дополнительно» указываются параметры проведения документов в 1С, включая отмену заказов, и важная настройка — «Соответствие статусов заказов»:
![](https://habrastorage.org/storage1/749b7f77/42cd7bdc/20116590/5ad20aa2.png)
Как и на стороне сайта, 1С тоже может устанавливать статус документа «Заказ клиента» по данным статуса заказа на сайте. Например, если заказ на сайте подтвержден, то в 1С он автоматически получает статус «Согласован». Это удобно.
Экспорт заказов из 1С на сайт
Обмен заказами в отличие от обмена товарами в схеме интеграции является двухсторонним. Не только сайт отдает 1С данные по поступившим заказам, но и 1С сообщает сайту информацию о тех заказах, которые ранее были выгружены и были изменены в 1С. Обычно это пример модели обработки заказов в 1С, когда оплата и отгрузка выполняются не на сайте.
Менеджер в 1С может созвониться с клиентом и в ходе общения изменить список позиций, цену, сделать скидку, изменить параметры доставки или оплаты. Если сайту не сообщить об этих изменениях, то у клиента в личном кабинете будет устаревшая информация по его заказам.
Схема работы 1С такая. Если заказы, загруженные с сайта, были изменены, то в ближайший сеанс обмена 1С выгрузит эти изменения на сайт (также в формате CommerceML), а сайт примет их и обновит информацию по заказам.
Еще один случай изменения заказа в 1С — это изменение его статуса. Бухгалтер получил оплату и сформировал платежное поручение, заказ теперь стал оплаченным и на сайте нам также нужно изменить статус. В настройках модуля «интернет-магазин» на сайте есть еще 2 параметра:
![](https://habrastorage.org/storage1/8c5ed62b/ed776933/f43b39f9/42bd75d6.png)
то есть сайт автоматом изменит статус заказа при получении данных от 1С по оплате и(или) отгрузке. А на изменение статуса можно «повесить» обработчик, отправить сообщение клиенту (по email или sms).
Итого: интеграция задачу информирования покупателя, несмотря на то, что обработка заказа происходит вне сайта.
Дополнительные возможности интеграции
Все настройки интеграции с 1С со стороны сайта на 1С-Битрикс, которые мы рассмотрели — являются всего лишь дефолтными настройками по умолчанию, которые относятся к дефолтному скрипту интеграции http://<ваш_сайт>/bitrix/admin/1c_exchange.php.
Но с технической точки зрения, весь интерфейс интеграции со стороны сайта представляет собой два компонента системы 1С-Битрикс, которые разработчик может использовать для создания своего собственного произвольного интерфейса взаимодействия с 1С, доработки и расширения существующего функционала.
Это компоненты «bitrix:catalog.import.1c» и «bitrix: sale.export.1c». Они доступны прямо в визуальном редакторе. Вы можете создать свой собственный скрипт интеграции с индивидуальными настройками. Делается все элементарно:
1) Создать страницу на сайте, можно прямо в визуальном редакторе (можно сделать единый URL и для товаров и для заказов, как в дефолтном интерфейсе, а можно и разные)
2) Разместить на странице компоненты обмена с 1С настроить необходимые параметры
![](https://habrastorage.org/storage1/01832575/40efce49/a43aff41/ff336f7f.png)
В принципе, с помощью шагов 1 и 2 можно настроить индивидуальный интерфейс обмена для каждой 1С, которая интегрируется с сайтом. Например, у вас несколько интернет-магазинов на одном движке, и с каждым из них обменивается своя 1С. Либо у вас один интернет-магазин, но несколько поставщиков, у каждого из которых одна 1С. Логичнее и правильнее сделать для каждой 1С свой интерфейс импорта товаров.
Но и это еще не все.
Компоненты «catalog.import.1c» и «sale.export.1c» являются обычными компонентами 2.0 платформы 1С-Битрикс. Их можно кастомизировать типовыми приемами, либо вообще вынести в свое пространство имен и произвольно изменить их исходный код.
Например, можно делать дополнительную обработку данных перед записью в БД сайта, связывать данные с другими сущностями сайта и так далее.
Одним словом, мы даем возможность не только создать свои настройки интерфейса, отличные от умолчательных, но и вообще изменить свой интерфейс.
Используя данную возможность, можно реализовать обмен и с другими продуктами 1С (естественно при наличии механизма интеграции на той стороне), или с продуктами других вендоров.
Общие выводы по интеграции:
Подведем итоги трех постов по этой теме.
- Реализован готовый механизм интеграции между 1С и интернет-магазином, который позволяет из коробки решить большое количество типовых задач клиентов по выгрузке каталога и обмену заказами
- Есть возможность гибкой настройки интеграции как со стороны 1С-Битрик: Управление сайтом, так и со стороны 1С: Управление торговлей, чтоб подстроиться по специфику бизнеса клиента
- Представляются возможности по кастомизации и доработке функционала интеграции
- Обмен данными производится с использованием открытого XML-стандарта CommerceML
- Протокол обмена данными максимально упрощен, использует HTTP(S) и учитывает типовые ограничения хостеров на работу скриптов сайта
- Архитектура интеграции максимально защищает 1С: Предприятие от угроз из Интернета, инициатором обмена всегда выступает 1С, а сайт всего лишь отвечает на запросы
Да, не все удалось сделать максимально удобным, но работа по улучшению интеграции ведется непрерывно уже несколько лет и будет продолжаться.
Мы имеем очень сильную обратную связь с клиентами и партнерами. В составе службы поддержки есть тех.специалисты по продуктам 1С, что позволяет совместно с разработчиками 1С-Битрикс решать сложные вопросы, которые часто находятся на стыке систем. Все пожелания фиксируются и разумные предложения обязательно реализовываются.
Совместно с компанией 1С мы не создали какую-то закрытую архитектуру интеграции и обмена данными, а наоборот, постарались сделать ее удобной для использования, открытой для доработок и модификаций, а распространенность такой интеграции среди современных CMS для интернет-магазинов подтверждает то, эта цель была достигнута!
А чтобы читать следующие записи в своей ленте, нажмите «Мне нравится» в профиле компании, и проверьте свою настройку ленты.