Squash al branch-ului de lucru plan13-s2. Clase: ofacturare (nucleul formularului unificat), ofacturare_comun, ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de cautare), omodificari. Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie si cota standard de TVA cand articolul nu are cota pe politica. Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte proiecte sunt rezolvate pastrand ambele parti. Loguri de rulare a testelor scoase din versionare; testele raman. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
783 lines
31 KiB
Plaintext
783 lines
31 KiB
Plaintext
* test_s8_cablare_incarcare.prg
|
|
* Headless: proba cablarii incarcarii in masa pe frm_facturare_articole2 (S8, propunerea
|
|
* docs\propunere_s8_cablare_incarcare_v2.md sectiunea 7). Testul apasa BUTONUL
|
|
* (but_incarca_articole.Click(), care trece prin _cmd_base.Click si macro-expandeaza cAction),
|
|
* niciodata metoda do_incarca_articole direct - veriga de rutare era exact ce lipsea in probele
|
|
* anterioare.
|
|
*
|
|
* Asertiuni (A1-A10 din sectiunea 7.2, plus cele doua structurale de rutare din 7.1):
|
|
* A1 but_incarca_articole.cAction = 'do_incarca_articole' (+ PEMSTATUS do_adauga_tot pe instanta)
|
|
* A2 dupa Click: Reccount('crsarticole') > 0
|
|
* A3 dupa Click: Reccount('crsfactura') > 0 <- trece datorita cablarii (W1)
|
|
* A4 Reccount('crsfactura') = Reccount('crsarticole') (comanda fara linii sarite)
|
|
* A5 zero linii cu id_jtva_coloana = 0 in crsfactura <- trece datorita W3
|
|
* A6 SUM(valctva) din crsfactura > 0
|
|
* A7 comanda cu linie de discount (cantitate negativa): zero apeluri amessagebox <- W2
|
|
* A8 neregresie tip 1 (lista de preturi, llCautareInLinie): crsfactura ramane gol
|
|
* A9 garda de tipuri, contract (tip 2): crsfactura ramane gol SI zero amessagebox
|
|
* A11 taxcode din crsfactura = valoarea derivata de cod <- trece datorita W4
|
|
* A10 emitere reala prin but_termin1.Click(): rand in VANZARI cu TIP = 3 si
|
|
* VANZARI_DETALII.ID_JTVA_COLOANA > 0 pe toate liniile (numai daca A1-A9 sunt verzi)
|
|
*
|
|
* Sursele se aleg din date la rulare (SELECT peste COMENZI + apel pack_facturare.cursor_comanda,
|
|
* exact interogarea folosita de incarca_cursor_articole) - id-urile fixe nu tin: o comanda emisa
|
|
* de o rulare anterioara intoarce 0 linii la urmatoarea (2478/2479, consumate la S6-2).
|
|
* sursa A (A2-A6, A10): comanda fara linii cu cantitate negativa si cu id_c distincte
|
|
* sursa B (A7): comanda cu cel putin o linie negativa, toate negativele negestionabile
|
|
* Clientii cu 'CLIENT' in nume sunt exclusi: valideaza_antet (ofacturare_antet.prg:881) deschide
|
|
* pentru ei dialogul "in loc de BON FISCAL", care ar polua asertiunile de zero-amessagebox.
|
|
*
|
|
* Mock: mock_validare_antet.prg (amessagebox + facturi_duplicate -> gcMockApeluri). amessagebox e
|
|
* apelat din interiorul unei metode .vcx, deci se reincarca cu SET PROCEDURE ... ADDITIVE imediat
|
|
* inainte de fiecare Click; nu se probeaza precedenta mock-ului chemand amessagebox direct.
|
|
*
|
|
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s8_cablare_incarcare.prg"
|
|
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s8_cablare_incarcare.log
|
|
* Mediu: ROA_CENTRAL / MARIUSM_AUTO; gnIdUtil = 8 (inainte de creeaza_cursor_serii);
|
|
* gnIdSucursala = 167; gnScadereStoc = 0; gnFactSeturi = 0.
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
SET NOTIFY OFF
|
|
SET DELETED ON
|
|
SET EXACT ON
|
|
SET CENTURY ON
|
|
SET DATE DMY
|
|
SET DECIMALS TO 4
|
|
SET NULLDISPLAY TO ''
|
|
CLOSE DATABASES
|
|
|
|
PUBLIC gcLog, gnPass, gnFail, gnErr, gcCaz, gcMock, gcNumere
|
|
PUBLIC gcMockApeluri, gnMockRaspuns, gcMockDuplicat
|
|
PUBLIC gnComandaA, gnComandaB, goDriverMsg, gcClaseVazute
|
|
|
|
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s8_cablare_incarcare.log"
|
|
IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out")
|
|
MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out"
|
|
ENDIF
|
|
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
|
gnPass = 0
|
|
gnFail = 0
|
|
gnErr = 0
|
|
gcCaz = ""
|
|
gcMockApeluri = ""
|
|
gnMockRaspuns = 6
|
|
gcMockDuplicat = ""
|
|
gnComandaA = 0
|
|
gnComandaB = 0
|
|
gcClaseVazute = ";"
|
|
gcNumere = ""
|
|
gcMock = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\mock_validare_antet.prg"
|
|
|
|
*-- poDate & co. se declara SI se initializeaza la nivelul programului principal: metodele din
|
|
*-- .vcx le vad numai daca variabila exista deja pe stiva de sub ele. Un PRIVATE declarat intr-o
|
|
*-- procedura si asignat in alta ramane invizibil in forma (eroarea "Alias 'PODATE' is not found").
|
|
PRIVATE poDate, poGeneratorNumere, poDateGestiuneDest, pnTotalDiscountAvize, plVizibil
|
|
poDate = NULL
|
|
poGeneratorNumere = NULL
|
|
poDateGestiuneDest = NULL
|
|
pnTotalDiscountAvize = 0
|
|
plVizibil = .F.
|
|
|
|
ON ERROR DO S8Err WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
TRY
|
|
*-- stub_verificare PRIMUL: "Do Form verificare" (ofacturare.vc2:20126) rezolva la stub, nu la
|
|
*-- formularul real. test_init_env_auto_roafacturare.prg:78 adauga ADDITIV, deci nu-l pierde.
|
|
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\achizitie_import\stub_verificare"
|
|
|
|
DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
|
IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0
|
|
DO S8Log WITH 'EROARE: conectare Oracle esuata'
|
|
DO S8Final
|
|
ENDIF
|
|
SQLSETPROP(gnHandle, "QueryTimeOut", 45)
|
|
DO S8Log WITH 'ENV OK gnHandle=' + TRANSFORM(gnHandle) + ' gcS=' + gcS
|
|
DO S8Log WITH 'DIAG SET_PATH stub inca in fata: ' + FULLPATH('verificare.scx')
|
|
|
|
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE
|
|
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras\gridextras.vcx" ADDITIVE
|
|
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\clase\_cb_base.vcx" ADDITIVE
|
|
SET PROCEDURE TO (gcMock) ADDITIVE
|
|
|
|
IF !actualizeaza_optiuni_program()
|
|
DO S8Log WITH 'EROARE: actualizeaza_optiuni_program()'
|
|
DO S8Final
|
|
ENDIF
|
|
gnScadereStoc = 0
|
|
gnFactSeturi = 0
|
|
gnIdSucursala = 167
|
|
goExecutor.oExecuta([begin pack_contafin.set_id_sucursala(?gnIdSucursala); end;])
|
|
gnIdUtil = 8
|
|
goExecutor.oExecuta([begin pack_sesiune.set_Id_Util(?gnIdUtil); end;])
|
|
DO S8Log WITH 'optiuni OK gnScadereStoc=' + TRANSFORM(gnScadereStoc) + ' gnFactSeturi=' + TRANSFORM(gnFactSeturi) + ;
|
|
' gnIdSucursala=' + TRANSFORM(gnIdSucursala) + ' gnIdUtil=' + TRANSFORM(gnIdUtil) + ;
|
|
' gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna)
|
|
|
|
update_jtva_coloane([JV], [jtva_coloane_temp])
|
|
update_saft_taxtable()
|
|
|
|
*-- cboTipFactura cere RowSource pe saft_tip_facturi la constructia formularului
|
|
IF !USED('saft_tip_facturi')
|
|
CREATE CURSOR saft_tip_facturi (cod N(3) NULL, tip_saftname C(200) NULL)
|
|
INSERT INTO saft_tip_facturi (cod, tip_saftname) VALUES (NULL, '')
|
|
INDEX ON cod TAG cod
|
|
ENDIF
|
|
|
|
*-- confirmarile pe forma modala MESSAGEBOX_FORM (ex. "Doriti sa se inchida comanda?" la tip 3)
|
|
*-- nu trec prin functia amessagebox, deci mock-ul nu le acopera - timer + driver, ca la S6-2
|
|
goDriverMsg = CREATEOBJECT('driverMsgS8')
|
|
_SCREEN.AddObject('tmrS8', 'Timer')
|
|
_SCREEN.tmrS8.Interval = 200
|
|
BINDEVENT(_SCREEN.tmrS8, 'Timer', goDriverMsg, 'Executa')
|
|
_SCREEN.tmrS8.Enabled = .T.
|
|
|
|
DO S8Log WITH CHR(13) + CHR(10) + '===== ALEGEREA SURSELOR DIN DATE ====='
|
|
DO AlegeSurse
|
|
|
|
DO S8Log WITH CHR(13) + CHR(10) + '===== A1 + rutare (structural, fara rulare de sursa) ====='
|
|
DO CazRutare
|
|
|
|
DO S8Log WITH CHR(13) + CHR(10) + '===== A7 - comanda cu linie de discount (cantitate negativa) ====='
|
|
DO CazDiscount
|
|
|
|
DO S8Log WITH CHR(13) + CHR(10) + '===== A8 - neregresie tip 1 (lista de preturi) ====='
|
|
DO CazListaPreturi
|
|
|
|
DO S8Log WITH CHR(13) + CHR(10) + '===== A9 - garda de tipuri, contract (tip 2) ====='
|
|
DO CazContract
|
|
|
|
DO S8Log WITH CHR(13) + CHR(10) + '===== A2-A6 (+ A10) - comanda curata ====='
|
|
DO CazComanda
|
|
|
|
DO S8Final
|
|
|
|
CATCH TO loExc
|
|
DO S8Log WITH 'CATCH TOP-LEVEL ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ;
|
|
' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
|
DO S8Final
|
|
ENDTRY
|
|
|
|
QUIT
|
|
|
|
*==================================================================================
|
|
* AlegeSurse: scaneaza comenzile descrescator si cheama pack_facturare.cursor_comanda (aceeasi
|
|
* interogare pe care o face incarca_cursor_articole) pana gaseste ambele surse.
|
|
PROCEDURE AlegeSurse
|
|
LOCAL lnQ, lnCnt, lnNeg, lnNegGest, lnDistinctIdC, lnIncercari
|
|
|
|
poDate = CREATEOBJECT('empty')
|
|
ADDPROPERTY(poDate, 'zi_curs', DATE(gnAn, gnLuna, 1))
|
|
ADDPROPERTY(poDate, 'tip', 3)
|
|
ADDPROPERTY(poDate, 'listaid', '')
|
|
|
|
lnQ = goExecutor.oExecute([select c.id_comanda, p.nume from comenzi c, nom_parteneri p ] + ;
|
|
[where c.id_part = p.id_part and upper(p.nume) not like '%CLIENT%' order by c.id_comanda desc], 'crsComLista')
|
|
IF lnQ < 0 OR !USED('crsComLista')
|
|
DO Assert WITH .F., 'lista de comenzi citita din Oracle: ' + TRANSFORM(goExecutor.oPrelucrareEroare())
|
|
RETURN
|
|
ENDIF
|
|
|
|
lnIncercari = 0
|
|
SELECT crsComLista
|
|
SCAN WHILE lnIncercari < 80 AND (gnComandaA = 0 OR gnComandaB = 0)
|
|
lnIncercari = lnIncercari + 1
|
|
poDate.listaid = ALLTRIM(TRANSFORM(crsComLista.id_comanda))
|
|
DO Inchide WITH 'crsAlegere'
|
|
lnQ = goExecutor.oExecute([{call ] + gcS + [.pack_facturare.cursor_comanda(?poDate.zi_curs,?poDate.tip,?poDate.listaid,?gnIdUtil)}], 'crsAlegere')
|
|
IF lnQ >= 0 AND USED('crsAlegere') AND RECCOUNT('crsAlegere') > 0
|
|
SELECT crsAlegere
|
|
lnCnt = RECCOUNT('crsAlegere')
|
|
COUNT FOR cantitate < 0 TO lnNeg
|
|
COUNT FOR cantitate < 0 AND NVL(gestionabil, 0) = 1 TO lnNegGest
|
|
SELECT DISTINCT id_c FROM crsAlegere INTO CURSOR crsIdC
|
|
lnDistinctIdC = RECCOUNT('crsIdC')
|
|
USE IN crsIdC
|
|
DO CASE
|
|
CASE gnComandaA = 0 AND lnNeg = 0 AND lnDistinctIdC = lnCnt
|
|
gnComandaA = crsComLista.id_comanda
|
|
DO S8Log WITH ' sursa A = comanda ' + TRANSFORM(gnComandaA) + ' (linii=' + TRANSFORM(lnCnt) + ', fara negative, id_c distincte)'
|
|
CASE gnComandaB = 0 AND lnNeg > 0 AND lnNegGest = 0
|
|
gnComandaB = crsComLista.id_comanda
|
|
DO S8Log WITH ' sursa B = comanda ' + TRANSFORM(gnComandaB) + ' (linii=' + TRANSFORM(lnCnt) + ', negative=' + ;
|
|
TRANSFORM(lnNeg) + ', toate negestionabile)'
|
|
ENDCASE
|
|
ENDIF
|
|
SELECT crsComLista
|
|
ENDSCAN
|
|
DO Inchide WITH 'crsAlegere'
|
|
DO Inchide WITH 'crsComLista'
|
|
DO S8Log WITH ' comenzi inspectate=' + TRANSFORM(lnIncercari)
|
|
DO Assert WITH gnComandaA > 0, 'sursa A (comanda tip 3 fara linii negative) gasita in date'
|
|
IF gnComandaB = 0
|
|
DO S8Log WITH ' ATENTIE: nicio comanda cu linie de discount negestionabila in primele ' + ;
|
|
TRANSFORM(lnIncercari) + ' comenzi - A7 ramane NEEXERCITATA pe date'
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* A1 + asertiunile structurale de rutare (sectiunea 7.1): butonul duce la metoda, iar metoda
|
|
* care muta liniile exista pe instanta v2.
|
|
PROCEDURE CazRutare
|
|
LOCAL loForm
|
|
gcCaz = '[A1] '
|
|
DO CuratieCrs
|
|
DO creeaza_facturacrs WITH 'crsfactura'
|
|
poDate = CREATEOBJECT("oDateFactura", 25002, 3)
|
|
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
|
|
loForm = CREATEOBJECT('frm_facturare_articole2')
|
|
IF VARTYPE(loForm) <> 'O'
|
|
DO Assert WITH .F., 'Createobject frm_facturare_articole2'
|
|
RETURN
|
|
ENDIF
|
|
DO Assert WITH LOWER(ALLTRIM(loForm.but_incarca_articole.cAction)) == 'do_incarca_articole', ;
|
|
'[RUTARE] butonul Incarca articole duce la do_incarca_articole (cAction=[' + ;
|
|
ALLTRIM(TRANSFORM(loForm.but_incarca_articole.cAction)) + '])'
|
|
DO Assert WITH PEMSTATUS(loForm, 'do_adauga_tot', 5), ;
|
|
'[RUTARE] metoda do_adauga_tot exista pe instanta v2'
|
|
loForm.Release()
|
|
RELEASE loForm
|
|
DO CuratieCrs
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* A2-A6 pe sursa A, apoi A10 (emitere reala) daca tot ce s-a rulat pana aici e verde.
|
|
PROCEDURE CazComanda
|
|
LOCAL loSursa, loForm, lnArt, lnFact, lnZero, lnSuma, lnFailInainte, lnIdVz, lcSerie, lnNract
|
|
LOCAL lnRau, lnNenul, lnAstept, llSaft
|
|
|
|
gcCaz = '[A2-A6] '
|
|
IF gnComandaA = 0
|
|
DO Assert WITH .F., 'A2-A6: nu exista sursa A aleasa - cazul nu s-a rulat'
|
|
RETURN
|
|
ENDIF
|
|
lnFailInainte = gnFail
|
|
|
|
loSursa = CreeazaSursaComanda(gnComandaA)
|
|
IF ISNULL(loSursa)
|
|
DO Assert WITH .F., 'sursa A citita din Oracle (id_comanda=' + TRANSFORM(gnComandaA) + ')'
|
|
RETURN
|
|
ENDIF
|
|
|
|
loForm = PregatesteFormular(3, loSursa)
|
|
IF ISNULL(loForm)
|
|
RETURN
|
|
ENDIF
|
|
|
|
DO ApasaIncarca WITH loForm
|
|
|
|
lnArt = IIF(USED('crsarticole'), RECCOUNT('crsarticole'), 0)
|
|
lnFact = IIF(USED('crsfactura'), RECCOUNT('crsfactura'), 0)
|
|
DO S8Log WITH ' dupa Click: crsarticole=' + TRANSFORM(lnArt) + ' crsfactura=' + TRANSFORM(lnFact)
|
|
|
|
DO Assert WITH lnArt > 0, 'A2: Reccount(crsarticole) > 0 dupa Click, e=' + TRANSFORM(lnArt)
|
|
DO Assert WITH lnFact > 0, 'A3: Reccount(crsfactura) > 0 dupa Click (cablarea W1), e=' + TRANSFORM(lnFact)
|
|
DO Assert WITH lnFact = lnArt, 'A4: Reccount(crsfactura) = Reccount(crsarticole), ' + ;
|
|
TRANSFORM(lnFact) + ' vs ' + TRANSFORM(lnArt)
|
|
|
|
lnZero = -1
|
|
lnSuma = 0
|
|
IF lnFact > 0
|
|
SELECT crsfactura
|
|
COUNT FOR NVL(id_jtva_coloana, 0) = 0 TO lnZero
|
|
SUM valctva TO lnSuma
|
|
ENDIF
|
|
DO Assert WITH lnZero = 0, 'A5: zero linii cu id_jtva_coloana = 0 in crsfactura (W3), e=' + TRANSFORM(lnZero)
|
|
DO Assert WITH lnSuma > 0, 'A6: SUM(valctva) din crsfactura > 0, e=' + TRANSFORM(lnSuma)
|
|
|
|
*-- A11 (W4): taxcode ajunge in crsfactura cu exact valoarea pe care o deriva codul, nu "nenul".
|
|
*-- frm_articol_factura.Init cheama UpdateExplicatieSAFT doar sub If m.gl406 (ofacturare.vc2:2523),
|
|
*-- iar GetTaxCode intoarce NULL daca gl406 e stins - deci fara SAFT valoarea legitima e 0 (din
|
|
*-- AddProperty), nu un cod. Asteptarea se calculeaza cu aceeasi functie, ramura cu ramura.
|
|
*-- Fara W4 taxcode nu e in listele Gather, deci ramane NULL pe fiecare rand: -999 <> asteptat.
|
|
llSaft = (TYPE('gl406') = 'L' AND gl406)
|
|
lnRau = 0
|
|
lnNenul = 0
|
|
IF lnFact > 0
|
|
SELECT crsfactura
|
|
SCAN
|
|
lnAstept = IIF(m.llSaft, NVL(GetTaxCode(gnAn, gnLuna, poDate.dataact, NVL(crsfactura.id_jtva_coloana, 0), .F.), -999), 0)
|
|
IF NVL(crsfactura.taxcode, -999) <> m.lnAstept
|
|
lnRau = lnRau + 1
|
|
DO S8Log WITH ' A11 nepotrivire: id_jtva_coloana=' + TRANSFORM(NVL(crsfactura.id_jtva_coloana, 0)) + ;
|
|
' taxcode=' + TRANSFORM(crsfactura.taxcode) + ' asteptat=' + TRANSFORM(m.lnAstept)
|
|
ENDIF
|
|
IF NVL(crsfactura.taxcode, 0) <> 0
|
|
lnNenul = lnNenul + 1
|
|
ENDIF
|
|
ENDSCAN
|
|
ENDIF
|
|
DO S8Log WITH ' A11: gl406=' + TRANSFORM(m.llSaft) + ' linii cu taxcode nenul=' + TRANSFORM(lnNenul) + '/' + TRANSFORM(lnFact)
|
|
DO Assert WITH lnFact > 0 AND lnRau = 0, ;
|
|
'A11: taxcode din crsfactura = valoarea derivata de cod (W4), linii nepotrivite=' + TRANSFORM(lnRau)
|
|
IF lnNenul = 0
|
|
DO S8Log WITH ' A11 ATENTIE: toate liniile au taxcode 0 - asertiunea e conforma cu codul, dar ' + ;
|
|
'NU exercita culegerea unei valori reale (gl406 stins sau explicatii SAFT neconfigurate)'
|
|
ENDIF
|
|
|
|
*-- A10: numai daca tot lantul A1-A9 e verde (sectiunea 7.2)
|
|
IF gnFail = 0 AND lnFailInainte = 0
|
|
gcCaz = '[A10] '
|
|
lcSerie = ALLTRIM(NVL(poDate.serie_act, ''))
|
|
lnNract = poDate.nract
|
|
DO S8Log WITH ' A10: emit cu serie_act=' + lcSerie + ' nract=' + TRANSFORM(lnNract)
|
|
loForm.do_calculeaza_totaluri()
|
|
DOEVENTS FORCE
|
|
SET PROCEDURE TO (gcMock) ADDITIVE
|
|
gcMockApeluri = ''
|
|
loForm.but_termin1.Click()
|
|
DOEVENTS FORCE
|
|
lnIdVz = NVL(poDate.nid_vanzare, 0)
|
|
DO S8Log WITH ' A10: but_termin1.Click() -> poDate.nid_vanzare=' + TRANSFORM(lnIdVz)
|
|
DO S8Log WITH ' A10: apeluri amessagebox = [' + STRTRAN(ALLTRIM(gcMockApeluri), CHR(13) + CHR(10), ' | ') + ']'
|
|
IF lnIdVz > 0
|
|
gcNumere = gcNumere + 'SCRIS serie=' + lcSerie + ' nract=' + TRANSFORM(lnNract) + ' id_vanzare=' + TRANSFORM(lnIdVz) + ';'
|
|
DO VerificaVanzare WITH lnIdVz
|
|
ELSE
|
|
gcNumere = gcNumere + 'ARS serie=' + lcSerie + ' nract=' + TRANSFORM(lnNract) + ' (alocat, nescris);'
|
|
DO Assert WITH .F., 'A10: documentul s-a scris (poDate.nid_vanzare > 0), e=' + TRANSFORM(lnIdVz)
|
|
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
|
ENDIF
|
|
ELSE
|
|
DO S8Log WITH ' A10 NERULAT: exista esecuri anterioare (fail=' + TRANSFORM(gnFail) + ')'
|
|
gcNumere = gcNumere + 'DEZALOCAT serie=' + ALLTRIM(NVL(poDate.serie_act, '')) + ' nract=' + TRANSFORM(poDate.nract) + ';'
|
|
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
|
ENDIF
|
|
|
|
DO Elibereaza WITH loForm
|
|
DO Goleste
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* A7: comanda cu linie de discount. Fara garda de gestionabilitate (W2), bucla din do_adauga_tot
|
|
* ajunge la dialogul "Nu ati selectat toata cantitatea"; cu garda, nu se cheama deloc amessagebox.
|
|
PROCEDURE CazDiscount
|
|
LOCAL loSursa, loForm, lnNeg
|
|
|
|
gcCaz = '[A7] '
|
|
IF gnComandaB = 0
|
|
DO S8Log WITH ' A7 NEEXERCITATA: nicio comanda cu linie de discount negestionabila in date'
|
|
RETURN
|
|
ENDIF
|
|
|
|
loSursa = CreeazaSursaComanda(gnComandaB)
|
|
IF ISNULL(loSursa)
|
|
DO Assert WITH .F., 'sursa B citita din Oracle (id_comanda=' + TRANSFORM(gnComandaB) + ')'
|
|
RETURN
|
|
ENDIF
|
|
|
|
loForm = PregatesteFormular(3, loSursa)
|
|
IF ISNULL(loForm)
|
|
RETURN
|
|
ENDIF
|
|
|
|
DO ApasaIncarca WITH loForm
|
|
|
|
lnNeg = 0
|
|
IF USED('crsfactura') AND RECCOUNT('crsfactura') > 0
|
|
SELECT crsfactura
|
|
COUNT FOR cantitate < 0 TO lnNeg
|
|
ENDIF
|
|
DO S8Log WITH ' dupa Click: crsarticole=' + TRANSFORM(IIF(USED('crsarticole'), RECCOUNT('crsarticole'), 0)) + ;
|
|
' crsfactura=' + TRANSFORM(IIF(USED('crsfactura'), RECCOUNT('crsfactura'), 0)) + ' din care negative=' + TRANSFORM(lnNeg)
|
|
DO S8Log WITH ' apeluri amessagebox = [' + STRTRAN(ALLTRIM(gcMockApeluri), CHR(13) + CHR(10), ' | ') + ']'
|
|
|
|
DO Assert WITH !('amessagebox' $ LOWER(gcMockApeluri)), ;
|
|
'A7: zero apeluri amessagebox pe comanda cu linie de discount (W2), jurnal=[' + ;
|
|
STRTRAN(ALLTRIM(gcMockApeluri), CHR(13) + CHR(10), ' | ') + ']'
|
|
DO Assert WITH lnNeg > 0, 'A7 (diagnostic): linia de discount a ajuns in crsfactura, negative=' + TRANSFORM(lnNeg)
|
|
|
|
gcNumere = gcNumere + 'DEZALOCAT serie=' + ALLTRIM(NVL(poDate.serie_act, '')) + ' nract=' + TRANSFORM(poDate.nract) + ' (A7);'
|
|
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
|
DO Elibereaza WITH loForm
|
|
DO Goleste
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* A8: tip 1 (lista de preturi) - llCautareInLinie sare peste incarcarea in masa, deci nici
|
|
* do_adauga_tot nu se cheama; crsfactura ramane gol.
|
|
PROCEDURE CazListaPreturi
|
|
LOCAL loForm, lnFact
|
|
|
|
gcCaz = '[A8] '
|
|
loForm = PregatesteFormular(1, NULL)
|
|
IF ISNULL(loForm)
|
|
RETURN
|
|
ENDIF
|
|
|
|
DO ApasaIncarca WITH loForm
|
|
|
|
lnFact = IIF(USED('crsfactura'), RECCOUNT('crsfactura'), 0)
|
|
DO S8Log WITH ' dupa Click: crsarticole=' + TRANSFORM(IIF(USED('crsarticole'), RECCOUNT('crsarticole'), 0)) + ;
|
|
' crsfactura=' + TRANSFORM(lnFact)
|
|
DO S8Log WITH ' apeluri amessagebox = [' + STRTRAN(ALLTRIM(gcMockApeluri), CHR(13) + CHR(10), ' | ') + ']'
|
|
DO Assert WITH lnFact = 0, 'A8: pe tip 1 (cautare in linie) crsfactura ramane gol dupa Click, e=' + TRANSFORM(lnFact)
|
|
DO Assert WITH !('nu ati ales' $ LOWER(gcMockApeluri)), ;
|
|
'A8: antetul a trecut validarea (Click-ul a ajuns la ramura llCautareInLinie, nu s-a oprit in valideaza_antet)'
|
|
|
|
gcNumere = gcNumere + 'DEZALOCAT serie=' + ALLTRIM(NVL(poDate.serie_act, '')) + ' nract=' + TRANSFORM(poDate.nract) + ' (A8);'
|
|
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
|
DO Elibereaza WITH loForm
|
|
DO Goleste
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* A9: contract (tip 2) - incarcarea in masa RULEAZA (crsarticole se umple), dar garda de tipuri
|
|
* din do_incarca_articole nu cheama do_adauga_tot; crsfactura ramane gol si nu apare niciun dialog.
|
|
* Contractul se alege incercand candidatii pe rand: unul fara linii ar declansa "Nu exista
|
|
* articole pentru optiunile alese!" din incarca_cursor_articole si ar strica asertiunea.
|
|
PROCEDURE CazContract
|
|
LOCAL lnI, llGasit
|
|
gcCaz = '[A9] '
|
|
|
|
IF goExecutor.oExecute([select ct.id_ctr from fact_vcontracte ct, nom_parteneri p ] + ;
|
|
[where ct.id_part = p.id_part and upper(p.denumire) not like '%CLIENT%' order by ct.id_ctr desc], 'crsCtrLista') < 0
|
|
DO Assert WITH .F., 'A9: lista de contracte citita din Oracle'
|
|
RETURN
|
|
ENDIF
|
|
|
|
llGasit = .F.
|
|
lnI = 0
|
|
SELECT crsCtrLista
|
|
SCAN WHILE lnI < 6 AND !llGasit
|
|
lnI = lnI + 1
|
|
llGasit = IncearcaContract(crsCtrLista.id_ctr)
|
|
SELECT crsCtrLista
|
|
ENDSCAN
|
|
DO Inchide WITH 'crsCtrLista'
|
|
IF !llGasit
|
|
DO Assert WITH .F., 'A9: niciun contract cu articole in primii ' + TRANSFORM(lnI) + ' candidati - cazul nu s-a exercitat'
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNCTION IncearcaContract
|
|
LPARAMETERS tnIdCtr
|
|
LOCAL loSursa, loForm, lnArt, lnFact
|
|
|
|
loSursa = CreeazaSursaContract(tnIdCtr)
|
|
IF ISNULL(loSursa)
|
|
RETURN .F.
|
|
ENDIF
|
|
loForm = PregatesteFormular(2, loSursa)
|
|
IF ISNULL(loForm)
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
DO ApasaIncarca WITH loForm
|
|
|
|
lnArt = IIF(USED('crsarticole'), RECCOUNT('crsarticole'), 0)
|
|
lnFact = IIF(USED('crsfactura'), RECCOUNT('crsfactura'), 0)
|
|
DO S8Log WITH ' contract ' + TRANSFORM(tnIdCtr) + ': crsarticole=' + TRANSFORM(lnArt) + ' crsfactura=' + TRANSFORM(lnFact)
|
|
|
|
IF lnArt > 0
|
|
DO S8Log WITH ' apeluri amessagebox = [' + STRTRAN(ALLTRIM(gcMockApeluri), CHR(13) + CHR(10), ' | ') + ']'
|
|
DO Assert WITH lnFact = 0, 'A9: pe tip 2 (contract) crsfactura ramane gol dupa Click - garda de tipuri, e=' + TRANSFORM(lnFact)
|
|
DO Assert WITH !('amessagebox' $ LOWER(gcMockApeluri)), ;
|
|
'A9: zero apeluri amessagebox pe contract, jurnal=[' + STRTRAN(ALLTRIM(gcMockApeluri), CHR(13) + CHR(10), ' | ') + ']'
|
|
ENDIF
|
|
|
|
gcNumere = gcNumere + 'DEZALOCAT serie=' + ALLTRIM(NVL(poDate.serie_act, '')) + ' nract=' + TRANSFORM(poDate.nract) + ' (A9 ctr ' + TRANSFORM(tnIdCtr) + ');'
|
|
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
|
DO Elibereaza WITH loForm
|
|
DO Goleste
|
|
RETURN (lnArt > 0)
|
|
ENDFUNC
|
|
|
|
*==================================================================================
|
|
* PregatesteFormular: poDate + generator + crsfactura gol + formular v2, gata de Click.
|
|
* Scrie direct in poDate / poGeneratorNumere / poDateGestiuneDest - PRIVATE-urile declarate de
|
|
* apelant sunt vizibile aici (nu se transmit prin referinta: @ pe PRIVATE e capcana platita deja).
|
|
* Intoarce NULL daca ceva din pregatire a esuat (a asertat deja).
|
|
FUNCTION PregatesteFormular
|
|
LPARAMETERS tnTip, toSursa
|
|
LOCAL loForm, lnIdSet
|
|
|
|
DO CuratieCrs
|
|
SELECT 0
|
|
|
|
lnIdSet = 25000 + tnTip - 1
|
|
IF ISNULL(toSursa)
|
|
poDate = CREATEOBJECT("oDateFactura", lnIdSet, tnTip)
|
|
ELSE
|
|
poDate = CREATEOBJECT("oDateFactura", lnIdSet, tnTip, toSursa)
|
|
ENDIF
|
|
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
|
|
poDateGestiuneDest = CREATEOBJECT("oDateGestiune")
|
|
|
|
*-- tip 1 nu are sursa: antetul se completeaza cu un client real, altfel valideaza_antet
|
|
*-- respinge inainte sa se ajunga la ramura llCautareInLinie (si A8 ar trece degeaba)
|
|
IF ISNULL(toSursa)
|
|
IF goExecutor.oExecute([select id_part, nume from nom_parteneri where upper(nume) not like '%CLIENT%' and rownum = 1], 'crsPart') >= 0 ;
|
|
AND USED('crsPart') AND RECCOUNT('crsPart') > 0
|
|
SELECT crsPart
|
|
poDate.id_client = id_part
|
|
poDate.nume_client = ALLTRIM(NVL(nume, ''))
|
|
USE IN crsPart
|
|
ENDIF
|
|
ENDIF
|
|
IF EMPTY(NVL(poDate.id_fdoc, 0))
|
|
poDate.id_fdoc = 1
|
|
ENDIF
|
|
poDate.id_delegat = 39
|
|
|
|
poGeneratorNumere.ResetNumere()
|
|
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc)
|
|
IF poDate.rezultat_serii <> 3
|
|
DO Assert WITH .F., 'rezultat_serii = 3 (o singura plaja, fara dialog) pe tip ' + TRANSFORM(tnTip) + ', e=' + TRANSFORM(poDate.rezultat_serii)
|
|
RETURN NULL
|
|
ENDIF
|
|
poDate.serie_act = poGeneratorNumere.getSerieCursor(poDate.nIdTipDoc)
|
|
poDate.nract = poGeneratorNumere.aloca_numar(poDate.nIdTipDoc, NULL)
|
|
DO S8Log WITH ' tip=' + TRANSFORM(tnTip) + ' nIdTipDoc=' + TRANSFORM(poDate.nIdTipDoc) + ;
|
|
' serie_act=' + ALLTRIM(TRANSFORM(poDate.serie_act)) + ' nract=' + TRANSFORM(poDate.nract) + ;
|
|
' listaid=[' + TRANSFORM(poDate.listaid) + '] id_client=' + TRANSFORM(poDate.id_client)
|
|
|
|
IF poDate.tva_incasare = 0
|
|
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
|
ELSE
|
|
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
|
ENDIF
|
|
|
|
*-- crsfactura gol INAINTE de formular, ca in factureaza() pe ramura llFacturareNoua; coloana
|
|
*-- gestiune e ceruta de coloana combo a grilei (tehnica din test_s4_3_neregresie_masa.prg)
|
|
DO creeaza_facturacrs WITH 'crsfactura'
|
|
SELECT *, CAST(NULL AS C(100)) AS gestiune FROM crsfactura INTO CURSOR crsfact_tmp READWRITE
|
|
USE IN crsfactura
|
|
SELECT * FROM crsfact_tmp INTO CURSOR crsfactura READWRITE
|
|
USE IN crsfact_tmp
|
|
|
|
loForm = CREATEOBJECT('frm_facturare_articole2')
|
|
IF VARTYPE(loForm) <> 'O'
|
|
DO Assert WITH .F., 'Createobject frm_facturare_articole2 pe tip ' + TRANSFORM(tnTip)
|
|
RETURN NULL
|
|
ENDIF
|
|
loForm.WindowType = 0
|
|
loForm.Show()
|
|
DOEVENTS FORCE
|
|
RETURN loForm
|
|
ENDFUNC
|
|
|
|
*==================================================================================
|
|
* ApasaIncarca: singura cale prin care testul declanseaza incarcarea. Mock-ul se reincarca imediat
|
|
* inainte, ca sa castige rezolutia de nume pentru amessagebox-ul apelat din interiorul .vcx.
|
|
PROCEDURE ApasaIncarca
|
|
LPARAMETERS toForm
|
|
SET PROCEDURE TO (gcMock) ADDITIVE
|
|
gcMockApeluri = ''
|
|
toForm.but_incarca_articole.Click()
|
|
DOEVENTS FORCE
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* A10: documentul scris in Oracle - tip si id_jtva_coloana pe toate liniile.
|
|
PROCEDURE VerificaVanzare
|
|
LPARAMETERS tnIdVz
|
|
LOCAL lnTip, lnLinii, lnZero
|
|
IF goExecutor.oExecute([select tip from vanzari where id_vanzare = ] + TRANSFORM(tnIdVz), 'crsVz') < 0 OR RECCOUNT('crsVz') <> 1
|
|
DO Assert WITH .F., 'A10: VANZARI contine documentul id_vanzare=' + TRANSFORM(tnIdVz)
|
|
DO Inchide WITH 'crsVz'
|
|
RETURN
|
|
ENDIF
|
|
SELECT crsVz
|
|
lnTip = tip
|
|
USE IN crsVz
|
|
DO Assert WITH lnTip = 3, 'A10: VANZARI.TIP = 3 pe documentul emis, e=' + TRANSFORM(lnTip)
|
|
|
|
IF goExecutor.oExecute([select nvl(id_jtva_coloana,0) as id_jtva_coloana from vanzari_detalii where id_vanzare = ] + TRANSFORM(tnIdVz), 'crsVzD') < 0
|
|
DO Assert WITH .F., 'A10: VANZARI_DETALII citit pentru id_vanzare=' + TRANSFORM(tnIdVz)
|
|
RETURN
|
|
ENDIF
|
|
SELECT crsVzD
|
|
lnLinii = RECCOUNT('crsVzD')
|
|
COUNT FOR id_jtva_coloana <= 0 TO lnZero
|
|
USE IN crsVzD
|
|
DO Assert WITH lnLinii > 0, 'A10: VANZARI_DETALII are linii, e=' + TRANSFORM(lnLinii)
|
|
DO Assert WITH lnZero = 0, 'A10: ID_JTVA_COLOANA > 0 pe toate liniile, linii cu 0/null=' + TRANSFORM(lnZero)
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* Sursa reala pentru comanda (tip 3) - campurile citite de oDateFactura.Init pe ramura tnTip=3
|
|
* (ofacturare_comun.prg:315). listaid trebuie caracter (do_scrie_factura face Val(poDate.listaid)).
|
|
FUNCTION CreeazaSursaComanda
|
|
LPARAMETERS tnIdComanda
|
|
LOCAL lnQ, loSursa
|
|
loSursa = NULL
|
|
lnQ = goExecutor.oExecute([select c.id_part, p.nume, p.cod_fiscal, c.id_comanda, c.nr_comanda, c.id_sectie ] + ;
|
|
[from comenzi c, nom_parteneri p where c.id_part = p.id_part and c.id_comanda = ] + TRANSFORM(tnIdComanda), 'crsSursaCom')
|
|
IF lnQ < 0 OR !USED('crsSursaCom') OR RECCOUNT('crsSursaCom') <> 1
|
|
DO S8Log WITH ' EROARE sursa comanda ' + TRANSFORM(tnIdComanda) + ': ' + TRANSFORM(goExecutor.oPrelucrareEroare())
|
|
DO Inchide WITH 'crsSursaCom'
|
|
RETURN loSursa
|
|
ENDIF
|
|
SELECT crsSursaCom
|
|
SCATTER NAME loSursa MEMO
|
|
USE IN crsSursaCom
|
|
loSursa.id_comanda = ALLTRIM(TRANSFORM(loSursa.id_comanda))
|
|
loSursa.nr_comanda = ALLTRIM(TRANSFORM(loSursa.nr_comanda))
|
|
RETURN loSursa
|
|
ENDFUNC
|
|
|
|
* Sursa reala pentru contract (tip 2). FACT_VCONTRACTE nu are id_sectie/sectie/responsabil/valuta -
|
|
* se completeaza cu valori neutre, ca la S6-2.
|
|
FUNCTION CreeazaSursaContract
|
|
LPARAMETERS tnIdCtr
|
|
LOCAL lnQ, loSursa
|
|
loSursa = NULL
|
|
lnQ = goExecutor.oExecute([select ct.id_part, p.denumire, p.cod_fiscal, ct.id_ctr, ct.contract ] + ;
|
|
[from fact_vcontracte ct, nom_parteneri p where ct.id_part = p.id_part and ct.id_ctr = ] + TRANSFORM(tnIdCtr), 'crsSursaCtr')
|
|
IF lnQ < 0 OR !USED('crsSursaCtr') OR RECCOUNT('crsSursaCtr') <> 1
|
|
DO S8Log WITH ' EROARE sursa contract ' + TRANSFORM(tnIdCtr) + ': ' + TRANSFORM(goExecutor.oPrelucrareEroare())
|
|
DO Inchide WITH 'crsSursaCtr'
|
|
RETURN loSursa
|
|
ENDIF
|
|
SELECT crsSursaCtr
|
|
SCATTER NAME loSursa MEMO
|
|
USE IN crsSursaCtr
|
|
ADDPROPERTY(loSursa, 'id_sectie', 0)
|
|
ADDPROPERTY(loSursa, 'sectie', '')
|
|
ADDPROPERTY(loSursa, 'id_responsabil', 0)
|
|
ADDPROPERTY(loSursa, 'responsabil', '')
|
|
ADDPROPERTY(loSursa, 'id_valuta', 1)
|
|
ADDPROPERTY(loSursa, 'nume_val', 'RON')
|
|
RETURN loSursa
|
|
ENDFUNC
|
|
|
|
*==================================================================================
|
|
PROCEDURE Elibereaza
|
|
LPARAMETERS toForm
|
|
IF TYPE('toForm') = 'O' AND !ISNULL(toForm)
|
|
TRY
|
|
toForm.Release()
|
|
CATCH
|
|
ENDTRY
|
|
ENDIF
|
|
DO CuratieCrs
|
|
ENDPROC
|
|
|
|
PROCEDURE CuratieCrs
|
|
DO Inchide WITH 'crsarticole'
|
|
DO Inchide WITH 'crsarticole1'
|
|
DO Inchide WITH 'crsfactura'
|
|
DO Inchide WITH 'crscursuri'
|
|
DO Inchide WITH 'crspolitici'
|
|
DO Inchide WITH 'crscontracte'
|
|
DO Inchide WITH 'crsgestiunidest'
|
|
DO Inchide WITH 'crsCtrTemp'
|
|
DO Inchide WITH 'crsComTemp'
|
|
DO Inchide WITH 'crsartselectate'
|
|
DO Inchide WITH 'jtva_coloane'
|
|
ENDPROC
|
|
|
|
PROCEDURE Inchide
|
|
LPARAMETERS tcAlias
|
|
IF USED(tcAlias)
|
|
USE IN (tcAlias)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROCEDURE Assert
|
|
LPARAMETERS tlCond, tcMsg
|
|
IF tlCond
|
|
gnPass = gnPass + 1
|
|
DO S8Log WITH 'PASS: ' + gcCaz + tcMsg
|
|
ELSE
|
|
gnFail = gnFail + 1
|
|
DO S8Log WITH 'FAIL: ' + gcCaz + tcMsg
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROCEDURE S8Log
|
|
LPARAMETERS tcMsg
|
|
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
|
ENDPROC
|
|
|
|
PROCEDURE S8Err
|
|
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
|
gnErr = gnErr + 1
|
|
DO S8Log WITH 'ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
|
ENDPROC
|
|
|
|
PROCEDURE S8Final
|
|
LOCAL lnI
|
|
IF TYPE('_SCREEN.tmrS8') = 'O'
|
|
_SCREEN.tmrS8.Enabled = .F.
|
|
TRY
|
|
_SCREEN.RemoveObject('tmrS8')
|
|
CATCH
|
|
ENDTRY
|
|
ENDIF
|
|
*-- formele ramase deschise arunca "Unhandled Structured Exception" la QUIT (caseta modala =
|
|
*-- rulare atarnata), asa ca se inchid explicit inainte
|
|
FOR lnI = _SCREEN.FormCount TO 1 STEP -1
|
|
TRY
|
|
_SCREEN.Forms(lnI).Release()
|
|
CATCH
|
|
ENDTRY
|
|
ENDFOR
|
|
DO S8Log WITH CHR(13) + CHR(10) + 'NUMERE: ' + gcNumere
|
|
DO S8Log WITH 'TOTAL pass=' + TRANSFORM(gnPass) + ' fail=' + TRANSFORM(gnFail) + ' err=' + TRANSFORM(gnErr)
|
|
DO S8Log WITH 'END ' + TTOC(DATETIME())
|
|
QUIT
|
|
ENDPROC
|
|
|
|
PROCEDURE Goleste
|
|
poDate = NULL
|
|
poGeneratorNumere = NULL
|
|
poDateGestiuneDest = NULL
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* driverMsgS8: apasa automat cmdYes/cmdOk pe forma modala MESSAGEBOX_FORM (ex. "Doriti sa se
|
|
* inchida comanda?" la emiterea pe tip 3) - acele dialoguri nu trec prin functia amessagebox, deci
|
|
* mock-ul nu le acopera. Garda de reintrare lBusy: do_termin cedeaza controlul buclei de mesaje.
|
|
* Nu atinge in niciun fel FRM_FACTURARE_ARTICOLE2.
|
|
DEFINE CLASS driverMsgS8 AS Custom
|
|
lBusy = .F.
|
|
|
|
PROCEDURE Executa
|
|
IF This.lBusy
|
|
RETURN
|
|
ENDIF
|
|
This.lBusy = .T.
|
|
IF TYPE('_SCREEN.tmrS8') = 'O'
|
|
_SCREEN.tmrS8.Enabled = .F.
|
|
ENDIF
|
|
TRY
|
|
LOCAL lnI, loMsgForm, lcClasa
|
|
loMsgForm = NULL
|
|
FOR lnI = 1 TO _SCREEN.FormCount
|
|
lcClasa = UPPER(_SCREEN.Forms(lnI).Class)
|
|
IF 'MESSAGEBOX_FORM' $ lcClasa
|
|
loMsgForm = _SCREEN.Forms(lnI)
|
|
ENDIF
|
|
IF !(lcClasa $ gcClaseVazute)
|
|
gcClaseVazute = gcClaseVazute + lcClasa + ';'
|
|
DO S8Log WITH ' [diag timer] forma noua: ' + lcClasa + ' Caption=[' + TRANSFORM(_SCREEN.Forms(lnI).Caption) + ']'
|
|
ENDIF
|
|
ENDFOR
|
|
IF !ISNULL(loMsgForm)
|
|
TRY
|
|
DO CASE
|
|
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdYes', 5)
|
|
DO S8Log WITH ' [driver msg] apas cmgBotones.cmdYes'
|
|
loMsgForm.cmgBotones.cmdYes.Click()
|
|
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdOk', 5)
|
|
DO S8Log WITH ' [driver msg] apas cmgBotones.cmdOk'
|
|
loMsgForm.cmgBotones.cmdOk.Click()
|
|
ENDCASE
|
|
CATCH TO loExcMsg
|
|
DO S8Log WITH ' [driver msg] CATCH ' + TRANSFORM(loExcMsg.ErrorNo) + ' ' + loExcMsg.Message
|
|
ENDTRY
|
|
ENDIF
|
|
CATCH TO loExcTop
|
|
DO S8Log WITH ' [driver] CATCH ' + TRANSFORM(loExcTop.ErrorNo) + ' ' + loExcTop.Message
|
|
FINALLY
|
|
IF TYPE('_SCREEN.tmrS8') = 'O'
|
|
_SCREEN.tmrS8.Enabled = .T.
|
|
ENDIF
|
|
This.lBusy = .F.
|
|
ENDTRY
|
|
ENDPROC
|
|
ENDDEFINE
|