Использование механизма разделения данных вместо RLS. Разделение данных в бсп Редактирование модуля формы

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

Общие реквизиты были первоначально реализованы в версии 1С 7.7, но сразу в платформу 8 версии разработчики его не включили. Механизм общих реквизитов был введен разработчиками 1С только в релизе 8.2.14.

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

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

Единственное ограничение общих реквизитов — невозможность использования их в .

Рассмотрим основные настройки и свойства общих реквизитов, отличные от других объектов конфигурации:

Состав — список объектов, к которым будет использован общий реквизит, настройка напоминает настройку плана обмена.

Получите 267 видеоуроков по 1С бесплатно:

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

Разделение данных — эту настройку рассмотрим отдельно.

Разделение данных в 1С с помощью общего реквизита

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

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

Настройка разделения данных с помощью общих реквизитов 1С

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

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

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

Пример использования общего реквизита

Разберем настройку общего реквизита в 1С 8.3 на примере каркасной конфигурации и реквизита Организация:

В системе имеется 3 документа, где необходимо указание реквизита Организация: это Приходная Накладная, Расходная Накладная, Начисление Зарплаты.

Настройка проста:

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

Все, настройка окончена!

Смотрим результат:

Система отображает общий реквизит «как свой»: и в запросах, и в реквизитах формы, и в других местах. Вот такое волшебство! 🙂

Не добавляется общий реквизит 1С 8.3

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

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

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

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

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

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

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

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

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

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

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

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

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

Для установки значения разделителя учета следует воспользоваться пунктом "Разделитель учета" меню "Действия" или соответствующей кнопкой панели инструментов. При этом на экран выдается диалог для установки значения разделителя учета.

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

Кнопка "Пустое значение" позволяет стереть введенное значение разделителя учета, то есть задать пустое значение. Это имеет смысл в том случае, если, наряду с конкретными значениями разделителя учета, в проводках использовалось и пустое значение.

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

Для установки выбранных значений следует нажать кнопку "ОК" . Для отказа от установки значений - кнопку "Отмена" .

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

Относительно новая функциональная особенность 1С, отнесенная к облачным технологиям. После появления функционала компанией 1С была доработана БСП. Эти же доработки вошли в состав основанных на БСП типовые конфигурации, например, УНФ и УТ11.

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

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

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

Включение механизма

Если ваша самописная конфигурация основана на БСП, то, скорее всего, перед включением необходимо внедрить загадочную библиотеку "1С:Библиотека технологии сервиса". Странно, что даже Гугл не знает о таком продукте 1С. А в типовых конфигурациях процедуры ПроверитьВозможностьИспользованияКонфигурацииВМоделиСервиса в модуле РаботаВМоделиСервиса не существует. Скорее всего, найти недостающие части из этой библиотеки можно в типовых конфигурациях, выполненных на основе БСП. В частности, одна из подсистем называется СтандартныеПодсистемы > РаботаВМоделиСервиса > ВыгрузкаЗагрузкаДанных.

Механизм разделения данных включается через установку константы ИспользоватьРазделениеПоОбластямДанных. Можно установить через пункт меню Все функции.

Создание пользователей области данных

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

Запуск 1С с параметром командной строки

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

1С можно запустить сразу в режиме разделения данных. Предусмотрен параметр командной строки /Z. Например, параметр «/Z-,+1» указывает, что 1С запускается со значением Области данных основные данные равным 1, разделитель Область данных вспомогательные данные не установлен.

Способ очень ненадежный. При запуске возникает ошибка в процедуре РаботаВМоделиСервиса. ПриПроверкеВключенияБезопасногоРежимаРазделенияДанных. Ничего лучшего, чем закомментировать эту процедуру, я не нашел. Процедура проверяет, есть ли у пользователя право менять текущую область данных, ограничены ли его права и влияет на безопасность.

Далее при запуске возникают несколько ошибок среди них: «Разделенным пользователям не может быть назначена роль Администратор системы», «Разделенным пользователям не может быть назначена роль Запуск толстого клиента».

Пользователь не найден в справочнике Пользователи - проблему победить не удалось. В традиционном сценарии Пользователь регистрируется при первом входе. Подозреваю, что при разделении данных Пользователи создаются через другое приложение 1C Fresh.

Заполнить регистр сведений Области данных

Для каждой области нужно заполнить запись в регистре сведений Области Данных, присвоив областям номера и статус «Используется». Обработки могут проверять наличие записей в этом регистре перед началом выполнения.

Вход в область данных

Администрирование - Сервис - Вход в область данных (ОбщаяФорма.ВходВОбластьДанных)

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

Выгрузка данных из области

Текущая область выгружается через ОбщаяФорма. ВыгрузкаДанных. До ее использования нужно выполнить вход в нужную область данных. Форма не выведена в интерфейс пользователя в раздел Администрирование.

Данные сериализуются конфигурацией в XML-формат и запаковываются в ZIP. То есть архивирование происходит не средствами 1С-конфигуратора, как традиционная выгрузка.

Загрузить данные в область

ОбщаяКоманда.ЗагрузитьДанныеВОбласть

Для появления в Администрирование-Сервис нужно через Конфигуратор в составе подсистемы НастройкаИАдминистрирование установить видимость.

Данные загружаются в выбранную область. До этого они должны быть выгружены в XML-формат.

Выводы

Не удалось запустить систему через задание разделителей в командной строке. Система отказалась работать из-за незарегистрированного пользователя в справочнике Пользователи. Добраться до справочника не получилось по той причине, что система не пускает пользователей с административными правами. Думаю, что этот сценарий предусматривает обязательную связь с 1CFresh.

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

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

Интересно было бы узнать о хитрой задумке авторов БСП относительно общих параметров сеансов для двух разделителей, если вызов будет с параметрами: «/Z-,+1», «/Z+1,+1» и «/Z+1,-».

Что Вы узнаете из этой статьи?

  • В статье рассматривается предназначение режима разделения итогов
  • Разбирается поведение системы «1С:Предприятие 8» при параллельной работе большого количества пользователей
  • Показываются минусы режима разделения итогов
  • Выдаются рекомендации по корректному использованию разделения итогов регистра

Платформа «1С:Предприятие 8» содержит возможности и механизмы, о работе которых не все имеют полное представление, как и о способах их эффективного использования. Таковым является режим разделения итогов.

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

Покажем эффективность данного режима с помощью примера. Для этого рассмотрим ситуацию до и после включения режима разделения итогов.

До включения режима разделения итогов

Мы имеем в наличии два одинаковых документа с номерами 001 и 002:

Оба документа осуществляют движение по регистру накопления. Контроля остатков нет. Структура регистра накопления:

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

При этом на уровне СУБД возникает следующая картина:

Вот что происходит в системе:

  1. Документы пытаются внести запись в регистр накопления
  2. На уровне СУБД регистр накопления представлен двумя таблицами: таблицей движений и таблицей остатков (таблица итогов).
  3. В таблице движений возможна запись документами своих данных параллельно. Это обеспечивается различными значениями поля «Регистратор», и, соответственно, работа идет с различными строками таблицы.
  4. А вот в таблице остатков нет поля «Регистратор», данные в этой таблице хранятся в разрезе измерений самого регистра.
  5. Тут наблюдается ситуация, при которой двум документам необходимо изменить одну запись, но одну запись одновременно менять нельзя.
  6. Для того чтобы не потерять записываемые данные, какой-либо из документов должен ожидать своей очереди на запись, пока другой документ не запишет свои движения. И, после того как первый из документов внесет свои движения, второй сможет внести уже свои.

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

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

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

Включение режима разделения итогов

Включение данного режима выполняется достаточно просто:

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

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

В таблице итогов регистра накопления/бухгалтерии появляется новый столбец «Разделитель». В самой СУБД он назван «Splitter».

При этом таблица движений остается неизменной, разделителем в ней выступает «Регистратор». Изменение мы видим в таблице итогов.

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

Такая реализация режима разделения итогов делает возможным выполнять параллельную запись всем транзакциям.

В нашем примере с двумя документами при включении режима наблюдается следующее:

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

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

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

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

В нашем случае с двумя документами для получения остатка товара «Стол» по складу «Основной» возникает необходимость сложения двух строк для получения итогового значения «7». При выключенном разделителе группировка строк (сложение) не требуется.

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

Для этого необходимо выполнить условия:

  1. По регистру нет контроля остатков – нет чтения данных в транзакции. В регистрах бухгалтерии контроль остатков, как правило, отсутствует. Но если контроль остатков присутствует, то мы не получим никакого выигрыша в производительности. К тому же, при контроле остатков нужно использовать свойство набора записей «БлокироватьДляИзменения», так как возникает вероятность взаимоблокировки.
  2. С регистром выполняется параллельная работа пользователей, причем активная.

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

Бурмистров Андрей



gastroguru © 2017