При интеграции 1С:ERP с самописными решениями часто возникает вопрос: какой механизм выбрать, если нужно передавать не все данные, а лишь ограниченный набор справочников с определенными фильтрами? В этой статье мы подробно разберем несколько стратегий обмена, от использования стандартных инструментов Библиотеки стандартных подсистем (БСП) до современных REST-технологий.
Если нам необходимо максимально быстро получить данные из ERP, не внося изменений в ее конфигурацию, проанализируем возможности OData. Это автоматический интерфейс, который платформа 1С предоставляет для доступа к данным через HTTP. Для двух справочников это может быть самым быстрым решением.
Разберем последовательность действий:
УстановитьСоставСтандартногоИнтерфейсаOData().$select и $filter.Рассмотрим пример формирования запроса из самописной конфигурации:
Соединение = Новый HTTPСоединение("server_address", , "user", "password");
Запрос = Новый HTTPЗапрос("/erp_base/odata/standard.odata/Catalog_Контрагенты?$select=Description,INN&$filter=IsFolder eq false");
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
// Обработка JSON ответа
КонецЕсли;
Преимущества: Не нужно менять конфигурацию источника (ERP), поддержка фильтрации на стороне сервера. Недостатки: Сложность отслеживания изменений (нужно либо передавать дату изменения, либо постоянно опрашивать базу).
Если мы хотим, чтобы данные уходили в самописную базу сразу после записи в ERP, разберем вариант с созданием собственного HTTP-сервиса в базе-приемнике и подписки на события в ERP.
Выясним причину, по которой этот метод считается наиболее гибким: мы сами контролируем структуру пакета и логику обработки. Вместо тяжеловесного XML будем использовать JSON.
Проанализируем шаги реализации:
ПриЗаписи для нужных справочников.Пример кода для сериализации объекта в JSON в ERP:
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
НастройкиСериализации = Новый НастройкиСериализацииJSON;
СериализоватьОбъект(ЗаписьJSON, Источник.Ссылка, НастройкиСериализации);
СтрокаJSON = ЗаписьJSON.Закрыть();
// Далее отправка через HTTPЗапрос в самописную базу
Этот подход позволяет избежать "опроса" базы и снижает нагрузку на сеть, так как данные передаются только при их изменении.
Если нам важна гарантированная доставка и регистрация изменений, рассмотрим классический метод через Планы обмена. Несмотря на то что КД3 считается более современной, для обмена с самописной базой КД2 зачастую проще и быстрее в настройке.
Разберем по шагам, как заставить этот механизм работать, если в самописной базе БСП "не видит" настройки:
ОбъектПланаОбмена и прописать его в модуле менеджера подсистемы ОбменДанными.Важный момент: использование планов обмена автоматически решает проблему удаления объектов. Если объект удален в ERP, в плане обмена зафиксируется "удаление объекта", и приемник сможет корректно обработать эту ситуацию.
Часто программисты сталкиваются с тем, что после интеграции подсистем БСП интерфейс синхронизации остается недоступным. Выясним, что нужно проверить:
ИспользоватьСинхронизациюДанных установлена в значение Истина.ПриПолученииНастроек(Настройки), которая сообщает системе, что данный план обмена поддерживает стандартные механизмы БСП.Проанализируем ситуацию в зависимости от масштаба задачи:
OData или простой GET-запрос из приемника по расписанию. Это минимум кода и поддержки.Подписка на событие в ERP. Это обеспечит мгновенное обновление справочников.Планы обмена. Это позволит не потерять изменения при сбое связи и эффективно передавать только дельту (измененные данные).Использование EnterpriseData (КД3) для самописной конфигурации часто оказывается избыточным, так как требует реализации сложной логики обработки XDTO-пакетов, что оправдано только при большом количестве обменивающихся систем.
Таким образом, для задачи выгрузки двух справочников из ERP в самописную базу наиболее сбалансированным решением будет создание HTTP-сервиса или использование плана обмена с правилами КД2, в зависимости от требований к фиксации удалений и объема передаваемых данных.