From 572b75984a5cabcdef90777ccde0e2d1b8d143e1 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 10 Aug 2026 20:20:35 +0300 Subject: [PATCH] =?UTF-8?q?fix(mxl-compile):=20=D0=BD=D0=B5=D0=BE=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=BB=D0=B5=D0=BD=D0=BD=D0=B0=D1=8F=20=D1=8F?= =?UTF-8?q?=D1=87=D0=B5=D0=B9=D0=BA=D0=B0=20=D1=81=D1=81=D1=8B=D0=BB=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=D1=81=D1=8F=20=D0=BD=D0=B0=20=D1=84=D0=BE=D1=80?= =?UTF-8?q?=D0=BC=D0=B0=D1=82=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB?= =?UTF-8?q?=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Платформа держит для неоформленного макета ОДИН формат — ширину колонки, он же defaultFormatIndex, и все ячейки указывают на него. Компилятор заводил каждой ячейке собственный формат с 0, где ноль означает «шрифт не задан», то есть формат был пуст по смыслу и отличался от умолчания только своим существованием. Теперь ячейка, у которой не задано ничего (шрифт умолчательный, нет рамок, выравнивания, переноса, типа заполнения и формата числа), ссылается на defaultFormatIndex. На минимальном макете палитра сократилась с двух форматов до одного и совпала по форме с платформенной. На корпусе правка закрывает случай неоформленной ячейки начисто: на макете АтрибВыгрузкиXML2015Кв1 расхождения по формату исчезли полностью, блок диффа сократился с 75 строк до 40, и всё оставшееся — многоязычный текст. В агрегате по пилоту это 497 строк из 64 865: остальное держат макеты, где ячейки реально оформлены, и там расходится состав самих форматов — отдельная категория. Дрейф 18 снэпшотов разобран построчно, посторонних строк нет: 170 сменившихся индексов , 36 границ (палитра стала короче), 18 удалённых . Проверено: тесты 53/53 на обоих рантаймах, verify-snapshots 23/23. Co-Authored-By: Claude Opus 5 (1M context) --- .../mxl-compile/scripts/mxl-compile.ps1 | 12 +++++++++- .../skills/mxl-compile/scripts/mxl-compile.py | 12 +++++++++- .../snapshots/column-sets/Template.xml | 15 +++++------- .../Демо/Templates/Макет/Ext/Template.xml | 5 +--- .../lenient-implicit-cols/Template.xml | 23 ++++++++----------- .../snapshots/lenient-key-case/Template.xml | 9 +++----- .../snapshots/minimal/Template.xml | 5 +--- .../snapshots/named-areas-coords/Template.xml | 19 +++++++-------- .../Templates/Макет/Ext/Template.xml | 5 +--- .../snapshots/shorthand-merges/Template.xml | 21 ++++++++--------- .../snapshots/shorthand-rows/Template.xml | 17 ++++++-------- .../snapshots/simple-template/Template.xml | 9 +++----- .../snapshots/unnamed-blocks/Template.xml | 17 ++++++-------- .../output-absolute-path/Template.xml | 7 ++---- .../roundtrip-templates/Template.xml | 7 ++---- .../snapshots/roundtrip/Template.xml | 9 +++----- .../snapshots/areas-and-params/Template.xml | 19 +++++++-------- .../snapshots/template-overview/Template.xml | 9 +++----- .../mxl-info/snapshots/with-text/Template.xml | 19 +++++++-------- .../snapshots/valid-template/Template.xml | 9 +++----- 20 files changed, 107 insertions(+), 141 deletions(-) diff --git a/.claude/skills/mxl-compile/scripts/mxl-compile.ps1 b/.claude/skills/mxl-compile/scripts/mxl-compile.ps1 index 9670f66b..98825528 100644 --- a/.claude/skills/mxl-compile/scripts/mxl-compile.ps1 +++ b/.claude/skills/mxl-compile/scripts/mxl-compile.ps1 @@ -1,4 +1,4 @@ -# mxl-compile v1.22 — Compile 1C spreadsheet from JSON (+write_xml_file/write_utf8_bom: общий эталон записи) +# mxl-compile v1.23 — Compile 1C spreadsheet from JSON (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -573,6 +573,16 @@ function Get-FillType { function Register-CellFormat { param($styleName, [string]$fillType) $resolved = Resolve-Style -styleName $styleName -fillType $fillType + # Ячейка без собственного оформления ссылается на формат ПО УМОЛЧАНИЮ — так делает + # платформа: в её палитре у неоформленного макета один формат (ширина колонки), и все + # ячейки указывают на него. Мы же заводили каждой свой формат с 0, где ноль + # означает «шрифт не задан», то есть формат был пуст по смыслу. + if ($resolved.FontIdx -eq $fontMap["default"] -and + $resolved.LB -lt 0 -and $resolved.TB -lt 0 -and $resolved.RB -lt 0 -and $resolved.BB -lt 0 -and + -not $resolved.HA -and -not $resolved.VA -and -not $resolved.Wrap -and + -not $resolved.FillType -and -not $resolved.NumberFormat) { + return $script:defaultFormatIndex + } $key = Get-FormatKey -fontIdx $resolved.FontIdx ` -lb $resolved.LB -tb $resolved.TB -rb $resolved.RB -bb $resolved.BB ` -ha $resolved.HA -va $resolved.VA ` diff --git a/.claude/skills/mxl-compile/scripts/mxl-compile.py b/.claude/skills/mxl-compile/scripts/mxl-compile.py index 3ddd2eb2..ca69b851 100644 --- a/.claude/skills/mxl-compile/scripts/mxl-compile.py +++ b/.claude/skills/mxl-compile/scripts/mxl-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# mxl-compile v1.22 — Compile 1C spreadsheet from JSON (+write_xml_file/write_utf8_bom: общий эталон записи) +# mxl-compile v1.23 — Compile 1C spreadsheet from JSON (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import hashlib @@ -619,6 +619,16 @@ def main(): # Helper: register a cell format and return its index def register_cell_format(style_name, fill_type): resolved = resolve_style(style_name, fill_type) + # Ячейка без собственного оформления ссылается на формат ПО УМОЛЧАНИЮ — так делает + # платформа: в её палитре у неоформленного макета один формат (ширина колонки), и все + # ячейки указывают на него. Мы же заводили каждой свой формат с 0, где ноль + # означает «шрифт не задан», то есть формат был пуст по смыслу. + if (resolved['FontIdx'] == font_map.get('default', 0) + and resolved['LB'] < 0 and resolved['TB'] < 0 + and resolved['RB'] < 0 and resolved['BB'] < 0 + and not resolved['HA'] and not resolved['VA'] and not resolved['Wrap'] + and not resolved['FillType'] and not resolved['NumberFormat']): + return default_format_index key = get_format_key( font_idx=resolved['FontIdx'], lb=resolved['LB'], tb=resolved['TB'], rb=resolved['RB'], bb=resolved['BB'], diff --git a/tests/skills/cases/mxl-compile/snapshots/column-sets/Template.xml b/tests/skills/cases/mxl-compile/snapshots/column-sets/Template.xml index 6b068c79..cb052440 100644 --- a/tests/skills/cases/mxl-compile/snapshots/column-sets/Template.xml +++ b/tests/skills/cases/mxl-compile/snapshots/column-sets/Template.xml @@ -58,7 +58,7 @@ 0 - 4 + 1 ru @@ -70,7 +70,7 @@ 1 - 4 + 1 ru @@ -82,7 +82,7 @@ 2 - 4 + 1 ru @@ -100,21 +100,21 @@ 0 - 5 + 4 Товар 1 - 5 + 4 Кол 2 - 5 + 4 Сумма @@ -154,9 +154,6 @@ 8 - - 0 - 0 Parameter diff --git a/tests/skills/cases/mxl-compile/snapshots/guard-allow-external/print-forms/Демо/Templates/Макет/Ext/Template.xml b/tests/skills/cases/mxl-compile/snapshots/guard-allow-external/print-forms/Демо/Templates/Макет/Ext/Template.xml index 6a1227f0..1b911f97 100644 --- a/tests/skills/cases/mxl-compile/snapshots/guard-allow-external/print-forms/Демо/Templates/Макет/Ext/Template.xml +++ b/tests/skills/cases/mxl-compile/snapshots/guard-allow-external/print-forms/Демо/Templates/Макет/Ext/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -47,7 +47,4 @@ 10 - - 0 - \ No newline at end of file diff --git a/tests/skills/cases/mxl-compile/snapshots/lenient-implicit-cols/Template.xml b/tests/skills/cases/mxl-compile/snapshots/lenient-implicit-cols/Template.xml index df9334ef..b50b38f4 100644 --- a/tests/skills/cases/mxl-compile/snapshots/lenient-implicit-cols/Template.xml +++ b/tests/skills/cases/mxl-compile/snapshots/lenient-implicit-cols/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 2 + 1 ru @@ -42,7 +42,7 @@ 2 - 2 + 1 ru @@ -59,7 +59,7 @@ 0 - 2 + 1 ru @@ -71,7 +71,7 @@ 1 - 2 + 1 ru @@ -83,7 +83,7 @@ 2 - 2 + 1 ru @@ -100,7 +100,7 @@ 1 - 2 + 1 ru @@ -112,7 +112,7 @@ 2 - 2 + 1 ru @@ -129,7 +129,7 @@ 0 - 2 + 1 ru @@ -141,7 +141,7 @@ 2 - 2 + 1 ru @@ -181,7 +181,4 @@ 10 - - 0 - \ No newline at end of file diff --git a/tests/skills/cases/mxl-compile/snapshots/lenient-key-case/Template.xml b/tests/skills/cases/mxl-compile/snapshots/lenient-key-case/Template.xml index 58df6a32..1a078e22 100644 --- a/tests/skills/cases/mxl-compile/snapshots/lenient-key-case/Template.xml +++ b/tests/skills/cases/mxl-compile/snapshots/lenient-key-case/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 2 + 1 ru @@ -42,7 +42,7 @@ 2 - 2 + 1 ru @@ -71,7 +71,4 @@ 10 - - 0 - \ No newline at end of file diff --git a/tests/skills/cases/mxl-compile/snapshots/minimal/Template.xml b/tests/skills/cases/mxl-compile/snapshots/minimal/Template.xml index 2dad0c61..c71879cb 100644 --- a/tests/skills/cases/mxl-compile/snapshots/minimal/Template.xml +++ b/tests/skills/cases/mxl-compile/snapshots/minimal/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -47,7 +47,4 @@ 10 - - 0 - \ No newline at end of file diff --git a/tests/skills/cases/mxl-compile/snapshots/named-areas-coords/Template.xml b/tests/skills/cases/mxl-compile/snapshots/named-areas-coords/Template.xml index ede71b0e..531e5a58 100644 --- a/tests/skills/cases/mxl-compile/snapshots/named-areas-coords/Template.xml +++ b/tests/skills/cases/mxl-compile/snapshots/named-areas-coords/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 2 + 1 ru @@ -42,7 +42,7 @@ 2 - 2 + 1 ru @@ -54,7 +54,7 @@ 3 - 2 + 1 ru @@ -71,28 +71,28 @@ 0 - 3 + 2 П1 1 - 3 + 2 П2 2 - 3 + 2 П3 3 - 3 + 2 П4 @@ -146,9 +146,6 @@ 10 - - 0 - 0 Parameter diff --git a/tests/skills/cases/mxl-compile/snapshots/nested-output-dir/Templates/Макет/Ext/Template.xml b/tests/skills/cases/mxl-compile/snapshots/nested-output-dir/Templates/Макет/Ext/Template.xml index 9f5d9caa..b92dc3ea 100644 --- a/tests/skills/cases/mxl-compile/snapshots/nested-output-dir/Templates/Макет/Ext/Template.xml +++ b/tests/skills/cases/mxl-compile/snapshots/nested-output-dir/Templates/Макет/Ext/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -47,7 +47,4 @@ 10 - - 0 - \ No newline at end of file diff --git a/tests/skills/cases/mxl-compile/snapshots/shorthand-merges/Template.xml b/tests/skills/cases/mxl-compile/snapshots/shorthand-merges/Template.xml index 3367a8ef..fa72f75d 100644 --- a/tests/skills/cases/mxl-compile/snapshots/shorthand-merges/Template.xml +++ b/tests/skills/cases/mxl-compile/snapshots/shorthand-merges/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 2 + 1 ru @@ -42,7 +42,7 @@ 3 - 2 + 1 ru @@ -59,7 +59,7 @@ 1 - 2 + 1 ru @@ -71,7 +71,7 @@ 2 - 2 + 1 ru @@ -88,28 +88,28 @@ 0 - 3 + 2 Вид 1 - 3 + 2 Нач 2 - 3 + 2 Кон 3 - 3 + 2 Итог @@ -150,9 +150,6 @@ 10 - - 0 - 0 Parameter diff --git a/tests/skills/cases/mxl-compile/snapshots/shorthand-rows/Template.xml b/tests/skills/cases/mxl-compile/snapshots/shorthand-rows/Template.xml index 755c8940..a8085475 100644 --- a/tests/skills/cases/mxl-compile/snapshots/shorthand-rows/Template.xml +++ b/tests/skills/cases/mxl-compile/snapshots/shorthand-rows/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 2 + 1 ru @@ -42,7 +42,7 @@ 2 - 2 + 1 ru @@ -54,7 +54,7 @@ 3 - 2 + 1 ru @@ -71,21 +71,21 @@ 0 - 3 + 2 Товар 1 - 3 + 2 Кол 3 - 4 + 3 ru @@ -117,9 +117,6 @@ 10 - - 0 - 0 Parameter diff --git a/tests/skills/cases/mxl-compile/snapshots/simple-template/Template.xml b/tests/skills/cases/mxl-compile/snapshots/simple-template/Template.xml index 58df6a32..1a078e22 100644 --- a/tests/skills/cases/mxl-compile/snapshots/simple-template/Template.xml +++ b/tests/skills/cases/mxl-compile/snapshots/simple-template/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 2 + 1 ru @@ -42,7 +42,7 @@ 2 - 2 + 1 ru @@ -71,7 +71,4 @@ 10 - - 0 - \ No newline at end of file diff --git a/tests/skills/cases/mxl-compile/snapshots/unnamed-blocks/Template.xml b/tests/skills/cases/mxl-compile/snapshots/unnamed-blocks/Template.xml index e2cf29c4..99652405 100644 --- a/tests/skills/cases/mxl-compile/snapshots/unnamed-blocks/Template.xml +++ b/tests/skills/cases/mxl-compile/snapshots/unnamed-blocks/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 2 + 1 ru @@ -42,7 +42,7 @@ 2 - 2 + 1 ru @@ -59,7 +59,7 @@ 0 - 2 + 1 ru @@ -76,21 +76,21 @@ 0 - 3 + 2 П1 1 - 3 + 2 П2 2 - 3 + 2 П3 @@ -129,9 +129,6 @@ 10 - - 0 - 0 Parameter diff --git a/tests/skills/cases/mxl-decompile/snapshots/output-absolute-path/Template.xml b/tests/skills/cases/mxl-decompile/snapshots/output-absolute-path/Template.xml index fd7e6e66..5bef0e14 100644 --- a/tests/skills/cases/mxl-decompile/snapshots/output-absolute-path/Template.xml +++ b/tests/skills/cases/mxl-decompile/snapshots/output-absolute-path/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 2 + 1 ru @@ -59,7 +59,4 @@ 10 - - 0 - \ No newline at end of file diff --git a/tests/skills/cases/mxl-decompile/snapshots/roundtrip-templates/Template.xml b/tests/skills/cases/mxl-decompile/snapshots/roundtrip-templates/Template.xml index d26bbdeb..138479f6 100644 --- a/tests/skills/cases/mxl-decompile/snapshots/roundtrip-templates/Template.xml +++ b/tests/skills/cases/mxl-decompile/snapshots/roundtrip-templates/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 3 + 2 ru @@ -59,9 +59,6 @@ 10 - - 0 - 0 Template diff --git a/tests/skills/cases/mxl-decompile/snapshots/roundtrip/Template.xml b/tests/skills/cases/mxl-decompile/snapshots/roundtrip/Template.xml index 620356d4..1e2656c2 100644 --- a/tests/skills/cases/mxl-decompile/snapshots/roundtrip/Template.xml +++ b/tests/skills/cases/mxl-decompile/snapshots/roundtrip/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 2 + 1 ru @@ -42,7 +42,7 @@ 2 - 2 + 1 ru @@ -71,7 +71,4 @@ 10 - - 0 - \ No newline at end of file diff --git a/tests/skills/cases/mxl-info/snapshots/areas-and-params/Template.xml b/tests/skills/cases/mxl-info/snapshots/areas-and-params/Template.xml index d6f1a402..e6ae3b1e 100644 --- a/tests/skills/cases/mxl-info/snapshots/areas-and-params/Template.xml +++ b/tests/skills/cases/mxl-info/snapshots/areas-and-params/Template.xml @@ -30,7 +30,7 @@ 0 - 3 + 1 ru @@ -55,14 +55,14 @@ 0 - 5 + 4 НомерСтроки 1 - 5 + 4 Товар Номенклатура @@ -70,21 +70,21 @@ 2 - 6 + 5 Количество 3 - 6 + 5 Цена 4 - 6 + 5 Сумма @@ -96,7 +96,7 @@ 3 - 7 + 6 ru @@ -108,7 +108,7 @@ 4 - 8 + 7 Всего @@ -185,9 +185,6 @@ 0 Parameter - - 0 - 0 0 diff --git a/tests/skills/cases/mxl-info/snapshots/template-overview/Template.xml b/tests/skills/cases/mxl-info/snapshots/template-overview/Template.xml index 64a68b76..55a10957 100644 --- a/tests/skills/cases/mxl-info/snapshots/template-overview/Template.xml +++ b/tests/skills/cases/mxl-info/snapshots/template-overview/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 2 + 1 ru @@ -42,7 +42,7 @@ 2 - 2 + 1 ru @@ -71,7 +71,4 @@ 10 - - 0 - \ No newline at end of file diff --git a/tests/skills/cases/mxl-info/snapshots/with-text/Template.xml b/tests/skills/cases/mxl-info/snapshots/with-text/Template.xml index 98e63617..1f0beac7 100644 --- a/tests/skills/cases/mxl-info/snapshots/with-text/Template.xml +++ b/tests/skills/cases/mxl-info/snapshots/with-text/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 3 + 2 ru @@ -47,7 +47,7 @@ 0 - 2 + 1 ru @@ -59,7 +59,7 @@ 1 - 2 + 1 ru @@ -71,7 +71,7 @@ 2 - 2 + 1 ru @@ -88,21 +88,21 @@ 0 - 4 + 3 Код 1 - 4 + 3 Наименование 2 - 4 + 3 Сумма @@ -151,9 +151,6 @@ 10 - - 0 - 0 Template diff --git a/tests/skills/cases/mxl-validate/snapshots/valid-template/Template.xml b/tests/skills/cases/mxl-validate/snapshots/valid-template/Template.xml index 620356d4..1e2656c2 100644 --- a/tests/skills/cases/mxl-validate/snapshots/valid-template/Template.xml +++ b/tests/skills/cases/mxl-validate/snapshots/valid-template/Template.xml @@ -18,7 +18,7 @@ 0 - 2 + 1 ru @@ -30,7 +30,7 @@ 1 - 2 + 1 ru @@ -42,7 +42,7 @@ 2 - 2 + 1 ru @@ -71,7 +71,4 @@ 10 - - 0 - \ No newline at end of file