fix(cfe-borrow): многострочный текст в BaseForm копируется без сдвига

BaseForm собирался построчным сдвигом: таб дописывался к каждой строке,
в том числе к строкам продолжения многострочного текста (<v8:content>,
текст запроса динамического списка). Снимок получал «Адрес передачи↵⇥товара»
при «Адрес передачи↵товара» в форме — форма расходилась со своей BaseForm,
и Конфигуратор показывал такие значения изменёнными в расширении.

Теперь таб добавляется только в межтеговые пробельные промежутки; пробельное
значение элемента (<a>↵</a>) не трогается. Сдвиг один для всех четырёх блоков
BaseForm — заодно многострочные свойства формы (CommandSet, Title) получают
отступ как у Конфигуратора, раньше сдвигалась только первая строка. Оба порта, v1.40.

Сверка с Конфигуратором (УНФ 8.5, Номенклатура.ФормаЭлемента): до правки все
41 многострочный текст BaseForm расходились с эталоном, после — совпадают;
всё до <Attributes> совпадает с эталоном байт в байт. Эталоны кейсов:
13 — только межтеговые отступы, form-main-attr-list-query — текст запроса
в BaseForm больше без лишних табов. Новый кейс form-multiline-text.

Проблема, замеры и первое решение — PR #105.

Co-Authored-By: Sergei Pleshanov <2357qwr@gmail.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-09-27 14:33:59 +03:00
co-authored by Sergei Pleshanov Claude Opus 5.5
parent 97e92e084b
commit 8677770eea
33 changed files with 866 additions and 140 deletions
+1 -1
View File
@@ -469,7 +469,7 @@ Form.xml заимствованной формы — **двухчастный ф
```
Присутствует в обеих секциях (Part 1 и BaseForm). Тип зависит от родительского объекта: `CatalogObject`, `DocumentObject` и т.д.
4. **BaseForm** — последний элемент в `<Form>`, атрибут `version`. В BaseForm **нет** Events, Commands, Parameters.
4. **BaseForm** — последний элемент в `<Form>`, атрибут `version`. В BaseForm **нет** Events, Commands, Parameters. Содержимое на уровень глубже, но сдвигаются только межтеговые отступы: многострочный текст (`<v8:content>`, текст запроса) копируется как есть, строки продолжения без добавочного таба. Иначе значение в снимке расходится с формой, и Конфигуратор показывает его изменённым в расширении (эталон Конфигуратора: 41 многострочный текст, в форме и BaseForm байт в байт).
5. **DataPath** — два варианта в зависимости от наличия заимствованного основного реквизита:
- **Без основного реквизита**: все `<DataPath>` удаляются в обеих секциях (ссылаются на реквизиты, не включённые в расширение).