Как массово удалить или отключить правила и свойства с префиксом «Удалить» в «1С:Конвертация данных 2.1»?

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

При активной разработке и поддержке интеграционных решений на базе конфигурации «1С:Конвертация данных 2.1» (КД 2.1) специалисты часто сталкиваются с проблемой «засорения» правил обмена. После очередного обновления метаданных баз источника и приемника в КД загружаются устаревшие реквизиты, табличные части и объекты. Согласно стандартам разработки фирмы «1С», перед полным удалением объекты переименовываются с добавлением префикса Удалить или Obsolete.

Эти устаревшие элементы приводят к ошибкам при проверке правил обмена, затрудняют визуальное восприятие структуры метаданных и замедляют процесс настройки. В данной статье мы подробно разберем, как избавиться от подобных объектов, проанализируем поведение встроенных механизмов КД 2.1 и рассмотрим альтернативные, более быстрые и безопасные способы очистки правил.

Почему в правилах обмена появляются объекты «Удалить»?

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

  1. На первом этапе реквизит переименовывается (например, Субконто превращается в УдалитьСубконто), а в его синониме указывается текст «(не используется)».
  2. На втором этапе (часто через несколько редакций или релизов) объект удаляется окончательно, когда разработчики уверены, что все процедуры переноса данных завершены.

Когда мы выгружаем описание структуры конфигурации с помощью обработок MD80Exp.epf или MD82Exp.epf и загружаем его в КД, эти временные реквизиты затягиваются в базу как полноценные свойства. В результате при сопоставлении правил система пытается работать с неактуальными данными, вызывая ошибки валидации.

Способ 1. Использование встроенной групповой обработки КД

Рассмотрим стандартный механизм, доступный непосредственно в конфигурации КД. Начиная с релиза 2.1.8.2, в составе конфигурации «Конвертация данных» присутствует встроенная обработка «Групповая обработка справочников и документов».

Выполним следующие шаги для настройки пометки на удаление устаревших элементов:

  1. Откроем КД в режиме «1С:Предприятие».
  2. Перейдем в раздел со встроенными обработками и запустим групповую обработку.
  3. В качестве объекта отбора выберем справочник Конвертации, ПравилаКонвертацииСвойств (ПКС) или Свойства.
  4. Зададим условие отбора: имя источника или приемника начинается с «Удалить» или «Obsolete».
  5. Выберем действие «Пометить на удаление».

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

Способ 2. Использование флага «Отключить» (Рекомендуемый и безопасный вариант)

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

Проанализируем более безопасную альтернативу. В настройках каждого правила конвертации свойства (ПКС) предусмотрен специальный флаг «Отключить» (или «Отключить обработку данного правила»).

Если этот флаг установлен:

Способ 3. Быстрое массовое отключение свойств программным скриптом

Чтобы не тратить часы на ожидание работы стандартной групповой обработки, мы можем воспользоваться консолью кода и написать простой программный скрипт. Этот скрипт точечно найдет все ПКС, связанные с устаревшими реквизитами, и взведет у них флаг Отключить. Поскольку при этом не запускается тяжелый механизм поиска ссылок платформы, операция займет всего несколько секунд.

Разберем пример кода для реализации этой задачи:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ПКС.Ссылка КАК ПКС
    |ИЗ
    |	Справочник.ПравилаКонвертацииСвойств КАК ПКС
    |ГДЕ
    |	(ПОДСТРОКА(ПКС.СвойствоИсточника.Имя, 1, 7) = ""Удалить""
    |	ИЛИ ПОДСТРОКА(ПКС.СвойствоПриемника.Имя, 1, 7) = ""Удалить""
    |	ИЛИ ПОДСТРОКА(ПКС.СвойствоИсточника.Имя, 1, 8) = ""Obsolete""
    |	ИЛИ ПОДСТРОКА(ПКС.СвойствоПриемника.Имя, 1, 8) = ""Obsolete"")
    |	И ПКС.Отключить = ЛОЖЬ";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

НачатьТранзакцию();
Пока Выборка.Следующий() Цикл
    ОбъектПКС = Выборка.ПКС.ПолучитьОбъект();
    ОбъектПКС.Отключить = Истина;
    ОбъектПКС.Записать();
КонецЦикла;
ЗафиксироватьТранзакцию();

Как работает этот скрипт: мы выбираем из базы все ПКС, у которых имя свойства источника или приемника начинается со слов «Удалить» или «Obsolete», и которые еще не отключены. Затем в транзакции быстро обходим выборку, устанавливаем свойство Отключить в значение Истина и записываем изменения. Использование транзакции позволяет существенно ускорить запись объектов в базу данных.

Способ 4. Очистка с помощью специализированных внешних обработок

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

Среди них можно выделить инструменты со следующим функционалом:

Резюме и рекомендации

Мы подробно разобрали проблему очистки правил от устаревших объектов в «1С:Конвертация данных 2.1». Подведем итог и определим оптимальную стратегию работы:

  1. Если у вас небольшие правила обмена, вы можете использовать встроенную в КД 2.1.8.2 Групповую обработку справочников и документов. Учитывайте, что она работает рекурсивно и может потребовать значительного времени на выполнение.
  2. Для крупных и сложных правил обмена физическое удаление — это крайняя мера, способная нарушить целостность связей. Вместо удаления используйте механизм отключения правил.
  3. Используйте предоставленный программный скрипт для мгновенной установки флага отключения у всех устаревших свойств. Это сэкономит ваше время и убережет конфигурацию КД от зависаний.
← На главную