|
Запрос долго что-то (Профиль гр дост - по Организация, назн в группах доступа) | ☑ | ||
---|---|---|---|---|
0
korppinen
10.02.15
✎
19:35
|
8.3.5.1383
БП 3.0.37.35 1. Скопировал типовой Профиль группы доступа ГлБухгалтер, назвал его ГлБухгалтер1. 2. Добавил в него ограничения доступа: Организация, Уч записи эл почты (Всезапрещены,Исключения назначаются в группах доступа). 3. Назначил пользователю. Всё ок.. работает. Есть внешний отчет.. (мой первый под УФ;) вот кусок кода.. Вопрос. Под Админом с учетом по всем организациям, исполняется мгновенно, под пользователем с профилем ГлБухгалтер1 и доступом только по разрешенной организации - этот запросик делается полминуты(!) Куда смотреть то? Спасибо. <code> МассивСчетов = БухгалтерскийУчетВызовСервераПовтИсп.СчетаВИерархии(ПланыСчетов.Хозрасчетный.РасчетныеСчета); Сообщить ("1.2 "+ТекущаяДата()); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ХозрасчетныйОстаткиИОбороты.Период КАК Дата, | ХозрасчетныйОстаткиИОбороты.Валюта КАК Валюта, | ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК НачальныйОстаток, | ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстатокДт КАК НачальныйОстатокВВалюте, | ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК КонечныйОстаток, | ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстатокДт КАК КонечныйОстатокВВалюте, | ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК Приход, | ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК Расход, | ХозрасчетныйОстаткиИОбороты.Регистратор, | ВЫБОР | КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.РасходныйКассовыйОрдер | ТОГДА ХозрасчетныйОстаткиИОбороты.Регистратор.Организация | КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер | ТОГДА ХозрасчетныйОстаткиИОбороты.Регистратор.Организация | ИНАЧЕ ХозрасчетныйОстаткиИОбороты.Регистратор.Контрагент | КОНЕЦ КАК Контрагент, | ВЫБОР | КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.РасходныйКассовыйОрдер | ТОГДА ХозрасчетныйОстаткиИОбороты.Регистратор.Основание | КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер | ТОГДА ХозрасчетныйОстаткиИОбороты.Регистратор.Основание | ИНАЧЕ ХозрасчетныйОстаткиИОбороты.Регистратор.НазначениеПлатежа | КОНЕЦ КАК Назначение, | ХозрасчетныйОстаткиИОбороты.Субконто1 КАК РасчетныйСчет |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачИтоги, &КонецПериода, Регистратор, Движения, Счет В (&МассивСчетов), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты |ГДЕ | ХозрасчетныйОстаткиИОбороты.Субконто1 В(&ВыделенныеРасчетныеСчета) | |УПОРЯДОЧИТЬ ПО | Дата |ИТОГИ | СУММА(НачальныйОстаток), | СУММА(НачальныйОстатокВВалюте), | СУММА(КонечныйОстаток), | СУММА(КонечныйОстатокВВалюте), | СУММА(Приход), | СУММА(Расход) |ПО | ОБЩИЕ, | РасчетныйСчет |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("КонецПериода", КонецДня(ПараметрыОтчета.КонецПериода)); Запрос.УстановитьПараметр("МассивСчетов", МассивСчетов); Запрос.УстановитьПараметр("НачИтоги", НачалоДня (ПараметрыОтчета.НачалоПериода)); Запрос.УстановитьПараметр("Организация", ПараметрыОтчета.Организация); ВыделенныеРасчетныеСчета = Новый Массив; Для каждого ТекСчет Из ПараметрыОтчета.БанковскиеСчета Цикл Если ТекСчет.Пометка Тогда ВыделенныеРасчетныеСчета.Добавить(ТекСчет.Значение); КонецЕсли; КонецЦикла; Запрос.УстановитьПараметр("ВыделенныеРасчетныеСчета", ВыделенныеРасчетныеСчета); РезультатЗапроса = Запрос.Выполнить(); Сообщить ("1.3 "+ТекущаяДата()); </code> |
|||
1
Fragster
гуру
10.02.15
✎
21:33
|
отбор по субконто - в параметры виртуальной таблицы
|
|||
2
Fragster
гуру
10.02.15
✎
21:34
|
ХозрасчетныйОстаткиИОбороты.Регистратор.ххх -> Выразить(ХозрасчетныйОстаткиИОбороты.Регистратор КАК док.ххх).ххх
|
|||
3
korppinen
11.02.15
✎
09:43
|
обновил до 8.3.5.1443.. всё тоже..
2 - может и не супер оптимально у меня, но полминуты не из-за этого. |
|||
4
Fragster
гуру
11.02.15
✎
10:06
|
(3) ты бы сделал сначала (1) и (2)
|
|||
5
korppinen
11.02.15
✎
10:54
|
Спасибо.. соптимизировали.. теперь эта фигня делается 5(!) сек у пользователя с правом только на одну организацию..
Ну не в этом же дело? <code> МассивСчетов = БухгалтерскийУчетВызовСервераПовтИсп.СчетаВИерархии(ПланыСчетов.Хозрасчетный.РасчетныеСчета); Сообщить ("1.2 "+ТекущаяДата()); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ХозрасчетныйОстаткиИОбороты.Период КАК Дата, | ХозрасчетныйОстаткиИОбороты.Валюта КАК Валюта, | ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК НачальныйОстаток, | ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстатокДт КАК НачальныйОстатокВВалюте, | ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК КонечныйОстаток, | ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстатокДт КАК КонечныйОстатокВВалюте, | ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК Приход, | ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК Расход, | ХозрасчетныйОстаткиИОбороты.Регистратор, | ВЫБОР | КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.РасходныйКассовыйОрдер | ТОГДА ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Регистратор КАК Документ.РасходныйКассовыйОрдер).Организация | КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер | ТОГДА ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Регистратор КАК Документ.ПриходныйКассовыйОрдер).Организация | ИНАЧЕ ХозрасчетныйОстаткиИОбороты.Регистратор.Контрагент | КОНЕЦ КАК Контрагент, | ВЫБОР | КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.РасходныйКассовыйОрдер | ТОГДА ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Регистратор КАК Документ.РасходныйКассовыйОрдер).Основание | КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер | ТОГДА ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Регистратор КАК Документ.ПриходныйКассовыйОрдер).Основание | ИНАЧЕ ХозрасчетныйОстаткиИОбороты.Регистратор.НазначениеПлатежа | КОНЕЦ КАК Назначение, | ХозрасчетныйОстаткиИОбороты.Субконто1 КАК РасчетныйСчет |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты( | &НачИтоги, | &КонецПериода, | Регистратор, | Движения, | Счет В (&МассивСчетов), | &СубконтоРС, | Организация = &Организация | И Субконто1 В (&ВыделенныеРасчетныеСчета)) КАК ХозрасчетныйОстаткиИОбороты | |УПОРЯДОЧИТЬ ПО | Дата |ИТОГИ | СУММА(НачальныйОстаток), | СУММА(НачальныйОстатокВВалюте), | СУММА(КонечныйОстаток), | СУММА(КонечныйОстатокВВалюте), | СУММА(Приход), | СУММА(Расход) |ПО | ОБЩИЕ, | РасчетныйСчет |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("КонецПериода", КонецДня(ПараметрыОтчета.КонецПериода)); Запрос.УстановитьПараметр("МассивСчетов", МассивСчетов); Запрос.УстановитьПараметр("НачИтоги", НачалоДня (ПараметрыОтчета.НачалоПериода)); Запрос.УстановитьПараметр("Организация", ПараметрыОтчета.Организация); Запрос.УстановитьПараметр("СубконтоРС", ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета); ВыделенныеРасчетныеСчета = Новый Массив; Для каждого ТекСчет Из ПараметрыОтчета.БанковскиеСчета Цикл Если ТекСчет.Пометка Тогда ВыделенныеРасчетныеСчета.Добавить(ТекСчет.Значение); КонецЕсли; КонецЦикла; Запрос.УстановитьПараметр("ВыделенныеРасчетныеСчета", ВыделенныеРасчетныеСчета); РезультатЗапроса = Запрос.Выполнить(); Сообщить ("1.3 "+ТекущаяДата()); <code> |
|||
6
korppinen
11.02.15
✎
10:58
|
не понимаю.. что то с правами..
|
|||
7
Fragster
гуру
11.02.15
✎
11:04
|
автоупорядочивание
|
|||
8
Fragster
гуру
11.02.15
✎
11:05
|
соответственно
Выразить(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Спроавочник.ххх) КАК РасчетныйСчет |
|||
9
n0ther
11.02.15
✎
11:05
|
(0) rls что ли включил? и медленнее стало работать? страааанно
|
|||
10
korppinen
11.02.15
✎
11:30
|
Да.. не понимаю что такое.. Оптимальным запросом проблему не решить
|
|||
11
korppinen
11.02.15
✎
11:30
|
(8) Сделал.. та же песня
|
|||
12
n0ther
11.02.15
✎
11:38
|
(10) при включенном ограничении на уровне записей, у пользователя с ограничениями к этому запросу будет присоединен еще кусок из RLS, что однозначно замедлит его выполнение.
|
|||
13
korppinen
11.02.15
✎
11:44
|
(12) я не правильно организовал учет по одной организации?
|
|||
14
korppinen
11.02.15
✎
11:46
|
не ну есть же стандартные отчеты.. касс книга и пр, гораздо сложнее.. и они норм у такого пользователя формируются..
|
|||
15
n0ther
11.02.15
✎
11:51
|
(13) да почему, всё правильно. Различия в производительности под полными правами и под "подрезанными" будут все равно. Даже в типовых отчетах.
Попробуй выполнить запрос в консоли запросов под правами пользователя. Если быстро выполнится то точно проблема RLS, если так же по времени, то надо запрос оптимизировать. |
|||
16
Fragster
гуру
11.02.15
✎
13:10
|
ИНАЧЕ ХозрасчетныйОстаткиИОбороты.Регистратор.Контрагент - все портит вот такая лажа.
|
|||
17
Fragster
гуру
11.02.15
✎
13:12
|
вероятно надо из корсубконто брать контрагента, а не из регистратора. Ну и про "назначение" то же самое
|
|||
18
Fragster
гуру
11.02.15
✎
13:13
|
две точки при составном типе пагубно влияют, особенно если по какому-то из возможных типов есть РЛС
|
|||
19
korppinen
11.02.15
✎
13:19
|
Спасибо. и не лажануться то терь в запросе чуть.. на 8.1 точно такой не было.
|
|||
20
korppinen
20.02.15
✎
17:11
|
Решил так в итоге..
УстановитьПривилегированныйРежим (Истина) Запрос= Новый Запрос...... УстановитьПривилегированныйРежим (Ложь) |
|||
21
Fragster
гуру
20.02.15
✎
18:21
|
(20) а стоило просто решить вопрос с вдумя точками без выразить... ХозрасчетныйОстаткиИОбороты.Регистратор.НазначениеПлатежа
|
|||
22
Fragster
гуру
20.02.15
✎
18:21
|
и ХозрасчетныйОстаткиИОбороты.Регистратор.Контрагент
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |