Имя: Пароль:
1C
 
медленно формируется отчет под неполными правами
0 Dimarik_1
 
03.09.20
17:01
Файловая база 7 ГБ. Работают через веб клиент (работает быстрее, чем просто по сети работать, сеть не самая лучшая).

Один из последних релизов. Все работало отлично, затем в определенный момент стал подписать отчет по взаиморасчетам с клиентами.

Обнаружил следующее: зависает под пользователями, у которых настроено RLS.

Если на компьютере пользователя зайти под полными правами, то все работает быстро. Если же зайти под пользователем, с неполными правами, то очень простой отчет формируется очень долго, несколько минут (под полными правами - несколько секунд).

Было сформировано предположение, что это связано с настройкой прав. Написал очень простой отчет, который обращается к РН "РасчетыСКлиентами" с параметрами в виртуальной таблице. Причем запускаю я в привелигированном режиме его, чтобы не было никаких проверок на права и чтобы снизить нагрузку на систему.


ВЫБРАТЬ  разрешенные
    РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Организация КАК Организация,
    РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Партнер КАК Партнер,
    РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Контрагент КАК Контрагент,
    РасчетыСКлиентамиОстаткиИОбороты.СуммаНачальныйОстаток КАК ДолгКлиентаНачало,
    РасчетыСКлиентамиОстаткиИОбороты.СуммаПриход КАК УвеличениеДолгаКлиента,
    РасчетыСКлиентамиОстаткиИОбороты.СуммаРасход КАК УменьшениеДолгаКлиента,
    РасчетыСКлиентамиОстаткиИОбороты.СуммаКонечныйОстаток КАК ДолгКлиентаКонец,
    РасчетыСКлиентамиОстаткиИОбороты.ЗаказКлиента КАК ОбъектРасчетов,
    РасчетыСКлиентамиОстаткиИОбороты.ЗаказКлиента.Склад КАК Склад
ИЗ
    РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(, , Авто, , {(ЗаказКлиента.Склад = &Склад), (АналитикаУчетаПоПартнерам.Партнер = &Партнер)}) КАК РасчетыСКлиентамиОстаткиИОбороты


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

Уже все голову сломал. С одной стороны подозрение на сеть. Но на том же компьютере, только под полными правами все быстро формируется. Чтобы сформировать отчет под полными правами, сделал его формирование в привелигированном режиме. Но по-моему это не особо помогло. Не очень хочется клиента переводить на SQL. Я не вижу прямой необходимости. Тормозит только этот отчет, в чем дело, не пойму. Кто может, подскажите идею какую-то кроме SQL.

Кстати, под пользователем с неполными правами на центральном компьютере все быстро формируется.



Иными словами имеем картину:

1. Все быстро формируется на центральном компьютере

2. Все быстро формируется на компьютере пользователя под полными правами

3. Под неполными правами на компьютере пользователя формируется то быстро, то медленно. Причину понять не могу.

У кого какие идеи есть?




Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    // Вставить содержимое обработчика.
    
    
    
    СтандартнаяОбработка = Ложь;
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();

    
    Для Каждого Строка Из Настройки.ПараметрыДанных.Элементы Цикл
        Если Строка.Параметр = Новый ПараметрКомпоновкиДанных("Склад") Тогда
            Склад = Строка.Значение;
        КонецЕсли;
        
    КонецЦикла;
    

    
        Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗначенияГруппДоступа.ГруппаДоступа,
        |    ЗначенияГруппДоступа.ЗначениеДоступа,
        |    ЗначенияГруппДоступа.ЗначениеРазрешено
        |ИЗ
        |    Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа
        |        ПО ГруппыДоступаПользователи.Ссылка = ЗначенияГруппДоступа.ГруппаДоступа
        |ГДЕ
        |    ГруппыДоступаПользователи.Пользователь = &Пользователь
        |    И ЗначенияГруппДоступа.ЗначениеДоступа = &Склад
        |    И ЗначенияГруппДоступа.ЗначениеРазрешено";
    
    Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);
        

        
    
    Запрос.УстановитьПараметр("Склад", Склад);
    
    УстановитьПривилегированныйРежим(Истина);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    УстановитьПривилегированныйРежим(Ложь);
    Если Не ВыборкаДетальныеЗаписи.Следующий() и Не Рольдоступна("ПолныеПрава") Тогда
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
        Сообщить("Недостаточно прав!");
        Отказ = Истина;
        Возврат;
    КонецЕсли;

    
    УстановитьПривилегированныйРежим(Истина);    
    
    //Сформируем отчет
    СформироватьОтчетПривРеж(ДокументРезультат, СхемаКомпоновкиДанных, ДанныеРасшифровки, КомпоновщикНастроек);
    
    УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры


Процедура СформироватьОтчетПривРеж(ТабличныйДокумент, СхемаКомпоновкиДанных, ДанныеРасшифровки, КомпоновщикНастроек) Экспорт

    ТабличныйДокумент.Очистить();  
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;     
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    

    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    

    
    МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки,,,Ложь);
    
    ВнешниеНаборыДанных  = Новый Структура;

    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,ВнешниеНаборыДанных,ДанныеРасшифровки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    
КонецПроцедуры
1 Franchiser
 
гуру
03.09.20
17:07
Привилегированный режим включи
2 ДенисЧ
 
03.09.20
17:09
Файловая и РЛС совместимы плохо.
3 Dimarik_1
 
03.09.20
17:38
так я же сделал :     УстановитьПривилегированныйРежим(Истина);
4 Franchiser
 
гуру
03.09.20
18:54
(3) а ты проверил , что он установился?
5 Dimarik_1
 
03.09.20
19:00
(4) специально так написал. Так что да, установился

    
    УстановитьПривилегированныйРежим(Истина);    
    
    Если ПривилегированныйРежим() = Ложь Тогда
        Возврат;
    КонецЕсли;
    
    //Сформируем отчет
    СформироватьОтчетПривРеж(ДокументРезультат, СхемаКомпоновкиДанных, ДанныеРасшифровки, КомпоновщикНастроек);
    
    УстановитьПривилегированныйРежим(Ложь);
6 Franchiser
 
гуру
03.09.20
23:54
(5) через две точки в запросе не нужно получать поля...
7 Franchiser
 
гуру
03.09.20
23:55
И это условие будет тормозить: (АналитикаУчетаПоПартнерам.Партнер = &Партнер
8 Franchiser
 
гуру
03.09.20
23:58
В (0) у тебя скд-шный запрос
9 Dimarik_1
 
04.09.20
08:26
(8) да, СКД, а что в этом такого?
(6) "через две точки в запросе не нужно получать поля..." - ну а мне нужно вытянуть склад из заказа, причем Выразить использовать не вариант, так как заказ может быть разным и партнера мне надо вытянуть.

еще раз повторюсь, что у меня тормозил типовой отчет, и я его решил переписать.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан