Verificarea de duplicate se face document cu document, nu pe primul document din lot
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
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -93,6 +93,7 @@ Teste/screenshots/
|
|||||||
Teste/_erori_test.txt
|
Teste/_erori_test.txt
|
||||||
Teste/*_log.txt
|
Teste/*_log.txt
|
||||||
Teste/raport_*.csv
|
Teste/raport_*.csv
|
||||||
|
Teste/dry_*.csv
|
||||||
|
|
||||||
# --- Cache text extern (inlocuit de fluxul in-arbore .??2) ---
|
# --- Cache text extern (inlocuit de fluxul in-arbore .??2) ---
|
||||||
_textcache/
|
_textcache/
|
||||||
|
|||||||
159
Teste/test_dry_duplicate.prg
Normal file
159
Teste/test_dry_duplicate.prg
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
* 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
|
||||||
150
Teste/test_dry_intrari.prg
Normal file
150
Teste/test_dry_intrari.prg
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
* Dry run: reproduce local pasii din CreeazaNote pentru INTRARI si numara randurile la fiecare pas.
|
||||||
|
* Fara Oracle, fara scriere. Rezultat: Teste\dry_intrari_log.txt
|
||||||
|
SET SAFETY OFF
|
||||||
|
SET TALK OFF
|
||||||
|
PUBLIC gcUILog, gcSyncDir, gcDryLog
|
||||||
|
|
||||||
|
LOCAL lcDir, lnSucces
|
||||||
|
LOCAL lnCodSectieBarFlora, lnCodSectieBucatarieFlora, lnCodSectieBarRestaurant, lnCodSectieBucatarieRestaurant
|
||||||
|
LOCAL lcAcontMarfaBar, lcAcontMarfaBucatarie
|
||||||
|
|
||||||
|
DO test_init_env_auto WITH .F.
|
||||||
|
SET PROCEDURE TO ui_harness ADDITIVE
|
||||||
|
SET PROCEDURE TO mock_amessagebox ADDITIVE
|
||||||
|
|
||||||
|
lcDir = ADDBS(JUSTPATH(SYS(16,0)))
|
||||||
|
gcDryLog = m.lcDir + "dry_intrari_log.txt"
|
||||||
|
STRTOFILE('DRY RUN INTRARI ' + 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'
|
||||||
|
DO Raport WITH 'nPart = ' + TRANSFORM(RECCOUNT('nPart')) + ' randuri'
|
||||||
|
|
||||||
|
* --- cClientiFurnizori, ca in CompleteazaParteneriROA, dar 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
|
||||||
|
DO Raport WITH 'cClientiFurnizori = ' + TRANSFORM(RECCOUNT('cClientiFurnizori')) + ' randuri'
|
||||||
|
|
||||||
|
* --- pasul 1: cIntrari (copie exacta a SELECT-ului din frm_import.sc2:832)
|
||||||
|
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
|
||||||
|
|
||||||
|
DO Raport WITH 'cIntrari = ' + TRANSFORM(RECCOUNT('cIntrari')) + ' randuri (asteptat 152)'
|
||||||
|
|
||||||
|
* ce s-a pierdut intre XML si cIntrari
|
||||||
|
SELECT x.idinregistrare, x.nrdocument, x.datadocument, x.codfiscal, x.denumirefurnizor, x.cotatva, x.valoareajustatafaratva ;
|
||||||
|
FROM cIntrariRestaurant x ;
|
||||||
|
WHERE STRTRAN(x.idinregistrare,'-','0') NOT IN (SELECT nir FROM cIntrari) ;
|
||||||
|
INTO CURSOR cPierduteIntrari
|
||||||
|
DO Raport WITH 'LIPSA in cIntrari = ' + TRANSFORM(RECCOUNT('cPierduteIntrari'))
|
||||||
|
DO ListaPierdute WITH 'cPierduteIntrari'
|
||||||
|
|
||||||
|
* --- pasul 2: actactan (copie exacta a celor doua INSERT-uri din frm_import.sc2:917)
|
||||||
|
lnIdSet = 50100
|
||||||
|
lnIdFdocFactura = 42
|
||||||
|
lnAn = 2026
|
||||||
|
lnLuna = 7
|
||||||
|
lcAcont401 = '01'
|
||||||
|
lcContTVAAchizitie = '4426'
|
||||||
|
lnIdBazaAch21 = 208
|
||||||
|
lnIdTVAAch21 = 209
|
||||||
|
lnIdBazaAch11 = 212
|
||||||
|
lnIdTVAAch11 = 213
|
||||||
|
lnIdBazaAch19 = 103
|
||||||
|
lnIdTVAAch19 = 104
|
||||||
|
lnIdBazaAch9 = 109
|
||||||
|
lnIdTVAAch9 = 110
|
||||||
|
lnIdBazaAch5 = 154
|
||||||
|
lnIdTVAAch5 = 155
|
||||||
|
lnIdBazaAch0 = 113
|
||||||
|
lnIdBazaAchS = m.lnIdBazaAch21
|
||||||
|
lnIdTVAAchS = m.lnIdTVAAch21
|
||||||
|
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
|
||||||
|
|
||||||
|
DO Raport WITH 'actactan baza = ' + TRANSFORM(RECCOUNT('actactan')) + ' randuri'
|
||||||
|
|
||||||
|
SELECT c.nir, c.nract, c.dataact, c.sectie, c.proctva, c.valach ;
|
||||||
|
FROM cIntrari c ;
|
||||||
|
WHERE INT(VAL(c.nir)) NOT IN (SELECT nnir FROM actactan) ;
|
||||||
|
INTO CURSOR cPierduteAct
|
||||||
|
DO Raport WITH 'LIPSA in actactan = ' + TRANSFORM(RECCOUNT('cPierduteAct'))
|
||||||
|
|
||||||
|
* nnir care se suprapun (doua nir diferite -> acelasi nnir)
|
||||||
|
SELECT nnir, COUNT(*) as nr FROM actactan GROUP BY nnir HAVING COUNT(*) > 1 INTO CURSOR cColiziuni
|
||||||
|
DO Raport WITH 'nnir cu > 1 rand = ' + TRANSFORM(RECCOUNT('cColiziuni'))
|
||||||
|
|
||||||
|
* verificare directa: facturile despre care stim ca lipsesc din ROA
|
||||||
|
DO Raport WITH ''
|
||||||
|
DO Raport WITH '--- facturile raportate ca lipsa, asa cum arata in actactan ---'
|
||||||
|
SELECT nract, nnir, DTOC(dataact) as zi, scd, ascd, id_partc, suma, explicatia ;
|
||||||
|
FROM actactan ;
|
||||||
|
WHERE INLIST(nract, 30285003, 1178734, 30285604, 154, 30286234, 30286444, 30286604, 6019064715, 30286873, 6019082505, 30287485) ;
|
||||||
|
ORDER BY dataact, nract INTO CURSOR cVerif
|
||||||
|
SELECT cVerif
|
||||||
|
SCAN
|
||||||
|
DO Raport WITH ' nract=' + TRANSFORM(nract) + ' nnir=' + TRANSFORM(nnir) + ' ' + zi + ' ' + scd + '/' + NVL(ascd,'') + ' idp=' + TRANSFORM(id_partc) + ' suma=' + TRANSFORM(suma)
|
||||||
|
ENDSCAN
|
||||||
|
|
||||||
|
SELECT actactan
|
||||||
|
COPY TO (m.lcDir + 'dry_actactan.csv') TYPE CSV
|
||||||
|
SELECT cIntrari
|
||||||
|
COPY TO (m.lcDir + 'dry_cintrari.csv') TYPE CSV
|
||||||
|
|
||||||
|
QUIT
|
||||||
|
|
||||||
|
PROCEDURE Raport
|
||||||
|
LPARAMETERS tcText
|
||||||
|
STRTOFILE(m.tcText + CHR(13) + CHR(10), m.gcDryLog, 1)
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE ListaPierdute
|
||||||
|
LPARAMETERS tcAlias
|
||||||
|
LOCAL lnArie
|
||||||
|
lnArie = SELECT()
|
||||||
|
SELECT (m.tcAlias)
|
||||||
|
SCAN
|
||||||
|
DO Raport WITH ' ' + ALLTRIM(idinregistrare) + ' nr=' + ALLTRIM(nrdocument) + ' ' + ALLTRIM(denumirefurnizor) + ' ' + TRANSFORM(valoareajustatafaratva)
|
||||||
|
ENDSCAN
|
||||||
|
SELECT (m.lnArie)
|
||||||
|
ENDPROC
|
||||||
@@ -1,3 +1,16 @@
|
|||||||
|
<!--
|
||||||
|
21/08/2026
|
||||||
|
FLORA2ROA - 2.0.8
|
||||||
|
|
||||||
|
:eroare:
|
||||||
|
Verificarea facturilor deja importate se face acum document cu document, nu doar pe primul
|
||||||
|
document din interval. Inainte, daca primul document exista deja in ROA nu se mai importa
|
||||||
|
nimic din tot intervalul, iar daca nu exista se rescriau si documentele deja importate,
|
||||||
|
care apareau duplicate.
|
||||||
|
Bifa "Nu scrie note contabile" genereaza din nou fisierul xls cu notele, chiar daca
|
||||||
|
actualizarea partenerilor in ROA nu a reusit.
|
||||||
|
-->
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
18/08/2026
|
18/08/2026
|
||||||
FLORA2ROA - 2.0.7
|
FLORA2ROA - 2.0.7
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
2.0.7
|
2.0.8
|
||||||
173
frm_import.sc2
173
frm_import.sc2
@@ -46,6 +46,7 @@ DEFINE CLASS form1 AS form
|
|||||||
*m: creeazanote
|
*m: creeazanote
|
||||||
*m: disconnectmentor
|
*m: disconnectmentor
|
||||||
*m: disconnectroa
|
*m: disconnectroa
|
||||||
|
*m: eliminafacturiduplicate
|
||||||
*m: exportdate
|
*m: exportdate
|
||||||
*m: getidpartener
|
*m: getidpartener
|
||||||
*m: getidpartenerroa
|
*m: getidpartenerroa
|
||||||
@@ -53,7 +54,6 @@ DEFINE CLASS form1 AS form
|
|||||||
*m: sql_temp_insert
|
*m: sql_temp_insert
|
||||||
*m: sterge_import
|
*m: sterge_import
|
||||||
*m: trace
|
*m: trace
|
||||||
*m: verificafactura
|
|
||||||
*p: nhandlementor
|
*p: nhandlementor
|
||||||
*p: _memberdata && XML Metadata for customizable properties
|
*p: _memberdata && XML Metadata for customizable properties
|
||||||
*</DefinedPropArrayMethod>
|
*</DefinedPropArrayMethod>
|
||||||
@@ -77,6 +77,7 @@ DEFINE CLASS form1 AS form
|
|||||||
<memberdata name="completeazaparteneriroa" display="CompleteazaParteneriROA"/>
|
<memberdata name="completeazaparteneriroa" display="CompleteazaParteneriROA"/>
|
||||||
<memberdata name="getidpartener" display="GetIdPartener"/>
|
<memberdata name="getidpartener" display="GetIdPartener"/>
|
||||||
<memberdata name="getidpartenerroa" display="GetIdPartenerROA"/>
|
<memberdata name="getidpartenerroa" display="GetIdPartenerROA"/>
|
||||||
|
<memberdata name="eliminafacturiduplicate" display="EliminaFacturiDuplicate"/>
|
||||||
</VFPData>
|
</VFPData>
|
||||||
*</PropValue>
|
*</PropValue>
|
||||||
|
|
||||||
@@ -646,12 +647,12 @@ DEFINE CLASS form1 AS form
|
|||||||
* VANZARI - nu iau in considerare TipPlata = "MD BUFET"
|
* VANZARI - nu iau in considerare TipPlata = "MD BUFET"
|
||||||
|
|
||||||
* Creeaza actactan cu note contabile vanzari
|
* Creeaza actactan cu note contabile vanzari
|
||||||
Local lnIdPartCasa, lnIdPartCard, lnSucces, lnIdSet, lnVerificaFacturi
|
Local lnIdPartCasa, lnIdPartCard, lnSucces, lnIdSet, lnVerificaFacturi, lnSuccesDuplicat
|
||||||
Local lcAcontTVAAchizitie, lcAcontTVAVanzare, lcContTVAAchizitie, lcContTVAVanzare, lcDirImport
|
Local lcAcontTVAAchizitie, lcAcontTVAVanzare, lcContTVAAchizitie, lcContTVAVanzare, lcDirImport
|
||||||
Local lcDirOutput, lcExplicatia5, lcFileOutput, ldDataImport, llFacturaDuplicat, llImport, lnAn
|
Local lcDirOutput, lcExplicatia5, lcFileOutput, ldDataImport, llImport, lnAn
|
||||||
Local lnIdBazaAch0, lnIdBazaAch19, lnIdBazaAch20, lnIdBazaAch24, lnIdBazaAch5, lnIdBazaAch9
|
Local lnIdBazaAch0, lnIdBazaAch19, lnIdBazaAch20, lnIdBazaAch24, lnIdBazaAch5, lnIdBazaAch9
|
||||||
Local lnIdFdoc, lnIdFdocBonConsum, lnIdFdocBonFiscal, lnIdFdocFactura, lnIdFdocMonetar, lnIdTVAAch19
|
Local lnIdFdoc, lnIdFdocBonConsum, lnIdFdocBonFiscal, lnIdFdocFactura, lnIdFdocMonetar, lnIdTVAAch19
|
||||||
Local lnIdTVAAch20, lnIdTVAAch24, lnIdTVAAch5, lnIdTVAAch9, lnLuna, lnTVAIncasare, loRec, lcAcontMf4428
|
Local lnIdTVAAch20, lnIdTVAAch24, lnIdTVAAch5, lnIdTVAAch9, lnLuna, lnTVAIncasare, lcAcontMf4428
|
||||||
Local lcAContCardRestaurant, lcAContCasaRestaurant, lcAContFacturaCardHotel, lcAContFacturaCasaHotel
|
Local lcAContCardRestaurant, lcAContCasaRestaurant, lcAContFacturaCardHotel, lcAContFacturaCasaHotel
|
||||||
Local lcAContFacturaTicheteHotel, lcAContFacturaViramentIntHotel, lcAContTicheteRestaurant
|
Local lcAContFacturaTicheteHotel, lcAContFacturaViramentIntHotel, lcAContTicheteRestaurant
|
||||||
Local lcAcont401, lcAcontCardHotel, lcAcontCasaHotel, lcAcontClientiHotel, lcAcontClientiRestaurant
|
Local lcAcont401, lcAcontCardHotel, lcAcontCasaHotel, lcAcontClientiHotel, lcAcontClientiRestaurant
|
||||||
@@ -1383,24 +1384,28 @@ DEFINE CLASS form1 AS form
|
|||||||
UPDATE actactan SET ascd = ALLTRIM(STRTRAN(ascd, CHR(9), '')), ascc = ALLTRIM(STRTRAN(ascc, CHR(9), ''))
|
UPDATE actactan SET ascd = ALLTRIM(STRTRAN(ascd, CHR(9), '')), ascc = ALLTRIM(STRTRAN(ascc, CHR(9), ''))
|
||||||
USE IN (SELECT('tAct'))
|
USE IN (SELECT('tAct'))
|
||||||
|
|
||||||
SET STEP ON
|
* Scot din lot documentele care exista deja in ROA, comparate unul cate unul
|
||||||
llFacturaDuplicat = .F.
|
lnSuccesDuplicat = CT_SUCCES
|
||||||
If m.lnVerificaFacturi = 1
|
If m.lnVerificaFacturi = 1
|
||||||
Select actactan
|
lnSuccesDuplicat = This.EliminaFacturiDuplicate(m.lnIdSet)
|
||||||
Go Top
|
|
||||||
Scatter Name loRec Memo
|
|
||||||
llFacturaDuplicat = This.VerificaFactura(loRec)
|
|
||||||
Endif
|
Endif
|
||||||
|
|
||||||
If m.llTest OR !m.llFacturaDuplicat
|
* In modul de test notele nu ajung in ROA, deci xls-ul de verificare se face si
|
||||||
This.Scrienote()
|
* atunci cand verificarea de duplicate nu a reusit
|
||||||
|
If m.llTest Or m.lnSuccesDuplicat = CT_SUCCES
|
||||||
|
If Reccount('actactan') > 0
|
||||||
|
This.Scrienote()
|
||||||
|
Else
|
||||||
|
This.trace('Toate documentele din interval exista deja in ROA, nu se scrie nimic.')
|
||||||
|
Endif
|
||||||
|
Else
|
||||||
|
lnSucces = CT_INSUCCES
|
||||||
Endif
|
Endif
|
||||||
|
|
||||||
|
|
||||||
Endif && m.llImport
|
Endif && m.llImport
|
||||||
|
|
||||||
Use In (Select('actactan'))
|
Use In (Select('actactan'))
|
||||||
SET STEP ON
|
|
||||||
If Used('act_test')
|
If Used('act_test')
|
||||||
lcDirOutput = Addbs(m.lcDirImport)
|
lcDirOutput = Addbs(m.lcDirImport)
|
||||||
lcFileOutput = m.lcDirOutput + 'act_test' + Sys(2) + '.xls'
|
lcFileOutput = m.lcDirOutput + 'act_test' + Sys(2) + '.xls'
|
||||||
@@ -1437,6 +1442,88 @@ DEFINE CLASS form1 AS form
|
|||||||
RETURN m.lnSucces
|
RETURN m.lnSucces
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE eliminafacturiduplicate
|
||||||
|
Lparameters tnIdSet
|
||||||
|
* Scoate din actactan documentele care exista deja in ROA, comparate document cu document
|
||||||
|
* dupa (an, luna, id_set, nract, dataact, explicatia5).
|
||||||
|
* Intoarce CT_INSUCCES daca verificarea nu s-a putut face, ca lotul sa nu fie scris nefiltrat.
|
||||||
|
Private gnAn, gnIdSet, gnLuna
|
||||||
|
|
||||||
|
Local lcCheie, lcMesaj, lcSql, lnEliminate, lnRamase, lnSucces, lnTotal
|
||||||
|
|
||||||
|
If !Used('actactan') Or Reccount('actactan') = 0
|
||||||
|
Return CT_SUCCES
|
||||||
|
Endif
|
||||||
|
|
||||||
|
gnIdSet = Evl(m.tnIdSet, 50100)
|
||||||
|
This.trace('Verificare documente deja existente in ROA')
|
||||||
|
|
||||||
|
lnSucces = This.Connectroa()
|
||||||
|
If m.lnSucces <> CT_SUCCES
|
||||||
|
Return m.lnSucces
|
||||||
|
Endif
|
||||||
|
|
||||||
|
* Cheia unui document: an + luna + nract + dataact + explicatia5
|
||||||
|
Create Cursor cFacturiRoa (cheie C(58))
|
||||||
|
Index On cheie Tag cheie
|
||||||
|
|
||||||
|
Select Distinct an, luna From actactan Into Cursor cAnLunaRoa
|
||||||
|
Select cAnLunaRoa
|
||||||
|
Scan
|
||||||
|
gnAn = an
|
||||||
|
gnLuna = luna
|
||||||
|
lcSql = [select distinct nract, dataact, explicatia5 from act ] + ;
|
||||||
|
[where sters = 0 and an = ?gnAn and luna = ?gnLuna and id_set = ?gnIdSet]
|
||||||
|
lnSucces = goExecutor.oExecute(GetHash('cCursor=>cActRoa??cSql=>' + m.lcSql))
|
||||||
|
If m.lnSucces <> CT_SUCCES
|
||||||
|
lcMesaj = goExecutor.cEroare
|
||||||
|
This.trace(m.lcMesaj)
|
||||||
|
AMESSAGEBOX(m.lcMesaj, 0 + 48, 'Atentie!')
|
||||||
|
Exit
|
||||||
|
Endif
|
||||||
|
|
||||||
|
Select cActRoa
|
||||||
|
Scan
|
||||||
|
lcCheie = Padl(m.gnAn, 4, '0') + Padl(m.gnLuna, 2, '0') + ;
|
||||||
|
Padl(Alltrim(Str(Int(Nvl(cActRoa.nract, 0)), 14, 0)), 14, '0') + ;
|
||||||
|
Dtos(Nvl(cActRoa.dataact, {})) + Padr(Alltrim(Nvl(cActRoa.explicatia5, '')), 30)
|
||||||
|
Insert Into cFacturiRoa (cheie) Values (m.lcCheie)
|
||||||
|
Endscan
|
||||||
|
If Used('cActRoa')
|
||||||
|
Use In cActRoa
|
||||||
|
Endif
|
||||||
|
Select cAnLunaRoa
|
||||||
|
Endscan
|
||||||
|
Use In cAnLunaRoa
|
||||||
|
|
||||||
|
This.Disconnectroa()
|
||||||
|
|
||||||
|
If m.lnSucces <> CT_SUCCES
|
||||||
|
Use In cFacturiRoa
|
||||||
|
Return m.lnSucces
|
||||||
|
Endif
|
||||||
|
|
||||||
|
lnTotal = Reccount('actactan')
|
||||||
|
Select actactan
|
||||||
|
Delete For Indexseek(Padl(an, 4, '0') + Padl(luna, 2, '0') + ;
|
||||||
|
Padl(Alltrim(Str(Int(nract), 14, 0)), 14, '0') + ;
|
||||||
|
Dtos(dataact) + Padr(Alltrim(Nvl(explicatia5, '')), 30), .F., 'cFacturiRoa', 'cheie')
|
||||||
|
Use In cFacturiRoa
|
||||||
|
|
||||||
|
* Rescriu cursorul ca randurile sterse sa dispara fizic, nu doar marcate
|
||||||
|
Select * From actactan Into Cursor cActRamase
|
||||||
|
lnRamase = Reccount('cActRamase')
|
||||||
|
Use In actactan
|
||||||
|
Select * From cActRamase Into Cursor actactan Readwrite
|
||||||
|
Use In cActRamase
|
||||||
|
|
||||||
|
lnEliminate = m.lnTotal - m.lnRamase
|
||||||
|
This.trace('Randuri deja existente in ROA, scoase din lot: ' + Transform(m.lnEliminate) + ;
|
||||||
|
' din ' + Transform(m.lnTotal))
|
||||||
|
|
||||||
|
Return CT_SUCCES
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE exportdate
|
PROCEDURE exportdate
|
||||||
Local laFiles[1], lcDirImport, ldDataImport, lnAn, lnFiles, lnLuna, lnSucces
|
Local laFiles[1], lcDirImport, ldDataImport, lnAn, lnFiles, lnLuna, lnSucces
|
||||||
Local lcFile, lcPrefix, lnFile
|
Local lcFile, lcPrefix, lnFile
|
||||||
@@ -1865,7 +1952,6 @@ DEFINE CLASS form1 AS form
|
|||||||
lnAn = Year(m.ldDataImport)
|
lnAn = Year(m.ldDataImport)
|
||||||
lcDirImport = Addbs(Alltrim(goApp.oSettings.cale_import)) + Alltrim(Str(m.lnAn)) + '\' + Padl(m.lnLuna, 2, '0') + '\'
|
lcDirImport = Addbs(Alltrim(goApp.oSettings.cale_import)) + Alltrim(Str(m.lnAn)) + '\' + Padl(m.lnLuna, 2, '0') + '\'
|
||||||
lnSucces = CT_INSUCCES
|
lnSucces = CT_INSUCCES
|
||||||
SET STEP ON
|
|
||||||
llTest = (This.chkTest.Value = 1)
|
llTest = (This.chkTest.Value = 1)
|
||||||
If m.llTest
|
If m.llTest
|
||||||
thisform.trace('Salvare note in xls, fara scriere in Registrul Jurnal')
|
thisform.trace('Salvare note in xls, fara scriere in Registrul Jurnal')
|
||||||
@@ -2241,54 +2327,6 @@ DEFINE CLASS form1 AS form
|
|||||||
This.edtInfo.Refresh()
|
This.edtInfo.Refresh()
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE verificafactura
|
|
||||||
Lparameters toRec
|
|
||||||
Private gnAn, gnIdSucursala, gnIdUtil, gnLuna, gcExplicatia5, gdDataAct, gnIdSet, gnNrAct
|
|
||||||
|
|
||||||
Local lcMesaj, lcSql, lnHandle, lnInregistrari, lnSucces
|
|
||||||
lnInregistrari = 0
|
|
||||||
lnSucces = This.Connectroa()
|
|
||||||
If lnSucces = CT_SUCCES
|
|
||||||
lnHandle = goConn.nHandle
|
|
||||||
Endif
|
|
||||||
|
|
||||||
If lnSucces = CT_SUCCES
|
|
||||||
gnAn = toRec.an
|
|
||||||
gnLuna = toRec.luna
|
|
||||||
gnIdUtil = - 3
|
|
||||||
gnIdSucursala = Null
|
|
||||||
gnNrAct = toRec.nract
|
|
||||||
gdDataAct = toRec.dataact
|
|
||||||
gnIdSet = toRec.id_set
|
|
||||||
gcExplicatia5 = Alltrim(toRec.explicatia5)
|
|
||||||
|
|
||||||
lcSql = [select COUNT(*) as nr from act where sters = 0 and an = ?gnAn and luna = ?gnLuna and nract = ?gnNrAct and dataact = ?gdDataAct and id_set = ?gnIdSet and explicatia5 = ?gcExplicatia5]
|
|
||||||
lnSucces = goExecutor.oExecute(GetHash("cCursor=>cInregistrari??cSql=>" + lcSql))
|
|
||||||
|
|
||||||
If lnSucces = CT_SUCCES
|
|
||||||
If !Used('cInregistrari')
|
|
||||||
lnInregistrari = 1 && daca da eroare, consider duplicat ca sa nu se insereze din greseala
|
|
||||||
lnSucces = CT_INSUCCES
|
|
||||||
lcMesaj = 'Nu exista cursorul cInregistrari cu numarul de inregistrari ale facturii!'
|
|
||||||
This.trace(m.lcMesaj)
|
|
||||||
Messagebox(m.lcMesaj, 0 + 48, 'Atentie!')
|
|
||||||
Else
|
|
||||||
lnInregistrari = cInregistrari.nr
|
|
||||||
ENDIF
|
|
||||||
ELSE
|
|
||||||
lnInregistrari = 1 && daca da eroare, consider duplicat ca sa nu se insereze din greseala
|
|
||||||
This.trace(goExecutor.cEroare)
|
|
||||||
Messagebox(goExecutor.cEroare, 0 + 48, 'Atentie!')
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
USE IN (SELECT('cInregistrari'))
|
|
||||||
Endif && lnSucces
|
|
||||||
|
|
||||||
This.Disconnectroa()
|
|
||||||
|
|
||||||
Return (m.lnInregistrari > 0)
|
|
||||||
ENDPROC
|
|
||||||
|
|
||||||
PROCEDURE chkTVAIncasare.Valid
|
PROCEDURE chkTVAIncasare.Valid
|
||||||
goApp.oSettings.SetVariable([general], [tva_incasare], thisform.chkTVAIncasare.Value)
|
goApp.oSettings.SetVariable([general], [tva_incasare], thisform.chkTVAIncasare.Value)
|
||||||
|
|
||||||
@@ -2297,15 +2335,22 @@ DEFINE CLASS form1 AS form
|
|||||||
PROCEDURE cmdExport.Click
|
PROCEDURE cmdExport.Click
|
||||||
Close Databases All
|
Close Databases All
|
||||||
|
|
||||||
Local llSucces, ldData1, loEx as Exception
|
Local lnSucces, ldData1, llTest, loEx as Exception
|
||||||
ldData1 = Thisform.txtData1.Value
|
ldData1 = Thisform.txtData1.Value
|
||||||
|
llTest = (Thisform.chkTest.Value = 1)
|
||||||
|
|
||||||
lnSucces = Thisform.ExportDate()
|
lnSucces = Thisform.ExportDate()
|
||||||
|
|
||||||
If m.lnSucces = CT_SUCCES
|
If m.lnSucces = CT_SUCCES
|
||||||
lnSucces = Thisform.CompleteazaParteneriROA()
|
lnSucces = Thisform.CompleteazaParteneriROA()
|
||||||
|
|
||||||
If m.lnSucces = CT_SUCCES
|
* In modul de test notele nu ajung in ROA, deci xls-ul de verificare se genereaza si
|
||||||
|
* atunci cand completarea partenerilor nu a reusit
|
||||||
|
If m.lnSucces <> CT_SUCCES And m.llTest
|
||||||
|
Thisform.Trace('Completarea partenerilor nu a reusit; se continua doar pentru xls-ul de verificare.')
|
||||||
|
Endif
|
||||||
|
|
||||||
|
If m.lnSucces = CT_SUCCES Or m.llTest
|
||||||
lnSucces = Thisform.Creeazanote()
|
lnSucces = Thisform.Creeazanote()
|
||||||
|
|
||||||
goapp.osettings.SetVariable("general", "last_data1", DTOC(thisform.txtData1.Value))
|
goapp.osettings.SetVariable("general", "last_data1", DTOC(thisform.txtData1.Value))
|
||||||
|
|||||||
Reference in New Issue
Block a user