דוח מלאי מצטבר והזמנות לקוח פתוחות לפריטים

פורומים אפיון ופיתוח פריוריטי דוח מלאי מצטבר והזמנות לקוח פתוחות לפריטים

  • Post
    assaf
    משתתף
    בניתי שאילתה עבור מלאי מצטבר לכל הפריטים הקיימים במחסנים.
    <p style="direction: rtl;">ברגע שאני מוסיף עמודה של הזמנות לקוחות פתוחות זה מתחרבש.</p>
    ברור לי שאני עושה משהו לא נכון, אשמח לעזרה, מצורף הקוד:

    
    SELECT
    PART.PARTNAME,
    PART.PARTDES,
    SUM(REALQUANT(WARHSBAL.BALANCE)) AS 'STOCK',
    SUM(REALQUANT(ORDERITEMS.TBALANCE)) AS 'ORDERED'
    FROM PART, WARHSBAL, WAREHOUSES, ORDERITEMS
    WHERE PART.PART = WARHSBAL.PART
    AND WARHSBAL.WARHS = WAREHOUSES.WARHS
    AND WAREHOUSES.WARHSNAME IN ('Main', 'WHS2', 'WH3')
    AND WARHSBAL.BALANCE > 0
    AND ORDERITEMS.PART = WARHSBAL.PART
    AND ORDERITEMS.CLOSED = '\0'
    AND PART.PARTNAME LIKE '20TD%'
    GROUP BY 1,2
    FORMAT;
    
    
    • הדיון הזה עודכן לפני 3 שנים ע״יassaf.
מוצגות 9 תגובות – 1 עד 9 (מתוך 9 סה״כ)
  • Replies
    yitzchok
    משתתף
    IL
    סכם את ההזמנות לפי מק"ט קודם ותעשה חיתוך בנ"ל עם זה. אתה מכפיל כרגע לפי מספר השורות ב-ORDERITEMS
      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    yitzchok
    משתתף
    IL
    ואם אין הזמנות אתה לא מקבל מלאי
      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    assaf
    משתתף
    תודה יצחק,
    אני רוצה לראות גם מלאי לפריטים שאין עבורם הזמנה.
    איך הכי נכון לבנות את השאילתה?
    NoamN
    משתתף
    none
    למדתי מאד מוקדם בקרירה שאין לכתוב דו"ח שמסוכם שני דברים לא קשורים אלא צריך לכתוב פרוצדורה שתעשה זאת. נניח שיש קורסור שעובר על פריטים: בתוך הלולאה אתה סוכם את המלאי בשאילתא אחת, סוכם את ההזמנות בשאילתא ואז כותב את הנתונים לבטלת מעבר. אפשר להקל קצת אם אתה רוצה רק פריטים שנמצאים במלאי כלהלן

    DECLARE CUR CURSOR FOR
    SELECT WARHSBAL.PART, REALQUANT (SUM (WARHSBAL.BALANCE))
    FROM WARHSBAL, WAREHOUSES
    WHERE WARHSBAL.WARHS = WAREHOUSES.WARHS
    AND WAREHOUSES.WARHSNAME IN ('Main', 'WHS2', 'WH3')
    AND WARHSBAL.BALANCE > 0
    AND WARHSBAL.CUST = -1 /* Goods */
    GROUP BY 1;
    OPEN CUR;
    GOTO 300 WHERE :RETVAL <= 0;
    LABEL 100;
    FETCH CUR INTO :PART, :STOCK;
    GOTO 200 WHERE :RETVAL <= 0;
    :ORD = 0.0;
    SELECT SUM (REALQUANT (TBALANCE)) INTO :ORD
    FROM ORDERITEMS
    WHERE PART = :PART
    AND TBALANCE > 0
    AND CLOSED <> 'C';
    INSERT INTO STACK4 (KEY, REALDATA, REALDATA2)
    VALUES (:PART, :STOCK, :ORD);
    LOOP 100;
    LABEL 200;
    CLOSE CUR;
    LABEL 300;

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

    yitzchok
    משתתף
    IL
    למה קורסור??!! לא צריך קורסור (אבל אפשר אם רוצים להגדיל את הסיכוי לבעית ביצועים)

    אוספים את המוצרים עם מלאי בשאילתא אחת.

    אוספים את ההזמנות בשאילתא אחרת (הרי אולי רוצים מק"טים עם ההזמנות אבל ללא שורות במלאי אפילו שורות 0)

    בונים מזה רשימה של המוצרים שיש בשניהם.

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

     

     

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    assaf
    משתתף
    חשבתי על זה, אבל הייתי בטוח שהפתרון "פשוט" יותר 🙂

    תודה רבה!

    NoamN
    משתתף
    none
    INSERT INTO STACK4 (KEY, REALDATA)
    SELECT WARHSBAL.PART, REALQUANT (SUM (WARHSBAL.BALANCE))
    FROM WARHSBAL, WAREHOUSES
    WHERE WARHSBAL.WARHS = WAREHOUSES.WARHS
    AND WAREHOUSES.WARHSNAME IN (‘Main’, ‘WHS2’, ‘WH3’)
    AND WARHSBAL.BALANCE > 0
    AND WARHSBAL.CUST = -1 /* Goods */
    GROUP BY 1;
    INSERT INTO STACK2 (ELEMENT, TYPE)
    SELECT PART, SUM (REALQUANT (TBALANCE))
    FROM ORDERITEMS
    AND TBALANCE > 0
    AND CLOSED <> ‘C’
    GROUP BY 1;

    נניח שביצענו את ה-LINKS הנדרשים בהתחלה. בדו"ח צריך להשתמש בחיתוך מותנה – STACK4.KEY = STACK2.ELEMENT ? כדי שיהיו כל הפריטים שיש להם מלאי אפילו אם אין להם הזמנות פתוחות.

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

    assaf
    משתתף
    האפשרות של הקורסור עדיפה שכן נדרשים נתונים נוספים.

    שוב תודה רבה על העזרה!

    greh43j43j43
    משתתף
    יש לנו וותק של 30 שנה במכירת בגדי נשים!
מוצגות 9 תגובות – 1 עד 9 (מתוך 9 סה״כ)

תגיות: 

  • יש להתחבר למערכת על מנת להגיב.