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