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

Администрирование · 10 мин

Неразделенный сеанс 1С: что это и как с ним работать

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

Неразделенный сеанс 1С — это сеанс работы с информационной базой, в котором значения разделителей данных не установлены: платформа «видит» всю информационную базу целиком, без фильтрации по областям данных. Такой режим появляется при работе в модели сервиса (SaaS), где одна база обслуживает множество абонентов, а их данные отделяются друг от друга механизмом разделения данных.

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

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

Что такое разделение данных и зачем оно нужно

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

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

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

Чем неразделенный сеанс отличается от разделенного

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

КритерийРазделенный сеансНеразделенный сеанс
Видимость данныхТолько текущая область данныхВсе области и общие данные
Изменение общих данныхЗапрещеноРазрешено
Типичный пользовательПользователь абонента сервисаАдминистратор сервиса, служебные механизмы
Риск при ошибкеЛокальный, в пределах областиЗатрагивает всех абонентов

В файловой базе или в клиент-серверной базе, где разделение данных не включено вовсе, понятие «неразделенный сеанс» фактически не выделяется — любой сеанс и так работает со всей базой. Термин приобретает смысл именно в контексте разделенной конфигурации.

Где встречается неразделенный сеанс на практике

Наиболее частый сценарий — работа через «1С:Фреш» или собственный сервис на базе технологии 1cFresh. Там пользователи абонентов всегда работают в разделенных сеансах, а администратор сервиса и внутренние механизмы менеджера сервиса — в неразделенных.

Регламентные и фоновые задания

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

Обновление конфигурации и обработчики обновления

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

Аутентификация и служебные операции менеджера сервиса

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

Значение разделителяУстановлено или нет

Проверить через РазделениеДанных или параметры сеанса

Доступ к общим даннымТолько чтение или полный

Попытка записи общего объекта в разделенном сеансе вызовет ошибку

Видимость чужих областейВидны или скрыты

Запрос к разделенной таблице без отбора в неразделенном сеансе вернет данные всех областей

Как программно управлять разделением в коде

Во встроенном языке 1С управление разделением выполняется через установку значений общих реквизитов-разделителей и признака их использования. Для переключения в неразделенный режим используется метод установки использования разделителя с параметром «Ложь».

bsl
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь);
// далее код работы с общими данными
ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ЗначениеОбласти);

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

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

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

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

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

Типичные ошибки
01
Снятие разделения без возврата — последующий код сеанса работает со всеми областями
02
Запрос к разделенным таблицам в неразделенном сеансе без группировки по областям — данные абонентов смешиваются
03
Запуск обработчика обновления общих данных в разделенном режиме — обновление завершается ошибкой
04
Попытка записи общего справочника из сеанса абонента — ошибка доступа и откат транзакции

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

Как проверить, что все работает правильно

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

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

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

Запрос из сеанса абонента
Норма

Возвращает только данные текущей области

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

Видны записи других абонентов

Запись общего объекта
Норма

Выполняется только в неразделенном сеансе

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

Ошибка доступа в сеансе абонента или запись без разделителя

Обновление области данных
Норма

Разделенные обработчики выполняются в каждой области

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

Обработчик падает или выполняется один раз на всю базу

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

Итог

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

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

Частые вопросы о неразделенном сеансе 1С

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

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

Чем неразделенный сеанс отличается от привилегированного режима?

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

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

Чаще всего причина в том, что код пытается записать общий (неразделенный) объект из разделенного сеанса абонента. Проверьте, входит ли объект в состав разделителей, и перенесите запись в неразделенный контекст через безопасные программные интерфейсы или фоновое задание без разделения.

Нужен ли неразделенный сеанс в обычной локальной базе 1С?

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

Как фоновое задание узнает, в какой области ему работать?

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

Чем опасна утечка данных между областями и как ее избежать?

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