Заполнить ТЧ результатом запроса

1. HaIIpuKoJIe 10.01.19 12:19 Сейчас в теме
Добрый день. Помогите пожалуйста разобраться. Делаю обработку с двумя табличными частями. В первую ТЧ попадают все строки из заказа на производство, а во вторую все строки из спецификации(Материалы).
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ЗаказНаПроизводство2_2Продукция.Номенклатура,
		|	ЗаказНаПроизводство2_2Продукция.Характеристика,
		|	ЗаказНаПроизводство2_2Продукция.КоличествоУпаковок,
		|	ЗаказНаПроизводство2_2Продукция.Спецификация,
		|	РесурсныеСпецификацииМатериалыИУслуги.Номенклатура КАК Номенклатура1,
		|	РесурсныеСпецификацииМатериалыИУслуги.КоличествоУпаковок КАК КоличествоУпаковок1,
		|	РесурсныеСпецификацииМатериалыИУслуги.Характеристика КАК Характеристика1
		|ИЗ
		|	Документ.ЗаказНаПроизводство2_2.Продукция КАК ЗаказНаПроизводство2_2Продукция
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК РесурсныеСпецификацииМатериалыИУслуги
		|		ПО ЗаказНаПроизводство2_2Продукция.Спецификация.Ссылка = РесурсныеСпецификацииМатериалыИУслуги.Ссылка
		|ГДЕ
		|	ЗаказНаПроизводство2_2Продукция.Ссылка = &Ссылка";
	
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	
	
		
		Выборка = Запрос.Выполнить().Выбрать();
    Объект.Товары.Очистить();
	Объект.Продукция.Очистить();
	Пока Выборка.Следующий() Цикл
		        СтрокаТЧ = Объект.Товары.Добавить();
				СтрокаТЧ.Номенклатура = Выборка.Номенклатура;
				СтрокаТЧ.Характеристика = Выборка.Характеристика;
				СтрокаТЧ.Спецификация = Выборка.Спецификация;
				СтрокаТЧ.Количество = Выборка.КоличествоУпаковок;
				СтрокаПродукция =  Объект.Продукция.Добавить();
				СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
				СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
				СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
	КонецЦикла; 
Показать

Если в спецификации 1 строка то все отрабатывает нормально, но если строк несколько то в первой ТЧ(Строки из заказа на производство) строки задваиваются. Почему это происходит мне понятно. А как правильно обработать результат запроса что бы обе таблицы заполнились привильно?
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
10. singlych 10.01.19 13:45 Сейчас в теме
Пока Выборка.СледующийПоЗначениюПоля("Спецификация") Цикл
                СтрокаТЧ = Объект.Товары.Добавить();
                СтрокаТЧ.Номенклатура = Выборка.Номенклатура;
                СтрокаТЧ.Характеристика = Выборка.Характеристика;
                СтрокаТЧ.Спецификация = Выборка.Спецификация;
                СтрокаТЧ.Количество = Выборка.КоличествоУпаковок;
                // здесь убери
                //СтрокаПродукция =  Объект.Продукция.Добавить();
                //СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
                //СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
                //СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
        Пока Выборка.Следующий() Цикл        
                СтрокаПродукция =  Объект.Продукция.Добавить();
                СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
                СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
                СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;                   
КонецЦикла;
Показать

(9)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. singlych 10.01.19 12:50 Сейчас в теме
Например:
- запрос упорядочить по ЗаказНаПроизводство2_2Продукция.Спецификация
- далее
Пока Выборка.СледующийПоЗначениюПоля("Спецификация") Цикл
// заполняем строку Объект.Товары
Пока Выборка.Следующий() Цикл
// заполняем строку Объект.Продукция
КонецЦикла;
КонецЦикла;
4. HaIIpuKoJIe 10.01.19 13:19 Сейчас в теме
(2)
ЗаказНаПроизводство2_2Продукция.Спецификация

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

Так? Заполняет только первую строку из спецификации.
6. singlych 10.01.19 13:21 Сейчас в теме
(4) Цикл Пока Выборка.Следующий() должен быть внутри цикла Пока Выборка.СледующийПоЗначениюПоля()
7. HaIIpuKoJIe 10.01.19 13:31 Сейчас в теме
(6)(6) Так работает для одной строки в заказе на производство, если их несколько то задваиваются строки спецификаций.
Пока Выборка.СледующийПоЗначениюПоля("Спецификация") Цикл
		        СтрокаТЧ = Объект.Товары.Добавить();
				СтрокаТЧ.Номенклатура = Выборка.Номенклатура;
				СтрокаТЧ.Характеристика = Выборка.Характеристика;
				СтрокаТЧ.Спецификация = Выборка.Спецификация;
				СтрокаТЧ.Количество = Выборка.КоличествоУпаковок;
				СтрокаПродукция =  Объект.Продукция.Добавить();
				СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
				СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
				СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
		Пока Выборка.Следующий() Цикл		
				СтрокаПродукция =  Объект.Продукция.Добавить();
				СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
				СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
				СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;		           
		КонецЦикла;	
	КонецЦикла;
Показать
8. singlych 10.01.19 13:38 Сейчас в теме
(7) ну а нафига два раза добавлять в продукцию? Товары добавляй во внешнем цикле, а продукцию во внутреннем.
9. HaIIpuKoJIe 10.01.19 13:42 Сейчас в теме
(8)Я наверно что то не понимаю, извините, только учусь. Но вроде так и есть, товары во внешнем, продукция во внутреннем.
10. singlych 10.01.19 13:45 Сейчас в теме
Пока Выборка.СледующийПоЗначениюПоля("Спецификация") Цикл
                СтрокаТЧ = Объект.Товары.Добавить();
                СтрокаТЧ.Номенклатура = Выборка.Номенклатура;
                СтрокаТЧ.Характеристика = Выборка.Характеристика;
                СтрокаТЧ.Спецификация = Выборка.Спецификация;
                СтрокаТЧ.Количество = Выборка.КоличествоУпаковок;
                // здесь убери
                //СтрокаПродукция =  Объект.Продукция.Добавить();
                //СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
                //СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
                //СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
        Пока Выборка.Следующий() Цикл        
                СтрокаПродукция =  Объект.Продукция.Добавить();
                СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
                СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
                СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;                   
КонецЦикла;
Показать

(9)
11. HaIIpuKoJIe 10.01.19 13:48 Сейчас в теме
(10)Действительно, скопировал и забыл удалить. Спасибо)
3. Fril 10.01.19 13:02 Сейчас в теме
У Вас ссылка явно определена
 Запрос.УстановитьПараметр("Ссылка", Ссылка);
зачем Вы получаете данные ссылки в запросе если можно это сделать через точку в выборке
СтрокаТЧ.Номенклатура = Ссылка.Номенклатура;
                СтрокаТЧ.Характеристика = Ссылка.Характеристика;
                СтрокаТЧ.Спецификация = Ссылка.Спецификация;

В запросе просто получите спецификацию без всяких соединений и выводите её!
5. singlych 10.01.19 13:20 Сейчас в теме
(3)
- это данные табчастей, а не ссылок
- объектная модель для мешков :)
Оставьте свое сообщение

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