При настройке интеграции между различными конфигурациями на платформе «1С:Предприятие» специалисты часто сталкиваются с непредвиденным поведением системы, сбоями при чтении файлов обмена и непонятными ошибками в коде. Особенно остро эти проблемы встают, когда задействованы механизмы Библиотеки стандартных подсистем (БСП) и специализированные планы обмена.
В данной статье мы подробно разберем ситуацию, когда при попытке обмена между конфигурациями «1С:Документооборот» (ДО) и «1С:Управление автотранспортом» (УАТ) возникают сразу две критические ошибки:
Ошибка при вызове метода контекста (НачатьЧтение): Неправильный формат сообщенияОшибка при записи изменений при обмене: Поле объекта не обнаружено (Объекты)Мы детально проанализируем причины возникновения этих ошибок — как с технической точки зрения (на уровне кода и XML-структур), так и с методологической стороны. Также мы рассмотрим пошаговые инструкции по правильной настройке взаимодействия между этими базами.
---
Рассмотрим подробнее, почему возникает ошибка при вызове метода НачатьЧтение. Этот метод принадлежит объекту ЧтениеСообщенияОбмена и отвечает за инициализацию процесса загрузки данных из файла XML.
Когда платформа выполняет этот метод, она ожидает, что входной файл строго соответствует структуре сообщения обмена 1С. Типичный код чтения файла выглядит следующим образом:
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
Попытка
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
Исключение
ЗаписатьЛогОшибки("Не удалось прочитать заголовок сообщения обмена: " + ОписаниеОшибки());
ВызватьИсключение;
КонецПопытки;
Метод НачатьЧтение анализирует так называемый «конверт» сообщения — заголовок XML-документа. В заголовке обязательно должны присутствовать следующие элементы:
Если заголовок XML-файла не соответствует ожидаемому формату (например, в файле вообще отсутствует XML-структура сообщения обмена, либо теги повреждены, либо перепутаны коды узлов), платформа мгновенно генерирует исключение Неправильный формат сообщения.
Часто это происходит, когда вместо специализированного сообщения обмена в систему пытаются загрузить обычный файл выгрузки данных, сформированный, например, через обработку «Универсальный обмен данными в формате XML».
---
Эта ошибка происходит на этапе выгрузки данных из информационной базы-источника. Разберем по шагам, где именно в программном коде БСП возникает этот сбой.
При выгрузке изменений через планы обмена механизмы БСП обращаются к свойствам узла обмена. В конфигурациях, разработанных на базе современных стандартов 1С, планы обмена часто содержат табличные части для гибкой настройки фильтрации объектов. Одной из таких табличных частей является табличная часть Объекты (или ОбъектыМетаданных), где перечисляются типы данных, подлежащие синхронизации.
Типичный фрагмент кода БСП, в котором происходит обращение к метаданным плана обмена, выглядит так:
// Фрагмент общего модуля обмена данными
Функция ПолучитьПравилаРегистрацииОбъектов(УзелИнформационнойБазы) Экспорт
// Попытка обратиться к табличной части "Объекты" узла плана обмена
ТаблицаОбъектов = УзелИнформационнойБазы.Объекты.Выгрузить();
// Дальнейшая обработка правил регистрации...
Возврат ТаблицаОбъектов;
КонецФункции
Если в коде выполняется обращение вида УзелИнформационнойБазы.Объекты, но у используемого плана обмена в конфигураторе физически отсутствует табличная часть с именем Объекты, платформа аварийно завершает работу с ошибкой Поле объекта не обнаружено (Объекты).
Это однозначно указывает на то, что используется не предназначенный для данного сценария план обмена, программный код которого несовместим со стандартными процедурами обмена БСП, вызываемыми в процессе синхронизации.
---
Проанализируем главную причину сбоя, которая кроется в настройках обмена, показанных в логе автора:
«Начат обмен данными по настройке "Обмен с ЭДО"...»
Это ключевой маркер методологической ошибки. Пользователь перепутал две совершенно разные технологии:
Попытка использовать план обмена Обмен с ЭДО для передачи данных между базами «1С:Документооборот» и «1С:Управление автотранспортом» в корне неверна. Это приводит к тому, что система пытается прочитать файлы по алгоритмам ЭДО, которые не соответствуют структуре данных интеграции ДО-УАТ, вызывая описанные выше технические сбои.
---
Для того чтобы связать эти две конфигурации, необходимо использовать штатные механизмы интеграции, заложенные разработчиками фирмы «1С» и отраслевых решений. Рассмотрим два наиболее эффективных и поддерживаемых способа.
Технология бесшовной интеграции позволяет пользователям работать с функционалом «1С:Документооборота» непосредственно из интерфейса «1С:Управление автотранспортом» без физического дублирования данных в обеих базах. Это реализуется через механизм веб-сервисов.
Выполним настройку по шагам:
Администрирование -> Публикация на веб-сервере.DMService (Document Management Service). Именно этот сервис обеспечивает бесшовную интеграцию.Администрирование -> Настройки программы -> Интеграция с 1С:Документооборот.Интеграция с 1С:Документооборот.Адрес веб-сервиса введите URL-адрес опубликованного сервиса в формате: http://имя_сервера/имя_публикации/ws/DMService.1cws.Путевой лист или Заказ на ТС) должны автоматически создавать связанные документы или запускать бизнес-процессы в «1С:Документооборот».---
Если вам требуется физический перенос справочников и документов между информационными базами ДО и УАТ, необходимо использовать стандартную подсистему «Синхронизация данных».
Разберем процесс настройки по шагам:
Администрирование -> Синхронизация данных.Синхронизация данных.ДО, для УАТ — АТ).Настройки синхронизации данных -> Создать синхронизацию данных.1С:Документооборот.---
Если вы столкнулись с подобной проблемой при кастомных обменах или измененных правилах, лучшим решением является использование отладчика. Поскольку обмен данными чаще всего выполняется в фоновых заданиях, обычная точка останова в коде может не сработать.
Для того чтобы подключиться к процессу обмена, выполните следующие действия:
Отладка -> Подключение....ВыполнениеОбменаДанными).ОбменДаннымиСервер в процедуре выгрузки или чтения данных (например, перед вызовом методов НачатьЧтение() или НачатьЗапись()).Соблюдение этих правил и методологически верный выбор инструментов интеграции позволят вам раз и навсегда решить проблемы с обменом данными между конфигурациями «1С:Документооборот» и «1С:Управление автотранспортом».