Avatar billede ixus Nybegynder
08. juni 2007 - 10:27 Der er 13 kommentarer og
2 løsninger

Skift af regnskab i GUI vs. konsol; langsommere mv.

Scenariet er to regnskaber, hvor en del kartoteker er delt imellem disse regnskaber, og andre er ikke. I dette scenarie er OrdKart sat til delt, og DebKart er ikke delt. Ideen er at der skal faktureres i DAT, men der skal ske et skifte til det andet regnskab, således det foregår korrekt.

I konsolversionen virker det fint, og der skiftes som lynet. Men i GUI versionen tager det en hel del længere tid, og det er kernen i mit spørgsmål; hvorfor tager det så meget længere tid? Man kan tydeligt se der bliver skiftet i GUI, menuer osv. bliver opdateret hver gang der skiftes. Det kunne man leve med hvis det sker få gange, men hvis det skal ske over 200 gange pr. dag, får man hurtigt brændt tid af!

Ligeså, jeg har bemærket at der er forskel på GUI og konsol versionen, når det drejer sig om 'automatiske' skift mellem regnskaber. Dvs. fakturer jeg i konsolversionen, får jeg det korrekte regnskab vist i en PRINT (ved brug af #Db_Dictionary(EXT)), og i GUI får jeg et forkert regnskab, nemlig DAT. Det er fuldstændig den samme søgning der køres, men den giver så bare et forskelligt resultat!

Versionen er V400 SP1 #22 HF001 #1 16012 og den kører på SQL.
Avatar billede Broholm Novice
08. juni 2007 - 10:32 #1
Se XAL.DevInfoInit linie 154 ff for, hvordan du skifter regnskab korrekt i GUI versionen.

-Broholm
Avatar billede ixus Nybegynder
08. juni 2007 - 11:37 #2
Tak for det tip! Om end, hvad er grunden til der skal skiftes forskelligt? Er det PARM der ikke kommer med korrekt?

Mht. hastigheden af skiftet i GUI, kan man gøre noget ved sagen der?
Avatar billede Broholm Novice
08. juni 2007 - 12:33 #3
Jeg tror at det har noget at gøre med at man i GUI versionen jo kan finde vinduer frem som ligger "bagved" - og hvilket regnskab skal de så køre i, hvis brugeren klikker på dem? Derfor skal man skifte regnskab "globalt" i stedet for bare det aktuelle element. Men det er bare min teori - jeg kunne tage fejl :-)

Jeg har ikke oplevet at skiftet i GUI skulle være langsommere end Console, men omvendt har jeg heller ikke skulle lave sådan en regnskabs-stafet, som du har gang i der.
Avatar billede ixus Nybegynder
08. juni 2007 - 12:56 #4
Den teori vil jeg faktisk godt købe, lidt de samme tanker har jeg haft om det.

I samme åndedrag kan jeg så næsten konkludere, at det bliver alvorligt underholdende, at undgå de element opdatering, reelt set er man jo nødt til at lukke dem, når der staffeteres.

Mht. DevInfoInit - hvad er grunden til der er en version for GUI og en for konsol?
Avatar billede Broholm Novice
08. juni 2007 - 14:32 #5
Aner det ikke... Jeg bruger den kun fra Console, men kopierer altid koden, hvis jeg skal lave noget der skal skifte regnskab.
Avatar billede henning-kilroy Nybegynder
18. juni 2007 - 09:39 #6
Jeg har også brugt metoden fra XAL.DevInfoInit.
Et problem med 'Midlertidigt index aktivt' blev klaret med en PRINT uden PAUSE.
Men der er en masse blinkeri når der skiftes regnskab i GUI. Kan man undgå det ?
Avatar billede Broholm Novice
18. juni 2007 - 10:06 #7
Alt det blinkeri kommer af at brugerprofilerne skal opdateres.

Kan ikke lige teste det, men prøv med:

SET &Func = #FuncDBDOpret

PROCESS #Proc_DbChange osv....

SET &Func = #FuncNULL
Avatar billede henning-kilroy Nybegynder
19. juni 2007 - 08:32 #8
Det med &Func hjælper ikke.  Hvad kan man eller gøre med 'Brugerprofil'?
Avatar billede hh_fisk Nybegynder
25. juni 2007 - 13:50 #9
Den med "PRINT uden PAUSE", kan du forklare hvor den skal stå ?

Jeg sidder med XAL og har lavet kode i Stocksum(lagerbeholdninger) der slår op i andet regnskab, men når brugeren kommer via debitor/restordre(ctr-alt-f4) går det galt med advarselen "Der kan ikke skiftes datafil, når et midlertigt index er ibrug", fordi formen SalesTransBack bruges med både extern Debitor og extern Lager, og derfor bruger midlertidigt index.
Avatar billede Broholm Novice
25. juni 2007 - 14:31 #10
"extern Debitor og extern Lager, og derfor bruger midlertidigt index." <--- Forklar lige den der.
Avatar billede hh_fisk Nybegynder
25. juni 2007 - 15:53 #11
..... jeg troede I kunne regne resten ud, =;-)

Der er selvfølgelig mere... koden ser sådan ud:

EXTERN StockTable
EXTERN DebTable
IF NOT DebTable.RecId THEN
    SET &Searching = 1
    IF NOT StockTable.RecId THEN
        SET &Searching = 2
    ENDIF
ENDIF

IF &Searching <> 2 THEN
    #GetTempId(&IndexID)
    IF &Searching == 0 THEN
        #Frm_CREIDX(SalesTrans,'Tmp'+Num2Str(&IndexID,0,0,0,0),DebtorAccount,ConfirmedDel)
    ELSE
    IF &Searching == 1 THEN
        #Frm_CREIDX(SalesTrans,'Tmp'+Num2Str(&IndexID,0,0,0,0),ItemNumber,ConfirmedDel)
    ENDIF ENDIF
    #CheckCREIDX
ENDIF

Men det er egentlig ligemeget, humlen er at så længe skærmbilledet er åbent er der et midlertidigt index i brug og så bliver datafilsskift ikke tilladt.

Henning_Kilroy skrev at det havde han løst med en PRINT uden PAUSE ???? og det kunne jeg godt tænke mig at vide hvor det var. Jeg prøvede at lave en PRINT "" lige inden min PROCESS #Proc_...... men det hjalp ikke.

Nu har jeg lavet en DELINDX i event-triggeren og nulstillet &IndexId og er så blevet nødt til at lave hele inittriggeren i SalesTranBack formen (prerecord) for at få genetableret posterne når brugerne vender tilbage. Det er bare lidt omstændigt og jeg risikere at skulle omprogrammere en masse skærmbilleder på den måde, så hvis der fandtes en smartere løsning.... ?
Avatar billede Broholm Novice
25. juni 2007 - 16:04 #12
Okay - jeg var bare bange for at du måske havde antagelsen om at en EXTERN lavede et tmp-index. :-)

Jeg kan komme på 3 andre løsninger:

1) Enten at læse/cache posterne i det andet regnskab inden det temporære index laves.
2) På SQL har du selvfølgelig muligheden for at læse posterne fra det andet regnskab direkte fra databasen vha. SQLSelect/READ AS SQL.
3) Lav et kartotek "Kun i DAT" med de felter du skal bruge + et felt til regnskabet og hold det synkroniseret fra de andre regnskaber
Avatar billede henning-kilroy Nybegynder
25. juni 2007 - 21:08 #13
I det fremmede regnskab startede jeg QTX OrdFaktura. I øverste pre-body startede jeg med en PRINT. Det så senere overskrives af XAL OrdFaktura.
Avatar billede henning-kilroy Nybegynder
25. juni 2007 - 21:12 #14
Hvis jeg skal skifte regnskab mens en Form er i gang har jeg samlet op i et TMP kartotek, og så i Exit efter sletning af TmpIndex, skiftet regnskab og brugt data i den opsamlede TMP.
Avatar billede hh_fisk Nybegynder
27. juni 2007 - 12:25 #15
Tak til jer begge for jeres kommentarer.

Det er sådan set også løsning 3 jeg bruger. Jeg kan desværre ikke skrive SQL ellers kunne 2 være rar at kunne (det må skrives på min "things to learn" liste).

Nyt lille problem, jeg har lavet kode til synkronisering på post-update og post-insert på StockTable(lagkart). Men men, ved opdateringer (faktura,lagerkladder etc.) arbjedes der under TTS og de tillades heller ikke ved datafilsskift, der er vist ikke noget der bliver nemt i denne her opgave =;-)

PS. Hvis der sidder en der lige kan ryste 3 eks. med SQL(C5/XAL) ud af ærmet er jeg en glad modtager. Jeg skal sådan set bare kunne læse en record, oprette/rette en record og evt. slette en record).
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