Запрос к табличной части текущего документа. Какой в этом смысл? #703549


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

В этой группе 1С