PDA

View Full Version : سوال: فیلتر کردن یک گزارش



Mehr@ban
جمعه 30 تیر 1396, 18:00 عصر
سلام

من میخوام محتویات یک گزارش رو با توجه به یک فرم فیلتر کنم
تصویر فرمی که اطلاعات رو میخوام فیلتر کنم عکس زیر هست:

145833

فیلدهایی که به صورت کمبو هستند در جدول هم دیتاشون ثبت شده منظورم همون (جنسیت و دوره و شیفت و سطح) هست. و در این مورد فیلتر رو پیاده سازی کردم و نتیجه رو گرفتم!

ولی در مورد اون بخشی که از نوع اپشن گروپ هست و با نام وضعیت مشخص شده، دیتایی در جدول و کوئری که گزارش رو ازش تهیه کردم نیست!
به تصویر زیر دقت کنید
145834
اول یه توضیحی در مورد اون رنگها بدم:

آبی: مجموع پرداختی ها هست.
قرمز: باقی مانده پرداختی کاربر. در این فیلد، موجودی فیلد آبی از مبلغ قابل پرداخت کسر خواهد شد و نتیجه در این فیلد قرمز قرار خواهد گرفت.
سبز: اگر موجودی فیلد قرمز کمتر از 0 باشد، موجودی این فیلد به "-1" تغییر میکنه(بدهکار)، اگر مساوی با 0 باشه، به "0" تغییر پیدا میکنه(تسویه) و اگر بیشتر از 0 باشه به "1" تغییر پیدا میکنه(بستانکار).



حالا من اون بخش وضعیت رو میخوام نسبت به داده فیلد سبز، فیلتر کنم

چیزی به ذهنم نمیرسه
لذا الکمک

mazoolagh
یک شنبه 01 مرداد 1396, 06:49 صبح
شرط فیلتر رو به همون سطح رکوردسورس ریپورت ببرین یعنی همون کوئری که گفتین
چون جدول پرداختها به جدول دانش آموزان مرتبط هست خیلی ساده با یک sum جمع پرداختها رو دارین و همونجا با "قابل پرداخت" مقایسه کنین

Mehr@ban
یک شنبه 01 مرداد 1396, 17:41 عصر
ممنونم
این تو ذهنم رسید
ولی در مرحله اجرا موندم
این کد رو باید کجا بنویسم و چجوری به اون فیلدش مرتبط کنم؟

mazoolagh
سه شنبه 03 مرداد 1396, 12:27 عصر
دیتا نمونه ؟؟؟

Mehr@ban
سه شنبه 03 مرداد 1396, 13:14 عصر
نمونه رو براتون میفرستم خصوصی
چون مقداری اطلاعات توش بود نخواستم اینجا بذارم

توی فرم چاپ
تب امور مالی قرآن آموز
بخش انتهایی

جنسیت رو پسر بزنید و دوره رو 1395/1396
دوتا فیلد دیگه لازم نیست به پر کردن
اون فرم اپشن هم قراره متصل بشه به همین گزارش که سوال بنده همین بخش هست.

mazoolagh
یک شنبه 08 مرداد 1396, 08:53 صبح
لازم نبود که کل دیتا رو بفرستید. ده-پونزده رکورد جدا میکردین و اسامی رو غیرواقعی میگذاشتین.
نمونه دیگه میگذارم ازش ایده بگیرین.

mazoolagh
یک شنبه 08 مرداد 1396, 11:16 صبح
چگونه برای تست برنامه های خود دیتا بسازیم:

Option Compare Database
Option Explicit
Public Function RandomX(Min As Long, Max As Long) As Long
RandomX = Int((Max - Min + 1) * Rnd + Min)
End Function
Public Function FillData()
CurrentDb.Execute "CREATE TABLE Persons (PersonID COUNTER PRIMARY KEY , Person CHAR(20))"
CurrentDb.Execute "CREATE TABLE Payments (PaymentID COUNTER PRIMARY KEY , PersonID LONG , Amount LONG)"
CurrentDb.Execute "CREATE TABLE Orders (OrderID COUNTER PRIMARY KEY , PersonID LONG , Amount LONG)"
Dim i, j As Integer
For i = 1 To 20
CurrentDb.Execute ("INSERT INTO PERSONS (Person) VALUES('PERSON " + Format(i, "000") + "')")
Next
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("PERSONS")
Dim PID As Long
Do While Not RS.EOF
PID = RS("PersonID")

j = RandomX(0, 6)
For i = 1 To j
CurrentDb.Execute ("INSERT INTO Payments (PersonID,Amount) VALUES(" & PID & "," & RandomX(1000, 100000) & ")")
Next

j = RandomX(0, 5)
For i = 1 To j
CurrentDb.Execute ("INSERT INTO Orders (PersonID,Amount) VALUES(" & PID & "," & RandomX(1000, 100000) & ")")
Next

RS.MoveNext
Loop
Set RS = CurrentDb.OpenRecordset("SELECT PersonID, Balance FROM Totals WHERE PersonID In (3,7,12,15,18)")
Do While Not RS.EOF
If RS("Balance") > 0 Then
CurrentDb.Execute ("INSERT INTO Orders (PersonID,Amount) VALUES(" & RS("PersonID") & "," & RS("Balance") & ")")
ElseIf RS("Balance") < 0 Then
CurrentDb.Execute ("INSERT INTO Payments (PersonID,Amount) VALUES(" & RS("PersonID") & "," & (-RS("Balance")) & ")")
End If
RS.MoveNext
Loop
RS.Close
Set RS = Nothing
End Function

mazoolagh
یک شنبه 08 مرداد 1396, 11:22 صبح
حالا کوئری های لازم رو میسازیم:


145913



145914


145915

mazoolagh
یک شنبه 08 مرداد 1396, 11:24 صبح
علامت فیلد balance رو برای تشخیص بدهکار بستانکار میشه استفاده کرد.

خروجی کوئری نمونه:
145916

mazoolagh
یک شنبه 08 مرداد 1396, 11:25 صبح
برنامه نمونه

Mehr@ban
سه شنبه 10 مرداد 1396, 11:54 صبح
نمیدونم چطوری تشکر کنم

اطلاعات زیادی از توضیحاتی که فرمودین بدست آوردم و چیزهای زیادی یادگرفتم که بابتش خیلی تشکر میکنم

تمامی آموزه های شما کاملا کاربردی بود و بهره بردم
ولی در تصویر زیر که باید توسط اون فرم یه گزارش رو برگردونم باید چطوری عمل کنم؟
http://barnamenevis.org/attachment.php?attachmentid=145833&d=1500645070
که با تعیین وضعیت فیلتر متناسبی اعمال بشه؟
حقیقتا مشکل من این مورد بود

باز هم تشکر میکنم بسیار

Mehr@ban
سه شنبه 17 مرداد 1396, 19:09 عصر
برنامه نمونه


خبری نشد دوست عزیز؟

Mehr@ban
پنج شنبه 02 شهریور 1396, 09:05 صبح
میشه همین روند رو روی نمونه فایل خودم پیاده کنید

با ساختار نمونه خودم هرکاری کردم نتونستم این چیزی که فرمودین رو پیاده کنم!