|   |   | 
| 
 | Процент от суммы документа не равен сумме процента по строкам | ☑ | ||
|---|---|---|---|---|
| 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) Я обычно кидаю сумму погрешности на строку с максимальным значением суммы. Там она меньше заметна.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |