Имя: Пароль:
1C
 
СКД. Расчет ресурсов
0 SeiOkami
 
28.12.15
17:01
Здравия всем!

Такой вопрос. Кучи раз сталкиваюсь с тем, что нужно настроить расчет ресурсов так, чтобы не было "замножений". Например, результат запроса:

Документ, СуммаДокумента, Номенклатура, СуммаНоменклатуры

Документ1 , 100 р. , Номенлкатура1, 33р.
Документ1 , 100 р. , Номенклатура2, 12р.

Итоги должны быть такие:
Документ1 , 100 р. , 35 р.


Решается это разными путями. И разбивкой на два набора данных. И добавлений хитрых функций в расчетах ресурса. Например: Сумма(Массив(ТаблицаЗначений(Различные Документ, СуммаДокумента)))

Однако разного рода хитрые ресурсы либо заметно замедляют вывод, либо могут косячить при играх с отборами. А разбиение единого запроса на несколько наборов данных иногда так же является неоптимальным повторным выбором одних и тех же данных из базы.

Неужели нет нормального адекватного способа? Вроде какой-нить галочки.
1 SeiOkami
 
28.12.15
17:01
Пардон,

Итоги должны быть такие:
Документ1 , 100 р. , 45 р.
2 SeiOkami
 
28.12.15
17:04
Догадываюсь, что это я просто не знаю какой-то банальщины...
3 FIXXXL
 
28.12.15
17:07
мож тебе внутри документа по его сумме какой-нить МАКСИМУМ вместо СУММА сделать?
4 SeiOkami
 
28.12.15
17:11
(3), да, думал о том, чтобы как-то сделать разную логику расчета ресурсов для разных группировок. Но проблема в том, что когда для группировки по документу делаешь о один расчет (можно даже без функций - просто СуммаДокумента), а для общих итогов другой Сумма(СуммаДокумента), то по группировке по документу все хорошо, а вот итоговые суммы опять множатся. Потому что расчет ресурса для итогов происходит не путем сложения значений ресурса из вложенных группировок, а путем пересчета всех группировок по новой заданной формуле.
5 YAGolova
 
28.12.15
17:24
(4) я делаю через вычислитьвыражениесгруппировкоймассив, но к сожалению со всеми описанными проблемами тоже сталкивался
6 YAGolova
 
28.12.15
17:26
раньше когда этой великолепной функции не было я бил сумму пропорционально других сумм (или количеству строк), а в ресурсах просто складывал. Работают в этом случае и отборы и все прочее, но геморроя при написании отчета в разы больше))))))
7 Nuobu
 
28.12.15
17:59
(6) Тоже так делал, потом стал делать два набора, ну а потом вычислитьвыражениесгруппировкоймассив
8 echo77
 
28.12.15
18:39
(0) Нельзя требовать от программы одновременно универсальности и повышенной функциональности.

Все описанные вами приемы имеют место быть и лучше подходят для каждой конкретной ситуации.
Но, ИМХО использование двойной агрегации с помощью функции вычислитьвыражениесгруппировкоймассив - это решение через одно место
9 SeiOkami
 
29.12.15
07:46
(5),(7), а как выглядеть будет функция с использованием вычислитьвыражениесгруппировкоймассив  для примера в (0) ?