Администрирование · 11 мин
Разделение данных в 1С: что это такое и как работает
Что такое разделение данных в 1С, как работают разделители, общие и разделённые объекты, настройка SaaS-режима, типичные ошибки и проверка результата.
Разделение данных в 1С — это механизм платформы, который позволяет хранить в одной физической информационной базе данные нескольких независимых организаций или клиентов, изолируя их друг от друга. Каждый пользователь видит только «свой» срез информации, хотя технически все записи лежат в общих таблицах. Именно на этом принципе построены облачные сервисы вроде 1С:Фреш и франшизы SaaS-провайдеров.
Механизм реализован через так называемые разделители (сепараторы) — специальные признаки, которые платформа автоматически добавляет к каждой записи разделённых объектов. При обращении к базе текущий сеанс работает в контексте одного значения разделителя, и платформа сама подставляет отбор во все запросы. Разработчику и пользователю не нужно вручную фильтровать данные — изоляция происходит на уровне платформы.
Понимание разделения данных важно администраторам, которые сопровождают облачные решения, и разработчикам, проектирующим конфигурации для работы в модели сервиса. Ошибки в настройке разделителей приводят либо к утечке данных между абонентами, либо к невозможности записать объект, поэтому к этой теме стоит подходить системно.
Что такое разделитель и как он работает
Разделитель в 1С — это общий реквизит конфигурации, у которого установлено свойство «Разделение данных». Значение разделителя — чаще всего номер области данных (целое число), идентифицирующее конкретного абонента сервиса. Каждая таблица разделённого объекта фактически получает дополнительное поле, по которому платформа фильтрует записи.
Когда пользователь входит в сеанс, для него устанавливается значение разделителя — например, область данных № 42. С этого момента все запросы, динамические списки, проведение документов и обращения к справочникам автоматически ограничиваются записями с этим значением. Пользователь области 42 физически не может прочитать или изменить запись области 43 штатными средствами.
Разделителей может быть несколько. Например, один разделитель отвечает за изоляцию по областям данных, а вспомогательный — за технологические нужды. Но в типовых сценариях SaaS используется один основной разделитель «ОбластьДанныхОсновныеДанные».
Разделённые и общие (неразделённые) данные
Не все данные в сервисе изолируются. Конфигурация делит объекты на две категории: разделённые — уникальные для каждого абонента (документы, товары, контрагенты, проводки), и общие — одинаковые для всех областей (классификаторы, курсы валют централизованного справочника, настройки самого сервиса).
Общие объекты хранятся в единственном экземпляре и доступны из любой области. Это экономит место и упрощает обновление: классификатор банков или ОКВЭД достаточно загрузить один раз, а не копировать в каждую область. Однако править общие данные из разделённого сеанса нельзя — для этого используется неразделённый сеанс или специальный механизм поставки данных.
Разработчик управляет этим через состав разделителя: каждый общий реквизит-разделитель имеет список объектов метаданных, к которым он применяется. Справочник либо входит в состав разделителя (тогда он разделён), либо нет (тогда общий). Смешанного состояния у одного объекта быть не может.
| Критерий | Разделённые данные | Общие данные |
|---|---|---|
| Примеры | Документы, номенклатура, контрагенты, регистры учёта | Классификаторы, курсы валют, настройки сервиса |
| Хранение | Копия записей для каждой области | Единственный экземпляр на всю базу |
| Доступ из области | Только свои записи | Чтение из любой области, запись ограничена |
| Обновление | Индивидуально по областям | Централизованно, один раз |
Где применяется разделение данных на практике
Основной сценарий — облачные сервисы по модели SaaS. В 1С:Фреш каждая подключённая компания работает в своей области данных одной большой базы: абонент получает «свою 1С» через браузер, а провайдер обслуживает одну инфраструктуру вместо тысяч отдельных баз. Это резко снижает стоимость администрирования, обновления и резервного копирования.
Второй сценарий — холдинги и франчайзинговые сети, где удобно держать дочерние компании в одной базе с общими классификаторами, но с изолированным учётом. Третий — разработка и тестирование: технологические области используют для отладки обновлений конфигурации перед раскаткой на боевые области.
Разделение данных не заменяет разграничение прав доступа. Разделитель изолирует области друг от друга, а роли и RLS ограничивают пользователей внутри одной области. В сервисе работают оба механизма одновременно.
Как включить и настроить разделение данных
Настройка выполняется в конфигураторе и требует аккуратности: изменение разделителей в базе с данными может привести к их недоступности. Порядок действий для новой конфигурации выглядит так.
- 1Создайте общий реквизит (например, «ОбластьДанных») с типом «Число» и установите свойство «Разделение данных» в значение «Разделять».
- 2Определите состав разделителя: отметьте справочники, документы и регистры, которые должны быть разделены. Общие классификаторы в состав не включайте.
- 3В свойствах конфигурации установите режим разделения данных (свойство «Режим использования разделителей» / совместимость разделения данных).
- 4Обновите конфигурацию базы данных — платформа добавит поля разделителя в таблицы.
- 5Установите значение разделителя для сеанса программно (УстановитьЗначениеРазделенияСеанса) или через менеджер сервиса и проверьте изоляцию.
Для программной работы с разделением используются методы глобального контекста: УстановитьЗначениеРазделенияСеанса(), ПолучитьЗначениеРазделенияСеанса(), УстановитьИспользованиеРазделенияСеанса(). В типовых решениях на базе БСП (Библиотека стандартных подсистем) эти вызовы уже инкапсулированы в подсистему «Работа в модели сервиса», и вручную их вызывать обычно не требуется.
При записи нового объекта платформа автоматически проставляет ему текущее значение разделителя. Если сеанс неразделённый (использование разделения отключено), а объект разделённый — попытка записи завершится ошибкой. Это частая ситуация в фоновых заданиях, которые по умолчанию стартуют без установленного разделителя.
Ограничения и особенности разработки
Разделённый режим накладывает ограничения, которые нужно учитывать при проектировании. В разделённом сеансе нельзя записывать общие (неразделённые) объекты — для этого код переводят в неразделённый режим через установку привилегированного режима и отключение использования разделения, что требует строгого контроля, чтобы не «протечь» в чужую область.
Запросы к разделённым таблицам платформа дополняет отбором автоматически, но это влияет на производительность: индексы должны включать поле разделителя, иначе выборки по большим таблицам деградируют. При проектировании собственных индексов в разделённых регистрах это стоит учитывать.
Обмены данными и внешние обработки тоже должны быть «разделение-осведомлёнными». Обработка, которая обращается к данным без учёта текущего разделителя, в сервисе либо не сработает, либо — что хуже — при неаккуратном отключении разделения увидит данные всех абонентов сразу.
Как проверить, что изоляция работает
После настройки разделение нужно проверить эмпирически, а не полагаться на то, что «платформа сама всё сделает». Создайте две тестовые области, заведите в каждой по однотипному объекту (например, по контрагенту с разными наименованиями) и убедитесь, что из первой области вторая не видна ни в списках, ни в отчётах, ни через поиск по строке.
Отдельно проверьте фоновые и регламентные задания: они должны явно получать область данных в параметрах и устанавливать разделитель перед работой. В журнале регистрации не должно быть ошибок вида «нарушение прав доступа к разделённым данным» при штатной работе.
Как проверить результат
Из области 1 данные области 2 не отображаются нигде
В списках или отчётах видны чужие записи
Выполняются в контексте своей области без ошибок
Ошибки записи или обработка чужих данных
Одинаковые для всех областей, обновляются централизованно
Дублируются или недоступны из областей
Разделитель проставляется автоматически
Ошибка «не установлено значение разделителя»
FAQ по разделению данных в 1С
Чем разделение данных отличается от разграничения прав доступа?
Разделение работает на уровне таблиц и изолирует целые области данных друг от друга — это инструмент мультитенантности. Права доступа (роли, RLS) ограничивают действия пользователей внутри одной области: кто может читать документы, кто — проводить. Механизмы дополняют друг друга и применяются вместе.
Можно ли включить разделение в обычной файловой базе?
Технически разделение поддерживается и в клиент-серверном варианте, и в файловом, но практический смысл имеет в основном в клиент-серверных развёртываниях сервисов. Для одиночной базы одной компании разделение обычно не нужно — оно добавляет накладные расходы без выгоды.
Что произойдёт, если не установить разделитель в сеансе?
Сеанс будет неразделённым: чтение разделённых данных станет невозможным в обычном режиме, а запись разделённых объектов завершится ошибкой. Именно поэтому фоновые задания в сервисе всегда должны явно устанавливать область данных перед началом работы.
Можно ли перенести данные из одной области в другую?
Да, но не прямым копированием записей. Используются выгрузка области средствами менеджера сервиса, типовые обмены (например, через универсальный формат EnterpriseData) или специализированные обработки переноса с переназначением значения разделителя. Прямая правка поля разделителя в таблицах СУБД недопустима — она нарушает целостность ссылок и служебных данных.
Почему отчёт в сервисе работает медленнее, чем в локальной базе?
Каждый запрос к разделённым таблицам дополняется отбором по разделителю, и на больших объёмах это требует корректных индексов. Если отчёт тормозит, проверьте индексы по полям отборов вместе с полем разделителя и уберите из запросов соединения с неразделёнными таблицами без необходимости.
Нужно ли разделение данных, если у меня просто несколько организаций в одной базе?
Нет. Несколько организаций внутри одной базы — это штатный сценарий типовых конфигураций, решаемый справочником «Организации» и настройкой прав. Разделение данных нужно, когда требуется полная изоляция абонентов на уровне платформы, как в облачном сервисе.
Что важно запомнить
Разделение данных — платформенный механизм изоляции абонентов в одной базе через разделители, основа SaaS-решений вроде 1С:Фреш. Объекты делятся на разделённые и общие, сеанс работает в контексте одного значения разделителя, а любые изменения настройки в базе с данными выполняются только после резервного копирования и проверки на копии.