25. september 2001 - 14:49Der 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 ?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.
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.
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.
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 ?
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.
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
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.