|
RLS, sql и ошибки | ☑ | ||
---|---|---|---|---|
0
TITKIT
11.02.16
✎
15:15
|
День добрый гуру!
Помогите с вопросом взаимодействия RLS и SQL. Есть УПП, 1с 8.2.19.130, sql 11.0.2100.60 Операционная система 6.2.9200. Есть роль разрешающая редактирование контрагентов и массив контрагентов, которые доступны данному пользователю. Он заполняется на момент старта системы и содержит группы, которые доступны. В данной роли права на чтение, изменение содержат инструкции ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица Где Выбор Когда ТекущаяТаблица.ЭтоГруппа Тогда ТекущаяТаблица.Ссылка В (&ДоступныеКонтрагенты) Иначе ТекущаяТаблица.Родитель В (&ДоступныеКонтрагенты) Конец Все работает. Пользователи видят в зависимости от подразделения каждый свои папки. Всё было бы хорошо, но потребовалось ограничить добавление в совместно видимые каждым подразделением папки. Т.е. появились два массива групп доступные на чтение и обычные. в "добавление" добавил ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица Где ТекущаяТаблица.Родитель В (&ДоступныеКонтрагенты) И НЕ ТекущаяТаблица.Родитель В (&ДоступныеКонтрагентыНаЧтение). И тут понеслось!!! У пользователей из одного конкретного подразделения вылетает ошибка SQL с руганью на SDBL.... Пользователя перетаскиваешь в другое подразделение и всё нормально: куда положено может добавлять, куда не положено- не может! Самое главное, что всё тоже самое работает на ура в файловом варианте! Полез в профайл и обнаружил, что в варианте, когда вылетает ошибка, идет инструкция SQL... THEN CASE WHEN (T2._ParentIDRRef IN (SELECT T3._INVALUELISTRRef AS INVALUELISTRRef FROM #SDBL_TMP_1 T3 WITH(NOLOCK)...... в нормальном варианте THEN CASE WHEN ((T2._ParentIDRRef IN (@P1, и дальше куча переменных я так понял где содержатся ссылки на группы. Можно конечно плюнуть на этот RLS и написать прямо в процедуре ПередЗаписью... но именно у этого подразделения имеются почему-то тормоза при работе с базой! Где копать даже не представляю(( Говорили мне как-то имеются у 1С проблемы RLS именно с этим SQL. Может кто сталкивался с этим? |
|||
1
ЧеловекДуши
11.02.16
✎
15:18
|
Люди говариваю. РЛС, зло :)
А вычибучить реквизит в справочник. И использовать его для Правильного отбора? |
|||
2
rozer76
11.02.16
✎
15:18
|
(0) попробуй это "И НЕ ТекущаяТаблица.Родитель В (&ДоступныеКонтрагентыНаЧтение)" переписать без НЕ
|
|||
3
ЧеловекДуши
11.02.16
✎
15:19
|
Попробуй поставить условие "ИЛИ" и скобочки
|
|||
4
ЧеловекДуши
11.02.16
✎
15:20
|
(2) Какая разница?
Автору нужны группы и реквизиты, которые должны быть видимы. А для определённых ролей и даже доступны на запись. |
|||
5
TITKIT
11.02.16
✎
15:33
|
(1) реквизит не вариант, поскольку проще немного в отчетах использовать "Разрешенные"
(2) Мне же нужно, чтобы в одну группу можно было записывать, а другая только на чтение Я не понял почему зависимость от подразделения и от доступных папок((( почему эта падла корректно работает в файловом варианте!( |
|||
6
mehfk
11.02.16
✎
15:36
|
Что-то не вяжется, выборка из временной таблицы вроде как должна соответствовать когда идет условие "В ИЕРАРХИИ".
|
|||
7
TITKIT
11.02.16
✎
15:38
|
(6) в иерархи не положено использовать в RLS. Поэтому перечень групп создается запросом, а потом через фиксированных массив передается в качестве параметр сеанса
|
|||
8
Franchiser
гуру
11.02.16
✎
15:40
|
возможно это связано с количеством родителей: в одном случае их много - создается ВТ, в другом случае мало и сделано через переменные
|
|||
9
Franchiser
гуру
11.02.16
✎
15:48
|
по ходу у тебя создается огромная временная таблица со всеми элементами-контрагентов, входящих в определенные группы и под нее не хватает места
|
|||
10
mehfk
11.02.16
✎
15:49
|
&ДоступныеКонтрагентыНаЧтение передается как массив, список значений или таблица значений?
|
|||
11
mehfk
11.02.16
✎
15:51
|
Сторно (10)
|
|||
12
TITKIT
11.02.16
✎
15:52
|
(8) переменных 103 штуки, в первом случае же групп тоже примерно такое же количество 168((
|
|||
13
TITKIT
11.02.16
✎
15:54
|
(9) Создается массив групп( в первом случае 168 элементов, во втором случае 103. При добавлении анализируется же входит ли новый с родителем в массив.
(10) обе переменные как фиксированный массив |
|||
14
Franchiser
гуру
11.02.16
✎
16:26
|
(13) для тестирования можно уменьшить количество групп со 168 до 100
|
|||
15
TITKIT
11.02.16
✎
16:44
|
(13) Вот это прикол!!!! Это просто финиш какой-то! Из-за этого дела.... И какой же велосипед придумывать?!(((
|
|||
16
mehfk
11.02.16
✎
16:46
|
А полный текст ошибки все-таки какой?
|
|||
17
Fragster
гуру
11.02.16
✎
16:48
|
надо сделать так, чтобы в доступных на чтение были все, которые доступны на добавление, в доступных на добавление - только те, которые на добавление/изменение. тогда шаблон останется без изменений, просто в шаблоне на чтение будет использоваться другой параметр сеанса.
|
|||
18
Fragster
гуру
11.02.16
✎
16:49
|
чтобы в доступных на чтение были все, которые доступны на добавление и на чтение
|
|||
19
Serginio1
11.02.16
✎
16:52
|
И ТекущаяТаблица.Родитель Not IN (&ДоступныеКонтрагентыНаЧтение)"
|
|||
20
Fragster
гуру
11.02.16
✎
16:53
|
(19) до свидания, производительность...
|
|||
21
TITKIT
11.02.16
✎
16:59
|
(16) Ошибка СУБД
Microsoft sql server native client 11.0: Недопустимое имя объекта #SDBL_TMP_1". hresault=80040E37, sqlsrvr:SQLState = 1,severity = 10, native = 208, line = 1 |
|||
22
TITKIT
11.02.16
✎
17:01
|
Это получается, что и тормоза у этого подразделения из-за количества в массиве((( Эта же падла везде проверяет в отчетах, документах, справочниках на доступность и разрешенность.
|
|||
23
Franchiser
гуру
11.02.16
✎
17:19
|
(22) на счет количества - это всего лишь предположение, могут быть еще какие-нибудь зациклинности
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |