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

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

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

Выбор технологического стека для обмена

Проанализируем ситуацию: у нас есть база-источник (произвольной структуры) и база-приемник (БП 2.0). Для решения этой задачи чаще всего применяется связка из трех компонентов: Конвертация данных (КД), Планы обмена и Универсальная обработка выгрузки/загрузки. Выясним, почему это считается «золотым стандартом»:

  1. Конвертация данных 2.1: Позволяет визуально настроить правила соответствия полей. Поскольку БП 2.0 работает на обычных формах и использует старую архитектуру, версия КД 3.0 (ориентированная на формат EnterpriseData) здесь будет избыточной и сложной в реализации.
  2. Планы обмена: Этот объект метаданных в источнике позволяет фиксировать только те документы и справочники, которые были изменены или созданы. Это избавляет от необходимости выгружать всю базу целиком при каждом сеансе.
  3. Универсальная обработка (V8Exch82.epf): Стандартный инструмент, который умеет читать правила, созданные в КД, и работать с планами обмена.

Шаг 1: Подготовка самописной базы (Источника)

Для начала нам необходимо научить самописную базу «запоминать», что именно нужно передать в бухгалтерию. Разберем по шагам создание механизма регистрации:

Создадим в метаданных новый объект ПланОбмена (например, с именем ОбменСБухгалтерией). В составе этого плана обмена укажем те документы, которые планируем переносить: СчетНаОплату, РеализацияТоваровУслуг, СчетФактураВыданный. Обязательно установим свойство Авторегистрация в значение Разрешить.

Теперь при каждой записи выбранных документов система будет автоматически заносить ссылку на них в специальную таблицу изменений. Рассмотрим, как программно можно проверить наличие изменений:


// Пример получения изменений по узлу плана обмена
УзелОбмена = ПланыОбмена.ОбменСБухгалтерией.НайтиПоКоду("БП");
ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, НомерСообщения);

Пока ВыборкаИзменений.Следующий() Цикл
    Данные = ВыборкаИзменений.Получить();
    // Здесь происходит обработка данных для выгрузки
КонецЦикла;

Шаг 2: Создание правил конвертации в КД 2.1

Перейдем к самой ответственной части — настройке правил. В конфигурации «Конвертация данных» нам нужно создать ПКО (Правила Конвертации Объектов) для каждого документа. Выясним причину важности правильной настройки ПКО для БП 2.0:

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

Важный момент со счетами-фактурами: В БП 2.0 счет-фактура не живет без документа-основания. Поэтому в ПКО для СчетФактураВыданный необходимо убедиться, что свойство ДокументОснование корректно сопоставлено с соответствующим документом в источнике.

Шаг 3: Решение проблемы с пустыми измерениями регистров

Рассмотрим ситуацию, часто встречающуюся при сложных обменах или свертке баз (как описано в сообщении 7): при загрузке данных в регистр сведений (например, ДанныеСостоянийСотрудников) возникает ошибка: «Значение поля "Документ основание" не может быть пустым». Это происходит потому, что запись в регистр пытается создаться раньше, чем сам документ-регистратор будет записан и получит ссылку в базе-приемнике.

Разберем три способа решения этой проблемы:

  1. Использование метода УстановитьСсылкуНового(): В обработчике ПКО документа ПередВыгрузкой или ПриЗагрузке мы можем принудительно сгенерировать ссылку.
    
    // В обработчике "ПриЗагрузке" (Приемник)
    Если Объект.ЭтоНовый() Тогда
        Объект.УстановитьСсылкуНового(Документы.ВводДанных.ПолучитьСсылку());
    КонецЕсли;
    
    Это позволяет регистру «увидеть» ссылку на будущий документ еще до его физической записи.
  2. Перенос движений через сам документ: В КД 2.1 правильнее всего выгружать движения регистра не как самостоятельные объекты, а в составе документа-регистратора. Для этого в ПКО документа на вкладке «Выгрузка движений» нужно отметить галочкой необходимый регистр. В этом случае 1С гарантирует, что при записи документа его движения будут сформированы с корректной ссылкой на регистратор.
  3. Отложенное проведение: Убедитесь, что в правилах установлен флаг «Проводить после загрузки». Тогда сначала загрузятся все объекты (ссылки создадутся), а затем система запустит проведение, которое сформирует движения в регистрах уже с заполненной аналитикой.

Шаг 4: Организация оперативного обмена через Web-сервисы

Если обмен должен происходить «мгновенно», а не по расписанию раз в час, проанализируем использование Web-сервисов. Это позволяет источнику напрямую вызывать функции в БП 2.0.

Посмотрим на примерный алгоритм:

  1. В базе БП 2.0 создается Web-сервис с операцией ЗагрузитьДокумент.
  2. В качестве параметра передается XML-строка, сформированная по правилам КД.
  3. Внутри Web-сервиса вызывается стандартная обработка ПроизвольныйАлгоритм или метод ПрочитатьXML.

Такой подход сложнее в отладке, но исключает необходимость промежуточных файлов. Однако помните, что для стабильной работы Web-сервисов требуется надежное сетевое соединение.

Безопасность и контроль результатов

Завершая настройку обмена, не забудьте про механизмы логирования. Выясним, что обязательно должно быть в вашей системе контроля:

Подтверждение получения: После успешной загрузки в БП 2.0, база-приемник должна отправить обратно номер последнего принятого сообщения. В источнике этот номер используется для вызова метода ПланыОбмена.УдалитьРегистрациюИзменений(). Если этого не делать, таблица изменений будет бесконечно расти, что приведет к деградации производительности всей базы.

Обработка коллизий: Что делать, если документ изменен в обеих базах? Для обмена с бухгалтерией обычно принимается правило: «Бухгалтерия всегда права», либо устанавливается жесткий запрет на изменение перенесенных документов в источнике после их выгрузки (установка даты запрета редактирования или статуса «Выгружен»).

Следование этим рекомендациям позволит вам создать отказоустойчивую систему интеграции между вашей уникальной конфигурацией и типовой «1С:Бухгалтерией 2.0».

← На главную