1с добавить команду в контекстное меню табличной части

Работа с контекстным меню элемента формы в 1С

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

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

Автоматическое создание контекстного меню

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

Допустим, условие задачи предполагает наличие контекстного меню у элемента формы «ТабличныйДокумент». Решим эту задачу для обычной формы внешней обработки.

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

В свойствах параметра «КонтекстноеМеню» можно определить типовой список команд, который существует на форме (Рис.2).

В нашем случае мы можем:

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

Решим эту же задачу для управляемых форм. Процесс создания формы и добавление на нее нового реквизита мы отдельно рассматривать не будем. Обратим внимание на тот факт, что не в свойствах поля (Рис.3), не в свойствах реквизита формы, не в свойствах элемента параметра, связанного с контекстным меню нет.

Включить контекстное меню можно, если по элементу формы «Реквизит1» кликнуть правой кнопкой мыши (Рис.4). В выпавшем списке выберем пункт «Показать контекстное меню».

После этого дерево элементов формы получит новую ветку (Рис.5)

Теперь рассмотрим процесс заполнения контекстного меню.

Ручное заполнение пунктов меню

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

Для управляемой формы набор команд, реализованных в выпадающем списке можно определить, перетаскиванием их с закладки «Команды» в соответствующую ветку дерева элементов (Рис.6).

При этом важно понимать, что в качестве пунктов меню могут выступать не только команды формы, но и стандартные и глобальные команды.

Программное добавление контекстного меню и списка команд в нем

Допустим, перед нами как разработчиками стоит задача в создании в контекстном меню команд, которые перемещают строки табличной части вверх и вниз по списку. Сами процедуры перемещения мы описывать не будем, рассмотрим только программное добавление соответствующих пунктов.

После этих действий контекстное меню будет выглядеть как на Рис.10

Если нам не нужны остальные действия с таблицей, и мы хотим, чтобы меню состояло только из наших пунктов, нам придется добавить еще несколько строк кода.

Первая мысль, которая приходит в голову – отключить автозаполнение. Если бы наше контекстное меню не было создано программно, мы бы так и сделали, однако попытки обнаружить соответствующее свойство у созданного с помощью кода меню (у автора статьи) не увенчались успехом. И было принято решение сделать все предопределенные строки списка невидимыми.

Для этого, перед вышеприведенным кодом был вставлен следующий цикл (Рис.11):

Таким образом, все подчиненные элементы контекстного меню стали не видны, и оно приобрело вид, как на Рис.12

Источник

Изменяющееся контекстное меню в 1С 8.3

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

1с добавить команду в контекстное меню табличной части

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

Создадим форму списка документа Приход, а на этой форме у таблицы Список создадим событие ПриАктивизацииЯчейки (в клиентском контексте).

1с добавить команду в контекстное меню табличной части

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

Получится следующий код:

Проверим, не содержится ли в текущей строке значение Неопределено, и если всё нормально, то вызовем процедуру в серверном контексте, в которой уже будем непосредственно работать с контекстным меню. Параметром процедуры будет ссылка на выделенный документ в таблице формы.

В этой процедуре создадим запрос, в котором получим сгруппированный список складов с наименованиями из документа прихода.

Внутри цикла выборки создаем имена для команд, которые связаны со складами, команды, а также элементы формы с типом КнопкаФормы, которые разместим в группе Элементы.Список.КонтекстноеМеню

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

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

1с добавить команду в контекстное меню табличной части

Будем заполнять эту таблицу в конце цикла.

Создадим обработчик события, который будет выполняться во время отработки команды из контекстного меню. Мы уже определили его имя, привязав к действию команды ранее. В этом обработчике нам надо получить ссылку на нужный склад, который связан с обрабатываемой командой. Для этого, используя параметр процедуры Элемент, получим имя отрабатываемой команды, по имени команды найдем из таблицы значений ссылку на нужный склад и откроем форму этого склада.

Нам осталось в начале процедуры ДобавитьСкладыВМенюСписка очищать команды и элементы формы, которые мы создали ранее.

Все теперь наше контекстное меню будет динамически изменяться в зависимости от того, какие склады имеются в табличной части документа.

Источник

Динамически изменяющееся контекстное меню в 1С 8.3

В одной практической задаче мне пришлось разрабатывать контекстное меню таблицы управляемой формы, которое должно было меняться в зависимости от данных, находящихся в этой таблице. Ниже приведен мой способ решения этой задачи. Я не претендую на «правильность» этого способа, поэтому, если кто-то знает, как решить эту задачу более «красиво» или «правильно», просьба написать свой вариант в комментариях к этой статье.

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

1с добавить команду в контекстное меню табличной части

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

Создадим форму списка документа Приход, а на этой форме у таблицы Список создадим событие ПриАктивизацииЯчейки (в клиентском контексте).

1с добавить команду в контекстное меню табличной части

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

Получится следующий код:

Проверим, не содержится ли в текущей строке значение Неопределено, и если всё нормально, то вызовем процедуру в серверном контексте, в которой уже будем непосредственно работать с контекстным меню. Параметром процедуры будет ссылка на выделенный документ в таблице формы.

В этой процедуре создадим запрос, в котором получим сгруппированный список складов с наименованиями из документа прихода.

Внутри цикла выборки создаем имена для команд, которые связаны со складами, команды, а также элементы формы с типом КнопкаФормы, которые разместим в группе Элементы.Список.КонтекстноеМеню.

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

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

1с добавить команду в контекстное меню табличной части

Будем заполнять эту таблицу в конце цикла.

Создадим обработчик события, который будет выполняться во время отработки команды из контекстного меню. Мы уже определили его имя, привязав к действию команды ранее. В этом обработчике нам надо получить ссылку на нужный склад, который связан с обрабатываемой командой. Для этого, используя параметр процедуры Элемент, получим имя отрабатываемой команды, по имени команды найдем из таблицы значений ссылку на нужный склад и откроем форму этого склада.

Нам осталось в начале процедуры ДобавитьСкладыВМенюСписка очищать команды и элементы формы, которые мы создали ранее.

Все теперь наше контекстное меню будет динамически изменяться в зависимости от того, какие склады имеются в табличной части документа.

Источник

Контекстное меню в 1С

1. Вызов контекстного меню

Как и при работе в Проводнике, контекстное меню в 1С также предусмотрено. Оно вызывается по щелчку правой кнопки мыши (поэтому его называют иногда «меню правого клика») по нужному реквизиту или строке табличной части. Контекстное меню содержит список команд, вызываемый пользователем для выбора необходимого действия над выбранным объектом. Контекстное меню в 1С заполняется автоматически стандартными командами. Набор команд зависит от места вызова контекстного меню. Меню называется контекстным как раз из-за того, что его состав зависит от контекста (места), в котором оно используется.

1с добавить команду в контекстное меню табличной части

1с добавить команду в контекстное меню табличной части

Рис. 1 Внешний вид контекстного меню в 1С

Контекстное меню позволяет экономить время пользователя, так как в нём расположены все необходимые и наиболее часто используемые в 1С 8 команды.

2. Пользовательское контекстное меню в 1С

Существует возможность настройки контекстного меню без использования кода. Для того чтобы добавить команду в контекстное меню, нужно перейти в режим Конфигуратор, открыть форму того объекта, где нужно будет установить своё контекстное меню.

1с добавить команду в контекстное меню табличной части

Рис. 2 Настройка контекстного меню

Затем нужно выбрать нужный реквизит, для которого будет установлено контекстное меню, и нажать по нему правой кнопкой мыши. В появившемся списке выбрать пункт «Показать контекстное меню».

1с добавить команду в контекстное меню табличной части

Рис. 3 Показать контекстное меню в 1С

У реквизита появится пункт «Контекстное меню». В него нужно добавить свои команды. Оно должно содержать команды, которые относятся к выделенному элементу. Не стоит забывать, что не нужно добавлять пункты в контекстное меню, которые вам не необходимы – это его перегружает.

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

1с добавить команду в контекстное меню табличной части

Рис. 4 Выбор команды для контекстного меню

Теперь этот пункт контекстного меню будет отображаться в пользовательском режиме.

1с добавить команду в контекстное меню табличной части

Рис. 5 Добавленный пункт контекстного меню

Если команд контекстного меню несколько, но они однотипные, имеет смысл их сгруппировать. Для этого переходим в конфигуратор, открываем нужную форму. Выбираем нужный элемент. Добавляем контекстное меню, либо выбираем созданное ранее. Нажав правой кнопкой мыши на него, добавляем «Группа → Подменю». Появится группа, в которую можно перетащить несколько команд. Для группы команд контекстного меню лучше сразу указать заголовок, который будет отображаться в пользовательском режиме.

1с добавить команду в контекстное меню табличной части

Рис. 6 Заголовок группы пунктов контекстного меню

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

1с добавить команду в контекстное меню табличной части

Рис. 7 Группа команд контекстного меню

В Проводнике Windows пункты меню сгруппированы по смыслу, группы разделены чертами. В 1С тоже можно сделать такое разделение.

1с добавить команду в контекстное меню табличной части

Рис. 8 Разделение команд контекстного меню

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

1с добавить команду в контекстное меню табличной части

Рис. 9 Разделение команд контекстного меню в 1С

3. «Горячие клавиши» в 1С

Для ещё более быстрой работы с командами предусмотрена возможность создания «горячих клавиш» в 1С.

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

Таблица с замерами

Из контекстного меню

Из данных таблицы можно сделать вывод, что медленнее всего осуществлять действия через команды, находящиеся в пункте «Ещё» Чуть скорее действия происходят, если вынести кнопки на форму. Однако если добавить кнопки в контекстное меню, то станет ещё быстрее. Самый высокоскоростной способ – «горячие клавиши».

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

1с добавить команду в контекстное меню табличной части

Рис. 10 Сравнение скорости выполнения операций разными способами с горячими клавишами в 1С

На графике видна разница между способами. «Горячие клавиши» гораздо эффективнее остальных способов.

Для создания собственных значений «горячих клавиш» нужно открыть конфигуратор, перейти в нужную форму. Выбрать вкладку «команды» на форме, вызвать панель со свойствами. С помощью пункта в конфигураторе 1С «Сочетание клавиш» можно внести различные клавиши для вызова команды в данной форме. Кроме символов можно использовать, например, ctrl + символ, shift + символ, BackSpace и т. д.

1с добавить команду в контекстное меню табличной части

Рис. 11 Сочетание клавиш в 1С

После этого в режиме 1С:Предприятие нужно нажать на выбранную клавишу или сочетание клавиш. Команда выполнится.

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

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

1с добавить команду в контекстное меню табличной части

Рис. 12 Сравнение скорости выполнения операций разными способами с горячими клавишами в 1С в виде графика

В случаях, если команда выполняется очень часто, стоит добавить для неё «горячую клавишу», так как это самый быстрый способ выбора команды.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *