Как программно обновить дополнительные реквизиты на форме в 1С

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

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

Выясним причину: почему не работает ОбновитьОтображениеДанных

Рассмотрим устройство работы подсистемы «Управление свойствами» в БСП. Элементы ввода для дополнительных реквизитов на управляемой форме не связываются с табличной частью Объект.ДополнительныеРеквизиты напрямую.

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

Разберем решение: штатные методы подсистемы БСП

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

Посмотрим на пример логики заполнения табличной части при изменении ключевого реквизита (например, партнера или контрагента):


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

Вызов процедур подсистемы УправлениеСвойствами считывает актуальное состояние табличной части Объект.ДополнительныеРеквизиты и переносит новые значения в динамические реквизиты формы, после чего поля на форме моментально обновляются.

Дополнительные вызовы и работа с зависимостями

В зависимости от используемой версии БСП и сложности настройки свойств, обратите внимание на следующие методы:

  1. Обновление элементов формы: В свежих редакциях БСП для синхронизации элемента с объектом используется процедура УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, Объект); или УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтаФорма, Объект);.
  2. Обновление зависимостей: Если измененное свойство влияет на видимость или доступность других дополнительных реквизитов, на клиенте после серверного вызова следует вызвать обработку зависимостей:
    
    УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтаФорма);
    
  3. Безопасное получение значений: Чтобы не производить ручной поиск по табличной части с отборами, рекомендуется использовать штатную функцию вычисления значений: ЗначениеСвойства = УправлениеСвойствами.ЗначениеСвойства(Объект, Свойство);

Использование встроенных функций БСП позволяет избежать ошибок при обновлении интерфейса и гарантирует правильное сохранение данных при записи объекта.

← На главную