Как оптимизировать запросы с вложенными запросами под ограничение на уровне записей?

1. Nigelist 30.07.20 08:19 Сейчас в теме
Привет Всем!

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

Есть ли способ решить проблемы с доступом без переписывания всего отчета? Или способ попроще.

P.S. Пробовал "ВЫБРАТЬ РАЗРЕШЕННЫЕ". Но эта фишка работает только с первым запросом.
По теме из базы знаний
Найденные решения
4. Max_Max 30.07.20 09:18 Сейчас в теме
(1)
Есть ли способ решить проблемы с доступом без переписывания всего отчета? Или способ попроще.

Самый простой, но не самый правильный. Перед запросом- УстановитьПривилегированныйРежим(Истина);
Nigelist; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. nomad_irk 72 30.07.20 09:03 Сейчас в теме
(1)Если отчет совсем не открывается, то у роли нет доступа к справочникам вообще, РАЗРЕШЕННЫЕ в данном случае не поможет.
В любом случае от вложенных запросов нужно избавляться, переводя их в запросы пакета.
6. Nigelist 30.07.20 09:44 Сейчас в теме
(3)
Есть там замудренный запрос. И не могу придумать как его привести в нормальный вид:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
 ВложенныйЗапрос.Регистратор КАК Документ,
 ВложенныйЗапрос.Регистратор.Номер КАК НомерДокумента,
 ВложенныйЗапрос.Регистратор.Дата КАК ДатаДокумента,
 ВЫБОР
  КОГДА -ВложенныйЗапрос.СуммаОборот < 0
   ТОГДА -ВложенныйЗапрос.СуммаОборот
 КОНЕЦ КАК СуммаРасход,
 ВЫБОР
  КОГДА -ВложенныйЗапрос.СуммаОборот > 0
   ТОГДА -ВложенныйЗапрос.СуммаОборот
 КОНЕЦ КАК СуммаПриход
ИЗ
 (ВЫБРАТЬ
  ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка КАК Регистратор,
  СУММА(ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Сумма) КАК СуммаОборот
 ИЗ
  Документ.ОтчетОРозничныхПродажах.ОплатаПлатежнымиКартами КАК ОтчетОРозничныхПродажахОплатаПлатежнымиКартами
 ГДЕ
  ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Склад = &Склад
  И ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Проведен
  И ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
 
 СГРУППИРОВАТЬ ПО
  ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка
 
 ОБЪЕДИНИТЬ ВСЕ
 
 ВЫБРАТЬ
  ЧекККМОплатаПлатежнымиКартами.Ссылка,
  СУММА(ЧекККМОплатаПлатежнымиКартами.Сумма)
 ИЗ
  Документ.ЧекККМ.ОплатаПлатежнымиКартами КАК ЧекККМОплатаПлатежнымиКартами
 ГДЕ
  ЧекККМОплатаПлатежнымиКартами.Ссылка.Склад = &Склад
  И НЕ ЧекККМОплатаПлатежнымиКартами.Ссылка.Архивный
  И ЧекККМОплатаПлатежнымиКартами.Ссылка.Проведен
  И ЧекККМОплатаПлатежнымиКартами.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
 
 СГРУППИРОВАТЬ ПО
  ЧекККМОплатаПлатежнымиКартами.Ссылка
 
 ОБЪЕДИНИТЬ ВСЕ
 
 ВЫБРАТЬ
  ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка,
  СУММА(-1 * ЧекККМВозвратОплатаПлатежнымиКартами.Сумма)
 ИЗ
  Документ.ЧекККМВозврат.ОплатаПлатежнымиКартами КАК ЧекККМВозвратОплатаПлатежнымиКартами
 ГДЕ
  ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка.Склад = &Склад
  И НЕ ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка.Архивный
  И ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка.Проведен
  И ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
 
 СГРУППИРОВАТЬ ПО
  ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка
 
 ОБЪЕДИНИТЬ ВСЕ
 
 ВЫБРАТЬ
  ОтчетБанкаПоОперациямЭквайрингаПокупки.Ссылка,
  СУММА(-1 * ОтчетБанкаПоОперациямЭквайрингаПокупки.Сумма)
 ИЗ
  Документ.ОтчетБанкаПоОперациямЭквайринга.Покупки КАК ОтчетБанкаПоОперациямЭквайрингаПокупки
 ГДЕ
  ОтчетБанкаПоОперациямЭквайрингаПокупки.ЭквайринговыйТерминал В(&ЭквайринговыйТерминал)
  И ОтчетБанкаПоОперациямЭквайрингаПокупки.Ссылка.Проведен
  И ОтчетБанкаПоОперациямЭквайрингаПокупки.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
 
 СГРУППИРОВАТЬ ПО
  ОтчетБанкаПоОперациямЭквайрингаПокупки.Ссылка
 
 ОБЪЕДИНИТЬ ВСЕ
 
 ВЫБРАТЬ
  ОтчетБанкаПоОперациямЭквайрингаВозвраты.Ссылка,
  СУММА(ОтчетБанкаПоОперациямЭквайрингаВозвраты.Сумма)
 ИЗ
  Документ.ОтчетБанкаПоОперациямЭквайринга.Возвраты КАК ОтчетБанкаПоОперациямЭквайрингаВозвраты
 ГДЕ
  ОтчетБанкаПоОперациямЭквайрингаВозвраты.ЭквайринговыйТерминал В(&ЭквайринговыйТерминал)
  И ОтчетБанкаПоОперациямЭквайрингаВозвраты.Ссылка.Проведен
  И ОтчетБанкаПоОперациямЭквайрингаВозвраты.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
 
 СГРУППИРОВАТЬ ПО
  ОтчетБанкаПоОперациямЭквайрингаВозвраты.Ссылка) КАК ВложенныйЗапрос
Показать

(4)
Не правильно это и не думаю что поможет.
(2)
(5)
1. Доступ к справочникам есть. Но ограничен доступ к элементам справочника на уровне записей.
2. Оператор "Разрешенные" работает только на верхнем уровне запроса.
7. nomad_irk 72 30.07.20 10:15 Сейчас в теме
(6)Вложенный запрос вынести в пакет запроса, выбрать из результата пакета1.

ВЫБРАТЬ РАЗРЕШЕННЫЕ
  ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка КАК Регистратор,
  СУММА(ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Сумма) КАК СуммаОборот
ПОМЕСТИТЬ ВТ_Данные
 ИЗ
  Документ.ОтчетОРозничныхПродажах.ОплатаПлатежнымиКартами КАК ОтчетОРозничныхПродажахОплатаПлатежнымиКартами
 ГДЕ
  ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Склад = &Склад
  И ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Проведен
  И ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
 
 СГРУППИРОВАТЬ ПО
  ОтчетОРозничныхПродажахОплатаПлатежнымиКартами.Ссылка
 
 ОБЪЕДИНИТЬ ВСЕ
 
 ВЫБРАТЬ
  ЧекККМОплатаПлатежнымиКартами.Ссылка,
  СУММА(ЧекККМОплатаПлатежнымиКартами.Сумма)
 ИЗ
  Документ.ЧекККМ.ОплатаПлатежнымиКартами КАК ЧекККМОплатаПлатежнымиКартами
 ГДЕ
  ЧекККМОплатаПлатежнымиКартами.Ссылка.Склад = &Склад
  И НЕ ЧекККМОплатаПлатежнымиКартами.Ссылка.Архивный
  И ЧекККМОплатаПлатежнымиКартами.Ссылка.Проведен
  И ЧекККМОплатаПлатежнымиКартами.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
 
 СГРУППИРОВАТЬ ПО
  ЧекККМОплатаПлатежнымиКартами.Ссылка
 
 ОБЪЕДИНИТЬ ВСЕ
 
 ВЫБРАТЬ
  ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка,
  СУММА(-1 * ЧекККМВозвратОплатаПлатежнымиКартами.Сумма)
 ИЗ
  Документ.ЧекККМВозврат.ОплатаПлатежнымиКартами КАК ЧекККМВозвратОплатаПлатежнымиКартами
 ГДЕ
  ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка.Склад = &Склад
  И НЕ ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка.Архивный
  И ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка.Проведен
  И ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
 
 СГРУППИРОВАТЬ ПО
  ЧекККМВозвратОплатаПлатежнымиКартами.Ссылка
 
 ОБЪЕДИНИТЬ ВСЕ
 
 ВЫБРАТЬ
  ОтчетБанкаПоОперациямЭквайрингаПокупки.Ссылка,
  СУММА(-1 * ОтчетБанкаПоОперациямЭквайрингаПокупки.Сумма)
 ИЗ
  Документ.ОтчетБанкаПоОперациямЭквайринга.Покупки КАК ОтчетБанкаПоОперациямЭквайрингаПокупки
 ГДЕ
  ОтчетБанкаПоОперациямЭквайрингаПокупки.ЭквайринговыйТерминал В(&ЭквайринговыйТерминал)
  И ОтчетБанкаПоОперациямЭквайрингаПокупки.Ссылка.Проведен
  И ОтчетБанкаПоОперациямЭквайрингаПокупки.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
 
 СГРУППИРОВАТЬ ПО
  ОтчетБанкаПоОперациямЭквайрингаПокупки.Ссылка
 
 ОБЪЕДИНИТЬ ВСЕ
 
 ВЫБРАТЬ
  ОтчетБанкаПоОперациямЭквайрингаВозвраты.Ссылка,
  СУММА(ОтчетБанкаПоОперациямЭквайрингаВозвраты.Сумма)
 ИЗ
  Документ.ОтчетБанкаПоОперациямЭквайринга.Возвраты КАК ОтчетБанкаПоОперациямЭквайрингаВозвраты
 ГДЕ
  ОтчетБанкаПоОперациямЭквайрингаВозвраты.ЭквайринговыйТерминал В(&ЭквайринговыйТерминал)
  И ОтчетБанкаПоОперациямЭквайрингаВозвраты.Ссылка.Проведен
  И ОтчетБанкаПоОперациямЭквайрингаВозвраты.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
 
 СГРУППИРОВАТЬ ПО
  ОтчетБанкаПоОперациямЭквайрингаВозвраты.Ссылка
;

ВЫБРАТЬ РАЗРЕШЕННЫЕ
 ВложенныйЗапрос.Регистратор КАК Документ,
 ВложенныйЗапрос.Регистратор.Номер КАК НомерДокумента,
 ВложенныйЗапрос.Регистратор.Дата КАК ДатаДокумента,
 ВЫБОР
  КОГДА -ВложенныйЗапрос.СуммаОборот < 0
   ТОГДА -ВложенныйЗапрос.СуммаОборот
 КОНЕЦ КАК СуммаРасход,
 ВЫБОР
  КОГДА -ВложенныйЗапрос.СуммаОборот > 0
   ТОГДА -ВложенныйЗапрос.СуммаОборот
 КОНЕЦ КАК СуммаПриход
ИЗ ВТ_Данные КАК ВложенныйЗапрос
Показать
Nigelist; +1 Ответить
9. Nigelist 30.07.20 14:28 Сейчас в теме
(7) переделал запросы. Но отчет всё равно ругается на доступ к справочнику "Эквайринговые терминалы".



Журнал регистрации:


При этом запрос в консоли запросов работает:
4. Max_Max 30.07.20 09:18 Сейчас в теме
(1)
Есть ли способ решить проблемы с доступом без переписывания всего отчета? Или способ попроще.

Самый простой, но не самый правильный. Перед запросом- УстановитьПривилегированныйРежим(Истина);
Nigelist; +1 Ответить
10. Nigelist 03.08.20 07:26 Сейчас в теме
(4) к сожалению отчет надо переписывать полностью. Пока работает по вашему варианту.
2. starjevschik 30.07.20 09:01 Сейчас в теме
Ничего оптимизировать не надо. РЛС работает само по себе. "Разрешенные" должно быть в каждом запросе, пробовать ничего не надо, просто дописать и все.
5. oleg-x 26 30.07.20 09:28 Сейчас в теме
Можете дать права на чтение справочника, тогда запрос отработает корректно, но посмотреть результат по справочникам не сможет, но это и не надо, если они не выводятся.
8. starjevschik 30.07.20 10:34 Сейчас в теме
Сообщение об ошибке написал бы.. посмотрим, какой такой Сухов.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот