12. juli 2005 - 22:22Der er
74 kommentarer og 1 løsning
Print report fra værdier
Jeg har lavet en db. hvor man til slut skal kunne printe nogle reporter udfra hvilken salgsperson, som har haft ansvaret for salget, og hvordan går jeg det. Jeg ved at jeg kan hive en aftale frem vha. ID nummer og "Like [Indtast ID]", men hvordan får jeg den til at poppe op med en menu/list/combo box, et eller andet, som virker de værdier (kontakt personer) som man kan vælge i mellem..?
Jeg er ikke sikker på at jeg forstår dit problem 100%.
Men jeg forestiller mig, at du har et felt i en tabel med kontaktpersoner. I din formular laver du en kombinationsboks med tabellen med kontaktpersoner som postkilde. der efter en udskrivningskomando med flg. kode:
Jeg er en total spade til det her program, så du bliver nødt til at hjælpe mig lidt mere! Jeg har lavet et Switchboard, hvor der så står "Print lister udfra navn", og når man klikker på den, så skal den poppe op med de 7 personer, som er i min tabel "Contact Persons". Helt præcis hvad skal jeg lave?! På forhånd tak igen.
Det med Switchboard bruger jeg aldrig selv, jeg synes ikke det er dynamisk nok til mit brug.
Men du kan lave en formular med en ubundet kombinationsboks der henter værdier fra tabellen med kontaktpersoner. I dit switchboard kan du så åbne denne formular og lave en kommandoknap med min kode.
Hvad er ulempen ved et Switchboard?! Ville du anbefale andet? Jamen hvad skal jeg gøre?! Jeg har en knap i boardet, hvad skal den åbne, og skal der source code til?!
Jeg plejer at lave min egen åbningsformular med forskellige muligheder for at åbne andre formularer.
Hvis jeg har forskellige rapporter laver jeg en formular med rapportnavnene og udskriver dem med ovennævnte kommendo hvis jeg vil have kriterier indsat i udskriften.
Formularerne åbner du med flg. kommando. DoCmd.openform "FORMULARENS NAVN"
I denne formular har jeg så en række kommandoknappper der udskriver de forskellige rapporten.
Det er stort set ligesom et Switchboard, blot er du i stand til at lave den mere dynamisk. Men bemærk venligst min kommentar om, at jeg ikke plejer at bruge Switchboard, så andre brugere vil nok have en anden mening.
Det gør det jo lidt bøvlet, at du ikke skriver om du får nogen fejlmeldinger eller der bare ikke sker noget.
Hvis du vil bruge kriterier i din udskriftskommando skal du have et felt i formularen der indeholder dine valgmuligheder af kriterier. Min kode er afprøvet og fungerer.
Jamen jeg har ingen fejlmeldinger, for jeg kan slet ikke finde ud af hvad jeg skal gøre. Jeg kan godt se logikken i den kode, men kan bare ikke finde ud af at gøre det i praktisk - jeg er jo total newbie. Skal jeg lave en ny form? Skal der i den være en listebox med værdierne? Hvor skal koden så ind? Håber du forstår mig?
Lav en ny formular. På denne tager du en kombinationsboks fra din værktøjskasse. Højreklik på boksen og vælg nederst Egenskaber > Fanen data og sørg for at der i rækkekilde står Tabel/førespørgsel og i postkilde vælger du den Tabel der indeholder navnene på dine kontaktpersoner.
Taf en kommandoknap fra værktøjskassen og højreklik på den og vælg Egenskaber > Fanen Hændelser og sæt markøren på den linie hvor der i venstre side står VedKlik (OnClick). Tryk på de 3 små ... i højre side og du kommer nu ind i VBA-editoren og markøren står og blinker. Her kopierer du min kode ind:
Da jeg ikke kender navnene på din rapport, tabel eller kombinationsboks, bliver du nødt til at rette disse navne til de aktuelle:
RAPPORTENS NAVN = Rapportens navn TABELLENS NAVN = Tabellens navn FELTNAVN = feltet der indeholder id på dine kontaktpersoner COMBOEN'S NAVN = Navnet på din kombinationsboks
Koden er for alfanumeriske felter. Hvis du skal bruge den til numeriske felter skal den se således ud:
Jeg kan ikke rigtig sende dig den, da den er i forbindelse med mit arbejde. Jeg er blevet bedt om at lade være. Øv.
Jeg har dog fået den til at komme med "fejlmelding". Når man vælger en person i den combo-box jeg har lavet i en form, så popper den op med en indtastningsmenu, ligesom, hvis man havde brugt "Like[Indtast...]". Der står så "TABELLENS NAVN!FELTNAVN". Således har jeg skrevet det hos mig: DoCmd.OpenReport "rep_CoAgree", acViewPreview, , "[L&S person]![Contact] = '" & Me!Contact & "'" Jeg er dog lidt i tvivl! Min rapport henter værdier fra en qurey, som igen henter fra tabeller. Når du så skriver TABELLENS NAVN, hvad skal jeg så skrive?! L&S person hedder "control source'en" i min rapport, men værdien er hentet fra tbl_Contact_Person?! Min combobox hedder Contact, og det gør min column også (derfra jeg henter værdierne). Håber du kan hitte ud af det, for det kan jeg bestemt ikke.
Du har vel ikke sat det ind et sted og glemt at fjerne det igen? Du bruger koden som var det til alfanumeriske felter. Kontroller at feltet Contact også er alfanumerisk.
Det er ligegyldigt om rapporten får data fra en forespørgsel eller en tabel.
Jeg kan sende dig et eksempel, men er det en mulighed fro dig, at tage en kopi at databasen, slette alle poster og sende den. I givet fald skal du huske at zippe den.
Jeg kan godt slette poster etc., men jeg må under ingen omstændigheder sende ud af huset! De er hårde med reglerne.
Nu bliver jeg lidt i tvivl, hvad er alfanumerisk?! Er det ikke bogstaver i stedet for tal?! Contact har en kolonne med 4 bog. i hvert navn, og det er den, den vælger ud fra. Men du må meget gerne sende et eks., men så kan jeg først tjekke det en gang i aften. Tak
Regler er regler, og firmaets politik er såmænd sund nok, men lidt irriterende i dette tilfælde. Alfanumerisk betyder er feltet kan indeholde både bogstaver og tal. Numeriske felter kan kun indeholde tal. Så det skulle være godt nok. Popper den stadig op med:
TABELLENS NAVN!FELTNAVN
Hvis den gør det, så er det fordi det er skrevet et eller anden sted inde i databasen. Kontroller igen at du ikke har skrevet det og glemt at slette det igen.
Det er en drop-down box/combo, og derfor har jeg ikke nogen knap, men sætte kode ind under "after update" i stedet for "onClick". Har det noget med det at gøre?! Min box hedder Contact, det står i "Other/Name=Contact".
AfterUpdate duer ikke, Idet du jo ikke opdaterer tabellen men kun "plukker" en værdi fra tabellen. Navnet skulle være OK. Prøv at lasve en kommandoknap fra værktøjskassen og sæt koden ind i Vedklik. Sender en db (.zip) om lidt.
Min query hedder "qry_CoAgree", og indeholder en kolonne ved navn "L&S person", som henter værdier fra tbl_contact_person. Så skal den vist ikke hedde "L&S person", det virker i hvert fald ikke...
Kan du "love" mig, at du sletter den igen efter brug?! Det lyder dumt, men vil gerne sende den, for der er ingen data i endnu... Håber du kan få det til at fungere! Igen tak for din store hjælp undervejs indtil videre!
Som du desuden kan se, så skal jeg også hive en rapport frem med udvalgt PPG'er (som det nu hedder). Hvordan hiver jeg værdier frem på samme måde, dog fra 2 tabeller samtidig?!?
Altså hele CoAgree rapporten skal printes ud, men kun dem som indeholder f.eks. "Amylase" i felterne 1st PPG (tbl_1PPG) OG 2nd PPG (tbl_2PPG). Men det skal kunne vælges udfra en enkelt combobox, ligesom med Contact Persons ovenstående. Forstår du hvor jeg vil hen?! Jeg skal også lige lave en knap ud fra PPG boxen, så det er magen til Contact Person formen...
Er det nødvendigt, at have 2 combos, når man skal finde en enkelt PPG i begge felter?! Altså hvis jeg vælger en værdi, så skal den hive rapporterne ud, som har værdien i enten PPG1 eller PPG2. Så er det da muligt ikke!?
"søg" er et prefix til den ubundne combo så den hedder "søg1PPG". Hvis du åbner modulet "dynamisk søgestreng" vil du se, at prefix fjernes og tilbage er strengen "1PPG" som fortæller modulet hvilket felt der skal søges i. Så hent disse 2 combo med over i den anden db. Du kan efter at have sikret dig det fungerer, sætte egenskaben synlig for begge combos til Nej. Så kan du ikke se dem, men db benytter sig stadig af dem. Når du åbner modulet vil du se, at det er lavet af en anden bruger her på eksperten (thomasjepsen), så jeg skal bede dig respektere hans credit.
hehe... Som du kan se, så havde jeg ikke set den db, du sendte til mig tidligere og derfor har du nu modtaget en fra mig. Kan du fifle lidt med den i stedet, da hele molevitten er designet rigtigt etc.?! Ja det er helt i orden at hade mig efter dette spm., men jeg påskønner virkelig din hjælp ;-) Det ville se så lækkert ud med de popup vinduer i L&S og PPG.
Private Sub CmdButton_Click() On Error GoTo errorhandler DoCmd.OpenReport "rep_CoAgree", acViewPreview, , "[tbl_1PPG]![1PPG]= '" & Me!søg1PPG & "' Or [tbl_2PPG]![2PPG]= '" & Me!søg2PPG & "'" errorhandler: If Err.Number = 2501 Then DoCmd.CancelEvent 'Else: 'MsgBox "There has ocurred an error:" & vbNewLine & vbNewLine & Err.Description & vbNewLine & Err.Number End If End Sub
Hvorfor sker der intet når jeg klikker på knappen?! Den skulle gerne søge i de to felter 1PPG og 2PPG som henviser til: tbl_1PPG og tbl_2PPG.
Jeg har sendt den til dig. Der er nu bare en underlig ting: hvis du trykker på Print all agreements, så popper den op med 1PPG og 2PPG, why?! Kan du fjerne det og sige hvor fejlen er?!
Den genkender sandsynligvis ikke feltnavnene, eller også eksisterer feltnavnen ikke i forespørgslen. Prøv at åbne forespørgslen og se, om der ikke står:
Lille problem. I drop-down boxene sker der en gang i mellem en fejl i værdierne. Det skal forstås sådan, at nogle gange (og jeg ved ikke helt hvad der udløser det), så bliver den første værdi i tabellen erstattet med den man har valgt i aftale. Dvs. den bliver overskrevet og så er der to ens værdier. F.eks. i 1PPG, så ryger AMP, og bliver erstattet af f.eks. Feed. Kan man ikke lave dem mere skrivebeskyttet??
Det er både når jeg ændrer i en eksisterende aftale, eller vil print en L&S eller bestemt PPG rapport ud. Men det er ikke hver gang! Forstår det ikke helt.
Desuden, hvorfor hedder formen "CoAgreenew", når man åbner den (via de 3 øverste knapper i main menu)?! Kan den ikke bare hedde CoAgree?
Har lige sendt dig den seneste opdateret db. Der er ændret i nogle værdier etc., så arbejd venligst med den. Tak.
Hej Mogens, nu vender jeg frygteligt tilbage! Nej det er faktisk ikke så slemt (håber jeg)!
Jeg er ved at være 100% færdig, men mangler nu bare en enkelt søgefunktion (ligesom de tidligere). Denne skal dog søge på forskellige tabeller. 1. Først skal man vælge hvilken "Agreement Status". 2. Dernæst skal man vælg "L&S Person"
Her skal den så finde frem til den valgte Agreement Status, som har en bestemt L&S person tilknyttet.
Jeg har lavet popup vinduet til det (under "Print Agreement status based on L&S person"), men mangler altså selv dens funktion. Jeg har sendt db'en til dig, så jeg håber virkelig at det kan lade sig gøre.
Efter dette kommer der ikke flere requests, så lukker jeg spm'et! Tak for den store tålmodighed....
Nu ser det hele ud til at virke perfekt! Jeg takker tusindevis af gange for din store hjælp og tålmodighed i dette forløb! Jeg skylder dig sgu en tjeneste!
Nu spørger jeg alligevel, selvom spm'et er lukket! Er der mulighed for i "Print agreements status based on L&S person", at kun have to valgmuligheder!? Altså sammentrække de 3 "forskellige" typer aktive, til en enkelt værdi som hedder aktiv, og de 2 expired til en enkelt som hedder expired?!!?!
Eller måske bare skrive de 2 "sammenslutninger" nederest i dropdown boxen, så folk også har den mulighed!?
Jeg opretter et nyt spm., hvis du kan hjælpe med den!!
Dette er nemlig hvad jeg har fået af feedback fra brugerne: Under "print" sektion er der et par ting, der er upraktiske: - under "Print a single agreement" ville det være praktisk, hvis man kunne vælge mellem ID eller CoAgree# - under "Print all agreements status based on L&S person" ville det være praktisk, hvis man kunne vælge "Aktive", og man så fik alle tre Aktive-kategorier; tilsvarende for "Expired/Terminated"
Nej ingen nye spørgsmål, det vil alligevel få en reference til dette spørgsmål. Blot send mig db. Men jeg har lige fået gæster, så det er nok begrænset hvad jeg får lavet iaften.
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.