16. marts 2011 - 01:15Der er
23 kommentarer og 1 løsning
Automatisk genereret rapport nr.
Hej,
Jeg forsøger at lave et rapport nummer til min Access 2007 database. Der er en række krav som jeg ikke kan få til at virke.
Formatet skal se således ud:
GS000000-00
De 6 første ciffre skal være datoen.
Efter bindestregen skal de 2 sidste ciffre være et to ciffret fortløbene løbenummer.
Giver det mening??
Dvs.: det er kun løbenummeret der skal skifte (01, 02, 03 osv.) hver gang jeg starter på en ny rapport, sålænge vi har den samme dato. Skifter datoen starter løbenummeret forfra på nr. 01.
Dette har givet mig grå hår LÆNGE. Håber meget at nogen kan hjælpe.
Frigør potentialet for 6 harddiske og 10GbE med TS-632X! Denne NAS tilbyder sikker backup, hurtig transmission og support af container-applikationer.
22. august 2024
Slettet bruger
18. marts 2011 - 12:11#1
Nummerering af poster sker som funktion af en sorteringorden - det kan ses ved at bladre gennem poster med navigationsknappen i en formular under forskellige sortering ordener. Hvis, på nogen måde, de numre der ønskes vist i raporten, skal identificere den enkelte post - så skal nummeret komme fra datakildens tabelgrundlag. Med identificere, mener jeg, hvis nummeret skal anvendes til andet end kosmetik i den enkeltstående åbning/udskrift af raporten. Hvis det bare er kosmetik, kan man anvende det samme nummer, som access forsyner os med i formulares navigationsknapper.
Givet: datakilde tabel: CaseAbsPos tabelens nøgle: id
Function recAbsPos() With CurrentDb.OpenRecordset("select id from CaseAbsPos") .FindFirst "id=" & id recAbsPos = .AbsolutePosition: End With End Function
(funktionen anbringes i raportens class modul - tryk, havende raporten åbnet i design visning , på den værktøjslinieknap hvis tiptekst er 'programkode')
I en ubundet tekstboks i raporten skrives: =recAbsPos()
Synes godt om
Slettet bruger
18. marts 2011 - 12:30#2
Tilføjelse til #1 - følgende undgår åbning af recordset for hver post:
Public rs As DAO.Recordset
Function recAbsPos() If rs Is Nothing Then Set rs = CurrentDb.OpenRecordset("select id from Unit") With rs .FindFirst "id=" & id recAbsPos = .AbsolutePosition: End With End Function
Synes godt om
Slettet bruger
18. marts 2011 - 12:34#3
rettelse til #2: Tabel hedder stadig 'CaseAbsPos' og ikke 'Unit' - sådan går det når man tester med andre navne!
Tak for svaret. Det er ikke kun til kosmetik at man i rapport nummeret kan se hvilken dato den er fra. Det fremmer vores arbejdsgang meget.
Jeg er lidt usikker på:
datakilde tabel: CaseAbsPos tabelens nøgle: id
Skal alt dette kopieres med ind i det du kalder class modul? eller skal jeg finde tabelens nøgle id og skrive den der hvor der stå id?
Ja sorry men jeg skal nok have det bøjet i neon, for jeg er meget ny og har overtaget en gammel database med en masse vigtig information der helst ikke må gå tabt, hvis jeg dummer mig :-).
Beklager at være så besværlig.
Håber stadigvæk at du gider guide mig igennem.
Synes godt om
Slettet bruger
18. marts 2011 - 20:53#5
Vi starter jo alle et sted, så det er OK at stille elementære spørgsmål. Det eneste man er oppe mod, er at det kan være lidt svært at forstå hinanden i mangel af ord på ting og begreber.
En sikker strategi for ikke ødelægge noget, er at arbejde på en kopi - hvis noget går galt, så sletter man kopien og tager en ny kopi. Det er den *.mdb fil du måske har dobbeltklikket på i explore eller haft en genvej til eller åbnet vha. access.exe, jeg tænker på. Når tilsidst man er helt sikker på det man laver, kan man ændre i originalen.
Kan du fortælle lidt mere om det databasen skal anvendes til - hvad er det for ting i den fysiske verden som har en dato og som skal administreres af databasen.
Du har ret jeg har lavet en kopi nu som jeg kan rode rundt i.
Formularen anvendes til at skrive rapporter i. Hver gang man starter en ny rapport (åbner en blank formular og udfylder/skriver i), skal denne rapport have et unikt rapport nummer.
Det nummer vil være en stor hjælp hvis det så ud på en bestemt måde (GSddmmåå-løbenr. = inputmaske der ser således ud GS______-__).
Når vi får opgaver, stilles de ofte således: Læs rapport nr. GS181109-17. Ved at nummeret ser således ud kan jeg med det samme se hvor gammel sagen er. Dermed ved jeg fra hvornår jeg skal søge rapporter fra andre afdelinger.
Håber det giver mening.
Synes godt om
Slettet bruger
18. marts 2011 - 22:49#7
Ja det giver fint mening. Hvad hedder tabelen formularen er baseret på og hvilke felter har denne tabel?
Ja løbe nummeret er = referencenummeret men kun den sidste del af reference nummeret.
GS nummeret (GGddmmåå-00), bruger vi som sådan hele reference nummeret for den post eller den nye formular man står i og er ved at skrive sin rapport i.
GS nummeret (GGddmmåå-00), bruger vi som sådan SOM hele reference nummeret for den post eller den nye formular man står i og er ved at skrive sin rapport i.
Synes godt om
Slettet bruger
20. marts 2011 - 13:00#12
Da feltet Hrnr er en funktion af dato og reference påhviler det formularens postinsættelses funktion at opretholde synkronitet mellem disse felter. Lad os lave simplest muligt database, der illustrerer det.
Tabel: Rap dato, type 'dato og klokkeslet' refNr, type 'heltal' Mrnr, type 'tekst'
Der laves en autoformular (tabel markeret i database vindue->menulinie-indsæt autoformular)
Gemmes som 'Rap' - åbnes i designview - i egenskabsarket for Mrnr:
1. inputmaske: "GS"000000-00 2. i hændelsen efteropdatering klikkes der på de 3 små prikker ude til højre, kodegenerator og følgende indsætte i vba editoren:
Private Sub Mrnr_AfterUpdate() dato = DateSerial(Val(Mid(mrnr, 5, 2)), Val(Mid(3, 2)), Val(Left(mrnr, 2))) refNr = Right(mrnr, 2) End Sub
I egenskabsarket for 'felterne' dato og refNr, kan de, i dette illustrative eksempel sættes til 'data->ikke aktiveret'
Det jeg forstår som løbenummer er de 2 sidste ciffre af referencenummeret som vi herinde i daglig tale kalder GS´nummeret. Beklager min begrebsforvirring. Løbenummeret er vel dermed kun er en del af et fil navn. Sådan at jeg kan se ud af GS nummeret at det er den 17 rapport skrevet på den d. 22/3-2011: GS220311-17.
Det du spørger om er muligvis det felt der i tabellen hedder "ID". Her gives der pr. autonummerering et individuelt fortløbende nummer til hver rapport vi skriver.
Glemte et par felter fra GS-Rapport tabellen:
ID (Autonummerering) Dato og Tidspunkt (Dato og Klokkeslet) Reference nummer (Tekst) Tape (Tekst) Security Officer (Tekst) Hrnr (Tekst) Surveillance Officer (Tekst) Subjekt (Tekst) Beskrivelse (Noter) Er export lavet (Tekst)
(feltet med Hrnr, er det felt du hjælper mig med i den anden tråd om at åbne et specifikt word dokument fra en tekstboks).
Jeg beklager meget mine amatøragtige fejl. Jeg håber meget at du har mod på at hjælpe mig helt igennem !
Det jeg forstår som løbenummer er de 2 sidste ciffre af referencenummeret som vi herinde i daglig tale kalder GS´nummeret. Beklager min begrebsforvirring. Løbenummeret er vel dermed kun er en del af et fil navn. Sådan at jeg kan se ud af GS nummeret at det er den 17 rapport skrevet på den d. 22/3-2011: GS220311-17.
Det du spørger om er muligvis det felt der i tabellen hedder "ID". Her gives der pr. autonummerering et individuelt fortløbende nummer til hver rapport vi skriver.
Glemte et par felter fra GS-Rapport tabellen:
ID (Autonummerering) Dato og Tidspunkt (Dato og Klokkeslet) Reference nummer (Tekst) Tape (Tekst) Security Officer (Tekst) Hrnr (Tekst) Surveillance Officer (Tekst) Subjekt (Tekst) Beskrivelse (Noter) Er export lavet (Tekst)
(feltet med Hrnr, er det felt du hjælper mig med i den anden tråd om at åbne et specifikt word dokument fra en tekstboks).
Jeg beklager meget mine amatøragtige fejl. Jeg håber meget at du har mod på at hjælpe mig helt igennem !
Synes godt om
Slettet bruger
22. marts 2011 - 12:27#17
Og Thor græmmede sig da han ikke kunne tømme drikkehornet: http://da.wikipedia.org/wiki/Thor#Thor_hos_Udg.C3.A5rds-Loke Jeg tror du klarer det meget godt - der findes dygtige access udviklere med år på bagen der nægter at kommme i nærheden af vba programmering. Mine svar skal læses med et 'gran salt' - efterhånden som der kommer flere informationer viser det sig at de er ude af kontekst.
Standardværdien for Mrnr er en function, prøv at søge på NewGDNumber i vba editoren - vælg hele projektet. Når der oprettes en ny post indsættes standard vædier for de felter som har sådan en.
Hvordan ser vba koden for denne funktionen ud: NewGDNumber("[Reference nummer]";"GS-Rapport")
Når jeg søger på NewGDNumber i vba editoren finder jeg dett:
Function NewGDNumber(FieldName As String, TableName As String) As Variant 'FieldName is the name of the number field in the table that we want the next number for. 'TableName is the name of the table.
Dim strGDBase As String Dim varMaxNum As Variant Dim intNewNum As Integer
'Get the base of the number from the GamingDay function strGDBase = Format$(GamingDay(Now()), "ddmm")
'Look up the biggest number on file for this base. varMaxNum = DMax(FieldName, TableName, FieldName & " Like """ & strGDBase & "*""")
'If there's no number on file, return 00. If IsNull(varMaxNum) Then NewGDNumber = strGDBase & "01" Else intNewNum = CInt(Right$(varMaxNum, 2)) + 1 If intNewNum > 99 Then '$$ What now, Michael? You've used up all the numbers 00 - 99. '$$ Review the follwing logic and rewrite message in Danish. DoCmd.Beep MsgBox "Warning : The system can't automatically generate a number for " & _ FieldName & ", because no more numbers are available for this gaming day." & _ vbCr & vbCr & "You must enter your own number in " & FieldName & ".", _ vbExclamation NewGDNumber = Null Else NewGDNumber = strGDBase & Format$(intNewNum, "00") End If End If
End Function
Koden for NewGDNumber("[Reference nummer]";"GS-Rapport") kan jeg ikke lige finde. Når jeg klikker de 3... for enden af "standardværdi" feltet, kommer udtryksgeneratoren frem i stedet for. Det er her koden står ?
Synes godt om
Slettet bruger
22. marts 2011 - 22:32#19
Det er godt nok - vil lige påpege i forhold til tidligere indlæg:
Det er 'ddmmll' - dag,mpned,løbenummer der retuneres når ny post oprettes. Bindestreg før 2 sidste cifre og GS forrest er begge noget der alene befinder sig i inputmasken. Løbenummeret bliver tallet én større end antallet af poster for samme dag i GS-Rapport.
Den inputmaske, der vises i det oprindelige spørgsmål passer ikke med NewGDNumber(...)
Hvis du vil have år med skal "ddmm" rettes til "ddmmyy" og jeg vil tro din inputmaske skal være "GS"000000-00
Og, surprise - uden år "GS"0000-00
Det må aldrig rettes i feltet Mrnr - der kan søges og dobbelklikkes. Ny post oprettes med '*' i navigationsvælgeren (post bladre pilene nederst - hvis de er der ;)
Det er databasen der administrerer hvad der er af word dokumenter - og når der oprettes en ny post skal den tilsvarende word fil oprettes:
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.