Как настроить видимость внешних печатных форм по условию в 1С:Управление торговлей 11.4?

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

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

Причина изменений и архитектурный подход БСП

Проанализируем ситуацию: в УТ 11.4 список команд печати формируется динамически при открытии формы документа или при нажатии кнопки «Печать». Система обращается к справочнику ДополнительныеОтчетыИОбработки и подтягивает все формы, привязанные к данному типу объекта. Отсутствие визуального фильтра «из коробки» означает, что логику фильтрации теперь необходимо переносить либо в код самой ВПФ, либо в расширение конфигурации.

Решение 1. Программная проверка внутри внешней печатной формы

Самый простой, но «пассивный» способ — вставить проверку условий непосредственно в процедуру печати внутри внешней обработки. В этом случае кнопка будет видна всем, но при попытке печати для «чужого» контрагента система выдаст предупреждение или просто не сформирует макет.

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


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    // Пройдем по массиву объектов и проверим соответствие организации
    Индекс = МассивОбъектов.Количество() - 1;
    Пока Индекс >= 0 Цикл
        ОбъектСсылка = МассивОбъектов[Индекс];
        
        // Условие: форма доступна только для организации "Ромашка"
        Если ОбъектСсылка.Организация.Наименование <> "ООО Ромашка" Тогда
            МассивОбъектов.Удалить(Индекс);
        КонецЕсли;
        
        Индекс = Индекс - 1;
    КонецЦикла;

    Если МассивОбъектов.Количество() = 0 Тогда
        ТекстСообщения = "Данная печатная форма предназначена только для ООО Ромашка";
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
        Возврат;
    КонецЕсли;
    
    // Далее стандартная логика формирования макета...
КонецПроцедуры

Важный нюанс: этот метод не скрывает пункт из меню кнопки «Печать», что может привести к загромождению интерфейса, если специфических форм много (как в случае, когда у 15 контрагентов свои уникальные акты).

Решение 2. Создание «умной» универсальной печатной формы

Чтобы не плодить десятки пунктов в меню печати, проанализируем ситуацию с точки зрения эргономики. Вместо регистрации 15 разных ВПФ, создадим одну общую под названием, например, «Акт (по форме контрагента)».

Внутри этой обработки в функции СведенияОВнешнейОбработке мы регистрируем только одну команду. А внутри модуля объекта реализуем выбор макета в зависимости от данных документа:

  1. При нажатии кнопки «Печать» система передает ссылку на документ.
  2. В коде обработки мы определяем, какой Партнер или Организация указаны в документе.
  3. Используем конструкцию Если...ИначеЕсли или соответствие (Структура), чтобы выбрать нужный двоичный макет, зашитый в обработку.

Этот подход значительно чистит интерфейс пользователя, оставляя лишь одну логичную кнопку.

Решение 3. Использование расширения для управления видимостью (Advanced)

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

Рассмотрим алгоритм действий:

  1. Создаем расширение конфигурации.
  2. В расширении находим процедуру ДобавитьКомандыПечати в модуле менеджера соответствующего документа (например, Документ.РеализацияТоваровУслуг).
  3. Используем аннотацию &После или &Вместо, чтобы программно удалить из коллекции команд те ВПФ, которые не соответствуют текущему объекту.

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

Решение 4. Настройка через механизм «Печать комплектов»

Посмотрим на штатную альтернативу, предложенную в обсуждении. В 1С:УТ 11 существует функционал «Печать комплектов документов». Для каждого контрагента (Партнера) можно настроить индивидуальный набор печатных форм, которые должны выводиться на печать.

Шаги настройки:

  1. Зарегистрируйте все необходимые ВПФ в системе.
  2. Перейдите в настройки печати комплектов для конкретного партнера.
  3. Выберите только те формы, которые нужны именно ему.

Минус этого способа: формы все равно останутся в общем списке под кнопкой «Печать», но при выборе команды «Комплект документов» система сама подставит нужные бланки, что минимизирует риск ошибки оператора.

Техническая справка: Функция СведенияОВнешнейОбработке

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


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

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

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

← На главную