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