Настройка команд и контекстного меню списка в 1С 8.3
Чтобы настроить контекстное меню и команды списка, сначала наведите порядок в структуре (группы/разделители/порядок), затем добавляйте свои команды и включайте условия Visible/Enabled, а динамическое меню делайте только там, где пункты реально зависят от текущей строки.
Оглавление
Что можно сделать без кода: порядок и группы
Начните со структуры — это даёт максимум пользы без программирования.
Рекомендуемая логика меню (чтобы оно не разрасталось):
- Быстрые действия (1–3 пункта): открыть/печать/создать на основании.
- Действия со строкой: изменить/копировать/удалить.
- Связи: открыть связанный объект, показать движения/состояние.
- Сервис: обновить, настройка списка, вывод списка.
Что обычно настраивают в конфигураторе:
- Разделители и группы команд: визуально отделяйте пользовательские команды от стандартных.
- Перенос стандартных команд: если нужно переместить «Удалить»/«Копировать» — добавьте кнопку, связанную с той же стандартной командой, и расположите её в нужной группе.
- Автозаполнение группы: удобно, но если требуется «свой порядок сверху» — иногда проще отключить автозаполнение у верхней группы и собрать шапку вручную, а стандартные команды держать во вложенной группе.
Если команда нужна «редко», чаще ей место в «Ещё/Все действия», а не в контекстном меню. Это снижает риск ошибочных кликов.
Когда без кода не обойтись
| Задача | Без кода | Нужен код |
|---|---|---|
| Добавить свои пункты/разделители, перегруппировать | Да | Иногда |
| Скрыть команду навсегда | Да | Да |
| Скрыть/заблокировать по статусу/выделению/правам | Частично | Да |
| Пункты меню зависят от выбранной строки | Нет | Да |
Условия видимости и доступности: правильный UX
Для пользователя важно, чтобы команды не «падали ошибкой», а корректно показывали контекст.
Visible = Ложь— когда команды в этом месте быть не должно (запрещено политикой, не относится к объекту).Enabled = Ложь— когда команда существует, но сейчас недоступна (нет выделения, неверный статус).
Практичные условия:
- нет выделенных строк / выделено несколько строк (а команда только для одной);
- объект помечен на удаление;
- документ проведён/закрыт, и операция запрещена;
- недостаточно прав (в таком случае чаще лучше скрывать).
Динамическое контекстное меню по строке (управляемые формы)
Динамика нужна, когда набор действий реально меняется от строки (например, разные «связанные объекты»).
Рабочий шаблон:
- храните ключ активной строки (например, ссылку) в переменной формы;
- при смене активной строки сравнивайте ключ — если строка не поменялась, меню не пересобирайте;
- перед пересборкой удаляйте ранее добавленные динамические элементы;
- все динамические команды направляйте в один обработчик, а различие передавайте через параметр/имя команды.
Не делайте тяжёлых обращений к данным «на каждый клик по строке». Лучше кэшировать результат или выполнять отложенно (иначе получите тормоза и мерцание меню).
Обычные формы: своё контекстное меню для табличного поля
Типовой подход — отключить авто-меню табличного поля и назначить своё меню (через командную панель как контейнер), оставив автозаполнение для стандартных действий.
Короткий пример (по смыслу, имена элементов адаптируйте под форму):
// ТабличноеПоле — элемент формы
ТабличноеПоле.АвтоКонтекстноеМеню = Ложь;
МенюТЧ = ЭлементыФормы.Добавить(Тип("КоманднаяПанель"), "МенюТЧ", Истина);
МенюТЧ.ИсточникДействий = ТабличноеПоле;
МенюТЧ.АвтоЗаполнение = Истина;
ТабличноеПоле.КонтекстноеМеню = МенюТЧ;
// Свои пункты сверху
МенюТЧ.Кнопки.Вставить(0, "Разделитель", ТипКнопкиКоманднойПанели.Разделитель);
МенюТЧ.Кнопки.Вставить(0, "МояКоманда", ТипКнопкиКоманднойПанели.Действие, "Моё действие");
Частые ошибки
- Перегружают контекстное меню (15–20 пунктов): пользователи перестают им пользоваться.
- Дублируют одну и ту же команду в трёх местах без причины (панель + «Ещё» + контекстное меню).
- Скрывают команды вместо
Enabled = Ложь: пользователь не понимает, что действие вообще бывает. - Пересобирают динамическое меню при каждом перемещении курсора по ячейкам одной строки.
- Отключают автозаполнение и полностью наполняют меню вручную без необходимости — сложнее поддерживать при изменениях.
FAQ
Можно ли полностью переупорядочить все стандартные команды?
Да, но чаще это требует отказа от автозаполнения и ручной сборки. Обычно достаточно групп, разделителей и «переназначения» пары ключевых команд.
Что важнее — кнопки на командной панели или контекстное меню?
Панель — для регулярных действий, контекстное меню — для действий «по месту» над выбранной строкой.
Динамику лучше делать через Visible/Enabled или через добавление/удаление команд?
Если набор пунктов стабилен — проще Visible/Enabled. Если пункты действительно разные (например, список подчинённых объектов формируется по данным строки) — уместнее добавлять/удалять динамически.