Как программно обратиться к реквизитам вкладки Бухгалтерская операция в БГУ 2.0 и настроить их обработчики

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

В конфигурации 1С:Бухгалтерия государственного учреждения 2.0 (БГУ 2.0) разработчики часто сталкиваются с ситуацией, когда на форме документа визуально присутствует вкладка «Бухгалтерская операция» с набором флажков и полей, но в конфигураторе на этой вкладке видна только пустая группа. Это происходит потому, что элементы данной панели создаются программно в зависимости от выбранной типовой операции. В этой статье мы подробно разберем, как найти эти «невидимые» элементы, как считать их значения и как назначить им обработчик события ПриИзменении.

Анализируем механизм динамического построения формы

Для начала выясним причину отсутствия элементов в дереве метаданных. В БГУ 2.0 реализована подсистема «Типовые операции». Когда пользователь выбирает конкретную операцию, система обращается к справочнику ТиповыеОперации, считывает настройки параметров и программно добавляет на форму реквизиты и соответствующие им элементы управления (поля ввода, флажки). Рассмотрим основные особенности этого процесса:

  1. Имена элементов: Программные элементы обычно имеют специфические префиксы, такие как ПараметрОперации_ или ТиповаяОперация_Параметр_.
  2. Место хранения: Данные этих полей часто не привязаны к реквизитам объекта напрямую, а хранятся в структуре ДополнительныеСвойства или в служебном реквизите ПараметрыТиповойОперации.
  3. Жизненный цикл: Элементы создаются в процедурах общего модуля (например, БухгалтерскиеОперацииБГУ) при создании формы на сервере или при смене типовой операции.

Как найти программный элемент и назначить обработчик

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

Во-первых, нам необходимо определить точное имя элемента. Для этого воспользуемся отладчиком. Запустим конфигурацию в режиме «1С:Предприятие», откроем нужный документ и в точке останова (например, в процедуре ПриОткрытии) проанализируем коллекцию ЭтаФорма.Элементы. Найдя нужный элемент в списке, мы узнаем его имя для дальнейшей работы.

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


&После("ПриСозданииНаСервере")
Процедура VID_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Ищем программно созданный элемент по имени, которое мы узнали в отладчике
    ИмяЭлемента = "ПараметрОперации_ПринятьДенежноеОбязательство"; // Пример имени
    ИскомыйЭлемент = Элементы.Найти(ИмяЭлемента);
    
    Если ИскомыйЭлемент <> Неопределено Тогда
        // Назначаем клиентскую процедуру-обработчик для события "ПриИзменении"
        ИскомыйЭлемент.УстановитьДействие("ПриИзменении", "VID_ПараметрОперацииПриИзменении");
    КонецЕсли;
    
КонецПроцедуры

Важно помнить, что процедура-обработчик должна быть определена на клиенте и иметь стандартный набор параметров для события ПриИзменении.


&НаКлиенте
Процедура VID_ПараметрОперацииПриИзменении(Элемент)
    
    // Получаем текущее значение флага (оно обычно связано с реквизитом формы)
    ЗначениеФлага = ЭтаФорма[Элемент.Имя];
    
    Если ЗначениеФлага Тогда
        // Вызываем серверный метод для заполнения ТЧ "Денежные обязательства"
        ЗаполнитьДенежныеОбязательстваНаСервере();
    КонецЕсли;
    
КонецПроцедуры

Особенности работы с данными в БГУ 2.0

Проанализируем ситуацию, когда необходимо не просто отловить изменение, а корректно обновить табличную часть. В БГУ 2.0 для работы с денежными обязательствами часто используются специализированные общие модули. Если мы хотим имитировать стандартное поведение системы, нам нужно вызвать функции заполнения, которые предусмотрены конфигурацией.

Рассмотрим пример реализации логики заполнения табличной части ДенежныеОбязательства на сервере, основываясь на данных типовой операции:


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

Важные нюансы при обновлении формы

Выясним одну критическую деталь: вкладка «Бухгалтерская операция» может перерисовываться в процессе работы пользователя (например, при смене вида операции в соответствующем поле). В этот момент элементы удаляются и создаются заново.

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

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

← На главную