Как подменить типовую печатную форму внешней в управляемом приложении без изменения конфигурации и использования расширений

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

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

Постановка задачи и анализ ограничений

Представим ситуацию: нам нужно заменить стандартную форму «Счет на оплату» на модифицированную внешнюю форму. При этом редактировать основную конфигурацию нельзя, а платформа ограничена старым режимом совместимости. Основная сложность заключается в том, что в управляемом приложении команды печати формируются динамически. Простое добавление внешней обработки в справочник «Дополнительные отчеты и обработки» часто приводит к тому, что в меню «Печать» появляются две кнопки: типовая и внешняя, что путает пользователей.

Разберем по шагам, какие механизмы позволят нам полностью скрыть типовую форму и оставить только нашу, внешнюю.

Способ 1. Использование параметра «Заменяемые команды» в коде обработки

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

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


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплатуПокупателю");
    ПараметрыРегистрации.Наименование = "Счет на оплату (внешний)";
    ПараметрыРегистрации.Версия = "1.1";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    // Добавление команды печати
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Счет на оплату (внешний)'");
    НоваяКоманда.Идентификатор = "СчетНаОплатуВнешний";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    // Ключевая строка для подмены:
    // Здесь нужно указать ИДЕНТИФИКАТОР типовой команды
    НоваяКоманда.ЗаменяемыеКоманды = "ПФ_MXL_СчетНаОплату"; 
    
    Возврат ПараметрыРегистрации;
КонецФункции

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

Способ 2. Настройка видимости команд через интерфейс «1С:Предприятие»

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

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

Таким образом, типовая команда исчезнет из интерфейса, а внешняя команда, имеющая свое уникальное имя, останется единственным вариантом для пользователя. Этот метод хорош тем, что он не зависит от корректности заполнения поля ЗаменяемыеКоманды в коде обработки.

Способ 3. Использование механизма пользовательских макетов печати

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

Проанализируем алгоритм действий:

  1. Зайдем в Администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм.
  2. Найдем в списке макет нужного документа (например, «Заказ клиента»).
  3. Нажмем кнопку Изменить.
  4. Система создаст копию макета, которую можно редактировать прямо в режиме «1С:Предприятие» (менять шрифты, логотипы, переставлять области).
  5. После сохранения выберем вариант использования Использовать измененный макет.

С этого момента типовая команда печати начнет использовать ваш отредактированный вариант. Это самый безопасный и простой способ «подмены», если правки носят косметический характер.

Почему одинаковый Идентификатор не работает?

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

Типовые команды жестко прописаны в метаданных или модуле менеджера, а внешние команды добавляются динамически при открытии формы документа. В итоге в коллекции команд формы появляются два объекта с похожими свойствами, и система отрисовывает обе кнопки. Единственный способ связать их — это использование механизма ЗаменяемыеКоманды, который дает системе явное указание: «Если эта внешняя форма подключена, скрыть типовую с указанным ID».

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

Для успешной подмены печатной формы в условиях закрытой конфигурации и режима совместимости рекомендуем придерживаться следующего плана:

  1. Если нужно изменить только внешний вид — используйте Пользовательские макеты печати.
  2. Если нужна сложная логика — создавайте внешнюю печатную форму и обязательно прописывайте идентификатор типовой команды в поле ЗаменяемыеКоманды в функции СведенияОВнешнейОбработке.
  3. Если программная привязка не сработала — используйте ручную настройку видимости в разделе Подменю «Печать».
  4. Всегда проверяйте актуальность регистрации обработки в справочнике после внесения изменений в ее код. При изменении функции СведенияОВнешнейОбработке файл в справочнике нужно обновить (перевыбрать), иначе новые параметры регистрации не вступят в силу.

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

← На главную