Avatar billede rookie44 Juniormester
27. februar 2011 - 10:38 Der er 12 kommentarer og
1 løsning

Data fra hovedformular til underformular

Jeg har en hovedformular (Salgsordrer) med en tilhørende underformular (salgslinier).
Hver salgslinie har et linienr, varenr, varenavn og pris. Salgslinier sorteres efter linienr.
Jeg har en komboboks på hovedformularen, hvor man kan finde et varenummer.
Herefter vil jeg klikke på en knap, der tilføjer varenr, varenavn, pris og skriver det næste ledige linienr (spring på 10) .
Men hvordan finder jeg ud af, hvilken salgslinie det skal tilføjes og får det indsat?
Avatar billede fdata Forsker
27. februar 2011 - 17:15 #1
DMax("Linienr","Salgslinier")
er det højeste linienr i tabellen Salgslinier.
Avatar billede Slettet bruger
27. februar 2011 - 17:17 #2
Det sker automatisk, hvis det laves rigtigt. Tabellen med salgslinier, den der er datakilde for underformularen, skal også have feltet 'ordreNr'. Lad os antage at datakilden for hovedformularen har feltet: 'ID' som identificerer den enkelte salgsordre. I egenskabsarket->data for din underformular er 'underordnedeFelter' ordreNr og 'overOrdnedeFelter' ID.

Den comboboks hvor du ønsker at vælge varenummmer, opfatter jeg som et filter -  der findes jo mange ordre hvor varenummeret optræder - og disse ordere hvor varenummeret optræder kan man så 'bladre igennem' og ordrelinierne vises automatisk. Der skal ikke være nogen knap - det er for ufikst - comboboksens 'efter opdatering' hændelse sætter filteret - automatisk requerey optræder vist efter

filteron=false
filter="varenummer=" & <comboControlName>
filteron=true

'idet <...> er pladsholder notation

Jeg kan godt se intentionen med spring på 10 for hvert nyt linienummer - så kan man jo altid lige indsætte nogle nye! Det er bare ufikst hvis brugeren af programmet skal ligge og fedte med linienumre - ja den blotte tilstedeværelse af numre der betyder noget implementations logik, (der ovenikøbet her er redudant idet det toner frem for øjnende hvilke linier der står over hvilke) tilhører et tidligere stadie EDB udviklingen. 
2 stategier:
1. autonummerering med spring på 1, og så tage den kompleksitet som redigering giver
2. Fange posttilføjelses hændelses og så tildele linieNr=dmax("linieNr","OrdreLinier")+10
Avatar billede fdata Forsker
27. februar 2011 - 17:40 #3
ellebe >> Hm. Jeg læste spm. anderledes. Knappen er ikke et filter, som kan filtrere allerede oprettede ordrer; men derimod en "Tilføj varelinie" på en ny ordre. Right, rookie44?

M.h.t linienumrene: Jo, de er nødvendige, når der skydes linier ind midt i en ordre, bl.a. for at styre rækkefølgen på udskrifter. De behøver jo i øvrigt ikke blive vist, så brugeren behøver ikke "fedte" med dem.
Spring på 10 er måske overkill. "Indsæt linie" rutinen skal jo bare lægge 1 til alle linienumre, der ligger efter den nye. Det skal ske ved indsættelsen.

Men derudover er vi jo tilsyneladende enige (dit forslag 2).
Avatar billede rookie44 Juniormester
27. februar 2011 - 18:06 #4
Fdata du har ret det er det jeg vil, og du har ret knappen er ikke et filter. Det er for tilføje en ny varelinie til salgsordren.
Normalt taster man ordrelinier direkte i underformularen, men når brugeren ikke er sikker på varenummer eller navn kan han bruge komboboksen og knappen.

Når jeg har fundet liniemax, skal jeg så læse linier, varenummer, pris og navn ind i tabellen til underformularen og lave en underformular.requery får at få det vist i underformularen. Herefter kan brugeren indtaste antal?
Avatar billede Slettet bruger
27. februar 2011 - 18:07 #5
fdate> Du har ret i din tolkning af rookie44's intention med comboboksen - det ser jeg når jeg læser spørgsmålet igen.

Det er så bare ikke det rette brugerlayout, efter min mening - den comboboks bør befinde sig på varenummer pladsen i underformularen - altså have etiketten varenummer og indsætte sin værdi i varenummer feltet i linienumretabellen - og selve varenummer feltets optræden i datasheet trækker man sammen så det er usynligt.
Avatar billede rookie44 Juniormester
27. februar 2011 - 18:11 #6
ellebe

Det har jeg også i underformularen. Men den jeg laver på hovedformularen skal egentligsøge efter varenavn.
Avatar billede fdata Forsker
27. februar 2011 - 18:39 #7
rookie44 >> Under de givne forudsætninger er dit forslag da helt fornuftigt. Overfør data til en ordrelinie og placér markøren i antal feltet.
Efter din Requery må det må være noget med at markere din subform, hoppe til sidste post (DoCmd.GoToRecord , , acLast hedder den vist) og så markere Antal feltet.
Avatar billede rookie44 Juniormester
27. februar 2011 - 18:41 #8
fdata
Linienr i salgslinier, starter med 10 for hver salgsordrer.
Så hvordan finder jeg det højeste linienr i den aktuelle salgsordre.
Avatar billede Slettet bruger
27. februar 2011 - 18:53 #9
rookie44

I lyset af den anvendelse der uddybes i svar#4 er comboboksen i hovedformularen enten med flere felter så man ruller ned og orinterer sig og/eller med autoudfylding på varenavne.

Det synes jeg er en udmærket løsning - alternativt kunne man lave en comboBoks i underformularen med autoudfyldning på varenavn.

En comboBoks med autoudfyldning er jo begrænset ved sin søgning derved at man blot 'tuner ind' - og at man derfor er nød til at vide hvad varenavnet starter med.
Man kunne fange 'ikke på listen' hændelsen og muliggøre fritekst søgning som del overalt i varenavnet - men det er jo ikke sikkert at varemængden er så svær at finde rundt i at det er ulejligheden værd.
Avatar billede fdata Forsker
27. februar 2011 - 18:57 #10
DMax("Linienr","Salgslinier","Ordrenr=" & Ordrenummeret)

<Ordrenummeret> er en variabel, som indeholder det aktuelle ordrenr. Det kan være, du har det i en control på din hovedform, så er syntaksen:

DMax("Linienr","Salgslinier","Ordrenr=" & Forms!DinForm.Ordrenummer)
Avatar billede fdata Forsker
27. februar 2011 - 19:06 #11
Sorry. Er nødt til at trække stikket ud nu. Håber, du finder ud af det.
Happy programming :o)
Avatar billede rookie44 Juniormester
28. februar 2011 - 10:41 #12
fdata

Med lidt programmering, så virker det. Du får point
Avatar billede fdata Forsker
28. februar 2011 - 19:34 #13
Super. Takker for point ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester