Как настроить условия видимости внешних печатных форм в 1С 8.3 на базе БСП?

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

Переход с платформы 1С 8.2 на 8.3, а точнее — переход со старых конфигураций (вроде БП 2.0 или ЗУП 2.5) на современные (БП 3.0, ЗУП 3.1, ERP 2.5), принес множество изменений в архитектуру. Одним из таких изменений стал механизм работы с дополнительными отчетами и обработками. Многие разработчики и администраторы столкнулись с тем, что привычная «галочка» или поле «Условие», позволявшее в пользовательском режиме скрыть печатную форму для конкретного подразделения или организации, просто исчезло.

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

Метод 1. Программная проверка условий внутри самой обработки («Мягкий» вариант)

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

Рассмотрим пример реализации в процедуре Печать модуля внешней обработки:


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

    // Далее идет стандартный код формирования табличного документа...
КонецПроцедуры

Этот метод хорош тем, что он универсален и легко переносится между базами. Однако он не решает проблему «замусоренности» меню «Печать», так как команда всё равно видна пользователю.

Метод 2. Использование расширения для управления списком команд

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

Для реализации динамической видимости нам потребуется создать расширение. Разберем два пути работы через расширение:

А. Перехват в модуле менеджера объекта

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


&После("ДобавитьКомандыПечати")
Процедура Расш_ДобавитьКомандыПечати(КомандыПечати)
    // Здесь можно проанализировать список команд и программно 
    // скрыть те, которые добавлены внешней обработкой, 
    // основываясь на параметрах сеанса или настройках пользователя.
КонецПроцедуры

Б. Использование общего модуля УправлениеПечатьюПереопределяемый

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

Проанализируем алгоритм: мы проверяем реквизиты документа (например, Организация или СуммаДокумента) и, если они не соответствуют бизнес-логике, удаляем соответствующую команду из таблицы КомандыПечати. Это позволяет скрыть «портянку» из 20 форм, оставив только актуальные для конкретного филиала или типа сделки.

Метод 3. Настройка прав доступа и разделение по ролям

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

  1. Откройте карточку внешней печатной формы в режиме «1С:Предприятие».
  2. Перейдите в раздел «Размещение».
  3. В колонке «Видимость» вы можете указать конкретных пользователей или группы пользователей.

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

Метод 4. Функциональные опции

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


ПараметрыРегистрации.Вставить("ФункциональныеОпции", "ИспользоватьИнтеграциюСМаркетплейсами");

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

Метод 5. Глобальная доработка через расширение (универсальный путь)

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

  1. Добавляет в справочник ДополнительныеОтчетыИОбработки новый реквизит (например, УсловиеВидимостиСтрока).
  2. Добавляет форму редактора этого условия (аналогично тому, как это было в 8.2).
  3. В общем модуле УправлениеПечатью перехватывает момент формирования команд и вычисляет значение этого условия через Вычислить() или через построитель запроса для текущей ссылки документа.

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

Подведем итог: штатной «галочки» для условий по реквизитам документа в 1С 8.3 (БСП) больше не существует. Однако, используя механизмы расширений и переопределяемых модулей, мы можем реализовать даже более гибкую логику, чем та, что была доступна в версии 8.2.

← На главную