پروژه SSADM سیستم فروش بخش پنجم
تاریخ شمسی
بررسی چگونگی رفع مشکل تاریخ شمسی در این نرم افزار و ویندوز XP
ماجول تاريخ هجري شمسي با توابع جانبي آن
يكي از نقصهاي سيستم عامل ويندوز براي كاربران فارسي زبان و ايراني، عدم پشتيباني آن از تقويم هجري شمسي و عدم توانايي محاسبات بر مبناي تاريخ شمسي ميباشد. آخرين نسخههايي اين سيستم عامل داراي ابزارهايي براي پشتيباني از كاراكترهاي فارسي و امكان تايپ فارسي ميباشند، اما گويا شركت مايكروسافت به اين نياز مهم (يعني يك تقويم شمسي براي ويندوز) توجهي نكرده است.
رفع اين مشكل به خصوص براي برنامه نويساني كه به نوعي در برنامه هاي خود بايد از تاريخ هجري شمسي و يا محاسباتي بر مبناي اين قالب تاريخ انجام دهند، بسيار حياتي است.
در بانك اطلاعاتي Access فيلدهاي نوع Date پاسخگوي نياز كاربران فارسي كه با تاريخ هجري شمسي كار مي كنند نيست . البته برنامه هايي مثل پارسا ۹۹ تقويم سيستم را به تقويم هجري شمسي تبديل مي كند و بعد از آن كاربران فارسي مي توانند از فيلدهاي نوع Date اكسس استفاده كنند. بدين ترتيب پارسا مشكل تاريخ هجري شمسي را حل ميكند. ولي بعضا تاريخ شمسي سيستم بنا به دلايلي از بين ميرود. مثلا اگربعد از نصب پارسا، Office نصب شود تاريخ هجري شمسي سيستم به هم مي خورد. براي رهايي از وابستگي برنامه به پارسا و ... ، از توابعی که در فایل Shamsi.dll قرار دارد استفاده شده است.
اين ماجول در چندين برنامه از جمله برنامه فروش که به عنوان پروژه پایان تحصیلات می باشد تست شده و جواب گرفته است .
اين توابع به صورت كاملا دقيق، تاريخ ميلادي سيستم را به تاريخ هجري شمسي تبديل مينمايند و همچنين توابع ديگري را براي انجام محاسبات روي اين تاريخ در دسترس قرار ميدهند. يكي از ويژگيهاي جالب توجه اين كلاس (كه بسياري از كلاسهاي مشابه نوشته شده در اين زمينه فاقد ان هستند) عملكرد دقيق آنها روي سالهاي كبيسه است. همانطور كه ميدانيد در سيستم تاريخ شمسي بعضي از سالها كبيسه هستند و در آنها ماه اسفند سي روز ميباشد. اين سالها به صورت متناوب هر چهار سال يكبار تكرار ميشوند و چون اين سالها از سالهاي عادي يكروز بيشتر هستند، لذا بايد در محاسبات تاريخ اين نكته را مدنظر قرار داد، كه اين توابع به خوبي از آن پشتيباني ميكنند.
كلاسهاي اين توابع به صورت استاندارد تهيه و كامپايل شده است تا تمام برنامه نويسان بتوانند از آنها در زبانهاي برنامه نويسي گوناگون مانند دلفي، ويژوال بيسيك، سي شارپ و همه ي زبانهاي ديگري كه از استاندارد COM پشتيباني ميكنند، استفاده كنند.
در ادامه تعدادي از قابليتهاي عمده تقويم شمسي و قابليتهاي جديد كه در آخرين نگارش به آن اضافه شده اند ارائه مي گردد:
امكان نمايش تاريخ در SystemTray
نمايش تاريخ روز به صورت Toolbar
امكان نمايش روز هفته
نمايش تاريخ ميلادي
اضافه كردن بخش تنظيمها براي كنترل برنامه توسط كاربر
امكان انتخاب قالب مورد علاقه در Toolbar
محاسبه دقيق تاريخ شمسي با استفاده از ShamsiDLL
مبدل تاريخ شمسي به ميلادي و برعكس
عملكرد دقيق روي سالهاي كبيسه
نياز به حافظهي بسيار كم
قابليت اجراي خودكار با بالا آمدن ويندوز
كاملا فارسي
در صورت استفاده از اين ماجول ، فيلدهاي از نوع تاريخ را بهتر است از نوع Number تعريف شده است. توضيحات بيشتر جهت استفاده از ماجول ، درون خود ماجول نوشته شده است. البته نوع فیلد را هم می توانید از نوع Text تعریف نمائید. ولی چند مرحله کار بیشتری در مرحله ذخیره سازی بایستی انجام داد.
برای استفاده از توابع موجود در فایل Shamsi.dll ابتدا آن را باید به کتابخانه VBA اضافه نمود. برای این منظور ابتدا فایل Shamsi.dll را درون پوشه System32 ویندوز XP کپی می نمائیم.
سپس در محیط VBA از منوی Tools فرمان References را اجرا می کنیم. سپس مسیر فایل Shamsi.dll را وارد کرده و در لیست گزینه Oxinsoft hijri shamsi calendar functions را تیک می زنیم.
بعد از انجام این عملیات می توانیم از امکانات و توابع این فایل استفاده نمائیم.
به عنوان مثال ، کد زیر درون یک Massage Box تاریخ هجری شمسی را به نمایش می گذارد.
Private Sub Command5_Click()
Dim SHM As New ClassShamsi
MsgBox SHM.Shamsi, , "تاريخ شمسي"
End Sub
همانگونه که در توضیحات فوق عرض شد این تابع می تواند سال کبیسه را نیز تشخیص دهد. به عنوان مثال با استفاده از کد زیر می توان مشخص کرد که آیا امسال سال کبیسه هست یا خیر.
Private Sub Command5_Click()
Dim SHM As New ClassShamsi
If SHM.IsKabiseh(SHM.Shamsi) = True Then MsgBox ("امسال سال کبيسه مي باشد") Else MsgBox ("امسال سال کبيسه نمي باشد.")
End Sub
از دیگر امکانات محاسبه N امین ماه سال شمسی می باشد. به عنوان مثال کد زیر می تواند مشخص کند که در چندمین ماه سال (عدد) شمسی قرار داریم.
Private Sub Command5_Click()
Dim SHM As New ClassShamsi
MsgBox (SHM.ShamsiCurrentMonth)
End Sub
البته امکان جالب دبگرب نیز در این برنامه تعبیه گردیده است که و آن نمایش نام ماه به فارسی نیز می باشد. به عنوان مثال کد زیر مشخص می کند که در چه ماهی از ماههای شمسی قرار داریم و البته نام ماه را نشان می دهد.
Private Sub Command5_Click()
Dim SHM As New ClassShamsi
MsgBox (SHM.ShamsiCurrentMonthName)
End Sub
جهت نمایش تاریخ هجری شمسی به صورت Long Date می توانیم از کد زیر استفاده نمائیم.
Private Sub Command5_Click()
Dim SHM As New ClassShamsi
MsgBox SHM.ShamsiWeekDayName & " " & SHM.ShamsiCurrentDay & " " & SHM.ShamsiCurrentMonthName & " " & SHM.ShamsiCurrentYear , ,"تاريخ شمسي"
End Sub
همانگونه که در مثالهای فوق مشاهده شد تمامی امکانات تابع Date() در ClassShamsi تعبیه گردیده و می توان به راحتی به تمامی این توابع دسترسی پیدا نمود.