В практике интеграции систем на платформе 1С часто возникает задача «облегчения» целевой базы. Типичный пример: передача данных из 1С:УПП или 1С:ERP в 1С:Бухгалтерию, где для целей регламентированного учета не требуется детальная номенклатура, а достаточно сводных сумм по объектам «Товары в ассортименте». Однако пользователям периодически необходимо видеть исходную детализацию документа. Разберем, как реализовать получение этих данных по кнопке, выбрав оптимальный транспорт и метод отображения.
На сегодняшний день HTTP-сервисы являются стандартом де-факто для межсистемного взаимодействия. В отличие от тяжелых Web-сервисов, работающих по протоколу SOAP, HTTP-сервисы (REST) передают данные в легком формате (JSON или просто текст), что значительно ускоряет работу.
Рассмотрим преимущества:
Для реализации этого метода нам потребуется на стороне УПП (база-источник) создать HTTP-сервис с шаблоном ресурса, который принимает GUID документа. Посмотрим на пример того, как может выглядеть запрос из Бухгалтерии:
// Код в БП (база-приемник)
Соединение = Новый HTTPСоединение("192.168.1.10", "8080", "Admin", "Password");
Запрос = Новый HTTPЗапрос("/upp_integration/v1/get_print_form?id=" + Строка(ДокументСсылка.УникальныйИдентификатор()));
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ДанныеКартинки = Ответ.ПолучитьТелоКакБинарныеДанные();
// Обработка полученных данных
КонецЕсли;
Многие разработчики по привычке выбирают COM-соединение (COMConnector). Это позволяет работать с объектами другой базы так, будто они находятся в текущей. Однако проанализируем ситуацию глубже: COM-технология постепенно устаревает.
Основные недостатки COM:
ПриНачалеРаботыСистемы, что делает интерфейс «дерганым» для конечного пользователя.Чтобы не просто получить таблицу данных, а показать пользователю красивый документ, выясним причину, по которой стоит передавать именно объект ТабличныйДокумент. На стороне УПП уже есть все макеты и логика формирования ПФ. Нам достаточно сформировать ее там и передать в БП как строку.
Разберем по шагам процесс сериализации:
ТабличныйДокумент в XML-строку через СериализаторXDTO.Пример кода сериализации на стороне источника:
// Формируем печатную форму в УПП
ТабДок = СформироватьПечатнуюФорму(СсылкаНаДокумент);
// Сериализуем в XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТабДок);
РезультатXML = ЗаписьXML.Закрыть();
Возврат РезультатXML;
В базе БП мы просто восстанавливаем объект и выводим его в форму:
// Чтение из XML в БП
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ПолученнаяСтрокаXML);
ТабДок = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("ТабличныйДокумент"));
ТабДок.Показать("Детализация из УПП");
Если связь между базами нестабильна, рассмотрим подробнее вариант «кэширования» данных. В момент синхронизации (когда документ перегружается из УПП в БП), мы можем передавать не только суммы, но и структуру всей табличной части в формате JSON. Эту строку можно сохранять в ДополнительныйРеквизит документа в БП.
Преимущества:
Номенклатура.Проанализируем риски, о которых часто забывают при настройке такой синхронизации. Бухгалтерская база — это не только цифры, но и отчетность перед государством. Использование позиции «Товары в ассортименте» может создать проблемы в следующих случаях:
РНПТ. Схлопывание в одну строку сделает сдачу декларации по НДС невозможной.Рекомендация: Если данные риски актуальны, лучше передавать в БП всю номенклатуру, но использовать механизм поиска по артикулу или коду, чтобы не плодить дубли, либо передавать детализацию в скрытую табличную часть документа.
Для реализации «кнопки детализации» наиболее современным и надежным методом является HTTP-сервис с передачей сериализованного ТабличногоДокумента. Это обеспечивает отличную скорость работы и сохраняет интерфейс привычным для пользователя. Если же требуется максимальная автономность — используйте хранение данных в формате JSON непосредственно внутри документа в базе-приемнике.