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
509 lines
28 KiB
Plaintext
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
|