|
Процент от суммы документа не равен сумме процента по строкам | ☑ | ||
---|---|---|---|---|
0
чеширский кот
06.03.13
✎
11:21
|
Сумма документа = 17691.30
Процент = 0.5 17691.30 * 0.005 = 88.4565 ОКР(88.4565, 2) = 88.46 СТРОКИ 3920.40 * 0.005 = 19.60 3920.40 * 0.005 = 19.60 630.43 * 0.005 = 3.17 3168.00 * 0.005 = 15.84 2178.00 * 0.005 = 10.89 2178.00 * 0.005 = 10.89 1692.90 * 0.005 = 8.46 СУММА: 88.45 РАЗНИЦА: 88.46 - 88.45 = 0.1 ВОПРОС: Как рассчитать строки, чтобы распределение получалось без разницы? |
|||
1
zak555
06.03.13
✎
11:22
|
не использовать копейки
|
|||
2
чеширский кот
06.03.13
✎
11:23
|
Поправка:
СТРОКИ 3920.40 * 0.005 = 19.60 3920.40 * 0.005 = 19.60 630.60 * 0.005 = 3.17 <--- 3168.00 * 0.005 = 15.84 2178.00 * 0.005 = 10.89 2178.00 * 0.005 = 10.89 1692.90 * 0.005 = 8.46 |
|||
3
zak555
06.03.13
✎
11:23
|
+ (1) и процент должен быть целым
|
|||
4
BARS_2
06.03.13
✎
11:23
|
или использовать накопление погрешности округления. оно в типовых конфигурациях всегда есть
|
|||
5
чеширский кот
06.03.13
✎
11:24
|
да вот в том, что нужны и копейки, и два дробных знака в процентах
|
|||
6
mistеr
06.03.13
✎
11:25
|
(4) Или раскидать разницу по строкам после.
|
|||
7
Defender aka LINN
06.03.13
✎
11:25
|
(0) Для начала - определиться, какая сумма правильная
|
|||
8
zak555
06.03.13
✎
11:26
|
(5) в общем случае сумма процентов по строкам <> сумме процента
|
|||
9
cw014
06.03.13
✎
11:26
|
(6) Будь мужиком, раскидай...
|
|||
10
zak555
06.03.13
✎
11:27
|
+ (8) и поэтому сумма НДС документа равна Итог("СуммаНДС"), а не СуммаДок * ставку
|
|||
11
Defender aka LINN
06.03.13
✎
11:28
|
(10) Ставок бывает и больше одной :)
|
|||
12
Эмбеддер
06.03.13
✎
11:29
|
Считать нарастающим итогом
|
|||
13
zak555
06.03.13
✎
11:30
|
(11) и поэтому тоже =)
|
|||
14
чеширский кот
06.03.13
✎
11:31
|
(12) то есть, устанавливать процент в итерации на уменьшении общей суммы?
|
|||
15
Irbis
06.03.13
✎
11:32
|
(0) Ещё как не равны, каждый месяц с этим сталкиваюсь, когда обрабатываются транзакции с АЗС.
|
|||
16
Defender aka LINN
06.03.13
✎
11:34
|
(14) Еще раз: какая сумма правильная?
|
|||
17
чеширский кот
06.03.13
✎
11:34
|
в том, чтобы "запихнуть" разницу в какую либо строку, не является проблемой 8) вопрос в том, есть ли способ определить "правильную" строку где у меня сработала погрешность округления?
|
|||
18
BiBijke
06.03.13
✎
11:34
|
да как не равны (a+b)*c = ac + bc... Проблема в том точность нужна выше а 2 знака после запятой.
|
|||
19
MSII
06.03.13
✎
11:34
|
(14) Спроси у постановщика задачи. Объясни ему, почему суммы по строкам и итог не равны и предложи варианты решения проблемы. Пусть последнее слово останется за ним.
|
|||
20
чеширский кот
06.03.13
✎
11:35
|
(16) 88.46 от Суммы документа
|
|||
21
МихаилМ
06.03.13
✎
11:35
|
сумма округлений не равна округлению суммы.
|
|||
22
BARS_2
06.03.13
✎
11:37
|
точность итоговая в любом случае два знака после запятой, т.к. итоговая сумму тоже округляют. просто надо определиться что быдет правильно для заказчика - вывести на процент по сумме документа или на сумму построчных процентов. а после этого уже делать - в первом случае накапливать ошибку округления с каждой строки и применять к следующей (так сделано штатное накопление округления в типовых) или ничего не делать во втором случае.
|
|||
23
Irbis
06.03.13
✎
11:37
|
(0) Округлять надо как в договоре написано. Скидка либо с суммы документа либо с транзакции (строки). И правильный ответ один, а остальные в топку.
|
|||
24
Kreont
06.03.13
✎
11:37
|
(17) не определишь, да и зачем.
решал аналогичное например так: Сначала отсортировал по увеличению показателя, потом в последнюю строку добавлял разницу (%итого - Сумма% по предыдущим строкам). |
|||
25
чеширский кот
06.03.13
✎
11:38
|
ЭВРИКА!!!
|
|||
26
чеширский кот
06.03.13
✎
11:38
|
(18) (21) Спасибо!
|
|||
27
Defender aka LINN
06.03.13
✎
11:38
|
(20) Тогда остаток раскидать пропорционально суммам, да и все. Можно даже не вычисляя процент по строкам вообще.
|
|||
28
чеширский кот
06.03.13
✎
11:39
|
Решение: увеличить точность на уровне переменных
|
|||
29
Defender aka LINN
06.03.13
✎
11:42
|
(28) Это не решение. Пока есть округление, будет ошибка.
|
|||
30
zak555
06.03.13
✎
11:43
|
(26) тебе с самого начала про это говорят
|
|||
31
Serg_1960
06.03.13
✎
11:43
|
Хмм... а потом ваш документ ОстатокРаскидатьПропорционально поступит в другую организацию и тогда вас раскидают пропорционально... :)
|
|||
32
BARS_2
06.03.13
✎
11:43
|
это не поможет. может быть пять строк с 0,33333333333 после округления каждой потеряется 0,003333333 а это с пяти строк 2 копейки
|
|||
33
zak555
06.03.13
✎
11:43
|
(28) в общем случае равенства не будет никогда
|
|||
34
Irbis
06.03.13
✎
11:45
|
(28) Дурью не майся, в РФ учет ведётся в рублях и копейках. Доли копеек не предусмотрены. Поэтому читай договор и поступай как написано, округляй в нужном месте..
|
|||
35
чеширский кот
06.03.13
✎
11:46
|
Да. Додумал мысль. Это только решает итоги по документу и строкам, но не более
|
|||
36
чеширский кот
06.03.13
✎
11:47
|
Думаю оазницу поместить по последней строке
|
|||
37
чеширский кот
06.03.13
✎
11:47
|
*разницу
|
|||
38
zak555
06.03.13
✎
11:47
|
не пробиваемый =)
|
|||
39
BARS_2
06.03.13
✎
11:48
|
смысл спрашивать было?
|
|||
40
чеширский кот
06.03.13
✎
11:50
|
Это не единственная идея.
(38) Я пытаюсь рассмотреть множество вариантов (39) Как раз узнать это множество вариантов Сейчас попробую реализовать распределение по строкам в отношении суммы строки к сумме документа |
|||
41
BARS_2
06.03.13
✎
11:54
|
так у тебя те же копейки будут набегать которые ты откидывал округлением на первом проходе.
|
|||
42
Эмбеддер
06.03.13
✎
11:54
|
(40) это называется изобретать велосипед. все без исключений прошли через это. в каждой строке расхождение из-за округлений может достигать 0.005 рублей
|
|||
43
BARS_2
06.03.13
✎
11:55
|
какая задача? если чтобы сумма по срокам равнялась Окр(база*коэфф) то тогда у тебя только два варианта - простой и неправильный - вкидывать разницу на последнюю или первую строчку, второй вариант - округлять округляй но погрешность округления с каждой строки используй при округлении следующей
|
|||
44
BARS_2
06.03.13
✎
11:57
|
только имей ввиду что делать это надо перед записью документа, потому что в какой-то строке результат округления не будет математически равен ОКР(база строки*коэфф)
|
|||
45
buhkiller
06.03.13
✎
11:58
|
В зарплатах на большое количество людей всегда такая проблема. Потом приходит дятел с пенсионного фонда, смотрит процент от общей суммы начислений и начинает истерить если две копейки разницы, чем сумма при построчном вычислении.
|
|||
46
zak555
06.03.13
✎
12:00
|
(35) нет там таких проблем
есть проблемы у кого-то с арифметикой |
|||
47
Тролль главный
06.03.13
✎
12:03
|
тут даже в запросе это делали, надо поискать
|
|||
48
Classic
06.03.13
✎
12:04
|
В типовых есть процедура округления с погрешностью. Отличная процедура - на любом наборе первых N из M строк выдает
СУММА(ОКРУГЛЕНИЕ(ОкругляемаяСумма)) = ОКРУГЛЕНИЕ(СУММА(ОкругляемаяСумма)) |
|||
49
Classic
06.03.13
✎
12:04
|
(47)
В запросе геморно - надо накопительный считать |
|||
50
чеширский кот
06.03.13
✎
12:17
|
Сейчас попробовал так:
ТекСтрока.СуммаОтчисленийБанкуВР = ОКР(ОКР(ТекСтрока.СуммаПремииПоДоговоруВД / 100 * ПроцентОтчисленийБанку, 3), 2); Показало правильно |
|||
51
Калиостро
06.03.13
✎
12:22
|
(36) Я обычно кидаю сумму погрешности на строку с максимальным значением суммы. Там она меньше заметна.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |