› פורומים › אפיון ופיתוח פריוריטי › דוח סיכום מחירים והנחות ללקוח – איך מוסיפים התניה?
- This topic has 13 תגובות, 3 משתתפים, and was last updated לפני 6 שנים, 6 חודשים by Interlligent.
- Post
-
- מאי 14, 2018 בשעה 6:38 pm
היי חברים,נכנסתי לפרוצדורה של הדוח – מכירות > מחירים והנחות > סיכום מחירים והנחות ללקוח
כמובן שכפלתי את הפרוצדורה וגם את הדוח שבתוכה.אני רוצה להוסיף דגל בקלט "מוצרי לקוח".
אם המשתמש הוסיף דגל זה, הדוח יציא רק את המוצרים שיש ללקוח תחת מוצרים ללקוח.חשבתי על לבנות דוח נוסף רק שהוא יציג את המוצרים ללקוח.
ודרך GO TO בהתאם לבחירה, הוא יקבל את הדוח השני… זה כיוון נכון?בכול מיקרה, מדובר בתוכנית ואני לא יודע איך אני מעביר את המשתמש בין הדוחות.
האם יש דרך אחרת?
אשמח לעזרתכם.
דבר נוסף, נגיד ולא ניתן לעשות בחירה,
איך אני גורם לדוח שיציג לי בתואה רק את המוצרים ללקוח תודה חברים!!!
- Replies
-
- מאי 14, 2018 בשעה 10:01 pm
צנסה להתוסיף שלב sqli מותנה בדגל שבו תמלא טבלת stack8 מפתח של הלקוח ושל המוצר ממסך מוצרים ללקוח.
תוסיף את הטבלה בחיתוך מותנה לדוח למוצרים ולקוחות. ככה תוכל להפיל רשומות .- מאי 15, 2018 בשעה 11:14 pm
קודם כל אני ארשום שאני מסתייג טיפה בגלל שלא בדקתי איך הדו"ח הספציפי הזה עובדבאופן כללי הייתי אומר שאישית אני מנסה להמנע מהעתקת דו"ח כשהשינוי הנדרש לא גורם לדרישת העתקת הדו"ח לפי כללי הפיתוחים הפרטיים. זאת אומרת אם לא שיניתי מיון או קיבוץ וכל מה שרשום בכללים.
במקרה כזה, כאשר מדובר בקלט פשוט וסינון התוצאות ללא שינוי במבנה הפלט, לדעתי ניתן להסתדר עם שינוי לדו"ח המקורי (אין ברירה, חייבים ליצור פרוצדורה פרטית אבל היא תעטוף את הדו"ח המקורי).
זה כן בא במחיר שיתכן פגיעה מסוימת בביצועים – אולי גדולה מאם היית בונה דו"ח יעודיהטריק הוא לעשות את השינוי בדו"ח באופן שקוף.
לדוגמה:
כאן נדרש לדוגמה דגל (CHAR1), ורוצים שהדו"ח ישתנה אם הערך של הדגל הוא Y וכל עוד הוא ריק אז הדו"ח יתנהג כרגיל, וזה מתאים מאוד.
הייתי אומר שנשמע שגישה כזאת תעבוד:
תוסיף לדו"ח עמודה (מוסתרת) על PART.PART
לזה תוסיף תנאי מעין זה:
IN (SELECT PART FROM .... ) OR :zzz = ''
כאשר zzz זה הפרמטר, שתקבע קצת משונה כדי להקטין את הסיכוי ששדרוג יוסיף לפרוצדורה המקורית פרמטר בעל אותו שם
וב-subquery אתה דואג לסינון למוצרים ללקוחמקווה שזה עוזר
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- מאי 15, 2018 בשעה 11:42 pm
המון תודות חברים,
אני אנסה את זה מחר ואעדכן אם הצלחתי.ושוב, המון תודות 🙂
- מאי 16, 2018 בשעה 10:11 pm
הי יצחק, כיצד אתה יוצר קשר בתת שאילתא בין הלקוח בדוח ללקוח בשאילתא הפנימית?- מאי 16, 2018 בשעה 11:30 pm
אתה יכול להתייחס לטבלאות מהשאילתא של הדו"ח בתוך השאילתא הפנימית
היות ואין חפיפה ביניהם זה פשוטהנה גרסה בסיסית – השאילתא עברה הכנה אבל לא בדקתי עד לקבלת תוצאות. אותי תרצה להוסיף תנאי על דגל בתוקף וכו'
IN (SELECT PART FROM CUSTPART WHERE CUST = CUSTDISCREP.CUST) OR :zzz = ''
ליתר בטחון אפשר אולי להוסיף אליאס כמו
IN (SELECT PART FROM CUSTPART MY_CUSTPART WHERE CUST = CUSTDISCREP.CUST) OR :zzz = ''
כדי להגן מפני הוספת אותה טבלה לדו"ח כסטנדרט בעתיד
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- מאי 21, 2018 בשעה 10:48 pm
תודה רבה חברים!לקחתי את מה שרשמת ויצא לי הדוח רק עם המוצרים ללקוח.
גם לאחר הורדת ה V הציג רק מוצרים ללקוח.מבלי לשבור את הראש יותר מידי, עשיתי לפרוצדורה GOTO , כאשר יש V לך לדוח עם המוצרים ללקוח 🙂
עובד מעולה!
ושוב תודה!
- מאי 27, 2018 בשעה 6:15 pm
היי יצחק,הדוח עובד מעולה בהתאם להנחיות שלך! 🙂
אשמח לעוד עזרה קטנטנה שקצת הסתבכתי איתה 🙂
אני רוצה להוסיף לדוח (לאחר שהדוח מציג רק את מוצרי הלקוח, גם את הדגל "בתוף?" שנמצא במסך מוצרים ללקו:
CUSTPART.VALIDFLAGהבעיה שאני לא מצליח להבין איזה חיתוך אני צריך בדוח.
כל מה שעשיתי קיבלתי הכפלת כרטסת 🙁אשמח מאוד! לעזרתך!
תודה- מאי 27, 2018 בשעה 10:50 pm
חשוב גם כאן לא לשבש את החיתוכים…Cust יש לך בכל שורה
Part יש לך בכל שורה
(אם אני זוכר נכון)אתה צריך להכניס את custpart (מזהה 5+ כמובן) עם חיתוך תותנה (?) בקישור לנ"ל כי אתה לא יודע בוודאות (כשאתה לא מסנן לפי מוצרי לקוח) שתהיה רשומה מתאימה בטבלה זאת.
חשוב להבין שאין קשר בין מופע זה של הטבלה לזה שיש בתת-שאילתא ולכן אתה צריך חיתוך חדש מסודר.מקווה שזה עוזר
(דרך אגב אולי יעזור אם אציין שמדובר בהכפלה קרטזית – אין קשר לכרטסת)
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- מאי 27, 2018 בשעה 11:29 pm
תודה , אנסה מחר!אגב, אני כן מסנן לפי לקוח.
אם המשתמש לא בחר את הדוח אז אני מפנה אותו לדוח הרגיל,
אם בחר לפי מוצרי לקוח, אני מפנה אותו לדוח חדש עם ההתניה שרשמת לי, וזה עובד מעולה.נסיתי להכניס את העמודה עם מזהה 5 ועשיתי חיתוכים כפי שמופיע לי ברמת המסך,
שזה PART עם הטבלה של המסך ו CUST עם מסך האב.אבל אז היו לי הכפלת רשומות.
- מאי 28, 2018 בשעה 9:08 am
אז אולי תביא כאן dump של שאילתת הדו"ח?[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- מאי 29, 2018 בשעה 1:06 pm
היי יצחק,לצערי גם אחרי הוספת החיתוכים אני לא מצליח (כמובן כולם עם מזהה 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 פרוצדורה סיום
- מאי 30, 2018 בשעה 12:15 am
הבאת גם custpart וגם custpart9 ולא עשית חיתוך כלל מול CUSTDISCREP !!ובעצם בגלל שיצרת דו"ח מיוחד לא היית צריך את הגישה שלי עם התת-שאילתא אלא מספיק חיתוך בין part ו-cust של custdiscrep לאלה שב custpart9 (ללא סימן שאלה) או custpart ולא צריכים את המופע השני שלו
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- מאי 30, 2018 בשעה 1:03 pm
מעולה!!!!!!!!!
עכשיו עובד פרפקט!!!תודה יצחק 🙂
- יש להתחבר למערכת על מנת להגיב.