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