|
Можно ли оптимизировать такой запрос в динамическом списке номенклатуры? | ☑ | ||
---|---|---|---|---|
0
Prog111
10.03.17
✎
10:30
|
В форме списка справочника "Номенклатура" типовой УТ 11.3 набросал запрос в динамическом списке, чтобы получать на форме списка остатки (общие и по определенным складам, а также резервы и заказы):
ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Ссылка, СпрНоменклатура.Код КАК Код, СпрНоменклатура.Наименование КАК Наименование, СпрНоменклатура.Артикул КАК Артикул, СпрНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры, СпрНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения, СпрНоменклатура.СтавкаНДС КАК СтавкаНДС, СпрНоменклатура.Родитель, ВЫБОР КОГДА СпрНоменклатура.ЕстьТоварыДругогоКачества ТОГДА 4 + ВЫБОР КОГДА СпрНоменклатура.ПометкаУдаления ТОГДА 1 ИНАЧЕ 0 КОНЕЦ + ВЫБОР КОГДА СпрНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать) ТОГДА 0 ИНАЧЕ 2 КОНЕЦ ИНАЧЕ ВЫБОР КОГДА СпрНоменклатура.ПометкаУдаления ТОГДА 1 ИНАЧЕ 0 КОНЕЦ + ВЫБОР КОГДА СпрНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать) ТОГДА 0 ИНАЧЕ 2 КОНЕЦ КОНЕЦ КАК ИндексКартинки, ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ОбщийОстаток, ТоварыНаСкладахОстаткиИОбороты1.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток1, ТоварыНаСкладахОстаткиИОбороты2.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток2, ТоварыНаСкладахОстаткиИОбороты3.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток3, ТоварыНаСкладахОстаткиИОбороты4.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток4, ТоварыНаСкладахОстаткиИОбороты5.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток5, ЗаказыПоставщикамОстаткиИОбороты.ЗаказаноКонечныйОстаток КАК ЗаказаноКонечныйОстаток, ЗаказыКлиентовОстаткиИОбороты.ЗаказаноКонечныйОстаток КАК ЗаказыКлиентовКонечныйОстаток ИЗ Справочник.Номенклатура КАК СпрНоменклатура ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты ПО (ТоварыНаСкладахОстаткиИОбороты.Номенклатура = СпрНоменклатура.Ссылка) ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , Склад = &Склад1) КАК ТоварыНаСкладахОстаткиИОбороты1 ПО (ТоварыНаСкладахОстаткиИОбороты1.Номенклатура = СпрНоменклатура.Ссылка) ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , Склад = &Склад2) КАК ТоварыНаСкладахОстаткиИОбороты2 ПО (ТоварыНаСкладахОстаткиИОбороты2.Номенклатура = СпрНоменклатура.Ссылка) ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , Склад = &Склад3) КАК ТоварыНаСкладахОстаткиИОбороты3 ПО (ТоварыНаСкладахОстаткиИОбороты3.Номенклатура = СпрНоменклатура.Ссылка) ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , Склад = &Склад4) КАК ТоварыНаСкладахОстаткиИОбороты4 ПО (ТоварыНаСкладахОстаткиИОбороты4.Номенклатура = СпрНоменклатура.Ссылка) ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , Склад = &Склад5) КАК ТоварыНаСкладахОстаткиИОбороты5 ПО (ТоварыНаСкладахОстаткиИОбороты5.Номенклатура = СпрНоменклатура.Ссылка) ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.ОстаткиИОбороты КАК ЗаказыПоставщикамОстаткиИОбороты ПО (ЗаказыПоставщикамОстаткиИОбороты.Номенклатура = СпрНоменклатура.Ссылка) ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыКлиентов.ОстаткиИОбороты КАК ЗаказыКлиентовОстаткиИОбороты ПО (ЗаказыКлиентовОстаткиИОбороты.Номенклатура = СпрНоменклатура.Ссылка) ГДЕ НЕ СпрНоменклатура.ЭтоГруппа {ГДЕ (СпрНоменклатура.Ссылка В (ВЫБРАТЬ Сегменты.Номенклатура ИЗ РегистрСведений.НоменклатураСегмента КАК Сегменты ГДЕ Сегменты.Сегмент = &СегментНоменклатуры))} Но работает не очень шустро - подвисает при прокрутке страниц, порой весьма ощутимо. Можно ли как-то оптимизировать запрос, чтобы ускорить прокрутку справочника и вообще его использование? |
|||
1
DrShad
10.03.17
✎
10:34
|
в корне не верно, у демонических списков уже есть специализированное расширение для подобных задач
ищите на ИТС |
|||
2
DrShad
10.03.17
✎
10:35
|
||||
3
Prog111
10.03.17
✎
10:39
|
(1) Гугление выдает только такие методы (с соединением к регистрам).
(2) Там приписка: "Планируется в версии 8.3.10". |
|||
4
DrShad
10.03.17
✎
11:04
|
статья от июля 2016, так что вполне вероятно что уже реализовали в более ранних версиях
|
|||
5
DrShad
10.03.17
✎
11:04
|
шерстите возможности платформы - механизм описан
|
|||
6
Elatiell
10.03.17
✎
11:11
|
В запросе куча соединений с виртуальными таблицами - это плохо и так делать нельзя, вдобавок к этому еще и количество остаток из "остатков и оборотов" берешь...
Сделай лучше отчетом, динамические списки не для этого придуманы. Либо откажись от динамического списка в пользу таблицы. |
|||
7
Prog111
10.03.17
✎
11:21
|
(6) Да, спасибо, сделаю соединение только с таблицами остатков, а не "Остатков и оборотов".
Заказчик требует, поэтому отчет не устроит, нужна оперативная работа менеджеров с остатками. |
|||
8
Dmitrii
гуру
10.03.17
✎
11:22
|
(6) >> количество остаток из "остатков и оборотов" берешь...
+1 Собственно совершенно непонятно зачем. Кроме указания правильной виртуальной таблицы, больше тут оптимизировать некуда. Работать быстро это угрёбище не сможет по определению. И даже варианты типа (2) после выхода платформы 8.3.10 вряд ли сильно помогут. |
|||
9
Dmitrii
гуру
10.03.17
✎
11:25
|
(7) >> нужна оперативная работа менеджеров с остатками
Придумайте им другой инструмент. Этот быстро работать не будет никогда. А по мере роста базы ситуация будет только ухудшаться. А если, не дай бог, завтра вырастет количество складов с 5 до 10, количество различных позиций номенклатуры и количество номенклатуры единовременно висящей на остатках, то ваш список вообще перестанет работать. Угадайте с трёх раз - кто будет крайним. |
|||
10
Prog111
10.03.17
✎
11:31
|
(9) Какие ещё могут быть инструменты, помимо отчета?
|
|||
11
HardBall
10.03.17
✎
11:32
|
Пятничный мега-пост.
ППЦ в квадрате. |
|||
12
Diman000
10.03.17
✎
11:33
|
Динсписки хороши только в элементарных запросах.
ВЫБОР в них большое зло. И непонятно зачем тут все эти соединения с разными виртуальными таблицами, имеющими один физический базис. |
|||
13
HardBall
10.03.17
✎
11:34
|
Походу был взят список с рекомендациями по улучшению производительности и каждый пункт сделан наоборот.
|
|||
14
HardBall
10.03.17
✎
11:36
|
Там нужна была одна таблица остатков и "Выбор-Конец" для остатков по складам, + сумма остатков.
|
|||
15
Prog111
10.03.17
✎
11:59
|
А как в данном запросе получить остатки по разным складам? Вот в этой части запроса получаю общие остатки, а также остатки по складу №1 и №2 (передаваемые параметрами в форме). Разве здесь можно избавиться от соединения к нескольким таблицам?
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты ПО (ТоварыНаСкладахОстаткиИОбороты.Номенклатура = СпрНоменклатура.Ссылка) ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , Склад = &Склад1) КАК ТоварыНаСкладахОстаткиИОбороты1 ПО (ТоварыНаСкладахОстаткиИОбороты1.Номенклатура = СпрНоменклатура.Ссылка) ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , Склад = &Склад2) КАК ТоварыНаСкладахОстаткиИОбороты2 ПО (ТоварыНаСкладахОстаткиИОбороты2.Номенклатура = СпрНоменклатура.Ссылка) |
|||
16
HardBall
10.03.17
✎
12:04
|
ВЫБРАТЬ
СпНоменклатура.Ссылка, СпНоменклатура.Код, ТоварыНаСкладахОстатки.ВНаличииОстаток, ТоварыНаСкладахОстатки.ВРезервеОстаток, МАКСИМУМ(ВЫБОР КОГДА ТоварыНаСкладахОстатки.Склад = &Склад1 ТОГДА ТоварыНаСкладахОстатки.ВНаличииОстаток ИНАЧЕ 0 КОНЕЦ) КАК Остаток1, МАКСИМУМ(ВЫБОР КОГДА ТоварыНаСкладахОстатки.Склад = &Склад2 ТОГДА ТоварыНаСкладахОстатки.ВНаличииОстаток ИНАЧЕ 0 КОНЕЦ) КАК Остаток2, МАКСИМУМ(ВЫБОР КОГДА ТоварыНаСкладахОстатки.Склад = &Склад3 ТОГДА ТоварыНаСкладахОстатки.ВНаличииОстаток ИНАЧЕ 0 КОНЕЦ) КАК Остаток3 ИЗ Справочник.Номенклатура КАК СпНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ПО СпНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура СГРУППИРОВАТЬ ПО СпНоменклатура.Ссылка, СпНоменклатура.Код, ТоварыНаСкладахОстатки.ВНаличииОстаток, ТоварыНаСкладахОстатки.ВРезервеОстаток |
|||
17
Prog111
10.03.17
✎
12:22
|
(16) Спасибо, буду пробовать.
|
|||
18
Dmitrii
гуру
10.03.17
✎
12:23
|
(10) >> Какие ещё могут быть инструменты, помимо отчета?
Ну откуда же мне знать ))) Это ваши менеджеры и вам лучше знать как они работают и что им реально нужно. Но я с 99% уверенностью могу предположить, что менеджеру нахрен не надо видеть остаток одновременно по пяти складам по всей отображаемой номенклатуре да ещё и в момент пролистывания/прокрутки списка. |
|||
19
Prog111
10.03.17
✎
12:25
|
(18) Ну не знаю... По-моему, это самая распространенная задача - когда менеджеру звонит (или приходит) клиент, и нужно оперативно знать, на каком складе есть нужный или схожий товар и в каком количестве.
|
|||
20
Elatiell
10.03.17
✎
12:38
|
(19) И менеджер, для выполнения своей задачи, открывает отчет и смотрит где, сколько, почему, зачем, как и когда. :D
|
|||
21
Dmitrii
гуру
10.03.17
✎
12:42
|
(19) Ключевое слово - "ТОВАР".
А ты решаешь задачу - показать "ВСЕ-ВСЕ-ВСЕ ТОВАРЫ". Найди 10 отличий в этих двух задачах. Вторая задача тобою решена. Решение тормозное. По мере роста базы оно будет работать всё медленнее и медленнее до тех пор пока в один прекрасный день не встанет колом. Первая задача имеет самые различные способы решения. Один из которых - отчет. А другие... тут целый пучок вариантов. - показывать остатки только по активной строке списка (ПриАктивизацииСтроки или по отдельной кнопке); - нарисовать форму подбора, которая будет показывать остатки только тогда, когда пользователь установил отбор по номенклатуре, содержащий в результате, например, не более 10 позиций (ведь реально менеджер ищет в 99% случаев одну конкретную позицию). Пока отбора нет или в результате отбора больше позиций - остатки не показываем. |
|||
22
Prog111
10.03.17
✎
12:48
|
(21) В данной базе ищет именно товары, так как есть много товаров-заменителей, и надо смотреть аналоги. (запчасти).
|
|||
23
Prog111
10.03.17
✎
12:48
|
(21) Спасибо за идеи.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |