Имя: Пароль:
1C
1С v8
Процент от суммы документа не равен сумме процента по строкам
,
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) Я обычно кидаю сумму погрешности на строку с максимальным значением суммы. Там она меньше заметна.