IE 2018

1. sancho.malyutin 08.10.18 21:08 Сейчас в теме

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

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

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

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

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

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

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

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

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

А прочитать табличный документ в ТЗ и сунуть ее в запрос, ничего сложного в этом нет.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

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

Системный аналитик
Новосибирск
зарплата от 80 000 руб. до 100 000 руб.
Полный день

Программист 1С
Салехард
зарплата от 80 000 руб. до 200 000 руб.
Полный день

Программист 1С
Казань
Полный день

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