Заполнить ТЧ результатом запроса
Добрый день. Помогите пожалуйста разобраться. Делаю обработку с двумя табличными частями. В первую ТЧ попадают все строки из заказа на производство, а во вторую все строки из спецификации(Материалы).
Если в спецификации 1 строка то все отрабатывает нормально, но если строк несколько то в первой ТЧ(Строки из заказа на производство) строки задваиваются. Почему это происходит мне понятно. А как правильно обработать результат запроса что бы обе таблицы заполнились привильно?
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказНаПроизводство2_2Продукция.Номенклатура,
| ЗаказНаПроизводство2_2Продукция.Характеристика,
| ЗаказНаПроизводство2_2Продукция.КоличествоУпаковок,
| ЗаказНаПроизводство2_2Продукция.Спецификация,
| РесурсныеСпецификацииМатериалыИУслуги.Номенклатура КАК Номенклатура1,
| РесурсныеСпецификацииМатериалыИУслуги.КоличествоУпаковок КАК КоличествоУпаковок1,
| РесурсныеСпецификацииМатериалыИУслуги.Характеристика КАК Характеристика1
|ИЗ
| Документ.ЗаказНаПроизводство2_2.Продукция КАК ЗаказНаПроизводство2_2Продукция
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК РесурсныеСпецификацииМатериалыИУслуги
| ПО ЗаказНаПроизводство2_2Продукция.Спецификация.Ссылка = РесурсныеСпецификацииМатериалыИУслуги.Ссылка
|ГДЕ
| ЗаказНаПроизводство2_2Продукция.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Объект.Товары.Очистить();
Объект.Продукция.Очистить();
Пока Выборка.Следующий() Цикл
СтрокаТЧ = Объект.Товары.Добавить();
СтрокаТЧ.Номенклатура = Выборка.Номенклатура;
СтрокаТЧ.Характеристика = Выборка.Характеристика;
СтрокаТЧ.Спецификация = Выборка.Спецификация;
СтрокаТЧ.Количество = Выборка.КоличествоУпаковок;
СтрокаПродукция = Объект.Продукция.Добавить();
СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
КонецЦикла;
ПоказатьЕсли в спецификации 1 строка то все отрабатывает нормально, но если строк несколько то в первой ТЧ(Строки из заказа на производство) строки задваиваются. Почему это происходит мне понятно. А как правильно обработать результат запроса что бы обе таблицы заполнились привильно?
Прикрепленные файлы:
По теме из базы знаний
- Простой вывод результата запроса в табличный документ
- Построитель отчета по SQL запросу к внешней базе данных. Подключение к базе через udl.
- Консоль запросов продвинутая 8.3 (с возможностью обработки результата запроса)
- Ошибки регламентированного отчета статистики «Форма №11 (краткая)» за 2017 год для БГУ 1.0 и их исправление
- Как читать чужой код? Часть 3. Разбор и доработка запросов
Найденные решения
Пока Выборка.СледующийПоЗначениюПоля("Спецификация") Цикл
СтрокаТЧ = Объект.Товары.Добавить();
СтрокаТЧ.Номенклатура = Выборка.Номенклатура;
СтрокаТЧ.Характеристика = Выборка.Характеристика;
СтрокаТЧ.Спецификация = Выборка.Спецификация;
СтрокаТЧ.Количество = Выборка.КоличествоУпаковок;
// здесь убери
//СтрокаПродукция = Объект.Продукция.Добавить();
//СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
//СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
//СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
Пока Выборка.Следующий() Цикл
СтрокаПродукция = Объект.Продукция.Добавить();
СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
КонецЦикла;
Показать(9)
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Например:
- запрос упорядочить по ЗаказНаПроизводство2_2Продукция.Спецификация
- далее
Пока Выборка.СледующийПоЗначениюПоля("Спецификация") Цикл
// заполняем строку Объект.Товары
Пока Выборка.Следующий() Цикл
// заполняем строку Объект.Продукция
КонецЦикла;
КонецЦикла;
- запрос упорядочить по ЗаказНаПроизводство2_2Продукция.Спецификация
- далее
Пока Выборка.СледующийПоЗначениюПоля("Спецификация") Цикл
// заполняем строку Объект.Товары
Пока Выборка.Следующий() Цикл
// заполняем строку Объект.Продукция
КонецЦикла;
КонецЦикла;
(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)(6) Так работает для одной строки в заказе на производство, если их несколько то задваиваются строки спецификаций.
Пока Выборка.СледующийПоЗначениюПоля("Спецификация") Цикл
СтрокаТЧ = Объект.Товары.Добавить();
СтрокаТЧ.Номенклатура = Выборка.Номенклатура;
СтрокаТЧ.Характеристика = Выборка.Характеристика;
СтрокаТЧ.Спецификация = Выборка.Спецификация;
СтрокаТЧ.Количество = Выборка.КоличествоУпаковок;
СтрокаПродукция = Объект.Продукция.Добавить();
СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
Пока Выборка.Следующий() Цикл
СтрокаПродукция = Объект.Продукция.Добавить();
СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
КонецЦикла;
КонецЦикла;
ПоказатьПока Выборка.СледующийПоЗначениюПоля("Спецификация") Цикл
СтрокаТЧ = Объект.Товары.Добавить();
СтрокаТЧ.Номенклатура = Выборка.Номенклатура;
СтрокаТЧ.Характеристика = Выборка.Характеристика;
СтрокаТЧ.Спецификация = Выборка.Спецификация;
СтрокаТЧ.Количество = Выборка.КоличествоУпаковок;
// здесь убери
//СтрокаПродукция = Объект.Продукция.Добавить();
//СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
//СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
//СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
Пока Выборка.Следующий() Цикл
СтрокаПродукция = Объект.Продукция.Добавить();
СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
КонецЦикла;
Показать(9)
У Вас ссылка явно определена зачем Вы получаете данные ссылки в запросе если можно это сделать через точку в выборке
В запросе просто получите спецификацию без всяких соединений и выводите её!
Запрос.УстановитьПараметр("Ссылка", Ссылка);
СтрокаТЧ.Номенклатура = Ссылка.Номенклатура;
СтрокаТЧ.Характеристика = Ссылка.Характеристика;
СтрокаТЧ.Спецификация = Ссылка.Спецификация;
В запросе просто получите спецификацию без всяких соединений и выводите её!
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)