powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / округление сумм
36 сообщений из 36, показаны все 2 страниц
округление сумм
    #32589559
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть такая беда...


есть кубы водопотебления, которые далеко не целые, дробные т.е.
есть отчет для отдела льгот и субсидий...

кубы льгота тариф возмещение
5.00 50% 0.73 1,825
6.75533554 75% 0.73 3,69854620815

ребята из этого отдела, ни в какую не желают видеть знаков больше 2 после запятой, но приэтом желают чтобы вычисления при пересчете на калькуляторе были верны...
т.е. в отчете все суммы в формате ### ##0.00, а на самом деле за частую там по 12 знаков после запятой, как следствие ошибки в копейки при суммировании по вертикале...



Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
округление сумм
    #32589597
Jenek111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а в чем проблема то.. храни числа с плавающей точкой, а в отчетах представляй. хоть с двумя знаками хоть с десятью. а деньги считать нужно с исходных данных...
...
Рейтинг: 0 / 0
округление сумм
    #32589686
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В MS AS 2000 даже есть формат для отображения числа
...
Рейтинг: 0 / 0
округление сумм
    #32589814
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не вы не поняли ;)

отчет показвает с двумя знаками...
а тёти берут и складывают числа, чтобы поглядеть не нае...ли ли мы их... и результат не сходится с итоговым...

GEK_NAME WATER_V

Частный сектор 9,855
ЖЭУ №1 1,095
ЖЭУ №4 1,095
ООО "Цидило К" 2,19
ЖСК №22 2,43333333333333
ЖСК № 33 1,38448275862069
ООО "Арагорн" 2,19

итого: 20,242816091954

а теперь берем цифры из отчета, округленные и складываем
9,86
1,1
1,1
2,19
2,43
1,38
2,19
---------
20,25

разница в 1копейку...
это ужасный удар по бюджету г.Чойбалсана и всей Монголо-Татарии в целом...
идиоту понятно что результат 20,242816091954 точный, но бабули привыкли считать все с двумя цифрами, не удивлюсь если у них даже калькуляторы стоят на округлении...

короче как это лечить...

Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
округление сумм
    #32589895
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ork Yasonкороче как это лечить...
Бабулек?
...
Рейтинг: 0 / 0
округление сумм
    #32589916
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
их уже не вылечишь ;)
а бить не красиво ;)

мне как быть?
щас округляю, дык, это пока канает, они полезут дальше и вылезет что уже по горизонтале не получается...
ну не обяснишь им что цифирок после запятой бывает намного больше чем две...

Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
округление сумм
    #32590119
Николай МВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
их уже не вылечишь ;), а бить не красиво ;)

Никого не надо ни бить, ни лечить. Открою Вам страшную тайну: бабульки правы! Погодите меня бить или лечить. :) Дочитайте. Приведу все на примере, который сам меня в этом убедил когда-то:
На группу работников назначили премию в сумме, ну допустим, 1 руб. 00 коп. И поступило указание распределить эту премию всем одинаково. А группа состоит из трех человек.
Математика:
1 руб. разделить на 3 чел.
равно:
Первый чел. - 33.33333333333(3) коп.
Второй чел. - 33.33333333333(3) коп.
Третий чел. - 33.33333333333(3) коп.
Итого: 1 руб. 00 коп.
Ура! Сошлось! Как не считай, всегда сойдется! Математика -- абсолютно точная наука! Но как всегда для жизни бесполезная... :)

Потому, что когда мы эти данные выведем в отчет, где должны фигурировать только копейки, получится следующая картина:
Первый чел. - 33 коп.
Второй чел. - 33 коп.
Третий чел. - 33 коп.
Итого: 0 руб. 99 коп.

Бухгалтерия:
1 руб. разделить на 3 чел.
равно:
Первый чел. - 33 коп.
Второй чел. - 33 коп.
Третий чел. - 34 коп.
Итого: 1 руб. 00 коп.

Нашел! Здесь прекрасно описано!

А вообще конечно можно объяснить, что это проблема всеобщая и пугаться ее не надо. Вылезла копейка -- убрали ее бухгалтерской справкой, списали на ошибки округления -- и все балансы и отчеты прекрасно сойдутся. Или вариант вручную добавить/убрать копейку в документе "Раздача премиии". Впрочем сделать скрипт, который будет таким образом исправлять документы автоматически -- это тоже хороший вариант. Т.е. просматривать содержимое документа и сумму документа и преобразовывать документ типа (33+33+33=100) в документ (33+33+ 34 =100).
Но в каждой организации законы разные, где-то не обратят внимания, где-то исправят, а где-то придется обрабатывать по полной программе...
...
Рейтинг: 0 / 0
округление сумм
    #32590623
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПервый чел. - 33.33333333333(3) коп.
Второй чел. - 33.33333333333(3) коп.
Третий чел. - 33.33333333333(3) коп.
Итого: 1 руб. 00 коп.

ну для начала компутеру не известен период, так что результататом будет 99.9999999999
но при округлении и демонстрации в отчете 1рупь ;)

но это не важно...
то что вы привели для раздела премии понятно - но как мне научит это делать компутер?
есть 100куб на дом, и их нужно разделить на 68чел... при том что раздел проводится для каждого человека, а не всем скопом...
ну да ладно, это мелочи...

у нас эти 4цифры - это как закон... ну такие долбанутые тарифы в 73коп... и еще проценты льгот в 50 и 75...
стила бы вода раз в 10больше - таких бы проблем не было...

Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
округление сумм
    #32591232
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а счета людЯм тоже бум выставлять с точностью до 5-го знака после запятой?
Типа, заплати, родной, полкопейки, и спи спокойно?
Как на мой взгляд (так и поступили) - провели разъяснение, что эти итоговые суммы складываются из сумм нижнего уровня (по ЛС). Хотите - проверьте, там всё точно. Верят. Но отчеты детальные требуют :-) Предоставляем.
...
Рейтинг: 0 / 0
округление сумм
    #32591241
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ваще!
А если у меня чел выписался 2-го числа, и льготу ему надо начислять на 2 дня из 31? а если челы у меня постоянно прописываются/выписываются? мы чо - возьмем итоговую цифирку и попробуем чо-нить на чо-нить поделить? ну дык "Чо-нить" и получим.
А ежели чел был прописан тогда, когда воды не было, и начислений(а значит и льготы) ему не положено? опять делить бум? а ежели вода была, но не полным напором? тоже делить? чо на чо? или подтвердим просто итоговую сумму детальными начислениями и на том успокоимся?

P.S. Эк меня проняло - помню еще годы боевые борьбы и всё такое....
...
Рейтинг: 0 / 0
округление сумм
    #32591464
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2locky
о! тоже сантехник? ;)

а мы счета и так выставляем по полной цифре...
округляем правда на экранчике ;)
но салды и прочая по полной считаются...

в том то и дело что не хотят детальных... я уже предлагал давайте я вам один раз намалюю знаков 10 после запятой, вы сядите посчитаете и успокоитесь... так нет! лень считать...

в общем понятно, общественно разъяснительная работа...
за это мне не платят ;(



Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
округление сумм
    #32591505
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, из-за того, что у Вас цифирки расходятся они Вам и не верят?
типа 12 требований по 10 рублёв, а за год выходит 120 рублёв 2 копейки(набежали неотображаемые кусочки)? Складываем в столбик - получаем фигу?
Может такое быть? наверное.
У меня всё проще. Есть объем, есть тариф, есть сумма. Считается один раз. И сумма по всем начислениям это не Сумма объемов помноженная на тариф, а сумма посчитанных сумм. И всё всегда сходится.
...
Рейтинг: 0 / 0
округление сумм
    #32591919
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
цифирки не сходятся при сложении округленных сумм в ручную... на 1коп... плюс минус... ито не всегда...
им же нужно чтоб было все один в один...
авторУ меня всё проще. Есть объем, есть тариф, есть сумма. Считается один раз. И сумма по всем начислениям это не Сумма объемов помноженная на тариф, а сумма посчитанных сумм. И всё всегда сходится.
такой анекдот у нас не пройдет...
есть справка реализации, так вот там сумма кубов умноженная на тариф = будет сумма денег...
один раз я показал какой тариф у воды без ндс 0.73/1,2 и больше тупых вопросов не было...

но это с моими работниками, а в УТСЗН я так понимаю работаю самые отъявленные пенисонеры...

округляя цифры в списках на возмещение - я ввожу заведомо ошибку, в масштабах 8тыщ льготников, разница уже не копейка, думаю рупь набежит...

Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
округление сумм
    #32592348
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то у вас всё запущено... Реализовали то вы что? Услугу населению/предприятиям, на общую сумму - вот, каждому выставили требования, и каждую продажу вы можете подтвердить начислениями. Это и есть ваша реализация. А всё остальное - от лукавого. То, что "Оптом" вы продали бы эти услуги за другие немного деньги - никого не должно интересовать. (правда, как доказать, что это их не должно интересовать - вопрос еще тот :-( ).
Это ж как торговля оптом и в розницу, аднака.
А по справке реализации.... объем... помножим на тариф... а ежели у меня начисления по нескольким тарифам? тады показываем несколько строк... а ежели у меня перерасчеты по разным тарифам за разные периоды?
Однажды я продемонстрировал, как исходя из простых операций с перерасчетами получить тариф в 2 раза меньший или в 2 раза больший чем любой из зарегестрированных.

P.S. А система где стоит? Каковы ТТХ? К-во ЛС, объем, скоростные х-ки? Ежели не секрет.
...
Рейтинг: 0 / 0
округление сумм
    #32592816
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы - это наши желания. Зигмунд Фрейд
авторЭто и есть ваша реализация. А всё остальное - от лукавого
к сожалению я не работаю в Харьковском водоканале... думаю мы б сработались ;)
авторпомножим на тариф... а ежели у меня начисления по нескольким тарифам? тады показываем несколько строк... а ежели у меня перерасчеты по разным тарифам за разные периоды?

начисления по разным тарифам...
сгруппировано, вот по этим группам все и перемножается и проверяется...
так было до меня, так пришлось сделать и мне...
а биться головой о плановый отдел мне надоело еще полтора года назад... ;)
авторежели у меня перерасчеты по разным тарифам за разные периоды?

такого к счастью нет...
да и перерасчеты в эту группу проверяемых не попадают...
авторP.S. А система где стоит? Каковы ТТХ? К-во ЛС, объем, скоростные х-ки? Ежели не секрет.
в смысле где стоит? в конторе на сервере...
интервася 6... клиентов штук 10-15...
дело было давно... щас бы оракла с удовольствием водрузил ;)
база на 700мб...
населения 45тыщ ЛС и организаций около тыщи...
самая громоздкая операции пересчет начисления за месяц... макс 2минуты для тех же 45тыщ абонентов...

PS давай лучше перейдем на мыло... а то кроме нас двоих это никому не интеерсно...
[email=]yarik666@ukr.net
...
Рейтинг: 0 / 0
округление сумм
    #32594214
Николай МВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем переходить на мыло -- я например слежу за темой и мне это интересно.
Иногда хочется дать пару советов, но понятно, что здесь вопросы привязаны к конкретной схеме работы организации, к бумажкам и к людям. А на oracle переходить смысла нет -- время потеряете, а выигрыш на такой маленькой базе будет незаметен.

Хотя бы ключевые моменты описывайте -- мне интересно, а там может и подскажу чего....
...
Рейтинг: 0 / 0
округление сумм
    #32594266
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я слышал, что по закону например в счёт фактуре цифры должны сходиться и по горизонтали и по вертикали, если нет - "преступление". :-)
ссылку дать не могу, но наверно это надо учесть :-)

вечное IMHO
...
Рейтинг: 0 / 0
округление сумм
    #32594604
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Николай МВ
да в общем обсуждаем особенности внутреннего устройства организаций...
а вот чего делать так и не решили ;)
24d_monster
вот и мене чего-то кажется, что все должно сходится...
вот тока как это сделать с точностью два знака не предствляю даже...

Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
округление сумм
    #32596301
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня не водоканал - водоотведение, что, впрочем, почти однофигственно.
Задачи юрлиц и физлиц разделены
юрлиц - порядка 7500, физлиц - ~500000, объем базы физлиц ~79Gb,
при начислениях учитываются к-во проживающих, норма потребеления, графики подачи холодной и горячей воды, показания индивидуальных счетчиков, коллективных счетчиков, к-во льготников, категория льготы, состояние ЛС (подключен, отключен, временно отключен). Все параметры ведутся с дискретностью до 1-го дня. Глубина перерасчета - не ограничена.
В случае отсутсвия показаний счетчика в течении 3-х месяцев считается по средним показаниям,далее по норме.
Аналитики начислений и перерасчетов ведется с точностью до 1-го дня.
Имеется импорт данных из банков (квитанции, показания счетчиков), импорт
субсидий, экспорт начислений для отделов субсидий, единого расчетного центра и т.п. Есть модули сопряжения для взаимозачетов с предприятиями.
Цикл начислений занимает около 3.5 часов.
Юзеров - порядка 40, из них 20 инженеров по работе с населением, 7-8 - оплата, субсидии, должники и т.д., 3 аналитика. Обслуживает всё это дело 2 администратора.
Данные хранятся с 2000 года, наша система работает там с марта прошлого года, т.е. год и 4 месяца.
Железо - 2PIIIx1.4GHz, 2Gb RAM, RAID5x3+RAID0x2
MS SQL Server 2000, клиент - Delphi5+ADO
Вот так вот вкратце.
...
Рейтинг: 0 / 0
округление сумм
    #32596539
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
...
Рейтинг: 0 / 0
округление сумм
    #32596610
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2locky
а чего мой ответ не дошел?
повторяю... ;)


Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
округление сумм
    #32597170
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ork Yason
По поводу перерасчета: это у тебя 45 000 ЛС за 2мин. расчитывает, можно поинтиресоватся это ты как так прописал что быстро считает, у меня конечно объемы не такие т.е. далеко не такие как у Вас с locky работаем под всякие ТСЖ, а это у каждого 1-5 домов вообщем примерно 100 ЛС расчитывает от 5 до 10сек.

По поводу округления: а в самой базе нельзя обрезать до 2-х знаков?
...
Рейтинг: 0 / 0
округление сумм
    #32597515
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2DIGITALPRO
авторработаем под всякие ТСЖ
ТСЖ - это чего?
авторэто у тебя 45 000 ЛС за 2мин. расчитывает, можно поинтиресоватся это ты как так прописал что быстро считает

да я б не сказал что быстро...
сервак 1.7атлон, 512мб, винты обычные АТА100 7200... даже без 8метрового кеша...

могу триггер-процедуру выложить который пересчитывает...
но там задолбаешься разъясниять, так что если сильно интересно, то могем...
автор100 ЛС расчитывает от 5 до 10сек
а чего за характеристики по подробней могешь сказать?
может поможем чем...

авторПо поводу округления: а в самой базе нельзя обрезать до 2-х знаков?
тогда ни один внутренний очет сходится не будет... им перемножать кубы на тариф любимое дело...

Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
округление сумм
    #32597741
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТСЖ - товарищество собственников жилья

По поводу моего расчета: делается на клиенте, машина 1.8 256М винты тоже обычные

На самом деле я никогда не видел программы по расчету коммунальнх услуг, поэтому вылепил все на свое усмотрениие, вот и думаю может все построенно неправильно и поэтому так долго, может скините какую нибудь схему базы

Округление, а Ваш клиент не подразумевает каких нибудь функций округления
Либо по простому integer(X*100)/100 и сумма по столбцу будет правильной
...
Рейтинг: 0 / 0
округление сумм
    #32597856
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2DIGITALPRO
авторТСЖ - товарищество собственников жилья

так вы чего все там считаете и комуслуги, и воду, и свет и тепло???
авторможет скините какую нибудь схему базы

у меня щас вода...
в свое время писал аналогичное для комунальных услуг...

так что кое-какой опыт есть...
уж лучше вы свое давайте, ибо наше млжет вам не подойти... толку от моей воды, если вы ее не считаете...
авторОкругление, а Ваш клиент не подразумевает каких нибудь функций округления
Либо по простому integer(X*100)/100 и сумма по столбцу будет правильной
это не мой клиент...
это наши возместители расходов на льготы...
да нефига они в этом не понимают...
они привыкли окурглять как в школе учили, а как это делает компьютер их мало волнует...
хотим чтолб усе складывалось и было правильно, а то что нас точность и тарифы их мало волнует...

я отдельную функцию округления написал, в интервасике нет ничего подходящего...

авторделается на клиенте
клиент - это плохо...
от сель и скачем...
процедурку нужно написать и запускать ее на сервере... и все будет ок...

Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
округление сумм
    #32597955
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
так вы чего все там считаете и комуслуги, и воду, и свет и тепло???
и газ и тепло и .... , считаем все и льготы

Код: plaintext
уж лучше вы свое давайте
У Вас есть ASA 6.0, если да то могу выслать свою версию

Код: plaintext
процедурку нужно написать и запускать ее на сервере... и все будет ок...
У таких организаций нет сервака, уних только 1 комп, 1 Руководитель, 1 Бух., 1-2 сантехника плотника электрика


По поводу моих расчетов
Есть справочники:
Услуги
Объекты
Типы льгот

Услуга настраивается пользователем + указывают на какой объект она распространяется + указывают какая льгота действует на данную услугу
При расчете
->Курсор услуг
-> Курсор объектов подпадающих под данную услугу
...............
-> Курсор прописанных в данном объекте
...............
-> Курсор Всех льгот действующих на данную услугу и имеет ли прописанный такую льготу
................
Это конечно все в краце
Сама суть понятна???
Может предложите какаото другой агоритм
...
Рейтинг: 0 / 0
округление сумм
    #32597996
Фотография UK0IAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в каких случаях - я использовал алгоритм который после вычисленией с максимальной точностью делает проверку итоговой суммы (точной) и сравнивает ее с итогом_ через_округленные_ значения.

Полученную погрешность - тупо пишет в первую или в последнею строку (колонку), так - чтобы пересчет округленных значений выдывал правильную сумму.
...
Рейтинг: 0 / 0
округление сумм
    #32598118
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется, на SQL.RU кто-то приводил превосходный способ ускорения подобных масс-обработок. А может, еще где. Берусь повторить, потому что это должен знать каждый ;-)

Дело в том, что, как правило, такого рода расчеты начинают делать по каждому лицевому счету. В самом деле, что может казаться естественнее: сделать цикл по всем счетам, внутри цикла для каждого счета выполнить запрос(ы), выбирающий(е) всякие коэффициенты, рассчитать сумму, сохранить результат по этому счету за этот период, и так далее.
Пусть у нас 100 счетов, и нужно выполнить 3 запроса, чтобы последовательно посчитать суммы, например, за газ, воду и электричество, затем сложить их и получить общую сумму. Ну, очень грубый пример. Получим 1 запрос на выборку счетов, возвращающий 100 записей; 100*3=300 запросов, возвращающих промежуточные суммы, каждый по одной записи, и 100 запросов на запись итогов (insert).

А ведь можно считать и по-другому: выполнять по одному запросу для расчета каждой промежуточной суммы, но сразу по всем счетам. Тогда мы будем иметь 3 запроса, возвращающих каждый по 100 записей, 1 запрос на запись 100 записей (в первый раз, за газ, например) и 3 запроса по 100 записей на изменение этих записей (за воду, за электричество и вычисляющий общую сумму) - тоже грубо - ведь, например, общую сумму можно вычислять вместе с заполнением последней промежуточной суммы, да и вообще сделать insert ... select ... ;-) Что быстрее: много маленьких запросов или немного больших?

Если на практике все сложнее, и по разным счетам разный порядок расчета, все равно можно выделить группы.
...
Рейтинг: 0 / 0
округление сумм
    #32598126
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, забыл указать, что мой предыдущий пост - это ответ на побочно всплывший вопрос о том, почему у одних считается быстро, а у других долго, а не по основной теме округления ;-)
...
Рейтинг: 0 / 0
округление сумм
    #32598243
Фотография vma_mnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общего решения проблемы округления в таком виде нет.

Мы тоже столкнулись с такой проблемой.

Приходит уголь по ЖД квитанциям. Сумма ЖД квитанции - это ROUND(Количество * Цена,2).

Прикол в том, что в с/фактуре квитанций много, а марка угля одна. И в фактуре это выглядит так ROUND(SUM(Количество)*Цена, 2).

Пришлось написать отдельную функцию, которая вычисляла сумму фактуры с учетом необходимой группировки.

Ну и разьяснительная работа - подобрал пример, где расхождение большое, и предложил написать свой вариант, как надо. После нескольких дней безуспешных попыток собственно и родилась такая функция.
...
Рейтинг: 0 / 0
округление сумм
    #32598260
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня начисления происходят по схеме, которую прблизительно описал Urri - за один проход считается один компонент начислений для группы лицевых счетов (я использую группы по 2500 - вычисленно эмпирически).
Хотя есть моменты, когда открывается тупой курсор и идет перебор лицевых счетов - когда производится сворачивание начисленных сумм и объемов в пределах неизменности параметров. Пробовал сначала одним запросом - курсор оказался быстрее, за счет ненадобности построения достаточно большой внутренней временной таблицы.

если допустить, что у нас есть перечень услуг с нормами расход услуги на единицу людей и ценой этой услуги, что все лицевые счета всегда пользуются следующими услугами, то алгоритм начислений выглядит вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
set nocount on
 /*опорная таблица дат*/ 
declare @date table(date datetime primary key)

declare @df datetime,@dt datetime,@d datetime
 /*период начислений*/ 
set @df = '20000101' set @dt = '20000201'
set @d = @df while @d < @dt begin insert into @date(date) values(@d) set @d = @d+ 1  end
 /*таблица услуг*/ 
declare @service table(id int,df datetime,dt datetime /*период дейтсвия нормы и цены*/ 
,norm float /*норма услуги*/ ,price float /*цена услуги*/  primary key(df,dt,id))
insert into @service values ( 1 ,'19000101','21000101', 10 , 2 )
insert into @service values ( 2 ,'19000101','21000101', 5 , 4 )
 /*лицевые счета*/ 
declare @accs table(acc int /*номер счета*/ ,Amount int /*к-во проживающих*/ ,df datetime,dt datetime  /*период проживания*/ 
primary key(acc,df))
insert into @accs values( 1 , 2 ,'20000101','20000115')
insert into @accs values( 1 , 1 ,'20000116','20000201')
insert into @accs values( 2 , 3 ,'20000101','20000201')
 /*проводим начисления*/ 
select	Acc,S.ID as Service,D.date,A.Amount,ServiceAmount=S.Norm*A.Amount/(datediff(day,@df,@dt))
from	@accs a join @date D on A.df <= D.date and D.date <= A.dt
	join @service S on S.df <= D.date and D.date <= S.Dt
на выходе получаем подневный расчет каждой услуги на каждый лицевой счет. просуммировав данные в пределах неизменности параметров получаем собственно начисления.
Аналогичным образом считается льгота, только в качестве услуги используется регистрация льгот, а в качестве опорной суммы - проведенные ранее начисления.
Добавляя по вкусу разные дополнительные таблицы связи (не забывая при этом о периоде наличия связи) между ЛС и услугой, ЛС и графиком подачи воды, ЛС и показаниями счетчика - можно изменять начисленную сумму.

2Ork
Как показано выше, я провожу начисления за известный месяц, поэтому предварительно рассчитать недостающие показания счетчиков проблемы не представляет. на текущий момент представляет проблему то, что это происходит достаточно медленно :-(
...
Рейтинг: 0 / 0
округление сумм
    #32598473
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Можно еще перейти к более мелким единицам измерения. Например, считать не в кубометрах, а литрах. Пусть считают литры с точностью до двух знаков.
...
Рейтинг: 0 / 0
округление сумм
    #32599075
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2DIGITALPRO
усе счиатем?
ну тогда возможно это и нормальная скорость...
можно попробовать оптимизировать запросы...
может методу чуть поменять...
а дайте как свою структуру таблиц, с кратким описанием...
авторУ таких организаций нет сервака, уних только 1 комп, 1 Руководитель, 1 Бух., 1-2 сантехника плотника электрика

ну если техника на селероны 500 то думаю скорость должна быть приемлимой...
авторУслуга настраивается пользователем
типа справочник услуг, а потом в соответствии с кодом выбирается алгоритм?

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

если в вас так как я понял, то это и есть сущесвенная разница в скорости... у меня проход только один раз...
берется строка, запускается триггер, из него процедурка, она все высчитывает, и берется другая строка...

2Urri
по теме перевобор согласен... сам проводил сравнение...
пример...
есть процедурка, она берет дом, и находит всех товарищей и товарищей у кого есть канализация... плюс всякая мелочовка в подсчетах...
по началу я написал две селекта и был доволен...
но в масштабах всего города при 45тыщ ЛС было около 2млн запросов к таблице начислений...
сделал общйи селект на весь дом, берется строчка, если есть канализация, то х++, сложил чего нужно куму нужно и так по всему дому...
итого в два раза стало меньше дурного дерганья винта...
2locky
авторКак показано выше, я провожу начисления за известный месяц, поэтому предварительно рассчитать недостающие показания счетчиков проблемы не представляет. на текущий момент представляет проблему то, что это происходит достаточно медленно :-(
а у нас до сих пор плановая экономика...
закрытие месяца по начислениям в конце 20х чисел...
ибо так хочется плановому отделу... а то что еще не все заплатили - это фигня...
кубы по водомерам мы узнаем тока из квитанций, оплату в большенстве случаев вводим после того как месяц по начислениям уже закрыт...
короче ситуация когда приходит товарищ, платит все по водомеру, а у него долг - это обычная практика...
2Cat2
а цена то на куб!
куб стоит 73 коп...
литр 0.73/1000...
хотя как вариант точности самого водопотребления подходит...
но для льгот кубы не важны... им деньги нужны...

Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
округление сумм
    #32600603
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ork Yason
На самом деле, это чисто административная проблема. Пусть начальник издаст приказ, что бы бухи ститали воду с точностью до одной миллионной куба, а не до одной сотой. Начальнику пофиг. Подмахнет неглядя. Он же может издать приказ, что при внутрениих расчетах потребление считать в литрах, а цену установить в размере 73 коп. за 1000 литров. Так же главбух может подготовить приказ по учетной политике, при которой ошибки округления относятся на внереализационные прибыли (убытки).

Мой совет. С этой проблемой надо выходить на руководство. И аргументировано доказывать свою правоту. Математического решения НЕТ.
...
Рейтинг: 0 / 0
округление сумм
    #32600614
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, у нас тоже значительная часть сведений поступает после того, как проведены начисления. но это не проблема - всегда можно сделать перерасчет.
А вот как касаются оплаты к начислениям - выше моего понимания (точнее, в пределах понимания, но не для этой ситуации).
У меня раздельно закрывается движение по дебету (начисления, перерасчеты) и отдельно по кредиту (оплаты и т.д.).
Движение по кредиту не может быть закрыто ранее 1-го числа, т.к. отчеты по поступлению оплаты сверяются с банковскими выписками по дням за месяц.
Начисления у нас проводятся где-то 3-4 числа. Можно было бы и 1-го, но 2-3 поступают данные о горячей воде. С целью свести к минимуму перерасчеты начисления проводятся только после получения этих сведений.
Показания по водомеру у нас вводятся как оператором (после приема по телефону) так и импортируются из тех же квитанций ЕРЦ.
Ежели у товарища есть должок - говорит показания, девочка щелкает мышкой и товарищу пересчитывается. Обычно уходит довольный.
...
Рейтинг: 0 / 0
округление сумм
    #32600796
Фотография Ork Yason
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Cat2

я согласен что административная трабла...
но сие не моя организация...
моих все устаривает...
а вот в УТСЗН сидят не пробиваемые бабыги...

2locky
авторА вот как касаются оплаты к начислениям - выше моего понимания
да это же элементарно!
там показания счетчиков...
авторЕжели у товарища есть должок - говорит показания, девочка щелкает мышкой и товарищу пересчитывается. Обычно уходит довольный.
та ну, это так быстро и не интересно...
у нас нужно контроллера вызвать на дом, он собственноручно проверит, а потом тока даст добро на перерасчет...
и это при том что контроллеров не хватает...
короче, это цирк ;)
я им это твержу третий год, а они мне про то что тут так всегда было и так и надо...

Мы - это наши желания. Зигмунд Фрейд
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / округление сумм
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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