Группировка В Запросе

Тема в разделе "1C и всё что с ней связано", создана пользователем Дайнеко, 12 мар 2012.

  1. Дайнеко

    Дайнеко Well-Known Member

    Репутация:
    0
    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Совсем измучался с запросом. Запрос простой, но могу красиво выбрать результаты.
    Сам запрос:
    Код:
    	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	БухИтогиОстаткиИОбороты.Счет							КАК Счет,
    |	БухИтогиОстаткиИОбороты.Счет.Код						КАК СчетКод,
    |	БухИтогиОстаткиИОбороты.Субконто1						КАК Субконто1,
    |	БухИтогиОстаткиИОбороты.Субконто2						КАК Субконто2,
    |	БухИтогиОстаткиИОбороты.Валюта							КАК Валюта1,
    |	БухИтогиОстаткиИОбороты.Валюта							КАК Валюта2,
    |	БухИтогиОстаткиИОбороты.СуммаРНачальныйОстатокДт		КАК НачРубДт,
    |	БухИтогиОстаткиИОбороты.СуммаРНачальныйОстатокКт		КАК НачРубКт,
    .........
    |ИЗ
    |	РегистрБухгалтерии.БухИтоги.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , Счет В ИЕРАРХИИ (&Счет), , ) КАК БухИтогиОстаткиИОбороты
    |ИТОГИ
    |	СУММА(НачРубДт),
    |	СУММА(НачРубКт),
    ...........
    |ПО
    |	Субконто1 ИЕРАРХИЯ,
    |	Валюта КАК Валюта1,
    |	Субконто2 ИЕРАРХИЯ,
    |	Валюта КАК Валюта2,
    |АВТОУПОРЯДОЧИВАНИЕ
    |;";
    В чем задача: Вывести Субконто поочередно. Под каждым его валюты. Но необходимо по группировкам Валюта сделать 2 прохода. Пример приведу с 60 счетом, имеющим 2 субконто

    Клиент 1
    - рубль
    - доллар
    Договор 11 Клиента 1
    - рубль
    - доллар
    Договор 12 Клиента 1
    - рубль
    - доллар

    Клиент 2
    - рубль
    - доллар
    Договор 21 Клиента 2
    - рубль
    - доллар
    Договор 22 Клиента 2
    - рубль
    - доллар

    Как я выбираю:
    Код:
    	Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    ВыбратьСубконто(Выборка);
    
    //----------------------------------------------------------
    //	
    Процедура ВыбратьСубконто(Выборка, Макет, ДокументРезультат)
    Пока Выборка.Следующий() Цикл
    ИмяГруппировки	= Выборка.Группировка();
    Субконто		= Выборка[ИмяГруппировки];
    Сообщить(""+Субконто+ " "+Выборка.ТипЗаписи());
    
    //	Валюта
    Если Входит(ИмяГруппировки, "Субконто") И Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
    ВыбратьВалюты(Выборка, Макет, ДокументРезультат);
    Иначе
    Продолжить;
    КонецЕсли;
    ВыбратьСубконто(Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам), Макет, ДокументРезультат);
    КонецЦикла;		// Результат
    КонецПроцедуры		// ВыбратьСубконто
    
    
    //----------------------------------------------------------
    Процедура ВыбратьВалюты(Выборка, Макет, ДокументРезультат)
    
    ВыборкаВалют = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Валюта1,Валюта2,Валюта3,Валюта4");
    Пока ВыборкаВалют.Следующий() Цикл
    ИмяГруппировки	= ВыборкаВалют.Группировка();
    Валюта			= ВыборкаВалют[ИмяГруппировки];
    Сообщить(" Валюта:" + Валюта);
    КонецЦикла;		// ВыборкаВалют
    
    ВыборкаВалют = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Валюта1,Валюта2,Валюта3,Валюта4");
    Пока ВыборкаВалют.Следующий() Цикл
    ИмяГруппировки	= ВыборкаВалют.Группировка();
    Валюта			= ВыборкаВалют[ИмяГруппировки];
    Сообщить(" Валюта:" + Валюта);
    КонецЦикла;		// ВыборкаВалют
    КонецПроцедуры		// ВыбратьВалюты

    В чем бяка:
    * Мне надо делать 2 прохода по валютам. На первом я выясняю, а нужно ли их вообще выводить.
    * Как я понял, Субконто2 подчинено группировке Валюта. И если Валюту не выберу, то группировка Субкотно второго и ниже уровня и не выбирается.
    * Пока не было валют, а были только субконто отлично работал и Простой порядок обхода. Хорошо им обойтись.
    Пробовал использовать в методе Выбрать() второй параметр. "Группировки"
    Выбрать(<ТипОбхода>, <Группировки>, <ГруппировкиДляЗначенийГруппировок>)
    Определение не доходит до головы.

    Много написал, позже могу уточнить.
     
  2. unknown181538

    unknown181538 НеГуру

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.417
    Симпатии:
    0
    Сталкивался с такой бякой.
    Могу предложить только некрасивое решение:
    Например, еще одним пакетом запроса получить итоги без договоров, выгрузить в ТЗ, и при получении контрагента отбирать строки... ну или еще что-нибудь в этом роде..
     
  3. Дайнеко

    Дайнеко Well-Known Member

    Репутация:
    0
    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Я делаю универсальный отчет: Оборотно-сальдовая по счету. Из типовой бух-ии не совсем подходит. А глядя на его написание - совсем не подходит.

    Перефразирую вопрос так. Если разворачиваю только по субконто - все отлично. А нужен еще один шаг - каждое субконто развернуть по валютам. Хоть запрос давай на каждой строке.
     
  4. Дайнеко

    Дайнеко Well-Known Member

    Репутация:
    0
    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Ребята! Поделитесь отчетом в стиле Оборотно-сальдовой.
     
  5. unknown181538

    unknown181538 НеГуру

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.417
    Симпатии:
    0
    Вы смогли разобраться, как в типовом решена проблема, что сначала выводится одна группировка, потом другая без подчинения первой?
     
  6. Дайнеко

    Дайнеко Well-Known Member

    Репутация:
    0
    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Да разбирался. В типовой схема упрощена: почти все счета отмечены как НЕвалютные. А отчет по валютным выводит все валюты. У меня все счета валютные и задача сложнее:
    - сделать цикл по валютам
    - вторым циклом вывести, если там не только рубли.
     
Загрузка...

Поделиться этой страницей