NoamN

Forum Replies Created

מוצגות 15 תגובות – 391 עד 405 (מתוך 444 סה״כ)
  • Replies
  • NoamN
    משתתף
    none
    קובעים את מספר הימים קדימה לתנועת מלאי באמצעות המסך ניהול מלאי > תחזוקת מלאי > סוגי תעודות מלאי.

    אפשר גם לקבוע חוק עסקי אשר יגביל את התאריך.

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

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

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

    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 דו"חות נשלחים אוטומטית כל לילה.

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

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