Смена префикса имён в расширении конфигурации без потери данных

· 9 мин

Содержание

Префикс расширения меняют в Конфигураторе: Конфигурация → Расширения конфигурации, открыть расширение, вызвать свойства корневого элемента дерева и исправить поле «Префикс имён». Но это только половина работы. Новое значение платформа применит к объектам, которые вы добавите потом. Уже созданные реквизиты, справочники, формы и процедуры сохранят старые имена, и их придётся переименовать отдельно.

Типичная ситуация: в базе стоят два расширения от разных подрядчиков, и оба созданы с префиксом по умолчанию Расширение1_. Пока объекты не пересекаются, всё работает. Как только второй подрядчик добавит реквизит с тем же именем, одно из расширений перестанет применяться. Ниже — как изменить префикс аккуратно, чтобы не потерять данные и не сломать код.

Где задаётся префикс и на что он влияет

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

Что получает префикс:

  • 📦 собственные объекты расширения — справочники, документы, регистры, обработки, роли, общие модули;
  • 🧩 собственные реквизиты, табличные части, формы и команды, добавленные к заимствованным объектам;
  • ⚙️ процедуры-перехватчики в модулях заимствованных объектов, например Расш1_ПриСозданииНаСервере с аннотацией &После("ПриСозданииНаСервере");
  • 🖱️ обработчики событий элементов собственных форм, которые создал Конфигуратор.

Что префикс не затрагивает:

  • заимствованные объекты: их имена обязаны совпадать с именами в основной конфигурации;
  • синонимы и представления, которые видит пользователь;
  • данные в таблицах базы: физические таблицы называются служебными номерами, а не именами из дерева метаданных.

Последний пункт — главная причина, почему смена префикса в целом безопасна для данных. Переименование объекта в Конфигураторе сохраняет его внутренний идентификатор, и реструктуризация не пересоздаёт таблицу.

Префикс — соглашение об именах, а не механизм связывания. Перехватчик привязывается к методу основной конфигурации через аннотацию, а не через имя процедуры. Поэтому процедуру Расш1_ПередЗаписью можно назвать Пр_ПередЗаписью, и перехват продолжит работать.

Когда префикс расширения нужно изменить

Менять префикс ради красоты не стоит: работа ощутимая, а риск ошибок в коде реальный. Есть ситуации, где без этого не обойтись.

СитуацияЗачем менять
Два расширения с одинаковым префиксомИсключить совпадение имён собственных объектов и реквизитов
Префикс по умолчанию Расширение1_Длинные имена, по ним не понять, чьё это расширение
Расширение передают другому подрядчикуПривести имена к стандарту новой команды
Объединяете несколько расширений в одноСвести объекты к единому префиксу
Расширение переименовалиПрефикс по смыслу перестал совпадать с именем

Хороший префикс короткий, 3–6 символов, заканчивается подчёркиванием и уникален для базы: Пр_, ОКУ_, Склад_. Латиница допустима, но в типовых конфигурациях имена кириллические, и смешение затрудняет чтение кода.

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

Анализ расширения перед заменой префикса

Перед заменой составьте инвентаризацию. Это 15–30 минут, но именно здесь вскрываются связи, о которых забывают.

Объекты метаданных

Откройте дерево расширения и отметьте всё, что начинается со старого префикса. Удобно включить отбор по изменённым и собственным объектам: кнопка отбора есть в командной панели дерева расширения.

Посчитайте отдельно:

  1. Собственные объекты верхнего уровня (справочники, регистры, общие модули, роли).
  2. Собственные реквизиты и табличные части внутри заимствованных объектов.
  3. Собственные формы и команды.

Код и ссылки по имени

Имя объекта используется в коде строкой и в запросах. После переименования эти места компилятор поймает не все.

  • 🔍 обращения вида Справочники.Расш1_Договоры, Метаданные.Документы.Расш1_Акт;
  • 🔍 тексты запросов: ВЫБРАТЬ ... ИЗ Справочник.Расш1_Договоры;
  • 🔍 строковые имена: ОбщегоНазначения.ОбщийМодуль("Расш1_Сервер"), ОткрытьФорму("Обработка.Расш1_Загрузка.Форма");
  • 🔍 схемы компоновки данных в отчётах расширения — запросы и поля в них хранятся в макете, а не в модуле.

Связи вне расширения

Самое неочевидное — места, где имя объекта сохранено в данных пользовательского режима:

  • профили групп доступа в конфигурациях на БСП, если туда включены роли расширения;
  • сохранённые варианты отчётов и пользовательские настройки форм;
  • регламентные задания расширения;
  • обмены данных и внешние системы, которые обращаются к объектам по имени (HTTP-сервисы, COM, OData).

Сделайте резервную копию базы до любых изменений структуры расширения: выгрузку .dt или бэкап СУБД, плюс сохраните текущее расширение в файл .cfe.

Способы изменить префикс расширения

Выбор зависит от числа объектов и от инструмента разработки.

СпособКогда подходитРиски
Ручное переименование в КонфигуратореДо 20–30 объектов и процедурПропустить обращение в строке или в запросе
Выгрузка в файлы и массовая заменаКрупное расширение, сотни имёнЗамена «зацепит» лишнее; нужно аккуратное выражение поиска
Рефакторинг в 1C:EDTПроект уже ведётся в EDTСтроковые имена в коде EDT не переименует
Новое расширение с нуляНикогда для расширений с даннымиНовые объекты получат новые идентификаторы, данные старых пропадут

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

Пошаговая смена префикса в Конфигураторе

Порядок ниже рассчитан на файловую и клиент-серверную базу одинаково.

Шаг 1. Изменить свойство «Префикс имён»

  1. Откройте Конфигурация → Расширения конфигурации.
  2. Выделите расширение и откройте его конфигурацию.
  3. В дереве расширения правой кнопкой по корню → Свойства.
  4. В поле «Префикс имён» замените, например, Расширение1_ на Пр_.

С этого момента новые объекты и обработчики получат новый префикс. Старые остаются как были.

Шаг 2. Переименовать собственные объекты

Переименовывайте объект в его свойствах, поле «Имя». Синоним менять не нужно, если он не содержит префикс.

Порядок, который снижает число ошибок:

  1. Общие модули — на них чаще всего ссылаются.
  2. Справочники, документы, регистры.
  3. Собственные реквизиты и табличные части в заимствованных объектах.
  4. Формы, команды, роли.

Шаг 3. Исправить код и запросы

Пройдите глобальным поиском по модулям расширения (меню Правка, глобальный поиск и замена) по строке старого префикса. Ищите с учётом регистра и включите поиск в макетах, чтобы найти схемы компоновки.

Пример обращения до и после:

// было
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Расш1_Договоры ГДЕ Активен";
Модуль = ОбщегоНазначения.ОбщийМодуль("Расш1_Сервер");

// стало
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Пр_Договоры ГДЕ Активен";
Модуль = ОбщегоНазначения.ОбщийМодуль("Пр_Сервер");

Шаг 4. Переименовать перехватчики и обработчики форм

Процедуры с аннотациями &Перед, &После, &Вместо, &ИзменениеИКонтроль можно переименовать прямо в модуле. Привязка идёт по имени метода в аннотации.

С обработчиками элементов собственных форм иначе. Имя процедуры записано в свойстве события элемента. Если переименовали процедуру Расш1_ЗагрузитьНажатие, откройте элемент формы и исправьте имя в его событии. Иначе при нажатии появится ошибка о том, что обработчик не найден.

Шаг 5. Проверить и применить

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

Если расширение изменяет структуру данных, обновление в клиент-серверной базе требует монопольного доступа. Предупредите пользователей: их сеансы придётся завершить. Делайте это вне рабочего времени.

Если расширение ведётся в 1C:EDT

В EDT префикс задаётся в свойствах корневого объекта конфигурации расширения, в том же поле «Префикс имён». Объекты удобнее переименовывать командой рефакторинга: EDT сам исправит обращения к объекту в модулях, формах и типах реквизитов.

Ограничение то же, что у Конфигуратора. Строковые имена внутри кавычек рефакторинг не распознаёт: тексты запросов, вызовы ОбщийМодуль("..."), пути в ОткрытьФорму. Их найдите поиском по проекту и исправьте вручную.

После правок выгрузите расширение в информационную базу через стандартную синхронизацию EDT или соберите .cfe и загрузите его. Перед загрузкой в рабочую базу увеличьте номер в свойстве «Версия» расширения. Так в списке расширений будет видно, какая сборка уже стоит с новым префиксом, а какая ещё со старым.

Альтернатива: замена через выгрузку в файлы

Для больших расширений быстрее выгрузить расширение: Конфигурация → Выгрузить конфигурацию в файлы в окне расширения. Затем заменить префикс во всех .xml и .bsl и загрузить обратно.

Ключевое условие — не трогать атрибуты uuid в XML. Именно по ним платформа сопоставляет объекты с таблицами. Пока идентификаторы прежние, данные сохранятся.

Замену делайте по шаблону с границей слова, иначе Расш1_ внутри другого слова тоже заменится. Пример для PowerShell:

Get-ChildItem -Path C:\ext_dump -Recurse -Include *.xml,*.bsl |
  ForEach-Object {
    $t = Get-Content $_.FullName -Raw -Encoding UTF8
    $t = $t -replace '\bРасш1_', 'Пр_'
    Set-Content $_.FullName $t -Encoding UTF8 -NoNewline
  }

Учтите: свойство «Префикс имён» тоже лежит в корневом XML расширения. Поиск по старому значению найдёт и его.

Проверка целостности данных после смены префикса

После обновления конфигурации базы данных проверьте данные в пользовательском режиме. Ориентир — сравнение с замерами, сделанными до замены.

Проверка после замены префикса
Выполнено: 0 / 6

Как быстро сверить количество записей: перед заменой выполните в консоли запросов ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Расш1_Договоры, запишите число. После — тот же запрос с новым именем. Расхождение означает, что объект был пересоздан, а не переименован. В этом случае восстанавливайте базу из копии.

Для собственных реквизитов в заимствованных документах откройте 3–5 документов разных периодов и сравните значения с выгрузкой, сделанной заранее.

Ошибки при смене префикса и как их исправить

Диагностика: выберите симптом

Меняйте префикс сначала в копии базы. Прогоните чек-лист выше, и только потом переносите .cfe в рабочую базу.

Частые вопросы

Можно ли изменить префикс расширения в пользовательском режиме?
Нет. В пользовательском режиме можно только загрузить готовый файл .cfe. Сам префикс и имена объектов меняются в Конфигураторе или в 1C:EDT.
Можно ли оставить префикс пустым?
Платформа позволяет, но так делать не стоит. Без префикса собственные объекты легко совпадут по имени с объектами основной конфигурации после её обновления.
Влияет ли префикс на обновление основной конфигурации?
Напрямую нет. Но уникальный префикс снижает риск, что в новом релизе типовой конфигурации появится объект с тем же именем, что у вас в расширении.
Нужно ли переименовывать процедуры-перехватчики?
Для работы — нет, связь держится на аннотации. Переименовать стоит ради единообразия, чтобы по имени процедуры было видно, к какому расширению она относится.
Сохранятся ли данные, если сменить только свойство «Префикс имён»?
Да. Свойство само по себе ничего не переименовывает и структуру данных не меняет. Данные под угрозой только при удалении и повторном создании объектов.