При работе с типовыми отчетами в системе 1С:Предприятие 8.3 программисты часто сталкиваются с задачей настройки интерфейса под конкретные требования бизнеса. Одной из таких задач является управление доступностью и видимостью кнопок: как тех, что расположены на основной командной панели формы, так и тех, что появляются в контекстном меню при нажатии правой кнопкой мыши на ячейку отчета. Рассмотрим подробно, как это реализовано в управляемых формах и какие механизмы следует использовать для достижения результата.
Если мы работаем с типовым отчетом, важно понимать, что его форма может быть как уникальной (созданной специально для этого отчета), так и общей. Чаще всего типовые отчеты используют механизм Библиотеки стандартных подсистем (БСП), где состав кнопок формируется динамически. Проанализируем, где искать эти команды и как ими управлять.
Для начала заглянем в модуль формы отчета. Основное место для управления элементами — это обработчик события ПриСозданииНаСервере. В этом обработчике мы можем обратиться к коллекции элементов формы. Если кнопка добавлена в конфигураторе или программно до момента завершения этой процедуры, ее можно найти в коллекции Элементы.
Рассмотрим пример кода для поиска и скрытия конкретной команды в командной панели:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Пытаемся найти команду в командной панели формы
НайденнаяКоманда = Элементы.ФормаКоманднаяПанель.ПодчиненныеЭлементы.Найти("ОтобратьПоФильтру");
Если НайденнаяКоманда <> Неопределено Тогда
НайденнаяКоманда.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
Однако стоит учитывать важный нюанс: в современных конфигурациях многие кнопки (например, «Выбрать вариант» или «Рассылка отчетов») добавляются подсистемами БСП уже после инициализации стандартных элементов. Если прямой поиск в ПриСозданииНаСервере не дает результата, это может означать, что элемент вложен в группу (подменю) или создается динамически. В таком случае рекомендуется выполнять рекурсивный обход всех подчиненных элементов групп командной панели.
Часто пользователи путают кнопки формы с командами, которые появляются при нажатии правой кнопкой мыши на ячейку табличного документа (отчета). Эти команды называются контекстными командами расшифровки. Проанализируем ситуацию: если нужных кнопок нет в коллекции Элементы формы, значит, они генерируются платформой автоматически на основе данных расшифровки.
Существует два основных события для управления этим поведением:
Enter.Чтобы изменить или полностью скрыть системное контекстное меню, нам необходимо использовать обработчик ОбработкаДополнительнойРасшифровки. Рассмотрим, как это сделать программно:
&НаКлиенте
Процедура РезультатОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
// Отключаем стандартное меню платформы
СтандартнаяОбработка = Ложь;
// Здесь мы можем сформировать свой список команд
СписокКоманд = Новый СписокЗначений;
СписокКоманд.Добавить("ОткрытьКарточку", "Открыть основную запись");
// Вызываем свое меню и обрабатываем выбор
ВыбранноеДействие = ВыбратьИзМеню(СписокКоманд, Элемент);
Если ВыбранноеДействие <> Неопределено Тогда
// Логика обработки выбранной команды
КонецЕсли;
КонецПроцедуры
Установив параметр СтандартнаяОбработка = Ложь, мы полностью блокируем появление системных кнопок типа «Отфильтровать», «Упорядочить» и прочих, оставляя управление интерфейсом за собой.
Иногда требуется не просто скрыть команду, а сделать так, чтобы контекстное меню вообще не предлагало действий, связанных с данными. Выясним причину, по которой это может быть полезно: если в ячейке нет значения расшифровки, платформа не будет предлагать связанные с ней команды.
Рассмотрим радикальный, но эффективный метод очистки расшифровки «на лету» при активизации ячейки:
&НаКлиенте
Процедура РезультатПриАктивизацииОбласти(Элемент)
// Элемент - это поле табличного документа на форме
ТекущаяОбласть = Элемент.ТекущаяОбласть;
// Если нужно убрать возможность расшифровки (и контекстное меню) для всех ячеек
ТекущаяОбласть.Расшифровка = Неопределено;
КонецПроцедуры
Этот метод полезен, когда отчет должен служить исключительно для визуализации данных без возможности провалиться в детальные записи или использовать стандартные механизмы фильтрации по значению ячейки.
При работе с типовыми решениями (УТ 11, ERP, БП 3.0) нельзя забывать про влияние Библиотеки стандартных подсистем. Командная панель отчета часто управляется через процедуру ВариантыОтчетов.ПриСозданииНаСервере. Если вам нужно скрыть кнопку, которая добавляется БСП, правильнее всего будет найти в модуле менеджера отчета процедуру НастроитьВариантыОтчета и изменить настройки прав или функциональных опций для конкретного варианта.
Также проверим настройки самого поля табличного документа на форме. Свойства ТолькоПросмотр и Защита напрямую влияют на состав доступных команд. Например, если у элемента Результат (табличный документ) установлено свойство ТолькоПросмотр = Истина, то команды редактирования, такие как «Очистить» или «Вставить», автоматически исчезнут из контекстного меню, даже без написания программного кода в обработчиках расшифровки.
Подводя итог, разберем по шагам алгоритм действий программиста:
Элементы в процедуре ПриСозданииНаСервере или ПриОбновленииСоставаКоманд.ОбработкаДополнительнойРасшифровки с установкой СтандартнаяОбработка = Ложь.ТолькоПросмотр и роли пользователя (например, роль «Вывод на принтер, в файл, в буфер обмена»).Используя эти инструменты, вы сможете гибко настраивать интерфейс типовых отчетов, делая их максимально удобными и безопасными для конечного пользователя.