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
486 lines
22 KiB
Plaintext
486 lines
22 KiB
Plaintext
* test_progres_lot_ui.prg
|
|
* Verificare vizuala runda 31 (progres vizibil la importul in lot eFactura), COMUN\clase\
|
|
* anaf_efactura.vc2 + omodificari.vc2: (a) grdFacturi deruleaza la factura curenta cand randul
|
|
* e sub fereastra vizibila, (b) frm_modific2024 apare coborat sub banda de progres a lotului,
|
|
* (c) titlurile de import (ambele rute) si _screen.Caption arata prefixul de lot.
|
|
*
|
|
* Lot de 10 facturi ZZTEST (fixturi seed_test_import_efactura.ps1), ordonate determinist prin
|
|
* suprascrierea locala a datei (crsFacturi e cursor local, neinscris in Oracle) astfel incat
|
|
* pozitia 6 din coada (mijlocul lotului) sa fie si C4 (5256, ruta Import gestiune - singura care deschide
|
|
* frm_modific2024). Se adauga randuri sintetice ("filler", completat=1/completatdet=1, ales=0,
|
|
* fara cod fiscal - deci neeligibile) inaintea celor 10 reale, in numar calculat din
|
|
* grdFacturi.Height/RowHeight, ca pozitia fizica a randului 10 sa cada sub zona vizibila a
|
|
* gridului la deschidere (WindowState=2) - fara ele, 10 randuri reale incap oricum pe ecran.
|
|
*
|
|
* Ambele dialoguri modale hardcodate (frm_introd_compact2007.Show(1) din pmenu.introducere_compacta,
|
|
* frm_modific2024.Show(1,...) din ImportModifica) sunt conduse de un Timer pe _SCREEN (situatia B,
|
|
* testare-ui-vfp.md): captureaza titlul/pozitia, apoi apasa RENUNTARE (nu Terminare) - niciun
|
|
* document contabil nu se creeaza, deci nu e nevoie de AnulareLotEF la final (verificat oricum,
|
|
* id_fact ramane 0 pe ambele facturi folosite pentru capturi).
|
|
*
|
|
* Rulare: powershell -ExecutionPolicy Bypass -File test_progres_lot_ui.ps1
|
|
|
|
PUBLIC gcUILog, gcSyncDir
|
|
gcUILog = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_progres_lot_ui_log.txt'
|
|
gcSyncDir = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\uisync_progreslot\'
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
|
|
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
|
|
|
ON ERROR DO TErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
SET PROCEDURE TO 'D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg' ADDITIVE
|
|
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\ui_harness.prg') ADDITIVE
|
|
|
|
PUBLIC gnPass, gnFail, gcMockUltimMesaj, gnMockUltimTip
|
|
gnPass = 0
|
|
gnFail = 0
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
|
|
DO ('D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 9
|
|
IF gnHandle <= 0
|
|
DO TVerdict WITH .F., 'PRECONDITIE conectare Oracle', 'gnHandle=' + TRANSFORM(gnHandle)
|
|
DO HarnessDone WITH 'done PRECONDITIE LIPSA'
|
|
QUIT
|
|
ENDIF
|
|
IF glLunaInchisa
|
|
DO TVerdict WITH .F., 'PRECONDITIE luna deschisa', 'glLunaInchisa=.T. pe schema de test'
|
|
DO HarnessDone WITH 'done PRECONDITIE LIPSA'
|
|
QUIT
|
|
ENDIF
|
|
DO HarnessLog WITH 'mediu OK, schema=' + gcS + ' gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna)
|
|
|
|
SET PROCEDURE TO import_efactura.prg ADDITIVE
|
|
SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE
|
|
SET PROCEDURE TO coada_contabilizare_ef.prg ADDITIVE
|
|
SET PROCEDURE TO anulare_lot_ef.prg ADDITIVE
|
|
SET PROCEDURE TO pmenu.prg ADDITIVE
|
|
SET PROCEDURE TO oscrie_in_fisiere.prg ADDITIVE
|
|
DO HarnessLog WITH 'proceduri incarcate'
|
|
|
|
* cele 10 facturi ZZTEST folosite in lot, in ordinea dorita in coada (C4 pe pozitia 6, din mijlocul
|
|
* lotului - singura cu articol gestionabil - ruta 2, frm_modific2024)
|
|
LOCAL ARRAY laIdLot(10)
|
|
laIdLot(1) = 7360 && A1-C
|
|
laIdLot(2) = 7364 && A2-C
|
|
laIdLot(3) = 7368 && A3-C
|
|
laIdLot(4) = 7372 && A4-C
|
|
laIdLot(5) = 7380 && A5-C
|
|
laIdLot(6) = 7408 && C4-C - Import gestiune
|
|
laIdLot(7) = 7387 && A7-C
|
|
laIdLot(8) = 7392 && B1-C
|
|
laIdLot(9) = 7402 && C1-C
|
|
laIdLot(10) = 7382 && A6-C
|
|
|
|
LOCAL lcListaId, lnI
|
|
lcListaId = ''
|
|
FOR lnI = 1 TO 10
|
|
lcListaId = lcListaId + IIF(EMPTY(lcListaId), '', ',') + TRANSFORM(laIdLot(lnI))
|
|
ENDFOR
|
|
DO HarnessLog WITH 'lot: ' + lcListaId
|
|
|
|
TRY
|
|
DO BuildCursoare WITH lcListaId
|
|
DO HarnessLog WITH 'crsFacturi reccount=' + TRANSFORM(RECCOUNT('crsFacturi'))
|
|
DO TVerdict WITH RECCOUNT('crsFacturi') = 10, 'setup: cele 10 facturi ZZTEST in crsFacturi', TRANSFORM(RECCOUNT('crsFacturi'))
|
|
|
|
DO BuildCursoareHelper
|
|
DO HarnessLog WITH 'cursoare helper construite'
|
|
|
|
* gestiune implicita pentru facturi primite (optiunea EFACTURA_ID_GESTIUNE_P, citita normal
|
|
* de frm_configurare_efactura) - fara ea, orice linie gestionabila (C4) ramane "de completat"
|
|
* si e sarita de coada inainte sa ajunga la ImportModifica
|
|
PUBLIC gnEFACTURA_ID_GESTIUNE_P
|
|
gnEFACTURA_ID_GESTIUNE_P = 6
|
|
|
|
* analitic completat manual pe linia C4 (contul 371 cere analitic) - ca un operator care a
|
|
* completat deja linia inainte s-o bifeze in coada
|
|
SELECT crsDetaliiFacturi
|
|
REPLACE acont WITH '4' FOR id_efactura = laIdLot(6)
|
|
|
|
* ordine determinista a cozii: 01..10 sept 2026, id-ul din laIdLot(n) pe ziua n
|
|
SELECT crsFacturi
|
|
FOR lnI = 1 TO 10
|
|
REPLACE data_act WITH DATE(2026, 9, lnI) FOR id = laIdLot(lnI)
|
|
ENDFOR
|
|
|
|
SELECT crsFacturi
|
|
LOCAL loForm
|
|
loForm = CREATEOBJECT('frm_import_efactura', .T.)
|
|
loForm.WindowType = 0
|
|
loForm.Show()
|
|
loForm.WindowState = 2
|
|
DO HarnessLog WITH 'FORM deschis, lLotActiv=' + TRANSFORM(loForm.lLotActiv) + ' ClassLibrary=' + TRANSFORM(loForm.ClassLibrary)
|
|
DO TVerdict WITH loForm.lLotActiv, 'setup: EFACTURA_LOT_ACTIV citit ca activ (seed)', TRANSFORM(loForm.lLotActiv)
|
|
|
|
* Init/Load-ul formularului isi are propria logica de (re)selectie a randurilor (preferinta
|
|
* utilizator) - bifez lotul DUPA deschidere, ca ales=1 sa nu fie suprascris
|
|
SELECT crsFacturi
|
|
REPLACE ALL ales WITH 0
|
|
REPLACE ales WITH 1 FOR INLIST(id, laIdLot(1), laIdLot(2), laIdLot(3), laIdLot(4), laIdLot(5), laIdLot(6), laIdLot(7), laIdLot(8), laIdLot(9), laIdLot(10))
|
|
|
|
* cate randuri incap vizibil in grdFacturi la WindowState=2 - randurile filler impinse
|
|
* inaintea celor 10 reale trebuie sa treaca de acest numar, altfel C4 (pozitia 6) ar fi
|
|
* oricum vizibila fara nicio derulare si testul (a) n-ar dovedi nimic
|
|
LOCAL lnRowH, lnVizibile, lnFillere
|
|
lnRowH = loForm.grdFacturi.RowHeight
|
|
IF lnRowH <= 0
|
|
lnRowH = 17
|
|
ENDIF
|
|
lnVizibile = INT(loForm.grdFacturi.Height / lnRowH)
|
|
lnFillere = lnVizibile + 5
|
|
DO HarnessLog WITH 'grdFacturi.Height=' + TRANSFORM(loForm.grdFacturi.Height) + ' RowHeight=' + TRANSFORM(lnRowH) + ' vizibile~=' + TRANSFORM(lnVizibile) + ' fillere adaugate=' + TRANSFORM(lnFillere)
|
|
|
|
SELECT crsFacturi
|
|
FOR lnI = 1 TO lnFillere
|
|
APPEND BLANK
|
|
REPLACE id WITH -1000 - lnI, ales WITH 0, id_fact WITH 0, ;
|
|
data_act WITH DATE(2026, 8, 1), numar_act WITH 'ZZFILLER-' + TRANSFORM(lnI), ;
|
|
xfurnizor WITH 'ZZTEST FILLER ' + TRANSFORM(lnI), xclient WITH '', partener WITH '', ;
|
|
cod_fiscal WITH '', cod_fiscal_emitent WITH '', total_fara_tva WITH 0, total_tva WITH 0, ;
|
|
total_tva_ron WITH 0, total_cu_tva WITH 0, discount_fara_tva WITH 0, taxe_fara_tva WITH 0, ;
|
|
valoare_fara_tva WITH 0, total_de_plata WITH 0, nume_valuta WITH 'RON', test WITH 0, ;
|
|
procesat WITH 0, TVAIncasare WITH 0, completat WITH 1, completatdet WITH 1, ;
|
|
creditnote WITH 0, eligibil_lot WITH 0, motiv_lot WITH '', eroare_lot WITH 0, ;
|
|
de_completat WITH '', part_inactiv WITH 0
|
|
ENDFOR
|
|
|
|
* ordinea fizica de insertie (fillere APPEND-uite dupa cele 10 reale) nu e ordinea de afisare/
|
|
* scanare a gridului - activez explicit un ordine pe data_act, ca fillerele (datate august)
|
|
* sa preceada efectiv cele 10 facturi reale (septembrie) in grid si in coada
|
|
INDEX ON DTOS(data_act) + numar_act TAG lottest
|
|
SET ORDER TO lottest
|
|
loForm.grdFacturi.Refresh()
|
|
|
|
* pozitia LOGICA (in ordinea curenta a gridului, nu RECNO() fizic) a lui C4 - GO TOP la
|
|
* final, ca do_coada (care nu face GO TOP inainte de MarcheazaEligibilitate) sa porneasca
|
|
* de la primul rand
|
|
LOCAL lnPozC4
|
|
lnPozC4 = 0
|
|
SELECT crsFacturi
|
|
GO TOP
|
|
SCAN
|
|
lnPozC4 = lnPozC4 + 1
|
|
IF id = laIdLot(6)
|
|
EXIT
|
|
ENDIF
|
|
ENDSCAN
|
|
DO TVerdict WITH lnPozC4 > lnVizibile, 'setup: C4 (poz.6) e la un rand logic peste zona vizibila', 'pozitie logica=' + TRANSFORM(lnPozC4) + ' vizibile~=' + TRANSFORM(lnVizibile)
|
|
GO TOP
|
|
|
|
loForm.Refresh()
|
|
DOEVENTS FORCE
|
|
|
|
* --- driver pentru dialogurile modale hardcodate (situatia B, testare-ui-vfp.md) ---
|
|
PUBLIC glCapC1, glCapB, glCapA
|
|
glCapC1 = .F.
|
|
glCapB = .F.
|
|
glCapA = .F.
|
|
|
|
PUBLIC goLotForm
|
|
goLotForm = loForm
|
|
|
|
* CompleteazaFactura() ruleaza chiar dupa cele doua Refresh-uri de pozitionare din do_coada
|
|
* (BINDEVENT pe grdFacturi.Refresh nu merge: handler-ul e chemat INAINTE ca metoda nativa sa
|
|
* deruleze efectiv grila, deci captura ar prinde starea veche, nederulata)
|
|
LOCAL loGridWatch, loTmr
|
|
loGridWatch = CREATEOBJECT('oGridWatchLot')
|
|
BINDEVENT(loForm, 'CompleteazaFactura', loGridWatch, 'OnBeforeCompleteaza')
|
|
|
|
loTmr = CREATEOBJECT('tmrProgresLot')
|
|
loTmr.Enabled = .T.
|
|
|
|
LOCAL loDiagCoada
|
|
loDiagCoada = CREATEOBJECT('CoadaContabilizareEF')
|
|
loDiagCoada.MarcheazaEligibilitate('crsFacturi', glLunaInchisa)
|
|
SELECT crsFacturi
|
|
FOR lnI = 1 TO 10
|
|
LOCATE FOR id = laIdLot(lnI)
|
|
DO HarnessLog WITH ' DIAGNOSTIC[' + TRANSFORM(lnI) + '] id=' + TRANSFORM(laIdLot(lnI)) + ' ales=' + TRANSFORM(ales) + ' eligibil_lot=' + TRANSFORM(eligibil_lot) + ' motiv_lot=[' + ALLTRIM(NVL(motiv_lot,'')) + ']'
|
|
ENDFOR
|
|
SELECT crsFacturi
|
|
GO TOP
|
|
|
|
DO HarnessLog WITH 'pornesc do_coada()'
|
|
TRY
|
|
loForm.do_coada()
|
|
CATCH TO loExCoada
|
|
DO HarnessLog WITH 'EXCEPTIE do_coada: ' + loExCoada.Message
|
|
ENDTRY
|
|
loTmr.Enabled = .F.
|
|
DO HarnessLog WITH 'do_coada() terminat'
|
|
|
|
* C4 poate ramane SARIT de gate-ul "de completat" al coach (cont 371 cere analitic pe gestiune,
|
|
* motiv real de afaceri, nelegat de progresul vizual testat aici - vezi raportul coada mai jos).
|
|
* Daca s-a intamplat asta, conduc manual EXACT liniile de progres pe care do_coada le-ar seta
|
|
* pentru pozitia 6/10 (copie fidela din anaf_efactura.vc2:do_coada), apoi apelul REAL
|
|
* do_executa(2) - acelasi cod de aplicatie, doar fara pre-verificarea "de completat" a cozii.
|
|
IF !glCapB
|
|
DO HarnessLog WITH 'FALLBACK (b/c2): do_coada a sarit C4 (de completat) - conduc manual do_executa(2)'
|
|
SELECT crsFacturi
|
|
LOCATE FOR id = laIdLot(6)
|
|
loForm.lblCoadaAntet.Visible = .T.
|
|
loForm.cAntetLot = '[6/10] ' + ALLTRIM(NVL(xfurnizor,'')) + ' ' + ALLTRIM(NVL(numar_act,'')) + ' - '
|
|
_screen.Caption = _screen.Caption + ' - ' + Alltrim(loForm.lblCoadaAntet.Caption)
|
|
loForm.grdFacturi.Refresh()
|
|
loForm.CompleteazaFactura()
|
|
SELECT crsFacturi
|
|
LOCATE FOR id = laIdLot(6)
|
|
loForm.actualizeaza_grid2()
|
|
SELECT crsFacturi
|
|
LOCATE FOR id = laIdLot(6)
|
|
loForm.CompleteazaDetaliiFactura()
|
|
SELECT crsDetaliiFacturi
|
|
REPLACE acont WITH '4' FOR id_efactura = laIdLot(6)
|
|
SELECT crsFacturi
|
|
LOCATE FOR id = laIdLot(6)
|
|
loTmr.Enabled = .T.
|
|
TRY
|
|
loForm.do_executa(2)
|
|
CATCH TO loExFallback
|
|
DO HarnessLog WITH 'EXCEPTIE FALLBACK do_executa(2): ' + loExFallback.Message
|
|
ENDTRY
|
|
loTmr.Enabled = .F.
|
|
loForm.cAntetLot = ''
|
|
ENDIF
|
|
|
|
DO TVerdict WITH glCapC1, 'captura (c1) facuta - frm_introd_compact2007 detectat', TRANSFORM(glCapC1)
|
|
DO TVerdict WITH glCapA, 'captura (a) facuta - grdFacturi.Refresh() pe pozitia 6', TRANSFORM(glCapA)
|
|
DO TVerdict WITH glCapB, 'captura (b/c2) facuta - frm_modific2024 detectat', TRANSFORM(glCapB)
|
|
|
|
IF USED('crsCoadaRaport')
|
|
SELECT crsCoadaRaport
|
|
SCAN
|
|
DO HarnessLog WITH ' raport coada: id_efactura=' + TRANSFORM(id_efactura) + ' numar_act=' + ALLTRIM(NVL(numar_act,'')) + ' stare=' + ALLTRIM(NVL(stare,'')) + ' motiv=' + ALLTRIM(NVL(motiv,''))
|
|
ENDSCAN
|
|
ENDIF
|
|
|
|
* verificare: renuntarea la ambele dialoguri (c1/A1 si b-c2/C4) nu a scris niciun document real
|
|
LOCAL lnIdFactA1, lnIdFactC4
|
|
lnIdFactA1 = -1
|
|
lnIdFactC4 = -1
|
|
goExecutor.oSelecteaza2Value('select nvl(id_fact,0) from anaf_efactura where id = ' + TRANSFORM(laIdLot(1)), @lnIdFactA1)
|
|
goExecutor.oSelecteaza2Value('select nvl(id_fact,0) from anaf_efactura where id = ' + TRANSFORM(laIdLot(6)), @lnIdFactC4)
|
|
DO TVerdict WITH NVL(lnIdFactA1,-1) = 0, 'curatenie: A1 (5208) fara document contabil (renuntat)', TRANSFORM(lnIdFactA1)
|
|
DO TVerdict WITH NVL(lnIdFactC4,-1) = 0, 'curatenie: C4 (5256) fara document contabil (renuntat)', TRANSFORM(lnIdFactC4)
|
|
|
|
DO HarnessLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
|
DO HarnessDone WITH IIF(gnFail = 0, 'done OK', 'done CU ESECURI')
|
|
|
|
IF TYPE('loForm') = 'O'
|
|
loForm.Release()
|
|
ENDIF
|
|
CATCH TO loExMain
|
|
DO HarnessLog WITH 'EXCEPTIE MAIN: ' + loExMain.Message + ' linia ' + TRANSFORM(loExMain.LineNo)
|
|
DO HarnessDone WITH 'done EXCEPTIE'
|
|
ENDTRY
|
|
|
|
QUIT
|
|
|
|
***********************
|
|
PROCEDURE TVerdict
|
|
LPARAMETERS tlOk, tcNume, tcDetalii
|
|
IF tlOk
|
|
gnPass = gnPass + 1
|
|
ELSE
|
|
gnFail = gnFail + 1
|
|
ENDIF
|
|
DO HarnessLog WITH IIF(tlOk, 'PASS ', 'FAIL ') + tcNume + ' | ' + TRANSFORM(tcDetalii)
|
|
ENDPROC
|
|
|
|
***********************
|
|
PROCEDURE TErr
|
|
LPARAMETERS tnError, tcMessage, tcProgram, tnLine
|
|
DO HarnessLog WITH 'EROARE ' + TRANSFORM(tnError) + ' [' + TRANSFORM(tcMessage) + '] in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLine)
|
|
ENDPROC
|
|
|
|
***********************
|
|
* crsFacturi/crsDetaliiFacturi pentru exact facturile din tcListaId - copie fidela din
|
|
* test_c1_echivalenta_lot.prg (BuildCursoare)
|
|
PROCEDURE BuildCursoare
|
|
LPARAMETERS tcListaId
|
|
LOCAL lcSchema, lcSelect, lcOrder, lcGroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza
|
|
|
|
IF USED('crsFacturi')
|
|
USE IN crsFacturi
|
|
ENDIF
|
|
IF USED('crsDetaliiFacturi')
|
|
USE IN crsDetaliiFacturi
|
|
ENDIF
|
|
IF USED('crsDetaliiFacturiTemp')
|
|
USE IN crsDetaliiFacturiTemp
|
|
ENDIF
|
|
|
|
TEXT TO lcSchema NOSHOW
|
|
ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), partener C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal C(30) null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4) null, descriere M null, detalii_plata M null, diferenta N(16,4) null, procesat N(1), SerieActRoa V(10) Null, NrActRoa N(14) Null, IdPartRoa N(10) Null, PartenerRoa V(100) null, codFiscalROA V(20), idValutaROA N(5) null,numeValutaROA V(5) null, cursROA N(16,6) null,Cont c(4) Null,ACont c(4) Null,TVAIncasare N(1),Fdoc V(20) null,Id_Fdoc N(5) Null,Nrord V(100) null,Id_Lucrare I Null,Contract V(100) Null,Id_Ctr I Null,Sectie V(100) null,Id_Sectie I Null,dst_chlt V(100) null, Id_venchelt I NUll, nresp V(100) null, Id_responsabil I NUll , completat N(1), completatdet N(1), creditnote N(1), explicatiaROA V(100) null, eligibil_lot N(1), motiv_lot V(120), eroare_lot N(1), de_completat V(200), part_inactiv N(1)
|
|
ENDTEXT
|
|
TEXT TO lcSelect TEXTMERGE NOSHOW
|
|
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, partener, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, case when jtotctva is null then null when NVL(nume_valuta,'RON') <> 'RON' then null else decode(creditnote,0,1,-1) * NVL(total_cu_tva,0.00) - (NVL(jtotctva,0.00) - NVL(jtva_ti,0.00)) end as diferenta, procesat,
|
|
'' as SerieActRoa, CAST(null as Number(14)) as NrActRoa, CAST(null as Number(20)) as idPartRoa, '' as PartenerRoa, '' as codFiscalROA, CAST(null as Number(10)) as idValutaROA, '' as numeValutaROA, CAST(null as Number(16,6)) as cursROA,
|
|
'' as Cont, '' as acont, 0 as TVAIncasare, '' as Fdoc, CAST(0 as Number(5)) as Id_Fdoc, '' as Nrord, CAST(0 as Number(10)) as id_Lucrare, '' as Contract, CAST(null as Number(10)) as id_ctr,
|
|
'' Sectie, CAST(0 as Number(10)) as id_Sectie, '' as dst_chlt, CAST(0 as Number(10)) as id_Venchelt, '' as nresp, CAST(0 as Number(10)) as id_responsabil, 0 as completat, 0 as completatdet, creditnote, '' as explicatiaROA, 1 as eligibil_lot, '' as motiv_lot, 0 as eroare_lot, '' as de_completat, 0 as part_inactiv
|
|
FROM anaf_vefactura_primit
|
|
ENDTEXT
|
|
lcOrder = [data_act,numar_act,data_raspuns]
|
|
lcGroup = []
|
|
lcFiltru = [id in (] + m.tcListaId + [)]
|
|
lcFiltruOriginal = []
|
|
llModParam = .T.
|
|
llAfiseaza = .F.
|
|
|
|
PRIVATE poFacturi, poFacturiDetalii
|
|
poFacturi = NULL
|
|
poFacturiDetalii = NULL
|
|
|
|
gencursor('poFacturi', 'crsFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal)
|
|
poFacturi.ca_baza1.afisare()
|
|
|
|
TEXT TO lcSchema NOSHOW
|
|
distribuie N(1), id_tip N(10) null, id_articol N(20) null, id_gestiune N(20) null, cont C(4) null, acont C(4) null, sursa_cont V(10) null, id N(20), id_efactura N(20), nr N(5), articol V(250), descriere V(250), detalii M, cantitate N(18,6), um V(20), um_iso V(50), um_roa V(50), pret N(20,6), proctva N(7,2), tiptva V(2), valoarefaratva N(20,6), discountfaratva N(20,6), in_stoc N(1), articol_roa V(250), codmat_roa V(50), codbare V(50), codclient V(100), codfurnizor V(100), codcpv V(50), codnc8 V(50), nume_gestiune V(50), cgest V(20), tva N(20,6), pretv N(20,6), tvav N(20,6), pretvtva N(20,6)
|
|
ENDTEXT
|
|
TEXT TO lcSelect NOSHOW
|
|
select 0 as distribuie, CAST(0 as number(10)) as id_tip, id_articol, id_gestiune, cont, acont, sursa_cont, id, id_efactura, nr, articol, descriere, detalii, cantitate, um, um_iso, um_roa, pret, proctva, tiptva, valoarefaratva, discountfaratva, in_stoc, articol_roa, codmat_roa, codbare, codclient, codfurnizor, codcpv, codnc8, nume_gestiune, cgest, 0 as tva, 0 as pretv, 0 as tvav, 0 as pretvtva from anaf_vefactura_detalii
|
|
ENDTEXT
|
|
lcOrder = [id_efactura,nr]
|
|
lcGroup = []
|
|
lcFiltru = [id_efactura in (] + m.tcListaId + [)]
|
|
lcFiltruOriginal = []
|
|
llModParam = .T.
|
|
llAfiseaza = .F.
|
|
|
|
gencursor('poFacturiDetalii', 'crsDetaliiFacturiTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal)
|
|
poFacturiDetalii.ca_baza1.afisare()
|
|
SELECT * FROM crsDetaliiFacturiTemp INTO CURSOR crsDetaliiFacturi READWRITE
|
|
USE IN (SELECT('crsDetaliiFacturiTemp'))
|
|
ENDPROC
|
|
|
|
***********************
|
|
* cursoare helper cerute la instantierea frm_import_efactura - copie fidela din
|
|
* test_c1_echivalenta_lot.prg (BuildCursoareHelper)
|
|
PROCEDURE BuildCursoareHelper
|
|
LOCAL llSucces
|
|
|
|
IF USED('cTipArticoleP')
|
|
USE IN cTipArticoleP
|
|
ENDIF
|
|
CREATE CURSOR cTipArticoleP (id I, in_stoc N(1), tip V(50), cont V(4), ordine I)
|
|
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0)
|
|
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (12, 'Terti','628', 0, 12)
|
|
SELECT cTipArticoleP
|
|
GO TOP IN cTipArticoleP
|
|
INDEX on ordine TAG ordine
|
|
|
|
IF USED('cTipArticoleE')
|
|
USE IN cTipArticoleE
|
|
ENDIF
|
|
CREATE CURSOR cTipArticoleE (id I, in_stoc N(1), tip V(50), cont V(4), ordine I)
|
|
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0)
|
|
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (34, 'Servicii vandute','704', 0, 6)
|
|
SELECT cTipArticoleE
|
|
GO TOP IN cTipArticoleE
|
|
INDEX on ordine TAG ordine
|
|
|
|
IF USED('cTip')
|
|
USE IN cTip
|
|
ENDIF
|
|
SELECT id, tip, cont, in_stoc, ordine FROM cTipArticoleP ORDER BY ordine INTO CURSOR cTip
|
|
SELECT cTip
|
|
INDEX on id TAG id
|
|
|
|
IF USED('cGestiuni')
|
|
USE IN cGestiuni
|
|
ENDIF
|
|
llSucces = goExecutor.oExecuta([select distinct nume_gestiune,cgest,id_gestiune,nr_pag,cont from vgest_gestiuni_util where inactiv = 0 and id_util = ] + ALLTRIM(STR(m.gnIdUtil)), 'cGestiuni')
|
|
SELECT cGestiuni
|
|
APPEND BLANK
|
|
INDEX on id_gestiune TAG id_gest
|
|
|
|
IF USED('cGestiuni2')
|
|
USE IN cGestiuni2
|
|
ENDIF
|
|
SELECT CAST(ALLTRIM(nume_gestiune) + '-' + ALLTRIM(NVL(cgest, '')) AS V(50)) AS nume_gestiune, id_gestiune FROM cGestiuni ORDER BY nume_gestiune INTO CURSOR cGestiuni2
|
|
|
|
IF USED('cUMISO')
|
|
USE IN cUMISO
|
|
ENDIF
|
|
llSucces = goExecutor.oExecuta("select cod_um_iso, um_iso from syn_vnom_um_iso", 'cUMISO')
|
|
SELECT cUMISO
|
|
INDEX on cod_um_iso TAG cod_um_iso
|
|
|
|
IF USED('cUM')
|
|
USE IN cUM
|
|
ENDIF
|
|
llSucces = goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM')
|
|
SELECT cUM
|
|
INDEX on id TAG id
|
|
ENDPROC
|
|
|
|
***********************
|
|
* deblocarea celor doua dialoguri modale hardcodate din fluxul lotului (situatia B,
|
|
* testare-ui-vfp.md): apasa RENUNTARE de indata ce fiecare formular apare in _SCREEN.Forms -
|
|
* nu se creeaza niciun document contabil, doar se captureaza starea vizuala inainte de renuntare.
|
|
DEFINE CLASS tmrProgresLot AS Timer
|
|
Interval = 200
|
|
Enabled = .F.
|
|
|
|
PROCEDURE Timer
|
|
LOCAL lnI, loFrm
|
|
FOR lnI = 1 TO _SCREEN.FormCount
|
|
loFrm = _SCREEN.Forms(lnI)
|
|
IF UPPER(TRANSFORM(loFrm.Name)) == 'FRM_INTROD_COMPACT2007'
|
|
* mai multe facturi din lot pot trece prin ruta "Import contabilitate" - captura
|
|
* (c1) se face o singura data (prima aparitie), dar RENUNTAREA se face de fiecare
|
|
* data, altfel lotul ramane blocat pe modalele urmatoare
|
|
IF !glCapC1
|
|
glCapC1 = .T.
|
|
DO HarnessLog WITH 'CAPTURA (c1): titlufrumos1=[' + TRANSFORM(loFrm.titlufrumos1.Caption) + '] screenCaption=[' + TRANSFORM(_screen.Caption) + ']'
|
|
This.Enabled = .F.
|
|
DO HarnessStep WITH 0, 'c1_import_contabilitate_titlu'
|
|
This.Enabled = .T.
|
|
ENDIF
|
|
TRY
|
|
loFrm.Renunt1.Command1.Click()
|
|
CATCH TO loErr1
|
|
DO HarnessLog WITH 'EXCEPTIE Renunt1.Click: ' + loErr1.Message
|
|
ENDTRY
|
|
EXIT
|
|
ENDIF
|
|
IF !glCapB AND UPPER(TRANSFORM(loFrm.Name)) == 'FRM_MODIFIC2024'
|
|
glCapB = .T.
|
|
DO HarnessLog WITH 'CAPTURA (b/c2): Lb_titlu_alb_b121=[' + TRANSFORM(loFrm.Lb_titlu_alb_b121.Caption) + '] screenCaption=[' + TRANSFORM(_screen.Caption) + '] Top=' + TRANSFORM(loFrm.Top) + ' WindowState=' + TRANSFORM(loFrm.WindowState)
|
|
This.Enabled = .F.
|
|
DO HarnessStep WITH 2, 'b_c2_import_gestiune_lot_coborat'
|
|
This.Enabled = .T.
|
|
TRY
|
|
loFrm.But_renunt1.Click()
|
|
CATCH TO loErr2
|
|
DO HarnessLog WITH 'EXCEPTIE But_renunt1.Click: ' + loErr2.Message
|
|
ENDTRY
|
|
EXIT
|
|
ENDIF
|
|
ENDFOR
|
|
ENDPROC
|
|
ENDDEFINE
|
|
|
|
***********************
|
|
* checkpoint (a): CompleteazaFactura() ruleaza in do_coada imediat dupa cele doua Refresh-uri de
|
|
* pozitionare a randului curent (pozitia 6/10 in lot, identificata prin cAntetLot) - la acest
|
|
* punct grila a fost deja derulata efectiv (spre deosebire de un BINDEVENT direct pe
|
|
* grdFacturi.Refresh, chemat INAINTE ca metoda nativa sa deruleze grila)
|
|
DEFINE CLASS oGridWatchLot AS Custom
|
|
PROCEDURE OnBeforeCompleteaza
|
|
IF glCapA OR TYPE('goLotForm') <> 'O'
|
|
RETURN
|
|
ENDIF
|
|
IF '[6/10]' $ goLotForm.cAntetLot
|
|
glCapA = .T.
|
|
DO HarnessLog WITH 'CAPTURA (a): cAntetLot=[' + goLotForm.cAntetLot + '] RelativeRow=' + TRANSFORM(goLotForm.grdFacturi.RelativeRow) + ' ActiveRow=' + TRANSFORM(goLotForm.grdFacturi.ActiveRow)
|
|
DO HarnessStep WITH 1, 'a_grid_deruleaza'
|
|
ENDIF
|
|
ENDPROC
|
|
ENDDEFINE
|