Как передать значение переменной из одного модуля в другие в 1С?

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

При разработке в среде 1С:Предприятие часто возникает задача передачи данных или сохранения состояния между различными модулями конфигурации. Способ реализации напрямую зависит от контекста выполнения кода (клиент или сервер), типа передаваемых данных и их жизненного цикла. Разберем основные сценарии и архитектурные механизмы платформы для решения этой задачи.

1. Использование экспортных переменных в модуле управляемого приложения

Если необходимо сохранить данные, доступные во всех клиентских процедурах и формах на протяжении всей работы пользователя, мы можем объявить глобальную переменную в модуле управляемого приложения (или обычного приложения). Рассмотрим, как это объявляется:


// В самом начале Модуля управляемого приложения:
Перем глТекущийКонтекстРаботы Экспорт;

После объявления переменная глТекущийКонтекстРаботы становится доступной для чтения и записи в любых клиентских процедурах модулей форм, команд и общих модулей с признаком выполнения «Клиент». Важно помнить: такие переменные существуют только на клиенте и не видны на сервере, а также очищаются при перезапуске клиентского сеанса.

2. Передача данных через временное хранилище

Для временной передачи данных между клиентом и сервером или между вызовами в рамках одного сеанса отлично подходит временное хранилище. Посмотрим на алгоритм работы с ним:

  1. Помещаем значение во временное хранилище и получаем его уникальный адрес (тип Строка).
  2. Передаем полученный адрес в другой модуль, форму или процедуру.
  3. Извлекаем значение по адресу в целевом модуле.

Разберем пример помещения и извлечения данных:


// Помещение данных во временное хранилище (например, на клиенте или сервере)
АдресХранилища = ПоместитьВоВременноеХранилище(НашиДанные, УникальныйИдентификатор);

// Получение данных в другом модуле или контексте по известному адресу
ПолученныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);

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

3. Серверные механизмы: параметры сеанса и кэширование

Когда данные должны быть доступны на стороне сервера в различных серверных общих модулях, модулях менеджеров или модулях объектов, мы можем применить следующие решения:

  1. Параметры сеанса (ПараметрыСеанса): создаются в дереве метаданных. Они инициализируются в модуле сеанса и доступны в любом месте серверного кода. Подходят для хранения глобальных настроек пользователя, текущих подразделений, ролей доступа.
  2. Общие модули с повторным использованием значений: если функция возвращает результат вычислений, а модуль настроен на повторное использование («На время сеанса» или «На время вызова»), платформа кэширует возвращенное значение. Это позволяет централизованно обращаться к функции из любых модулей без лишней нагрузки.

4. Передача данных между событиями объекта через свойство ДополнительныеСвойства

Если требуется передать данные между различными обработчиками событий одного прикладного объекта (например, из обработчика ПередЗаписью в ПриЗаписи документа, а затем в подписку на событие), используем контекстное свойство ДополнительныеСвойства.

Проанализируем пример передачи структуры данных:


// В модуле объекта (например, перед записью):
ЭтотОбъект.ДополнительныеСвойства.Вставить("НеобходимостьПересчета", Истина);

// В обработчике подписки на событие:
Если Источник.ДополнительныеСвойства.Свойство("НеобходимостьПересчета") Тогда
    ЗначениеФлага = Источник.ДополнительныеСвойства.НеобходимостьПересчета;
КонецЕсли;

5. Сохранение данных в ХранилищеОбщихНастроек

Если значение переменной должно сохраняться между сеансами работы пользователя или передаваться в изолированные процессы, можно использовать объект ХранилищеОбщихНастроек. Разберем пример сохранения и чтения:


// Запись значения
ХранилищеОбщихНастроек.Сохранить("МояПодсистема", "КлючПеременной", ЗначениеПеременной);

// Чтение значения в другом модуле
ПрочитанноеЗначение = ХранилищеОбщихНастроек.Загрузить("МояПодсистема", "КлючПеременной");

Обратите внимание: данные в хранилище настроек сохраняются в информационной базе, поэтому после завершения работы с временными значениями их рекомендуется удалять с помощью метода Удалить(), чтобы не засорять базу.

6. Взаимодействие между формами: параметры и оповещения

Для передачи значений между экранными формами применяются два стандартных механизма:

  1. Параметры формы: при вызове метода ОткрытьФорму() передается структура параметров, которая считывается в открываемой форме через свойство Параметры.
  2. Механизм оповещений: вызывающая форма выполняет процедуру Оповестить(ИмяСобытия, Параметр, Источник), а форма-приемник обрабатывает полученные данные в процедуре ОбработкаОповещения.
← На главную