docs(mxl): актуализировать спецификации после серии находок на стенде

Спецификация XML — дописано то, что вскрыли контролируемые макеты и замеры
по корпусу:

- шрифт-ссылка на СИСТЕМНЫЙ шрифт: префикс sys в корне не объявлен, поэтому
  объявление xmlns дописывается прямо на узел. Плюс правило вывода kind
  из префикса и то, что неиспользуемый шрифт в палитру не попадает;
- новый раздел «Устройство палитр»: порядок документный и НЕ зависит от
  последовательности действий автора (проверено опытом с оформлением снизу
  вверх), формат по умолчанию последний, палитра дедуплицирована по содержимому;
- у текста ячейки ТРИ состояния: тега нет, тег с элементами, пустой <tl/>.
  Третье — 57% макетов корпуса;
- языковые настройки: набор языков не выводится из языков текста, description
  бывает самозакрывающимся, currentLanguage бывает отсутствующим и бывает
  указывающим на необъявленный язык.

Спецификация DSL — из ограничений убрано объявление языков макета: оно больше
не теряется. Добавлено пояснение, почему побайтовое совпадение достижимо не на
любом макете: в долго правленных макетах остаются следы прежних состояний,
которые из итогового документа не выводятся.

В инструкции навыка отражена только форма шрифта-ссылки — остальное из этой
серии либо уже там, либо для авторинга не нужно.

Примеры из справочника скомпилированы и проверены валидатором.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-12 12:53:10 +03:00
co-authored by Claude Opus 5
parent 98bcf79b41
commit 241a56a29f
4 changed files with 64 additions and 8 deletions
+1 -1
View File
@@ -55,7 +55,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/mxl-compile.ps1" -J
```
{ columns, page, defaultWidth, columnWidths, columnStyles,
fonts: { name: { face, size, bold, italic, underline, strikeout } },
fonts: { name: { face, size, bold, italic, underline, strikeout } | { ref } },
styles: { name: { font, horizontalAlignment, verticalAlignment, textPlacement,
backColor, textColor, border, borderColor, format, hidden } },
areas: [{ name, columnSet, rows: [{ height, hidden, rowStyle, cells: [
@@ -230,9 +230,12 @@ XML не возвращается.
- объединения, не привязанные к ячейке (по всей высоте или ширине документа);
- рисунки и картинки, в том числе штрихкоды, и примечания к ячейкам;
- группировки строк и колонок;
- колонтитулы, параметры печати, область печати;
- объявление языков макета: список языков и текущий язык всегда описываются как русский —
сами надписи при этом сохраняются на всех языках.
- колонтитулы, параметры печати, область печати.
Пересборка макета из DSL — это полная перегенерация, а не точечная правка XML, поэтому
diff после round-trip обычно шире фактической доработки.
Отдельно про побайтовое совпадение. В макетах, которые долго правили в Конфигураторе,
встречаются следы прежних состояний: формат ячейки может нести ширину колонки, которая с тех
пор изменилась. Такие значения не описывают итоговый документ и из него не выводятся, поэтому
собранный XML совпадёт с исходным не всегда — при полностью сохранённом содержании.
+51 -1
View File
@@ -63,6 +63,18 @@
</languageSettings>
```
Языков бывает несколько, и объявленный набор НЕ выводится из того, на каких языках лежит
текст ячеек: на корпусе ERP объявлен один `ru` у 10 753 макетов, при том что текст в них
лежит и под `ru`, и под `en`. Наборы: `[ru]` — 10 753, `[ru,en]` — 148, `[en,ru]` — 20.
`id` и `code` всегда со значением; `description` бывает пустым и тогда пишется
самозакрывающимся тегом `<description/>` (77 записей из 11 094). Из `id` эти поля не
выводятся: у `en` описание бывает «Английский», пустым и «English».
`currentLanguage` иногда отсутствует вовсе (3 макета), иногда указывает на необъявленный
язык (8 макетов с `en` при объявленном одном `ru`). `defaultLanguage` во всех четырёх
русских типовых равен `ru`, но это свойство конфигурации, а не формата.
## Колонки
### Основной набор
@@ -169,6 +181,16 @@
На корпусе ERP из 1 212 023 записанных номеров ни один не избыточен (счётчик начинается с −1,
поэтому у ячейки в колонке 0 номера тоже нет).
У текста ячейки ТРИ состояния, а не два:
| запись | смысл |
|---|---|
| `<tl>` отсутствует | текста нет |
| `<tl>` с элементами | текст по элементу на язык (содержимое бывает пустым) |
| `<tl/>` | тег есть, языков в нём нет |
Третье — не редкость: 38 075 ячеек на 1200 макетов, встречается в 57% макетов корпуса.
`<f>0</f>` означает, что формата у ячейки **нет вовсе** — это не индекс записи. Так записана
ячейка без собственного оформления: 170 710 таких ячеек против 50 635, ссылающихся на формат
по умолчанию; `<f>0</f>` встречается в 71% макетов.
@@ -365,10 +387,38 @@
<font faceName="Arial" height="14" bold="true" italic="false"
underline="false" strikeout="false" kind="Absolute" scale="100"/>
<!-- Ссылка на стиль -->
<!-- Ссылка на элемент стиля конфигурации -->
<font ref="style:TextFont" kind="StyleItem"/>
<!-- Ссылка на системный шрифт: префикс sys в корне НЕ объявлен, поэтому объявление
дописывается прямо на узел — тот же приём, что у цветов из web-палитры -->
<font xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system"
ref="sys:ANSIVariableFont" kind="WindowsFont"/>
```
`kind` выводится из префикса ссылки: `style:``StyleItem`, `sys:``WindowsFont`.
На корпусе ERP таких шрифтов 272 в 213 макетах из 10 924 (StyleItem 209, WindowsFont 63).
Шрифт, на который не ссылается ни один формат, в палитру не попадает: у макета без
оформления элемента `<font>` нет вовсе.
## Устройство палитр
Три правила, общие для всех палитр. Все проверены на корпусе ERP (10 924 макета) и на
макетах, собранных вручную в Конфигураторе.
**Порядок — документный.** Записи идут в том порядке, в каком встречаются при обходе
документа сверху вниз: сначала форматы колонок (в порядке колонок), затем форматы строк и
ячеек. Порядок НЕ зависит от того, в какой последовательности автор оформлял макет:
контрольный опыт с оформлением снизу вверх дал палитру в порядке строк.
**Формат по умолчанию — последняя запись.** На корпусе он последний в 8285 макетах из 10 863,
первым — в 25.
**Палитра форматов дедуплицирована по содержимому:** двух одинаковых записей в ней нет
(10 804 макета из 10 924). Остальные 120 — накопленный мусор редактирования, там доходит до
583 записей при 130 уникальных.
## Форматы
Палитра форматов — центральный элемент. **Индексация 1-based** (индекс 0 = формат не задан).
+6 -3
View File
@@ -230,9 +230,12 @@ XML не возвращается.
- объединения, не привязанные к ячейке (по всей высоте или ширине документа);
- рисунки и картинки, в том числе штрихкоды, и примечания к ячейкам;
- группировки строк и колонок;
- колонтитулы, параметры печати, область печати;
- объявление языков макета: список языков и текущий язык всегда описываются как русский —
сами надписи при этом сохраняются на всех языках.
- колонтитулы, параметры печати, область печати.
Пересборка макета из DSL — это полная перегенерация, а не точечная правка XML, поэтому
diff после round-trip обычно шире фактической доработки.
Отдельно про побайтовое совпадение. В макетах, которые долго правили в Конфигураторе,
встречаются следы прежних состояний: формат ячейки может нести ширину колонки, которая с тех
пор изменилась. Такие значения не описывают итоговый документ и из него не выводятся, поэтому
собранный XML совпадёт с исходным не всегда — при полностью сохранённом содержании.