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