Убираем правый клик в формах, таблицах и отчётах 1С 8.3
Содержание
Контекстное меню в управляемой форме 1С 8.3 отключают в конфигураторе: откройте форму, раскройте в дереве элементов нужную таблицу или поле, выделите вложенный узел Контекстное меню и снимите у него флажок Автозаполнение. Стандартные команды из меню правой кнопки пропадут. Если нужно оставить пару пунктов, перетащите их в это меню вручную из списка стандартных команд элемента.
Это настройка платформы, а не конкретной конфигурации: способ одинаков для Бухгалтерии, ЗУП, УТ и самописных решений. Но меню — только интерфейс. Сочетания клавиш, командная панель и кнопка Ещё живут своей жизнью. Если цель — запретить пользователю удаление, копирование или выгрузку данных, одного скрытия меню мало: нужны права.
Как устроено контекстное меню управляемой формы
У каждого элемента формы, который умеет показывать меню, есть подчинённый узел Контекстное меню. Он виден в дереве элементов формы, если раскрыть таблицу, поле ввода или поле табличного документа. Узел ведёт себя как командная панель.
По умолчанию у него включено свойство Автозаполнение. Платформа сама наполняет меню стандартными командами элемента:
- 📋 для таблицы динамического списка: создать, скопировать, изменить, пометить на удаление, вывести список , настроить список;
- ✏️ для таблицы значений или табличной части: добавить, скопировать, удалить, переместить строки;
- 🔤 для поля ввода: вырезать, копировать, вставить, выделить всё;
- 📄 для табличного документа: копирование, поиск и команды работы с областями.
Состав зависит от типа элемента и его свойств. Например, если у таблицы снят флажок ИзменятьСоставСтрок, команд добавления и удаления строк в меню не будет и без правки самого меню.
Что пользователь потеряет вместе с меню
Перед отключением прикиньте, какими пунктами реально пользуются. У динамического списка через правую кнопку часто вызывают Вывести список — так бухгалтер выгружает список документов в табличный документ, а оттуда в Excel. Там же бывает быстрый отбор по значению ячейки. Уберёте меню целиком — получите звонки «пропала кнопка».
Практичный порядок такой:
- Спросите двух-трёх активных пользователей, что они вызывают правым кликом.
- Отключите автозаполнение.
- Верните в меню только эти команды вручную.
Ваши собственные кнопки, которые вы добавили в контекстное меню руками, автозаполнением не управляются. Флажок Автозаполнение убирает только то, что платформа добавляет сама.
Отключаем контекстное меню таблицы формы в конфигураторе
Это основной способ. Подходит, когда форма ваша или вы готовы её дорабатывать.
- Откройте конфигуратор и найдите объект: справочник, документ, обработку, отчёт.
- Откройте нужную форму на вкладке
Формы. - В дереве элементов (левая верхняя панель редактора) раскройте таблицу, например
Список. - Выделите вложенный узел
Контекстное меню(у списка он называетсяСписокКонтекстноеМеню). - Откройте палитру свойств (
Alt+Enter) и снимите флажокАвтозаполнение. - Сохраните конфигурацию и обновите конфигурацию базы данных (
F7).
После этого правый клик по строке списка либо покажет пустое меню, либо меню не появится вовсе — зависит от того, остались ли в нём ваши кнопки.
Оставляем в меню только нужные команды
Полностью пустое меню неудобно. Пользователь привык открывать документ правым кликом или копировать строку. Схема такая:
- Отключите
Автозаполнение, как описано выше. - Перейдите в редакторе формы на вкладку
Команды, затемСтандартные команды. - Раскройте узел таблицы (например,
Список) — там перечислены все её стандартные команды. - Перетащите нужные команды, например
ИзменитьиСкопировать, мышью на узелКонтекстное менюв дереве элементов.
Получится меню из двух пунктов, остальное скрыто. Порядок кнопок меняется перетаскиванием внутри узла.
Когда форма типовая: правка через расширение
В типовой конфигурации на поддержке правка формы снимает её с поддержки или требует включить возможность изменения. Это усложняет каждое обновление. Удобнее расширение конфигурации (они появились в платформе 8.3.6):
- В конфигураторе откройте
Конфигурация → Расширения конфигурациии создайте расширение. - В дереве основной конфигурации найдите форму, щёлкните по ней правой кнопкой и выберите
Добавить в расширение. - В заимствованной форме в расширении выделите узел контекстного меню таблицы и снимите
Автозаполнение. - Обновите расширение в базе.
Если свойство в заимствованной форме недоступно для изменения в вашей версии платформы, переходите к программному способу из следующего раздела: код в расширении работает так же, как в самой форме.
Программное отключение меню в событиях формы
Код удобен, когда меню нужно скрывать не всем, а по условию: по роли, по пользователю, по состоянию документа. Самое подходящее место — обработчик ПриСозданииНаСервере, он выполняется до того, как форма появится на экране.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Полноправным пользователям меню оставляем
Если РольДоступна("ПолныеПрава") Тогда
Возврат;
КонецЕсли;
// Убираем стандартные команды из меню правой кнопки
Элементы.Список.КонтекстноеМеню.Автозаполнение = Ложь;
// Скрываем и кнопки, добавленные в меню вручную
Для Каждого Элемент Из Элементы.Список.КонтекстноеМеню.ПодчиненныеЭлементы Цикл
Элемент.Видимость = Ложь;
КонецЦикла;
КонецПроцедуры
Имя роли ПолныеПрава есть в типовых конфигурациях на БСП. В самописной базе подставьте свою роль.
Если в форме несколько таблиц, повторите строку с Автозаполнение для каждой. Для поля ввода путь тот же: Элементы.ИмяПоля.КонтекстноеМеню.
Скрываем одну конкретную кнопку
Иногда мешает один пункт, например Пометить на удаление. Если в меню есть явная кнопка с этой командой, у неё своё имя в дереве элементов, и её прячут одной строкой:
Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Видимость = Ложь;
Точное имя кнопки посмотрите в дереве элементов формы. Если кнопки там нет, команда попала в меню через автозаполнение, и отдельно её не скрыть. Тогда отключите автозаполнение и добавьте вручную только нужные команды.
Программное изменение элементов делайте на сервере, в ПриСозданииНаСервере. Менять свойства меню на клиенте после открытия формы можно, но это лишние серверные вызовы и мелькание интерфейса.
Обычные формы (толстый клиент)
В старых конфигурациях на обычных формах механизм другой. У табличного поля есть свойство АвтоКонтекстноеМеню. Снимите его в палитре свойств элемента, и платформа перестанет строить стандартное меню. Обычные формы работают только в толстом клиенте, в тонком и веб-клиенте их не будет.
Меню табличного документа в отчётах и печатных формах
Отчёт или печатная форма выводится в поле табличного документа. У этого поля тоже есть узел Контекстное меню с флажком Автозаполнение. Отключается он точно так же: в дереве элементов формы отчёта раскройте поле результата (в отчётах на СКД оно обычно называется Результат) и снимите флажок.
Но у отчётов есть особенность. Пользователь копирует данные не только через меню:
- ⌨️
Ctrl+CиCtrl+Aработают и без меню; - 💾 сохранение в файл и печать доступны через команды формы и кнопку
Ещё; - 🖨️ в типовых конфигурациях есть отдельные кнопки печати и сохранения.
Поэтому для отчётов полезно сочетать несколько настроек:
| Что сделать | Где | Что даёт |
|---|---|---|
Снять Автозаполнение у меню поля | Форма отчёта | Пропадает меню правой кнопки |
Включить ТолькоПросмотр у поля | Свойства поля или код | Нельзя править ячейки |
Установить свойство Защита табличного документа | Код формирования отчёта | Защищает документ от редактирования |
Отозвать право Вывод у роли | Роли конфигурации | Нет печати, сохранения в файл и копирования в буфер |
Программно режим только просмотра для результата задаётся так:
Элементы.Результат.ТолькоПросмотр = Истина;
Результат.Защита = Истина;
Здесь Результат — реквизит формы типа ТабличныйДокумент, а Элементы.Результат — поле, которое его показывает. В вашей форме имена могут быть другими, проверьте их в дереве реквизитов.
Типовые формы отчётов
В конфигурациях на БСП большинство отчётов открывается в одной общей форме отчёта. Правка этой формы изменит поведение всех таких отчётов сразу. Если нужно убрать меню в одном отчёте, сделайте ему собственную форму или добавьте в расширении условие по имени отчёта.
Права доступа: что реально закрывает действия пользователя
Скрытое меню — это косметика. Пользователь, которому нельзя удалять документы, всё равно нажмёт Del или найдёт команду в Ещё. Надёжный запрет дают роли.
Платформа сама убирает из меню и панелей команды, на которые у пользователя нет прав. Достаточно снять в роли нужные флажки:
- 🗑️
Интерактивная пометка удаления— пропадёт пометка на удаление; - ❌
Интерактивное удаление— нельзя удалить объект напрямую; - ➕
Интерактивное добавление— нельзя создать новый элемент или документ; - ✏️
Изменение— объект откроется только для просмотра; - 📤
Вывод(на уровне корня конфигурации) — запрет печати, записи в файл и копирования в буфер обмена.
Чем RLS отличается от прав на команды
RLS — ограничение доступа на уровне записей. Оно решает, какие строки пользователь вообще увидит или сможет изменить: например, документы только своей организации. На состав контекстного меню RLS не влияет. Команда Изменить в меню останется, но для чужой записи платформа выдаст ошибку нарушения прав.
Используйте их вместе:
- Роли — убрать целые действия (удаление, вывод, добавление).
- RLS — ограничить, к каким записям эти действия применяются.
- Отключение меню — убрать лишнее из интерфейса, чтобы не путать пользователя.
В типовых конфигурациях роли настраиваются через профили групп доступа в пользовательском режиме: Администрирование → Настройки пользователей и прав. Править роли в конфигураторе там не нужно, если готового профиля хватает.
Веб-клиент и тонкий клиент: в чём разница
Настройки меню, сделанные в форме, одинаково работают в тонком клиенте и в веб-клиенте. Форма одна, свойство Автозаполнение одно.
Отличия начинаются за пределами формы:
| Ситуация | Тонкий клиент | Веб-клиент |
|---|---|---|
| Правый клик по элементу формы | Меню 1С по настройкам формы | Меню 1С по настройкам формы |
| Правый клик вне элементов | Ничего лишнего | Может появиться меню браузера |
Копирование через Ctrl+C | Управляется правом Вывод | Управляется правом Вывод, плюс возможности браузера |
| Печать страницы, инструменты разработчика | Нет | Доступны средствами браузера |
Меню браузера и его инструменты конфигурация 1С не контролирует. Если в веб-клиенте нужно жёстко ограничить пользователя, это задача групповых политик Windows или политик браузера, а не формы 1С.
В тонком клиенте собственного меню операционной системы поверх формы нет. Всё, что пользователь видит по правой кнопке, задаёт форма.
Частые ошибки при отключении меню
Сценарии, на которых чаще всего застревают: