From 829e19dc3a1540389c190e3b306d5cb47a6dd36f Mon Sep 17 00:00:00 2001 From: Mikhail Date: Fri, 14 Aug 2026 11:51:35 +0300 Subject: [PATCH] Document report template codec program --- .../research/report-template-codec-program.md | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 docs/1c-sql-protocol/research/report-template-codec-program.md diff --git a/docs/1c-sql-protocol/research/report-template-codec-program.md b/docs/1c-sql-protocol/research/report-template-codec-program.md new file mode 100644 index 0000000..3583954 --- /dev/null +++ b/docs/1c-sql-protocol/research/report-template-codec-program.md @@ -0,0 +1,69 @@ +# Программа доказательного codec-а отчётов и макетов + +## Цель + +Построить для SQL-адаптера раздельные, evidence-first decoder/encoder пути +для отчёта и каждого типа его макета. Публичный API принимает только имя +расширения, отчёта и макета; физические таблицы, ключи и контейнеры остаются +внутренними деталями реализации. + +## Первая live-фикстура + +База: `upo_test`; расширение: `фс_Отчеты`; +отчёт: `_ПоступлениеТовара`; +GUID отчёта: `c428f629-785a-4141-b038-f2192bb4580d`. + +Наблюдаемое состояние на 2026-08-14: + +- extension object search подтверждает сохранённый override в `ConfigCASSave`; +- в saved слое присутствуют descriptor, `.0` и extension `__configinfo`; +- active manifest содержит только descriptor и `.0` stream; +- `metadata.object.components` подтверждает четыре формы, среди них форму + `ОсновнаяСхемаКомпоновкиДанных`; +- `metadata.object.templates` и `scd.inspect` не подтверждают макет + `DataCompositionSchema` для этого объекта. + +Следствие: имя формы не является доказательством существования одноимённого +макета СКД. Нельзя направлять запрос или XML-кодек в `.0` stream. + +## Матрица типов макетов + +| Платформенный тип | Состояние codec-а | Допустимое действие до fixture proof | +| --- | --- | --- | +| Табличный документ | частичный MOXCEL decoder | read-only structure/evidence | +| Текстовый документ | типизированное текстовое исследование | read-only до round-trip fixture | +| Двоичные данные | opaque | hash/size only | +| Active document | opaque | hash/size only | +| HTML документ | частичное текстовое/HTML evidence | read-only до round-trip fixture | +| Географическая схема | opaque typed candidate | read-only | +| Графическая схема | opaque typed candidate | read-only | +| Схема компоновки данных | XML decoder + scalar byte-preserving patch | write only after public route and saved-state codec proof | +| Макет оформления компоновки данных | отдельный XML family | read-only до own fixture proof | +| Внешняя компонента | opaque archive | hash/size only | + +Источник taxonomy: [1C:Enterprise Template wizard](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_8.3.23_Developer_Guide/Chapter_31._Development_tools/31.14._Template_wizard/). + +## Protocol gates + +1. Создать либо выбрать отдельную live fixture для одного вида макета. +2. Снять SQL before snapshot всех связанных payload-ов и их SHA-1. +3. Выполнить ровно одно контролируемое изменение через Configurator. +4. Снять after snapshot и доказать точное соответствие object → manifest → + payload → saved-state overlay. +5. Реализовать lossless decoder и обратный encoder только для изменённого + участка; неизвестные байты сохраняются дословно. +6. Выполнить `apply_and_rollback` в `upo_test`, проверить SQL readback и + очистку adapter-created rows. +7. Отдельно получить человеческое подтверждение видимости в Configurator. + +Для СКД XML-семантика включает datasets, links, calculated fields, resources, +parameters, layouts, nested schemas и settings. Макет оформления — другой XML +контракт: регионы, шрифты, цвета, границы и правила оформления; его нельзя +обрабатывать методом `scd.patch`. + +## Ближайшая реализация + +Первый кодовый результат — resolver, который умеет различать форму и макет, +а затем находит `MainDataCompositionSchema` по подтверждённой template identity +в extension active/saved layer. При отсутствии доказанного template payload он +возвращает `unresolved`, а не fallback на форму или stream `.0`.