PDA

View Full Version : سوال: الگوریتم حساب اشخاص



niknam_mh
یک شنبه 16 فروردین 1394, 10:09 صبح
با سلام خدمت اساتید بزرگوار:
من یه نرم افزار با وی بی دات نت و اس کیو ال حدود 4 سال پیش نوشتم که همه حساب اشخاص رو درون یه جدول می ریزه و برا اینکه حساب شخصی رو بدست بیارم باید بدهی و بستانکاری شخص رو از اولین رکورد حساب کنه و از هم کم کنه که هم سرعت برنامه میاد پایین و هم باید مبالغ بالایی رو با هم جمع و تفریق کنه می خواستم بدونم که از چه الگوریتمی استفاده کنم که این مشکل حل بشه؟

Mani_rf
یک شنبه 16 فروردین 1394, 10:17 صبح
اصولا برنامه های حسابداری از همین روش استفاده میکنن. جمع زدن برای دیتابیس عملیات سنگینی نیست! اگر سرعت خیلی میاد پایین بجای این که بیزینس بنویسی توی خود SQL یک stp بنویس تا اون محاسبه کنه.

niknam_mh
یک شنبه 16 فروردین 1394, 10:28 صبح
اصولا برنامه های حسابداری از همین روش استفاده میکنن. جمع زدن برای دیتابیس عملیات سنگینی نیست! اگر سرعت خیلی میاد پایین بجای این که بیزینس بنویسی توی خود SQL یک stp بنویس تا اون محاسبه کنه.

ممنون داداش
پس همین روشی که الان نرم افزار داره باش کار می کنه درسته؟

reza_ali202000
شنبه 19 اردیبهشت 1394, 21:03 عصر
دقیقا منم همین مشکل رو دارم. برا بدهی و بستانکاری افراد میاد تمام خرید و فروشا و پرداخت دریافتا رو چک میکنه .....
بعضی اوقات یه دقیقه طول میکشه تا لیست افراد رو باز کنه.
یه جوری هم هس که نمیشه با استور پروسیجر نوشت.
توی فرم لود اومدم سه چارتا دیتاگیرید ویو گذاشتم و حساب همه رو لود میکنه. دونه دونه.
حالا به نظر دویتان چه راه حلی بنظرتون میرسه.

golbafan
شنبه 19 اردیبهشت 1394, 21:19 عصر
من نمیدونم مگه چقدر دیتا دارید که یک کوئری ساده اینهمه از شما زمان میبره؟؟؟
شایدم ایندکس گذاریتون درست نیست
در هر صورت این کار در برنامه هایی که من نوشتم (مثلا برای ایجاد صورت حساب اشخاص) کمتر از 5 ثانبه زمان میبره

مثال برای صورت حساب:

--mysql

set @sh:=1102033;
set @Balanc := 0;
select *,(@Balanc := @Balanc + bestankar - bedehkar) AS Balanced
FROM (SELECT * from roznameh where hesab_shomare=@sh) as v11

reza_ali202000
یک شنبه 20 اردیبهشت 1394, 01:17 صبح
این دستوری که نوشتین اخرین دستوری هس که اجرا میشه!
برای به دست آوردن بدهی و بستانکاری از 7 8 تا جدول باید داده برداری بشه و شروط مختلف!

golbafan
یک شنبه 20 اردیبهشت 1394, 14:22 عصر
این دستوری که نوشتین اخرین دستوری هس که اجرا میشه!
برای به دست آوردن بدهی و بستانکاری از 7 8 تا جدول باید داده برداری بشه و شروط مختلف!

بازم عرض میکنم:
احتمالا در طراحی بانکتون مشکل دارید

در حسابداری برای هر تراکنشی باید سند روزنامه ایجاد کنید و در نهایت فقط با استفاده از جدول روزنامه میتونید تمام کوئری هایی که نیاز دارید رو بزنید (فقط یک جدول)
البته این موقعی عملی میشه که جدول روزنامه شما درست طراحی شده باشه

reza_ali202000
دوشنبه 21 اردیبهشت 1394, 23:04 عصر
بازم عرض میکنم:
احتمالا در طراحی بانکتون مشکل دارید

در حسابداری برای هر تراکنشی باید سند روزنامه ایجاد کنید و در نهایت فقط با استفاده از جدول روزنامه میتونید تمام کوئری هایی که نیاز دارید رو بزنید (فقط یک جدول)
البته این موقعی عملی میشه که جدول روزنامه شما درست طراحی شده باشه
جدول روزنامه باید ویو باشه نمیتونه جدول باشه. چرا که در صورتی که اطلاعاتی رو تغییر دادیم خودکار توی روزنامه هم تغییر کنه.

niknam_mh
سه شنبه 22 اردیبهشت 1394, 09:30 صبح
سلام به نظر من برا حل این مسئله ساخت سال مالی خیلی کارآمد هستش ولی من هر چی در موردش فکردم نتیجه ای نگرفتم.

mehdi.fni
پنج شنبه 24 اردیبهشت 1394, 08:03 صبح
من نمیدونم مگه چقدر دیتا دارید که یک کوئری ساده اینهمه از شما زمان میبره؟؟؟
شایدم ایندکس گذاریتون درست نیست
در هر صورت این کار در برنامه هایی که من نوشتم (مثلا برای ایجاد صورت حساب اشخاص) کمتر از 5 ثانبه زمان میبره

مثال برای صورت حساب:

--mysql

set @sh:=1102033;
set @Balanc := 0;
select *,(@Balanc := @Balanc + bestankar - bedehkar) AS Balanced
FROM (SELECT * from roznameh where hesab_shomare=@sh) as v11


ضمن تشکر از دوستمون golbafan من از یک فیلد برای ثبت مبلغ که عدد منفی برای بستانکار و مثبت برای نشان دادن بدهکار استفاده کردم و همینطور تاریخ ثبت و شماره سند حالا چطور تو sql server select بنویسم که جدولم در هر سطر شامل شماره سند ، تاریخ ، مبلغ سند و ستون مانده حساب که محاسبه هر عدد مانده بایستی جمع نتیجه مانده سطر قبلی با مبلغ سند سطر فعلی باشه ؟ نتیجه باید شبیه این بشه


شماره سند

تاریخ سند

مبلغ سند

باقیمانده



1

94/01/01

1.000.000 بدهکار

1.000.000 بدهکار



4

94/01/16

200.000- بستانکار

800.000 بدهکار



6

94/01/20

500.000- بستانکار

300.000 بدهکار



12

94/02/01

200.000 بدهکار

500.000 بدهکار



17

94/02/05

700.000- بستانکار

200.000- بستانکار



با فرض اینکه فیلد شماره سند RNوتاریخ DSو مبلغ سند VS باشه کوئری آن چطور نوشته میشه ؟ لطفا من مبتدی اگه میشه راهنمایی کنید
با تشکر

gilsoft
پنج شنبه 24 اردیبهشت 1394, 13:56 عصر
سلام دوست عزیز

یه سر اینجا بزن : مانده در خط دفاتر (کل معین تفصیلی) (http://barnamenevis.org/showthread.php?450086)

موفق باشید .....

mehdi.fni
یک شنبه 27 اردیبهشت 1394, 11:25 صبح
سلام دوست عزیز

یه سر اینجا بزن : مانده در خط دفاتر (کل معین تفصیلی) (http://barnamenevis.org/showthread.php?450086)

موفق باشید .....
دوست عزیز ممنون از راهنمایتون ولی اونجا هم مشکل وجود داره و فیلدهای درستی انتخاب نشده
من مثال golbafan را درست میدونم ولی نمیدونم چرا در sql server همین مثال جواب نمیده مثلا خط
select *,(@Balanc := @Balanc + bestankar - bedehkar) AS Balanced کار نمیکنه و := که دیگه اصلا کار نمیکنه
ممنون میشم اگر دوستان مانند golbafan با مثالی با فیلدهایی که من ذکر کردم جوابم را بدهند

Hossis
سه شنبه 29 اردیبهشت 1394, 21:00 عصر
چرا از دستورات محاسباتی خود اسکیوال استفاده نمی کنید
مثلا
select sum (Forush)from table where UserId=56