• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы Дайнеко
  • Дата начала
Д

Дайнеко

Совсем измучался с запросом. Запрос простой, но могу красиво выбрать результаты.
Сам запрос:
Код:
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
|	БухИтогиОстаткиИОбороты.Счет							КАК Счет,
|	БухИтогиОстаткиИОбороты.Счет.Код						КАК СчетКод,
|	БухИтогиОстаткиИОбороты.Субконто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 подчинено группировке Валюта. И если Валюту не выберу, то группировка Субкотно второго и ниже уровня и не выбирается.
* Пока не было валют, а были только субконто отлично работал и Простой порядок обхода. Хорошо им обойтись.
Пробовал использовать в методе Выбрать() второй параметр. "Группировки"
Выбрать(<ТипОбхода>, <Группировки>, <ГруппировкиДляЗначенийГруппировок>)
Определение не доходит до головы.

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

unknown181538

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

Дайнеко

Могу предложить только некрасивое решение:
Я делаю универсальный отчет: Оборотно-сальдовая по счету. Из типовой бух-ии не совсем подходит. А глядя на его написание - совсем не подходит.

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

Дайнеко

Ребята! Поделитесь отчетом в стиле Оборотно-сальдовой.
 
U

unknown181538

Вы смогли разобраться, как в типовом решена проблема, что сначала выводится одна группировка, потом другая без подчинения первой?
 
Д

Дайнеко

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!