יצירת דוחות
-
אז כמו שידוע לכם אני כותב תוכנית פשוטה לניהול תרומות (לא ח"ו כדי להתחרות באף אחד בפורום, אלא כדי ללמוד..)
כרגע יש בה 4 מסכים: 1. הזנת תורמים. 2. הצגת רשימת התורמים. 3. שמירת הנתונים. 4. טעינת הנתונים. כל אלה ב"ה עובדים ואני מרגיש ממש ילד גדול :lol:
אני רוצה להוסיף עוד מסך שיטפל ביצירת דוחות: כמה תורמים פעילים יש, כמה תורמים תרמו סך מסוים במצטבר/חד פעמי, אלו תורמים הפסיקו לתרום וכן על זה הדרך. כלומר במסך הזה אני רוצה שהמשתמש יוכל לבצע שאילתות על הנתונים שהוא הזין לתכנית (כרגע אני בכוונה לא עובד עם דטהבייס, כדי ללמוד איך עושים זאת בצורה רגילה. ==> אם זה נראה לכם מיותר, ועדיף ישר ללמוד להשתמש בSQL אז תגידו לי שלא אבזבז את זמני לריק..).
אני מבין שבשביל זה אני צריך להשתמש בLINQ to Object.
השאלה שלי היא: איך מומלץ לעשות זאת:
נניח שאני רוצה לאפשר לו לבצע את השאילתות הבאות (זה כרגע מה שעולה לי בראש):
הצג את כל התורמים הפעילים
הצג את כל התורמים הלא פעילים (והצג כמה תרמו בסה"כ, ובמשך כמה זמן תרמו סכום זה)
הצג את כל התורמים שהפסיקו לתרום לפני חצי שנה (או כל תקופה אחרת שהמשתמש מגדיר)
הצג את כל התורמים שתרמו בפעם אחת לפחות 1000 ₪ (או כל סכום אחר שהמשתמש מזין)
הצג את כל התורמים שהייתה להם הו"ק (בבנק או באשראי) עד לפני זמן מסויים, והפסיקו?
הצג את כל התורמים שהתרומה שלהם מסתיימת החודש
הצג את כל מי שתרם בין התאריכים הנ"ל
הצג את כל מי שתרם בין התאריכים הנ"ל סכום מסוים
הצג את סכום התרומה המצטבר של פלוני
הצג את הסכום המצטבר של פלוני עם פירוט במשך כמה חדשים תרם, ומהו הסכום החדשי (אם מדובר בסכום משתנה - פרט)
הצג את כל התורמים שתרמו בצורה חד פעמית ואת הסכום שתרמו (אם תרמו כמה פעמים חד פעמית - הצג את כל הפעמים שתרמו ואת הסכום המצטבר)אני לא שואל איך לממש זאת בקוד - את זה אני אשבור את הראש לבד :lol:
השאלה שלי איך כדאי להציג זאת למשתמש בטופס. האם לבנות פקדים כמספר הפונקציות הנ"ל והמשתמש צריך ללחוץ על הכפתור הרצוי. (זה נראה לי קצת מגביל אותו ואותי (כיון שנניח ויהיו לי אח"כ עוד שאילתות - אז אצטרך לעצב את הטופס מחדש ולהוסיף לו פקדים.. וגם זה נראה לי לא כ"כ יפה).
או שיש דרך לתת לו להזין את השאילתה ושאני אדע לפענח אותה ולהתאים את הקוד למה שהוא מזין?פורסם במקור בפורום CODE613 ב06/07/2015 15:30 (+03:00)
-
לשם כך קיימים טפסי חיפוש עם פרמטרים לחיפוש ובדומה לכך ניתן ליצור פרמטרים לדוחות כשהתוצאה זה בעצם שורות עם הפרטי תורמים בגריד (אם הבנתי נכון)
יש פה טופס כזה לדוגמא זה אומנם מסך חיפוש סטנדרטי אבל אפשר פשוט לשים את השדות המתאימים וליצור את השאילתה ולקבל את התוצאות אם באמת לכל השאילתות אמורה להתקבל אותו סוג רשומה
ועדיף לעשות עם קישור לדטה בייס חבל על הזמן עם הלינק זה אומנם נחמד לדעת אבל הרבה יותר חשוב דטה בייספורסם במקור בפורום CODE613 ב06/07/2015 15:57 (+03:00)
-
אם הבנתיך נכון, אתה נותן טופס שבו המשתמש יכול להכניס איזה פרמטר שהוא רוצה (כמובן כל אחד בתא המתאים)
ואז כשהוא לוחץ על חיפוש, אתה לוקח את הערכים שהוא הזין ועל פי זה בונה את השאילתא
(לדוגמא, אם הוא הזין רק את הקוד אתה נותן לו את כל הערכים שמופיע בהם הקוד הזה, וכן על זה הדרך).
אני צריך לחשוב על זה לראות אם זה מספיק לי לכל הצרכים שלי.. אבל זה נשמע פשוט וחכם!!פורסם במקור בפורום CODE613 ב06/07/2015 17:00 (+03:00)
-
בהתאם למה שהוצע לעיל, רציתי להרחיב מעט,
מעט ארוך, אולי לא מתקדם,
אבל זה מה שיש לי ממה שהכנתי לפני זמן רב.
מצורף דוגמא - צילום מסך:מצורף דוגמא - קוד לעדכון רשימה - תצוגת רשימה:
Public Function Rahema1() 'פותח טקסט Text1 = "SELECT [רשימת הזמנות].[קוד הזמנה], [רשימת הזמנות].[" & [מיין לפי] & "] AS מיין, " 'טקסט רשימה Text2 = " [רשימת הזמנות].[קוד הזמנה] AS הזמנה, [רשימת הזמנות].[קוד לקוח] AS לקוח, [רשימת הזמנות].פרטים, [רשימת הזמנות].כתובת, [רשימת הזמנות].קומה, [רשימת הזמנות].[תאריך הזמנה], [רשימת הזמנות].[תאריך הזמנה עברי], [רשימת הזמנות].[הוזמן לתאריך], [רשימת הזמנות].[הוזמן לתאריך עברי], [רשימת הזמנות].[סופק בתאריך], [רשימת הזמנות].[סופק בתאריך עברי], [רשימת הזמנות].לתשלום, [רשימת הזמנות].שולם, [רשימת הזמנות].הקפה, IIF([קוד לקוח], DLookUp('[הקפה]','[רשימת אנשי קשר]','[קוד]=' & [קוד לקוח])) AS [הקפת לקוח], [רשימת הזמנות].מצב, DCount('[שורה]','[פרטי הזמנה - רשימת הזמנה]','[קוד הזמנה]=' & [קוד הזמנה]) AS ש_הזמנה, DCount('[שורה]','[פרטי הזמנה - רשימת הספקה]','[קוד הזמנה]=' & [קוד הזמנה]) AS ש_הספקה FROM [רשימת הזמנות] " 'סינון בסיס Text3 = "WHERE (((IIf([FORMS]![רשימת הזמנות]![הצג הכל]=-1,""הצג"",IIf([מצב]=""בהזמנה"" And [FORMS]![רשימת הזמנות]![בהזמנה]=-1,""הצג"",IIf([מצב]=""בוצע"" And [FORMS]![רשימת הזמנות]![בוצע]=-1,""הצג"",IIf([מצב]=""בוטל"" And [FORMS]![רשימת הזמנות]![בוטל]=-1,""הצג"",IIf([מצב]=""מושהה"" And [FORMS]![רשימת הזמנות]![מושהה]=-1,""הצג"",""""))))))=""הצג"")" 'סינן תאריכים Text4 = IIf([סוג סינון] = "בין תאריכים", " AND ([רשימת הזמנות].[" & [אפשרות סינון] & "]) Between [forms]![רשימת הזמנות]![מתאריך] AND ([forms]![רשימת הזמנות]![עד תאריך])) ", IIf([סוג סינון] = "מתאריך", " AND ([רשימת הזמנות].[" & [אפשרות סינון] & "])>=[מתאריך])", IIf([סוג סינון] = "עד תאריך", " AND ([רשימת הזמנות].[" & [אפשרות סינון] & "]<=[עד תאריך])) ", ")"))) 'סינון סה לתשלום If ([סוג סינון סה לתשלום] = "ללא סינון") Then Text5 = "" End If If ([סוג סינון סה לתשלום] = "שווה ל...") Then Text5 = " AND (([רשימת הזמנות].[לתשלום]) Like [FORMS]![רשימת הזמנות]![סה לתשלום-1]) " End If If ([סוג סינון סה לתשלום] = "גדול מ...") Then Text5 = " AND (([רשימת הזמנות].[לתשלום]) > [FORMS]![רשימת הזמנות]![סה לתשלום-1]) " End If If ([סוג סינון סה לתשלום] = "קטן מ...") Then Text5 = " AND (([רשימת הזמנות].[לתשלום]) < [FORMS]![רשימת הזמנות]![סה לתשלום-1]) " End If If ([סוג סינון סה לתשלום] = "בין...") Then Text5 = " AND (([רשימת הזמנות].[לתשלום]) Between [FORMS]![רשימת הזמנות]![סה לתשלום-1] And [FORMS]![רשימת הזמנות]![סה לתשלום-2]) " End If 'סינון סה שולם If ([סוג סינון סה שולם] = "ללא סינון") Then Text6 = "" End If If ([סוג סינון סה שולם] = "שווה ל...") Then Text6 = " AND (([רשימת הזמנות].[שולם]) Like [FORMS]![רשימת הזמנות]![סה שולם-1]) " End If If ([סוג סינון סה שולם] = "גדול מ...") Then Text6 = " AND (([רשימת הזמנות].[שולם]) > [FORMS]![רשימת הזמנות]![סה שולם-1]) " End If If ([סוג סינון סה שולם] = "קטן מ...") Then Text6 = " AND (([רשימת הזמנות].[שולם]) < [FORMS]![רשימת הזמנות]![סה שולם-1]) " End If If ([סוג סינון סה שולם] = "בין...") Then Text6 = " AND (([רשימת הזמנות].[שולם]) Between [FORMS]![רשימת הזמנות]![סה שולם-1] And [FORMS]![רשימת הזמנות]![סה שולם-2]) " End If 'סינון הקפה If ([סוג סינון הקפה] = "ללא סינון") Then Text7 = "" End If If ([סוג סינון הקפה] = "שווה ל...") Then Text7 = " AND (([רשימת הזמנות].[הקפה]) Like [FORMS]![רשימת הזמנות]![הקפה-1]) " End If If ([סוג סינון הקפה] = "גדול מ...") Then Text7 = " AND (([רשימת הזמנות].[הקפה]) > [FORMS]![רשימת הזמנות]![הקפה-1]) " End If If ([סוג סינון הקפה] = "קטן מ...") Then Text7 = " AND (([רשימת הזמנות].[הקפה]) < [FORMS]![רשימת הזמנות]![הקפה-1]) " End If If ([סוג סינון הקפה] = "בין...") Then Text7 = " AND (([רשימת הזמנות].[הקפה]) Between [FORMS]![רשימת הזמנות]![הקפה-1] And [FORMS]![רשימת הזמנות]![הקפה-2]) " End If 'מיון Text8 = "ORDER BY [רשימת הזמנות].[" & [מיין לפי] & "]" & [מיון עולה יורד] & ";" 'מחברת טקסט רשימה Text9 = Text1 & Text2 & Text3 & Text4 & Text5 & Text6 & Text7 & Text8 'מעדכן רשימה [רשימת הזמנות].RowSource = Text9 'מעדכן שדה איתור [שדה איתור].RowSource = Text9 ' מרענן רשימה DoCmd.RunCommand acCmdRefreshPage End Function
מצורף דוגמא - קוד ליצירת רשימה - עבור דוח:
Public Function Rahema2() 'פותח טקסט Text1 = "SELECT [רשימת הזמנות].[" & [מיין לפי] & "] AS מיין, " 'טקסט רשימה Text2 = " [רשימת הזמנות].[קוד הזמנה] AS הזמנה, [רשימת הזמנות].[קוד לקוח] AS לקוח, [רשימת הזמנות].פרטים, [רשימת הזמנות].כתובת, [רשימת הזמנות].קומה, [רשימת הזמנות].[תאריך הזמנה], [רשימת הזמנות].[תאריך הזמנה עברי], [רשימת הזמנות].[הוזמן לתאריך], [רשימת הזמנות].[הוזמן לתאריך עברי], [רשימת הזמנות].[סופק בתאריך], [רשימת הזמנות].[סופק בתאריך עברי], [רשימת הזמנות].לתשלום, [רשימת הזמנות].שולם, [רשימת הזמנות].הקפה, [רשימת הזמנות].מצב INTO [דוח הזמנות] FROM [רשימת הזמנות] " 'סינון בסיס Text3 = "WHERE (((IIf([FORMS]![רשימת הזמנות]![הצג הכל]=-1,""הצג"",IIf([מצב]=""בהזמנה"" And [FORMS]![רשימת הזמנות]![בהזמנה]=-1,""הצג"",IIf([מצב]=""בוצע"" And [FORMS]![רשימת הזמנות]![בוצע]=-1,""הצג"",IIf([מצב]=""בוטל"" And [FORMS]![רשימת הזמנות]![בוטל]=-1,""הצג"",IIf([מצב]=""מושהה"" And [FORMS]![רשימת הזמנות]![מושהה]=-1,""הצג"",""""))))))=""הצג"")" 'סינן תאריכים Text4 = IIf([סוג סינון] = "בין תאריכים", " AND ([רשימת הזמנות].[" & [אפשרות סינון] & "]) Between [forms]![רשימת הזמנות]![מתאריך] AND ([forms]![רשימת הזמנות]![עד תאריך])) ", IIf([סוג סינון] = "מתאריך", " AND ([רשימת הזמנות].[" & [אפשרות סינון] & "])>=[מתאריך])", IIf([סוג סינון] = "עד תאריך", " AND ([רשימת הזמנות].[" & [אפשרות סינון] & "]<=[עד תאריך])) ", ")"))) 'סינון סה לתשלום If ([סוג סינון סה לתשלום] = "ללא סינון") Then Text5 = "" End If If ([סוג סינון סה לתשלום] = "שווה ל...") Then Text5 = " AND (([רשימת הזמנות].[לתשלום]) Like [FORMS]![רשימת הזמנות]![סה לתשלום-1]) " End If If ([סוג סינון סה לתשלום] = "גדול מ...") Then Text5 = " AND (([רשימת הזמנות].[לתשלום]) > [FORMS]![רשימת הזמנות]![סה לתשלום-1]) " End If If ([סוג סינון סה לתשלום] = "קטן מ...") Then Text5 = " AND (([רשימת הזמנות].[לתשלום]) < [FORMS]![רשימת הזמנות]![סה לתשלום-1]) " End If If ([סוג סינון סה לתשלום] = "בין...") Then Text5 = " AND (([רשימת הזמנות].[לתשלום]) Between [FORMS]![רשימת הזמנות]![סה לתשלום-1] And [FORMS]![רשימת הזמנות]![סה לתשלום-2]) " End If 'סינון סה שולם If ([סוג סינון סה שולם] = "ללא סינון") Then Text6 = "" End If If ([סוג סינון סה שולם] = "שווה ל...") Then Text6 = " AND (([רשימת הזמנות].[שולם]) Like [FORMS]![רשימת הזמנות]![סה שולם-1]) " End If If ([סוג סינון סה שולם] = "גדול מ...") Then Text6 = " AND (([רשימת הזמנות].[שולם]) > [FORMS]![רשימת הזמנות]![סה שולם-1]) " End If If ([סוג סינון סה שולם] = "קטן מ...") Then Text6 = " AND (([רשימת הזמנות].[שולם]) < [FORMS]![רשימת הזמנות]![סה שולם-1]) " End If If ([סוג סינון סה שולם] = "בין...") Then Text6 = " AND (([רשימת הזמנות].[שולם]) Between [FORMS]![רשימת הזמנות]![סה שולם-1] And [FORMS]![רשימת הזמנות]![סה שולם-2]) " End If 'סינון הקפה If ([סוג סינון הקפה] = "ללא סינון") Then Text7 = "" End If If ([סוג סינון הקפה] = "שווה ל...") Then Text7 = " AND (([רשימת הזמנות].[הקפה]) Like [FORMS]![רשימת הזמנות]![הקפה-1]) " End If If ([סוג סינון הקפה] = "גדול מ...") Then Text7 = " AND (([רשימת הזמנות].[הקפה]) > [FORMS]![רשימת הזמנות]![הקפה-1]) " End If If ([סוג סינון הקפה] = "קטן מ...") Then Text7 = " AND (([רשימת הזמנות].[הקפה]) < [FORMS]![רשימת הזמנות]![הקפה-1]) " End If If ([סוג סינון הקפה] = "בין...") Then Text7 = " AND (([רשימת הזמנות].[הקפה]) Between [FORMS]![רשימת הזמנות]![הקפה-1] And [FORMS]![רשימת הזמנות]![הקפה-2]) " End If 'מיון Text8 = "ORDER BY [רשימת הזמנות].[" & [מיין לפי] & "]" & [מיון עולה יורד] & ";" 'מחברת טקסט רשימה Text9 = Text1 & Text2 & Text3 & Text4 & Text5 & Text6 & Text7 & Text8 ' יוצר רשימת הזמנות DoCmd.RunSQL "" & Text9 & "", -1 End Function
בכל אופן שיהיה לך הרבה הצלחה
פורסם במקור בפורום CODE613 ב07/07/2015 00:08 (+03:00)
-
תודה רבה!
אני לא מבין קוד של visual basic וקצת התבלבלתי מרוב הסוגרים והאותיות... כך שלא בדיוק הבנתי את הקוד שכתבת..
בכל אופן, אתה כן ממליץ ליצור פקדים יעודיים של דוחות מוכנים, ועם זה לתת פקד שפותח חלון חדש של דוח מותאם אישית?פורסם במקור בפורום CODE613 ב07/07/2015 15:07 (+03:00)
-
ראה כאן כעת אנו בפיתוח וובי של כל הסיפור הזה, ומתיימרים להיות בלי נדר הגוגל של מסדי הנתונים הפרטיים. חיפוש שייאפשר למשתמש לבצע כל שאילתה אפשרית.
אז אם אתה מתכוון להתחרות בי אשמח תמיד ללמוד ממתחרים :lol: :lol: :lol: :lol:
פורסם במקור בפורום CODE613 ב08/07/2015 01:39 (+03:00)
-
ראה כאן כעת אנו בפיתוח וובי של כל הסיפור הזה, ומתיימרים להיות בלי נדר הגוגל של מסדי הנתונים הפרטיים. חיפוש שייאפשר למשתמש לבצע כל שאילתה אפשרית.
אז אם אתה מתכוון להתחרות בי אשמח תמיד ללמוד ממתחרים :lol: :lol: :lol: :lol:
עד שאצליח להיות ברמה של מתחרה - הדרך עוד ארוכה :lol:
בכל אופן, אני עכשיו מתחיל ללמוד את הנושא הזה, כך שאשמח לעזור ולהשתתף בפרוייקט המרשים שהצגת שם.
אם אתה רוצה שאנסה לעשות משהו ספציפי - אתה מוזמן לומר לי.
כך גם אני יוכל לעזור ולתרום - ולא רק לשאול שאלות.
(אבל אל תשכח שאני עוד רחוק מהרמה שלכם - אבל אני מקווה להגיע אליה מהר :lol: :lol: )פורסם במקור בפורום CODE613 ב08/07/2015 10:28 (+03:00)