К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как добавить команду в контекстное меню в 1С

Как добавить команду в контекстное меню формы в 1С через конфигуратор: общие команды, команды формы, обработчики, типовые ошибки и проверка результата.

Контекстное меню в 1С — это меню, которое открывается по правой кнопке мыши на элементе формы: таблице, поле, списке документов. Добавить туда свою команду можно двумя путями: через общие команды конфигурации, если действие нужно в нескольких местах, или через команды конкретной формы, если логика привязана к одному объекту. Оба способа выполняются в конфигураторе без изменения типового кода платформы.

Выбор способа зависит от задачи. Если команда должна работать с текущей строкой таблицы формы (например, «Показать движения документа» или «Скопировать строку»), удобнее команда формы с обработчиком в модуле формы. Если команда универсальна — например, открыть внешний отчёт или обработку — проще создать общую команду и добавить её в командный интерфейс нужных форм.

Ниже разобраны оба варианта с точными действиями в конфигураторе, примерами кода обработчиков и способами проверить результат. Материал ориентирован на управляемые формы (такси-интерфейс), поскольку именно они используются в актуальных конфигурациях.

Где в 1С находится контекстное меню и как оно устроено

В управляемой форме у каждого элемента, отображающего данные (таблица, поле, декорация), есть свой набор меню: командная панель, контекстное меню и меню «Ещё». Контекстное меню заполняется платформой автоматически — туда попадают стандартные команды (копировать, вывести список, изменить) и команды, которые разработчик разместил явно.

Источниками команд для контекстного меню служат три механизма: стандартные команды платформы, общие команды конфигурации и команды самой формы. Платформа сама решает, какие из общих команд показать, исходя из настроек командного интерфейса формы и типа параметра команды. Команды формы попадают в меню только тогда, когда разработчик перетащил их в соответствующую ветку дерева элементов.

Важно понимать: контекстное меню в дереве элементов формы существует только у тех элементов, для которых оно осмысленно — у таблиц и полей. У групп и декораций без данных ветки «Контекстное меню» может не быть.

Добавление команды формы в контекстное меню таблицы

Это самый частый сценарий: нужно, чтобы по правой кнопке на строке табличной части или списка появлялся свой пункт. Работа выполняется в редакторе формы.

Откройте конфигуратор, найдите нужный объект (документ, справочник, регистр), раскройте ветку «Формы» и откройте основную форму. В редакторе формы перейдите на вкладку «Команды» в правой части окна — там отображаются команды формы. Нажмите кнопку добавления, задайте имя команды (например, ПоказатьДвижения), заголовок и при необходимости картинку.

В палитре свойств команды найдите свойство «Действие» и нажмите кнопку открытия — конфигуратор создаст шаблон обработчика в модуле формы. Выберите размещение «На клиенте» или «На сервере» в зависимости от логики: обращение к данным и запросы выполняются на сервере, открытие форм — на клиенте.

Затем вернитесь на вкладку с деревом элементов формы, найдите нужную таблицу, раскройте её ветку «Контекстное меню» и перетащите мышью созданную команду из списка команд в эту ветку. Платформа создаст кнопку, связанную с командой. Сохраните форму и обновите конфигурацию базы данных.

Порядок действий
  1. 1
    Откройте форму объекта в конфигураторе
  2. 2
    На вкладке «Команды» создайте новую команду и задайте заголовок
  3. 3
    В свойстве «Действие» создайте обработчик и напишите код
  4. 4
    Перетащите команду в ветку «Контекстное меню» нужной таблицы в дереве элементов
  5. 5
    Сохраните форму, обновите конфигурацию БД и проверьте в режиме предприятия

Пример кода обработчика команды

Обработчик команды получает доступ к текущей строке таблицы через свойство Элементы.ИмяТаблицы.ТекущиеДанные. Ниже пример команды, которая открывает отчёт по движениям документа, выбранного в списке.

&НаКлиенте

Процедура ПоказатьДвижения(Команда)

ТекущиеДанные = Элементы.Список.ТекущиеДанные;

Если ТекущиеДанные = Неопределено Тогда

ПоказатьПредупреждение(, "Строка не выбрана");

Возврат;

КонецЕсли;

ПараметрыФормы = Новый Структура("Документ", ТекущиеДанные.Ссылка);

ОткрытьФорму("Отчет.ДвиженияДокумента.Форма", ПараметрыФормы);

КонецПроцедуры

Обратите внимание на проверку ТекущиеДанные = Неопределено: если пользователь вызвал меню на пустой области таблицы, обращение к полям строки вызовет ошибку. Такая проверка обязательна для любой команды, работающей с текущей строкой.

Если команде нужны данные, которых нет в клиентском контексте (результаты запросов, объектные данные), вызывайте из клиентского обработчика серверную процедуру с директивой &НаСервере и передавайте туда ссылку, а не коллекцию данных формы.

Добавление общей команды в контекстное меню

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

Создайте общую команду, укажите заголовок и в свойстве «Тип параметра команды» выберите типы объектов, для которых команда доступна — например, ДокументСсылка.РеализацияТоваровУслуг. Именно тип параметра определяет, в каких списках платформа предложит команду. В модуле команды напишите обработчик, который получает параметр (ссылку на объект или массив ссылок).

Чтобы команда попала именно в контекстное меню конкретной формы, откройте форму, в палитре свойств формы откройте «Командный интерфейс» и найдите свою команду в разделе глобальных команд. Установите видимость для нужной группы. В ряде случаев удобнее вручную перетащить общую команду из панели команд в ветку контекстного меню таблицы — тогда расположение контролируется явно.

&НаКлиенте

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

ПараметрыФормы = Новый Структура("Ссылка", ПараметрКоманды);

ОткрытьФорму("Обработка.СервисДокументов.Форма", ПараметрыФормы,

ПараметрыВыполненияКоманды.Источник);

КонецПроцедуры

Сравнение вариантов

Команда формы

Подходит для действий, привязанных к одной форме и её данным. Обработчик в модуле формы, полный доступ к реквизитам. Ограничение: не переиспользуется в других формах.

Общая команда

Подходит для действий, нужных в нескольких объектах. Видимость управляется типом параметра команды. Ограничение: нет прямого доступа к данным формы, только к переданному параметру.

Параметризуемая команда объекта

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

Настройка видимости, картинки и сочетания клавиш

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

Сочетание клавиш задаётся в свойствах команды (например, Ctrl+Shift+D). Проверьте, что выбранное сочетание не пересекается со стандартными командами платформы и браузерными сочетаниями, если пользователи работают через веб-клиент.

Видимость команды можно управлять программно: в обработчике ПриОткрытии или при изменении данных формы устанавливайте Элементы.ИмяКнопки.Видимость = Ложь для ситуаций, когда команда бессмысленна — например, для нового незаписанного объекта. Альтернатива — функциональные опции, если видимость зависит от настроек системы, а не от состояния формы.

Если команда нужна и в командной панели, и в контекстном меню, не создавайте две команды: перетащите одну и ту же команду в обе ветки дерева элементов. Платформа создаст две кнопки, связанные с одним обработчиком, и логика не будет дублироваться.
ПЗ
Практическое замечание

Проверка результата и типичные ошибки

После обновления конфигурации базы данных откройте форму в режиме предприятия и кликните правой кнопкой по строке таблицы. Пункт должен появиться в меню с заданным заголовком. Выполните команду на заполненной строке, на пустой области таблицы и на новом незаписанном объекте — все три сценария должны отрабатывать без ошибок платформы.

Если команда не появилась, проверьте три вещи: сохранена ли форма и обновлена ли конфигурация БД; перетащена ли команда именно в ветку контекстного меню, а не только создана в списке команд; не отключена ли видимость кнопки в свойствах или кодом. Для общих команд дополнительно проверьте тип параметра — если тип не включает объект списка, платформа скроет команду.

Типичные ошибки
01
Команда создана на вкладке «Команды», но не перетащена в дерево элементов — в интерфейсе её нет
02
Обращение к ТекущиеДанные без проверки на Неопределено — ошибка при вызове меню на пустой области
03
Серверный вызов с передачей ДанныеФормы вместо ссылки — ошибка преобразования данных
04
Для общей команды не заполнен тип параметра — команда нигде не отображается
05
Дублирование логики в двух командах вместо одной команды в двух ветках — рассинхронизация поведения
Контрольные точки

Как проверить результат

Пункт в контекстном меню
Норма

Пункт виден по правой кнопке на строке таблицы с заданным заголовком

Тревожный признак

Пункт отсутствует или виден только в командной панели

Выполнение на строке
Норма

Обработчик получает данные текущей строки и выполняет действие

Тревожный признак

Ошибка «Поле объекта не обнаружено» или пустой параметр

Вызов на пустой области
Норма

Команда корректно сообщает, что строка не выбрана

Тревожный признак

Ошибка платформы и аварийное закрытие обработчика

Ограничения и когда нужен другой подход

Контекстное меню формы — не единственный способ вызвать действие. Если команд много, часть лучше убрать в подменю «Ещё», чтобы не перегружать меню правой кнопки: туда попадают редко используемые операции. Критичные для сценария действия, наоборот, выносят в командную панель таблицы.

Для расширения типовой конфигурации без её изменения используйте механизм расширений: в расширении заимствуется форма, и команда добавляется в неё тем же способом. Это сохраняет конфигурацию на поддержке и упрощает обновления. Прямая доработка типовой формы оправдана только когда расширение по каким-то причинам неприменимо.

Учтите ограничение: в обычных формах (устаревший интерфейс) механика другая — там контекстное меню настраивается через свойство «КонтекстноеМеню» элемента формы и источники действий. Инструкции из этой статьи применимы к управляемым формам.

Итог

Что важно запомнить

Команда попадает в контекстное меню только после перетаскивания в ветку «Контекстное меню» элемента формы. Для локальных задач используйте команду формы, для повторяющихся — общую команду с типом параметра. Всегда проверяйте ТекущиеДанные на Неопределено и тестируйте команду на копии базы.

Частые вопросы

Команда создана, но в контекстном меню не появляется. Что проверить?

Убедитесь, что команда перетащена именно в ветку «Контекстное меню» таблицы в дереве элементов, а не просто добавлена в список команд формы. Затем проверьте, что форма сохранена, конфигурация базы данных обновлена, а видимость кнопки не отключена в свойствах или программно.

Как передать в обработчик команды ссылку на текущий документ списка?

Используйте Элементы.Список.ТекущиеДанные.Ссылка — для динамических списков это поле доступно всегда. Предварительно проверьте, что ТекущиеДанные не равны Неопределено, иначе при вызове меню на пустой области возникнет ошибка.

Можно ли добавить команду в контекстное меню без изменения типовой конфигурации?

Да, через расширение конфигурации. В расширении заимствуется нужная форма, в неё добавляется команда и обработчик, после чего команда размещается в контекстном меню. Типовая конфигурация при этом остаётся на поддержке и обновляется штатно.

Почему общая команда не отображается в нужном списке?

Наиболее частая причина — не заполнено или неверно заполнено свойство «Тип параметра команды». Платформа показывает общую команду только в тех формах, где текущий объект соответствует указанному типу. Добавьте в тип нужную ссылку документа или справочника.

Как убрать стандартную команду из контекстного меню?

Стандартные команды платформы скрываются через свойства таблицы формы: например, свойство «ИзменятьСоставСтрок» управляет командами добавления и удаления, а положение кнопок «Найти» и «Отменить поиск» настраивается отдельно. Полностью убрать системные пункты вроде «Вывести список» штатными средствами нельзя.

Где размещать обработчик — на клиенте или на сервере?

Ориентируйтесь на действие: открытие форм, предупреждения и работа с интерфейсом — на клиенте; запросы к базе, изменение данных, объектные операции — на сервере. Типовой шаблон: клиентский обработчик проверяет текущую строку и вызывает серверную процедуру, передавая ссылку.