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