Имя: Пароль:
1C
1С v8
Тормоза при переходе "Сервер->Клиент"
0 badboychik
 
25.01.18
12:54
Поднимаю тему зависания в 10-15 секунд между окончанием серверной процедуры "ПриСозданииНаСервере" и началом клиентской "ПриОткрытии"
Тормоза при переходе "Сервер-Клиент" -- что делать?

Даже если создать чистого пользователя, то это зависание имеет место.

Реально ли надо серверный кэш чистить?
Пару недель назад ставили 8.3.11, торможение сохранилось несмотря на "оптимизации" новой платформы
1 badboychik
 
25.01.18
12:55
Тормоза в доработанной форме "Заявки на расх. д/с" в расширении, если это важно
2 Вафель
 
25.01.18
12:57
слишком кривой запрос в ДС
3 Мыш
 
25.01.18
13:04
(1) Это важно. Криво доработано. Давай код доработок.
4 badboychik
 
25.01.18
13:09
(3) доработок тонна, какие именно могут влиять на участок передачи инфы с сервера на клиент? Число колонок в запросе? Сам запрос? Он же по идее выполняется на сервере и на клиент передается сериализованный пакет готовых данных
5 Вафель
 
25.01.18
13:10
покажи сам запрос ДС
6 Diman000
 
25.01.18
13:12
Или много данных тащится с клиента на сервер.
Или, я точно не помню, но динамические списки, возможно, как раз и формируются между этими процедурами.
7 Мыш
 
25.01.18
13:13
(4) Присоединяюсь к предыдущим ораторам. Запрос давай )
8 badboychik
 
25.01.18
13:16
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Заявка.Ссылка,
    Заявка.ПометкаУдаления,
    Заявка.Номер,
    Заявка.Дата,
    Заявка.Проведен,
    Заявка.Организация КАК Организация,
    Выбор
        КОГДА Заявка.Окончательная ТОГДА 0 ИНАЧЕ -1
    КОНЕЦ КАК ОкончательнаяИндекс,
    Заявка.Статус,
    ВЫБОР
        КОГДА Заявка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыплатаЗарплаты)
            ТОГДА  Заявка.ХозяйственнаяОперацияПоЗарплате
        ИНАЧЕ Заявка.ХозяйственнаяОперация
    КОНЕЦ КАК ХозяйственнаяОперация,
    Заявка.СуммаДокумента,
    ВЫБОР
        КОГДА Заявка.КурсКонвертации = 0
            ТОГДА ВЫРАЗИТЬ(Заявка.СуммаДокумента * КурсыВалют.Курс КАК ЧИСЛО(15,2))
        ИНАЧЕ ВЫРАЗИТЬ(Заявка.СуммаДокумента * Заявка.КурсКонвертации КАК ЧИСЛО(15,2))
    КОНЕЦ КАК СуммаДокументаРуб,
    Заявка.Валюта,
    Заявка.БанковскийСчет,
    Заявка.Касса,
    Заявка.ЖелательнаяДатаПлатежа КАК ДатаПлатежа,
    РазностьДат(Заявка.ЖелательнаяДатаПлатежа, НачалоПериода(&ТекущаяДата,НЕДЕЛЯ), ДЕНЬ) <= 14 КАК ОграничениеПоДате,
    
    ВЫБОР КОГДА Заявка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику)
        ИЛИ Заявка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВыдачаЗаймаСотруднику)
    ТОГДА
        Заявка.ПодотчетноеЛицо
    КОГДА Заявка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ОплатаДенежныхСредствВДругуюОрганизацию)
        ИЛИ Заявка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратДенежныхСредствВДругуюОрганизацию)
        ИЛИ Заявка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВнутренняяПередачаДенежныхСредств)
    ТОГДА
        Заявка.ОрганизацияПолучатель
    КОГДА Заявка.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
    ТОГДА ЗНАЧЕНИЕ(Справочник.Контрагенты.СотрудникиОрганизации)
    ИНАЧЕ
        Заявка.Контрагент
    КОНЕЦ КАК Получатель,
    
    Заявка.Контрагент,
    Заявка.Подразделение,
    Заявка.КтоЗаявил КАК Заявитель,
    Заявка.КтоЗаявил.Подразделение КАК ПодразделениеЗаявителя,
    Заявка.Представление,
    Заявка.ПриоритетОплаты,
    Заявка.СверхЛимита,
    
    0 КАК КоличествоОплат,
    0 КАК ЗаявкаОплачена,
    ДАТАВРЕМЯ(1,1,1) КАК ДатаОплатыПоБанку,
    0 КАК ЕстьФайлы,
    Заявка.НазначениеПлатежа,
    ЕСТЬNULL(ДопРеквизитыПроект.Значение, Значение(Справочник.Проекты.ПустаяСсылка)) КАК Проект,
    ВЫРАЗИТЬ("" КАК Строка(100)) КАК НомерКартыЗаявки,
    ВЫБОР
        КОГДА Расшифровка.ДоговорКредитаДепозита <> ЗНАЧЕНИЕ(Справочник.ДоговорыКредитовИДепозитов.ПустаяСсылка)     
            ТОГДА Расшифровка.ДоговорКредитаДепозита.СуммаЛимита * КурсыВалют.Курс
        КОГДА Расшифровка.Заказ ССЫЛКА Справочник.ДоговорыКонтрагентов ТОГДА ВЫРАЗИТЬ(Расшифровка.Заказ КАК Справочник.ДоговорыКонтрагентов).Сумма * КурсыВалют.Курс
        ИНАЧЕ 0.00
    КОНЕЦ КАК СуммаДоговора,
    ЕстьNull(Расшифровка.Заказ, ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка)) КАК Договор,
    ВЫБОР
        КОГДА Расшифровка.ДоговорКредитаДепозита <> ЗНАЧЕНИЕ(Справочник.ДоговорыКредитовИДепозитов.ПустаяСсылка)     
            ТОГДА Расшифровка.ДоговорКредитаДепозита.СуммаЛимита * КурсыВалют.Курс
        КОГДА Расшифровка.Заказ ССЫЛКА Справочник.ДоговорыКонтрагентов ТОГДА ВЫРАЗИТЬ(Расшифровка.Заказ КАК Справочник.ДоговорыКонтрагентов).Сумма * КурсыВалют.Курс
        ИНАЧЕ 0.00
    КОНЕЦ > 20000000 ИЛИ Заявка.СуммаДокумента > 20000000 КАК СуммаБольше20Млн
    ,ЕСТЬNULL(История.РасширенныйСтатусЗаявки,"<нет статуса>") КАК РасширенныйСтатус,
    ЛОЖЬ КАК ЕстьБизнесПроцесс,
    0 КАК КартинкаБП,
    ОрганизацияСБЕ.Значение КАК СБЕ    
    
ИЗ
    Документ.ЗаявкаНаРасходованиеДенежныхСредств КАК Заявка
    
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ТекущаяДата, ) КАК КурсыВалют
        ПО (Заявка.Валюта = КурсыВалют.Валюта)
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияСогласованияЗаявокНаРасходованиеДС.СрезПоследних(&ТекущаяДата) КАК История
        ПО Заявка.Ссылка = История.ЗаявкаНаРасходованиеДС
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеДенежныхСредств.ДополнительныеРеквизиты КАК ДопРеквизитыПроект
        ПО Заявка.Ссылка = ДопРеквизитыПроект.Ссылка
            И (ДопРеквизитыПроект.Свойство = &ДопРеквизитПроект)
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеДенежныхСредств.РасшифровкаПлатежа КАК Расшифровка
        ПО Заявка.Ссылка = Расшифровка.Ссылка И Расшифровка.НомерСтроки = 1
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации.ДополнительныеРеквизиты КАК ОрганизацияСБЕ
        ПО Заявка.Организация = ОрганизацияСБЕ.Ссылка И ОрганизацияСБЕ.Свойство = &СвойствоСБЕ
9 timurhv
 
25.01.18
13:16
Форма какая? Документа, списка? Если списка - проверьте по каким значениям установлена сортировка. Есть ли группировки?
10 badboychik
 
25.01.18
13:16
плюс еще запрос при получении данных дин.списком
11 Вафель
 
25.01.18
13:17
ИсторияСогласованияЗаявокНаРасходованиеДС - у регистра стоит галочка итогов?
12 Diman000
 
25.01.18
13:19
Запрос "смерть форме"
13 Вафель
 
25.01.18
13:20
(12) в целом нормальный запрос
14 Diman000
 
25.01.18
13:21
(13) Не для динамического списка
15 badboychik
 
25.01.18
13:22
(11) "Разрешить итоги: срез первых/последних" ? Нет, не стоят
А зачем, там же не числовые данные в ресурсе, регистр независимый. Индексирование по измерению "Заявка" включено и хватит, не?
16 Вафель
 
25.01.18
13:22
(15) поставь срез последних и дату убери из таблицы
17 Вафель
 
25.01.18
13:23
(14) все соединения по индексу практически. вряд ли там тыщи строк в тч.
18 Мыш
 
25.01.18
13:30
(10) Вот похоже на источник тормозов. Как реализовано?
19 Diman000
 
25.01.18
13:30
(17) Динсписки тяжелее чем запрос плюс выгрузка в ТЗ.
В общем, советую ТС использовать метод деструктивного анализа.
Для начала надо понять в чем же причина. Сократи запрос ДС до неприличия "ВЫБРАТЬ РАЗРЕШЕННЫЕ Заявка.Ссылка" и все.
Если поможет, значит дело в динсписке.
Дальше начинаем включать итоги, колдовать с текстом запроса и так далее.
20 Мыш
 
25.01.18
13:33
Кстати, там же РАЗРЕШЕННЫЕ. Значит накладывается РЛС. Оно включено в базе?
21 badboychik
 
25.01.18
13:33
(19) попробуем на копии базы попозже, под теми же пользователями
(20) Тормоза в основном под пользователями с минимальными правами - которые только в группе "Инициаторы заявок на оплату"
22 Мыш
 
25.01.18
13:35
(21) Можно им отдельную форму нарисовать.
23 badboychik
 
25.01.18
13:37
Запросик в событии "ПриПолученииДанныхНаСервере" у дин.списка :)
Но по замерам, он выполняется очень быстро, не более 100мс у всех

ВЫБРАТЬ
    Заявка.Ссылка КАК Ссылка,
    ЕСТЬNULL(ДР_НКЗ.Значение, "") КАК НомерКартыЗаявки,
    ЕСТЬNULL(ДСКВыплате.КоличествоОплат, 0) КАК КоличествоОплат,
    ВЫБОР
        КОГДА ЕСТЬNULL(ДСКВыплате.КоличествоОплат, 0) = 0
            ТОГДА 0
        КОГДА ЕСТЬNULL(ДСКВыплате.КоличествоОплат, 0) = 1
            ТОГДА ВЫБОР
                    КОГДА ВЫРАЗИТЬ(ДСКВыплате.ДокументОплаты КАК Документ.СписаниеБезналичныхДенежныхСредств).ПроведеноБанком = ИСТИНА
                        ТОГДА 1
                    ИНАЧЕ 2
                КОНЕЦ
        ИНАЧЕ 3
    КОНЕЦ КАК ЗаявкаОплачена,
    ВЫБОР
        КОГДА ДСКВыплате.ДокументОплаты ССЫЛКА Документ.СписаниеБезналичныхДенежныхСредств
            ТОГДА ВЫРАЗИТЬ(ДСКВыплате.ДокументОплаты КАК Документ.СписаниеБезналичныхДенежныхСредств).ДатаПроведенияБанком
        ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
    КОНЕЦ КАК ДатаОплатыПоБанку,
    ВЫБОР
        КОГДА НаличиеПрисоединенныхФайлов.ЕстьФайлы ЕСТЬ NULL
            ТОГДА 1
        КОГДА НаличиеПрисоединенныхФайлов.ЕстьФайлы
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК ЕстьФайлы,
    НЕ Согласование_Старое.Ссылка ЕСТЬ NULL
        И НЕ Согласование_Новое.Ссылка ЕСТЬ NULL КАК ЕстьБизнесПроцесс,
    ВЫБОР
        КОГДА НЕ Согласование_Старое.Ссылка ЕСТЬ NULL
                ИЛИ НЕ Согласование_Новое.Ссылка ЕСТЬ NULL
            ТОГДА ВЫБОР
                    КОГДА НЕ Согласование_Старое.Завершен
                        ТОГДА 2
                    КОГДА НЕ Согласование_Новое.Завершен
                        ТОГДА 2
                    ИНАЧЕ 3
                КОНЕЦ
        ИНАЧЕ 0
    КОНЕЦ КАК КартинкаБП
ИЗ
    Документ.ЗаявкаНаРасходованиеДенежныхСредств КАК Заявка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеДенежныхСредств.ДополнительныеРеквизиты КАК ДР_НКЗ
        ПО Заявка.Ссылка = ДР_НКЗ.Ссылка
            И (ДР_НКЗ.Свойство = &СвойствоНКЗ)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеПрисоединенныхФайлов КАК НаличиеПрисоединенныхФайлов
        ПО Заявка.Ссылка = НаличиеПрисоединенныхФайлов.ОбъектСФайлами
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ДенежныеСредстваКВыплате.ЗаявкаНаРасходованиеДенежныхСредств КАК ЗаявкаНаРасходованиеДенежныхСредств,
            СУММА(ДенежныеСредстваКВыплате.Сумма) КАК СуммаОплаты,
            КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДенежныеСредстваКВыплате.Регистратор) КАК КоличествоОплат,
            ВЫБОР
                КОГДА КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДенежныеСредстваКВыплате.Регистратор) = 1
                    ТОГДА МИНИМУМ(ДенежныеСредстваКВыплате.Регистратор)
                ИНАЧЕ NULL
            КОНЕЦ КАК ДокументОплаты
        ИЗ
            РегистрНакопления.ДенежныеСредстваКВыплате КАК ДенежныеСредстваКВыплате
        ГДЕ
            ДенежныеСредстваКВыплате.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
        
        СГРУППИРОВАТЬ ПО
            ДенежныеСредстваКВыплате.ЗаявкаНаРасходованиеДенежныхСредств) КАК ДСКВыплате
        ПО (ДСКВыплате.ЗаявкаНаРасходованиеДенежныхСредств = Заявка.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            СогласованиеЗаявки.Предмет КАК Предмет,
            МАКСИМУМ(СогласованиеЗаявки.Ссылка) КАК Ссылка
        ИЗ
            БизнесПроцесс.СогласованиеЗаявки КАК СогласованиеЗаявки
        ГДЕ
            СогласованиеЗаявки.Стартован
        
        СГРУППИРОВАТЬ ПО
            СогласованиеЗаявки.Предмет
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            СогласованиеЗаявкиНовое.Предмет,
            МАКСИМУМ(СогласованиеЗаявкиНовое.Ссылка)
        ИЗ
            БизнесПроцесс.СогласованиеЗаявкиКомплексное КАК СогласованиеЗаявкиНовое
        ГДЕ
            СогласованиеЗаявкиНовое.Стартован
        
        СГРУППИРОВАТЬ ПО
            СогласованиеЗаявкиНовое.Предмет) КАК БП
        ПО Заявка.Ссылка = БП.Предмет
        ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.СогласованиеЗаявки КАК Согласование_Старое
        ПО (БП.Ссылка = Согласование_Старое.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.СогласованиеЗаявкиКомплексное КАК Согласование_Новое
        ПО (БП.Ссылка = Согласование_Новое.Ссылка)
ГДЕ
    Заявка.Ссылка В(&Ссылки)
24 Diman000
 
25.01.18
13:38
(20) Хоть РАЗРЕШЕННЫЕ хоть нет, наложение RLS будет всегда.
Просто без разрешенных платформа может выдавать ошибку.
Без RLS будет только в привилегированном режиме.
25 Мыш
 
25.01.18
13:40
(23) Тут норм, по идее.
(24) Не всегда. Если у роли пользователя нет РЛС, то и наложения не будет )
26 Diman000
 
25.01.18
13:43
(21)
"Тормоза в основном под пользователями с минимальными правами - которые только в группе "Инициаторы заявок на оплату"

Верный признак того, что дело в RLS.
Но срезы последних без итогов и с указанием конкретной даты все равно непростая штука. На них часто потери производительности идут.
27 Тихий омут
 
26.01.18
05:47
(19) Спорное утверждение. Сам переделывал запрос с выгрузкой в ТЗ (в выборке порядка 2000 строк) на дин список, упр. форма после переделки открывается значительно быстрее - экономия времени до 10 секунд. Хотя ради справедливости замечу, что если в выборке малое число строк (скажем, до сотни), запрос+ТЗ быстрее
Основная теорема систематики: Новые системы плодят новые проблемы.