Как дополнить функционал кнопки «Перечитать данные объекта» в обычных формах 1С?

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

При работе с обычными (неуправляемыми) формами в 1С:Предприятие разработчики часто сталкиваются с задачей: необходимо выполнить дополнительный код (например, пересчитать визуальные данные, обновить связанные структуры или выдать сообщение пользователю) при повторном считывании данных объекта из базы данных.

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

Ограничения платформы в обычных формах

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

Попытки использовать событие формы ОбновлениеОтображения для этих целей также не дадут результата: данное событие отвечает за перерисовывание элементов интерфейса при их изменении и не вызывается принудительно при срабатывании системной команды перечитывания объекта.

Способ 1. Замена стандартной кнопки на пользовательскую (Рекомендуемый)

Наиболее надежный и управляемый подход — скрыть или отключить системную кнопку и добавить собственную кнопку командной панели, повторив поведение платформы и добавив нужный код.

Разберем по шагам алгоритм реализации этого способа:

  1. Откроем форму объекта в режиме конфигуратора.
  2. В свойствах командной панели отключим автозаполнение или скроем стандартную кнопку перечитывания.
  3. Добавим новую кнопку на командную панель (или в меню «Действия»), установив для нее имя и понятный заголовок, например, «Перечитать».
  4. Назначим обработчик нажатия этой кнопки в модуле формы.
  5. Внутри процедуры вызовем метод Прочитать() у объекта формы, после чего укажем необходимый алгоритм.

Рассмотрим пример кода в модуле обычной формы:


Процедура КоманднаяПанельДействияПеречитать(Кнопка)
	
	// Перечитываем данные объекта из базы данных
	ДокументОбъект.Прочитать();
	
	// Выполняем дополнительный алгоритм
	Сообщить("Данные объекта успешно обновлены из базы!");
	
	// При необходимости обновляем отображение формы
	ЭтаФорма.Обновить();
	
КонецПроцедуры

В зависимости от типа объекта вместо ДокументОбъект может использоваться СправочникОбъект или вызов через свойство формы ЭтаФорма.Значение.Прочитать().

Способ 2. Использование события формы «ПриИзмененииДанных»

Если требуется сохранить стандартную кнопку платформы без создания пользовательской кнопки, проанализируем поведение событий формы. При нажатии штатной кнопки «Перечитать» платформа считывает данные из базы и автоматически вызывает событие формы ПриИзмененииДанных.

Разберем порядок действий для настройки этого варианта:

  1. В конфигураторе откроем свойства формы объекта.
  2. Найдем событие ПриИзмененииДанных и создадим его обработчик в модуле формы.
  3. Впишем в процедуру код, который должен отрабатывать после того, как данные объекта были обновлены из базы.

Посмотрим на пример реализации данного обработчика:


Процедура ПриИзмененииДанных()
	
	// Код выполнится при перечитывании данных объекта платформой
	Сообщить("Данные формы были обновлены.");
	
КонецПроцедуры

Важная деталь: событие ПриИзмененииДанных вызывается не только при перечитывании объекта, но и при других интерактивных изменениях данных формы. Если дополнительный код должен отрабатывать строго при повторной загрузке данных из БД, предпочтительным остается Способ 1 с явным вызовом метода Прочитать().

← На главную