Как реализовать обмен данными между 1С:Бухгалтерия 3.0 и самописной конфигурацией?

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

Организация обмена данными между типовой конфигурацией, такой как 1С:Бухгалтерия предприятия 3.0 (БП 3.0), и самописной базой — это классическая задача для разработчика. В данной статье мы подробно разберем, как передать данные документов, на примере "Отчета комиссионера о продажах", используя различные технологические подходы. Мы проанализируем как простые методы для начинающих, так и профессиональные инструменты для построения надежных систем.

Метод 1: Использование COM-соединения (COMConnector)

Начнем с самого популярного способа среди начинающих программистов — 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-объекта
    ДокОбъект.Дата = Выборка.Дата;
    ДокОбъект.Контрагент = НайтиКонтрагентаПоИНН(Выборка.Контрагент.ИНН);
    // ... заполнение табличных частей ...
    ДокОбъект.Записать();
КонецЦикла;

Метод 2: Обмен через сериализацию XML и XDTO

Если прямое соединение между базами невозможно (например, базы находятся в разных сетях), рассмотрим вариант выгрузки данных в файл. Один из самых гибких способов — сериализация XDTO. Этот метод позволяет превратить таблицу значений с данными в структурированный XML-файл и обратно.

Выясним последовательность действий:

  1. В базе БП формируем ТаблицаЗначений, в которую собираем все необходимые данные: номенклатуру, количество, суммы, данные контрагента (ИНН/КПП для поиска).
  2. Используем СериализаторXDTO для записи таблицы в файл.
  3. В самописной базе читаем XML и восстанавливаем таблицу.

Этот подход избавляет от необходимости держать постоянное соединение и позволяет передавать данные «пакетами». Однако стоит учитывать, что для работы со сложными типами данных может потребоваться описание схемы EnterpriseData.

Метод 3: Использование современных HTTP-сервисов и JSON

Рассмотрим более современную альтернативу COM-соединению — HTTP-сервисы. Этот способ является стандартом для интеграции современных систем. Вместо того чтобы «взламывать» базу через COM, мы запрашиваем данные по протоколу HTTP.

В чем преимущества этого метода? Во-первых, он работает быстрее, так как не требует инициализации тяжелого COM-окружения. Во-вторых, он не привязан к операционной системе Windows (актуально для серверов на Linux). В-третьих, в качестве формата обмена мы можем использовать JSON, который гораздо легче и быстрее обрабатывается платформой, чем XML.

Для реализации в БП 3.0 можно использовать встроенный OData (REST API). Достаточно опубликовать базу на веб-сервере, и вы сможете получать данные простым GET-запросом. Например:

http://server/base/odata/standard.odata/Document_ОтчетКомиссионераОПродажах

Метод 4: Конвертация данных 2.0 (КД)

Проанализируем классический инструмент 1С — конфигурацию "Конвертация данных 2.0". Это идеальный выбор, если в будущем планируется сложный обмен с множеством правил трансформации данных.

Разберем алгоритм работы с КД 2.0: Мы выгружаем описания структур обеих баз в КД. Создаем правила обмена (ПКО), где указываем, что документ «Отчет комиссионера» из БП должен превращаться в наш документ в самописной базе. КД берет на себя самую сложную часть: сопоставление ссылочных данных (справочников) по полям поиска (например, поиск номенклатуры по артикулу или контрагента по ИНН).

Сравнение и выбор оптимального пути

Посмотрим на ситуацию с точки зрения трудозатрат и стабильности:

1. COM-соединение: Самый быстрый старт для новичка. Минимум кода, работа «в лоб». Минусы: зависимость от версий платформы (они должны совпадать на клиенте и сервере), потребление лицензий 1С на каждое соединение. 2. Файловый обмен (XML/JSON): Надежно, работает асинхронно. Подходит для разовых или регламентных обменов по расписанию. 3. HTTP/REST: Самый профессиональный подход. Если вы планируете развивать самописную базу, лучше сразу смотреть в эту сторону. 4. Универсальный формат (EnterpriseData): Используйте его, если ваша самописная база содержит библиотеку БСП. Это обеспечит бесшовную интеграцию в будущем.

Важный совет: Каким бы способом вы ни воспользовались, всегда уделяйте внимание обработке ошибок связи и логированию процесса загрузки. При обмене данными важно знать, какой документ не загрузился и по какой причине (например, не найден товар или не заполнена ставка НДС).

Подводя итог, для первой реализации задачи «падовану» лучше всего подойдет COM-соединение с обязательным хранением УникальныйИдентификатор источника в базе-приемнике. Это позволит быстро получить результат и понять логику взаимодействия двух конфигураций 1С.

← На главную