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