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