Для Каждого Стр из Запрос.Выполнить().Выгрузить() ... #650268


#0 by buhalter
Наткнулся в одной самописной конфигурации на конструкцию Для Каждого Стр из Запрос.Выполнить.Выгрузить Цикл ... Как по-Вашему будет работать данный фрагмент? ЗЫ. Сначала долго смеялся, потом проверил код на работоспособность. Был удивлен.
#2 by Fragster
почитай, как работают итераторы во взрослых языках
#3 by Галахад
А чо такого? Перебор строк таблицы.
#4 by Идентификатор
а почему нет? то же самое если б было для каждого стр из тз цикл КонецЦикла
#5 by Maxus43
тоже самое, просто менее читабельно
#6 by Fish
А что в тебе вызвало смех?
#7 by Идентификатор
/ Юмор ....... хД
#8 by ЧеловекДуши
Интересное наблюдение... Но как правило, код до первой ошибки :)
#9 by EasyRider
Пятница просто )
#10 by Rovan
рабочий, но я так не делаю, т.к. тяжело потом отладчиком смотреть что где
#11 by PiterPrg
Почему менее читабельно? Я сам так и пишу.... Так что-ли читабельно? Особенно если между Присвоением МояСуперТаблица и циклом 50 строк текста. Хотя... это дело вкуса ИМХО
#12 by Maxus43
менее читабельно имею ввиду
#13 by MaxisUssr
Я сам так делаю часто. Что изменится? Еще делаю так: Для Каждого СтрокаНезакрытая из Запрос.Выполнить.Выгрузить.НайтиСтроки(новый Структура("НезакрытаяСумма", Истина)) Цикл ... КонецЦикла;
#14 by Classic
Ты считал, что запрос будет выполняться при каждой итерации?
#15 by Fragster
а нафига вообще Выгрузить? выбрать лучше же...
#16 by Нуф-Нуф
т.е. вы хотите сказать, чтоб повторного обращения к Выгрузить не происходит?
#17 by buhalter
Показалось бредом в этом случае: 1. Запрос.Выполнить.Выгрузить - в цикле!!! Т.е. с каждой итерацией выполняем запрос и выгружаем в ТЗ. 2. Итерация строк таблицы. Было подозрение, что если количество строк не нулевое, то всегда будем получать только первую строку. Если второй пункт не оправдал моих ожиданий, то замеры производительности по вариантам а) Для каждого Стр Из Запрос.Выполнить.Выгрузить Цикл... б) Таблица = Запрос.Выполнить.Выгрузить;   Для каждого Стр Из Таблица Цикл... оказались разными. В пользу варианта б)
#18 by Fragster
сделай замер еще с . особенно на больших результатах запроса
#19 by MaxisUssr
Какова разница? Сколько строк и колонок в выгрузке?
#20 by buhalter
Вопрос не в этом. С Выбрать работать в ряде случаев правильнее и оптимальнее. Я в курсе.
#21 by buhalter
Результаты запроса одинаковые. Результат замера производительности - в пользу варианта с Для каждого Стр из Таблица Цикл... С небольшим, правда, отрывом, на 5%. Тестировалось на простом запросе без соединений. Возможно,на более сложных запросах результат сравнения замеров производительности может отличаться
#22 by buhalter
Когда разбирал код, это показалось мне смешным, потому как . Вот и поместил в секцию Юмор...
#23 by hhhh
так ты в каком порядке их запускал? Ведь понятно, что первый запрос всегда медленнее чем вторй, потому что второй использует кеш.
#24 by Fragster
5% - это в секундах сколько? сколько прогонов тестов делал?
#25 by Галахад
Чо-та у меня разница от одной тысячной до нескоьких десятитысячных секуды получилась. На справонике с 50К позиций. Функция СформироватьЗапрос
#26 by Fragster
так и должно быть
#27 by Fragster
читайте про
#28 by buhalter
не существенно. В том месте, где встретил этот кусок кода, протестить не могу(. Тестил на произвольном запросе типовой УНФ-ки. Что-то вроде Выбрать   Банки.Ссылка Из Справочник.Банки как Банки 5% в этом случае - доли секунд. Прогонов теста делал 10. Суммировал общее время выполнения. Сравнивал с аналогичным вариантом . В сумме вышла дельта около десятой доли секунды, уже не помню. Если кому интересно, потестируйте на сложных запросах.
#29 by Fragster
при чем тут вообще запрос? он-то одинаковое время работает.
#30 by buhalter
попробуй еще
#31 by buhalter
а можно ссылкой? Буду благодарен!
#32 by Fragster
#33 by Галахад
Ну, нафиг. Ощутимой разницы нет.
#34 by buhalter
Спасибо!
#35 by НафНаф
вот тут у тебя прокол
Тэги: Юмор
Ответить:
Комментарии доступны только авторизированным пользователям

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