gifts2017

Проверка шаблонов ограничений (RLS для 1С 8.2-8.3)

Опубликовал Максим Лёвочкин (frutty) в раздел Программирование - Инструментарий

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

Все вы, наверное знакомы с RLS (ограничения на уровне записей), но не многие смогут с лёгкостью написать свой шаблон и ограничения по нему, а тем более разобраться в чужих.

Эта обработка позволяет ввести текст шаблона ограничения и текст ограничения доступа для определённой таблицы и на выходе получить готовый запрос и его параметры, который в последствии легко отладить в такой обработке, как "Консоль запросов".

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

 

Исправлено:

  • Указывается #ИмяТекущейТаблицы, #ИмяТекущегоПраваДоступа
  • Выполняется инструкция СтрСодержит()

Выявленные ошибки:

  • Пока таковых нет

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

Наименование Файл Версия Размер
Проверка шаблонов ограничений RLS 377
.epf 10,63Kb
04.06.14
377
.epf 1.0 10,63Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. ivanov660 ivanov660 (ivanov660) 16.03.14 12:30
Скачал обработку. Запустил в демо базе бухгалтерии. И НЕ РАБОТАЕТ.
Посмотрел код, на мой взгляд можно было найти решение и получше. К примеру, один из правильных вариантов использование варианта алгоритма конечных автоматов.
К недостаткам могу отнести отсутствие в примере хотя бы краткой инструкции, и возможно добавления некого упрощенного варианта консоли запросов для проверки результата на месте.

upd. Решил попробовать на другой конфигурации (УТ) - вроде отработало. Поэтому делаю вывод, что данная обработка работоспособна не для всех версий и конфигураций. Предлагаю автору, все же доработать ее, либо описать ограничения, чтобы не вводить в заблуждение пользователей.
2. Максим Лёвочкин (frutty) 16.03.14 13:27
Подскажите в какой именно конфигурации вы запускали и под каким пользователем, а также что именно вводили.
Я не претендую на ультра правильное решение этой задачи, делал обработку для себя и она мне помогла в моих проблемах. Развивать дальше планирую по мере потребностей, с консолью конечно удобнее, но проще совместить её с более продвинутой версией.
3. Евгений Сивов (bird21) 19.03.14 09:08
Возьмем обработку на заметку, сейчас не актуально, но бывало нужно было.
4. DAnry (DAnry) 19.03.14 15:01
На мой взгляд такие вещи не стоит доверять автоматике. Занимался этим вопросом, сам писал шаблоны ограничений RLS. Тут как говорится "Семь раз отмерь, один - отрежь". Очень аккуратно надо. Поэтому совет: САМОМУ разобраться в механизме RLS и запросах ограничений (можно воспользоваться готовыми шаблонами, но обязательно разобрать их по косточкам), на основе готовых написать свои, и тестировать, тестировать, тестировать (под разными пользователями и с разными настройками)
victorkim64; +1 Ответить 1
5. Максим Лёвочкин (frutty) 19.03.14 15:30
(4) DAnry, Собственно тут и нет никакой автоматики, это всего лишь свёртываение шаблона до обыкновенного запроса, чтобы легче было видеть ошибки.
6. Андрей Волин (kser87) 20.03.14 15:09
Было бы неплохо сделать обратное преобразование: из запроса 1С в текст ограничения.

Ну и результат запроса можно прямо в обработку выводить.


инструкции предпроцессору обрабатываются? если да, то как? имею в виду такую конструкцию #Если #Иначе #КонецЕсли
7. Андрей Волин (kser87) 20.03.14 15:14
Конечно, обработка очень далека от совершенства
8. Максим Лёвочкин (frutty) 20.03.14 15:48
(6) kser87, #ЕСЛИ #ТОГДА #ИНАЧЕЕСЛИ #ИНАЧЕ #КОНЕЦЕСЛИ - обрабатываются, именно для этого и делал.
9. Алексей Белоусов (AllexSoft) 07.04.14 12:38
хорошая штука, а то со стороны платформы для RLS ни сделано ничего ( даже отбора метаданных по ролям нету, не говоря уж об отладке RLS или конструкторе шаблонов
10. Никита Грызлов (nixel) 30.05.14 18:27
Надеюсь, будет доработано под свежие версии БСП. Подписался.
11. Viacheslav Bilous (Gendalf_beliy) 30.05.14 18:43
Возьму обработку на заметку, сейчас не актуально, но бывало нужно было.
Спасибо.
12. Никита Грызлов (nixel) 10.06.14 11:48
(6) kser87, что в этом сложного?
Текст ограничения - это и есть текст запроса. Просто без "ВЫБРАТЬ", без явного указания одной таблицы и без кучи возможностей обычного запроса.
Каким образом вы захотите это инструкциями препроцессору разбавить, ни одна обработка не знает. А отсутствующие возможности - ну будет она ругаться, что у вас "ПОМЕСТИТЬ" в запросе. Толку-то от этого? все равно руками разбирать.
13. Олег Николаев (o.nikolaev) 22.07.14 14:26
1. Хотелось бы видеть более подробную инструкцию и простой пример
2. Нет возможности сохранять настройки, идеально - навигация по сохраненным настройкам - это видимо уже следующий уровень - среда разработки для RLS.
3. Возможность выполнения сформированного запроса с заданными параметрами
14. Виталий Гуляев (vital1c) 27.08.14 10:42
спасибо, обработка помогла разобраться с некоторыми шаблонами ут11
15. Дмитрий Гладун (DISAoner) 04.09.14 13:20
Под УПП (обычное приложение) не запустилась...
16. Денис Vvv (EvilDoc) 04.09.14 13:10
я для этих целей просто консоль запросов использую. Не понимаю пользы этой обработки
17. Денис Vvv (EvilDoc) 04.09.14 13:11
Ручками несколько буквочек тыкнуть - превратить шаблон в запрос - если человек этого не может то ему ни какая обработка не поможет
18. Артур Аюханов (artbear) 04.09.14 14:29
Очень полезная обработка.
Без нее слишком много буковок в обычных консолях придется переделывать.
(17) Попробуй запрос БСП получить в консоли запросов и засеки время.
19. Дмитрий Гладун (DISAoner) 05.09.14 11:51
(17) EvilDoc, пытаюсь разобрать в уже существующей базе(УПП) настройки RLS и частенько встречаю шаблоны с несколькими буковками...

#Если &ИспользоватьОграничениеПоКонтрагенты ИЛИ &ИспользоватьОграничениеПоОрганизации ИЛИ &ИспользоватьОграничениеПоПроекты #Тогда
ТекущаяТаблица
ИЗ
	#ТекущаяТаблица КАК ТекущаяТаблица
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
			СоставГруппы.Ссылка КАК ГруппаПользователей
		ИЗ
			Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
		ГДЕ
			СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
		ПО (ИСТИНА)
ГДЕ
НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL
И
	(НЕ 1 В
				(ВЫБРАТЬ ПЕРВЫЕ 1
					1
				ИЗ
					РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа
											
					#Если &ИспользоватьОграничениеПоКонтрагенты #Тогда
					ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
					ПО Контрагенты.Ссылка = ТекущаяТаблица.#Параметр(1)
					#КонецЕсли						   														  
					
					ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
						ПО
							НастройкиПравДоступаПользователей.ОбъектДоступа = ВЫБОР
									
									#Если &ИспользоватьОграничениеПоКонтрагенты #Тогда
									КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
										ТОГДА ЕСТЬNULL(Контрагенты.ГруппаДоступаКонтрагента, ЗНАЧЕНИЕ(Справочник.ГруппыДоступаКонтрагентов.ПустаяСсылка))
									#КонецЕсли
									
									#Если &ИспользоватьОграничениеПоОрганизации #Тогда
									КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
										ТОГДА ТекущаяТаблица.#Параметр(2)
									#КонецЕсли
									
									#Если &ИспользоватьОграничениеПоПроекты #Тогда
									КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Проекты)
										ТОГДА ТекущаяТаблица.#Параметр(3)
									#КонецЕсли
							
								КОНЕЦ
								И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа
								И 								
								НастройкиПравДоступаПользователей.ОбластьДанных =
								#Если &ИспользоватьОграничениеПоКонтрагенты #Тогда
									ВЫБОР КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
										ТОГДА ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.КонтрагентыДанные)
									ИНАЧЕ
										ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка)
									КОНЕЦ
								#Иначе									
									ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка)
								#КонецЕсли
																								
								И НастройкиПравДоступаПользователей.Пользователь = ГруппыПользователей.ГруппаПользователей
				ГДЕ					
					 НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
						   И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В (
						   														  ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка)
						   														  
						   														  #Если &ИспользоватьОграничениеПоКонтрагенты #Тогда
						   														  , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
						   														  #КонецЕсли
						   														  
						   														  #Если &ИспользоватьОграничениеПоОрганизации #Тогда
						   														  , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
						   														  #КонецЕсли
						   														  
						   														  #Если &ИспользоватьОграничениеПоПроекты #Тогда
						   														  , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Проекты)
						   														  #КонецЕсли
						   														  
						   														  )
				
					И НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL))
#КонецЕсли
...Показать Скрыть


Все же с обработкой было бы легче.
20. Максим Лёвочкин (frutty) 05.09.14 11:18
(19)DISAoner, какой-то маленький у вас шаблон =)

Хотел вставить шаблон из УТ11, но нарвался на это:
Прикрепленные файлы:
21. Денис Vvv (EvilDoc) 05.09.14 12:13
(20) Да, в новых конфах РЛС вообще клевый))
22. Дмитрий Гладун (DISAoner) 08.09.14 12:04
(20) frutty, дело в том, что он не мой и я хотел бы его разобрать при помощи данной обработки, но она не открывается. При попытке открыть файл ничего не происходит((
23. Максим Лёвочкин (frutty) 08.09.14 12:05
(22) DISAoner, Создайте пустую конфигурацию с управляемым интерфейсом и откройте мою обработку, должно сработать.
25. Максим Кузнецов (Makushimo) 08.12.14 18:04
на УТ 11 не работает

СтрСодержит() в выражении для Вычислить() под УФ(толстый клиент) идет по ветке Исключение
то есть не отрабатывает

запускаю туже конфу под обычными формами (толстый клиент) вычисляет без проблем

почему так?
26. Максим Лёвочкин (frutty) 09.12.14 10:15
(25) Makushimo, Что-то я вас совсем не понял, подробнее пожалуйста и желательно с примерами.
27. Сан Саныч (herfis) 29.12.14 18:37
Не работает (результат пустой).
Тексты шаблона и ограничения прилагаю файлом.
Прикрепленные файлы:
RLS.txt
28. Григорий Колосовский (igor7702) 03.06.15 07:23
Запустил под Бухгалтерия 2.0 на обычных формах - обработка не открывается, проверил на БГУ 1.0 также.
На Бухгалтерии 3.0 управляемые формы открывается.
Как запустить в Бухгалтерии 2.0?
29. Максим Лёвочкин (frutty) 03.06.15 19:39
(28) igor7702, Попробуйте в конфигураторе выставить "Использовать управляемые формы в обычном приложении"
30. Rioneri Rioneri (Rioneri) 24.08.15 22:51
условие препроцессора вычисляется передачей в запрос в конструкцию "ВЫБОР...КОГДА...ТОГДА...КОНЕЦ", что неправильно так как в запросе нельзя сравнивать поля несовместимых типов, а в инструкции препроцессора можно - в ряде случаев вычисление инструкции свалится
31. Rioneri Rioneri (Rioneri) 24.08.15 22:52
не разбирается возможность наличия в шаблоне именованных параметров (правда в типовых конфигурациях таких шаблонов вроде пока не видел) при наличии таковых обработка свалится
32. Александр Кислицин (alekckuc) 03.06.16 07:54
Приветствую, скачал обработку возможно бага возможно я что то недопонял строка 350
Текст = СтрЗаменить(Текст,"#ИмяТекущейТаблицы",""""+ИмяТекущейТаблицы+"""");
У меня в шаблоне текст #ТекущаяТаблица соответсвенно замена не выполнилась.


Заменил руками получил такую строку ТекущаяТаблица ИЗ Контрагенты КАК ТекущаяТаблица
В консоли она понятно дело не сработала, консоль хочет слово Выбрать, как тут быть ?
33. Максим Лёвочкин (frutty) 03.06.16 11:35
(32) alekckuc, приведите весь текст шаблона и ограничения.
34. Рамиль Ахмадуллин (Чародей) 12.10.16 14:48
(33) frutty, обработка не открывается в конфигурации 1С ТОиР. 8,2, галка "Использовать управляемые формы в обычном приложении" стоит.
35. Babys (babys) 06.11.16 17:15
Косяк в Управлении холдингом 1.1 / 8.3.7.2008
Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
Ошибка SDBL:
Поле ",ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеОтчетыИОбработки,ДополнительныеСведения,ПодразделенияОрганизаций,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеОтчетыИОбработки,ДополнительныеСведения,ПодразделенияОрганизаций,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеОтчетыИОбработки,ДополнительныеСведения,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеОтчетыИОбработки,ПодразделенияОрганизаций,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеСведения,ПодразделенияОрганизаций,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеОтчетыИОбработки,ДополнительныеСведения,ПодразделенияОрганизаций,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеОтчетыИОбработки,ДополнительныеСведения,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеОтчетыИОбработки,ПодразделенияОрганизаций,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеОтчетыИОбработки,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеСведения,ПодразделенияОрганизаций,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеСведения,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ПодразделенияОрганизаций,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеОтчетыИОбработки,ДополнительныеСведения,ПодразделенияОрганизаций,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеОтчетыИОбработки,ДополнительныеСведения,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеОтчетыИОбработки,ПодразделенияОрганизаций,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеСведения,ПодразделенияОрганизаций,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеОтчетыИОбработки,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ДополнительныеСведения,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,ПодразделенияОрганизаций,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеОтчетыИОбработки,ДополнительныеСведения,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеОтчетыИОбработки,ПодразделенияОрганизаций,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеОтчетыИОбработки,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеСведения,ПодразделенияОрганизаций,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеСведения,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ПодразделенияОрганизаций,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ГруппыФизическихЛиц,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеОтчетыИОбработки,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ДополнительныеСведения,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,ПодразделенияОрганизаций,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,Пользователи,УчетныеЗаписиЭлектроннойПочты,
,ВнешниеПользователи,УчетныеЗаписиЭлектроннойПочты,
" имеет неограниченную длину и не может участвовать в сравнении.

И Завершить или Перезапустить