Da li postoji već isti broj računa.pdf

Embed Size (px)

Citation preview

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Access

    Provera da li postoji vec unet broj rachuna

    [ http://www.elitesecurity.org/t287035 ]

    [ obradorriuss @ 30.09.2007. 17:11 ] @

    Zanima me kako je po Vama najlakse napraviti na Event On_Exit polja recimo "Broj rachuna"na dokumentu, da ukoliko se unese broj rachuna isti kao shto vecj postoji (vec je unet ubazu), a znamo da to ne bi smelo, da program javlja greshku i da ne dozvoljava da se zapissachuva, bez prikaza greshaka na engleskom jeziku, vecj pomocju MsgBox-a?

    Mozda je po vama bolje postaviti i na neki drugi Event polja?

    I zanima me kako da kod pregleda rachuna, postavim neki CheckBox koji cje po defaultu bitina False vrednosti, i on da omogucjava da sva polja u formi budu zakljuchana, sve dok senjegova vrednost ne postavi na True?

    Konkretno, ako korisnik zeli da pregleda koji je rachun izdao, unsese broj rachuna, programmu otvori formu sa isfiltriranim zapisom, i da mu onemogucji da nista promeni na vecjizdatom rachunu dok ne otkachi check box i izbaci mu program jedno upozorenje da odmomenta kada je ukljuchio CheckBox, zapis moze da se edituje. I ponovo kada se zapiszakljucha (vrednost check box-a se postavi na False) da se sva polja ponovo zakljuchaju...

    Hvala

    Pozdrav

    [ Getsbi @ 30.09.2007. 20:30 ] @

    1. Ako je broj racuna recimo numerik moglo bi ovako:

    Is Your Biz Efficient?Why You Need BPS, Not ERP To Win. Free EGuide- Download It Today.

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Code:

    Private Sub Form_BeforeUpdate(Cancel As Integer) Dim Nova_sifra As Long If IsNull([BrojRacuna]) Or [BrojRacuna] = 0 Then MsgBox "Morate uneti broj racuna", vbCritical, "Paznja" Me![BrojRacuna].SetFocus Exit Sub End If Nova_sifra = Me![BrojRacuna] If IsNull(DLookup("[BrojRacuna]", "Tabela", "[BrojRacuna]=" & Nova_sifra)) = False Then Me![BrojRacuna].Undo ' Ponistava vrednost unetog polja DoCmd.RunCommand acCmdUndo ' ponistava unos sloga Cancel = True MsgBox "Pod brojem " & Nova_sifra & " imate unete podatke", vbCritical, "Paznja" Me![BrojRacuna].SetFocus End If End Sub

    2. Recimo ovako:Code:

    Private Sub Check5_AfterUpdate() If Me![Check5] = False Then Me.AllowEdits = False ' editovanje svih polja na formi Me![text1].Locked = True ' zakljuavanje pojedinanog polja Else Me.AllowEdits = True Me![text1].Locked = False End IfEnd Sub

    Postavi Check box da bude prvi na formi pre ostalih kontrola sa Tab Order. Ovo nisam isprobavao sa nevezanom kontrolom na formi. Ako ne ide okaiprimer. Mislim da bi kontrolisanje dostupnosti polja na formi trebalo da bude van nje same. Najbolje je dodati polje u tabeli koje e da se ispituje.

    [Ovu poruku je menjao Getsbi dana 01.10.2007. u 06:45 GMT+1]

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    [ mkaras @ 01.10.2007. 08:15 ] @

    Ako u tabeli indeksira polje BrojRacuna sa opcijom bez duplikata onda es se reiti duplih unosa bez obzira ta je broj rauna, numerik,datum ili text. UOn Error dogaaju same forme presretni obavetenje o dupliranju podataka i obavesti korisnika.

    [ obradorriuss @ 01.10.2007. 14:00 ] @

    Hvala pre svega na odgovorima. Kombinacijom Getsbi-jevog koda i zamenom funkcije DLookup u f-ju DCount dobijamo:

    1. Duplirane vrednosti sam reshio na ovaj nachin:Code:

    Private Sub RacunBr_BeforeUpdate(Cancel As Integer)Dim Nova_sifra As StringDim stLinkCriteria As String Nova_sifra = Me.RacunBr.Value stLinkCriteria = "[RacunBr]=" & "'" & Nova_sifra & "'"

    If DCount("RacunBr", "tbl_IzdavanjeRacuna", stLinkCriteria) > 0 Then ' Praktichno ukoliko se u tabeli prebroje vishe od jednog zapisa prijavljuje gresku Me![RacunBr].Undo ' Ponistava vrednost unetog polja 'DoCmd.RunCommand acCmdUndo ' ponistava unos sloga Cancel = True MsgBox "Pod brojem " & Nova_sifra & " imate unete podatke!", vbCritical, "Paznja" End IfEnd Sub

    Ovo sam morao da postavim na OnExit jer na Event Before Update nece da radi.

    Code:

    Private Sub IzdavanjeBr_Exit(Cancel As Integer) If IsNull([RacunBr]) Or [RacunBr] = 0 Then MsgBox "Morate uneti broj racuna!", vbCritical, "Paznja"

    Me.RacunBr.SetFocus Exit Sub End If

    End Sub

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    2. Zakljucavanje polja i njihovo editovanjeCode:

    Private Sub Form_Open(Cancel As Integer)

    DoCmd.GoToRecord , , acLast ' odlazi na poslednji zapis (moje potrebe)

    Me![PoDokumentu].Locked = True ' zakljucavanje pojedinacnog polja Me![Datum].Locked = True Me![RacunBr].Locked = True Me![Dobavljac].Locked = True

    End Sub

    Code:

    Private Sub Check5_AfterUpdate()If Me![Check5] = False Then Me.AllowEdits = False ' editovanje svih polja na formi Me![PoDokumentu].Locked = True ' zakljucavanje pojedinacnog polja Me![Datum].Locked = True Me![RacunBr].Locked = True Me![Dobavljac].Locked = True

    Else Me.AllowEdits = True Me![PoDokumentu].Locked = False ' zakljucavanje pojedinacnog polja Me![Datum].Locked = False Me![RacunBr].Locked = False Me![Dobavljac].Locked = False End IfEnd Sub

    Dakle, kada se uchita forma sa isfiltriranim zapisom(ima), sve je zakljuchano i ne moze nista da se menja. Klikom na CheckBox5, otkljuchavaju se svapolja i editovanje se dozvoljava i zapis moze da se sachuva pomocju dugmeta na formi SACHUVAJ (Code:DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70). Medjutim, ako ponovo zakljucham dugme, tj. onemogucjim editovanje polja i kliknem na dugme SACHUVAJ, izbacuje neku greshku, kao i to shto vishene mogu da menjam vrednost dugmeta CheckBox5...

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Mozda mora da se presrecje negde greshka, ali ne vidim razlog svemu tome??

    Neka ideja?

    [ Zidar @ 01.10.2007. 14:17 ] @

    The best code is no code at all - ZIdareva teorema o programiranju :-)

    Verujem da imas unique index na BrojRacuna pa je u stvari nemoguce uneses duplikat. Sta te muci jeste poruka koja se javi na engleskom o unetomduplikatu.Jedan ancin da se to razresi jeste programiranjem, otprilike onako kako ti je Getsbi savetovao. U principu je BeforeUpdate za formu mesto gde se to radi,pa odradis CANCEL=TRUE plus poruka na srpskom i nist se nece sacuvati, a sve ce biti jos uvek na ekranu. Medjutim, tu ima problem. Taj kod ce seodraditi za absolutno svaki pokusaj unosa ili promene. Kad ti baza poraste, moze biti sporo, a imas i kod da pises.

    Predlazem da odes na form events, prondjes Form_Error event i odes u HELP. Tamo ima izvanredan primer kako se love greske tipa 'duplikat','nepostojeci rekord u parent tabeli' i slicno. Prme r pokazuje upravo za slucaj duplikata kako spreciti pojavljivanje Accessove poruke i umesto nje ubacititvoju poruku. A to je upravo ono sto ti treba. Probaj, pa ako ne ide, pomoci cemo.

    Istina je da i ovde ima da se pise kod, ali bar pokriovas vise slucajeva i kod absolutno ne zavisi od imena tabela i polja. Tabele se i ne spominju kad sekodira FORM_OnErrorr. Dakle, jednom napisan kod (ili iskopiran iz helpa:-) radice u absolutno svim slucajevima , na svim formama. Ako imas Access2007, mozes ovaj kod da stavis u template formu i bice uvek tamo, za sva vremena i sve forme, bez obzira na koje se tabele one vezuju.

    :-)

    [ obradorriuss @ 01.10.2007. 16:08 ] @

    Zidar hvala na odgovoru.

    Ja sam to dupliranje resio po gore napomenutom sistemu, ali cu da ga ispravim na nachin koji si mi preporuchio.

    No ono shto mene muchi jeste opisan problem sa CheckBox-om, koji dozvoljava/ne dozvoljava editovanje zapisa, kada se klikne vishe od jednog puta naCheckBox... Znachi Po defaultu CheckBox ja na FALSE vrednosti i sva polja su LOCKED. Klikom na CheckBox, dobija vrednost TRUE, polja se menjaju naUnlocked (dozvoljeno editovanje), zavrshim sa editovanjem polja i ponovo podesim CheckBox na FALSE vrednost (polja ponovo postaju zakljuchana)...

    Od tog momenta ne mogu vishe da menjam bilo shta na formi. Nece vishe ni da se CheckBox ukljuchi (postavi vrednost na TRUE), etc...Sve je uradjeno po gore napomenutim kodovima.

    A razlog tome ne znam sta je...

    :-(

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    [ Zidar @ 01.10.2007. 17:15 ] @

    Resenje sa chk box nije dobro u osnovi. Kad jednom kliknes check box i zakljucas formu, onda ne mozes da kliknes chk box ponovo da bi formuotkljucao. I kad predjes na naredni rekord, on je zakljucan jer si zakljucao prethodni. Umesto chk box treba upotrebiti dugme. Ovako:

    Code:

    Private Sub Form_Current()If Me.NewRecord Then 'Svaki novi rekord je otkljucanm dok ga ne zakljucamo :-) Me.AllowEdits = False Me!cmdToggleAllowEdits.Caption = "Click here to LOCK the record"Else 'Svaki potojeci rekord je zakljucan dok ga ne otkljucamo :-) Me.AllowEdits = False Me!cmdToggleAllowEdits.Caption = "Click here to UN-LOCK the record"End IfEnd SubEnd Sub

    Private Sub cmdToggleAllowEdits_Click()'Ako smo usred editovanja, onda cela stvar moze da bude'zbunjujuca - zakljcamo rekord pre nego sto smo ga sacuvali'Zato, da ne bude zamene, sacuvajmo rekord pre'nego pokusamo da zakljucamo/otkljucamo

    'Me.dirty = TRUE ako jos nismo sacuvali promeneIf Me.Dirty Then DoCmd.RunCommand acCmdSaveRecordEnd If

    'Zakljucan/Otkljucan ce biti suprotno od onog sta je trenutnoMe.AllowEdits = Not Me.AllowEdits

    'Proverimo status zakljucan/otkljucan'i saglasno tome promenimo natpis na dugmetuIf Me.AllowEdits = True Then Me!cmdToggleAllowEdits.Caption = "Click here to LOCK the record"Else Me!cmdToggleAllowEdits.Caption = "Click here to UN-LOCK the record"

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    End If

    'Vratimo se gde smo biliScreen.PreviousControl.SetFocus

    End Sub

    Prvo, napravi OnCurrent kao sto je u primeru. Na ovaj nacin, svak postojeci rekord je zakljucan, a novi rejkordi su otkljucani.Onda na dugme stavis kod kao sto je prikazano. Dugme samo menja status Allowedits u suprotnu vrednost.Onda procitamo koja je to vrednost AllowEdits i saglasno tome podesimo natpis na dugmetu.

    U slucaju da je rekord jos u editovanju i pritisnemo dugme Lock/Unlock, promena stanja ce vaziti tek kad sacuvamo rekord. Zato cuvanje obezbedimokroz ono If me.dirty....

    Primeti da je ceo kod geneicki - ne pominje se niti ime forme, niti ime bilo koje kontrole na formi. Znaci, ovo bi trebalo da radi na svakoj formi.

    Nadam se da nisam zaboravio da okacim primer.

    :-)

    [ obradorriuss @ 01.10.2007. 17:17 ] @

    Evo, prosto mi je nekako promaklo gde sam gresio...

    Iz gornjeg koda sam izbacioCode:Me.AllowEdits = FalseiCode:Me.AllowEdits = Truei sada radi posao sve...

    Zakljuchao sam pojedinachna polja koja su mi potrebna.

    Code:

    Private Sub Form_Current()Me.CheckBox.Value = False 'postavlja default vrednost CheckBoxa da bude zakljuchan na Current zapisu (ne dozvoljava editovanje polja)Me![Datum].Locked = TrueMe![RacunBr].Locked = TrueMe![Dobavljac].Locked = True

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    Me![Dobavljac].Locked = TrueMe![PoDokumentu].Locked = TrueEnd Sub

    i na kraju

    Code:

    Private Sub CheckBox_AfterUpdate()If Me![CheckBox] = False Then Me![Datum].Locked = True Me![RacunBr].Locked = True Me![Dobavljac].Locked = True Me![PoDokumentu].Locked = TrueElse Me![Datum].Locked = False Me![RacunBr].Locked = False Me![Dobavljac].Locked = False Me![PoDokumentu].Locked = FalseEnd If

    End Sub

    Ovo sada radi posao... Kada je CheckBox otkachen dozvoljava editovanje napomenutih polja, a kada je iskljuchen NE dozvoljava, tj. zakljuchava ih.

    Ovo sam pravio chisto preventive radi...Klijent nije zatrazio tu mogucnost, ali da sluchajno ne bi izmenio neki zapis dok ne potvrdi CheckBoxom da tozaista zeli...

    [ obradorriuss @ 01.10.2007. 17:24 ] @

    dok sam pisao post vidim da si i ti napisao jos jedan

    Isto odlichno reshenje to sto si postavio, sigurno ce koristiti...

    Evo upravo sam testirao i ovo moje gore shto sam uradio i uspeo sam on Form_Current da podesim da se odmah promeni vrednost CheckBoxa u FALSEpa se ne dozvoljava editovanje polja u tom zapisu... Ova forma meni sluzi samo za pregled rachuna i na njoj nije predvidjeno od strane klijenta da unosinovi rachun sa te forme, vecj ima posebnu formu za to...

    Podesavanjem CheckBoxa na FALSE na Form_Current() omogucava da se kretanjem medju zapisima svaki put CheckBox vrati na FALSE vrednost i time

  • pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

    ne ostaje ukljuchen na sledecim zapisima...

    Ali i ovo tvoje resenje daje dobre rezultate...

    A vec sam objasnio u prethodnom postu zasto nisam mogao vishe puta da kliknem na CheckBox...

    [ Getsbi @ 01.10.2007. 17:39 ] @

    Ja sam donekle kriv za nastalu situaciju jer sam napisao neto to nisam proverio. Inae sam to napomenuo ispod koda.U ovakvim sluajevima koristio sam kolonu u tabeli gde sam svaki dokument obeleavao da li je proknjien ili ne. Kasnije bih na drugoj formi tuinformaciju proveravao i u zavisnosti od nje dozvoljavao editovanje ili ne.

    [ chachka @ 01.10.2007. 19:24 ] @

    Citat:Zidar: The best code is no code at all - ZIdareva teorema o programiranjuTo nije teorema... to je aksiom i to prvi aksiom programiranja! Svaka ast!

    Access

    Provera da li postoji vec unet broj rachuna

    [ http://www.elitesecurity.org/t287035 ]

    Copyright (C) 2001-2014 by www.elitesecurity.org. All rights reserved.

    Microsoft Office Pro 2007Save Tons on Microsoft Office 2007 Professional Software and Upgrades.