Интеграция 1С со сторонними CRM-системами — это классическая задача, при которой 1С выступает в роли мастер-системы для хранения номенклатуры и учета, а CRM — в роли фронт-офиса для работы с клиентами. Рассмотрим основные механизмы, которые позволяют реализовать автоматическую выгрузку товаров и создание заказов в 1С при завершении сделки в CRM.
Наиболее современным и рекомендуемым способом интеграции являются HTTP-сервисы. В отличие от тяжеловесных Web-сервисов (SOAP), HTTP-сервисы работают по архитектуре REST, передают данные в легком формате JSON и потребляют меньше ресурсов сервера. Разберем, как реализовать задачу с их помощью.
Для получения номенклатуры внешней системой в 1С создается HTTP-сервис с шаблоном, обрабатывающим GET-запросы. Система CRM отправляет запрос, а 1С возвращает массив объектов номенклатуры. Проанализируем пример логики обработки создания заказа при завершении сделки:
Когда в CRM-системе сделка переходит в статус «Завершена», CRM инициирует POST-запрос к вашему HTTP-сервису в 1С. В теле запроса передаются данные: ID клиента, список товаров, количество и цены. Внутри 1С программно создается документ ЗаказПокупателя или ЗаказКлиента.
Если вы хотите минимизировать программирование внутри 1С, можно воспользоваться стандартным интерфейсом OData. Платформа 1С позволяет опубликовать объекты конфигурации для доступа извне без написания кода. Рассмотрим алгоритм настройки:
Номенклатура) и документы (ЗаказКлиента) в состав стандартного интерфейса OData.Этот метод удобен тем, что структура API формируется платформой автоматически на основе метаданных 1С.
Для типовых конфигураций 1С (таких как Управление торговлей 11, ERP или УНФ) существует встроенный протокол EnterpriseData. Это формат обмена данными, основанный на XML. Разберем его преимущества:
В типовых решениях уже реализованы все необходимые механизмы для приема заказов и выгрузки справочников. Основная работа при этом ложится на сторону CRM-системы: ей необходимо сформировать пакет данных в формате EnterpriseData и отправить его в 1С. Однако стоит учитывать, что при значительных изменениях в структуре конфигурации (кастомные поля), стандартный пакет XDTO может потребовать сложной доработки.
При проектировании обмена важно уделить внимание техническим деталям, которые гарантируют стабильность системы. Проанализируем критически важные аспекты:
Транзакционная целостность. При создании заказа через API обязательно используйте метод проведения, а не просто записи. Это необходимо, чтобы документ отразился в регистрах накопления и зарезервировал товар на складе. В программном коде 1С это выглядит так:
НовыйЗаказ = Документы.ЗаказКлиента.СоздатьДокумент();
// Заполнение реквизитов из данных запроса
НовыйЗаказ.Записать(РежимЗаписиДокумента.Проведение);
Синхронизация по версии данных. Чтобы CRM-система не запрашивала каждый раз полный каталог номенклатуры, используйте поле ВерсияДанных (RowVersion). Это позволит реализовать инкрементальную выгрузку: CRM будет запрашивать только те позиции, которые изменились с момента последнего обмена.
Обработка дублей. Для исключения повторного создания одного и того же заказа (например, при сбое сети) рекомендуется передавать уникальный идентификатор сделки из CRM. В 1С этот ID следует записывать в дополнительный реквизит заказа. Перед созданием нового объекта необходимо выполнить поиск по этому реквизиту.
Лицензирование. Помните, что каждое активное соединение через HTTP/Web-сервис потребляет одну лицензию 1С. Для оптимизации работы высоконагруженных систем следует настроить повторное использование сеансов (Session Pooling) на веб-сервере.
Рассмотрим альтернативные варианты, упомянутые в обсуждении, и выясним, почему они считаются плохой практикой:
Таким образом, наиболее надежным решением будет реализация собственного HTTP-сервиса в 1С или использование OData для прямого взаимодействия CRM с объектами информационной базы.