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