Как скрыть кнопку Печать на форме документа в 1С

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При разработке или кастомизации конфигураций на платформе 1С:Предприятие часто возникает задача ограничить доступ пользователя к печати документов. Причины могут быть разными: от необходимости запретить печать непроведенных документов до сложного разграничения прав доступа. Однако способ решения этой задачи кардинально отличается в зависимости от того, используете вы обычные формы (как в БГУ 1.0, УПП 1.3 или БП 2.0) или управляемые формы (ЗУП 3.1, БП 3.0, ERP).

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

Решение для обычных форм (на примере БГУ 1.0)

Проанализируем ситуацию, с которой столкнулся автор темы. В обычных формах кнопка «Печать» чаще всего располагается внутри объекта типа КоманднаяПанель. Главная трудность здесь заключается в том, что у объекта КнопкаКоманднойПанели в этой версии платформы отсутствует свойство Видимость. Попытка обратиться к нему через код ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Видимость = Ложь; приведет к ошибке «Поле объекта не обнаружено (Видимость)».

Рассмотрим правильный алгоритм действий для скрытия кнопки в этом случае:

1. Удаление кнопки из коллекции

Поскольку мы не можем просто скрыть кнопку, нам необходимо физически удалить ее из коллекции кнопок командной панели при открытии формы. Разберем пример кода, который можно разместить в процедуре ПриОткрытии:


Процедура ПриОткрытии()
    // Ищем кнопку по имени в командной панели
    КнопкаПечать = ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Найти("Печать");
    
    Если КнопкаПечать <> Неопределено Тогда
        // Если кнопка найдена, удаляем ее из коллекции
        ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Удалить(КнопкаПечать);
    КонецЕсли;
КонецПроцедуры

2. Использование свойства Доступность

Если полное исчезновение кнопки нежелательно и вы хотите оставить ее видимой, но неактивной (серой), используйте свойство Доступность. Оно, в отличие от видимости, доступно для кнопок командной панели.

ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Доступность = Ложь; 3. Глобальные механизмы (Общие модули)

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

Решение для управляемых форм и БСП (ЗУП 3.1, БП 3.0)

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

Вариант 1. Модуль менеджера (наиболее правильный)

Выясним, как формируется список команд. В модуле менеджера каждого документа есть процедура ДобавитьКомандыПечати(КомандыПечати). Мы можем вмешаться в процесс формирования таблицы команд. Рассмотрим пример, как добавить условие видимости через функциональные опции или программный фильтр:


Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    // Стандартное добавление команды
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Представление = НСтр("ru = 'Акт об оказании услуг'");
    КомандаПечати.Идентификатор = "АктОбОказанииУслуг";
    
    // Если нужно скрыть команду при определенных условиях, 
    // можно просто не добавлять ее в таблицу КомандыПечати
    Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПечатьАктов") Тогда
        // Команда не будет добавлена и не появится на форме
    КонецЕсли;
КонецПроцедуры

Вариант 2. Скрытие элемента в «ПриСозданииНаСервере»

Если вам нужно скрыть кнопку на конкретной форме, не затрагивая другие места (например, скрываем только в форме документа, но оставляем в списке), используйте коллекцию Элементы. В управляемых формах у элементов есть свойство Видимость. Настроить отображение кнопок и полей на форме без изменения программного кода поможет универсальное расширение для настройки видимости и доступности элементов формы.

Разберем по шагам:

  1. Откройте форму документа в конфигураторе.
  2. Перейдите в процедуру ПриСозданииНаСервере.
  3. Определите имя элемента. Обычно БСП называет кнопку печати по шаблону ИмяФормы + КомандаПечати или помещает их в группу ПодменюПечать.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Скрытие всей группы (меню) Печать
    Если Элементы.Найти("ПодменюПечать") <> Неопределено Тогда
        Элементы.ПодменюПечать.Видимость = Ложь;
    КонецЕсли;
    
    // Скрытие конкретной кнопки, если известно ее имя
    Если РольДоступна("Менеджер") Тогда
        Элементы.ФормаКомандаПечатьАкт.Видимость = Ложь;
    КонецЕсли;
КонецПроцедуры

Вариант 3. Использование метода ИзменитьВидимостьКоманд

В БСП существует специальный механизм для управления видимостью стандартных команд. В процедуре ПриСозданииНаСервере можно вызвать метод УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма, Элементы.ГруппаВажныеКоманды). Чтобы программно повлиять на результат, можно использовать метод формы ИзменитьВидимостьКоманд(), передав туда массив имен команд, которые нужно скрыть.

Работа с ролями и правами

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

Также стоит обратить внимание на Командный интерфейс в редакторе формы. На закладке «Командный интерфейс» можно увидеть дерево всех команд, включая стандартные. Там можно вручную снять видимость для конкретных ролей в колонке «Видимость по ролям».

Итоги

Подведем итог:

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

← На главную