اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

ابو جودي

أوفيسنا
  • Posts

    7250
  • تاريخ الانضمام

  • Days Won

    214

كل منشورات العضو ابو جودي

  1. اولا انا وما املك ملك يمينكم >>---> العشق الممنوع طيب ليه فى اختلاف فى الاعداد حضرتك ت حسبت اجمالا واستخدمت التقريب فى الكسور انا لم احسب اجماالا ولذلك لم احصل على كسور ولم استخدم التقريب بس ... عند التحدث فى هذا الصدد لن تحصل اطلاقا على قيمة صحيحة بنسبة 100% طيب تعالى نوضح بعض النقاط الهامة تحتوي السنوات الكبيسة على 366 يومًا ، وليس 365 كم يوما يجب أن يكون للشهر؟ 28 أو 29 أو 30 أو 31؟ ومع الاخذ فى الاعتبار إن الوقت الذي تستغرقه الأرض حتى تدور حول الشمس على وجه الدقة يقترب من 365.25 يوما وبذلك يكون عدد الأيام فى الشهر = 365.25/12=30.4375 لذلك فإنه من أجل ضمان أن تظل مواسم التقويم الميلادية متزامنة مع المواسم الشمسية، يتم وضع يوم إضافي في التقويم الميلادي كل أربع سنوات وذلك سوف نقوم باستخدم الكود الاتى فى وحدة نمطية والافضل الحساب على اعتبار ان السنه 365.25 الوقت الذي تستغرقه الأرض حتى تدور حول الشمس ومع ذلك تم المراعاة اثناء كتابة الكود بجعل الاختيار حسب الرغبة اومااااااااااااااااااال Function GetPeriod( _ intContDays As Long, _ Optional intBetween_0_Or_1_LangEng_Or_Ar As Byte = 0, _ Optional intBetween_0_Or_1_ContDaysOfYear As Byte = 0) As String Dim YearAvg As Double, MonthAvg As Double Dim Y As Long, M As Long, D As Long Dim strYears As String, strMonths As String, strDays As String Select Case intBetween_0_Or_1_ContDaysOfYear Case Is = 0: YearAvg = 365: MonthAvg = 30 Case Is = 1: YearAvg = 365.25: MonthAvg = 30.4375 End Select Y = Int(intContDays / YearAvg) M = Int((intContDays - (Int(intContDays / YearAvg) * YearAvg)) / MonthAvg) D = intContDays - ((Y * YearAvg) + (M * MonthAvg)) Select Case intBetween_0_Or_1_LangEng_Or_Ar Case Is = 0: strYears = " year" & " , ": strMonths = " Month" & " , ": strDays = " Day" Case Is = 1 strYears = ChrW("32") & ChrW("1587") & ChrW("1606") & ChrW("1607") & " , ": strMonths = ChrW("32") & ChrW("1588") & ChrW("1607") & ChrW("1585") & " , ": strDays = ChrW("32") & ChrW("1610") & ChrW("1608") & ChrW("1605") End Select GetPeriod = Y & strYears & M & strMonths & D & strDays End Function على ان يتم استدعاؤه بشكل مرن باختيار الية الحساب على اعتبار ان السنة 365 و عدد ايام الشهر 30 او على اعتبار ان السنة 365.25 و عدد الأيام فى الشهر = 365.25/12=30.4375 syntax ويتم استدعاء الكود من خلال GetPeriod(CountDays, Lang(0 or 1) ,Option Calc for Cont Dayes Of Year(0 or 1)) وهذه جملة Sql والخاصة بالاستعلام للحصول على النتيجة النهائية كما بالمرفق SELECT tbldata.EmpCode, Sum(DateDiff("d",[fromDate],[ToDate])) AS NoDays, GetPeriod(Sum(DateDiff("d",[fromDate],[ToDate]))) AS FinalDurationBy365Eng, GetPeriod(Sum(DateDiff("d",[fromDate],[ToDate])),0,1) AS [FinalDurationBy365,25Eng], GetPeriod(Sum(DateDiff("d",[fromDate],[ToDate])),1) AS FinalDurationBy365Ar, GetPeriod(Sum(DateDiff("d",[fromDate],[ToDate])),1,1) AS [FinalDurationBy365,25Ar] FROM tbldata GROUP BY tbldata.EmpCode; واخيرا المرفق ملك يمينكم يا @سجى الكعبي و عبى يابا و ضيف للمكتبة يا سيدى طبعا لا اقصد مكتبة @Moosak EmploymentPeriods (V2).accdb
  2. السلام عليكم ورحمة الله تعالى وبركاته ان اليوم هو ١ ذى الحجة ١٤٤٣ هـ اول ايام العشر من ذى الحجة اسأل الله العلى القدير أن يوفقنا وإياكم فيهن لما يحبه ويرضاه من الأعمال الصالحة وأن يتقبل منا ومنكم إنه خير من سئل و أجود من أعطى وأعظم من غفر وأبر من أجاب كل عام وأنتم إلى الله أقرب وعلى طاعته أدوم ومن الجنة أدنى و أقرب وعن النار أبعد ولفعل الخيرات أسبق و لسنة النبى ألزم ولحب إتباعه أصدق كل عام وأنتم بألف ألف خير عمر مديد بإذن الله فى ظل رضى الله وطاعته عمر مديد بإذن الله مع أحبائكم عمر مديد بإذن الله وأنتم تنعمون بثوب الصحة والعافية عمر مديد بإذت الله وأنتم فى سعادة ورغد وهناء
  3. السلام عليكم ورحمة والله تعالى وبركاته طيب ببساطه انظر للسلسلة النصية الاتية "Moh8202281012343434" ونريد التعديل عليها لتظهر بهذا الشكل "Moh-820-228-101-234-343-4" او بهذا الشكل "Moh,820,228,101,234,343,4" او بهذا الشكل Moh820/228101/234343/4 يتم عمل ذلك من خلال الكود الاتى Function ReFormat(ByVal strText As String, Optional strSymbol As String = "-", Optional intCountDigits As Integer = 3) Dim i As Long ReFormat = "" For i = 0 To Len(strText) - 1 Step intCountDigits If i = 0 Then ReFormat = Mid(strText, i + 1, intCountDigits) Else ReFormat = ReFormat & strSymbol & Mid(strText, i + 1, intCountDigits) End If Next i End Function syntax code ReFormat(string ,Symbol, Count Digits) Result By default syntax used ReFormat(string) Symbol >-->> - Count Digits >-->> 3 اذا من خلال استدعاء الكود عن طريق البنية المفضلة الاتية: ReFormat(string) تحصل على اضافة العلامة - بعد كل 3 مواضع فى السلسلة النصية اما اذا اردت التعديل فى شكل الرمز وعدد المواضع يمكنك استخدام الكود الاتى : ReFormat(string ,Symbol, Count Digits) مثلا لو اردت استخدام الرمز $ بدلا من الرمز - وتريد وضع الرمز فى السلسلة النصية بعد كل خمس مواضع يكون الكود كالأتى: ReFormat(string ,"$", 5)
  4. لو تريد مثال على رفم الهارد ديسك من عيونى يا دكتور اصبر على وانا احضرهولك بس اولا انت عاوز الموضوع يكون معقد فى كتابة الاكواد قدر الامكان كما قمت انا به فى المثال المرفق وتهمك النتيجة الأخيرة ام تريد الموضوع مكتوب برمجيا بسهولة
  5. اى مبدع بحق واكثر الاوقات ابداعا عندما يقول >>---> يضاف الى مكتبة الاكواد
  6. تجربة ع السريع الحل بأخر استعلام qryTotalFinalDuration للتجربة ادخل كود الموظف 1 وتارة اخرى 2 للتجربة للعلم عدد الايام لن يكون صحيح بنسبة 100% لانه تم القسمة على 30 وهناك اشهر قد تكون 28 , 29 , 30 , 31 ولا اعرف كيف اضبطها الحل المقدم من تصورى قد اخطئ فيه وقد اصيب وربما تكون هناك افكار افضل وان حالفنى سعة من الوقت قد احاول تحويل كل المعادلات داخل الاستعلامات ليت ترجمتها فى موديول واحد ليقوم بالحساب مرة واحدة ولكن لن احاول عمل ذلك الا بعد التأكد من تجربتكم بصحة الارقام الناتجة EmploymentPeriods.accdb
  7. الله اكبـــــر يحيا العدل 👈 صعيدى وافتخر هذا فضل الله تعالى الذى هدانا وما كنا لنهتدى لولا ان هدانا الله عزوجل وهذا رزقكم ساقه الله اليكم
  8. يا سيدى الله يحفظك لاهلك واحبابك ويبارك بعمرك وعلمك وعملك وما يحرمنا جمعكم الطيب وفعلا انا مهضوم ومن كتر الهضم ما صار فينى شئ صيرت جلد على عضم بدنا ضرايب بالمنتدى ع ها المكتبة اوماااااااااااااااااااال
  9. ههههههه طماع البنى ادم ده تتأخر حبتين وهى تتأخر ثانية واحدة يا سيدى وتأتى بالنفع منها افضل من عدمها ومع ذلك شوف الفكرة رقم 3 يا سيدى بدون الرسالة خالص اللى تتأخر حبتين دى لا تزعل روحك المهم تنبسط ما نقدر على زعلك
  10. ووفقا للمشاركة التى اشرتم اليها لاستا DateDiff("s",#1/1/1970 3:00:00 AM#,[اسم الحقل فى الجدول]) وكما اشرتم الى موضوعكم وطبقا لحل استاذى الجليل ومعلمى القدير و والدى الحبيب الاستاذ @jjafferr اتفضل الحل وهذا هو المرفق تم اضافة حقل To Timestamp والذى يقوم بتحويل التاريخ من الحقل Saudi الى Timestamp من خلال المعادلة Timestamp: DateDiff("s",#1/1/1970 3:00:00 AM#,[Saudi]) 1459.unix_tTime_Stamp V2.accdb
  11. فى فوكيره تانى بره الصندوق اشرحها نظرى الان وممكن التطبيق لاحقا ممكن نعمل نموذج يستعرض السجلات تباعا باستخدام حدث فى الوقت من السجل الاول الى الاخير و يغلق تلقائيا بعد السجل الأخير مرفق تطبيق الفكرة aa V3.accdb
  12. اتفضل يا سيدى احلام معاليك اوامر يا باش مهندس @Moosak اى خدمه يارب تنبسط بس تعتمد الفكرة على وضع الروتين الاتى فى وحدة نمطية Public opt As Integer Public Function MesgBox(ByVal msgText As String, _ Optional ByVal TimeInSeconds As Integer, _ Optional ByVal intButtons = vbDefaultButton1, _ Optional TitleText As String = "WScript") As Integer On Error GoTo MesgBox_Err Dim winShell As Object Set winShell = CreateObject("WScript.Shell") MesgBox = winShell.PopUp(msgText, TimeInSeconds, TitleText, intButtons) MesgBox_Exit: Exit Function MesgBox_Err: winShell.PopUp Err & " : " & Err.Description, 0, "MesgBox()", vbCritical Resume MesgBox_Exit End Function ويتم استدعاء الورتين من خلال opt = MesgBox(Me.n & vbCr & vbCr & " Please wait . . .", 1, vbInformation, "Info") حيث ان بناء الكود كالاتى 'Syntax: opt = MesgBox(msgTxt,intSeconds,Buttons+Icon+DefaultButton,"Title") aa V2.accdb
  13. اولا بارك الله فى عمرك وعلمك وعملك وجزاكم كل خير ثانيا انا اقل طويلب علم ولست مبرمجا على الاطلاق مجرد هاو ثالثا كنت ابلور فكرة من الامس شبيه بفكرة حضرتك استخدمت الروتين الاتى فى وحدة نمطية Function OpenReport(ByRef rptName As String, ByRef qryName As String) On Error GoTo ErrorHandler DoCmd.OpenReport rptName, acViewPreview, , , , qryName procDone: Exit Function ErrorHandler: MsgBox$ Err.Number & ": " & Err.Description Resume procDone End Function على ان يتم استدعاءه بالسطر الاتى OpenReport("rpt2", "Query2") نفس فكرة حضرتك طبعا بسبب الغموض وعدم التوضيح الكافى كنت فى انتظار اضافة المرفق Chang Record Sources Report VBA(V3).mdb
  14. تسلم الايادى يا @مبرمج سابق يا عالم يا معقدين شايفين البساطة ما شاء الله
  15. جزاكم الله خيرا استاذى الجليل ومعلمى القدير الاستاذ @Barna واسمح لى ممكن نختصر الكود ليكون Dim qdf As DAO.QueryDef Dim strSQL As String CurrentDb.QueryDefs.Delete "qr1" If com1 = "التقرير الاول" Then strSQL = "SELECT tblA.* FROM tblA;" ElseIf com1 = "التقرير الثاني" Then strSQL = "SELECT tblB.* FROM tblB;" End If Set qdf = CurrentDb.CreateQueryDef("qr1", strSQL) DoCmd.OpenReport "rptFlayReport", acViewPreview ولارد بضاعتكم اليكم بطريقة مختلفة بعض الشئ تجنبا لاستخدام الحروف العربية , واضفاء مرونة أكبر فى حال اردنا تمرير اسم التقرير من خلال الكود الافكار كثيرة وتتصارع وتتلاحق فى رأسي بسبب عدم فهمى الهدف والمطلوب تحقيقة بصورة مباشرة من السؤال بسبب غموض الهدف ولكن على حال تبقى الحاجة هى ام الاختراع وفهم السؤال هو شطر الجواب Chang Record Sources Report Barna V2.mdb
  16. انا اريد مرفقا انا لم افهم اى شئ
  17. لابد من تنصيب اكروبات ريدر
  18. طيب ممكن تجربة المرفق الاتى لانه يبدو لى ان التقرير نريده ان يقتح على اكثر من مصدر بيانات حسب الحالة ان لم افهم الموضوع جيدا برجاء مرفق حتى اسطيع الفهم >>---> صعيدى بيفهم بالعافية Chang Record Sources Report.mdb
  19. شوف يا باش مهندس @Eng.Qassim قمت فى هذا المرفق ببعض التعديلات الطفيفة والتى تظهر امامك كل شئ تفصيليا حمل المرفق وقم بفتح الاستعلام qryActualDays ActualDaysCalcult Eng.Qassim.accdb
  20. الله يسلمك ويحفظك يا باش مهندس قاسم وما هى المشكلة 01/06/2022 >>---> يوافق يوم الاربعاء >>---> 1 02/06/2022 >>---> يوافق يوم الخميس >>---> 2 03/06/2022 >>---> يوافق يوم الجمعة >>---> 0 04/06/2022 >>---> يوافق يوم السبت >>---> 0 05/06/2022 >>---> يوافق يوم الاحد >>---> 3 06/06/2022 >>---> يوافق يوم الاثنين >>---> 4 07/06/2022 >>---> يوافق يوم الثلاثاء >>---> 5 08/06/2022 >>---> يوافق يوم الاربعاء >>---> 6 09/06/2022 >>---> يوافق يوم الخميس >>---> 7 11/06/2022 >>---> يوافق يوم الجمعة >>---> 0 11/06/2022 >>---> يوافق يوم السبت >>---> 0 12/06/2022 >>---> يوافق يوم الاحد >>---> 8
  21. اولا جزاكم الله خيرا لبحثكم وتقديم المساعدة ولكن اسمح لى بعد اذن حضرتك 1- يعيب الدالة من موقع مايكرسوفت استخدام اسم اليوم سواء بالعربية او الانجليزية بسبب اختلاف الاجهزة على الرغم من امكانية تحاشى تلك المشكلة ولكن هذا شق الاجابه على السؤال وهو الفرق بالايام بين تاريخين مع عدم احتساب ايام الجمعة والسبت 2- وماذا عن الشق الاخر ؟
  22. اولا انشئ جدول باسم tblHolidays يتكون هذا الجدول من حقلين الحقل الاول باسم HolidayType نوع الحقل نصى ليحتوى على اسم او وصف الأعياد والأجازات الرسمية لهذا العام الحقل الثانى باسم HolidayDate نوع الحقل تاريخ ليحتوى على تاريخ الأعياد والأجازات الرسمية لهذا العام بعد ذلك انشئ وحدة نمطية وضع بها الروتين الاتى Function ActualDays(ByVal dtStartDay As Date, ByVal dtEndDay As Date, Optional nDay As Integer = 0) As Long Dim dtNominalEndDay As Date Dim lngTotalDays As Long Dim lngTotalWeeks As Long Dim lngTotalHolidays As Long Dim lngstart As Long Dim lngend As Long 'Check to see if dtStartDay > dtEndDay. If so, then switch the dates If dtStartDay > dtEndDay Then ActualDays = 0: Exit Function ' If dtStartDay >= dtEndDay Then ' dtNominalEndDay = dtStartDay ' dtStartDay = dtEndDay ' dtEndDay = dtNominalEndDay ' End If 'Here are how many weeks are between the two dates lngTotalWeeks = DateDiff("w", dtStartDay, dtEndDay) 'Here are the number of weekdays in that total week lngTotalDays = lngTotalWeeks * 5 'Here is the date that is at the end of that many weeks dtNominalEndDay = DateAdd("d", (lngTotalWeeks * 7), dtStartDay) 'Now add the number of weekdays between the nominal end day and the actual end day While dtNominalEndDay <= dtEndDay If Weekday(dtNominalEndDay, 2) <> 5 Then If Weekday(dtNominalEndDay, 2) <> 6 Then lngTotalDays = lngTotalDays + 1 End If End If dtNominalEndDay = dtNominalEndDay + 1 Wend 'convert end date and startdate into long integer format for the DCount operation to avoid misreading of dates as US format lngstart = dtStartDay lngend = dtEndDay 'Here are how many holiday days there are between the two days lngTotalHolidays = DCount("HolidayDate", "tblHolidays", "HolidayDate <= " & lngend & " AND HolidayDate >= " & lngstart & " AND Weekday(HolidayDate,2) <> 6 AND Weekday(HolidayDate,2) <> 5") ActualDays = lngTotalDays - lngTotalHolidays 'Here are how many holidays between the two dates plus the number of weekends 'If nDay = 1 Then ActualDays = DateDiff("d", dtStartDay, dtEndDay) - ActualDays + 1 If nDay = 1 Then ActualDays = DateDiff("d", dtStartDay, dtEndDay) + 1 If nDay = 2 Then ActualDays = DateDiff("d", dtStartDay, dtEndDay) - ActualDays + 1 If nDay = 3 Then ActualDays = lngTotalHolidays If nDay = 4 Then ActualDays = (DateDiff("d", dtStartDay, dtEndDay) - ActualDays + 1) - lngTotalHolidays End Function ولاستدعاء الروتين السابق لاحتساب الايام الفعلية بين تاريخين بدون العطل الرسيمة داخل الجدول المحدد لذلك وبدون ايام الجمعة والسبت ActualDays([BeginDate],[EndDate]) وان اردت استخلاص عدد العطلات الرسمية بين تاريخين والتى تم تحديدها مسبقا بجدول tblHolidays + العطلات الاسبوعية ( الجمعة + السبت ) قم ياستدعاء الروتين بالشكل الاتى ActualDays([BeginDate],[EndDate],1) وهذا التعديل الاخير لى على الأكود فى المرفق الذى اشار اليه الباش مهندس @Moosak تم تعديل المرفق ActualDaysCalcult.accdb
  23. جزاكم الله خيرا معذرة على طول الغياب
×
×
  • اضف...

Important Information