Во всех командах ниже {python} означает python в Windows и python3 в macOS/Linux/WSL. Выбирай команду сразу по текущей ОС, не запускай оба варианта.
Создание формы интерфейса в 1С:Элемент
Шаг 0: Определи что нужно создать
| Что создать | Когда |
|---|---|
ФормаОбъекта |
Форма редактирования одной записи |
ФормаСписка |
Форма со списком записей |
| Обе формы | Если нужен полный интерфейс (типичный случай) |
ФормаОтчета |
Форма просмотра отчёта с параметрами (объект типа Отчет) |
Уточни у пользователя имя объекта, если оно не указано.
Шаги 1 и 2: выполни параллельно
Шаг 1 — Загрузи спецификацию. Прочитай нужные файлы из references/:
- При создании
ФормаОбъекта→ прочитайreferences/ФормаОбъекта.md - При создании
ФормаСписка→ прочитайreferences/ФормаСписка.md - При создании
ФормаОтчета→ прочитайreferences/ФормаОтчета.md - При запросе настроек «Избранного» на target 10.0+ → прочитай
references/favorites-10.md; в обычные формы свойство не добавляй - Читай
references/elements.mdтолько если нужны нестандартные элементы: вложенные файлы, изображения, сворачиваемые блоки, статусы с цветом, надписи/labels, кнопки действий, вкладки (Страницы) — иначе пропусти - Для
ПанельТегов,ПанельЭтапов,КанбанДоскаилиГеографическаяКартана target 10.0+ читайreferences/components-10.md. На более старом target эти компоненты не генерируй. - Для
КомпонентОбсуждения.ОтображатьЗаголовок, программного выбора разделаШаблонФормыСРазделамиили вложенных узлов встроенных веб-страниц на target 10.0+ читайreferences/ui-deltas-10.md. Встроенные веб-страницы размещаются в компоненте приложения (Приложение.yaml), а не в форме объекта; если пользователь просит кастомное меню без существующей команды или компонента, оставь стандартное меню и сообщи, какие элементы нужно определить.
Шаг 2 — Анализ объекта. Вызови скилл xbsl-form-info:
{python} skills/xbsl-form-info/scripts/form_info.py --name <ИмяОбъекта> --root . --target-version <ЦелеваяВерсия>
Из результата возьми:
- object_path — папка куда класть файлы форм (путь там, где живёт объект)
- object_file — имя файла объекта (нужен для обновления в шаге 6)
- object_type — тип объекта
- namespace — пространство имён (vendor::project::subsystem), используется в типах ФормаСписка
- fields — список реквизитов с именами и типами (используй их — не придумывай!)
- tc — список табличных частей
- suggested_layout — рекомендация: simple / panels / tabs / report (для объектов типа Отчет)
- existing_forms — какие формы уже существуют (для Отчет содержит ключ ФормаОтчета)
- is_hierarchical — true если справочник имеет Иерархический: Истина
- hierarchy_kind — ИерархияГруппИЭлементов или ИерархияЭлементов для иерархического справочника; на target 10.0 при отсутствии Иерархия.Вид применяется первый вид по умолчанию
- parent_reference_type — тип системного реквизита Родитель для формы элемента; при группах это <Справочник>.Группы.Ссылка?, при иерархии элементов — <Справочник>.Ссылка?
- additional_hierarchies — список доп. иерархий [{name, field}] (паттерн Б, пуст при А)
- report_params — параметры ПараметрыЗапроса и Макет.Параметры
([{name, type}] или [{name, type, required}] для параметров макета);
для совпадающих имён параметр макета задаёт тип и обязательность
- data_source_kind — Таблица или Запрос (только для объектов типа Отчет)
- data_source — имя таблицы источника (только для объектов типа Отчет с ВидИсточникаДанных: Таблица)
Если у реквизита объекта на target 10.0+ задана ВажностьПриОтображении, учитывай её только при решении, нужен ли реквизит в автоматически построенном интерфейсе. Пользовательская форма управляется собственным Содержимое: не копируй это свойство в ПолеВвода и не скрывай явно запрошенное поле без согласования с задачей.
Иерархический справочник: если is_hierarchical: true или additional_hierarchies не пуст —
используй соответствующий вид из references/ФормаСписка.md для ФормаСписка.
Тип поля Родитель в форме элемента бери из parent_reference_type. Подробности в references/ФормаОбъекта.md.
Если скрипт вернул error:
- сообщи пользователю текст ошибки;
- если в ответе есть matches — покажи кандидатов и попроси уточнить проект/подсистему;
- не создавай и не обновляй формы, пока пользователь не уточнит нужный объект.
Шаг 3: Проверь существующие формы
Если в existing_forms есть ненулевые значения — сообщи пользователю какие формы уже существуют и спроси: перезаписать или пропустить? Не создавай файл без явного подтверждения.
Шаг 4: Сгенерируй UUID
Нужен 1 UUID на каждую форму (только для тех, которые будут созданы). Вызови скилл xbsl-uuid с нужным числом (1 или 2).
Шаг 5: Создай файлы форм
Для каждой создаваемой формы создай файл в object_path.
Именование файлов
| Тип формы | Имя файла |
|---|---|
ФормаОбъекта для Сотрудники |
СотрудникиФормаОбъекта.yaml |
ФормаСписка для Сотрудники |
СотрудникиФормаСписка.yaml |
Заголовок формы
ФормаОбъекта→ единственное число:Сотрудник,Заказ покупателя,КонтрагентФормаСписка→ множественное/название объекта:Сотрудники,Заказы покупателей
Важные правила
ВключатьВАвтоИнтерфейс: Ложь— всегда указывай в обеих формах- Для ФормаСписка: используй
namespaceиз скрипта для типов (<ns>::<ИмяОбъекта>ФормаСписка.ДанныеСтрокиСписка) - Для ФормаСписка: динамический список описывается в секции
Свойствавнизу файла (не внутриСодержимое), таблица ссылается на него черезИсточник: =Список - Колонки в ФормаСписка используют
Значение: =ДанныеСтроки.Данные.<Поле>(неПолеЗначения) suggested_layoutиз скрипта определяет шаблон:simple→ПроизвольныйШаблонФормы,panels→ панели (Группа),tabs→ вкладки (РазделФормы)
Шаг 6: Обнови объектный YAML
После создания файлов форм обязательно обнови файл объекта
(object_path/object_file). Добавь или дополни секцию Интерфейс.
Секция добавляется сразу после строки ОбластьВидимости (или после Ид/Имя, если ОбластьВидимости отсутствует), до Реквизиты / ВидИсточникаДанных.
Для Справочника, Документа, РегистрСведений и других:
Интерфейс:
ВключатьВАвтоИнтерфейс: Истина
ИспользоватьСозданиеПриВводе: Истина # только для Справочника
Объект:
Форма: <ИмяОбъекта>ФормаОбъекта # только если создаётся/существует ФормаОбъекта
Список:
Форма: <ИмяОбъекта>ФормаСписка # только если создаётся/существует ФормаСписка
Для объекта типа Отчет:
Структура внутри Интерфейс плоская — без подсекций Объект/Список:
Интерфейс:
ВключатьВАвтоИнтерфейс: Истина
Форма: <ИмяОтчета>ФормаОтчета
Правила:
- Если уже есть секция Интерфейс, обнови только нужные поля, не
перезаписывай остальные.
- Для Отчет проверяй Интерфейс.Форма отдельно от
Интерфейс.ВключатьВАвтоИнтерфейс; пользовательская форма необязательна.
- Макет.Параметры[].Обязательный: Истина проверяет построение отчёта при
пустом значении. Покажи этот параметр в форме, если пользователь просит
управление им; не добавляй выдуманное свойство обязательности в ПолеВвода.
- ИспользоватьСозданиеПриВводе: Истина — только для Справочник; для Документ, Отчет и других типов не добавляй
- Добавляй только те подсекции (Объект, Список), формы для которых существуют или создаются