При настройке регулярного обмена данными между двумя базами «1С:Бухгалтерия предприятием 3.0» (БП 3.0) разработчики часто сталкиваются с неприятной особенностью работы универсального формата (EnterpriseData / КД3). При переносе документов «Списание с расчетного счета» и «Поступление на расчетный счет» база-приемник начинает вести себя избыточно «самостоятельно»: произвольно меняются виды операций, счета расчетов с контрагентами и статьи движения денежных средств (ДДС). Документ, который в базе-источнике был заполнен идеально, в базе-приемнике превращается в хаос.
В этой статье мы подробно разберем, почему стандартный механизм EnterpriseData искажает отправленные данные, и проанализируем четыре практических способа реализации обмена «один в один», включая программирование в расширениях, переход на КД2 и правильную настройку распределенных информационных баз (РИБ).
Для начала разберем по шагам физику процесса загрузки пакета через КД3. Концепция универсального формата обмена (EnterpriseData) подразумевает, что принимающая сторона не просто записывает XML/JSON-пакет напрямую в СУБД, а проводит его через сито бизнес-логики своих общих модулей. Это сделано для обеспечения целостности и непротиворечивости учета в базе-приемнике. Однако при попытке сделать жесткий односторонний перенос «один в один» эта логика начинает мешать.
Проанализируем основные точки перезаписи реквизитов:
СчетаУчетаРасчетовСКонтрагентами базы-приемника. Если для контрагента или договора в приемнике заданы дефолтные счета (например, 60.01 и 60.02), система принудительно перезапишет ими те счета, которые пришли из базы-источника.Стандартная установка свойства ОбменДанными.Загрузка = Истина предотвращает выполнение проверок в обработчиках ПередЗаписью непосредственно на уровне объектов конфигурации, но логика трансформации данных КД3 отрабатывает еще на этапе разбора XDTO в памяти, поэтому стандартный механизм отключения проверок здесь бессилен.
---
Если ваши базы не являются полностью типовыми (одна из них создана «на базе» БП 3.0), самым технологичным решением в рамках КД3 будет создание расширения конфигурации в базе-приемнике. Это позволит перехватить логику заполнения реквизитов, не снимая конфигурацию с поддержки и сохраняя возможность легкого обновления.
Разберем алгоритм реализации этого способа:
ПередЗаписьюПолученныхДанных или логику работы общего модуля МенеджерОбменаЧерезУниверсальныйФормат в процедурах, отвечающих за инициализацию и заполнение реквизитов документов списания и поступления безналичных ДС.Рассмотрим пример кода, который можно внедрить в расширение для предотвращения автоматического пересчета счетов расчетов и статей ДДС:
&Вместо("ЗаполнитьРеквизитыТабличнойЧастиДенежныеСредства")
Процедура Расш_ЗаполнитьРеквизитыТабличнойЧастиДенежныеСредства(СтрокаТабличнойЧасти, ДанныеXDTO, НаправлениеОбмена)
// Вызываем стандартную обработку заполнения реквизитов
ПродолжитьВызов(СтрокаТабличнойЧасти, ДанныеXDTO, НаправлениеОбмена);
// Принудительно возвращаем значения реквизитов из XDTO,
// если логика приемника перезаписала их дефолтными настройками
Если НаправлениеОбмена = "Получение" Тогда
Если ДанныеXDTO.Свойство("СчетУчетаРасчетов") И ЗначениеЗаполнено(ДанныеXDTO.СчетУчетаРасчетов) Тогда
СтрокаТабличнойЧасти.СчетУчетаРасчетов = НайтиСчетПоКоду(ДанныеXDTO.СчетУчетаРасчетов);
КонецЕсли;
Если ДанныеXDTO.Свойство("СтатьяДвиженияДенежных Средств") Тогда
// Блокируем автоподстановку ДДС по умолчанию
СтрокаТабличнойЧасти.СтатьяДвиженияДенежныхСредств = ПолучитьСсылкуНаСтатьюДДС(ДанныеXDTO.СтатьяДвиженияДенежныхСредств);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот подход гарантирует сохранение архитектуры обмена через EnterpriseData, но дает нам полный контроль над процессом трансформации реквизитов «на лету».
---
Если регулярный обмен должен работать строго по принципу «один в один» (трансляция данных как есть), использование универсального формата КД3 часто оказывается избыточным и слишком сложным. В КД3 структура данных завязана на абстрактную XML-схему EnterpriseData, в то время как Конвертация данных 2.0 работает напрямую со структурой метаданных конкретных конфигураций.
Разберем по шагам, как настроить такой обмен:
MD83Exp.epf.СписаниеСРасчетногоСчета и ПоступлениеНаРасчетныйСчет. Так как метаданные баз идентичны или крайне близки, сопоставление реквизитов (счетов расчетов, статей ДДС, контрагентов, договоров) настраивается напрямую: «Источник.СчетРасчетов -> Приемник.СчетРасчетов».Преимущество этого метода в полной предсказуемости: данные переносятся ровно в том виде, в котором они были записаны в источнике, без вмешательства механизмов искусственного интеллекта конфигурации-приемника.
---
Использование распределенной информационной базы (РИБ) обеспечивает самый надежный перенос данных «один в один» на уровне СУБД. Однако при попытке настроить РИБ между базами, которые изначально создавались как независимые, разработчики сталкиваются с двумя критическими проблемами.
При попытке создания узла РИБ система выдает ошибку: «Конфигурация узла распределенной ИБ не соответствует ожидаемой!». Это происходит из-за малейших расхождений в структуре метаданных (даже если базы визуально идентичны, в одной из них может быть добавлен один нетиповой реквизит или изменена длина строкового поля).
Для решения этой проблемы выполним следующие действия:
.cf), выгруженным из базы-источника, чтобы выровнять идентификаторы метаданных.Когда РИБ связывает две ранее независимо работавшие базы, при первом обмене неизбежно возникнет лавина дублей справочников (Контрагенты, Номенклатура, Договоры, Статьи ДДС), так как внутренние уникальные идентификаторы (GUID) этих объектов в базах различаются.
Разберем схему решения проблемы дублей, предложенную участниками форума:
СоответствияОбъектовИнформационныхБаз.---
Если вы хотите сохранить стандартный обмен через КД3 и при этом избежать написания кода и расширений, необходимо настроить учетную политику и аналитику обеих баз таким образом, чтобы алгоритмы автозаполнения приемника выдавали точно такой же результат, как и в источнике.
Проанализируем шаги по синхронизации настроек:
СчетаУчетаРасчетовСКонтрагентами из базы-источника в базу-приемник. Это можно сделать с помощью обработки «Выгрузка и загрузка данных XML». Если правила подбора счетов учета для каждого контрагента и договора в базах будут абсолютно идентичными, то при загрузке документов алгоритмы КД3 выберут те же счета, что были в источнике.СтатьиДвиженияДенежныхСредств. Настроим одинаковые связи статей ДДС с хозяйственными операциями в настройках параметров учета обеих информационных баз.Этот способ требует организационных усилий и педантичного ведения нормативно-справочной информации (НСИ), однако он позволяет оставаться в рамках полностью типового функционала обновления программных продуктов 1С.