Как назначить событие «ПриИзменении» для дополнительного реквизита в управляемой форме 1С?

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

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

Понимание механизма создания элементов

Важно помнить, что элементы управления для дополнительных реквизитов не существуют статически. Они появляются на форме только после выполнения определенных процедур (обычно это происходит в ПриСозданииНаСервере или при переключении страниц формы). Имена этих элементов генерируются системой автоматически, используя уникальный идентификатор свойства (GUID), в котором дефисы заменяются на латинскую букву «x».

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

Способ программного назначения обработчика

Чтобы назначить обработчик ПриИзменении, нам нужно сначала идентифицировать нужный элемент, а затем воспользоваться методом УстановитьДействие. Рассмотрим алгоритм действий:

  1. Определяем имя реквизита, который нам нужен, исходя из данных объекта Объект.ДополнительныеРеквизиты.
  2. Формируем строку технического имени элемента, используя УникальныйИдентификатор свойства.
  3. Применяем процедуру УстановитьДействие к найденному элементу Элементы.

Давайте проанализируем пример кода, который позволяет реализовать эту задачу универсально:


Для Каждого Стр Из Объект.ДополнительныеРеквизиты Цикл
    // Ищем свойство по его предопределенному имени для разработчика
    Если Стр.Свойство.Имя = "ДатаДоставки" Тогда
        
        // Формируем техническое имя элемента формы
        // Префикс стандартный для БСП, далее идет GUID свойства с заменой символов
        ИмяРеквизита = "ДополнительныйРеквизитЗначение_" + 
                       СтрЗаменить(Стр.Свойство.УникальныйИдентификатор, "-", "x");
        
        // Назначаем обработчик, если элемент уже создан на форме
        Если Элементы.Найти(ИмяРеквизита) <> Неопределено Тогда
            Элементы[ИмяРеквизита].УстановитьДействие("ПриИзменении", "ИмяВашейПроцедурыНаКлиенте");
        КонецЕсли;
        
    КонецЕсли;
КонецЦикла;

Важные замечания по реализации

При использовании этого подхода обратите внимание на следующие нюансы:

Использование метода УстановитьДействие позволяет реализовать интерактивное взаимодействие пользователя с дополнительными реквизитами, делая интерфейс более гибким и отзывчивым к действиям оператора.

← На главную