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

Нужна помощь с обходом запроса рекурсией

Автор Siberia, 21 июл 2021, 09:07

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

Siberia

Составляю отчёт по мотивациям контрагентов. Соответственно, итоги в запросе у меня выводятся по работнику. Результат запроса перебираю рекурсией. Не понимаю как правильно написать эту рекурсию, у меня получается так, что либо макет выводится правильно, но данные получаются только из выборки детальных записей, либо выводятся данные, но структура макета полностью не такая какая нужна. :dfbsdfbsdf:


Запрос.Текст = "ВЫБРАТЬ
               | НачислениеБонуснойЧастиСотрудникамПолнаяТаблица.Ссылка.Фирма.Ссылка КАК Фирма,
               | НачислениеБонуснойЧастиСотрудникамПолнаяТаблица.Ссылка.Подразделение.Ссылка КАК Подразделение,
               | НачислениеБонуснойЧастиСотрудникамПолнаяТаблица.Ссылка.МоментВремени КАК Месяц,
               | НачислениеБонуснойЧастиСотрудникамПолнаяТаблица.Контрагент.Ссылка КАК Работник,
               | СведенияОРаботникахСрезПоследних.Оклад КАК Оклад,
               | НачислениеБонуснойЧастиСотрудникамВыполнениеУсловий.Критерий.Ссылка КАК Критерий,
               | СхемыМотивацииУсловияВыплаты.Коэффициент КАК Коэффициент,
               | НачислениеБонуснойЧастиСотрудникамВыполнениеУсловий.РасчетнаяСумма КАК Итог,
               | НачислениеБонуснойЧастиСотрудникамПолнаяТаблица.Сумма КАК Сумма,
               | СхемыМотивацииУсловияВыплаты.ПроцентВыполненияОт КАК ПроцентОт,
               | СхемыМотивацииУсловияВыплаты.ПроцентВыполненияДо КАК ПроцентДо,
               | НачислениеБонуснойЧастиСотрудникамВыполнениеУсловий.ПроцентВыполнения КАК ПроцентВыполнения,
               | СхемыМотивацииУсловияВыплаты.КоэффициентПоПроцентуВыполнения КАК КоэффициентПоПроцентуВыполнения,
               | НачислениеБонуснойЧастиСотрудникамПолнаяТаблица.Контрагент.Должность КАК Должность,
               | НачислениеБонуснойЧастиСотрудникамВыполнениеУсловий.СуммаПоКритерию КАК Бонус,
               | НачислениеБонуснойЧастиСотрудникамВыполнениеУсловий.Критерий.Наименование КАК Наименоваие
               |ИЗ
               | Документ.НачислениеБонуснойЧастиСотрудникам.ПолнаяТаблица КАК НачислениеБонуснойЧастиСотрудникамПолнаяТаблица
               | ЛЕВОЕ СОЕДИНЕНИЕ Документ.НачислениеБонуснойЧастиСотрудникам.ВыполнениеУсловий КАК НачислениеБонуснойЧастиСотрудникамВыполнениеУсловий
               | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СхемыМотивации.УсловияВыплаты КАК СхемыМотивацииУсловияВыплаты
               | ПО НачислениеБонуснойЧастиСотрудникамВыполнениеУсловий.Критерий.Ссылка = СхемыМотивацииУсловияВыплаты.Критерий.Ссылка
               | ПО НачислениеБонуснойЧастиСотрудникамПолнаяТаблица.Контрагент.Ссылка = НачислениеБонуснойЧастиСотрудникамВыполнениеУсловий.Контрагент.Ссылка
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОРаботниках.СрезПоследних КАК СведенияОРаботникахСрезПоследних
               | ПО НачислениеБонуснойЧастиСотрудникамПолнаяТаблица.Контрагент.Ссылка = СведенияОРаботникахСрезПоследних.Контрагент.Ссылка
               |
               |УПОРЯДОЧИТЬ ПО
               | Критерий,
               | ПроцентОт
               |ИТОГИ ПО
               | Работник";

Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Работник");

ТабДок.НачатьАвтогруппировкуСтрок();

Пока Выборка.Следующий() цикл
    ЗаполнитьЗначенияСвойств(ОбластьРаботник.Параметры,Выборка);
ТабДок.Вывести(ОбластьРаботник);
ТабДок.Вывести(ОбластьОклад);
ЗаполнитьЗначенияСвойств(ОбластьОплата.Параметры, Выборка);
ТабДок.Вывести(ОбластьОплата);
ТабДок.Вывести(ОбластьШапкаК);

ВыборкаКритерии = Выборка.Выбрать();

Пока ВыборкаКритерии.Следующий() цикл

ЗаполнитьЗначенияСвойств(ОбластьКритерии.Параметры, ВыборкаКритерии);

    ТабДок.Вывести(ОбластьКритерии);



           КонецЦикла;
             КонецЦикла;

antoneus

А так?

Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
И в ТабДок.Вывести не забываем указывать уровень, раз уж начали автогруппировку.

И да, это не рекурсия)

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

Рейтинг@Mail.ru Rambler's Top100

Поиск