feat(mxl-compile,mxl-decompile): формат самой строки

У строки есть собственный формат: платформа хранит в нём скрытие (17 423 вхождения
в корпусе), шрифт (9 216), фон, выравнивания, защиту. Мы писали туда только высоту,
всё остальное теряли.

Разбор на контролируемом стенде показал, что это два разных случая, а не один.
Оформление, применённое к строке целиком, платформа пишет И строке, И каждой
ячейке (backColor: 13 899 ячеек повторяют против 96). Скрытие — только строке
(24 026 против 62 856). Поэтому одного правила «rowStyle красит ячейки» мало.

Теперь rowStyle — стиль строки: по умолчанию ложится и на строку, и на ячейки,
как это делает платформа. Объектная форма { style, apply } задаёт исключения:
"row" — только строке, "cells" — только ячейкам. Модификатор нужен раундтрипу,
в описании DSL его нет.

Скрытие и высота — собственные свойства строки, ключами рядом: у ячейки таких
свойств не бывает, и в её оформление они не попадают.

На пилоте категория row[].formatIndex упала с 1964 до 201 потерянного факта.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-11 18:36:41 +03:00
co-authored by Claude Opus 5
parent ccbd488d63
commit ba25aa4a00
25 changed files with 611 additions and 167 deletions
@@ -139,9 +139,10 @@
<rowsItem>
<index>4</index>
<row>
<formatIndex>6</formatIndex>
<c>
<c>
<f>7</f>
<f>8</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -152,7 +153,7 @@
</c>
<c>
<c>
<f>7</f>
<f>8</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -164,7 +165,7 @@
<c>
<i>6</i>
<c>
<f>7</f>
<f>8</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -175,7 +176,7 @@
</c>
<c>
<c>
<f>7</f>
<f>8</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -186,7 +187,7 @@
</c>
<c>
<c>
<f>7</f>
<f>8</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -197,7 +198,7 @@
</c>
<c>
<c>
<f>7</f>
<f>8</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -211,15 +212,16 @@
<rowsItem>
<index>5</index>
<row>
<formatIndex>6</formatIndex>
<c>
<c>
<f>8</f>
<f>9</f>
<parameter>НомерСтроки</parameter>
</c>
</c>
<c>
<c>
<f>9</f>
<f>10</f>
<parameter>Товар</parameter>
<detailParameter>Номенклатура</detailParameter>
</c>
@@ -227,25 +229,25 @@
<c>
<i>6</i>
<c>
<f>8</f>
<f>9</f>
<parameter>ЕдИзм</parameter>
</c>
</c>
<c>
<c>
<f>10</f>
<f>11</f>
<parameter>Количество</parameter>
</c>
</c>
<c>
<c>
<f>10</f>
<f>11</f>
<parameter>Цена</parameter>
</c>
</c>
<c>
<c>
<f>10</f>
<f>11</f>
<parameter>Сумма</parameter>
</c>
</c>
@@ -257,7 +259,7 @@
<c>
<i>7</i>
<c>
<f>11</f>
<f>12</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -269,7 +271,7 @@
<c>
<i>9</i>
<c>
<f>12</f>
<f>13</f>
<parameter>ИтогоСумма</parameter>
</c>
</c>
@@ -281,7 +283,7 @@
<c>
<i>7</i>
<c>
<f>11</f>
<f>12</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -293,7 +295,7 @@
<c>
<i>9</i>
<c>
<f>12</f>
<f>13</f>
<parameter>ИтогоНДС</parameter>
</c>
</c>
@@ -323,7 +325,7 @@
<c>
<i>3</i>
<c>
<f>13</f>
<f>14</f>
<parameter>Отпустил</parameter>
</c>
</c>
@@ -335,7 +337,7 @@
<c>
<i>3</i>
<c>
<f>14</f>
<f>15</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -369,7 +371,7 @@
<c>
<i>3</i>
<c>
<f>13</f>
<f>14</f>
<parameter>Получил</parameter>
</c>
</c>
@@ -381,7 +383,7 @@
<c>
<i>3</i>
<c>
<f>14</f>
<f>15</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -546,6 +548,9 @@
<font>0</font>
<fillType>Parameter</fillType>
</format>
<format>
<border>0</border>
</format>
<format>
<font>0</font>
<border>0</border>