Как организовать хранение таблицы значений в сеансе пользователя в 1С:Предприятие 8?

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

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

Использование временного хранилища

Одним из самых популярных и стандартизированных методов является работа с ВременноеХранилище. Этот механизм идеально подходит для передачи данных между клиентской и серверной частями.

Суть метода заключается в помещении данных в специальную область памяти сервера, привязанную к текущему сеансу. Чтобы воспользоваться этим способом, выполним следующие шаги:

  1. Подготовим таблицу значений.
  2. Поместим её во временное хранилище с помощью функции ПоместитьВоВременноеХранилище.
  3. Получим адрес, который вернет данная функция. Этот адрес можно передать на клиент или сохранить в параметрах сеанса.

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

Применение параметров сеанса

Параметры сеанса являются глобальными объектами, доступными во всей конфигурации. Если структура данных фиксирована, мы можем использовать их для хранения ссылки на наши данные.

Для оптимизации работы с памятью рекомендуем хранить в параметре сеанса не саму таблицу, а тип ХранилищеЗначений. Это позволяет сэкономить ресурсы сервера, так как данные будут находиться в сериализованном (упакованном) виде.

Разберем пример кода для инициализации данных:


// В момент инициализации или загрузки данных
ДанныеДляХранения = Новый ХранилищеЗначений(ТаблицаЗначений);
ПараметрыСеанса.МояТаблицаДанных = ДанныеДляХранения;

// Для получения данных в любой части системы
Таблица = ПараметрыСеанса.МояТаблицаДанных.Получить();

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

Модули с повторным использованием (Кэширование функций)

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

Создадим общий модуль с флагом ПовторятьПриОбращении (в текущем сеансе). В нем объявим функцию, которая возвращает необходимые данные.


// В свойствах модуля установлено: ПовторятьПриОбращении = В текущем сеансе
Функция ПолучитьДанныеИзФайла() Экспорт
    // Эта логика выполнится только один раз за сеанс
    // Последующие обращения вернут уже готовый результат из кэша
    ТЗ = ЗагрузитьДанныеИзВнешнегоФайла();
    Возврат ТЗ;
КонецФункции

Этот метод исключает лишние записи в базу данных и обращения к диску. Мы просто вызываем функцию ПолучитьДанныеИзФайла() из любого модуля, и платформа сама берет данные из оперативной памяти.

Анализ глобальных переменных

В модуле приложения существуют глобальные переменные, такие как ПараметрыПриложения (соответствие). Они позволяют хранить произвольные значения, которые будут доступны во время работы приложения. Однако этот способ имеет свои ограничения:

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

Рекомендации по выбору

Проанализировав все способы, мы можем сформулировать следующие правила:

  1. Для отображения на управляемой форме используйте ПоместитьВоВременноеХранилище и передавайте адрес в ДанныеФормы.
  2. Для интенсивных вычислений на сервере используйте модули с повторным использованием — это наиболее быстрый способ работы с кэшем сеанса.
  3. Избегайте хранения огромных таблиц непосредственно в параметрах сеанса, чтобы не перегружать память сервера при каждом входе пользователя.
  4. Если данные должны сохраняться между разными сеансами (перезапусками), откажитесь от идеи хранения в сеансе и используйте РегистрСведений или Справочник.

Выбор архитектурного решения зависит от жизненного цикла ваших данных. Если данные временные и нужны «здесь и сейчас» — используйте временное хранилище. Если данные являются частью сеансового кэша — используйте модули с повторным использованием.

← На главную