Добавление пустой строки в цикле

1. HaIIpuKoJIe 17.01.19 09:41 Сейчас в теме
Добрый день. Заполняю циклом строки ТЧ Продукция по данным ТЧ Товары.Спецификация. Необходимо после обхода всей спецификации вставлять пустую строку разделитель.
Попробовал так
Для Каждого ТекущаяСтрока  Из Объект.Товары
					Цикл 
							СтрокаПродукция =  Объект.Продукция.Добавить();
							Пока Выборка.Следующий() 
						Цикл
							Если Выборка.СпособПолученияМатериала =  Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации Тогда 
								СтрокаПродукция =  Объект.Продукция.Добавить();
								СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
								СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
								СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
							Иначе
								КонецЕсли;
						КонецЦикла;	
				 КонецЦикла;
Показать

Но так с каждым проходом цикла пустая строка задваивается, затраивается и тд.
По теме из базы знаний
Найденные решения
8. spacecraft 17.01.19 10:41 Сейчас в теме
(1)
Для Каждого ТекущаяСтрока  Из Объект.Товары Цикл 
	ЕстьСпецификация = Ложь;
	Пока Выборка.Следующий() Цикл
		Если Выборка.СпособПолученияМатериала =  Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации Тогда 
			ЕстьСпецификация = Истина;
			СтрокаПродукция =  Объект.Продукция.Добавить();
			СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
			СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
			СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
		КонецЕсли;
	КонецЦикла;
	Если ЕстьСпецификация Тогда
		СтрокаПродукция =  Объект.Продукция.Добавить();
	КонецЕсли;
КонецЦикла;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. spacecraft 17.01.19 10:41 Сейчас в теме
(1)
Для Каждого ТекущаяСтрока  Из Объект.Товары Цикл 
	ЕстьСпецификация = Ложь;
	Пока Выборка.Следующий() Цикл
		Если Выборка.СпособПолученияМатериала =  Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации Тогда 
			ЕстьСпецификация = Истина;
			СтрокаПродукция =  Объект.Продукция.Добавить();
			СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
			СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
			СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
		КонецЕсли;
	КонецЦикла;
	Если ЕстьСпецификация Тогда
		СтрокаПродукция =  Объект.Продукция.Добавить();
	КонецЕсли;
КонецЦикла;
Показать
9. HaIIpuKoJIe 17.01.19 10:48 Сейчас в теме
(8)Спасибо, так работает.
10. HaIIpuKoJIe 22.01.19 16:46 Сейчас в теме
(8)А можно как то добавить строку перед обходом выборки а не после?
11. spacecraft 22.01.19 17:09 Сейчас в теме
(10) можно.
Для Каждого ТекущаяСтрока  Из Объект.Товары Цикл 
    ПустаяСтрокаПродукции = Объект.Продукция.Добавить();
    ЕстьСпецификация = Ложь;
    Пока Выборка.Следующий() Цикл
        Если Выборка.СпособПолученияМатериала =  Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации Тогда 
            ЕстьСпецификация = Истина;
            СтрокаПродукция =  Объект.Продукция.Добавить();
            СтрокаПродукция.НоменклатураВЭтап = Выборка.Номенклатура1;
            СтрокаПродукция.КоличествоВЭтап = Выборка.КоличествоУпаковок1;
            СтрокаПродукция.ХарактеристикаВЭтап = Выборка.Характеристика1;
        КонецЕсли;
    КонецЦикла;
    Если Не ЕстьСпецификация Тогда
        Объект.Продукция.Удалить(ПустаяСтрокаПродукции);
    КонецЕсли;
КонецЦикла;
Показать
HaIIpuKoJIe; +1 Ответить
2. signum2009 1029 17.01.19 09:58 Сейчас в теме
Отладкой пройдите и посмотрите, когда она начинает задваиваться, затраиваться и тд
6. HaIIpuKoJIe 17.01.19 10:39 Сейчас в теме
(2) На сервере в данный момент нет возможности включить отладку
3. markw 17.01.19 10:01 Сейчас в теме
Скорее всего по этому условию:
Если Выборка.СпособПолученияМатериала = Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации Тогда
В том случае, если ничего не добавлено, отрабатывает только строка из начала цикла всегда безусловно
СтрокаПродукция = Объект.Продукция.Добавить();
Вот тут вообще непонятно:
Пока Выборка.Следующий()
Выборка для каждой строки товара не меняется, а обходится до конца.
Весь код?
4. HaIIpuKoJIe 17.01.19 10:24 Сейчас в теме
(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;
							Иначе
								КонецЕсли;
						КонецЦикла;	
				 КонецЦикла;				
				
			КонецЦикла;

Показать
5. markw 17.01.19 10:37 Сейчас в теме
(4) Пока Выборка.СледующийПоЗначениюПоля("Спецификация") Цикл
СтрокаТЧ = Объект.Товары.Добавить();
Вот тут мы добавляем строку

А вот тут обходим все строки - с первой добавленной и до последней
Для Каждого ТекущаяСтрока Из Объект.Товары

Т.е. в выборке первая строка - добавили строки в товары, обходим эту одну строку.
В выборке вторая строка - добавили её и обходим первую и вторую строки.

Кажется, что цикл Для Каждого ТекущаяСтрока Из Объект.Товары вообще лишний.
7. HaIIpuKoJIe 17.01.19 10:41 Сейчас в теме
(5)Товары и продукция это две разных ТЧ.
Оставьте свое сообщение

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