|   |   | 
| 
 | 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, все, нашел, вопрос снят :)
  Всем спасибо! | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |