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)
- это данные табчастей, а не ссылок
- объектная модель для мешков :)
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Консультант-аналитик 1С
Москва
зарплата от 100 000 руб. до 170 000 руб.
Полный день

Программист 1С
Москва
Полный день

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

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