Как скрыть отображение кнопки печати во внешней печатной форме при определенном условии

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

При разработке внешних печатных форм (ВПФ) в среде 1С:Предприятие 8.3 часто возникает задача динамического управления видимостью команд. Например, мы хотим, чтобы кнопка конкретной печатной формы отображалась в документе только в том случае, если заполнены определенные реквизиты или соблюдены бизнес-условия. Разберем подробно, как это реализовать, используя механизмы Библиотеки стандартных подсистем (БСП).

Понимание механизма работы команд печати

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

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

Способ 1. Использование колонки УсловияВидимости в сведениях о внешней обработке

Это наиболее эффективный и современный метод. В модуле объекта внешней обработки существует обязательная функция СведенияОВнешнейОбработке. В этой функции мы формируем таблицу команд. Современные версии БСП позволяют задать условия видимости прямо при регистрации команды.

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


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    // Определение основных параметров регистрации...
    // ...
    
    // Создаем таблицу команд
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = "Заявка на пломбиры";
    НоваяКоманда.Идентификатор = "ЗаявкаНаПломбиры";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.ПоказыватьОповещение = Истина;
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    // Добавляем условие видимости: команда будет видна, только если реквизит 
    // "НаправленияДляРассчета" равен значению "Пломбиры"
    НоваяКоманда.УсловияВидимости = "НаправленияДляРассчета = 'Пломбиры'";
    
    ПараметрыРегистрации.Команды.Загрузить(ТаблицаКоманд);
    
    Возврат ПараметрыРегистрации;
КонецФункции

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

Способ 2. Настройка видимости через пользовательский интерфейс

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

  1. Перейдите в раздел Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.
  2. Откройте карточку вашей внешней печатной формы.
  3. В списке команд (внизу страницы) найдите колонку «Видимость, Быстрый доступ».
  4. Нажмите на гиперссылку (обычно там написано «Настроить»).
  5. В открывшемся окне вы можете задать условия отображения кнопки в зависимости от состояния объекта.

Этот способ удобен тем, что условия можно менять «на лету» без пересборки файла внешней обработки.

Способ 3. Программное управление через расширение формы документа

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

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


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

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

Способ 4. Использование метода ДобавитьУсловиеВидимостиКоманды

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

В модуле менеджера документа (или в расширении этого модуля) в процедуре ДобавитьКомандыПечати можно использовать следующий подход:


// В процедуре ДобавитьКомандыПечати(КомандыПечати)
Команда = КомандыПечати.Добавить();
// ... заполнение параметров команды ...

// Устанавливаем условие программно
УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(Команда, "НаправленияДляРассчета", "Пломбиры");

Этот метод аналогичен первому способу, но применяется для команд, которые жестко «зашиты» в конфигурацию или добавляются через программный интерфейс менеджера объекта.

Резюме и рекомендации

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

  1. В первую очередь используйте поле УсловияВидимости в функции СведенияОВнешнейОбработке вашей ВПФ. Это самый чистый и надежный способ.
  2. Если вы не хотите менять код обработки, воспользуйтесь стандартными настройками в справочнике Дополнительные отчеты и обработки в режиме 1С:Предприятие.
  3. Прибегайте к расширению формы документа только в самых крайних случаях, когда логика скрытия требует сложных вычислений, недоступных для простых строковых условий.

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

← На главную