input של מק"טים ספיציפיים בפרוצדורה

פורומים אפיון ופיתוח פריוריטי input של מק"טים ספיציפיים בפרוצדורה

  • Post
    אלמוני
    אורח
    אהלן,
    אני רוצה ליצור פרוצדורה לדוח שהקלט הוא מק"ט.

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

    ניסיתי להגדיר SQLI לפני ששואב את הנתונים הרלוונטיים(מוצרים ללקוח).

    יש למישהו רעיון כיצד ניתן ליישם?

    תודה,
    דן.

מוצגות 9 תגובות – 1 עד 9 (מתוך 9 סה״כ)
  • Replies
    אלמוני
    אורח
    לא ציינת בכמה פריטים מדובר. CHOOSE מתאים כל עוד יש לך בין 2-10 פריטים (אין הגבלה בפועל אבל לא יהיה קל לתפעל עם כמות חלופות גדולה). כך גם תוכל לבחור רק פריט אחד בכל פעם.

    אפשר להגדיר הפעלה CHOOSE-FIELD לפרמטר של הפריטים. הפעלה כזו יכולה להציג לדוגמא רק פריטים בהם דגל מסוים מסומן.

    אפשרות נוספת: בשלב מקדים, "תלנקק" טבלה המבוססת על פריטים ותכניס את הפריטים הרצויים לתוך הטבלה הזו. מכאן ואילך, תשתמש רק בטבלה המלונקקת.

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

    האם מספיק לרשום קוד רק בשלב ה Choose ולפני ה input?
    יש לך דוגמא לקוד שעובד?

    תודה,
    דן.

    אלמוני
    אורח
    לפי התאור הזה, אתה ניגש לבעיה בצורה לא נכונה. לא צריך CHOOSE ולא CHOOSE-FIELD
    בהנחה שיש לך קורסור שעובר על הפריטים הללו, צריך לכתוב משהו כזה

    DECLARE CUR CURSOR FOR
    SELECT CUSTPART.PART
    FROM CUSTPART, CUSTOMERS
    WHERE CUSTPART.CUST = CUSTOMERS.CUST
    AND CUSTOMERS.CUSTNAME = ...
    אלמוני
    אורח
    אני מכיר כמובן cursor…

    הכוונה להגביל את הבחירה ב INPUT לפני ה SQLI
    בשביל זה צריך CHOOSE או פתרון אחר אם אתם מכירים..

    תודה,
    דן.

    yitzchok
    משתתף
    IL
    1. צטט בבקשה הודעות שגיאה. יכול להיות או שהכוונה לא לפי הפירוש שלך או לכל הפחות ישפוך לנו קצת אור

    2. המטרה לא ברורה. המשתמש חייב לבחור מוצר אחד מתוך הקבוצה המדוברת? או יכול לבחור אחד או יותר אבל לא מחוץ לקבוצה? אמור להיות אפשר לבחור את כל הקבוצה אם לא מציינים?

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    אלמוני
    אורח
    מצ"ב צילום מסך.

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

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

    אני מנסה להגדיר כאמור משתנה ב 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;

    אלמוני
    אורח
    בהנחה של מספר הלקוח ידוע ואינו משתנה, אתה צריך שלב 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. אם הקובץ ריק, צריך להכניס לתוך הטבלה המלנוקקת את כל הפריטים של אותו הלקוח.
    yitzchok
    משתתף
    IL
    נעם
    בחירה מרובה מצריך זום למסך, לא?
    ב NFILE אני חושב שאפשר לרשום *, וגם טם לא לדעתי רצוי שיבחר את כל הקבוצה המדוברת
    מה שחוזר מהזום או מ-* לא מוגבל
    לכן לדעתי יש צורך גם לבדיקה שאין בחירה מעבר לקבוצה, ומצד שני אם נבחר הכל אז להעיף מהבירה את הרשומות הלא רלוונטיות
      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    אלמוני
    אורח
    הייתי צריך לצאת לפני שסיימתי לכתוב את התשובה הקודמת. בשלב ה-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.
מוצגות 9 תגובות – 1 עד 9 (מתוך 9 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.