Forum Replies Created
- Replies
-
- אוקטובר 25, 2021 בשעה 2:48 pm
- in reply to: חיפוש מחרוזת עם גרש
הצעה: תנסה להשתמש ב-STRPIECE – התוצאה תהיה שונה המחרוזת המקורית אם קיים גרש.מסך הוא כלל מערכתי.לכאורה יש הסבר בפרק 3 של ה-SDK. כל רוב מה שכתוב ב-SDK, ניתן להבין מה כתוב שם רק לאחר שאתה מבין את הנושא. אני חוזר על מה שכתבתי קודם: הולכים לקורס תכנות בפריוריטי (יש כאלה) או לוקחים מורה פרטי.
אני גורס שכדי לדעת איך לתכנת מסכים, צריך קודם לדעת איך לבנות דו"חות. איך לומדים? הולכים לקורס תכנות בפריוריטי (יש כאלה) או לוקחים מורה פרטי.ועכשיו הרבה פילוסופיה…….
לגבי עצי מוצר: זה נושא מאד מורכב כי יש כאן מבנה היררכי, או כפי שקוראים לו בתכנות, רקורסיבי. פריט הוא בן של פריט שהוא בעצמו בן של פריט שהוא יכול להיות בן של פריט. מסך לא יכול להציג את המבנה הרקורסיבי הזה והוא מוגבל להצגת רמה אחת של בנים. אתה רוצה מסך נוסף שיציג רמה נוספת של בנים – אבל יכול להיות עצי מוצר עם עומק יותר גדול ולא מומלץ להגדיר מסך אחרי מסך אחרי מסך כדי להציג את כל הרמות. מעבר לכך, לא ניתן לדעת מראש כמה רמות יש בעץ מוצר נתון. כדי לטפל בבעיה הזו, יש בפריוריטי תכנית חיצונית בשם SONRAW אשר "מפוצצת" עץ מוצר עד לבורג האחרון (כפי שאומרים). זה משהו שלא ניתן לעשות במסך.
ומדוע להשתמש במסך פרטי ולא במסך שכבר קיים? מפני שאדריכלי פריוריטי מזהירים בפירוש לא להשתמש במסכים קיימים כי למסכים יכולים להיות השפעות או תופעות לוואי שאינך מכיר (ובמיוחד אם אתה שואל איך לבנות מסך). אני מאמין שאפשר לבנות מסך פרטי במצב שליפה בלבד שחושף חלק מהנתונים האפשריים, בעוד עמיתי יצחק אף נזהר מזה. מסך הוא יותר מהשדות שמרכיבים אותו ונראים: יש תכניות קטנות שמופעלות כאשר אירועים שונים קורים, כאשר ההפעלות הללו יכולות לשבש נתונים.
דוגמא מדוע לא להשתמש במסך בן סטנדרטי במקום שאינו מוגדר לו: מסכים לעיתים "מניחים" שיש שדות מסוימים במסך האב, ואם תוסיף מסך בן כזה למסך פרטי שלך שחסר את השדות הללו, תקבל הודעות שגיאה ולא יהיה ניתן לבנות את המסך. חוויתי זאת על בשרי בעת שימוש במסך הבן "משימות לתעודה" במסכים פרטיים שלי.
צריך לבנות מסך שיהיה מבוסס על טבלת PARTARC כאשר בשדה QN יופיע Q (שאילתא בלבד – לא ניתן להוסיף או לגרוע נתונים). הדבר הכי חשוב – לשדה שמכיל את PARTARC.PART צריך להיות מוסתר ועם ביטוי PART.$$: – שיהיה שווה לשדה פריט במסך האב שלו (שהוא מסך בן בעצמו).- אוקטובר 22, 2021 בשעה 10:26 am
- in reply to: כמה מסכי יעד לשדה אחד
אגב, הרבה יותר קל כאשר מציגים נתונים מטבלה אחת אך משדות רבים, כמו AINVOICES, CINVOICES ו-FINVOICES או DOCUMENTS_A ו-DOCUMENTS_D. אם INVOICES, אזיINVOICES.TYPE = IVTYPES.TYPE
INVOICES.DEBIT = IVTYPES.DEBIT
IVTYPES.EXEC = EXEC.EXEC
שוב, השדה החשוב יהיה EXEC.ENAME. כאן אין צורך בסוג הרשומה ב-EXEC.
לגבי תעודות מלאי, הטבלה נקראת DOCTYPES במקום IVTYPES.
- אוקטובר 22, 2021 בשעה 10:21 am
- in reply to: כמה מסכי יעד לשדה אחד
לאחר שהגדרנו את כל השדות הנדרשים, אנחנו מגיעים אל העיקר.בשדה שמציג את מספר התעודה, נכנסים למסך הבן "עמודות הדו"ח – הגדרות HTML" וללשונית "שדות קלט והפניות". בשדה "סוג שדה קלט" רושמים P. בשדה "שם ערך חזרה" רושמים winform_ (הקו התתון בצד שמאל ואחר כך אותיות קטנות). בשדה "עמודת ערך חזרה" רושמים את מספר השדה שמכיל את EXEC.ENAME. כנ"ל בשדה "עמודה שמגדירה פרוצדורה".
אם הכל בסדר, יופיע קו כחול מתחת למספר התעודה בדו"ח.
בהצלחה!
- אוקטובר 22, 2021 בשעה 10:17 am
- in reply to: כמה מסכי יעד לשדה אחד
המשך: מגדירים שדה נסתר, EXEC.ENAME, עם מפתח מיון 9. לשדה הזה יהיה ביטוי בסגנון
<p style="text-align: right;">= (STACK8.KEY1 = 1 ? 'ORDERS' : (STACK8.KEY1 = 2 ? 'DOCUMENTS_D' : …</p>
או במילים, אם KEY1 = 1, אזי ENAME יהיה ORDERS, ואם KEY1 = 2, אזי ENAME יהיה DOCUMENTS_D וכו'. אלה שמות מסכים.שדה נסתר נוסף, EXEC.TYPE, עם ביטוי = 'F'. יש לפחות שתי שורות בטבלת EXEC עם שם ORDERS: אנחנו רוצים את השורה של המסך, לכן F. ללא השדה הזה, יופיעו אותם נתונים יותר מפעם אחת בדו"ח.
עוד מכתב אחד…..
- אוקטובר 22, 2021 בשעה 9:57 am
- in reply to: כמה מסכי יעד לשדה אחד
המשך: לכל ישות צריך להיות שדה עם שם מפתח ה-A (לדוגמא ORDERS.ORD) כאשר הביטוי לשדה הזה יהיה = (STACK8.KEY1 = 1 ? STACK8.KEY2 : 0)לכל ישות יהיה אותו הביטוי, תוך כדי שינוי של STACK8.KEY1
- אוקטובר 22, 2021 בשעה 9:46 am
- in reply to: כמה מסכי יעד לשדה אחד
הסבר יותר מלא לגבי דו"חות: כאן אני מניח שהדו"ח מוצג כשלב שני מתוך פרוצדורה. אני משתמש ב-STACK8 לדו"חות "מעורבבים" כאשר יש צורך להציג נתונים מיותר מישות אחת. ב-KEY1 אני שומר מספר שמבדיל בין הישויות (נניח 1 = הזמנות לקוח, 2 = תעודות משלוח, 3 = הזמנות רכש וכד'). ב-KEY2 אני שומר את ערך מפתח ה-A. כתוצאה מכך, אפשר לשמור הפניות גם להזמנה מספר 1 וגם לתעודת משלוח מספר 1.עכשיו בדו"ח: יש שדה שמציג את מספר התעודה. ערכו יהיה תלוי בערך שנמצא ב-KEY1 לכן כותבים ביטוי STACK8.KEY1 = '1' : ORDERS.ORDNAME : DOCUMENTS.DOCNO
רצוי לשים סוגריים מסביב לביטוי כולו. אם יש יותר משתי ישויות, אז צריך להיות משפט יותר מורכב.
- אוקטובר 22, 2021 בשעה 9:40 am
- in reply to: כמה מסכי יעד לשדה אחד
עבר דו"ח, כתבתי (באופן חלקי ובאנגלית) כאן: https://progpitfalls.blogspot.com/2021/05/conditional-opening-of-form-from-report.html- אוקטובר 22, 2021 בשעה 9:39 am
- in reply to: כמה מסכי יעד לשדה אחד
עבור מסך: כתבתי על כך (באנגלית) כאן: https://progpitfalls.blogspot.com/2021/08/defining-dynamic-target-form-name-for.html- אוקטובר 22, 2021 בשעה 9:01 am
- in reply to: כמה מסכי יעד לשדה אחד
ניסיתי לכתוב תשובה ארוכה אבל כל פעם האתר הזה לא שומר את מה שכתבתי.האם מדובר במסך או בדו"ח? – יש הבדלים.
- אוקטובר 21, 2021 בשעה 7:58 am
- in reply to: סריקה של נספחים
הנה הנתיב למסך בו מגדירים סטטוסים לחשבוניות מס: כספים > מכירות (כספים) > חשבוניות מכירות > חשבוניות מס > ניהול תהליך לחשבונית מס.תמצא את הסטטוס "סופית" ותלחץ לחיצה ימנית עליו. מהתפריט שמופיע, תבחר מאפיינים. תופיע רשימה שלמה של אפשרויות (דגלים, בלשון מתכנתים). יש אפשרות אחת בשם "שינוי נספחים בת.סופית" ותסמן אותו. תאשר את השינוי ותצא מהמסך. הסימון הזה מאפשר שמירת נספחים לחשבונית, אפילו אם היא סגורה.
יש מסך מקביל "ניהול תהליך לחשבונית מרכזת".
- אוקטובר 20, 2021 בשעה 2:45 pm
- in reply to: הוספת לשונית
פיתוח …….אל תקרא לזה "לשונית" אלא "מסך בן". לשוניות נמצאות במסך כותרת, כמו "פרטים כלליים" במסך "כרטיס פריט"?
- אוקטובר 18, 2021 בשעה 6:32 pm
- in reply to: שליפה אוטומטי של נתוני העובד בפתיחת מסך
בטבלה שעליה בנוי מסך הנוכחות, אני משער שיש שדה USER או USERB. כדי לגרום לכך שכל משתמש יראה רק את הנתונים שלו, לשדה USER יהיה ביטוי SQL.USER. זה אומר שכל רשומה שתיקלט תכיל את מספר המשתמש הנוכחי וגם בשליפת נתונים, רק הרשומות השייכות למשתמש הנוכחי יישפלו.יצחק כתב על השדה TYPE במסך DOCUMENTS_D שממלא את אותו התפקיד (גם בכל המסכים ששמם מתחיל ב-DOCUMENTS).
קצת יותר מסובך לגבי USERB. כאן נראה לי שצריך להכניס שאילתא קצרה בהפעלה PRE-FORM, בסגנון SELECT USERB INTO :MY_USER FROM USERSB
WHERE USER = SQL.USER;
הביטוי בשדה USERB יהיה MYUSER:.