При разработке систем на платформе 1С:Предприятие 8 часто возникает задача интеграции тяжеловесных типовых решений, таких как 1С:ERP 2.4, с легкими самописными конфигурациями. Если самописная база создана без использования Библиотеки стандартных подсистем (БСП), стандартные механизмы обмена «из коробки» работать не будут. Рассмотрим, как реализовать надежную передачу данных по расписанию, исключив ручные операции и промежуточные файлы Excel.
Задача заключается в односторонней передаче остатков товаров и ТМЦ в эксплуатации из 1С:ERP в самописную базу. В базе-приемнике данные должны аккумулироваться в документе СВОД, который при каждом новом обмене перезаписывается. Использование Excel-макросов в этой цепочке является «слабым звеном», так как требует участия пользователя и установленного офисного ПО на сервере. Разберем более эффективные инженерные решения.
Этот метод считается классическим. Мы создаем правила обмена, которые описывают, как данные из регистров ERP должны превратиться в строки документа в самописной базе. Основное преимущество здесь — гибкость настройки алгоритмов без изменения кода самой конфигурации ERP.
Для реализации этого подхода выполним следующие шаги:
УниверсальныйОбменДаннымиXML. Ее можно взять из дистрибутива конфигурации «Конвертация данных».Рассмотрим пример кода для программного запуска загрузки в самописной базе:
ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.ИмяФайлаПравил = "C:\Exchange\Rules.xml";
ОбработкаОбмена.ИмяФайлаОбмена = "C:\Exchange\Data.xml";
ОбработкаОбмена.РежимРаботы = "Загрузка";
ОбработкаОбмена.ВыполнитьЗагрузку();
Если обе базы находятся в одной локальной сети, мы можем использовать механизм 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 бит) и наличие свободных клиентских лицензий, так как каждое такое соединение занимает один сеанс.
Для систем, работающих в разных сетях или через интернет, оптимальным будет использование HTTP-сервисов. Мы можем создать в самописной базе простой сервис, который будет принимать данные в формате JSON.
Разберем алгоритм работы:
HTTP-сервис с методом POST.JSON и отправляет HTTP-запросом.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 с программным вызовом универсальной обработки обмена. Это обеспечит стабильность системы и прозрачность процесса загрузки остатков по расписанию.