• 0
أبو عبير 2005

مشكلة في عدد سنوات الخدمة

سؤال

الإخوة الكرام

السلام عليكم ورحمة الله وبركاته

أرفق لكم برنامج لحساب الخدمة وهو من برمجة الأخت زهرة لكن المشكلة إن التواريخ بالتقويم الميلادي

وأنا أريد إدخال التاريخ بالهجري .

الخدمة.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

34 إجابة على هذا السؤال .

  • 0

أخي الكريم بارك الله فيك وفي ذريتك

أنا آسف أتعبتك معي وغلبتك .

لكن أخي شوف الصورة وشوف ناتج التاريخ التالي

25/10/1410 و تاريخ 26/10/1430

المنطق يقول إن الفرق بينهما هو 20 سنة و 0 شهر

لكن شوف الصورة المرفقة يبن لي أن الفرق بينهما هو 20 سنة و 7 شهور و 14 يوم .

كيف تم زيادة 7 شهور و 14 يوم . ( هنا تكمن المشكلة ) .

تقبل فائق تقديري واحترامي .

الله لا يحرمك الأجر .

اعتذر أنا لك لأني لم أنتبه لهذه المشكلة blush.gif

أخى الكريم و بعد اذن الاخوة

للحصول على حسابات صحيحة

احذف هذا السطر من الكود

Calendar = vbCalHijri

و لكن

نصيحتى لك عند استخدام التاريخ الهجرى

الافضل هو استخدام حقل نصى لتسجيل التاريخ

حيث أنك ستواجه مشاكل فى التعامل مع التاريخ

و أشهر المشاكل التى قد تواجهك تاريخ 30/2

لانه كما تعرف غير موجود فى الميلادى

اعتذر يا أخوان وبعد إذنك يا أستاذنا الفاضل ابو يوسف ، افضل طريقة هي عدم حذف ذلك السطر حتى يقرأ التاريخ المدخل هجري كما هو. 001.gif

وقد عملت تعديل بسيط والشكر الجزيل لأبو يوسف استاذنا العظيم فقد ذكرني بهذه النقطة 044.gif فعلا يجب تحويل التاريخ المدخل إلى في الخانتين إلى نص.015.gif

وهذا التعديل المرفق وشرحه كالآتي: 044.gif

1. يتم عمل مربعي نص وتنسيقها نص لادخال التاريخين الهجري في كل منهما وستلاحظ ذلك في الجدول الذي يخزن فيه البيانات. happy.gif

2. في النموذج تكمن الخدعة 016.gif حيث يتم وضع الحقلين بنفس المواصفات السابقة مع وضع قناع الادخال المناسب thinking.gif ، وأنا استعملت القناع حيث يدخل التاريخ ابتداء من اليوم ثم الشهر ثم السنة. 006.gif

3. في الكود عملت تعديل بسيط لقراءة الحقلين بحيث يقرأ بالتاريخ الهجري بالكود الذي لم أحذفه ثم يحول النصين إلى تاريخين ويجري العملية الحسابية 044.gif ويعطي الناتج بدون مشاكل بإذن الله. 012.gif

وهكذا تكون مشكلة التاريخ قد تم تفاديها ومشكلة الهجري والميلادي قد تم تفاديها ومشكلة الخطأ الحسابي تم تقليلها إلى أدنى حد والحمد لله.wink.gif

53e35528a2.gif أستاذنا ومشرفنا أبو يوسف على التذكير وآسف إذ كانت وجهة نظري تختلف عن وجهة نظرك قليلا ولكن خطتى اعتمدت على هذا الكود. laugh.gif

الخدمة2.rar

تم تعديل بواسطه superhot3000
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أستاذنا ومشرفنا أبو يوسف على التذكير وآسف إذ كانت وجهة نظري تختلف عن وجهة نظرك قليلا ولكن خطتى اعتمدت على هذا الكود. 

لا يوجد خلاف

هذا ما كنت أقصده بالضبط

الاختلاف الوحيد هو أن تصورى لا يحتاج الى التحويل الى تاريخ بحيث يتم التعامل مع النص كما هو

فيكون الجزء الاول من الكود بهذا الشكل


Dim Yr1, Mn1, Dy1 As Integer
Dim Xx, Yy As String
Xx = Me.[StDt]
Yy = Me.[TDt]

Yr1 = Mid(Yy, 5, 4) - Mid(Xx, 5, 4)
Mn1 = Val(Mid(Yy, 3, 2) - Mid(Xx, 3, 2))
Dy1 = Val(Mid(Yy, 1, 2) - Mid(Xx, 1, 2)) + 1

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك أخي الكريم وفي أهلك ومالك أنت والأخ أبو يوسف

ولكن هل بالإمكان أن أجعل مربع النص يقرأ بالشكل الصحيح 23/10/1410 في النموذج بحيث أننا نضع مربع نص تكون قيمته مساية لقيمة مربع

النص الذي أنت عملته وهو كما في مثالك ( StDt ) ولكن يقرأ بالشكل الصحيح .

أنا آسف أخي على كثرة استفساراتي

ولكن كان نفسي يطلع برنامجي منسق بمساعدتكم .

لكم مني أطيب تحية وتقدير .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اعكس شكل فناع الادخال لمربع النص

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك أخي الغالي

لكن إذا عكسته يحسب عدد السنوات خطأ .

تقبل احترامي وتقديري .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بالتأكيد ستحتاج الى تعديل الكود

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي الكريم بارك الله فيك

ترى أخوك في الله عليمي مبتدء في الأكواد . على قد حالي ههههههههههه :haha:

أخي بارك الله فيك هل بإمكانك مساعدتي وتشرح لي وين بيكون التعديل .

الله لا يحرمك من الأجر لا إنت ولا أخي الغالي superhot3000

دمتم في حفظ الله .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذا هو الكود بعد التعديل

On Error Resume Next

Dim Yr1, Mn1, Dy1 As Integer
Dim Xx, Yy As String
Xx = Me.[StDt]
Yy = Me.[TDt]

'Yr1 = Mid(Yy, 5, 4) - Mid(Xx, 5, 4)
'Mn1 = Mid(Yy, 3, 2) - Mid(Xx, 3, 2)
'Dy1 = Mid(Yy, 1, 2) - Mid(Xx, 1, 2) + 1

Yr1 = Mid(Yy, 1, 4) - Mid(Xx, 1, 4)
Mn1 = Mid(Yy, 5, 2) - Mid(Xx, 5, 2)
Dy1 = Mid(Yy, 7, 2) - Mid(Xx, 7, 2) + 1

If Dy1 > 29 Then
Dy1 = Dy1 - 30
Mn1 = Mn1 + 1
ElseIf Dy1 < 0 Then
Dy1 = Dy1 + 30
Mn1 = Mn1 - 1
End If

If Mn1 > 11 Then
Mn1 = Mn1 - 12
Yr1 = Yr1 + 1
ElseIf Mn1 < 0 Then
Mn1 = Mn1 + 12
Yr1 = Yr1 - 1
End If

[Y1] = Yr1
[M1] = Mn1
[D1] = Dy1

اذا لم يكن مناسبا ضع مثال به التنسيق الذى تريده

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك وفي ذريتك وأصلح حالك .

ما قصرت أخي الغالي .

نعم هذا هو المطلوب .

تقبل تقديري واحترامي .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .