gifts2017

Регистры правил - права доступа, запрет редактирования, автоподстановка реквизитов и т.д.

Опубликовал 33lab (33lab) в раздел Программирование - Инструментарий

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

Каждый регистр правил содержит измерения и ресурсы. Измерения - это условия, определяющие выбор ресурса, который будет обрабатываться системой.

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

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

Примеры использования подсистемы:

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

Преимущества использования подсистемы:

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

Подсистема "Регистр правил" может быть встроена в любую конфигурацию. Далее специалист по внедрению либо "продвинутый" пользователь может самостоятельно создавать собственные регистры правил, дополнять существующие (предопределенные) регистры - создавать измерения, ресурсы и т.д.

Создание регистра правил

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

1. По кнопке "Добавить" создаем регистр правил "Установка даты запрета редактирования":

Регистры правил - новый

2. В дереве "Регистры правил" встаем в раздел "Измерения" в новом регистре и создаем необходимые измерения:

  • Пользователь
  • Вид документа
  • Дата запрета
  • Возраст документа

3. В разделе "Ресурсы" создаем ресурс "Доступ".

Регистры правил - измерения

4. Последовательно вызываем форму редактирования каждого измерения и ресурса, описываем свойства атрибута, свойства элементов управления, при необходимости создаем Модуль атрибута. Если выполнение модуля связано с наступлением события, на закладке "Событие" добавляем строку и выбираем событие из списка событий.

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

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

Регистры правил - модуль атрибута

В результате создается регистр правил следующего вида:

Регистры правил - установка даты запрета редактирования

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

Далее можно ограничить редактирование "Документа 1" для "Пользователя 1" датой 15.09.2009 г., а "Документ 2", напротив, дать возможность редактировать, если он создан до 13.09.2009 г.

И, наконец, "Пользователь 2" сможет редактировать только "Документ 3", созданный в пределах 30 дней до текущей даты.

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

Применение регистра правил к объектам системы

Настройка использования регистра правил производится при помощи служебного регистра правил - "Управление регистрами правил". Он вызывается через справочник "Регистры правил". В служебном регистре правил должно быть определено, при каких событиях, в каких видах объектов производится обращение к определенному регистру правил.

Для регистра правил "Управление регистрами правил" действуют следующие принципы: 

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

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

2. Если к одному и тому же событию и объекту привязано несколько регистров правил, будут последовательно выполняться все правила.

Отбор в регистрах правил

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

По кнопке "Отбор" вызовите диалог "Отбор и сортировка":



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

2. Выберите Тип сравнения

3. Выберите Значение отбора.

По кнопке ОК в регистре правил будет произведен отбор согласно заданным параметрам.

Правила описания модуля атрибута

При описании модуля атрибутов регистров правил действуют следующие правила и операторы:

Описание алгоритма определения входящих измерений

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

Пример:

ЗначениеИзмерения = ПараметрыСеанса.ТекущийПользователь;

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

 

Описание алгоритма обработки ресурсов

Оператор "{ЗначениеРесурса}" используется для совершения действия над ресурсом, полученным в результате выполнения правила.

 

Описание общих операторов

Оператор "СтруктураПараметров":

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

Пример:

СтруктураПараметров.Отказ = Не {ЗначениеРесурса};

Тестирование регистра правил

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

По кнопке "Действия" > "Тестировать правила" вызывается обработка тестирования регистра правил.

Регистры правил - тестирование

Встраивание подсистемы "Регистры правил" в конфигурацию

Подсистема "Регистр правил" может быть встроена в любую конфигурацию. Далее специалист по внедрению либо "продвинутый" пользователь может самостоятельно создавать собственные регистры правил, дополнять существующие (предопределенные) регистры - создавать измерения, ресурсы и т.д.

В качестве дистрибутива подсистемы "Регистры правил" выступает файл "1Cv8.cf".

Перед началом встраивания подсистемы рекомендуется сделать резервную копию конфигурации!

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

1. Запустить конфигурацию в режиме "Конфигуратор".

2. Выбрать пункт меню Конфигурация > Сравнить/объединить с конфигурацией из файла

3. Указать путь к файлу подсистемы "Регистры правил" (1Cv8.cf). Подтвердить постановку на поддержку.

Регистры правил - объединение

4. Важно!!! В окне "Сравнение, объединение" снимите отметку в корне дерева конфигурации:

Регистры правил - сравнение объектов

5. Установите три отметки в ветвях дерева конфигурации:

    • Регистры правил (Общие > Подсистемы > Регистры правил)

Регистры правил - дерево конфигурации

    • рпОбщийМодуль (Общие > Общие модули > рпОбщийМодуль)

Регистры правил - управление

  • Подписки на события (Общие > Подписки на события)

Регистры правил - установка

  • рпХранилищеПравил (Справочники > рпХранилище правил)

  • рпСобытияСистемы (Перечисления > рпСобытияСистемы)

6. Встать в корень дерева конфигурации и по щелчку правой кнопки мыши выбрать последовательно Режим объединения для подчиненных объектов > Объединить с приоритетом основной конфигурации.

7. Встать в корень дерева конфигурации и по щелчку правой кнопки мыши выбрать последовательно Порядок для подчиненных объектов > Из файла.

8. Щелкнуть кнопку "Выполнить" для запуска процедуры объединения.

9. Обновить конфигурацию базы данных по клавише F7.

 

Ограничение демо-версии: Системная дата не должна быть больше 31.12.2015г.

Скачать файлы

Наименование Файл Версия Размер
"Регистры правил" - демо-версия подсистемы 21
.cf 481,03Kb
02.04.15
21
.cf 481,03Kb Бесплатно
Лицензионное соглашение 37
.doc 37,50Kb
08.04.13
37
.doc 37,50Kb Бесплатно
Подсистема "Регистры правил"
25.12.2014
15700 руб.

Моментальная
доставка

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Артур Аюханов (artbear) 05.11.09 16:44
Отличная вещь, всем рекомендую.
С помощью сабжа удалось довольно легко и просто реализовать довольно извращенную логику в торговых конфах.

Тем более, что есть различное тестирование правил и их поведения.
2. Ярослав Радкевич (WKBAPKA) 05.11.09 17:33
насколько я помню, сама методология регистров правил была описана еще для 7.7. В инете если порыться можно найти статью, очень популярно расписано. Эта разработка автора статьи или просто реализация идеи?
3. Евгений Мартыненков (JohnyDeath) 05.11.09 17:36
(2) Ссылка на статью дана в самом конце. Это реализация.
4. Ярослав Радкевич (WKBAPKA) 05.11.09 17:47
5. 33lab (33lab) 05.11.09 18:38
(2) Автор цикла статей по регистрам правил (всего их 3) - Дмитрий Малюгин.
В статьях можете почитать теорию (ссылка на статью приведена выше) - а здесь увидеть реализацию.
6. Михаил (mdzen) 05.11.09 19:15
Отлично и ,как всегда, основательно... Так держать! :D
7. Антон Богданов (Marks007) 06.11.09 09:18
Очень хорошо. Для полноего счастья не хватает только правил проведения документов. Или они имеются в платной версии?
8. 33lab (33lab) 06.11.09 09:27
(7) К сожалению не совсем понятен вопрос (можете пояснить?).
Вы можете создавать любые правила - ограничений на создание правил нет никаких.
9. Антон Богданов (Marks007) 06.11.09 10:32
Извиняюсь, не совсем понял возможности системы прежде чем написал свой предыдущий пост. Возможно, я их и сейчас не понял и сейчас напишу глупость)).

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

1) Создать правило "Проведение Документа1"
2) Создать константу и привязать к ней правило из п 1.
3) Создать подписку на событие ОбработкаПроведения. В ее модуле вызвать правило из константы.
4) В данном правиле завести измерение "Вид документа" и ресурс "Проведение"
5) В модуле атрибута ресурса написать обработчик проведения

пРег = РегистрыНакопления.РегистрНакопления1.СоздатьНаборЗаписей();
пРег.Отбор.Регистратор.Установить(СтруктураПараметров.ЭтотОбъект.Ссылка);
пЗапись = пРег.Добавить();
пЗапись.Измерение1 = СтруктураПараметров.ЭтотОбъект.Номер;
пЗапись.Ресурс1 = ДеньГода(СтруктураПараметров.ЭтотОбъект.Дата);
пЗапись.Период = СтруктураПараметров.ЭтотОбъект.Дата;
пРег.Записать();

ИМХО, было бы очень удобно исключить шаги 2,3,4 и раздавать обработчики (и других типовых действий) минуя конфигуратор. Да и ресурс "Проведение" можно было-бы не создавать, а вынести данные действия в модуль самого правила.
10. 33lab (33lab) 06.11.09 10:46
(9) Теоритически все, что вы описали - правильно, в том смысле, что данный пример будет работать, но регистры правил не совсем для этого предназначены (хотя конечно можно и так их использовать)

То что вы хотите - намного удобнее (и правильнее) реализовывать при помощи механизма типовых операций (http://www.33lab.ru/v8/top.shtml)
(в нем можно настроить движением по любым регистрам)

Вот только данный механим не вынесен в отдельную подсистему.
11. Антон Богданов (Marks007) 06.11.09 10:56
Не отказался бы от такого механизма, вероятно придется реализовывать его самостоятельно, хотя трудозатраты прогнозируюся приличные.
12. Сергей Большаков (axae) 11.11.09 10:27
Скачал демо версию 1Cv8.cf, делаю так, как указано выше для конфигурации Бухгалтерия предприятия, редакция 1.6 (1.6.20.6),
Выдает сообщение при нажатии на Выполнить в окне сравнения и объединения конфигураций:
[Постановка на поддержку/ обновление конфигурации невозможна]
Правила поставщика для следующих объектов вступают в противоречие с правилами объединения:
Ниже в окошке перечислены все объекты справочника РегистрыПравил - реквизиты, макеты, формы, табличные части
13. Сергей Большаков (axae) 11.11.09 10:35
Если вместо
"7. Встать в корень дерева конфигурации и по щелчку правой кнопки мыши выбрать последовательно Порядок для подчиненных объектов > Порядок из основной конфигурации."
сделать порядок "Из файла", то сравнение/объединение выполняется успешно.
14. 33lab (33lab) 11.11.09 11:01
Спасибо за указанную неточность. Исправили в описании.
15. Asdam (Asdam) 11.11.09 11:25
Неплохо бы сделать возможность выбирать пользователя или группу пользователей, так как если пользователей много, не удобно для каждого пользователя настраивать регистр правил.
16. 33lab (33lab) 11.11.09 11:29
(15) Именно так и сделано, вы можете выбрать как конкретного пользователя так и группу пользователей.
17. Asdam (Asdam) 11.11.09 11:43
(16) Я имею ввиду справочник "Группы пользователей", как в типовых при добавлении даты запрета изменения данных
18. 33lab (33lab) 11.11.09 12:25
(17) Ясно.
Регистры правил поставляются как универсальная подсистема, т.е. для любой конфигурации (не только для типовых). А то, что вы предложили - это просто еще одно измерение, которое можно добавить (пользовательское измерение) либо в существующее предопределенное правило (Дата запрета редактирования), либо в любое новое правило.
19. Сергей Большаков (axae) 12.11.09 15:44
На сайте http://www.33lab.ru/v8/regpr.shtml седьмой пункт инструкции внедрения.
20. 33lab (33lab) 12.11.09 15:48
21. Ivan Kovtun (i.kovtun) 17.11.09 11:48
Как лицензируется данная подсистема?
22. 33lab (33lab) 17.11.09 13:19
(21) Добавлено лицензионное соглашение.
23. desty (lustin) 11.05.10 14:31
24. Елена Крупская (AlenkaKR) 16.06.10 11:57
Здравствуйте. Заинтересовались данным продуктом, скачали демо версию, начали тестировать. Не работают правила на события формы. Подскажите пожалуйста как заставить их работать...
25. 33lab (33lab) 16.06.10 12:58
(24) Не работают правила или не срабатывают события?
(если есть возможность стукнитесь в аську)
26. Елена Крупская (AlenkaKR) 17.06.10 07:13
Уже разобрались=) Получается, что вы прописываете выполнение правила в саму форму. А нам бы не хотелось вмешиваться в штатные объекты конфигурации..
27. 33lab (33lab) 17.06.10 09:01
(26) События перехватываются только те которые возможно перехватить в "Подписке на события", все остальные события приходится прописывать в форме объекта, что бы не вмешиваться в штатные объекты\формы прописывайте события в глобальных вызовах (в типовых конфигурациях обычно они есть)
28. Борис Нагаев (nbm) 02.08.10 06:22
Всё это интересно но в моем браузере IE8 не отражаются ваши картинки :cry:
29. rasswet (rasswet) 02.08.10 09:38
(28) аналогично не отображает в гугл-хроме
30. 33lab (33lab) 02.08.10 14:40
(28) (28) Проблема не в браузерах , проблема была в нашем местном провайдере, который предоставляет услуги хостинга (картинки грузятся по ссылкам с нашего сайта).
31. Сергей Примаков (Skazy) 09.12.10 21:44
Скачал демо версию, пытаюсь настроить заполнение реквизитов документа при открытии и запрет редактирования. Правила не срабатывают. Это ограничение демо версии или надо будет дописывать этот механизм в конфе?
32. 33lab (33lab) 09.12.10 22:58
(31) Дописывать в конфе ничего не надо, ограничение демо-версии: Системная дата не должна быть больше 01.12.2009г. (поменяйте системную дату - правила сработают).
P.S. Если что-то не получится - можете стукнутся а аську.()
33. Сергей Примаков (Skazy) 10.12.10 09:55
А номер аськи можно узнать? Есть несколько вопросов по разработке и приобретению...
34. 33lab (33lab) 10.12.10 10:03
(33) в профайле есть все контакты (1.6.5.7.6.8.9.3.8)
35. Sergey (Sergey K) 04.07.11 14:32
(0) Какие ограничения у демо версии?
36. 33lab (33lab) 04.07.11 15:43
(35) Ограничение демо-версии: Системная дата не должна быть больше 01.12.2009г.
Можете скачать с нашего сайта http://33lab.ru/load/viewcategory/6.html (там выложена более новая версия)
(Ограничение демо-версии: Системная дата не должна быть больше 01.08.2011г.)
37. Сергей Черниенко (Chernik) 26.07.13 11:41
(11) Marks007, конструктор проводок (движений по регистрам) и использую больше 10 лет еще с 7.7. С трудом представляю как бы обходился без него. Вообще, считаю описание движений в коде сродни программированию в стиле
СправочникНоменклатура.НайтиПоКоду("00000124")

Затраты по адаптации механизма типовых операций в отдельную подсистему "конструктор движений" вполне осязаемые. Все зависит от степени желаемой автоматизации самого процесса описания движений. Аскетично можно уложиться в несколько десятков человеко-часов.
38. Михаил Кузнецов (hotey) 19.08.14 22:46
Подскажите, на 8.3.5 будет работать? С конфигурацией "1С:ERP. Управление предприятием 2.0" объединить получится?
39. 33lab (33lab) 20.08.14 09:34
(38) hotey, Добрый день. Подсистема написана\работает на обычных формах, следовательно для "1С:ERP. Управление предприятием 2.0" не подойдет.