Как ограничить видимость внешней печатной формы только определенными организациями в 1С:ERP

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

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

Метод 1: Использование штатного механизма «Отборы назначения»

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

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

  1. Перейдем в раздел НСИ и администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.
  2. Найдем в списке нашу внешнюю печатную форму и откроем ее карточку.
  3. В табличной части Размещение (или в колонке Назначение в зависимости от версии) указаны объекты метаданных, к которым привязана форма (например, «Заказ клиента»).
  4. В колонке Назначение нажмем на гиперссылку Указать отбор. Если гиперссылка не видна, попробуем нажать на кнопку настройки списка или проверить права доступа.
  5. В открывшемся окне компоновки данных добавим новое условие. Выберем поле Организация, вид сравнения Равно и укажем конкретную организацию из справочника.
  6. Сохраним настройки и запишем элемент справочника.

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

Метод 2: Программная проверка внутри внешней обработки

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

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


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

Этот подход считается «полумерой», так как кнопка все равно висит в интерфейсе. Однако он гарантирует, что регламентированные документы не будут распечатаны по неверному шаблону.

Метод 3: Использование расширения для динамического управления видимостью

Если нам необходимо именно скрыть кнопку программно, но стандартных отборов БСП недостаточно (например, видимость зависит от роли пользователя или состояния документа), придется прибегнуть к расширению конфигурации. Разберем механизм работы подсистемы печати.

Список команд формируется в модуле менеджера объекта в процедуре ПриОпределенииКомандПечати. Мы можем перехватить этот процесс. Рассмотрим пример кода в расширении для модуля менеджера документа ЗаказКлиента:


&После("ПриОпределенииКомандПечати")
Процедура Расш1_ПриОпределенииКомандПечати(КомандыПечати)
    
    // Находим нашу внешнюю команду в коллекции
    Для Каждого Команда Из КомандыПечати Цикл
        Если Команда.Идентификатор = "МояУникальнаяВнешняяПечатнаяФорма" Тогда
            
            // Здесь можно прописать любую сложную логику
            // Например, скрыть команду, если текущий пользователь не в той организации
            Если НЕ ПользовательИмеетДоступКПечати() Тогда
                Команда.Видимость = Ложь;
            КонецЕсли;
            
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Обратите внимание: Свойство Видимость в структуре команды печати управляет именно отображением кнопки в подменю. Это наиболее гибкий, но и наиболее трудозатратный метод, требующий навыков разработки расширений.

Метод 4: Ограничение доступа через профили групп доступа

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

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

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

Резюме и рекомендации

Подводя итог, можно сказать, что выбор метода зависит от конкретных требований бизнеса:

Помните, что архитектура 1С:ERP построена на принципах минимизации изменений в коде основной конфигурации, поэтому использование штатных настроек БСП всегда должно быть в приоритете перед программированием.

← На главную