|   |   | 
| 
 | Запрос к табличной части текущего документа. Какой в этом смысл? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Lex_Liven 29.03.14✎ 08:52 | 
        Всем привет.
 Разбирая чужой код, наткнулся на странную организацию обработки проведения одного документа. Суть в том, что в обработке зачем-то делается запрос к табличной части этого документа с условием ГДЕ
причем никаких больше отборов не задается, после получения результата все строки тупо перебираются одна за другой. Какой смысл в таком коде? Почему нельзя было использовать цикл "Для Каждого" по табчасти документа? | |||
| 1
    
        Wobland 29.03.14✎ 08:55 | 
        а чего это нельзя было?     | |||
| 2
    
        Lex_Liven 29.03.14✎ 08:57 | 
        Вот и я спрашиваю, какие у автора кода могли быть причины написать именно так? Зачем так вообще делается?     | |||
| 3
    
        Lex_Liven 29.03.14✎ 09:01 | 
        Я понимаю, когда леается запрос к ТЧ с каким-то отбором, чтобы не все строки перебирать. Но зачем делать запрос ко всей ТЧ? Что дает такой метод? Прирост производительности относительно одного простого цикла? Сомневаюсь.     | |||
| 4
    
        Wobland 29.03.14✎ 09:02 | 
        забей     | |||
| 5
    
        Lex_Liven 29.03.14✎ 09:02 | 
        (4) Не хочу. Я хочу понять, зачем. Я хочу переписать этот код на один простой цикл. И опасаюсь, что упадет производительность.     | |||
| 6
    
        Lex_Liven 29.03.14✎ 09:03 | 
        (5) Тем более, что проведение документа и так занимает пару минут. (В ТЧ порядка 2-3 тысяч строк).     | |||
| 7
    
        zak555 29.03.14✎ 09:05 | 
        полный текст запроса приведи     | |||
| 8
    
        Wobland 29.03.14✎ 09:05 | 
        вот я раньше бумажные книги читал. а страницу перелистывал всегда одной рукой - любой случайно выбранной. надо же как-то определиться, каким образом перебирать ТЧ     | |||
| 9
    
        Lex_Liven 29.03.14✎ 09:10 | 
        Полный текст запроса:
     "ВЫБРАТЬ
 | |||
| 10
    
        Lex_Liven 29.03.14✎ 09:11 | 
        Выбираются ВСЕ колонки ТЧ и ВСЕ ее строки.     | |||
| 11
    
        Lex_Liven 29.03.14✎ 09:12 | 
        (8) Мы теряем время во-первых, на запрос к ТЧ, во вторых, потом на перебор результата.
 Я просто не верю, что это может быть быстрее одного перебора по ТЧ. | |||
| 12
    
        hhhh 29.03.14✎ 09:13 | 
        (10) это для скорости, если групповое проведение документов, ваше "Для Каждого" раз в 15 будет медленнее, чем запрос. А бухгатера ведь очень часто перепроводят документы, поэтому это важно.     | |||
| 13
    
        Lex_Liven 29.03.14✎ 09:14 | 
        (12) То есть все-таки, Запрос + "Пока Рез.Следующий() Цикл" - быстрее, чем "Для Каждого"?
 Тогда возникает вопрос номер два. Почему в типовых это редко используется? (Честно говоря, вообще ни разу не встречал) | |||
| 14
    
        Wobland 29.03.14✎ 09:18 | 
        (13) мы тут как-то спец.олимпиаду устраивали - Спавочник.Выбрать против запроса. бывает такое, что объектный подход работает быстрее, для этого нужны какие-то особенные флуктуации в атмосфере и железо. но бывает, на миллисекунды, конечно.
 судя по тому, как ты описал свою ситуацию, ты занимаешься онанизмом. поэтому (4) | |||
| 15
    
        Lex_Liven 29.03.14✎ 09:21 | 
        (14) Судя по этому комментарию, не (4), а "делай как тебе удобнее". Собственно, такой ответ меня устраивает.     | |||
| 16
    
        Wobland 29.03.14✎ 09:21 | 
        хорошо. забей на этот вопрос и пиши, как удобней ;)     | |||
| 17
    
        mistеr 29.03.14✎ 09:22 | 
        (14) >Спавочник.Выбрать против запроса
 А-ха-ха! Хорошая шутка. | |||
| 18
    
        Wobland 29.03.14✎ 09:23 | 
        (17) замерь     | |||
| 19
    
        HEKPOH 29.03.14✎ 09:24 | 
        (0) Проведи опыт.
 Сделай замер производительности по двум алгоритмам. Оч хочется посмотреть на результат :) (17) Это не шутка. Объектный метод, действительно, иногда работает не медленнее запроса | |||
| 20
    
        mistеr 29.03.14✎ 09:24 | 
        (15) Это скорее следование общему подходу из типовых: при проведении использовать сохраненное состояние объекта из БД, согласованное со всем остальными данными. Просто в данном конкретном случае другие данные в запросе не используются.     | |||
| 21
    
        HEKPOH 29.03.14✎ 09:25 | 
        (20) Объект уже записан!     | |||
| 22
    
        mistеr 29.03.14✎ 09:25 | 
        (19) Я к тому, что Справочник.Выбрать() и делает запрос.     | |||
| 23
    
        m-serg74 29.03.14✎ 09:39 | 
        (15) не тупи, запрос с таким условием "только к записанным данным"     | |||
| 24
    
        Lex_Liven 29.03.14✎ 09:43 | 
        (23) Мне одному кажется, или в событии "ОбработкаПроведения" - документ уже записан?     | |||
| 25
    
        Мимохожий Однако 29.03.14✎ 09:44 | 
        (0)Какая конфигурация? ИМХО, это важно.     | |||
| 26
    
        Wobland 29.03.14✎ 09:46 | 
        (24) мне тоже так кажется     | |||
| 27
    
        HEKPOH 29.03.14✎ 09:47 | 
        (24) Сделай вывод сам по (20) :)     | |||
| 28
    
        HEKPOH 29.03.14✎ 09:47 | 
        т.е. по (21)     | |||
| 29
    
        Lex_Liven 29.03.14✎ 09:52 | 
        (28) Очевидно, что выводы делать я не могу. Я же туплю, судя по (23) :)
 (20) А какие могут быть несогласования в (данных документа) с (данными того же документа из базы) в момент его проведения? (25) Это не важно просто потому, что вопрос был о двух подходах к одному действию в общем случае. | |||
| 30
    
        mistеr 29.03.14✎ 09:55 | 
        (21) И что?     | |||
| 31
    
        HEKPOH 29.03.14✎ 09:57 | 
        (30) читай (0)     | |||
| 32
    
        Мимохожий Однако 29.03.14✎ 09:57 | 
        (29)Продолжай партизанить. Жди, когда подтянутся телепаты.     | |||
| 33
    
        HEKPOH 29.03.14✎ 09:58 | 
        +(31) а именно, "Какой смысл?"     | |||
| 34
    
        Lex_Liven 29.03.14✎ 09:59 | 
        (32) Да какие телепаты? Что вам даст название конфигурации? Она написана кем-то с нуля, абсолютно не связана с типовыми.
 Прочитайте внимательно сам вопрос (0) и (29), часть 3. | |||
| 35
    
        HEKPOH 29.03.14✎ 10:06 | 
        (34) Давай уже замер производительности в студию!)))))     | |||
| 36
    
        mistеr 29.03.14✎ 10:07 | 
        (29) В данном случае несогласования нет. Я говорю про общий подход, который применяется в любом случае. Если завтра понадобится приджойнить еще какой-нибудь регистр для проверки, не нужно будет много переделывать (с цикла на запрос).     | |||
| 37
    
        Belomor 29.03.14✎ 10:13 | 
        (5) "И опасаюсь, что упадет производительность." - религия не позволяет использовать замер производительности?     | |||
| 38
    
        Lex_Liven 29.03.14✎ 10:14 | 
        (35) Замер производительности будет позже. Что-то мне подсказывает, что та оптимизация, которую я уже проделал, дает куда больше результатов :)
 Но чисто академический интерес остался, так что замер будет. (37) Религия позволяет сначала спросить, а потом делать, а не сделать и переделывать. | |||
| 39
    
        Мимохожий Однако 29.03.14✎ 10:14 | 
        (34)Применение объектного метода с перебором и запросом в конечном итоге завершается запросом к серверу. Тебе уже несколько раз сказали про замер, но результатов пока нет.     | |||
| 40
    
        ДенисЧ 29.03.14✎ 10:16 | 
        при условии "Она написана кем-то с нуля" - проще спросить разработчика     | |||
| 41
    
        Lex_Liven 29.03.14✎ 10:17 | 
        (39) То есть вы два часа пытаетесь спросить, фаловая это база или серверная? Отвечаю. Файловая.
 (40) А если разработчик уже недоступен? Представляете, и такое бывает. | |||
| 42
    
        Lex_Liven 29.03.14✎ 10:40 | 
        Замеры готовы. Как их выкладывать?     | |||
| 43
    
        Lex_Liven 29.03.14✎ 10:46 | 
        В двух словах. Цикл "Для Каждого Строка ИЗ ТЧ" действительно выполняется выполняется дольше, чем, "Пока Рез.Следующий()" по выборке.
 НО! Вся связка "запрос + цикл" занимает примерно столько же времени. Делать больше число сравнений у меня нет ни времени, ни желания. Я для себя делаю вывод, что цикл по ТЧ просто проще писать, а запрос с обработкой результата более гибок при каких-то сложных проверках и возможном расширении базы. | |||
| 44
    
        H A D G E H O G s 29.03.14✎ 10:47 | 
        (39) Вы путаете.     | |||
| 45
    
        H A D G E H O G s 29.03.14✎ 10:48 | 
        (43) Это кусок типового подхода, забей.     | |||
| 46
    
        H A D G E H O G s 29.03.14✎ 10:48 | 
        (43) Ну там Остатки по номенклатуре получить, к примеру.
 И потом перебрать результат запроса. Просто у тебя упрощенный случай. | |||
| 47
    
        Lex_Liven 29.03.14✎ 10:49 | 
        (46) Я понял. Об этом и говорю.     | |||
| 48
    
        H A D G E H O G s 29.03.14✎ 10:50 | 
        (47) Тебе - тупо перебирать ТЧ документа, не лезть запросом на сервер. Он, да, будет быстр и шустр, ибо попадание в Индекс почти 100%, но все равно.     | |||
| 49
    
        H A D G E H O G s 29.03.14✎ 10:51 | 
        Но когда нужны остатки - тогда ТИПОВЫЕ и 1С рекомендуют механизм (0).
 Но я с ними - не согласен :-) | |||
| 50
    
        User_Agronom 29.03.14✎ 10:51 | 
        (0) Как вариант.
 Прог писал что-то. Поисковик выдал пример решения (с форума или еще откуда). Прог оттуда скопировал блок и заточил под свою задачу. Так оказалось быстрее. А теперь давайте всем форумом искать глубинные причины. Работает? Значит нормально. | |||
| 51
    
        H A D G E H O G s 29.03.14✎ 10:52 | 
        (50) Как вариант, прог писавший (0) - сдавал 1С:Специалист     | |||
| 52
    
        Lex_Liven 29.03.14✎ 10:56 | 
        (48) Не люблю обращение "Тебе - тупо..." Меня как будто оскорбить пытаются.
 В данном конкретном случае весь (неграмотный)код вообще переписать надо. У меня тут во-первых, два запроса и два цикла, во-вторых, идиотское движение со списанием всех 3000 строк и оприходование их обратно, в-третьих, проверка некоторых условий все равно идет, но реализвано в цикле, а не в запросе. Короче, (неграмотный)код и есть. Я уже переписал его и доволен результатом. (51) прог, писавший (0) - это я или прог, писавший код который я привел? | |||
| 53
    
        Мимохожий Однако 29.03.14✎ 11:02 | 
        (52)Не переживай. Ты самый лучший прог.     | |||
| 54
    
        Lex_Liven 29.03.14✎ 11:05 | 
        (53) Я тоже люблю язв без чувства юмора.     | |||
| 55
    
        Diamond905 29.03.14✎ 11:41 | 
        а надо было просто 
 | ИнвентаризацияСостав.Товар, | Сумма(ИнвентаризацияСостав.КолФ) КАК Колф, | ИнвентаризацияСостав.Цена, | Сумма(ИнвентаризацияСостав.СумФ) КАК Сумф |ИЗ | Документ.Инвентаризация.Состав КАК ИнвентаризацияСостав |ГДЕ | ИнвентаризацияСостав.Ссылка = &Ссылка | СГРУППИРОВАТЬ ПО | ИнвентаризацияСостав.Товар | ИнвентаризацияСостав.Цена"; Тогда дублирующаяся номенклатура в строках бы лучше проходила | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |