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