Files
comun/utile/Teste/test_recunoastere_articol.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

509 lines
28 KiB
Plaintext

* test_recunoastere_articol.prg
* Teste RecunoastereArticolEF (COMUN\programe\recunoastere_articol_ef.prg) si invelisul
* GetArticolEFByPartDenumire (oproceduri_comune.prg), banda A din docs\plan_efactura_23_24.md.
* Foloseste date construite direct prin INSERT, cod fiscal TESTCASCADA01/02/03 (cascada text) si
* TESTISTORIC01-04 (treapta cont sintetic din istoric), pe schema MARIUSM_AUTO@ROA_CENTRAL.
* Fixtura TESTISTORIC se creeaza si se sterge in aceasta rulare. Optiunile
* EFACTURA_ART_NORMALIZAT/PREFIX/ISTORIC sunt manipulate direct in tabela OPTIUNI si readuse la
* final la valoarea de dinainte de test.
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\test_recunoastere_articol.prg"
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\test_recunoastere_articol_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_recunoastere_articol_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 recunoastere_articol_ef ADDITIVE
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\optiuni_test.prg') ADDITIVE
SalveazaOptiuni('EFACTURA_ART_NORMALIZAT,EFACTURA_ART_PREFIX,EFACTURA_ART_ISTORIC')
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
* fara optiunile EFACTURA_ART_* setate, cascada ruleaza pe implicit 1/12
LOCAL loRec
loRec = CREATEOBJECT('RecunoastereArticolEF')
DO PrLogLocal WITH '=== Optiuni implicite (fara migrare) ==='
DO PrLogLocal WITH ' nNormalizat=' + TRANSFORM(loRec.nNormalizat) + ' (asteptat 1)'
DO PrLogLocal WITH ' nPrefix=' + TRANSFORM(loRec.nPrefix) + ' (asteptat 12)'
DO PrLogLocal WITH '=== CheieSql ==='
DO PrLogLocal WITH ' ' + loRec.CheieSql('d.articol')
*-- pas 1: text exact + id_articol not null (comportamentul de azi, calea principala)
DO PrCazArticol WITH loRec, 'A0 - pas1 (text exact, id_articol)', 'TESTCASCADA01', .T., 'ABONAMENT INTERNET 08/2026', 999999
*-- excluderea facturii curente pe pas1 (azi exista doar pe ramura de rezerva) - trebuie sa NU gaseasca propria factura
DO PrCazArticol WITH loRec, 'A1 - excludere factura curenta pe pas1 (asteptat: nimic gasit)', 'TESTCASCADA01', .T., 'ABONAMENT INTERNET 08/2026', 4103
*-- Scenariul A: pas 3, cheie normalizata + id_articol not null
DO PrCazArticol WITH loRec, 'A - pas3 (normalizat, id_articol)', 'TESTCASCADA01', .T., 'ABONAMENT INTERNET 09/2026', 4104
*-- Scenariul B: pas 2, text exact fara id_articol
DO PrCazArticol WITH loRec, 'B - pas2 (text exact, fara id_articol)', 'TESTCASCADA02', .T., 'SERVICIU CONSULTANTA', 4106
*-- Scenariul C: garda de cheie scurta - articol numeric, nu trebuie sa gaseasca nimic
DO PrCazArticol WITH loRec, 'C - garda cheie scurta (articol numeric)', 'TESTCASCADA03', .T., '8000070025552', 4108
*-- PotrivesteFactura: aceleasi 3 scenarii, o singura interogare per factura
DO PrCazFactura WITH loRec, 'A (factura)', 4104, 'TESTCASCADA01', .T.
DO PrCazFactura WITH loRec, 'B (factura)', 4106, 'TESTCASCADA02', .T.
DO PrCazFactura WITH loRec, 'C (factura)', 4108, 'TESTCASCADA03', .T.
*-- Wrapper GetArticolEFByPartDenumire: apel VECHI (5 parametri, fara tcSursa) - nu trebuie sa dea eroare
DO PrLogLocal WITH '=== Wrapper GetArticolEFByPartDenumire, apel vechi (5 parametri) ==='
LOCAL loArtWrap
loArtWrap = GetArticolEFByPartDenumire('TESTCASCADA01', .T., 'ABONAMENT INTERNET 09/2026', .F., 4104)
DO PrLogLocal WITH ' TYPE(loArtWrap)=' + TYPE('loArtWrap') + ' id_articol=' + TRANSFORM(NVL(loArtWrap.id_articol,-1)) + ' cont=[' + TRANSFORM(NVL(loArtWrap.cont,'?')) + ']'
*-- Wrapper: apel NOU cu @tcSursa
DO PrLogLocal WITH '=== Wrapper GetArticolEFByPartDenumire, apel nou cu tcSursa ==='
LOCAL lcSursaWrap
loArtWrap = GetArticolEFByPartDenumire('TESTCASCADA02', .T., 'SERVICIU CONSULTANTA', .F., 4106, @lcSursaWrap)
DO PrLogLocal WITH ' cont=[' + TRANSFORM(NVL(loArtWrap.cont,'?')) + '] tcSursa=[' + TRANSFORM(m.lcSursaWrap) + ']'
*-- Wrapper: cazul "nimic gasit" - trebuie sa intoarca obiect cu valori implicite, nu NULL (compat apelant vechi)
DO PrLogLocal WITH '=== Wrapper GetArticolEFByPartDenumire, nimic gasit (compat obiect gol) ==='
loArtWrap = GetArticolEFByPartDenumire('TESTCASCADA03', .T., '8000070025552', .F., 4108, @lcSursaWrap)
DO PrLogLocal WITH ' TYPE(loArtWrap)=' + TYPE('loArtWrap') + ' ISNULL=' + TRANSFORM(ISNULL(loArtWrap)) + ' id_articol=' + TRANSFORM(NVL(loArtWrap.id_articol,-1)) + ' tcSursa=[' + TRANSFORM(m.lcSursaWrap) + ']'
LOCAL lnIdWrap
lnIdWrap = GetArticolEFByPartDenumire('TESTCASCADA03', .T., '8000070025552', .T., 4108)
DO PrLogLocal WITH ' tlReturnId=.T. -> ' + TRANSFORM(m.lnIdWrap) + ' (asteptat 0)'
*-- Comutatorul EFACTURA_ART_NORMALIZAT=0: trebuie sa revina exact la comportamentul de azi (doar pas1+2)
DO PrLogLocal WITH '=== Comutator EFACTURA_ART_NORMALIZAT=0 ==='
DO SetOptiune WITH 'EFACTURA_ART_NORMALIZAT', '0'
loRec = CREATEOBJECT('RecunoastereArticolEF')
DO PrLogLocal WITH ' nNormalizat=' + TRANSFORM(loRec.nNormalizat) + ' (asteptat 0)'
DO PrCazArticol WITH loRec, 'A cu comutator OPRIT (asteptat: nimic gasit)', 'TESTCASCADA01', .T., 'ABONAMENT INTERNET 09/2026', 4104
DO DeleteOptiune WITH 'EFACTURA_ART_NORMALIZAT'
loRec = CREATEOBJECT('RecunoastereArticolEF')
DO PrLogLocal WITH ' dupa stergere optiune, nNormalizat=' + TRANSFORM(loRec.nNormalizat) + ' (asteptat 1, revenire la implicit)'
DO PrCazArticol WITH loRec, 'A dupa revenire (asteptat din nou APROX)', 'TESTCASCADA01', .T., 'ABONAMENT INTERNET 09/2026', 4104
*-- Prefixul e fix la 12 (indexul functional e creat pe aceasta lungime) - optiunea nu se mai citeste
DO PrLogLocal WITH '=== EFACTURA_ART_PREFIX - fix la 12, optiunea nu mai are efect ==='
DO SetOptiune WITH 'EFACTURA_ART_PREFIX', '20'
loRec = CREATEOBJECT('RecunoastereArticolEF')
DO PrLogLocal WITH ' optiune "20" -> nPrefix=' + TRANSFORM(loRec.nPrefix) + ' (asteptat 12, fix)'
DO DeleteOptiune WITH 'EFACTURA_ART_PREFIX'
*-- Regresie: variabilele de lucru din PotrivesteArticol/PotrivesteFactura nu trebuie sa scurga in domeniul apelantului
DO PrLogLocal WITH '=== Regresie: Private pe pcDenumire/pcCodFiscal/pnIdEfactura ==='
DO TestScurgereVariabile WITH loRec
*-- Treapta 5 (ISTORIC): fixtura proprie TESTISTORIC01-04, stearsa la final
DO PrLogLocal WITH '=== Treapta 5 (ISTORIC): fixtura ==='
DO StergeFixturaIstoric
LOCAL lnFI1, lnCI1, lnFI2, lnCI2, lnFI3, lnCI3, lnFI4, lnCI4
*-- (a) ultimele 5 linii contate ale furnizorului, acelasi cont sintetic -> propunere ISTORIC, acont gol
lnFI1 = InsFactIstoric('TESTISTORIC01')
InsLinieIstoric(lnFI1, 'PRODUS ISTORIC UNU', '628')
InsLinieIstoric(lnFI1, 'PRODUS ISTORIC DOI', '628')
InsLinieIstoric(lnFI1, 'PRODUS ISTORIC TREI', '628')
InsLinieIstoric(lnFI1, 'PRODUS ISTORIC PATRU', '628')
InsLinieIstoric(lnFI1, 'PRODUS ISTORIC CINCI', '628')
lnCI1 = InsFactIstoric('TESTISTORIC01')
InsLinieIstoric(lnCI1, 'DIVERS NEGASIT ALFA', '')
DO PrCazArticol WITH loRec, 'ISTORIC a - 5 linii cu acelasi cont sintetic', 'TESTISTORIC01', .T., 'DIVERS NEGASIT ALFA', lnCI1
*-- (b) ultimele 5 linii ale furnizorului, conturi diferite -> nicio propunere
lnFI2 = InsFactIstoric('TESTISTORIC02')
InsLinieIstoric(lnFI2, 'MATERIAL DOI UNU', '628')
InsLinieIstoric(lnFI2, 'MATERIAL DOI DOI', '628')
InsLinieIstoric(lnFI2, 'MATERIAL DOI TREI', '301')
InsLinieIstoric(lnFI2, 'MATERIAL DOI PATRU', '628')
InsLinieIstoric(lnFI2, 'MATERIAL DOI CINCI', '628')
lnCI2 = InsFactIstoric('TESTISTORIC02')
InsLinieIstoric(lnCI2, 'DIVERS NEGASIT BETA', '')
DO PrCazArticol WITH loRec, 'ISTORIC b - 5 linii pe conturi diferite (asteptat: nimic)', 'TESTISTORIC02', .T., 'DIVERS NEGASIT BETA', lnCI2
*-- (c) furnizor cu mai putin de 5 linii contate -> nicio propunere
lnFI3 = InsFactIstoric('TESTISTORIC03')
InsLinieIstoric(lnFI3, 'MARFA TREI UNU', '628')
InsLinieIstoric(lnFI3, 'MARFA TREI DOI', '628')
InsLinieIstoric(lnFI3, 'MARFA TREI TREI', '628')
lnCI3 = InsFactIstoric('TESTISTORIC03')
InsLinieIstoric(lnCI3, 'DIVERS NEGASIT GAMA', '')
DO PrCazArticol WITH loRec, 'ISTORIC c - doar 3 linii contate (asteptat: nimic)', 'TESTISTORIC03', .T., 'DIVERS NEGASIT GAMA', lnCI3
*-- (e) pasul 2 gaseste deja pe text exact -> treapta 5 nu se declanseaza, desi istoricul ar propune alt cont
lnFI4 = InsFactIstoric('TESTISTORIC04')
InsLinieIstoric(lnFI4, 'ARTICOL EXACT PATRU', '607')
InsLinieIstoric(lnFI4, 'ALT PRODUS UNU', '999')
InsLinieIstoric(lnFI4, 'ALT PRODUS DOI', '999')
InsLinieIstoric(lnFI4, 'ALT PRODUS TREI', '999')
InsLinieIstoric(lnFI4, 'ALT PRODUS PATRU', '999')
InsLinieIstoric(lnFI4, 'ALT PRODUS CINCI', '999')
lnCI4 = InsFactIstoric('TESTISTORIC04')
InsLinieIstoric(lnCI4, 'ARTICOL EXACT PATRU', '')
DO PrCazArticol WITH loRec, 'ISTORIC e - pas2 gaseste deja (asteptat: EXACT 607, nu ISTORIC 999)', 'TESTISTORIC04', .T., 'ARTICOL EXACT PATRU', lnCI4
*-- (d) comutator EFACTURA_ART_ISTORIC=0 - treapta 5 nu se executa, chiar daca poarta e satisfacuta (cazul a)
DO PrLogLocal WITH '=== Comutator EFACTURA_ART_ISTORIC=0 ==='
DO SetOptiune WITH 'EFACTURA_ART_ISTORIC', '0'
loRec = CREATEOBJECT('RecunoastereArticolEF')
DO PrLogLocal WITH ' nIstoric=' + TRANSFORM(loRec.nIstoric) + ' (asteptat 0)'
DO PrCazArticol WITH loRec, 'ISTORIC d - comutator OPRIT pe cazul a (asteptat: nimic)', 'TESTISTORIC01', .T., 'DIVERS NEGASIT ALFA', lnCI1
DO DeleteOptiune WITH 'EFACTURA_ART_ISTORIC'
loRec = CREATEOBJECT('RecunoastereArticolEF')
DO PrLogLocal WITH ' dupa stergere optiune, nIstoric=' + TRANSFORM(loRec.nIstoric) + ' (asteptat 1, revenire la implicit)'
DO PrCazArticol WITH loRec, 'ISTORIC a dupa revenire (asteptat din nou ISTORIC)', 'TESTISTORIC01', .T., 'DIVERS NEGASIT ALFA', lnCI1
*-- (g) cele doua comutatoare sunt independente: cu normalizarea OPRITA, treapta 5 tot merge,
*-- si cele doua metode trebuie sa dea acelasi rezultat
DO PrLogLocal WITH '=== Independenta comutatoarelor: NORMALIZAT=0, ISTORIC=1 ==='
DO SetOptiune WITH 'EFACTURA_ART_NORMALIZAT', '0'
loRec = CREATEOBJECT('RecunoastereArticolEF')
DO PrLogLocal WITH ' nNormalizat=' + TRANSFORM(loRec.nNormalizat) + ' nIstoric=' + TRANSFORM(loRec.nIstoric) + ' (asteptat 0 / 1)'
DO PrCazArticol WITH loRec, 'ISTORIC g - normalizare OPRITA (asteptat tot ISTORIC)', 'TESTISTORIC01', .T., 'DIVERS NEGASIT ALFA', lnCI1
DO PrCazFactura WITH loRec, 'ISTORIC g (factura, normalizare OPRITA)', lnCI1, 'TESTISTORIC01', .T.
DO DeleteOptiune WITH 'EFACTURA_ART_NORMALIZAT'
loRec = CREATEOBJECT('RecunoastereArticolEF')
*-- (f) PotrivesteFactura da acelasi rezultat ca PotrivesteArticol pe cazul a
DO PrCazFactura WITH loRec, 'ISTORIC a (factura, paritate cu PotrivesteArticol)', lnCI1, 'TESTISTORIC01', .T.
*-- Treapta CATALOG: fixtura proprie, distincta de TESTCASCADA/TESTISTORIC
DO PrLogLocal WITH '=== Treapta CATALOG: fixtura ==='
DO StergeFixturaCascadaNoua
LOCAL lnArtCatalog, lnFactCatHist, lnFactCatCur
lnArtCatalog = InsArticolCatalog('TESTCATALOG ARTICOL UNU', '6588')
lnFactCatHist = InsFactIstoric('9999881001')
InsLinieIstoric(lnFactCatHist, 'TESTCATALOG ARTICOL UNU', '628')
lnFactCatCur = InsFactIstoric('9999881001')
InsLinieIstoric(lnFactCatCur, 'TESTCATALOG ARTICOL UNU', '')
DO PrCazFactura WITH loRec, 'CATALOG - prioritate peste EXACT (asteptat CATALOG, cont=6588, nu EXACT/628)', lnFactCatCur, '9999881001', .T.
*-- Treapta ARTICOL (S2) si FURNIZOR (S1): S2 (articol contat oriunde in firma) are prioritate
*-- peste S1 (contul dominant al furnizorului din ACT), demonstrat pe aceeasi linie
DO PrLogLocal WITH '=== Treapta ARTICOL (S2) si FURNIZOR (S1): fixtura ==='
LOCAL lnFactAltaFirma, lnPartS1, lnFactS2S1, lnFactS1Singur
lnFactAltaFirma = InsFactIstoric('9999884004')
InsLinieIstoric(lnFactAltaFirma, 'ZQXWVKPT ARTICOL TESTS2', '704')
lnPartS1 = InsPartenerCascada('9999882002', 'TEST FURNIZOR S1 S2')
InsActCascada(96600001, '628', lnPartS1)
InsActCascada(96600002, '628', lnPartS1)
InsActCascada(96600003, '628', lnPartS1)
lnFactS2S1 = InsFactIstoric('9999882002')
InsLinieIstoric(lnFactS2S1, 'ZQXWVKPT ARTICOL TESTS2', '')
DO PrCazFactura WITH loRec, 'ARTICOL(S2) - prioritate peste FURNIZOR(S1) (asteptat ARTICOL, cont=704, nu FURNIZOR/628)', lnFactS2S1, '9999882002', .T.
lnFactS1Singur = InsFactIstoric('9999882002')
InsLinieIstoric(lnFactS1Singur, 'DIVERS FURNIZOR S1 FARA ISTORIC PROPRIU', '')
DO PrCazFactura WITH loRec, 'FURNIZOR(S1) - fara concurent S2 (asteptat FURNIZOR, cont=628)', lnFactS1Singur, '9999882002', .T.
*-- Treapta FACTURA (S3): linia nerezolvata de nicio alta sursa ia contul majoritar al celorlalte linii
DO PrLogLocal WITH '=== Treapta FACTURA (S3): fixtura ==='
LOCAL lnArtFactura, lnFactS3
lnArtFactura = InsArticolCatalog('TESTFACTURA CATALOG ART', '628')
lnFactS3 = InsFactIstoric('9999883003')
InsLinieIstoric(lnFactS3, 'TESTFACTURA CATALOG ART', '')
InsLinieIstoric(lnFactS3, 'TESTFACTURA CATALOG ART', '')
InsLinieIstoric(lnFactS3, 'QWKJZXVP NEIDENTIFICAT NICAIERI', '')
DO PrCazFactura WITH loRec, 'FACTURA(S3) - linie nerezolvata ia contul majoritar (asteptat: liniile 1/2 CATALOG/628, linia 3 FACTURA/628)', lnFactS3, '9999883003', .T.
*-- LipsuriLista: aceleasi 8 facturi (fixturile ISTORIC + CATALOG/ARTICOL/FURNIZOR/FACTURA de mai
*-- sus, inca vii), o singura interogare pe lista intreaga - contoarele trebuie sa reflecte exact
*-- ce a aratat PotrivesteFactura per factura mai sus (nicio linie gestionabila in fixtura, deci
*-- stoc_fara_gestiune/stoc_total = 0 peste tot; fara_analitic = 1 doar pe liniile rezolvate la
*-- conturile 607/704, care au coduri active in vplcont_ANALITIC pe anul curent)
DO PrLogLocal WITH '=== LipsuriLista (lista intreaga) ==='
IF USED('crsLLFacturi')
USE IN crsLLFacturi
ENDIF
CREATE CURSOR crsLLFacturi (id N(20))
INSERT INTO crsLLFacturi (id) VALUES (lnCI1)
INSERT INTO crsLLFacturi (id) VALUES (lnCI2)
INSERT INTO crsLLFacturi (id) VALUES (lnCI3)
INSERT INTO crsLLFacturi (id) VALUES (lnCI4)
INSERT INTO crsLLFacturi (id) VALUES (lnFactCatCur)
INSERT INTO crsLLFacturi (id) VALUES (lnFactS2S1)
INSERT INTO crsLLFacturi (id) VALUES (lnFactS1Singur)
INSERT INTO crsLLFacturi (id) VALUES (lnFactS3)
LOCAL llSuccesLL
llSuccesLL = loRec.LipsuriLista('crsLLFacturi', .T.)
DO PrLogLocal WITH ' retur=' + TRANSFORM(llSuccesLL) + ' reccount=' + TRANSFORM(IIF(USED('crsLipsuriLista'), RECCOUNT('crsLipsuriLista'), -1))
DO PrVerifLL WITH 'ISTORIC a (lnCI1)', lnCI1, 1, 1, 0, 0, 0, 0
DO PrVerifLL WITH 'ISTORIC b nimic (lnCI2)', lnCI2, 1, 1, 1, 0, 0, 0
DO PrVerifLL WITH 'ISTORIC c nimic (lnCI3)', lnCI3, 1, 1, 1, 0, 0, 0
DO PrVerifLL WITH 'ISTORIC e EXACT, cont 607 cere analitic (lnCI4)', lnCI4, 1, 1, 0, 0, 0, 1
DO PrVerifLL WITH 'CATALOG (lnFactCatCur)', lnFactCatCur, 1, 0, 0, 0, 0, 0
DO PrVerifLL WITH 'ARTICOL S2, cont 704 cere analitic (lnFactS2S1)', lnFactS2S1, 1, 1, 0, 0, 0, 1
DO PrVerifLL WITH 'FURNIZOR S1 (lnFactS1Singur)', lnFactS1Singur, 1, 1, 0, 0, 0, 0
DO PrVerifLL WITH 'FACTURA S3 (lnFactS3)', lnFactS3, 3, 1, 0, 0, 0, 0
IF USED('crsLipsuriLista')
USE IN (SELECT('crsLipsuriLista'))
ENDIF
USE IN crsLLFacturi
*-- lista goala - crsLipsuriLista trebuie sa iasa cu structura corecta, fara randuri
IF USED('crsLLGoala')
USE IN crsLLGoala
ENDIF
CREATE CURSOR crsLLGoala (id N(20))
llSuccesLL = loRec.LipsuriLista('crsLLGoala', .T.)
DO PrLogLocal WITH ' lista goala: retur=' + TRANSFORM(llSuccesLL) + ' reccount=' + TRANSFORM(IIF(USED('crsLipsuriLista'), RECCOUNT('crsLipsuriLista'), -1)) + ' (asteptat .T. / 0)'
IF USED('crsLipsuriLista')
USE IN (SELECT('crsLipsuriLista'))
ENDIF
USE IN crsLLGoala
DO StergeFixturaCascadaNoua
*-- Regula noua: valorile salvate pe linie (cont/acont/id_gestiune/in_stoc) au prioritate peste
*-- cascada, chiar daca aceasta nu gaseste nimic - linia nu trebuie sa mai apara ca lipsa
DO PrLogLocal WITH '=== Valori proprii salvate pe linie: prioritate peste cascada ==='
DO StergeFixturaValoriProprii
LOCAL lnArtValoriProprii, lnFactValoriProprii
lnArtValoriProprii = 0
goExecutor.oExecute("INSERT INTO NOM_ARTICOLE (denumire, cont, in_stoc) VALUES ('TESTVALORI ARTICOL LEGAT', '999', 1)", 'crsInsArtValori')
goExecutor.oSelect2Value("SELECT SEQ_NOM_ARTICOLE.CURRVAL FROM DUAL", @lnArtValoriProprii)
lnFactValoriProprii = InsFactIstoric('TESTVALORI01')
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA_DETALII (id_efactura, nr, articol, cont, acont, id_gestiune, id_articol) VALUES (" + ;
TRANSFORM(lnFactValoriProprii) + ", 1, 'ZZZLINIE VALORI PROPRII UNU NEPOTRIVITA NICAIERI', '371', '9', 27, " + TRANSFORM(lnArtValoriProprii) + ")", 'crsInsLinieValori')
goExecutor.oExecute('COMMIT', 'crsCommitValori')
IF USED('crsLLValoriProprii')
USE IN crsLLValoriProprii
ENDIF
CREATE CURSOR crsLLValoriProprii (id N(20))
INSERT INTO crsLLValoriProprii (id) VALUES (lnFactValoriProprii)
llSuccesLL = loRec.LipsuriLista('crsLLValoriProprii', .T.)
DO PrLogLocal WITH ' retur=' + TRANSFORM(llSuccesLL)
DO PrVerifLL WITH 'valori proprii pe linie (cascada nu gaseste nimic)', lnFactValoriProprii, 1, 0, 0, 0, 1, 0
IF USED('crsLipsuriLista')
USE IN (SELECT('crsLipsuriLista'))
ENDIF
USE IN crsLLValoriProprii
DO StergeFixturaValoriProprii
DO StergeFixturaIstoric
RestaureazaOptiuni()
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
CATCH TO loEx
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
ENDTRY
QUIT
**********************************************************
PROCEDURE TestScurgereVariabile
LPARAMETERS toRec
PRIVATE pcDenumire, pcCodFiscal, pnIdEfactura
pcDenumire = 'GARDA_DENUMIRE'
pcCodFiscal = 'GARDA_CODFISCAL'
pnIdEfactura = -999
LOCAL loArtWrap2
loArtWrap2 = GetArticolEFByPartDenumire('TESTCASCADA01', .T., 'ABONAMENT INTERNET 09/2026', .F., 4104)
DO PrLogLocal WITH ' dupa GetArticolEFByPartDenumire: pcDenumire=[' + TRANSFORM(m.pcDenumire) + '] (asteptat GARDA_DENUMIRE) ' + IIF(m.pcDenumire == 'GARDA_DENUMIRE', 'OK', 'FAIL - suprascris')
DO PrLogLocal WITH ' dupa GetArticolEFByPartDenumire: pcCodFiscal=[' + TRANSFORM(m.pcCodFiscal) + '] (asteptat GARDA_CODFISCAL) ' + IIF(m.pcCodFiscal == 'GARDA_CODFISCAL', 'OK', 'FAIL - suprascris')
DO PrLogLocal WITH ' dupa GetArticolEFByPartDenumire: pnIdEfactura=[' + TRANSFORM(m.pnIdEfactura) + '] (asteptat -999) ' + IIF(m.pnIdEfactura == -999, 'OK', 'FAIL - suprascris')
pcCodFiscal = 'GARDA_CODFISCAL2'
pnIdEfactura = -998
LOCAL llSuccesFact
llSuccesFact = toRec.PotrivesteFactura(4104, 'TESTCASCADA01', .T.)
DO PrLogLocal WITH ' dupa PotrivesteFactura: pcCodFiscal=[' + TRANSFORM(m.pcCodFiscal) + '] (asteptat GARDA_CODFISCAL2) ' + IIF(m.pcCodFiscal == 'GARDA_CODFISCAL2', 'OK', 'FAIL - suprascris')
DO PrLogLocal WITH ' dupa PotrivesteFactura: pnIdEfactura=[' + TRANSFORM(m.pnIdEfactura) + '] (asteptat -998) ' + IIF(m.pnIdEfactura == -998, 'OK', 'FAIL - suprascris')
IF USED('crsPotrivireLinii')
USE IN (SELECT('crsPotrivireLinii'))
ENDIF
ENDPROC
**********************************************************
PROCEDURE PrCazArticol
LPARAMETERS toRec, tcEticheta, tcCodFiscal, tlPrimite, tcDenumire, tnIdEfactura
LOCAL loArt, lcSursa
DO PrLogLocal WITH '=== PotrivesteArticol: ' + tcEticheta + ' ==='
loArt = toRec.PotrivesteArticol(tcCodFiscal, tlPrimite, tcDenumire, tnIdEfactura, @lcSursa)
IF ISNULL(m.loArt)
DO PrLogLocal WITH ' rezultat = NULL, sursa=[' + TRANSFORM(m.lcSursa) + ']'
ELSE
DO PrLogLocal WITH ' id_articol=' + TRANSFORM(NVL(loArt.id_articol,-1)) + ' cont=[' + TRANSFORM(NVL(loArt.cont,'?')) + '] acont=[' + TRANSFORM(NVL(loArt.acont,'?')) + '] sursa=[' + TRANSFORM(m.lcSursa) + ']'
ENDIF
ENDPROC
**********************************************************
PROCEDURE PrCazFactura
LPARAMETERS toRec, tcEticheta, tnIdEfactura, tcCodFiscal, tlPrimite
LOCAL llSucces
DO PrLogLocal WITH '=== PotrivesteFactura: ' + tcEticheta + ' (id_efactura=' + TRANSFORM(tnIdEfactura) + ') ==='
llSucces = toRec.PotrivesteFactura(tnIdEfactura, tcCodFiscal, tlPrimite)
DO PrLogLocal WITH ' retur=' + TRANSFORM(llSucces) + ' reccount=' + TRANSFORM(IIF(USED('crsPotrivireLinii'), RECCOUNT('crsPotrivireLinii'), -1))
IF m.llSucces AND USED('crsPotrivireLinii') AND RECCOUNT('crsPotrivireLinii') > 0
SELECT crsPotrivireLinii
SCAN
DO PrLogLocal WITH ' nr=' + TRANSFORM(nr) + ' cont=[' + TRANSFORM(NVL(cont,'?')) + '] acont=[' + TRANSFORM(NVL(acont,'?')) + '] sursa_cont=[' + TRANSFORM(NVL(sursa_cont,'?')) + ']' + ;
' id_articol=' + TRANSFORM(NVL(id_articol,-1)) + ' articol_roa=[' + TRANSFORM(NVL(articol_roa,'?')) + '] codmat_roa=[' + TRANSFORM(NVL(codmat_roa,'?')) + '] in_stoc=' + TRANSFORM(NVL(in_stoc,-1)) + ' id_gestiune=' + TRANSFORM(NVL(id_gestiune,-1))
ENDSCAN
ENDIF
IF USED('crsPotrivireLinii')
USE IN (SELECT('crsPotrivireLinii'))
ENDIF
ENDPROC
**********************************************************
PROCEDURE PrVerifLL
LPARAMETERS tcEticheta, tnIdEfactura, tnLinii, tnFaraCatalog, tnFaraOrice, tnStocFaraGest, tnStocTotal, tnFaraAnalitic
LOCAL llOk, lcDetaliu
llOk = .F.
lcDetaliu = 'negasit in crsLipsuriLista'
IF USED('crsLipsuriLista') AND SEEK(m.tnIdEfactura, 'crsLipsuriLista', 'idefact')
llOk = (crsLipsuriLista.linii = m.tnLinii) AND (crsLipsuriLista.fara_cont_catalog = m.tnFaraCatalog) ;
AND (crsLipsuriLista.fara_cont_orice = m.tnFaraOrice) AND (crsLipsuriLista.stoc_fara_gestiune = m.tnStocFaraGest) ;
AND (crsLipsuriLista.stoc_total = m.tnStocTotal) AND (crsLipsuriLista.fara_analitic = m.tnFaraAnalitic)
lcDetaliu = 'linii=' + TRANSFORM(crsLipsuriLista.linii) + ' fara_cont_catalog=' + TRANSFORM(crsLipsuriLista.fara_cont_catalog) + ;
' fara_cont_orice=' + TRANSFORM(crsLipsuriLista.fara_cont_orice) + ' stoc_fara_gestiune=' + TRANSFORM(crsLipsuriLista.stoc_fara_gestiune) + ;
' stoc_total=' + TRANSFORM(crsLipsuriLista.stoc_total) + ' fara_analitic=' + TRANSFORM(crsLipsuriLista.fara_analitic)
ENDIF
DO PrLogLocal WITH ' ' + tcEticheta + ': ' + lcDetaliu + ' ' + IIF(llOk, 'OK', 'FAIL - asteptat linii=' + TRANSFORM(m.tnLinii) + ;
' fara_cont_catalog=' + TRANSFORM(m.tnFaraCatalog) + ' fara_cont_orice=' + TRANSFORM(m.tnFaraOrice) + ;
' stoc_fara_gestiune=' + TRANSFORM(m.tnStocFaraGest) + ' stoc_total=' + TRANSFORM(m.tnStocTotal) + ;
' fara_analitic=' + TRANSFORM(m.tnFaraAnalitic))
ENDPROC
**********************************************************
PROCEDURE SetOptiune
LPARAMETERS tcVarname, tcValoare
LOCAL lcSql, lnSucces, lnExista, lnCount
lnCount = 0
lnSucces = goExecutor.oSelect2Value("SELECT COUNT(*) FROM OPTIUNI WHERE VARNAME = '" + tcVarname + "'", @lnCount)
IF NVL(lnCount, 0) > 0
lcSql = "UPDATE OPTIUNI SET VARVALUE = '" + tcValoare + "' WHERE VARNAME = '" + tcVarname + "'"
ELSE
lcSql = "INSERT INTO OPTIUNI (VARNAME, VARTYPE, PROGRAM, VARVALUE, VARDESC) VALUES ('" + tcVarname + "', 'NUMERIC', 'ROACONT', '" + tcValoare + "', 'test')"
ENDIF
lnSucces = goExecutor.oExecute(lcSql, 'crsSetOptiune')
goExecutor.oExecute('COMMIT', 'crsCommitOptiune')
actualizeaza_optiuni()
ENDPROC
**********************************************************
PROCEDURE DeleteOptiune
LPARAMETERS tcVarname
goExecutor.oExecute("DELETE FROM OPTIUNI WHERE VARNAME = '" + tcVarname + "'", 'crsDelOptiune')
goExecutor.oExecute('COMMIT', 'crsCommitOptiune')
actualizeaza_optiuni()
ENDPROC
**********************************************************
* Fixtura treapta 5 (ISTORIC): ID-urile ANAF_EFACTURA/ANAF_EFACTURA_DETALII sunt impuse de
* trigger-e (secventa), de aceea INSERT fara ID si citire cu CURRVAL dupa fiecare insert.
PROCEDURE InsFactIstoric
LPARAMETERS tcCodFiscal
LOCAL lnId
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA (cod_fiscal_emitent, xdata_act) VALUES ('" + tcCodFiscal + "', SYSDATE)", 'crsInsFact')
lnId = 0
goExecutor.oSelect2Value("SELECT SEQ_ANAF_EFACTURA.CURRVAL FROM DUAL", @lnId)
RETURN lnId
ENDPROC
**********************************************************
PROCEDURE InsLinieIstoric
LPARAMETERS tnIdEfactura, tcArticol, tcCont
LOCAL lnId, lcCont, lnNr
lcCont = IIF(EMPTY(tcCont), 'NULL', "'" + tcCont + "'")
lnNr = 0
goExecutor.oSelect2Value("SELECT NVL(MAX(nr),0)+1 FROM ANAF_EFACTURA_DETALII WHERE id_efactura = " + TRANSFORM(tnIdEfactura), @lnNr)
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA_DETALII (id_efactura, nr, articol, cont) VALUES (" + ;
TRANSFORM(tnIdEfactura) + ", " + TRANSFORM(lnNr) + ", '" + tcArticol + "', " + lcCont + ")", 'crsInsLinie')
lnId = 0
goExecutor.oSelect2Value("SELECT SEQ_ANAF_EFACT_DETALII.CURRVAL FROM DUAL", @lnId)
RETURN lnId
ENDPROC
**********************************************************
PROCEDURE StergeFixturaIstoric
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA_DETALII WHERE id_efactura IN (SELECT id FROM ANAF_EFACTURA WHERE cod_fiscal_emitent LIKE 'TESTISTORIC%')", 'crsDelLiniiIst')
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA WHERE cod_fiscal_emitent LIKE 'TESTISTORIC%'", 'crsDelFactIst')
goExecutor.oExecute('COMMIT', 'crsCommitDelIst')
ENDPROC
**********************************************************
* Fixtura treptelor CATALOG/ARTICOL(S2)/FURNIZOR(S1)/FACTURA(S3): cod fiscal 9999881001-9999884004,
* articole NOM_ARTICOLE 'TESTCATALOG*'/'TESTFACTURA*', ACT cod 96600001-96600003
PROCEDURE InsArticolCatalog
LPARAMETERS tcDenumire, tcCont
LOCAL lnId
goExecutor.oExecute("INSERT INTO NOM_ARTICOLE (denumire, cont, in_stoc) VALUES ('" + tcDenumire + "', '" + tcCont + "', 0)", 'crsInsArtCasc')
lnId = 0
goExecutor.oSelect2Value("SELECT SEQ_NOM_ARTICOLE.CURRVAL FROM DUAL", @lnId)
RETURN lnId
ENDPROC
**********************************************************
PROCEDURE InsPartenerCascada
LPARAMETERS tcCodFiscal, tcDenumire
LOCAL lnId
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire) VALUES ('" + tcCodFiscal + "', '" + tcDenumire + "')", 'crsInsPartCasc')
lnId = 0
goExecutor.oSelect2Value("SELECT SEQ_NOM_PARTENERI.CURRVAL FROM DUAL", @lnId)
RETURN lnId
ENDPROC
**********************************************************
* document contabil de 2 linii (credit 401 pe furnizor + debit tcContDebit), datat inainte de
* facturile din fixtura, pentru sursa FURNIZOR (S1)
PROCEDURE InsActCascada
LPARAMETERS tnCod, tcContDebit, tnIdPartener
goExecutor.oExecute("INSERT INTO ACT (cod, dataact, scc, id_partc, suma) VALUES (" + ;
TRANSFORM(tnCod) + ", SYSDATE - 10, '401', " + TRANSFORM(tnIdPartener) + ", 100)", 'crsInsActCCasc')
goExecutor.oExecute("INSERT INTO ACT (cod, dataact, scd, suma) VALUES (" + ;
TRANSFORM(tnCod) + ", SYSDATE - 10, '" + tcContDebit + "', 100)", 'crsInsActDCasc')
ENDPROC
**********************************************************
PROCEDURE StergeFixturaCascadaNoua
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA_DETALII WHERE id_efactura IN (SELECT id FROM ANAF_EFACTURA WHERE cod_fiscal_emitent IN ('9999881001','9999882002','9999883003','9999884004'))", 'crsDelLiniiCasc')
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA WHERE cod_fiscal_emitent IN ('9999881001','9999882002','9999883003','9999884004')", 'crsDelFactCasc')
goExecutor.oExecute("DELETE FROM ACT WHERE cod BETWEEN 96600000 AND 96600099", 'crsDelActCasc')
goExecutor.oExecute("DELETE FROM NOM_PARTENERI WHERE cod_fiscal = '9999882002'", 'crsDelPartCasc')
goExecutor.oExecute("DELETE FROM NOM_ARTICOLE WHERE denumire IN ('TESTCATALOG ARTICOL UNU','TESTFACTURA CATALOG ART')", 'crsDelArtCasc')
goExecutor.oExecute('COMMIT', 'crsCommitDelCasc')
ENDPROC
**********************************************************
PROCEDURE StergeFixturaValoriProprii
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA_DETALII WHERE id_efactura IN (SELECT id FROM ANAF_EFACTURA WHERE cod_fiscal_emitent = 'TESTVALORI01')", 'crsDelLiniiValori')
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA WHERE cod_fiscal_emitent = 'TESTVALORI01'", 'crsDelFactValori')
goExecutor.oExecute("DELETE FROM NOM_ARTICOLE WHERE denumire = 'TESTVALORI ARTICOL LEGAT'", 'crsDelArtValori')
goExecutor.oExecute('COMMIT', 'crsCommitDelValori')
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