Проблема с циклом

1. Dadka_kmv 4 21.03.17 09:01 Сейчас в теме
доброго времени суток. имеется конфигурация Общепит
пишу внешнюю печ.форму для документа Выпуск продукции ОП6
и тут затык - не могу понять, что сделал не так в цикле,

Ном = 0;
	
	Шапка = ВыборкаПеремещение.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Пока Шапка.Следующий() Цикл
	                                            
		Ном = Ном + 1;                                                     
		ОбластьСтрока.Параметры.Ном = Ном;
		ОбластьСтрока.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Товар;
		ОбластьСтрока.Параметры.Код = ТоварКод;
		ОбластьСтрока.Параметры.Единица = ТоварЕдИзм;
		ОбластьСтрока.Параметры.КодЕдиницы = ТоварЕдИзмКод;
		ОбластьСтрока.Параметры.ИтогоОтпущено = Количество;
		ОбластьСтрока.Параметры.ЦенаУчетная = Цена;
		ОбластьСтрока.Параметры.СуммаУчетная = Сумма;
		ТабличныйДокумент.Вывести(ОбластьСтрока);
	КонецЦикла;

где Шапка.Следующий() всегда = ЛОЖЬ

подскажите, что делаю не так?


вот весь код


	ВалютаПечати = Константы.ВалютаРегламентированногоУчета.Получить();
	
	
	Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ОП6");
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.АвтоМасштаб			= Истина;
	ТабличныйДокумент.ПолеСверху			= 0;
	ТабличныйДокумент.ПолеСлева				= 0;
	ТабличныйДокумент.ПолеСнизу				= 0;
	ТабличныйДокумент.ПолеСправа			= 0;
	ТабличныйДокумент.ОриентацияСтраницы	= ОриентацияСтраницы.Ландшафт;
	ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ОП6";                            
	
	СисИнфо = Новый СистемнаяИнформация;
	Если ПустаяСтрока(СисИнфо.ИнформацияПрограммыПросмотра) Тогда 
		ТабличныйДокумент.ПолеСлева          = 0;
	Иначе
		ТабличныйДокумент.ПолеСлева          = 10;
	КонецЕсли;

	  	
//	Запрос.УстановитьПараметр("МассивОбъектов", СсылкаНаОбъект);
//	Запрос.УстановитьПараметр("ДатаДок", СсылкаНаОбъект.Дата);
//	Запрос.УстановитьПараметр("ДополнительнаяКолонкаПечатныхФормДокументов", Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить());
	
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ОбщепитВыпускПродукции.Ссылка КАК ВыпускПродукции,
		|	ПеремещениеТоваров.Ссылка КАК Перемещение,
		|	ПеремещениеТоваров.СкладОтправитель,
		|	ПеремещениеТоваров.СкладПолучатель
		|ПОМЕСТИТЬ втДокументы
		|ИЗ
		|	Документ.ОбщепитВыпускПродукции КАК ОбщепитВыпускПродукции
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
		|		ПО ОбщепитВыпускПродукции.Ссылка = ПеремещениеТоваров.ДокументОснование
		|ГДЕ
		|	ОбщепитВыпускПродукции.Ссылка В(&МассивОбъектов)
		|	И ОбщепитВыпускПродукции.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ОбщепитВидыОперацийВыпускПродукции.ВыпускПродукции)
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ОбщепитВыпускПродукции.Ссылка,
		|	ОбщепитВыпускПродукции.Ссылка,
		|	ОбщепитВыпускПродукции.Склад,
		|	ОбщепитВыпускПродукции.СкладПолучатель
		|ИЗ
		|	Документ.ОбщепитВыпускПродукции КАК ОбщепитВыпускПродукции
		|ГДЕ
		|	ОбщепитВыпускПродукции.Ссылка В(&МассивОбъектов)
		|	И ОбщепитВыпускПродукции.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ОбщепитВидыОперацийВыпускПродукции.ВыпускПродукцииСперемещением)
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	втДокументы.ВыпускПродукции,
		|	втДокументы.Перемещение,
		|	втДокументы.СкладПолучатель,
		|	втДокументы.СкладОтправитель,
		|	ХозрасчетныйОбороты.Субконто1.Код КАК ТоварКод,
		|	ХозрасчетныйОбороты.Субконто1 КАК Товар,
		|	ХозрасчетныйОбороты.Субконто1.ЕдиницаИзмерения КАК ТоварЕдИзм,
		|	ХозрасчетныйОбороты.Субконто1.ЕдиницаИзмерения.Код КАК ТоварЕдИзмКод,
		|	ХозрасчетныйОбороты.СуммаОборотДт КАК Сумма,
		|	ХозрасчетныйОбороты.КоличествоОборотДт КАК Количество
		|ПОМЕСТИТЬ втРезультат
		|ИЗ
		|	втДокументы КАК втДокументы
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(
		|				&ДатаДок,
		|				,
		|				Запись,
		|				Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ГотоваяПродукция))
		|					ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары)),
		|				,
		|				,
		|				,
		|				) КАК ХозрасчетныйОбороты
		|		ПО втДокументы.СкладПолучатель = ХозрасчетныйОбороты.Субконто2
		|			И втДокументы.Перемещение = ХозрасчетныйОбороты.Регистратор
		|ГДЕ
		|	ХозрасчетныйОбороты.Регистратор В
		|			(ВЫБРАТЬ
		|				втДокументы.Перемещение
		|			ИЗ
		|				втДокументы КАК втДокументы)
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	втРезультат.Перемещение КАК Перемещение,
		|	втРезультат.СкладПолучатель,
		|	втРезультат.СкладОтправитель,
		|	втРезультат.ТоварЕдИзм,
		|	втРезультат.Товар,
		|	втРезультат.ТоварЕдИзмКод,
		|	втРезультат.ТоварКод,
		|	втРезультат.Сумма,
		|	втРезультат.Количество,
		|	втРезультат.Сумма / втРезультат.Количество КАК Цена
		|ИЗ
		|	втРезультат КАК втРезультат
		|ИТОГИ ПО
		|	Перемещение";
	
		
	Запрос.УстановитьПараметр("МассивОбъектов", СсылкаНаОбъект);
	Запрос.УстановитьПараметр("ДатаДок", СсылкаНаОбъект.Дата);
		
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаПеремещение = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Пока ВыборкаПеремещение.Следующий() Цикл
		
		Перемещение = ВыборкаПеремещение.Перемещение;
	
		ВыборкаДетальныеЗаписи = ВыборкаПеремещение.Выбрать();
	
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			
			СкладПолучатель = ВыборкаДетальныеЗаписи.СкладПолучатель;
			СкладОтправитель = ВыборкаДетальныеЗаписи.СкладОтправитель;
			ТоварЕдИзм = ВыборкаДетальныеЗаписи.ТоварЕдИзм;
			Товар = ВыборкаДетальныеЗаписи.Товар;
			ТоварЕдИзмКод = ВыборкаДетальныеЗаписи.ТоварЕдИзмКод;
			ТоварКод = ВыборкаДетальныеЗаписи.ТоварКод;
			Сумма = ВыборкаДетальныеЗаписи.Сумма;
			Количество = ВыборкаДетальныеЗаписи.Количество;
			Цена = ВыборкаДетальныеЗаписи.Цена;
			
		КонецЦикла;
	КонецЦикла;
	
		
	
	ОбластьЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
	СведенияОбОрганизации = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(СсылкаНаОбъект.Организация, СсылкаНаОбъект.Дата);
	ОбластьЗаголовокТаблицы.Параметры.ПредставлениеОрганизации = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации);
	ОбластьЗаголовокТаблицы.Параметры.СкладОтправитель = СкладОтправитель;
	ОбластьЗаголовокТаблицы.Параметры.СкладПолучатель = СкладПолучатель;
	ОбластьЗаголовокТаблицы.Параметры.КодПоОКПО = СведенияОбОрганизации.КодПоОКПО;
	ОбластьЗаголовокТаблицы.Параметры.НомерДок = СсылкаНаОбъект.Номер;
	ОбластьЗаголовокТаблицы.Параметры.ДатаДок = Формат(СсылкаНаОбъект.Дата, "ДФ=dd.MM.yyyy"); 
	ОбластьЗаголовокТаблицы.Параметры.Должность = "Руководитель службы питания"; 
	ОбластьЗаголовокТаблицы.Параметры.Руководитель = "Мостовой Ю.А.";
	ОбластьЗаголовокТаблицы.Параметры.Бухгалтер = "Шайда Л.А.";
	ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицы);
	
	ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
	ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
	
	ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
	
	Ном = 0;
	
	Шапка = ВыборкаПеремещение.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Пока Шапка.Следующий() Цикл
	                                            
		Ном = Ном + 1;                                                     
		ОбластьСтрока.Параметры.Ном = Ном;
		ОбластьСтрока.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Товар;
		ОбластьСтрока.Параметры.Код = ТоварКод;
		ОбластьСтрока.Параметры.Единица = ТоварЕдИзм;
		ОбластьСтрока.Параметры.КодЕдиницы = ТоварЕдИзмКод;
		ОбластьСтрока.Параметры.ИтогоОтпущено = Количество;
		ОбластьСтрока.Параметры.ЦенаУчетная = Цена;
		ОбластьСтрока.Параметры.СуммаУчетная = Сумма;
		ТабличныйДокумент.Вывести(ОбластьСтрока);
	КонецЦикла;
	
	Возврат ТабличныйДокумент;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. petrik 21.03.17 09:29 Сейчас в теме
(1) Попробуйте перед вторым циклом вставить:
ВыборкаПеремещение.Сбросить();
6. petrik 21.03.17 09:30 Сейчас в теме
(5) +но решение будет правильнее, если все будет в одном цикле, как в (4)
2. Sokar 21.03.17 09:09 Сейчас в теме
проверьте сначала чему у вас равняется Шапка.Количество()
3. minarenko 21.03.17 09:13 Сейчас в теме
Ты там с перемещениями не запутался?))
Шапка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
4. v3rter 21.03.17 09:25 Сейчас в теме
Нда. В первом цикле
 Пока ВыборкаПеремещение.Следующий() Цикл
одни и те же переменные (не таблицы значений) по очереди заполняются всеми значениями запроса, в результате на выходе из цикла в переменных остается последняя строка запроса. И ничего более. А во втором цикле эта строка многократно выводится с разными наименованиями, верно?

Объедините оба цикла в один и разместите его на месте второго, первый закомментируйте. Второй будет выглядеть как-то так

  Ном = 0;
    
    Шапка = ВыборкаПеремещение.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока Шапка.Следующий() Цикл

        Ном = Ном + 1;                                                     

            СкладПолучатель = ВыборкаДетальныеЗаписи.СкладПолучатель;
            СкладОтправитель = ВыборкаДетальныеЗаписи.СкладОтправитель;
            ТоварЕдИзм = ВыборкаДетальныеЗаписи.ТоварЕдИзм;
            Товар = ВыборкаДетальныеЗаписи.Товар;
            ТоварЕдИзмКод = ВыборкаДетальныеЗаписи.ТоварЕдИзмКод;
            ТоварКод = ВыборкаДетальныеЗаписи.ТоварКод;
            Сумма = ВыборкаДетальныеЗаписи.Сумма;
            Количество = ВыборкаДетальныеЗаписи.Количество;
            Цена = ВыборкаДетальныеЗаписи.Цена; 
        ОбластьСтрока.Параметры.Ном = Ном;
        ОбластьСтрока.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Товар;
        ОбластьСтрока.Параметры.Код = ТоварКод;
        ОбластьСтрока.Параметры.Единица = ТоварЕдИзм;
        ОбластьСтрока.Параметры.КодЕдиницы = ТоварЕдИзмКод;
        ОбластьСтрока.Параметры.ИтогоОтпущено = Количество;
        ОбластьСтрока.Параметры.ЦенаУчетная = Цена;
        ОбластьСтрока.Параметры.СуммаУчетная = Сумма;
        ТабличныйДокумент.Вывести(ОбластьСтрока);
    КонецЦикла;
    
    Возврат ТабличныйДокумент;
Показать


Если заработает, то можно будет отказаться от промежуточных переменных:
ОбластьСтрока.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Товар;  // из-за этой строки у Вас правильно выводится номенклатура
ОбластьСтрока.Параметры.Код = ВыборкаДетальныеЗаписи.ТоварКод; // переменная больше не нужна: ТоварКод = ВыборкаДетальныеЗаписи.ТоварКод;
ОбластьСтрока.Параметры.Единица = ВыборкаДетальныеЗаписи.ТоварЕдИзм; // переменная больше не нужна: ТоварЕдИзм = ВыборкаДетальныеЗаписи.ТоварЕдИзм;
/// и т.д.
7. v3rter 21.03.17 09:39 Сейчас в теме
90% таких ошибок ловятся на первом же прогоне отладчика. Да, отлаживать внешние формы - занятие неудобное, но если не получается, то есть простой старый прием - трассировка: добавляем в код строки вида
Сообщить(Ном);
Сообщить(ОбластьСтрока.Параметры.Код)
в нужных местах, запускаем форму и читаем выдачу.
Оставьте свое сообщение

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