Как правильно добавить и настроить новую форму выбора через расширение в 1С 8.3?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с расширениями в 1С — это современный и безопасный стандарт доработки конфигураций. Однако начинающие разработчики часто сталкиваются с ситуацией, когда внесенные изменения (например, создание новой формы выбора) не отображаются в пользовательском режиме или применяются некорректно. Рассмотрим подробно, как правильно реализовать подмену формы выбора и разберем причины «странного» поведения платформы.

Способ 1. Настройка через свойства метаданных в расширении

Самый простой способ — указать платформе, какую форму использовать по умолчанию. Разберем пошагово, как это сделать в расширении:

  1. Добавим необходимый справочник в расширение.
  2. Создадим в расширении новую форму (например, ФормаВыбораСпециальная) или скопируем существующую из основной конфигурации для доработки.
  3. В окне свойств справочника внутри расширения найдем раздел Представление.
  4. В поле Основная форма выбора выберем нашу новую форму.

Важный момент: если вы хотите, чтобы форма открывалась только в конкретном документе, этот метод не подойдет, так как он меняет форму выбора для всей системы в целом. Чтобы привязать форму к конкретному полю ввода в документе, нужно зайти в свойства реквизита документа (в расширении) и в свойстве Форма выбора указать конкретную форму из расширения. Если это не сработало сразу, проанализируем причины ниже в разделе о кэшировании.

Способ 2. Программная подмена через «ОбработкаПолученияФормы»

Этот метод считается наиболее надежным и гибким, так как он позволяет динамически определять, какую форму показать пользователю в зависимости от условий (например, от того, из какого документа вызван выбор). Рассмотрим реализацию этого механизма в модуле менеджера объекта.

Проанализируем ситуацию: нам нужно перехватить запрос системы на получение формы. Для этого в расширении создадим обработчик в модуле менеджера справочника:


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

КонецПроцедуры

Разберем параметры этого обработчика. Установка СтандартнаяОбработка = Ложь говорит системе, что мы берем управление на себя. В переменную ВыбраннаяФорма мы записываем полное имя формы, которую хотим открыть. Если обработчик находится в модуле менеджера самого справочника, то он будет срабатывать каждый раз, когда система пытается создать форму для этого объекта.

Способ 3. Использование события «НачалоВыбора» на форме документа

Если нам нужно изменить поведение выбора только в одной конкретной форме документа, удобнее использовать событие поля ввода. Рассмотрим этот пример:

  1. В расширении найдем нужную форму документа.
  2. Для поля ввода реквизита создадим событие НачалоВыбора.
  3. В обработчике пропишем программное открытие нашей формы.

&НаКлиенте
Процедура Расш1_РеквизитНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; // Отменяем стандартное открытие
    
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);
    ПараметрыФормы.Вставить("МножественныйВыбор", Ложь);
    
    // Открываем нашу форму из расширения
    ОткрытьФорму("Справочник.Контрагенты.Форма.ФормаВыбораИзРасширения", ПараметрыФормы, Элемент);
    
КонецПроцедуры

Этот способ гарантирует, что ваша форма откроется именно там, где вы запланировали, не затрагивая работу справочника в других частях программы.

Почему изменения применяются не сразу и возникает «эффект отложенного старта»?

Часто разработчики замечают, что код верный, настройки заданы, но в режиме «Предприятие» ничего не меняется. Выясним причину этого явления. В 1С 8.3 активно используется механизм кэширования конфигурации. При использовании расширений платформа может хранить старые описания форм в локальном кэше пользователя.

Рекомендации для немедленного вступления изменений в силу:

Проблема изменения внешнего вида стандартных форм

Бывает, что после добавления расширения стандартные формы справочника, которые вы не трогали, начинают выглядеть иначе. Посмотрим на причины:

1. Автогенерируемые формы: Если в основной конфигурации у справочника нет созданной формы (она генерируется платформой автоматически), то любое вмешательство расширения в структуру справочника (добавление реквизита, изменение типа) заставляет платформу перерисовывать автоформу. Это часто меняет порядок колонок или группировку элементов.

2. Стиль расширения: В свойствах расширения можно задать основной стиль. Если он не совпадает с основным стилем конфигурации, оформление всех форм (шрифты, цвета) может измениться.

Проанализировав ситуацию, можно сделать вывод: для стабильной работы всегда проверяйте настройки метаданных, используйте программные обработчики для сложной логики и не забывайте про очистку кэша при разработке.

← На главную