פרק כב: עושים סדר: חלק א: אפיון מדיוק של המערכת, טפסים רציפים
המערכת שלנו בינתיים מסוגלת לכמה דברים, אבל לא מאורגנת בכלל.
נו, אז הגיע הזמן לעשות קצת סדר.
הזכרתי כבר שבמערכת אמיתית, שלב התכנון הוא הראשון, עוד בטרם ניגשים בכלל למחשב. פשוט לוקחים דף ועט ומציירים על הנייר. אין צורך לסרטט את הכל במחשב, לפחות לא בהתחלה. זה סתם מסרבל.
אז לאחר שישבתי וחשבתי, הגעתי לאפיון המופיע בסרטוט הבא:
תכנון מערכת תורמים.png
המלבנים מייצגים טפסים והסנפירים למטה מייצגים את הפונקציונאליות שאני מבקש בטפסים אלו.
את הדף הזה אני אתלה מול עיני בזמן הפיתוח, כך תהיה לי דרך סלולה ללכת בה, והכי חשוב: אני אדע ברור מתי כבר סיימתי. מעתה נשתדל להיצמד במדריך לאפיון הנ"ל.
אגב, את התרשים הנ"ל יצרתי בעזרת כלי נפלא בשם Draw.io. זהו כלי מדהים ליצירת תרשימי זרימה, סרטוטים ועוד, קל ונוח, עם אפשרות לעברית מלאה, וקיים בגרסא מקוונת או להורדה, והוא חינמי לחלוטין!
למי שעוקב אחרי ההדרכה, הנה הקובץ של הסרטוט
תוכלו להכניס בו שינויים כרצונכם.
סדר הפיתוח הנכון
אני מאוד ממליץ להתחיל לבנות את המערכת מלמטה למעלה, כלומר קודם כל לבנות את הרבדים הנמוכים של המערכת, ומשם לטפס למעלה.
נתחיל ברגל ימין עם צד ימין של המשפחות.
ציינתי שיש שם טופס שמציג את רשימת המשפחות.
מה אני רוצה שיראו בו?
כמובן את פרטי המשפחה, ולפי האפיון, גם את סיכום התרומות למשפחה.
לשם כך ניצור שאילתת עזר, שתקבץ את הנתונים של התרומות לפי משפחה.
שלב א: יצירת שאילתת סיכום תרומות למשפחה
נפתח שאילתה חדשה, נהפוך לשאילתת קיבוץ, נייבא את טבלת התרומות, ונגדיר את השדות לתצוגה באופן הבא:
111fce0b-4441-4b5b-8dc0-f96431911c52-תמונה.png
נשמור את השאילתה בשם qryFamily_DonationSummary
שלב ב: יצירת השאילתת הבסיס לרשימת המשפחות:
השאילתה הזו תושתת על צירוף של שתי השאילתות שיצרנו:
שאילתה א: שמות המשפחה המלאים: qryFamily_FullName
שאילתה ב: סיכום התרומות למשפחה: qryFamily_DonationSummary.
נתבונן ונשים לב, שעלינו לצרף אותן בצירוף חיצוני, כי למרות שכל המשפחות מופיעות בשאילתה א (שמות המשפחה המלאים), שהרי היא מבוססת על טבלת המשפחות, יתכן ויש משפחה שלא תופיע בשאילתה ב (סיכום התרומות למשפחה), מפני ששאילתה ב מבוססת על טבלת התרומות, ותכיל רק משפחות שכבר יועדו להן תרומות.
להלן מבנה השאילתה:
4381e74d-38c4-4ad1-ae73-5b1bc9d1c284-תמונה.png
נשמור את השאילתה בשם: qryFamily_FullName_DonationSummary
כעת הכל מוכן ליצירת טופס רשימת המשפחות.
תצוגת גליון נתונים .VS תצוגת טפסים רציפים
לאקסס יש שתי אפשרויות להציג רשומות מרובות בטופס יחיד:
תצוגת גליון נתונים
תצוגת טפסים רציפים
תצוגת גליון נתונים מציגה את הנתונים בטבלה פשוטה, בדומה לגליון אקסל. ולמרות שלעתים זה מספק, לרוב נרצה להשתמש בתצוגת טפסים רציפים, שמאפשרת גמישות רבה יותר.
בואו נראה:
נסמן את השאילתה שיצרנו, ונבחר מתפריט העיצוב: "טפסים נוספים" > "פריטים מרובים". אקסס תיצור טופס ותפתח אותו בתצוגת פריסה:
8dea77e7-3cb1-490f-a7e7-cd59908ebbe8-תמונה.png
נעבור לתצוגת עיצוב, ונראה כי באמת הטופס מחולק לשלושה חלקים (בדומה לדוח בפרק שעבר):
78033e6c-202e-4d64-9b38-620aedb0aa20-תמונה.png
כותרת עליונה: משמשת בעיקר להצגת
כותרות העמודות
פירוט: מציג את הרשומה הנוכחית
כותרת תחתונה: בה נשתמש להצגת
סיכומי העמודות
הערה: למרות שחלק הפירוט מראה שורה אחת בלבד, כשנעבור לתצוגת טופס יוצגו בפירוט כל הרשומות. כל עיצוב שנבצע בחלק זה - ישפיע על כל שורה ושורה בתצוגת הטופס.
שלב ג: הוספת סיכום עמודות
בואו ונרחיב את החלק של הכותרת התחתונה של הטופס, על ידי גרירה מטה של הגבול:
2e0f9a4c-6c8d-4b8c-8ba9-b4b3d8020365-תמונה.png
כעת נוסיף שם שלוש תיבות טקסט לא מאוגדות, ותווית אחת עם הכיתוב "סיכום", כפי שמופיע בתמונה הבאה:
c23abceb-8b10-4b98-b32a-c8772615b7f8-תמונה.png
בכל אחת מתיבות טקסט אני רוצה שיופיע סיכום של כל העמודה שמעליה.
אבל לפני כן אנחנו חייבים לטפל בדבר חשוב.
מי אני ומה שמי?
לאקסס יש הרגל מגונה לתת לפקד מאוגד בטופס שם זהה לשם השדה בטבלה שאליו הוא מאוגד. למשל, תיבת הטקסט של שם המשפחה קיבלה את השם FullFamilyName, שזהה בדיוק לשם השדה FullFamilyName בטבלה שעליה מבוסס הטופס.
בכך אקסס גורמת לי חוסר ודאות כמפתח המערכת, האם FullFamilyName מתייחס לתיבת הטקסט או לשדה בטבלה? וחוסר ודאות - זה מתכון מצוין לבעיות....
לשם כך אני תמיד רגיל ביצירת טופס להפריד בין השניים, ולשנות את שם הפקד המאוגד לשם שונה משם השדה, על ידי הוספת קידומת מיוחדת לשם הפקד, לפי סוג הפקד.
לדוגמא:
לתיבת טקסט אני אוסיף קידומת "txt"
לתווית אני אוסיף קידומת "lbl"
לתיבה משולבת אני אוסיף קידומת "cbo" וכו'
זוהי אמנם עבודה מעט מרגיזה, אבל כמו תמיד, היא משתלמת מאוד כשמתחילים להוסיף קוד בטופס.
לשם כך אני אשנה את שמות ארבע תיבות הטקסט המאוגדות בחלק הפירוט של הטופס, לפי הטבלה הבאה:
שם קודם
שם חדש
ID
txtID
FullFamilyName
txtFullFamilyName
TotalDonationCount
txtTotalDonationCount
TotalDonationAmount
txtTotalDonationAmount
על ידי כניסה למאפיינים של הפקד (בלשונית "אחר" או בלשונית "הכל") והוספת הקידומת "txt" לשם הפקד, לדוגמא:
d5d811da-d78a-48ed-a438-aa277d4ab3bf-תמונה.png
הערה: יש הנוהגים להוסיף סיומת לשם הפקד (במקום קידומת) דהינו FullFamilyNameTextBox וכו', זה בהחלט אפשרי, אך לטעמי מסורבל יותר. והבוחר יבחר.
למעשה, היינו צריכים להנהיג הנהגה זו כבר מתחילת המדריך, מהטופס הראשון שעשינו, אך נמנעתי מלהזכיר זאת עד עתה, פן ינחם העם בראותם מלחמה...
על כל פנים, מעתה זו תהיה הנחת היסוד: מכאן והלאה לבצע את שינוי השם לכל שדה מאוגד בטופס.
את הטיפול בכל הטפסים הקודמים נשאיר לשיעורי הבית (מסכן @בערל...)🤣
סיימתם?
כעת נוכל לבנות את הנוסחא לסיכום העמודות, נתחיל עם עמודת שמות המשפחה, שם אנו רוצים להציג את מספר המשפחות בטופס. נבחר את תיבת הטקסט שבכותרת התחתונה של העמודה של שמות המשפחה:
d9a8af94-90b8-4b06-9f0d-2371ed68923e-תמונה.png
במאפייני הפקד, בלשונית "נתונים" בחרו את המאפיין "מקור הפקד" ולחצו על שלושת הנקודות כדי לפתוח את בונה הביטויים:
bc9be0a5-7aa4-48bd-955a-6b1c9bbd25e5-תמונה.png
הקלידו בבונה את הנוסחה הבאה:
Count(ID)
עברו לתיבת הטקסט בתחתית העמודה השנייה, ושם תכניסו באותו אופן את הנוסחה:
Sum(TotalDonationCount)
ובתיבה האחרונה את הנוסחה:
Sum(TotalDonationAmount)
שנו גם את תבנית העיצוב של תיבה זו ל"מטבע":
7a72548e-95ed-4785-bd82-a4322167eaa6-תמונה.png
שלב ד: קצת קוסמטיקה:
כבר הזכרתי שאני משתדל להימנע מלמרוח את הזמן על עיצובים, אך לפעמים זה פשוט נותן הרגשה טובה ונעימה יותר להמשיך בפיתוח, אז אני חורג מהרגלי פה ושם. עם זאת, אני משתדל לא להתפתות להתחיל לשנות את עיצוב כל הטפסים במערכת בשלב זה, כדי שלא להיתקע על קו עיצוב מסויים ולהיות משועבד לו מכאן ואילך, בפרט כשלרוב מחליטים לשנות אותו בהמשך...
בחרו את כל הפקדים בכותרת התחתונה, ושנו את סגנון הרקע לשקוף, ואת צבע הכתב לשחור, עם סגנון מודגש:
11fbe8c7-634d-4d39-986a-ffdc39f04505-תמונה.png
לחצו על הפס האפור שעליו כתוב "כותרת תחתונה בטופס", והגדירו את צבע הרקע לתכלת:
13d6e378-ee6c-4d5f-8ccc-24be69b10d1b-תמונה.png
שנו גם הכותרת הראשית ואת תוויות הכותרת של העמודות לעברית.
כעת עברו לתצוגת טופס, ושימו לב כי מופיעים סיכומים של העמודות בתחתית הטופס:
36361dad-7192-4261-852b-0b90e2949e98-תמונה.png
שלב ה: הוספת לחצנים לפונקציונאליות של הטופס
כיוון שבא לידינו עיצוב טופס זה, נוסיף לו עוד שלושה לחצנים, אחד בכותרת העליונה להוספת משפחה למערכת, ושנים בחלק הפירוט: אחד לפתיחת כרטיס המשפחה ואחד למחיקת המשפחה מהמערכת (את הפונקציונאליות שלהם נממש בהמשך)
נחזור לתצוגת עיצוב.
בתפריט העיצוב, נבחר את לחצן הפקודה מסרגל הפקדים:
26d8ab9b-42f4-4af9-a521-4e057847c6df-תמונה.png
נקליק בכותרת העליונה של הטופס במקום שבו אנו רוצים ליצור את הלחצן:
3744000f-8a19-4268-83cc-91520a94a7f3-תמונה.png
אקסס תיצור לחצן עם השם "פקודהXX" ותפתח את אשף לחצני הפקודות, שאליו נסרב להתייחס ופשוט נסגור אותו בנימוס, על ידי לחיצה על "ביטול":
1258d4e3-9014-4dfc-876c-19b75bc92bd3-תמונה.png
האשף הנ"ל מציע ליצור עבורנו פקודות מאקרו לבניית הפונקציונאליות של הלחצנים, אך אנו נכתוב זאת בעצמנו על ידי קוד VBA בהמשך.
נשנה את שם הלחצן ל cmdNewFamily ואת הכיתוב עליו ל"משפחה חדשה":
55353fca-5237-4369-bc98-25a0094d5df7-תמונה.png
נוסיף עוד שני לחצנים בחלק הפירוט של הטופס, אחד מימין בראש השורה, בשם cmdOpenFamilyCard ועם הכיתוב "הצג", ואחד משמאל בסוף השורה בשם cmdDeleteFamily עם הכיתוב "מחק":
9c07f54d-717c-4053-bae9-fa24027ddfef-תמונה.png
כעת אין צורך בבוררי הרשומות ולחצני הניווט של הטופס, אז בואו נסיר גם אותם (בחרו קודם בפקד הטופס, בפינה השמאלית העליונה, זוכרים?)
6a4d2224-b1a0-476a-b112-7cd21b483ef6-תמונה.png
והנה הטופס המוכן, אחרי עוד כמה קנעטשים:
dd771665-459d-4eb7-adfc-bd0667ae511e-תמונה.png
בפרק הבא ניצור גם את טופס כרטיס המשפחה, ונוסיף פונקציונאליות ללחצנים שיצרנו היום.