אלקלעי מונרוב ושות'

Alkalay Monarov & Co. on LinkedIn


אתם נמצאים כאן  : עמוד הבית ACL טיפים שימושיים מציאת הפרש ימי עסקים בין שני תאריכים נתונים
מציאת הפרש ימי עסקים בין שני תאריכים נתונים גרסת הדפסה דואר אלקטרוני
מאת אייל מיכאלוביץ'   

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

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

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

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

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

התאריכים הנתונים הינם: 

R_DATE = תאריך הבקשה (תאריך מינימום) = 26/10/2009

P_DATE= תאריך מתן השירות (תאריך המקסימום) = 4/11/2009

ב ACL זה נראה כך:  

כאשר נבדוק כמה ימי שישי ושבת קיימים בטווח תאריכים זה נמצא שיום שישי ושבת נופלים   בתאריכים 30-31/10/2009.

למען הדוגמא נקבע כי יש תאריך חג גם בתאריך 1/11/2009.

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

כעת נדגים כיצד לכתוב את הסקריפט ב ACL אשר יבצע עבורנו את החישוב:

הגדרת משתנים

OUTPUT="" שמות השדות אותם נרצה לייצא לטבלת התוצאה

NEW_TABLE="הפרש_ימי_עסקים_2009" שם טבלת התוצאה

Open_Table="ניוד_2009" שם טבלת המקור

תחילת הסקריפט

set safety off

למשתנה V_holidays נכניס את כל התאריכים אשר הינם תאריכי חג ונוסיף ;

V_holidays="2009/11/01;"

פתיחת טבלת מקור

open %Open_Table%

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

V_count=-1

פתיחת גרופ לפעולה על כל שורה בנפרד

GROUP

הגדרת משתנה תאריך התחלה

V_StrD=R_DATE

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

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

Loop While V_StrD<=P_DATE

 

V_count=V_count+1 if not match(cdow(V_StrD,3),"Sat","Fri") AND not find(alltrim(date(V_StrD)),V_holidays)

V_StrD=V_StrD+1

END

ייצוא הנתונים לטבלה חדשה

 

extract %OUTPUT% to %NEW_TABLE%

 

הגדרת שדה חישוב ההפרש מחדש (מחוץ ללולאה)

 V_count=-1

 END

open %NEW_TABLE%

התוצאה ב ACL:

בהצלחה !