125 lines
8.6 KiB
Markdown
125 lines
8.6 KiB
Markdown
# Структура метаданных конфигурации 1С
|
||
|
||
Этот документ задаёт модель, которой должны следовать агенты и публичные
|
||
ответы SQL-адаптера. Он описывает семантические метаданные, а не физические
|
||
имена SQL-записей, пути контейнеров или номера потоков.
|
||
|
||
## Главное правило
|
||
|
||
У конфигурации нет единого шаблона дочерних узлов для всех классов объектов.
|
||
Набор узлов определяется классом объекта и подтверждается двумя источниками:
|
||
|
||
1. документацией платформы 1С для соответствующего класса;
|
||
2. живым чтением выбранного объекта через адаптер.
|
||
|
||
Не добавляйте в ответ ни табличную часть, ни форму, ни модуль только потому,
|
||
что они есть у другого объекта. Если живой декодер не подтвердил конкретный
|
||
дочерний объект, верните явный неполный результат, а не пустой вымышленный
|
||
узел.
|
||
|
||
## Связь объекта и формы
|
||
|
||
Форма — самостоятельный объект метаданных, на который владелец ссылается в
|
||
своей коллекции `Формы`. В кратком описании владельца возвращается только
|
||
ссылка/идентичность формы: имя, GUID и доступный публичный селектор. Полное
|
||
описание формы читается отдельным запросом.
|
||
|
||
```text
|
||
Отчет
|
||
└─ Формы
|
||
└─ <ссылка на Форму>
|
||
|
||
Форма
|
||
├─ Реквизиты
|
||
├─ Параметры
|
||
├─ Команды
|
||
├─ Модуль формы
|
||
└─ Элементы
|
||
```
|
||
|
||
Параметры формы не являются её реквизитами. Это декларация параметризации при
|
||
открытии формы. Команда формы не имеет отдельного модуля: её имя обработчика
|
||
является свойством команды и разрешается в модуле формы. Аналогично имя
|
||
обработчика события элемента — свойство элемента, а не дочерний узел дерева.
|
||
|
||
Подчинённая команда владельца (`Отчет.Команды.<Имя>`) отличается от команды
|
||
формы. Если документация и живая база подтверждают модуль команды, его надо
|
||
сообщать как свойство этой команды, не выдавая за форму или за модуль формы.
|
||
|
||
## Отчёт
|
||
|
||
Официальная методическая документация 1С подтверждает, что отчёт может иметь
|
||
реквизиты и табличные части. Табличная часть, в свою очередь, имеет реквизиты.
|
||
Для отчёта допустима следующая *классовая* схема; конкретные экземпляры
|
||
показываются только после живого чтения:
|
||
|
||
```text
|
||
Отчет
|
||
├─ Реквизиты
|
||
├─ Табличные части
|
||
│ └─ Реквизиты табличной части
|
||
├─ Формы → отдельные описания Форм
|
||
├─ Команды
|
||
├─ Макеты
|
||
├─ Модуль объекта
|
||
└─ Модуль менеджера
|
||
```
|
||
|
||
СКД — это тип/содержимое макета, а не обязательная отдельная ветвь любого
|
||
отчёта. Не создавайте узел СКД, если в живом объекте не подтверждён
|
||
соответствующий макет.
|
||
|
||
## Публичные маршруты адаптера
|
||
|
||
Для объекта `Отчет.<Имя>` адаптер использует следующие раздельные операции:
|
||
|
||
1. `metadata.object.forms` — читает подтверждённые ссылки отчёта на формы;
|
||
возвращаемые строки содержат идентичность формы, а не её элементы,
|
||
реквизиты, параметры или текст модуля.
|
||
2. `metadata.object.form.details` — по владельцу и имени формы получает
|
||
развёрнутое описание формы.
|
||
3. `metadata.form.decode` — декодирует одну конкретную форму и возвращает её
|
||
параметры, реквизиты, элементы, команды, события и сводку встроенного
|
||
модуля.
|
||
|
||
Передавайте `configuration_view=effective_working` либо не передавайте view:
|
||
MCP установит этот режим сам. Он означает логическую рабочую конфигурацию с
|
||
учётом базовой конфигурации, сохранённых изменений и расширений; он не
|
||
разрешает агенту выбирать `ConfigSave` или `ConfigCASSave`.
|
||
|
||
Таким образом, ссылка `Отчет → Форма` не должна заменяться копией описания
|
||
формы внутри объекта отчёта. Агрегированный `metadata.object.full` удобен для
|
||
обзора, но для работы с формой агент обязан сохранять её отдельный публичный
|
||
селектор и при необходимости вызвать один из двух form-методов выше.
|
||
|
||
Текущая реализация подтверждает маршрут для `Report`: в
|
||
`RELATED_SECTION_RULES` форма имеет категорию `Form`, а
|
||
`metadata.object.forms` возвращает только `guid`, `name`, `synonyms` и счётчики
|
||
частей. Детали добавляет только `metadata.object.form.details` через отдельный
|
||
вызов `metadata.form.decode`.
|
||
|
||
## Источники
|
||
|
||
- [Иерархия объектов конфигурации и подчинённые объекты — 1С:EDT](https://its.1c.ru/db/content/edtdoc/src/topics/i030.html)
|
||
- [Отчёты, реквизиты и табличные части — методическая поддержка 1С](https://its.1c.ru/db/content/metod8dev/src/platform81/startersdev/i8102579.htm)
|
||
- [Формы: реквизиты, параметры, команды и модуль — руководство разработчика 1С](https://its.1c.ru/db/v8310doc/bookmark/dev/TI000000391)
|
||
- [Явное объявление параметров формы — стандарт 1С](https://its.1c.ru/db/content/v8std/src/1%C2%A0200/700/i8100741.htm)
|
||
|
||
## Проверка перед изменением
|
||
|
||
Перед тем как менять форму или модуль, агент обязан выполнить публичное
|
||
чтение владельца, затем получить форму её собственным селектором. Отсутствие
|
||
SQL-подключения, нераспознанный контейнер или неоднозначная связь — это
|
||
`unresolved`/`protocol_incomplete`, а не разрешение достроить структуру по
|
||
документации.
|
||
|
||
`metadata.form.decode` с `view=structure` возвращает компактные доказанные
|
||
факты по статическим элементам. Пока SQL-кодек логического родителя не
|
||
доказан, поля `parent` и `children` имеют статус `unresolved`; нельзя строить
|
||
их из технической глубины или пути сериализованного контейнера.
|
||
|
||
Запросы `runtime.form.elements.inspect` и `runtime.form.inspect` возвращают
|
||
`runtime_inspection_unsupported`. SQL-адаптер не открывает формы, не запускает
|
||
обработчики и не выдаёт созданные СКД во время работы элементы за статические
|
||
метаданные.
|