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