Files
comun/utile/Teste/test_anulare_lot_ef.prg
Marius Mutu 940bb39701 Import eFactura in lot: borderou cu ce lipseste, coada de contabilizare, alegerea contului
Borderoul tine per factura ce mai are de completat si daca are articole de gestiune
(camp gest, coloana si filtru), coada contabilizeaza in serie facturile bifate si
incheie cu un rezumat, iar contul de furnizor/client se alege din planul de conturi.
Cheia normalizata de articol, rezolvarea automata a partenerului si anularea in bloc
intra tot aici. Pozitia in lista se pastreaza peste reaplicarea filtrului.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Aroafxp4z8bmM5oVECZRXY
2026-09-09 22:06:48 +03:00

422 lines
22 KiB
Plaintext

* test_anulare_lot_ef.prg
* Teste AnulareLotEF (COMUN\programe\anulare_lot_ef.prg) si ResetEFacturaIdFact
* (COMUN\programe\import_efactura.prg), banda C din docs\plan_efactura_23_24.md.
* Fixtura proprie (partener RO9999888801, cod fiscal furnizor de test, ACT coduri 96000xx,
* ANAF_EFACTURA cu xnumar_act LIKE 'TEST-%'), creata si stearsa in aceasta rulare, pe schema
* MARIUSM_AUTO@ROA_CENTRAL.
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\test_anulare_lot_ef.prg"
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\test_anulare_lot_ef_log.txt
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\test_anulare_lot_ef_log.txt"
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF gnHandle <= 0
DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
QUIT
ENDIF
SET PROCEDURE TO oscrie_in_fisiere ADDITIVE
SET PROCEDURE TO import_efactura ADDITIVE
SET PROCEDURE TO anulare_lot_ef ADDITIVE
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle) + ' gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna) + ' gnIdUtil=' + TRANSFORM(gnIdUtil)
DO StergeFixturaAnulare
LOCAL lnIdP
lnIdP = InsPartenerA('RO9999888801')
*-- coduri ACT alocate prin SEQ_COD.NEXTVAL (ca la orice document real) - un cod hardcodat
*-- poate coincide cu un document existent pe schema si ar atinge date reale neasteptat
LOCAL lnCodA, lnCodC, lnCodCRef, lnCodH, lnCodG, lnCodI, lnCodJ, lnCodK
lnCodA = NextCod()
lnCodC = NextCod()
lnCodCRef = NextCod()
lnCodH = NextCod()
lnCodG = NextCod()
lnCodI = NextCod()
lnCodJ = NextCod()
lnCodK = NextCod()
*-- FA: document curat, intr-o perioada DIFERITA de gnAn/gnLuna al sesiunii - dovada ca
*-- sterge_document(cod,an,luna,idUtil) foloseste an/luna documentului, nu ale sesiunii
LOCAL lnIdFA, lnEfFA
lnIdFA = 88800001
DO InsActDoc WITH lnCodA, 2019, 6, {^2019-06-15}, lnIdP, lnIdFA, '628'
lnEfFA = InsFactura('TEST-A-CROSS', lnIdFA, 'RO9999888801')
*-- FD: fara id_fact (niciodata importata)
LOCAL lnEfFD
lnEfFD = InsFactura('TEST-D-NOIDFACT', 0, 'RO9999888801')
*-- FC: document cu plata atasata (ACT separat cu id_factd = id_fact-ul lui FC)
LOCAL lnIdFC, lnEfFC
lnIdFC = 88800010
DO InsActDoc WITH lnCodC, gnAn, gnLuna, DATE(), lnIdP, lnIdFC, '628'
DO InsActReferinta WITH lnCodCRef, gnAn, gnLuna, DATE(), lnIdP, lnIdFC
lnEfFC = InsFactura('TEST-C-REFINTE', lnIdFC, 'RO9999888801')
*-- FH: document curat, aceeasi perioada ca sesiunea - pereche cu FC in lotul mixt
LOCAL lnIdFH, lnEfFH
lnIdFH = 88800030
DO InsActDoc WITH lnCodH, gnAn, gnLuna, DATE(), lnIdP, lnIdFH, '628'
lnEfFH = InsFactura('TEST-H-CLEAN', lnIdFH, 'RO9999888801')
*-- FG: document curat, folosit doar la testul de esec la mijlocul lotului (ramane intact daca ROLLBACK)
LOCAL lnIdFG, lnEfFG
lnIdFG = 88800020
DO InsActDoc WITH lnCodG, gnAn, gnLuna, DATE(), lnIdP, lnIdFG, '628'
lnEfFG = InsFactura('TEST-G-CLEAN', lnIdFG, 'RO9999888801')
*-- FR: doar pentru testul punctual ResetEFacturaIdFact, fara ACT
LOCAL lnIdFR, lnEfFR
lnIdFR = 88800099
lnEfFR = InsFactura('TEST-R-RESET', lnIdFR, 'RO9999888801')
*-- FI: document curat, folosit doar la testul de eroare VFP (cursor cu camp lipsa) - ramane
*-- intact daca tranzactia face ROLLBACK
LOCAL lnIdFI, lnEfFI
lnIdFI = 88800040
DO InsActDoc WITH lnCodI, gnAn, gnLuna, DATE(), lnIdP, lnIdFI, '628'
lnEfFI = InsFactura('TEST-I-BADCURSOR', lnIdFI, 'RO9999888801')
*-- FJ/FK: doua documente curate, in doua perioade DIFERITE intre ele (si de sesiune), in
*-- acelasi lot - dovada ca init_scriere_act_rul_local (o singura data pentru tot lotul) nu
*-- influenteaza stergerea per document
LOCAL lnIdFJ, lnEfFJ, lnIdFK, lnEfFK
lnIdFJ = 88800050
DO InsActDoc WITH lnCodJ, 2019, 6, {^2019-06-20}, lnIdP, lnIdFJ, '628'
lnEfFJ = InsFactura('TEST-J-PERIOD1', lnIdFJ, 'RO9999888801')
lnIdFK = 88800060
DO InsActDoc WITH lnCodK, 2021, 11, {^2021-11-05}, lnIdP, lnIdFK, '628'
lnEfFK = InsFactura('TEST-K-PERIOD2', lnIdFK, 'RO9999888801')
goExecutor.oExecute('COMMIT', 'crsCommitFixtura')
DO PrLogLocal WITH 'fixtura creata: efFA=' + TRANSFORM(lnEfFA) + ' efFD=' + TRANSFORM(lnEfFD) + ' efFC=' + TRANSFORM(lnEfFC) + ' efFH=' + TRANSFORM(lnEfFH) + ' efFG=' + TRANSFORM(lnEfFG) + ' efFR=' + TRANSFORM(lnEfFR) + ' efFI=' + TRANSFORM(lnEfFI) + ' efFJ=' + TRANSFORM(lnEfFJ) + ' efFK=' + TRANSFORM(lnEfFK)
LOCAL loAnul
loAnul = CREATEOBJECT('AnulareLotEF')
DO PrLogLocal WITH 'cAvertismentRisc=[' + loAnul.cAvertismentRisc + ']'
*=========================================================================
DO PrLogLocal WITH '=== TEST 6: ResetEFacturaIdFact cu valoare gresita -> nu reseteaza ==='
LOCAL llRet, lnIdFactCitit
llRet = ResetEFacturaIdFact(lnEfFR, 999999)
lnIdFactCitit = -1
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFR), @lnIdFactCitit)
DO PrLogLocal WITH ' ResetEFacturaIdFact(valoare gresita) retur=' + TRANSFORM(llRet) + ' id_fact dupa=' + TRANSFORM(lnIdFactCitit) + ' (asteptat ' + TRANSFORM(lnIdFR) + ', neschimbat) ' + IIF(lnIdFactCitit = lnIdFR, 'OK', 'FAIL')
llRet = ResetEFacturaIdFact(lnEfFR, lnIdFR)
lnIdFactCitit = -1
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFR), @lnIdFactCitit)
DO PrLogLocal WITH ' ResetEFacturaIdFact(valoare corecta) retur=' + TRANSFORM(llRet) + ' id_fact dupa=' + TRANSFORM(lnIdFactCitit) + ' (asteptat -1/NULL) ' + IIF(lnIdFactCitit = -1, 'OK', 'FAIL')
*=========================================================================
DO PrLogLocal WITH '=== TEST 4: factura fara id_fact -> refuzata (in lot cu FA) ==='
LOCAL llOk4
llOk4 = loAnul.Verifica(TRANSFORM(lnEfFA) + ',' + TRANSFORM(lnEfFD))
DO PrLogLocal WITH ' Verifica retur=' + TRANSFORM(llOk4) + ' cEroare=[' + loAnul.cEroare + ']' + ;
' acceptate=' + TRANSFORM(RECCOUNT('crsAcceptate')) + ' refuzate=' + TRANSFORM(RECCOUNT('crsRefuzate'))
DO PrCursor WITH 'crsAcceptate'
DO PrCursor WITH 'crsRefuzate'
SELECT crsRefuzate
LOCATE FOR id_efactura = lnEfFD
DO PrLogLocal WITH ' FD in refuzate=' + TRANSFORM(FOUND()) + ' motiv=[' + IIF(FOUND(), ALLTRIM(motiv), '?') + '] ' + IIF(FOUND() AND 'id_fact' $ LOWER(motiv), 'OK', 'FAIL')
SELECT crsAcceptate
LOCATE FOR id_efactura = lnEfFA
DO PrLogLocal WITH ' FA in acceptate=' + TRANSFORM(FOUND()) + ' ' + IIF(FOUND(), 'OK', 'FAIL')
*=========================================================================
DO PrLogLocal WITH '=== TEST 1: document curat (alta perioada decat sesiunea) -> se sterge si id_fact se reseteaza ==='
LOCAL llOk1, lnSterse1
llOk1 = loAnul.Verifica(TRANSFORM(lnEfFA))
DO PrLogLocal WITH ' Verifica retur=' + TRANSFORM(llOk1) + ' acceptate=' + TRANSFORM(RECCOUNT('crsAcceptate')) + ' refuzate=' + TRANSFORM(RECCOUNT('crsRefuzate'))
lnSterse1 = loAnul.Executa('crsAcceptate', 'crsRefuzate')
DO PrLogLocal WITH ' Executa retur(sterse)=' + TRANSFORM(lnSterse1) + ' cEroare=[' + loAnul.cEroare + '] (asteptat 1) ' + IIF(lnSterse1 = 1, 'OK', 'FAIL')
LOCAL lnStersAct, lnIdFactDupa1
lnStersAct = -1
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFA), @lnStersAct)
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFA) + '(FA, alta perioada) sters=' + TRANSFORM(lnStersAct) + ' (asteptat 1) ' + IIF(lnStersAct = 1, 'OK', 'FAIL')
lnIdFactDupa1 = -1
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFA), @lnIdFactDupa1)
DO PrLogLocal WITH ' anaf_efactura(FA).id_fact dupa stergere=' + TRANSFORM(lnIdFactDupa1) + ' (asteptat -1/NULL) ' + IIF(lnIdFactDupa1 = -1, 'OK', 'FAIL')
*=========================================================================
DO PrLogLocal WITH '=== TEST 3: luna inchisa -> refuzat tot lotul ==='
glLunaInchisa = .T.
LOCAL llOk3
llOk3 = loAnul.Verifica(TRANSFORM(lnEfFC) + ',' + TRANSFORM(lnEfFH) + ',' + TRANSFORM(lnEfFD))
DO PrLogLocal WITH ' Verifica retur=' + TRANSFORM(llOk3) + ' acceptate=' + TRANSFORM(RECCOUNT('crsAcceptate')) + ' (asteptat 0) ' + IIF(RECCOUNT('crsAcceptate') = 0, 'OK', 'FAIL')
DO PrCursor WITH 'crsRefuzate'
SELECT crsRefuzate
LOCATE FOR id_efactura = lnEfFC
DO PrLogLocal WITH ' FC motiv=[' + IIF(FOUND(), ALLTRIM(motiv), '?') + '] (asteptat luna inchisa) ' + IIF(FOUND() AND 'luna' $ LOWER(motiv), 'OK', 'FAIL')
SELECT crsRefuzate
LOCATE FOR id_efactura = lnEfFD
DO PrLogLocal WITH ' FD motiv=[' + IIF(FOUND(), ALLTRIM(motiv), '?') + '] (asteptat id_fact - are precedenta pe luna inchisa) ' + IIF(FOUND() AND 'id_fact' $ LOWER(motiv), 'OK', 'FAIL')
glLunaInchisa = .F.
*=========================================================================
DO PrLogLocal WITH '=== TEST 5: esec la mijlocul lotului (FG curat + FC cu referinte) -> ROLLBACK, nimic sters ==='
IF USED('crsAcceptateManual')
USE IN (SELECT('crsAcceptateManual'))
ENDIF
CREATE CURSOR crsAcceptateManual (id_efactura N(20), id_fact N(20), cod N(15), an N(4), luna N(2), numar_act C(30), furnizor C(250), suma N(20,4))
INSERT INTO crsAcceptateManual VALUES (lnEfFG, lnIdFG, lnCodG, gnAn, gnLuna, 'TEST-G-CLEAN', 'FIXTURA ANULARE', 100)
INSERT INTO crsAcceptateManual VALUES (lnEfFC, lnIdFC, lnCodC, gnAn, gnLuna, 'TEST-C-REFINTE', 'FIXTURA ANULARE', 100)
LOCAL lnSterse5
lnSterse5 = loAnul.Executa('crsAcceptateManual')
DO PrLogLocal WITH ' Executa retur(sterse)=' + TRANSFORM(lnSterse5) + ' cEroare=[' + loAnul.cEroare + '] (asteptat 0) ' + IIF(lnSterse5 = 0, 'OK', 'FAIL')
LOCAL lnStersActG
lnStersActG = -1
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFG), @lnStersActG)
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFG) + '(FG) sters dupa ROLLBACK=' + TRANSFORM(lnStersActG) + ' (asteptat 0, ramane intact) ' + IIF(lnStersActG = 0, 'OK', 'FAIL')
LOCAL lnIdFactDupa5
lnIdFactDupa5 = -1
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFG), @lnIdFactDupa5)
DO PrLogLocal WITH ' anaf_efactura(FG).id_fact dupa ROLLBACK=' + TRANSFORM(lnIdFactDupa5) + ' (asteptat ' + TRANSFORM(lnIdFG) + ', neschimbat) ' + IIF(lnIdFactDupa5 = lnIdFG, 'OK', 'FAIL')
*=========================================================================
DO PrLogLocal WITH '=== TEST 2: document cu plata atasata -> refuzat, restul lotului (FH) se sterge oricum ==='
LOCAL llOk2, lnSterse2
llOk2 = loAnul.Verifica(TRANSFORM(lnEfFC) + ',' + TRANSFORM(lnEfFH))
DO PrLogLocal WITH ' Verifica retur=' + TRANSFORM(llOk2) + ' acceptate=' + TRANSFORM(RECCOUNT('crsAcceptate')) + ' refuzate=' + TRANSFORM(RECCOUNT('crsRefuzate'))
DO PrCursor WITH 'crsAcceptate'
DO PrCursor WITH 'crsRefuzate'
SELECT crsRefuzate
LOCATE FOR id_efactura = lnEfFC
DO PrLogLocal WITH ' FC in refuzate=' + TRANSFORM(FOUND()) + ' motiv=[' + IIF(FOUND(), ALLTRIM(motiv), '?') + '] ' + IIF(FOUND() AND 'incasari' $ LOWER(motiv), 'OK', 'FAIL')
SELECT crsAcceptate
LOCATE FOR id_efactura = lnEfFH
DO PrLogLocal WITH ' FH in acceptate=' + TRANSFORM(FOUND()) + ' ' + IIF(FOUND(), 'OK', 'FAIL')
lnSterse2 = loAnul.Executa('crsAcceptate', 'crsRefuzate')
DO PrLogLocal WITH ' Executa retur(sterse)=' + TRANSFORM(lnSterse2) + ' cEroare=[' + loAnul.cEroare + '] (asteptat 1) ' + IIF(lnSterse2 = 1, 'OK', 'FAIL')
LOCAL lnStersActH, lnStersActC
lnStersActH = -1
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFH), @lnStersActH)
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFH) + '(FH) sters=' + TRANSFORM(lnStersActH) + ' (asteptat 1) ' + IIF(lnStersActH = 1, 'OK', 'FAIL')
lnStersActC = -1
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFC), @lnStersActC)
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFC) + '(FC, refuzat) sters=' + TRANSFORM(lnStersActC) + ' (asteptat 0, netins) ' + IIF(lnStersActC = 0, 'OK', 'FAIL')
*=========================================================================
DO PrLogLocal WITH '=== TEST 7: eroare VFP (camp lipsa in cursor) la mijlocul buclei -> ROLLBACK, tranzactia revine la automat ==='
IF USED('crsAcceptateFaraLuna')
USE IN (SELECT('crsAcceptateFaraLuna'))
ENDIF
*-- cursor fara coloana LUNA - forteaza o eroare VFP genuina (variabila nu exista), nu una de SQL
CREATE CURSOR crsAcceptateFaraLuna (id_efactura N(20), id_fact N(20), cod N(15), an N(4), numar_act C(30), furnizor C(250), suma N(20,4))
INSERT INTO crsAcceptateFaraLuna VALUES (lnEfFI, lnIdFI, lnCodI, gnAn, 'TEST-I-BADCURSOR', 'FIXTURA ANULARE', 100)
LOCAL lnTranzInainte, lnTranzDupa, lnSterse7
lnTranzInainte = SQLGETPROP(gnHandle, 'Transactions')
lnSterse7 = loAnul.Executa('crsAcceptateFaraLuna')
lnTranzDupa = SQLGETPROP(gnHandle, 'Transactions')
DO PrLogLocal WITH ' Executa retur(sterse)=' + TRANSFORM(lnSterse7) + ' cEroare=[' + loAnul.cEroare + '] (asteptat 0, eroare ne-goala) ' + IIF(lnSterse7 = 0 AND !EMPTY(loAnul.cEroare), 'OK', 'FAIL')
DO PrLogLocal WITH ' SQLGetprop(Transactions) inainte=' + TRANSFORM(lnTranzInainte) + ' dupa=' + TRANSFORM(lnTranzDupa) + ' (asteptat 1/automat) ' + IIF(lnTranzDupa = 1, 'OK', 'FAIL')
LOCAL lnStersActI
lnStersActI = -1
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFI), @lnStersActI)
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFI) + '(FI) sters dupa eroare VFP=' + TRANSFORM(lnStersActI) + ' (asteptat 0, netins) ' + IIF(lnStersActI = 0, 'OK', 'FAIL')
*-- dovada ca a doua tranzactie manuala se poate porni normal - conexiunea nu a ramas blocata
LOCAL lnSetPropTest
lnSetPropTest = SQLSETPROP(gnHandle, 'Transactions', 2)
DO PrLogLocal WITH ' SQLSetprop(Transactions,2) dupa incident retur=' + TRANSFORM(lnSetPropTest) + ' (asteptat 1, conexiunea raspunde normal) ' + IIF(lnSetPropTest = 1, 'OK', 'FAIL')
SQLSETPROP(gnHandle, 'Transactions', 1)
IF USED('crsAcceptateFaraLuna')
USE IN (SELECT('crsAcceptateFaraLuna'))
ENDIF
*=========================================================================
DO PrLogLocal WITH '=== TEST 8: lot cu doua documente din perioade diferite -> ambele se sterg si id_fact se reseteaza pentru amandoua ==='
LOCAL llOk8, lnSterse8
llOk8 = loAnul.Verifica(TRANSFORM(lnEfFJ) + ',' + TRANSFORM(lnEfFK))
DO PrLogLocal WITH ' Verifica retur=' + TRANSFORM(llOk8) + ' acceptate=' + TRANSFORM(RECCOUNT('crsAcceptate')) + ' refuzate=' + TRANSFORM(RECCOUNT('crsRefuzate')) + ' (asteptat 2 acceptate, 0 refuzate) ' + IIF(RECCOUNT('crsAcceptate') = 2 AND RECCOUNT('crsRefuzate') = 0, 'OK', 'FAIL')
DO PrCursor WITH 'crsAcceptate'
lnSterse8 = loAnul.Executa('crsAcceptate', 'crsRefuzate')
DO PrLogLocal WITH ' Executa retur(sterse)=' + TRANSFORM(lnSterse8) + ' cEroare=[' + loAnul.cEroare + '] (asteptat 2) ' + IIF(lnSterse8 = 2, 'OK', 'FAIL')
LOCAL lnStersActJ, lnStersActK, lnIdFactDupaJ, lnIdFactDupaK
lnStersActJ = -1
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFJ), @lnStersActJ)
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFJ) + '(FJ, 2019/6) sters=' + TRANSFORM(lnStersActJ) + ' (asteptat 1) ' + IIF(lnStersActJ = 1, 'OK', 'FAIL')
lnStersActK = -1
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFK), @lnStersActK)
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFK) + '(FK, 2021/11) sters=' + TRANSFORM(lnStersActK) + ' (asteptat 1) ' + IIF(lnStersActK = 1, 'OK', 'FAIL')
lnIdFactDupaJ = -1
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFJ), @lnIdFactDupaJ)
DO PrLogLocal WITH ' anaf_efactura(FJ).id_fact dupa stergere=' + TRANSFORM(lnIdFactDupaJ) + ' (asteptat -1/NULL) ' + IIF(lnIdFactDupaJ = -1, 'OK', 'FAIL')
lnIdFactDupaK = -1
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFK), @lnIdFactDupaK)
DO PrLogLocal WITH ' anaf_efactura(FK).id_fact dupa stergere=' + TRANSFORM(lnIdFactDupaK) + ' (asteptat -1/NULL) ' + IIF(lnIdFactDupaK = -1, 'OK', 'FAIL')
IF USED('crsAcceptateManual')
USE IN (SELECT('crsAcceptateManual'))
ENDIF
IF USED('crsAcceptate')
USE IN (SELECT('crsAcceptate'))
ENDIF
IF USED('crsRefuzate')
USE IN (SELECT('crsRefuzate'))
ENDIF
DO StergeFixturaAnulare
DO VerificaStareInitiala
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
CATCH TO loEx
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
TRY
IF USED('crsAcceptateManual')
USE IN (SELECT('crsAcceptateManual'))
ENDIF
IF USED('crsAcceptate')
USE IN (SELECT('crsAcceptate'))
ENDIF
IF USED('crsRefuzate')
USE IN (SELECT('crsRefuzate'))
ENDIF
SQLSETPROP(gnHandle, 'Transactions', 1)
DO StergeFixturaAnulare
CATCH
ENDTRY
ENDTRY
QUIT
**********************************************************
PROCEDURE PrCursor
LPARAMETERS tcCursor
IF !USED(tcCursor)
DO PrLogLocal WITH ' [' + tcCursor + '] neincarcat'
RETURN
ENDIF
SELECT (tcCursor)
SCAN
IF TYPE(tcCursor + '.motiv') = 'C'
DO PrLogLocal WITH ' [' + tcCursor + '] id_efactura=' + TRANSFORM(id_efactura) + ' cod=' + TRANSFORM(NVL(cod,0)) + ' motiv=[' + ALLTRIM(NVL(motiv,'')) + ']'
ELSE
DO PrLogLocal WITH ' [' + tcCursor + '] id_efactura=' + TRANSFORM(id_efactura) + ' id_fact=' + TRANSFORM(id_fact) + ' cod=' + TRANSFORM(NVL(cod,0))
ENDIF
ENDSCAN
ENDPROC
**********************************************************
* aloca un cod ACT prin aceeasi secventa folosita de pack_contafin.SET_COD, ca sa nu coincida
* cu vreun document real de pe schema
PROCEDURE NextCod
LOCAL lnCod
lnCod = 0
goExecutor.oSelect2Value("SELECT SEQ_COD.NEXTVAL FROM DUAL", @lnCod)
RETURN lnCod
ENDPROC
**********************************************************
PROCEDURE InsPartenerA
LPARAMETERS tcCodFiscal
LOCAL lnId
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire) VALUES ('" + tcCodFiscal + "', 'FIXTURA ANULARE EF')", 'crsInsPartA')
lnId = 0
goExecutor.oSelect2Value("SELECT SEQ_NOM_PARTENERI.CURRVAL FROM DUAL", @lnId)
RETURN lnId
ENDPROC
**********************************************************
* document contabil de 2 randuri (credit 401 + debit tcContDebit), cu an/luna/id_fact explicite
PROCEDURE InsActDoc
LPARAMETERS tnCod, tnAn, tnLuna, tdData, tnIdPartener, tnIdFact, tcContDebit
LOCAL lcData
lcData = "TO_DATE('" + DTOS(tdData) + "','YYYYMMDD')"
goExecutor.oExecute("INSERT INTO ACT (cod, an, luna, dataact, scc, id_partc, suma, id_fact, sters) VALUES (" + ;
TRANSFORM(tnCod) + ", " + TRANSFORM(tnAn) + ", " + TRANSFORM(tnLuna) + ", " + lcData + ", '401', " + ;
TRANSFORM(tnIdPartener) + ", 100, " + TRANSFORM(tnIdFact) + ", 0)", 'crsInsActC')
goExecutor.oExecute("INSERT INTO ACT (cod, an, luna, dataact, scd, suma, id_fact, sters) VALUES (" + ;
TRANSFORM(tnCod) + ", " + TRANSFORM(tnAn) + ", " + TRANSFORM(tnLuna) + ", " + lcData + ", '" + tcContDebit + "', 100, " + ;
TRANSFORM(tnIdFact) + ", 0)", 'crsInsActD')
ENDPROC
**********************************************************
* document de "plata" - o singura linie ACT cu id_factd = id_fact-ul facturii referite
PROCEDURE InsActReferinta
LPARAMETERS tnCod, tnAn, tnLuna, tdData, tnIdPartener, tnIdFactd
LOCAL lcData
lcData = "TO_DATE('" + DTOS(tdData) + "','YYYYMMDD')"
goExecutor.oExecute("INSERT INTO ACT (cod, an, luna, dataact, scd, scc, id_partc, suma, id_factd, sters) VALUES (" + ;
TRANSFORM(tnCod) + ", " + TRANSFORM(tnAn) + ", " + TRANSFORM(tnLuna) + ", " + lcData + ", '512', '401', " + ;
TRANSFORM(tnIdPartener) + ", 100, " + TRANSFORM(tnIdFactd) + ", 0)", 'crsInsActRef')
ENDPROC
**********************************************************
PROCEDURE InsFactura
LPARAMETERS tcNumarAct, tnIdFact, tcCodFiscal
LOCAL lnId, lcIdFact
lcIdFact = IIF(EMPTY(tnIdFact), 'NULL', TRANSFORM(tnIdFact))
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA (id_fact, xnumar_act, xfurnizor, xtotal_cu_tva, cod_fiscal_emitent, factura_emisa) VALUES (" + ;
lcIdFact + ", '" + tcNumarAct + "', 'FIXTURA ANULARE', 100, '" + tcCodFiscal + "', 0)", 'crsInsFact')
lnId = 0
goExecutor.oSelect2Value("SELECT SEQ_ANAF_EFACTURA.CURRVAL FROM DUAL", @lnId)
RETURN lnId
ENDPROC
**********************************************************
PROCEDURE StergeFixturaAnulare
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA WHERE xnumar_act LIKE 'TEST-%'", 'crsDelFact')
goExecutor.oExecute("DELETE FROM ACT WHERE id_fact IN (88800001,88800010,88800020,88800030,88800040,88800050,88800060) OR id_factd = 88800010", 'crsDelAct')
goExecutor.oExecute("DELETE FROM CORESP_TIP_PART WHERE id_part IN (SELECT id_part FROM NOM_PARTENERI WHERE cod_fiscal = 'RO9999888801')", 'crsDelCorespTip')
goExecutor.oExecute("DELETE FROM NOM_PARTENERI WHERE cod_fiscal = 'RO9999888801'", 'crsDelPart')
goExecutor.oExecute('COMMIT', 'crsCommitDel')
ENDPROC
**********************************************************
PROCEDURE VerificaStareInitiala
LOCAL lnRest
lnRest = -1
goExecutor.oSelect2Value("SELECT COUNT(*) FROM ACT WHERE id_fact IN (88800001,88800010,88800020,88800030,88800040,88800050,88800060) OR id_factd = 88800010", @lnRest)
DO PrLogLocal WITH 'stare finala: ACT randuri fixtura ramase=' + TRANSFORM(lnRest) + ' (asteptat 0) ' + IIF(lnRest = 0, 'OK', 'FAIL')
lnRest = -1
goExecutor.oSelect2Value("SELECT COUNT(*) FROM ANAF_EFACTURA WHERE xnumar_act LIKE 'TEST-%'", @lnRest)
DO PrLogLocal WITH 'stare finala: ANAF_EFACTURA randuri fixtura ramase=' + TRANSFORM(lnRest) + ' (asteptat 0) ' + IIF(lnRest = 0, 'OK', 'FAIL')
lnRest = -1
goExecutor.oSelect2Value("SELECT COUNT(*) FROM NOM_PARTENERI WHERE cod_fiscal = 'RO9999888801'", @lnRest)
DO PrLogLocal WITH 'stare finala: NOM_PARTENERI fixtura ramas=' + TRANSFORM(lnRest) + ' (asteptat 0) ' + IIF(lnRest = 0, 'OK', 'FAIL')
ENDPROC
**********************************************************
PROCEDURE PrLogLocal
LPARAMETERS tcMsg
LOCAL lcL
SET SAFETY OFF
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
ENDPROC
**********************************************************
PROCEDURE PrErrLocal
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
ENDPROC