Запросы в цикле

1. s_m 08.10.18 21:08 Сейчас в теме
Прошу подсказать ученику)
Запросы в циклах - вред и нужно стараться их там не использовать. Но ведь запрос запросу рознь) Подскажите, можно ли использовать запрос в цикле в данном примере или может есть велосипед какой?
Считываю из эксель -файла 1000 строк с полями Код, ФИО и КодВрача и делаю для каждой строки проверку на возможное наличие по этим параметрам сотрудника:

Запрос.Текст = "ВЫБРАТЬ
	               |	СотрудникиОрганизаций.Ссылка
	               |ИЗ
	               |	Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
	               |ГДЕ
	               |	СотрудникиОрганизаций.Код = &Код
	               |	И СотрудникиОрганизаций.Наименование = &Наименование
	               |	И СотрудникиОрганизаций.КодВрача = &КодВрача
	               |	И СотрудникиОрганизаций.Родитель = &Родитель";
Показать
По теме из базы знаний
Найденные решения
5. Timur.V 78 08.10.18 22:27 Сейчас в теме
(1)
Запросы в цикле - это как штрафной круг в биатлоне.

а) загрузите из excel в Таблицу значений
б) из Таблицы значений во временную таблицу в запросе (если записей больше 1000, проиндексируйте)
в) и соединяйте в запросе временную таблицу из б) и справочник сотрудников.
Пункты б) и в) можно написать в одном запросе.
Bene_Valete; s_m; +2 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. Sashares 34 08.10.18 22:07 Сейчас в теме
(1)Кажется, что нет никакой проблемы сначала считать всю таблицу из 1000 строк, передать ее в запрос и соединиться с сотрудниками.
Зачем нужна эта 1000 запросов?
5. Timur.V 78 08.10.18 22:27 Сейчас в теме
(1)
Запросы в цикле - это как штрафной круг в биатлоне.

а) загрузите из excel в Таблицу значений
б) из Таблицы значений во временную таблицу в запросе (если записей больше 1000, проиндексируйте)
в) и соединяйте в запросе временную таблицу из б) и справочник сотрудников.
Пункты б) и в) можно написать в одном запросе.
Bene_Valete; s_m; +2 Ответить
6. VmvLer 09.10.18 14:21 Сейчас в теме
(5) если записей 10КК, то создание индекса будет очень не быстрым и часто бесполезным
7. Timur.V 78 09.10.18 14:31 Сейчас в теме
(6)
часто бесполезным

Где и как нужно использовать ИНДЕКСИРОВАТЬ ПО :
Конструкцию рекомендуется использовать по полям временных таблиц, по которым эта временная таблица будет соединяться с другими таблицами баз данных. Это существенно повышает скорость выполнения соединения таблиц.
Однако следует учесть один момент. Построение индекса временной таблицы также требует времени на выполнение. Поэтому целесообразно использовать конструкцию «ИНДЕКСИРОВАТЬ ПО», только если Вы знаете, что во временной таблице будет не 1-2 записи. В противном случае эффект может быть обратным — быстродействие от индексированных полей не компенсирует времени построения индекса.
2. DarkUser 08.10.18 21:12 Сейчас в теме
Иногда запросы в цикле можно и нужно использовать. Нашел даже в типовой (вроде Бух3.0) такой запрос с комментарием, что на крупных базах так будет быстрее. Но в вашем случае лучше всё же обойтись одним запросом. Прочитайте файл в таблицу значений и выполните запрос с параметром.
4. palsergeich 08.10.18 22:09 Сейчас в теме
(2)
Иногда запросы в цикле можно и нужно использовать. Нашел даже в типовой (вроде Бух3.0) такой запрос с комментарием, что на крупных базах так будет быстрее. Но в вашем случае лучше всё же обойтись одним запросом. Прочитайте файл в таблицу значений и выполните запрос с параметром.

Или хотя бы в цикле но по с обработкой по 100 строк разом запросом, ибо так и правда может оказаться быстрее. По 1 строке - незачет.
Но в реальных примерах между 100 и 1000 строк в ТЗ передаваемой в запрос я не увидел особой разницы, а вот между 1000 и 10000 - есть ньюансы
8. starjevschik 09.10.18 17:09 Сейчас в теме
Правда состоит в том, что никто никогда не узнает, как там в твоей обработке запросы. Заказчик увидит всего лишь, что обработка работает и сделана за полдня или за неделю. Нетрудно догадаться, в каком случае ему будет приятнее.
Если скорость выполнения будет критичной - переделаешь. А не будет, так и сойдет хоть в цикле хоть перебором.
Vovan1975; +1 Ответить
9. Sashares 34 09.10.18 17:19 Сейчас в теме
(8)Своя правда в этом есть))
Если обработка работает долго, значит она делает что-то сложное))
10. starjevschik 09.10.18 17:24 Сейчас в теме
(9) вот! к тому же с екселем заведомо не будет слишком быстро...
Код должен быть понятным - даже спустя год. Должен правильно работать. А вот насколько он академически правильно написан, это дело даже не десятое, а сто десятое. Это же 1с, вспомогательный инструмент, который для заказчика должен быть простым, удобным и дешевым ( = быстро сделанным) в первую очередь.
Vovan1975; +1 Ответить
11. Sashares 34 09.10.18 17:38 Сейчас в теме
(10)
к тому же с екселем заведомо не будет слишком быстро

Прочитать ексель в табличный документ, и работать уже с табличным документом.
Это достаточно быстро.

Другое дело, что если система загруженная и сама по себе,
выполнять 1000 запросов, чтобы еще сильнее нагрузить систему, это не хорошо.

А прочитать табличный документ в ТЗ и сунуть ее в запрос, ничего сложного в этом нет.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)