Как изменить существующие правила обмена в 1С и обновить их при изменении структуры баз?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При эксплуатации информационных систем 1С часто возникает ситуация, когда настроенный ранее обмен данными «ломается» после очередного обновления конфигураций. Если обмен построен на основе XML-правил, зашитых внутрь внешней обработки выгрузки/загрузки, то любое изменение структуры метаданных (переименование реквизита, добавление новых полей, изменение типов данных) делает правила неактуальными. В этой статье мы подробно разберем, как извлечь такие правила обмена, обновить под новую структуру метаданных и вернуть обратно в обработку.

Шаг 1: Извлечение существующих правил из макета обработки

Прежде чем приступать к редактированию правил, нам необходимо достать их из внешней обработки. Как правило, разработчики хранят файлы правил обмена прямо внутри обработки в виде макета. Выясним, как их оттуда извлечь:

  1. Откроем базу 1С в режиме Конфигуратор.
  2. Откроем внешнюю обработку обмена через меню Файл — Открыть.
  3. В дереве метаданных обработки перейдем к ветке Макеты. Обычно макет с правилами называется ПравилаОбмена, ПравилаОбменаТекст или аналогично.
  4. Определим тип макета:
    • Текстовый документ: Дважды кликнем по макету, выделим весь текст комбинацией клавиш Ctrl + A, скопируем его (Ctrl + C), создадим на диске пустой текстовый файл, вставим туда скопированное содержимое и сохраним его с расширением .xml. При сохранении обязательно выберем кодировку UTF-8.
    • Двоичные данные: Нажмем на макет правой кнопкой мыши, выберем команду Сохранить макет в файл... и сохраним его на диск как XML-файл.

Шаг 2: Выгрузка актуальной структуры метаданных баз Источника и Приемника

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

В зависимости от версии платформы нам понадобятся обработки:

Рассмотрим последовательность действий для выгрузки структуры:

  1. Запустим базу-источник в режиме 1С:Предприятие.
  2. Через главное меню откроем внешнюю обработку MD83Exp.epf.
  3. В открывшемся окне укажем имя файла, в который будет сохранено описание структуры (например, source_metadata.xml).
  4. Установим флаги выгрузки необходимых объектов (по умолчанию рекомендуется выгружать всю структуру для корректного сопоставления типов) и нажмем кнопку Выгрузить.
  5. Повторим аналогичную процедуру для базы-приемника, сохранив ее структуру в файл (например, target_metadata.xml).

Шаг 3: Загрузка метаданных и правил в «Конвертацию данных 2.1» (КД 2.1)

Перейдем к работе непосредственно в базе КД 2.1. Проанализируем критически важный момент: что загружать сначала — правила или структуру метаданных?

Опытные специалисты рекомендуют сначала обновить метаданные конфигураций в КД, а затем импортировать правила обмена. Если сделать наоборот (загрузить старые правила в КД, где еще нет описания новых метаданных), то программа автоматически создаст «пустые» («фантомные») объекты метаданных на основе старых правил. Это может привести к дублированию объектов метаданных и трудноисправимым ошибкам сопоставления.

Разберем правильный алгоритм:

  1. Откроем базу Конвертация данных 2.1.
  2. Перейдем в раздел Загрузка структуры конфигурации.
  3. Загрузим файл структуры источника (source_metadata.xml). Если эта конфигурация уже присутствовала в КД, обязательно выберем режим «Обновить существующую конфигурацию».
  4. Аналогичным образом обновим конфигурацию приемника, загрузив файл target_metadata.xml.
  5. Перейдем в раздел Загрузка правил обмена. Укажем путь к XML-файлу с правилами, который мы извлекли на Шаге 1, укажем соответствующие конфигурации источника и приемника и нажмем Выполнить загрузку. КД автоматически сопоставит правила с обновленными метаданными.

Шаг 4: Настройка новых реквизитов и синхронизация свойств

Теперь наши правила находятся в КД 2.1, а структуры конфигураций актуализированы. Выясним, как добавить измененные или новые реквизиты в правила обмена:

  1. Найдем нужное нам Правило конвертации объектов (ПКО). Например, ПКО для документа реализации товаров и услуг.
  2. Перейдем на вкладку Конвертация свойств.
  3. Если в конфигурациях появились новые реквизиты, которые необходимо переносить, воспользуемся кнопкой «Синхронизировать свойства». Конвертация данных автоматически сопоставит новые поля источника и приемника с одинаковыми именами и типами.
  4. Для несовпадающих реквизитов добавим Правило конвертации свойства (ПКС) вручную, указав источник и приемник. Если реквизит является ссылочным типом (например, новый справочник), не забудем указать для него соответствующее ПКО для этого справочника.

Шаг 5: Анализ программного кода в обработчиках событий

Часто обмен «ломается» из-за того, что в обработчиках событий КД используется старый программный код. Нам необходимо вручную проверить вкладки обработчиков событий в ПКО, ПКС и ПВД (Правила выгрузки данных).

Например, в обработчике «Перед выгрузкой» ПКС мог содержаться старый код обращения к реквизиту, который при обновлении конфигурации был удален или переименован. Если код содержит ссылки на несуществующие реквизиты, при обмене возникнет критическая ошибка.

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


// Безопасное получение значения реквизита, если структура могла измениться
Если Метаданные.Документы.РеализацияТоваровУслуг.Реквизиты.Найти("НовыйРеквизит") <> Неопределено Тогда
    Значение = Источник.НовыйРеквизит;
Иначе
    Значение = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
КонецЕсли;

Шаг 6: Отладка измененных правил

Перед тем как внедрять правила обратно в основную обработку, их необходимо протестировать. Для этого используется универсальная обработка обмена:

  1. Выгрузим из КД измененные правила в файл на диске с помощью кнопки Сохранить правила обмена.
  2. В режиме «1С:Предприятие» откроем обработку Универсальный обмен данными в формате XML (V8Exchan83.epf).
  3. Укажем путь к сохраненному файлу правил, настроим параметры и выполним тестовую выгрузку и загрузку.
  4. Если возникают ошибки, включим режим отладки обработчиков на вкладке Дополнительные настройки в обработке обмена, выгрузим программный код обработчиков во внешний модуль и пройдем отладчиком по шагам в Конфигураторе для локализации проблемы.

Шаг 7: Загрузка готовых правил обратно во внешнюю обработку

После успешного тестирования обмена вернем обновленные правила в нашу первоначальную обработку:

  1. Откроем нашу внешнюю обработку в Конфигураторе.
  2. Перейдем к макету с правилами.
  3. Если макет текстовый: откроем его, полностью очистим содержимое, откроем наш итоговый XML-файл с правилами в любом текстовом редакторе, скопируем весь текст и вставим его в макет.
  4. Если макет двоичный: нажмем правой кнопкой мыши по макету, выберем Загрузить из файла... и укажем наш новый XML-файл правил обмена.
  5. Сохраним внешнюю обработку.

Теперь наша доработанная внешняя обработка содержит полностью обновленные правила обмена и готова к работе в обновленных базах данных.

← На главную