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

jjafferr

أوفيسنا
  • Posts

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

  • تاريخ اخر زياره

  • Days Won

    408

كل منشورات العضو jjafferr

  1. أخي ، رجاء تعطينا مثال واضح نستطيع ان نتتبعه ، حتى نستطيع ان نوصل للذي تريد. المثال الذي ذكرته غير مفهوم اعطنا اكثر من مثال في ملف اكسل او في صورة. جعفر
  2. السلام عليكم ورحمة الله وبركاته وبعد سنين من العمل في كود الأكسس ، لازلت الى الأمس القريب كنت اعاني من عدم حصولي على النتائج المطلوبة من الجدول (بدون مجموعة محاولات) ، اذا كان المعيار هو حقل تاريخ الى ان حصلت على الكود التالي ، والذي اصبح التعامل فيه مع التاريخ سهلا انا احفظ هذه الوحدة النمطية بإسم fDateFormat: Function DateFormat(varDate As Variant) As String 'Purpose: Return a delimited string in the date format used natively by JET SQL. 'Argument: A date/time value. 'Note: Returns just the date format if the argument has no time component, ' or a date/time format if it does. 'Author: Allen Browne. allen@allenbrowne.com, June 2006. ' 'calling the Function: DateFormat(The_Date_Field) 'a = dlookup("[some field]","some table","[id]=" & me.id & " And [Date_Field]=" & DateFormat(The_Date_Field)) ' If IsDate(varDate) Then If DateValue(varDate) = varDate Then DateFormat = Format$(varDate, "\#mm\/dd\/yyyy\#") Else DateFormat = Format$(varDate, "\#mm\/dd\/yyyy hh\:nn\:ss\#") End If End If End Function وطريقة استعمال الكود كالأمثلة التالية: a = dlookup("[some field]","some table","[id]=" & me.id & " And [Date_Field]=" & DateFormat(The_Date_Field)) او ("Select DISTINCT cen, [Date] From TTTT Where [Date]=" & DateFormat(Me.Idate)) او عدة طرق اخرى اليكم مثالين في البرنامج المرفق ، كيف ان الدالة DateFormat تعطيني نتائج صحيحة مباشرة ، بينما استخدام الطريقة التقليدية للتاريخ لا تعطيني النتيجة مباشرة: الجدول يحتوي على تاريخين ، 1-5-2015 و 2-5-2015 ، وهنا سنقوم بالتجربة على التاريخ 1-5-2015 (ويمكنكم استخدام التاريخ التاثي 2-5-2015) ، وللتأكد من نتائجنا ، عملنا استعلامين : و استخدام الكود في Recordset 1. مع استعمال الدالة DateFormate Set rst = CurrentDb.OpenRecordset("Select DISTINCT cen, [Date] From tbl_T Where [Date]=" & DateFormat(Me.idate)) rst.MoveLast: rst.MoveFirst RC1 = rst.RecordCount والنتيجة صحيحة ، كما تدل عليه نتيجة الاستعلام في الاسفل: 2. مع عدم استعمال الدالة DateFromat ، وانما استخدام الطريقة التقليدية للتاريخ: Set rst = CurrentDb.OpenRecordset("Select DISTINCT cen, [Date] From tbl_T Where [Date]=#" & Me.idate & "#") rst.MoveLast: rst.MoveFirst RC2 = rst.RecordCount والنتيجة خطأ ، كما تدل عليه نتيجة الاستعلام في الاسفل: استخدام الدالة Dcount 3. مع استعمال الدالة DateFormat RC3 = DCount("*", "tbl_T", "[Date]=" & DateFormat(Me.idate)) والنتيجة صحيحة ، كما تدل عليه نتيجة الاستعلام في الاسفل: 4. مع عدم استعمال الدالة DateFormat ، ، وانما استخدام الطريقة التقليدية للتاريخ: RC4 = DCount("*", "tbl_T", "[Date]=#" & Me.idate & "#") والنتيجة خطأ ، كما تدل عليه نتيجة الاستعلام في الاسفل: جعفر 84.DateFormat_Examples.mdb.zip
  3. يعني قصدك تريدن نفحص : 24 جدول 21 استعلام 28 نموذج ، وفيها 11 حدث 13 تقرير 15 ماكرو ونتوصل الى انه اي فيهم عنده مشكلة عطل فيه علاقة او كود يجعل القاعدة لاتظهر البيانات القديمة ؟؟ ولم احسب عدد الكائنات في النماذج ، حتى مالذي فيها لا يعمل !! أخي الفاضل: أهلا وسهلا بك في المنتدى ، ولكن يجب عليك ان تساعدنا علشان نقدر نساعدك جعفر
  4. حياك الله التعديل فقط في الوحدة النمطية Count_Remaining والتي هي جزء من الوحدة النمطية الام fAdd_Observations: Function Count_Remaining(P, ID_Emp As Integer, ID_Loan As Integer, T As String) As Currency 'On Error Resume Next 'P = Payment month 'ID_Loan = Loan ID 'a = amount of Loan 'S = Sum of payments 'T = Cridi or Elec 'we need to know how much is the Loan, from tables Cridi and ElectroMeng 'and SUM the paid, from tbl_Loans, to the date specified in FrmDiscountReport If T = "Cridi" Then a = DSum("[Loan_Cridi]", "tbl_Loans", "[EmployeeID]=" & ID_Emp & " And [Loan_ID]=" & ID_Loan) S = DSum("[Payment_Made_Cridi]", "tbl_Loans", "[EmployeeID]=" & ID_Emp & " And [Loan_ID]=" & ID_Loan & " And [Payment_Month]<=#" & P & "#") 'Debug.Print "C " & vbTab & "Emp=" & ID_Emp & vbTab & " Loan=" & ID_Loan & vbTab & " S=" & S & vbTab & " a=" & a ElseIf T = "Elec" Then a = DSum("[Loan_Elec]", "tbl_Loans", "[EmployeeID]=" & ID_Emp & " And [Loan_ID]=" & ID_Loan) S = DSum("[Payment_Made_Elec]", "tbl_Loans", "[EmployeeID]=" & ID_Emp & " And [Loan_ID]=" & ID_Loan & " And [Payment_Month]<=#" & P & "#") 'Debug.Print "E " & vbTab & "Emp=" & ID_Emp & vbTab & " Loan=" & ID_Loan & vbTab & " S=" & S & vbTab & " a=" & a End If 'the same Record in the Query contains both Cridi and Elect, 'whereas tbl_Loans Records, contain either one of them, 'thus, when ID_Loan value does not exist in tbl_Loans, just return a Zero to the query If IsNull(a) Then Count_Remaining = 0 Else Count_Remaining = a - Nz(S, 0) End If End Function ويمكنك حذف qry_Loans_OLD و qry_Loans_Step21 اللي حصل هو: انا كلما عدلت على الوحدة النمطية ، لم تتغير القيمة في الاستعلام الى ان اضطررت النظر في تفاصيل مجاميع الوحدة النمطية ، بإضافة الامر Debug.print (سترى الامر بالكامل في الوحدة النمطية) ، وهنا اكتشفت بأنك قد ادخلت مبالغ سداد القروض لجميع الاشهر ، يعني نحن في شهرMay 2015 وعليه سداد القرض يجب ان يكون الى هذا التاريخ ، وسجل الشهر التالي June 2015 يجب ان يكون فاضي ، حيث انك لم تستقطع هذا المبلغ من الموظف بعد . وانا في المرفقات السابقة ، كنت أحذف استقطاعات جميع التواريخ التالية لشهرنا May 2015 ، ولكنك الظاهر لم تلاحظ ذلك ، وفي كل مرة ترسل لي الجدول بالمعلومات الخطأ المرفق يوضح هذا: جعفر
  5. وعليكم السلام أخي كريمو هناك شرط لعمل البرنامج بالطريقة الصحيحة ، وهي ان تدفع قيمة قسط كل شهر في شهره ، وهذا ما يعمله لك الكود في النموذج FrmDiscountReport ، وان لا تدفع قيمة الاقساط مقدما لكل الاقساط !! وإلا فما فائدة البرنامج !! ميزة البرنامج انك تستطيع عن طريق FrmDiscountReport ان تختار اي شهر شئت (طبعا من الاشهر السابقة) ، وسيعطيك البرنامج كم كانت السلفة وكم تم الدفع و... ، واخبرتك ، ان الدفع الشهري هو توثيق بان قيمة القسط قد تم سدادها في ذلك الشهر (او قد تم سداد مبلغ اكبر مقدما). جعفر 11.8.FrmDiscountReport.mdb.zip
  6. المشكلة في الباقي بالسالب هو يلزم فكرة في كود الوحدة النمطية بحيث انه لايظهر مجموع القروض المنتهية ويظهر الا باقي القرض الجديد فقط هاذان المبلغان لازم عمل كود يعدمها ويبقى الباقي 0.00 وحلها في الوحدة النمطية السلام عليكم أخي كريمو الهدف من الطريقة الجديدة هي الاعتماد على بيانات الجدول tbl_Loans بدون تدخل الكود ، وإلا رجعنا الى نفس المشكلة السابقة ، وهي حل كل معضلة بالكود!! الان الجدول نظيف ، وطريقة الحساب سهلة ، لذا يجب ان نبقى على هذا الطريق هناك حلين يدوران في بالي: 1. ان لا نهتم ببيانات الجدولين Cridi و Elec السابقة ، وانما العملية الحسابية تبدأ من ادخالك بيانات جديدة في هذين الجدولين (طبعا عن طريق النماذج الخاصة بهم) ، وبهذه الطريقة تدخل البيانات في الجدول tbl_Loans ، وتبدأ عملية الحساب , 2. ان نرى جميع البيانات في الجدولين Cridi و Elec ، ونُدخل بياناتهم (هذه العملية سنقوم بها لمرة واحدة فقط عن طريق كود) في الجدول tbl_Loans ، ومنها سيتم استخدام الجدول tbl_Loans بالطريقة الطبيعية. بالنسبة لي ، انا أفضل الطريقة الاولى ، ولكن محاسبياً ، اذا لم يكن مقبولا ، فسنعمل على الخيار الثاني جعفر
  7. وعليكم السلام أخي عبدالله انا في اعتقادي Dcount أفضل ، لهذه الاسباب: 1. لسنا بحاجة الى الامر NZ لأول رقم ، 2. اذا لأي سبب تم حذف سجل في منتصف السجلات ، فـ Dmax سيعطيك الرقم الاكبر التالي ، مما يعني انك لن تعرف ان هناك رقم ناقص/تم حذفه من المنتصف ، ويصبح التسلسل غير صحيح (إلا اذا كان هذا غير مهم ، فهنا Dmax أفضل) ، بينما في Dcount ، فممكن معرفة اذا تم حذف سجل بسهولة ، حيث ان الرقم الاخير الموجود سوف يتكرر (طبعا هذا سيطلب تدخل المبرمج لحل هذه النقطة) ، ونستطيع ان نعمل كود للتأكد بأن الرقم غير متكرر ، مما سيعطينا اشعار بذلك ، 3. Dmax يقرأ بيان الحقل ، بينما Dcount يحسب السجلات ، لهذا Dcount اسرع في التنفيذ ولكن في نهاية الامر ، كل الطرق تؤدي الى روما ، والخيار للذي ترتاح له جعفر
  8. وعليكم السلام من النموذج الفرعي ، تستطيع استعمال نفس الكود ، لأي حقل في نفس النموذج الفرعي ، من النموذج الرئيسي ، استعمل الكود التالي لقفل حقل في النموذج الفرعي: مثلا: Me.FrmCridi_sub.Form.Obsérvation.Enabled = False me.اسم النموذج الفرعي.Form.اسم الحقل في النموذج الفرعي.Enabled = False جعفر
  9. وعليكم السلام في النموذج ، في الحدث "بعد تحديث" الحقل نوع الصادرة ، استعمل هذا الكود: Me.seq = DCount("[typ]", "sadr", "[year1]=" & Year(Now())) + 1 جعفر
  10. اين المرفق؟
  11. إعذرني أخوي انت ما عليك من ان اسمي في كل مكان ، بس انا ترى فهمي ضعيف ما افهم السؤال ، إلا بمثال وتفصيل الضعيف جعفر
  12. تفضل هاي للرقم 2 بس تأكد اني ما قلبت المطلوب !! وانا عملت الدفع لهؤلاء فقط: myCriteria = "[detach]='موظف'" myCriteria = myCriteria & " Or [detach]='منتدب'" myCriteria = myCriteria & " Or [detach]='متعاقد كامل'" myCriteria = myCriteria & " Or [detach]='متعاقد جزئي'" myCriteria = myCriteria & " Or [detach]='عون نظافة'" فاذا كان المقصود بدون هؤلاء ، فغير الاسطر الى myCriteria = "[detach]<>'موظف'" myCriteria = myCriteria & " Or [detach]<>'منتدب'" myCriteria = myCriteria & " Or [detach]<>'متعاقد كامل'" myCriteria = myCriteria & " Or [detach]<>'متعاقد جزئي'" myCriteria = myCriteria & " Or [detach]<>'عون نظافة'" بالنسبة الى رقم 1 ، ماذا تريدني ان افعل لعلاج المشكلة؟ جعفر 11.8.FrmDiscountReport.mdb.zip
  13. والدالة لأكثر من شرط ، وبطريقة سهلة: كل نوع من انواع الحقول له طريقة معينة للتعامل معه في الكود ، وهذا يجعل كتابة كود بأكثر من شرط ، صعب نوعا ما ، لذلك ، الطريقة التي اقترحها هي في التعامل مع كل نوع بسطر مستقل (انظر للمثال في الاسفل) ، مما لا يدع مجال للخطأ في السطر ، ثم نجمع الاسطر في سطر واحد ، وهذا السطر يكون مجموع الشروط : myCriteria = "[detach]='موظف'" myCriteria = myCriteria & " Or [iDate]=#29-05-2015#" myCriteria = myCriteria & " Or [Payment_Month]=#" & Me.txtMonth & "#" myCriteria = myCriteria & " Or [EmployeeID]=" & Me.EmployeeID 'myCriteria = myCriteria & " Or [ID]=12" a = DLookup("[myID]", "tbl_Employees", myCriteria) او myCriteria_1 = "[detach]='موظف'" myCriteria_2 = " Or [iDate]=#29-05-2015#" myCriteria_3 = " Or [Payment_Month]=#" & Me.txtMonth & "#" myCriteria_4 = " Or [EmployeeID]=" & Me.EmployeeID myCriteria_5 = " Or [ID]=12" myCriteria = myCriteria_1 & myCriteria_2 & myCriteria_3 & myCriteria_4 & myCriteria_5 a = DLookup("[myID]", "tbl_Employees", myCriteria) والشرح 'في الاسطر، ممكن استعمال والخلط بين 'Or او And 'كما يمكن استعمال اي سطر، و عدم استعمال اسطر اخرى، اي يمكن الخلط في استعمال الاسطر 'للمتغيرات الثابته 'نص myWhere = "[detach]='موظف'" myWhere = myWhere & " Or [ID]=12" 'رقم myWhere = myWhere & " Or [iDate]=#29-05-2015#" 'تاريخ 'للمتغيرات myWhere = myWhere & " Or [Employee_Name]='" & Me.Employee_Name & "'" 'نص myWhere = myWhere & " Or [EmployeeID]=" & Me.EmployeeID 'رقم myWhere = myWhere & " Or [Payment_Month]=#" & Me.txtMonth & "#" 'تاريخ a = DLookup("[myID]", "tbl_Employees", myWhere) جعفر
  14. السيد المحترم البسطاء مثلي لا يملكون حساب في المواقع الاجتماعية ، فاذا اردتني ان اساعد ، فرجاء ارفاق برنامجك هنا بعد ضغطه بواسطة winRar او winZip . البسيط جعفر
  15. جرب هذا المرفق الموضوع له علاقة بصيغة التاريخ جعفر 78.2.TEST.accdb.zip
  16. وعليكم السلام الآن وقد وفرت ووضحت الأمور بالتفصيل ، اليك الجواب بالتفصيل الآن النموذج يحتوي على حقلين: حقل التاريخ ، حيث تختار التاريخ المطلوب ، اما حقل IDD ، فهو ليس لك ، وانما للبرنامج ، لذا يمكنك ان تجعله مخفي والزر Exporter يحتوي على هذا الكود: Private Sub cmd_Export_to_pdf_Click() On Error GoTo err_cmd_Export_to_pdf_Click Dim rst As DAO.Recordset 'get the unique IDDs from qry_Test_Sums Set rst = CurrentDb.OpenRecordset("Select * From qry_Test_Sums Where [Date]=#" & Me.Idate & "#") rst.MoveLast: rst.MoveFirst RC = rst.RecordCount 'now loop through the IDDs, printing a Report for each For i = 1 To RC 'write the IDD to the Form, 'where qry_Test uses it with the Date from Me.iIDD = rst!IDD 'Output_Path= "c:\" & rst!IDD & ".pdf" Output_Path = Application.CurrentProject.Path & "\" & rst!IDD & ".pdf" 'The print to pdf cpmmand DoCmd.OutputTo acOutputReport, "AAAA", "PDFFormat(*.pdf)", Output_Path, False, , 0, acExportQualityPrint rst.MoveNext Next i 'cleaning up Me.iIDD = "" rst.Close: Set rst = Nothing MsgBox "pdf Printing completed" cmd_Export_to_pdf_Click_Exit: Exit Sub err_cmd_Export_to_pdf_Click: If Err.Number = 3021 Then MsgBox "No Records to Print" Resume cmd_Export_to_pdf_Click_Exit Else MsgBox Error$ End If End Sub والكود يرسل قيمة IDD من الاستعلام qry_Test_Sums ، حيث يتم استعمال هذه القيمة ، مع قيمة التاريخ في النموذج ، لتصفية سجلات الاستعلام qry_Test ، والنتيجة 300.pdf يقوم البرنامج بتصدير جميع ملفات pdf الى نفس المجلد الذي به البرنامج ، وقد وضعت لك مثال لتغيير المسار. جعفر 78.2.TEST.accdb.zip
  17. أنا آسف ، فانت تتكلم عن حقلين ، بينما انا اتكلم عن حقل واحد هو التاريخ !! الحل سهل ، والامر هو: Private Sub Command1_Click() On Error GoTo Command1_Click_Err Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("Select * From TTTT Where [date]=#" & Me.iDate & "#") rst.MoveLast: rst.MoveFirst RC = rst.RecordCount 'Output_Path= "c:\" Output_Path = Application.CurrentProject.Path & "\" For i = 1 To RC DoCmd.OutputTo acOutputReport, "AAAA", "PDFFormat(*.pdf)", Output_Path & rst!Cen, False, , 0, acExportQualityPrint rst.MoveNext Next i rst.Close: Set rst = Nothing Command1_Click_Exit: Exit Sub Command1_Click_Err: MsgBox Error$ Resume Command1_Click_Exit End Sub ولكن يجب ان اعرف تفاصيل أدق ، لذا رجاء ، اعمل لي/او ارفق سجلات صحيحة بتواريخ وارقام صحيحة ، كما ارفق لي سواء في اكسل ، او صورة ، توضح فيها السجلات التي تكون مجموعة مع بعض بالتاريخ و cen ، وعلى اساسه اضبط لك الكود ان شاء الله جعفر
  18. عفوا انت قلت سابقا: والان تقول: يعني انت لا تريد جميع التقارير في ملف pdf واحد ، وانما تريد كل تقرير في ملف pdf مستقل؟ هل هذا صحيح؟ جعفر
×
×
  • اضف...

Important Information