Имя: Пароль:
1C
1С v8
Оптимизация динамического списка
,
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) Откуда их выбирать?