Avatar billede jalle Nybegynder
25. september 2001 - 14:49 Der er 25 kommentarer og
1 løsning

Problemer med at udvælge de rigtige data i rapporten

Jeg har en rapport, hvor der er summeret mdr.´s saldo, honorar, faktura, regulering og timer. Ud for hver måned er der månedenstal og totalen for året. Det skal siges at det virker, men har nu fået til opgave at gøre det sådan at saldoen skal starte fra helt fra begyndelsen og kører op gennem alle årerne.

Lidt oplysninger omkring tabelstrukturen og forespørgslerne:

Tabel: HT_SaldoTrans | indeholder alle oplysninger
ST_ID | autonummering - primære nøgle
ST_Kode | tal - fremmednøgle til T_TransKode
ST_BilagNr| tal
ST_BilagDato | dato & ..
Maaned | tal
Aar | tal
Sagsnummer | tal - fremmednøgle til HT_Sag
Medarbejdernummer | tal - fremmednøgle
Arbejdskode | tal - fremmednøgle
Beskrivelse | tekst
Timer | tal
Km | tal
TimeSats | tal
Belob | valuta
St_dato | dato  ....

Tabel T_TransKode
ST_Kode | tal - primærenøgle
ST_KodeTekst | tekst

Tabel HT_Sag
Sagsnummer | tal - primærenøgle
Afdelingsnummer | tal
Løbenummer | tal
Aarstal | tal
Slettekode | ja/nej
Lukkekode | ja/nej
Systemdato | dato & ..

På nuværende tidspunkt bliver alle saldi til de forskellige overskrifter genereret i flere forespørgsler, som indeholder følgende sql-sætning:
SELECT HT_Sag.Afdelingsnummer, Sum(HT_SaldoTrans.Belob) AS Faktureret
FROM HT_Sag INNER JOIN HT_SaldoTrans ON HT_Sag.Sagsnummer = HT_SaldoTrans.Sagsnummer
WHERE (((HT_SaldoTrans.ST_Kode)=3) AND ((HT_SaldoTrans.Aar)=FktTilAar()) AND ((HT_SaldoTrans.Maaned)<=FktTilMaaned()))
GROUP BY HT_Sag.Afdelingsnummer;

Forespørgslen som danner totalerne ser sådan ud:
INSERT INTO T_TimeSagsRapportLinie ( Afdelingsnummer, Maaned, Aar, Saldo, Faktureret, Regulering, Honorar, Timer, X1, LøbeNr )
SELECT HT_Klienter.Afdelingsnummer, FktTilMaaned() AS Maaned, FktTilAar() AS Aar, (IIf(IsNull([Honorar]),0,[Honorar])+IIf(IsNull([Regulering]),0,[Regulering])-IIf(IsNull([Faktureret]),0,[Faktureret])) AS Saldo, SaldoFaktureret.Faktureret, SaldoReguleret.Regulering, SaldoHonorar.Honorar, SaldoHonorarTimer.Timer, (FktTilAar()*100+FktTilMaaned()) AS Expr1, 2 AS Expr2
FROM (((HT_Klienter LEFT JOIN SaldoReguleret ON HT_Klienter.Afdelingsnummer = SaldoReguleret.Afdelingsnummer) LEFT JOIN SaldoFaktureret ON HT_Klienter.Afdelingsnummer = SaldoFaktureret.Afdelingsnummer) LEFT JOIN SaldoHonorar ON HT_Klienter.Afdelingsnummer = SaldoHonorar.Afdelingsnummer) LEFT JOIN SaldoHonorarTimer ON HT_Klienter.Afdelingsnummer = SaldoHonorarTimer.Afdelingsnummer
GROUP BY HT_Klienter.Afdelingsnummer, SaldoFaktureret.Faktureret, SaldoReguleret.Regulering, SaldoHonorar.Honorar, SaldoHonorarTimer.Timer
HAVING (((HT_Klienter.Afdelingsnummer)=FktAfdelingsnummer()));

Vi har prøvet at sammensætte saldoen på en anden måde med det resultat, at det altid, var den første måned, som blev den afgørende faktor.

Sikke en lang smøre at fyre af, så jeg har næsten glemt hvad mit spørgsmål gik ud på ;) men kort og godt, så er det saldoen, som skal være udslagsgiven på rapporten, hvor det skal være muligt at se saldoen fra dag 1 (hvor man begyndte at anvende systemet) til d.d., hvor kan det laves ud med de oplysninger som jeg har nævnt ?
Avatar billede terry Ekspert
25. september 2001 - 14:53 #1
ow!
Avatar billede jalle Nybegynder
25. september 2001 - 14:56 #2
Ja, der er noget at gå i krig med, men det kan godt være at det er muligt at låne en kopi af accessdatabasen, til dem som har lyst til at gå i krig med at løse det. Jeg har nemlig givet op.
Avatar billede terry Ekspert
25. september 2001 - 14:59 #3
I will wait to see if anyone else is interested first, if not then I will get back. I have quite a bit of work on at the moment so cant promise anything.

terry
25. september 2001 - 16:37 #4
Nu spørger jeg nok dumt, men kan man ikke bare bruge en DSum på hele tabellen?

(Jeg er ikke sikker på at jeg forstår hele spørgsmålet!) Men hvis du skal have en total sum på en tabel fra day 1, så er DSum en fin funktion!

/Thomas

PS: Men det vil næsten være for nemt, I know :o)
Avatar billede juks Novice
26. september 2001 - 13:16 #5
jeg vil da gerne prøve at hjælpe men det er nok nemmer hvis man kan se databasen :-)
min emil er jonas@medialogic.dk
Avatar billede jalle Nybegynder
26. september 2001 - 14:39 #6
Thomas >> DSum bruges det ikke i forbindelse med vb eller kan man også bruge i i forbindelse med forespørgslerne i Access ?

juks >> Jeg sender den til dig, i løbet af i aften eller i morgen, når jeg lige får tid til at \"tømme\" ud af databasen, således at du kun får \"uvigtige\" oplysninger med.
Avatar billede juks Novice
26. september 2001 - 14:50 #7
du kan også godt bruge dsum i en forspg.
Avatar billede terry Ekspert
04. oktober 2001 - 21:17 #8
jalle did you EVER get an answer to your question?
Avatar billede jalle Nybegynder
04. oktober 2001 - 22:23 #9
Jeg har sendt databasen til juks, men jeg ved ikke hvor langt han er kommet ;(

Jeg kan også lige oplyse nogle andre informationer omkring mit problem, efter at have emailet med juks et par gange.

Jeg har lavet et hurtigt eks. over dataflowet: http://jlservice.dk/data.html
Avatar billede terry Ekspert
05. oktober 2001 - 08:00 #10
Ok! Wait and see if you get an answer from juks, and then you can send the database to me if you like. tbs@io.dk

terry
Avatar billede terry Ekspert
07. oktober 2001 - 22:47 #11
Jakob, do you have a mail address at work?
Your report is working :o)
You can mail me at dkTeBrSa@Europe.lego.com

Avatar billede jalle Nybegynder
07. oktober 2001 - 22:55 #12
Bare send den til den mail adresse du har fået af mig, jeg modtager den også på arbejdet.
Avatar billede terry Ekspert
08. oktober 2001 - 12:00 #13
Jalle> Have you received my mail?
Avatar billede jalle Nybegynder
08. oktober 2001 - 12:47 #14
Ikke endnu, men det kan være at den ligger hjemme hos mig, da jeg checker mailadressen begge steder samtidigt. Svare dig i aften om jeg har fået den - ok ?
Avatar billede terry Ekspert
08. oktober 2001 - 13:06 #15
Hi jalle> No, problem, I just understood that you also received your mail at work too!
Avatar billede jalle Nybegynder
08. oktober 2001 - 20:05 #16
terry >> Det ser ud til at virke, så svare du ikke lige så du kan få dine point og mange tak for hjælpen.
Avatar billede terry Ekspert
08. oktober 2001 - 21:22 #17
Great to hear it works, and thanks fcor the points :o)

Anyone interested in hearing the solution?
mvh
Terry
Avatar billede juks Novice
10. oktober 2001 - 12:28 #18
hej Jalle, jeg er ked af jeg ikke har svaret dig men har desværre ligget syg
Avatar billede juks Novice
10. oktober 2001 - 12:29 #19
terry..: ja tak ......
Avatar billede terry Ekspert
10. oktober 2001 - 12:33 #20
Hi juks, hope your feeling better.
Will comment it this evening as the db\'s at home :o)



Avatar billede juks Novice
10. oktober 2001 - 12:41 #21
ok
Avatar billede juks Novice
10. oktober 2001 - 12:42 #22
det haster ikke , da jeg har fundet en løsning men vil da gerne se din :-)
Avatar billede terry Ekspert
10. oktober 2001 - 12:47 #23
Can I see your (solution) too?
Avatar billede juks Novice
10. oktober 2001 - 13:12 #24
sure
Avatar billede terry Ekspert
10. oktober 2001 - 20:36 #25
Hej juks, som lovet!

The report uses the query QFR_TimeSagsRapportLinie as its Record Source.
In th equerry you can see that it uses thee table  T_TimeSagsRapportLinie. This table gets its data from the function FktTimeSagsRapportLinie which looks like this>
Dim TællerMåned As Long
Dim TællerÅr As Long


For TællerMåned = 1 To 12
    XTilMaaned = TællerMåned
    DoCmd.OpenQuery \"QFRA_TS\"
    DoCmd.OpenQuery \"QFRA_TS_Saldo\"
Next TællerMåned

XTilAar = XFraAar
For TællerMåned = 1 To 12
    XTilMaaned = TællerMåned
    DoCmd.OpenQuery \"QFRA_TS\"
    DoCmd.OpenQuery \"QFRA_TS_Saldo\"
Next TællerMåned

The report ALWAYS prints 2 years, hence the two loops. Each loop attempts (they don\'t always exist) to insert values for 12 months of the year. The query QFRA_TS inserts the first line of each month. QFRA_TS_Saldo the second line. The second line is the one giving the problem. So look at this query QFRA_TS_Saldo.  In the report the column that we are having problems with is SALDO.
The field value for saldo is>
Saldo: (IIf(IsNull([HonorarIalt]),0,[HonorarIalt])+IIf(IsNull([ReguleringIalt]),0,[ReguleringIalt])-IIf(IsNull([FaktureretIalt]),0,[FaktureretIalt]))

HonorarIalt, ReguleringIalt and FaktureretIalt come from three other queries. Look at one of these queries, for example SaldoFaktureretIalt, the problem is the same for them all.
The SQL looks like this>
SELECT HT_Sag.Afdelingsnummer AS Expr1, Sum(HT_SaldoTrans.Belob) AS FaktureretIalt
FROM HT_Sag, HT_SaldoTrans
WHERE (((HT_SaldoTrans.ST_Kode)=3) AND ((HT_SaldoTrans.Aar)<=FktTilAar()) AND ((HT_SaldoTrans.Maaned)<=FktTilMaaned()))
GROUP BY HT_Sag.Afdelingsnummer;

Notice FktTilAar() and FktTilMaaned() in the WHERE clause. These functions get the values of XtilAar and XtilMaaned which are set in the loops above. This happens for both years and twelve months for each year.

For example 1999 1 to 1999 12 and 2000 1 to 2000 12 (It actually does it 2000 and then 1999 but not to worry about that)

Anyway what the query is doing is summing up  HT_SaldoTrans.Belob for all months <=1999 and <= 1 (January 1999). This gets done for each month throughout the two years (OR SO WE THINK)
The system was taken into use January 1999. So 1999 1 to 1999 12 work fine. But when you get to 2001 1 you have  a problem.

The WHERE is where Year <=2000 and month <=1, but this excludes months 2 to 12 of  1999!!!!!!!!

So, I have altered the query so it looks like this.
SELECT HT_Sag.Afdelingsnummer, Sum(HT_SaldoTrans.Belob) AS FaktureretIalt
FROM HT_Sag INNER JOIN HT_SaldoTrans ON HT_Sag.Sagsnummer = HT_SaldoTrans.Sagsnummer
WHERE (((HT_SaldoTrans.ST_Kode)=3) AND ((Format([Aar],\"0000\") & Format([Maaned],\"00\")) Between 199901 And Format(FktTilAar(),\"0000\") & Format(FktTilMaaned(),\"00\")))
GROUP BY HT_Sag.Afdelingsnummer;

It now sums up from January 1999 (199901) and the current YearMonth (YYYYMM).

The problem could have been solved in a number of ways, but this IS where the error is so this is where I made the alterations.

EASY IKKE? ;o)
Avatar billede terry Ekspert
10. oktober 2001 - 20:38 #26
Little eror there!
But when you get to 2001 1 you have  a problem
= But when you get to 2000 1 you have  a problem
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