“En fugl på taget i et glashus går over åen efter sand”

Ordsproget i overskriften er lige så unøjagtigt citeret som Klassisk Dynamics C5s lagerstatus (InvenStatus.REP) KAN være. I hvert fald hvis du kører C5 på SQL-databasen og kører lagerstatus samtidigt med at dine kolleger arbejder i C5. Og vel og mærke bestiller lagerstatus pr. en historisk dato (altså ikke dags dato).

Standard lagerstatusudskriften i Klassisk Dynamics C5 er nemlig lavet lidt kringlet – formentligt af performancehensyn. Den tager nemlig beholdninger pr. dags dato og regner så baglæns tilbage til den dato du har bestilt udskriften per. Og det gør den desværre uden at låse for opdateringer og dermed tage højde for at der samtidigt indsættes lagerposter.

I praksis betyder det at man risikerer at resultatet ganske simpelt bliver forkert.

Fejlen kan relativt let genskabes ved at køre følgende kode i en Klassisk Dynamics C5 med DMO-regnskab, samtidigt med at lagerstatus køres i samme regnskab for samme vare (20-11) pr. en historisk dato (fx 6/1-2011):

// Lagerstatus for 20-11 pr. 06.01.2011 skal være 50 stk. uanset at nedenstående kører
INT &Qty
PRINT TODAY(),' ',Time2Str(Timenow(),2,2),' STARTET'
WHILE 1
    #Add(&Qty,1)
    TTSBEGIN InvenTrans
    INTRODUCE InvenTrans
    SET InvenTrans.ItemNumber      = '20-11'
    SET InvenTrans.Date_           = today()
    SET InvenTrans.Qty             = 100
    INSERT InvenTrans
    TTSCOMMIT InvenTrans
    PRINT TODAY(),' ',Time2Str(Timenow(),2,2),' ',&Qty
END

ADVARSEL: Du skal IKKE køre ovenstående i dit driftsregnskab. Det er kun til brug i et DMO-regnskab du ikke bruger / sletter efterfølgende.

Lagerstatus vil i det tilfælde stort set give forskelligt resultat hver gang den køres. Stoppes kørslen igen, vil Lagerstatus blive korrekt.

Bemærk at ovenstående kode indsætter lagerposter pr. d.d., men at det alligevel (mens den kører) påvirker lagerstatus på varen pr. en historisk dato (fx 6/1-2011). Vi er naturligvis klar over at de lagerposter der indsættes i ovenstående er ret konstruerede – det er kun for at gøre det mere overskueligt og tydeliggøre problemet. Fejlen optræder naturligvis også med “rigtige” lagerposter.

Vi har kunnet genskabe fejlen i Klassisk Dynamics C5 2012 uden servicepacks, men med hotfix 1, samt nyeste Klassisk Dynamics C5 2012, servicepack 2, hotfix 6, men det er formentligt også galt med ældre versioner.

Vi har naturligvis netop meldt fejlen ind til Microsoft, så vi kan få den løst i en fremtidig opdatering af Klassisk Dynamics C5.

Indtil den rettelse er klar og du får den lagt ind, vil anbefalingen herfra være KUN at køre lagerstatus pr. en historisk dato, hvis du er alene i Klassisk Dynamics C5 til SQL.