доброго времени суток. имеется конфигурация Общепит
пишу внешнюю печ.форму для документа Выпуск продукции ОП6
и тут затык - не могу понять, что сделал не так в цикле,
пишу внешнюю печ.форму для документа Выпуск продукции ОП6
и тут затык - не могу понять, что сделал не так в цикле,
Ном = 0;
Шапка = ВыборкаПеремещение.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Шапка.Следующий() Цикл
Ном = Ном + 1;
ОбластьСтрока.Параметры.Ном = Ном;
ОбластьСтрока.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Товар;
ОбластьСтрока.Параметры.Код = ТоварКод;
ОбластьСтрока.Параметры.Единица = ТоварЕдИзм;
ОбластьСтрока.Параметры.КодЕдиницы = ТоварЕдИзмКод;
ОбластьСтрока.Параметры.ИтогоОтпущено = Количество;
ОбластьСтрока.Параметры.ЦенаУчетная = Цена;
ОбластьСтрока.Параметры.СуммаУчетная = Сумма;
ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
где Шапка.Следующий() всегда = ЛОЖЬ
подскажите, что делаю не так?
вот весь код
ВалютаПечати = Константы.ВалютаРегламентированногоУчета.Получить();
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ОП6");
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ПолеСверху = 0;
ТабличныйДокумент.ПолеСлева = 0;
ТабличныйДокумент.ПолеСнизу = 0;
ТабличныйДокумент.ПолеСправа = 0;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ОП6";
СисИнфо = Новый СистемнаяИнформация;
Если ПустаяСтрока(СисИнфо.ИнформацияПрограммыПросмотра) Тогда
ТабличныйДокумент.ПолеСлева = 0;
Иначе
ТабличныйДокумент.ПолеСлева = 10;
КонецЕсли;
// Запрос.УстановитьПараметр("МассивОбъектов", СсылкаНаОбъект);
// Запрос.УстановитьПараметр("ДатаДок", СсылкаНаОбъект.Дата);
// Запрос.УстановитьПараметр("ДополнительнаяКолонкаПечатныхФормДокументов", Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить());
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОбщепитВыпускПродукции.Ссылка КАК ВыпускПродукции,
| ПеремещениеТоваров.Ссылка КАК Перемещение,
| ПеремещениеТоваров.СкладОтправитель,
| ПеремещениеТоваров.СкладПолучатель
|ПОМЕСТИТЬ втДокументы
|ИЗ
| Документ.ОбщепитВыпускПродукции КАК ОбщепитВыпускПродукции
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
| ПО ОбщепитВыпускПродукции.Ссылка = ПеремещениеТоваров.ДокументОснование
|ГДЕ
| ОбщепитВыпускПродукции.Ссылка В(&МассивОбъектов)
| И ОбщепитВыпускПродукции.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ОбщепитВидыОперацийВыпускПродукции.ВыпускПродукции)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОбщепитВыпускПродукции.Ссылка,
| ОбщепитВыпускПродукции.Ссылка,
| ОбщепитВыпускПродукции.Склад,
| ОбщепитВыпускПродукции.СкладПолучатель
|ИЗ
| Документ.ОбщепитВыпускПродукции КАК ОбщепитВыпускПродукции
|ГДЕ
| ОбщепитВыпускПродукции.Ссылка В(&МассивОбъектов)
| И ОбщепитВыпускПродукции.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ОбщепитВидыОперацийВыпускПродукции.ВыпускПродукцииСперемещением)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| втДокументы.ВыпускПродукции,
| втДокументы.Перемещение,
| втДокументы.СкладПолучатель,
| втДокументы.СкладОтправитель,
| ХозрасчетныйОбороты.Субконто1.Код КАК ТоварКод,
| ХозрасчетныйОбороты.Субконто1 КАК Товар,
| ХозрасчетныйОбороты.Субконто1.ЕдиницаИзмерения КАК ТоварЕдИзм,
| ХозрасчетныйОбороты.Субконто1.ЕдиницаИзмерения.Код КАК ТоварЕдИзмКод,
| ХозрасчетныйОбороты.СуммаОборотДт КАК Сумма,
| ХозрасчетныйОбороты.КоличествоОборотДт КАК Количество
|ПОМЕСТИТЬ втРезультат
|ИЗ
| втДокументы КАК втДокументы
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(
| &ДатаДок,
| ,
| Запись,
| Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ГотоваяПродукция))
| ИЛИ Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары)),
| ,
| ,
| ,
| ) КАК ХозрасчетныйОбороты
| ПО втДокументы.СкладПолучатель = ХозрасчетныйОбороты.Субконто2
| И втДокументы.Перемещение = ХозрасчетныйОбороты.Регистратор
|ГДЕ
| ХозрасчетныйОбороты.Регистратор В
| (ВЫБРАТЬ
| втДокументы.Перемещение
| ИЗ
| втДокументы КАК втДокументы)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| втРезультат.Перемещение КАК Перемещение,
| втРезультат.СкладПолучатель,
| втРезультат.СкладОтправитель,
| втРезультат.ТоварЕдИзм,
| втРезультат.Товар,
| втРезультат.ТоварЕдИзмКод,
| втРезультат.ТоварКод,
| втРезультат.Сумма,
| втРезультат.Количество,
| втРезультат.Сумма / втРезультат.Количество КАК Цена
|ИЗ
| втРезультат КАК втРезультат
|ИТОГИ ПО
| Перемещение";
Запрос.УстановитьПараметр("МассивОбъектов", СсылкаНаОбъект);
Запрос.УстановитьПараметр("ДатаДок", СсылкаНаОбъект.Дата);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаПеремещение = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПеремещение.Следующий() Цикл
Перемещение = ВыборкаПеремещение.Перемещение;
ВыборкаДетальныеЗаписи = ВыборкаПеремещение.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
СкладПолучатель = ВыборкаДетальныеЗаписи.СкладПолучатель;
СкладОтправитель = ВыборкаДетальныеЗаписи.СкладОтправитель;
ТоварЕдИзм = ВыборкаДетальныеЗаписи.ТоварЕдИзм;
Товар = ВыборкаДетальныеЗаписи.Товар;
ТоварЕдИзмКод = ВыборкаДетальныеЗаписи.ТоварЕдИзмКод;
ТоварКод = ВыборкаДетальныеЗаписи.ТоварКод;
Сумма = ВыборкаДетальныеЗаписи.Сумма;
Количество = ВыборкаДетальныеЗаписи.Количество;
Цена = ВыборкаДетальныеЗаписи.Цена;
КонецЦикла;
КонецЦикла;
ОбластьЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
СведенияОбОрганизации = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(СсылкаНаОбъект.Организация, СсылкаНаОбъект.Дата);
ОбластьЗаголовокТаблицы.Параметры.ПредставлениеОрганизации = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации);
ОбластьЗаголовокТаблицы.Параметры.СкладОтправитель = СкладОтправитель;
ОбластьЗаголовокТаблицы.Параметры.СкладПолучатель = СкладПолучатель;
ОбластьЗаголовокТаблицы.Параметры.КодПоОКПО = СведенияОбОрганизации.КодПоОКПО;
ОбластьЗаголовокТаблицы.Параметры.НомерДок = СсылкаНаОбъект.Номер;
ОбластьЗаголовокТаблицы.Параметры.ДатаДок = Формат(СсылкаНаОбъект.Дата, "ДФ=dd.MM.yyyy");
ОбластьЗаголовокТаблицы.Параметры.Должность = "Руководитель службы питания";
ОбластьЗаголовокТаблицы.Параметры.Руководитель = "Мостовой Ю.А.";
ОбластьЗаголовокТаблицы.Параметры.Бухгалтер = "Шайда Л.А.";
ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицы);
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Ном = 0;
Шапка = ВыборкаПеремещение.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Шапка.Следующий() Цикл
Ном = Ном + 1;
ОбластьСтрока.Параметры.Ном = Ном;
ОбластьСтрока.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Товар;
ОбластьСтрока.Параметры.Код = ТоварКод;
ОбластьСтрока.Параметры.Единица = ТоварЕдИзм;
ОбластьСтрока.Параметры.КодЕдиницы = ТоварЕдИзмКод;
ОбластьСтрока.Параметры.ИтогоОтпущено = Количество;
ОбластьСтрока.Параметры.ЦенаУчетная = Цена;
ОбластьСтрока.Параметры.СуммаУчетная = Сумма;
ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
Возврат ТабличныйДокумент;
ПоказатьПо теме из базы знаний
- Бухгалтерские итоги, цикл по субконто, когда количество субконто неизвестно
- Объединение двух таблиц значений запросом, циклом
- Жизненный цикл задачи
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- Исправляем проблемы производительности в конфигурации ERP - 7 примеров
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Ты там с перемещениями не запутался?))
Шапка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Шапка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Нда. В первом цикле одни и те же переменные (не таблицы значений) по очереди заполняются всеми значениями запроса, в результате на выходе из цикла в переменных остается последняя строка запроса. И ничего более. А во втором цикле эта строка многократно выводится с разными наименованиями, верно?
Объедините оба цикла в один и разместите его на месте второго, первый закомментируйте. Второй будет выглядеть как-то так
Если заработает, то можно будет отказаться от промежуточных переменных:
Пока ВыборкаПеремещение.Следующий() Цикл
Объедините оба цикла в один и разместите его на месте второго, первый закомментируйте. Второй будет выглядеть как-то так
Ном = 0;
Шапка = ВыборкаПеремещение.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Шапка.Следующий() Цикл
Ном = Ном + 1;
СкладПолучатель = ВыборкаДетальныеЗаписи.СкладПолучатель;
СкладОтправитель = ВыборкаДетальныеЗаписи.СкладОтправитель;
ТоварЕдИзм = ВыборкаДетальныеЗаписи.ТоварЕдИзм;
Товар = ВыборкаДетальныеЗаписи.Товар;
ТоварЕдИзмКод = ВыборкаДетальныеЗаписи.ТоварЕдИзмКод;
ТоварКод = ВыборкаДетальныеЗаписи.ТоварКод;
Сумма = ВыборкаДетальныеЗаписи.Сумма;
Количество = ВыборкаДетальныеЗаписи.Количество;
Цена = ВыборкаДетальныеЗаписи.Цена;
ОбластьСтрока.Параметры.Ном = Ном;
ОбластьСтрока.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Товар;
ОбластьСтрока.Параметры.Код = ТоварКод;
ОбластьСтрока.Параметры.Единица = ТоварЕдИзм;
ОбластьСтрока.Параметры.КодЕдиницы = ТоварЕдИзмКод;
ОбластьСтрока.Параметры.ИтогоОтпущено = Количество;
ОбластьСтрока.Параметры.ЦенаУчетная = Цена;
ОбластьСтрока.Параметры.СуммаУчетная = Сумма;
ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
Возврат ТабличныйДокумент;
ПоказатьЕсли заработает, то можно будет отказаться от промежуточных переменных:
ОбластьСтрока.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Товар; // из-за этой строки у Вас правильно выводится номенклатура
ОбластьСтрока.Параметры.Код = ВыборкаДетальныеЗаписи.ТоварКод; // переменная больше не нужна: ТоварКод = ВыборкаДетальныеЗаписи.ТоварКод;
ОбластьСтрока.Параметры.Единица = ВыборкаДетальныеЗаписи.ТоварЕдИзм; // переменная больше не нужна: ТоварЕдИзм = ВыборкаДетальныеЗаписи.ТоварЕдИзм;
/// и т.д.
90% таких ошибок ловятся на первом же прогоне отладчика. Да, отлаживать внешние формы - занятие неудобное, но если не получается, то есть простой старый прием - трассировка: добавляем в код строки вида
в нужных местах, запускаем форму и читаем выдачу.
Сообщить(Ном);
Сообщить(ОбластьСтрока.Параметры.Код)
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот