Avatar billede pote Nybegynder
18. januar 2005 - 01:00 Der er 11 kommentarer og
1 løsning

Datoberegningsproblem. C5 Ver. 2.10 SP3. Native db.

Jeg har tabel hindeholdende 2 datofelter. Elementerne i tabellen oprettes med XAL-kørsel hvor Dato1 sættes = Today().
Tabellen vedligeholdes med FRM hvor Dato2 udfyldes. Begge datofelter vises korrekt i FRM. I efterfølgende REP viser Dato1/Dato2 korrekt, men Dato2 giver beregningsproblemer. Jeg har lavet en lille testREP hvor jeg konverterer datofelter med Date2Num.
Dato1 bliver korrekt(feks. 20.12.04=38339; 26.12.04=38345). Dato2 bliver forkert(feks. 07.12.04=38327; 18.12.04=38333; 14.12.04=38339; 20.12.04=38347; osv.). Ide/forslag til hvad problem med Dato2 er og evt. løsning efterspørges.
Avatar billede Slettet bruger
18. januar 2005 - 06:52 #1
Det lyder lidt mystisk.
Hvis Dato2 vises rigtigt, må det også ære gemt rigtigt i databasen.

Kan du vise lidt kode, hvor det går galt i din beregning?
Avatar billede pote Nybegynder
18. januar 2005 - 08:27 #2
TestREP:
INT &Dato1
INT &Dato2
Search Tabel USING xINX
  SET &IntDato1 = Date2Num(Tabel.Dato1) // Dato sat med XAL-kørsel
  SET &IntDato2 = Date2Num(Tabel.Dato2) // Dato sat med FRM
  OUTPUT Tabel                          // Dato 2 er beregnet forkert
END
Avatar billede jasman Nybegynder
18. januar 2005 - 08:37 #3
Jeg tror det rahp mener er, at vi gerne vil se hvad du gør ved feltet Tabel.Dato2 for at nå frem til den værdi der skal være placeret i feltet, og ikke den kode som ligger til grund for rapporten.
Avatar billede jasman Nybegynder
18. januar 2005 - 08:38 #4
Altså ... hvordan skal værdien af Tabel.Dato2 beregnes ?
Avatar billede pote Nybegynder
18. januar 2005 - 18:58 #5
Dato2 udfyldes ved alm. indtastning i FRM.
FormFelt:
        FIELD Date 0 ForUdvDato
            TYPE    DB
            SEQNO  8
            PAGE    1
            POS    17 8
            LENGTH  10
            COLOR  5
            GROUPID 0
            TEXT    #
            FLAGS  USER ONELINE LEFT
            CQL  Post-Change
                #EXTERN Tabel4
                #INTRODUCE Tabel4[VarenummerIdx,Tabel4.Produktionsnr]
                #IF Tabel4.L›benummer THEN
                #  IF Tabel2.ForUdvDato THEN
                #      IF NOT Tabel2.ForUdvVejer THEN
                #        SET Tabel2.ForUdvVejer = ForVejer
                #      ENDIF
                #  ENDIF
                #ENDIF
                #
            ENDCQL
        ENDFIELD
Avatar billede jasman Nybegynder
18. januar 2005 - 20:00 #6
Hvilket felt svarer Dato2 så til ?
Tabel2.ForUdvVejer ???
Eller er Dato2 feltet ForUdvDato ???
Avatar billede Slettet bruger
18. januar 2005 - 20:01 #7
Hvis Dato2 er Tabel2.ForUdvDato, så kan jeg ikke se noget galt her.
Avatar billede pote Nybegynder
18. januar 2005 - 21:33 #8
Sorry. Det omhandlede Dato2 felt er i ovenstående kode feltet:ForUdvDato.
Avatar billede jasman Nybegynder
19. januar 2005 - 09:31 #9
Øhm ...

Koden:

EXTERN Tabel4
INTRODUCE Tabel4[VarenummerIdx,Tabel4.Produktionsnr]
IF Tabel4.L›benummer THEN
    IF Tabel2.ForUdvDato THEN
        IF NOT Tabel2.ForUdvVejer THEN
            SET Tabel2.ForUdvVejer = ForVejer
        ENDIF
    ENDIF
ENDIF

... ændrer jo ikke værdien på ForUdvDato (Dato2) feltet.
Så må man jo antage, at den værdi der står i feltet er den der bliver tastet ind !
Så hvis du mener at ForUdvDato feltet har en forkert værdi, er det brugeren af skærmbilledet der er problemet ikke koden - i hvert fald ikke den kode du har vist her.

Jeg har lavet følgende kode for lige at teste det du siger:

DATE        &D[4]
DATE        &D1[4]
INT        &I

SET &D[1]  = 20\12\2004
SET &D[2]  = 26\12\2004
SET &D1[1] = 07\12\2004
SET &D1[2] = 18\12\2004
SET &D1[3] = 14\12\2004
SET &D1[4] = 20\12\2004

#LOOP(&I,1,4)
    IF &I > 1 THEN
        PRINT "DATO1: ",&D[&I]," ",DATE2NUM(&D[&I])  ," forskel ",&d[&I]-&d[&I-1]
        PRINT "DATO2: ",&D1[&I]," ",DATE2NUM(&D1[&I])," forskel ",&d1[&I]-&d[&I-1]
    ELSE
        PRINT "DATO1: ",&D[1]," ",DATE2NUM(&D[1])
        PRINT "DATO2: ",&D1[1]," ",DATE2NUM(&D1[1])
    ENDIF
END
PAUSE

Koden udskriver de dato du nævnte samt deres numeriske værdi, og en evt. forskel
mellem den nuværende numeriske værdi og den forrige for samme variabel.
Forskellen udskriver jeg for at se om jeg kunne finde et mønster i forskellene (m.h.t. om der er tale om et subtotal problem).


Og resultatet bliver:

DATO1: 20/12-04 39339
DATO2: 07/12-04 38326
DATO1: 26/12-04 39345 forskel 6
DATO2: 18/12-04 38337 forskel -2
DATO1:                forskel -38345
DATO2: 14/12-04 38333 forskel -12
DATO1:                forskel
DATO2: 20/12-04 38339 forskel 38339

Så du har ret i at:
"Dato2 bliver forkert(feks. 07.12.04=38327; 18.12.04=38333; 14.12.04=38339; 20.12.04=38347; osv.)."

Så de korrekte værdier for dato2 for de givne datoer
07.12.04=38327; 18.12.04=38333; 14.12.04=38339; 20.12.04=38347; er:
        38326;          38337;          38333;          38339
forskel    -1              +4              -6              -8

Er der noget kode et andet sted, som Adderer noget til værdien i Dato2 INDEN den bliver udskrevet ???

Kunne man evt. få en eksport af tabellen, rapporten og formen at se/tilsendt ?
Avatar billede pote Nybegynder
22. januar 2005 - 13:04 #10
Så har jeg fået løst mit problem. Jeg havde en #Rep_Execute(x)i rapporten. På een af disse havde jeg en kartoteksreference -det var åbenbart problemet. Mærkeligt at rapp. har kørt udmærket i næsten et år. Fejlen blev ikke konstateret i C5W32.exe men
ved afvikling med C5W32C.exe kom fejlen. Efterfølgende har jeg testet med kartoteksreference igen på #Rep_Execute(x) -rapporten kører!
Avatar billede jasman Nybegynder
22. januar 2005 - 15:02 #11
Hurra !
Avatar billede pote Nybegynder
23. januar 2005 - 12:29 #12
Tak for kommentarerne!
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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