|
Оптимизация динамического списка | ☑ | ||
---|---|---|---|---|
0
Чай2011
23.08.14
✎
08:24
|
День добрый.
Подскажите как в произвольном запросе дин.списка 8.3 такого вида: ************************ Выбрать СправочникНоменклатура.Ссылка КАК Ссылка, Минимум(ЦеныНоменклатурыСрезПоследних,Цена) КАК МинимальнаяЦена Сумма(ТоварыНаСкладахОстатки.Остаток) КАК Остаток ИЗ Справочник.Номенклатура КАК СправочникНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Номенклатура В (&СписокНоменклатуры)) КАК ТоварыНаСкладахОстатки ПО (ТоварыНаСкладахОстатки.Номенклатура = СправочникНоменклатура.Ссылка) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены = &ВидЦены И Номенклатура В (&СписокНоменклатуры)) КАК ЦеныНоменклатурыСрезПоследних ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = СправочникНоменклатура.Ссылка) ГДЕ СправочникНоменклатура.Ссылка В(&СписокНоменклатуры) СГРУППИРОВАТЬ ПО СправочникНоменклатура.Ссылка ************************ Указать чтобы при прокрутке списка присоединенные таблицы ограничивались теми 22 записями что читаются. Конструкция такого вида вида: РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены = &ВидЦены И Номенклатура В (&СписокНоменклатуры) {(Номенклатура).* КАК Ссылка}) КАК ЦеныНоменклатурыСрезПоследних не помогает. В профайлере видно что читаются сумасшедшие количества записей каждый раз (при параметре СписокНоменклатуры = 7000 записей читается 90000 строк из-за присоединенных таблиц) И запрос продолжает иметь Having вместо Left Join. Ну или по другому - как перехватить полученные 22 записи и уже к ним пристыковать нужные мне агрегатные колонки? Т.к. даже 22 вызова сервера по 1 записи будет быстрее, чем этот бардак. |
|||
1
NcSteel
23.08.14
✎
08:42
|
(0) Зачем в дин список пихать такой запрос? 1С крайне не рекомендует это делать....МДА быдло кодеры атакуют.
|
|||
2
Chai Nic
23.08.14
✎
08:52
|
(1) Предложите альтернативу?
|
|||
3
NcSteel
23.08.14
✎
08:57
|
(2) Динамический список по номенклатуре. При активизации строки дин. списка в отдельных полях выводится интересующая информация.
|
|||
4
Чай2011
23.08.14
✎
09:00
|
(1) Вот хочет клиент видеть остатки и цены в списке. Что тут непонятного?
(3) Так совершенно неудобно. Вот надо видеть какой товар дешевле всего из аналогичных. Или остатки надо сразу видеть по всем видимым позициям, а не тыкать по каждой выискивая где-же он есть. |
|||
5
Чай2011
23.08.14
✎
09:02
|
(3) Да и что такого в запросе то? Проблема лишь в том как указать вирт.таблице чтоб читала данные только по выбранным 22 строкам что 1С выбирает. И все будет летать.
|
|||
6
NcSteel
23.08.14
✎
09:04
|
(4) Анализировать остатки и цены клиент может в отчетах, можно ему предложить такой отчет. Но динамический список выполняется порциями при прокрутке, следовательно ваша задача не реализуема.
|
|||
7
NcSteel
23.08.14
✎
09:05
|
(5) А не надо указывать ничего, система сама добавляет в запрос необходимые параметры, но видишь, что с параметрами на порцию ин список так же тормозит.
|
|||
8
NcSteel
23.08.14
✎
09:05
|
1С уже устала разъяснять франчам, что дин список используется для вывода простой таблице, только в крайнем случае его можно перегружать соединениями и т.д., но надо понимать что серьезно страдает скорость.
|
|||
9
NcSteel
23.08.14
✎
09:06
|
И после таких внедренцев и возникает ощущение у клиента, что 1С тормозит, а именно не грамотное использование инструментов и возможностей платформы.
|
|||
10
Чай2011
23.08.14
✎
09:07
|
(6) Отчет и форма подбора совершенно разные вещи.
(8) Хорошо. Тогда как реализовать по другому такую простейшую вещь, которая прекрасно работала на ОФ? |
|||
11
Чай2011
23.08.14
✎
09:09
|
(9) Угу, конечно сам виноват. Вот только есть задача и ее надо решить. А "возможности" платформы ее перестали решать.
|
|||
12
NcSteel
23.08.14
✎
09:09
|
(10) Подбор можно получать из формы отчета, то есть из таб документа. Важно , что бы получить весь свод информации за раз, а не циклом.
И да , такая простая вещь не работала на обычных формах, примеров таких много... И так же тормозит. |
|||
13
NcSteel
23.08.14
✎
09:10
|
(11) Надо быть немного методологом и при постановки задачи обсуждать адекватное решение, а не делать ее в лоб. После чего будет уже трудно что то доказать Клиенту.
|
|||
14
Чай2011
23.08.14
✎
09:13
|
(12) На ОФ прекрасно 22 видимым позициям ПриВыводеСтроки дописывались нужные колонки и все летало. Да нет сортировки по этим полям, но и в данной задаче она не требуется.
(13) Вот поди ж ты объясни клиенту что раньше было и прекрасно работало, а сейчас супернавороченная платформа тормозит безбожно на тех же данных в том же сценарии использования. |
|||
15
NcSteel
23.08.14
✎
09:17
|
1. ДОстаточно открыть УТ 10 и увидеть, что цены и остатки так же выводятся в нижней части формы, в отдельном окне.
Если 22 колонки получаются с помощью запроса, то будет тормозить абсолютно так же, если не больше, тем более используется тормозной способ через "ПриВыводеСтроки". 2. Надо в первую очередь повернуть свой мозг в правильную сторону. Для повышения маштабируемости решений новая платформа накладывает целый ряд ограничений, которые следует выполнять, например клиент-серверное взаимодействие. |
|||
16
Chai Nic
23.08.14
✎
09:49
|
(15) Далеко не всё так просто. На мой взгляд, зря отказались от вычисляемых полей. Далеко не всем нужно масштабирование, и ничего страшного не будет, если десяток раз придется сбегать на сервер для получения какого-то реквизита.
|
|||
17
Chai Nic
23.08.14
✎
09:59
|
Получается, что 1с говорит "формируйте все данные, которые вам нужно отобразить, через запрос" и одновременно "не все запросы в динамическом списке можно применять". Тем самым, множество всех отображаемых в поле списка полей ограничивается множеством напрямую связанных данных. Это лишает разработчика выдать пользователю результат с косвенно связанными данными непосредственно в форме списка, приходится реализовывать отчет - а это влияет на эргономику работы пользователя.. То есть, налицо идеологическая диверсия фирмы 1с против России.
|
|||
18
NcSteel
23.08.14
✎
10:18
|
(17) Чем отчет пагубно влияет на эргономику работы? Можно хоть ТЗ реализовать. Важно все получить одним запросом.
|
|||
19
alle68
23.08.14
✎
10:43
|
(0) Зачем в запросе группировка? А параметр "Период"? Если нужны текущие данные, то он лишний, иначе предлагаемый в (12) отчёт вполне подойдёт.
А 90000 строк из каких таблиц берутся? Там, вроде, ограничение по списку есть. |
|||
20
Asmody
23.08.14
✎
14:31
|
Вместо расчета остатков и др. данных в дин.списке сложным запросом можно создать РС текущих остатков и прочих данных, который обновлять рег.заданием.
|
|||
21
Чай2011
23.08.14
✎
17:36
|
(15) 1. Зачем открывать штатный функционал, если есть написанная удобная форма, где все что надо выводится в списке. Потому что это просто УДОБНЕЕ.
Не надо теоретизировать. Для видимых строк пусть даже с получением 22 раза по 1 записи от сервера ЭТО В РАЗЫ БЫСТРЕЕ чем динамический список лопатящий 90000 записей при каждой прокрутке. Кстати попутно вопрос. Почему даже если отключаю галку "Динамическое считывание данных"- ничего не меняется. Уж пусть бы грузил подольше, зато потом прокрутка не занимала времени? 2. 95% пользователей 1С это мелкие предприятия с 5-10 пользователей. Им это масштабирование как бы это помягче сказать. А пока что они видят лишь то, что УТ11 тупо тормознее чем УТ10.3. Равно как и Бух3 vs Бух2 Вообще о чем спор? Есть задача которую надо решить - не знаете - хорошо. Может кто другой предложит вариант решения. |
|||
22
Чай2011
23.08.14
✎
17:40
|
(19)
1) Надо посчитать остатки по всем складам. Настоящий запрос чуть сложнее есть еще цены поставщиков, из которых и выбирается минимальная. 2) &Период так понимаю значения не имеет - привычка. Разницы все равно нет. 3) 90000 это совокупность связанных таблиц. Т.е. 7000 товаров и 3 присоединенных регистрасведений. Выводится разумеется 7000 строк. |
|||
23
Чай2011
23.08.14
✎
17:45
|
(20) Костыли еще те. Нагрузка на базу, т.к. пересчитывать надо постоянно. Иначе будет вопрос к актуальности данных.
|
|||
24
milan
23.08.14
✎
18:24
|
Убери фильтры на вирт таблицы и параметр период, или тебе нужны остатки на вчера ? Тогда все будет считаться по готовой таблице итогов, наверное ;)
|
|||
25
Asmody
23.08.14
✎
18:26
|
(23) Если сделать головой, а не руками, то вполне нормально. В случае сложного запроса в списке нагрузка гораздо выше, да помножь на количество пользователей.
Важность актуальности данных часто преувеличена. В учете очень немного есть моментов, где действительно нужно видеть остатки в реальном времени. |
|||
26
milan
23.08.14
✎
18:31
|
а вообще у меня до фига вопросов по дин спискам. И дикие тормоза при выводе и тупая настройка фильтров и невозможность управлять и отображать поля, по которым произведен поиск. Начиная работать с уф, ожидал развития механизмов в итоге все так и осталось в зачаточном состоянии
|
|||
27
Asmody
23.08.14
✎
18:34
|
(26) дин.список — весьма крутой Grid. Близких аналогов ему я даже подобрать не могу.
|
|||
28
milan
23.08.14
✎
18:41
|
(27) обычный, чего в нем крутого?после 77 он не плох,, конечно
|
|||
29
Asmody
23.08.14
✎
20:18
|
(28) одинесники привыкли к хорошему. То, что в 1С делается парой кликов, в более других системах требуют писания тонн кода.
|
|||
30
Drac0
23.08.14
✎
21:23
|
(0) Добавь регистр актуальных цен с нужными полями? обновляй при записи набора записей в регистр цен и будет тебе счастье.
|
|||
31
Чай2011
24.08.14
✎
10:25
|
(24) Да убрал уже все что можно. Даже группировку убрал ради теста. Фактически осталось только срезпоследних и отстаки. А все равно подтормаживает при прокрутке.
Хотя чем плох фильтр по номенклатуре у регистров (по идее должен ограничивать количество читаемых записей)? |
|||
32
whitedi
24.08.14
✎
10:40
|
(0) а если во вложенном запросе данные по регистру сведений отобрать и потом присоединить?
|
|||
33
Рэйв
24.08.14
✎
11:23
|
Выбрать Первые 22 уже предлагали?:-)
|
|||
34
milan
24.08.14
✎
11:37
|
(32) если убрать все параметры вт, по идее должен строить запрос по таблице итогов. У тебя с ней и так будет джоин.
А тормозить не перестанет, не надейся. |
|||
35
Чай2011
24.08.14
✎
18:39
|
(32) Вложенный запрос это вообще смертный приговор дин.списку.
(33) Откуда их выбирать? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |