Смена префикса имён в расширении конфигурации без потери данных
Содержание
Префикс расширения меняют в Конфигураторе: Конфигурация → Расширения конфигурации, открыть расширение, вызвать свойства корневого элемента дерева и исправить поле «Префикс имён». Но это только половина работы. Новое значение платформа применит к объектам, которые вы добавите потом. Уже созданные реквизиты, справочники, формы и процедуры сохранят старые имена, и их придётся переименовать отдельно.
Типичная ситуация: в базе стоят два расширения от разных подрядчиков, и оба созданы с префиксом по умолчанию Расширение1_. Пока объекты не пересекаются, всё работает. Как только второй подрядчик добавит реквизит с тем же именем, одно из расширений перестанет применяться. Ниже — как изменить префикс аккуратно, чтобы не потерять данные и не сломать код.
Где задаётся префикс и на что он влияет
Префикс — свойство самого расширения. Платформа подставляет его в начало имени каждого нового собственного объекта и каждого обработчика, который вы создаёте в заимствованном модуле.
Что получает префикс:
- 📦 собственные объекты расширения — справочники, документы, регистры, обработки, роли, общие модули;
- 🧩 собственные реквизиты, табличные части, формы и команды, добавленные к заимствованным объектам;
- ⚙️ процедуры-перехватчики в модулях заимствованных объектов, например
Расш1_ПриСозданииНаСерверес аннотацией&После("ПриСозданииНаСервере"); - 🖱️ обработчики событий элементов собственных форм, которые создал Конфигуратор.
Что префикс не затрагивает:
- заимствованные объекты: их имена обязаны совпадать с именами в основной конфигурации;
- синонимы и представления, которые видит пользователь;
- данные в таблицах базы: физические таблицы называются служебными номерами, а не именами из дерева метаданных.
Последний пункт — главная причина, почему смена префикса в целом безопасна для данных. Переименование объекта в Конфигураторе сохраняет его внутренний идентификатор, и реструктуризация не пересоздаёт таблицу.
Префикс — соглашение об именах, а не механизм связывания. Перехватчик привязывается к методу основной конфигурации через аннотацию, а не через имя процедуры. Поэтому процедуру Расш1_ПередЗаписью можно назвать Пр_ПередЗаписью, и перехват продолжит работать.
Когда префикс расширения нужно изменить
Менять префикс ради красоты не стоит: работа ощутимая, а риск ошибок в коде реальный. Есть ситуации, где без этого не обойтись.
| Ситуация | Зачем менять |
|---|---|
| Два расширения с одинаковым префиксом | Исключить совпадение имён собственных объектов и реквизитов |
Префикс по умолчанию Расширение1_ | Длинные имена, по ним не понять, чьё это расширение |
| Расширение передают другому подрядчику | Привести имена к стандарту новой команды |
| Объединяете несколько расширений в одно | Свести объекты к единому префиксу |
| Расширение переименовали | Префикс по смыслу перестал совпадать с именем |
Хороший префикс короткий, 3–6 символов, заканчивается подчёркиванием и уникален для базы: Пр_, ОКУ_, Склад_. Латиница допустима, но в типовых конфигурациях имена кириллические, и смешение затрудняет чтение кода.
Если в базе несколько расширений, заведите простую таблицу соответствия: расширение, префикс, ответственный разработчик. Новому подрядчику выдавайте префикс из неё, а не позволяйте оставлять значение по умолчанию. Тогда переименование потом не понадобится вовсе, а при разборе ошибки по имени объекта сразу видно, чьё это расширение и к кому идти.
Анализ расширения перед заменой префикса
Перед заменой составьте инвентаризацию. Это 15–30 минут, но именно здесь вскрываются связи, о которых забывают.
Объекты метаданных
Откройте дерево расширения и отметьте всё, что начинается со старого префикса. Удобно включить отбор по изменённым и собственным объектам: кнопка отбора есть в командной панели дерева расширения.
Посчитайте отдельно:
- Собственные объекты верхнего уровня (справочники, регистры, общие модули, роли).
- Собственные реквизиты и табличные части внутри заимствованных объектов.
- Собственные формы и команды.
Код и ссылки по имени
Имя объекта используется в коде строкой и в запросах. После переименования эти места компилятор поймает не все.
- 🔍 обращения вида
Справочники.Расш1_Договоры,Метаданные.Документы.Расш1_Акт; - 🔍 тексты запросов:
ВЫБРАТЬ ... ИЗ Справочник.Расш1_Договоры; - 🔍 строковые имена:
ОбщегоНазначения.ОбщийМодуль("Расш1_Сервер"),ОткрытьФорму("Обработка.Расш1_Загрузка.Форма"); - 🔍 схемы компоновки данных в отчётах расширения — запросы и поля в них хранятся в макете, а не в модуле.
Связи вне расширения
Самое неочевидное — места, где имя объекта сохранено в данных пользовательского режима:
- профили групп доступа в конфигурациях на БСП, если туда включены роли расширения;
- сохранённые варианты отчётов и пользовательские настройки форм;
- регламентные задания расширения;
- обмены данных и внешние системы, которые обращаются к объектам по имени (HTTP-сервисы, COM, OData).
Сделайте резервную копию базы
до любых изменений структуры расширения: выгрузку .dt или бэкап СУБД, плюс сохраните текущее расширение в файл .cfe.
Способы изменить префикс расширения
Выбор зависит от числа объектов и от инструмента разработки.
| Способ | Когда подходит | Риски |
|---|---|---|
| Ручное переименование в Конфигураторе | До 20–30 объектов и процедур | Пропустить обращение в строке или в запросе |
| Выгрузка в файлы и массовая замена | Крупное расширение, сотни имён | Замена «зацепит» лишнее; нужно аккуратное выражение поиска |
| Рефакторинг в 1C:EDT | Проект уже ведётся в EDT | Строковые имена в коде EDT не переименует |
| Новое расширение с нуля | Никогда для расширений с данными | Новые объекты получат новые идентификаторы, данные старых пропадут |
Последняя строка в таблице не для использования, а как предупреждение. Перенос объектов копированием в новое расширение выглядит проще, но таблицы данных при этом создаются заново.
Пошаговая смена префикса в Конфигураторе
Порядок ниже рассчитан на файловую и клиент-серверную базу одинаково.
Шаг 1. Изменить свойство «Префикс имён»
- Откройте
Конфигурация → Расширения конфигурации. - Выделите расширение и откройте его конфигурацию.
- В дереве расширения правой кнопкой по корню →
Свойства. - В поле «Префикс имён» замените, например,
Расширение1_наПр_.
С этого момента новые объекты и обработчики получат новый префикс. Старые остаются как были.
Шаг 2. Переименовать собственные объекты
Переименовывайте объект в его свойствах, поле «Имя». Синоним менять не нужно, если он не содержит префикс.
Порядок, который снижает число ошибок:
- Общие модули — на них чаще всего ссылаются.
- Справочники, документы, регистры.
- Собственные реквизиты и табличные части в заимствованных объектах.
- Формы, команды, роли.
Шаг 3. Исправить код и запросы
Пройдите глобальным поиском по модулям расширения (меню Правка, глобальный поиск и замена) по строке старого префикса. Ищите с учётом регистра и включите поиск в макетах, чтобы найти схемы компоновки.
Пример обращения до и после:
// было
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Расш1_Договоры ГДЕ Активен";
Модуль = ОбщегоНазначения.ОбщийМодуль("Расш1_Сервер");
// стало
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Пр_Договоры ГДЕ Активен";
Модуль = ОбщегоНазначения.ОбщийМодуль("Пр_Сервер");
Шаг 4. Переименовать перехватчики и обработчики форм
Процедуры с аннотациями &Перед, &После, &Вместо, &ИзменениеИКонтроль можно переименовать прямо в модуле. Привязка идёт по имени метода в аннотации.
С обработчиками элементов собственных форм иначе. Имя процедуры записано в свойстве события элемента. Если переименовали процедуру Расш1_ЗагрузитьНажатие, откройте элемент формы и исправьте имя в его событии. Иначе при нажатии появится ошибка о том, что обработчик не найден.
Шаг 5. Проверить и применить
- Выполните синтаксический контроль модулей расширения.
- Запустите
Конфигурация → Проверка конфигурациидля расширения. - Обновите конфигурацию базы данных (F7) и примите реструктуризацию.
- Сохраните расширение в новый файл
.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 расширения. Поиск по старому значению найдёт и его.
Проверка целостности данных после смены префикса
После обновления конфигурации базы данных проверьте данные в пользовательском режиме. Ориентир — сравнение с замерами, сделанными до замены.
Как быстро сверить количество записей: перед заменой выполните в консоли запросов ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Расш1_Договоры, запишите число. После — тот же запрос с новым именем. Расхождение означает, что объект был пересоздан, а не переименован. В этом случае восстанавливайте базу из копии.
Для собственных реквизитов в заимствованных документах откройте 3–5 документов разных периодов и сравните значения с выгрузкой, сделанной заранее.
Ошибки при смене префикса и как их исправить
Меняйте префикс сначала в копии базы. Прогоните чек-лист выше, и только потом переносите .cfe в рабочую базу.
Частые вопросы
Можно ли изменить префикс расширения в пользовательском режиме?
.cfe. Сам префикс и имена объектов меняются в Конфигураторе или в 1C:EDT.