NoamN

Forum Replies Created

מוצגות 15 תגובות – 106 עד 120 (מתוך 442 סה״כ)
  • Replies
  • NoamN
    משתתף
    none
    מצאתי איך לעשות זאת

    לני שמתעניין –

    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 של המסמך.

    NoamN
    משתתף
    none
    בדקתי כמה תכניות שלי שמדפיסות מדבקות והן כולן מפעילות את 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;

    NoamN
    משתתף
    none
    אמנם זה לא קשור לשאלה המקורית שלך, אבל השורות SELECT PART
    INTO :PARTID
    FROM PART
    WHERE PART > 0 ;

    מיותרות. אפשר להשתמש בטבלת PART בקורסור שיציג את כל הפריטים שנבחרו זה אחר זה.

    מעבר לכך, פקודת ה-UPDATE בעייתי משלוש סיבות – (א) למה רק פריט 1412? (ב) למה תאריך היום? (ג) הכי חשוב – כיון שבשלב הזה PART היא טבלה מלונקקת, אתה מעדכן אותה ולא את הטבלה האמיתית. צריך לכתוב UPDATE PART ORIG כאשר ORIG הוא כינוי (alias) אשר אומר להשתמש בטבלה האמיתית.

    NoamN
    משתתף
    none
    אני רואה שהטעיתי אותך. אם אתה רוצה את תאריך הכניסה האחרונה למלאי כדי שמדווח בכרטיס הפריט, בדו"ח אתה צריך להציג את 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 (או אחרת) בה שמרת את סה"כ המכירות לפריט.

    NoamN
    משתתף
    none
    תרשום M בשדה "חישוב עמודה" אשר אמור לתת לך את הערך המירבי לשדה אם כי יכול להיות השפעה על שדות אחרים.

    הרבה יותר קל ו"בטוח" לחשב את הערך מירבי בשלב פרוצדורה לפני הצגת הנתונים אם זה אפשרי.

    NoamN
    משתתף
    none
    יש לפריוריטי שני מסכים לחיפוש, כאשר הבחירה ביניהם תלויה באם מדובר בישות "אינסופית" (כמו לקוחות, פריטים וספקים) או "סופית" (כמו סוגי הזמנה או סניפים). ניתן לקבוע את המספר המירבי לערכים שיופיעו במסך השני ע"י קבוע מערכת.

    מופיע בתחתית מסך החיפוש Ignore case – דהיינו, להתעלם בהבדל בין אותיות רישיות וקטנות – במסך החיפוש מהסוג הראשון שתיארתי.  אין דבר כזה במסך החיפוש השני.

    באיזה שדה באיזה מסך את מחפשת? באיזו גרסה?

    NoamN
    משתתף
    none
    בחלון חיפוש יש בדרך כלל שאלה לגבי אותיות גדולות וקטנות – זה אמור לענות לך על הצורך.
    NoamN
    משתתף
    none
    בדרך כלל דו"ח כזה צריך להכיל כמה שפחות שדות וכנראה יש לך משהו שמשתנה באמצע.

    אתן דוגמא להבהרה: נניח שרוצים דו"ח שיציג הזמנות לקוח לפי פריט. הפריט יהיה המפתח (שדה המיון) ושדות אחרים יהיו מספר הזמנה, שם לקוח, תאריך ההזמנה, כמות בשורה וסכום בשורה, כאשר סוכמים את שני האחרונים עם קוד S בשדה "חישוב קבוצתי" (כדי לתת סה"כ לכמות וסכום).

    אם רוצים דו"ח שמציג רק סיכומים, צריך להוציא את מספר ותאריך ההזמנה ואת מספר הלקוח מהדו"ח. במקביל צריך להסיר את ה-S מ"חישוב קבוצתי" (אלא אם רוצים סה"כ לכל הדו"ח) ולהוסיף S בשדה "חישוב עמודה" עבור כמות וסכום.

    NoamN
    משתתף
    none
    לא נראה לי שיש "מחולל דו'חות לוקח" כך כתיבת דו"ח שמציג מספר/שם לקוח + ח.פ. תדרוש פיתוח – חמש דקות עבור מישהו שיודע מה הוא עושה אך בלתי אפשרי למי שלא מכיר איך לכתוב דו"חות.

    יותר קל לשלוף את הלקוחות שיש להם ח.פ. יותר גדול מ-0 ולייצא את התוצאות לאקסל.

    NoamN
    משתתף
    none
    לגבי ימים בהם אין תעודת מלאי, הייתי משתמש בגישה תכנותית (לולאה) ולא גישה SQLית (בניית טבלה של תאריכים ושאילת NOT EXISTS מול הטבלה הזו.
    NoamN
    משתתף
    none
    הצעה: תנסה להשתמש ב-STRPIECE – התוצאה תהיה שונה המחרוזת המקורית אם קיים גרש.
    NoamN
    משתתף
    none
    מסך הוא כלל מערכתי.

    לכאורה יש הסבר בפרק 3 של ה-SDK. כל רוב מה שכתוב ב-SDK, ניתן להבין מה כתוב שם רק לאחר שאתה מבין את הנושא. אני חוזר על מה שכתבתי קודם: הולכים לקורס תכנות בפריוריטי (יש כאלה) או לוקחים מורה פרטי.

    NoamN
    משתתף
    none
    אני גורס שכדי לדעת איך לתכנת מסכים, צריך קודם לדעת איך לבנות דו"חות. איך לומדים? הולכים לקורס תכנות בפריוריטי (יש כאלה) או לוקחים מורה פרטי.

    ועכשיו הרבה פילוסופיה…….

    לגבי עצי מוצר: זה נושא מאד מורכב כי יש כאן מבנה היררכי, או כפי שקוראים לו בתכנות, רקורסיבי. פריט הוא בן של פריט שהוא בעצמו בן של פריט שהוא יכול להיות בן של פריט. מסך לא יכול להציג את המבנה הרקורסיבי הזה והוא מוגבל להצגת רמה אחת של בנים. אתה רוצה מסך נוסף שיציג רמה נוספת של בנים – אבל יכול להיות עצי מוצר עם עומק יותר גדול ולא מומלץ להגדיר מסך אחרי מסך אחרי מסך כדי להציג את כל הרמות. מעבר לכך, לא ניתן לדעת מראש כמה רמות יש בעץ מוצר נתון. כדי לטפל בבעיה הזו, יש בפריוריטי תכנית חיצונית בשם SONRAW אשר "מפוצצת" עץ מוצר עד לבורג האחרון (כפי שאומרים). זה משהו שלא ניתן לעשות במסך.

    ומדוע להשתמש במסך פרטי ולא במסך שכבר קיים? מפני שאדריכלי פריוריטי מזהירים בפירוש לא להשתמש במסכים קיימים כי למסכים יכולים להיות השפעות או תופעות לוואי שאינך מכיר (ובמיוחד אם אתה שואל איך לבנות מסך). אני מאמין שאפשר לבנות מסך פרטי במצב שליפה בלבד שחושף חלק מהנתונים האפשריים, בעוד עמיתי יצחק אף נזהר מזה. מסך הוא יותר מהשדות שמרכיבים אותו ונראים: יש תכניות קטנות שמופעלות כאשר אירועים שונים קורים, כאשר ההפעלות הללו יכולות לשבש נתונים.

    דוגמא מדוע לא להשתמש במסך בן סטנדרטי במקום שאינו מוגדר לו: מסכים לעיתים "מניחים" שיש שדות מסוימים במסך האב, ואם תוסיף מסך בן כזה למסך פרטי שלך שחסר את השדות הללו, תקבל הודעות שגיאה ולא יהיה ניתן לבנות את המסך. חוויתי זאת על בשרי בעת שימוש במסך הבן "משימות לתעודה" במסכים פרטיים שלי.

    NoamN
    משתתף
    none
    צריך לבנות מסך שיהיה מבוסס על טבלת PARTARC כאשר בשדה QN יופיע Q (שאילתא בלבד – לא ניתן להוסיף או לגרוע נתונים). הדבר הכי חשוב – לשדה שמכיל את PARTARC.PART צריך להיות מוסתר ועם ביטוי PART.$$: – שיהיה שווה לשדה פריט במסך האב שלו (שהוא מסך בן בעצמו).
    NoamN
    משתתף
    none
    אגב, הרבה יותר קל כאשר מציגים נתונים מטבלה אחת אך משדות רבים, כמו 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.

מוצגות 15 תגובות – 106 עד 120 (מתוך 442 סה״כ)