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

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

Что хранится в сеансовых данных 1С

Что хранится в сеансовых данных 1С: параметры сеанса, текущий пользователь, настройки. Где посмотреть, как очистить и что туда нельзя помещать.

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

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

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

Что такое параметры сеанса и что в них хранится

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

Типичное содержимое параметров сеанса в конфигурациях на базе Библиотеки стандартных подсистем (БСП):

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

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

Где физически живут сеансовые данные

В клиент-серверном варианте работы параметры сеанса хранятся в оперативной памяти рабочего процесса сервера 1С (rphost), который обслуживает сеанс. В файловом варианте — в памяти процесса клиентского приложения. В файл базы (.1CD) или в таблицы СУБД они не записываются.

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

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

Что ещё относится к сеансовым данным

Помимо параметров сеанса, время жизни «на один сеанс» имеют и другие механизмы, которые часто путают:

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

Настройки пользователя (состав панелей, варианты отчётов, настройки форм) к сеансовым данным не относятся — они сохраняются в хранилище настроек в самой базе и переживают завершение сеанса.

Где живут разные виды данных

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

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

Временное хранилище

Память сервера, привязка к форме или сеансу. Для передачи результатов между вызовами.

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

Таблицы базы данных, постоянное хранение. Для пользовательских настроек форм и отчётов.

Константы

База данных, общие для всех пользователей. Для глобальных настроек системы.

Как посмотреть содержимое сеансовых данных

Штатного пользовательского интерфейса для просмотра всех параметров сеанса в типовых конфигурациях нет — это инструмент разработчика и администратора. Основные способы:

Через отладчик конфигуратора

Подключите отладку к нужному сеансу (в конфигураторе: Отладка → Подключение), поставьте точку останова в любом серверном коде и в табло вычислите выражение ПараметрыСеанса.ИмяПараметра. Так можно посмотреть значение каждого параметра в конкретном активном сеансе.

Программно из кода

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

bsl
Для Каждого Параметр Из Метаданные.ПараметрыСеанса Цикл
    Попытка
        Значение = ПараметрыСеанса[Параметр.Имя];
        Сообщить(Параметр.Имя + " = " + Строка(Значение));
    Исключение
        Сообщить(Параметр.Имя + " — значение не установлено");
    КонецПопытки;
КонецЦикла;

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

Через консоль кластера

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

Как проверить параметры сеанса пользователя
  1. 1
    Откройте конфигуратор и включите отладку: Отладка → Подключение → выберите нужный сеанс.
  2. 2
    Установите точку останова в серверной процедуре, которая гарантированно выполнится (например, при открытии формы).
  3. 3
    Когда отладка остановится, откройте табло (Ctrl+Shift+W) и вычислите ПараметрыСеанса.ТекущийПользователь.
  4. 4
    Сравните значение с ожидаемым: ссылка должна вести на правильный элемент справочника «Пользователи».
  5. 5
    Если значение пустое или неверное — проверяйте модуль сеанса и процедуру УстановкаПараметровСеанса.

Типичные проблемы и их диагностика

Большинство обращений по теме сеансовых данных сводится к нескольким повторяющимся сценариям:

  • «Недопустимое значение параметра сеанса» при входе. Параметр объявлен, но не установлен в модуле сеанса, а код пытается его прочитать. Частая причина после обновления: добавился новый параметр, а обработчик его установки отработал с ошибкой или не отработал вовсе.
  • Пользователь видит чужие или устаревшие данные. Параметры ограничения доступа установились некорректно — например, пользователя перенесли в другую группу, а сеанс старый. Решение — завершить сеанс и войти заново.
  • Рост памяти рабочих процессов. В параметры сеанса помещены большие таблицы значений или данные не очищаются. Проверяется через консоль кластера и анализ кода установки параметров.
  • Ошибки в фоновых заданиях. Код рассчитывает на параметр, который в фоновом сеансе не установлен или имеет другое значение.
Типичные ошибки при работе с сеансовыми данными
01
Хранение больших таблиц значений в параметрах сеанса — приводит к разрастанию памяти rphost при росте числа пользователей.
02
Чтение параметра до его установки в модуле сеанса — ошибка «недопустимое значение параметра сеанса» у части пользователей.
03
Изменение параметра сеанса в середине работы без контроля — другой код продолжает использовать старое значение, поведение становится непредсказуемым.
04
Ожидание, что параметры пользователя перейдут в фоновое задание — у фонового задания собственный сеанс, значения нужно передавать явно через параметры метода.

Как очистить сеансовые данные

Штатный способ «сбросить» все сеансовые данные пользователя — завершить его сеанс. При следующем входе модуль сеанса заново установит все параметры актуальными значениями. Завершить сеанс можно через консоль кластера (сеанс выбирается и удаляется принудительно), через административную обработку «Активные пользователи» в типовых конфигурациях или программно через COM-connector / RAC.

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

Если проблема не в параметрах, а в кэше клиента, помогает очистка кэша: удаление папок с идентификаторами баз в каталоге %APPDATA%\1C\1cv8 при закрытом клиенте или запуск с ключом /ClearCache. Но это отдельная операция, к параметрам сеанса отношения не имеющая.

Что нельзя хранить в сеансовых данных

Параметры сеанса — не универсальное хранилище. Есть категории данных, которым там не место:

  • Данные, которые должны переживать перезапуск — настройки, результаты расчётов, состояния обменов. Их место — константы, регистры сведений, хранилище настроек;
  • Большие объёмы — файлы, обширные таблицы, результаты запросов по всей базе. Память рабочего процесса общая, и каждый сеанс со «тяжёлыми» параметрами отнимает её у остальных;
  • Пароли и секреты в открытом виде — значения параметров доступны в отладке и при снятии дампа памяти. Для безопасного хранения используйте механизм безопасного хранилища данных БСП;
  • Общие для всех пользователей значения — дублирование одного и того же значения в сотнях сеансов бессмысленно расходует память; используйте константы или повторно используемые значения общих модулей.

FAQ

Можно ли посмотреть параметры сеанса другого пользователя?

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

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

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

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

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

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

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

Влияют ли параметры сеанса на производительность базы?

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

Чем очистка кэша отличается от сброса сеансовых данных?

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

Итог

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

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