Убираем правый клик в формах, таблицах и отчётах 1С 8.3

· 9 мин

Содержание

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

Это настройка платформы, а не конкретной конфигурации: способ одинаков для Бухгалтерии, ЗУП, УТ и самописных решений. Но меню — только интерфейс. Сочетания клавиш, командная панель и кнопка Ещё живут своей жизнью. Если цель — запретить пользователю удаление, копирование или выгрузку данных, одного скрытия меню мало: нужны права.

Как устроено контекстное меню управляемой формы

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

По умолчанию у него включено свойство Автозаполнение. Платформа сама наполняет меню стандартными командами элемента:

  • 📋 для таблицы динамического списка: создать, скопировать, изменить, пометить на удаление, вывести список , настроить список;
  • ✏️ для таблицы значений или табличной части: добавить, скопировать, удалить, переместить строки;
  • 🔤 для поля ввода: вырезать, копировать, вставить, выделить всё;
  • 📄 для табличного документа: копирование, поиск и команды работы с областями.

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

Что пользователь потеряет вместе с меню

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

Практичный порядок такой:

  1. Спросите двух-трёх активных пользователей, что они вызывают правым кликом.
  2. Отключите автозаполнение.
  3. Верните в меню только эти команды вручную.

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

Отключаем контекстное меню таблицы формы в конфигураторе

Это основной способ. Подходит, когда форма ваша или вы готовы её дорабатывать.

  1. Откройте конфигуратор и найдите объект: справочник, документ, обработку, отчёт.
  2. Откройте нужную форму на вкладке Формы.
  3. В дереве элементов (левая верхняя панель редактора) раскройте таблицу, например Список.
  4. Выделите вложенный узел Контекстное меню (у списка он называется СписокКонтекстноеМеню).
  5. Откройте палитру свойств (Alt+Enter) и снимите флажок Автозаполнение.
  6. Сохраните конфигурацию и обновите конфигурацию базы данных (F7).

После этого правый клик по строке списка либо покажет пустое меню, либо меню не появится вовсе — зависит от того, остались ли в нём ваши кнопки.

Оставляем в меню только нужные команды

Полностью пустое меню неудобно. Пользователь привык открывать документ правым кликом или копировать строку. Схема такая:

  1. Отключите Автозаполнение, как описано выше.
  2. Перейдите в редакторе формы на вкладку Команды, затем Стандартные команды.
  3. Раскройте узел таблицы (например, Список) — там перечислены все её стандартные команды.
  4. Перетащите нужные команды, например Изменить и Скопировать, мышью на узел Контекстное меню в дереве элементов.

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

Когда форма типовая: правка через расширение

В типовой конфигурации на поддержке правка формы снимает её с поддержки или требует включить возможность изменения. Это усложняет каждое обновление. Удобнее расширение конфигурации (они появились в платформе 8.3.6):

  1. В конфигураторе откройте Конфигурация → Расширения конфигурации и создайте расширение.
  2. В дереве основной конфигурации найдите форму, щёлкните по ней правой кнопкой и выберите Добавить в расширение.
  3. В заимствованной форме в расширении выделите узел контекстного меню таблицы и снимите Автозаполнение.
  4. Обновите расширение в базе.

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

Программное отключение меню в событиях формы

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Полноправным пользователям меню оставляем
    Если РольДоступна("ПолныеПрава") Тогда
        Возврат;
    КонецЕсли;

    // Убираем стандартные команды из меню правой кнопки
    Элементы.Список.КонтекстноеМеню.Автозаполнение = Ложь;

    // Скрываем и кнопки, добавленные в меню вручную
    Для Каждого Элемент Из Элементы.Список.КонтекстноеМеню.ПодчиненныеЭлементы Цикл
        Элемент.Видимость = Ложь;
    КонецЦикла;

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

Имя роли ПолныеПрава есть в типовых конфигурациях на БСП. В самописной базе подставьте свою роль.

Если в форме несколько таблиц, повторите строку с Автозаполнение для каждой. Для поля ввода путь тот же: Элементы.ИмяПоля.КонтекстноеМеню.

Скрываем одну конкретную кнопку

Иногда мешает один пункт, например Пометить на удаление. Если в меню есть явная кнопка с этой командой, у неё своё имя в дереве элементов, и её прячут одной строкой:

Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Видимость = Ложь;

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

Программное изменение элементов делайте на сервере, в ПриСозданииНаСервере. Менять свойства меню на клиенте после открытия формы можно, но это лишние серверные вызовы и мелькание интерфейса.

Обычные формы (толстый клиент)

В старых конфигурациях на обычных формах механизм другой. У табличного поля есть свойство АвтоКонтекстноеМеню. Снимите его в палитре свойств элемента, и платформа перестанет строить стандартное меню. Обычные формы работают только в толстом клиенте, в тонком и веб-клиенте их не будет.

Меню табличного документа в отчётах и печатных формах

Отчёт или печатная форма выводится в поле табличного документа. У этого поля тоже есть узел Контекстное меню с флажком Автозаполнение. Отключается он точно так же: в дереве элементов формы отчёта раскройте поле результата (в отчётах на СКД оно обычно называется Результат) и снимите флажок.

Но у отчётов есть особенность. Пользователь копирует данные не только через меню:

  • ⌨️ Ctrl+C и Ctrl+A работают и без меню;
  • 💾 сохранение в файл и печать доступны через команды формы и кнопку Ещё;
  • 🖨️ в типовых конфигурациях есть отдельные кнопки печати и сохранения.

Поэтому для отчётов полезно сочетать несколько настроек:

Что сделатьГдеЧто даёт
Снять Автозаполнение у меню поляФорма отчётаПропадает меню правой кнопки
Включить ТолькоПросмотр у поляСвойства поля или кодНельзя править ячейки
Установить свойство Защита табличного документаКод формирования отчётаЗащищает документ от редактирования
Отозвать право Вывод у ролиРоли конфигурацииНет печати, сохранения в файл и копирования в буфер

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

Элементы.Результат.ТолькоПросмотр = Истина;
Результат.Защита = Истина;

Здесь Результат — реквизит формы типа ТабличныйДокумент, а Элементы.Результат — поле, которое его показывает. В вашей форме имена могут быть другими, проверьте их в дереве реквизитов.

Типовые формы отчётов

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

Права доступа: что реально закрывает действия пользователя

Скрытое меню — это косметика. Пользователь, которому нельзя удалять документы, всё равно нажмёт Del или найдёт команду в Ещё. Надёжный запрет дают роли.

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

  • 🗑️ Интерактивная пометка удаления — пропадёт пометка на удаление;
  • ❌ Интерактивное удаление — нельзя удалить объект напрямую;
  • ➕ Интерактивное добавление — нельзя создать новый элемент или документ;
  • ✏️ Изменение — объект откроется только для просмотра;
  • 📤 Вывод (на уровне корня конфигурации) — запрет печати, записи в файл и копирования в буфер обмена.

Чем RLS отличается от прав на команды

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

Используйте их вместе:

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

В типовых конфигурациях роли настраиваются через профили групп доступа в пользовательском режиме: Администрирование → Настройки пользователей и прав. Править роли в конфигураторе там не нужно, если готового профиля хватает.

Веб-клиент и тонкий клиент: в чём разница

Настройки меню, сделанные в форме, одинаково работают в тонком клиенте и в веб-клиенте. Форма одна, свойство Автозаполнение одно.

Отличия начинаются за пределами формы:

СитуацияТонкий клиентВеб-клиент
Правый клик по элементу формыМеню 1С по настройкам формыМеню 1С по настройкам формы
Правый клик вне элементовНичего лишнегоМожет появиться меню браузера
Копирование через Ctrl+CУправляется правом ВыводУправляется правом Вывод, плюс возможности браузера
Печать страницы, инструменты разработчикаНетДоступны средствами браузера

Меню браузера и его инструменты конфигурация 1С не контролирует. Если в веб-клиенте нужно жёстко ограничить пользователя, это задача групповых политик Windows или политик браузера, а не формы 1С.

В тонком клиенте собственного меню операционной системы поверх формы нет. Всё, что пользователь видит по правой кнопке, задаёт форма.

Частые ошибки при отключении меню

Сценарии, на которых чаще всего застревают:

Диагностика: выберите симптом

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

Можно ли отключить контекстное меню во всей базе одной настройкой?
Нет. Глобального флажка у платформы нет: меню настраивается в каждой форме для каждого элемента. Для массовых ограничений используйте права в ролях.
Как отключить меню только для одного пользователя?
Программно в ПриСозданииНаСервере по условию: роль, имя пользователя или значение функциональной опции. Через конфигуратор настройка действует на всех.
Влияет ли отключение меню на производительность?
Заметно нет. Меню строится на клиенте из уже описанных команд, его отключение не уменьшает число обращений к серверу.
Можно ли сделать это без конфигуратора, в пользовательском режиме?
Свойство автозаполнения меню доступно только при разработке формы: в конфигураторе или в расширении. В пользовательском режиме можно ограничить права через профили групп доступа.
Удаляется ли из меню пункт открытия формы на редактирование, если запрещено изменение?
Команда открытия остаётся, но объект откроется только для просмотра. Сохранить изменения пользователь не сможет.