Forum Replies Created
- Replies
-
- נובמבר 2, 2021 בשעה 11:47 am
- in reply to: גילוי תצורת הדפסה של מסמך HTML
מצאתי איך לעשות זאתלני שמתעניין –
SELECT EXTMSG.MESSAGE
FROM PRINTFORMAT, EXTMSG
WHERE EXTMSG.EXEC = PRINTFORMAT.EXEC
AND EXTMSG.NUM = PRINTFORMAT.VALUE
AND EXTMSG.EXEC = (SELECT EXEC FROM EXEC
WHERE TYPE = 'P' AND ENAME = '$')
AND PRINTFORMAT.USER = SQL.USER$ הוא קיצור לשם הפרוצדורה הנוכחית, לכן מחפשים את ערכו של EXEC כאשר ENAME = $. כך ניתן להשתמש בקוד במסמכים רבים, בשלב SQLI של המסמך.
- נובמבר 2, 2021 בשעה 11:25 am
- in reply to: הפעלת פרוצדרות LABELS לא עובדת
בדקתי כמה תכניות שלי שמדפיסות מדבקות והן כולן מפעילות את LABELS בשלב פרוצדורלי נפרד, לא באמצעות EXECUTE. זה לא עוזר לך אם אכן הקוד מופעל מתוך טריגר.יש לי הצעה אחרת: תבנה פרוצדורה רגילה שמקבלת מספר מזהה (לא ציינת מאיזה מסך אתה מדפיס, אבל זה יכול להיות מספר הזמנה או משהו דומה) בפרמטר PAR ומבצעת את כל מה שנדרש, כולל הפעלת LABELS בשלב נפרד. בטריגר המסך, תפעיל את הפרוצדורה הזו בשיטה הבאה
SELECT SQL.TMPFILE INTO :TMPORDERS FROM DUMMY;
LINK ORDERS TO :TMPORDERS;
GOTO 999 WHERE :RETVAL <= 0;
INSERT INTO ORDERS
SELECT * FROM ORDERS ORIG
WHERE ORD = :$.ORD;
EXECUTE WINACTIV '-P', 'your procedure name', 'ORDERS',
:TMPORDERS;
UNLINK ORDERS;- נובמבר 2, 2021 בשעה 11:18 am
- in reply to: הצגת כניסה אחרונה למלאי במחולל דוחות
אמנם זה לא קשור לשאלה המקורית שלך, אבל השורות SELECT PART
INTO :PARTID
FROM PART
WHERE PART > 0 ;מיותרות. אפשר להשתמש בטבלת PART בקורסור שיציג את כל הפריטים שנבחרו זה אחר זה.
מעבר לכך, פקודת ה-UPDATE בעייתי משלוש סיבות – (א) למה רק פריט 1412? (ב) למה תאריך היום? (ג) הכי חשוב – כיון שבשלב הזה PART היא טבלה מלונקקת, אתה מעדכן אותה ולא את הטבלה האמיתית. צריך לכתוב UPDATE PART ORIG כאשר ORIG הוא כינוי (alias) אשר אומר להשתמש בטבלה האמיתית.
- נובמבר 1, 2021 בשעה 1:06 pm
- in reply to: הצגת כניסה אחרונה למלאי במחולל דוחות
אני רואה שהטעיתי אותך. אם אתה רוצה את תאריך הכניסה האחרונה למלאי כדי שמדווח בכרטיס הפריט, בדו"ח אתה צריך להציג את PARTPARTAM.PURTRANSDATE מבלי להתחכם. למען האמת, אתה בכלל לא צריך פרוצדורה מפני שניתן לחשב ולהציג את סך המכירות לפריט בתוך דו"ח בלי שלב פרוצדורלי מקדים.אבל אם אתה רוצה להציג את תאריך תנועת המלאי האחרונה מסוג מסוים, עליך לעבוד קצת יותר קשה. אני מניח שנעשה LINK בין PART לבין PAR.$: ואתה מחשב את סה"כ המכירות לפריט באמצעות קורסור (אם כי זה מיותר). צריך להוסיף קטע כמו
:MAXDATE = 0;
SELECT MAX (DOCUMENTS.CURDATE) INTO :MAXDATE
FROM DOCUMENTS, TRANSORDER
WHERE DOCUMENTS.DOC = TRANSORDER.DOC
AND DOCUMENTS.TYPE = TRANSORDER.TYPE
AND TRANSORDER.TYPE = 'D'
AND TRANSORDER.PART = :PART;כמובן מחליפים את D בסוג התנועה שאתה רוצה. אחר כך MAXDATE נשמר בטבלת STACK4 (או אחרת) בה שמרת את סה"כ המכירות לפריט.
- אוקטובר 31, 2021 בשעה 2:25 pm
- in reply to: הצגת כניסה אחרונה למלאי במחולל דוחות
תרשום M בשדה "חישוב עמודה" אשר אמור לתת לך את הערך המירבי לשדה אם כי יכול להיות השפעה על שדות אחרים.הרבה יותר קל ו"בטוח" לחשב את הערך מירבי בשלב פרוצדורה לפני הצגת הנתונים אם זה אפשרי.
- אוקטובר 31, 2021 בשעה 8:49 am
- in reply to: חיפוש בשדה מערכת
יש לפריוריטי שני מסכים לחיפוש, כאשר הבחירה ביניהם תלויה באם מדובר בישות "אינסופית" (כמו לקוחות, פריטים וספקים) או "סופית" (כמו סוגי הזמנה או סניפים). ניתן לקבוע את המספר המירבי לערכים שיופיעו במסך השני ע"י קבוע מערכת.מופיע בתחתית מסך החיפוש Ignore case – דהיינו, להתעלם בהבדל בין אותיות רישיות וקטנות – במסך החיפוש מהסוג הראשון שתיארתי. אין דבר כזה במסך החיפוש השני.
באיזה שדה באיזה מסך את מחפשת? באיזו גרסה?
- אוקטובר 31, 2021 בשעה 8:31 am
- in reply to: חיפוש בשדה מערכת
בחלון חיפוש יש בדרך כלל שאלה לגבי אותיות גדולות וקטנות – זה אמור לענות לך על הצורך.- אוקטובר 27, 2021 בשעה 11:39 am
- in reply to: דו"ח המציג את שורת הסיכום בלבד
בדרך כלל דו"ח כזה צריך להכיל כמה שפחות שדות וכנראה יש לך משהו שמשתנה באמצע.אתן דוגמא להבהרה: נניח שרוצים דו"ח שיציג הזמנות לקוח לפי פריט. הפריט יהיה המפתח (שדה המיון) ושדות אחרים יהיו מספר הזמנה, שם לקוח, תאריך ההזמנה, כמות בשורה וסכום בשורה, כאשר סוכמים את שני האחרונים עם קוד S בשדה "חישוב קבוצתי" (כדי לתת סה"כ לכמות וסכום).
אם רוצים דו"ח שמציג רק סיכומים, צריך להוציא את מספר ותאריך ההזמנה ואת מספר הלקוח מהדו"ח. במקביל צריך להסיר את ה-S מ"חישוב קבוצתי" (אלא אם רוצים סה"כ לכל הדו"ח) ולהוסיף S בשדה "חישוב עמודה" עבור כמות וסכום.
- אוקטובר 25, 2021 בשעה 4:37 pm
- in reply to: דוח לקוחות עם ח.פ
לא נראה לי שיש "מחולל דו'חות לוקח" כך כתיבת דו"ח שמציג מספר/שם לקוח + ח.פ. תדרוש פיתוח – חמש דקות עבור מישהו שיודע מה הוא עושה אך בלתי אפשרי למי שלא מכיר איך לכתוב דו"חות.יותר קל לשלוף את הלקוחות שיש להם ח.פ. יותר גדול מ-0 ולייצא את התוצאות לאקסל.
- אוקטובר 25, 2021 בשעה 4:20 pm
- in reply to: טבלת Canledar
לגבי ימים בהם אין תעודת מלאי, הייתי משתמש בגישה תכנותית (לולאה) ולא גישה SQLית (בניית טבלה של תאריכים ושאילת NOT EXISTS מול הטבלה הזו.- אוקטובר 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.