|
|
|
Отчетность. Подгонка слагаемых под итоговую сумму
|
|||
|---|---|---|---|
|
#18+
Доброго дня! Есть Oracle, есть BI, есть отчетность. Вероятно, в этой ветке много тех, кто с такой ситуацией сталкивался В процессе работы с разного рода отчетностью, приходится сталкиваться с запросами со стороны бизнеса, где требуется в одну книгу Excel выгружать несколько отчетных форм. Суммы в данных отчетах отражаются в тысячах и целых числах. Перед формированием отчетных форм первоначально собирается расшифровка нижнего уровня - клиент, счет, сумма, дата, идентификатор конкретной операции и т.д. Для двух форм одни данные и одна расшифровка. Отчетные формы, расположенные в книге(они могут располагаться и отдельно - не принципиально) имеют разную группировку исходных данных. В частности - в одной отчетной форме пользователь хочет видеть некие суммы в разрезе по опер.дню, валюте, рейтингу клиента, а в другой по дню и еще по неким статьям отчетным. При этом пользователь хочет, чтобы итоги между отчетными формами бились, ведь это "одни и те же данные", но из-за разной группировки и округления итоги не бьются на единицы. Есть вариант использовать подход, когда сумма нижнего уровня(уровня уникальной операции) делится на тысячу, округляется, а уже потом подвергается сложением с другими суммами и группировке(как не суммируй и группируй округленные целые числа - итоговая сумма будет одна). Однако, при таком подходе сильно разнятся по понятным причинам итоговые суммы с балансом. Поэтому для приведения сумм к общим итогам пользовались функцией, куда передавались суммы всех слагаемых без округления и требуемая итоговая сумма. Функция анализирует разницу между требуемым тоталом и фактическим и принудительно округляет в большую или меньшую сторону, работая при этом с дробными числами(в качестве слагаемых могут передаваться и целые). Но разница не всегда = 1, а иногда и несколько единиц. При таком подходе одними играми с тем, в какую сторону округлять, не обойтись. Приходится разницу в жесткую садить на какое-то слагаемое. Есть ли опыт решения подобного рода задачки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2017, 13:56 |
|
||
|
Отчетность. Подгонка слагаемых под итоговую сумму
|
|||
|---|---|---|---|
|
#18+
Варианты: 1. все расчеты в копейках или еще точнее. А округлять именно на форме. Тогда в итого будет не бить в пределах 1 копейки 2. расчеты делать в базе по beforetrigger и в таблице делать нужные подитоги, чтобы всё билось в зависимости от группировок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2017, 19:26 |
|
||
|
Отчетность. Подгонка слагаемых под итоговую сумму
|
|||
|---|---|---|---|
|
#18+
=nomad=, Спасибо за ответ 1. Вариант был такой, но часто пользователь не хочет видеть в Excel лишние формулы. Кроме того, те суммы, что выгружаются в форму - это уже суммы из 100500 операций, сгруппированных и выведенных в нужные ячейки формы. Я так же сделаю округление на форме и получу ту же итоговую сумму сложением округленных слагаемых, что и сейчас. Или я чего-то не уловил... 2. Боюсь, что если я сделаю подитоги, чтобы потом собрать из них итог, то получится расхождение с балансом. Ведь при каждом сборе подитога будет образовываться погрешность на округлении, которая будет возврастать пропорционально количеству подитогов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 06:38 |
|
||
|
Отчетность. Подгонка слагаемых под итоговую сумму
|
|||
|---|---|---|---|
|
#18+
иногда общую дельту разбрасываем не на одну строку, а на несколько, на те, у которых сумма (общая или округления) больше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 07:05 |
|
||
|
Отчетность. Подгонка слагаемых под итоговую сумму
|
|||
|---|---|---|---|
|
#18+
andreymxиногда общую дельту разбрасываем не на одну строку, а на несколько, на те, у которых сумма (общая или округления) большет.е. если дельта 5 копеек, разбрасываем на первые (условие первенства обсуждаемо с заказчиком) 5 строк по копейке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 08:11 |
|
||
|
Отчетность. Подгонка слагаемых под итоговую сумму
|
|||
|---|---|---|---|
|
#18+
andreymx, Спасибо! В общем, варианты все понятные. Спасибо за ответы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 08:46 |
|
||
|
Отчетность. Подгонка слагаемых под итоговую сумму
|
|||
|---|---|---|---|
|
#18+
Репортбилдермен, В общем случае миссия невыполнима. Например, есть две строки баланса по 600 руб каждая, и их сумма: Отчет в рубляхстрока 1 600строка 2 600Итого 1200 И ты хочешь показать это в тысячах. Получается, что каждая из 600 округляется вверх, до целой тысячи. А итог, 1200, округляется вниз, опять же до одной тысячи. Получаем странное: Отчет в тысячахстрока 1 1строка 2 1Итого 1 Вопрос: как ты в самом лучшем случае желаешь видеть "Отчет в тысячах" на основании данных "Отчета в рублях" ? Нарисовать вместо 1200 - две тысячи? Или вместо какой-то шестисотки - ноль? Если бы форма была всего одна, то это еще сошло бы с рук. Но беда в том, что у тебя есть еще другие формы, с другой группировкой, где эти же данные будут показаны в других разрезах. И чем больше ты будешь рисовать в одних формах, тем больше будет расхождений с другими формами. Правильный ответ - если в отчетах используется округление, скажем, до тысяч, то это должно предполагать, что значащие цифры лежат далеко за этим пределом - грубо говоря, что счет во всех графах идет хотя бы в десятках миллионов. Тогда во всех формах внутри применять честную арифметику в копейках, округлять значения только при выводе в каждую ячейку, на расхождения в единицах тысяч забить, для удобного пояснения расхождений дать возможность увидеть неокругленные значения (то есть от "отчета в тысячах" быстро увидеть "отчет в рублях"). А иначе, чем хитрее сделаешь "рисовальную" логику, тем неприятнее будут вопросы при сверке форм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 10:03 |
|
||
|
Отчетность. Подгонка слагаемых под итоговую сумму
|
|||
|---|---|---|---|
|
#18+
Все считать нужно в целых числах (рубли или копейки). Округление только при выводе (формат типа "#,##0,\K"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 11:25 |
|
||
|
Отчетность. Подгонка слагаемых под итоговую сумму
|
|||
|---|---|---|---|
|
#18+
Alibek B., ты наивный чукотский юноша, судя по всему.... Оно может быть всё и хорошо было бы, и ровно считалось бы в копейках, если бы не налоговая ставка и прочие "проценты по кредитам"... К примеру, в России НДС - 18%, а НДФЛ - 13%. И долго у тебя с такими показателями процентов будут целые числа в базе оставаться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 11:32 |
|
||
|
Отчетность. Подгонка слагаемых под итоговую сумму
|
|||
|---|---|---|---|
|
#18+
Я расскажу как такие вопросы обрабатывает SAP. Пример: надо выделить НДС по каждой из строк. То есть, есть некая общая сумма, и есть строки составляющие эту сумму и есть требования чтобы 18% по каждой из строк было равно 18% от общей суммы. Что делает SAP, он считает 18% по каждой строке, затем считает разницу между 18% по строкам и 18% от общей суммы и полученный итог если он превышает одну копейку разбрасывает. Можно добавлять по одной копейке к каждой строке, можно к наибольшей... Это как кому нравиться. Но в целом Ваша задача решается только если вводить функции проверки на вывод каждого из числа. Если выводите несколько кусков одного целого, надо сравнивать с общим процентом от этого целого и разницу разбрасывать. Сочувствую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 14:06 |
|
||
|
Отчетность. Подгонка слагаемых под итоговую сумму
|
|||
|---|---|---|---|
|
#18+
Lunx, Ну да, независимо от системы суть одна - либо поделить какими-то частями, либо дельту на одно слагаемое кинуть. Принципиально нового ничего не придумать) Пока, в текущей задаче, как раз обошелся увеличением одного из слагаемых. Думал сделать универсальную процедурку, куда бы передавались все слагаемые и желаемый тотал, да округлением все поровнять. Да не удастся, ибо каждая задачка - отдельный подход по раскидке оставшейся не у дел разницы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 14:58 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39548813&tid=1884965]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
69ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 331ms |

| 0 / 0 |
