Как отключить встроенную печатную форму в 1С?

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

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

Отключение печатной формы в старых конфигурациях (на примере УТ 10.3)

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

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

  1. Откройте конфигуратор и найдите нужный документ в дереве метаданных (например, РеализацияТоваровУслуг).
  2. Откройте модуль объекта этого документа.
  3. Найдите функцию с именем ПолучитьСтруктуруПечатныхФорм. Именно она отвечает за формирование списка меню "Печать".
  4. Закомментируйте или удалите строку, которая добавляет неактуальную печатную форму в структуру.

Посмотрим на пример того, как это выглядит в коде:


Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
    СтруктураПечатныхФорм = Новый Структура;
    
    // Оставляем только новую форму по постановлению 1137
    СтруктураПечатныхФорм.Вставить("СчетФактура1137", "Счет-фактура по Постановлению 1137");
    
    // Старую форму закомментируем, чтобы она исчезла из меню пользователей
    // СтруктураПечатныхФорм.Вставить("СчетФактура", "Счет-фактура (старая)");
    
    Возврат СтруктураПечатныхФорм;
КонецФункции

Важное замечание: Использование внешних печатных форм (ВПФ) не отключает встроенные автоматически. Если вы просто добавите ВПФ, типовая форма останется в списке. Ее все равно придется скрывать в коде.

Разграничение прав доступа с помощью ролей

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


Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
    СтруктураПечатныхФорм = Новый Структура;
    СтруктураПечатныхФорм.Вставить("СчетФактура1137", "Счет-фактура по Постановлению 1137");
    
    // Проверяем роль перед добавлением старой формы в список
    Если РольДоступна("ПолныеПрава") Тогда
        СтруктураПечатныхФорм.Вставить("СчетФактура", "Счет-фактура (старая)");
    КонецЕсли;
    
    Возврат СтруктураПечатныхФорм;
КонецФункции

Скрытие печатных форм в пользовательском режиме (современные конфигурации БСП)

Перейдем к современным конфигурациям на управляемых формах (Бухгалтерия 3.0, УТ 11, ERP, УНФ). Здесь разработчики Библиотеки стандартных подсистем (БСП) предусмотрели удобные механизмы настройки интерфейса без программирования. Разберем два основных способа отключения через интерфейс:

  1. Через панель администрирования: Перейдите в раздел "Администрирование" -> "Печатные формы, отчеты и обработки" -> "Подменю Печать". В открывшемся дереве найдите нужный документ и снимите галочки с тех печатных форм, которые нужно отключить.
  2. Из формы документа: Откройте нужный документ. Нажмите кнопку "Еще" -> "Настройка команд". В появившемся окне снимите флажки с лишних форм. Настройку можно сохранить "Для текущего пользователя" или "Для всех".

Программное отключение в современных конфигурациях через расширения

Если по какой-то причине пользовательские настройки не подходят (например, нужно жестко заблокировать форму в расширении), мы можем вмешаться в программный процесс формирования команд. В современных конфигурациях за это отвечает модуль менеджера документа и процедура ДобавитьКомандыПечати.

Проанализируем код, который необходимо разместить в расширении для удаления конкретной печатной формы из коллекции КомандыПечати:


&После("ДобавитьКомандыПечати")
Процедура дор_ДобавитьКомандыПечати(КомандыПечати)
    // Вызываем удаление ненужной формы по ее идентификатору
    дор_УдалитьКомандуПечати(КомандыПечати, "СчетФактура");
КонецПроцедуры

Процедура дор_УдалитьКомандуПечати(КомандыПечати, Идентификатор)
    // Ищем команду в коллекции по идентификатору
    ИскомаяКоманда = КомандыПечати.Найти(Идентификатор, "Идентификатор");
    
    Если ИскомаяКоманда <> Неопределено Тогда
        // Если команда найдена, удаляем ее
        КомандыПечати.Удалить(ИскомаяКоманда);
    КонецЕсли;
КонецПроцедуры

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

Интересная "фича" с подменой команд

Посмотрим на нестандартный обходной путь, который работает в Бухгалтерии предприятия 3.0. Если вы создаете Внешнюю печатную форму, то в функции сведений о внешней обработке можно прописать реквизит ЗаменяемыеКоманды, указав в нем идентификатор встроенной печатной формы (например, подсмотренный в процедуре ДобавитьКомандыПечати в модуле менеджера).

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

← На главную