Verificarea folosea o singura data VerificaFactura, pe primul rand din actactan. Daca acel document exista deja in ROA nu se scria nimic din tot intervalul; daca nu exista, se scria tot lotul, inclusiv documentele deja importate, care apareau duplicate. EliminaFacturiDuplicate ia intr-o singura interogare pe (an, luna) documentele existente in ACT, le pune intr-un cursor indexat pe an+luna+nract+dataact+explicatia5 si scoate din actactan doar randurile care se potrivesc. VerificaFactura, ramasa fara apelanti, e stearsa. In modul "Nu scrie note contabile" xls-ul de verificare se genereaza chiar daca actualizarea partenerilor sau verificarea de duplicate nu a reusit: notele nu ajung oricum in ROA. Verificat pe ROA_CONPRESS, read-only, pe intrarile din 07/2026: din 152 de randuri raman 15, toate cele 11 facturi reclamate ca lipsa raman in lot, iar factura 1178734 e scoasa doar pe 30.07 (exista in ROA) si pastrata pe 13.07 (nu exista). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PmUPGiStqNKSu4wWq2y77Q
160 lines
7.0 KiB
Plaintext
160 lines
7.0 KiB
Plaintext
* Dry run pe ROA (READ-ONLY): construieste actactan pentru INTRARI 07/2026 exact ca in
|
|
* CreeazaNote, apoi apeleaza metoda reala EliminaFacturiDuplicate si raporteaza ce ar fi
|
|
* scos din lot si ce ar fi ramas. NU scrie nimic in ROA (metoda face doar SELECT pe act).
|
|
* Rezultat: Teste\dry_duplicate_log.txt
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
PUBLIC gcUILog, gcSyncDir, gcDryLog, gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
|
|
|
LOCAL lcDir, lnSucces, lnInainte, lnDupa
|
|
LOCAL lnCodSectieBarFlora, lnCodSectieBucatarieFlora, lnCodSectieBarRestaurant, lnCodSectieBucatarieRestaurant
|
|
LOCAL lcAcontMarfaBar, lcAcontMarfaBucatarie
|
|
|
|
gnMockRaspuns = 6
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
|
|
lcDir = ADDBS(JUSTPATH(SYS(16,0)))
|
|
|
|
DO (m.lcDir + 'test_init_env_auto.prg') WITH .T.
|
|
SET PROCEDURE TO (m.lcDir + 'ui_harness.prg') ADDITIVE
|
|
SET PROCEDURE TO (m.lcDir + 'mock_amessagebox.prg') ADDITIVE
|
|
|
|
gcDryLog = m.lcDir + "dry_duplicate_log.txt"
|
|
STRTOFILE('DRY RUN DUPLICATE ' + TTOC(DATETIME()) + CHR(13)+CHR(10), m.gcDryLog)
|
|
|
|
DO FORM (gcAppPath + 'frm_import') NAME goImportFrm NOSHOW
|
|
goImportFrm.WindowType = 0
|
|
goImportFrm.Show()
|
|
goImportFrm.txtData1.Value = DATE(2026,7,1)
|
|
goImportFrm.txtData2.Value = DATE(2026,7,31)
|
|
goImportFrm.chkTest.Value = 1
|
|
|
|
lnSucces = goImportFrm.ExportDate()
|
|
DO Raport WITH 'ExportDate = ' + TRANSFORM(m.lnSucces)
|
|
DO Raport WITH 'cIntrariRestaurant = ' + TRANSFORM(RECCOUNT('cIntrariRestaurant')) + ' randuri'
|
|
|
|
* --- cClientiFurnizori fara scriere in ROA (id_part = 0)
|
|
Select Distinct Cast(0 As I) As id_part, cod, denumire, cod_fiscal, reg_com, adresa, ;
|
|
judet As indicativ_judet, tara As cod_tara, banca, cont_banca ;
|
|
From npart Into Cursor cClientiFurnizori Readwrite
|
|
|
|
* --- cIntrari, copie exacta a SELECT-ului din frm_import.sc2
|
|
lnCodSectieBarFlora = 3
|
|
lnCodSectieBucatarieFlora = 4
|
|
lnCodSectieBarRestaurant = 1
|
|
lnCodSectieBucatarieRestaurant = 2
|
|
lcAcontMarfaBar = goApp.oSettings.cAcontMarfaBar
|
|
lcAcontMarfaBucatarie = goApp.oSettings.cAcontMarfaBucatarie
|
|
|
|
Select '371' Cont, IIF(INLIST(codsectiedeintrare, m.lnCodSectieBarFlora, m.lnCodSectieBarRestaurant), m.lcAcontMarfaBar, IIF(INLIST(codsectiedeintrare, m.lnCodSectieBucatarieFlora, m.lnCodSectieBucatarieRestaurant), m.lcAcontMarfaBucatarie, '')) AS acont, ;
|
|
CAST(IIF(EMPTY(i.cotatva), 0, i.cotatva) as N(2)) As proctva, CAST(Nvl(p.id_part, 0) as I) As id_part, ;
|
|
STRTRAN(idinregistrare,'-','0') as nir, ;
|
|
TTOD(CTOT(i.DataDocument)) As dataact, CAST(LEFT(ALLTRIM(i.nrdocument),14) as N(14)) As nract, UPPER(ALLTRIM(STR(codsectiedeintrare))) as codsectie, UPPER(denumiresectiedeintrare) as sectie, ;
|
|
Sum(i.valoareajustatafaratva) As VALACH, Sum(i.tvavaloareajustata) As VALTVAA ;
|
|
FROM cIntrariRestaurant i ;
|
|
LEFT Join cClientiFurnizori p On p.cod_fiscal = i.codfiscal ;
|
|
Group By 1,2,3,4,5,6,7,8,9 ;
|
|
INTO Cursor cIntrari
|
|
|
|
* --- actactan, copie exacta a INSERT-ului de baza din frm_import.sc2
|
|
lnIdSet = 50100
|
|
lnIdFdocFactura = 42
|
|
lnAn = 2026
|
|
lnLuna = 7
|
|
lcAcont401 = '01'
|
|
lnIdBazaAch21 = 208
|
|
lnIdBazaAch11 = 212
|
|
lnIdBazaAch19 = 103
|
|
lnIdBazaAch9 = 109
|
|
lnIdBazaAch5 = 154
|
|
lnIdBazaAch0 = 113
|
|
lnIdBazaAchS = m.lnIdBazaAch21
|
|
lcExplicatia5 = 'FACTURA ACHIZITIE'
|
|
|
|
Create Cursor actactan (cod I, id_set N(5), id_fdoc N(5), an N(4), luna N(2), explicatia C(100) Null, dataact D, dataireg D, nract N(14), serie_act C(10), nnir N(14), scd C(4), ascd V(4), scc C(4), ascc V(4), id_partd N(10), partd C(200), id_partc N(10), partc C(200), proc_tva N(5,2), id_jtva_coloana N(4) Null, explicatia4 C(100), explicatia5 C(100), suma N(16,2), taxcode N(6) null, paymentcode C(9) null, id_factc I, perechec I, id_factD I, pereched I, id_fact I)
|
|
|
|
Insert Into actactan (id_set, id_fdoc, an, luna, dataact, dataireg, nract, nnir, scd, ascd, scc, ascc, id_partd, id_partc, proc_tva, id_jtva_coloana, explicatia, explicatia5, suma) ;
|
|
SELECT lnIdSet As id_set, lnIdFdocFactura As id_fdoc, m.lnAn As an, m.lnLuna As luna, dataact, dataact As dataireg, INT(nract), INT(VAL(nir)), ;
|
|
cont As scd, acont As ascd, '401' As scc, m.lcAcont401 As ascc, 0 As id_partd, id_part As id_partc, ;
|
|
1 + Round(proctva / 100, 2) As proc_tva, ;
|
|
CAST(Iif(proctva = 21, m.lnIdBazaAch21, ;
|
|
Iif(proctva = 11, m.lnIdBazaAch11, ;
|
|
Iif(proctva = 19, m.lnIdBazaAch19, ;
|
|
Iif(proctva = 9, m.lnIdBazaAch9, ;
|
|
Iif(proctva = 5, m.lnIdBazaAch5, ;
|
|
Iif(proctva = 0, m.lnIdBazaAch0, ;
|
|
m.lnIdBazaAchS)))))) AS N(4)) As id_jtva_coloana, ;
|
|
sectie As explicatia, lcExplicatia5 As explicatia5, ;
|
|
SUM(ROUND(VALACH,2)) As suma ;
|
|
FROM cIntrari ;
|
|
Group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
|
|
|
|
lnInainte = RECCOUNT('actactan')
|
|
DO Raport WITH 'actactan inainte de filtrare = ' + TRANSFORM(m.lnInainte) + ' randuri'
|
|
|
|
* pastrez lista completa, ca sa pot spune exact ce s-a scos
|
|
SELECT nract, dataact, explicatia5, suma FROM actactan ORDER BY dataact, nract INTO CURSOR cInainte
|
|
|
|
DO Raport WITH ''
|
|
DO Raport WITH '--- apel EliminaFacturiDuplicate(50100) pe ROA_CONPRESS ---'
|
|
lnSucces = goImportFrm.EliminaFacturiDuplicate(50100)
|
|
DO Raport WITH 'EliminaFacturiDuplicate = ' + TRANSFORM(m.lnSucces) + ' (1 = CT_SUCCES)'
|
|
IF !EMPTY(gcMockUltimMesaj)
|
|
DO Raport WITH 'AMESSAGEBOX: ' + gcMockUltimMesaj
|
|
ENDIF
|
|
|
|
IF !USED('actactan')
|
|
DO Raport WITH 'EROARE: cursorul actactan nu mai exista dupa apel!'
|
|
QUIT
|
|
ENDIF
|
|
|
|
lnDupa = RECCOUNT('actactan')
|
|
DO Raport WITH 'actactan dupa filtrare = ' + TRANSFORM(m.lnDupa) + ' randuri'
|
|
DO Raport WITH 'randuri scoase = ' + TRANSFORM(m.lnInainte - m.lnDupa)
|
|
DO Raport WITH 'tip ascd dupa filtrare = ' + TYPE('actactan.ascd')
|
|
|
|
* ce s-a scos (adica exista deja in ROA)
|
|
SELECT a.nract, a.dataact, a.suma FROM cInainte a ;
|
|
WHERE NOT EXISTS (SELECT 1 FROM actactan b WHERE b.nract = a.nract AND b.dataact = a.dataact) ;
|
|
INTO CURSOR cScoase
|
|
DO Raport WITH ''
|
|
DO Raport WITH '--- documente scoase din lot (deja in ROA): ' + TRANSFORM(RECCOUNT('cScoase'))
|
|
SELECT cScoase
|
|
SCAN
|
|
DO Raport WITH ' scos: nract=' + TRANSFORM(nract) + ' ' + DTOC(dataact) + ' suma=' + TRANSFORM(suma)
|
|
ENDSCAN
|
|
|
|
DO Raport WITH ''
|
|
DO Raport WITH '--- documente ramase de scris: ' + TRANSFORM(m.lnDupa)
|
|
SELECT actactan
|
|
SCAN
|
|
DO Raport WITH ' ramas: nract=' + TRANSFORM(nract) + ' ' + DTOC(dataact) + ' suma=' + TRANSFORM(suma)
|
|
ENDSCAN
|
|
|
|
* verificarea cheie: cele 11 facturi raportate ca lipsa NU trebuie sa fie scoase
|
|
DO Raport WITH ''
|
|
DO Raport WITH '--- control: facturile raportate ca lipsa din ROA trebuie sa RAMANA ---'
|
|
SELECT nract, dataact FROM actactan ;
|
|
WHERE INLIST(nract, 30285003, 1178734, 30285604, 154, 30286234, 30286444, 30286604, 6019064715, 30286873, 6019082505, 30287485) ;
|
|
ORDER BY dataact, nract INTO CURSOR cControl
|
|
DO Raport WITH 'regasite in lotul ramas: ' + TRANSFORM(RECCOUNT('cControl')) + ' din 12 randuri asteptate'
|
|
SELECT cControl
|
|
SCAN
|
|
DO Raport WITH ' OK ramas: nract=' + TRANSFORM(nract) + ' ' + DTOC(dataact)
|
|
ENDSCAN
|
|
|
|
SELECT actactan
|
|
COPY TO (m.lcDir + 'dry_duplicate_ramase.csv') TYPE CSV
|
|
SELECT cScoase
|
|
COPY TO (m.lcDir + 'dry_duplicate_scoase.csv') TYPE CSV
|
|
|
|
DO Raport WITH ''
|
|
DO Raport WITH 'GATA - nu s-a scris nimic in ROA'
|
|
QUIT
|
|
|
|
PROCEDURE Raport
|
|
LPARAMETERS tcText
|
|
STRTOFILE(m.tcText + CHR(13) + CHR(10), m.gcDryLog, 1)
|
|
ENDPROC
|