› פורומים › אפיון ופיתוח פריוריטי › input של מק"טים ספיציפיים בפרוצדורה
- This topic has 9 תגובות, משתתף 1, and was last updated לפני 5 שנים, 9 חודשים by אלמוני.
- Post
-
- אפריל 29, 2019 בשעה 12:06 pm
אהלן,
אני רוצה ליצור פרוצדורה לדוח שהקלט הוא מק"ט.המטרה להגביל את בחירת המק"טים למק"טים ספיציפיים.
זה אמור להתבצע עם פקודת CHOOSE למיטב זכרוני, אבל זה לא מזהה את הפרמטר ומתקבלת הודעת שגיאה
שהמשתנה מוגדר עם שני סוגים.ניסיתי להגדיר SQLI לפני ששואב את הנתונים הרלוונטיים(מוצרים ללקוח).
יש למישהו רעיון כיצד ניתן ליישם?
תודה,
דן.
- Replies
-
- אפריל 29, 2019 בשעה 12:29 pm
לא ציינת בכמה פריטים מדובר. CHOOSE מתאים כל עוד יש לך בין 2-10 פריטים (אין הגבלה בפועל אבל לא יהיה קל לתפעל עם כמות חלופות גדולה). כך גם תוכל לבחור רק פריט אחד בכל פעם.אפשר להגדיר הפעלה CHOOSE-FIELD לפרמטר של הפריטים. הפעלה כזו יכולה להציג לדוגמא רק פריטים בהם דגל מסוים מסומן.
אפשרות נוספת: בשלב מקדים, "תלנקק" טבלה המבוססת על פריטים ותכניס את הפריטים הרצויים לתוך הטבלה הזו. מכאן ואילך, תשתמש רק בטבלה המלונקקת.
- אפריל 29, 2019 בשעה 2:00 pm
- אפריל 29, 2019 בשעה 3:19 pm
- אפריל 29, 2019 בשעה 3:30 pm
- אפריל 29, 2019 בשעה 3:58 pm
1. צטט בבקשה הודעות שגיאה. יכול להיות או שהכוונה לא לפי הפירוש שלך או לכל הפחות ישפוך לנו קצת אור2. המטרה לא ברורה. המשתמש חייב לבחור מוצר אחד מתוך הקבוצה המדוברת? או יכול לבחור אחד או יותר אבל לא מחוץ לקבוצה? אמור להיות אפשר לבחור את כל הקבוצה אם לא מציינים?
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- אפריל 29, 2019 בשעה 4:20 pm
מצ"ב צילום מסך.חוזר על המטרה,
המשתמש יבחר מק"ט אחד או יותר, אפשרויות הבחירה של המק"טים יהיו מצומצמות לפי מה שמוגדר ללקוח ספיציפי בטבלת מוצרים של לקוח.אם המשתמש לא יבצע בחירה יוצג דוח עם כל המק"טים מרשימת הבחירה המצומצמת בלבד.
אני מנסה להגדיר כאמור משתנה ב CHOOSE שיבחר רשימה של מק"טים שמוגדרים במוצרים ללקוחות.
השלב לאחריו יהיה INPUT כאשר המשתמש יבחר מק"ט מהרשימה המצומצמת מה CHOOSE.
לאחר ה INPUT
יהיה שלב הSQLI שיביא את השאילתא הנחוצה ולפי הקלט.לפי ה SDK, זאת אמורה להיות שאילתא דומה לשלב CHOOSE בפרוצדורה COPYPRICELIST
אבל מתקבלת הודעה שגיאה.כעיקרון השאילתא אמורה להיות,
LINK CUSTPART TO :$.PRT;
SELECT PARTNAME
FROM PART
WHERE PART = :PART;
UNLINK CUSTPART;ניסיתי גם להגדיר עם שלב SQLI לפני:
LINK CUSTPART TO :$.PRT;
LINK STACK9 TO :$.SKK;
:CUST = :PART = 0 ;
:KEY = 0;
:PARTNAME = ";
SELECT PART INTO :PART FROM CUSTPART
WHERE PART 0
AND CUST = 23172 ;
INSERT INTO STACK9(CHARKEY)
SELECT PARTNAME FROM PART WHERE PART = :PART;
UNLINK CUSTPART;
UNLINK STACK9;- אפריל 29, 2019 בשעה 4:30 pm
בהנחה של מספר הלקוח ידוע ואינו משתנה, אתה צריך שלב INPUT או SQLI (אפשר לבצע את הקליטה ב-SQLI) עם פרמטר PRT מטיפוס NFILE, כאשר לפרמטר הזה יש הפעלת CHOOSE-FIELD כלהלן
CHOOSE PART.PARTNAME, PART.PARTDES
FROM PART, CUSTPART, CUSTOMERS
WHERE PART.PART = CUSTPART.PART
AND CUSTPART.CUST = CUSTOMERS.CUST
AND CUSTOMERS.CUSTNAME = 'ABC'
AND PART.PARTNAME ''
ORDER BY 1;
כך המשתמש יכול לבחור כמה פריטים מתוך המוצרים ללקוח.
בשלב SQLI צריך לבדוק שנבחר משהו – לכן הצורך בטיפוס NFILE ולא FILE. אם הקובץ ריק, צריך להכניס לתוך הטבלה המלנוקקת את כל הפריטים של אותו הלקוח.- אפריל 29, 2019 בשעה 5:50 pm
נעם
בחירה מרובה מצריך זום למסך, לא?
ב NFILE אני חושב שאפשר לרשום *, וגם טם לא לדעתי רצוי שיבחר את כל הקבוצה המדוברת
מה שחוזר מהזום או מ-* לא מוגבל
לכן לדעתי יש צורך גם לבדיקה שאין בחירה מעבר לקבוצה, ומצד שני אם נבחר הכל אז להעיף מהבירה את הרשומות הלא רלוונטיות[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- אפריל 29, 2019 בשעה 8:03 pm
הייתי צריך לצאת לפני שסיימתי לכתוב את התשובה הקודמת. בשלב ה-SQLI, צריך להתחיל כך
LINK PART TO :$.PRT;
ERRMSG 1 WHERE :RETVAL 0;
INSERT INTO PART (PART, PARTNAME)
SELECT ORIG.PART, ORIG.PARTNAME
FROM PART ORIG, CUSTPART, CUSTOMERS
WHERE ORIG.PART = CUSTPART.PART
AND CUSTPART.CUST = CUSTOMERS.CUST
AND CUSTOMERS.CUSTNAME = 'abc';
LABEL 1;
...
אסביר. השורה GOTO 1 FROM PART WHERE PART < 0 בודק האם הטבלה המלונקקת מכילה רשומות. אם יש, אז מדלגים על הקטע הבא. אם אין פריטים – לא נתנו תחום פריטים, או רשמו *, ממלאים את הטבלה המלונקקת עם כל הפריטים שמוגדרים ללקוח הספציפי. שימו לב לשימוש ב-alias כדי להתיחס אל הטבלה האמיתית PART.
- יש להתחבר למערכת על מנת להגיב.