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

Foksh

أوفيسنا
  • Posts

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

  • Days Won

    195

مشاركات المكتوبه بواسطه Foksh

  1. مين جاب سيرة الكوسا  🤓

    44 دقائق مضت, Moosak said:

    قصدك :

      هههههه فعلاً مهندسنا الغالي ،، شكلي في رابع يوم هكذا ، فكيف بعد اسبوع 🤣

    أعاننا وإياكم الله ، وجزاكم الله على التنبيه :fff:

     

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

    أهلاً أخي أمين ، وبارك الله بك على هذه المبادرة الجميلة .:fff:.

    بدايةً ، واعلم أنك قد طرحت فكرة من تطبيقك وخطوة بخطوة ، وهو شيء جميل شعورك بأنك استطعت نقل الفكرة وتطبيقها ونجاحها معك . ولذا ومستقبلاً ومن باب التطوير لك ، إليك نصيحة قد تكون الخطوة الأولى لبناء مشروع سليم . تتلخص بما يلي :-

    • عدم إستعمال المسميات العربية للحقول أو العناصر أو المكونات بشكل عام ( حقول ، جداول ، استعلامات ، مربعات نص أو أزرار .... إلخ ) .
    • عدم استعمال المسافات بين أسماء المكونات التي تتكون من مقطعين أو أكثر ، وهنا لاحظت إنك تلافيت هذه النقطة باستخدامك الشرطة السفلية أو العادية ( ـ ، - ) في معظم الأحيان :clapping: .
    • حاول دائماً مستقبلاً - ( إن شاء الله ) - أن يكون لأسماء العناصر دلالة عليها . بدلاً من استعمال الأسماء الإفتراضية مثل text0 , text1 أو أمر12 ، أمر45 ... إلخ . كي تسهل عليك الإستدلال عليها دون الحاجة للتنقل بين هنا وهناك لمعرفة وتذكر و كتابة أسمائها عند الإستدعاء داخل الأكواد .

    لاحظت أيضاً أنك استخدمت سطر VBA لأيقاف وتشغيل التنبيهات عند حذف سجل من الجدول ، وهذه نقطة إيجابية وجميلة منك انك استخدمتها ، بدلاً من الرسائل المزعجة التي يظهرها آكسيس عند حذف أو إضافة أو تعديل سجل :clapping:

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

     

    شكراً لك على مشاركتك الجميلة ،  ونأمل منك أن لا تقطعنا من أفكارك التي تساعد بها من يحتاجها :wub: 

    • Like 1
  3. 4 ساعات مضت, omran2015 said:

    ولدي عدة ملحوظات وهى:

    1/ مشكلة القفز في الترتيب ولو تلاحظ أن الترتيب يظهر هكذا

    بسيطة أخي الكريم ..

     

    يعني انت تريد إظهار الطلاب الذين في المركز الرابع مثلاً جميعهم بالتمييز بينهم ( متكرر ) !!!!!!!

    انا لم أقترب من الدالة التي قمت بإنشائها ، حرصاً على أنه قد يكون مطلبك .. لكن بعد التوضيح ، إليك التعديل الذي تم على الدالتين أولاً :-

    Public Function fncTrteeb()
        Dim rst As Object
        Dim RankNumber As Long
        
        ' تصفير الحقل أولاً
        CurrentDb.Execute "UPDATE Q_top10 SET trteeb = Null"
        
        Set rst = CurrentDb.OpenRecordset("SELECT * FROM Q_top10 ORDER BY average DESC, StudentID ASC", 2)
        
        If rst.RecordCount = 0 Then Exit Function
        
        rst.MoveFirst
        RankNumber = 0
        
        Do While Not rst.EOF And RankNumber < 10
            RankNumber = RankNumber + 1
            
            rst.Edit
            rst!trteeb = GetArabicRank(RankNumber)
            rst.Update
            
            rst.MoveNext
        Loop
        
        rst.Close
        Set rst = Nothing
    End Function
    
    Public Function GetArabicRank(ByVal n As Long) As String
        Select Case n
            Case 1: GetArabicRank = "الأول"
            Case 2: GetArabicRank = "الثاني"
            Case 3: GetArabicRank = "الثالث"
            Case 4: GetArabicRank = "الرابع"
            Case 5: GetArabicRank = "الخامس"
            Case 6: GetArabicRank = "السادس"
            Case 7: GetArabicRank = "السابع"
            Case 8: GetArabicRank = "الثامن"
            Case 9: GetArabicRank = "التاسع"
            Case 10: GetArabicRank = "العاشر"
            Case Else
                GetArabicRank = "المركز " & n
        End Select
    End Function

     

    والإستعلام سيصبح بهذاالشكل :-

    SELECT TOP 10 S.StudentID, S.StudentName, S.ClassName, S.SETNO1, F.SemesterID, F.TotalSum, F.average, F.Grade, GetArabicRank((
          SELECT COUNT(*)
          FROM TBL_Final1 AS F2
          INNER JOIN TBL_Students AS S2 
          ON F2.StudentID = S2.StudentID
          WHERE 
              F2.SemesterID = F.SemesterID
              AND S2.ClassName = S.ClassName
              AND (F2.average > F.average 
                   OR (F2.average = F.average AND S2.StudentID < S.StudentID))
        ) + 1) AS RankText
    FROM TBL_Students AS S INNER JOIN TBL_Final1 AS F ON S.StudentID = F.StudentID
    WHERE F.SemesterID = [أدخل رقم الفصل]
        AND S.ClassName = [أدخل اسم الصف]
    ORDER BY F.average DESC , S.StudentID;

     

    في الاستعلام القديم كان المنطق هو ( احسب كم طالب معدله أكبر مني ) ؟؟

    فإذا كان هناك طالبان معدلهما متساوٍ ( مثلاً 91% ) ، فإن كلاهما سيجد نفس العدد كترتيب من الطلاب المتفوقين عليهما ، وبالتالي يأخذان نفس الرقم ( مثلاً المركز 2 ) ، ثم يقفز الترتيب للمركز 4 مباشرة .

    أما في الاستعلام المعدل ، إذا تساوى طالبان في المعدل ، انظر لرقم الطالب ؛ صاحب الرقم الأصغر يعتبر هو الأسبق .

    :excl: وبالنسبة لي هذا غير منطقي ، فلا بد من شرط ثاني لتحديد المنافس على نفس المركز !!!!

     

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

     

    وملفك بعد التعديل :-

    Data_Base.zip

  4. اهاااا ، بعد متابعة النتيجة ، وجدت أنه يأتيك بجميع الطلاب للفصل الأول والصف الثامن وعددهم 16 على سبيل المثال .. وأنت تريد فقط 10 :biggrin:

    جرب هذا الإستعلام التالي :-

    SELECT TOP 10 S.StudentID, S.StudentName, S.ClassName, S.SETNO1, F.SemesterID, F.TotalSum, F.average, F.Grade, (
          SELECT COUNT(*)
          FROM TBL_Final1 AS F2
          INNER JOIN TBL_Students AS S2 
          ON F2.StudentID = S2.StudentID
          WHERE 
              F2.SemesterID = F.SemesterID
              AND S2.ClassName = S.ClassName
              AND F2.average > F.average
        ) + 1 AS RankOrder
    FROM TBL_Students AS S INNER JOIN TBL_Final1 AS F ON S.StudentID = F.StudentID
    WHERE F.SemesterID = [أدخل رقم الفصل]
        AND S.ClassName = [أدخل اسم الصف]
    ORDER BY F.average DESC, S.StudentID ASC; 

     

    • Like 1
  5. بدايةً ، وعليكم السلام ورحمة الله وبركاته ..

    لديك نقطة واحد فقط كان عليك إدراكها . وهي إضافة الحقل ClassID من الجدول F ، وجعل الشرط [أدخل اسم الصف] له وليس للحقل ClassName من الجدول S . قبل تجربة المرفق ، جرب دون النظر للمرفق حتى تفهم المقصود من كلامي ..

     

    مع العلم أن ملفك يعمل معي بشكل سليم باستخراج الأوائل . إلا إن كان هناك نقطة لم تتوضح في شرحك 😀

     

    Data_Base.zip

  6. في 20‏/2‏/2026 at 02:29, mohammed farhat said:

    هل ممكن توضيح النقطة التالية  كما وضحتم الامر مع ال gmail

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

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

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

     

     

  7. 3 دقائق مضت, حافظ التونسي said:

    اما DMAX  هل من الممكن ان تشرح لي كيف و اين اضعها حتى يبقى الرقم مطابقا و لكم جزيل الشكر

    سؤالي الذي أريد منك إجابة مقنعة له حتى نصل إلى جوهر المشكلة لنجد لها حلاً ..

    لماذا تشترط أن يكون الترقيم مرهوناً ومقروناً ومساوياً بعدد السجلات التي لديك ..

    يعني لو حذفت السجل رقم 4 من أصل السجلات 1500 والتي هي فعلاً تطابق الترقيم ، فهل تريد أن يكون الترقيم للسجل الجديد = 1500 :blink:

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

    = Nz(DMax("[BL n°]", "BL"), 0) + 1

    في القيمة الإفتراضية لمربع النص داخل النموذج .

  8. 1 ساعه مضت, حافظ التونسي said:

    و لما اغلقها و احاول الفتح من جديد الاحظ ان العداد يتقدم كما هوفي الصورة رقم 2

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

    نوع الحقل BL n° في جدول BL هو AutoNumber . أي ترقيم تلقائي .

    وهذا من الطبيعي يا صديقي لأنه عندما تدخل أي قيمة في أي حقل داخل الجدول ، فإن آكسيس يعتبره سجل جديد ويقوم بحجزه حتى عند حذفه أو إلغاء الإدخال والتراجع . يعني انت لو حذفت السجل رقم 2 من أصل السجلات الـ 6 التي لديك لتصبح 5 ، فإن السجل الجديد لن يكون رقمه 6 بل سيصبح 7 وهذا كله شأن الترقيم التلقائي .

    لذا استخدم للترقيم حقل رقمي باستعمال DMAX مثلاً .

     

    أما المشكلة الأولى التي ذكرتها لم تظهر عندي للأسف بعد فتح سجلات جديدة كثيرة

  9. New00.png.b57a897881fc32b5f4520aa6b41e52e2.png

    Momayzat.png.61c5e492e26488b9c32bf69bcdf5f252.png

    1. إصلاح مشكلة الإرسال على دفعات ، حسب الوقت الذي يقرره المستخدم من خانتي image.png.795f5699ad3ee9f3b81ea2a073f125e4.png .
    2. ضبط مشكلة Yahoo عند استلامه بريد من Gmail ، والسبب طبعاً في هذه المشكلة هو سيرفر الـ Yahoo نفسه لما يفرضه من قيود أمان .
      وحيث أنه يمكن للمستخدم اعتبار الإيميل Not Spam عند استلامه بريد من Gmail .
    3. إتاحة الإرسال من Outlook كما فعلنا في Gmail . حيث على المستخدم فقط تشغيل تطبيق الـ Outlook وتفعيل بريده مرة واحدة فقط لا غير . وبعدها لن نحتاج للتطبيق أبداً أو حتى فتح التطبيق بالخلفية أو بأي شكل من الأشكل . السبب في هذا هو عدم فرض قيود مايكروسوفت على المستخدم نهائياً .
    4. تحسين ردود الرسائل في الجدول Tbl_SentLog ، بحيث تكون أوضح للمستخدم عن سبب الخلل عند فشل الإرسال ، كي يتم التعامل مع الخلل بشكل مباشر .
    5. تحسين وإصلاح بعض النقاط الصغيرة .

     

    OpenSource.png.19447339bd1748afd11f0b92a58ed69e.png

    EmailSender V.2.0.accdb.zip

     

    • Thanks 1
  10. 24 دقائق مضت, حافظ التونسي said:

    اسال الله ان يجعلكم من العتقاء منالنار في هذا الشهر الكريم

    وإياكم أخي الكريم .. :fff:

    تقبل الله منا ومنكم صالح الأعمال والطاعات ، ومبارك عليكم الشهر الفضيل 

  11. 14 ساعات مضت, mohammed farhat said:

    هل من الممكن ان يتم اضافة 
    اعدادات Outlook.com لهذا المشروع

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

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

     

    أما بخصوص البريد المرسل من مايكروسوفت عموماً ، فالفكرة قيد العمل إن شاء الله ، وقد تم إنهاء 70% من مرحلة التجارب ومتابعة الأخطاء . والنتيجة :-

     

    MuTest02.thumb.gif.b87a2a60e16b37312932efec34916c6d.gif

  12. 3 ساعات مضت, منتصر الانسي said:

    عمل رائع أخي @Foksh والحقيقة أنها المرة الأولى التي ينجح مع إرسال الإيميل بهذه السهولة

    حياك الله أخي منتصر .. :fff:

     

    3 ساعات مضت, منتصر الانسي said:

    لدي ملاحظتين الأولى غير مهمة وهي أن Yahoo يتعرف على الأيميل الصادر من التطبيق بأنه بريد إحتيالي ولا أدري إذا كان بالإمكان حل المشكلة

    في الحقيقة اعتقد أن هذه مشكلة تخص الياهو نفسه . السبب في عدم اهتمامي لموقع الـ Yahoo هو حتى أنه حالياً لا يقوم بفتح حساب جديد 😅😅 .. ولا يقبل تسجيل الدخول الى حسابي رغم انه يقول لي انه مستخدم بالفعل .

     

    3 ساعات مضت, منتصر الانسي said:

    اما الملاحظة الثانية أنه يجب تعديل السطر التالي

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

  13. تفضل أخي الكريم .. أولاً وجدت خطأ في اسم النموذج مصدر الشرط وهو رقم الحريف ليصبح في جميع الشروط التي يطلبها :-

    [forms]![F_BL]![ref_client]

    بدلاً من :-

    [forms]![BL]![ref_client]

     

    قمت بتعديل الاستعلام R_Solde_Finale_par_client ، ليصبح كالتالي :-

    SELECT T_Client.Ref_Client, 
           R_Total_vente_client_solde.Total_Vente AS TV, 
           R_Total_Recette_client_solde.Total_Recette AS TRC, 
           R_Total_Retour_client_solde.Total_retour AS TRT, 
           (Nz([TV],0)-Nz([TRC],0)-Nz([TRT],0)) AS Net
    FROM R_Total_Retour_client_solde 
    RIGHT JOIN ((R_Total_Recette_client_solde 
    RIGHT JOIN T_Client ON R_Total_Recette_client_solde.Ref_client = T_Client.Ref_Client) 
    LEFT JOIN R_Total_vente_client_solde ON T_Client.Ref_Client = R_Total_vente_client_solde.ref_client) 
    ON R_Total_Retour_client_solde.Ref_Client = T_Client.Ref_Client;

    والسبب هو أنه في الاستعلام النهائي أنت لم تقم بإضافة الحقل Ref_Client إليه

    الآن في النموذج في مربع النص Texte45 ، أصبح مصدره :-

    =DLookUp("Net","R_Solde_Finale_par_client","Ref_Client = " & [ref_client])

    وتستطيع أيضاً إضافة الدالة NZ لتلافي القيم الفارغة لتصبح مثلاً :-

    =Nz(DLookUp("Net","R_Solde_Finale_par_client","Ref_Client = " & [ref_client]),0)

    النتيجة :-

    MuTest01.gif.37cc0e20d559006acc023fb39ae10c42.gif

     

    ملفك بعد التعديل :-

    E G P_test.zip

  14. 55 دقائق مضت, حافظ التونسي said:

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

     

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

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

    1. في الاستعلام R_Solde_Finale_par_client سيطلب منك ادخال رقم Ref ن ولنفترض اخترت القيمة 1 . فستكون النتيجة في الاستعلام =
      R_Solde_Finale_par_client
      TV TRC TRT Net
      42,812,000.00 31,801,050.00 1,010,950.00 10000000
    2. الآن انت تريد ان يتم عرض قيم محددة من هذا الاستعلام !! في أي مربعات نص ؟؟

     

  15. image.png.0b78eff404a44e6cfe38b32ce992747d.png

    small.Blue-check.png.685b9b4d755a1579b52 تم إضافة زرين جديدين لإضافة إيميلات متعددة لـ :-

    • النسخة الكربونية Cc - نسخة إلى
    • النسخة الكربونية المخفية Bcc - نسخة مخفية

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

     

    image.png.85867c7baf11b2d93ebaa75852ac5bd8.png

     

    AddSoon.png.02467578cf6047256d92d6468750f0e6.png

    small.Blue-check.png.685b9b4d755a1579b52 الملف المرفق مفتوح المصدر ..

    EmailSender 2026.zip

     

    05.png.8fe3b502e8827cbc9c5d0d0a8c4e8770.png

    كيف نحصل على SMTPPassword المقدم من Gmail ؟ إليك الطريقة خطوة بخطوة ببساطة .

    1. في متصفحك ، ادخل إلى ( إعدادات حساب Google ) .
    2. تحقق أولاً وقبل كل شيء من تفعيل ميزة ( التحقق بخطوتين ) أو ( 2-Step Verification ) في حسابك .
    3. ابحث في خانة البحث عن ( كلمة مرور التطبيق ) أو ( كلمات مرور التطبيقات )، او ( App Password ) ، حسب لغة الموقع لديك .
    4. ادخل كلمة المرور الخاصة بالإيميل الذي تريد استخدامه كإيميل مرسل .
    5. في خانة ( اسم التطبيق ) أو ( App Name ) ، أدخل اسم للتطبيق ، مثلاً ( SenderMailer ) . ثم انقر زر ( إنشاء أو Creat ) .
    6. الآن سيزودك الموقع بكلمة من 16 حرف ، انسخها والصقها في الحقل SMTPPassword .

     

    05.png.8fe3b502e8827cbc9c5d0d0a8c4e8770.png

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

  16. في العمليات الحسابية داخل أي معادلة أو مشروع .. من الأفضل أن يكون بدلاً من القيم الفارغة = استخدام الصفر 0 . لأننا عندما نتعامل مع جمع خليتين إحداهما رقم والأخرى فارغة فقد تتضارب العمليات الرياضية وتخطئ ويصبح ناتج الحقل أو الخلية قيمة غير صحيحة كما حصل معك .

    فليس من منطق الرياضيات أن تكون قيمة الصفر سالبة إلا أن كانت قيمة A2 كخلية = A1 + "-" حينها سينتج عنها 0- إذا كانت قيمة A1 = 0

     

    هذا من وجهة نظر غير ملزمة ، والحديث يختلف بعد إرسال الملف .

×
×
  • اضف...

Important Information