Обмен УТ 10.3 - БП 3.0: Откуда берутся правила обмена и почему изменения в конфигураторе не применяются?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При настройке и доработке обменов между конфигурациями (например, между «Управление торговлей 10.3» и «Бухгалтерия предприятия 3.0») мы часто сталкиваемся с ситуацией, когда внесенные в правила конвертации изменения упорно игнорируются системой. Мы можем удалить реквизит в «Конвертации данных», обновить макет в конфигураторе, но при выгрузке данные все равно идут по старому сценарию.

В этой статье мы подробно разберем механизм хранения и версионирования правил обмена в 1С, выясним, почему правка макета не дает мгновенного результата, и рассмотрим алгоритм правильного обновления правил.

Суть проблемы: изменения в макете не видны при обмене

Рассмотрим типичную ситуацию, с которой столкнулся автор темы. Имеется односторонний обмен из УТ 10.3 в БП 3.0. После обновления Бухгалтерии изменилась структура метаданных (например, в документе «Требование-накладная» исчез табличный реквизит НоменклатурнаяГруппа). Чтобы избежать ошибок при загрузке, нам необходимо отключить передачу этого реквизита в правилах обмена.

Наши действия обычно выглядят так:

  1. Мы находим соответствующий макет правил обмена в дереве метаданных конфигурации.
  2. Выгружаем его в файл XML.
  3. Загружаем в конфигурацию «Конвертация данных 2.0».
  4. Вносим изменения (отключаем ПКС — правило конвертации свойства).
  5. Сохраняем новые правила в файл и загружаем обратно в макет конфигурации.
  6. Обновляем конфигурацию базы данных (F7).

Казалось бы, все сделано верно. Однако при запуске обмена реквизит продолжает выгружаться, или возникает ошибка. Почему это происходит?

Архитектура хранения правил обмена

Чтобы понять причину, нам нужно разобраться в иерархии источников, откуда механизм обмена получает правила. В типовых решениях 1С существует система приоритетов.

Правила могут находиться в трех местах:

  1. Внешний файл. Это самый высокий приоритет (обычно используется для отладки). Если в настройках узла обмена указано «Загрузить правила из файла», система будет брать их оттуда, игнорируя всё остальное.
  2. Регистр сведений ПравилаДляОбменаДанными. Это основное место хранения рабочих правил. Когда мы настраиваем обмен в режиме «Предприятие», правила из макета конфигурации распаковываются и записываются в этот регистр в виде двоичных данных или XML-строки.
  3. Макет конфигурации (Общие макеты). Это «заводской» шаблон. Он используется как источник только в момент первоначальной инициализации или при принудительном обновлении.

Главный вывод: В момент выполнения обмена система читает правила из регистра сведений, а не напрямую из макета конфигурации. Изменив макет в Конфигураторе, мы обновили лишь «шаблон», но в регистре сведений осталась старая копия правил (кэш).

Решение проблемы: обновление кэша правил

Чтобы наши изменения вступили в силу, нам необходимо принудительно обновить запись в регистре сведений. Разберем по шагам, как это сделать правильно.

Способ 1. Обновление типовых правил (через интерфейс)

Если мы внесли изменения именно в макет конфигурации и хотим, чтобы они применились, нам нужно выполнить процедуру обновления в режиме «1С:Предприятие».

  1. Запускаем базу (в нашем случае УТ 10.3) в режиме «Предприятие».
  2. Переходим в меню Операции — Регистры сведений.
  3. Находим регистр ПравилаДляОбменаДанными (RulesForDataExchange).
  4. Открываем форму списка этого регистра.
  5. В командной панели ищем кнопку «Обновить все типовые правила» (или аналогичную по смыслу, например, «Загрузить правила по умолчанию»).

Нажатие этой кнопки запускает процедуру, которая берет макеты из структуры метаданных и перезаписывает содержимое ресурсов в регистре сведений. Только после этого шага обмен начнет использовать новую логику.


// Примерная логика работы кнопки обновления (псевдокод)
Процедура ОбновитьТиповыеПравила()
    МакетПравил = ПолучитьОбщийМакет("ПравилаОбмена_УТ_БП");
    ЗаписьРегистра = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьМенеджерЗаписи();
    ЗаписьРегистра.ВидОбмена = ...;
    ЗаписьРегистра.ПравилаXML = МакетПравил; // Обновляем данные в БД
    ЗаписьРегистра.Записать();
КонецПроцедуры

Способ 2. Загрузка правил из файла (без изменения конфигурации)

Более предпочтительный способ для доработанных правил — не трогать конфигурацию вообще. Это упрощает дальнейшее обновление типовой конфигурации, так как ваши правила не затрутся при обновлении релиза от поставщика.

Давайте посмотрим, как это сделать:

  1. Сохраните измененные правила из «Конвертации данных» в файл XML на диск.
  2. В режиме «Предприятие» откройте настройки обмена данными (настройка синхронизации).
  3. Найдите пункт «Загрузить правила конвертации объектов».
  4. Выберите вариант «Из файла на компьютере» и укажите путь к вашему файлу.

При этом действии система считает файл и сама запишет его содержимое в регистр ПравилаДляОбменаДанными, заменив типовые правила. При этом макет в конфигураторе останется типовым, а обмен будет работать по вашим правилам.

Дополнительные нюансы и диагностика

Если после обновления правил в регистре проблема сохраняется, давайте проверим следующие моменты:

1. Правила регистрации vs Правила конвертации
В современных обменах (на базе БСП) существуют два вида правил:

Убедитесь, что вы обновляете именно тот комплект правил, который правили. В интерфейсе настройки обмена это обычно две разные кнопки загрузки.

2. Проверка версии правил в файле выгрузки
Чтобы удостовериться, что применяются именно новые правила, откройте сформированный файл обмена (Message_XX_XX.xml) в текстовом редакторе (например, Notepad++). В начале файла (в "шапке") обычно содержится информация о правилах.


<ПравилаОбмена>
    <ВерсияФормата>2.01</ВерсияФормата>
    <Id>...</Id>
    <ДатаНачала>...</ДатаНачала>
    <!-- Здесь можно поискать комментарий или дату создания правил -->
</ПравилаОбмена>

Если вы добавите в описание правил в «Конвертации данных» уникальный комментарий (например, "Версия с исправленным Требованием-накладной"), вы сможете увидеть его в XML-файле выгрузки и точно понять, применились правила или нет.

3. Кэширование на стороне сервера
В редких случаях, особенно в клиент-серверном варианте, сеанс может закэшировать старые данные. Если вы обновили правила в регистре, но результат прежний — попробуйте перезапустить фоновые задания или службу сервера 1С (в крайнем случае), либо просто перезайти в базу.

Резюме

Процесс правки правил обмена в 1С всегда должен заканчиваться обновлением их в информационной базе. Порядок действий должен быть следующим:

  1. Вносим изменения в правила («Конвертация данных»).
  2. Если решили хранить в конфигурации: Загружаем макет в конфигуратор -> Обновляем БД -> Идем в регистр сведений и жмем «Обновить типовые правила».
  3. Если используем внешний файл (рекомендуется): Идем в настройки обмена в режиме Предприятия -> Жмем «Загрузить правила из файла».

Соблюдение этого алгоритма гарантирует, что обмен данными будет работать именно так, как вы задумали, и избавит от долгих поисков "фантомных" ошибок.

← На главную