From 061c73b23df28a65e2bfd69eb0eedfc4585776a3 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sun, 8 Feb 2026 14:19:20 +0300 Subject: [PATCH] Add SpreadsheetDocument XML format specification MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Based on real templates from 1C:Accounting — invoice (horizontal areas, 33 columns) and label (vertical area, drawing, barcode). Co-Authored-By: Claude Opus 4.6 --- docs/1c-spreadsheet-spec.md | 337 ++++++++++++++++++++++++++++++++++++ 1 file changed, 337 insertions(+) create mode 100644 docs/1c-spreadsheet-spec.md diff --git a/docs/1c-spreadsheet-spec.md b/docs/1c-spreadsheet-spec.md new file mode 100644 index 00000000..456765d9 --- /dev/null +++ b/docs/1c-spreadsheet-spec.md @@ -0,0 +1,337 @@ +# Спецификация XML-формата табличного документа (SpreadsheetDocument) + +Формат файла `Template.xml` для макетов типа `SpreadsheetDocument` (табличный документ / MXL). + +## Namespace + +```xml + +``` + +## Структура документа + +Элементы внутри `` идут в фиксированном порядке: + +``` + + — языковые настройки + — определения колонок + ... — строки с данными (повторяются) + ... — рисунки (опционально, повторяются) + true — признак макета + — индекс формата по умолчанию + — общее количество строк + — видимых строк (обычно = height) + ... — объединения ячеек (повторяются) + ... — именованные области (повторяются) + ... — стили линий (повторяются) + ... — шрифты (опционально, повторяются) + ... — форматы (повторяются) + ... — ресурсы картинок (опционально) + +``` + +## Индексация + +Все палитры (линии, шрифты, форматы) — **плоские массивы**, на элементы которых ссылаются по индексу. + +| Палитра | Индексация | Индекс 0 означает | +|-----------|------------|--------------------------------------| +| `` | 0-based | Первый элемент `` | +| `` | 0-based | Первый элемент `` | +| ``| **1-based**| 0 = «формат по умолчанию» (не задан) | + +Формат с индексом N — это N-й элемент `` в документе (считая от 1). + +## Языковые настройки + +```xml + + ru + ru + + ru + Русский + Русский + + +``` + +## Колонки + +```xml + + 33 + + 1 + + 1 + + + ... + +``` + +Перечисляются только колонки с нестандартной шириной. Формат колонки определяет ширину через свойство `` в палитре форматов. + +## Строки и ячейки + +### Строка + +```xml + + 3 + 5 + + 5 + true + ... + + +``` + +Строки с одинаковым содержимым объединяются через ``. + +### Ячейка + +Ячейки внутри `` — элементы `` (cell group), каждый содержит `` (cell content): + +```xml + + 6 + + 9 + Имя + Расш + + + ru + Итого: + + + + +``` + +**Правила позиционирования ``:** +- Если `` указан — ячейка в этой колонке +- Если `` не указан — колонка = предыдущая + 1 +- Первая ячейка без `` идёт в колонку 0 + +### Типы заполнения ячеек + +Тип заполнения определяется свойством `fillType` в формате ячейки: + +| fillType | Данные ячейки | Описание | +|-------------|-------------------------------|----------------------------------------| +| `Parameter` | `Имя` | Значение подставляется программно | +| `Template` | `Текст [Параметр]` | Шаблон — `[Имя]` заменяется на значение | +| `Text` | `Текст` | Статический текст | +| *(нет)* | — | Пустая ячейка или ячейка с форматированием | + +`` — имя параметра расшифровки (для навигации при клике на ячейку). + +## Рисунки + +```xml + + Picture + 1 + 11 + 3 + 6 + 4 + 33 + 2 + 0 + 4 + 183 + false + Proportionally + 1 + 1 + +``` + +Позиция задаётся через начальную/конечную строку и колонку + смещения в пикселях. `pictureIndex` ссылается на ресурс из палитры ``. + +## Объединения ячеек + +```xml + + 3 + 1 + 1 + 30 + +``` + +Размер объединения: `(h + 1)` строк × `(w + 1)` колонок. Если `` не указан — объединение в пределах одной строки. + +## Именованные области + +Именованные области — аналог «имён» в табличном документе 1С. Используются для программного вывода секций. + +Получение области: +```bsl +// Горизонтальная область (диапазон строк) +Область = Макет.ПолучитьОбласть("Заголовок"); + +// Пересечение горизонтальной и вертикальной областей +Область = Макет.ПолучитьОбласть("ВысотаЭтикетки|ШиринаЭтикетки"); +``` + +Пересечение через `|` типично для этикеток и ценников, где нужна область фиксированного размера (высота × ширина). + +### Тип Rows — горизонтальная область + +```xml + + Заголовок + + Rows + 1 + 4 + -1 + -1 + + +``` + +### Тип Columns — вертикальная область + +```xml + + ШиринаЭтикетки + + Columns + -1 + -1 + 1 + 5 + + +``` + +### Тип Drawing — именованный рисунок + +```xml + + Штрихкод + 1 + +``` + +## Стили линий + +Палитра линий для границ ячеек и рисунков. Индексация 0-based. + +```xml + + + Solid + + + + + None + +``` + +| xsi:type | Значения | +|-----------------------------------------|-------------| +| `v8ui:SpreadsheetDocumentCellLineType` | Solid, None | +| `v8ui:SpreadsheetDocumentDrawingLineType` | Solid, None | + +Атрибут `width` — толщина линии (1 = тонкая, 2 = толстая). + +## Шрифты + +Палитра шрифтов. Индексация 0-based. + +```xml + + + + + +``` + +## Форматы + +Палитра форматов — центральный элемент. **Индексация 1-based** (индекс 0 = формат не задан). + +```xml + + 0 + 0 + 1 + 0 + 1 + 24 + 84 + Center + Center + Wrap + Parameter + + + ru + ЧЦ=15; ЧДЦ=2 + + + 1 + +``` + +Все свойства опциональны. Формат может содержать только `` (для колонки) или только `` (для строки). + +### Связь формата с контекстом + +| Контекст | Ссылка | Значимые свойства формата | +|------------------|--------------------|--------------------------| +| Колонка | `` | `width` | +| Строка | `` | `height` | +| Ячейка | `` | Все остальные | +| Рисунок | `` | `drawingBorder` | +| По умолчанию | `` | `width` | + +## Ресурсы картинок + +```xml + + 0 + + +``` + +## Типичная структура макета печатной формы + +Печатная форма обычно состоит из именованных горизонтальных областей: + +``` +Заголовок — шапка документа (название, номер, дата) +Поставщик — реквизиты поставщика +Покупатель — реквизиты покупателя +ШапкаТаблицы — заголовок таблицы товаров +Строка — строка товара (выводится в цикле) +Итого — итоговая строка +СуммаПрописью — сумма прописью +Подписи — блок подписей +``` + +Каждая область — диапазон строк, получаемый через `ПолучитьОбласть("Имя")` и выводимый через `Вывести()`. + +Параметры в ячейках (``) заполняются программно: +```bsl +Область = Макет.ПолучитьОбласть("Строка"); +Область.Параметры.НомерСтроки = НомерСтроки; +Область.Параметры.Товар = СтрокаТЧ.Номенклатура; +ТабДок.Вывести(Область); +```