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

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

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

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

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

Самый простой, но не самый правильный. Перед запросом- УстановитьПривилегированныйРежим(Истина);
Nigelist; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. nomad_irk 71 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 71 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 Сейчас в теме
Сообщение об ошибке написал бы.. посмотрим, какой такой Сухов.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)