Организация обмена данными между конфигурациями 1С — это комплексная задача, требующая понимания механизмов регистрации изменений и правил преобразования объектов. Особенно актуально это звучит при интеграции «самописки» с типовыми решениями старых поколений, такими как Бухгалтерия предприятия 2.0 (БП 2.0). В этой статье мы подробно разберем, как выстроить надежный алгоритм обмена, какие инструменты использовать и как избежать типичных ошибок при переносе связанных данных.
Проанализируем ситуацию: у нас есть база-источник (произвольной структуры) и база-приемник (БП 2.0). Для решения этой задачи чаще всего применяется связка из трех компонентов: Конвертация данных (КД), Планы обмена и Универсальная обработка выгрузки/загрузки. Выясним, почему это считается «золотым стандартом»:
Для начала нам необходимо научить самописную базу «запоминать», что именно нужно передать в бухгалтерию. Разберем по шагам создание механизма регистрации:
Создадим в метаданных новый объект ПланОбмена (например, с именем ОбменСБухгалтерией). В составе этого плана обмена укажем те документы, которые планируем переносить: СчетНаОплату, РеализацияТоваровУслуг, СчетФактураВыданный. Обязательно установим свойство Авторегистрация в значение Разрешить.
Теперь при каждой записи выбранных документов система будет автоматически заносить ссылку на них в специальную таблицу изменений. Рассмотрим, как программно можно проверить наличие изменений:
// Пример получения изменений по узлу плана обмена
УзелОбмена = ПланыОбмена.ОбменСБухгалтерией.НайтиПоКоду("БП");
ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, НомерСообщения);
Пока ВыборкаИзменений.Следующий() Цикл
Данные = ВыборкаИзменений.Получить();
// Здесь происходит обработка данных для выгрузки
КонецЦикла;
Перейдем к самой ответственной части — настройке правил. В конфигурации «Конвертация данных» нам нужно создать ПКО (Правила Конвертации Объектов) для каждого документа. Выясним причину важности правильной настройки ПКО для БП 2.0:
В типовой бухгалтерии документы очень требовательны к аналитике. Если в вашей «самописке» нет счетов учета, их придется подставлять «на лету» в обработчиках правил. Например, в ПКС (Правило Конвертации Свойства) для счета учета номенклатуры в событии ПередВыгрузкой можно прописать поиск значения по умолчанию.
Важный момент со счетами-фактурами: В БП 2.0 счет-фактура не живет без документа-основания. Поэтому в ПКО для СчетФактураВыданный необходимо убедиться, что свойство ДокументОснование корректно сопоставлено с соответствующим документом в источнике.
Рассмотрим ситуацию, часто встречающуюся при сложных обменах или свертке баз (как описано в сообщении 7): при загрузке данных в регистр сведений (например, ДанныеСостоянийСотрудников) возникает ошибка: «Значение поля "Документ основание" не может быть пустым». Это происходит потому, что запись в регистр пытается создаться раньше, чем сам документ-регистратор будет записан и получит ссылку в базе-приемнике.
Разберем три способа решения этой проблемы:
УстановитьСсылкуНового():
В обработчике ПКО документа ПередВыгрузкой или ПриЗагрузке мы можем принудительно сгенерировать ссылку.
// В обработчике "ПриЗагрузке" (Приемник)
Если Объект.ЭтоНовый() Тогда
Объект.УстановитьСсылкуНового(Документы.ВводДанных.ПолучитьСсылку());
КонецЕсли;
Если обмен должен происходить «мгновенно», а не по расписанию раз в час, проанализируем использование Web-сервисов. Это позволяет источнику напрямую вызывать функции в БП 2.0.
Посмотрим на примерный алгоритм:
ЗагрузитьДокумент.ПроизвольныйАлгоритм или метод ПрочитатьXML.Такой подход сложнее в отладке, но исключает необходимость промежуточных файлов. Однако помните, что для стабильной работы Web-сервисов требуется надежное сетевое соединение.
Завершая настройку обмена, не забудьте про механизмы логирования. Выясним, что обязательно должно быть в вашей системе контроля:
Подтверждение получения: После успешной загрузки в БП 2.0, база-приемник должна отправить обратно номер последнего принятого сообщения. В источнике этот номер используется для вызова метода ПланыОбмена.УдалитьРегистрациюИзменений(). Если этого не делать, таблица изменений будет бесконечно расти, что приведет к деградации производительности всей базы.
Обработка коллизий: Что делать, если документ изменен в обеих базах? Для обмена с бухгалтерией обычно принимается правило: «Бухгалтерия всегда права», либо устанавливается жесткий запрет на изменение перенесенных документов в источнике после их выгрузки (установка даты запрета редактирования или статуса «Выгружен»).
Следование этим рекомендациям позволит вам создать отказоустойчивую систему интеграции между вашей уникальной конфигурацией и типовой «1С:Бухгалтерией 2.0».