Консультация № 162556
17.03.2009, 11:09
0.00 руб.
08.09.2009, 16:31
0 5 1
Отчет выводит как на рис.1. А надо, чтобы в дебет счета 10.3.2 и далее все что к нему относится, В дебет счета 10.3 и далее все что к нему относится. А он, как видно на рисунке В дебет счета пишет для каждого вида номенклатуры. Что в коде исправить можно?






Приложение:
Запрос = Новый Запрос("ВЫБРАТЬ
| ХозрасчетныйДвиженияССубконто.СчетДт КАК СчетДт,
| ХозрасчетныйДвиженияССубконто.СубконтоДт1 КАК Номенклатура,
| ХозрасчетныйДвиженияССубконто.СубконтоКт1 КАК ФизическоеЛицо,
| СУММА(ХозрасчетныйДвиженияССубконто.Сумма) КАК Сумма,
| ХозрасчетныйДвиженияССубконто.Регистратор КАК Документ,
| СУММА(ХозрасчетныйДвиженияССубконто.КоличествоДт) КАК Количество,
| ХозрасчетныйДвиженияССубконто.СубконтоКт1.Код КАК ТабельныйНомер,
| ХозрасчетныйДвиженияССубконто.СубконтоДт1.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ХозрасчетныйДвиженияССубконто.СчетДт.Код КАК Код,
| ХозрасчетныйДвиженияССубконто.СчетДт.Наименование КАК ИмяСчета
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
| &НачПериода,
| &КонПериода,
| СчетДт В ИЕРАРХИИ (&Счет10_3)
| И СчетКт В ИЕРАРХИИ (&Счет71_1)) КАК ХозрасчетныйДвиженияССубконто
|
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйДвиженияССубконто.СчетДт,
| ХозрасчетныйДвиженияССубконто.СубконтоДт1,
| ХозрасчетныйДвиженияССубконто.СубконтоКт1,
| ХозрасчетныйДвиженияССубконто.Регистратор,
| ХозрасчетныйДвиженияССубконто.СубконтоКт1.Код,
| ХозрасчетныйДвиженияССубконто.СубконтоДт1.БазоваяЕдиницаИзмерения
|ИТОГИ
| СУММА(Сумма),
| СУММА(Количество)
|ПО
| ОБЩИЕ,
| СчетДт,
| Номенклатура,
| ФизическоеЛицо");


Запрос.Параметры.Вставить("НачПериода", НачПериода);
Запрос.Параметры.Вставить("КонПериода", КонПериода);
Запрос.Параметры.Вставить("Счет10_3", ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.03"));
Запрос.Параметры.Вставить("Счет71_1", ПланыСчетов.Хозрасчетный.НайтиПоКоду("71.01"));

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда
Возврат;
КонецЕсли;

ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
Макет = ПолучитьМакет("МакетТопливо");
ОбластьШапкаТаблицы= Макет.ПолучитьОбласть("Шапка");
ОбластьСчетДт=Макет.ПолучитьОбласть("СчетДт");
ОбластьДетали= Макет.ПолучитьОбласть("Детали");
ОбластьИтоги= Макет.ПолучитьОбласть("ОбщиеИтоги");
ОбластьИтогиПоГруппировке= Макет.ПолучитьОбласть("ИтогПоГруппировке");
ОбластьИтогПоСчету= Макет.ПолучитьОбласть("ИтогПоСчету");

ТабДок.Очистить();
ОбластьШапкаТаблицы.Параметры.НачПериода = Формат(НачПериода, "ДФ=dd.MM.yyyy");
ОбластьШапкаТаблицы.Параметры.КонПериода = Формат(КонПериода, "ДФ=dd.MM.yyyy");
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();


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

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

Пока ВыборкаНоменклатура.Следующий() Цикл
Выборка = ВыборкаНоменклатура.Выбрать();
ОбластьСчетДт.Параметры.Заполнить(ВыборкаНоменклатура);
ТабДок.Вывести(ОбластьСчетДт,1);
ВыборкаФизЛицо = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаФизЛицо.Следующий() Цикл
Выборка = ВыборкаФизЛицо.Выбрать();


Пока Выборка.Следующий() Цикл
ОбластьДетали.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьДетали);

КонецЦикла;
ОбластьИтогиПоГруппировке.Параметры.Заполнить(ВыборкаФизЛицо);

ТабДок.Вывести(ОбластьИтогиПоГруппировке);


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

Обсуждение

давно
Студент
218854
56
17.03.2009, 11:42
общий
08.09.2009, 16:32
это ответ
Здравствуйте, Егоров Виталий Александрович!
В макете надо выделить две области для группировки по счетам и для группировки по номенклатуре.

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

Пока ВыборкаСчет.Следующий() Цикл
//добавить вывод области группировки по счету
ОбластьСчетДт.Параметры.Заполнить(ВыборкаСчет);
ТабДок.Вывести(ОбластьСчетДт);

ВыборкаНоменклатура = ВыборкаСчет.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
//Выборка = ВыборкаНоменклатура.Выбрать();//эта строка не нужна
//ОбластьСчетДт.Параметры.Заполнить(ВыборкаНоменклатура);
//выводим область группировки по номенклатуре
ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
//ТабДок.Вывести(ОбластьСчетДт,1);
ТабДок.Вывести(ОбластьНоменклатура);

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

Пока Выборка.Следующий() Цикл
ОбластьДетали.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьДетали);
КонецЦикла;
ОбластьИтогиПоГруппировке.Параметры.Заполнить(ВыборкаФизЛицо);
ТабДок.Вывести(ОбластьИтогиПоГруппировке);
КонецЦикла;
КонецЦикла;
ОбластьИтогПоСчету.Параметры.Заполнить(ВыборкаСчет);
ТабДок.Вывести(ОбластьИтогПоСчету);
//заполнение итогово по счету в макете
КонецЦикла;
ОбластьИтоги.Параметры.Заполнить(ВыборкаОбщие);
ТабДок.Вывести(ОбластьИтоги);
КонецЦикла;
давно
Студент
218854
56
17.03.2009, 14:15
общий
Если нужна группировка только по счету, то уберите группировку по номенклатуре в запросе и соответствующий цикл выборки. В макете нужна будет только область по группировке по счету.
Неизвестный
17.03.2009, 18:07
общий
Подскажите пожалуйста, чтобы далее в отчете еще выводилась секция как на рисунке надо еще один запрос писать в коде после ЗакончитьАвтогруппировкуСтрок(); или так как-то можно вывести?

давно
Студент
218854
56
18.03.2009, 06:04
общий
Можно использовать полученный ранее результат. Только вот в запросе надо оставить группировку по номенклатуре. При формировании первой части отчета можно явно указывать название группировки (как написано ниже) и пропустить группировку по номенклатуре (насколько я поняла она там не нужна)

ВыборкаОбщие = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ОБЩИЕ");
Пока ВыборкаОбщие.Следующий() Цикл
ВыборкаПоСчету = ВыборкаОбщие.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "СчетДт");
Пока ВыборкаПоСчету.Следующий() Цикл
ВыборкаПоНоменклатуре = ВыборкаПоСчету.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
Пока ВыборкаПоНоменклатуре.Следующий() Цикл
//вывод данных по номенклатуре
КонецЦикла;
//вывод итогов по счету
КонецЦикла;
//вывод итогов по предприятию
КонецЦикла;
давно
Студент
218854
56
18.03.2009, 09:26
общий
>Здравствуйте, Полякова Ирина Николаевна!
>А как сделать так, чтобы писал один раз виды номенклатуры? и итоговую сумму по нему? в коде надо писать прямо где и прошлые выводы итогов были? Ответьте пожалуйста в мини-форуме этой темы

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

Если честно, не очень поняла чего именно Вы хотите добиться.
Форма ответа