При работе с современными конфигурациями на платформе 1С:Предприятие 8.3, такими как Управление торговлей 11.4 и Бухгалтерия предприятия 3.0, многие разработчики сталкиваются с вопросом: где находятся привычные файлы правил обмена (xml)? Часто возникает ситуация, когда типовая синхронизация работает не совсем корректно — например, документы переносятся, но в них отсутствуют важные реквизиты, такие как НомерВходящегоДокумента или ДатаВходящегоДокумента. Разберемся, как устроена современная система обмена и как внести в нее изменения.
Первое и самое важное, что нам необходимо понять: в современных типовых решениях классические правила обмена, созданные в Конвертации данных 2.0, больше не используются для регулярной синхронизации. Вместо них применяется технология EnterpriseData.
В этой архитектуре нет отдельного внешнего файла правил ExchangeRules.xml. Вся логика сопоставления полей документов и справочников «зашита» непосредственно в программный код конфигурации. Рассмотрим, где именно она находится:
МенеджерОбменаЧерезУниверсальныйФормат (внутри самой УТ).МенеджерОбменаЧерезУниверсальныйФормат, но уже находящийся в составе конфигурации Бухгалтерии.Таким образом, если вы хотите изменить логику переноса, вам не нужно искать файл на диске. Вам нужно работать либо с кодом этих модулей, либо использовать инструмент Конвертация данных 3.0.
Проанализируем причину, по которой входящие данные могут не переноситься. В формате EnterpriseData (универсальный формат) данные передаются через строго определенные структуры. Если в версии формата, которая установлена в настройках вашей синхронизации, поле для входящего номера не предусмотрено или называется иначе, данные будут потеряны при выгрузке.
Также часто встречается ситуация, когда в модуле МенеджерОбменаЧерезУниверсальныйФормат просто пропущена инициализация соответствующих свойств для конкретного типа документа. Выясним, как это проверить. Нам нужно найти процедуру, отвечающую за выгрузку нужного документа, например, ПриобретениеТоваровУслуг. В коде это выглядит примерно так:
Процедура Пр_Выгрузить_Документ_ПриобретениеТоваровУслуг(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена)
// Здесь происходит сопоставление реквизитов документа 1С
// и свойств объекта формата XML (EnterpriseData)
ДанныеXDTO.НомерВходящегоДокумента = ДанныеИБ.НомерВходящегоДокумента;
ДанныеXDTO.ДатаВходящегоДокумента = ДанныеИБ.ДатаВходящегоДокумента;
КонецПроцедуры
Если подобных строк в коде нет, то данные даже не попадут в файл обмена.
Если вы решили использовать официальный инструмент для правки правил, вам понадобится Конвертация данных 3.0 (КД 3). Важно понимать, что методика работы здесь в корне отличается от КД 2.0. Рассмотрим пошаговый алгоритм:
EnterpriseData.xsd..xml. Она генерирует текст программного кода для модуля МенеджерОбменаЧерезУниверсальныйФормат.Чтобы сохранить конфигурацию на поддержке, мы настоятельно рекомендуем использовать механизм расширений. Это позволит вам переопределить логику обмена, не затрагивая основной код системы. Проанализируем, как это сделать для исправления проблемы с входящими номерами:
Создадим расширение и добавим в него процедуру-перехватчик для модуля менеджера обмена. Мы можем использовать аннотацию &После для процедуры загрузки данных в БП 3.0:
&После("Пр_ПриЗагрузкеОбъекта")
Процедура Расш_Пр_ПриЗагрузкеОбъекта(Объект, ДанныеXDTO, КомпонентыОбмена)
Если ТипЗнч(Объект) = Тип("ДокументОбъект.ПоступлениеТоваровУслуг") Тогда
// Проверяем наличие данных в структуре XDTO и заполняем объект
Если ДанныеXDTO.Свойства().Доступно("НомерВходящегоДокумента") Тогда
Объект.НомерВходящегоДокумента = ДанныеXDTO.НомерВходящегоДокумента;
КонецЕсли;
Если ДанныеXDTO.Свойства().Доступно("ДатаВходящегоДокумента") Тогда
Объект.ДатаВходящегоДокумента = ДанныеXDTO.ДатаВходящегоДокумента;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Чтобы не делать лишнюю работу, сначала нужно выяснить, где именно происходит сбой: при выгрузке из УТ или при загрузке в БП. Рассмотрим, как провести диагностику самостоятельно:
<NumberIn> или аналогичные, в зависимости от версии формата).Результаты анализа:
Посмотрим на настройки синхронизации. В узле обмена есть возможность выбрать версию формата (1.3, 1.5, 1.10 и т.д.). Каждая новая версия формата поддерживает больше полей и объектов. Попробуйте повысить версию формата в настройках обеих баз — возможно, ваша проблема уже решена разработчиками 1С в более свежих релизах формата EnterpriseData, и вам достаточно просто обновить конфигурации и перенастроить версию обмена.
Также помните, что для отладки обмена в формате EnterpriseData стандартная обработка V8Exch82.epf бесполезна. Вместо нее используйте встроенную обработку «Регистрация изменений для обмена данными», которая позволяет детально проанализировать состав выгружаемого сообщения обмена.