21. januar 2003 - 11:01Der er
8 kommentarer og 1 løsning
Tidsberegning
Hejsa
Har fået mig en lille opgave her på arbejdet
her er den forsimplet:
jeg har en tabel med Sagsnr, timeForbrug, minutForbrug
det bruges til at registrere sagsbehandlernes forbrug af timer og minutter på den enkelte sag.
sagen er den at chefen gerne vil have dette tidsforbrug ganget med 1,5 når fakturaen udskrives.
dvs. jeg skal bruge en forespørgsel der indeholder de ovenstående kolonner, men ligeledes fakturaTimer og FakturaMinutter, hvor den forbrugte tid er ½ gang større.
ydermere skal der afrundes til nærmeste fem minutter, så der ikke kommer til at stå 1 time og 27,4354 minutter....
ligeledes nytter det ikke at der står 1,5 timer og 40 minutter......
det er access 2000 og win 98 klienter i et front end - backend setup.
Har selv bikset frem og tilbage med det, men kan godt se at den grundliggende SQL jeg har haft på studiet ikke helt slår til ;)
kan godt se det virker obskurt, men det er desværre praksis i denne branche, normalt er det sagsbehandleren selv der gør det, men vi vil gerne indføre korrekte tidsregistreringer af statistik hensyn. uden at det går udover indtjeningen. Kunden får som det er nu ikke de rigtige registreringer, men det vil de fremover få, således så de kan se hvad det reelt har haft af tidsforbrug.
Du skal nok først lave en mellemregning med et kombineret felt, der viser samlet antal minutter - Det vil sige timer*60+minutter Det ganger du så med 1.5 Det nye tal dividerer du med 60 og tager integer værdi - det er så justerede timer Og så tager du den oprindelige mellemregning med minutter - og trækker justerede timer*60 fra - så har du minutter, som du så kan afrunde til nærmeste 5 minutter (divider med 12 - round - gang med 12)
kigger på det, kan godt være jeg skal bruge lidt mere hjælp..... jeg er ikke den vilde access haj, har kun teorien, og meget lidt praktisk erfaring.... typisk akademiker ;)
Jeg tror jeg er ved at have den, der er bare to ting jeg ikke helt er klar på.
1) hvordan tager jeg integer værdien? jeg ved godt hvad en int er, og kan godt se pointen, men hvordan gør jeg det lige i praksis i acces.
2) afrundingen:"så har du minutter, som du så kan afrunde til nærmeste 5 minutter (divider med 12 - round - gang med 12)" kan jeg ikke helt greje hvis jeg fx har 52,5min så dividerer jeg med 12=4,375, afrunder=4 og ganger med 12=48. jeg tror ikke helt jeg forstår regnestykket
3) kan jeg ikke risikere at være uheldig ved en afrunding og ende med over 60 min?
Her er den lavet med ny query til hvert step - det er måske ikke den mest elegante, men det gør det nemt at følge:
Query1 - Sum af minutter: Expr1: [Table1]![Timer]*60+[Table1]![Minutter] Query2 - Gang med 1.5: Expr2: [Query1]![Expr1]*1.5 Query3 - Find timer: Expr3: Int([Query2]![Expr2]/60) Query4 - Find minutter: Expr4: [Query3]![Expr2]-60*[Query3]![Expr3]
Herefter afrundes minutter - se videre:
2 - Afrunding: Jo - det var en skrivfejl fra min side. Du skal dividere med 5 - afrunde - og derefter gang emd 5 - Ikke med 12
3 - Du kan ikke komme over 60 minutter - Int vil altid runde ned, og det vil sige, at din værdi ved division med 5, vil blive mellem 0 og 11.9999999 - den rundes ned til et heltal mellem 0 og 11, som ganges med 5 tiv værdien (0, 5, 10, ..., 55). Hvis du vil have afrunding både op og ned, kan du løse det ved at lægge 2.5 minutter til den værdi, du finder i query 2 ovenfor - hvis du så har haft mindst 57.5 minutter i mellemregningen, vil det give en time mere, men minuttallet vil blive nul i den sidste.
ved ikke om den findes i Acces, men den gør somsagt i C(++) og i PHP...
Morten
Synes godt om
Ny brugerNybegynder
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.