Визуальный конструктор форм
Визуальный конструктор компонентов интерфейса 1С:Элемент в редакторе – панели структуры, палитры, свойств и привязки над исходным .yaml.
Расширение включает визуальный конструктор компонентов интерфейса 1С:Элемент
(ВидЭлемента: КомпонентИнтерфейса – формы и свои компоненты). Главное место работы – панель
формы: слева дерево структуры, справа данные формы, под ними каркас формы. Рядом с ней стоят
палитра компонентов в боковой панели и типизированная панель свойств. Главной поверхностью
остаётся текстовый редактор, а конструктор – контекстная линза над ним.
Две вещи, которые важно помнить:
- Каждое действие – минимальная правка текста. Конструктор никогда не переписывает и не переформатирует файл целиком. Комментарии, порядок ключей и форматирование сохраняются, а каждая операция – один шаг отмены. Открытие формы в конструкторе ничего не меняет, пока вы не сделаете действие сами.
- Предпросмотр – это каркас, а не рендер. Отрисовка у платформы серверная; локальный предпросмотр показывает структуру и раскладку, но не пиксели.
Что нужно
- Панели и правки текста работают всегда. Выбор узлов, перемещение и оборачивание компонентов, копирование и вставка, каркас – всё это опирается только на yaml.
- Палитре и типизированным редакторам свойств нужны данные о языке (ui-схема, генерируется
из вашего дистрибутива 1С:Элемент – см. Данные о языке) и
LSP-сервер (
pip install "xbsl[lsp]"). Без них дерево структуры и правки всё равно работают; палитра и типизированные редакторы вместо отказа показывают подсказку.
Как открыть конструктор
Откройте .yaml компонента интерфейса – форму или свой КомпонентИнтерфейса – и нажмите кнопку
конструктора формы в шапке редактора (она видна на yaml формы). Второй путь – Открыть в
конструкторе в контекстном меню дерева метаданных. Откроется панель формы; пока она открыта,
рядом с деревом метаданных показывается Палитра.
Остальные панели живут в контейнерах боковых панелей и следуют за активным редактором:
- 1С:Элемент • Проект – основная боковая панель слева: дерево метаданных и Палитра (последняя – только при открытой панели формы).
- 1С:Элемент • Инспектор – вторичная боковая панель справа: панели Свойства и Документация.
Панель формы
Панель открывается на каждую форму отдельно и живёт как обычная вкладка редактора. Вторая форма встаёт рядом с первой, у каждой панели своё дерево, выделение и память раскрытия, а повторное открытие той же формы выводит вперёд её панель.
Панель и её открытый .yaml связаны: выбор вкладки с одной стороны выводит вперёд другую, пока
они в разных группах. Если обе оказались в одной группе – перетаскиванием вкладки или через
Ctrl+P, – связь размыкается, и впереди остаётся выбранная вкладка. Иначе панель накрывала бы
исходник, который только что вывели, и добраться до него было бы нельзя. Закрытие панели
закрывает yaml формы и её модуль, если в них нет несохранённых правок.
Сама по себе эта связь новых вкладок не открывает. Пока исходник закрыт, он таким и остаётся:
клик по полю каркаса, по строке дерева структуры, по строке панели данных и переход выделения после
правки в любой из них двигают только выделение. Открывает исходник явная просьба – “Показать в
yaml”, Ctrl+клик, двойной клик в дереве, пункт контекстного меню дерева метаданных или вкладка
Модуль внизу. Тогда он встаёт рядом с панелью, никогда в её собственной колонке, поэтому не
может оказаться позади формы, которой принадлежит. Единственное осознанное исключение – сама
вкладка Модуль: она занимает место панели намеренно, как и положено переключению вкладки.
Панель формы – три области с перетаскиваемыми разделителями, их положение запоминается:
| Слева | Справа |
|---|---|
| Структура – дерево слотов и компонентов | Данные – свойства компонента и реквизиты объекта |
| Каркас формы – каркас во всю ширину, под ними |
Форма зависит от собственных свойств, поэтому структура и данные правятся там же, где форма показана. Панель “Свойства” остаётся отдельной – она следует за выделением.
Вкладка модуля
Полоса внизу панели повторяет нижние вкладки веб-конструктора платформы. Форма – сама
панель. Модуль открывает .xbsl формы (файл рядом с yaml) обычной вкладкой редактора в той
же группе: область переключается на код, и за ним стоит весь редактор – дополнение, подсказки,
диагностика, переход к определению. Пока у формы нет файла модуля, вкладка приглушена.
Вернуться можно со стороны модуля: кнопкой Открыть форму в заголовке редактора (там же, где
у yaml формы кнопка конструктора), самой вкладкой панели или Ctrl+Tab.
Структура
Форма в виде дерева слотов (Содержимое, Команды, страницы, колонки, …) и компонентов, с
иконкой по виду и метками линтера на узлах.
- Синхронизация с курсором. Узел под курсором в yaml подсвечивается в дереве и в каркасе, а выбор узла в дереве переводит курсор к его yaml. Подробно – в разделе Следование за курсором.
- Отмена.
Ctrl+Z/Ctrl+Yработают прямо в панели: каждая операция конструктора – один шаг отмены документа yaml. - Расположение (контекстное меню + клавиши): Переместить выше / ниже (
Alt+Вверх/Alt+Вниз), Обернуть в контейнер (выбор типа контейнера), Развернуть контейнер, Дублировать, Переименовать (Имя) (F2), Удалить компонент (Delete). - Копирование / вставка как yaml. Копировать фрагмент yaml (
Ctrl+C) и Вставить yaml из буфера (Ctrl+V) переносят поддеревья – между формами и между проектами. - Мультивыделение (
Ctrl/Shiftкликом): через Править выделенные вместе… задайте или снимите одно свойство сразу у всех. - Фокус и фильтр. Сфокусироваться на поддереве сужает дерево до одной ветки, кнопка в шапке области возвращает всю форму. Кнопка фильтра переключает показ только именованных компонентов.
- Перетаскивание внутри области: узел, брошенный на контейнер, встаёт последним ребёнком;
брошенный на лист – сразу после него. Недопустимые цели отбиваются ещё до броска. Точный
порядок задаётся клавишами
Alt+Вверх/Alt+Вниз.
Данные
Область Данные связывает поля ввода с данными. В ней две секции: собственные Свойства:
компонента и реквизиты объекта-владельца.
- Свойства компонента: Добавить свойство (кнопка в шапке области), Переименовать
свойство (
F2), Сменить тип свойства, Удалить свойство (Delete). - Привязать поле ввода: перетащите реквизит (или свойство) на узел в области “Структура”
либо сделайте двойной клик. Конструктор создаст нужный компонент ввода уже с привязкой:
Булево–> флажок, иначе поле ввода сЗначение: =....
Каркас формы
Каркас показывает структуру формы; платформенной отрисовки в нём нет. Он подсвечивает выбранный
компонент и следует за выделением в структуре и за курсором в yaml; клик по блоку выбирает
компонент, Ctrl+клик переходит к его yaml. Картинка с Изображение: файл.svg показывает
саму картинку, картинки ресурсов ищутся в **/Ресурсы/. В шапке области – тема каркаса (светлая,
тёмная, как в редакторе) и масштаб: кнопками, колесом над регулятором или Ctrl+колесом над
каркасом.
Следование за курсором
Текст и панели показывают одно и то же место формы. Курсор в yaml, узел в структуре, блок каркаса и содержимое панели свойств связаны в обе стороны. Поэтому переключаться между “написать руками” и “поправить мышью” можно на каждом шаге, не отыскивая узел заново.
От курсора в yaml – к панелям. Поставьте курсор внутрь узла (или просто идите по файлу стрелками):
- в каркасе подсвечивается блок этого компонента;
- в структуре строка узла становится выделенной, а свёрнутые группы по пути от корня раскрываются сами, так что узел не приходится искать;
- панель свойств наполняется свойствами узла под курсором, пока она открыта;
- фокус остаётся в редакторе: следование только визуальное, набор текста оно не прерывает.
От панелей – к yaml.
| Действие | Что происходит |
|---|---|
| Клик по узлу структуры | выделяет строку; если yaml уже открыт где-то ещё, курсор следует туда же, не забирая фокус – закрытый yaml остаётся закрытым |
| Двойной клик по узлу | открывает yaml, если нужно (рядом с панелью), и переводит туда фокус |
| Клик по блоку каркаса | компонент выделяется: строка в структуре, свойства в панели и, если yaml уже открыт где-то ещё, курсор в нём – закрытый yaml не трогается |
Ctrl+клик по блоку каркаса |
открывает yaml этого блока, если нужно (рядом с панелью), и переходит к нему |
| Кнопка Показать в yaml в панели свойств | открывает yaml, если нужно (рядом с панелью), и переходит к строке свойства |
Выделенный узел общий для трёх областей и светится полным цветом независимо от того, где сейчас фокус. Потеряв фокус – например уйдя в палитру, – вы всё равно видите, с чем работаете.
То же следование действует и для метаданных: панель свойств идёт за курсором в yaml объекта
(Справочник, Документ, …), а дерево метаданных подсвечивает элемент активного редактора.
Панель “Палитра”
Панель Палитра живёт рядом с деревом метаданных и показывается, пока открыта панель формы. Она перечисляет компоненты для вставки в текущее выделение структуры, секциями: Частые, Избранное, Проект (свои компоненты и вставки), дальше пакеты платформы из ui-схемы.
- Вставить двойным кликом (или
Enterдважды) по элементу палитры, когда в области “Структура” выделен контейнер; либо Вставить в форму из контекстного меню. - Перетащить компонент из палитры в панель формы нельзя. Платформа не переносит перетаскивание из своего дерева в webview, поэтому вставка сделана кликом. Внутри самой панели перетаскивание работает.
- В избранное / Убрать из избранного (звёздочка) закрепляет самые нужные компоненты.
- Открыть документацию открывает страницу компонента в панели документации; в подсказке видно краткое описание из доков.
Панель “Свойства”
Панель Свойства правит выбранный компонент. Из пункта Свойства дерева метаданных она же правит объекты метаданных: панель одна общая.
- Заданные сверху, все ниже. Секция Заданные перечисляет ключи, присутствующие в yaml; под ней сворачиваемые группы со всеми применимыми свойствами. Поиск фильтрует по имени и по текущему значению. Заполненная точка – значение задано в yaml, контурная – умолчание; Reset удаляет ключ.
- Типизированные редакторы из ui-схемы: перечисления – выпадающим списком;
Авто|Булево– переключателем из трёх состояний; числа; цвет (hex и образец, с пресетами в один клик из цветов самой формы и недавних); union-типы – парой Тип + Значение (Изображение,Фон); вложенные структуры (Шрифт) – подгруппами; многострочные строки. - Привязки. Переключатель у свойства меняет значение между литералом и привязкой (
=...). Дополнение привязки предлагает значения перечислений (=Перечисление.Значение), реквизиты объекта-владельца (=Объект.Реквизит), компоненты и их члены (=Компоненты.Кнопка.Значение) и привязки, уже встречающиеся в форме. - События. У свойства-события есть список подходящих обработчиков модуля. Пункт “создать
обработчик” пишет заготовку с правильной сигнатурой в
.xbslи переходит к ней рядом с панелью. В отличие от клика по узлу, это явная просьба написать новый код. Показать новый метод больше негде, поэтому модуль открывается даже из закрытого состояния. Сброс события спрашивает, что делать с методом: только отвязать или удалить обработчик из модуля. Во втором случае метод уходит вместе со своими аннотациями, а yaml и модуль правятся одним шагом отмены. - Объекты метаданных – так же. Для выбранного объекта (
Справочник,Документ,HttpСервис, …) применимые свойства берутся из метамодели платформы, поэтому секция Все свойства показывает и то, чего в файле ещё нет:Представление,Иерархический,ВводПоСтроке,КонтрольДоступа. Редакторы типизированы: три состояния у флага, список значений у перечисления, комбобокс у типа данных. Коллекции и вложенные блоки (Реквизиты,ТабличныеЧасти) показаны для сведения, правит их дерево метаданных. - Элементы коллекций – тоже. Реквизит, измерение, ресурс, поле структуры, реквизит табличной
части, значение перечисления, параметр – у каждого своя секция Все свойства. Класс элемента
метамодель называет сама, а там, где элементы коллекции разнотипные, выбирает его по имени:
встроенные
Код,НаименованиеиВладелецсправочника – собственные классы со своим набором свойств, уКодэтоДлина,Уникальность,Автонумерация. Без сгенерированных данных и у вложенного блока вне коллекции панель остаётся прежним плоским списком заданных свойств. - Индикатор слота. Свойство, являющееся дочерним слотом, помечено полосой и значком.
- Серийная правка. Выбранная строка свойства переживает переход на другой компонент того же типа, так что можно пройти по ряду похожих компонентов, меняя одно поле.
- Значения проверяются до записи; недопустимое показывается под полем, а не записывается.
Панель “Документация”
Контейнер Документация (1С:Элемент) – справка платформы, собранная из вашего дистрибутива 1С:Элемент. Именно сюда конструктор отвечает на вопрос “что это за компонент”: действие Открыть документацию у элемента палитры открывает страницу здесь же, не уводя из редактора. Подробно – Панель документации.
Структурный поиск
Структурный поиск по формам (кнопка поиска в шапке панели “Палитра” или палитра команд)
находит компоненты по формам проекта – по типу плюс предикаты ключ=значение. Результаты
открываются QuickPick с переходом к узлу.
Пресеты блоков
Сохранить как пресет блока сохраняет поддерево компонента под именем. Вставить пресет блока… вставляет его в любую форму (из шапки “Палитры” или контекстного меню узла), а Управление пресетами блоков… переименовывает и удаляет их. Пресеты – на пользователя.
Формы только для чтения
Для источника только для чтения – форма библиотеки из .xlib, представление git/diff или файл
с флагом read-only – панели показывают баннер и отключают редакторы, а правки структуры
отклоняются с сообщением. Просмотр такой формы не рискует случайной записью.
Примеры: что и как делается
Короткие сценарии – от задачи к действию. Каждый из них пишет минимальную правку в yaml (или в
парный .xbsl) и откатывается одним Ctrl+Z.
| Задача | Как |
|---|---|
| Вывести на форму реквизит объекта | В области Данные двойной клик по реквизиту (или перетащите его на узел структуры): появится Флажок для Булево и ПолеВвода с Значение: =Объект.Реквизит для остальных типов |
| Добавить компонент, которого ещё нет | Выделите контейнер в структуре и двойным кликом выберите компонент в Палитре; незнакомый компонент сначала посмотрите через Открыть документацию |
| Переставить поля местами | Выделите узел и жмите Alt+Вверх / Alt+Вниз – порядок в yaml меняется построчно |
| Разложить пару полей в строку | Выделите их (Ctrl-кликом), Обернуть в контейнер → Группа, у группы поставьте Компоновка: Горизонтальная |
| Повесить обработчик на кнопку | Выберите кнопку, в панели свойств у события ПриНажатии выберите создать обработчик: заготовка с правильной сигнатурой пишется в модуль формы, редактор переходит к ней |
| Убрать обработчик вместе с методом | Сброс (✕) у события спросит, отвязать или удалить метод из модуля; удаление уносит и его аннотации, yaml и модуль правятся одним шагом отмены |
| Выровнять десяток полей одним махом | Мультивыделение в структуре → Править выделенные вместе… → ключ (например РастягиватьПоГоризонтали) и значение сразу для всех |
| Перенести блок в другую форму | На узле Копировать фрагмент yaml (Ctrl+C), в другой форме – Вставить yaml из буфера (Ctrl+V); часто повторяемую компоновку сохраните как пресет блока |
| Найти в проекте все таблицы с фиксированной высотой | Структурный поиск по формам: тип Таблица плюс предикат Высота=200 |
| Разобраться в чужой большой форме | Курсор по yaml – структура и каркас идут за ним; Сфокусироваться на поддереве сузит дерево до одной ветки, фильтр оставит только именованные компоненты |
| Посмотреть форму библиотеки | Откройте её yaml из .xlib: панели покажут баннер “только для чтения”, правки будут отклонены |
Для скриптов и агентов (CLI, MCP)
Те же операции доступны вне интерфейса: CLI (xbsl form-tree, xbsl form-edit), инструменты
MCP (meta_component_tree, meta_add_component, meta_move_component, …) и LSP-запросы
(xbsl/formTree, xbsl/formNodeAt, xbsl/formEdit). См.
Руководство.
Происхождение
У платформы есть собственный веб-редактор. Этот конструктор – независимая реализация, написанная по открытой документации платформы, собственным извлечённым данным инструментария и наблюдению за конструкторами в универсальных IDE. Тексты, иконки и раскладки интерфейса – свои. См. NOTICE.