838 lines
34 KiB
Plaintext
838 lines
34 KiB
Plaintext
* test_nnir_sincronizare.prg
|
|
* Test e2e (fluxul real): NNIR editabil in Registru Jurnal, cu sincronizare in tact/trul/trul_obinv
|
|
* si in ACT/RUL/RUL_OBINV (Oracle). Vezi cerinta initiala (todos.txt pct. 9) si
|
|
* date_test_nnir.md (datele de test alese, an/luna/cod, stare implementare la data scrierii).
|
|
*
|
|
* Instantiaza frm_modific2024 direct (ca test_repro_cnrcrt_footer.prg din achizitie_import),
|
|
* cu cursoarele tact/trul/trul_obinv construite exact ca afisjurcom.do_modifica (comun.vc2:2352-
|
|
* 2434), dar pe AN/LUNA proprii notei - do_modifica limiteaza editarea la luna curenta de lucru
|
|
* (comun.vc2:2265-2268), iar notele de test nu sunt toate in luna curenta.
|
|
*
|
|
* Editarea NNIR se simuleaza ca un utilizator: pozitionare pe rand, declansarea evenimentelor
|
|
* reale ale coloanei (When la intrare, LostFocus la iesire - textboxul nu comite valoarea in
|
|
* ControlSource inainte de Valid, de-aia implementarea sincronizeaza pe LostFocus), NU apel
|
|
* direct al metodei de sincronizare. Salvarea (Termin) replica blocul din
|
|
* afisjurcom.do_modifica (comun.vc2:2456-2487): oscrie_in_fisiere + pack_contafin.
|
|
* finalizeaza_modificare_nota. Termin reatribuie COD nou (pack_contafin), sub AN/LUNA de sesiune
|
|
* curenta - nu pastreaza COD-ul original; verificarea si curatenia de dupa salvare se fac dupa
|
|
* valoarea NNIR marcaj (nu poate coincide cu date reale), marcand sters=1 (conventia aplicatiei)
|
|
* orice a ajuns sub acea valoare - nota originala (COD/NNIR vechi) ramane intacta.
|
|
*
|
|
* Rulare headless (nu tine VFP IDE deschis; nu rula cu roagest.exe pornit):
|
|
* & "C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" -A -T ;
|
|
* "D:\ROA\ROAGEST\COMUN\utile\Teste\nnir_registru_jurnal\test_nnir_sincronizare.prg"
|
|
* Timeout recomandat: minim 220s. Log: %TEMP%\test_nnir_sincronizare_log.txt (PASS/FAIL pe linie).
|
|
|
|
LPARAMETERS tcMode
|
|
tcMode = IIF(EMPTY(tcMode), 'ALL', UPPER(ALLTRIM(tcMode)))
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
|
|
PUBLIC gcLogFile, gnFail, gnPass
|
|
gcLogFile = ADDBS(SYS(2023)) + 'test_nnir_sincronizare_log.txt'
|
|
gnFail = 0
|
|
gnPass = 0
|
|
STRTOFILE('START ' + tcMode + ' ' + TTOC(DATETIME()) + CHR(13)+CHR(10), gcLogFile)
|
|
|
|
ON ERROR DO NnirErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
* mock amessagebox incarcat INAINTE de mediul aplicatiei: optiuni_firma (in mediul de test)
|
|
* poate afisa un dialog real daca SCRIE_OPTIUNI raporteaza eroare
|
|
SET PROCEDURE TO D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
|
DO D:\ROA\ROAGEST\COMUN\utile\Teste\test_init_env_auto_roagest.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
|
IF gnHandle <= 0
|
|
DO NnirLog WITH 'EROARE: conectare Oracle esuata'
|
|
DO NnirLog WITH 'REZULTAT SUITA: NEDETERMINAT'
|
|
QUIT
|
|
ENDIF
|
|
DO NnirLog WITH 'mediu OK, gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna)
|
|
|
|
* garda anti-blocaj: o variabila lipsa folosita ca ?param intr-un SQL pass-through NU da eroare
|
|
* catchabila - VFP deschide dialogul modal nativ "Enter the value for <var>", care blocheaza
|
|
* headless-ul la nesfarsit si nu lasa nimic in log (vezi date_test_nnir.md). Verificare
|
|
* explicita INAINTE de orice apel care le foloseste, opreste testul cu FAIL clar daca lipseste ceva.
|
|
IF !NnirGardaVariabile()
|
|
DO NnirLog WITH 'REZULTAT SUITA: NEDETERMINAT (garda variabile a picat)'
|
|
QUIT
|
|
ENDIF
|
|
|
|
* mock amessagebox - se incarca ULTIMUL (dupa fisierele aplicatiei), vezi antetul mock-ului
|
|
SET PROCEDURE TO D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
|
|
|
* Grid1.Column63 (explicatie TVA pe rulaje) face Seek pe alias 'crsJtvaTemp' la CONSTRUCTIA
|
|
* formularului (inainte de Init) - fara cursorul deschis, CREATEOBJECT('frm_modific2024',...)
|
|
* pica cu "File 'crsjtvatemp.dbf' does not exist"
|
|
update_jtva_coloane('', 'crsJtvaTemp', 6)
|
|
|
|
LOCAL Omodif, lcCallWhen, lcCallLostFocus, lcCall
|
|
|
|
*=====================================================================================
|
|
* Scenariul 1: NIR/achizitie, cu rulaje in RUL, cu salvare (Termin) + verificare Oracle
|
|
*=====================================================================================
|
|
IF INLIST(tcMode, 'ALL', 'NIR')
|
|
LOCAL lnCod, lnAn, lnLuna, lnIdSet, lnNnirVechi, lnNnirNou
|
|
LOCAL lnCntTactVechi, lnCntTrulVechi, lnCntTactNou, lnCntTrulNou
|
|
LOCAL i, llGasit, lnColOrder, llReadOnly, lnColCheck, lcColName
|
|
|
|
lnCod = 1140841
|
|
lnAn = 2026
|
|
lnLuna = 7
|
|
lnIdSet = 209
|
|
lnNnirVechi = 3
|
|
lnNnirNou = lnNnirVechi + 90000000
|
|
|
|
DO NnirConstruiesteCursoare WITH lnCod, lnAn, lnLuna
|
|
|
|
SELECT tact
|
|
lnCntTactVechi = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirVechi TO lnCntTactVechi
|
|
SELECT trul
|
|
lnCntTrulVechi = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirVechi TO lnCntTrulVechi
|
|
|
|
Omodif = CREATEOBJECT('frm_modific2024', lnIdSet)
|
|
IF VARTYPE(Omodif) <> 'O'
|
|
DO NnirAssert WITH 'instantiere', 'NIR', .F., 'frm_modific2024 nu s-a instantiat'
|
|
ELSE
|
|
SELECT tact
|
|
Omodif.grid1.SetFocus
|
|
Omodif.gridextra1.setup()
|
|
Omodif.CalculeazaTotal()
|
|
|
|
llGasit = .F.
|
|
lnColOrder = 0
|
|
llReadOnly = .T.
|
|
lnColCheck = 0
|
|
FOR i = 1 TO Omodif.grid1.ColumnCount
|
|
lcColName = 'Omodif.grid1.Columns(' + TRANSFORM(i) + ')'
|
|
IF NnirEsteColoanaNnir(EVALUATE(lcColName + '.ControlSource'))
|
|
llGasit = .T.
|
|
lnColOrder = EVALUATE(lcColName + '.ColumnOrder')
|
|
llReadOnly = EVALUATE(lcColName + '.ReadOnly')
|
|
lnColCheck = i
|
|
ENDIF
|
|
ENDFOR
|
|
DO NnirAssert WITH 'coloana_grid', 'NIR', llGasit, 'ControlSource=nnir gasit=' + ;
|
|
TRANSFORM(llGasit) + ' ColumnOrder=' + TRANSFORM(lnColOrder) + ' ReadOnly=' + TRANSFORM(llReadOnly)
|
|
|
|
IF llGasit
|
|
DO NnirAssert WITH 'coloana_editabila', 'NIR', !llReadOnly, 'nota normala: ReadOnly asteptat .F.'
|
|
|
|
SELECT tact
|
|
LOCATE FOR NVL(nnir,0) = lnNnirVechi
|
|
IF FOUND()
|
|
lcCallWhen = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck) + ').Text1.When'
|
|
&lcCallWhen
|
|
REPLACE nnir WITH lnNnirNou
|
|
lcCallLostFocus = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck) + ').Text1.LostFocus'
|
|
&lcCallLostFocus
|
|
|
|
SELECT tact
|
|
lnCntTactNou = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirNou TO lnCntTactNou
|
|
DO NnirAssert WITH 'sync_tact', 'NIR', lnCntTactNou = lnCntTactVechi, ;
|
|
TRANSFORM(lnCntTactNou) + ' randuri tact cu nnir nou (asteptat ' + TRANSFORM(lnCntTactVechi) + ')'
|
|
|
|
* trul = cursorul legat de pgfArticole.page1.grdRulaje (RecordSource) - verificare
|
|
* explicita ca propagarea se vede in cursorul de rulaje, nu doar in tact
|
|
SELECT trul
|
|
lnCntTrulNou = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirNou TO lnCntTrulNou
|
|
DO NnirAssert WITH 'sync_trul', 'NIR', lnCntTrulNou = lnCntTrulVechi, ;
|
|
TRANSFORM(lnCntTrulNou) + ' randuri trul (grid rulaje) cu nnir nou (asteptat ' + TRANSFORM(lnCntTrulVechi) + ')'
|
|
ELSE
|
|
DO NnirAssert WITH 'locate_rand_vechi', 'NIR', .F., 'nu s-a gasit randul cu nnir vechi in tact'
|
|
ENDIF
|
|
ENDIF
|
|
|
|
DO NnirVerificaOracleNeschimbat WITH lnCod, lnNnirVechi, 'NIR'
|
|
|
|
Omodif.Release()
|
|
Omodif = NULL
|
|
DO NnirSalveazaSiVerifica WITH lnCod, lnAn, lnLuna, lnIdSet, lnNnirVechi, lnNnirNou, 'NIR'
|
|
ENDIF
|
|
DO NnirCurataCursoare
|
|
ENDIF
|
|
|
|
*=====================================================================================
|
|
* Scenariul 2: obiecte de inventar, cu rulaje in RUL_OBINV, cu salvare + verificare Oracle
|
|
*=====================================================================================
|
|
IF INLIST(tcMode, 'ALL', 'OBINV')
|
|
LOCAL lnCod2, lnAn2, lnLuna2, lnIdSet2, lnNnirVechi2, lnNnirNou2
|
|
LOCAL lnCntTactVechi2, lnCntRobinvVechi2, lnCntTactNou2, lnCntRobinvNou2
|
|
LOCAL i2, llGasit2, lnColOrder2, llReadOnly2, lnColCheck2, lcColName2
|
|
|
|
lnCod2 = 1140835
|
|
lnAn2 = 2026
|
|
lnLuna2 = 6
|
|
lnIdSet2 = 211
|
|
lnNnirVechi2 = 2026060001
|
|
lnNnirNou2 = lnNnirVechi2 + 90000000
|
|
|
|
DO NnirConstruiesteCursoare WITH lnCod2, lnAn2, lnLuna2
|
|
|
|
SELECT tact
|
|
lnCntTactVechi2 = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirVechi2 TO lnCntTactVechi2
|
|
SELECT trul_obinv
|
|
lnCntRobinvVechi2 = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirVechi2 TO lnCntRobinvVechi2
|
|
|
|
Omodif = CREATEOBJECT('frm_modific2024', lnIdSet2)
|
|
IF VARTYPE(Omodif) <> 'O'
|
|
DO NnirAssert WITH 'instantiere', 'OBINV', .F., 'frm_modific2024 nu s-a instantiat'
|
|
ELSE
|
|
SELECT tact
|
|
Omodif.grid1.SetFocus
|
|
Omodif.gridextra1.setup()
|
|
Omodif.CalculeazaTotal()
|
|
|
|
llGasit2 = .F.
|
|
lnColOrder2 = 0
|
|
llReadOnly2 = .T.
|
|
lnColCheck2 = 0
|
|
FOR i2 = 1 TO Omodif.grid1.ColumnCount
|
|
lcColName2 = 'Omodif.grid1.Columns(' + TRANSFORM(i2) + ')'
|
|
IF NnirEsteColoanaNnir(EVALUATE(lcColName2 + '.ControlSource'))
|
|
llGasit2 = .T.
|
|
lnColOrder2 = EVALUATE(lcColName2 + '.ColumnOrder')
|
|
llReadOnly2 = EVALUATE(lcColName2 + '.ReadOnly')
|
|
lnColCheck2 = i2
|
|
ENDIF
|
|
ENDFOR
|
|
DO NnirAssert WITH 'coloana_grid', 'OBINV', llGasit2, 'ControlSource=nnir gasit=' + ;
|
|
TRANSFORM(llGasit2) + ' ColumnOrder=' + TRANSFORM(lnColOrder2) + ' ReadOnly=' + TRANSFORM(llReadOnly2)
|
|
|
|
IF llGasit2
|
|
SELECT tact
|
|
LOCATE FOR NVL(nnir,0) = lnNnirVechi2
|
|
IF FOUND()
|
|
lcCallWhen = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck2) + ').Text1.When'
|
|
&lcCallWhen
|
|
REPLACE nnir WITH lnNnirNou2
|
|
lcCallLostFocus = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck2) + ').Text1.LostFocus'
|
|
&lcCallLostFocus
|
|
|
|
SELECT tact
|
|
lnCntTactNou2 = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirNou2 TO lnCntTactNou2
|
|
DO NnirAssert WITH 'sync_tact', 'OBINV', lnCntTactNou2 = lnCntTactVechi2, ;
|
|
TRANSFORM(lnCntTactNou2) + ' randuri tact cu nnir nou (asteptat ' + TRANSFORM(lnCntTactVechi2) + ')'
|
|
|
|
SELECT trul_obinv
|
|
lnCntRobinvNou2 = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirNou2 TO lnCntRobinvNou2
|
|
DO NnirAssert WITH 'sync_trul_obinv', 'OBINV', lnCntRobinvNou2 = lnCntRobinvVechi2, ;
|
|
TRANSFORM(lnCntRobinvNou2) + ' randuri trul_obinv cu nnir nou (asteptat ' + TRANSFORM(lnCntRobinvVechi2) + ')'
|
|
ELSE
|
|
DO NnirAssert WITH 'locate_rand_vechi', 'OBINV', .F., 'nu s-a gasit randul cu nnir vechi in tact'
|
|
ENDIF
|
|
ENDIF
|
|
|
|
Omodif.Release()
|
|
Omodif = NULL
|
|
DO NnirSalveazaSiVerificaObinv WITH lnCod2, lnAn2, lnLuna2, lnIdSet2, lnNnirVechi2, lnNnirNou2
|
|
ENDIF
|
|
DO NnirCurataCursoare
|
|
ENDIF
|
|
|
|
*=====================================================================================
|
|
* Scenariul 3: nota fara rulaje - regresie (nu crapa), cu salvare + verificare Oracle
|
|
*=====================================================================================
|
|
IF INLIST(tcMode, 'ALL', 'FARARUL')
|
|
LOCAL lnCod3, lnAn3, lnLuna3, lnIdSet3, lnNnirVechi3, lnNnirNou3
|
|
LOCAL lnCntTactVechi3, lnCntTactNou3
|
|
LOCAL i3, llGasit3, lnColCheck3, lcColName3
|
|
|
|
lnCod3 = 1140848
|
|
lnAn3 = 2026
|
|
lnLuna3 = 7
|
|
lnIdSet3 = 209
|
|
lnNnirVechi3 = 124
|
|
lnNnirNou3 = lnNnirVechi3 + 90000000
|
|
|
|
DO NnirConstruiesteCursoare WITH lnCod3, lnAn3, lnLuna3
|
|
|
|
SELECT tact
|
|
lnCntTactVechi3 = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirVechi3 TO lnCntTactVechi3
|
|
|
|
Omodif = CREATEOBJECT('frm_modific2024', lnIdSet3)
|
|
IF VARTYPE(Omodif) <> 'O'
|
|
DO NnirAssert WITH 'instantiere', 'FARARUL', .F., 'frm_modific2024 nu s-a instantiat'
|
|
ELSE
|
|
SELECT tact
|
|
Omodif.grid1.SetFocus
|
|
Omodif.gridextra1.setup()
|
|
Omodif.CalculeazaTotal()
|
|
|
|
llGasit3 = .F.
|
|
lnColCheck3 = 0
|
|
FOR i3 = 1 TO Omodif.grid1.ColumnCount
|
|
lcColName3 = 'Omodif.grid1.Columns(' + TRANSFORM(i3) + ')'
|
|
IF NnirEsteColoanaNnir(EVALUATE(lcColName3 + '.ControlSource'))
|
|
llGasit3 = .T.
|
|
lnColCheck3 = i3
|
|
ENDIF
|
|
ENDFOR
|
|
DO NnirAssert WITH 'coloana_grid', 'FARARUL', llGasit3, 'ControlSource=nnir gasit=' + TRANSFORM(llGasit3)
|
|
|
|
IF llGasit3
|
|
SELECT tact
|
|
LOCATE FOR NVL(nnir,0) = lnNnirVechi3
|
|
IF FOUND()
|
|
lcCallWhen = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck3) + ').Text1.When'
|
|
&lcCallWhen
|
|
REPLACE nnir WITH lnNnirNou3
|
|
lcCallLostFocus = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheck3) + ').Text1.LostFocus'
|
|
&lcCallLostFocus
|
|
|
|
SELECT tact
|
|
lnCntTactNou3 = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirNou3 TO lnCntTactNou3
|
|
DO NnirAssert WITH 'sync_tact', 'FARARUL', lnCntTactNou3 = lnCntTactVechi3, ;
|
|
TRANSFORM(lnCntTactNou3) + ' randuri tact cu nnir nou (asteptat ' + TRANSFORM(lnCntTactVechi3) + ')'
|
|
DO NnirAssert WITH 'nu_crapa', 'FARARUL', .T., 'editarea pe nota fara rulaje nu a generat eroare'
|
|
ELSE
|
|
DO NnirAssert WITH 'locate_rand_vechi', 'FARARUL', .F., 'nu s-a gasit randul cu nnir vechi in tact'
|
|
ENDIF
|
|
ENDIF
|
|
|
|
Omodif.Release()
|
|
Omodif = NULL
|
|
DO NnirSalveazaSiVerifica WITH lnCod3, lnAn3, lnLuna3, lnIdSet3, lnNnirVechi3, lnNnirNou3, 'FARARUL'
|
|
ENDIF
|
|
DO NnirCurataCursoare
|
|
ENDIF
|
|
|
|
*=====================================================================================
|
|
* Scenariul 4: nota de inventar (id_set=90101) - regresie blocare editare NNIR
|
|
*=====================================================================================
|
|
IF INLIST(tcMode, 'ALL', 'INVENTAR')
|
|
LOCAL lnCod4, lnAn4, lnLuna4, lnIdSet4
|
|
LOCAL i4, llGasit4, llReadOnly4, lcColName4
|
|
|
|
lnCod4 = 1140716
|
|
lnAn4 = 2026
|
|
lnLuna4 = 3
|
|
lnIdSet4 = 90101
|
|
|
|
DO NnirConstruiesteCursoare WITH lnCod4, lnAn4, lnLuna4
|
|
|
|
Omodif = CREATEOBJECT('frm_modific2024', lnIdSet4)
|
|
IF VARTYPE(Omodif) <> 'O'
|
|
DO NnirAssert WITH 'instantiere', 'INVENTAR', .F., 'frm_modific2024 nu s-a instantiat'
|
|
ELSE
|
|
SELECT tact
|
|
Omodif.grid1.SetFocus
|
|
Omodif.gridextra1.setup()
|
|
Omodif.CalculeazaTotal()
|
|
|
|
llGasit4 = .F.
|
|
llReadOnly4 = .F.
|
|
FOR i4 = 1 TO Omodif.grid1.ColumnCount
|
|
lcColName4 = 'Omodif.grid1.Columns(' + TRANSFORM(i4) + ')'
|
|
IF NnirEsteColoanaNnir(EVALUATE(lcColName4 + '.ControlSource'))
|
|
llGasit4 = .T.
|
|
llReadOnly4 = EVALUATE(lcColName4 + '.ReadOnly')
|
|
ENDIF
|
|
ENDFOR
|
|
DO NnirAssert WITH 'coloana_grid', 'INVENTAR', llGasit4, 'ControlSource=nnir gasit=' + TRANSFORM(llGasit4)
|
|
IF llGasit4
|
|
* nu se incearca editarea - doar se verifica blocarea, ca sa nu se altereze o nota
|
|
* reala de inventar cat timp blocarea nu e implementata
|
|
DO NnirAssert WITH 'coloana_blocata', 'INVENTAR', llReadOnly4, ;
|
|
'id_set=90101: ReadOnly asteptat .T., gasit ' + TRANSFORM(llReadOnly4)
|
|
ENDIF
|
|
|
|
Omodif.Release()
|
|
Omodif = NULL
|
|
ENDIF
|
|
DO NnirCurataCursoare
|
|
ENDIF
|
|
|
|
*=====================================================================================
|
|
* Scenariul 5: stergere NNIR (-> 0) pe randul unei note cu rulaje - propagare la 0.
|
|
* Comportament nou (runda 4): garda EMPTY(NVL(tnNnirNou,0)) eliminata din sincronizeaza_nnir,
|
|
* ramane doar egalitatea - stergerea celulei (0 scris pe rand inainte de LostFocus) trebuie sa
|
|
* se propage la toate liniile cu valoarea veche, nu doar schimbarile intre doua valori nenule.
|
|
* Doar la nivel de cursoare (tact/trul) - nu se salveaza in Oracle.
|
|
*=====================================================================================
|
|
IF INLIST(tcMode, 'ALL', 'ZERO')
|
|
LOCAL lnCodZ, lnAnZ, lnLunaZ, lnIdSetZ, lnNnirVechiZ
|
|
LOCAL lnCntTactVechiZ, lnCntTrulVechiZ, lnCntTactRamasVechiZ, lnCntTrulRamasVechiZ
|
|
LOCAL lnCntTactZeroZ, lnCntTrulZeroZ
|
|
LOCAL iz, llGasitZ, lnColCheckZ, lcColNameZ
|
|
|
|
lnCodZ = 1140841
|
|
lnAnZ = 2026
|
|
lnLunaZ = 7
|
|
lnIdSetZ = 209
|
|
lnNnirVechiZ = 3
|
|
|
|
DO NnirConstruiesteCursoare WITH lnCodZ, lnAnZ, lnLunaZ
|
|
|
|
SELECT tact
|
|
lnCntTactVechiZ = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirVechiZ TO lnCntTactVechiZ
|
|
SELECT trul
|
|
lnCntTrulVechiZ = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirVechiZ TO lnCntTrulVechiZ
|
|
|
|
Omodif = CREATEOBJECT('frm_modific2024', lnIdSetZ)
|
|
IF VARTYPE(Omodif) <> 'O'
|
|
DO NnirAssert WITH 'instantiere', 'ZERO', .F., 'frm_modific2024 nu s-a instantiat'
|
|
ELSE
|
|
SELECT tact
|
|
Omodif.grid1.SetFocus
|
|
Omodif.gridextra1.setup()
|
|
Omodif.CalculeazaTotal()
|
|
|
|
llGasitZ = .F.
|
|
lnColCheckZ = 0
|
|
FOR iz = 1 TO Omodif.grid1.ColumnCount
|
|
lcColNameZ = 'Omodif.grid1.Columns(' + TRANSFORM(iz) + ')'
|
|
IF NnirEsteColoanaNnir(EVALUATE(lcColNameZ + '.ControlSource'))
|
|
llGasitZ = .T.
|
|
lnColCheckZ = iz
|
|
ENDIF
|
|
ENDFOR
|
|
DO NnirAssert WITH 'coloana_grid', 'ZERO', llGasitZ, 'ControlSource=nnir gasit=' + TRANSFORM(llGasitZ)
|
|
|
|
IF llGasitZ
|
|
SELECT tact
|
|
LOCATE FOR NVL(nnir,0) = lnNnirVechiZ
|
|
IF FOUND()
|
|
lcCallWhen = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheckZ) + ').Text1.When'
|
|
&lcCallWhen
|
|
* simuleaza stergerea celulei: utilizatorul goleste campul, valoarea ajunge 0
|
|
REPLACE nnir WITH 0
|
|
lcCallLostFocus = 'Omodif.grid1.Columns(' + TRANSFORM(lnColCheckZ) + ').Text1.LostFocus'
|
|
&lcCallLostFocus
|
|
|
|
SELECT tact
|
|
lnCntTactRamasVechiZ = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirVechiZ TO lnCntTactRamasVechiZ
|
|
lnCntTactZeroZ = 0
|
|
COUNT FOR NVL(nnir,0) = 0 TO lnCntTactZeroZ
|
|
DO NnirAssert WITH 'sync_tact_zero', 'ZERO', lnCntTactRamasVechiZ = 0 AND lnCntTactZeroZ >= lnCntTactVechiZ, ;
|
|
TRANSFORM(lnCntTactRamasVechiZ) + ' randuri tact au ramas pe valoarea veche (asteptat 0), ' + ;
|
|
TRANSFORM(lnCntTactZeroZ) + ' au ajuns la 0 (asteptat cel putin ' + TRANSFORM(lnCntTactVechiZ) + ')'
|
|
|
|
* verificare explicita in cursorul legat de grid-ul de rulaje (pgfArticole.page1.grdRulaje)
|
|
SELECT trul
|
|
lnCntTrulRamasVechiZ = 0
|
|
COUNT FOR NVL(nnir,0) = lnNnirVechiZ TO lnCntTrulRamasVechiZ
|
|
lnCntTrulZeroZ = 0
|
|
COUNT FOR NVL(nnir,0) = 0 TO lnCntTrulZeroZ
|
|
DO NnirAssert WITH 'sync_trul_zero', 'ZERO', lnCntTrulRamasVechiZ = 0 AND lnCntTrulZeroZ >= lnCntTrulVechiZ, ;
|
|
TRANSFORM(lnCntTrulRamasVechiZ) + ' randuri trul au ramas pe valoarea veche (asteptat 0), ' + ;
|
|
TRANSFORM(lnCntTrulZeroZ) + ' au ajuns la 0 (asteptat cel putin ' + TRANSFORM(lnCntTrulVechiZ) + ')'
|
|
ELSE
|
|
DO NnirAssert WITH 'locate_rand_vechi', 'ZERO', .F., 'nu s-a gasit randul cu nnir vechi in tact'
|
|
ENDIF
|
|
ENDIF
|
|
|
|
Omodif.Release()
|
|
Omodif = NULL
|
|
ENDIF
|
|
DO NnirCurataCursoare
|
|
ENDIF
|
|
|
|
*=====================================================================================
|
|
* Scenariul 6: nota de inventar (id_set=90101) pe sucursala CURENTA - blocarea NNIR trebuie sa
|
|
* vina din regula 90101, nu din blocarea pe sucursala din AfterRowColChange. Scenariul 4 ruleaza
|
|
* pe o nota din alta sucursala, unde SetAll("ReadOnly",.T.) blocheaza oricum tot gridul, deci ar
|
|
* trece si fara implementare. Aici gnIdSucursala se aliniaza la id_sucursala notei (llReadOnly
|
|
* iese .F.), se declanseaza AfterRowColChange (care face SetAll dupa Init) si se verifica ca
|
|
* Column44 ramane blocata cat timp restul coloanelor sunt editabile.
|
|
*=====================================================================================
|
|
IF INLIST(tcMode, 'ALL', 'INVENTAR2')
|
|
LOCAL lnCod6, lnAn6, lnLuna6, lnIdSet6
|
|
LOCAL i6, llGasit6, llReadOnly6, lnEditabile6, lnSucVechi6, llMamaVechi6
|
|
LOCAL lnIdSucNota6, lcColName6
|
|
|
|
lnCod6 = 1140716
|
|
lnAn6 = 2026
|
|
lnLuna6 = 3
|
|
lnIdSet6 = 90101
|
|
|
|
DO NnirConstruiesteCursoare WITH lnCod6, lnAn6, lnLuna6
|
|
|
|
SELECT tact
|
|
GO TOP
|
|
lnIdSucNota6 = NVL(tact.id_sucursala, 0)
|
|
lnSucVechi6 = gnIdSucursala
|
|
llMamaVechi6 = glEMama
|
|
gnIdSucursala = lnIdSucNota6
|
|
glEMama = .F.
|
|
|
|
Omodif = CREATEOBJECT('frm_modific2024', lnIdSet6)
|
|
IF VARTYPE(Omodif) <> 'O'
|
|
DO NnirAssert WITH 'instantiere', 'INVENTAR2', .F., 'frm_modific2024 nu s-a instantiat'
|
|
ELSE
|
|
SELECT tact
|
|
GO TOP
|
|
Omodif.grid1.SetFocus
|
|
Omodif.gridextra1.setup()
|
|
Omodif.CalculeazaTotal()
|
|
|
|
* AfterRowColChange face SetAll("ReadOnly", llReadOnly) peste blocarea pusa in Init
|
|
Omodif.grid1.AfterRowColChange(1)
|
|
|
|
llGasit6 = .F.
|
|
llReadOnly6 = .F.
|
|
lnEditabile6 = 0
|
|
FOR i6 = 1 TO Omodif.grid1.ColumnCount
|
|
lcColName6 = 'Omodif.grid1.Columns(' + TRANSFORM(i6) + ')'
|
|
IF NnirEsteColoanaNnir(EVALUATE(lcColName6 + '.ControlSource'))
|
|
llGasit6 = .T.
|
|
llReadOnly6 = EVALUATE(lcColName6 + '.ReadOnly')
|
|
ELSE
|
|
IF !EVALUATE(lcColName6 + '.ReadOnly')
|
|
lnEditabile6 = lnEditabile6 + 1
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
DO NnirAssert WITH 'coloana_grid', 'INVENTAR2', llGasit6, 'ControlSource=nnir gasit=' + TRANSFORM(llGasit6)
|
|
* control: daca gridul e blocat integral, testul de blocare NNIR nu dovedeste nimic
|
|
DO NnirAssert WITH 'grid_editabil', 'INVENTAR2', lnEditabile6 > 0, ;
|
|
'coloane editabile (fara nnir): ' + TRANSFORM(lnEditabile6) + ' (asteptat > 0, ' + ;
|
|
'gnIdSucursala=' + TRANSFORM(lnIdSucNota6) + ')'
|
|
IF llGasit6
|
|
DO NnirAssert WITH 'coloana_blocata', 'INVENTAR2', llReadOnly6, ;
|
|
'id_set=90101 pe sucursala curenta: ReadOnly asteptat .T., gasit ' + TRANSFORM(llReadOnly6)
|
|
ENDIF
|
|
|
|
Omodif.Release()
|
|
Omodif = NULL
|
|
ENDIF
|
|
|
|
gnIdSucursala = lnSucVechi6
|
|
glEMama = llMamaVechi6
|
|
DO NnirCurataCursoare
|
|
ENDIF
|
|
|
|
DO NnirLog WITH 'REZULTAT SUITA: ' + TRANSFORM(gnPass) + ' PASS, ' + TRANSFORM(gnFail) + ' FAIL'
|
|
QUIT
|
|
|
|
*=====================================================================================
|
|
* proceduri ajutatoare (fara CREATEOBJECT - vezi depanare_testare_vfp.md / capcana l:
|
|
* CREATEOBJECT apelat dintr-o procedura se comporta gresit in acest runtime headless)
|
|
*=====================================================================================
|
|
|
|
PROCEDURE NnirLog
|
|
LPARAMETERS tcMsg
|
|
STRTOFILE(tcMsg + CHR(13)+CHR(10), gcLogFile, 1)
|
|
ENDPROC
|
|
|
|
PROCEDURE NnirAssert
|
|
LPARAMETERS tcPas, tcCaz, llOk, tcDetaliu
|
|
LOCAL lcRez
|
|
lcRez = IIF(llOk, 'PASS', 'FAIL')
|
|
IF llOk
|
|
gnPass = gnPass + 1
|
|
ELSE
|
|
gnFail = gnFail + 1
|
|
ENDIF
|
|
DO NnirLog WITH lcRez + ' [' + tcCaz + '/' + tcPas + '] ' + tcDetaliu
|
|
ENDPROC
|
|
|
|
PROCEDURE NnirErr
|
|
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
|
DO NnirLog WITH 'ERR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
|
ENDPROC
|
|
|
|
* verifica ca toate variabilele folosite ca ?param in SQL pass-through pe calea de test (env-init,
|
|
* optiuni_firma, oscrie_in_fisiere, pack_contafin/pack_sesiune) sunt definite - o variabila
|
|
* PUBLIC lipsa/umbrita da direct dialogul modal "Enter the value for <var>", nu o eroare catchabila
|
|
FUNCTION NnirGardaVariabile
|
|
LOCAL laVar(9), i, llOk
|
|
laVar(1) = 'gnIdUtil'
|
|
laVar(2) = 'gnAn'
|
|
laVar(3) = 'gnLuna'
|
|
laVar(4) = 'gnIdFirma'
|
|
laVar(5) = 'gnIdSucursala'
|
|
laVar(6) = 'gcS'
|
|
laVar(7) = 'gnIdProgram'
|
|
laVar(8) = 'gnId_Prg_Owner'
|
|
laVar(9) = 'gnHandle'
|
|
llOk = .T.
|
|
FOR i = 1 TO ALEN(laVar)
|
|
IF TYPE(laVar(i)) == 'U'
|
|
DO NnirLog WITH 'FAIL [garda_variabile] ' + laVar(i) + ' nu exista (TYPE U) - ar fi dat dialog modal "Enter the value"'
|
|
llOk = .F.
|
|
ENDIF
|
|
ENDFOR
|
|
RETURN llOk
|
|
ENDFUNC
|
|
|
|
* VFP calificat automat ControlSource-ul unui camp simplu cu aliasul cursorului (RecordSource) -
|
|
* "nnir" definit in sursa apare la runtime ca "tact.nnir" - se accepta ambele forme
|
|
FUNCTION NnirEsteColoanaNnir
|
|
LPARAMETERS tcControlSource
|
|
LOCAL lcCs
|
|
lcCs = UPPER(ALLTRIM(TRANSFORM(tcControlSource)))
|
|
RETURN lcCs == 'NNIR' OR RIGHT(lcCs, 5) == '.NNIR'
|
|
ENDFUNC
|
|
|
|
* construieste tact/trul/trul_obinv exact ca afisjurcom.do_modifica (comun.vc2:2352-2434),
|
|
* dar pe AN/LUNA proprii notei (nu gnAn/gnLuna) - vezi antetul fisierului
|
|
PROCEDURE NnirConstruiesteCursoare
|
|
LPARAMETERS tnCod, tnAn, tnLuna
|
|
LOCAL lcSql, lnSucces
|
|
|
|
DO NnirCurataCursoare
|
|
|
|
lcSql = [select * from vact_tot where sters = 0 and an = ] + TRANSFORM(tnAn) + ;
|
|
[ and luna = ] + TRANSFORM(tnLuna) + [ and cod = ] + TRANSFORM(tnCod) + [ order by id_act]
|
|
lnSucces = goExecutor.oExecute(lcSql, 'v_act')
|
|
goExecutor.oReset()
|
|
IF lnSucces < 0
|
|
DO NnirLog WITH 'EROARE construire tact: ' + goExecutor.cEroare
|
|
RETURN .F.
|
|
ENDIF
|
|
SELECT * FROM v_act INTO CURSOR actactan
|
|
SELECT .F. AS ales, T.*, CAST(0 AS N(2)) AS tipnota FROM actactan T INTO CURSOR tact READWRITE
|
|
USE IN v_act
|
|
|
|
lcSql = [select * from vrul_tot where sters = 0 and an = ] + TRANSFORM(tnAn) + ;
|
|
[ and luna = ] + TRANSFORM(tnLuna) + [ and cod = ] + TRANSFORM(tnCod) + [ order by id_rul]
|
|
goExecutor.oExecute(lcSql, 'v_rul')
|
|
goExecutor.oReset()
|
|
SELECT *, valoare + valtva AS valoarectva, valoarev + valtvav AS valoarevctva ;
|
|
FROM v_rul INTO CURSOR RUL_TEMP READWRITE
|
|
SELECT * FROM RUL_TEMP INTO CURSOR trul READWRITE
|
|
USE IN v_rul
|
|
|
|
lcSql = [select * from vrul_obinv_tot where sters = 0 and an = ] + TRANSFORM(tnAn) + ;
|
|
[ and luna = ] + TRANSFORM(tnLuna) + [ and cod = ] + TRANSFORM(tnCod) + [ order by id_rul_obinv]
|
|
goExecutor.oExecute(lcSql, 'v_rul_obinv')
|
|
goExecutor.oReset()
|
|
SELECT *, valoare + valtva AS valoarectva, valoarev + valtvav AS valoarevctva ;
|
|
FROM v_rul_obinv INTO CURSOR RUL_TEMP_OBINV READWRITE
|
|
SELECT * FROM RUL_TEMP_OBINV INTO CURSOR trul_obinv READWRITE
|
|
USE IN v_rul_obinv
|
|
|
|
SELECT a.*, IIF(NVL(a.id_jtva_coloana,0)=0,0,1) AS cu_tva FROM tact a INTO CURSOR tact READWRITE
|
|
SELECT tact
|
|
GO TOP
|
|
RETURN .T.
|
|
ENDPROC
|
|
|
|
PROCEDURE NnirCurataCursoare
|
|
IF USED('tact')
|
|
USE IN tact
|
|
ENDIF
|
|
IF USED('trul')
|
|
USE IN trul
|
|
ENDIF
|
|
IF USED('trul_obinv')
|
|
USE IN trul_obinv
|
|
ENDIF
|
|
IF USED('actactan')
|
|
USE IN actactan
|
|
ENDIF
|
|
IF USED('rul_temp')
|
|
USE IN rul_temp
|
|
ENDIF
|
|
IF USED('rul_temp_obinv')
|
|
USE IN rul_temp_obinv
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNCTION NnirOraCount
|
|
LPARAMETERS tcSql
|
|
LOCAL lnVal, llOk
|
|
lnVal = -1
|
|
llOk = goExecutor.oExecuta(tcSql, 'cNnirOraCnt')
|
|
IF llOk AND USED('cNnirOraCnt') AND RECCOUNT('cNnirOraCnt') > 0
|
|
lnVal = cNnirOraCnt.cnt
|
|
ENDIF
|
|
IF USED('cNnirOraCnt')
|
|
USE IN cNnirOraCnt
|
|
ENDIF
|
|
RETURN lnVal
|
|
ENDFUNC
|
|
|
|
* verifica ca in Oracle nu s-a scris nimic dupa editarea DOAR in cursoare (echivalent Renunt)
|
|
PROCEDURE NnirVerificaOracleNeschimbat
|
|
LPARAMETERS tnCod, tnNnirVechi, tcCaz
|
|
LOCAL lnCnt, lcSql
|
|
lcSql = [select count(*) cnt from act where cod = ] + TRANSFORM(tnCod) + ;
|
|
[ and nnir = ] + TRANSFORM(tnNnirVechi)
|
|
lnCnt = NnirOraCount(lcSql)
|
|
DO NnirAssert WITH 'renunt_neschimbat', tcCaz, lnCnt > 0, ;
|
|
'ACT.NNIR in Oracle inainte de Termin ramane ' + TRANSFORM(tnNnirVechi) + ' (' + TRANSFORM(lnCnt) + ' randuri)'
|
|
ENDPROC
|
|
|
|
* replica blocul de salvare din afisjurcom.do_modifica (comun.vc2:2456-2487): scrie tact/trul/
|
|
* trul_obinv in ACT/RUL/RUL_OBINV prin oscrie_in_fisiere + pack_contafin.finalizeaza_modificare_
|
|
* nota, verifica in Oracle, apoi reface valoarea originala (revert - baza de test ramane
|
|
* neschimbata pentru rulari repetate)
|
|
PROCEDURE NnirSalveazaSiVerifica
|
|
LPARAMETERS tnCod, tnAn, tnLuna, tnIdSet, tnNnirVechi, tnNnirNou, tcCaz
|
|
PRIVATE pnAn, pnLuna, pdDataOra
|
|
LOCAL lnIdFact, lnIdfactd, llRul, lnSuccesSalvare, lcSqlFin, lnCnt, lcSql
|
|
|
|
pnAn = tnAn
|
|
pnLuna = tnLuna
|
|
pdDataOra = NULL
|
|
|
|
SELECT tact
|
|
LOCATE FOR NVL(nnir,0) = tnNnirNou
|
|
lnIdFact = NVL(id_fact, 0)
|
|
lnIdfactd = NVL(id_factd, 0)
|
|
|
|
llRul = (RECCOUNT('trul') > 0) OR (RECCOUNT('trul_obinv') > 0)
|
|
|
|
* thisform.do_deschide_tranzactie()/do_inchide_tranzactie() din afisjurcom (_frm_base.vc2:252-
|
|
* 305, mostenite, apelate pe formularul de jurnal, nu pe frm_modific2024) - echivalent direct,
|
|
* fara instanta de forma: manual pe durata scrierii, apoi commit/rollback + revenire pe auto
|
|
SQLSetProp(gnHandle, 'Transactions', 2)
|
|
|
|
* replica exact secventa din afisjurcom.do_modifica: intai STERGE nota veche (COD-ul
|
|
* original, din actactan neatins de editare), abia apoi SCRIE varianta editata
|
|
SELECT actactan
|
|
lnSuccesSalvare = oscrie_in_fisiere(2, .T., llRul)
|
|
DO NnirAssert WITH 'oscrie_in_fisiere_sterge', tcCaz, lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
|
|
|
IF lnSuccesSalvare > 0
|
|
SELECT * FROM tact INTO CURSOR actactan READWRITE
|
|
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN actactan
|
|
|
|
IF llRul
|
|
SELECT * FROM trul INTO CURSOR rul_temp READWRITE
|
|
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN rul_temp
|
|
SELECT * FROM trul_obinv INTO CURSOR rul_temp_obinv READWRITE
|
|
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN rul_temp_obinv
|
|
ENDIF
|
|
|
|
lnSuccesSalvare = oscrie_in_fisiere(0, .T., llRul)
|
|
DO NnirAssert WITH 'oscrie_in_fisiere', tcCaz, lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
|
ENDIF
|
|
|
|
IF lnSuccesSalvare > 0
|
|
lcSqlFin = [begin pack_contafin.finalizeaza_modificare_nota(?pnLuna,?pnAn,?pdDataOra,] + ;
|
|
TRANSFORM(tnIdSet) + [,] + TRANSFORM(tnCod) + [,] + TRANSFORM(lnIdFact) + [,] + ;
|
|
TRANSFORM(lnIdfactd) + [,?gnIdUtil); end;]
|
|
lnSuccesSalvare = IIF(goExecutor.oExecuta(lcSqlFin), 1, -1)
|
|
DO NnirAssert WITH 'finalizeaza_modificare_nota', tcCaz, lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
|
ENDIF
|
|
|
|
IF lnSuccesSalvare > 0
|
|
SQLCOMMIT(gnHandle)
|
|
ELSE
|
|
SQLROLLBACK(gnHandle)
|
|
ENDIF
|
|
SQLSetProp(gnHandle, 'Transactions', 1)
|
|
|
|
* Termin reatribuie COD nou (pack_contafin), sub AN/LUNA de sesiune curente - nu pastreaza
|
|
* COD-ul original notei editate. Verificarea si curatenia se fac dupa valoarea NNIR marcaj
|
|
* (distincta, nu poate coincide cu date reale), nu dupa COD-ul original.
|
|
lcSql = [select count(*) cnt from act where sters = 0 and nnir = ] + TRANSFORM(tnNnirNou)
|
|
lnCnt = NnirOraCount(lcSql)
|
|
DO NnirAssert WITH 'oracle_act_final', tcCaz, lnCnt > 0, TRANSFORM(lnCnt) + ' randuri ACT cu nnir nou in Oracle'
|
|
|
|
IF RECCOUNT('trul') > 0
|
|
lcSql = [select count(*) cnt from rul where sters = 0 and nnir = ] + TRANSFORM(tnNnirNou)
|
|
lnCnt = NnirOraCount(lcSql)
|
|
DO NnirAssert WITH 'oracle_rul_final', tcCaz, lnCnt > 0, TRANSFORM(lnCnt) + ' randuri RUL cu nnir nou in Oracle'
|
|
ENDIF
|
|
|
|
* curatenie: pasul STERGE (oscrie_in_fisiere param 2) marcheaza sters=1 pe COD-ul ORIGINAL -
|
|
* readuc nota originala activa, apoi marchez sters=1 (conventia aplicatiei) pe orice a ajuns
|
|
* sub NNIR-ul marcaj (COD nou, atribuit de pack_contafin la scriere)
|
|
goExecutor.oExecuta([update act set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta([update rul set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta([update rul_obinv set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta([update act set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta([update rul set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta([update rul_obinv set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta('commit')
|
|
ENDPROC
|
|
|
|
* varianta pt. scenariul RUL_OBINV (verifica RUL_OBINV in loc de RUL)
|
|
PROCEDURE NnirSalveazaSiVerificaObinv
|
|
LPARAMETERS tnCod, tnAn, tnLuna, tnIdSet, tnNnirVechi, tnNnirNou
|
|
PRIVATE pnAn, pnLuna, pdDataOra
|
|
LOCAL lnIdFact, lnIdfactd, llRul, lnSuccesSalvare, lcSqlFin, lnCnt, lcSql
|
|
|
|
pnAn = tnAn
|
|
pnLuna = tnLuna
|
|
pdDataOra = NULL
|
|
|
|
SELECT tact
|
|
LOCATE FOR NVL(nnir,0) = tnNnirNou
|
|
lnIdFact = NVL(id_fact, 0)
|
|
lnIdfactd = NVL(id_factd, 0)
|
|
|
|
llRul = (RECCOUNT('trul') > 0) OR (RECCOUNT('trul_obinv') > 0)
|
|
|
|
* thisform.do_deschide_tranzactie()/do_inchide_tranzactie() din afisjurcom (_frm_base.vc2:252-
|
|
* 305, mostenite, apelate pe formularul de jurnal, nu pe frm_modific2024) - echivalent direct,
|
|
* fara instanta de forma: manual pe durata scrierii, apoi commit/rollback + revenire pe auto
|
|
SQLSetProp(gnHandle, 'Transactions', 2)
|
|
|
|
* replica exact secventa din afisjurcom.do_modifica: intai STERGE nota veche (COD-ul
|
|
* original, din actactan neatins de editare), abia apoi SCRIE varianta editata
|
|
SELECT actactan
|
|
lnSuccesSalvare = oscrie_in_fisiere(2, .T., llRul)
|
|
DO NnirAssert WITH 'oscrie_in_fisiere_sterge', 'OBINV', lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
|
|
|
IF lnSuccesSalvare > 0
|
|
SELECT * FROM tact INTO CURSOR actactan READWRITE
|
|
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN actactan
|
|
|
|
IF llRul
|
|
SELECT * FROM trul INTO CURSOR rul_temp READWRITE
|
|
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN rul_temp
|
|
SELECT * FROM trul_obinv INTO CURSOR rul_temp_obinv READWRITE
|
|
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0 IN rul_temp_obinv
|
|
ENDIF
|
|
|
|
lnSuccesSalvare = oscrie_in_fisiere(0, .T., llRul)
|
|
DO NnirAssert WITH 'oscrie_in_fisiere', 'OBINV', lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
|
ENDIF
|
|
|
|
IF lnSuccesSalvare > 0
|
|
lcSqlFin = [begin pack_contafin.finalizeaza_modificare_nota(?pnLuna,?pnAn,?pdDataOra,] + ;
|
|
TRANSFORM(tnIdSet) + [,] + TRANSFORM(tnCod) + [,] + TRANSFORM(lnIdFact) + [,] + ;
|
|
TRANSFORM(lnIdfactd) + [,?gnIdUtil); end;]
|
|
lnSuccesSalvare = IIF(goExecutor.oExecuta(lcSqlFin), 1, -1)
|
|
DO NnirAssert WITH 'finalizeaza_modificare_nota', 'OBINV', lnSuccesSalvare > 0, 'a returnat ' + TRANSFORM(lnSuccesSalvare)
|
|
ENDIF
|
|
|
|
IF lnSuccesSalvare > 0
|
|
SQLCOMMIT(gnHandle)
|
|
ELSE
|
|
SQLROLLBACK(gnHandle)
|
|
ENDIF
|
|
SQLSetProp(gnHandle, 'Transactions', 1)
|
|
|
|
* Termin reatribuie COD nou (pack_contafin), sub AN/LUNA de sesiune curente - nu pastreaza
|
|
* COD-ul original notei editate. Verificarea si curatenia se fac dupa valoarea NNIR marcaj
|
|
* (distincta, nu poate coincide cu date reale), nu dupa COD-ul original.
|
|
lcSql = [select count(*) cnt from act where sters = 0 and nnir = ] + TRANSFORM(tnNnirNou)
|
|
lnCnt = NnirOraCount(lcSql)
|
|
DO NnirAssert WITH 'oracle_act_final', 'OBINV', lnCnt > 0, TRANSFORM(lnCnt) + ' randuri ACT cu nnir nou in Oracle'
|
|
|
|
lcSql = [select count(*) cnt from rul_obinv where sters = 0 and nnir = ] + TRANSFORM(tnNnirNou)
|
|
lnCnt = NnirOraCount(lcSql)
|
|
DO NnirAssert WITH 'oracle_rul_obinv_final', 'OBINV', lnCnt > 0, TRANSFORM(lnCnt) + ' randuri RUL_OBINV cu nnir nou in Oracle'
|
|
|
|
* curatenie: pasul STERGE (oscrie_in_fisiere param 2) marcheaza sters=1 pe COD-ul ORIGINAL -
|
|
* readuc nota originala activa, apoi marchez sters=1 (conventia aplicatiei) pe orice a ajuns
|
|
* sub NNIR-ul marcaj (COD nou, atribuit de pack_contafin la scriere)
|
|
goExecutor.oExecuta([update act set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta([update rul set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta([update rul_obinv set sters = 0 where cod = ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta([update act set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta([update rul set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta([update rul_obinv set sters = 1 where nnir = ] + TRANSFORM(tnNnirNou) + [ and cod <> ] + TRANSFORM(tnCod))
|
|
goExecutor.oExecuta('commit')
|
|
ENDPROC
|