Запрос.Текст="ВЫБРАТЬ
| ПродажиТочекТовары.ДисконтКл КАК ДисконтКл,
| ПродажиТочекТовары.Сумма + ПродажиТочекТовары.Скидка КАК Сумма,
| НАЧАЛОПЕРИОДА(ПродажиТочекТовары.Ссылка.Дата, МЕСЯЦ) КАК Период,
| ПродажиТочекТовары.Время КАК Время
|ИЗ
| Документ.ПродажиТочек.Товары КАК ПродажиТочекТовары
|ГДЕ
| ПродажиТочекТовары.ДисконтКл <> ЗНАЧЕНИЕ(Справочник.ДисконтКлиенты.ПустаяСсылка)
| И ПродажиТочекТовары.Ссылка.Дата МЕЖДУ &ДатаС И &ДатаПо
| И ПродажиТочекТовары.Ссылка.Проведен = ИСТИНА
|
|УПОРЯДОЧИТЬ ПО
| ПродажиТочекТовары.ДисконтКл.КартНом
|ИТОГИ
| СУММА(Сумма),
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Время)
|ПО
| ОБЩИЕ,
| ДисконтКл,
| Период";
Таб=Новый ТабличныйДокумент;
Макет=ПолучитьМакет("ПоМес");
ОШап=Макет.ПолучитьОбласть("Шапка");
ОШЗ=Макет.ПолучитьОбласть("Шап|Заг");
ОШМ=Макет.ПолучитьОбласть("Шап|Мес");
ОСЗ=Макет.ПолучитьОбласть("Строка|Заг");
ОСМ=Макет.ПолучитьОбласть("Строка|Мес");
ОШап.Параметры.Заполнить(Новый Структура("ДатаС, ДатаПо", формат(ДатаС, "ДЛФ=Д"), формат(ДатаПо, "ДЛФ=Д")));
Таб.Вывести(ОШап);
ОСтр=Макет.ПолучитьОбласть("Строка");
ОДно=Макет.ПолучитьОбласть("Дно");
Таб.Вывести(ОШЗ);
ПериодВыб=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период");
Пока ПериодВыб.Следующий() Цикл
ОШМ.Параметры.Мес=ПериодВыб.Период;
Таб.Присоединить(ОШМ);
КонецЦикла;
ПериодВыб.Сбросить();
ОбщВыб=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Общие");
Кол=0;
Сум=0;
Пока ОбщВыб.Следующий() Цикл
ДискКлВыб=ОбщВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДисконтКл");
Пока ДискКлВыб.Следующий() Цикл
Состояние("Обрабатываю карту "+ДискКлВыб.ДисконтКл.КартНом);
ОСЗ.Параметры.Карт=ДискКлВыб.ДисконтКл.КартНом;
Таб.Вывести(ОСЗ);
Пока ПериодВыб.Следующий() Цикл
Кол=0;
Сум=0;
ОбработкаПрерыванияПользователя();
ДисВыб=ПериодВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДисконтКл");
Пока ДисВыб.НайтиСледующий(Новый Структура("ДисконтКл", ДискКлВыб.ДисконтКл)) Цикл
Кол=ДисВыб.Время;
Сум=ДисВыб.Сумма;
КонецЦикла;
ОСМ.Параметры.Заполнить(Новый Структура("Кол,Сум",Кол,Сум));
Таб.Присоединить(ОСМ);
КонецЦикла;
ПериодВыб.Сбросить();
КонецЦикла;
КонецЦикла;
Сделать отчет на СКД не предлагать?
Решение:
Пока ОбщВыб.Следующий() Цикл
ДискКлВыб=ОбщВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДисконтКл");
ВсегоКарт=ДискКлВыб.Количество();
ТекКарт=0;
Пока ДискКлВыб.Следующий() Цикл
ТекКарт=ТекКарт+1;
Состояние("Обрабатываю "+ОКР(ТекКарт*100/ВсегоКарт)+"% карт");
ОСЗ.Параметры.Карт=ДискКлВыб.ДисконтКл.КартНом;
Таб.Вывести(ОСЗ);
//ПВыб=ДискКлВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период");
//Пока ПВыб.Следующий() Цикл
// Кол=ПВыб.Время;
// Сум=ПВыб.Сумма;
// ОСМ.Параметры.Заполнить(Новый Структура("Кол,Сум",Кол,Сум));
// Таб.Присоединить(ОСМ);
//КонецЦикла;
Пока ПериодВыб.Следующий() Цикл
Кол=0;
Сум=0;
ОбработкаПрерыванияПользователя();
ДисВыб=ДискКлВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период");
Пока ДисВыб.НайтиСледующий(Новый Структура("Период", ПериодВыб.Период)) Цикл
Кол=ДисВыб.Время;
Сум=ДисВыб.Сумма;
КонецЦикла;
ОСМ.Параметры.Заполнить(Новый Структура("Кол,Сум",Кол,Сум));
Таб.Присоединить(ОСМ);
КонецЦикла;
ПериодВыб.Сбросить();
КонецЦикла;
КонецЦикла;
Условие нужно пихать в
"|ИЗ
| Документ.ПродажиТочек.Товары(<сюда>) КАК ПродажиТочекТовары"
а то у Вас сначала выбирается все а потом накладывается условие, а нужно выбирать уже с условием.
а вообще, да СКД пора бы учить...
п.с. универсальный отчет в конце концов..
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua