דוח סיכום מחירים והנחות ללקוח – איך מוסיפים התניה?

פורומים אפיון ופיתוח פריוריטי דוח סיכום מחירים והנחות ללקוח – איך מוסיפים התניה?

  • Post
    Interlligent
    משתתף
    היי חברים,

    נכנסתי לפרוצדורה של הדוח – מכירות > מחירים והנחות > סיכום מחירים והנחות ללקוח
    כמובן שכפלתי את הפרוצדורה וגם את הדוח שבתוכה.

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

    חשבתי על לבנות דוח נוסף רק שהוא יציג את המוצרים ללקוח.
    ודרך GO TO בהתאם לבחירה, הוא יקבל את הדוח השני… זה כיוון נכון?

    בכול מיקרה, מדובר בתוכנית ואני לא יודע איך אני מעביר את המשתמש בין הדוחות.

    האם יש דרך אחרת?

    אשמח לעזרתכם.

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

מוצגות 13 תגובות – 1 עד 13 (מתוך 13 סה״כ)
  • Replies
    123
    משתתף
    צנסה להתוסיף שלב sqli מותנה בדגל שבו תמלא טבלת stack8 מפתח של הלקוח ושל המוצר ממסך מוצרים ללקוח.
    תוסיף את הטבלה בחיתוך מותנה לדוח למוצרים ולקוחות. ככה תוכל להפיל רשומות .
    yitzchok
    משתתף
    IL
    קודם כל אני ארשום שאני מסתייג טיפה בגלל שלא בדקתי איך הדו"ח הספציפי הזה עובד

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

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

    הטריק הוא לעשות את השינוי בדו"ח באופן שקוף.
    לדוגמה:
    כאן נדרש לדוגמה דגל (CHAR1), ורוצים שהדו"ח ישתנה אם הערך של הדגל הוא Y וכל עוד הוא ריק אז הדו"ח יתנהג כרגיל, וזה מתאים מאוד.
    הייתי אומר שנשמע שגישה כזאת תעבוד:
    תוסיף לדו"ח עמודה (מוסתרת) על PART.PART
    לזה תוסיף תנאי מעין זה:
    IN (SELECT PART FROM .... ) OR :zzz = ''
    כאשר zzz זה הפרמטר, שתקבע קצת משונה כדי להקטין את הסיכוי ששדרוג יוסיף לפרוצדורה המקורית פרמטר בעל אותו שם
    וב-subquery אתה דואג לסינון למוצרים ללקוח

    מקווה שזה עוזר

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

    ושוב, המון תודות 🙂

    123
    משתתף
    הי יצחק, כיצד אתה יוצר קשר בתת שאילתא בין הלקוח בדוח ללקוח בשאילתא הפנימית?
    yitzchok
    משתתף
    IL
    אתה יכול להתייחס לטבלאות מהשאילתא של הדו"ח בתוך השאילתא הפנימית
    היות ואין חפיפה ביניהם זה פשוט

    הנה גרסה בסיסית – השאילתא עברה הכנה אבל לא בדקתי עד לקבלת תוצאות. אותי תרצה להוסיף תנאי על דגל בתוקף וכו'

    IN (SELECT PART FROM CUSTPART WHERE CUST = CUSTDISCREP.CUST) OR :zzz = ''

    ליתר בטחון אפשר אולי להוסיף אליאס כמו

    IN (SELECT PART FROM CUSTPART MY_CUSTPART WHERE CUST = CUSTDISCREP.CUST) OR :zzz = ''

    כדי להגן מפני הוספת אותה טבלה לדו"ח כסטנדרט בעתיד

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    Interlligent
    משתתף
    תודה רבה חברים!

    לקחתי את מה שרשמת ויצא לי הדוח רק עם המוצרים ללקוח.
    גם לאחר הורדת ה V הציג רק מוצרים ללקוח.

    מבלי לשבור את הראש יותר מידי, עשיתי לפרוצדורה GOTO , כאשר יש V לך לדוח עם המוצרים ללקוח 🙂

    עובד מעולה!

    ושוב תודה!

    Interlligent
    משתתף
    היי יצחק,

    הדוח עובד מעולה בהתאם להנחיות שלך! 🙂

    אשמח לעוד עזרה קטנטנה שקצת הסתבכתי איתה 🙂

    אני רוצה להוסיף לדוח (לאחר שהדוח מציג רק את מוצרי הלקוח, גם את הדגל "בתוף?" שנמצא במסך מוצרים ללקו:
    CUSTPART.VALIDFLAG

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

    אשמח מאוד! לעזרתך!
    תודה

    yitzchok
    משתתף
    IL
    חשוב גם כאן לא לשבש את החיתוכים…

    Cust יש לך בכל שורה
    Part יש לך בכל שורה
    (אם אני זוכר נכון)

    אתה צריך להכניס את custpart (מזהה 5+ כמובן) עם חיתוך תותנה (?) בקישור לנ"ל כי אתה לא יודע בוודאות (כשאתה לא מסנן לפי מוצרי לקוח) שתהיה רשומה מתאימה בטבלה זאת.
    חשוב להבין שאין קשר בין מופע זה של הטבלה לזה שיש בתת-שאילתא ולכן אתה צריך חיתוך חדש מסודר.

    מקווה שזה עוזר

    (דרך אגב אולי יעזור אם אציין שמדובר בהכפלה קרטזית – אין קשר לכרטסת)

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    Interlligent
    משתתף
    תודה , אנסה מחר!

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

    נסיתי להכניס את העמודה עם מזהה 5 ועשיתי חיתוכים כפי שמופיע לי ברמת המסך,
    שזה PART עם הטבלה של המסך ו CUST עם מסך האב.

    אבל אז היו לי הכפלת רשומות.

    yitzchok
    משתתף
    IL
    אז אולי תביא כאן dump של שאילתת הדו"ח?
      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    Interlligent
    משתתף
    היי יצחק,

    לצערי גם אחרי הוספת החיתוכים אני לא מצליח (כמובן כולם עם מזהה 9? )

    זה ה DUMP של הדוח:

    /*
    *
    ‎ * Report MYBS_CUSTDISC1 : ‎מגוון‎/‎ללקוח‎ ‎והנחות‎ ‎מחירים‎ ‎סיכום
    *
    */

    /* סיכום מחירים והנחות ללקוח/מגוון */
    ‎ SELECT CUSTOMERS.CUSTNAME AS '‎לקוח‎ .‎מס‎',
    ‎ CUSTOMERS.CUSTDES AS '‎לקוח‎ ‎שם‎',
    ‎ CUSTDISCREP.CDISCOUNT AS '(%) ‎כללית‎ ‎הנחה‎',
    ‎ CUSTOMERS1.CUSTNAME AS '‎מרכז‎ ‎לקוח‎ \'‎מס‎',
    ‎ CUSTOMERS1.CUSTDES AS '‎מרכז‎ ‎לקוח‎ ‎שם‎',
    ‎ CUSTDISCREP.MDISCOUNT AS '(%) ‎מ‎"‎לל‎ ‎כללית‎ ‎הנחה‎',
    ‎ CUSTDISCREP.GMDISCOUNT AS '(%) ‎כ‎"‎לל‎ ‎כללית‎ ‎הנחה‎',
    ‎ PART.PARTNAME AS '‎ט‎"‎מק‎',
    ‎ PART.PARTDES AS '‎מוצר‎ ‎תאור‎',
    ‎ CUSTDISCREP.CPPRICE AS '‎מוצר‎ /‎ללקוח‎ ‎מחיר‎',
    ‎ CURRENCIES1.CODE AS '.‎מט‎',
    ‎ UNIT1.UNITNAME AS '.‎יח‎',
    ‎ CUSTDISCREP.MCPPRICE AS '‎מוצר‎ /‎מ‎"‎לל‎ ‎מחיר‎',
    ‎ CURRENCIES3.CODE AS '.‎מט‎',
    ‎ UNIT3.UNITNAME AS '.‎יח‎',
    ‎ CUSTDISCREP.GMCPPRICE AS '‎מוצר‎ /‎כ‎"‎לל‎ ‎מחיר‎',
    ‎ CURRENCIES6.CODE AS '.‎מט‎',
    ‎ UNIT6.UNITNAME AS '.‎יח‎',
    ‎ CUSTDISCREP.PLPRICE AS '‎לקוח‎ ‎מחירון‎',
    ‎ CURRENCIES2.CODE AS '.‎מט‎',
    ‎ UNIT2.UNITNAME AS '.‎יח‎',
    ‎ CUSTDISCREP.MPLPRICE AS '‎מרכז‎ ‎לקוח‎ ‎מחירון‎',
    ‎ CURRENCIES4.CODE AS '.‎מט‎',
    ‎ UNIT4.UNITNAME AS '.‎יח‎',
    ‎ CUSTDISCREP.GMPLPRICE AS '‎כללי‎ ‎לקוח‎ ‎מחירון‎',
    ‎ CURRENCIES7.CODE AS '.‎מט‎',
    ‎ UNIT7.UNITNAME AS '.‎יח‎',
    ‎ CUSTDISCREP.BPLPRICE AS '‎בסיס‎ ‎מחירון‎',
    ‎ CURRENCIES5.CODE AS '.‎מט‎',
    ‎ UNIT5.UNITNAME AS '.‎יח‎',
    ‎ CUSTDISCREP.FAMPERCENT AS '‎משפחה‎ /‎ללקוח‎ ‎הנחה‎',
    ‎ CUSTDISCREP.FAMMPERCENT AS '‎משפחה‎ /‎מ‎"‎לל‎ ‎הנחה‎',
    ‎ CUSTDISCREP.FAMGMPERCENT AS '‎משפחה‎ /‎כ‎"‎לל‎ ‎הנחה‎',
    ‎ CUSTDISCREP.CPPERCENT AS '‎מוצר‎ /‎ללקוח‎ ‎הנחה‎',
    ‎ CUSTDISCREP.MCPPERCENT AS '‎מוצר‎ /‎מ‎"‎לל‎ ‎הנחה‎',
    ‎ CUSTDISCREP.GMCPPERCENT AS '‎מוצר‎ /‎כ‎"‎לל‎ ‎הנחה‎',
    ‎ CUSTDISCREP.PRICE AS '‎סופי‎ ‎מחיר‎',
    ‎ CURRENCIES.CODE AS '.‎מט‎',
    ‎ UNIT.UNITNAME AS '.‎יח‎',
    ‎ CUSTPART9.VALIDFLAG AS '?‎בתוקף‎',
    ‎ CUSTPART.PART AS '(ID) ‎ט‎"‎מק‎',
    ‎ CUSTPART.CUSTPART AS '(ID) ‎ט‎"‎מק‎ ‎לקוח‎',
    ‎ CUSTPART.CUST AS '(ID) ‎לקוח‎ \'‎מס‎'
    FROM CUSTPART , CUSTPART CUSTPART9 ?, UNIT , CURRENCIES , UNIT UNIT5
    , CURRENCIES CURRENCIES5 , UNIT UNIT7 , CURRENCIES CURRENCIES7 , UNIT
    UNIT4 , CURRENCIES CURRENCIES4 , UNIT UNIT2 , CURRENCIES CURRENCIES2
    , UNIT UNIT6 , CURRENCIES CURRENCIES6 , UNIT UNIT3 , CURRENCIES CURRENCIES3
    , UNIT UNIT1 , CURRENCIES CURRENCIES1 , PART , CUSTOMERS CUSTOMERS1
    , CUSTDISCREP !, CUSTOMERS
    WHERE (PART.PART IN (SELECT PART FROM CUSTPART WHERE CUST = CUSTDISCREP.CUST)
    AND :CFL = 'Y')
    AND (CUSTDISCREP.MCUST = CUSTOMERS1.CUST)
    AND (CUSTDISCREP.CUST = CUSTOMERS.CUST)
    AND (CUSTDISCREP.GMPLUNIT = UNIT7.UNIT)
    AND (CUSTDISCREP.GMCPUNIT = UNIT6.UNIT)
    AND (CUSTDISCREP.GMPLCURRENCY = CURRENCIES7.CURRENCY)
    AND (CUSTDISCREP.GMCPCURRENCY = CURRENCIES6.CURRENCY)
    AND (CUSTDISCREP.CPPRICE 0.0 OR MCPPRICE 0.0 OR PLPRICE 0.0 OR
    CUSTDISCREP.MPLPRICE 0.0 OR CUSTDISCREP.CPPERCENT 0.0 OR CUSTDISCREP.MCPPERCENT
    0.0 OR CUSTDISCREP.FAMPERCENT 0.0 OR CUSTDISCREP.CDISCOUNT 0.0
    OR CUSTDISCREP.MDISCOUNT 0.0 OR CUSTDISCREP.FAMPERCENT 0.0 OR :FLG
    = 1)
    AND (CUSTDISCREP.BPLUNIT = UNIT5.UNIT)
    AND (CUSTDISCREP.MPLUNIT = UNIT4.UNIT)
    AND (CUSTDISCREP.PLUNIT = UNIT2.UNIT)
    AND (CUSTDISCREP.MCPUNIT = UNIT3.UNIT)
    AND (CUSTDISCREP.CPUNIT = UNIT1.UNIT)
    AND (CUSTDISCREP.UNIT = UNIT.UNIT)
    AND (CUSTDISCREP.BPLCURRENCY = CURRENCIES5.CURRENCY)
    AND (CUSTDISCREP.MPLCURRENCY = CURRENCIES4.CURRENCY)
    AND (CUSTDISCREP.PART > 0)
    AND (CUSTDISCREP.PART = PART.PART)
    AND (CUSTDISCREP.CPCURRENCY = CURRENCIES1.CURRENCY)
    AND (CUSTDISCREP.PLCURRENCY = CURRENCIES2.CURRENCY)
    AND (CUSTDISCREP.MCPCURRENCY = CURRENCIES3.CURRENCY)
    AND (CUSTDISCREP.CURRENCY = CURRENCIES.CURRENCY)
    AND ( 1=1 )

    ORDER BY 1 ASC, 8 ASC ;

    וזה הDUMP של הפרוצדורה:

    Procedure MYBS_CUSTDISC1:

    /*
    *
    ‎ * Procedure MYBS_CUSTDISC1 : ‎מגוון‎/‎ללקוח‎ ‎והנחות‎ ‎מחירים‎ ‎סיכום
    *
    */

    POS ENAME TY TITLE
    --- ---------------- - --------------------------------
    ‎ 2 CHOOSE B ‎פרמטר‎ ‎בחירת
    Parameters
    ----------
    ‎ HL1(CHOOSE‎ל‎ ‎עזרה‎): HELP,Input
    ‎ FLG(‎ח‎"‎הדו‎ ‎הפקת‎ ‎אופן‎): INT,Input
    ‎ F1=1(‎המחירונים‎ ‎כל‎): INT,Input
    ‎ F2=2(‎בלבד‎ ‎לקוח‎ ‎מחירוני‎): INT,Input
    ‎ 10 CUSTDISC C ‎ללקוח‎ ‎והנחות‎ ‎מחירים‎ ‎סיכום‎ ‎ביצוע
    Parameters
    ----------
    CUS: FILE,CUSTOMERS.CUSTNAME,Input
    PAR: FILE,PART.PARTNAME,Input
    CPP: FILE
    ‎ DIS=SQL.DATE8(‎תאריך‎): DATE,Input
    ‎ CFL(?‎לקוח‎ ‎מוצרי‎): CHAR,Input
    ‎ 12 SQLI C ‎הנתונים‎ ‎למסד‎ ‎גישה
    Parameters
    ----------
    CFL: CHAR
    Query
    -----
    #line 1 MYBS_CUSTDISC1/12---
    :MYBS_CUSTDISC1.GO = (:MYBS_CUSTDISC1.CFL = 'Y' ? 30 : 20);

    ‎ 15 GOTO B ‎אחר‎ ‎לשלב‎ ‎דלוג
    Parameters
    ----------
    GO: INT
    ‎ 20 CUSTDISC R ‎ללקוח‎ ‎והנחות‎ ‎מחירים‎ ‎סיכום
    Parameters
    ----------
    CPP=CUSTDISCREP: FILE
    DIS: DATE
    FLG: INT
    ‎ 21 GOTO B ‎אחר‎ ‎לשלב‎ ‎דלוג
    Parameters
    ----------
    GO=40: INT
    ‎ 30 MYBS_CUSTDISC1 R ‎מגוון‎/‎ללקוח‎ ‎והנחות‎ ‎מחירים‎ ‎סיכום
    Parameters
    ----------
    CFL: CHAR
    CPP=CUSTDISCREP: FILE
    DIS: DATE
    FLG: INT
    ‎ 40 END B ‎פרוצדורה‎ ‎סיום

    yitzchok
    משתתף
    IL
    הבאת גם custpart וגם custpart9 ולא עשית חיתוך כלל מול CUSTDISCREP !!

    ובעצם בגלל שיצרת דו"ח מיוחד לא היית צריך את הגישה שלי עם התת-שאילתא אלא מספיק חיתוך בין part ו-cust של custdiscrep לאלה שב custpart9 (ללא סימן שאלה) או custpart ולא צריכים את המופע השני שלו

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    Interlligent
    משתתף
    מעולה!!!!!!!!!
    עכשיו עובד פרפקט!!!

    תודה יצחק 🙂

מוצגות 13 תגובות – 1 עד 13 (מתוך 13 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.