Nieuw Ordernummer

Status
Niet open voor verdere reacties.

inferno1977

Gebruiker
Lid geworden
21 feb 2007
Berichten
21
Hallo allemaal,

Op basis van onderstaande code wordt via een apart tabel tblsystem een ordernummer aangemaakt.

Maar volgens mij moet dit veel sneller en korter kunnen en graag zonder een apart tabel dus tblsystem.

Iemand een idee?? Hoor graag van jullie.

Alvast bedankt.



Function fncNewOrdernummer()

Dim rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordset("tblSystem")

rs.MoveFirst
' test jaar/maand wissel
If Year(Date) & Right("00" & Month(Date), 2) <> rs!OrdernummerJaar & rs!OrdernummerMaand Then
' nieuwe jaarmaand
rs.Edit
rs!OrdernummerJaar = Year(Date)
rs!OrdernummerMaand = Right("00" & Month(Date), 2)
rs.Update
fncNewOrdernummer = rs!OrdernummerJaar & rs!OrdernummerMaand & "0001"
Else
' vervolg order
fncNewOrdernummer = DMax("ordernummer", "tblOrder") + 1
End If

End Function
 
Ik was hiermee begonnen:
Code:
Function fncNewOrdernummer()

    dim strSql  as string

    strSql = "update tblSystem " & _ 
	"set Ordernummerjaar = Year(date()), OrdernummerMaand = format(month(date()),"00") " & _
	"where Ordernummerjaar & ordernummermaand <> format(date(),"yyyymm")"

    currentdb.execute strSql

end function
Het was nog niet af maar terwijl ik verder lees zie ik dat het een beetje onzinnig is wat je doet. Je past het eerste record in de tblSystem aan. Als je deze procedure vijf keer uitvoert, dan gebeurt er vijf keer hetzelfde. Je komt dus niet verder. er wordt geen nieuw record aangemaakt. Je ordernummer is ook iedere keer hetzelfde.

Ergo: ik snap niet wat je wilt. Misschien heb je wat aan bovenstaande code.

Succes!
 
Ik was hiermee begonnen:
Code:
Function fncNewOrdernummer()

    dim strSql  as string

    strSql = "update tblSystem " & _ 
	"set Ordernummerjaar = Year(date()), OrdernummerMaand = format(month(date()),"00") " & _
	"where Ordernummerjaar & ordernummermaand <> format(date(),"yyyymm")"

    currentdb.execute strSql

end function
Het was nog niet af maar terwijl ik verder lees zie ik dat het een beetje onzinnig is wat je doet. Je past het eerste record in de tblSystem aan. Als je deze procedure vijf keer uitvoert, dan gebeurt er vijf keer hetzelfde. Je komt dus niet verder. er wordt geen nieuw record aangemaakt. Je ordernummer is ook iedere keer hetzelfde.

Ergo: ik snap niet wat je wilt. Misschien heb je wat aan bovenstaande code.

Succes!


HOi Bedankt voor je reactie krijg echter wel een compilëerfout op de 2 00 van month.
Dim strSql As String

strSql = "update tblSystem " & _
"set Ordernummerjaar = Year(date()), OrdernummerMaand = format(month(date()),"00) " & _
"where Ordernummerjaar & ordernummermaand <> format(date(),"yyyymm")"

CurrentDb.Execute strSql

End Function


De huidige code wordt uitgevoerd op een formulier en maakt een ordernummer aan en kijkt naar het tblsystem wat de huidige jaar en maand is. Vervolgens maakt hij een ordernummer aan of pakt een vorige ordernummer + 1 is dan het nieuwe ordernummer.

Maar dat moet toch veel korter kunnen? En zonder dat je gebruikt gemaakt van een apart tabel?

Hopelijk is dit een beetje duidelijk. Ik kan een klein beetje programmeren maar zodra ik een date functie moet gebruiken kom ik er niet meer mee uit. Hoop dat je me kan helpen.

Groetjes
 
Wat die compileer fout betreft: je bent een dubbele quote vergeten om de 00 heen.

Dus je wilt een unieke code genereren in het format yyyymmxxxx?

Je haalt de laatste op:
Code:
dblLaatste = DMax("ordernummer", "tblOrder")
dan vergelijk je of die van deze maand is:
Code:
if Left$(dblLaatste,6) = format(date,"yyyymm") then 'Jaar en maand zijn goed.
    fncNewOrdernummer = dblLaatste + 1
else
   fncNewOrdernummer = cdbl(format(date(),"yyyymm")  & 0001)
endif
Het ordernummer is nu wel van het type double! Daar moet je in je tabel rekening mee houden.

Toch wel iets korter en in ieder geval beter te lezen!

Enjoy!
 
Wat die compileer fout betreft: je bent een dubbele quote vergeten om de 00 heen.

Dus je wilt een unieke code genereren in het format yyyymmxxxx?

Je haalt de laatste op:
Code:
dblLaatste = DMax("ordernummer", "tblOrder")
dan vergelijk je of die van deze maand is:
Code:
if Left$(dblLaatste,6) = format(date,"yyyymm") then 'Jaar en maand zijn goed.
    fncNewOrdernummer = dblLaatste + 1
else
   fncNewOrdernummer = cdbl(format(date(),"yyyymm")  & 0001)
endif
Het ordernummer is nu wel van het type double! Daar moet je in je tabel rekening mee houden.

Toch wel iets korter en in ieder geval beter te lezen!

Enjoy!

Hoi ik zal wel iets verkeerd doen maar krijg nog steeds een compileerfout ook met dubbele quote, en op het tweede gedeelde krijg ik ook een compileerfout.wat doe ik verkeerd.
Ik heb nu alles netjes gekopieerd en geplakt.

Grzt
 
Tsja, ik heb het natuurlijk niet getest maar hier gewoon ingeklopt. ik zie dat die 0001 eigenlijk "0001" moet zijn.

Probeer eens wat. Wees creatief. en als je er nog steeds niet uitkomt, post dan je database.

Enjoy!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan