عبدالله المجرب قام بنشر نوفمبر 13, 2018 قام بنشر نوفمبر 13, 2018 السلام عليكم اخواني لدي برنامج طلبات واريد احتساب مدة بقاء الطلب عند الموظف يوم العمل 7 ساعات من السابعة صباحا الى الثانية بعد الظهر نتخيل طلب كما في المرفق التجريبي تقدم احد الموظفين بطلب شهادة عمل فان الموظف الخاص بالطلبات يكتب الطلب ومباشرة سيتم كتابة تاريخ الطلب مع الوقت بعدها يظهر الطلب للميتخدم 1 والذي بدوره سيطبع الطلب ثم يضغط على خانة الاختيار بالانجاز وسيتم كتابة اسمه وتاري ووقت الانجاز وهكذا لكل من الموظف 2 والموظف 3 في المرفق استعلام احتساب مدةبقاء الطلب لدى كل مستخدم بالدقائق في المستخدم 1 و2 الوقت صحيح لانه في نفس اليوم تم الانجاز لكن مستخدم 3 لانه عمل على الطلب في اليوم التالي فقد كان الناتج كبير لانه احتسب الفترة بعد الدوام ضمن الفترة المطلوب ان يحتسب اليوم 7 ساعات اي ان النتيجة الصحيحة للمستخدم 3 هي 171 دقيقة (153 من اليوم السابق + 18 من اليوم التالي) وليست 1193 كما في الاستعلام ---------------------- طبعا لم اقم باضافة اكواد لتسجيل الوقت لانه مثال لتوصيل المطلوب مع جزيل الشكر قاعدة البيانات8.mdb
jjafferr قام بنشر نوفمبر 13, 2018 قام بنشر نوفمبر 13, 2018 وعليكم السلام حبيبا الغائب عن النظر والموجود في القلب حيا الله ابو احمد الطريقة اللي تجي في بالي هي: 1. نحسب الوقت من تاريخ اجاز2 الى نهاية الدوام الساعة 2 ظهرا ، 2. نحسب الوقت من بداية دوام اليوم التالي من الساعة 7 صباحا الى وقت انجاز3 ، 3. نجمع الوقتين 1 + 2 ونحصل على الوقت الذي اخذه الموظف3 وهذا كود الاستعلام لكل من النقاط الثلاث اعلاه: 1. Time_Left_Today: DateDiff("n",[DEmp2],DateSerial(Year([DEmp2]),Month([DEmp2]),Day([DEmp2])) & " 2:00:00 PM") 2. Time_Tomorrow_Til_DEmp3: DateDiff("n",DateSerial(Year([DEmp3]),Month([DEmp3]),Day([DEmp3])) & " 7:00:00 AM",[DEmp3]) 3. Time3: DateDiff("n",[DEmp2],DateSerial(Year([DEmp2]),Month([DEmp2]),Day([DEmp2])) & " 2:00:00 PM")+DateDiff("n",DateSerial(Year([DEmp3]),Month([DEmp3]),Day([DEmp3])) & " 7:00:00 AM",[DEmp3]) وهذا الاستعلام بكامله SELECT tbl1.Rqu, tbl1.RquD, tbl1.NEmp1, tbl1.DEmp1, DateDiff("n",[rquD],[DEmp1]) AS Time1, tbl1.NEmp2, tbl1.DEmp2, DateDiff("n",[DEmp1],[DEmp2]) AS Time2, tbl1.NEmp3, tbl1.DEmp3, DateDiff("n",[DEmp2],DateSerial(Year([DEmp2]),Month([DEmp2]),Day([DEmp2])) & " 2:00:00 PM") AS Time_Left_Today, DateDiff("n",DateSerial(Year([DEmp3]),Month([DEmp3]),Day([DEmp3])) & " 7:00:00 AM",[DEmp3]) AS Time_Tomorrow_Til_DEmp3, DateDiff("n",[DEmp2],DateSerial(Year([DEmp2]),Month([DEmp2]),Day([DEmp2])) & " 2:00:00 PM")+DateDiff("n",DateSerial(Year([DEmp3]),Month([DEmp3]),Day([DEmp3])) & " 7:00:00 AM",[DEmp3]) AS Time3 FROM tbl1; والنتيجة جعفر 973.قاعدة البيانات8.mdb.zip 1
عبدالله المجرب قام بنشر نوفمبر 13, 2018 الكاتب قام بنشر نوفمبر 13, 2018 مع جزيل الشكر لك استاذ جعفر سوال هل سيعمل لو ان الطلب وقف يومين او ثلاثة ثم عمل عليه الموظف في اليوم الرابع فهل ستكون النتجة مضبوطة اعذرني فقد نسيت الاشارة الى هذه الملاحظة ايضا لا يرتبط اليوم التالي بموظف محدد فقد يكون المستخدم ١ هو مو عمل في اليوم التالي وهكذا
jjafferr قام بنشر نوفمبر 13, 2018 قام بنشر نوفمبر 13, 2018 5 دقائق مضت, jjafferr said: طريقة الحساب (مع تعديل في الشرح ليلائم سؤالك الاخير): 1. نحسب الوقت من تاريخ اجاز2 الى نهاية الدوام الساعة 2 ظهرا ، 2. نحسب الوقت من بداية دوام يوم/وقت انجاز3 من الساعة 7 صباحا الى وقت انجاز3 ، 3. نجمع الوقتين 1 + 2 ونحصل على الوقت الذي اخذه الموظف3 4 دقائق مضت, عبدالله المجرب said: سوال هل سيعمل لو ان الطلب وقف يومين او ثلاثة ثم عمل عليه الموظف في اليوم الرابع فهل ستكون النتجة مضبوطة والجواب نعم جعفر
عبدالله المجرب قام بنشر نوفمبر 13, 2018 الكاتب قام بنشر نوفمبر 13, 2018 المشكلة انه تم ربط الحساب بالموظف اي ان الموظف الثالث هو الذي يتم احتساب اليوم التالي === لا بد ان لا يرتبط بالموظف فقد يكون مستخدم 1 عمل على الطلب في اليوم الثاني ثم جاء مستخدم 2 للعمل في اليوم نفسه ثم مستخدم 3 في نفس اليوم كذلك اي ان المطلوب ان ما قمت بعمل جميل جدا لكن لابد ان يكون مرن ومع كل المستخدمين ملاحظة اذا لم يعمل المستخدم لمدة يومين فانه يضاف 7 ساعات اي 420 دقيقة عن كل يوم وهكذا
jjafferr قام بنشر نوفمبر 13, 2018 قام بنشر نوفمبر 13, 2018 همم كلامك صحيح اذن لابد من عمل وحدة نمطية ونخلّي فيها جميع هذه الشروط وهذه بلا امارة عليك اشوفها الصبح ان شاء الله جعفر
jjafferr قام بنشر نوفمبر 13, 2018 قام بنشر نوفمبر 13, 2018 منذ ساعه, عبدالله المجرب said: 1. فقد يكون مستخدم 1 عمل على الطلب في اليوم الثاني ثم جاء مستخدم 2 للعمل في اليوم نفسه 2. ثم مستخدم 3 في نفس اليوم كذلك 3. اذا لم يعمل المستخدم لمدة يومين فانه يضاف 7 ساعات اي 420 دقيقة عن كل يوم وهكذا في هذه الحالة ، يجب ان يكون الحساب لكل موظف ، وليس لآخر موظف فقط ، وحساب الوقت يجب ان يتغير الى دقائق:ساعات:ايام استخدمت وحدات نمطية اثنان ، وارسلت معلومتين لكل موظف لهم ، هكذا: والنتيجة: وهذه الوحدات النمطية التي تقوم بالعمل: Public Function Calc_Diff(DE1 As Date, DE2 As Date) As String Dim Time_Left_day1 As Long Dim Time_day2_Morning_Til_DE2 As Long Dim Time_days_Between_day1_day2 As Long Dim Interval As Long 'all the calculations are in minutes 'DE1 = Date 1st Employee finished his task 'DE2 = Date 2nd Employee finished his task 'DE1 & DE2 finished the same day If Format(DE1, "yyyymmdd") = Format(DE2, "yyyymmdd") Then Interval = DateDiff("n", DE1, DE2) 'DE2 finished next day ElseIf DateDiff("d", DE1, DE2) = 1 Then 'time from DE1 til the end of the day Time_Left_day1 = DateDiff("n", DE1, DateSerial(Year(DE1), Month(DE1), Day(DE1)) & " 2:00:00 PM") 'time from morning til DE2 finished Time_day2_Morning_Til_DE2 = DateDiff("n", DateSerial(Year(DE2), Month(DE2), Day(DE2)) & " 7:00:00 AM", DE2) 'add the above Interval = Time_Left_day1 + Time_day2_Morning_Til_DE2 'DE2 didn't finish next day Else 'time from DE1 til the end of the day Time_Left_day1 = DateDiff("n", DE1, DateSerial(Year(DE1), Month(DE1), Day(DE1)) & " 2:00:00 PM") 'time from morning til DE2 finished Time_day2_Morning_Til_DE2 = DateDiff("n", DateSerial(Year(DE2), Month(DE2), Day(DE2)) & " 7:00:00 AM", DE2) 'time days between day1 and day2 Time_days_Between_day1_day2 = DateDiff("d", DE1, DE2) * 420 ' 1 working day = 7 hours x 60 minutes/hour = 420 minutes 'add the above Interval = Time_Left_day1 + Time_day2_Morning_Til_DE2 + Time_days_Between_day1_day2 End If ' Format and print the time interval in days, hours, minutes and seconds. Calc_Diff = Minutes2Duration(Interval) End Function Public Function Minutes2Duration(minutes As Long) As String Dim dd As Integer, hh As Integer, mm As Integer 'from: http://bytes.com/topic/access/answers/696226-converting-minutes-days-hours-minutes ' modified by jjafferr based on the working day hours ' 1 day = 24 hours x 60 minutes/hour = 1440 minutes ' 1 working day = 7 hours x 60 minutes/hour = 420 minutes ' dd = minutes \ 420 minutes = minutes - dd * 420 hh = minutes \ 60 mm = minutes Mod 60 If dd = 0 Then 'No day adjustment Minutes2Duration = Format(dd, "000") & ":" & Format(hh, "00") & ":" & Format(mm, "00") Else 'needs day adjustment Minutes2Duration = Format(dd - 1, "000") & ":" & Format(hh, "00") & ":" & Format(mm, "00") End If End Function جعفر 973.1.قاعدة البيانات8.mdb.zip
رمهان قام بنشر نوفمبر 13, 2018 قام بنشر نوفمبر 13, 2018 هلا والله بالاساتذة الغائبين الحاضرين والله انا مار سريعا وفي اخر ساعه من يومي لكن ماادري استاذ جعفر هل تم اخذ الحسبان كذلك ايام الويك اند ؟ تحياتي للجميع
jjafferr قام بنشر نوفمبر 13, 2018 قام بنشر نوفمبر 13, 2018 حباك الله اخوي رمهان لا الويك اند ، ولا الاجازات بس الحمدلله ، بعد ان تم تحويل الحسبة الى وحدة نمطية ، فالموضوع يمكن معالجته بسهولة ان شاء الله جعفر
عبدالله المجرب قام بنشر نوفمبر 14, 2018 الكاتب قام بنشر نوفمبر 14, 2018 يا مرحبا بالاستاذ رمهان عمل رائع استاذجعفر لكن لاحظت انه اذا صادف نفس الساعة في اليوم التالي فانه لا يحسب اليوم كما في الصورة وطلب اخير خو جمع الوقت بحيث يبين كم اخذ الطلب في دورته حتى انجز وكذلك سيكون لدي جدول اخر يحدد لكل طلب مدة هي المدة الافتراضية وسيكون هناك مقارنة بينها وبين مجموع هذه الساعات مع جزيل الشكر على هذا العمل
jjafferr قام بنشر نوفمبر 14, 2018 قام بنشر نوفمبر 14, 2018 السلام عليكم تفضل: الاستعلام اصبح: . ونتائج النموذج: . والوحدة النمطية: Public Function Calc_Diff(DE1 As Date, DE2 As Date) As Long Dim Time_Left_day1 As Long Dim Time_day2_Morning_Til_DE2 As Long Dim Time_days_Between_day1_day2 As Long Dim Interval As Long 'all the calculations are in minutes 'DE1 = Date 1st Employee finished his task 'DE2 = Date 2nd Employee finished his task 'DE1 & DE2 finished the same day If Format(DE1, "yyyymmdd") = Format(DE2, "yyyymmdd") Then Interval = DateDiff("n", DE1, DE2) 'DE2 finished next day ElseIf DateDiff("d", DE1, DE2) = 1 Then 'time from DE1 til the end of the day Time_Left_day1 = DateDiff("n", DE1, DateSerial(Year(DE1), Month(DE1), Day(DE1)) & " 2:00:00 PM") 'time from morning til DE2 finished Time_day2_Morning_Til_DE2 = DateDiff("n", DateSerial(Year(DE2), Month(DE2), Day(DE2)) & " 7:00:00 AM", DE2) 'add the above Interval = Time_Left_day1 + Time_day2_Morning_Til_DE2 'DE2 didn't finish next day Else 'time from DE1 til the end of the day Time_Left_day1 = DateDiff("n", DE1, DateSerial(Year(DE1), Month(DE1), Day(DE1)) & " 2:00:00 PM") 'time from morning til DE2 finished Time_day2_Morning_Til_DE2 = DateDiff("n", DateSerial(Year(DE2), Month(DE2), Day(DE2)) & " 7:00:00 AM", DE2) 'time days between day1 and day2 Time_days_Between_day1_day2 = DateDiff("d", DE1, DE2) * 420 ' 1 working day = 7 hours x 60 minutes/hour = 420 minutes 'add the above Interval = Time_Left_day1 + Time_day2_Morning_Til_DE2 + Time_days_Between_day1_day2 End If ' Format and print the time interval in days, hours, minutes and seconds. 'Calc_Diff = Minutes2Duration(Interval) Calc_Diff = Interval End Function Public Function Minutes2Duration(minutes As Long) As String Dim dd As Long, hh As Integer, mm As Integer 'from: http://bytes.com/topic/access/answers/696226-converting-minutes-days-hours-minutes ' modified by jjafferr based on the working day hours ' 1 day = 24 hours x 60 minutes/hour = 1440 minutes ' 1 working day = 7 hours x 60 minutes/hour = 420 minutes ' dd = minutes \ 420 minutes = minutes - dd * 420 hh = minutes \ 60 mm = minutes Mod 60 ' If dd = 0 Then 'No day adjustment Minutes2Duration = Format(dd, "000") & ":" & Format(hh, "00") & ":" & Format(mm, "00") ' Else 'needs day adjustment ' Minutes2Duration = Format(dd - 1, "000") & ":" & Format(hh, "00") & ":" & Format(mm, "00") ' End If End Function جعفر 973.1.قاعدة البيانات8.mdb.zip 2
عبدالله المجرب قام بنشر نوفمبر 14, 2018 الكاتب قام بنشر نوفمبر 14, 2018 ما شاء الله سلمت يمينك استاذجعفر على هذا العمل المميز
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.