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