› פורומים › אפיון ופיתוח פריוריטי › פיצוץ עץ מוצר לשימוש בדוח – SONRAW או PARTTREE
- This topic has 19 תגובות, משתתף 1, and was last updated לפני 9 שנים, 9 חודשים by
snoof123.
- Post
-
- דצמבר 9, 2015 בשעה 10:13 pm
היי,
אני צריך שמשתמש יזין קלט:
מוצר אב וכמות שצריך לייצר ממוצר אב (עבור יותר ממוצר אב 1).
לצורך זה בניתי טבלה זמנית שאפשר להזין בה מוצר אב וכמות.
בנוסף בניתי לזה מסך.
אחרי שהמשתמש בפרוצדורה מזין קלטים של אבות וכמויות אני רוצה להשתמש בתכנית מקומפלת לפיצוץ העץ אבל שתשתמש בקלטים שהמשתמש הזין.האם מישהו יכול להסביר לי כיצד אני עושה את זה?
ניסיתי להשתמש בSONRAW כשאני עושה SQLI:
LINK PART TO PRT
אח"כ בתוך לולאה הכנסתי לPART את הPARTים שהמשתמש הזין קודם לכן.
הבעיה שהדוח יוצא ריק כל הזמן…
- Replies
-
- דצמבר 10, 2015 בשעה 10:00 pm
להלן קוד אשר לוקח פריטים אשר נמצאים בשורות הזמנה ומפוצץ אותם
LINK ORDERS TO :$.ORD;
ERRMSG 1 WHERE :RETVAL 0
GROUP BY ORIG.PART, ORIG.PARTNAME;
EXECUTE SONRAW :PRT, SQL.DATE8, :ARC, 5;
INSERT INTO STACK4 (KEY, INTDATA, REALDATA)
SELECT PARTARC.SON, PARTPARAM.WARHS,
SUM (PARTARC.COEF * PART.FATQUANT)
FROM PARTARC, PART, PARTPARAM, WAREHOUSES
WHERE PARTARC.PART = PART.PART
AND PARTARC.SON = PARTPARAM.PART
AND PARTPARAM.WARHS = WAREHOUSES.WARHS
GROUP BY PARTARC.SON, PARTPARAM.WARHS;
UNLINK PARTARC;
UNLINK PART;
UNLINK ORDERS;
UNLINK STACK4;
יש שני מפתחות לשימוש ב-SONRAW: טבלה מלונקקת PARTARC וטבלה מלונקקת שמכילה את הפריטים אותם יש לפוצץ. בדוגמא לעיל השתמשתי בטבלאות שהוגדרו בתוך הפרוצדורה במצעות SELECT SQL.TMPFILE אולם אפשר להשתמש בפרמטר שהוא חיצוני לפרוצדורה.
הכי חשוב לזכור: הטבלה הזמנית PART שמכילה את פריטים המיועדים לפיצוץ "מסתירה" את טבלת הפריטים הרגילה, כך אם אתה צריך לקחת נתון מטבלת הפריטים – כמו טיפוס – אז חייבים להשתמש בכינוי (alias). אתה גם צריך לשמור את שני השדות PART ו-PARTNAME – לא מספיק לשמור רק את PART.
רוב הנסתר על הגלוי, אך בסוף מתרגלים לשימוש ב-SONRAW
- דצמבר 13, 2015 בשעה 12:41 pm
היי, השתמשתי בקוד הזה, במקום הזמנות השתמשתי בטבלה שלי שמכילה את המפתח של האבא וכמויות לכל אב. (החלפתי עמודות, טבלאות וחיתוכים בהתאמה).
לצערי קיבלתי דוח ריק…
האם הייתי צריך לכתוב משהו אחר במקום SQL.TMPFILE ? (את זה אני לא כ"כ הבנתי).
LINK INTL_BOMSIM TO :$.ORD;
ERRMSG 1 WHERE :RETVAL 0
AND ORIG.TYPE = 'P'
AND ORIG.PART > 0;
/*GROUP BY ORIG.PART, ORIG.PARTNAME*/
EXECUTE SONRAW :PRT, SQL.DATE8, :ARC, 5;
INSERT INTO STACK4 (KEY, INTDATA, REALDATA)
SELECT PARTARC.SON, PARTPARAM.WARHS,
SUM (PARTARC.COEF * PART.FATQUANT)
FROM PARTARC, PART, PARTPARAM, WAREHOUSES
WHERE PARTARC.PART = PART.PART
AND PARTARC.SON = PARTPARAM.PART
AND PARTPARAM.WARHS = WAREHOUSES.WARHS
GROUP BY PARTARC.SON, PARTPARAM.WARHS;
UNLINK PARTARC;
UNLINK PART;
UNLINK INTL_BOMSIM;
UNLINK STACK4;- דצמבר 13, 2015 בשעה 12:53 pm
עוד משהו..
האם אני עדיין צריך להריץ את התכנית SONRAW בשלב אחרי?
והאם הדוח שאני משתמש בו (שהוא כעת הדוח המקורי SONRAW) אמור להכיל את המידע שיוצא מהקוד הזה בסוף..- דצמבר 13, 2015 בשעה 1:08 pm
צריך לוודא שהפרטמר :$.ORD אכן מכיל נתונים של INTL_BOMSIM. אני חושש שהתעקת מבלי לבדוק לכן השורה הזו חשודה כמיותרת.בשורה אחרי INSERT INTO PART, מוטב לכתוב SELECT INTL_BOMSIM.FPART, ORIG.PARTNAME, SUM (INTL_BOMSIM.RQTY) ולסיים עם GROUP BY. יכול להיות שדווקא השורה שנכנסת לטבלה ללא כמות. כאן אתה צריך לכתוב כמו שכתבת במשפט SELECT – INTL_BOMSIM.FPART, ORIG.PARTNAME ולא כפי שכתבת בהערה.
אגב, כל מה שקשור ל-WAREHOUSES מיותר – אפשר למחוק.
- דצמבר 13, 2015 בשעה 1:09 pm
- דצמבר 13, 2015 בשעה 1:30 pm
קודם כל, תודה רבה על המענה המהיר והמפורט.
איך אני משתמש בדוח שמציג את הנתונים אחרי הדבר הזה?
ראיתי שעשית UNLINK לכל הטבלאות בסוף, לאן המידע הזה הולך אם ארצה להשתמש בו?- דצמבר 13, 2015 בשעה 1:38 pm
וצדקת, ORD לא מכיל נתונים.
הוצאתי את זה לקובץ והקובץ מכיל רק שמות עמודות.
שזה מוזר, כי בתכלס אני יודע שאם לא עושים דליט אחרי הלינק אז הקובץ בלינק מכיל את כל הרשומות שיש בטבלה לפני הלינק.. אולי אני טועה (?)- דצמבר 13, 2015 בשעה 1:45 pm
הכנסת לתוך טבלת STACK4 מצביע אל פריט והכמות הדרשת. הפרוצדורה מניחה שאחרי שלב SQLI יבוא שלב של דו"ח אשר משתמש בנתונים האלה, תוך כדי שימוש ב-STACK4. כמובן צריך להעביר פרמטר STK אל הדו"ח ולציין שמדובר ב-STACK4 (תסתכל בשלבים 22 ו-30 של פרוצדורה FAULTFRQ).עקרונית, UNLINK אינו הכרחי במצב הזה. מצב שכן נדרש: נניח שיש לינק אל טבלת הפריטים ובשלב מסוים, סיימת להשתמש בנתונים הללו. אפשר לכתוב UNLINK PART. מאותו רגע, כל התיחסות לטבלת PART תהיה לטבלה האמיתית.
- דצמבר 13, 2015 בשעה 1:51 pm
כאשר כותבים SELECT SQL.TMPFILE INTO :PRT FROM DUMMY, LINK PART TO :PRT
אז הטבלה המקומית PART תכיל את כל השדות של טבלת PART האמיתית, אך תהיה ריקה. אותו הדבר אם יש פרטמטר PRT לפרוצדורה, כאשר אין שאלה לגביו (שוב, שלב 22 בפרוצדורה FAULTFRQ : כל הטבלאות הזמניות מלבד MALFUNCTIONS תהיינה ריקות.אך אם יש שאלה לגבי הפרטמטר (שלב 20 באותה פרוצדורה), אז הפרמטר MLF יכיל את רשימת התקלות שנבחרו, לכן הבטלה המקומית MALFUNCTIONS תכיל את התקלות שנבחרו. בתכנית המקורית שהצגתי, ההנחה היתה שהפרמטר ORD מכיל מספר הזמנות.
אם אתה צריך את *כל* הרשומות שבטבלה, אז לא משתמשים ב-LINK.
- דצמבר 13, 2015 בשעה 3:45 pm
תודה, ברגע שבניתי את הדוח על סמך טבלת STACK4 והוספתי לטבלה הזו כל מיני קלטים נוספים הכל הסתדר.
ממש ממש ממש תודה על כל הסבלנות הזו ועל העזרה. 🙂- דצמבר 14, 2015 בשעה 1:06 pm
יש לי בעיה אחת עיקרית בדבר הזה:
כדי שהמערכת תכניס לי את אותו מוצר בן כאשר מדובר בכמה אבות שונים, שיניתי קצת את הקוד באופן הבא:
INSERT INTO STACK4 (KEY,INTDATA2,REALDATA,INTDATA)
SELECT SQL.LINE,
PARTARC.SON, SUM (PARTARC.COEF * PART.FATQUANT), PARTARC.PART
FROM PARTARC, PART
WHERE PARTARC.PART = PART.PART
GROUP BY PARTARC.SON,PARTARC.PART;הבעיה היא שכעת כשאני מציג את הדוח הטבלאי יש לי פעמיים את אותו מק"ט בן, ובמקום שיהיה כתוב עבור מק"ט אב1 כמות X ועבור מק"ט אב2 כמות 2X
מוצר בן מופיע בשתי שורות שונות (עבור כל מוצר אב) וככה גם אני לא יכול להציג סיכומים וגם הדוח לא מספק את העבודה.האם יש למישהו רעיון איך לטפל בנושא הזה?
תודה לכל העוזרים 🙂
- דצמבר 14, 2015 בשעה 1:58 pm
הקוד שכתבתי מציג את הסה"כ הבנים הנרדשים, בלי קשר לאבות. אם אתה מתכוון להציג נתונים כמו אב, בן, כמות וכו', אז כדאי לבטל את כל הקשור ל-STACK4 ובמקומו להשתמש בטבלה המקורשת PARTARC, אשר כן מכיל את הקישורים.דרך אחרת: במקום לשמור את PARTARC.PART ב-STACK4.INTDATA, שמור אותו ב-STACK4.KEY בצורה
INSERT INTO STACK4 (KEY, INTDATA, REALDATA)
SELECT PARTARC.PART, PARTARC.SON, SUM (PARTARC.COEF * PART.FATQUANT)
FROM PARTARC, PART
WHERE PARTARC.PART = PART.PART
GROUP BY PARTARC.PART, PARTARC.SON;
- דצמבר 14, 2015 בשעה 2:32 pm
יכול להיות שאני לא מבין נכון אבל:
אם אתה משתמש בקוד שלך כשמפתח האב נכנס לKEY אז בעצם אנחנו נוכל להכניס לטבלה כמות בנים ממש מצומצמת כי אחרי ההכנסה של השורה הראשונה המפתח הזה כבר יהיה תפוס ולא יוכל להכניס שוב מוצרים נוספים עבור אותו אבא.בנוגע לפיתרון הראשון שהצעת בהודעה:
בפרוצדורה שנוצרה לי לפי הקוד שלך אני יכול להשתמש בדוח שלי בPARTARC וזהו?
אני צריך להוסיף משתנה לשלב של הדוח במקרה כזה?- דצמבר 14, 2015 בשעה 3:32 pm
- דצמבר 15, 2015 בשעה 2:48 pm
זה מה שעשיתי בעצם, אבל הכנסתי לתוך טבלה STACK10
U אחד לאבא
U אחד לבן
אבל עדיין זה מציג לי חלק מהמוצרים פעמיים בפיבוט
ז"א הוא מציג לי שורה לבן עבור אב אחד ועוד שורה עבור אב שני..
אני צריך שורה אחת לשני האבות ובתוך הגרף יהיה כתוב כמה צריך עבור כל אב.נניח:
כמות, אבא1, אבא2
ילד1 50 15
ילד2 20 10ולא מצב כזה:,
כמות, אבא1, אבא2
ילד1 50
ילד1 15
- יש להתחבר למערכת על מנת להגיב.