Переход с конфигурации 1С:Управление торговлей 10.3 на версию 11.4 часто вызывает вопросы у разработчиков и администраторов, особенно в части работы с дополнительными отчетами и обработками. В старой версии существовал удобный механизм «Отбор», который позволял визуально настроить правила отображения внешней печатной формы (ВПФ) в зависимости от организации, контрагента или других реквизитов документа. В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), такой штатный конструктор в интерфейсе отсутствует. Рассмотрим подробно, как решить задачу ограничения видимости печатных форм в новых реалиях.
Проанализируем ситуацию: в УТ 11.4 список команд печати формируется динамически при открытии формы документа или при нажатии кнопки «Печать». Система обращается к справочнику ДополнительныеОтчетыИОбработки и подтягивает все формы, привязанные к данному типу объекта. Отсутствие визуального фильтра «из коробки» означает, что логику фильтрации теперь необходимо переносить либо в код самой ВПФ, либо в расширение конфигурации.
Самый простой, но «пассивный» способ — вставить проверку условий непосредственно в процедуру печати внутри внешней обработки. В этом случае кнопка будет видна всем, но при попытке печати для «чужого» контрагента система выдаст предупреждение или просто не сформирует макет.
Разберем пример кода, который можно разместить в модуле внешней обработки:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Пройдем по массиву объектов и проверим соответствие организации
Индекс = МассивОбъектов.Количество() - 1;
Пока Индекс >= 0 Цикл
ОбъектСсылка = МассивОбъектов[Индекс];
// Условие: форма доступна только для организации "Ромашка"
Если ОбъектСсылка.Организация.Наименование <> "ООО Ромашка" Тогда
МассивОбъектов.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
Если МассивОбъектов.Количество() = 0 Тогда
ТекстСообщения = "Данная печатная форма предназначена только для ООО Ромашка";
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Возврат;
КонецЕсли;
// Далее стандартная логика формирования макета...
КонецПроцедуры
Важный нюанс: этот метод не скрывает пункт из меню кнопки «Печать», что может привести к загромождению интерфейса, если специфических форм много (как в случае, когда у 15 контрагентов свои уникальные акты).
Чтобы не плодить десятки пунктов в меню печати, проанализируем ситуацию с точки зрения эргономики. Вместо регистрации 15 разных ВПФ, создадим одну общую под названием, например, «Акт (по форме контрагента)».
Внутри этой обработки в функции СведенияОВнешнейОбработке мы регистрируем только одну команду. А внутри модуля объекта реализуем выбор макета в зависимости от данных документа:
Партнер или Организация указаны в документе.Если...ИначеЕсли или соответствие (Структура), чтобы выбрать нужный двоичный макет, зашитый в обработку.Этот подход значительно чистит интерфейс пользователя, оставляя лишь одну логичную кнопку.
Выясним, как сделать так, чтобы кнопка действительно исчезала. Для этого нам потребуется создать расширение. В БСП за формирование команд печати отвечает общий модуль УправлениеПечатью. Нам необходимо перехватить формирование списка команд для конкретных объектов.
Рассмотрим алгоритм действий:
ДобавитьКомандыПечати в модуле менеджера соответствующего документа (например, Документ.РеализацияТоваровУслуг).&После или &Вместо, чтобы программно удалить из коллекции команд те ВПФ, которые не соответствуют текущему объекту.Однако работа с ВПФ через УправлениеПечатью сложнее, так как команды ВПФ добавляются платформой автоматически. Более правильным будет программное вмешательство в момент формирования меню на форме документа. Вы можете использовать метод ПриСозданииНаСервере или специальные подписки БСП, чтобы анализировать реквизиты открытого документа и программно устанавливать свойство Видимость для кнопок печати.
Посмотрим на штатную альтернативу, предложенную в обсуждении. В 1С:УТ 11 существует функционал «Печать комплектов документов». Для каждого контрагента (Партнера) можно настроить индивидуальный набор печатных форм, которые должны выводиться на печать.
Шаги настройки:
Минус этого способа: формы все равно останутся в общем списке под кнопкой «Печать», но при выборе команды «Комплект документов» система сама подставит нужные бланки, что минимизирует риск ошибки оператора.
Для программиста 1С важно помнить структуру регистрации обработки. В современных версиях БСП параметры видимости можно частично задавать в структуре ПараметрыРегистрации, однако динамический отбор по значениям реквизитов (как Organization) в этой функции не предусмотрен. Она выполняется один раз при загрузке обработки в справочник.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Акт специальной формы (Ромашка)'");
НоваяКоманда.Идентификатор = "СпецАктРомашка";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
Проанализировав все варианты, можно сделать вывод: если вам требуется точное повторение функционала УТ 10.3 (скрытие кнопки по условию), наиболее профессиональным решением будет использование расширения, которое внедряет логику отборов в механизм БСП. Если же вы хотите избежать изменения типового кода, оптимальным выбором станет создание единой универсальной печатной формы с программным выбором макета внутри кода обработки. Это сохранит интерфейс «чистым» и упростит поддержку системы в будущем.