powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Хранение сумм в копейках: какие мнения?
25 сообщений из 25, страница 1 из 1
Хранение сумм в копейках: какие мнения?
    #32093848
Seryoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток.
Если кто сталкивался с написанием чего-то для бухгалтерии - знает проблему округлений. Логика бухгалтера такова: каждое вычисление округляется до копеек, то есть для получения правильной с точки зрения бухгалтера суммы, например, такого выражения: (A * B + C) / D необходимо написать так:
round(round(round( A * B) + C) / D), где round - округление до 2х знаков после запятой. В общем при наличии отсутствия типа Decimal все бухгалтерские формулы превращаются в километровый кошмар.
Возникла наверняка неоригинальная мысль - хранить всё в Integer, то есть - в копейках, а в рублях - только отображать. Есть у кого-то опыт использования копеек, если есть - какая кривизна меня ждет в связи с этим, думал-думал но так и не нашел реальных препядствий.
Заранее спасибо.
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32093909
Suslik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используй тип Currency в Access.

Однако, проблема округлений всегда будет стоять, а твоя конструкция из Round'ов, мягко выражаясь, не решение.
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32093925
Seryoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конструкция с раундами очень даже выход, проблема округлений у нас была снята после поэтапного округления каждой суммы, то есть повторений действий бухгалтера с калькулятором, грубо говоря. Но конструкции дюже громоздкие получаются, хочется попробовать как-то обойти. Вот и вопрошаю... А вот currency как раз - он что может дать полезного? currency, на сколько я помню, хранит не 2 а 4 знака после запятой - опять округлять придется.
И что вообще значит - "проблема округлений" и "мягко выражаясь не решение"? В данном виде проблемы, кроме громоздкости, нет и не решение ли то решение, которое дает правильный результат именно с точки зрения бухгалтера? Думаю - как раз решение... Да и вопрос не в том.

А в копейках кто-нить пробовал хранить все-таки? В Integer? Текстовые поля, мемо, булевые и упаси Бог дату/время не предлагать.
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32093944
nandji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мысль хорошая :)
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32093961
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример:
Возьмите 100 рублей по 1 рублю.
Выделите из каждого рубля НДС (16.67%).
Напишите: Итого рублей ___ в т.ч. НДС ___.
Сложите все 100 рублей и 100 НДС.

А теперь вопрос: сумма НДС равна НДС от суммы рублей?
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32093967
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эту проблему надо решить и запостить в FAQ!

Для начала разберем от куда ноги растут. Все очень просто.

Есть скажем документ:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 --- "Начисление процентов по вкладам за месяц"
 
   Дата	   CуммаВклада   Ставка %/год      Начислено      На самом деле (Сумма * Ставка)/ 36500 
 01  янв  03      $ 8   000 	 5 		$ 1 . 10 		$ 1 . 09589041 
 02  янв  03      $ 8   000 	 5 		$ 1 . 10 		$ 1 . 09589041 
 03  янв  03      $ 8   000 	 5 		$ 1 . 10 		$ 1 . 09589041 
 04  янв  03      $ 8   000 	 5 		$ 1 . 10 		$ 1 . 09589041 
 05  янв  03      $ 8   000 	 5 		$ 1 . 10 		$ 1 . 09589041 
 06  янв  03      $ 8   000 	 5 		$ 1 . 10 		$ 1 . 09589041 
 07  янв  03      $ 8   000 	 5 		$ 1 . 10 		$ 1 . 09589041 
 08  янв  03      $ 8   000 	 5 		$ 1 . 10 		$ 1 . 09589041 
 09  янв  03      $ 8   000 	 5 		$ 1 . 10 		$ 1 . 09589041 
 10  янв  03      $ 8   000 	 5 		$ 1 . 10 		$ 1 . 09589041 
Итого начислено за  10  дней: $ 11 
На самом деле должно быть начислено: $ 10 . 9589041 


Весь этот вопрос в том, что на разных этапах можно применить округление. Можно на уровне строки. Можно на уровне итого за период. А что делать. Когда весь период (пол года) складывается из периодов (документов) по месяцам?
Предложенное мной решение округлять каждую строку до второго знака не встретило понимания, оно и понятно 5 центов тут за 10 дней. 5 центов там * на количество документов легко можно и за $1000 вылезти.

Остается одно... Учитывать итоговую сумму за месяц. Ее округлять. Но при этом "Итого" как сумму полей показывать низя. Только как результат по всей формуле с учетом месяца а не дня!
А вообще-то в бухгалтерии статья расходов под округление заведена!
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094015
Seryoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сумма НДС однозначно не равна НДС от суммы если хотя бы одна из сумм прошла с округлением. Считать НДС от итога - абсурд. Подумайте сами, с каждой накладной, например, Вы получаете столько-то НДС, а потом в конце месяца почему-то собираетесь отменить все эти суммы НДС, содержащиеся в оформленых документах, и посчитать нечто непонятное от общей суммы сделок? Бред. Только при чем тут это?... Да, спросите у бухгалтера как он работает. Как работает и 1с, кстати. Как работают те, у кого стоит сиквель. Они используют децимал(2,0), который не превращается в хвост цифр, а округляется каждая операция, КАЖДАЯ!!! ёлы. Но в аксессе ну нет его, децимал(2,0). Если лень и бухгалтер пофигист - можно хоть вообще не округлять. Но вот у нас, например - филиалы зависят от основной фирмы, которая всё считает по-человечески с помощью сиквеля. А в филиалах аксессовские базульки, но они не имеют права расходиться в отчетах с основной фирмой. Остаётся вручную округлять каждую операцию, это ПРАВИЛЬНО, но громоздко. Вот и хочется попробовать с интегером. Неужели никто не пробовал?
Статья расходов - это только от неленивого бухгалтера с ленивым программистом. Естественно, если уж несвязуха идет - надо же куда-то списывать....
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094043
Suslik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"ПРАВИЛЬНО" - это если ваша база совпадает с базой основной фирмы. Но если взять итоговые суммы, скажем, за год, то наверняка просуммированная за весь период НДС не будет совпадать с НДС, рассчитанным от итоговой суммы. Пример mahoune как раз это иллюстрирует. Так что, округление каждой операции не всегда есть правильный вариант.

И вообще, я сильно сомневаюсь, что запись копеек в отдельном поле или отдельной переменной вдруг резко поможет решить проблему. Ноги-то растут из большого хвоста после запятой, а не из типов переменных. Если надо разделить 1 на 3, то всегда получится 0,3(3), как ты этот результат не храни. Так что если удалось добиться совпадения данных в базе филиала и в основной базе с помощью тотального округления, то не надо ТАК извращаться.
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094050
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поддерживаю Suslik
Скажем если в резулбтате каких-либо операций (вычисление средней себестоимости, к примеру) вышло 1234.99 копеек, в поле Int запишется усеченное, а не округленное значение 1234. Следовательно придется предварительно его правильно округлить. Так какой тогда толк от этого, если тот-же геморой? Проще округлять до копеек денежный тип.
З.Ы. А цены лучше хранить без НДС.
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094088
Seryoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда. Господа, кто вам сказал что сумма НДС должна совпадать с НДС суммы? Блин... Это, конечно, частое заблуждение, но для математика тут должно быть всё ясно. То, что они не совпадают - это НОРМАЛЬНО, никто не потребует их совпадения. Итог НДС за период это сумма всех НДС отдельных документов. А общая сумма - это сумма выплат по этим документам. Они напрямую не связаны никаким процентным соотношением. Это аксиома и говорить об этом нет смысла.

@Pavel - по поводу неизбежности использования округления мысль ясна. А, кстати, как хранится мани? Как у мани округляются хвосты? Какой тип округления используется? (статистический или математический)
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094096
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В чем громоздкость округления?
Напиши 1(одну) сколь угодно сложную функцию, и юзай ее.
Проблема округления решается тем, что надо сформулировать правило, как это делаешь ты и последовательно его соблюдать.
Т.е. способ расчета НДС документа на твоей форме, в СФ и в месячном отчете должен быть один и тот же.
Хранить в целых действительно морока.
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094111
Seryoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да функция есть... один из выходов, правда, это написать доп. функции, соответствующие математическим, но с округленным результатом.
Кстати, кто там мне писал что интегер просто отбрасывает хвост? Вот интегер как раз использует статистическое округление, а в бухгалтерии - математическое. Вот этого я не учел, полез проверять - абыдно.
Тогда вопрос такой: правила округления где-нить задаются или это прошито намертво? Потому как если интегер использует исключительно статистическое округление, тогда вот на самом деле есть смысл от него отказаться.
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094122
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас есть такая функция, не я писал, но бухгалтерию устраивает

Public Function Okr(dblSumma As Double) As Double
On Error GoTo Error_Okr

Okr = Fix(dblSumma) + CLng((dblSumma - Fix(dblSumma)) * 100) / 100

Exit_Okr:
Exit Function

Error_Okr:
MsgBox Error$
Resume Exit_Okr

End Function
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094128
vladK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в поддержку идеи автора вопроса.
Эта тема кстати обсуждалась в разделе по SQL server. Там тоже такая проблема есть. Приведу то, что я вынес оттуда:

Код: plaintext
1.
2.
Лучше всего работает (предсказуемее) система, где денежные величины храняться в целом виде. 

 102  рубля  25  копеек храниться не как  102 . 249999998  а как  10225 .
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094132
Seryoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, функция у нас как я говорил и работает, но если уж использовать - я думаю стоит написать функции умножения и деления с округленным результатом, при их использовании вместо " * " и " / " с типом мани должно вроде быть все Ок (кстати - мани хранится как фиксед, нашел). Резюме: мани и 2 дополнительные функции должны обеспечить негромоздкие формулы и правильные вычисления.

А всё-таки, кто что знает по поводу округлений? Это что, буржуйская диверсия? Может есть какая-нить переменная screw_russian_programmers_working_with_finances установленная в ноль вместо единицы, обеспечивающая бесполезность использования встроенного округления? Или они аксесс под статистику ваяли, гады? Или в америце это округление является стандартом в отличие от России?

PS Резюме-2 : тут кажись надо вынести отдельным форумом тему "бухгалтерские расчеты" ))))))) Как-то активно всё ушло в ту степь, значит - наболело %))))
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094140
Фотография Savik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Братцы, вы проги для себя пишете?
Если для себя, то как хотите, так и округляйте.
А если есть заказчик, хоть какой угодно левый, так, IMHO, у него и надо спросить, как ему округлять и суммировать. И если он сказал "люминь", то придется писать функции для округления, ничего не поделаешь.
Я как-то писал для округления до ТРЁХ ЗНАЧАЩИХ цифр. Нафига - не понятно, а что делать?
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094145
ДиД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
к Дену. а как Вы объясните своей функцией вот такой результат? Okr(5.595)= 5,59 . вообще-то должно быть 5,6
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094146
Seryoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не успел - @ВладК: а почему в сиквеле не рассматривался фиксед децимал? Я тоже нашел какой-то топик на том форуме, но кажись там кончилось тем, что резонно уперлись в децимал(2,0). У нас на сиквеле децимал используется, вполне корректно. Флоат, действительно, штука хитрая, но мани вроде как действительно хранятся не как флоат, а как фиксед, так что должны быть тоже предсказуемы (хотя проверить надо...). А вот если бы изменить принцип округления - тогда целочисленные были бы гораздо удобнее.
Самое обидоное что ни в какой литературе по аксессу я не могу найти ничего подробного ни по поводу хранения мани, ни по поводу округлений... Типа как оно есть - так и юзайте...
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094156
Seryoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@ Savik - Есть прихоти заказчика, а есть правила. В том числе правила округления в финансовой отчетности. А то так получается что для себя - это хоть goto пиши... К тому же вопрос не в принципах округления, тут может быть только правильно и всё остальное, а в том, как хранить данные. Или код программы по-вашему тоже предоставляет заказчик?

@ДиД - может Вы в курсе по поводу правил округления аксесса? Это непобедимо?
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094159
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для ДиД , а попробуйте okr(cdbl(5.695)) -)) будет 5.7.. Хрен его знает этот Access. Сейчас у нас уже все по другому..
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094187
ДиД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все уже давно решено. round пользоваться нельзя. все исследования выложены у Гетца "Программирование на VB и VBA" ,а вот его функция

Public Function okrug(Number As Variant, NumDigits As Long) As Double
Dim dblPower As Double
Dim varTemp As Variant
Dim intsgn As Integer
If Not IsNumeric(Number) Then
okrug = 0
Exit Function
'Err.Raise 5
End If
dblPower = 10 ^ NumDigits
intsgn = Sgn(Number)
Number = Abs(Number)
varTemp = CDec(Number) * dblPower + 0.5
okrug = intsgn * Int(varTemp) / dblPower

End Function
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094192
Seryoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно. Собственно - так и делаем...
Значит использование интегера особого смысла не имеет, а функции округленного умножения и деления при имеющейся функции округления сварганить несложно...
Остался один вопрос - мани ТОЧНО хранится как фиксед? Боюсь я этого аксесса...
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094259
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мани-это целое число, деленное на 10000. Я в нем штуки люблю хранить. Нахлебался с милионными.
Чо ты жалуешся на Round?
Напиши Round(X+0.5),(X+0.99), напиши чо хочешь.
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094263
Seryoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на раунд не жалуюсь тчк
просто он округляет статистически зпт
а мне нужно математически тчк

за мани спасибо тчк
...
Рейтинг: 0 / 0
Хранение сумм в копейках: какие мнения?
    #32094274
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Round(x-.5) - Это не то?
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Хранение сумм в копейках: какие мнения?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]