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