Перезаписывается результат запроса

1. 1c_uZer 25.05.17 07:31 Сейчас в теме
Здравствуйте! прошу помощи) Имеется кусок кода:

Процедура ВыборПоДнямЗапрос();
	
	Результат = Неопределено;

	Для Каждого Стр ИЗ Данные Цикл
		Сотрудник = Стр.Сотрудник;
		
	Запрос = Новый Запрос;
	
	Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
	
	Запрос.Текст =
	
	"ВЫБРАТЬ
	|	ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.Сотрудник,
	|	ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ВидУчетаВремени,
	|	ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ДниОборот,
	|	ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ЧасыОборот
	|ИЗ
	|	РегистрНакопления.ДанныеТабельногоУчетаРабочегоВремениСотрудников.Обороты КАК ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты
	|ГДЕ
	|	ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.Сотрудник = &Сотрудник";	
	
	Результат = Запрос.Выполнить().Выгрузить();
	
	КонецЦикла;


КонецПроцедуры
Показать


Проблема в том что Результат после каждой итерации перезаписывается и я понимаю почему, но скажите как это исправить?
По теме из базы знаний
Найденные решения
3. TODD22 18 25.05.17 07:38 Сейчас в теме
(1)Потому что запрос у тебя в цикле!!!
Запросы в цикле делать не рекомендуется!!!
 ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.Сотрудник = &Сотрудник";

Измени на
 ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.Сотрудник В  (&Сотрудник)";

В параметр "Сотрудник" передавай массив нужных тебе сотрудников.
И убери цикл. Тогда в результате запроса у тебя будет выборка по всем сотрудникам.

Результат = Запрос.Выполнить().Выгрузить();

Замени на
 Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
// обрабатываешь записи
КонецЦикла;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. TODD22 18 25.05.17 07:38 Сейчас в теме
(1)Потому что запрос у тебя в цикле!!!
Запросы в цикле делать не рекомендуется!!!
 ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.Сотрудник = &Сотрудник";

Измени на
 ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.Сотрудник В  (&Сотрудник)";

В параметр "Сотрудник" передавай массив нужных тебе сотрудников.
И убери цикл. Тогда в результате запроса у тебя будет выборка по всем сотрудникам.

Результат = Запрос.Выполнить().Выгрузить();

Замени на
 Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
// обрабатываешь записи
КонецЦикла;
4. 1c_uZer 25.05.17 07:45 Сейчас в теме
(3) а каким образом мне передать массив нужных мне сотрудников?

Пока Результат.Следующий() Цикл
// обрабатываешь записи
КонецЦикла;


и какие записи мне обработать здесь?
6. TODD22 18 25.05.17 07:49 Сейчас в теме
(4)
и какие записи мне обработать здесь?

Результата запроса.
а каким образом мне передать массив нужных мне сотрудников?

Обычным способом. Только вместо переменной с ссылкой на сотрудника нужно передать массив ссылок на сотрудников.
Если у тебя в переменной "Данные" находится таблица значений то значит нужно выгрузить из неё колонку в массив. И этот массив передать в параметр запроса.
7. 1c_uZer 25.05.17 07:52 Сейчас в теме
(6) понял, спасибо, сейчас попробую
9. 1c_uZer 25.05.17 08:05 Сейчас в теме
(6) все пошло, спасибо большое.
2. Scop 61 25.05.17 07:37 Сейчас в теме
Так вот же строчка:
Результат = Запрос.Выполнить().Выгрузить();
А что Вы хотели сделать с Результатом?
5. 1c_uZer 25.05.17 07:46 Сейчас в теме
(2) да он перезатирается у енмя так как запрос в цикле ан е хотелось бы)
8. rulex* 25.05.17 08:01 Сейчас в теме
Запросы в цикле это жесть! Лучше сначала получи данные по всем сотрудникам и дальше работай с ними
10. TODD22 18 25.05.17 08:09 Сейчас в теме
Код выложи какой получился....
11. 1c_uZer 25.05.17 08:14 Сейчас в теме
(10)
Процедура ВыборПоДнямЗапрос();
	
	//Сотрудник = Новый Массив;
	
	Сотрудник = Данные.ВыгрузитьКолонку("Сотрудник");
	
	Запрос = Новый Запрос;
	
	Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
	
	Запрос.Текст =
	
	"ВЫБРАТЬ
	|	ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.Сотрудник,
	|	ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ВидУчетаВремени,
	|	ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ДниОборот КАК Дни,
	|	ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ЧасыОборот КАК Часы
	|ИЗ
	|	РегистрНакопления.ДанныеТабельногоУчетаРабочегоВремениСотрудников.Обороты КАК ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты
	|ГДЕ
	|	ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.Сотрудник В(&Сотрудник)";	
	
	Результат = Запрос.Выполнить().Выгрузить();
	

КонецПроцедуры
Показать


Но я пока выгрузил Результат запроса и посмотрел его он берет все данные которые нужны, записи не обрабатывал.
12. TODD22 18 25.05.17 08:18 Сейчас в теме
(11)Запрос не выгружай в таблицу значений. А обрабатывай выборкой как я тебе написал.
В ТЗ рекомендуется выгружать для последующей загрузки в регистр.
А так лучше использовать "выборку". Выборка читает по несколько записей из результата. А выгрузка в ТЗ выгружает весь результат в таблицу значений что является ресурсоёмкой операцией.
13. 1c_uZer 25.05.17 08:41 Сейчас в теме
(12) спасибо за советы. учту, сейчас буду дальше копать что у меня да как.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот