Настройка команд и контекстного меню списка в 1С 8.3

Чтобы настроить контекстное меню и команды списка, сначала наведите порядок в структуре (группы/разделители/порядок), затем добавляйте свои команды и включайте условия Visible/Enabled, а динамическое меню делайте только там, где пункты реально зависят от текущей строки.

Оглавление

Что можно сделать без кода: порядок и группы

Начните со структуры — это даёт максимум пользы без программирования.

Рекомендуемая логика меню (чтобы оно не разрасталось):

  1. Быстрые действия (1–3 пункта): открыть/печать/создать на основании.
  2. Действия со строкой: изменить/копировать/удалить.
  3. Связи: открыть связанный объект, показать движения/состояние.
  4. Сервис: обновить, настройка списка, вывод списка.

Что обычно настраивают в конфигураторе:

  • Разделители и группы команд: визуально отделяйте пользовательские команды от стандартных.
  • Перенос стандартных команд: если нужно переместить «Удалить»/«Копировать» — добавьте кнопку, связанную с той же стандартной командой, и расположите её в нужной группе.
  • Автозаполнение группы: удобно, но если требуется «свой порядок сверху» — иногда проще отключить автозаполнение у верхней группы и собрать шапку вручную, а стандартные команды держать во вложенной группе.

Если команда нужна «редко», чаще ей место в «Ещё/Все действия», а не в контекстном меню. Это снижает риск ошибочных кликов.

Когда без кода не обойтись

ЗадачаБез кодаНужен код
Добавить свои пункты/разделители, перегруппироватьДаИногда
Скрыть команду навсегдаДаДа
Скрыть/заблокировать по статусу/выделению/правамЧастичноДа
Пункты меню зависят от выбранной строкиНетДа

Условия видимости и доступности: правильный UX

Для пользователя важно, чтобы команды не «падали ошибкой», а корректно показывали контекст.

  • Visible = Ложь — когда команды в этом месте быть не должно (запрещено политикой, не относится к объекту).
  • Enabled = Ложь — когда команда существует, но сейчас недоступна (нет выделения, неверный статус).

Практичные условия:

  • нет выделенных строк / выделено несколько строк (а команда только для одной);
  • объект помечен на удаление;
  • документ проведён/закрыт, и операция запрещена;
  • недостаточно прав (в таком случае чаще лучше скрывать).

Динамическое контекстное меню по строке (управляемые формы)

Динамика нужна, когда набор действий реально меняется от строки (например, разные «связанные объекты»).

Рабочий шаблон:

  1. храните ключ активной строки (например, ссылку) в переменной формы;
  2. при смене активной строки сравнивайте ключ — если строка не поменялась, меню не пересобирайте;
  3. перед пересборкой удаляйте ранее добавленные динамические элементы;
  4. все динамические команды направляйте в один обработчик, а различие передавайте через параметр/имя команды.

Не делайте тяжёлых обращений к данным «на каждый клик по строке». Лучше кэшировать результат или выполнять отложенно (иначе получите тормоза и мерцание меню).

Обычные формы: своё контекстное меню для табличного поля

Типовой подход — отключить авто-меню табличного поля и назначить своё меню (через командную панель как контейнер), оставив автозаполнение для стандартных действий.

Короткий пример (по смыслу, имена элементов адаптируйте под форму):

// ТабличноеПоле — элемент формы
ТабличноеПоле.АвтоКонтекстноеМеню = Ложь;

МенюТЧ = ЭлементыФормы.Добавить(Тип("КоманднаяПанель"), "МенюТЧ", Истина);
МенюТЧ.ИсточникДействий = ТабличноеПоле;
МенюТЧ.АвтоЗаполнение = Истина;

ТабличноеПоле.КонтекстноеМеню = МенюТЧ;

// Свои пункты сверху
МенюТЧ.Кнопки.Вставить(0, "Разделитель", ТипКнопкиКоманднойПанели.Разделитель);
МенюТЧ.Кнопки.Вставить(0, "МояКоманда", ТипКнопкиКоманднойПанели.Действие, "Моё действие");

Частые ошибки

  • Перегружают контекстное меню (15–20 пунктов): пользователи перестают им пользоваться.
  • Дублируют одну и ту же команду в трёх местах без причины (панель + «Ещё» + контекстное меню).
  • Скрывают команды вместо Enabled = Ложь: пользователь не понимает, что действие вообще бывает.
  • Пересобирают динамическое меню при каждом перемещении курсора по ячейкам одной строки.
  • Отключают автозаполнение и полностью наполняют меню вручную без необходимости — сложнее поддерживать при изменениях.

FAQ

Можно ли полностью переупорядочить все стандартные команды?
Да, но чаще это требует отказа от автозаполнения и ручной сборки. Обычно достаточно групп, разделителей и «переназначения» пары ключевых команд.

Что важнее — кнопки на командной панели или контекстное меню?
Панель — для регулярных действий, контекстное меню — для действий «по месту» над выбранной строкой.

Динамику лучше делать через Visible/Enabled или через добавление/удаление команд?
Если набор пунктов стабилен — проще Visible/Enabled. Если пункты действительно разные (например, список подчинённых объектов формируется по данным строки) — уместнее добавлять/удалять динамически.