Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Размышления об округлении
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Тематическое общение
vbi
Представим у нас есть два документа и регистр накопления, по которым они делают движения. Колонки: Курс, сумма, сумма валютная. Курс имеет 4 знака после запятой, а суммы - два. Курс за все время не менялся.

Представим, что документ Д1 сделал движение в регистр первый, а документ Д2 - второй:

Цитата
Документ / Курс / Сумма вал. / Сумма
Д1: / 4.1820 / 1127.64 / 4715.79
Д2: / 4.1820 / -102.50 / -428.66


Естественно сумма считается как валютная * курс. В случае первого документа округления не было. В случае второго сумма получилась -428.655, которая округлилась как -428.66 по всем правилам (5 в большую сторону).

Теперь посчитаем остатки:

Цитата
Остаток: / 4.1820 / 1025.14 / 4287.13


Однако: 4.1820 * 1025.14 = 4287,13548 = 4287,14

Как же так получилось? Оказывается что мы неправильно округлили в первом случае. Так значит когда мы имеем расход, или приход с "-" (сторно), тогда 5 нужно округлять не к большому значению, а к меньшему?
Кто как считает? И как выйти из ситуации?
pablo
В таких случаях делается некий "конечномесячный" документ, который в конце месяца собирает накопившиеся ошибки и делает коррекцию в нужную сторону.
Vofka
Цитата(vbi @ 19.06.13, 13:01) необходимо зарегистрироваться для просмотра ссылки
Как же так получилось?

Проклятая математика diablo.gif .
У меня тоже не редко возникают всякие приколы с округлениями. Люди ручками разбрасывают копейки, если что.
vbi
Я когда учился в аспирантуре, мне мой руководитель рассказывал, что самое точное округление - это когда 5 округляется в большую или меньшую сторону случайным образом.

Так всетаки. Что Вы скажете о том, чтобы округлять 5 в меньшую сторону, когда движение есть "расход" или сторно?
Vofka
Цитата(vbi @ 19.06.13, 13:55) необходимо зарегистрироваться для просмотра ссылки
Что Вы скажете о том, чтобы округлять 5 в меньшую сторону, когда движение есть "расход" или сторно?

Продаем мы что-то. Сумма с учетом НДС = 24,99. Выделяем НДС, получаем 4,165 = 4,17. Получаем примерно такие проводки:

Дт 361 - Кт 702 - Сумма 24,99
Дт 702 - Кт 6432 - Сумма 4,17

Делаем возврат. Если следовать тому, что вы только что сказали, то проводки будут такие:

Дт 704 - Кт 361 - Сумма 24,99
Дт 704 - Кт 6432 - Сумма -4,16

Обратите внимание, что в результате у вас зависнет копейка на счете 6432.
vbi
Тут согласен
Vofka
vbi, что касаемо приколов с округлениями НДС, в типовых есть функция ПересчитатьНДСсУчетомПогрешностиОкругления в модуле ОбработкаТабличныйЧастей. В её описании сказано:

Цитата
Процедура корректирует построчные ошибки округления НДС так,
чтобы итоговый НДС по ставке совпадал с расчитанным НДС по базе


Как-то я хотел разобраться как она работает, но посидев и покумекав над ней - я бросил эту затею. А разобраться хотел, потому что при пересчете оно всеравно в некоторых случаях считает не так как надо. Что в итоге?
Цитата(Vofka @ 19.06.13, 13:17) необходимо зарегистрироваться для просмотра ссылки
Люди ручками разбрасывают копейки, если что.

pablo
Я для учета бензина в баках автомобилей при сохранении дока Путевой лист вычислял расход по пробегу за день и за месяц, после чего корректировал расход за день, чтобы он совпадал с месячным.
Vofka
Цитата(Vofka @ 19.06.13, 14:36) необходимо зарегистрироваться для просмотра ссылки
А разобраться хотел, потому что при пересчете оно всеравно в некоторых случаях считает не так как надо.

Так вот. Делает нам покупатель заказ на 3 позиции какого-то товара, цена которого, включая НДС, составляет 5 грн. Отгружаем ему 3 расходными накладными, в каждой по 1 штуке, соответственно. В каждом из них по НДС будет такая проводка:

Дт 702 - Кт 6432 - Сумма 0,83

Итого по 3 документам получается НДС-а на сумму 2,49

Делаем возврат всех 3 позиций одним возвратом. Набиваем каждуюу позицию отдельной строкой, указываем документ партии, все как положено. Но когда проводим документ, эта функция (ПересчитатьНДСсУчетомПогрешностиОкругления которая) делает ход конем и понимает, что т.к. сумма общая получается 15 грн., то НДС должен быть 2.5 грн., в результате чего добавляет 1 копейку к НДС-у какой-то позиции и даже скажет нам
Цитата
После исправления погрешностей округления сумма НДС табличной части Товары изменилась (было 2,49 грн, стало 2,50 грн)


Проводка в этом случае по НДС получается такая:

Дт 702 - Кт 6432 - Сумма -2,5

И снова у нас на 6432 висит копейка. Какой мы делаем вывод? Правильно:
Цитата(Vofka @ 19.06.13, 13:17) необходимо зарегистрироваться для просмотра ссылки
Люди ручками разбрасывают копейки, если что.


Для меня это все наболевшая тема. faceoff.gif
Petre
Что касается округления, связанного с валютой, правильно делать следующим образом.
1. Вычисляем конечный остаток в валюте.
2. Вычисляем конечный остаток в эквиваленте по курсу со стандартным округлением.
3. Вычисляем сумму движения в эквиваленте как разницу между начальным и конечным остатками.

Цитата(vbi @ 19.06.13, 13:55) необходимо зарегистрироваться для просмотра ссылки
Я когда учился в аспирантуре, мне мой руководитель рассказывал, что самое точное округление - это когда 5 округляется в большую или меньшую сторону случайным образом.

Существует т.н. финансовый (или банковский) метод округления, когда пятерка округляется до большего числа, если перед ней нечетная цыфра, и отбрасывается, если перед ней - четная.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.