|
Что делать с округлением |
☑ |
0
Borteg
09.10.12
✎
18:44
|
Добрый вечер. Поставили задачу сделать учет оплаченных счетов по номенклатуре. Алгоритм не вдаваясь в подробности следующий:
Пришел счет
Наименование Количество Цена Сумма
Арматура 300 32,42 9726
УбитьОкруглениие 10 127,78 1277,80
Вилка 6 75,27 451,62
Ложка 200 24,07 4814
Сумма счет 16269,42
Счет оплачивается почти всегда частично. Алгоритм распределения суммы на номенклатуру дали такой:
Сумма оплаты/Сумма счета*количество =Получаем количество оплаченной номенклатуры
Соответственное дальше количество оплаченной номенклатуры * цену получаем сумму,которая после оплаты счета полностью должна закрыться.
Но на деле после округлений постоянно вылазит какието 0.001 в количестве и суммах.
Тоесть Прошли 3 оплаты разными числами
Пример
1 оплата 269.42
2 оплата 1000
3 оплата 15000
Тоесть счет полностью оплатили.
В регистрах получается
Убить округление
По первой оплате Количество 0.166
По второй оплате Количество 0.615
По третей оплата Количество 9,22
Тоесть в итоге общее количество 10.001 должно быть 10((
Помогите как лучше быть в таких случаях.
|
|
1
pumbaEO
09.10.12
✎
18:46
|
как обычно на последней делаем -0,001 ну и сумму учитывай в 2 знака после зпт.
|
|
2
Нуф-Нуф
09.10.12
✎
18:46
|
Нужна еще одна иттерация по получению этой разницы, и добавление в какую нибудь из строк. Все можно сделать в рамках одного запроса
|
|
3
zak555
09.10.12
✎
18:47
|
что за номенклатура УбитьОкруглениие ?
|
|
4
Преднаименование
09.10.12
✎
18:50
|
Относи разницу в счет своей зарплаты.
|
|
5
Classic
09.10.12
✎
18:52
|
Используй не количество в счете, а количество в регистре
|
|
6
Classic
09.10.12
✎
18:52
|
+(5)
Остаток количество в регистре
|
|
7
Classic
09.10.12
✎
18:53
|
А не, не так
|
|
8
Classic
09.10.12
✎
18:56
|
Раз ты в регистре накапливаешь и количество и сумму, то
КоличествоЗакрытия = КоличествоОстаток * СуммаОплаты / СуммаОстаток
СтоимостьЗакрытия = КоличествоЗакрытия * Цена (или как оно там у тебя считается)
|
|
9
GANR
09.10.12
✎
19:05
|
(0) Для начала это Сумма оплаты/Сумма счета*количество заменить на это Сумма оплаты * количество / Сумма счета - снизит ошибку округления?
Чтобы не списать лишнего проводить контроль:
ОплатитьПоТовару = Мин(ОсталосьОплатить, ПришлоДенегПоПлатежу);
|
|
10
Borteg
09.10.12
✎
19:12
|
Вооо спасибо Ganr то что надо ОплатитьПоТовару = Мин(ОсталосьОплатить, ПришлоДенегПоПлатежу);
Я как то сразу и не допер) Спасибо всем кто откликнулся на проблему.
|
|
11
pumbaEO
09.10.12
✎
19:14
|
(10) когда попросят по копейке раскидать остаток приходи. :)
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший