При разработке в среде 1С:Предприятие 8.3 часто возникает задача: показывать или скрывать определенные команды печати в зависимости от состояния документа (например, скрывать печать акта, если услуга еще не оказана). Однако разработчики сталкиваются с проблемой — в процедуре ДобавитьКомандыПечати модуля менеджера нет прямого доступа к конкретному объекту, его ссылке или реквизитам. Разберем, как правильно реализовать эту логику, используя механизмы Библиотеки стандартных подсистем (БСП). Для более глубокого изучения возможностей библиотеки рекомендуем использовать справочник по методам БСП (с примерами использования).
Выясним причину: процедура ДобавитьКомандыПечати вызывается системой не для конкретного экземпляра документа, а глобально для типа объекта. Это происходит при инициализации интерфейса или кэшировании команд. В этот момент контекста конкретной формы просто не существует. Для решения этой задачи в БСП предусмотрен декларативный механизм условий видимости. Подобные задачи часто входят в общий комплекс работ, когда требуется программное изменение форм для ускорения и стандартизации разработки.
Рассмотрим основной способ решения задачи через метод УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды. Этот метод позволяет платформе самой определять, нужно ли показывать кнопку в конкретной форме, опираясь на данные реквизитов.
Проанализируем пример кода, который необходимо разместить в модуле менеджера объекта:
Процедура ДобавитьКомандыПечати(КомандыПечати)
// Добавляем саму команду
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ПлановыйРасчетСебестоимости";
КомандаПечати.Представление = НСтр("ru = 'Плановый расчет себестоимости'");
// Устанавливаем условие видимости: показывать только для определенного этапа производства
УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(
КомандаПечати,
"ЭтапПроизводства",
Справочники.ЭтапыЗаказов.Сборка,
ВидСравнения.Равно
);
КонецПроцедуры
В данном примере команда появится только в том случае, если реквизит ЭтапПроизводства в документе совпадает с указанной ссылкой. Если вам требуется реализовать подобную логику без внесения изменений в конфигурацию, можно использовать готовое расширение для настройки видимости команд печати и отчетов по условиям.
Посмотрим на ситуацию, когда пользователь меняет значение реквизита в форме, и мы хотим, чтобы кнопки печати появились или исчезли сразу, не дожидаясь записи документа. По умолчанию меню команд обновляется при открытии или после сохранения объекта.
Чтобы инициировать обновление немедленно, в модуле формы документа в обработчике ПриИзменении нужного реквизита следует вызвать клиентский метод БСП:
&НаКлиенте
Процедура ЭтапПроизводстваПриИзменении(Элемент)
// Форсируем обновление подключаемых команд на форме
ПодключаемыеКомандыКлиент.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
Это заставит систему заново вычислить условия видимости, которые мы задали в модуле менеджера, и перерисовать командную панель. В некоторых случаях, когда логика интерфейса становится слишком сложной, разработчикам помогает настройка доступности элементов формы у пользователей, позволяющая гибко управлять видимостью и правами доступа — есть инструмент настройки прав доступа к полям.
Разберем особенности работы со списками. Чтобы условия видимости корректно отрабатывали в динамическом списке, необходимо соблюдение двух условий:
ЭтапПроизводства), должен быть включен в выборку динамического списка.Если эти условия соблюдены, то при активации строки в списке состав кнопок в подменю «Печать» будет меняться динамически. Стоит отметить, что добавление реквизитов и элементов формы на управляемые формы может быть реализовано разными способами, включая динамическое создание элементов кодом.
Если вам требуется скрыть команду для всех непроведенных документов, проще всего использовать стандартное свойство команды ПроверкаПроведенияПередПечатью, установив его в значение Истина. В этом случае БСП сама заблокирует печать для черновиков — есть обработка управления возможностью печати документов.
При работе с внешними печатными формами процесс разработки может усложниться, поэтому универсальная форма отладки для внешней обработки печатных форм станет отличным подспорьем для быстрого тестирования функционала.
Для реализации сложной логики (например, если видимость зависит от прав доступа или сложных расчетов) можно использовать программное управление видимостью в ПриСозданииНаСервере, но декларативный метод через ДобавитьУсловиеВидимостиКоманды является наиболее предпочтительным и производительным в рамках экосистемы 1С.