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
787 lines
30 KiB
Plaintext
787 lines
30 KiB
Plaintext
* test_s14_neregresie_emitere_noua.prg
|
|
* VIZIBIL (grid): proba de neregresie S14 pe calea de EMITERE NOUA (nu editare).
|
|
* Secventa: D0 = emitere noua (v1, frm_facturare_articole, tip 1) -> reemitere HEADLESS a lui D0
|
|
* (v2, frm_facturare_articole2.do_scrie_factura() apelat direct, ca in test_s9_4_regenerare.prg
|
|
* Rularea2) -> D2 = a doua emitere noua (v1, ACELASI proces VFP, fara restart). D1 = documentul
|
|
* nascut din reemiterea lui D0.
|
|
*
|
|
* Risc verificat: pack_facturare.nid_util_fortat/ddataora_fortata sunt variabile de sesiune
|
|
* Oracle (PACK_FACTURARE), nu VFP - fortate la reemiterea D0->D1 si curatate simetric in
|
|
* do_scrie_factura (ofacturare.vc2, v2). Daca CurataAuditCreareFortat ar lipsi sau ar fi ocolita,
|
|
* D2 (scris prin v1, care NU are deloc cod S14 - do_scrie_articole/do_scrie_factura proprii, alta
|
|
* zona a fisierului) ar mosteni tacut ID_UTIL/DATAORA fortate de reemiterea anterioara, fiindca
|
|
* INSERT-ul din scrie_in_vanzari e comun ambelor forme.
|
|
*
|
|
* Variabilele de pachet nu sunt selectabile direct din SQL (stare PL/SQL, nu date de tabel) -
|
|
* verificarea lor "sunt NULL la final" se face prin efectul observabil: DATAORA lui D2 trebuie sa
|
|
* fie proaspata (acum), nu cea transportata la D1 (data crearii lui D0, cu minute in urma).
|
|
*
|
|
* v1 (D0, D2): traseul si ocolirea din test_s6_1_lista_preturi.prg (incarca_cursor_articole +
|
|
* do_adauga_articol(.T.) direct, apoi but_termin1.Click() - FRM_ALTE_DATE condus de driver+timer,
|
|
* tehnica identica, copiata din acel fisier).
|
|
* v2 (D1): traseul din test_s9_4_regenerare.prg Rularea2 (IncarcaAntetFacturaEditare +
|
|
* IncarcaLiniiFacturaEditare + CreeazaSnapshotEditare, o cantitate modificata forteaza ruta 1 =
|
|
* regenerare, do_scrie_factura() apelat direct - fara Show(), fara buton, fara modal).
|
|
*
|
|
* Rulare: powershell -ExecutionPolicy Bypass -File test_s14_neregresie_emitere_noua.ps1 (timeout >= 400s)
|
|
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out\test_s14_neregresie_emitere_noua.log
|
|
* Mediu: ROA_CENTRAL / MARIUSM_AUTO; gnIdUtil = 8 (inainte de creeaza_cursor_serii); gnIdSucursala = 167;
|
|
* gnScadereStoc = 0; gnFactSeturi = 0; SET PATH catre gridextras si stub_verificare.
|
|
|
|
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 goDriverS14P4, gcClaseVazute, gcSyncDir, gcUILog, gnCantitateAleasa
|
|
PUBLIC gcUltimaSerie, gnUltimulNract
|
|
|
|
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out\test_s14_neregresie_emitere_noua.log"
|
|
IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out")
|
|
MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out"
|
|
ENDIF
|
|
gcUILog = gcLog
|
|
gcSyncDir = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\uisync_s14p4\"
|
|
IF !DIRECTORY(gcSyncDir)
|
|
MD (gcSyncDir)
|
|
ENDIF
|
|
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
|
gnPass = 0
|
|
gnFail = 0
|
|
gnErr = 0
|
|
gcCaz = ""
|
|
gcMockApeluri = ""
|
|
gnMockRaspuns = 6
|
|
gcMockDuplicat = ""
|
|
gcClaseVazute = ";"
|
|
gcNumere = ""
|
|
gnCantitateAleasa = 2
|
|
gcMock = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\mock_validare_antet.prg"
|
|
|
|
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
|
DO HarnessInit
|
|
|
|
*-- 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 (capcana platita la S8).
|
|
PRIVATE poDate, poGeneratorNumere, poDateGestiuneDest, poSnapshotEditare
|
|
poDate = NULL
|
|
poGeneratorNumere = NULL
|
|
poDateGestiuneDest = NULL
|
|
poSnapshotEditare = NULL
|
|
|
|
ON ERROR DO S14P4Err WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
TRY
|
|
*-- stub_verificare PRIMUL: "Do Form verificare" (ofacturare.vc2:14404 / :20126) rezolva la stub
|
|
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 S14P4Log WITH 'EROARE: conectare Oracle esuata'
|
|
DO S14P4Final
|
|
ENDIF
|
|
SQLSETPROP(gnHandle, "QueryTimeOut", 45)
|
|
DO S14P4Log WITH 'ENV OK gnHandle=' + TRANSFORM(gnHandle) + ' gcS=' + gcS
|
|
|
|
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 "D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg" ADDITIVE
|
|
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg" ADDITIVE
|
|
SET PROCEDURE TO (gcMock) ADDITIVE
|
|
|
|
IF !actualizeaza_optiuni_program()
|
|
DO S14P4Log WITH 'EROARE: actualizeaza_optiuni_program()'
|
|
DO S14P4Final
|
|
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 S14P4Log 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()
|
|
|
|
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
|
|
|
|
PUBLIC gdZiCurs
|
|
gdZiCurs = DataCursValid()
|
|
DO S14P4Log WITH ' zi_curs folosita pentru toate documentele: ' + DTOC(gdZiCurs)
|
|
|
|
*-- driver + timer: FRM_ALTE_DATE (v1, .Show(1) neconditionat la inainte_de_do_termin) si
|
|
*-- formele modale MESSAGEBOX_FORM nu trec prin functia amessagebox - mock-ul nu le acopera.
|
|
*-- Tehnica validata la S5c/S6-1/S6-5.
|
|
goDriverS14P4 = CREATEOBJECT('driverS14P4')
|
|
_SCREEN.AddObject('tmrS14P4', 'Timer')
|
|
_SCREEN.tmrS14P4.Interval = 200
|
|
BINDEVENT(_SCREEN.tmrS14P4, 'Timer', goDriverS14P4, 'Executa')
|
|
_SCREEN.tmrS14P4.Enabled = .T.
|
|
|
|
DO HarnessStep WITH 0, 'env gata', 8
|
|
|
|
DO S14P4Log WITH CHR(13) + CHR(10) + '===== ALEGEREA A DOUA ARTICOLE (comune D0 si D2) ====='
|
|
IF !AlegeArticole()
|
|
DO Assert WITH .F., 'alegerea celor doua articole a esuat - vezi log'
|
|
DO S14P4Final
|
|
ENDIF
|
|
|
|
LOCAL lnIdV0, lnIdV1, lnIdV2, lcSer0, lnNr0, lcSer2, lnNr2
|
|
LOCAL lnIdUtil0, ldDataora0, lnIdUtilm0, ldDataoram0, llUtilmNul0, llDataoramNul0
|
|
LOCAL lnIdUtil1, ldDataora1, lnIdUtilm1, ldDataoram1, llUtilmNul1, llDataoramNul1
|
|
LOCAL lnIdUtil2, ldDataora2, lnIdUtilm2, ldDataoram2, llUtilmNul2, llDataoramNul2
|
|
STORE 0 TO lnIdV0, lnIdV1, lnIdV2, lnNr0, lnNr2
|
|
STORE '' TO lcSer0, lcSer2
|
|
|
|
DO S14P4Log WITH CHR(13) + CHR(10) + '===== D0: EMITERE NOUA (v1, frm_facturare_articole) ====='
|
|
lnIdV0 = EmiteDocNou()
|
|
lcSer0 = gcUltimaSerie
|
|
lnNr0 = gnUltimulNract
|
|
DO Assert WITH lnIdV0 > 0, 'D0 s-a scris (baza pentru reemitere), id_vanzare=' + TRANSFORM(lnIdV0)
|
|
IF lnIdV0 <= 0
|
|
DO S14P4Final
|
|
ENDIF
|
|
IF !CitesteAuditVanzare(lnIdV0, @lnIdUtil0, @ldDataora0, @lnIdUtilm0, @ldDataoram0, @llUtilmNul0, @llDataoramNul0)
|
|
DO Assert WITH .F., 'D0: citirea auditului (ID_UTIL/DATAORA) a esuat'
|
|
DO S14P4Final
|
|
ENDIF
|
|
DO S14P4Log WITH ' D0 id_vanzare=' + TRANSFORM(lnIdV0) + ' serie=' + lcSer0 + ' nr=' + TRANSFORM(lnNr0) + ;
|
|
' id_util=' + TRANSFORM(lnIdUtil0) + ' dataora=' + TTOC(ldDataora0) + ;
|
|
' id_utilm_null=' + TRANSFORM(llUtilmNul0) + ' dataoram_null=' + TRANSFORM(llDataoramNul0)
|
|
DO Assert WITH llUtilmNul0 AND llDataoramNul0, 'D0 (document nou, fara editare): ID_UTILM/DATAORAM NULL'
|
|
DO HarnessStep WITH 1, 'D0 emis', 8
|
|
|
|
DO S14P4Log WITH CHR(13) + CHR(10) + '===== D1: REEMITERE HEADLESS a lui D0 (v2, do_scrie_factura direct) ====='
|
|
lnIdV1 = ReemiteDocument(lnIdV0)
|
|
DO Assert WITH lnIdV1 > 0, 'D1 s-a scris (reemiterea lui D0), id_vanzare=' + TRANSFORM(lnIdV1)
|
|
IF lnIdV1 <= 0
|
|
DO S14P4Final
|
|
ENDIF
|
|
IF !CitesteAuditVanzare(lnIdV1, @lnIdUtil1, @ldDataora1, @lnIdUtilm1, @ldDataoram1, @llUtilmNul1, @llDataoramNul1)
|
|
DO Assert WITH .F., 'D1: citirea auditului (ID_UTIL/DATAORA) a esuat'
|
|
DO S14P4Final
|
|
ENDIF
|
|
DO S14P4Log WITH ' D1 id_vanzare=' + TRANSFORM(lnIdV1) + ' id_util=' + TRANSFORM(lnIdUtil1) + ' dataora=' + TTOC(ldDataora1) + ;
|
|
' id_utilm=' + TRANSFORM(lnIdUtilm1) + ' dataoram=' + TTOC(ldDataoram1)
|
|
gcCaz = '[D1 reemitere - context, mecanismul S14 e deja probat in raport_s14_vfp_transport.md] '
|
|
DO Assert WITH lnIdUtil1 = lnIdUtil0, 'D1 pastreaza ID_UTIL-ul creatiei lui D0, e=' + TRANSFORM(lnIdUtil1) + ' vs ' + TRANSFORM(lnIdUtil0)
|
|
DO Assert WITH TTOC(ldDataora1) == TTOC(ldDataora0), 'D1 pastreaza DATAORA creatiei lui D0, e=[' + TTOC(ldDataora1) + '] vs [' + TTOC(ldDataora0) + ']'
|
|
DO Assert WITH !llUtilmNul1 AND !llDataoramNul1, 'D1 are perechea de modificare completata (ID_UTILM/DATAORAM)'
|
|
gcCaz = ''
|
|
DO HarnessStep WITH 2, 'D1 reemis', 8
|
|
|
|
DO S14P4Log WITH CHR(13) + CHR(10) + '===== D2: A DOUA EMITERE NOUA (v1), IN ACEEASI SESIUNE, IMEDIAT DUPA REEMITERE ====='
|
|
lnIdV2 = EmiteDocNou()
|
|
lcSer2 = gcUltimaSerie
|
|
lnNr2 = gnUltimulNract
|
|
DO Assert WITH lnIdV2 > 0, 'D2 s-a scris (emitere noua dupa reemitere), id_vanzare=' + TRANSFORM(lnIdV2)
|
|
IF lnIdV2 <= 0
|
|
DO S14P4Final
|
|
ENDIF
|
|
IF !CitesteAuditVanzare(lnIdV2, @lnIdUtil2, @ldDataora2, @lnIdUtilm2, @ldDataoram2, @llUtilmNul2, @llDataoramNul2)
|
|
DO Assert WITH .F., 'D2: citirea auditului (ID_UTIL/DATAORA) a esuat'
|
|
DO S14P4Final
|
|
ENDIF
|
|
DO S14P4Log WITH ' D2 id_vanzare=' + TRANSFORM(lnIdV2) + ' serie=' + lcSer2 + ' nr=' + TRANSFORM(lnNr2) + ;
|
|
' id_util=' + TRANSFORM(lnIdUtil2) + ' dataora=' + TTOC(ldDataora2) + ;
|
|
' id_utilm_null=' + TRANSFORM(llUtilmNul2) + ' dataoram_null=' + TRANSFORM(llDataoramNul2)
|
|
|
|
*-- discriminatorul de "acum" foloseste DOAR timpul Oracle (ldDataoram1, SYSDATE la reemitere,
|
|
*-- cateva secunde inaintea lui D2) - un DATETIME() din VFP ar compara cu ceasul clientului,
|
|
*-- care poate fi decalat fata de serverul Oracle (masurat: ~3 ore, nu e o scurgere reala)
|
|
gcCaz = '[S14-P4 NEREGRESIE emitere noua dupa reemitere] '
|
|
DO Assert WITH lnIdUtil2 = gnIdUtil, 'S14-P4-1 D2.ID_UTIL = utilizatorul curent (' + TRANSFORM(gnIdUtil) + '), e=' + TRANSFORM(lnIdUtil2)
|
|
DO Assert WITH ldDataora2 >= ldDataoram1, ;
|
|
'S14-P4-2a D2.DATAORA e ulterioara momentului reemiterii (SYSDATE Oracle, nu ceasul clientului), D2=[' + TTOC(ldDataora2) + '] >= reemitere=[' + TTOC(ldDataoram1) + ']'
|
|
DO Assert WITH TTOC(ldDataora2) <> TTOC(ldDataora0), ;
|
|
'S14-P4-2b D2.DATAORA NU e transportata de la D0/D1 (fortarea nu a scapat pe calea v1), D2=[' + TTOC(ldDataora2) + '] D0/D1=[' + TTOC(ldDataora0) + ']'
|
|
DO Assert WITH llUtilmNul2, 'S14-P4-3 D2.ID_UTILM = NULL (nu e reemitere)'
|
|
DO Assert WITH llDataoramNul2, 'S14-P4-4 D2.DATAORAM = NULL (nu e reemitere)'
|
|
gcCaz = ''
|
|
|
|
DO S14P4Log WITH CHR(13) + CHR(10) + '===== SECVENTA reemitere -> emitere noua: ' + ;
|
|
IIF(lnIdUtil2 = gnIdUtil AND TTOC(ldDataora2) <> TTOC(ldDataora0) AND llUtilmNul2 AND llDataoramNul2, 'PASS', 'FAIL') + ' ====='
|
|
DO HarnessStep WITH 3, 'D2 emis si verificat', 8
|
|
|
|
DO S14P4Final
|
|
|
|
CATCH TO loExc
|
|
DO S14P4Log WITH 'CATCH TOP-LEVEL ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ;
|
|
' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
|
DO S14P4Final
|
|
ENDTRY
|
|
|
|
QUIT
|
|
|
|
*==================================================================================
|
|
* Alegerea celor doua articole comune D0/D2: sonda cu incarca_cursor_articole (traseul real de pe
|
|
* v1), apoi TOP 2 negestionabile cu pret>0 si cota prezenta in jtva_coloane. Rezultat: crsAleseS14P4.
|
|
FUNCTION AlegeArticole
|
|
LOCAL loRez, lcStrategie
|
|
poDate = CREATEOBJECT("oDateFactura", 25000, 1)
|
|
poDate.id_client = 463
|
|
poDate.id_delegat = 256
|
|
poDate.zi_curs = gdZiCurs
|
|
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
|
|
|
|
loRez = incarca_cursor_articole(1, .F., poGeneratorNumere)
|
|
DO Assert WITH (loRez.nSucces >= 0) AND loRez.lArticole, 'sonda: incarca_cursor_articole(1) a adus articole'
|
|
IF !USED('crsarticole') OR RECCOUNT('crsarticole') = 0
|
|
DO Goleste
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
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
|
|
|
|
DO Inchide WITH 'crsCandS14P4'
|
|
SELECT TOP 30 a.* FROM crsarticole a INNER JOIN jtva_coloane j ;
|
|
ON ROUND((j.cota_tva + 100) / 100, 2) = ROUND(NVL(a.proc_tvav,0), 2) ;
|
|
WHERE NVL(a.gestionabil,0) = 0 AND NVL(a.pret,0) > 0 ;
|
|
ORDER BY a.id_articol INTO CURSOR crsCandS14P4 READWRITE
|
|
lcStrategie = 'negestionabile cu cota in jtva_coloane'
|
|
IF RECCOUNT('crsCandS14P4') < 2
|
|
DO Inchide WITH 'crsCandS14P4'
|
|
SELECT TOP 30 a.* FROM crsarticole a INNER JOIN jtva_coloane j ;
|
|
ON ROUND((j.cota_tva + 100) / 100, 2) = ROUND(NVL(a.proc_tvav,0), 2) ;
|
|
WHERE NVL(a.pret,0) > 0 ;
|
|
ORDER BY a.id_articol INTO CURSOR crsCandS14P4 READWRITE
|
|
lcStrategie = 'orice cu cota in jtva_coloane (gestionabile incluse)'
|
|
ENDIF
|
|
IF RECCOUNT('crsCandS14P4') < 2
|
|
DO Inchide WITH 'crsCandS14P4'
|
|
SELECT TOP 30 * FROM crsarticole ORDER BY id_articol INTO CURSOR crsCandS14P4 READWRITE
|
|
lcStrategie = 'primele din lista (nicio potrivire de cota)'
|
|
ENDIF
|
|
|
|
DO Inchide WITH 'crsAleseS14P4'
|
|
SELECT * FROM crsCandS14P4 WHERE .F. INTO CURSOR crsAleseS14P4 READWRITE
|
|
LOCAL lnUltimulId, loRowS14P4
|
|
lnUltimulId = -1
|
|
SELECT crsCandS14P4
|
|
SCAN
|
|
IF id_articol <> lnUltimulId
|
|
SCATTER MEMO NAME loRowS14P4
|
|
INSERT INTO crsAleseS14P4 FROM NAME loRowS14P4
|
|
lnUltimulId = id_articol
|
|
ENDIF
|
|
IF RECCOUNT('crsAleseS14P4') >= 2
|
|
EXIT
|
|
ENDIF
|
|
ENDSCAN
|
|
DO Inchide WITH 'crsCandS14P4'
|
|
DO Assert WITH RECCOUNT('crsAleseS14P4') = 2, 'doua articole DISTINCTE alese, e=' + TRANSFORM(RECCOUNT('crsAleseS14P4'))
|
|
DO S14P4Log WITH ' strategie: ' + lcStrategie
|
|
SELECT crsAleseS14P4
|
|
SCAN
|
|
DO S14P4Log WITH ' ales: id_articol=' + TRANSFORM(id_articol) + ' [' + ALLTRIM(TRANSFORM(denumire)) + ;
|
|
'] pret=' + TRANSFORM(pret) + ' proc_tvav=' + TRANSFORM(proc_tvav) + ' gestionabil=' + TRANSFORM(NVL(gestionabil,0))
|
|
ENDSCAN
|
|
|
|
DO Inchide WITH 'crsarticole'
|
|
DO Goleste
|
|
RETURN (RECCOUNT('crsAleseS14P4') = 2)
|
|
ENDFUNC
|
|
|
|
*==================================================================================
|
|
* Emitere noua reala prin v1 (frm_facturare_articole), tip 1 - traseul si ocolirea din
|
|
* test_s6_1_lista_preturi.prg (EmiteV1): incarca_cursor_articole() inainte de formular, candidatii
|
|
* restransi la crsAleseS14P4, do_adauga_articol(.T.) direct, but_termin1.Click() (FRM_ALTE_DATE
|
|
* condus de driver+timer).
|
|
FUNCTION EmiteDocNou
|
|
LOCAL lnIdVz, lcSerie, lnNract, oform, loRez, lnI, lnFact
|
|
lnIdVz = 0
|
|
lcSerie = ''
|
|
lnNract = 0
|
|
gcUltimaSerie = ''
|
|
gnUltimulNract = 0
|
|
gcCaz = '[emitere-noua] '
|
|
|
|
DO CuratieCrs
|
|
poDate = CREATEOBJECT("oDateFactura", 25000, 1)
|
|
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
|
|
poDateGestiuneDest = CREATEOBJECT("oDateGestiune")
|
|
poDate.nIdTipDoc = 5
|
|
poDate.id_client = 463
|
|
poDate.id_delegat = 256
|
|
poDate.zi_curs = gdZiCurs
|
|
|
|
poGeneratorNumere.ResetNumere()
|
|
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc)
|
|
DO Assert WITH poDate.rezultat_serii = 3, 'rezultat_serii=3 (o singura plaja, fara dialog), e=' + TRANSFORM(poDate.rezultat_serii)
|
|
IF poDate.rezultat_serii <> 3
|
|
DO Goleste
|
|
RETURN 0
|
|
ENDIF
|
|
poDate.serie_act = poGeneratorNumere.getSerieCursor(poDate.nIdTipDoc)
|
|
poDate.nract = poGeneratorNumere.aloca_numar(poDate.nIdTipDoc, NULL)
|
|
poGeneratorNumere.verifica_numar(poDate.nIdTipDoc, poDate.nract)
|
|
DO S14P4Log WITH ' nIdTipDoc=' + TRANSFORM(poDate.nIdTipDoc) + ' serie_act=' + ALLTRIM(TRANSFORM(poDate.serie_act)) + ;
|
|
' nract=' + TRANSFORM(poDate.nract)
|
|
|
|
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
|
|
|
|
loRez = incarca_cursor_articole(1, .F., poGeneratorNumere)
|
|
DO Assert WITH (loRez.nSucces >= 0) AND loRez.lArticole, 'incarca_cursor_articole a adus articole'
|
|
IF !((loRez.nSucces >= 0) AND loRez.lArticole)
|
|
gcNumere = gcNumere + 'DEZALOCAT serie=' + ALLTRIM(TRANSFORM(poDate.serie_act)) + ' nract=' + TRANSFORM(poDate.nract) + ' (fara articole);'
|
|
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
|
DO Goleste
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
USE IN crsarticole
|
|
SELECT * FROM crsAleseS14P4 INTO CURSOR crsarticole READWRITE
|
|
DO Assert WITH RECCOUNT('crsarticole') = 2, 'cele doua articole alese gasite in crsarticole, e=' + TRANSFORM(RECCOUNT('crsarticole'))
|
|
|
|
oform = CREATEOBJECT('frm_facturare_articole')
|
|
IF VARTYPE(oform) <> 'O'
|
|
DO Assert WITH .F., 'Createobject frm_facturare_articole'
|
|
DO Goleste
|
|
RETURN 0
|
|
ENDIF
|
|
oform.WindowType = 0
|
|
oform.Show()
|
|
DOEVENTS FORCE
|
|
|
|
SET PROCEDURE TO (gcMock) ADDITIVE
|
|
gcMockApeluri = ''
|
|
DO Assert WITH LOWER(ALLTRIM(oform.but_urmator1.cAction)) == 'do_urmator', 'butonul Adauga duce la do_urmator'
|
|
DO Assert WITH oform.but_urmator1.Visible, 'butonul Adauga e VIZIBIL pentru tip 1'
|
|
|
|
FOR lnI = 1 TO RECCOUNT('crsarticole')
|
|
SELECT crsarticole
|
|
GO lnI
|
|
oform.do_adauga_articol(.T.)
|
|
ENDFOR
|
|
DOEVENTS FORCE
|
|
|
|
lnFact = IIF(USED('crsfactura'), RECCOUNT('crsfactura'), 0)
|
|
DO Assert WITH lnFact = 2, 'crsfactura are exact 2 linii dupa adaugare, e=' + TRANSFORM(lnFact)
|
|
IF lnFact = 0
|
|
gcNumere = gcNumere + 'DEZALOCAT serie=' + ALLTRIM(TRANSFORM(poDate.serie_act)) + ' nract=' + TRANSFORM(poDate.nract) + ' (fara linii);'
|
|
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
|
DO Elibereaza WITH oform
|
|
DO Goleste
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
DO SeteazaCantitati WITH 'crsfactura'
|
|
|
|
oform.do_calculeaza_totaluri()
|
|
DOEVENTS FORCE
|
|
|
|
lcSerie = ALLTRIM(TRANSFORM(poDate.serie_act))
|
|
lnNract = poDate.nract
|
|
|
|
SET PROCEDURE TO (gcMock) ADDITIVE
|
|
gcMockApeluri = ''
|
|
DO S14P4Log WITH ' [pas] but_termin1.Click'
|
|
oform.but_termin1.Click()
|
|
DOEVENTS FORCE
|
|
DO S14P4Log WITH ' but_termin1.Click() -> poDate.nid_vanzare=' + TRANSFORM(NVL(poDate.nid_vanzare, 0))
|
|
DO S14P4Log WITH ' apeluri amessagebox = [' + STRTRAN(ALLTRIM(gcMockApeluri), CHR(13) + CHR(10), ' | ') + ']'
|
|
|
|
lnIdVz = NVL(poDate.nid_vanzare, 0)
|
|
DO Assert WITH lnIdVz > 0, 'documentul exista (poDate.nid_vanzare, parametru OUT), e=' + TRANSFORM(lnIdVz)
|
|
|
|
IF lnIdVz > 0
|
|
gcNumere = gcNumere + 'SCRIS serie=' + lcSerie + ' nract=' + TRANSFORM(lnNract) + ' id_vanzare=' + TRANSFORM(lnIdVz) + ';'
|
|
ELSE
|
|
gcNumere = gcNumere + 'DEZALOCAT serie=' + lcSerie + ' nract=' + TRANSFORM(lnNract) + ' (nescris);'
|
|
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
|
lcSerie = ''
|
|
lnNract = 0
|
|
ENDIF
|
|
|
|
DO Elibereaza WITH oform
|
|
DO Goleste
|
|
gcUltimaSerie = lcSerie
|
|
gnUltimulNract = lnNract
|
|
RETURN lnIdVz
|
|
ENDFUNC
|
|
|
|
*==================================================================================
|
|
* Reemiterea headless a unui document existent prin v2 (frm_facturare_articole2), traseul din
|
|
* test_s9_4_regenerare.prg Rularea2: incarca antet+linii, modifica o cantitate (forteaza ruta 1 =
|
|
* regenerare), do_scrie_factura() apelat direct - fara Show(), fara buton, fara modal.
|
|
FUNCTION ReemiteDocument
|
|
LPARAMETERS tnIdVechi
|
|
LOCAL lnCod, lnAn, lnLuna, lnIdFactVechi, lnDiscRon, lnDiscVal, loForm, llRez, lnIdVNou, lnRuta
|
|
|
|
gcCaz = '[reemitere] '
|
|
lnCod = 0
|
|
lnAn = 0
|
|
lnLuna = 0
|
|
lnIdFactVechi = 0
|
|
IF USED('crsAntetS14P4')
|
|
USE IN crsAntetS14P4
|
|
ENDIF
|
|
IF goExecutor.oExecuta([select cod, id_fact, extract(year from data_act) an, extract(month from data_act) luna ] + ;
|
|
[from vanzari where id_vanzare = ] + TRANSFORM(NVL(tnIdVechi,0)), 'crsAntetS14P4')
|
|
IF RECCOUNT('crsAntetS14P4') > 0
|
|
SELECT crsAntetS14P4
|
|
GO TOP
|
|
lnCod = NVL(cod, 0)
|
|
lnIdFactVechi = NVL(id_fact, 0)
|
|
lnAn = NVL(an, 0)
|
|
lnLuna = NVL(luna, 0)
|
|
ENDIF
|
|
USE IN crsAntetS14P4
|
|
ENDIF
|
|
DO Assert WITH lnCod > 0 AND lnAn > 0 AND lnLuna > 0, 'antetul lui D0 s-a citit (cod/an/luna), cod=' + TRANSFORM(lnCod)
|
|
IF lnCod <= 0
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
lnDiscRon = 0
|
|
lnDiscVal = 0
|
|
poDate = IncarcaAntetFacturaEditare(tnIdVechi, @lnDiscRon, @lnDiscVal)
|
|
DO Assert WITH VARTYPE(poDate) = 'O', 'antetul lui D0 s-a incarcat pentru editare'
|
|
IF VARTYPE(poDate) <> 'O'
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
IncarcaLiniiFacturaEditare(poDate, tnIdVechi)
|
|
DO Assert WITH USED('crsfactura') AND RECCOUNT('crsfactura') > 0, 'liniile lui D0 s-au incarcat in crsfactura'
|
|
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
IF USED('jtva_coloane')
|
|
USE IN jtva_coloane
|
|
ENDIF
|
|
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
|
|
|
|
loForm = CREATEOBJECT('frm_facturare_articole2')
|
|
DO Assert WITH VARTYPE(loForm) = 'O', 'Createobject frm_facturare_articole2 (fara Show)'
|
|
IF VARTYPE(loForm) <> 'O'
|
|
RETURN 0
|
|
ENDIF
|
|
loForm.ndiscfactron = lnDiscRon
|
|
loForm.ndiscfactval = lnDiscVal
|
|
loForm.do_calculeaza_totaluri()
|
|
|
|
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, tnIdVechi, lnIdFactVechi, lnCod, lnAn, lnLuna)
|
|
DO Assert WITH VARTYPE(poSnapshotEditare) = 'O', 'instantaneul de editare s-a creat'
|
|
IF VARTYPE(poSnapshotEditare) <> 'O'
|
|
TRY
|
|
loForm.Release()
|
|
CATCH
|
|
ENDTRY
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
*-- modificare de cantitate: singura schimbare care forteaza ruta 1 (regenerare)
|
|
SELECT crsfactura
|
|
GO TOP
|
|
REPLACE cantitate WITH cantitate + 1 IN crsfactura
|
|
loForm.do_calculeaza_totaluri()
|
|
|
|
lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura')
|
|
DO Assert WITH lnRuta = 1, 'ruta aleasa pentru modificarea de cantitate este 1 (regenerare), e=' + TRANSFORM(lnRuta)
|
|
IF lnRuta <> 1
|
|
TRY
|
|
loForm.Release()
|
|
CATCH
|
|
ENDTRY
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
llRez = loForm.do_scrie_factura()
|
|
DO Assert WITH llRez, 'do_scrie_factura() a intors .T. pentru reemitere'
|
|
|
|
lnIdVNou = 0
|
|
IF llRez
|
|
lnIdVNou = NVL(poDate.nid_vanzare, 0)
|
|
ENDIF
|
|
DO Assert WITH lnIdVNou > 0, 'poDate.nid_vanzare (OUT) a iesit cu id-ul documentului nou, e=' + TRANSFORM(lnIdVNou)
|
|
|
|
TRY
|
|
loForm.Release()
|
|
CATCH
|
|
ENDTRY
|
|
DO Inchide WITH 'crsfactura'
|
|
DO Inchide WITH 'crsarticole_doc'
|
|
DO Inchide WITH 'crsarticole_editare'
|
|
DO Inchide WITH 'snap_linii_editare'
|
|
DO Inchide WITH 'jtva_coloane'
|
|
poSnapshotEditare = NULL
|
|
DO Goleste
|
|
gcCaz = ''
|
|
RETURN lnIdVNou
|
|
ENDFUNC
|
|
|
|
*==================================================================================
|
|
* Citeste ID_UTIL/DATAORA/ID_UTILM/DATAORAM pentru un id_vanzare, plus flag-uri NULL distincte
|
|
* (0/{} nu s-ar distinge de o valoare reala lipsa).
|
|
FUNCTION CitesteAuditVanzare
|
|
LPARAMETERS tnIdVanzare, tnIdUtil, tdDataora, tnIdUtilm, tdDataoram, tlUtilmNul, tlDataoramNul
|
|
tnIdUtil = 0
|
|
tdDataora = {}
|
|
tnIdUtilm = 0
|
|
tdDataoram = {}
|
|
tlUtilmNul = .F.
|
|
tlDataoramNul = .F.
|
|
LOCAL llOk
|
|
llOk = .F.
|
|
IF USED('crsAuditS14P4')
|
|
USE IN crsAuditS14P4
|
|
ENDIF
|
|
IF goExecutor.oExecuta([select id_util, dataora, id_utilm, dataoram, ] + ;
|
|
[case when id_utilm is null then 1 else 0 end as utilmnul, ] + ;
|
|
[case when dataoram is null then 1 else 0 end as dataoramnul ] + ;
|
|
[from vanzari where id_vanzare = ] + TRANSFORM(NVL(tnIdVanzare,0)), 'crsAuditS14P4')
|
|
IF RECCOUNT('crsAuditS14P4') > 0
|
|
SELECT crsAuditS14P4
|
|
GO TOP
|
|
tnIdUtil = NVL(id_util, 0)
|
|
tdDataora = NVL(dataora, {})
|
|
tnIdUtilm = NVL(id_utilm, 0)
|
|
tdDataoram = NVL(dataoram, {})
|
|
tlUtilmNul = (utilmnul = 1)
|
|
tlDataoramNul = (dataoramnul = 1)
|
|
llOk = (tnIdUtil > 0)
|
|
ENDIF
|
|
USE IN crsAuditS14P4
|
|
ENDIF
|
|
RETURN llOk
|
|
ENDFUNC
|
|
|
|
*==================================================================================
|
|
* Seteaza cantitatea (zeroita de do_initializeaza_articol pentru tip 1) pe toate liniile din
|
|
* crsfactura si recalculeaza linia, ca la S5c/S6-1.
|
|
PROCEDURE SeteazaCantitati
|
|
LPARAMETERS tcAlias
|
|
LOCAL loArt
|
|
SELECT (tcAlias)
|
|
SCAN
|
|
REPLACE cantitate WITH gnCantitateAleasa
|
|
SCATTER NAME loArt MEMO
|
|
loArt = calculeaza_totaluri(loArt)
|
|
GATHER NAME loArt MEMO
|
|
ENDSCAN
|
|
ENDPROC
|
|
|
|
PROCEDURE Elibereaza
|
|
LPARAMETERS toForm
|
|
IF TYPE('toForm') = 'O' AND !ISNULL(toForm)
|
|
TRY
|
|
toForm.Release()
|
|
CATCH
|
|
ENDTRY
|
|
ENDIF
|
|
DO CuratieCrs
|
|
ENDPROC
|
|
|
|
PROCEDURE Goleste
|
|
poDate = NULL
|
|
poGeneratorNumere = NULL
|
|
poDateGestiuneDest = NULL
|
|
ENDPROC
|
|
|
|
PROCEDURE CuratieCrs
|
|
DO Inchide WITH 'crsarticole'
|
|
DO Inchide WITH 'crsarticoleSel'
|
|
DO Inchide WITH 'crsfactura'
|
|
DO Inchide WITH 'crscursuri'
|
|
DO Inchide WITH 'crspolitici'
|
|
DO Inchide WITH 'crsCtrTemp'
|
|
DO Inchide WITH 'jtva_coloane'
|
|
ENDPROC
|
|
|
|
PROCEDURE Inchide
|
|
LPARAMETERS tcAlias
|
|
IF USED(tcAlias)
|
|
USE IN (tcAlias)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
* ultima zi din luna deschisa acoperita de VCURS pentru EURO - cursor_preturi refuza o zi fara curs
|
|
FUNCTION DataCursValid
|
|
LOCAL ldRez, lcSql, lnQ, lcUltima
|
|
ldRez = DATE(gnAn, gnLuna, 1)
|
|
lcUltima = TRANSFORM(gnAn) + PADL(TRANSFORM(gnLuna), 2, '0') + '01'
|
|
IF USED('crscurszi')
|
|
USE IN crscurszi
|
|
ENDIF
|
|
lcSql = [select to_char(max(data),'YYYYMMDD') as d from vcurs ] + ;
|
|
[where upper(nume_val) = 'EURO' and data <= last_day(to_date('] + lcUltima + [','YYYYMMDD'))]
|
|
lnQ = goExecutor.oExecute(lcSql, 'crscurszi')
|
|
IF lnQ >= 0 AND USED('crscurszi') AND RECCOUNT('crscurszi') > 0
|
|
GO TOP IN crscurszi
|
|
IF !ISNULL(crscurszi.d) AND LEN(ALLTRIM(crscurszi.d)) = 8
|
|
ldRez = CTOD(SUBSTR(crscurszi.d,7,2) + '/' + SUBSTR(crscurszi.d,5,2) + '/' + SUBSTR(crscurszi.d,1,4))
|
|
ENDIF
|
|
ELSE
|
|
DO S14P4Log WITH ' DataCursValid ESEC: ' + goExecutor.oPrelucrareEroare()
|
|
ENDIF
|
|
IF USED('crscurszi')
|
|
USE IN crscurszi
|
|
ENDIF
|
|
RETURN ldRez
|
|
ENDFUNC
|
|
|
|
PROCEDURE Assert
|
|
LPARAMETERS tlCond, tcMsg
|
|
IF tlCond
|
|
gnPass = gnPass + 1
|
|
DO S14P4Log WITH 'PASS: ' + gcCaz + tcMsg
|
|
ELSE
|
|
gnFail = gnFail + 1
|
|
DO S14P4Log WITH 'FAIL: ' + gcCaz + tcMsg
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROCEDURE S14P4Log
|
|
LPARAMETERS tcMsg
|
|
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
|
ENDPROC
|
|
|
|
PROCEDURE S14P4Err
|
|
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
|
gnErr = gnErr + 1
|
|
DO S14P4Log WITH 'ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
|
ENDPROC
|
|
|
|
PROCEDURE S14P4Final
|
|
LOCAL lnI
|
|
IF TYPE('_SCREEN.tmrS14P4') = 'O'
|
|
_SCREEN.tmrS14P4.Enabled = .F.
|
|
TRY
|
|
_SCREEN.RemoveObject('tmrS14P4')
|
|
CATCH
|
|
ENDTRY
|
|
ENDIF
|
|
*-- formele ramase deschise arunca "Unhandled Structured Exception" la QUIT (rulare atarnata),
|
|
*-- deci se inchid explicit inainte
|
|
FOR lnI = _SCREEN.FormCount TO 1 STEP -1
|
|
TRY
|
|
_SCREEN.Forms(lnI).Release()
|
|
CATCH
|
|
ENDTRY
|
|
ENDFOR
|
|
*-- registrul numerelor SSS direct din baza: singura sursa care spune care numar e SCRIS si
|
|
*-- care e ARS (alocat si nescris)
|
|
TRY
|
|
IF TYPE('goExecutor') = 'O' AND goExecutor.oExecute([select numar_act, id_vanzare, tip from vanzari ] + ;
|
|
[where sters = 0 and serie_act = 'SSS' and numar_act between 640 and 750 order by numar_act], 'crsNrSSS') >= 0
|
|
DO S14P4Log WITH CHR(13) + CHR(10) + 'REGISTRU SSS in VANZARI (640-750):'
|
|
SELECT crsNrSSS
|
|
SCAN
|
|
DO S14P4Log WITH ' SSS ' + TRANSFORM(numar_act) + ' -> id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip)
|
|
ENDSCAN
|
|
USE IN crsNrSSS
|
|
ENDIF
|
|
CATCH
|
|
ENDTRY
|
|
DO S14P4Log WITH CHR(13) + CHR(10) + 'NUMERE: ' + gcNumere
|
|
DO S14P4Log WITH 'TOTAL pass=' + TRANSFORM(gnPass) + ' fail=' + TRANSFORM(gnFail) + ' err=' + TRANSFORM(gnErr)
|
|
DO S14P4Log WITH 'END ' + TTOC(DATETIME())
|
|
DO HarnessDone WITH 'done'
|
|
QUIT
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* driverS14P4: apasa automat pe formele modale care nu trec prin functia amessagebox -
|
|
* MESSAGEBOX_FORM (cmdYes/cmdOk) si FRM_ALTE_DATE de pe v1 (do_termin, NU Release).
|
|
DEFINE CLASS driverS14P4 AS Custom
|
|
nUltimAlteDate = 0
|
|
lBusy = .F.
|
|
|
|
PROCEDURE Executa
|
|
IF This.lBusy
|
|
RETURN
|
|
ENDIF
|
|
This.lBusy = .T.
|
|
IF TYPE('_SCREEN.tmrS14P4') = 'O'
|
|
_SCREEN.tmrS14P4.Enabled = .F.
|
|
ENDIF
|
|
TRY
|
|
LOCAL lnI, loMsgForm, loAlteDate, lcClasa
|
|
loMsgForm = NULL
|
|
loAlteDate = NULL
|
|
FOR lnI = 1 TO _SCREEN.FormCount
|
|
lcClasa = UPPER(_SCREEN.Forms(lnI).Class)
|
|
IF 'MESSAGEBOX_FORM' $ lcClasa
|
|
loMsgForm = _SCREEN.Forms(lnI)
|
|
ENDIF
|
|
IF lcClasa == 'FRM_ALTE_DATE'
|
|
loAlteDate = _SCREEN.Forms(lnI)
|
|
ENDIF
|
|
IF !(lcClasa $ gcClaseVazute)
|
|
gcClaseVazute = gcClaseVazute + lcClasa + ';'
|
|
DO S14P4Log WITH ' [diag timer] forma noua: ' + lcClasa + ' Caption=[' + TRANSFORM(_SCREEN.Forms(lnI).Caption) + ']'
|
|
ENDIF
|
|
ENDFOR
|
|
IF !ISNULL(loMsgForm)
|
|
TRY
|
|
LOCAL lcTextMsg
|
|
lcTextMsg = ''
|
|
TRY
|
|
lcTextMsg = ALLTRIM(TRANSFORM(loMsgForm.edtMensaje.Value))
|
|
CATCH
|
|
ENDTRY
|
|
DO S14P4Log WITH ' [driver msg] mesaj=[' + STRTRAN(lcTextMsg, CHR(13) + CHR(10), ' ') + ']'
|
|
DO CASE
|
|
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdYes', 5)
|
|
DO S14P4Log WITH ' [driver msg] apas cmgBotones.cmdYes'
|
|
loMsgForm.cmgBotones.cmdYes.Click()
|
|
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdOk', 5)
|
|
DO S14P4Log WITH ' [driver msg] apas cmgBotones.cmdOk'
|
|
loMsgForm.cmgBotones.cmdOk.Click()
|
|
ENDCASE
|
|
CATCH TO loExcMsg
|
|
DO S14P4Log WITH ' [driver msg] CATCH ' + TRANSFORM(loExcMsg.ErrorNo) + ' ' + loExcMsg.Message
|
|
ENDTRY
|
|
ELSE
|
|
IF !ISNULL(loAlteDate) AND (SECONDS() - This.nUltimAlteDate > 1)
|
|
This.nUltimAlteDate = SECONDS()
|
|
TRY
|
|
DO S14P4Log WITH ' [driver alte_date] apas do_termin() pe FRM_ALTE_DATE (id_delegat=' + ;
|
|
TRANSFORM(NVL(poDate.id_delegat, 0)) + ')'
|
|
loAlteDate.do_termin()
|
|
CATCH TO loExcAD
|
|
DO S14P4Log WITH ' [driver alte_date] CATCH ' + TRANSFORM(loExcAD.ErrorNo) + ' ' + loExcAD.Message
|
|
ENDTRY
|
|
ENDIF
|
|
ENDIF
|
|
CATCH TO loExcTop
|
|
DO S14P4Log WITH ' [driver] CATCH TOP-LEVEL ' + TRANSFORM(loExcTop.ErrorNo) + ' ' + loExcTop.Message
|
|
FINALLY
|
|
IF TYPE('_SCREEN.tmrS14P4') = 'O'
|
|
_SCREEN.tmrS14P4.Enabled = .T.
|
|
ENDIF
|
|
This.lBusy = .F.
|
|
ENDTRY
|
|
ENDPROC
|
|
ENDDEFINE
|