Почему не срабатывает событие «ПриСозданииНаСервере» при выборе группы справочника?

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

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

Суть проблемы «фантомной» формы

Когда мы работаем с типовыми справочниками, такими как Номенклатура в конфигурации Розница, платформа 1С стремится к оптимизации ресурсов. Если для справочника не создана явная Форма выбора в дереве конфигурации, платформа генерирует её «на лету». Эта форма является системной: она не имеет привязанного модуля формы, в который можно добавить собственный код. Именно поэтому событие ПриСозданииНаСервере не срабатывает — у формы просто нет места, где этот обработчик мог бы быть прописан.

Шаг 1: Создание собственной формы выбора

Чтобы получить полный контроль над формой выбора группы, нам необходимо «материализовать» её в конфигураторе. Для этого выполним следующие действия:

  1. Откроем справочник в дереве метаданных.
  2. Перейдем на вкладку Формы.
  3. Нажмем кнопку Добавить и создадим новую Форму выбора.
  4. После того как форма создана, она появится в дереве метаданных, и у нас появится доступ к её Модулю формы.

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

Шаг 2: Реализация серверной логики

После создания формы мы можем наполнить её логикой. Например, если нам нужно выполнить специфические настройки при открытии формы, мы смело используем обработчик ПриСозданииНаСервере:


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

Шаг 3: Настройка режима выбора групп

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


// В параметрах открытия формы выбора мы можем передать режим:
ПараметрыВыбора = Новый Структура;
ПараметрыВыбора.Вставить(\"РежимВыбора\", Истина);
ПараметрыВыбора.Вставить(\"ВыборГруппИЭлементов\", РежимВыбораГруппИЭлементов.ТолькоГруппы);

ОткрытьФорму(\"Справочник.Номенклатура.Форма.ФормаВыбора\", ПараметрыВыбора);

Альтернативные подходы: когда не нужна собственная форма

Иногда создание отдельной формы может показаться избыточным, если задача сводится только к получению выбранного значения. В таких случаях мы можем использовать обработчик ОбработкаВыбора непосредственно в той форме, откуда вызывается выбор:


&НаКлиенте
Процедура ИмяПоляОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    // Здесь мы анализируем, что выбрал пользователь
    Если ТипЗнч(ВыбранноеЗначение) = Тип(\"СправочникСсылка.Номенклатура\") Тогда
        // Обработка выбора группы
    КонецЕсли;
КонецПроцедуры

Однако помните: если цель — именно кастомизация интерфейса (например, скрытие кнопок на командной панели, изменение структуры иерархии или динамическое изменение запроса списка), создание собственной формы выбора остается единственным надежным способом решения задачи в 1С. Это стандарт разработки, который гарантирует предсказуемое поведение системы.

← На главную