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