Имя: Пароль:
1C
1С v8
Что делать с округлением
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) когда попросят по копейке раскидать остаток приходи. :)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс