feat(cfe-borrow): общая форма заимствуется вместе с содержимым

-Object CommonForm.X заимствовал только описание-оболочку, без тела формы и
модуля, — через расширение общую форму было не доработать. Теперь, как у
Конфигуратора: описание CommonForms/X.xml с корнем <CommonForm> (те же свойства,
что у формы объекта), тело CommonForms/X/Ext/Form.xml по тем же правилам (скелет,
BaseForm, связи, оформление, картинки), модуль, регистрация в Configuration.xml.
Повторное заимствование сохраняет uuid описания и модуль.

С -BorrowMainAttribute владельца у общей формы нет — он выводится из типа
основного реквизита: <Вид>Object.Имя → объект; DynamicList → объект из
<MainTable>; ConstantsSet → константы, на которые есть пути в форме (с типом как
есть, их ссылочные типы — оболочками); примитив или тип без имени → только сам
реквизит. Связь на константу набора не кодируется (код не измерен): без
основного реквизита вырезается с предупреждением.

Попутно (проявилось на общей форме, давний пробел форм списка): набор команд
таблицы самого основного реквизита при его заимствовании остаётся — Конфигуратор
его сохраняет (ФайлыВТоме, ЖурналСкладскихАктов); прочие вложенные — как раньше.

Эталоны Конфигуратора УТ: общая форма без основного реквизита (link) и пять с ним
(CommonMain: обработка, динамический список, набор констант, строка, отчёт без
имени) совпадают построчно в обоих портах; константы — как у Конфигуратора;
прежние 9 форм не сдвинулись. Оболочку таблицы из текста запроса
(Справочник.Пользователи) не заимствуем — платформа грузит и без неё, это
отдельный механизм. Оба порта, v1.43. Кейсы common-form, common-form-main.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-09-27 20:35:56 +03:00
co-authored by Claude Opus 5.5
parent 9e155552fb
commit fdd3bfa42e
73 changed files with 3406 additions and 101 deletions
+4
View File
@@ -394,6 +394,8 @@ Enums/ # Перечисления
Содержимое формы хранится в `Forms/ФормаСписка/Ext/Form.xml`, модуль формы — в `Forms/ФормаСписка/Ext/Form/Module.bsl`.
**Общая форма** заимствуется так же, только она сама объект конфигурации: описание — `CommonForms/<Имя>.xml` с корнем `<CommonForm>` (те же свойства), тело — `CommonForms/<Имя>/Ext/Form.xml` (те же правила §5.5.2), модуль — `CommonForms/<Имя>/Ext/Form/Module.bsl`; регистрируется в `ChildObjects` конфигурации, а не владельца (эталон Конфигуратора УТ 8.3.27). Владельца у неё нет — при заимствовании основного реквизита он выводится из типа реквизита: `<Вид>Object.Имя` → этот объект; `DynamicList` → объект из `<MainTable>`; `ConstantsSet` → константы, на которые есть пути в форме (заимствуются с типом как есть, их ссылочные типы — оболочками); примитив или тип без имени (`ReportObject` — любой отчёт) → только сам реквизит формы (эталон УТ CommonMain, 5 форм).
#### 5.5.2. Структура Form.xml заимствованной формы
Form.xml заимствованной формы — **двухчастный файл**: Part 1 (результирующая форма) и BaseForm (исходная форма). Существуют **два варианта** в зависимости от наличия модификаций модуля формы.
@@ -455,6 +457,8 @@ Form.xml заимствованной формы — **двухчастный ф
2. **AutoCommandBar** — присутствует всегда с `id="-1"`, но без `<ChildItems>` (кнопки удаляются). `<Autofill>` = `false`.
**Вложенные `<CommandSet>`** (у элементов в `ChildItems` и в командной панели) удаляются целиком; корневой набор команд формы остаётся свойством формы. Исключение — набор таблицы, чей `DataPath` — сам основной реквизит, когда он заимствован: команды динамического списка снова разрешимы, и Конфигуратор набор оставляет в обеих секциях (эталоны УТ 8.3.27: общая форма `ФайлыВТоме`, форма списка обработки `ЖурналСкладскихАктов`).
3. **Attributes** — по умолчанию пустой `<Attributes/>` в обеих секциях. Атрибуты базовой конфигурации **не включаются**. Реквизиты расширения (id ≥ 1000000) добавляются только в Part 1.
**Условное оформление формы** (`<ConditionalAppearance>` внутри `<Attributes>`) копируется из исходной формы как есть в обе секции, после реквизитов; без основного реквизита — единственным ребёнком `<Attributes>`. Ссылки оформления на незаимствованные реквизиты формы остаются — платформа их принимает. Элементы стиля, на которые ссылается оформление (`<dcscor:value>style:X</dcscor:value>`), заимствуются, даже если больше нигде в форме не упомянуты (эталоны Конфигуратора УТ 8.3.27 и УНФ 8.5).