fix(cfe-borrow): секции формы отбираются по имени, а не по позиции

Свойства уровня формы собирались до первой «визуальной» секции. В этот
список входил CommandSet, который в реальных формах стоит В СЕРЕДИНЕ блока
свойств: у всех 794 форм документов ERP с CommandSet он предшествует
AutoCommandBar, а AutoTime/UsePostingMode/RepostOnWrite идут после него.
Отсечка теряла весь хвост — в одном ERP это 2062 формы.

Отказа загрузки это не давало: платформа принимает форму и молча подставляет
дефолты. На Document.ЧекККМ.ФормаДокумента (УТ) AutoTime DontUse становился
CurrentOrLast, UsePostingMode Regular — Auto; исключённые стандартные команды
(Провести, Записать, Отменить проведение) возвращались в панель.

Граница теперь — AutoCommandBar: он есть в 100% из 30223 форм корпуса, и ни
одно свойство никогда не стоит после него. Отбрасываются явным списком
Events/Attributes/Commands/Parameters/CommandInterface и свойства, значение
которых — имя реквизита формы (ReportResult, DetailsData, VariantAppearance,
GroupList): реквизиты не заимствуются, ссылка повисла бы.

Заодно разобран конфаунд коммита 7abe26af, менявшего три вещи разом с одной
атрибуцией ошибки. По эталонам Конфигуратора («Добавить в расширение»):
- корневой CommandSet переносится дословно — вырезание было ошибкой;
- вложенный CommandSet выбрасывается ЦЕЛИКОМ, а не опустошается до пустого
  контейнера, как делалось;
- RowPictureDataPath — путь к данным, а не индекс картинки: сохраняется при
  заимствовании основного реквизита (Объект.Товары.РасхождениеЗаказ) и
  вырезается без него (Список.DefaultPicture). Переехал в formBindingDataTags.

Спецификация форм утверждала, что свойства идут до CommandSet/AutoCommandBar —
именно это заблуждение и было закодировано. Заменено фактическим порядком
секций, выведенным из корпуса (0 нарушений на 30223 формах). Там же поправлены
значения перечислений AutoTime/UsePostingMode/ReportFormType, которых в корпусе
нет ни одного.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-14 13:10:53 +03:00
co-authored by Claude Opus 5
parent 78fc3ba71a
commit 0737a79522
4 changed files with 108 additions and 41 deletions
+35 -6
View File
@@ -212,22 +212,51 @@ CommonForms регистрируются в `Configuration.xml`:
```
<Form>
┌─ Свойства формы (необязательные, в произвольном порядке)
┌─ Свойства формы (необязательные) — часть до <CommandSet>, часть после
├─ <CommandSet> — исключённые стандартные команды
├─ …продолжение свойств формы (AutoTime, UsePostingMode, RepostOnWrite, ReportResult…)
├─ <AutoCommandBar> — главная командная панель (обязательный, id="-1")
├─ <Events> — обработчики событий формы
├─ <ChildItems> — дерево UI-элементов
├─ <Attributes> — реквизиты формы
├─ <Commands> — пользовательские команды
├─ <Parameters> — параметры открытия формы
└─ <Commands> — пользовательские команды
└─ <CommandInterface> — командный интерфейс формы
</Form>
```
Порядок **строгий**, а не произвольный: на 30223 формах корпуса (ERP, УТ, УНФ 8.5, БП, общие
формы) не встретилось ни одной пары элементов, идущей в разном порядке в разных формах.
Важно: `<CommandSet>` стоит **в середине блока свойств**, а не перед ним — свойства есть и до, и
после него. У всех 794 форм документов ERP с `CommandSet` он предшествует `AutoCommandBar`, а
`AutoTime`/`UsePostingMode`/`RepostOnWrite` идут **после** `CommandSet`.
Надёжная граница между свойствами и структурными секциями — **`<AutoCommandBar>`**: он присутствует
в 100% форм корпуса, и ни одно свойство никогда не стоит после него. Код, отделяющий свойства от
структуры, должен опираться на него, а не на «первую встреченную секцию».
Полный наблюдаемый порядок:
```
Title · Width · Height · WindowOpeningMode · EnterKeyBehavior · AutoSaveDataInSettings ·
SaveDataInSettings · SaveWindowSettings · SettingsStorage · AutoTitle · AutoURL · Group ·
ChildItemsWidth · ChildrenAlign · HorizontalSpacing · Scale · VerticalSpacing · HorizontalAlign ·
VerticalAlign · AutoFillCheck · Customizable · Enabled · CommandBarLocation · VerticalScroll ·
ScalingMode · ConversationsRepresentation · MobileDeviceCommandBarContent · ScaleVariant ·
CommandSet · GroupList · ShowTitle · CreateButtonsGroupPicture · CreateButtonsGroupTitle ·
ShowCloseButton · CollapseItemsByImportanceVariant · WindowViewMode · ShowCommandBar · AutoTime ·
ReportResult · DetailsData · ReportFormType · UseForFoldersAndItems · UsePostingMode ·
RepostOnWrite · VariantAppearance · AutoShowState · CustomSettingsFolder · ReportResultViewMode ·
ViewModeApplicationOnSetReportResult · AutoCommandBar · Events · ChildItems · Attributes ·
Commands · Parameters · CommandInterface
```
---
## 3. Свойства формы
Прямые дочерние элементы `<Form>` (все необязательные, указываются до `<CommandSet>`/`<AutoCommandBar>`):
Прямые дочерние элементы `<Form>` все необязательные, порядок между ними фиксирован (см. §2):
### Общие свойства (все типы форм)
@@ -258,8 +287,8 @@ CommonForms регистрируются в `Configuration.xml`:
| Элемент | Значения | Описание |
|---------|----------|----------|
| `<AutoTime>` | `CurrentOrLast`, `Current`, `Last` | Управление временем документа |
| `<UsePostingMode>` | `Auto`, `Postings`, `Movements` | Режим проведения |
| `<AutoTime>` | `CurrentOrLast`, `DontUse`, `Current`, `Last` | Управление временем документа. В корпусе встречаются только `CurrentOrLast` и `DontUse` |
| `<UsePostingMode>` | `Auto`, `Regular` | Режим проведения |
| `<RepostOnWrite>` | `true`/`false` | Перепроведение при записи |
### Свойства справочников (Catalogs, ChartsOfAccounts)
@@ -274,7 +303,7 @@ CommonForms регистрируются в `Configuration.xml`:
|---------|----------|----------|
| `<ReportResult>` | string | Имя реквизита результата (`Результат`) |
| `<DetailsData>` | string | Имя реквизита расшифровки (`ДанныеРасшифровки`) |
| `<ReportFormType>` | `Main`, `Settings`, `Choice` | Тип формы отчёта |
| `<ReportFormType>` | `Main`, `Settings`, `Variant` | Тип формы отчёта |
| `<AutoShowState>` | `Auto`, `Show`, `Hide` | Автоотображение состояния |
| `<ReportResultViewMode>` | `Auto`, `Table`, `Spreadsheet` | Режим отображения результата |
| `<ViewModeApplicationOnSetReportResult>` | `Auto`, `Always`, `Never` | Применение режима |
+2 -2
View File
@@ -55,8 +55,8 @@
| `commandBarLocation` | `<CommandBarLocation>` | `Top`, `Bottom`, `None` |
| `saveDataInSettings` | `<SaveDataInSettings>` | `UseList`, `Use`, `DontUse` |
| `autoSaveDataInSettings` | `<AutoSaveDataInSettings>` | `Use`, `DontUse` |
| `autoTime` | `<AutoTime>` | `CurrentOrLast`, `Current`, `Last` |
| `usePostingMode` | `<UsePostingMode>` | `Auto`, `Postings`, `Movements` |
| `autoTime` | `<AutoTime>` | `CurrentOrLast`, `DontUse`, `Current`, `Last` |
| `usePostingMode` | `<UsePostingMode>` | `Auto`, `Regular` |
| `repostOnWrite` | `<RepostOnWrite>` | `true` / `false` |
| `autoURL` | `<AutoURL>` | `true` / `false` |
| `enabled` | `<Enabled>` | `true` / `false` — доступность всей формы (редкое; форма-уровень) |