حافظ التونسي قام بنشر الأربعاء at 15:17 قام بنشر الأربعاء at 15:17 السلام عليكم و رحمة الله و بركاته طلبت سابقا من يعينني في العداد للفواتير والتي يبدا من رقم واحد كل بداية سنة جديدة و مشكور جدا لمن تدخل و اعاني الان وجدت مشكلة التي تتمثل في ان العداد لما يصل الى رقم 2025000099 من المفروض في الفاتورة التي تاتي بعدها يصير 2025000100 لكن تخرج نافذة خطا سارفق صور حتى تتضح المشكلة لطلب المساعدة لحل هذا الاشكال و لكم الشكر Module numero date.doc
kkhalifa1960 قام بنشر الأربعاء at 16:29 قام بنشر الأربعاء at 16:29 (معدل) المشكلة واضحة تمامًا: الخطأ "Overflow" يحدث لأن الرقم 2025000100 يتجاوز الحد الأقصى لنوع البيانات Long في VBA، والذي هو: (Long∈[−2,147,483,648 إلى 2,147,483,647]) لكن الرقم الذي تحاول توليده هو عشرة أرقام، أي يتجاوز هذا الحد. ✅ الحل المقترح: استخدام Double بدلًا من Long غير نوع الإرجاع والمتغيرات من Long إلى Double لتسمح بالأرقام الأكبر: Public Function GenerateID(TableName As String, fieldName As String) As Double Dim currentYear As Integer Dim yearPrefix As String Dim maxID As Double Dim serialPart As Long currentYear = Year(Date) yearPrefix = CStr(currentYear) maxID = Nz(DMax(fieldName, TableName, fieldName & " LIKE '" & yearPrefix & "*'"), yearPrefix & "00") serialPart = CLng(Mid(CStr(maxID), Len(yearPrefix) + 1)) GenerateID = CDbl(yearPrefix & Format(serialPart + 1, "0000")) End Function ✨ ملاحظات إضافية: استخدمت Format(..., "0000") لضمان أن الجزء التسلسلي يبقى دائمًا بأربعة أرقام. تأكد أن الحقل في الجدول (fieldName) من نوع Double أو Text وليس Long. إذا كنت تستخدم هذا الرقم كمفتاح أساسي (Primary Key)، ففكر في استخدام Text بدلًا من رقم لتجنب مشاكل مستقبلية. هل تحب أن نضيف تحققًا إضافيًا لتفادي التكرار أو نربط هذا التوليد بحدث معين في النموذج؟ تم تعديل الأربعاء at 16:35 بواسطه kkhalifa1960
حافظ التونسي قام بنشر بالامس في 13:05 الكاتب قام بنشر بالامس في 13:05 شكرا اخي خليفة على مرورك و تدخلك ولكن للاسف لم تعمل و هذا الذي حصل بالصور فكيف ترى يكون الحل؟ و لكم جزيل الشكر
ابوخليل قام بنشر منذ 23 ساعات قام بنشر منذ 23 ساعات جرب يا حافظ على دالتك الاصلية نقص صفر من التنسيق في هذا السطر ليصبح 3 اصفار GenerateID = CLng(yearPrefix & "000" & (serialPart + 1))
حافظ التونسي قام بنشر منذ 23 ساعات الكاتب قام بنشر منذ 23 ساعات (معدل) شكرا هذا المرفق شكرا Serial number_1.rar تم تعديل منذ 23 ساعات بواسطه حافظ التونسي
ابوخليل قام بنشر منذ 23 ساعات قام بنشر منذ 23 ساعات Public Function GenerateID(TableName As String, fieldName As String) As Long Dim currentYear As Integer Dim yearPrefix As String Dim maxID As Long Dim serialPart As Long currentYear = Year(Date) yearPrefix = currentYear & "" maxID = Nz(DMax(fieldName, TableName, fieldName & " LIKE '" & yearPrefix & "*'"), yearPrefix & "00") serialPart = CLng(Mid(maxID, Len(yearPrefix) + 1)) GenerateID = CLng(yearPrefix & "000" & (serialPart + 1)) End Function هذه تعمل
حافظ التونسي قام بنشر منذ 23 ساعات الكاتب قام بنشر منذ 23 ساعات 7 دقائق مضت, ابوخليل said: جرب يا حافظ على دالتك الاصلية نقص صفر من التنسيق في هذا السطر ليصبح 3 اصفار GenerateID = CLng(yearPrefix & "000" & (serialPart + 1)) ماهو الفرق بين اربعة اصفار او ثلاثة اصفار و كم يصل رقم المبيعات كاقصى رقم حتى ينتقل الى السنة الموالية ليبدا من جديد؟
ابوخليل قام بنشر منذ 23 ساعات قام بنشر منذ 23 ساعات 1 دقيقه مضت, حافظ التونسي said: ماهو الفرق بين اربعة اصفار او ثلاثة اصفار و كم يصل رقم المبيعات كاقصى رقم حتى ينتقل الى السنة الموالية ليبدا من جديد؟ المفروض تفيدنا اولا هل عملت معك ام لا ؟ والفرق الذي تسأل عنه هو انك تجاوزت نطاق العدد بعد السنة كأقصى رقم ثم يظهر خطأ هو 6 تسعات 999999 في الدالة التي لديك عندما يصل العدد الى الحد الاقصى لن ينتقل الى سنة جديدة بل سيظهر خطأ وسوف تنتظر حتى دخول السنة الجديدة
حافظ التونسي قام بنشر منذ 23 ساعات الكاتب قام بنشر منذ 23 ساعات 2 دقائق مضت, ابوخليل said: Public Function GenerateID(TableName As String, fieldName As String) As Long Dim currentYear As Integer Dim yearPrefix As String Dim maxID As Long Dim serialPart As Long currentYear = Year(Date) yearPrefix = currentYear & "" maxID = Nz(DMax(fieldName, TableName, fieldName & " LIKE '" & yearPrefix & "*'"), yearPrefix & "00") serialPart = CLng(Mid(maxID, Len(yearPrefix) + 1)) GenerateID = CLng(yearPrefix & "000" & (serialPart + 1)) End Function هذه تعمل شكرا نجحت المحاولة لكن يبقى كم عدد يصل كل ينة كاقصى رقم لان الارقام تبدا كل بداية سنة جديدية ب 2026000001 فهل تصل الى 20260099999؟
ابوخليل قام بنشر منذ 23 ساعات قام بنشر منذ 23 ساعات الافضل لك ان تزيل التنسيق ليصبح السطر هكذا GenerateID = CLng(yearPrefix & (serialPart + 1)) جرب لن تخسر شيئا ولكن الرقم سيكون عاديا بدون اصفار وسيتزايد مثله مثل الارقام العادية .. وفي السنة الجديدة يبدأ بواحد بعد السنة
ابوخليل قام بنشر منذ 23 ساعات قام بنشر منذ 23 ساعات من المثال المرفق تبين لي ان الدالة من عمل @Foksh فأهل مكة ادرى بشعابها 1
Foksh قام بنشر منذ 22 ساعات قام بنشر منذ 22 ساعات 7 دقائق مضت, ابوخليل said: من المثال المرفق تبين لي ان الدالة من عمل @Foksh فأهل مكة ادرى بشعابها فعلاً هذه الدالة كانت من أحد مشاريعي ، وتعرفت عليها مسبقاً ولكني شككت في نفسي هل فعلاً قمت بمشاركته أم لا سابقاً 😅 .. على العموم ، الحل الذي أفكر به أن أجعل الدالة ترجع String بدل Long للمتغير maxID . بمعنى أنه لا تقوم بتحويل الرقم التسلسلي الناتج إلى CLng بعد دمج النصوص (مكونات الرقم التسلسلي ) ، بل احتفظ به كنص . وعليه فبعد التعديل وإزالة التنسيق يصبح الكود كالتالي :- Public Function GenerateID(TableName As String, fieldName As String) As String Dim currentYear As Integer Dim yearPrefix As String Dim maxID As String Dim serialPart As Long currentYear = Year(Date) yearPrefix = currentYear & "" maxID = Nz(DMax(fieldName, TableName, fieldName & " LIKE '" & yearPrefix & "*'"), yearPrefix & "00") serialPart = CLng(Mid(maxID, Len(yearPrefix) + 1)) GenerateID = yearPrefix & "0000" & (serialPart + 1) End Function جربه وأخبرنا بالنتيجة
حافظ التونسي قام بنشر منذ 7 ساعات الكاتب قام بنشر منذ 7 ساعات السلام عليكم و رحمة الله و بركاته الى السيد ابو خليل لقد جربت ان ابدل 0000 ب 000 و نجحت المحاولة لكن يبقى لي شي اناعرفه هو كم حد اقصى كارقام اقدر ان اصل اليه مثلا 2025009999 كاقصى عدد في انتظار ان تدخل السنة التي بعدها؟؟؟ و بالنسبة الى السيد FOKSH لقد اعنتني في العديد من المرات و ان كان لي الحظ انازور الاردف فاكيد اطلب مقابلتك لشكرك وجها لوجه فمعرفة الرجال خير من الاموال. و بالنسبة لما اقترحته من تعديل فقد ادخلته و لكن فيه اشكال و اليك الصور والبرنامج لتتحقق معي و اتمنى ان تجد لي الحل فالمطلوب هو في طوال السنة استطيع ان ابيع و ان تصل ارقام التواصيل الى 2026009999 او اكثر فيجب ان تبدا الارقام برقم السنة ثم تسلسل الى 5 ارقام على الاقل بحفاض صفرين مباشرة بعد رقم السنة و لكم جزيل الشكر numero.rar
ابوخليل قام بنشر منذ 4 ساعات قام بنشر منذ 4 ساعات 2 ساعات مضت, حافظ التونسي said: السلام عليكم و رحمة الله و بركاته الى السيد ابو خليل لقد جربت ان ابدل 0000 ب 000 و نجحت المحاولة لكن يبقى لي شي اناعرفه هو كم حد اقصى كارقام اقدر ان اصل اليه مثلا 2025009999 كاقصى عدد في انتظار ان تدخل السنة التي بعدها؟؟؟ نعم كأقصى عدد على الدالة الحالية هو 9999 جرب التعديل على الدالة بطريقة مختلفة نوعا .. ستبقى الخانات 6 ولكن يمكن ان يتم الترقيم الى 5 أو 6 خانات استغرب لماذا تريد ان يبقى صفرين بعد السنة لا فائدة منهما الدالة التالية الصفران موجودان ولكن متاح استخدامهما ويمكن لو اردت الفصل بين السنة والترقيم بفاصلة معينة مثل (-) او (/) او اي فاصلة Public Function GenerateID(TableName As String, fieldName As String) As String on error resume next Dim vLastY As Variant Dim iNext As Integer vLastY = DMax(fieldName, TableName, fieldName & " LIKE '" & Year(Date) & "*'") If IsNull(vLastY) Then iNext = 1 Else iNext = Val(Mid(vLastY, 5)) + 1 End If GenerateID = Year(Date) & Format(iNext, "000000") End Function
Foksh قام بنشر منذ 4 ساعات قام بنشر منذ 4 ساعات 2 ساعات مضت, حافظ التونسي said: و بالنسبة الى السيد FOKSH لقد اعنتني في العديد من المرات و ان كان لي الحظ انازور الاردف فاكيد اطلب مقابلتك لشكرك وجها لوجه فمعرفة الرجال خير من الاموال. أولا ، جزاك الله خيراً على شعورك الجميل هذا .. ويسعدني ان أرحب بك واشتضيفك متى زرتنا في الأردن بلدك الثاني . 2 ساعات مضت, حافظ التونسي said: هو في طوال السنة استطيع ان ابيع و ان تصل ارقام التواصيل الى 2026009999 او اكثر فيجب ان تبدا الارقام برقم السنة ثم تسلسل الى 5 ارقام على الاقل بحفاض صفرين مباشرة بعد رقم السنة أما بخصوص طلبك ، فسأرى ما يمكنني فعله إن شاء الله ، ما لم يسبقني احد من الأساتذة والمعلمين ..
حافظ التونسي قام بنشر منذ 3 ساعات الكاتب قام بنشر منذ 3 ساعات السلام عليكم و رحمة الله و بركاته نجحت فكرتك سيد ابو خليل جازاك الله خيرا انت و كل من فكر في اعانتي و اعجبتني فكترتك هته ( يمكن لو اردت الفصل بين السنة والترقيم بفاصلة معينة مثل (-) او (/) او اي فاصلة) فكيف لي ان افعلها؟ و هل ما شبق سيتغير تلقائيا او يبقى كما هو و اي صفحة جديدة ستكون بالشكل الجديد؟ شكرا لكم
ابوخليل قام بنشر منذ 1 ساعه قام بنشر منذ 1 ساعه الدالة ستكون هكذا : التغير في مكانين .. بداية الرقم اصبح 6 بدلا من 5 والسطر الأخير يمكنك وضع الفاصلة التي تريد بدلا من "-" Public Function GenerateID(TableName As String, fieldName As String) As String on error resume next Dim vLastY As Variant Dim iNext As Integer vLastY = DMax(fieldName, TableName, fieldName & " LIKE '" & Year(Date) & "*'") If IsNull(vLastY) Then iNext = 1 Else iNext = Val(Mid(vLastY, 6)) + 1 End If GenerateID = Year(Date) & "-" & Format(iNext, "000000") End Function 1
حافظ التونسي قام بنشر منذ 8 دقائق الكاتب قام بنشر منذ 8 دقائق 1 ساعه مضت, ابوخليل said: الدالة ستكون هكذا : التغير في مكانين .. بداية الرقم اصبح 6 بدلا من 5 والسطر الأخير يمكنك وضع الفاصلة التي تريد بدلا من "-" Public Function GenerateID(TableName As String, fieldName As String) As String on error resume next Dim vLastY As Variant Dim iNext As Integer vLastY = DMax(fieldName, TableName, fieldName & " LIKE '" & Year(Date) & "*'") If IsNull(vLastY) Then iNext = 1 Else iNext = Val(Mid(vLastY, 6)) + 1 End If GenerateID = Year(Date) & "-" & Format(iNext, "000000") End Function للاسف لم تعمل هل بالامكان التعديل على النمودج؟؟ numero.rar
الردود الموصى بها
انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد
يجب ان تكون عضوا لدينا لتتمكن من التعليق
انشئ حساب جديد
سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .
سجل حساب جديدتسجيل دخول
هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.
سجل دخولك الان