Bosna i Hercegovina



#1 16.04.2014-10:33
pmiroslav Offline
Clan
Registrovan/a od: 02.02.2009-10:32
Komentari: 1,371


Subject: Redni brojevi, kako izbjeći grešku?
Pozdrav.

U funkciji imama dio kojim određujem broj gotovinskog računa:
DownloadIzvorni kod (vb.net):
  1. Dim I As Integer
  2. I = DMax("[FiskalniBroj]", "tblProdaja") + 1
  3. Me.FiskalniBroj = I

Brojevi idu u nizu 1,2,3,4 itd.
U par navrata dogodilo se iz meni nepoznatog razloga da se jedan broj preskoči, a kako brojevi računa moraju imati jedinstveni slijed, to se ne smije događati.
Ima li prijedlog kako da spriječim preskakanje broja.
Pozdrav
Ovaj komentar je mijenjan 1 puta. zadnja izmjena 16.04.2014-10:34 od strane pmiroslav. ↑  ↓

#2 16.04.2014-11:57
nevsad Offline
Clan
Registrovan/a od: 01.09.2010-14:40
Komentari: 187


Subject: Re: Redni brojevi, kako izbjeći grešku?
I =nz(DMax("[FiskalniBroj]", "tblProdaja")) + 1

ja koristim jos nz

pokusaj
pozdrav
↑  ↓

#3 16.04.2014-12:05
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,794


Subject: Re: Redni brojevi, kako izbjeći grešku?
Do preskakanja bi moglo doci zbog jednovremenosti u mrezi tj. da se desi da dvoje zajedno sa dva razlicita compa rade.
Jos se moze desiti i ako neko udje pa otvori novi rekord te ga pobrise i onda ne izlazi nego nastavi.
Najbolji i najsigurniji nacin je da nema brisanja.

Dobro bi bilo kada bi dokucio kada se to desava pa bi se mozda moglo vise uciniti.
Ovako mozes jos napraviti provjeru tj. da provjris koliko imas rekorda u tabeli jer broj rekorda +1 bi bio tvoj novi broj.
Pozdrav
↑  ↓

#4 16.04.2014-14:34
Gjoreski Offline
Super Moderator
Registrovan/a od: 02.02.2009-22:24
Komentari: 1,535


Subject: Re: Redni brojevi, kako izbjeći grešku?
Kaj mene nema preskoknuvajne bidejki kako sto rece ZXZ nema brisejne na racunite , odnosno ima samo korekcija na nekoi polijna dokolku e potrebno, inaku jas kaj mene zemam vo obzir poveke parametri za redniot broj kako sto e Magacinot,Tip na dokument i slicni raboti.
↑  ↓

#5 16.04.2014-16:16
pmiroslav Offline
Clan
Registrovan/a od: 02.02.2009-10:32
Komentari: 1,371


Subject: Re: Redni brojevi, kako izbjeći grešku?
Citat od zxz:
Do preskakanja bi moglo doci zbog jednovremenosti u mrezi tj. da se desi da dvoje zajedno sa dva razlicita compa rade.
Jos se moze desiti i ako neko udje pa otvori novi rekord te ga pobrise i onda ne izlazi nego nastavi.
Najbolji i najsigurniji nacin je da nema brisanja.

Dobro bi bilo kada bi dokucio kada se to desava pa bi se mozda moglo vise uciniti.
Ovako mozes jos napraviti provjeru tj. da provjris koliko imas rekorda u tabeli jer broj rekorda +1 bi bio tvoj novi broj.
U ovom slučaju je samo jedan korisnik tako da mogu isključiti uzrok zbog jednovremenosti. Pitao sam korisnika dali se desilo nešto nepredviđeno a on mi kaže da nije
A što se tiče provjer koliko ima rekorda i to sam imao:

I = DCount("[FiskalniBroj]", "tblProdaja") + 1

I tu su zapravo počeli problemi

imam recimo : 1,2,3,4,6. Znači zadni broj je 6, a imam pet rekorda pa se ponovo generira broj 6 i dobijem duli broj u primarnom ključu
Pozdrav
↑  ↓

#6 16.04.2014-16:57
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,794


Subject: Re: Redni brojevi, kako izbjeći grešku?
Uf to mijenja stvar ako ima samo jedan korisnik.
Njabolje bi bilo kada bi imao neki laksi primjer ako ne probaj ovako:
Na on current stavi sledeci kod.
I = DCount("[FiskalniBroj]", "tblProdaja") + 1
me.fiskalniBroj.defaultValue=I

Naravno polje FiskalniBroj mora biti zakljucano.
Pozdrav
↑  ↓

#7 16.04.2014-18:19
Gjoreski Offline
Super Moderator
Registrovan/a od: 02.02.2009-22:24
Komentari: 1,535


Ocjena: Ocjena:100 Subject: Re: Redni brojevi, kako izbjeći grešku?
Jas kaj mene go imam vaka reseno

Smetka_Broj.DefaultValue = SlijedenBroj()

Private Function SlijedenBroj()
Dim Broj As String
Broj = DMax("Smetka_Broj", "tblSmetki", "Magacin=" & Forms![frmLogon]![cboMagacin]) + 1
If IsNull(Broj) Or Broj = "" Then Broj = 1
SlijedenBroj = Broj
End Function
↑  ↓

#8 16.04.2014-20:24
pmiroslav Offline
Clan
Registrovan/a od: 02.02.2009-10:32
Komentari: 1,371


Subject: Re: Redni brojevi, kako izbjeći grešku?
Stavit ću skraćeni primjer u kojem se javlja problem. Namjerno sam prekočio jedan broj da se vidi što se dešava.

Prilozi:
Informacije o fajlu: rar  probaMp.rar
Preuzimanja: 75
Veličina: 23.63 KB


Pozdrav
↑  ↓

#9 16.04.2014-20:51
Gjoreski Offline
Super Moderator
Registrovan/a od: 02.02.2009-22:24
Komentari: 1,535


Subject: Re: Redni brojevi, kako izbjeći grešku?
eve probaj vaka

Prilozi:
Informacije o fajlu: rar  probaMp.rar
Preuzimanja: 85
Veličina: 31.10 KB

↑  ↓

#10 16.04.2014-21:13
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,794


Subject: Re: Redni brojevi, kako izbjeći grešku?
Razlog preskakanja je to sto ako pogrijesis nacin placanja pa se vratis nazad da promijenis sada ce ponovo upisati broj koji je veci ne za 1 od trenutnog.
Najbolje bi bilo staviti sve na dfault value kao sto je Gjoreski predlozio medjutim kod tebe to nemoze koliko sam mogao zakljuciti jer ti ides redno za svaki nacin placanja zasebno pa se nemoze generisati broj prije odabira nacina placanja.
Preostaje ti da ovo svoje pokrpas:
DownloadIzvorni kod (Visual Basic):
  1. Private Sub NacinPlacanjaID_AfterUpdate()
  2. Dim I As Integer
  3. Dim criterij As String
  4.  
  5. criterij = "NacinPlacanjaID=" & Me.Fiskal    ' Number
  6. I = DCount("[OrderID]", "tblProdaja", criterij) + 1
  7. Select Case Me.Fiskal
  8. Case 1      'Gotovina, fiskalni ra
  9. un
  10.  
  11. If Me.FiskalniBroj = 0 Then
  12.     Me.FiskalniBroj = I
  13. End If
  14.  
  15.     'Me.FiskalFormat = I & "/" & DLookup("OznakaPP", "Q_Firma") & "/1"
  16.  
  17.  
  18. Case Else   'Ostali na
  19. ini plaanja
  20.    
  21. End Select
  22. End Sub

Pozdrav
↑  ↓

#11 17.04.2014-09:38
pmiroslav Offline
Clan
Registrovan/a od: 02.02.2009-10:32
Komentari: 1,371


Subject: Re: Redni brojevi, kako izbjeći grešku?
Ne znam zapravo što da kažem. Testirao sam malo prije aplikaciju i namjerno sam mijenjao način plaćanja na više računa i sve je bilo u redu, nije preskočen ni jedan broj.
U originalnoj bazi od početka godine imam 572 rekorda gdje je način plaćanja gotovina i od toga se tri puta dogodilo preskakanje. Taj fiskalni broj za vrijeme ispisa računa upisujem i u jednu drugu tablicu gdje je to primarni ključ i zato dolazi do greške.
Dali ima načina da se nekim kodom ne dozvoli da u tblProdaja upišemo FiskalniBroj je vza 2 ili više veči od predhodnog?
Pozdrav
↑  ↓

#12 17.04.2014-10:12
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,794


Subject: Re: Redni brojevi, kako izbjeći grešku?
Citat:
Testirao sam malo prije aplikaciju i namjerno sam mijenjao način plaćanja na više računa i sve je bilo u redu, nije preskočen ni jedan broj.
Nemoze biti ako si mi dao isti kod.
Ukoliko upises nacin placanja te krenes u novi rekord, sto znaci da si taj rekord zapisao i recimom da je on zauzeo br. 8.
Sada kad se vratis na taj isti rekord i izmijenis nacin placanja tvoja procedura prebroji broj rekorda 8 ili pak uzme iz zadnjeg broj a to je opet 8 te na njega doda 1 i sad preko ovog upisanoga 8 upise 9.
To ti se sigurno desava jer ti je na after update procedura na combu nacin placanja.
Znaci onaj kod ce gore pomoci sigurno sto sam ti dao jer nece upisivati novi fiskalni broj sem ako je 0.

Zbog ovoga nemozes niti provjeriti kao sto si gore napisao jer i kod funkcije provjere desilo bi se isto.

Primjer:
Imas 8 rekorda u tabeli.
Podizes formu i na formi se automatski pozicioniras na novi rekord (on jos nije upisan u tabelu).
Odabiramo nacin placanja i automatski pokrecemo proceduru DCount koja prebrojava u tabeli koliko ima redova to jest vraca rezultat 8+1 i upisuje u polje FiskalniBroj vrijednost 9.
Eto popunili smo sta treba i sve je u savrsenom redu i ako napravimo neku proceduru provjere naravno da ce vratiti da je sve uredu.
Sada kliknemo na novi rekor na formi.
Samim klikom na novi rekord zapisali smo postojeci rekord. To je tako kod accessa samo i to se zna cesto puta osvetiti.
Znaci sada u tabeli imamo zapisano 9 rekorda.
Ukoliko se sada ponovo vratimo na predhodni rekord vidjet cemo u polju FiskalniBroj broj 9 i to je uredu.
I sada kada bi napravili neku proceduru za provjeru i pozvali je sve bi bilo uredu.
Idemo sad da promijenimo nacin placanja (necemo promijeniti nego cemo odabrati isti).
Sta ce se desiti?
Opet cemo pokrenuti proceduru koja se nalazi na after update i sad matematika.
Procedura dcount vraca sada vrijednost 9 jer u tabeli sada uistinu ima 9 rekorda.
Sada 9+1=10
Znaci u polje FiskalniBroj ce se upisati vrijednost 10 u deveti rekord.

Ovo se nece desiti ako odaberes neki drugi nacin placanja a ne isti.
Samo je problem ako se odabere isti nacin placanja ponovo.

Probaj provjeri to i uvjerit ces se sam.
Pozdrav
↑  ↓

#13 17.04.2014-10:42
pmiroslav Offline
Clan
Registrovan/a od: 02.02.2009-10:32
Komentari: 1,371


Subject: Re: Redni brojevi, kako izbjeći grešku?
DownloadIzvorni kod (vb.net):
  1. Private Sub NacinPlacanjaID_AfterUpdate()
  2. Dim I As Integer
  3. Dim criterij As String
  4.  
  5. criterij = "NacinPlacanjaID=" & Me.Fiskal    ' Number
  6. I = DCount("[OrderID]", "tblProdaja", criterij) + 1 'Broji samo rekorde gdje je placanje gotovinom
  7. Me.Rabat.Locked = False
  8. Me.PDV.Locked = False
  9. Select Case Me.Fiskal
  10. Case 1      'Gotovina, fiskalni racun
  11.     Me.FiskalniBroj = I
  12.     Me.FiskalFormat = I & "/" & DLookup("OznakaPP", "Q_Firma") & "/1"
  13.     Me.Rabat = 0.15
  14. Case Else   'Ostali na
  15. ini placanja
  16.     Me.FiskalniBroj = 0
  17.     Me.FiskalFormat = " "
  18.     Me.RokPlacanja = 0      
  19. End Select
  20. End Sub
U proceduri imam Case Else pa ako izmijenim način plaćanja umjesto postojećeg broja upiše se 0 i obrnuto, a funkcija DCount ne uzima u obzir rekorde gdje je fiskalnibroj=0
Pozdrav
Ovaj komentar je mijenjan 1 puta. zadnja izmjena 17.04.2014-10:44 od strane pmiroslav. ↑  ↓

#14 17.04.2014-10:50
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,794


Subject: Re: Redni brojevi, kako izbjeći grešku?
Hajd ovo probaj kako sam gore opisao pa vidi hoce li preskociti.
1.Znaci upisi novi rekord napr odaberi nacin placanja gotovina.
2. Predji u novi rekord bez zatvaranja forme
3. Vrati se nazad na rekord koji si upisao i ponovo odaberi nacin placanja gotovina
4.Predji u novi rekord te zatvori formu i provjeri u tabeli jeli preskocio.

Citat:
U proceduri imam Case Else pa ako izmijenim način plaćanja umjesto postojećeg broja upiše se 0 i obrnuto, a funkcija DCount ne uzima u obzir rekorde gdje je fiskalnibroj=0

Nista ti ovo ne znaci u case else nikad i ne ulazi jer ucombu nemozes ne odabrati nista ili nesto sto bi dalo else jer ti je cobo limitiran na listu.
Pozdrav
↑  ↓

#15 17.04.2014-11:29
pmiroslav Offline
Clan
Registrovan/a od: 02.02.2009-10:32
Komentari: 1,371


Subject: Re: Redni brojevi, kako izbjeći grešku?
Moja forma je dizajnirana tako da se ne može sa nje preći u novi rekord. Formu otvaram preko forme za izbor kupca tako da se u nju automatski upišu podaci o kupcu.
Na glavnoj formi biram samo način plaćanja, a u subformu upisujem artikle i količine. za to vrijeme mogu i promjeniti način plaćanja. Znači kada eventualno promijenim način plaćanja nalazim se još uvijek u istom rekordu
Pozdrav
↑  ↓

Stranice (2): 1, 2


All times are GMT +01:00. Current time: 21.11.2018-11:48.