#0
by NewUser10
Добрый день. Пожалуйста, подскажите, что неправильно: Делаю отчет: В функцию &НаСервере передаю параметры запроса (Реквизиты формы). Запросом выбираю сведения из документа, выгружаю результат запроса в таблицу, в этой же функции перебираю строки таблицы и заполняю табличный документ и возвращаю этот табличный документ на клиент, где его отображаю... Так вот, в таблице получается 1500 строк, в файловой версии базы отчет выполняется моментально, а в тонком клиенте выполнение растягивается на минуты и пользователи, работающие даже в других базах на данном SQL сервере, жалуются на зависания... Когда комментирую перебор строк таблицы, сам запрос без визуализации (отображаю только шапку) выполняется мгновенно. Штатные отчеты по остаткам на несколько тысяч строк выполняются довольно быстро. Получается, как-то неправильно гоняю данные между сервером и клиентом... Вот кусок функции без самого запроса:
#1
by RomanYS
Зачем ты привёл код, с которым "всё хорошо". Зачем передавать параметры(Реквизиты формы) и возвращать Таб(тоже реквизит формы), если они уже доступны в контексте &НаСервере. Или используй &НаСервереБезКотекста, или не гоняй реквизиты формы - они и так гоняются в контексте.
#2
by Mauser
Вангую, что Выборка.ЗаказПокупателя это ссылка, а в отчете странные пользователи почему-то хотят видеть текстовое представление.
#5
by NewUser10
Если в этом коде закомментировать цикл перебора - тогда все хорошо (2-3 сек). А как только в цикле запускаю заполнение таблицы, выполнение растягивается на минуты... Параметры передаю, так как хотел сделать НаСервереБезКонтекста, но тогда не могу получить макет из обработки
#10
by RomanYS
предположение. Как правило ТД выводят на форму. Я хотел написать " Таб(тоже реквизит формы?)". Спросим у ТС.
#11
by NewUser10
Нужно значение первой строки в алгоритме. Из выборки до начала цикла я его получить не смог
#13
by RomanYS
Нету тут проблемы: 1С автоматом подставляет представления при приведении типа к строке
#15
by Fragster
надеюсь, что Выборка.ЗаказПокупателя - это .Представление? как и прочие выводимые (похожие на ссылочные) поля?
#18
by newbling
Выборку делай, зачем тебе ТЗ если всё равно её перебираешь. Можно же сравнивать не ссылки, а в самом запросе присвоить им числа какие-нибудь и сравнивать числа. ?(ЗначениеЗаполнено(Выборка.ЗаказПокупателя),"Заказ покупателя: "+Выборка.ЗаказПокупателя,"Заказ покупателя отсутствует") это тоже можно в запросе проверить. Не считай Счет = Счет+1. Возьми просто количество строк выборки методом Количество
#19
by newbling
Ну и смотря куда выводить, может проще представление выводить, а ни ссылки, которые переделываются по ходу в строки.
#21
by RomanYS
Для теста: засунь готовый отчет в макет и сделай &НаСервере Если тормоза останутся, то проблема не в коде, а в передаче ТАб.
#22
by newbling
Ну или так же строки сравнивать если лень возиться с числами - для них (чисел) понадобится ВТ и лишнее соединение по заказу скорее всего, а строку можно так присвоить уже к конечному результату. На клиенте сравнивать строки или числа куда лучше, чем ссылки - тем более в цикле.
#25
by newbling
ну а что мешает 2 поля сделать. Одно представление, которое выводить, другое ссылка, которую не выводить, а оставить на "потом"
#26
by newbling
ну и да, всё правильно RomanYS говорит. В идеале, всё надо получать запросом. И даже по возможности проверки туда пихать.
#29
by NewUser10
По поводу замера производительности, а как отладку на сервере запустить? У меня на точках останова не останавливается...
#32
by RomanYS
Да, конечно, получение представлений в запросе даст ускорение. Но в ты пишешь про проблемы пользователей - у них проблем не будет: они увидят тоже самое только чуть подождут. Однако у ТС возникла проблема при переходе на клиент-сервер. Производительность упала на !несколько! порядков. Я больше верю в проблему передачи контекста, чем в то сервер сильно проигрывает файловой базе.
#35
by NewUser10
Я просто субъективные впечатления описываю. К сожалению, пока слабо владею инструментарием получения объективных критериев. Смотрю диспетчер задач на сервере, вроде загрузка процессора и памяти не сильно меняется, в консоли сервера у рабочего процесса тоже изменений не вижу...
#37
by NewUser10
Действительно, при возврате нового табличного документа отчет выполняется 3-5 сек... Получается, сисадмина трясти по поводу скорости передачи данных...
#38
by RomanYS
Ну "растягивается на минуты" - это реальность, или субъективная оценка пользователем периода более 10 секунд )?
#40
by RomanYS
Ура! Я всех победил))), проблема не в представлениях, хотя на них можно выиграть эти самые 5 секунд))). Смотри сам отчет - может там что-то что не нужно пользователю (сложные расшифровки...). Сколько весит отчет в mxl.
#42
by NewUser10
+ Я в цикле раскрашиваю строки еще, поэтому каждый раз набор действий в цикле был разный. Впрочем, исходя из может и не в действиях отчета проблема, а в канале передачи данных...
#47
by NewUser10
Нет, я же в написал, что все в одной фунции на сервере делаю - выполняю запрос и тут же его результаты перебираю и формирую таб док...
#48
by NewUser10
проблема существует и без окрашивания. Именно приведенный код отрабатывает 2-3 минуты. А как визуализировать отчет? Я в цикле по условию применяю ОблДанные.Области.Данные.ЦветФона=КрасныйЦвет
#49
by aleks_default
Полезно. Как бы только запомнить все эти нюансы клиент-серверного взаимодействия придуманные фирмой 1С.
#51
by NewUser10
, А как без контекста макет на сервере получить? У меня из функции НаСервереБезКонтекста данная функция не вызывается?
#53
by aleks_default
в написано, что тебя как раз контекстный вызов спасет, только таб. док должен тоже принадлежать контексту, т.е. быть реквизитом формы
#54
by NewUser10
Так скажем, это следующий ближайший этап в моем пути к ЗНАНИЯМ. А результат нужен сейчас...
#56
by sash-ml
+ &НаСервереБезКотекста + СКД наше все получи макет и передай в &НаСервереБезКотекста через параметр функции, если ругнется что нельзя передавать мутабельное значение то обойти можно если передавать сериализированное с помощью ЗначениеВСтрокуВнутр(<Значение>). Но так делать нежелательно
#58
by H A D G E H O G s
Проблема в полном передаче ТабДока на клиент. Добавь реквизит ТабДок на форме и выводи в него, предварительно его стирая в контекстном серверном вызове.
#61
by RomanYS
да уж неожиданно, т.е. табличный документ передается на клиент аля динамический список. При определенных условиях будут тормоза со скроллом.
#62
by NewUser10
, Завел на форме табличный документ, стал в процедуре &НаСервере цикле перебора результатов запроса выгружать строки в этот табличный документ, выполняется отчет на 1500 строк около 5 минут, причем сам запрос несколько секунд... К зависанию, к счастью (для целостности моего сознания) отчет оказался непричастен - перезагрузил сервер 1с и зависания прошли... Кстати, замер производительности для процедур, исполняемых на сервере, у меня не получился; останавливается и меряет только для клиентской части. Это от моей недообразованности?
#67
by RomanYS
отладка на сервере выключена по умолчанию, не факт, что стоит её включать на рабочем сервере
#70
by NewUser10
просто в цикле процедуры &НаСервере ОблДанные.Параметры.Заполнить(Выборка); Таб.Вывести(ОблДанные); где Таб - реквизит формы с типом "Табличный документ"
#71
by NewUser10
или правильнее будет завести табличный документ на сервере, поместить в него строки моего отчета, а потом ЗначениеВРеквизитФормы(Таблица,"Таб"); ?
#72
by apokrit
Постов уже много, читать лень. Проблема в следующем - не нужно возвращать табличный документ на клиент. Если так делать - он целиком передается на клиент, это не эффективно. Правильный вариант - положить его в реквизит формы, тогда на клиент уедет только видимая порция и потом будет подтягиваться при скролинге.
#75
by NewUser10
да, из функции процедуру сделал ну я в смысле, что присваивая построчно, я перегоняю порционно данные на клиент, а так разово, хотя реквизит формы существует и на клиенте и на сервере и я присваиваю порционно все равно на сервере, правильно? Или я окончательно запутался?
#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С
- из-под 1С принтер "долго думает"
- Добавление реквизита в большом справочнике - долго!
- Подрядчик по сети долго работает
- v7: долго открывается база, закрываются журналы. долго висит 1cv7.exe.
- v7: Пример запроса к справочнику и обхода результата запроса
- ЗУП 3.0 Долго открывает документы. Да и вообще долго работает
В этой группе 1С
- 1С УТ 10.3 + Планшет + Сканер
- MS server 2012 R2- На удаленном рабочем столе режет разрешение экрана до 800х600
- Авторизация с помощью POST в HTTPСоединение
- Аварийно завершился рабочий процесс фонового задания
- Переход с платформы 8.2 на 8.3 с базами в MS SQL
- Разделение номенклатурного списка на группы в заказе покупателя: 1С:8.2 УТ 10.3
- Пространства имён для преобразования xml-строк 1С
- ШТРИХ очень медленно пробивает чек из 1С, расположенной на сервере
- Зависает 1С 8.3 при входе у одного пользователя
- Не работает синхронизация ЗУП 3.0 -> Бух 3.0
- Для чего нужен модуль набора записей у внеш. ист-ка данных ?
- Сжать папку winsxs
- Получение картинки из макета табличного документа
- Программные ключи, только 10-12 подключений. Linux
- Функции в MS SQL 2008. Хочу понять как работает фильтр по результату функции.
- Автоматическое обновление тонкого клиента на Линуксе
- 1с УПП наличие материалов на складе по Заказам на производство
- Рефераты по 1С
- Получить норму по графику для сотрудника ЗУП 3.0
- создание документа через COM