NoamN

Forum Replies Created

מוצגות 15 תגובות – 391 עד 405 (מתוך 442 סה״כ)
  • Replies
  • NoamN
    משתתף
    none
    לגבי סדר הטריגרים: מה שכתבת נכון, אבל אולי לא הבדלת בין טריגרים מובנים (שלא רואים) לבין טריגרים סטנדרטיים (שכן רואים).

    קודם מתבצעים טריגרים מובנים למסך (אסביר בהמשך) אחר כך טריגרים כפי שמופיעים במסך הבן "הפעלות המסך". לכן טריגר בשם ABCD_POST-INSERT תמיד יפעל לפני POST-INSERT. לא משנה אם הטריגרים הללו סטנדרטיים או פרטיים.

    מה הם טריגרים מובנים? הנה דוגמא אחת: נניח שמסך בנוי על טבלה שמכילה שדה מפתח KLINE, כאשר השדה הזה מוסתר ומחושב אוטומטית. לא ניתן להגדיר את ערכו בהפעלה PRE-INSERT מפני שהפעלה מובנית כבר גילתה שהשדה המפתח הזה ריק – ואסור שיהיה כך. לכן צריך להכניס ערך לתוך KLINE באמצעות POST-FIELD של שדה חובה אחר במסך.

    NoamN
    משתתף
    none
    חסר פרמטר ל-INTERFACE. תנסה כך

    EXECUTE INTERFACE 'PANL_PACK', SQL.TMPFILE,  '-L',:$.GEN

    בנוסף, לא יודעים איך הגדרת את הממשק. לעניות דעתי, צריך להעביר רק את ORD ולתת למסך לבצע את כל העבודה.

    NoamN
    משתתף
    none
    יש אפשרות נוספת שעדיפה: לכתוב טריגר משלך. צריך לראות מאין יש קריאה ל-BUF6 – נניח POST-INSERT ו-POST_UPDATE. תכניס את הקוד שלך לתוך טריגר TEST_BUF1 ותגדיר הפעלות TEST_POST-INSERT ו-TEST_POST-UPDATE אשר קוראות ל-TEST_BUF1.

    לפי החוקים, אין לשנות הפעלות סטנדרטיות במסכים.

    NoamN
    משתתף
    none
    יש כמה בעיות עם הקוד – לא ברור עד כמה הן משפיעות.

    לגבי DISTRLINES – הייתי חולץ את הערך היחיד לתוך משתנה (ולבדוק שקיים ערך!) בתחילת הפרוצדורה ולבצע UNLINK ישר לאחר מכן.

    אתה מבצע UNLINK לטבלה שלא "לונקקה" אך לא מבצע על טבלאות שכן "לונקקו".

    אל תכניס ערכים לשדה KEY1 – השדה הזה מתמלא לאחר הממשק עם מספר ההזמנה (דהיינו ORD, לא ORDNAME). אני חושש שזו הבעיה העיקרית.

    לגבי הקוד שלי – הטריגרים המובנים של המסך עובדים, אין עקיפה.

    NoamN
    משתתף
    none
    אני לא יודע מה הכוונה לרקורסיה כאן.

    הנה קוד פשוט אשר אמור לבצע את הנדרש לפי התאור שלך (לא בדקתי את הקוד אבל נראה לי תקין)
    <p style="text-align: left;">:LINE = 0;
    LINK GENERALLOAD …
    DECLARE CUR CURSOR FOR
    SELECT ORDERS.CUST, ORDERITEMS.ORDI
    FROM ORDERS, ORDERITEMS
    WHERE ORDERS.ORD = ORDERITEMS.ORD
    AND ORDERITEMS.DUEDATE = SQL.DATE8
    AND NOT EXISTS (SELECT 1 FROM TRANSORDER</p>
    <p style="text-align: left;">WHERE TRANSORDER.ORDI = ORDERITEMS.ORDI</p>
    <p style="text-align: left;">AND ORDERITEMS.CLOSED <> 'C'
    AND TRANSORDER.TYPE IN ('A', 'D'))
    AND ORDERITEMS.ORDI > 0
    ORDER BY 1, 2;
    OPEN CUR;
    GOTO 300 WHERE :RETVAL <= 0;
    :OLDCUST = 0;
    LABEL 100;
    FETCH CUR INTO :CUST, :ORDI;
    GOTO 200 WHERE :RETVAL <= 0;
    GOTO 110 WHERE :CUST = :OLDCUST;
    :OLDCUST = :CUST;
    :LINE = :LINE + 1;
    INSERT INTO GENERALLOAD (LINE, RECORDTYPE, INT1)
    VALUES (:LINE, '1', :CUST);
    LABEL 110;
    :LINE = :LINE + 1;
    INSERT INTO GENERALLOAD (LINE, RECORDTYPE, INT1)
    VALUES (:LINE, '2', :ORDI);
    LOOP 100;
    LABEL 200;
    CLOSE CUR;
    EXECUTE INTERFACE ……
    SELECT MESSAGE INTO :PAR1 FROM ERRMSGS
    WHERE USER = SQL.USER AND TYPE = 'i';
    WRNMSG 99 WHERE :RETVAL > 0;
    LABEL 300;
    UNLINK GENERALLOAD;</p>
     
    <p style="text-align: right;">אפשר להתחכם ולבצע INSERT INTO/SELECT, דהיינו משיכת כל שורות ההזמנות השייכות ללקוח נתון עם תאריך אספקה היום.</p>

    NoamN
    משתתף
    none
    מוטב להציג את הקוד ואת הגדרת הממשק – אחרת אנחנו רק מקשקשים באפלה

    פעם כתבתי תכנית להקמת תעודת אריזה. הממשק מקושר לשני מכסים: DOCUMENTS_A ו-TRANSORDER_A. אין בכלל התיחסות למספר הזמנת לקוח. בשורות, התכנית מעבירה את ORDERITEMS.ORDI אל TRANSORDER_A.

    NoamN
    משתתף
    none
    לעניות דעתי, הודעת השגיאה כן אומרת מה הבעיה. בדרך כלל יש קידומת להזמנות, כמו SO19, מה שאין בהודעה. נראה שאתה מנסה להכניס את הערך של ORDERS.ORD לתוך השדה במקום ORDERS.ORDNAME. יש לך שתי חלופות: או להכניס את ORDNAME לתוך השדה ולהשאיר את הממשק כמושהו, או לא לשנות את GENERALLOAD אך לשנות את הממשק כדי להשתמש בשדה הנסתר ORD.
    NoamN
    משתתף
    none
    עקרונית אפשר להשתמש בפרוצדורה הסטנדרטית להדפסת תעודת משלוח (WWWSHOWDOC_D). אין צורך להעתיק אותה: מעבירים אליה טבלה מלנוקקת שמכילה את התעודה הרצויה ו"מורים" לפרודצורה ליצור מסמך PDF בתיקיה נתונה.
    NoamN
    משתתף
    none
    בשיטה השניה צריך לפתוח מחסן לכל לקוח ששואל סחורה. בשיטה הראשונה יש רק מחסן אחד. כתוצאה מכך, יותר קל לכתוב דו"חות שמסתכלים על מחסן השאלות אחד במקום להסתכל על מחסנים רבים. כמו כן יש תקורה בפתיחת מחסנים.
    NoamN
    משתתף
    none
    הראשון עדיף כי כך אתם יודעים מה נתתם למי. צריך להגדיר את המחסן כנכלל בערך המלאי ולתמחיר, וגם כ"העלמת מלאי לתכנון".
    NoamN
    משתתף
    none
    This reply has been marked as private.
    NoamN
    משתתף
    none
    אתחיל בדוגמא אחרת. המסך/טבלה ORDERSTEXT מורכב מארבעה שדות: ORD, TEXT, TEXTLINE ו-TEXTORD. המפתח הראשי מורכב משני שדות, ORD ו-TEXTLINE. מה זה אומר? לפי ORD, פריוריטי יודעת אלו רשומות בטבלה שייכות להזמנה הנוכחית, ו-TEXTLINE נותן לנו את הרשומות הללו לפי סדר. אם המפתח היה מורכב אך ורק מ-ORD, יכולנו לשמור רק רשומה אחת (כי המפתח הראשי חייב להיות יחודי). אפשרות אחרת היתה שהמפתח הראשי יהיה רק TEXTLINE כאשר ORD יהיה מפתח N אבל כנראה השימוש ב-TEXTLINE במסך טקסט חופשי מחייב ש-TEXTLINE יהיה יחודי לרשומות של אותה הזמנה, אך לא יחודי בין ההזמנות (כמו KLINE ב-ORDERITEMS). לכן נדרש מפתח ראשי שמורכב משני שדות, כאשר הצירוף מזהה באופן חד חד ערכי את הרשומות השייכות לכל הזמנה.

    השאלה שלך שואלת לגבי המסך CUSTCNEXTFILE אשר מבוסס על טבלת CUSTEXTFILE, וכפי שאת מציינת, המפחת הראשי של הטבלה הזו (או בלשון פריוריטי, מפתח ה-U) מורכב משני שדות: מספר לקוח ומספר קובץ. כיוון שהמפתח הראשי של המסך הזה מכיל שני שדות, המפתח הראשי של המסך הבן, דהיינו מסך הטקסט, צריך להכיל שלושה שדות: מספר לקוח, מספר נספח ומספר שורה. במילים אחרות, טבלת הטקסט שלך צריכה להכיל חמישה שדות: CUST, EXTFILENUM, TEXTLINE, TEXT ו-TEXTORD. יתרה מזה, את צריכה לבנות את המסך בעצמך – צריך להקפיד על כל הטריגרים כי אחרת זה לא יעבוד.

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

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

    NoamN
    משתתף
    none
    במלה אחת, כן. במלה אחרת, פיתוח. אצלנו כ-25 דו"חות נשלחים אוטומטית כל לילה.

    הקושי העיקרי: לוודא שניתן לשלוח דו"חות בדואר מהשרת.

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

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

    NoamN
    משתתף
    none
    BUDPERIOD דו"ח טבלאי (טיפוס T בכותרת) לכן כמעט ולא ניתן להוסיף לו עיצובים.

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

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