Как настроить нетиповой план обмена данными в 1С:Бухгалтерии предприятия 3.0 на базе БСП?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При переходе с обычных форм (например, 1С:Бухгалтерия 2.0) на управляемые формы в конфигурациях на базе Библиотеки стандартных подсистем (БСП) разработчики часто сталкиваются с трудностями при настройке нетипового обмена данными. Если ранее достаточно было создать план обмена и привязать файл правил через стандартную обработку обмена, то в современных конфигурациях (таких как 1С:Бухгалтерия предприятия 3.0) обмен данными полностью управляется подсистемой БСП.

Разберем по шагам весь процесс: от добавления метаданных в конфигураторе до подготовки правил в Конвертации данных 2.0 и загрузки их в режиме 1С:Предприятие.

Шаг 1. Создание плана обмена в конфигураторе

Для начала создадим новый объект метаданных и настроим его состав:

  1. В ветке метаданных ПланыОбмена добавим новый план обмена, например, МойНетиповойОбмен.
  2. На вкладке Состав укажем объекты, которые должны участвовать в синхронизации.
  3. Обязательно включим в состав плана обмена регистр сведений СоответствияОбъектовИнформационныхБаз и установим для него свойство Авторегистрация = Запретить. Этот регистр используется БСП для хранения сопоставления ссылок между базами.
  4. Для остальных объектов состава настроим авторегистрацию (обычно рекомендуется устанавливать Запретить, если планируется использование правил регистрации объектов, либо Разрешить для простой регистрации по факту записи).

Шаг 2. Интеграция плана обмена с подсистемой БСП

Чтобы подсистема обмена данными БСП распознала новый план обмена, предоставила команды загрузки правил и панель администрирования, выполним доработку общих модулей и команд:

  1. Откроем общий модуль ОбменДаннымиПереопределяемый.
  2. Найдем процедуру ПолучитьПланыОбмена и зарегистрируем наш объект:
    
    Процедура ПолучитьПланыОбмена(ПланыОбменаПодсистемы) Экспорт
        ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.МойНетиповойОбмен);
    КонецПроцедуры
    
  3. Включим наш план обмена в состав общих команд БСП, связанных с обменом (например, команды настройки правил, выполнения обмена, загрузки правил конвертации и регистрации).
  4. Включим новый план обмена и требуемые объекты в общие подписки на события БСП (ЗарегистрироватьИзмененияПередЗаписью, ЗарегистрироватьИзмененияПриЗаписи и др.), если регистрация данных должна управляться правилами регистрации объектов (ПРО).
  5. Обновим метаданные БСП. Для этого запустим внешнюю обработку ИнструментыРазработчикаОбновлениеВспомогательныхДанных.epf из комплекта БСП или выполним регламентное обновление справочника ИдентификаторыОбъектовМетаданных.

Шаг 3. Подготовка правил в Конвертации данных и упаковка в ZIP-архив

В отличие от старых механизмов, БСП в 1С:Предприятии 8.3 не принимает отдельные файлы *.xml через стандартный диалог управляемых форм, а требует единый ZIP-архив с жестко регламентированными именами файлов внутри.

Сформируем комплект правил в конфигурации Конвертация данных 2.0 и упакуем их в архив со следующими именами:

  1. ExchangeRules.xml (или ПравилаКонвертации.xml) — правила конвертации для выгрузки из текущей базы (источника).
  2. CorrespondentExchangeRules.xml (или ПравилаКонвертацииКорреспондента.xml) — правила конвертации для обратной стороны (корреспондента). Даже если обмен односторонний, файл должен присутствовать (можно выгрузить минимальный каркас правил).
  3. RegistrationRules.xml (или ПравилаРегистрации.xml) — правила регистрации объектов для текущей базы.

Поместим эти файлы в корень архива Rules.zip (без создания вложенных папок).

Шаг 4. Загрузка правил в пользовательском режиме

После применения изменений в конфигураторе запустим 1С:Бухгалтерию 3.0 в режиме «1С:Предприятие»:

  1. Перейдем в раздел Администрирование → Синхронизация данных (или откроем список узлов созданного плана обмена).
  2. В меню действий узла выберем команду Загрузить правила конвертации объектов.
  3. Выберем вариант Загрузить из файла на компьютере и укажем подготовленный ZIP-архив.
  4. Проверим, что система успешно прочитала правила конвертации и правила регистрации.

Шаг 5. Устранение ошибки формата сообщения при обмене с УТ 10.3

Если обмен настраивается между БП 3.0 (на БСП) и устаревшей конфигурацией на обычных формах (например, Управление торговлей 10.3), при первой синхронизации часто возникает «Ошибка формата сообщения обмена». Выясним причину этой ошибки и способы ее устранения.

Подсистема БСП оборачивает данные в специальный конверт сообщений (v8msg:Message), используя платформенные объекты ЗаписьСообщенияОбмена и ЧтениеСообщенияОбмена. Старая версия обработки УниверсальныйОбменДаннымиXML в УТ 10.3 ожидает открытый XML с корневым тегом <ФайлОбмена> и не умеет работать с новыми пакетами БСП.

Для решения этой проблемы рассмотрим два подхода:

  1. Обновление обработки в базе-приемнике: Внедрить в УТ 10.3 актуальную версию обработки УниверсальныйОбменДаннымиXML (версии 2.0.18 и выше), поддерживающую оптимизированный формат обмена и чтение заголовков БСП.
  2. Использование типового плана обмена: Вместо создания полностью нетипового плана обмена можно использовать типовой предопределенный план обмена с УТ 10.3 (ОбменУправлениеТорговлей103БухгалтерияПредприятия30), загрузив в него свои доработанные правила через интерфейс БСП. В типовых планах БСП уже предусмотрены механизмы совместимости форматов сообщений со старыми конфигурациями.

Важные нюансы при программной обработке обмена

Проанализируем технические моменты, предотвращающие зацикливание обмена и проблемы с квитированием:

  1. Установка признака загрузки: При программной записи принимаемых объектов всегда необходимо устанавливать флаг:
    
    Объект.ОбменДанными.Загрузка = Истина;
    Объект.Записать();
    
    Если этого не сделать, объект повторно зарегистрируется на узле обмена, что приведет к бесконечной передаче одних и тех же данных по кругу.
  2. Квитирование номеров сообщений: Очистка таблицы регистрации изменений в источнике происходит только тогда, когда из базы-приемника возвращается ответный пакет, в котором номер принятого сообщения подтвержден. Чтение сообщений всегда должно завершаться вызовом метода ЧтениеСообщенияОбмена.ЗакончитьЧтение().
← На главную