Организация обмена данными между типовой конфигурацией, такой как 1С:Бухгалтерия предприятия 3.0 (БП 3.0), и самописной базой — это классическая задача для разработчика. В данной статье мы подробно разберем, как передать данные документов, на примере "Отчета комиссионера о продажах", используя различные технологические подходы. Мы проанализируем как простые методы для начинающих, так и профессиональные инструменты для построения надежных систем.
Начнем с самого популярного способа среди начинающих программистов — COM-соединения. Этот метод позволяет из одной базы напрямую обращаться к объектам и методам другой базы, как если бы вы работали в текущем сеансе. Рассмотрим ситуацию, когда нам нужно из самописной базы подключиться к БП и забрать данные.
Проанализируем шаги реализации. Сначала нам необходимо создать объект подключения и авторизоваться в базе-источнике (БП). Для этого используется системный объект V83.COMConnector.
// Пример создания подключения из самописной базы к БП
ПутьКБазе = "File=""C:\Bases\BP_Base"";Usr=""Администратор"";Pwd=""123"";";
COMСоединитель = Новый COMОбъект("V83.COMConnector");
Попытка
БазаБП = COMСоединитель.Connect(ПутьКБазе);
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Разберем, как работать с полученными данными. Когда мы обращаемся к БазаБП.Документы.ОтчетКомиссионераОПродажах, мы получаем COMОбъект. Важно понимать, что работа с ним практически идентична работе с обычными объектами 1С. Мы можем использовать методы Выбрать(), НайтиПоНомеру() или выполнять запросы в контексте внешней базы.
Критически важным моментом при обмене через COM является синхронизация объектов. Чтобы избежать дублирования данных при повторных загрузках, рекомендуется использовать УникальныйИдентификатор. Проанализируем схему: в самописной базе в документе-приемнике создается дополнительный реквизит ID_БП (строка), куда записывается ГУИД документа из БП.
// Поиск или создание документа в базе-приемнике
Выборка = БазаБП.Документы.ОтчетКомиссионераОПродажах.Выбрать(ДатаНачала, ДатаОкончания);
Пока Выборка.Следующий() Цикл
ГУИД_БП = БазаБП.String(Выборка.Ссылка.УникальныйИдентификатор());
// Ищем в своей базе по сохраненному ГУИД
ДокОбъект = Документы.НашДокументПриемник.НайтиПоРеквизиту("ID_БП", ГУИД_БП).ПолучитьОбъект();
Если ДокОбъект = Неопределено Тогда
ДокОбъект = Документы.НашДокументПриемник.СоздатьДокумент();
ДокОбъект.ID_БП = ГУИД_БП;
КонецЕсли;
// Заполнение реквизитов из COM-объекта
ДокОбъект.Дата = Выборка.Дата;
ДокОбъект.Контрагент = НайтиКонтрагентаПоИНН(Выборка.Контрагент.ИНН);
// ... заполнение табличных частей ...
ДокОбъект.Записать();
КонецЦикла;
Если прямое соединение между базами невозможно (например, базы находятся в разных сетях), рассмотрим вариант выгрузки данных в файл. Один из самых гибких способов — сериализация XDTO. Этот метод позволяет превратить таблицу значений с данными в структурированный XML-файл и обратно.
Выясним последовательность действий:
ТаблицаЗначений, в которую собираем все необходимые данные: номенклатуру, количество, суммы, данные контрагента (ИНН/КПП для поиска).СериализаторXDTO для записи таблицы в файл.Этот подход избавляет от необходимости держать постоянное соединение и позволяет передавать данные «пакетами». Однако стоит учитывать, что для работы со сложными типами данных может потребоваться описание схемы EnterpriseData.
Рассмотрим более современную альтернативу COM-соединению — HTTP-сервисы. Этот способ является стандартом для интеграции современных систем. Вместо того чтобы «взламывать» базу через COM, мы запрашиваем данные по протоколу HTTP.
В чем преимущества этого метода?
Во-первых, он работает быстрее, так как не требует инициализации тяжелого COM-окружения.
Во-вторых, он не привязан к операционной системе Windows (актуально для серверов на Linux).
В-третьих, в качестве формата обмена мы можем использовать JSON, который гораздо легче и быстрее обрабатывается платформой, чем XML.
Для реализации в БП 3.0 можно использовать встроенный OData (REST API). Достаточно опубликовать базу на веб-сервере, и вы сможете получать данные простым GET-запросом. Например:
http://server/base/odata/standard.odata/Document_ОтчетКомиссионераОПродажах
Проанализируем классический инструмент 1С — конфигурацию "Конвертация данных 2.0". Это идеальный выбор, если в будущем планируется сложный обмен с множеством правил трансформации данных.
Разберем алгоритм работы с КД 2.0: Мы выгружаем описания структур обеих баз в КД. Создаем правила обмена (ПКО), где указываем, что документ «Отчет комиссионера» из БП должен превращаться в наш документ в самописной базе. КД берет на себя самую сложную часть: сопоставление ссылочных данных (справочников) по полям поиска (например, поиск номенклатуры по артикулу или контрагента по ИНН).
Посмотрим на ситуацию с точки зрения трудозатрат и стабильности:
1. COM-соединение: Самый быстрый старт для новичка. Минимум кода, работа «в лоб». Минусы: зависимость от версий платформы (они должны совпадать на клиенте и сервере), потребление лицензий 1С на каждое соединение. 2. Файловый обмен (XML/JSON): Надежно, работает асинхронно. Подходит для разовых или регламентных обменов по расписанию. 3. HTTP/REST: Самый профессиональный подход. Если вы планируете развивать самописную базу, лучше сразу смотреть в эту сторону. 4. Универсальный формат (EnterpriseData): Используйте его, если ваша самописная база содержит библиотеку БСП. Это обеспечит бесшовную интеграцию в будущем.
Важный совет: Каким бы способом вы ни воспользовались, всегда уделяйте внимание обработке ошибок связи и логированию процесса загрузки. При обмене данными важно знать, какой документ не загрузился и по какой причине (например, не найден товар или не заполнена ставка НДС).
Подводя итог, для первой реализации задачи «падовану» лучше всего подойдет COM-соединение с обязательным хранением УникальныйИдентификатор источника в базе-приемнике. Это позволит быстро получить результат и понять логику взаимодействия двух конфигураций 1С.