Меню Закрыть

1С механизм разделения данных

Содержание

Однажды мы обсуждали механизмы ограничения доступа пользователей в 1С и в частности механизм RLS.

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

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

Поговорим об этом подробнее.

Разделение данных 1С

Разделение данных 1С – это механизм аналогичный RLS, организованный на другом принципе работы. Если RLS – это дополнение запросов к SQL условиями, ограничивающими список данных, то разделение данных – это SQL запросы к таблицам, в которых уже заранее отобраны данные.

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

Возможные режимы работы (в одной физической базе данных):

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

Включаем разделение данных 1С

Добавим общий реквизит Склад.

В свойствах общего реквизита укажем Состав – все документы, у которых есть реквизит Склад.

Свойство Разделение данных – Разделять. При включении свойства 1С предложит создать два параметра сеанса (см. далее).

Значение разделения данных 1С – параметр сеанса с типом равным типу общего реквизита. В данном параметре сеанса будет установлено значение, которое определит фильтр.
Использование разделения данных 1С – параметр сеанса с типом булево, в нем будет включено или выключено разделение данных 1С для данного сеанса.

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

Значение общего реквизита-разделителя при этом в момент записи разделяемого справочника и документа устанавливается системой автоматически и поменять его нельзя.

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

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

Особенности разделения данных 1С для администрирования

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

Свойство общего реквизита-разделителя – Разделение пользователей 1С – позволяет установить доступность списка пользователей в зависимости от использования разделителей.

Если разделитель включен для пользователя, то он будет виден в списке пользователей в режиме 1С Предприятие – иначе не виден.

Таким образом можно организовать различные списки пользователей для различных частей базы.

Свойство общего реквизита-разделителя – Разделение аутентификации 1С – позволяет заводить пользователей с одинаковыми именами пользователя для разных частей базы.

Читайте также:  Pentium dual core g3250

Условное разделение 1С

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

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

Возможно использовать константу с типом булево или реквизит справочника с типом булево.

Важно – у этой константы/этого справочника нужно отключить использование (выбрать Не использовать) в составе разделителей, только тогда его можно будет выбрать.

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

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

Хватит это терпеть!

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

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

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

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

Базовая сегрегация

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

Читайте также:  Как обновить чугунную ванну акрилом отзывы

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

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

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

После /Z указываем общие реквизиты по порядку. Так как в нашей типовой бухгалтерии уже есть два общих системных реквизита, указываем для них значение -0 чтобы они не использовались, а в качестве третьего (который мы создали) передаём ИНН.

1000 и 1 чекбокс

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

Подбор параметров оставляем на ваше благоразумие, усмотрение и окружение. Вот наш вариант (аккуратнее, там 20 000 пикселей).

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

Выгружаем данные из текущих баз

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

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

Загружаем данные в разделённую базу

Запускаем 1С с параметром /Z «-0,-0,+%ваш разделитель%», указывая разделитель той организации, данные которой собираемся загрузить. Запускаем универсальный обмен и скармливаем ему полученные при выгрузке файлы: сперва справочники, потом документы. Повторяем эту операцию для каждой .

Чтобы упростить задачу, мы осуществляем выгрузки массово, предварительно запуская чуть исправленную стандартную обработку через командную строку (/Execute c:выгрузка.epf). Затем вручную загружаем полученные файлы в разделённую базу.

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

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

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

Побочные эффекты: экономия места 1 к 20, косвенное увеличение скорости работы — неоценимо. В абсолютных цифрах: 50 организаций занимают 2 Гб пространства в SQL, тогда как одна отдельная база занимает от 800 Мб.

Читайте также:  Thrustmaster ferrari challenge racing wheel

Понятие общих реквизитов 1С

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

  1. в механизме разделения данных для идентификации независимых областей данных, создаваемых внутри информационной базы (свойство общего реквизита "Разделение данных");
  2. для автоматического добавления нескольким или всем объектам конфигурации одинакового реквизита с одним и тем же именем и одинаковым типом (например, если во всех документах требуется иметь реквизиты "Автор" и "Редактор", достаточно создать два общих реквизита (Автор, Редактор) и указать, в каких документах они будут использоваться, а не создавать их в каждом документе).

Разделение данных в 1С

Механизм разделения данных в 1С позволяет хранить данные нескольких независимых организаций в одной информационной базе благодаря тому, что общие реквизиты объектов конфигурации можно использовать:

  1. как одинаковый реквизит, который есть у всех объектов;
  2. как идентификатор того, что данные относятся к какой-то одной из нескольких независимых областей.
  1. Если в конфигурации существует общий реквизит "Организация", то это значит (упрощённо), что у каждого справочника, документа или другого объекта конфигурации также будет существовать реквизит "Организация". При этом любой из пользователей информационной базы имеет доступ ко всем данным, которые хранятся в этой базе, независимо от того, какая организация указана, например, в том или ином документе.
  2. Если общий реквизит "Организация" будет являться разделителем, то (упрощённо) в информационной базе будет создано несколько независимых областей данных , в каждой из которых будут храниться данные только для одной конкретной организации. Теперь, заходя в программу, пользователь будет получать доступ не ко всей информации, которая есть в информационной базе, а только к данным "своей" области, в данном случае к документам, справочникам и др. своей организации.

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

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

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

Возможности механизма разделения данных:

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

Подробнее о механизме разделения с рисунками (для понимания)

Хранение однотипных данных в 1С

Если в конфигурации существует общий реквизит "Автор", то это значит (упрощённо), что у каждого справочника, документа или другого объекта конфигурации также будет существовать реквизит "Автор". При этом нет необходимости создавать такой реквизит (Автор) в каждом документе: достаточно создать общий реквизит "Автор" и указать, в каких документах он будет использоваться (Использование — "Состав").

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

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

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.