![]() |
|
Добавление вывода процентов в отчете на базе Универсального отчета УТ 10.3 | ☑ | ||
---|---|---|---|---|
0
animatic
28.08.15
✎
16:59
|
Нужно добавить в этот отчет проценты, чтобы для каждого интервала выводился процент от общей суммы задолженности по контрагенту. Чет не разберусь, есть ли возможность именно в нем добавить, если добавляю в запросе, потом эти проценты суммируются по каждому полю и выводят не правильные значения. Как вообще можно добавить вывод процентов в отчетах на базе Универсального отчета.
|
|||
1
animatic
28.08.15
✎
16:59
|
*Отчет Дебиторская задолженность по срокам долга
|
|||
2
Nuobu
28.08.15
✎
17:03
|
(0) В итогах пробовал писать не сумму, а среднее?
|
|||
3
animatic
28.08.15
✎
17:04
|
(2) Пробовал, но тогда же усредненное значение будет
|
|||
4
Nuobu
28.08.15
✎
17:07
|
(3) А тебе какое нужно?
|
|||
5
animatic
28.08.15
✎
17:27
|
(4) процент по контрагенту, если выводишь договора, то по каждому договору, а со средним получается, посчитает по договорам, а потом усредненный у контрагента покажет. А если не выводить договора то сразу усредненный.
|
|||
6
Nuobu
28.08.15
✎
17:29
|
(5) То есть данные разные покажет?
|
|||
7
animatic
28.08.15
✎
17:30
|
[img]http://i.imgur.com/g1f7Y6Z.jpg[/img]
вот что выдает, чепуха какая-то получается |
|||
8
Nuobu
28.08.15
✎
17:32
|
(7) В самом запросе правильно процент считается?
|
|||
9
animatic
28.08.15
✎
17:40
|
ТекстЗапросаПоОстаткам =
"ВЫБРАТЬ | ВзаиморасчетыПоДокументамОстатки.Организация, | ВзаиморасчетыПоДокументамОстатки.Контрагент, | ВзаиморасчетыПоДокументамОстатки.ДоговорКонтрагента, | ВзаиморасчетыПоДокументамОстатки.Сделка, | ВзаиморасчетыПоДокументамОстатки.ДокументРасчетовСКонтрагентом, | ВзаиморасчетыПоДокументамОстатки.СуммаВзаиморасчетовОстаток КАК ОстатокДолга0 |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( | &ДатаОстатков, | {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыПоДокументамОстатки |ГДЕ | ВзаиморасчетыПоДокументамОстатки.СуммаВзаиморасчетовОстаток > 0 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВзаиморасчетыБезДокументовОстатки.Организация, | ВзаиморасчетыБезДокументовОстатки.Контрагент, | ВзаиморасчетыБезДокументовОстатки.ДоговорКонтрагента, | ВзаиморасчетыБезДокументовОстатки.Сделка, | НЕОПРЕДЕЛЕНО, | ВзаиморасчетыБезДокументовОстатки.СуммаВзаиморасчетовОстаток |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки( | &ДатаОстатков, | (НЕ ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом) {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыБезДокументовОстатки |ГДЕ | ВзаиморасчетыБезДокументовОстатки.СуммаВзаиморасчетовОстаток > 0"; ТекстЗапросаПоОборотам = "ВЫБРАТЬ | ВзаиморасчетыПоДокументамОбороты.Организация, | ВзаиморасчетыПоДокументамОбороты.Контрагент, | ВзаиморасчетыПоДокументамОбороты.ДоговорКонтрагента, | ВзаиморасчетыПоДокументамОбороты.Сделка, | ВзаиморасчетыПоДокументамОбороты.ДокументРасчетовСКонтрагентом, | ВЫБОР | КОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовПриход > 0 | ТОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовПриход | ИНАЧЕ 0 | КОНЕЦ - ВЫБОР | КОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовРасход < 0 | ТОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовРасход | ИНАЧЕ 0 | КОНЕЦ КАК УвеличениеДолга1 |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты( | &НачалоИнтервала1, | &КонецИнтервала1, | , | {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыПоДокументамОбороты | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВзаиморасчетыБезДокументовОбороты.Организация, | ВзаиморасчетыБезДокументовОбороты.Контрагент, | ВзаиморасчетыБезДокументовОбороты.ДоговорКонтрагента, | ВзаиморасчетыБезДокументовОбороты.Сделка, | НЕОПРЕДЕЛЕНО, | ВЫБОР | КОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовПриход > 0 | ТОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовПриход | ИНАЧЕ 0 | КОНЕЦ - ВЫБОР | КОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовРасход < 0 | ТОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовРасход | ИНАЧЕ 0 | КОНЕЦ |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты( | &НачалоИнтервала1, | &КонецИнтервала1, | , | (НЕ ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом) | {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыБезДокументовОбороты"; КолИнтервалов = ТабИнтервалы.Количество(); ТекстЗапросаОстатокИОбороты = "ВЫБРАТЬ | Остатки.Организация, | Остатки.Контрагент, | Остатки.ДоговорКонтрагента, | Остатки.Сделка, | Остатки.ДокументРасчетовСКонтрагентом, | Остатки.ОстатокДолга0"; Для Ном = 1 По КолИнтервалов - 1 Цикл ОборотыНом = "Обороты" + Ном; ТекстЗапросаОстатокИОбороты = ТекстЗапросаОстатокИОбороты + ", | ЕСТЬNULL(Обороты" + Ном + ".УвеличениеДолга" + Ном + ", 0) КАК УвеличениеДолга" + Ном; КонецЦикла; ТекстЗапросаОстатокИОбороты = ТекстЗапросаОстатокИОбороты + " |ИЗ | (" + ТекстЗапросаПоОстаткам + ") КАК Остатки"; Для Ном = 1 По КолИнтервалов - 1 Цикл ТекстЗапросаПоОборотамИнтервала = СтрЗаменить(ТекстЗапросаПоОборотам, "УвеличениеДолга1", "УвеличениеДолга" + Ном); ТекстЗапросаПоОборотамИнтервала = СтрЗаменить(ТекстЗапросаПоОборотамИнтервала, "&НачалоИнтервала1", "&НачалоИнтервала" + Ном); ТекстЗапросаПоОборотамИнтервала = СтрЗаменить(ТекстЗапросаПоОборотамИнтервала, "&КонецИнтервала1", "&КонецИнтервала" + Ном); ОборотыНом = "Обороты" + Ном; ТекстЗапросаОстатокИОбороты = ТекстЗапросаОстатокИОбороты + " |ЛЕВОЕ СОЕДИНЕНИЕ | (" + ТекстЗапросаПоОборотамИнтервала + ") КАК " + ОборотыНом + " | ПО | Остатки.Организация = " + ОборотыНом + ".Организация | И Остатки.Контрагент = " + ОборотыНом + ".Контрагент | И Остатки.ДоговорКонтрагента = " + ОборотыНом + ".ДоговорКонтрагента | И Остатки.Сделка = " + ОборотыНом + ".Сделка | И Остатки.ДокументРасчетовСКонтрагентом = " + ОборотыНом + ".ДокументРасчетовСКонтрагентом"; КонецЦикла; ТекстЗапросаОстаткиПоПериодам = "ВЫБРАТЬ | ОстатокИОбороты.Организация, | ОстатокИОбороты.Контрагент, | ОстатокИОбороты.ДоговорКонтрагента, | ОстатокИОбороты.ДоговорКонтрагента.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов, | ОстатокИОбороты.Сделка, | ОстатокИОбороты.ДокументРасчетовСКонтрагентом, | ОстатокИОбороты.ОстатокДолга0"; Для Ном = 1 По КолИнтервалов - 1 Цикл ВыражениеОстатка = "ОстатокИОбороты.ОстатокДолга0"; Для й = 1 По Ном Цикл ВыражениеОстатка = ВыражениеОстатка + " - ОстатокИОбороты.УвеличениеДолга" + й; КонецЦикла; ТекстЗапросаОстаткиПоПериодам = ТекстЗапросаОстаткиПоПериодам + ", | ВЫБОР | КОГДА " + ВыражениеОстатка + " > 0 | ТОГДА " + ВыражениеОстатка + " | ИНАЧЕ 0 | КОНЕЦ КАК ОстатокДолга" + Ном; КонецЦикла; ТекстЗапросаОстаткиПоПериодам = ТекстЗапросаОстаткиПоПериодам + " |ИЗ | (" + ТекстЗапросаОстатокИОбороты + ") КАК ОстатокИОбороты"; ТекстПоказателей = " | ОстаткиПоПериодам.ОстатокДолга0 КАК ОстатокДолга"; Для Ном = 1 По КолИнтервалов - 1 Цикл ТекстПоказателей = ТекстПоказателей + ", | ОстаткиПоПериодам.ОстатокДолга" + (Ном - 1) + " - ОстаткиПоПериодам.ОстатокДолга" + Ном + " КАК ОстатокПериода" + Ном; // Добавлено ТекстПоказателей = ТекстПоказателей + ", | (ОстаткиПоПериодам.ОстатокДолга" + (Ном - 1) + " - ОстаткиПоПериодам.ОстатокДолга" + Ном + ") * 100 / ОстаткиПоПериодам.ОстатокДолга0 КАК ПроцентПериода" + Ном; // КонецДобавлено КонецЦикла; Если КолИнтервалов > 0 Тогда ТекстПоказателей = ТекстПоказателей + ", | ОстаткиПоПериодам.ОстатокДолга" + (КолИнтервалов - 1) + " КАК ОстатокПериода" + КолИнтервалов; // Добавлено ТекстПоказателей = ТекстПоказателей + ", | ОстаткиПоПериодам.ОстатокДолга" + (КолИнтервалов - 1) + " * 100 / ОстаткиПоПериодам.ОстатокДолга0 КАК ПроцентПериода" + КолИнтервалов; // КонецДобавлено КонецЕсли; ТекстЗапроса = "ВЫБРАТЬ | ОстаткиПоПериодам.Организация КАК Организация, | ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Организация) КАК ОрганизацияПредставление, | ОстаткиПоПериодам.Контрагент КАК Контрагент, | ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Контрагент) КАК КонтрагентПредставление, | ОстаткиПоПериодам.ДоговорКонтрагента КАК ДоговорКонтрагента, | ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДоговорКонтрагента) КАК ДоговорКонтрагентаПредставление, | ОстаткиПоПериодам.ДоговорКонтрагента.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов, | ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДоговорКонтрагента.ВалютаВзаиморасчетов) КАК ВалютаВзаиморасчетовПредставление, | ОстаткиПоПериодам.Сделка КАК Сделка, | ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Сделка) КАК СделкаПредставление, | ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом, | ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом) КАК ДокументРасчетовСКонтрагентомПредставление," + ТекстПоказателей + " | //ПОЛЯ_СВОЙСТВА | //ПОЛЯ_КАТЕГОРИИ |{ВЫБРАТЬ | Организация.*, | Контрагент.*, | ДоговорКонтрагента.*, | ВалютаВзаиморасчетов.*, | Сделка.*, | ДокументРасчетовСКонтрагентом.*," + ТекстПоказателей + " | //ПСЕВДОНИМЫ_СВОЙСТВА | //ПСЕВДОНИМЫ_КАТЕГОРИИ |} |ИЗ | (" + ТекстЗапросаОстаткиПоПериодам + ") КАК ОстаткиПоПериодам | //СОЕДИНЕНИЯ |{ГДЕ" + ТекстПоказателей + " | //УСЛОВИЯ_СВОЙСТВА | //УСЛОВИЯ_КАТЕГОРИИ |} |{УПОРЯДОЧИТЬ ПО | Организация.*, | Контрагент.*, | ДоговорКонтрагента.*, | Сделка.*, | ДокументРасчетовСКонтрагентом.*, | ВалютаВзаиморасчетов.*, | ОстатокДолга"; Для Ном = 1 По КолИнтервалов Цикл ТекстЗапроса = ТекстЗапроса + ", | ОстатокПериода" + Ном; КонецЦикла; ТекстЗапроса = ТекстЗапроса + " | //ПСЕВДОНИМЫ_СВОЙСТВА | //ПСЕВДОНИМЫ_КАТЕГОРИИ |} |ИТОГИ | СУММА(ОстатокДолга)"; Для Ном = 1 По КолИнтервалов Цикл ТекстЗапроса = ТекстЗапроса + ", | СУММА(ОстатокПериода" + Ном + ")"; // Добавлено ТекстЗапроса = ТекстЗапроса + ", | СРЕДНЕЕ(ПроцентПериода" + Ном + ")"; // КонецДобавлено КонецЦикла; ТекстЗапроса = ТекстЗапроса + " | //ИТОГИ_СВОЙСТВА | //ИТОГИ_КАТЕГОРИИ |ПО | ОБЩИЕ |{ИТОГИ ПО | Организация.*, | Контрагент.*, | ДоговорКонтрагента.*, | Контрагент.*, | Сделка.*, | ДокументРасчетовСКонтрагентом.*, | ВалютаВзаиморасчетов.* | //ПСЕВДОНИМЫ_СВОЙСТВА | //ПСЕВДОНИМЫ_КАТЕГОРИИ |}"; Вот что добавил в стандартном запросе этого отчета. Проблема в итогах, в среднеем, но если ставить сумма, то тоже не правильно, получается процент никак не посчитать в этом отчете. |
|||
10
animatic
28.08.15
✎
17:53
|
есть идеи как можно реализовать данную задачу?
|
|||
11
animatic
28.08.15
✎
19:49
|
Подсмотрел в отчете по валовой прибыли. В итогах вместо Среднее или Сумма, туже формулу по получению процентов только для итогов прописал:
Для Ном = 1 По КолИнтервалов Цикл ТекстЗапроса = ТекстЗапроса + ", | СУММА(ОстатокПериода" + Ном + ")"; // Добавлено ТекстЗапроса = ТекстЗапроса + ", | 100 * ВЫБОР | КОГДА СУММА(ОстатокДолга) <> 0 | ТОГДА (СУММА(ОстатокПериода" + Ном + ")) / СУММА(ОстатокДолга) | ИНАЧЕ 0 |КОНЕЦ КАК ПроцентПериода" + Ном; // КонецДобавлено КонецЦикла; Так уже получше, но возникает проблема, когда проценты слишком маленькие за счет округления в общем 100 процентов не выходит. |
|||
12
animatic
28.08.15
✎
20:02
|
или я уже перегрелся и нормально, так короче работает
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |