Долго выводятся результаты запроса в тонком клиенте на управляемых формах #781351


#0 by NewUser10
Добрый день. Пожалуйста, подскажите, что неправильно: Делаю отчет: В функцию &НаСервере передаю параметры запроса (Реквизиты формы). Запросом выбираю сведения из документа, выгружаю результат запроса в таблицу,  в этой же функции перебираю строки таблицы и заполняю табличный документ и возвращаю этот табличный документ на клиент, где его отображаю... Так вот, в таблице получается 1500 строк, в файловой версии базы отчет выполняется моментально, а в тонком клиенте выполнение растягивается на минуты и пользователи, работающие даже в других базах на данном SQL сервере, жалуются на зависания... Когда комментирую перебор строк таблицы, сам запрос без визуализации (отображаю только шапку) выполняется мгновенно. Штатные отчеты по остаткам на несколько тысяч строк выполняются довольно быстро. Получается, как-то неправильно гоняю данные между сервером и клиентом... Вот кусок функции без самого запроса:
#1 by RomanYS
Зачем ты привёл код, с которым "всё хорошо". Зачем передавать параметры(Реквизиты формы) и возвращать Таб(тоже реквизит формы), если они уже доступны в контексте &НаСервере. Или используй &НаСервереБезКотекста, или не гоняй реквизиты формы - они и так гоняются в контексте.
#2 by Mauser
Вангую, что Выборка.ЗаказПокупателя это ссылка, а в отчете странные пользователи почему-то хотят видеть текстовое представление.
#3 by RomanYS
+ сделай замер, может проблем совсем в другом месте.
#4 by Catseye
+ Зачем считать "Счет = Счет+1", если нигде не используешь?
#5 by NewUser10
Если в этом коде закомментировать цикл перебора - тогда все хорошо (2-3 сек). А как только в цикле запускаю заполнение таблицы, выполнение растягивается на минуты... Параметры передаю, так как хотел сделать НаСервереБезКонтекста, но тогда не могу получить макет из обработки
#6 by aleks_default
Где написано что Таб - реквизит формы?
#7 by aleks_default
не выгружай результат запроса в таблицу, делай перебор выборки
#8 by NewUser10
да это уже следы моих  попыток выявить проблему. Не обращайте внимания
#9 by NewUser10
Именно так, пожалуйста, разъясните, в чем здесь проблема
#10 by RomanYS
предположение. Как правило ТД выводят на форму. Я хотел написать " Таб(тоже реквизит формы?)". Спросим у ТС.
#11 by NewUser10
Нужно значение первой строки в алгоритме. Из выборки до начала цикла я его получить не смог
#12 by Провинциальный 1сник
Замер производительности сделай и посмотри, какие строки тратят время
#13 by RomanYS
Нету тут проблемы: 1С автоматом подставляет представления при приведении типа к строке
#14 by NewUser10
Нет, Таб не реквизит формы. Я ТД создаю в функции и передаю на клиент
#15 by Fragster
надеюсь, что Выборка.ЗаказПокупателя - это .Представление? как и прочие выводимые (похожие на ссылочные) поля?
#16 by RomanYS
А потом показываешь в отдельном окне?
#17 by Mauser
Продолжи фразу - "Для этого она..."
#18 by newbling
Выборку делай, зачем тебе ТЗ если всё равно её перебираешь. Можно же сравнивать не ссылки, а в самом запросе присвоить им числа какие-нибудь и сравнивать числа. ?(ЗначениеЗаполнено(Выборка.ЗаказПокупателя),"Заказ покупателя: "+Выборка.ЗаказПокупателя,"Заказ покупателя отсутствует") это тоже можно в запросе проверить. Не считай Счет = Счет+1. Возьми просто количество строк выборки методом Количество
#19 by newbling
Ну и смотря куда выводить, может проще представление выводить, а ни ссылки, которые переделываются по ходу в строки.
#20 by NewUser10
Да
#21 by RomanYS
Для теста: засунь готовый отчет в макет и сделай &НаСервере Если тормоза останутся, то проблема не в коде, а в передаче ТАб.
#22 by newbling
Ну или так же строки сравнивать если лень возиться с числами - для них (чисел) понадобится ВТ и лишнее соединение по заказу скорее всего, а строку можно так присвоить уже к конечному результату. На клиенте сравнивать строки или числа куда лучше, чем ссылки - тем более в цикле.
#23 by NewUser10
Нет, это ссылка. Потом планировал при необходимости через точку реквизиты смотреть
#24 by RomanYS
вот этого точно делать не надо, всё нужное получай запросом
#25 by newbling
ну а что мешает 2 поля сделать. Одно представление, которое выводить, другое ссылка, которую не выводить, а оставить на "потом"
#26 by newbling
ну и да, всё правильно RomanYS говорит. В идеале, всё надо получать запросом. И даже по возможности проверки туда пихать.
#27 by sitex
А что не используешь СКД  ?
#28 by NewUser10
Да, показываю в отдельном окне.
#29 by NewUser10
По поводу замера производительности, а как отладку на сервере запустить? У меня на точках останова не останавливается...
#30 by newbling
в рег эдите. погугли
#31 by NewUser10
Не разобрался с ней еще...
#32 by RomanYS
Да, конечно, получение представлений в запросе даст ускорение. Но в ты пишешь про проблемы пользователей - у них проблем не будет: они увидят тоже самое только чуть подождут. Однако у ТС возникла проблема при переходе на клиент-сервер. Производительность упала на !несколько! порядков. Я больше верю в проблему передачи контекста, чем в то сервер сильно проигрывает файловой базе.
#33 by NewUser10
,, сейчас исправлюсь
#34 by RomanYS
+ или другой простой тест: верни     Возврат Новый ТабличныйДокумент;
#35 by NewUser10
Я просто субъективные впечатления описываю. К сожалению, пока слабо владею инструментарием получения объективных критериев. Смотрю диспетчер задач на сервере, вроде загрузка процессора и памяти не сильно меняется, в консоли сервера у рабочего процесса тоже изменений не вижу...
#36 by NewUser10
(+32) У сервера две гиговые сетевухи на 30 клиентов
#37 by NewUser10
Действительно, при возврате нового табличного документа отчет выполняется 3-5 сек... Получается, сисадмина трясти по поводу скорости передачи данных...
#38 by RomanYS
Ну "растягивается на минуты" - это реальность, или субъективная оценка пользователем периода более 10 секунд )?
#39 by NewUser10
Запускаю у себя на компе, с секундомером сижу, от 90 секунд до 6-8 минут...
#40 by RomanYS
Ура! Я всех победил))), проблема не в представлениях, хотя на них можно выиграть эти самые 5 секунд))). Смотри сам отчет - может там что-то что не нужно пользователю (сложные расшифровки...). Сколько весит отчет в mxl.
#41 by Fragster
#42 by NewUser10
+ Я в цикле раскрашиваю строки еще, поэтому каждый раз набор действий в цикле был разный. Впрочем, исходя из может и не в действиях отчета проблема, а в канале передачи данных...
#43 by Fragster
выводи не в отдельный табдок, а в форму
#44 by RomanYS
+ блин, вопросы теряю)
#45 by RomanYS
если цикл на клиенте - скорей всего проблема в нём
#46 by newbling
Я в цикле раскрашиваю строки еще БИНГО
#47 by NewUser10
Нет, я же в написал, что все в одной фунции на сервере делаю - выполняю запрос и тут же его результаты перебираю и формирую таб док...
#48 by NewUser10
проблема существует и без окрашивания. Именно приведенный код отрабатывает 2-3 минуты. А как визуализировать отчет? Я в цикле по условию применяю ОблДанные.Области.Данные.ЦветФона=КрасныйЦвет
#49 by aleks_default
Полезно. Как бы только запомнить все эти нюансы клиент-серверного взаимодействия придуманные фирмой 1С.
#50 by Fragster
отчеты вообще следует рисовать на СКД
#51 by NewUser10
, А как без контекста макет на сервере получить? У меня из функции НаСервереБезКонтекста данная функция не вызывается?
#52 by sitex
+1
#53 by aleks_default
в написано, что тебя как раз контекстный вызов спасет, только таб. док должен тоже принадлежать контексту, т.е. быть реквизитом формы
#54 by NewUser10
Так скажем, это следующий ближайший этап в моем пути к ЗНАНИЯМ. А результат нужен сейчас...
#55 by NewUser10
Спасибо всем. Источник проблемы вроде бы локализован. Сейчас опробую ,
#56 by sash-ml
+ &НаСервереБезКотекста +  СКД наше все получи макет и передай в &НаСервереБезКотекста через параметр функции, если ругнется что нельзя передавать мутабельное значение то обойти можно если передавать сериализированное с помощью ЗначениеВСтрокуВнутр(<Значение>). Но так делать нежелательно
#57 by Fragster
-> просвещайся.
#58 by H A D G E H O G s
Проблема в полном передаче ТабДока на клиент. Добавь реквизит ТабДок на форме и выводи в него, предварительно его стирая в контекстном серверном вызове.
#59 by H A D G E H O G s
#60 by Fragster
стирать надо перед уходом на сервер
#61 by RomanYS
да уж неожиданно, т.е. табличный документ передается на клиент аля динамический список. При определенных условиях будут тормоза со скроллом.
#62 by NewUser10
, Завел на форме табличный документ, стал в процедуре &НаСервере цикле перебора результатов запроса выгружать строки в этот табличный документ, выполняется отчет на 1500 строк около 5 минут, причем сам запрос несколько секунд... К зависанию, к счастью (для целостности моего сознания) отчет оказался непричастен - перезагрузил сервер 1с и зависания прошли... Кстати, замер производительности для процедур, исполняемых на сервере, у меня не получился; останавливается и меряет только для клиентской части. Это от моей недообразованности?
#63 by Fragster
>Это от моей недообразованности? да
#64 by NewUser10
Краткость - сестра таланта...
#65 by Fragster
у тебя же целый интернет под рукой. и средства поиска есть
#66 by RomanYS
"выгружать строки в этот табличный документ" - звучит подозрительно, поясни.
#67 by RomanYS
отладка на сервере выключена по умолчанию, не факт, что стоит её включать на рабочем сервере
#68 by NewUser10
Да я же не спорю...
#69 by NewUser10
=
#70 by NewUser10
просто в цикле процедуры &НаСервере ОблДанные.Параметры.Заполнить(Выборка); Таб.Вывести(ОблДанные); где Таб  - реквизит формы с типом "Табличный документ"
#71 by NewUser10
или правильнее будет завести табличный документ на сервере, поместить в него строки моего отчета, а потом ЗначениеВРеквизитФормы(Таблица,"Таб");  ?
#72 by apokrit
Постов уже много, читать лень. Проблема в следующем - не нужно возвращать табличный документ на клиент. Если так делать - он целиком передается на клиент, это не эффективно. Правильный вариант - положить его в реквизит формы, тогда на клиент уедет только видимая порция и потом будет подтягиваться при скролинге.
#73 by RomanYS
ОК. "Возврат Таб;" убрал?
#74 by RomanYS
бред, или я не понял)
#75 by NewUser10
да, из функции процедуру сделал ну я в смысле, что присваивая построчно, я перегоняю порционно данные на клиент, а так разово, хотя реквизит формы существует и на клиенте и на сервере и я присваиваю порционно все равно на сервере, правильно? Или я окончательно запутался?
#76 by RomanYS
ты так и не сказал, сколько весит твой отчет в mxl
#77 by NewUser10
смешные 860 кб
#78 by RomanYS
да уж, умеет 1С на ровном месте свинью подложить)
#79 by H A D G E H O G s
Нет, 1С просто настолько сложна и многое скрывает от пользователя - программиста 1С, что свинью просто не видно.
#80 by RomanYS
Как можно сериализовать/передавать/десериализовать 1МБ 5(пять!) минут, при гигабитной сети.
#81 by H A D G E H O G s
посмотри мои показатели здесь причин лагов автора может быть с пару десятков, перечислялось не раз.
#82 by RomanYS
там вполне приемлемые цифры (отчет больше на порядки, время меньше). У ТСа нереальные тормоза судя по описанию. Хочется верить, что ТС всё-таки где-то накосячил и не сознается, или это уже исправленный глюк платформы (версия вроде не озвучивалась).
#83 by Провинциальный 1сник
Так же, как в 7.7 можно сутки сохранять xls с десятком тысяч строк с автовысотой) Баг, который не торопятся исправлять.
#84 by NewUser10
Господа, всем еще раз огромнейшее спасибо!!! Утром решил применить наконец-то освоенный механизм замера производительности на файловой версии базы и осознал, как много приобрел. Не то, чтобы я про него не знал: читал, видел в конфигураторе, но не представлял его важности в работе (как пару лет назад, начав по необходимости самостоятельно писать в глубинке на семерке, не представлял важности отладчика... Ну не было у меня промежуточного звена между вузовской информатикой  на бейсике и фортране четвертьвековой давности и 1С)... Короче, платформа и передача данных ни при чем. Все оказалось "по Марксу" и было озвучено в этой ветке: подавляющее время сжирало при формировании табличного документа преобразование типов (документ в строку и дата в строку), а также обращение к результату запроса через две точки... Пять минут ушло на преобразование запроса и отчет стал выполняться за 5 секунд. Как говорят доктора: правильный диагноз - 80% успеха лечения... У меня же наложились зависания сервера 1с, устраненные в последствие перезапуском а также то, что в файловом варианте отчет выполнялся в разы быстрее, чем на сервере...
#85 by H A D G E H O G s
Буду этой веткой тыкать в недалеких людей, которые постоянно свистят про свиней на ровном месте.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С