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

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


إذهب إلى أفضل إجابة Solved by Moosak,

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

الأخوة الكرام آمل مساعدتي في ترقيم حقل رقم الحركة داخل نموذج (movement_in) بحيث يبدأ بحرفي (EN) ثم رقم السنة الحالية (22) ثم الشهر الحالي واليوم ليصبح الشكل النهائي كالتالي (EN220408000001)

مرفق قاعدة البيانات حيث استطعت اضافة الحروف والسنة ولكن لم استطع اضافة الشهر واليوم

الحركة.accdb

رابط هذا التعليق
شارك

7 ساعات مضت, أحمد وجيه said:

ولكن لم استطع اضافة الشهر واليوم

طيب للسنة استخدم  
 

Format(Date(),"yy")

وللشهر استخدم 

Format(Date(),"mm")

ولليوم استخدم 

Format(Date(),"dd")

 

ولى عودة مرة اخرى للموضوع لتوضيح واضافة بعض الملاحظات داخل قاعدتك:wink2:

ولكن اعطنى قليل من الوقت:yes:

رابط هذا التعليق
شارك

اتفضل الكود بعد التعديل 

On Error Resume Next
Dim xLast, xNext As Integer
Dim prtyr, prtMt, prtDy, prtTxt As Integer
prtyr = Format(Date, "yy")
prtMt = Format(Date, "mm")
prtDy = Format(Date, "dd")
prtTxt = CLng(Mid(DMax("movement_N", "movement"), 2, 2))
xLast = CLng(Right(DMax("movement_N", "movement", prtTxt = prtyr), 6))
If IsNull(xLast) Then
xNext = 1
Else
xNext = xLast + 1
End If
Me!movement_N = "EN" & prtyr & prtMt & prtDy & Format(xNext, "000000")

 

رابط هذا التعليق
شارك

16 دقائق مضت, ابو جودي said:
On Error Resume Next
Dim xLast, xNext As Integer
Dim prtyr, prtMt, prtDy, prtTxt As Integer
prtyr = Format(Date, "yy")
prtMt = Format(Date, "mm")
prtDy = Format(Date, "dd")
prtTxt = CLng(Mid(DMax("movement_N", "movement"), 2, 2))
xLast = CLng(Right(DMax("movement_N", "movement", prtTxt = prtyr), 6))
If IsNull(xLast) Then
xNext = 1
Else
xNext = xLast + 1
End If
Me!movement_N = "EN" & prtyr & prtMt & prtDy & Format(xNext, "000000")

عدلت الكود ولكن لاحظت أنه لايتم زيادة الرقم تصاعدي وانه يتكرر نفس الرقم في كل مرة

يعني المفروض اول سجل بيكون كالتالي EN220408001 فالسجل الثاني يكون رقمه EN220408002 وهكذا تصاعدي

الحركة.accdb

  • Haha 1
رابط هذا التعليق
شارك

بالنسبة للملاحظات

وجدتك تستخدم DLookup اكثر من مرة فى نفس الحدث لمجرد احضار بيانات من حقول اخرى لنفس الجدول

اتفضل اهديكم احضار بيانات دفعة واحدة من اكثر من حقل عن طريق المصفوفات من خلال الـ DLookup 
على طريقة استاذى الجليل ومعلمى القدير و والدى الجبيب الاستاذ @jjafferr :fff:

Dim strDLookupFlds  As String
Dim stLinkCriteria  As String
Dim MyVariable      As String
Dim Arry()          As String
Dim ChosFld         As String

    MyVariable = 1
    stLinkCriteria = "[FldCriteria]=" & MyVariable                  '|Numeric
    
    'MyVariable = "Mahmoud"
    'stLinkCriteria = "[FldCriteria] ='" & MyVariable & "'"         '|String
    
    'MyVariable = "03/01/1982"
    'stLinkCriteria = "[FldCriteria] =#" & MyVariable & "#"         '|Date
    
    strDLookupFlds = DLookup("[Fld1] & '|' & [Fld2] & '|' & [Fld3] & '|' & [Fld4] & '|' & [Fld5] & '|' & [Fld6] & '|' & [Fld7] & '|' & [Fld8]& '|' & [Fld9]", "[tblName]", stLinkCriteria)
    Arry = Split(strDLookupFlds, "|")
        
        Debug.Print strDLookupFlds
        
        ChosFld = Arry(0)
        Debug.Print ChosFld
        
'Arry(0) = Fld1
'Arry(1) = Fld2
'Arry(2) = Fld3
'Arry(3) = Fld4
'Arry(4) = Fld5
'Arry(5) = Fld6
'Arry(6) = Fld7
'Arry(7) = Fld8
'Arry(8) = Fld9

 

1 دقيقه مضت, أحمد وجيه said:

عدلت الكود ولكن لاحظت أنه لايتم زيادة الرقم تصاعدي وانه يتكرر نفس الرقم في كل مرة

 

طبعا لن يزيد الان صيام :biggrin:

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

ابشر سوف ارى ما يمكن عمله

رابط هذا التعليق
شارك

اتفضل 

انا عملت لك الكود بالشكل ده حتى يكون مرن فيمكن استخدامة لاى قاعدة ومع اى جدول :wink2:

Function MyID(ByRef strFieldName As String, ByRef strTableName As String)
    Dim lngNextNumber       As Long
    Dim strNextNumber       As String
    Dim strNewID            As String
    Const intNumberOfZeros = 6
    
    lngNextNumber = Nz(Right(DLast("[" & strFieldName & "]", strTableName), intNumberOfZeros), 0) + 1
    strNextNumber = String(intNumberOfZeros - Len(CStr(lngNextNumber)), "0") & CStr(lngNextNumber)
    strNewID = "EN" & Format(Date, "yy") & Format(Date, "mm") & Format(Date, "dd") & strNextNumber
    MyID = strNewID
End Function

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

TextBox= MyID("movement_N", "movement")

 

ملاحظة

ممكن تتحكم فى عدد الاصفار من خلال تغيير الرقم 6  فى السطر تبعا للعد اللى تبغاه انت

Const intNumberOfZeros = 6

 

 

الحركة (3).accdb

  • Like 1
رابط هذا التعليق
شارك

اسمحلي أستاذي الغالي @ابو جودي المشاركة معكم بهذه الطريقة التي عملتها سابقا وعدلتها للتناسب مع طلب الأخ العزيز @أحمد وجيه 🙂 

للعلم أن الكود يعيد الترقيم من 1 بداية كل سنة جديدة 🙂 ويمكن تغيير ذلك إن شئت المواصلة لكل الأعوام ..

image.png.94ffa1beeea9f576bc9252021323597a.png

 

الكود :

Public Function NewID(strFieldinTable As String, strTable As String) As String

'This function returnes Value like This : EN220409000001

Dim T, CY, Y, M, D, OldN, NewN, LID

LID = DMax(strFieldinTable, strTable) ' Brings The last ID from the table

T = "EN"
CY = Mid(LID, 3, 2)
Y = Format(Date, "yy")
M = Format(Date, "mm")
D = Format(Date, "dd")
OldN = Right(LID, 6)
NewN = OldN + 1

If CY = Y Then
    NewID = T & CY & M & D & Format(NewN, "000000")
Else
    NewID = T & Y & M & D & "000001"
End If
End Function

ويتم استدعائه في حدث قبل الادراج هكذا :

Me!movement_N = NewID("movement_N", "movement")

 

 

الحركة.accdb

  • Like 1
رابط هذا التعليق
شارك

شاكر لأستاذنا الغالي  @ابو جودي وأستاذنا الغالي @Moosak على مساهمتكم الرائعة في حل مشكلتي :fff:

بعد تطبيق الطريقتين اكتشفت التالي :

1 - رقم الحركة مش بيتغير يومي يعني كان من المفترض انه يبدأ كل يوم يعد من رقم 1 مع تغيير التاريخ كالتالي :

يوم 08/04/2022 هيبدأ الرقم بـ EN220408001

ويوم 09/04/2022 مش هيكمل على ترقيم اليوم السابق لأ هيبدأ من الأول ويبقى الرقم كده EN220409001

2 - كان من المفترض ان رقم الحركة في شاشة movement_in بيبدأ بـ EN وفي شاشة movement_OUT بيبدأ بـ EX ودي أنا عدلتها باستخدام نفس الكود 

لكن المطلوب انه في كل حالة رقم الحركة يبقى تسلسلي حسب نوع الحركة اللي هي دخول وبشير لها بـ EN وخروج اللي بشير لها بـ EX وده كالتالي :

EN220409001

EN220409002

EN220409003

EX220409001

EX220409002

EX220409003

وهكذا الى ان يتغير اليوم فيبدأ الترقيم مرة أخرى من رقم 001

مش عارف بقى في حل للموضوه ده ولا لأ 😅

339395278_.JPG.7966f4ee811202d8312d37a873677195.JPG

الحركة.accdb

  • Confused 1
رابط هذا التعليق
شارك

  • أفضل إجابة

تم التعديل أخي أحمد حسب المعطيات الجديدة ..

في المرة القادمة عليك أن تسرد جميع المعطيات من البداية لكي يتم كتابة الكود حسب المعطيات 🙂 

فأنت لم تذكر بأن الترقيم يتجدد يوميا من قبل 😏

الحركة (1).accdb

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

 

في 9‏/4‏/2022 at 14:19, Moosak said:

لكي يتم كتابة الكود حسب المعطيات 🙂 

طيب ولماذا نكتب الكود حسب المعطيات

ليه ما نكتب كود ذكى وهو يشتغل لحاله حسب حاجة المستخدم

يعنى بدون لا تعديل فى كتابة الاكواد ولا شئ ويقدر يشتغل مع اى قاعدة او اى جدول او اى حقل مهما كانت الاسماء واختلفت :wink2:

كمان يكون اكثر ذكاء يقدر يبدا الترقيم بالبادئة الى يريدها المستخدم   en  , ex  or  Mossa 

كمان يكون اكثر ذكاء يقدر يقدر يعمل اعادة التعيين للترقيم حسب الحاجة يوميا او شهريا او سنويا 

يعنى يعمل  رسيت لوحدة حسب انت عاوزه يعمل الرسيت امتى من نفسه لوحده بدون ما تدخل تعدل شئ فى الكود

فكر كده شوية يا باش مهندس ودعبس هنا وهناك @Moosak :fff: الاقيش عندك الكود الذكى ده

 

لو مش عتدك اتفضل :wink2:

 

 

  • Thanks 1
رابط هذا التعليق
شارك

5 ساعات مضت, ابو جودي said:

فكر كده شوية يا باش مهندس ودعبس هنا وهناك @Moosak :fff: الاقيش عندك الكود الذكى ده

 

لو مش عتدك اتفضل :wink2:

هو أنا هلحق أعمل حاجة قبلك وأنت اللي يسموك @ابو جودي  ("قاهر الأكسس")Cstr  حتى إني كتبتهالك في دالة  😂

أنت شخص متفجر بالأفكار ما شاء الله عليك 😄

وأنا كمان حاليا شغال على حاجة كبيرة .. سترى النور قريبا إن شاء الله 😉💪🏼

  • Haha 1
رابط هذا التعليق
شارك

2 ساعات مضت, Moosak said:

هو أنا هلحق أعمل حاجة قبلك

كلنا واحد والمهم هو الوصول الى الغاية :wink2: واعوذ بالله واياكم من القهر

2 ساعات مضت, Moosak said:

أنت شخص متفجر بالأفكار ما شاء الله عليك 😄

جزاكم الله خيرا :fff:...

لكن والله ان الاجابات والحلول رزق من الله تعالى وفقط يستعملنى الله تعالى لاكون سبب ليس الا 
قاللهم اسأل ان يستعملنى فى الخير دائما وابدا 

 

2 ساعات مضت, Moosak said:

شغال على حاجة كبيرة .. سترى النور قريبا إن شاء الله

ما شاء الله .. اسأل الله لكم التوفيق والسداد

انتظر على أحر من الجمر بزوغ هذا النور ان شاء الله 

 

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

على سبيل المثال 

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

ولكن مع سررد الطلبات تباعا وبعد تقديم الحلول

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

في 9‏/4‏/2022 at 12:54, أحمد وجيه said:

- رقم الحركة مش بيتغير يومي

وكذلك 

في 9‏/4‏/2022 at 12:54, أحمد وجيه said:

2 - كان من المفترض ان رقم الحركة في شاشة movement_in بيبدأ بـ EN وفي شاشة movement_OUT بيبدأ بـ EX ودي أنا عدلتها باستخدام نفس الكود 

لكن المطلوب انه في كل حالة رقم الحركة يبقى تسلسلي حسب نوع الحركة اللي هي دخول وبشير لها بـ EN وخروج اللي بشير لها بـ EX وده كالتالي :

EN220409001

EN220409002

EN220409003

EX220409001

EX220409002

EX220409003

وبذلك لابد من كتابة الاكواد اكثر من مرة تبعا لكل جدول ولكل حالة للبادئة

فـ أنا الان أحاول جاهدا ان تكون الأكواد فى وظائف عامة قدر الامكان لتلبى كل الاحتياجات قدر الامكان للتقليل من استخدام الاكواد مستقبلا :yes:

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

  • Like 1
رابط هذا التعليق
شارك

7 ساعات مضت, ابو جودي said:

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

أنا معاك تمام بشا مهندس محمد في هذي النقطة 👍🏻 ، لكن أحس المنتدى نايم هذي اليومين ، الناس مشغولة بالعبادة واستغلال الشهر الكريم، الله يتقبل من الجميع 🙂 .

رابط هذا التعليق
شارك

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