|
Пятничная задача на эксперта ;)
| ☑ |
0
Fragster
гуру
14.07.17
✎
10:44
|
Есть база на БСП 2.1, неопределенное время назад перестал формироваться отчет по правам доступа, зависает на запросе из процедуры ВидыОграниченийПравОбъектовМетаданных() формы отчета ПраваДоступа
в РС НаборыЗначенийДоступа около 150к записей
|
|
1
Fragster
гуру
14.07.17
✎
10:45
|
ну и да - мсскуль, переиндексация, обновление статистик и сброс proccache сделан
|
|
2
директор мира
14.07.17
✎
10:54
|
настраивай ТЖ
|
|
3
mistеr
14.07.17
✎
11:03
|
(0) Запрос выложи, влом искать.
|
|
4
sFAQer
14.07.17
✎
11:03
|
(0) Запрос то покажи
|
|
5
aleks_default
14.07.17
✎
11:03
|
Текст процедуры/запроса в студию
|
|
7
Fragster
гуру
14.07.17
✎
11:05
|
ВЫБРАТЬ
ПостоянныеВидыОграничений.Таблица,
ПостоянныеВидыОграничений.Право,
ПостоянныеВидыОграничений.ВидДоступа,
ПостоянныеВидыОграничений.ТаблицаОбъекта
ПОМЕСТИТЬ ПостоянныеВидыОграничений
ИЗ
&ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ПостоянныеВидыОграничений.Таблица,
"Чтение" КАК Право,
НаборыЗначенийДоступа.ВидДоступа
ПОМЕСТИТЬ ПеременныеВидыОграничений
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
ПО Идентификаторы.Ссылка = ПостоянныеВидыОграничений.ТаблицаОбъекта
И (ПостоянныеВидыОграничений.Право = "Чтение")
И (ПостоянныеВидыОграничений.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка))
ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки))
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Наборы.Объект КАК Объект,
Наборы.НомерНабора КАК НомерНабора
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК Наборы
ГДЕ
Наборы.Чтение) КАК НомераНаборовПрава
ПО НаборыЗначенийДоступа.Объект = НомераНаборовПрава.Объект
И НаборыЗначенийДоступа.НомерНабора = НомераНаборовПрава.НомерНабора
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПостоянныеВидыОграничений.Таблица,
"Добавление",
НаборыЗначенийДоступа.ВидДоступа
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
ПО Идентификаторы.Ссылка = ПостоянныеВидыОграничений.ТаблицаОбъекта
И (ПостоянныеВидыОграничений.Право = "Добавление")
И (ПостоянныеВидыОграничений.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка))
ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки))
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Наборы.Объект КАК Объект,
Наборы.НомерНабора КАК НомерНабора
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК Наборы
ГДЕ
Наборы.Добавление) КАК НомераНаборовПрава
ПО НаборыЗначенийДоступа.Объект = НомераНаборовПрава.Объект
И НаборыЗначенийДоступа.НомерНабора = НомераНаборовПрава.НомерНабора
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПостоянныеВидыОграничений.Таблица,
"Изменение",
НаборыЗначенийДоступа.ВидДоступа
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
ПО Идентификаторы.Ссылка = ПостоянныеВидыОграничений.ТаблицаОбъекта
И (ПостоянныеВидыОграничений.Право = "Изменение")
И (ПостоянныеВидыОграничений.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка))
ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки))
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Наборы.Объект КАК Объект,
Наборы.НомерНабора КАК НомерНабора
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК Наборы
ГДЕ
Наборы.Изменение) КАК НомераНаборовПрава
ПО НаборыЗначенийДоступа.Объект = НомераНаборовПрава.Объект
И НаборыЗначенийДоступа.НомерНабора = НомераНаборовПрава.НомерНабора
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПостоянныеВидыОграничений.Таблица,
"Удаление",
НаборыЗначенийДоступа.ВидДоступа
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
ПО Идентификаторы.Ссылка = ПостоянныеВидыОграничений.ТаблицаОбъекта
И (ПостоянныеВидыОграничений.Право = "Удаление")
И (ПостоянныеВидыОграничений.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка))
ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки))
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Наборы.Объект КАК Объект,
Наборы.НомерНабора КАК НомерНабора
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК Наборы
ГДЕ
Наборы.Удаление) КАК НомераНаборовПрава
ПО НаборыЗначенийДоступа.Объект = НомераНаборовПрава.Объект
И НаборыЗначенийДоступа.НомерНабора = НомераНаборовПрава.НомерНабора
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПостоянныеВидыОграничений.Таблица,
ПостоянныеВидыОграничений.Право,
ПостоянныеВидыОграничений.ВидДоступа
ИЗ
ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
ГДЕ
ПостоянныеВидыОграничений.ВидДоступа <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ПеременныеВидыОграничений.Таблица,
ПеременныеВидыОграничений.Право,
ПеременныеВидыОграничений.ВидДоступа
ИЗ
ПеременныеВидыОграничений КАК ПеременныеВидыОграничений
ГДЕ
ПеременныеВидыОграничений.ВидДоступа <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)
И ПеременныеВидыОграничений.ВидДоступа <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения)
И ПеременныеВидыОграничений.ВидДоступа <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления)
И ПеременныеВидыОграничений.ВидДоступа <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)
|
|
8
mehfk
14.07.17
✎
11:08
|
(7) В более новых конфах он немного другой
Запрос.Текст =
"ВЫБРАТЬ
| ПостоянныеВидыОграничений.Таблица,
| ПостоянныеВидыОграничений.Право,
| ПостоянныеВидыОграничений.ВидДоступа,
| ПостоянныеВидыОграничений.ТаблицаОбъекта
|ПОМЕСТИТЬ ПостоянныеВидыОграничений
|ИЗ
| &ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТипыЗначенийВидовДоступа.ВидДоступа,
| ТипыЗначенийВидовДоступа.ТипЗначений
|ПОМЕСТИТЬ ТипыЗначенийВидовДоступа
|ИЗ
| &ТипыЗначенийВидовДоступа КАК ТипыЗначенийВидовДоступа
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ИспользуемыеВидыДоступа.ВидДоступа,
| ИспользуемыеВидыДоступа.Представление
|ПОМЕСТИТЬ ИспользуемыеВидыДоступа
|ИЗ
| &ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПостоянныеВидыОграничений.Таблица,
| ""Чтение"" КАК Право,
| ТИПЗНАЧЕНИЯ(СтрокиНаборов.ЗначениеДоступа) КАК ТипЗначений
|ПОМЕСТИТЬ ПеременныеВидыОграничений
|ИЗ
| РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
| ПО (ПостоянныеВидыОграничений.Право = ""Чтение"")
| И (ПостоянныеВидыОграничений.ВидДоступа = НЕОПРЕДЕЛЕНО)
| И (ТИПЗНАЧЕНИЯ(НомераНаборов.Объект) = ТИПЗНАЧЕНИЯ(ПостоянныеВидыОграничений.ТаблицаОбъекта))
| И (НомераНаборов.Чтение)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаборыЗначенийДоступа КАК СтрокиНаборов
| ПО (СтрокиНаборов.Объект = НомераНаборов.Объект)
| И (СтрокиНаборов.НомерНабора = НомераНаборов.НомерНабора)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПостоянныеВидыОграничений.Таблица,
| ""Изменение"",
| ТИПЗНАЧЕНИЯ(СтрокиНаборов.ЗначениеДоступа)
|ИЗ
| РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
| ПО (ПостоянныеВидыОграничений.Право = ""Изменение"")
| И (ПостоянныеВидыОграничений.ВидДоступа = НЕОПРЕДЕЛЕНО)
| И (ТИПЗНАЧЕНИЯ(НомераНаборов.Объект) = ТИПЗНАЧЕНИЯ(ПостоянныеВидыОграничений.ТаблицаОбъекта))
| И (НомераНаборов.Изменение)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаборыЗначенийДоступа КАК СтрокиНаборов
| ПО (СтрокиНаборов.Объект = НомераНаборов.Объект)
| И (СтрокиНаборов.НомерНабора = НомераНаборов.НомерНабора)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПостоянныеВидыОграничений.Таблица,
| ПостоянныеВидыОграничений.Право,
| ТипыЗначенийВидовДоступа.ВидДоступа
|ПОМЕСТИТЬ ВсеВидыОграниченийПрав
|ИЗ
| ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТипыЗначенийВидовДоступа КАК ТипыЗначенийВидовДоступа
| ПО ПостоянныеВидыОграничений.ВидДоступа = ТипыЗначенийВидовДоступа.ВидДоступа
| И (ПостоянныеВидыОграничений.ВидДоступа <> НЕОПРЕДЕЛЕНО)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ПеременныеВидыОграничений.Таблица,
| ПеременныеВидыОграничений.Право,
| ТипыЗначенийВидовДоступа.ВидДоступа
|ИЗ
| ПеременныеВидыОграничений КАК ПеременныеВидыОграничений
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТипыЗначенийВидовДоступа КАК ТипыЗначенийВидовДоступа
| ПО (ПеременныеВидыОграничений.ТипЗначений = ТИПЗНАЧЕНИЯ(ТипыЗначенийВидовДоступа.ТипЗначений))
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВсеВидыОграниченийПрав.Таблица,
| ВсеВидыОграниченийПрав.Право,
| ВсеВидыОграниченийПрав.ВидДоступа,
| ИспользуемыеВидыДоступа.Представление
|ИЗ
| ВсеВидыОграниченийПрав КАК ВсеВидыОграниченийПрав
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа
| ПО ВсеВидыОграниченийПрав.ВидДоступа = ИспользуемыеВидыДоступа.ВидДоступа";
|
|
9
sFAQer
14.07.17
✎
11:09
|
(7) объединения надо убирать, они не очень...
|
|
10
Fragster
гуру
14.07.17
✎
11:09
|
(8) скопировать/адаптировать и выполнить на старой копии (полугодовалой), то результаты неидентичны
|
|
11
Лефмихалыч
14.07.17
✎
11:10
|
(0) а задачка-то в чем?
|
|
12
Fragster
гуру
14.07.17
✎
11:10
|
(11) сделать так, чтобы отчет заработал, ваш КО
|
|
13
mehfk
14.07.17
✎
11:11
|
(10) Я бы избавился от этого
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Наборы.Объект КАК Объект,
Наборы.НомерНабора КАК НомерНабора
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК Наборы
ГДЕ
Наборы.Удаление) КАК НомераНаборовПрава
|
|
14
mehfk
14.07.17
✎
11:11
|
1с-ники тоже избавились :)
|
|
15
Fragster
гуру
14.07.17
✎
11:12
|
убирание вложенного запроса ничего не дает
|
|
16
Лефмихалыч
14.07.17
✎
11:13
|
а со справочником идентификаторов объектов метаданных все в порядке? Запусти с ключом ОбновитьТамЧо-тотамХренЗнаетЯНепомню
|
|
17
mistеr
14.07.17
✎
11:21
|
(14) От подзапроса избавились, но соединение регистра с самим собой оставили. Нафига оно вообще?
|
|
18
Fragster
гуру
14.07.17
✎
11:22
|
(16) нифига
|
|
19
mistеr
14.07.17
✎
11:22
|
(7) Соединение с регистром идет по ТИПЗНАЧЕНИЯ(), значит индекс не используется. И так 4 раза. Вот и зависает.
|
|
20
Вафель
14.07.17
✎
11:23
|
план запроса покажи
|
|
21
Fragster
гуру
14.07.17
✎
11:24
|
(19) используется. если убрать соединение самого с собой - то все летает
(18) если убрать соединение самого с собой и перенести отбор по .чтение и т.п. в соединение с Идентификаторы, то результат не такой, как если его оставить
|
|
22
aleks_default
14.07.17
✎
11:26
|
"и перенести отбор по .чтение и т.п. в соединение с Идентификаторы"
а зачем именно в соединение? переноси в условие ГДЕ
|
|
23
Вафель
14.07.17
✎
11:27
|
А если (13) развернуть? там ведь группировок нет
|
|
24
Вафель
14.07.17
✎
11:29
|
хотя это соединение вообще можно убрать
|
|
25
Fragster
гуру
14.07.17
✎
11:30
|
(24) нельзя
|
|
26
Fragster
гуру
14.07.17
✎
11:30
|
результат меняется
|
|
27
mistеr
14.07.17
✎
11:31
|
(21) Покажи скульный план исходного.
|
|
28
Вафель
14.07.17
✎
11:31
|
Ны ты условие то переносишь в ГДЕ?
|
|
29
Fragster
гуру
14.07.17
✎
11:34
|
план исходного:
|
|
30
Fragster
гуру
14.07.17
✎
11:36
|
актуальных данных нет, потому что дождаться выполнения не получается :)
|
|
31
Garykom
гуру
14.07.17
✎
11:42
|
(12) Перепиши код уже.
Есть вход - знаем требуемый выход, осталось только переписать запросы и добавить немного кода 1С.
|
|
32
Garykom
гуру
14.07.17
✎
11:44
|
(31)+ Почему бы для начала не наложить условия на ограничение выборки из "РС НаборыЗначенийДоступа", в смысле по кусочкам никак?
|
|
33
mistеr
14.07.17
✎
11:49
|
(29) Таки индекс не используется для доступа. Скан + Merge Join.
|
|
34
Fragster
гуру
14.07.17
✎
12:05
|
короче, объясните мне, достаточно ли для целей работы отчета такого изменения?
результаты, вроде, совпадают
ВЫБРАТЬ
ПостоянныеВидыОграничений.Таблица,
ПостоянныеВидыОграничений.Право,
ПостоянныеВидыОграничений.ВидДоступа,
ПостоянныеВидыОграничений.ТаблицаОбъекта
ПОМЕСТИТЬ ПостоянныеВидыОграничений
ИЗ
&ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ПостоянныеВидыОграничений.Таблица,
"Чтение" КАК Право,
НаборыЗначенийДоступа.ВидДоступа
ПОМЕСТИТЬ ПеременныеВидыОграничений
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
ПО Идентификаторы.Ссылка = ПостоянныеВидыОграничений.ТаблицаОбъекта
И (ПостоянныеВидыОграничений.Право = "Чтение")
И (ПостоянныеВидыОграничений.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка))
ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки))
ГДЕ
1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК Наборы
ГДЕ
ТИПЗНАЧЕНИЯ(Наборы.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки)
И Наборы.Чтение)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПостоянныеВидыОграничений.Таблица,
"Добавление",
НаборыЗначенийДоступа.ВидДоступа
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
ПО Идентификаторы.Ссылка = ПостоянныеВидыОграничений.ТаблицаОбъекта
И (ПостоянныеВидыОграничений.Право = "Добавление")
И (ПостоянныеВидыОграничений.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка))
ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки))
ГДЕ
1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК Наборы
ГДЕ
ТИПЗНАЧЕНИЯ(Наборы.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки)
И Наборы.Добавление)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПостоянныеВидыОграничений.Таблица,
"Изменение",
НаборыЗначенийДоступа.ВидДоступа
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
ПО Идентификаторы.Ссылка = ПостоянныеВидыОграничений.ТаблицаОбъекта
И (ПостоянныеВидыОграничений.Право = "Изменение")
И (ПостоянныеВидыОграничений.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка))
ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки))
ГДЕ
1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК Наборы
ГДЕ
ТИПЗНАЧЕНИЯ(Наборы.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки)
И Наборы.Изменение)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПостоянныеВидыОграничений.Таблица,
"Удаление",
НаборыЗначенийДоступа.ВидДоступа
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
ПО Идентификаторы.Ссылка = ПостоянныеВидыОграничений.ТаблицаОбъекта
И (ПостоянныеВидыОграничений.Право = "Удаление")
И (ПостоянныеВидыОграничений.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка))
ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки))
ГДЕ
1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК Наборы
ГДЕ
ТИПЗНАЧЕНИЯ(Наборы.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки)
И Наборы.Удаление)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПостоянныеВидыОграничений.Таблица,
ПостоянныеВидыОграничений.Право,
ПостоянныеВидыОграничений.ВидДоступа
ИЗ
ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений
ГДЕ
ПостоянныеВидыОграничений.ВидДоступа <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ПеременныеВидыОграничений.Таблица,
ПеременныеВидыОграничений.Право,
ПеременныеВидыОграничений.ВидДоступа
ИЗ
ПеременныеВидыОграничений КАК ПеременныеВидыОграничений
ГДЕ
ПеременныеВидыОграничений.ВидДоступа <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)
И ПеременныеВидыОграничений.ВидДоступа <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения)
И ПеременныеВидыОграничений.ВидДоступа <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления)
И ПеременныеВидыОграничений.ВидДоступа <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)
|
|
35
aleks_default
14.07.17
✎
12:11
|
Т.е. вот это
ГДЕ
1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
РегистрСведений.НаборыЗначенийДоступа КАК Наборы
ГДЕ
ТИПЗНАЧЕНИЯ(Наборы.Объект) = ТИПЗНАЧЕНИЯ(Идентификаторы.ЗначениеПустойСсылки)
И Наборы.Добавление)
будет работать быстрее чем просто
ГДЕ
НаборыЗначенийДоступа.Добавление
?
|
|
36
Вафель
14.07.17
✎
12:12
|
(35) так это разные запросы.
В одном фильтр, в другом выполнить запрос если есть запись
|
|
37
Fragster
гуру
14.07.17
✎
12:19
|
(35) ГДЕ
НаборыЗначенийДоступа.Добавление
дает другой результат...
ну и да, такая запись транслируется в exists на скуле и использует индексы при наличии
|
|
38
aleks_default
14.07.17
✎
12:23
|
(36) Да, точно. В (7) запрос немного другой по смыслу. Но если в справочнике Идентификаторы все элементы с уникальным значением пустой ссылки, то да, результат будет одинаковый.
|
|
39
mistеr
14.07.17
✎
12:32
|
(34) Я бы предложил
ВЫБРАТЬ РАЗЛИЧНЫЕ
ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.Объект) КАК ОбъектТипЗначения,
Наборы.Чтение
ПОМЕСТИТЬ
ВТтипыЧтение
...
и дальше работать с ВТ
|
|
40
mistеr
14.07.17
✎
12:33
|
(39) То есть
ГДЕ
Наборы.Чтение
|
|
41
Fragster
гуру
14.07.17
✎
16:16
|
кстати, исходный запрос таки выполнился за 14600 секунд
|
|
42
Fragster
гуру
14.07.17
✎
16:18
|
измененный примерно одну секунду выполняется
|
|