@שמואל
יש לי טבלאות כדלהלן
- עיסקאות תשלומים
- הוראות קבע
- כרטיסי אשראי
אני רוצה להציג עבור כל עיסקה את צורת התשלום שלה
זאת אומרת אם תשלום העיסקה הוא ע"י כרטיס אשראי אז טבלת הבן תהיה כרטיס אשראי ולחילופין עם תשלום העיסקה היא בהוראת קבע
מה הדרך
אפילו פיתרון חלקי יעזור
תודה מראש
ע"י קוד?
נניח שיש לך 2 טפסים שאמורים להיות טפסי משנה
frmSubMasav = משנה להו"ק
frmSubCreditCard = משנה לאשראי
נניח גם שהשדה המחזיק את סוג התשלום (אשראי או הו"ק) נקרא FeeVia.
ויש לך טופס עם פקד טופס משנה בשם SubForm.
אתה צריך לעשות באירוע Form_Current (שנקרא בכל פעם שיש מעבר לרשומה אחרת) את הקוד הבא:
Private Sub Form_Current()
Select Case Me!FeeVia
Case 1
' אם זה הוראת קבע
Me!SubForm.SourceObject = "frmSubMasav"
Me!SubForm.LinkMasterFields = "IDHok"
Me!SubForm.LinkChildFields = "IDHok"
Case 2
' אם זה אשראי
Me!SubForm.SourceObject = "frmSubCreditCard"
Me!SubForm.LinkMasterFields = "IDCCredit"
Me!SubForm.LinkChildFields = "IDCCredit"
Case Else
' כאן תחליט מה קורה אם זה לא אשראי או הוק
Me!SubForm.SourceObject = ""
Me!SubForm.LinkMasterFields = ""
Me!SubForm.LinkChildFields = ""
End Select
End Sub
אם אתה משתמש בתצוגת גליון נתונים (עם סימן הפלוס בצד) שים לב שכשעוברים מרשומה לרשומה הוא ישנה את הטופס משנה, ואז יכול להיות מצב שבהו"ק הוא יציג טופס משנה של אשראי, אם הנתונים הם לקריאה בלבד, ללא צורך בשינויים, הייתי מציע לעשות שאילתת UNION כך:
SELECT ID, Price, Bla, Bla, Bla, "הוק" AS FeeType FROM TblMasav
UNION ALL
SELECT ID, Price, Bla, Bla, Bla, "אשראי" AS FeeType FROM TblCreditCard
מטרת הUNION היא להציג תוכן של טבלה אחת, ומיד אחריה את השנייה.
שים לב שאפשר להשתמש בUNION שמחזיר רק רשומות ייחודיות שעדיין לא הוחזרו מטבלאות קודמות, וUNION ALL שיחזיר בכל מקרה את כל התוצאות מכל הטבלאות.
בנוסף, באפשרותך לצרף יותר מ2 טבלאות. (יש לי מקרה שצירפתי אפילו 8 טבלאות)
הדבר שאתה חייב להקפיד עליו בשאילתת איחוד (UNION) זה שכמות השדות בכל הטבלאות חייבת להיות זהה.
בהצלחה....
עריכה:
אם אתה מדבר על הו"ק, יש דבר שעשיתי עם שאילתת UNION שאני חושב שיוצר תצוגה ויזואלית מאד נוחה.
הוספתי 2 שדות בטבלת ההעברות מסב, שדה אחד בוליאני שמחזיק אם הייתה חזרה, ושדה של סכום עמלה. (יש עוד אחד של סיבת חזרה, אבל לא ממש קשור לכאן)
ואז יצרתי שאילתת UNION כזו:
SELECT ID, Price, "הוק" AS FeeType FROM TblMasav
UNION ALL
SELECT ID, -Price, "חזרת הוק" AS FeeType FROM TblMasav WHERE Return=True
UNION ALL
SELECT ID, ReturnPrice, "עמלת חזרת הוק" AS FeeType FROM TblMasav WHERE Return=True And nz(ReturnPrice,0)<>0
מה שגורם שכשיש חזרת הו"ק, מספיק לסמן את הV ב"חזר", ואם יש עמלה גם את סכום העמלה, ואז מקבלים מאותה הטבלה גם את השורה של ההעברה, גם את החזרה במינוס (שים לב לסימן המינוס לפני הסכום) וגם שורה נוספת של עמלת החזרה. זה יוצר ללקוח תחושה של דפי בנק בלי באמת ליצור תנועות מיותרות.
פורסם במקור בפורום CODE613 ב12/01/2014 21:43 (+02:00)