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