К статье
Практический материал

Разработка и Конфигурация · 11 мин

Параметры сеанса в 1С: что это и как их использовать

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

Параметры сеанса в 1С — это специальные объекты конфигурации, предназначенные для хранения значений, актуальных только в рамках текущего сеанса пользователя. Они создаются в ветке «Общие» → «Параметры сеанса» дерева конфигурации и доступны из кода через объект ПараметрыСеанса. Ключевая особенность: значение параметра не сохраняется в базе данных — оно живёт только пока активен сеанс, и при завершении работы пользователя автоматически очищается.

Типичный пример использования — хранение текущего пользователя, его подразделения, настроек доступа к данным (RLS) или признака режима работы. Когда пользователь запускает систему, в обработчике УстановкаПараметровСеанса модуля сеанса разработчик заполняет нужные параметры, и дальше они доступны в любом месте кода без повторных запросов к базе.

Понимание параметров сеанса критично для разработчика 1С: неправильная работа с ними приводит к замедлению запуска системы, ошибкам «Параметр сеанса не установлен» и проблемам с производительностью при обращении к неинициализированным значениям. Ниже разберём устройство механизма, порядок инициализации, типичные сценарии и ошибки.

Что такое параметры сеанса и где они находятся

Параметр сеанса создаётся в конфигураторе: откройте дерево конфигурации, ветка «Общие» → «Параметры сеанса», и добавьте новый объект. У него задаются имя, тип (может быть составным) и длина для строковых значений. Тип следует выбирать строго под задачу: если параметр хранит ссылку на справочник «Пользователи», не стоит делать его составным — это замедляет работу и усложняет контроль.

Физически значения параметров сеанса хранятся в оперативной памяти сервера 1С (или в памяти клиентского приложения в файловом режиме), а не в таблицах базы данных. Поэтому они не переживают перезапуск сеанса, но зато чтение параметра выполняется очень быстро — без обращения к СУБД. Это принципиальное отличие от констант и настроек в хранилище значений.

Как происходит инициализация параметров

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

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

Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) Экспорт

Если ИменаПараметровСеанса = Неопределено Тогда

// Инициализация всех параметров при старте

КонецЕсли;

Если ИменаПараметровСеанса.Найти("ТекущийПользователь") <> Неопределено Тогда

ПараметрыСеанса.ТекущийПользователь =

Справочники.Пользователи.НайтиПоНаименованию(ИмяПользователя());

КонецЕсли;

КонецПроцедуры

Хорошая практика — инициализировать параметры «лениво», только когда они реально запрошены, проверяя содержимое массива имён. Это ускоряет запуск системы: если параметр не нужен в данном сеансе (например, сеанс фонового задания), тяжёлые запросы к базе не выполняются.

Порядок добавления параметра сеанса
  1. 1
    Откройте конфигуратор, ветка «Общие» → «Параметры сеанса», добавьте новый параметр
  2. 2
    Задайте имя и точный тип данных параметра
  3. 3
    В модуле сеанса в обработчике УстановкаПараметровСеанса добавьте код установки значения
  4. 4
    Проверьте, что параметр устанавливается при любом сценарии: интерактивный сеанс, фоновое задание, веб-сервис
  5. 5
    Обновите конфигурацию базы данных и протестируйте обращение к параметру из кода

Типичные сценарии использования

Наиболее распространённое применение — хранение ссылки на текущего пользователя и связанных с ним данных: подразделения, склада по умолчанию, кассы. Это избавляет от повторных запросов в каждом документе и отчёте. Второй частый сценарий — ограничение доступа к данным на уровне записей (RLS): в шаблонах ограничений доступа параметры сеанса подставляются напрямую, например &ТекущийПользователь.

Также параметры сеанса используют для флагов режима работы: «ВыполняетсяОбменДанными», «РежимОтладки», признак отключения бизнес-логики при загрузке данных. Такой флаг устанавливается перед массовой загрузкой и проверяется в подписках на события, позволяя пропустить тяжёлые проверки.

Текущий пользовательКлассический сценарий

Ссылка на справочник пользователей, инициализируется один раз за сеанс

RLS-доступОбязательное применение

Шаблоны ограничения доступа работают только через параметры сеанса

Флаги режимаДопустимо

Признак загрузки данных, отключение проверок — тип Булево

Долгоживущие настройкиНе подходит

Для хранения между сеансами используйте константы или хранилище настроек

Чем параметры сеанса отличаются от альтернатив

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

МеханизмВремя жизниОбласть видимостиХранение
Параметр сеансаДо конца сеансаТекущий сеансПамять сервера
КонстантаПостоянноВсе пользователиБаза данных
Переменная общего модуляДо конца сеансаТолько сервер или клиентПамять
Хранилище общих настроекПостоянноПо пользователюБаза данных

Глобальные переменные в общих модулях с признаком «Сервер» и «Клиент» существуют независимо друг от друга и могут рассинхронизироваться, тогда как параметр сеанса един для всего сеанса. Константы, наоборот, общие для всех пользователей и сохраняются — они не подходят для данных, индивидуальных для каждого сеанса.

Сравнение вариантов

Параметр сеанса

Подходит для контекста текущего сеанса: пользователь, права, флаги. Ограничение: не сохраняется между сеансами

Константа

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

Хранилище настроек

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

Ошибки и проблемы при работе

Самая частая ошибка — обращение к параметру, который не установлен в обработчике. Это происходит, когда разработчик добавил новый параметр в конфигуратор, но забыл дописать его инициализацию в модуле сеанса. Вторая типичная проблема — исключение внутри УстановкаПараметровСеанса: оно приводит к невозможности запуска системы вообще, поэтому код инициализации должен быть максимально защищённым.

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

Типичные ошибки
01
Параметр добавлен в конфигуратор, но не инициализируется в модуле сеанса — ошибка при первом обращении
02
Тяжёлые запросы в УстановкаПараметровСеанса без проверки массива имён — замедляется запуск всех сеансов, включая фоновые
03
Составной тип «любая ссылка» для параметра — лишняя нагрузка и ошибки при работе RLS
04
Попытка хранить в параметре данные, которые должны пережить перезапуск сеанса — значение теряется
05
Необработанное исключение в обработчике инициализации — пользователи не могут войти в систему

Производительность и ограничения

Каждый параметр сеанса занимает память в каждом активном сеансе. Если создать десятки параметров с тяжёлой инициализацией, запуск системы и открытие новых сеансов заметно замедлятся. Правило: параметров должно быть немного, их типы — узкими, а инициализация — быстрой и ленивой.

Ещё одно ограничение: параметры сеанса не подходят для передачи больших объёмов данных (таблиц значений, произвольных структур большого размера). Хранение массивных объектов в памяти каждого сеанса при большом числе пользователей приведёт к перерасходу памяти сервера. Для таких задач лучше использовать временное хранилище с передачей адреса.

Как проверить работу параметров

Простейший способ отладки — временно вывести значение параметра через Сообщить() или проверить его в отладчике, поставив точку останова в обработчике УстановкаПараметровСеанса. Убедитесь, что обработчик вызывается именно тогда, когда вы ожидаете, и массив имён содержит нужный параметр.

Для проверки RLS заведите тестового пользователя с ограниченными правами и убедитесь, что он видит только разрешённые записи. Проверяйте также сценарии фоновых заданий и веб-сервисов: там контекст пользователя может отличаться, и параметры должны инициализироваться корректно.

Контрольные точки

Как проверить результат

Обращение к параметру из кода
Норма

Значение возвращается без исключений

Тревожный признак

Ошибка «неинициализированное значение параметра сеанса»

Время запуска сеанса
Норма

Вход в систему занимает обычное время

Тревожный признак

Заметная задержка из-за тяжёлой инициализации

Фоновые задания
Норма

Задание выполняется, параметры доступны

Тревожный признак

Ошибки инициализации в регламентных операциях

RLS-ограничения
Норма

Пользователь видит только свои данные

Тревожный признак

Видны лишние записи или список пуст

Часто задаваемые вопросы

Сохраняются ли параметры сеанса после перезапуска 1С?

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

Почему возникает ошибка «неинициализированное значение параметра сеанса»?

Обработчик УстановкаПараметровСеанса завершился, не присвоив значение запрошенному параметру. Проверьте, что в модуле сеанса есть ветка, устанавливающая этот параметр, и что она срабатывает при передаче его имени в массиве ИменаПараметровСеанса.

Можно ли изменить параметр сеанса в процессе работы?

Да, значение можно перезаписать в любой момент: ПараметрыСеанса.ИмяПараметра = НовоеЗначение. Новое значение будет доступно в рамках того же сеанса. Но учтите, что закэшированные в переменных модулей копии значения при этом не обновятся.

Работают ли параметры сеанса в фоновых заданиях?

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

Сколько параметров сеанса можно создать?

Жёсткого ограничения платформа не накладывает, но каждый параметр занимает память в каждом сеансе. Практическая рекомендация — ограничиваться действительно необходимым набором, обычно это единицы или десятки параметров, а не сотни.

Чем параметр сеанса лучше глобальной переменной в общем модуле?

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

Итог

Что важно запомнить

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