|
оптимизация рлс без последней бсп | ☑ | ||
---|---|---|---|---|
0
ASimonova
07.02.23
✎
11:14
|
1С:Предприятие 8.3 (8.3.18.1741)
Подсистемы управление доступами нет В базе ведется учет по нескольким десяткам тысяч сотрудников и нескольким десяткам тысяч подразделений Есть документ, у него есть реквизит Сотрудник (а еще есть документ, у которого в табличной части есть реквизит Сотрудник, но это на потом) Есть РС, по которому смотрим, в каком Сотрудник работает Подразделении Нужно ограничить доступ к этим документам по списку доступных подразделений (доступных подразделений бывает до 10 тысяч, а соответственно доступных сотрудников до 30 тысяч) Пробовалось уже много чего, но хотелось бы услышать, как бы вы решали такую задачу |
|||
1
vicof
07.02.23
✎
11:25
|
Что такое доступность?
|
|||
2
vicof
07.02.23
✎
11:26
|
В чем состоит задача? В заголовке одно, в тексте другое.
|
|||
3
OldCondom
07.02.23
✎
11:27
|
А что пробовали? Это было? https://its.1c.ru/db/v8322doc#bookmark:dev:TI000000191
|
|||
4
ASimonova
07.02.23
✎
11:30
|
(1) у меня слово доступность в тексте не встречается...
(2) допустим сосредоточимся на том, что в тексте задачи, будем считать, что заголовок я сформулировала ошибочно. нужно добиться того, чтобы пользователь видел только документы по сотрудникам, которые работают в подразделениях, которые у пользователя лежат в некоем объекте метаданных. в каком - можно обсудить |
|||
5
ASimonova
07.02.23
✎
11:30
|
(3) нету доступа туда(
|
|||
6
ASimonova
07.02.23
✎
11:32
|
(3) пробовала ограничивать прямо через запрос динамического списка с разными вариантами, пробовала через рлс, в который передавала список сотрудников, пробовала через рлс, в который передавала список подразделений и прямо там вычисляла, пробовала через регистр со всеми ссылками... вроде что-то еще, но точно уже не помню. один из вариантов более или менее норм, минуту всего открывал список.
|
|||
7
p-soft
07.02.23
✎
11:36
|
ага. еще к задаче добавьте, что все работает на старом пентиуме 486 и на ленточных накопителях.
|
|||
8
ASimonova
07.02.23
✎
11:37
|
(7) и однако же, сейчас всего минуту открывается список! думаю что задача все же решаема в таких условиях
|
|||
9
Мультук
гуру
07.02.23
✎
11:38
|
(0)
Например Есть 50 000 подразделений И есть сотрудник Вася, который может смотреть документы по 40 000 подразделений из описанных выше И есть сотрудник Петя, который может смотреть документы по 2 подразделениям из описанных выше Вопрос В вашем удачном варианте 1) Для "Петя" сколько открывается список 2) А для "Вася" ? Текст запроса удачного варианта |
|||
10
p-soft
07.02.23
✎
11:38
|
(8) как в клюшках делали: формируйте общий индекс и по нему фильтруйте - самый эффективный способ
|
|||
11
p-soft
07.02.23
✎
11:40
|
и плюсом, надо вот это с "пробовала ограничивать прямо через запрос динамического списка", с использованием этого индекса
|
|||
12
p-soft
07.02.23
✎
11:43
|
вообще, все универсальные алгоритмы предназначены только для ускорения разработки. ну и кто то еще бюджеты пилить научился под это дело.
универсальность почти всегда снижает итоговую производительность. я и про рлс в т.ч. повторюсь, делайте индексы и по ним отбор в запросах, где надо. |
|||
13
ASimonova
07.02.23
✎
11:46
|
(9) 1) для Пети 1-2 минуты 2) для Васи 1-2 минуты
запрос ниже (и он с кучей доп условий, о которых я не писала), но вот я сейчас последний вариант пробую, где сотрудников записываю в РС, соединяю с доком и выбираю, и кажется это срабатывает лучше! ВыдачаНоменклатурыСотрудникам ИЗ Документ.ВыдачаНоменклатурыСотрудникам КАК ВыдачаНоменклатурыСотрудникам ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Сотрудники.Ссылка КАК Сотрудник ИЗ Справочник.Сотрудники КАК Сотрудники ГДЕ &ЕстьОграничениеПоПодразделениям И Сотрудники.Ссылка В(&ДоступныеУволенныеСотрудники) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ СотрудникиПредприятия_Интервалы.Сотрудник ИЗ РегистрСведений.СотрудникиПредприятия_Интервалы КАК СотрудникиПредприятия_Интервалы ГДЕ &ЕстьОграничениеПоПодразделениям И НЕ СотрудникиПредприятия_Интервалы.Профессия = ЗНАЧЕНИЕ(Справочник.Профессии.ПустаяСсылка) И СотрудникиПредприятия_Интервалы.Профессия В(&МассивРазрешенныхПодразделений) И &ТекущаяДатаДень МЕЖДУ СотрудникиПредприятия_Интервалы.НачалоПериода И СотрудникиПредприятия_Интервалы.КонецПериода) КАК РазрешенныеСотрудники ПО (&ЕстьОграничениеПоПодразделениям) И (ВыдачаНоменклатурыСотрудникам.Сотрудник = РазрешенныеСотрудники.Сотрудник) ГДЕ ВыдачаНоменклатурыСотрудникам.Организация В (&МассивРазрешенныхОрганизаций) И ВыдачаНоменклатурыСотрудникам.Склад В (&МассивРазрешенныхСкладов) И ВыдачаНоменклатурыСотрудникам.ВендинговыйАппарат В (&МассивРазрешенныхСкладов) И ВыдачаНоменклатурыСотрудникам.ОператорПостамата В (&МассивРазрешенныхСкладов) И (НЕ &ЕстьОграничениеПоПодразделениям ИЛИ ВыдачаНоменклатурыСотрудникам.Сотрудник = ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) ИЛИ НЕ РазрешенныеСотрудники.Сотрудник ЕСТЬ NULL) |
|||
14
ASimonova
07.02.23
✎
11:48
|
(12) ок! да, этого не пробовала, ошибку поняла
|
|||
15
Мультук
гуру
07.02.23
✎
11:54
|
(13)
Можно попробовать так 1) Вот это поместить во временную таблицу, в тексте запроса сделать левое соединение с этой временной таблицей 2) Во временной таблице проиндексировать поле сотрудник (Сотрудники.Ссылка) 3) Посмотреть на результат (ВЫБРАТЬ Сотрудники.Ссылка КАК Сотрудник ИЗ Справочник.Сотрудники КАК Сотрудники ГДЕ &ЕстьОграничениеПоПодразделениям И Сотрудники.Ссылка В(&ДоступныеУволенныеСотрудники) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ СотрудникиПредприятия_Интервалы.Сотрудник ИЗ РегистрСведений.СотрудникиПредприятия_Интервалы КАК СотрудникиПредприятия_Интервалы ГДЕ &ЕстьОграничениеПоПодразделениям И НЕ СотрудникиПредприятия_Интервалы.Профессия = ЗНАЧЕНИЕ(Справочник.Профессии.ПустаяСсылка) И СотрудникиПредприятия_Интервалы.Профессия В(&МассивРазрешенныхПодразделений) И &ТекущаяДатаДень МЕЖДУ СотрудникиПредприятия_Интервалы.НачалоПериода И СотрудникиПредприятия_Интервалы.КонецПериода) |
|||
16
p-soft
07.02.23
✎
11:56
|
(14) угу. пример работы: формируем сначала список документов с отборами по всем нужным индексам, соединяем результат уже со своей целевой выборкой. можно без временных таблиц.
|
|||
17
p-soft
07.02.23
✎
11:59
|
(16) индекс = таблица с ограничениями
|
|||
18
ASimonova
07.02.23
✎
12:02
|
(16) что-то такое делала, но без индексов, и получилось ужасно... но с индексами попробую
|
|||
19
Dmitrii
гуру
07.02.23
✎
12:08
|
Почему бы не попробовать реализовать БСП-шные механизмы?
Пример можно посмотреть в ЗУП. Там есть ограничения и по подразделениям и по группам физлиц. С вариантами "Все разрешены, кроме..." и "Все запрещены, кроме...". (4) >> у меня слово доступность в тексте не встречается... А это что: "доступных подразделений бывает до 10 тысяч, а ... доступных сотрудников до 30 тысяч"? И почему из количества подразделений в 10 тыс следует, что доступных сотрудников может быть до 30 тыс? У вас не более трёх сотрудников в подразделении? Нельзя укрупнить единицу доступа? Создать группы доступа сотрудников (по аналогии группами доступа физлиц в ЗУП) или группы доступа к подразделениям? И точно нужны все эти условия?
Все эти реквизиты Организация, Склад, ВендинговыйАппарат и ОператорПостамата никак не связаны между собой? Например, Склад не привязан к Организации? Или ВендинговыйАппарат к ОператорПостомата? Может вполне достаточно фильтровать по Склад и ВендинговыйАппарат? И всё таки! Мы говорим об ограничении доступа (любыми способами) или настройке отборов в динамических списках? Это две совершенно разные задачи, которые решать надо по-разному. |
|||
20
ASimonova
07.02.23
✎
12:16
|
(19) рализовать бсп-шные механизмы в плане самой написать кусок бсп?))) ну в целом можно, как то делала уже похожее))) но долго и судя по тому что я вижу, не особо поможет. универсальность, как тут выше писали, снижает итоговую производительность, а бсп - это про это. я подумала, что может быть задача решается как-то быстро, а я чего-то важного и очевидного не вижу
да, я поняла вопрос про доступность. доступность - это когда для пользователя мы можем указать ряд подразделений, и в дальнейшем фильтровать все документы в соответствии с указанным, чтобы он лишних документов не видел единица доступа уже укрупнена, склады друг с другом не связаны, к организациям не привязаны да, мы говорим о том, чтобы любыми способами ограничить доступ, хотя очень хотелось бы все же с рлс, но если списки будут по 2 минуты висеть, то все средства хороши |
|||
21
mistеr
07.02.23
✎
12:23
|
(13) А сколько времени открывается список со всеми доп. условиями, но без РЛС?
Ну и на таких объемах уже надо переходить на уровень ниже, выкладывать и обсуждать планы запросов. |
|||
22
ASimonova
07.02.23
✎
12:27
|
(21) а где все эти доп условия, если не в рлс? в списках документов? хоть в рлс хоть в запросах дин списков, быстро, очень быстро открывается, если не фильтровать по сотрудникам и подразделениям т.к. складов и организаций мало
а этого я еще не умею... ну понятно, буду учиться |
|||
23
ASimonova
07.02.23
✎
12:28
|
если что, то вот это отлично сработало!
просто заранее надо вести РС с актуальными данными, т.е. задача усложняется в каком-то смысле ВыдачаНоменклатурыСотрудникам ИЗ Документ.ВыдачаНоменклатурыСотрудникам КАК ВыдачаНоменклатурыСотрудникам ГДЕ ВыдачаНоменклатурыСотрудникам.Организация В (&МассивРазрешенныхОрганизаций) И ВыдачаНоменклатурыСотрудникам.Склад В (&МассивРазрешенныхСкладов) И ВыдачаНоменклатурыСотрудникам.ВендинговыйАппарат В (&МассивРазрешенныхСкладов) И ВыдачаНоменклатурыСотрудникам.ОператорПостамата В (&МассивРазрешенныхСкладов) И (НЕ &ЕстьОграничениеПоПодразделениям ИЛИ ВыдачаНоменклатурыСотрудникам.Сотрудник В (ВЫБРАТЬ ДоступныеСотрудники.ДоступныйСотрудник КАК ДоступныйСотрудник ИЗ РегистрСведений.ДоступныеСотрудники КАК ДоступныеСотрудники ГДЕ ДоступныеСотрудники.Пользователь = &ТекущийПользователь)) |
|||
24
mistеr
07.02.23
✎
12:32
|
(23) Это называется материализация :)
|
|||
25
p-soft
07.02.23
✎
12:41
|
(23) млдц. только лучше внутренними соединениями, хоть и громоздко
|
|||
26
p-soft
07.02.23
✎
12:42
|
(25) кеширование и индексирование - лучший способ заставить цифровой антиквариат работать))
|
|||
27
Dmitrii
гуру
07.02.23
✎
13:36
|
(20) >> рализовать бсп-шные механизмы в плане самой написать кусок бсп?)))
Зачем самой переизобретать БСП? Внедрить БСП в вашей конфигурации в части нужных подсистем - Управление доступом. Самой писать с нуля не надо. Только тот код, который требуется в инструкции. https://its.1c.ru/db/bsp317doc#content:4:1:issogl1_управление_доступом >> универсальность, как тут выше писали, снижает итоговую производительность, а бсп - это про это. БСП конечна далека от идеалов производительности. Но БСП не про это. Если Вы думаете, что сумеете придумать под ваши задачи более оптимальный и производительный инструмент, то будьте готовы к неприятным открытиям. У Вас изначально стоит задача реализовать универсальный механизм - ограничение доступа на уровне записей одновременно по нескольким разрезам и динамически изменяющимся наборам. >> мы говорим о том, чтобы любыми способами ограничить доступ, хотя очень хотелось бы все же с рлс. Тогда почему вы продолжаете обсуждать оптимизацию запросов в динамических списках? Вы точно понимаете в чём разница между ограничениями доступа на уровне записей (РЛС) и отборами в запросах к динамическим спискам? |
|||
28
ASimonova
07.02.23
✎
13:40
|
(25) о, а я наоборот читала что так лучше...
|
|||
29
ASimonova
07.02.23
✎
13:42
|
(27) как раз у меня был отличный проект, который на бсп работал чудовищно в силу скромных ресурсов сервера, а переписав почти все самостоятельно, я увидела, что все просто летает, так что к бсп у меня так себе отношение, ну уж извините
да, чем отличается рлс и запросы в дин списках хорошо понимаю, спасибо) |
|||
30
mistеr
07.02.23
✎
13:42
|
(27) Что-то мне подсказывает, что тут не универсальная, а частная задача. И частное решение для нее вполне годится имхо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |