Разработка и Конфигурация · 10 мин
Как добавить кнопку в контекстное меню в 1С
Пошаговая инструкция: как добавить кнопку в контекстное меню в 1С через конфигуратор и программно. Команды, обработчики, типичные ошибки и проверка результата.
Контекстное меню в 1С — это меню, которое открывается по правому клику мыши на таблице, списке или другом элементе формы. Добавить туда собственную кнопку можно двумя способами: через конфигуратор, перетащив команду в дерево элементов формы, или программно — кодом в модуле формы. Оба варианта рабочие, но выбирать между ними нужно осознанно: изменение конфигурации требует снятия объекта с поддержки, а программный способ позволяет обойтись расширением или внешней обработкой.
Ниже разобрана полная цепочка действий: создание команды формы, привязка её к контекстному меню таблицы, написание обработчика, программное добавление кнопки и проверка результата. Примеры ориентированы на управляемые формы (тонкий клиент), поскольку именно они используются в современных конфигурациях на платформе 8.3.
Где в форме находится контекстное меню
В управляемой форме каждой таблице (динамическому списку, табличной части, таблице значений) платформа автоматически создаёт три связанных элемента: командную панель, контекстное меню и автозаполнение команд. В дереве элементов редактора формы они не видны как отдельные узлы, но платформа формирует их неявно, и именно туда можно помещать свои кнопки.
Программно контекстное меню таблицы с именем Список доступно как элемент с именем СписокКонтекстноеМеню. Командная панель — СписокКоманднаяПанель. Это соглашение об именовании важно запомнить: именно по этому пути кнопка добавляется кодом через свойство Родитель.
Контекстное меню есть не только у таблиц. Оно существует и у полей ввода, и у самой формы, но на практике чаще всего кнопки добавляют именно в меню списков и табличных частей — для действий над выбранной строкой: «Скопировать строку», «Открыть связанный документ», «Пересчитать сумму» и тому подобное.
Создание команды и обработчика в конфигураторе
Откройте нужную форму в конфигураторе (документ, справочник или внешняя обработка) и перейдите на закладку «Команды» → «Команды формы». Нажмите «Добавить» и задайте имя команды, например ПоказатьИсториюСтроки. В свойствах команды заполните «Заголовок» — именно этот текст увидит пользователь в контекстном меню.
В свойстве «Действие» нажмите кнопку с лупой — конфигуратор создаст заготовку обработчика в модуле формы. Для управляемых форм обработчик клиентской команды выглядит так:
&НаКлиенте
Процедура ПоказатьИсториюСтроки(Команда)
ТекущиеДанные = Элементы.Список.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ПоказатьПредупреждение(, "Выбрана строка: " + ТекущиеДанные.Наименование);
КонецПроцедуры
Обратите внимание на проверку ТекущиеДанные = Неопределено. Контекстное меню доступно даже при пустом списке, и обращение к полям несуществующей строки вызовет ошибку. Это одна из самых частых причин «падающих» кнопок у начинающих разработчиков.
Привязка кнопки к контекстному меню в дереве элементов
После создания команды перейдите на закладку «Форма» (дерево элементов). Найдите таблицу, к меню которой нужно добавить кнопку. Раскройте её узел — внутри обычно уже есть колонки и, возможно, командная панель. Правой кнопкой по узлу таблицы выберите «Добавить» → «Кнопка», либо просто перетащите команду мышью из панели команд на узел таблицы.
Выделите добавленную кнопку и в палитре свойств найдите свойство, определяющее её размещение. Чтобы кнопка попала именно в контекстное меню, а не в командную панель, убедитесь, что она расположена внутри узла КонтекстноеМеню таблицы. Если такого узла в дереве нет, добавьте группу вида «Контекстное меню» вручную: правый клик по таблице → «Добавить» → «Группа», в свойствах группы установите «Вид» = «Контекстное меню», и уже в неё перетащите кнопку.
В свойствах кнопки проверьте поле «ИмяКоманды» — там должна быть выбрана ваша команда. Также полезно заполнить «Картинка»: кнопки с иконками в контекстном меню воспринимаются заметно лучше, особенно если пунктов несколько.
- 1Откройте форму объекта в конфигураторе
- 2На закладке «Команды» создайте команду формы и задайте заголовок
- 3Создайте обработчик команды через свойство «Действие»
- 4В дереве элементов найдите таблицу и добавьте в неё группу вида «Контекстное меню», если её нет
- 5Перетащите команду в узел контекстного меню таблицы
- 6Проверьте свойство «ИмяКоманды» у кнопки и задайте картинку
- 7Обновите конфигурацию базы данных (F7) и проверьте в режиме предприятия
Программное добавление кнопки кодом
Если кнопку нужно добавить динамически — например, только при определённых условиях, или из расширения без изменения формы — используйте программный способ. Вся работа выполняется в обработчике ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// 1. Создаём команду формы
Команда = Команды.Добавить("ОткрытьКарточкуКонтрагента");
Команда.Заголовок = "Открыть карточку контрагента";
Команда.Действие = "Подключаемый_ОткрытьКарточкуКонтрагента";
// 2. Добавляем кнопку в контекстное меню таблицы «Список»
Кнопка = Элементы.Добавить("СписокОткрытьКарточкуКонтрагента",
Тип("КнопкаФормы"),
Элементы.СписокКонтекстноеМеню);
Кнопка.ИмяКоманды = "ОткрытьКарточкуКонтрагента";
КонецПроцедуры
Обработчик команды должен существовать в модуле формы заранее — платформа ищет его по имени, указанному в Команда.Действие:
&НаКлиенте
Процедура Подключаемый_ОткрытьКарточкуКонтрагента(Команда)
ТекущиеДанные = Элементы.Список.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ПоказатьЗначение(, ТекущиеДанные.Ссылка);
КонецПроцедуры
Ключевой момент — третий параметр метода Элементы.Добавить: это родительский элемент. Передав туда Элементы.СписокКонтекстноеМеню, вы помещаете кнопку именно в контекстное меню. Если передать Элементы.СписокКоманднаяПанель — кнопка окажется в командной панели списка.
Кнопка = Элементы.Добавить("МояКнопка", Тип("КнопкаФормы"), Элементы.СписокКонтекстноеМеню);
Кнопка.ИмяКоманды = "МояКоманда";Добавление кнопки через расширение конфигурации
Для типовых конфигураций (1С:Бухгалтерия, Управление торговлей, ЗУП) прямое изменение формы нежелательно: объект снимается с полной поддержки, и обновления становятся сложнее. Правильный путь — расширение конфигурации.
Создайте расширение (Конфигурация → Расширения конфигурации), добавьте в него заимствованную форму нужного объекта. Дальше действия аналогичны: создайте команду формы с обработчиком и перетащите её в контекстное меню таблицы. Программный вариант тоже работает — добавьте в расширение обработчик ПриСозданииНаСервере с аннотацией &После и создайте кнопку кодом.
Программный способ в расширении предпочтительнее заимствования формы целиком: чем меньше элементов формы заимствовано, тем ниже риск конфликта при обновлении типовой конфигурации, когда вендор изменит состав элементов той же формы.
Проверка результата и типичные ошибки
После добавления кнопки обновите конфигурацию базы данных и откройте форму в режиме 1С:Предприятие. Кликните правой кнопкой по таблице — ваш пункт должен появиться в меню. Проверьте три сценария: клик по заполненной строке, клик по пустому списку и работу кнопки при отборе, когда строки отфильтрованы.
Как проверить результат
Пункт меню отображается с заданным заголовком и картинкой
Кнопки нет — проверьте родителя (контекстное меню, а не командная панель) и права на команду
Выполняется обработчик, нет сообщений об ошибке
Ошибка «Процедура не обнаружена» — имя в Команда.Действие не совпадает с именем процедуры
Обработчик тихо завершается без ошибки
Ошибка обращения к полю — отсутствует проверка ТекущиеДанные = Неопределено
Частые вопросы
Можно ли добавить кнопку в контекстное меню без изменения конфигурации?
Да, если конфигурация поддерживает расширения (платформа 8.3.6 и новее). Создайте расширение и добавьте кнопку в нём — заимствовав форму или программно в обработчике ПриСозданииНаСервере. Совсем без доработки (чисто пользовательскими средствами) добавить произвольную кнопку нельзя: меню «Ещё» и настройки формы позволяют только скрывать и перемещать существующие команды.
Почему кнопка не появилась в меню после обновления конфигурации?
Чаще всего причины три: кнопка добавлена не в тот родительский элемент (командная панель вместо контекстного меню), у пользователя нет прав на объект команды, либо форма была открыта до обновления — закройте и откройте её заново. Также проверьте, не перекрывает ли расширение вашу доработку.
Как добавить кнопку в контекстное меню табличной части документа?
Точно так же, как для списка: табличная часть — это тоже таблица формы. В дереве элементов найдите узел табличной части (например, «Товары»), добавьте в него группу вида «Контекстное меню» и поместите туда кнопку с командой. В обработчике текущая строка доступна через Элементы.Товары.ТекущиеДанные.
Можно ли показывать кнопку только при определённых условиях?
Да. Установите свойство кнопки Видимость = Ложь программно и управляйте им в обработчиках формы — например, показывайте кнопку только для строк определённого типа. Удобно делать это в обработчике ПриАктивизацииСтроки таблицы, пересчитывая видимость при каждом перемещении курсора.
Как добавить картинку к пункту контекстного меню?
В конфигураторе — через свойство «Картинка» кнопки, выбрав картинку из общей библиотеки или загрузив свою в общие картинки. Программно: Кнопка.Картинка = БиблиотекаКартинок.ИмяКартинки. Картинка отображается слева от заголовка пункта меню.
Что важно запомнить
Кнопка в контекстное меню добавляется в два шага: создать команду формы с обработчиком и поместить кнопку в узел контекстного меню таблицы — в конфигураторе перетаскиванием или кодом через Элементы.Добавить с родителем «<ИмяТаблицы>КонтекстноеМеню». Для типовых конфигураций используйте расширение, а в обработчике всегда проверяйте ТекущиеДанные на Неопределено.