Как организовать автоматический обмен остатками из ERP 2.4 в самописную базу без БСП

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет IT и автоматизация бизнеса
← На главную

При разработке систем на платформе 1С:Предприятие 8 часто возникает задача интеграции тяжеловесных типовых решений, таких как 1С:ERP 2.4, с легкими самописными конфигурациями. Если самописная база создана без использования Библиотеки стандартных подсистем (БСП), стандартные механизмы обмена «из коробки» работать не будут. Рассмотрим, как реализовать надежную передачу данных по расписанию, исключив ручные операции и промежуточные файлы Excel.

Анализ исходной ситуации

Задача заключается в односторонней передаче остатков товаров и ТМЦ в эксплуатации из 1С:ERP в самописную базу. В базе-приемнике данные должны аккумулироваться в документе СВОД, который при каждом новом обмене перезаписывается. Использование Excel-макросов в этой цепочке является «слабым звеном», так как требует участия пользователя и установленного офисного ПО на сервере. Разберем более эффективные инженерные решения.

Вариант 1: Использование Конвертации данных (КД 2.1) и универсального обмена

Этот метод считается классическим. Мы создаем правила обмена, которые описывают, как данные из регистров ERP должны превратиться в строки документа в самописной базе. Основное преимущество здесь — гибкость настройки алгоритмов без изменения кода самой конфигурации ERP.

Для реализации этого подхода выполним следующие шаги:

  1. В конфигурации «Конвертация данных 2.1» создадим правила (ПВД — правила выгрузки данных), где в качестве источника укажем произвольный запрос к виртуальным таблицам остатков 1С:ERP.
  2. В самописную базу добавим обработку УниверсальныйОбменДаннымиXML. Ее можно взять из дистрибутива конфигурации «Конвертация данных».
  3. Настроим в самописной базе регламентное задание, которое будет программно запускать эту обработку.

Рассмотрим пример кода для программного запуска загрузки в самописной базе:


ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.ИмяФайлаПравил = "C:\Exchange\Rules.xml";
ОбработкаОбмена.ИмяФайлаОбмена = "C:\Exchange\Data.xml";
ОбработкаОбмена.РежимРаботы = "Загрузка";
ОбработкаОбмена.ВыполнитьЗагрузку();

Вариант 2: Прямое подключение через COM-соединение

Если обе базы находятся в одной локальной сети, мы можем использовать механизм COM-соединения. В этом случае самописная база сама «идет» в ERP, забирает нужные данные и записывает их в свой документ. Это избавляет от необходимости генерировать промежуточные XML-файлы.

Проанализируем пример функции подключения к ERP из самописной базы:


ПараметрыСоединения = "Srvr=""ServerName"";Ref=""ERP_Base"";Usr=""ExchangeUser"";Pwd=""Password"";";
Connector = Новый COMОбъект("V83.COMConnector");
Попытка
    ERP_Base = Connector.Connect(ПараметрыСоединения);
Исключение
    ЗаписатьЛогСобытий("Ошибка подключения к ERP: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

// Выполняем запрос к остаткам в базе ERP
ЗапросERP = ERP_Base.NewObject("Запрос");
ЗапросERP.Текст = "ВЫБРАТЬ Номенклатура, КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки";
Результат = ЗапросERP.Выполнить().Выгрузить();

Важный нюанс: при использовании COM-соединения необходимо учитывать разрядность сервера (32/64 бит) и наличие свободных клиентских лицензий, так как каждое такое соединение занимает один сеанс.

Вариант 3: Использование HTTP-сервисов (современный подход)

Для систем, работающих в разных сетях или через интернет, оптимальным будет использование HTTP-сервисов. Мы можем создать в самописной базе простой сервис, который будет принимать данные в формате JSON.

Разберем алгоритм работы:

  1. В самописной базе создаем объект HTTP-сервис с методом POST.
  2. В ERP создаем регламентное задание, которое собирает данные об остатках, сериализует их в JSON и отправляет HTTP-запросом.
  3. Самописная база получает запрос, разбирает JSON и заполняет документ.

Пример отправки данных из ERP:


ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ТаблицаОстатков);
СтрокаJSON = ЗаписьJSON.Закрыть();

Соединение = Новый HTTPСоединение("myserver.com");
Запрос = Новый HTTPЗапрос("/v1/update_stocks");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Оптимизация работы с документом «СВОД»

В исходном сообщении упоминалось, что старый документ удаляется, а новый создается. С точки зрения производительности базы данных, физическое удаление объекта — операция ресурсоемкая. Проанализируем более эффективный подход: замещение данных.

Вместо удаления документа целиком, рекомендуется:

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

Использование внешних источников данных

Если базы расположены на одном SQL-сервере, можно рассмотреть технологию Внешних источников данных. Это позволяет подключить таблицы ERP напрямую к самописной базе. В этом случае программисту даже не нужно писать код обмена — данные ERP будут доступны в самописной базе как обычные справочники или таблицы, доступные для чтения через запросы 1С. Однако стоит помнить, что структура таблиц в SQL (имена типа _InfoRg...) требует тщательного изучения через консоль запросов или специализированные инструменты.

Заключение

Для реализации надежного обмена между ERP 2.4 и самописной базой без БСП лучше всего отказаться от промежуточных файлов Excel в пользу прямого обращения через COM или HTTP-сервисов. Если же вы предпочитаете декларативный подход, используйте Конвертацию данных 2.1 с программным вызовом универсальной обработки обмена. Это обеспечит стабильность системы и прозрачность процесса загрузки остатков по расписанию.

← На главную