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