בעיה בטעינת נתונים למסך – ממשק מסכי

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

  • Post
    dandan
    משתתף
    שלום רב,

    יצרתי ממשק מסכי – למסך אריזות ללקוח.

    יש SQLI לפני שאוסף נתוני הזמנות.

    הנתונים נשלחים בהצלחה לטבלה (נבדק ע"י ייצוא לקובץ TXT)

    בממשק, הנתון של מספר הזמנה מוגדר לעמודת מסך הזמנה

    מסיבה שאינה ברורה, הנתונים אינם נטענים למסך.

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

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

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

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

    בנוסף,

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

     

    אודה לעזרתכם.

     

    בברכה,

    דן.

    עבור הזמנה 204315: ערך '204315' לא קיים בעמודה 'עבור הזמנה' בטבלת 'הזמנות לקוח'.
מוצגות 15 תגובות – 1 עד 15 (מתוך 15 סה״כ)
  • Replies
    NoamN
    משתתף
    none
    לעניות דעתי, הודעת השגיאה כן אומרת מה הבעיה. בדרך כלל יש קידומת להזמנות, כמו SO19, מה שאין בהודעה. נראה שאתה מנסה להכניס את הערך של ORDERS.ORD לתוך השדה במקום ORDERS.ORDNAME. יש לך שתי חלופות: או להכניס את ORDNAME לתוך השדה ולהשאיר את הממשק כמושהו, או לא לשנות את GENERALLOAD אך לשנות את הממשק כדי להשתמש בשדה הנסתר ORD.
    dandan
    משתתף
    אהלן,

    כפי שציינתי, ההודעות מתקבלות כאשר אני מנסה לטעון את מספר ההזמנה – כלומר ORDNAME.

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

     

    אשמח לעזרתכם הדחופה.

     

    תודה,

    דן.

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

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

    dandan
    משתתף
    התוכנית מזינה נתונים לטבלת GENERALLOAD.

    מדובר על רקורסיה שמושכת את כל ההזמנות עם תאריך האספקה של היום.

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

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

     

    הנתונים נכנסים לטבלה, אך לא נטענים.

    אשמח לראות את הקוד שרשמת.

     

    יש למישהו רעיון איך ניתן לפתור את העניין?

     

     

     

     

    dandan
    משתתף
    INSERT INTO GENERALLOAD (RECORDTYPE,LINE,TEXT1,TEXT2, TEXT3,KEY1)
    VALUES ('1', :LINE,:ORDNAME, 'LUMN',:CUSTNAME,:ORDNAME);

    טעינת הנתונים למסך אריזות DOCUMENTS_A

    מזהה רשומה 1

    עמודת טבלת טעינה – TEXT1

    עמודת מסך- 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>

    dandan
    משתתף
    הצגתי רק את שורת הטעינה, מדובר על קוד ארוך.

    לפי הקוד שלך, אתה מדלג על טריגרים של המערכת וטוען ישירות למסך הבן, לא?

    הרי כאשר משתמש מבסס אריזה על הזמנה, מזינים את מספר ההזמנה כאסמכתא.

     

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

    ניסיתי בנוסף לטעון לטבלאות אחרות, אך הבעיה לא שם.

    משהו מאוד מוזר..

    dandan
    משתתף
    מצ"ב הקוד.

     

    LINK DISTRLINES TO :$.LIN;
    LINK STACK9 TO :$.STK;
    LINK GENERALLOAD TO :$.GEN;
    DELETE FROM GENERALLOAD;
    :DISTRLINE = :LINE = :ORD = 0;
    :ORDNAME = :RECORDTYPE = :CUSTNAME = :KEY = ";
    SELECT DISTRLINE INTO :DISTRLINE FROM DISTRLINES
    WHERE DISTRLINE <> 0;
    DECLARE CUR CURSOR FOR SELECT ORDNAME,CUSTNAME, O.ORD
    FROM ORDERS O, ORDERSB OB,CUSTOMERS C
    WHERE O.ORD = OB.ORD
    AND OB.DISTRLINE = :DISTRLINE
    AND OB.DUEDATE = :$.DAT
    AND O.CUST = C.CUST
    AND ORDSTATUS = 1;
    OPEN CUR;
    GOTO 200 WHERE :RETVAL <= 0;
    LABEL 10;
    FETCH CUR INTO :ORDNAME,:CUSTNAME, :ORD;
    GOTO 200 WHERE :RETVAL <= 0;
    :LINE = :LINE + 1;
    INSERT INTO GENERALLOAD (RECORDTYPE,LINE,KEY1,TEXT1,TEXT2,
    TEXT3,INT1)
    VALUES ('1', :LINE,:ORDNAME,:ORDNAME, 'LUMN',:CUSTNAME,:ORD);
    LOOP 10;
    LABEL 200;
    CLOSE CUR;
    EXECUTE INTERFACE 'PANL_PACK', '-L',:$.GEN;
    SELECT RECORDTYPE,LINE, KEY1,TEXT1,TEXT2,TEXT3 FROM GENERALLOAD
    FORMAT 'D:/TMP/TEST1212.TXT';
    UNLINK ORDERSB;
    UNLINK GENERALLOAD;

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

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

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

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

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

    dandan
    משתתף
    נמחקו כנראה כמה שורות בהעתקה,

    כל טבלה עוברת לינק ו unlink.

    לגבי KEY1, מדובר על מספר ניסיונות לבצע טעינה.

    גם בלי השדה הזה, הנתונים לא נטענים מטבלת GENERALLOAD למסך אריזות.

    הקוד עובד ותקין, הנתונים מוזנים בהצלחה לטבלת GENERALLOAD, נראה שיש איזו בעיה עם הממשק עצמו.

     

    dandan
    משתתף
    מישהו יכול לעזור?

    זה די דחוף…

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

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

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

    dandan
    משתתף
    אהלן,

    ניסיתי גם עם הפרמטר וזה לא עובד.

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

     

    מישהו יכול לעזור עם הנושא???

     

    תודה,

    דן.

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

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

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

    dandan
    משתתף
    הייתה בעיה ככל הנראה עם טבלת הטעינה.

    יצרתי טבלה חדשה והממשק עובד באופן תקין.

     

    דן.

מוצגות 15 תגובות – 1 עד 15 (מתוך 15 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.