Как программно ограничить вывод внешней печатной формы в УТ 11.4?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Управление доступностью команды через БСП

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

Этот метод эффективно работает, если условие можно проверить по реквизитам шапки документа. Разберем, как это реализуется в модуле менеджера объекта:


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

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

Использование обработчиков команд печати

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

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

КомандыПечати.Обработчик = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";

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

Управление процессом внутри процедуры печати

Если кнопка печати должна быть видна всегда, но при нажатии выполняется логическая проверка, мы можем управлять процессом непосредственно внутри процедуры формирования. Главное правило здесь — не вызывать процедуру УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию, если условия не соблюдены.

Рассмотрим, как правильно организовать такой цикл, чтобы система не выдавала исключение:


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

Важные рекомендации:

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

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

← На главную