В процессе сопровождения систем на базе 1С часто возникает задача изменить интерфейс документа или справочника, не внося изменений в основную конфигурацию. Это критично для тех, кто хочет оставить базу на «замке» для беспрепятственного обновления. Многие пользователи помнят времена 1С 7.7 или ранних версий 8.2, когда существовали механизмы внешних форм, и задаются вопросом: куда они исчезли и как реализовать подобное сейчас?
Разберем подробно современные способы «подмены» или создания внешней формы документа в среде 1С:Предприятие 8.3 (управляемые формы), проанализируем технические нюансы и выясним, почему старые методы больше не актуальны.
На сегодняшний день это самый правильный и поддерживаемый платформой метод. Расширения позволяют переопределить форму объекта, не меняя основную конфигурацию. Более того, во многих современных решениях (на базе БСП) расширения можно подключать напрямую в режиме «1С:Предприятие», что формально отвечает требованию «не залезать в конфигуратор».
Рассмотрим алгоритм действий по шагам:
.cfe), в который заимствуется нужный документ.Важный нюанс: Хотя для конечного пользователя это выглядит как «внешняя форма», технически расширение — это часть конфигурации, просто отделенная в другой слой. Это позволяет использовать весь контекст документа (Объект), стандартные команды и обработчики.
Проанализируем ситуацию, когда нам нужно программно решать, какую форму показать пользователю. В платформе 8.3 существует специализированное событие ОбработкаПолученияФормы. Оно располагается в модуле менеджера объекта (документа или справочника).
Выясним, как работает этот механизм. Когда система встречает команду ОткрытьФорму() или пользователь кликает по ссылке, 1С обращается к менеджеру объекта с вопросом: «Какую форму мне открыть?». В этот момент мы можем вмешаться. Рассмотрим пример кода, который можно разместить в модуле менеджера (или в расширении для модуля менеджера):
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаОбъекта" Тогда
// Проверяем условие, например, наличие настройки в константах
Если Константы.ИспользоватьВнешнююФормуЗаказа.Получить() Тогда
// Указываем путь к альтернативной форме (в расширении или общей форме)
ВыбраннаяФорма = "ОбщаяФорма.АльтернативнаяФормаЗаказа";
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Такой подход позволяет реализовать очень гибкую логику: разным пользователям показывать разные формы одного и того же документа в зависимости от их ролей или текущих настроек системы.
Некоторые специалисты предлагают использовать внешние обработки (.epf), которые открываются через Файл — Открыть. Проанализируем, почему это не является полноценной заменой формы документа:
ОбъектДокумент = Ссылка.ПолучитьОбъект(); ОбъектДокумент.Записать(РежимЗаписиДокумента.Проведение);.Однако, как временное решение для специфических задач (например, массовое редактирование или специфический АРМ), этот метод имеет право на жизнь. Посмотрим на пример вызова такой формы:
ПараметрыОткрытия = Новый Структура("Ключ", СсылкаНаДокумент);
ОткрытьФорму("ВнешняяОбработка.МояДоработка.Форма.ФормаРедактирования", ПараметрыОткрытия);
Разберем исторический контекст. В эпоху 1С 8.2 и ранних 8.3, когда управляемые формы только внедрялись, библиотеки (например, БСП ранних версий) не имели такого мощного механизма расширений. Разработчики часто создавали самописные подсистемы «Внешних форм объектов». В справочнике хранились пути к файлам .epf, а в формах списков писался код, перехватывающий открытие.
С появлением Расширений конфигурации надобность в таких сложных и хрупких конструкциях отпала. Платформа теперь предлагает штатный, безопасный и производительный способ кастомизации интерфейса. Поэтому функционал не «зарубили», его перевели на качественно новый технологический уровень.
Проанализируем плюсы и минусы каждого подхода, чтобы вы могли принять верное решение:
1. Расширения (Рекомендуется):
2. Программный перехват (ОбработкаПолученияФормы):
3. Внешние обработки (Для частных случаев):
Таким образом, если перед вами стоит задача сделать «внешнюю форму» документа, правильным ответом в 99% случаев будет создание расширения. Это обеспечит стабильность работы системы и простоту последующих обновлений программы.