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

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

  1. Дайнеко

    Дайнеко Well-Known Member
    1C Team

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

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

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

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

    //----------------------------------------------------------
    // 
    Процедура ВыбратьСубконто(Выборка, Макет, ДокументРезультат)
    Пока Выборка.Следующий() Цикл
    ИмяГруппировки    = Выборка.Группировка();
    Субконто        = Выборка[ИмяГруппировки];
    Сообщить(""+Субконто+ " "+Выборка.ТипЗаписи());

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


    //----------------------------------------------------------
    Процедура ВыбратьВалюты(Выборка, Макет, ДокументРезультат)

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

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

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

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

    unknown181538 НеГуру
    1C Team

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

    Дайнеко Well-Known Member
    1C Team

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

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

    Дайнеко Well-Known Member
    1C Team

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

    unknown181538 НеГуру
    1C Team

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

    Дайнеко Well-Known Member
    1C Team

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

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