|
v8: Вот и мне заказали вывести подчиненный док в форму списка ..прям пошесть какая-то | ☑ | ||
---|---|---|---|---|
0
palpetrovich
26.06.12
✎
14:40
|
или мода... Общаются куроводители между собой, форум мо какой-то или как вирус, ветром заносит
Короче, нарисовал через Соответствия в СписокПриПолученииДанных - замедление заметно даже на двух десятках строк. Думаю в направлении кеширования, пара вопросов по этому поводу: - ТЗкеша каждому своя или глобальная, для всех ? - Когда (где) ее правильнее заполнять (дополнять)? ну и вообще, стоит-ли заморачиваться? я их паредупреждал насчет тормозов, может пусть иучаются? ;) |
|||
1
palpetrovich
26.06.12
✎
14:46
|
+0 вот никогда не задумывлся, как оно живется с глобальной ТЗ, вобще - реально?... может и не надо?
|
|||
2
Дядя Вова
26.06.12
✎
14:46
|
Почему не сделать доп. реквизит у дока владельца и при записи подчиненного вписывать инфу о нем в этот реквизит? А в форме списка потом просто выводить колонку со значением этого реквизита. И тормзов нема...
ну или в комментарий дока-владельца вписывать инфу о подчиненном |
|||
3
YF
26.06.12
✎
14:47
|
(0) Произвольный запрос в динамическом списке?
|
|||
4
palpetrovich
26.06.12
✎
14:51
|
(2) ну это вообще не наш метод, дерать старые документы из-за этого - не айс
(3) это вы с кем сейчас разговаривали? :) ...у меня эти слова ассоциируются только с управлякмыми формами почему-то :) |
|||
5
Fragster
гуру
26.06.12
✎
14:54
|
(0) сделай не через построчное получение, а запили в ТЗ, а потом запросом нужные данные к этой ТЗ подцепи
|
|||
6
kosts
26.06.12
✎
14:54
|
Сделай на управляемой форме через динамический список, если нет отводов от УФ.
|
|||
7
Fragster
гуру
26.06.12
✎
14:54
|
(6) а вдруг оно в 8.1
|
|||
8
Дядя Вова
26.06.12
✎
14:55
|
(4) Ну да, а так, 8-ка и так тормозная, так еще ее и "нашими" методами затормозим. Ну, как хотите, это моё ИМХО ))
|
|||
9
unregistered
26.06.12
✎
14:56
|
(0) И как ты видишь себе ТЗКеша? Что в ней должно быть?
Вообще странно. У нас есть парочка подобных списков, куда выводятся реквизиты подчиненных документов, но смертельных тормозов вроде как нет - так только иногда немного притормаживает при обычном построчном пролистывании (на клавиатуре стрелками вверх/вниз). Хотя и количество документов и размер самой БД немаленькие. |
|||
10
palpetrovich
26.06.12
✎
15:00
|
(5) "запили в ТЗ" - когда? ПриОткрытии?
(6) Отводы есть :) (8) Дядя Вова, бросьте Вы эти мысли :) (9) ТЗКеша - (Ссылка, ПодчиненныйДок) ...тормоза не смертельные, но заметные. Мо я не так что сделал, пожалуй выложу код: Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок) ПоказыватьРеализациюВЗаказах = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ПоказыватьРеализациюВЗаказах"); Если НЕ ПоказыватьРеализациюВЗаказах Тогда Возврат; КонецЕсли; Соответствия = Новый Соответствие; СписокЗаказов.Очистить(); Для Каждого ЭлементОформления Из ОформленияСтрок Цикл СписокЗаказов.Добавить(ЭлементОформления.ДанныеСтроки.Ссылка); Соответствия.Вставить(ЭлементОформления.ДанныеСтроки.Ссылка, ЭлементОформления.Ячейки.Реализация); КонецЦикла; Запрос = Новый Запрос("ВЫБРАТЬ | РеализацияТоваровУслуг.Сделка, | РеализацияТоваровУслуг.Номер, | РеализацияТоваровУслуг.Дата |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Сделка В(&СписокЗаказов)"); Запрос.УстановитьПараметр("СписокЗаказов", СписокЗаказов); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Ячейка = Соответствия.Получить(Выборка.Сделка); Ячейка.Текст = "№ "+ Выборка.Номер + " от " + Формат(Выборка.Дата, "ДФ=dd.MM.yyyy"); Ячейка.ОтображатьТекст = Истина; КонецЦикла; КонецПроцедуры |
|||
11
kosts
26.06.12
✎
15:04
|
(10) ТЗ для кэша не нужно использовать. Лучше соответствие.
|
|||
12
Asirius
26.06.12
✎
15:08
|
(0) Выводи не в колонку списока, а в окошко под списком - туда можно и все подчиненные запихнуть.
и выводи не сразу, а спустя 0.1 сек только при смете текущего документа (через обработку ожидания) - так скроллинг не будет тормозить |
|||
13
palpetrovich
26.06.12
✎
15:08
|
(11) ну да, наверное будет быстрее. Я только не въезжаю где будет выигрыш. Если все-равно надо постоянно дергать сервер на предмет изменений ...хотя если предположить, что подчиненныйДок - вешь неизменная, то дергать сервер можно только для незаполненных
|
|||
14
palpetrovich
26.06.12
✎
15:09
|
(12) не хотят, я им предлагал и так и в список по кнопке "обновить". Хотят все и сразу :)
|
|||
15
H A D G E H O G s
26.06.12
✎
15:10
|
Бредятина какая-то.
|
|||
16
H A D G E H O G s
26.06.12
✎
15:11
|
Тут остатки то махом получаются, а тут - пару реквизитов запросить.
|
|||
17
H A D G E H O G s
26.06.12
✎
15:11
|
Настраивайте железо, sql, ищите узкие места везде, но только не здесь.
|
|||
18
H A D G E H O G s
26.06.12
✎
15:13
|
Я бы не стал в Соответствие ничего пихать, я бы 2 раза по ОформлениюСтрок прошел бы и через НайтиСледующий для 2 раза нашел бы Номер и Дату.
|
|||
19
H A D G E H O G s
26.06.12
✎
15:14
|
Особенно не стал бы в соответствие пихать Ячейку.
|
|||
20
H A D G E H O G s
26.06.12
✎
15:15
|
Соответствие - индексируемый объект, здесь оно не нужно.
|
|||
21
palpetrovich
26.06.12
✎
15:16
|
(18) не понял, я таки написал фигню?
|
|||
22
palpetrovich
26.06.12
✎
15:17
|
+21 мне что, в цикле Для Каждого ЭлементОформления Из ОформленияСтрок Цикл
делатьт запрос по одному, текущему доку? |
|||
23
unregistered
26.06.12
✎
15:18
|
(10) У нас примерно так же.
Только в запросе левое соединение вместо использования раздела ГДЕ. И сам текст ячеек заполняем из запроса без использования всяких тормозных функций типа сложения строк и Формат(). То есть для вашего примера я бы добавил две колонки в список - отдельно ДатаРеализации и отдельно НомерРеализации, через соответствие получал бы не ячейку, а ОформлениеСтроки и уже для него выполлнял бы код типа Пока Выборка.Следующий() Цикл ОформлениеСтроки = Соответствие.Получить(Выборка.Ссылка); ОформлениеСтроки.Ячейки.НомерРеализации.УстановитьТекст(Выборка.Номер); ОформлениеСтроки.Ячейки.ДатаРеализации.УстановитьТекст(Выборка.Дата); КонецЦикла; Только это всё мелочи. Тормоза может где-то в другом месте? |
|||
24
H A D G E H O G s
26.06.12
✎
15:18
|
(21) Я не уверен. Я бы
-1) Переписал, уйдя от Соответствия. -2) Посмотрел на что уходит время в процентах. |
|||
25
kosts
26.06.12
✎
15:18
|
(13) Реквизит подчиненного документа по которому его ищешь в запросе должен быть индексированным.
Соответствие в (10) это промежуточный объект (он может быть хоть списком хоть массивом что ли), не путайте его с кэшем, который рекомендую сделать именно структурой. |
|||
26
H A D G E H O G s
26.06.12
✎
15:19
|
(23) pffff, нашли где тормоза искать.
|
|||
27
Fragster
гуру
26.06.12
✎
15:19
|
(22) сначала получи все ссылки, потом один запрос по этим ссылкам
|
|||
28
kosts
26.06.12
✎
15:19
|
(25)
(13) Реквизит подчиненного документа по которому его ищешь в запросе должен быть индексированным. Соответствие в (10) это промежуточный объект (он может быть хоть списком хоть массивом что ли), не путайте его с кэшем, который рекомендую сделать именно СООТВЕТСТВИЕМ. |
|||
29
H A D G E H O G s
26.06.12
✎
15:20
|
(22) Вот такая ботва
Книга знаний: Вывод остатков в форме списка |
|||
30
palpetrovich
26.06.12
✎
15:22
|
(24) Выборка = Запрос.Выполнить().Выбрать(); 97%
(22)сейчас попробую ...я так понимаю потом использовать НайтиСледующий? |
|||
31
H A D G E H O G s
26.06.12
✎
15:22
|
Да, индексировать бы его было бы правильно.
|
|||
32
Fragster
гуру
26.06.12
✎
15:23
|
(29) там, кстати, неоптимально
|
|||
33
H A D G E H O G s
26.06.12
✎
15:23
|
(30) Индексируй сначало реквизит "Сделка". В типовых он не индексирован.
|
|||
34
orefkov
26.06.12
✎
15:24
|
Пипец 8ка, закат солнца^w^w организация левого хэш джойна вручную...
|
|||
35
H A D G E H O G s
26.06.12
✎
15:24
|
(32) Дай угадаю.. Сброс выборки? Фигня.. Ищется также быстро, как и при НайтиСтроки() индексированной ТЗ без учета Индексирования ТЗ.
|
|||
36
R41
26.06.12
✎
15:25
|
(28) +1
Полностью поддерживаю |
|||
37
palpetrovich
26.06.12
✎
15:27
|
(33) Сделка - ОЧЕНЬ сильно составной, может ну его, индексировать?
|
|||
38
Fragster
гуру
26.06.12
✎
15:27
|
(35) нет, надо в сам запрос пихнуть ТЗ со счетчиком и ссылкой, запрос по нему сортировать во втором обходе получать строки напрямую по индексу или прямо выборку обходить
|
|||
39
Fragster
гуру
26.06.12
✎
15:28
|
(37) а как это влияет НА ИНДЕКСИРОВАНИЕ?
|
|||
40
orefkov
26.06.12
✎
15:29
|
(37)
Конечно, ведь гораздо лучше каждый раз перебирать все РеализацияТоваровУслуг с начала времен в поисках парочки с нужными сделками. |
|||
41
H A D G E H O G s
26.06.12
✎
15:30
|
(38) Нехрен пихать всякую хрень на сервер.
|
|||
42
H A D G E H O G s
26.06.12
✎
15:30
|
(37) Пофиг.
|
|||
43
Fragster
гуру
26.06.12
✎
15:32
|
(41) пара байт на строку, зато потом не надо дергать выборку туда сюда 50 раз
|
|||
44
H A D G E H O G s
26.06.12
✎
15:33
|
(43) Выборка сразу вся не ползет?
|
|||
45
palpetrovich
26.06.12
✎
15:34
|
(40) ну сначала-то времен зачем? начало выборки известно :)
|
|||
46
Fragster
гуру
26.06.12
✎
15:37
|
(44) зачем ей?
|
|||
47
orefkov
26.06.12
✎
15:37
|
(45)
В (10) я что-то этого не увидел. Да и как может быть известна дата начала выборки? Только если предполагать, что сделка всегда раньше заказа. А вдруг где-то не так, тупо косяк в базе например? И все, ничего не покажет. |
|||
48
Fragster
гуру
26.06.12
✎
15:37
|
(46)+ тем более что в ней только нужные данные, они и так придут
|
|||
49
H A D G E H O G s
26.06.12
✎
15:38
|
(48) Ладно, уговорил.
|
|||
50
unregistered
26.06.12
✎
15:43
|
Интересно, а есть принципиальная разница между методом в (29) и методом в (10)?
В первом случае обходится коллекция ОформленияСтрок и ищется нужная информация в Выборка. Во втором - обходится Выборка и ищется нужный элемент коллекции ОформленияСтрок через Соответствие. ИМХО, если Выборка может быть меньше чем количество строк (в случае с остатками - остатки могут быть далеко не по всей номенклатуре, а в случае с реквизитами подчиненных документов вполне нормально, когда подчиненные документы есть не у каждого заказа), то цикл будет работать пошустрее (меньше итераций). Хотя если 97% времени - это выполнение запроса, то мой вопрос вообще не принципиален :) |
|||
51
palpetrovich
26.06.12
✎
15:43
|
(47) ну это в (10) нету :)
так малехо быстрее Для Каждого ЭлементОформления Из ОформленияСтрок Цикл СписокЗаказов.Добавить(ЭлементОформления.ДанныеСтроки.Ссылка); КонецЦикла; Запрос = Новый Запрос("ВЫБРАТЬ | РеализацияТоваровУслуг.Сделка, | РеализацияТоваровУслуг.Ссылка |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Сделка В(&СписокЗаказов)"); Запрос.УстановитьПараметр("СписокЗаказов", СписокЗаказов); РезультатЗапроса=Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка=РезультатЗапроса.Выбрать(); Для Каждого ЭлементОформления Из ОформленияСтрок Цикл Выборка.Сбросить(); Если Выборка.НайтиСледующий(ЭлементОформления.ДанныеСтроки.Ссылка,"Сделка") Тогда ЭлементОформления.Ячейки.Реализация.ОтображатьТекст = Истина; ЭлементОформления.Ячейки.Реализация.Текст = Выборка.Ссылка; КонецЕсли; КонецЦикла; КонецЕсли; |
|||
52
unregistered
26.06.12
✎
15:46
|
(51) Что-то я сомневаюсь, что можно заметить разницу в 3% по производительности визуально.
Ведь 97% по-прежнему уходит на выполнение запроса? |
|||
53
Fragster
гуру
26.06.12
✎
15:58
|
кажися хэш таблицы медленнее простого обхода выборки работают, не?
|
|||
54
anddro
26.06.12
✎
16:03
|
(51) тут в любом случае скрытый запрос в цикле: ЭлементОформления.Ячейки.Реализация.Текст = Выборка.Ссылка; из ссылки формируется представление.
имхо лучше отдельный РС, измерения "ДокументОснование", "ПодчиненныйДокумент", реквизит "ПредставлениеПодчиненного" (в принципе можно несколько с разными вариантами представлений), тип строка. Заполнять по подписчику ПриЗаписи на все возможные подчиненные. |
|||
55
palpetrovich
26.06.12
✎
16:03
|
(51) ну конечно не визуально, в отладчике 74% ..я правда заменил Номер, Дата на Ссылку :)
|
|||
56
H A D G E H O G s
26.06.12
✎
16:04
|
Заменить
| РеализацияТоваровУслуг.Ссылка на | Представление(РеализацияТоваровУслуг.Ссылка) как Ссылка |
|||
57
H A D G E H O G s
26.06.12
✎
16:05
|
Ну и индексировать Сделку.
|
|||
58
palpetrovich
26.06.12
✎
16:05
|
(54) сам думал об этом, еще в какой-то предыдущей ветке, когда советовал автору послать заказчика с его хотелками ;)
|
|||
59
palpetrovich
26.06.12
✎
16:06
|
(57) ну уговорил, ща проиндексирую
кста, я там дату добавил Для Каждого ЭлементОформления Из ОформленияСтрок Цикл Если ДатаНач = "" Тогда ДатаНач = ЭлементОформления.ДанныеСтроки.Ссылка.Дата; КонецЕсли; СписокЗаказов.Добавить(ЭлементОформления.ДанныеСтроки.Ссылка); КонецЦикла; ... | И РеализацияТоваровУслуг.Дата >= &ДатаНач"); дык, на ДатаНач = ЭлементОформления.ДанныеСтроки.Ссылка.Дата; 20% ушло :) |
|||
60
orefkov
26.06.12
✎
16:07
|
(55)
Да попробуй уже на копии проиндексировать поле, сразу разницу ощутишь. А то сейчас получается, решаешь, чем море лучше вычерпать - ковшиком или кастрюлькой. |
|||
61
rutony
26.06.12
✎
16:08
|
можно еще запрос вынести за предела обработчика и регулировать только параметрами
|
|||
62
H A D G E H O G s
26.06.12
✎
16:08
|
(59) Хрень
|
|||
63
Fragster
гуру
26.06.12
✎
16:09
|
(59) конечно, он по количеству строк дергл базу
|
|||
64
acsent
26.06.12
✎
16:09
|
(56) бессмысленно. все равно ссылка никуда не выводится. А так да кося к в отсутствии индекса
|
|||
65
H A D G E H O G s
26.06.12
✎
16:10
|
(64) У автора - выводиться.
|
|||
66
palpetrovich
26.06.12
✎
16:12
|
(60) индексирую
(62) а че? ограничение периода ничего не даст? (63) дык, выборка то по Реализации (65) как строка |
|||
67
palpetrovich
26.06.12
✎
16:13
|
поиндексировал. На двух десятках доков - разницы не заметил
|
|||
68
H A D G E H O G s
26.06.12
✎
16:13
|
(67) Сколько всего реализаций?
|
|||
69
palpetrovich
26.06.12
✎
16:14
|
(68) 23 :)
|
|||
70
H A D G E H O G s
26.06.12
✎
16:15
|
(69) Забей. Индекс будет работать от 600 и более доков. Примерно.
|
|||
71
H A D G E H O G s
26.06.12
✎
16:16
|
Немного непонятен смысл
И РеализацияТоваровУслуг.Дата >= &ДатаНач" но если надо, замени ДатаНач = ЭлементОформления.ДанныеСтроки.Ссылка.Дата; на ДатаНач = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементОформления.ДанныеСтроки.Ссылка,"Дата"); |
|||
72
palpetrovich
26.06.12
✎
16:17
|
(70) ясно. Так что, заморачиваться с датойНачала не стоит?
|
|||
73
orefkov
26.06.12
✎
16:17
|
(69)
Щито ?! |
|||
74
palpetrovich
26.06.12
✎
16:18
|
(71) есть разница?
|
|||
75
palpetrovich
26.06.12
✎
16:19
|
(73) я-ж говорил, работаю почти в пустой копии, рабочая база на другом конце города :)
|
|||
76
H A D G E H O G s
26.06.12
✎
16:19
|
(74) Есть. Только я не понимаю, почему ты хочешь ограничить выборку реализаций датой первой сделки.
|
|||
77
H A D G E H O G s
26.06.12
✎
16:19
|
Поди еще и файловая.
|
|||
78
H A D G E H O G s
26.06.12
✎
16:20
|
Запрос с ПОДОБНО у меня выполняется пару минут на файловой и 8 секунд на SQL, к примеру.
|
|||
79
palpetrovich
26.06.12
✎
16:21
|
(76) Заказ всегда раньше реализации. Это УТ для Украины есчё :/
(77) угу |
|||
80
orefkov
26.06.12
✎
16:21
|
(75)
Так тормозит то где? На рабочей? И сколько там реализаций? Наколоти в копии хотя бы пару тысяч реализаций. |
|||
81
H A D G E H O G s
26.06.12
✎
16:24
|
И РеализацияТоваровУслуг.Дата >= &ДатаНач"
имеет смысл, если Сделка не индексирована. |
|||
82
H A D G E H O G s
26.06.12
✎
16:24
|
Если Сделку индексировал - убери это
|
|||
83
H A D G E H O G s
26.06.12
✎
16:24
|
(79)
Заказ всегда раньше реализации. Это УТ для Украины есчё :/ pfff. |
|||
84
palpetrovich
26.06.12
✎
16:27
|
(81) спасибо, не знал ...кста ступил, так можно ДатаНач = ЭлементОформления.ДанныеСтроки.Дата;
(80) тормоза не смертельные, просто все-таки заметно, вот я и решил что на большой будет хуже (83) pfff. - эт что? ...типа я не прав? :) |
|||
85
orefkov
26.06.12
✎
16:27
|
+(83)
У меня всегда было, как только пишешь прогу с расчетом, что "ЭТОГО не может быть никогда", как в первый же день запуска "ЭТО" случается :) |
|||
86
palpetrovich
26.06.12
✎
16:30
|
(85) не, ну может конечно случиться, но кто им доктор?
кста, всегда мучил вопрос, но стеснялся спросить, а где в замере производительности посмотреть ОБЩЕЕ время выполнения? |
|||
87
palpetrovich
26.06.12
✎
16:38
|
ап
по (86) есть ответ ...и все :) |
|||
88
palpetrovich
26.06.12
✎
16:42
|
+86, все, нашел, вопрос снят :)
Всем спасибо! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |