› פורומים › אפיון ופיתוח פריוריטי › דוח מלאי מצטבר והזמנות לקוח פתוחות לפריטים
- This topic has 9 תגובות, 4 משתתפים, and was last updated לפני 3 שנים by greh43j43j43.
- Post
-
- נובמבר 7, 2021 בשעה 7:59 am
בניתי שאילתה עבור מלאי מצטבר לכל הפריטים הקיימים במחסנים.
<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.
- Replies
-
- נובמבר 7, 2021 בשעה 1:25 pm
סכם את ההזמנות לפי מק"ט קודם ותעשה חיתוך בנ"ל עם זה. אתה מכפיל כרגע לפי מספר השורות ב-ORDERITEMS[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- נובמבר 7, 2021 בשעה 1:28 pm
ואם אין הזמנות אתה לא מקבל מלאי[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- נובמבר 7, 2021 בשעה 1:30 pm
תודה יצחק,
אני רוצה לראות גם מלאי לפריטים שאין עבורם הזמנה.
איך הכי נכון לבנות את השאילתה?- נובמבר 7, 2021 בשעה 2:02 pm
למדתי מאד מוקדם בקרירה שאין לכתוב דו"ח שמסוכם שני דברים לא קשורים אלא צריך לכתוב פרוצדורה שתעשה זאת. נניח שיש קורסור שעובר על פריטים: בתוך הלולאה אתה סוכם את המלאי בשאילתא אחת, סוכם את ההזמנות בשאילתא ואז כותב את הנתונים לבטלת מעבר. אפשר להקל קצת אם אתה רוצה רק פריטים שנמצאים במלאי כלהלן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.
- נובמבר 7, 2021 בשעה 3:14 pm
למה קורסור??!! לא צריך קורסור (אבל אפשר אם רוצים להגדיל את הסיכוי לבעית ביצועים)אוספים את המוצרים עם מלאי בשאילתא אחת.
אוספים את ההזמנות בשאילתא אחרת (הרי אולי רוצים מק"טים עם ההזמנות אבל ללא שורות במלאי אפילו שורות 0)
בונים מזה רשימה של המוצרים שיש בשניהם.
מוציאים רשימה סביב האחרון עם חיתוך מותנה לקודמים. מקווה שנעם עקב לפחות.
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- נובמבר 7, 2021 בשעה 3:59 pm
חשבתי על זה, אבל הייתי בטוח שהפתרון "פשוט" יותר 🙂תודה רבה!
- נובמבר 7, 2021 בשעה 5:47 pm
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 ? כדי שיהיו כל הפריטים שיש להם מלאי אפילו אם אין להם הזמנות פתוחות.
אולי יותר מהר בביצוע אבל פחות ברור לתכנות וגם קצת "שביר". ומה קורה כאשר רוצים להציג נתן נוסף כמו שימוש ממוצע (גריעות במלאי) על פני תקופה נוספת? במקרים כאלה, הפתרון הראשון שלי עדיף כי בגוף הקורסור ניתן לאסוף כל מיני נתונים שאינם קשורים אחד לשני, מלבד הפריט.
- נובמבר 7, 2021 בשעה 6:22 pm
האפשרות של הקורסור עדיפה שכן נדרשים נתונים נוספים.שוב תודה רבה על העזרה!
- נובמבר 12, 2021 בשעה 7:31 pm
יש לנו וותק של 30 שנה במכירת בגדי נשים!
תגיות: בגדי נשים
- יש להתחבר למערכת על מנת להגיב.