اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر
8 دقائق مضت, طاهر اوفيسنا said:

استاذ ي العزيز ممكن إرسال نسخة بها التأجيل اي اعمل تأجيل لمدة مثلا 3 اشهر ابتداء من تاريخ 2025/05/01 لكي اقارن     ملاحظة غير تسمية النسخة لى اسم اخرا

تأجيل الاقتطاع 3 أشهر.zip

  • الردود 57
  • Created
  • اخر رد

Top Posters In This Topic

قام بنشر (معدل)

قم أولا بالغاء أفضل إجابة يا صديقي ، حتى تجد حل للمشكلة التي لا اعلم ما هو سببها في جهازك ..

ثانياً الصور التي ارفقتها جميعها من جهازين مختلفين و 3 نسخ أوفيس مختلفة ( 2016 ، 2010 و 2019 )

أضف الى ذلك ، الحدث الذي تستخدمه عند فتح النموذج في الصورة المرفقة التالية ، قد يكون أحد أسباب الخلل في البيانات التي يتم عرضها فيه

Untitled.png.c5fa902e122f67f340fd3aa08c3d8959.png

تم تعديل بواسطه Foksh
💥 توضيح بعض النقاط ..
قام بنشر (معدل)

قد استعجبت من الملف والنتائج المتفاوتة بين أكثر من مستخدم .. ولذلك ، جرب هذا التعديل التالي :-

Private Sub cmd_Do_Changes_Click()
    On Error GoTo Err_Handler

    Dim rst As DAO.Recordset
    Dim db As DAO.Database
    Dim Dat As Date
    Dim Remarks As String
    Dim i As Integer
    Dim Loan_Type As String
    Dim MySQL As String
    Dim NewPaymentMonth As Date
    Dim ExistingRecord As Boolean
    Dim DiscountEndDate As Date
    Dim ObsText As String
    Dim RecID As Long

    Me.Month_From = DateSerial(Year(Me.Month_From), Month(Me.Month_From), 1)

    If Me.Month_From < Me.DiscountStartDate Then
        MsgBox "آسف, شهر التأجيل الذي أدخلته أصغر من شهر بداية الإقتطاع" & vbCrLf & _
               "يرجى التصحيح وحاول مرة أخرى", vbExclamation + vbMsgBoxRight, ""
        Exit Sub
    ElseIf Me.Month_From > Me.DiscountEndDate Then
        MsgBox "آسف, شهر التأجيل الذي أدخلته أكبر من شهر نهاية آخر إقتطاع" & vbCrLf & _
               "يرجى التصحيح وحاول مرة أخرى", vbExclamation + vbMsgBoxRight, ""
        Exit Sub
    End If

    If Me.OpenArgs = "frmCridi" Then
        Loan_Type = "Cridi"
    Else
        Loan_Type = "Elec"
    End If

    MySQL = "SELECT * FROM tbl_Loans WHERE Loan_ID = " & Me.Loan_ID & " AND Loan_Type='" & Loan_Type & "'"

    Set db = CurrentDb
    Set rst = db.OpenRecordset(MySQL, dbOpenDynaset)

    For i = 0 To Me.Number_Of_Months - 1
        Dat = DateAdd("m", i, Me.Month_From)
        NewPaymentMonth = DateAdd("m", i + 1, Me.DiscountEndDate)
        ExistingRecord = False

        If Not rst.BOF And Not rst.EOF Then
            rst.MoveFirst
            rst.FindFirst "[Payment_Month]=#" & Dat & "#"
            If Not rst.NoMatch Then
                ExistingRecord = True
            End If
        End If

        If ExistingRecord Then
            Remarks = Nz(rst!Remarks, "")
            rst.Edit
                rst!Loan_Made = 0
                rst!Remarks = Remarks & " | تأجيل الإقتطاع إلى " & NewPaymentMonth
                rst!wada3 = "تم التأجيل"
            rst.Update
        End If

        rst.AddNew
            rst!EmployeeID = Me.EmployeeID
            rst!Loan_ID = Me.Loan_ID
            rst!Auto_Date = Me.AwardMonth
            rst!Payment_Month = NewPaymentMonth
            rst!Loan_Made = Me.DiscountPerMonth
            rst!Loan_Type = Loan_Type
            rst!Remarks = Remarks
            rst!annee = Year(Date)
        rst.Update
    Next i

    DiscountEndDate = DateAdd("m", Me.Number_Of_Months, Forms!frmCridi!Frm_sub!DiscountEndDate)
    Forms!frmCridi!Frm_sub!DiscountEndDate = DiscountEndDate

    ObsText = Nz(Forms!frmCridi!Frm_sub!Obsérvation, "") & " | تأجيل الإقتطاع لمدة " & Me.Number_Of_Months & " أشهر"
    Forms!frmCridi!Frm_sub!Obsérvation = ObsText

    RecID = Nz(Forms!frmCridi!Frm_sub!ID, 0)
    Forms!frmCridi!Frm_sub.Form.Requery
    Set rst = Forms!frmCridi!Frm_sub.Form.RecordsetClone
    If RecID <> 0 Then
        rst.FindFirst "[ID]=" & RecID
        If Not rst.NoMatch Then
            Forms!frmCridi!Frm_sub.Form.Bookmark = rst.Bookmark
        End If
    End If

    MsgBox "تم تأجيل الإقتطاع لمدة " & Me.Number_Of_Months & " أشهر بنجاح", vbInformation + vbMsgBoxRight, ""

    rst.Close: Set rst = Nothing
    Set db = Nothing

    DoCmd.Close

Exit_Sub:
    Exit Sub

Err_Handler:
    MsgBox "حدث خطأ", vbCritical + vbMsgBoxRight, ""
    Resume Exit_Sub
End Sub

 

جربه وأخبرني بالنتيجة للمتابعة 😇 .

تأجيل الاقتطاع.zip

 

====================

 

وأيضاً قد توجهت الى حل وطريق آخر مختلف نوعاً ما .. جرب الكود التالي أيضاً بدون مرفق حتى لا تتوه الأفكار منك كثيراً :-

Private Sub cmd_Do_Changes_Click()
    On Error GoTo Err_Handler

    Dim rst As DAO.Recordset
    Dim db As DAO.Database
    Dim Dat As Date
    Dim Remarks As String
    Dim i As Integer
    Dim Loan_Type As String
    Dim MySQL As String
    Dim NewPaymentMonth As Date
    Dim ExistingRecord As Boolean
    Dim DiscountEndDate As Date
    Dim ObsText As String
    Dim RecID As Long

    Me.Month_From = DateSerial(Year(Me.Month_From), Month(Me.Month_From), 1)

    If Me.Month_From < Me.DiscountStartDate Then
        MsgBox "آسف, شهر التأجيل الذي أدخلته أصغر من شهر بداية الإقتطاع" & vbCrLf & _
               "يرجى التصحيح وحاول مرة أخرى", vbExclamation + vbMsgBoxRight, ""
        Exit Sub
    ElseIf Me.Month_From > Me.DiscountEndDate Then
        MsgBox "آسف, شهر التأجيل الذي أدخلته أكبر من شهر نهاية آخر إقتطاع" & vbCrLf & _
               "يرجى التصحيح وحاول مرة أخرى", vbExclamation + vbMsgBoxRight, ""
        Exit Sub
    End If

    If Me.OpenArgs = "frmCridi" Then
        Loan_Type = "Cridi"
    Else
        Loan_Type = "Elec"
    End If

    MySQL = "SELECT * FROM tbl_Loans WHERE Loan_ID = " & Me.Loan_ID & " AND Loan_Type='" & Loan_Type & "'"

    Set db = CurrentDb
    Set rst = db.OpenRecordset(MySQL, dbOpenDynaset)

    For i = 0 To Me.Number_Of_Months - 1
        Dat = DateAdd("m", i, Me.Month_From)
        NewPaymentMonth = DateAdd("m", i + 1, Me.DiscountEndDate)
        ExistingRecord = False

        If Not rst.BOF And Not rst.EOF Then
            rst.MoveFirst
            rst.FindFirst "[Payment_Month]=#" & Dat & "#"
            If Not rst.NoMatch Then
                ExistingRecord = True
            End If
        End If

        If ExistingRecord Then
            Remarks = Nz(rst!Remarks, "")
            rst.Edit
                rst!Loan_Made = 0
                rst!Remarks = Remarks & " | تأجيل الإقتطاع إلى " & NewPaymentMonth
                rst!wada3 = "تم التأجيل"
            rst.Update
        End If

        rst.AddNew
            rst!EmployeeID = Me.EmployeeID
            rst!Loan_ID = Me.Loan_ID
            rst!Auto_Date = Me.AwardMonth
            rst!Payment_Month = NewPaymentMonth
            rst!Loan_Made = Me.DiscountPerMonth
            rst!Loan_Type = Loan_Type
            rst!Remarks = Remarks
            rst!annee = Year(Date)
        rst.Update
    Next i

    DiscountEndDate = DateAdd("m", Me.Number_Of_Months, Forms!frmCridi!Frm_sub!DiscountEndDate)
    Forms!frmCridi!Frm_sub!DiscountEndDate = DiscountEndDate

    ObsText = Nz(Forms!frmCridi!Frm_sub!Obsérvation, "") & " | تأجيل الإقتطاع لمدة " & Me.Number_Of_Months & " أشهر"
    Forms!frmCridi!Frm_sub!Obsérvation = ObsText

    RecID = Nz(Forms!frmCridi!Frm_sub!ID, 0)
    Forms!frmCridi!Frm_sub.Form.Requery
    Set rst = Forms!frmCridi!Frm_sub.Form.RecordsetClone
    If RecID <> 0 Then
        rst.FindFirst "[ID]=" & RecID
        If Not rst.NoMatch Then
            Forms!frmCridi!Frm_sub.Form.Bookmark = rst.Bookmark
        End If
    End If

    MsgBox "تم تأجيل الإقتطاع لمدة " & Me.Number_Of_Months & " أشهر بنجاح", vbInformation + vbMsgBoxRight, ""

    rst.Close: Set rst = Nothing
    Set db = Nothing

    DoCmd.Close

Exit_Sub:
    Exit Sub

Err_Handler:
    MsgBox "حدث خطأ", vbCritical + vbMsgBoxRight, ""
    Resume Exit_Sub
End Sub

 

تم تعديل بواسطه Foksh
قام بنشر
18 دقائق مضت, Foksh said:

وأيضاً قد توجهت الى حل وطريق آخر مختلف نوعاً ما .. جرب الكود التالي أيضاً بدون مرفق حتى لا تتوه الأفكار منك كثيراً :-

 

والله اتعبتك استاذي  - سامحني - لا شي تغير

فما مشكلة منعرف اين تكمن

اساتذتي الكرام ارجو منكم ان تمرو على الموضوع عسى لديكم العصا السحرية لحل هذا الاشكال الذي ارهق

الاستاذ Foksh وهو بدوره مابخل من تجارب  وهو مشكور على ذلك وبارك الله فيه على المجهود المبذولة 

ولكن لم نصل معا الى حل نهائي 

 

قام بنشر
17 دقائق مضت, طاهر اوفيسنا said:

اساتذتي الكرام ارجو منكم ان تمرو على الموضوع عسى لديكم العصا السحرية لحل هذا الاشكال الذي ارهق

 

أخي الكريم ليس الأمر بالعصا السحرية ، بقدر ما هي المشكلة - ولدي حدس كبير - بأنها تكمن في نسخة الأوفيس ..

على العموم لديك 3 حلول على ما اعتقد وقد ارفقت الكثير من الصور التي سجلتها بشكل مباشر من واقع تجاربي السابقة ، وإن رغبت فالحلول الأخيرة أيضاً لا بأس بتصويرها إن وددت :smile: 

قام بنشر
9 دقائق مضت, طاهر اوفيسنا said:

استاذي الكريم لقد جربت النسخة المعدلة على اكثر من جهاز طبعا الكل اوفيس 2010 و المشكلة واحدة واول مرة يواجهني هذا الشيء 😔

img?id=1275133

 

  • تمت الإجابة
قام بنشر

السلام عليكم

عيدكم مبارك

مشاركه مع اخى واستاذى @Foksh جزاه الله خيرا وتعديل ع مرفقه بعد السموحه طبعا

اخى @طاهر اوفيسنا جرب المرفق التالى واخبرنا بالنتيجه اولا

 

تأجيل الاقتطاع_1.mdb

قام بنشر
8 ساعات مضت, أبوبسمله said:

جرب المرفق التالى واخبرنا بالنتيجه اولا

وهو كذلك تم بفضل الله وبخبرة الاستاذ الفاضل أبوبسمله

حل المشكلة التي ارهقت الاستاذ Foksh   ربي يخفظه

عيدكم مبارك وكل عام وانت بالف خير

وربي يحفظك وشكرا على مرورك الطيب

فما اشكالية بسيطة حسب الصورة ياريت طلة جديدة في تنفيذ الكود

958849985_.jpg.c84d640f4faef40bcad8d7da65dd7ee3.jpg

 

  • Thanks 1
قام بنشر (معدل)

أشكر أخي العزيز @أبوبسمله على جهوده المتميزة 🤗 .

وارجو إرفاق الكود هنا للإستفادة بسبب عدم تواجدي أمام الكمبيوتر 😇 .

تم تعديل بواسطه Foksh
  • Thanks 1
قام بنشر

الشكر لله ثم لاخى العزيز @Foksh فالكود كوده وهو من اجابك فعليا

والاشكاليه المعروفه والتى هى مصدر المتاعب فعليا التواريخ وتنسيقاتها ولذلك يوجد وحده نمطيه للخروج من هذه الاشكاليه قد ارفقها اخى واستاذى الغالى @jjafferr جزاه الله عنا كل خير

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

وسوف ارفق الرابط لها

التعديل على السطر التالى

rst.FindFirst "[Payment_Month]=#" & Dat & "#"

الى

rst.FindFirst "[Payment_Month]=" & Format$(Dat, "\#mm\/dd\/yyyy\#")

والرابط التالى للمتابعه

اخى @طاهر اوفيسنا بالنسبه للاشكاليه التى ارفقتها فالتاريخ موجود كما بالصوره فى اصل المرفق الذى قمت بانزاله انا والتعديل عليه والكود ليس له علاقه به لا من قريب ولا من بعيد

قم بتنزيل المرفق وتعديل التاريخ الى 1 وجرب مره اخرى واخبرنا

وكل عام وانتم بخير

  • Thanks 1
قام بنشر
40 دقائق مضت, أبوبسمله said:

الشكر لله ثم لاخى العزيز @Foksh فالكود كوده وهو من اجابك فعليا

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

 

بارك الله فيكم وبأستاذنا ومعلمنا @jjafferr على موضوعه المميز 😇 .

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

قام بنشر
1 ساعه مضت, أبوبسمله said:

اخى @طاهر اوفيسنا بالنسبه للاشكاليه التى ارفقتها فالتاريخ موجود كما بالصوره فى اصل المرفق الذى قمت بانزاله انا والتعديل عليه والكود ليس له علاقه به لا من قريب ولا من بعيد

قم بتنزيل المرفق وتعديل التاريخ الى 1 وجرب مره اخرى واخبرنا

وكل عام وانتم بخير

شكرا استاذ

فعلا التاريخ لما صححته وعاودت تنفيذ الكود رجع عادي اما المبلغ مزال فيه اشكالية ولكن مايحرني المجموع 10.000.00بالاسفل معناه المبلغ  المحذوف محسوب

1411451714_.jpg.a7373a1c957e075654ee17a40ab305cf.jpg

قام بنشر (معدل)
3 ساعات مضت, طاهر اوفيسنا said:

فعلا التاريخ لما صححته وعاودت تنفيذ الكود رجع عادي اما المبلغ مزال فيه اشكالية ولكن مايحرني المجموع 10.000.00بالاسفل معناه المبلغ  المحذوف محسوب

 

لا أشعر باليأس ولله الحمد ، ولكني فعلاً في أحد الصور التي قمت بتصويرها لاحظت هذه المشكلة فعلاً ، وعليه جرب هذا التعديل الأخير لي فقد قمت بتجربة الكود أكثر من 9 مرات على أكثر من نسخة أوفيس ولم تظهر المشكلة السابقة خلاف موضوع تصفير قيمة الاقتطاع الشهري للسجل الأول ، أما فيما يخص هذه المشكلة الثانية ، فهي في الحدث الخاص عند تحميل النموذج .. لذا سأرفق تعديل آخر للحدث فقم بتجربته ,, فلا ضرر في التجربة 😅 .

 

Private Sub cmd_Do_Changes_Click()
    Dim rst As DAO.Recordset
    Dim Dat As Date
    Dim Remarks As String
    Dim i As Integer

    Me.Month_From = DateSerial(Year(Me.Month_From), Month(Me.Month_From), 1)

    If Me.Month_From < Me.DiscountStartDate Then
       MsgBox "آسف, شهر التأجيل الذي أدخلته أصغر من شهر بداية الإقتطاع" & vbCrLf & _
               "يرجى التصحيح وحاول مرة أخرى"
       Exit Sub
    ElseIf Me.Month_From > Me.DiscountEndDate Then
        MsgBox "آسف, شهر التأجيل الذي أدخلته  أكبر من شهر نهاية أخر إقتطاع" & vbCrLf & _
               "يرجى التصحيح وحاول مرة أخرى"
        Exit Sub
    End If
   
    If Me.OpenArgs = "frmCridi" Then
        MySQL = "Select * From tbl_Loans Where Loan_ID = " & Me.Loan_ID & " And Loan_Type='Cridi'"
        Loan_Type = "Cridi"
        r = ""
    Else
        MySQL = "Select * From tbl_Loans Where Loan_ID = " & Me.Loan_ID & " And Loan_Type='Elec'"
        Loan_Type = "Elec"
        r = ""
    End If

    Set rst = CurrentDb.OpenRecordset(MySQL)
    
    For i = 0 To Me.Number_Of_Months - 1
        Dat = Format(DateAdd("m", i, Me.Month_From), "mm/dd/yyyy")
        rst.FindFirst "[Payment_Month]=#" & Dat & "#"
        
        If Not rst.NoMatch Then
            Remarks = rst!Remarks
            rst.Edit
                rst!Loan_Made = 0
                rst!Remarks = Remarks & " | " & "تأجيل الإقتطاع إلى تاريخ " & Format(DateAdd("m", i + 1, Me.DiscountEndDate), "mm/dd/yyyy")
                rst!wada3 = "تم التأجيل"
            rst.Update
        End If
      
        rst.AddNew
            rst!EmployeeID = Me.EmployeeID
            rst!Loan_ID = Me.Loan_ID
            rst!Auto_Date = Me.AwardMonth
            rst!Payment_Month = DateAdd("m", i + 1, Me.DiscountEndDate)
            rst!Loan_Made = Me.DiscountPerMonth
            rst!Loan_Type = Loan_Type
            rst!Remarks = Remarks
            rst!annee = Year(Date)
        rst.Update
    Next i
    
    rst.Close: Set rst = Nothing
    
    Forms!frmCridi!Frm_sub!DiscountEndDate = DateAdd("m", Me.Number_Of_Months, Forms!frmCridi!Frm_sub!DiscountEndDate)
    
    Forms!frmCridi!Frm_sub!Obsérvation = Forms!frmCridi!Frm_sub!Obsérvation & " | " & _
                                              "تأجيل الإقتطاع لمدة " & GetMoisName(i)
    
    I2 = Forms!frmCridi!Frm_sub!ID
    Forms!frmCridi!Frm_sub.Form.Requery
    Set rst = Forms!frmCridi!Frm_sub.Form.RecordsetClone
    rst.FindFirst "[ID]=" & I2
    Forms!frmCridi!Frm_sub.Form.Bookmark = rst.Bookmark
    
    MsgBox ("تم تأجيل الإقتطاع لمدة " & GetMoisName(i))
 
    DoCmd.Close
End Sub

 

في حدث عند التحميل للنموذج Frm_Loans :-

Private Sub Form_Load()
    If Form_FrmCridi.Frm = "Cridi" Then
        If Not IsNull(Me.Payment_Made) Then
            If Me.Payment_Made.Value = 0 And Not IsNull(Me.Payment_Made) Then
                Me.Payment_Made.Value = Me.Payment_Made.Value
            End If
        End If
        
        Me.txt1.Value = Nz(DSum("[Loan_Made]", "tbl_Loans", "[EmployeeID]=" & Me.EmployeeID & " AND [Loan_ID] = " & Me.Loan_ID & " AND [Loan_Type]='Cridi'"), 0)
        Me.txt2.Value = Nz(DSum("[Payment_Made]", "tbl_Loans", "[EmployeeID]=" & Me.EmployeeID & " AND [Loan_ID] = " & Me.Loan_ID & " AND [Loan_Type]='Cridi'"), 0)
        Me.txt3.Value = Nz(DSum("[Loan_Remise]", "tbl_Loans", "[EmployeeID]=" & Me.EmployeeID & " AND [Loan_ID] = " & Me.Loan_ID & " AND [Loan_Type]='Cridi'"), 0)
        Me.txt_tot.Value = Me.txt1.Value - Me.txt2.Value - Me.txt3.Value
    Else
        If Not IsNull(Me.Payment_Made) Then
            If Me.Payment_Made.Value = 0 And Not IsNull(Me.Payment_Made) Then
                Me.Payment_Made.Value = Me.Payment_Made.Value
            End If
        End If
    End If
End Sub

 

تم تعديل بواسطه Foksh
تعديل الكود الأصلي و إضافة كود لحدث عند التحميل للنموذج Frm_Loans
قام بنشر (معدل)
30 دقائق مضت, Foksh said:

لا أشعر باليأس ولله الحمد ، ولكني فعلاً في أحد الصور التي قمت بتصويرها لاحظت هذه المشكلة فعلاً ، وعليه جرب هذا التعديل الأخير لي فقد قمت بتجربة الكود أكثر من 9 مرات على أكثر من نسخة أوفيس ولم تظهر المشكلة معي ,, لذا لا ضرر في التجربة 😅 .

شكرا استاذي الكريم على الاهتمام

اظن ان الكود الذي ارفقته قديم اي قبل التعديل الذي لاخطناه من طرف الاستاذ ابو البسملة 

4 ساعات مضت, أبوبسمله said:
rst.FindFirst "[Payment_Month]=" & Format$(Dat, "\#mm\/dd\/yyyy\#")

لاني  رجعنا الى نفس المشكلة  هذا من جهة ومن جهة ارسلي كود التعديل فقط بخصوص مسح المبلغ اي اين تم التعديل من حضرتك استاذي العزيز

تم تعديل بواسطه طاهر اوفيسنا
قام بنشر
2 دقائق مضت, طاهر اوفيسنا said:

اظن ان الكود الذي ارفقته قديم اي قبل التعديل الذي لاخطناه من طرف الاستاذ ابو البسملة 

4 ساعات مضت, أبوبسمله said:

كلا يا صديقي ، في التنسيق تم التبديل بين dd-mm-yyyy ليصبح التعديل = mm-dd-yyyy ويختلفان في التنسيق بين عرض الشهر أولا أم اليوم !!!!

قام بنشر

 

 

5 دقائق مضت, Foksh said:

كلا يا صديقي ، في التنسيق تم التبديل بين dd-mm-yyyy ليصبح التعديل = mm-dd-yyyy ويختلفان في التنسيق بين عرض الشهر أولا أم اليوم !!!!

39 دقائق مضت, Foksh said:
 Dat = Format(DateAdd("m", i, Me.Month_From), "mm-dd-yyyy")
        rst.FindFirst "[Payment_Month]=#" & Dat & "#"

انظر الفرق بين تنسيقك  بالاعلى وتنسيق الاستاذ ابو البسملة  بالاسقل صديقي

        Dat = Format(DateAdd("m", i, Me.Month_From), "yyyy-mm-dd")
        rst.FindFirst "[Payment_Month]=" & Format$(Dat, "\#mm\/dd\/yyyy\#")

 

قام بنشر (معدل)
14 دقائق مضت, طاهر اوفيسنا said:

انظر الفرق بين تنسيقك  بالاعلى وتنسيق الاستاذ ابو البسملة  بالاسقل صديقي

 

🙄

أعلم ما الفرق أخي الكريم بينهما ,, على العموم ما يهمني - ولغاية في نفسي ليس إلا - هو تجربة الكودين فقط لا غير .

* تم تعديل الكود الرئيسي للتأجيل *

وادعم تعليقك والنتيجة بصورة مرفقة اذا سمحت .

تم تعديل بواسطه Foksh
إضافة تعليق للدلالة على تعديل مشاركة سابقة ، لغاية في نفسي
قام بنشر
15 دقائق مضت, Foksh said:

أعلم ما الفرق أخي الكريم بينهما ,, على العموم ما يهمني

استاذي الكريم انت تخاطب مبتدي بالدرجة المتوسطة في الاكسس ولست خبير 

ثانيا : عند التجربة وبالكود الذي ارفقته رجعت لاول مشكلة وعند تغيير تنسيق التاريخ 

Format$(Dat, "\#mm\/dd\/yyyy\#"

يرجع الكود يعمل بصفة عادية

ولكن هذه المشكلة أظن تخيناها منذ صباح اليوم

21 دقائق مضت, Foksh said:

وادعم تعليقك والنتيجة بصورة مرفقة اذا سمحت

نفس المشكلة كما في الصور التي ارسلتها قبل اليوم

قام بنشر
2 دقائق مضت, طاهر اوفيسنا said:

استاذي الكريم انت تخاطب مبتدي بالدرجة المتوسطة في الاكسس ولست خبير 

 

العفو منك أخي الكريم ، لم أقصد شيئاً من كلامي ..

3 دقائق مضت, طاهر اوفيسنا said:

ثانيا : عند التجربة وبالكود الذي ارفقته رجعت لاول مشكلة وعند تغيير تنسيق التاريخ 

 

لاحظ انني قمت بتغيير وتعديل المشاركة للكود  الي اقترحته ..

 

1 دقيقه مضت, طاهر اوفيسنا said:

نفس المشكلة كما في الصور التي ارسلتها قبل اليوم

هل تقصد المشكلة التي هي حذف قيمة الاقتطاع الشهري للسجل الأول ؟؟؟؟؟؟؟؟؟؟

التاريخ.jpg

قام بنشر (معدل)

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

المقترح التالي هو :-

Dat = DateAdd("m", i, Me.Month_From)
rst.FindFirst "[Payment_Month]=" & CLng(Dat)

لماذا هذا الكود أدق ؟

  1. يستخدم Date مباشرة دون تحويله إلى نص ، مما يضمن أن آكسيس يفهمه كتاريخ وليس كنص قد يسبب أخطاء
  2. CLng(Dat) يحول التاريخ إلى الرقم التسلسلي الداخلي الذي يخزنه آكسيس ، مما يزيل أي مشاكل تتعلق بالتنسيق
  3. لا يعتمد على إعدادات النظام ( سواءً كان mm/dd/yyyy أو dd/mm/yyyy ) ، لأن آكسيس يخزن التواريخ كأرقام وليس كنصوص

لذا قمت بالبحث والتمحيص بأكثر من أسلوب وعدم اعتمادي للكود المقترح من طرف أستاذنا القدير أبو بسمله دون تجربة متعددة الخيارات ؟؟

 

لماذا الكود التالي أقل دقة ؟

Dat = Format(DateAdd("m", i, Me.Month_From), "yyyy-mm-dd")
rst.FindFirst "[Payment_Month]=" & Format$(Dat, "\#mm\/dd\/yyyy\#")
  1. Format(DateAdd(...), "yyyy-mm-dd") يحوّل التاريخ إلى نص ، آكسيس لا يتعامل مع "yyyy-mm-dd" كتاريخ افتراضياً ، مما قد يؤدي إلى أخطاء عند البحث
  2. Format$(Dat, "\#mm\/dd\/yyyy\#") يحاول فرض التنسيق ، لكنه يعمل فقط إذا كانت الإعدادات الإقليمية للنظام متوافقة معه
  3. إذا كان النظام يستخدم dd/mm/yyyy ، فقد يفشل البحث بسبب اختلاف ترتيب اليوم والشهر
  4. يعتمد على إعدادات النظام ، مما قد يجعله غير متوقع في بعض الأجهزة

 

📌 النتيجة النهائية :-

الكود الذي اقترحته حالياً (CLng(Dat)) أكثر دقة لأنه يعتمد على القيم الرقمية للتواريخ في آكسيس 
الكود المقترح سابقاً أقل موثوقية لأنه يعتمد على تحويل التاريخ إلى نص
وقد يتأثر بإعدادات النظام

 

💥 وباختصار شديد :-

استخدام CLng(Dat) أفضل لأنه :-

  • يتعامل مع التاريخ كقيمة رقمية داخلية (Serial Date)
  • يتجنب مشاكل تنسيق التاريخ المرتبطة بالإعدادات الإقليمية
  • أكثر كفاءة في الأداء لأنه يقارن أرقام وليس نصوص
  • يعكس طريقة تخزين آكسيس الفعلية للتواريخ داخلياً

استخدام Format أقل دقة لأنه :-

  • يحول التاريخ إلى نص (string)
  • يعتمد على الإعدادات الإقليمية للنظام
  • قد يسبب أخطاء عند اختلاف تنسيق التاريخ بين الأنظمة
  • يحتاج إلى معالجة إضافية للتأكد من صحة التنسيق

 

📛 ملاحظة :- انا لا أبحث عن أفضل إجابة بقدر ما أبحث عن حل لمشكلة من جميع النواحي 😊 

تأجيل الاقتطاع.zip

تم تعديل بواسطه Foksh
زيادة في التوضيح
  • Like 1
  • Thanks 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information