Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 18:36

Группировка в отчете

Автор ПростоАлександр, 10 мар 2011, 14:57

0 Пользователей и 1 гость просматривают эту тему.

ПростоАлександр

Здравствуйте. Мне необходимо в отчете группировать номенклатуру по контрагенту.

В 1с 7.7. это выглядит так:

ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |ПоступлениеМатериалов = Документ.ПоступлениеМатериалов.ТекущийДокумент;
   |Контрагент = Документ.ПоступлениеМатериалов.Контрагент;               
   |РодКонтр=Документ.ПоступлениеМатериалов.Контрагент.Родитель;
   |Материал = Документ.ПоступлениеМатериалов.Материал;         
   |РодМатер=Документ.ПоступлениеМатериалов.Материал.Родитель;
   |Количество = Документ.ПоступлениеМатериалов.Количество;
   |Цена = Документ.ПоступлениеМатериалов.Цена;
   |Сумма = Документ.ПоступлениеМатериалов.Сумма;
   |Всего = Документ.ПоступлениеМатериалов.Всего;
   |Функция КоличествоСумма = Сумма(Количество);
   |Функция СредЦена = Среднее(Цена);
   |Функция СуммаСумма = Сумма(Сумма);
   |Функция ВсегоСумма = Сумма(Всего);
   |Группировка Контрагент Без групп;
   |Группировка Материал Без групп;";

В 1с 8.1 я пытался это сделать через СГРУППИРОВАТЬ ПО , но там выводится не то, что нужно.

progmikon

Может вы приведете текст запроса на 8-ке?

ПростоАлександр

Запрос.Текст = "
   |ВЫБРАТЬ
   |   ПоступлениеТоваровУслуг.Номенклатура КАК Номенклатура,
   |   ПоступлениеТоваровУслуг.Ссылка.Контрагент КАК Контрагент
   |ИЗ
   |   Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслуг
   |ГДЕ
   |   ПоступлениеТоваровУслуг.Ссылка.Дата МЕЖДУ &ДатаНачало и &ДатаКонец
   |ИТОГИ ПО
   |   ПоступлениеТоваровУслуг.Ссылка.Контрагент,
   |   ПоступлениеТоваровУслуг.Номенклатура
   |";

Я не могу понять, как сделать так, чтобы в запросе выделялись все записи Контрагентов и для каждого из них формировался список Номенклатуры.

progmikon

И что не получается? Запрос на первый взгляд верен. Вы как его обходите-то потом?

ПростоАлександр

Результат = Запрос.Выполнить();
   
   ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;

   // Очистить данные в табличном документе
   // (возможно данные уже выводились ранее).
   ТабДок.Очистить();
   
   Макет = ПолучитьМакет("Макет");
   
   ОбластьМатериал = Макет.ПолучитьОбласть("Материал");
   ОбластьКонтрагент = Макет.ПолучитьОбласть("Контрагент");
   
   ВыборкаКонтрагент = Результат.Выбрать();
   

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

ПростоАлександр

Но в ВыборкаМатериал ничего нет...

progmikon

А в выборку контрагент что попадает? Только контрагенты?

ПростоАлександр

Да, только контрагенты

ПростоАлександр

Хотя нет, туда номенклатура тоже попадает

Klyacksa

Нужно
ВыборкаКонтрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск