Во всех командах ниже {python} означает python в Windows и python3 в macOS/Linux/WSL. Выбирай команду сразу по текущей ОС, не запускай оба варианта.
Назначение
Переименовывает объект и обновляет все ссылки на него в проекте. Сначала показывает план изменений, затем применяет с подтверждением.
Алгоритм
Шаг 0 — Найди объекты и уточни у пользователя
Шаг 0.1 — Найди все объекты с таким именем
Запусти dry-run без --object-file и проверь stderr на код выхода 2 (несколько объектов):
{python} skills/xbsl-rename/scripts/rename.py \
--old-name <СтароеИмя> --new-name <НовоеИмя> --root <корень-проекта> 2>&1; echo "EXIT:$?"
- Код выхода 0 или 1 — объект один или не найден, продолжай.
- Код выхода 2 — найдено несколько объектов. Покажи пользователю список из stderr и спроси какой переименовать. После выбора передавай
--object-file <путь>во все последующие вызовы. Скрипт ограничит изменения owning project выбранного файла. Если одинаковые имена остаются внутри одного project/namespace-графа и точные ссылки неоднозначны, операция завершится fail-closed без записи.
Шаг 0.2 — Определи представления автоматически
Не спрашивай пользователя о представлениях. Определяй самостоятельно:
- Новое представление (
--new-presentation): - Если пользователь явно написал представление в запросе — используй его.
- Иначе — выведи форму единственного числа из нового технического имени (
--new-name) самостоятельно, используя знание русской морфологии. -
Примеры:
Склады→Склад,Контрагенты→Контрагент,МестаХранения→Место хранения. -
Старое представление (
--old-presentation): - Аналогично выведи форму единственного числа из старого технического имени (
--old-name). - Примеры:
МестаХранения→Место хранения,ЗаказыКлиентов→Заказ клиента.
Почему единственное число: технические имена объектов используются во множественном числе (
Склады,Контрагенты), а полеПредставление/Заголовокотображается для одного объекта в UI — поэтому единственное число.
Шаг 1 — Dry-run (показать план)
{python} skills/xbsl-rename/scripts/rename.py \
--old-name <СтароеИмя> --new-name <НовоеИмя> \
--new-presentation "<НовоеПредставление>" \
[--old-presentation "<СтароеПредставление>"] \
[--object-file <путь-к-файлу-объекта>] \
--root <корень-проекта>
Скрипт выводит:
- список точных файлов для переименования: объект, .xbsl, .Объект.xbsl, одноимённый .xbql отчёта и явно указанные владельцем conventional-формы .yaml/.xbsl
- список файлов с текстовыми заменами (с указанием изменённых строк)
До вывода и применения скрипт проверяет коллизии логических имён и всех путей назначения. При коллизии он завершается до первой записи.
Шаг 2 — Показать план пользователю и ОСТАНОВИТЬСЯ
Отобрази вывод dry-run пользователю и завершить свой ответ. Не выполнять --apply в этом же ходу.
Задай вопрос с тремя вариантами ответа:
Применить переименование? 1. Да 2. Показать список изменяемых файлов 3. Нет
Обработка ответов: - «1» / «да» / «применяй» / «yes» → перейти к Шагу 3 - «2» / «список» / «покажи файлы» → вывести только список файлов (без строк изменений) и снова задать вопрос с тремя вариантами - «3» / «нет» / «отмена» → отменить, ничего не применять - Если пользователь попросил изменить параметры — скорректировать план и вернуться к Шагу 1
Шаг 3 — Применить (только после подтверждения пользователя)
{python} skills/xbsl-rename/scripts/rename.py \
--old-name <СтароеИмя> --new-name <НовоеИмя> \
--new-presentation "<НовоеПредставление>" \
[--old-presentation "<СтароеПредставление>"] \
[--object-file <путь-к-файлу-объекта>] \
--root <корень-проекта> --apply
Что заменяется
| Паттерн | Пример |
|---|---|
| Тип реквизита | Номенклатура.Ссылка? → Товары.Ссылка? |
| Тип в форме | ФормаОбъекта<Номенклатура.Объект> → ФормаОбъекта<Товары.Объект> |
| Ссылка на форму в интерфейсе | Форма: НоменклатураФормаОбъекта → Форма: ТоварыФормаОбъекта |
| Имя объекта | Имя: Номенклатура → Имя: Товары |
| Составное имя формы | НоменклатураФормаОбъекта → ТоварыФормаОбъекта (в тексте и именах файлов) |
| XBSL-код | Номенклатура.Найти(...) → Товары.Найти(...) вне строк и комментариев |
| Запрос/XBQL | Источник после ИЗ/СОЕДИНЕНИЕ; virtual-table name и явный alias сохраняются |
| XBQL отчёта | Только для ВидЭлемента: Отчет: АнализПродаж.xbql → Продажи.xbql |
Составные имена не определяются по общему префиксу. Скрипт переименовывает только формы, которые одновременно указаны в полях Форма: выбранного owner YAML и совпадают с одним из точных шаблонов: СтароеИмяФорма, СтароеИмяФормаОбъекта, СтароеИмяФормаСписка, СтароеИмяФормаОтчета, СтароеИмяФормаОбработки. Например, независимый объект КатегорииТоваров при переименовании Категории остаётся неизменным.
Текстовые замены контекстны: YAML обрабатывается только в reference-полях (Имя выбранного owner/companion, Тип, Форма, ТипФормы, Таблица и выражения команд), XBSL — вне строк/комментариев, а query source — отдельно от virtual-table и aliases. Одноимённые enum-значения, локальные aliases, строковые литералы и ключи локализации не считаются ссылками автоматически.
Импорт: в YAML и инструкция импорт в XBSL задают namespaces подсистем/пакетов, а не ссылки на прикладной объект. При переименовании справочника, документа, отчёта, регистра или формы эти строки не изменяются.
Аргументы скрипта
| Аргумент | Описание |
|---|---|
--old-name |
Текущее имя объекта (обязательно) |
--new-name |
Новое техническое имя объекта (обязательно) |
--new-presentation |
Человекочитаемое представление для полей Представление/Заголовок (напр. "Места хранения"). Если не задано — используется --new-name |
--old-presentation |
Старое представление объекта (напр. "Место хранения" для МестаХранения). Нужно когда техническое имя и его представление расходятся — скрипт заменит точное совпадение этой строки в полях Заголовок/Представление |
--object-file |
Путь к файлу переименуемого объекта (относительно --root). Обязателен если в проекте несколько объектов с именем --old-name. Только для этого объекта и его форм меняются поля Заголовок/Представление |
--root |
Корень проекта (по умолчанию .) |
--apply |
Применить изменения (без флага — dry-run) |
Ошибки
- Объект не найден: скрипт выводит ошибку и завершается с кодом 1
- Коллизия нового
Имяили любого companion-пути: код 1, файлы не записываются - Любой нечитаемый YAML/XBSL/XBQL-файл owning project: код 1, план строится fail-closed и файлы не записываются
- Неоднозначный одноимённый source companion вне выбранной owner-family: код 1, файлы не записываются
- Несколько объектов с одним именем внутри выбранного project: код 2, файлы не записываются
- Несколько проектов под
--root: после выбора объекта изменяется только его owning project