הצגת כניסה אחרונה למלאי במחולל דוחות

פורומים אפיון ופיתוח פריוריטי הצגת כניסה אחרונה למלאי במחולל דוחות

  • Post
    סמי
    משתתף
    יש לי דוח שפיתחתי במחולל דוחות והוא מציג את המקט עם מכירות בתקופה מסויימת וכמה פרמטרים אחרים , עכשיו שילבתי אותו עם "כניסות אחרונות למלאי" הדוח מציג כל הכניסות ואני רוצה להציג רק כניסה אחרונה , איך אני עושה את זה ?
מוצגות 9 תגובות – 1 עד 9 (מתוך 9 סה״כ)
  • Replies
    NoamN
    משתתף
    none
    תרשום M בשדה "חישוב עמודה" אשר אמור לתת לך את הערך המירבי לשדה אם כי יכול להיות השפעה על שדות אחרים.

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

    סמי
    משתתף
    טוב כנראה אני הולך על הפתרון השני , אבל אני לא יודע איך רצים על מערך של PAR מסוג FILE בתוך ה SQLI . אולי אתה מכיר איך עושים את זה ?

     

    תודה על המענה

    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 (או אחרת) בה שמרת את סה"כ המכירות לפריט.

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

    :PARTID = 0 ;
    LINK PART TO :$.PRT ;
    ERRMSG 1 WHERE :RETVAL <= 0;
    SELECT PART
    INTO :PARTID
    FROM PART
    WHERE PART > 0 ;
    DECLARE BSH_CUR CURSOR FOR
    SELECT PART FROM PART
    WHERE PART = :PARTID ;
    OPEN BSH_CUR ;
    GOTO 940 WHERE :RETVAL <= 0 ;
    LABEL 140 ;
    :BSH_PART = 0 ;
    FETCH BSH_CUR INTO :BSH_PART ;
    GOTO 840 WHERE :RETVAL <= 0 ;
    UPDATE PART SET ZMAN_LASTTRANSDATE = SQL.DATE8
    WHERE PART = 1412 ;
    LOOP 140 ;
    LABEL 840 ;
    CLOSE BSH_CUR ;
    LABEL 940 ;

    • התגובה הזו עודכנה לפני לפני 3 שנים ע"י סמי.
    סמי
    משתתף
    רק תתעלם מ WHERE PART = 1412

    נסיתי WHERE PART = :BSH_PART ולא עבד

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

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

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

    סמי
    משתתף
    זה הקוד האמיתי :

    :PARTID = 0 ;
    LINK PART TO :$.PRT ;
    ERRMSG 1 WHERE :RETVAL <= 0;
    SELECT PART
    INTO :PARTID
    FROM PART
    WHERE PART > 0 ;
    DECLARE BSH_CUR CURSOR FOR
    SELECT PART FROM PART
    WHERE PART = :PARTID ;
    OPEN BSH_CUR ;
    GOTO 940 WHERE :RETVAL <= 0 ;
    LABEL 140 ;
    :BSH_PART = 0 ;
    FETCH BSH_CUR INTO :BSH_PART ;
    GOTO 840 WHERE :RETVAL <= 0 ;
    UPDATE PART SET ZMAN_LASTTRANSDATE = SQL.DATE8
    WHERE PART = :BSH_PART ;
    LOOP 140 ;
    LABEL 840 ;
    CLOSE BSH_CUR ;
    LABEL 940 ;

    NoamN
    משתתף
    none
    אפילו בלי PART = 1412, הקוד מציג אי הבנה לגבי LINK וקורסור. אם יש רק פריט אחד בטבלה המלוננקת, אתה לא צריך את הקורסור. אם יש יותר מפריט אחד בטבלה, הקורסור יפעל על פריט אחד בלבד – בגלל התנאי WHERE PART = :PARTID. בכל מקרה העדכון לא יעשה כלום כי אתה מעדכן את הטבלה המלונקקת, לא את הטבלה האמיתית.

    להלן קוד נכון, בלי קשר אם יש רק פריט אחד או רבים

    LINK PART TO :$.PAR;
    ERRMSG 1 WHERE :RETVAL <= 0;
    DECLARE BSH_CUR CURSOR FOR
    SELECT PART
    FROM PART
    WHERE PART > 0;
    OPEN BSH_CUR;
    GOTO 940 WHERE :RETVAL <= 0;
    LABEL 140;
    FETCH BSH_CUR INTO :BSH_PART;
    GOTO 840 WHERE :RETVAL <= 0;
    UPDATE PART ORIG
    SET ZMAN_LASTTRANSDATE = SQL.DATE8
    WHERE PART = :BSH_PART;
    LOOP 140;
    LABEL 840;
    CLOSE BSH_CUR;
    LABEL 940;
    UNLINK PART;

    סמי
    משתתף
    צודק , סוף סוף זה הצליח ובסוף השתמשתי בטבלת GENERALLOAD לשמור את הערכים זמנית . תודה רבה
מוצגות 9 תגובות – 1 עד 9 (מתוך 9 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.