PDA

View Full Version : سوال: مشکل در محاسبه مانده حساب



linktaz
چهارشنبه 06 مرداد 1389, 22:19 عصر
با عرض سلام و خسته نباشید خدمت دوستان عزیز.
من یه مشکل در محاسبه مانده حساب دارم که اونو توی فایل اکسس ضمیمه کردم،اگر ممکنه کمکم کنید
بعدی وقتی مبلغ بدهکار رو وارد کردم ،اونو با مانده قبلی(به جز سطر اول که مانده قبلی نداره) جمع کنه و از بستانکار کم کنه و نشون بده،اگر هم این محاسبات داخل یه فیلد جدید وارد شد ایرادی نداره.واسه اینکه راحتتر منظورم رو متوجه بشید اونو توی اکسل هم گذاشتم و ضمیمه کردم.ممنونم.

hoshy345
جمعه 08 مرداد 1389, 22:30 عصر
با سلام
فایل شما اصلاح شد

alirezabahrami
شنبه 09 مرداد 1389, 10:51 صبح
با سلام
فایل شما اصلاح شد
سلام
ضمن تشكر از جناب hoshy345 در كد زير بجاي علامت + از علامت - استفاده شود.


VarMande = VarMande + (rst.Fields("bedehkar") - rst.Fields("bestankar"))

ضمناً براي مشاهده نتيجه بعد از وارد نمودن اعداد ، بعد از next از دستور Me.Requery استفاده كن!
موفق باشيد

linktaz
شنبه 09 مرداد 1389, 19:41 عصر
سلام.ممنونم همونی شد که می خواستم.فقط یه نکته.
با توجه به اینکه مانده در جدول من ذخیره نمیشه چطوره میتونم از اون گزارش تهیه کنم؟
چطوری میتونم تو جدولم این مجاسبه رو ذخیره کنم؟

alirezabahrami
یک شنبه 10 مرداد 1389, 05:48 صبح
سلام.ممنونم همونی شد که می خواستم.فقط یه نکته.
با توجه به اینکه مانده در جدول من ذخیره نمیشه چطوره میتونم از اون گزارش تهیه کنم؟
چطوری میتونم تو جدولم این مجاسبه رو ذخیره کنم؟
سلام
چرا ذخیره میشه ، مجدداً امتحان کن!
موفق باشید

aimaz57
یک شنبه 24 مرداد 1389, 12:53 عصر
سلام خیلی پرکابرد بود متشکر ولی میشه به استفاده از تیبل و یه ریپورت نمونه بذارین
منظور حذف فرم هاست البته اگه راه داره
مرسی:متفکر:

hmdrzy
یک شنبه 14 شهریور 1389, 16:54 عصر
سلام،
اگر امكان داره قسمتي از كد را كه باعث ذخيره شدن مانده در جدول ميشه براي بنده توضيح بدين. در ضمن متغيرهاي S و Y چه نقشي در اين كد دارند.

masoodi6
جمعه 03 خرداد 1392, 09:30 صبح
سلام اگه میشه نمونه بزارین
سلام
چرا ذخیره میشه ، مجدداً امتحان کن!
موفق باشید

sadegh1944
یک شنبه 04 دی 1401, 17:17 عصر
سلام
در نمونه بالا مانده حساب از طریق فرم در جدول محاسبه و انجام میشد.
حالا اگه من خواسته باشم این مانده حساب را در کوئری داشته باشم لطفا کد رو بگونه ای اصلاح کنید که بتوان با فیلتر شماره حساب در کوئری، ستون مانده کوئری هم بصورت خودکار اصلاح شود.
ترجیحا ستون مانده در نمونه ذیل اصلاح شود.
و یا یک تابع یا متغییری تعریف شود که مانده حساب در کوئری نمایش داده شود

eb_1345
یک شنبه 04 دی 1401, 19:44 عصر
سلام
در نمونه بالا مانده حساب از طریق فرم در جدول محاسبه و انجام میشد.
حالا اگه من خواسته باشم این مانده حساب را در کوئری داشته باشم لطفا کد رو بگونه ای اصلاح کنید که بتوان با فیلتر شماره حساب در کوئری، ستون مانده کوئری هم بصورت خودکار اصلاح شود.
ترجیحا ستون مانده در نمونه ذیل اصلاح شود.
و یا یک تابع یا متغییری تعریف شود که مانده حساب در کوئری نمایش داده شود
سلام
در کوئری بجای کد قبلی محاسبه مانده از کد زیر استفاده کن !


mande2: Sum(DSum("bedehkar","table1","id<=" & [id] & "")-DSum("bestankar","table1","id<=" & [id] & ""))

یا علی

sadegh1944
دوشنبه 05 دی 1401, 14:39 عصر
سلام
در کوئری بجای کد قبلی محاسبه مانده از کد زیر استفاده کن !


mande2: Sum(DSum("bedehkar","table1","id<=" & [id] & "")-DSum("bestankar","table1","id<=" & [id] & ""))

یا علی

باسلام
بله میشه از این فرمول استفاده کرد، ولی پردازش داده ها با استفاده از فرمانهایی نظیر Dsum و ِDlookup بویژه در کوئری هایی که حجم اطلاعات در حال پردازش زیاد بوده و دارای عملیات محاسباتی جمع و تفریق و ازین قبیل می باشد دارای محدودیت بوده و بسیار با تاخیر و به کندی انجام میشود. نظر من بجای Dsum استفاده تابع sum است که البته نیاز به کد نویسی دارد. به همین خاطر اگر کد نمونه بالا برای کوئری اصلاح شود خیلی بهتر خواهد بود.

mazoolagh
سه شنبه 06 دی 1401, 16:08 عصر
نفس کار نادرست هست؛
محاسبات انباشته (مثل همین running total یا شماره ردیف) برای ریپورت هست که رکوردها پشت سر هم پردازش میشن.
در فرم میشه مثل همین نمونه اینجا انجام داد، ولی چون در فرم بصورت منطقی تعداد رکوردهایی که باهاش سروکار داریم محدود هست توابع aggregate مشکلی ندارن.
مثلا در ثبت یک سند یا فاکتور فروش یا حواله انبار تعداد رکوردها از چند ده تا رد نمیشه و این کد کند نیست (البته خام هست و نیاز به اصلاح داره).
حتی تا چند هزار رکورد هم نباید مشکل سرعت داشته باشه.


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

راه بهتر اینه که یک رکوردست forwardonly بازکنین و محاسبات رو روی اون انجام بدین.

در sql تمهیداتی دیده شده که این کار رو خیلی راحت میکنه که در اکسس نداریم.

eb_1345
سه شنبه 06 دی 1401, 20:50 عصر
باسلام
بله میشه از این فرمول استفاده کرد، ولی پردازش داده ها با استفاده از فرمانهایی نظیر Dsum و ِDlookup بویژه در کوئری هایی که حجم اطلاعات در حال پردازش زیاد بوده و دارای عملیات محاسباتی جمع و تفریق و ازین قبیل می باشد دارای محدودیت بوده و بسیار با تاخیر و به کندی انجام میشود. نظر من بجای Dsum استفاده تابع sum است که البته نیاز به کد نویسی دارد. به همین خاطر اگر کد نمونه بالا برای کوئری اصلاح شود خیلی بهتر خواهد بود.
سلام
اگه میخوای ستون مانده رو بدون استفاده از Sum و DSum بدست بیاری و در جدول هم ذخیره بشه از فانکشن زیر استفاده کن:


Function RunMandeh(TableName As String, FieldName1 As String, FieldName2 As String, Fieldid As Long) As Double
On Error Resume Next
Dim rst As Recordset
Dim VarMande As Double
Set rst = CurrentDb.OpenRecordset("SELECT * FROM " & TableName & " WHERE id<=" & Fieldid)
rst.MoveLast
rst.MoveFirst
VarMande = 0
For I = 0 To rst.RecordCount - 1
VarMande = VarMande + (rst.Fields(FieldName1) - rst.Fields(FieldName2))
rst.Edit
RunMandeh = VarMande
rst.Fields("mande") = VarMande
rst.Update
rst.MoveNext
Next I
rst.Close
Set rst = Nothing
End Function