#6 editare factura emisa: S4 runda 3 completa (pagina de articole editabila)
frm_modific2024, pgfArticole.PAGE3 - editare in memorie, fara scriere in Oracle (aceea ramane S5). - sub-blocul A: cantitate/pret/pret_cu_tva editabile inline, marcaj lmodificat pe linie, coloana valoare pe linie - sub-blocul B: stergere logica de linii (sters/DynamicForeColor gri) si adaugare de linii prin frm_articol_factura, cu alegerea articolului prin caut_articol() - sub-blocul C: bara de totaluri sub grid (total linii convertit RON la cursul documentului, discount de antet editabil, total net), ascunsa pe transfer/custodie; verdict de corelatie ACT/RUL informativ, cu 3 stari - suma ACT: sold net debit-credit, cont pe tip de document (4111 / 418 / 461, iar pe rate/contract 4111, 411 sau 461) - suma RUL: doar ID_TIP_RULAJ = 0, adica miscarile reale; perechile ID_TIP_RULAJ = 3 sunt virtuale (tin locul procesului verbal de schimbare de pret) si nu intra in suma. Corectie cu liniile nestocate, marcata "ajustat" - adaugarea de linii pe document in valuta: dialogul primeste tip_valuta si cursul documentului de pe tvanz, deci pretul se introduce direct in valuta; ofacturare.vc2 ramane neatins - cei 5 apelanti frm_modific2024 (afisjurcom, anaf_efactura, cele doua .sc2 de import) pregatesc cursorul de articole inainte de Createobject, gardat pe SET PROCEDURE - registrul jurnal din ROACONT/ROAGEST ramane neschimbat Teste headless pe MARIUSM_AUTO, suite care isi descopera singure documentele: test_page3_articole 14/2 (cele 2 = artefact de grid nematerializat headless, acoperit pe ecran), test_incarca_vanzare_din_nota 5/0, test_adauga_linie_articol 20/0, test_adauga_linie_valuta 16/0, test_ui_sterge_linie 8/0, test_verdict_act_rul 26/0. docs/todos.txt: punctele 13 si 20, scrise de Marius. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
This commit is contained in:
@@ -1,17 +1,19 @@
|
||||
* test_page3_articole.prg
|
||||
* Verifica S4 runda 1+2 (PAGE3, view VVANZARI_ARTICOLE, pozitionare in tact, garda ROACONT/ROAGEST) pe date reale:
|
||||
* - IncarcaVanzareNota/IncarcaArticoleFactura (ofacturare_editare.prg) direct, pe cod=1140888,
|
||||
* cod=1140885 (au rand in VANZARI) si cod=1125486 (nota fara rand in VANZARI)
|
||||
* - cazul de coliziune pe cod: cod=1139934 are 4 randuri VANZARI cu acelasi cod - verifica ca
|
||||
* filtrul compus (cod+nract+serie_act+data_act) gaseste exact randul corect si NU gaseste
|
||||
* nimic pentru un nract fara corespondent (evitarea unei potriviri gresite)
|
||||
* - IncarcaVanzareNota/IncarcaArticoleFactura (ofacturare_editare.prg) direct, pe o factura si pe
|
||||
* un document de alt tip (amandoua cu rand in VANZARI) si pe o nota fara rand in VANZARI
|
||||
* - cazul de coliziune pe cod: un cod cu mai multe randuri VANZARI - verifica ca filtrul compus
|
||||
* (cod+nract+serie_act+data_act) gaseste exact randul corect si NU gaseste nimic pentru un
|
||||
* nract fara corespondent (evitarea unei potriviri gresite)
|
||||
* - frm_modific2024 instantiat ca in do_editare_factura (Createobject+Show): PageCount ajunge 3
|
||||
* pe documente cu rand in VANZARI, ramane 2 pe o nota fara VANZARI
|
||||
* - regresie runda 2: cod=1137874/an=2009/luna=8 si cod=1139934/an=2021/luna=12, unde primul
|
||||
* rand din tact e o INCASARE - Go Top orb (runda 1) rata id_vanzare, IncarcaVanzareDinNota il
|
||||
* gaseste prin toate tripletele distincte (nract,serie_act,dataact) din tact
|
||||
* - regresie runda 2: note al caror prim rand din tact nu duce la vanzare (tipic o INCASARE) -
|
||||
* Go Top orb (runda 1) rata id_vanzare, IncarcaVanzareDinNota il gaseste prin toate tripletele
|
||||
* distincte (nract,serie_act,dataact) din tact
|
||||
* - garda ROACONT/ROAGEST: cu ofacturare_editare.prg eliberat din SET PROCEDURE, Show() degradeaza
|
||||
* curat la PageCount=2, fara eroare
|
||||
* Documentele nu sunt ancorate pe cod: VANZARI.COD se realoca la fiecare salvare a notei, deci se
|
||||
* descopera la rulare dupa proprietatea ceruta de asertie (descopera_caz_test.prg).
|
||||
* Nu atinge Oracle in scriere - doar SELECT-uri prin goExecutor. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
@@ -32,6 +34,7 @@ IF gnHandle <= 0
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\descopera_caz_test.prg ADDITIVE
|
||||
|
||||
*!* OBLIGATORIU: test_init_env_auto:139 face "Set Classlib To omodificari Additive", iar SET PATH
|
||||
*!* e pe D:\ROA\ROACONT\..., deci se incarca copia ROACONT a clasei (alt working copy, fara
|
||||
@@ -40,34 +43,128 @@ SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDIT
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
*!* 0) cazurile de test, descoperite pe proprietate (nu ancorate pe cod - codul se realoca la salvare)
|
||||
LOCAL llCazA, llCazB, llCazC, llCazD, llCazE, llCazF
|
||||
llCazA = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_a')
|
||||
llCazB = DescoperaCazTest('NEFACTURA_ARTICOLE', 'crscaz_b')
|
||||
llCazC = DescoperaCazTest('NOTA_FARA_VANZARI', 'crscaz_c')
|
||||
llCazD = DescoperaCazTest('PRIM_RAND_ORB', 'crscaz_d')
|
||||
llCazE = DescoperaCazTest('COLIZIUNE_COD', 'crscaz_e')
|
||||
llCazF = DescoperaCazTest('FARA_RULAJE', 'crscaz_f')
|
||||
|
||||
STRTOFILE('--- cazuri de test descoperite ---' + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('FACTURA_ARTICOLE', 'crscaz_a', llCazA) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('NEFACTURA_ARTICOLE', 'crscaz_b', llCazB) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('NOTA_FARA_VANZARI', 'crscaz_c', llCazC) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('PRIM_RAND_ORB', 'crscaz_d', llCazD) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('COLIZIUNE_COD', 'crscaz_e', llCazE) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('FARA_RULAJE', 'crscaz_f', llCazF) + CHR(13) + CHR(10), lcLog, 1)
|
||||
|
||||
*!* 1) IncarcaVanzareNota / IncarcaArticoleFactura direct, pe documente reale
|
||||
*!* (gnAn)/(gnLuna) in paranteze = pasare PRIN VALOARE: DO ... WITH paseaza prin REFERINTA, iar o
|
||||
*!* valorile in paranteze = pasare PRIN VALOARE: DO ... WITH paseaza prin REFERINTA, iar o
|
||||
*!* variabila pasata prin referinta devine invizibila sub numele ei propriu in procedura apelata -
|
||||
*!* de acolo venea dialogul nativ "View Parameter: Enter the value for gnAn" (?gnAn din SQL passthrough)
|
||||
DO verifica_vanzare_nota WITH 1140888, (gnAn), (gnLuna), 'A (factura, cu articole)', lcLog, .T., 1050, 1, 4
|
||||
DO verifica_vanzare_nota WITH 1140885, (gnAn), (gnLuna), 'B (aviz/tip -12, cu rand in VANZARI)', lcLog, .T., 1047, -12, -1
|
||||
DO verifica_vanzare_nota WITH 1125486, 2008, 2, 'C (nota fara rand in VANZARI)', lcLog, .F., 0, 0, -1
|
||||
IF llCazA
|
||||
DO verifica_vanzare_nota WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), 'A (factura, cu articole)', lcLog, .T., (crscaz_a.id_vanzare), (crscaz_a.tip), (crscaz_a.nlin)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'A (factura, cu articole)', lcLog
|
||||
ENDIF
|
||||
IF llCazB
|
||||
DO verifica_vanzare_nota WITH (crscaz_b.cod), (crscaz_b.an), (crscaz_b.luna), 'B (tip <> 1, cu rand in VANZARI)', lcLog, .T., (crscaz_b.id_vanzare), (crscaz_b.tip), (crscaz_b.nlin)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'B (tip <> 1, cu rand in VANZARI)', lcLog
|
||||
ENDIF
|
||||
IF llCazC
|
||||
DO verifica_vanzare_nota WITH (crscaz_c.cod), (crscaz_c.an), (crscaz_c.luna), 'C (nota fara rand in VANZARI)', lcLog, .F., 0, 0, -1
|
||||
ELSE
|
||||
DO caz_negasit WITH 'C (nota fara rand in VANZARI)', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 2) cazul de coliziune pe cod=1139934 (4 randuri VANZARI cu acelasi cod) - filtrul compus
|
||||
DO verifica_coliziune_cod WITH lcLog
|
||||
*!* 2) cazul de coliziune pe cod (mai multe randuri VANZARI cu acelasi cod) - filtrul compus
|
||||
IF llCazE
|
||||
DO verifica_coliziune_cod WITH lcLog, (crscaz_e.cod), (crscaz_e.nract), (crscaz_e.serie_act), (crscaz_e.dataact), (crscaz_e.id_vanzare), ;
|
||||
(crscaz_e.nract_fara), (crscaz_e.serie_fara), (crscaz_e.data_fara)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'coliziune pe cod', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 3) frm_modific2024 - PageCount pe factura reala (cod=1140888) si pe nota fara VANZARI (cod=1125486)
|
||||
DO verifica_pagecount_form WITH 1140888, (gnAn), (gnLuna), 'A (factura reala)', lcLog, 3, .T., 1050
|
||||
DO verifica_pagecount_form WITH 1125486, 2008, 2, 'C (nota fara VANZARI)', lcLog, 2, .F., 0
|
||||
*!* 3) frm_modific2024 - PageCount pe factura reala si pe nota fara VANZARI
|
||||
IF llCazA
|
||||
DO verifica_pagecount_form WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), 'A (factura reala)', lcLog, 3, .T., (crscaz_a.id_vanzare)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'frm_modific2024 A (factura reala)', lcLog
|
||||
ENDIF
|
||||
IF llCazC
|
||||
DO verifica_pagecount_form WITH (crscaz_c.cod), (crscaz_c.an), (crscaz_c.luna), 'C (nota fara VANZARI)', lcLog, 2, .F., 0
|
||||
ELSE
|
||||
DO caz_negasit WITH 'frm_modific2024 C (nota fara VANZARI)', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 4) regresie runda 2 - blocantul "Go Top orb pe tact": prim rand din tact e o INCASARE, cu
|
||||
*!* nract/serie_act/dataact diferite de randul facturii - Go Top orb (runda 1) rata id_vanzare
|
||||
DO verifica_pagecount_form WITH 1137874, 2009, 8, 'D (Go Top orb - blocant runda 2)', lcLog, 3, .T., 506
|
||||
DO verifica_pagecount_form WITH 1139934, 2021, 12, 'E (coliziune cod + Go Top orb)', lcLog, 3, .T., 882
|
||||
*!* 4) regresie runda 2 - blocantul "Go Top orb pe tact": prim rand din tact nu duce la vanzare
|
||||
*!* (tipic o INCASARE, cu nract/serie_act/dataact diferite) - Go Top orb (runda 1) rata id_vanzare
|
||||
IF llCazD
|
||||
DO verifica_pagecount_form WITH (crscaz_d.cod), (crscaz_d.an), (crscaz_d.luna), 'D (Go Top orb - blocant runda 2)', lcLog, 3, .T., (crscaz_d.id_vanzare)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'frm_modific2024 D (Go Top orb)', lcLog
|
||||
ENDIF
|
||||
IF llCazE
|
||||
DO verifica_pagecount_form WITH (crscaz_e.cod), (crscaz_e.an), (crscaz_e.luna), 'E (coliziune cod + Go Top orb)', lcLog, 3, .T., (crscaz_e.id_vanzare)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'frm_modific2024 E (coliziune cod + Go Top orb)', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 4a) punctul A: pageframe vizibil cand exista doar articole (zero rulaje)
|
||||
IF llCazF
|
||||
DO verifica_pageframe_vizibil WITH (crscaz_f.cod), (crscaz_f.an), (crscaz_f.luna), lcLog
|
||||
ELSE
|
||||
DO caz_negasit WITH 'pgfArticole.Visible (zero rulaje)', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 4b) S4 runda 3A: coloane editabile (cantitate/pret/pret_cu_tva), marcaj lmodificat, valoare
|
||||
IF llCazA
|
||||
DO verifica_editare_grid WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), lcLog
|
||||
ELSE
|
||||
DO caz_negasit WITH 'S4 runda 3A, editare grid', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 4c) grid blank raportat de Marius: RecordSource-ul grdArticoleFactura dupa Show() - IncarcaArticoleFactura
|
||||
*!* inchide si recreeaza cursorul tvd (workarea noua), care rupe legatura grid-ului cu cursorul placeholder de la Load.
|
||||
*!* Inaintea gardei (5): garda elibereaza definitiv ofacturare_editare.prg, unde e definita IncarcaCursoareModificareNota
|
||||
IF llCazF
|
||||
DO verifica_recordsource_grid WITH (crscaz_f.cod), (crscaz_f.an), (crscaz_f.luna), lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 4d) PregatesteArticoleFacturaEditare (helper cei 5 apelanti): apelat ca la afisjurcom.do_modifica -
|
||||
*!* inainte de Createobject, pe tact deja incarcat - workarea tvd trebuie sa ramana identica intre
|
||||
*!* Load si Show (fallback-ul din Show nu se mai declanseaza, la fel ca la do_editare_factura)
|
||||
IF llCazA
|
||||
DO verifica_precarcare_articole WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), lcLog
|
||||
ELSE
|
||||
DO caz_negasit WITH 'PregatesteArticoleFacturaEditare (cei 5 apelanti)', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 5) garda ROACONT/ROAGEST: cu ofacturare_editare.prg eliberat, Show() nu mai gaseste garda si
|
||||
*!* degradeaza curat la PageCount=2 - ultimul test, elibereaza procedura definitiv pentru restul rularii
|
||||
DO verifica_garda_procedura_lipsa WITH 1140888, (gnAn), (gnLuna), lcLog
|
||||
IF llCazA
|
||||
DO verifica_garda_procedura_lipsa WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), lcLog
|
||||
ELSE
|
||||
DO caz_negasit WITH 'garda ofacturare_editare.prg lipsa', lcLog
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*!* cazul cerut de asertie nu exista in datele schemei - se raporteaza FAIL, nu se sare peste
|
||||
PROCEDURE caz_negasit
|
||||
LPARAMETERS tcEticheta, tcLog
|
||||
|
||||
STRTOFILE('--- ' + tcEticheta + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' niciun document din schema nu satisface conditia cazului' + CHR(13) + CHR(10) + ;
|
||||
' FAIL' + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE verifica_vanzare_nota
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcEticheta, tcLog, tlAsteptatGasit, tnIdVanzareAsteptat, tnTipAsteptat, tnLiniiAsteptate
|
||||
|
||||
@@ -133,33 +230,29 @@ PROCEDURE verifica_vanzare_nota
|
||||
ENDPROC
|
||||
|
||||
|
||||
* cod=1139934 are 4 randuri active in VANZARI cu acelasi cod (verificat pe MARIUSM_AUTO):
|
||||
* id_vanzare=882 numar_act=375/SSS, 883=24/PF, 884=25/PF, 885=26/PF - filtrul pe cod singur
|
||||
* ar fi ambiguu; filtrul compus (cod+nract+serie_act+data_act) trebuie sa gaseasca exact
|
||||
* randul cerut si sa NU gaseasca nimic pentru un nract fara corespondent in VANZARI (ACT are
|
||||
* randuri cu nract=13 pe acelasi cod, fara VANZARI corespunzator)
|
||||
* pe un cod cu 2+ randuri active in VANZARI, filtrul pe cod singur ar fi ambiguu; filtrul compus
|
||||
* (cod+nract+serie_act+data_act) trebuie sa gaseasca exact randul cerut si sa NU gaseasca nimic
|
||||
* pentru un nract prezent in nota, dar fara corespondent in VANZARI
|
||||
PROCEDURE verifica_coliziune_cod
|
||||
LPARAMETERS tcLog
|
||||
LPARAMETERS tcLog, tnCod, tnNract, tcSerieAct, tdDataAct, tnIdVanzareAsteptat, tnNractFara, tcSerieFara, tdDataFara
|
||||
|
||||
LOCAL ldDataAct, llOk1, llOk2
|
||||
LOCAL llOk1, llOk2
|
||||
|
||||
ldDataAct = DATE(2021,12,31)
|
||||
|
||||
IncarcaVanzareNota(1139934, 375, 'SSS', ldDataAct)
|
||||
llOk1 = (Reccount('tvanz') = 1 AND tvanz.id_vanzare == 882)
|
||||
IncarcaVanzareNota(tnCod, tnNract, tcSerieAct, tdDataAct)
|
||||
llOk1 = (Reccount('tvanz') = 1 AND tvanz.id_vanzare == tnIdVanzareAsteptat)
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
|
||||
IncarcaVanzareNota(1139934, 13, '', ldDataAct)
|
||||
IncarcaVanzareNota(tnCod, tnNractFara, tcSerieFara, tdDataFara)
|
||||
llOk2 = (Reccount('tvanz') = 0)
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- coliziune cod=1139934 (4 randuri VANZARI cu acelasi cod) ---' + CHR(13) + CHR(10) + ;
|
||||
' nract=375/SSS => gaseste id_vanzare=882: ' + IIF(llOk1, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ;
|
||||
' nract=13 (fara corespondent) => 0 randuri: ' + IIF(llOk2, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1)
|
||||
STRTOFILE('--- coliziune cod=' + TRANSFORM(tnCod) + ' (mai multe randuri VANZARI cu acelasi cod) ---' + CHR(13) + CHR(10) + ;
|
||||
' nract=' + TRANSFORM(tnNract) + '/' + ALLTRIM(NVL(tcSerieAct,'')) + ' => gaseste id_vanzare=' + TRANSFORM(tnIdVanzareAsteptat) + ': ' + IIF(llOk1, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ;
|
||||
' nract=' + TRANSFORM(tnNractFara) + ' (fara corespondent) => 0 randuri: ' + IIF(llOk2, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
@@ -232,6 +325,164 @@ PROCEDURE verifica_pagecount_form
|
||||
ENDPROC
|
||||
|
||||
|
||||
* S4 runda 3A: grdArticoleFactura editabil pe cantitate/pret/pret_cu_tva, marcaj lmodificat pe
|
||||
* linia atinsa, valoare recalculata (cantitate * (pret - discount_unitar), inmultit cu proc_tvav
|
||||
* cand pret_cu_tva = 0 - pret_cu_tva e flag, nu pret). Nu scrie in Oracle - doar in cursorul tvd.
|
||||
PROCEDURE verifica_editare_grid
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcLog
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, loGrid, llStructuraOk, llReadOnlyOk, llInitOk, llDupaEditareOk
|
||||
LOCAL lnCantitateVeche, lnValoareAsteptata, lnCantitateNoua, lnPretNet
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
llStructuraOk = .F.
|
||||
llReadOnlyOk = .F.
|
||||
llInitOk = .F.
|
||||
llDupaEditareOk = .F.
|
||||
|
||||
IF llOk AND Used('tact') AND Reccount('tact') > 0
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
loGrid = loForm.pgfArticole.Page3.grdArticoleFactura
|
||||
llStructuraOk = (loGrid.ColumnCount == 14) AND ;
|
||||
(Type('tvd.lmodificat') == 'L') AND (Type('tvd.valoare') == 'N')
|
||||
llReadOnlyOk = (loGrid.Column5.ReadOnly == .F.) AND (loGrid.Column6.ReadOnly == .F.) AND ;
|
||||
(loGrid.Column7.ReadOnly == .F.) AND (Pemstatus(loGrid.Column7, '_checkbox1', 5)) AND ;
|
||||
(loGrid.Column1.ReadOnly == .T.) AND (loGrid.Column14.ReadOnly == .T.)
|
||||
|
||||
IF Reccount('tvd') > 0
|
||||
Go Top In tvd
|
||||
lnPretNet = Nvl(tvd.pret, 0) - Nvl(tvd.discount_unitar, 0)
|
||||
llInitOk = (tvd.lmodificat == .F.) AND ;
|
||||
(Round(tvd.valoare, 2) == Round(tvd.cantitate * Iif(tvd.pret_cu_tva = 0, lnPretNet * tvd.proc_tvav, lnPretNet), 2))
|
||||
|
||||
lnCantitateVeche = tvd.cantitate
|
||||
lnCantitateNoua = lnCantitateVeche + 1
|
||||
Replace cantitate With lnCantitateNoua In tvd
|
||||
loForm.calculeaza_valori_articol()
|
||||
lnValoareAsteptata = Round(lnCantitateNoua * Iif(tvd.pret_cu_tva = 0, lnPretNet * tvd.proc_tvav, lnPretNet), 2)
|
||||
llDupaEditareOk = (tvd.lmodificat == .T.) AND (Round(tvd.valoare, 2) == lnValoareAsteptata)
|
||||
ENDIF
|
||||
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- S4 runda 3A, editare grid, cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' structura grid/cursor (ColumnCount=14, lmodificat L, valoare N) = ' + IIF(llStructuraOk, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ;
|
||||
' ReadOnly (cantitate/pret/pret_cu_tva editabile, checkbox pe pret_cu_tva, restul readonly) = ' + IIF(llReadOnlyOk, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ;
|
||||
' stare initiala (lmodificat=.F., valoare calculata corect) = ' + IIF(llInitOk, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ;
|
||||
' dupa editare cantitate (lmodificat=.T., valoare recalculata) = ' + IIF(llDupaEditareOk, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
* punctul A: pe un document fara rulaje (trul si trul_obinv goale), afiseaza_rulaje() colapseaza
|
||||
* this.pgfArticole.Visible - inainte de fix, asta ascundea si PAGE3 desi tvd are randuri; dupa fix,
|
||||
* conditia din Show() tine cont si de Reccount('tvd')
|
||||
PROCEDURE verifica_pageframe_vizibil
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcLog
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, llVizibilAsteptat, llVizibil, lnReccountTvd, lnReccountTrul, lnReccountTrulObinv
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
llVizibil = .F.
|
||||
lnReccountTvd = -1
|
||||
lnReccountTrul = -1
|
||||
lnReccountTrulObinv = -1
|
||||
|
||||
IF llOk AND Used('tact') AND Reccount('tact') > 0
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
llVizibil = loForm.pgfArticole.Visible
|
||||
lnReccountTvd = Reccount('tvd')
|
||||
lnReccountTrul = Reccount('trul')
|
||||
lnReccountTrulObinv = Reccount('trul_obinv')
|
||||
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
|
||||
*!* oglinda conditiei de colaps din Show(): vizibil daca oricare din trul/trul_obinv/tvd are randuri
|
||||
llVizibilAsteptat = !(lnReccountTrul = 0 AND lnReccountTrulObinv = 0 AND lnReccountTvd <= 0)
|
||||
|
||||
STRTOFILE('--- pgfArticole.Visible, cod=' + TRANSFORM(tnCod) + ' (zero rulaje, doar articole) ---' + CHR(13) + CHR(10) + ;
|
||||
' Reccount(trul)=' + TRANSFORM(lnReccountTrul) + ', Reccount(trul_obinv)=' + TRANSFORM(lnReccountTrulObinv) + ;
|
||||
', Reccount(tvd)=' + TRANSFORM(lnReccountTvd) + CHR(13) + CHR(10) + ;
|
||||
' pgfArticole.Visible = ' + TRANSFORM(llVizibil) + ' (asteptat ' + TRANSFORM(llVizibilAsteptat) + ')' + CHR(13) + CHR(10) + ;
|
||||
' ' + IIF(llVizibil == llVizibilAsteptat, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
* verifica garda ROACONT/ROAGEST: cu ofacturare_editare.prg eliberat din SET PROCEDURE, Show()
|
||||
* trebuie sa degradeze curat la PageCount=2, fara eroare - ultimul test din suita, procedura
|
||||
* ramane eliberata pentru restul rularii (QUIT urmeaza imediat)
|
||||
@@ -298,6 +549,157 @@ PROCEDURE verifica_garda_procedura_lipsa
|
||||
ENDPROC
|
||||
|
||||
|
||||
*!* verifica ipoteza grid blank: grdArticoleFactura se leaga la construire pe workarea cursorului
|
||||
*!* placeholder tvd creat de Load; IncarcaArticoleFactura (apelat din Show) face Use In tvd + Select
|
||||
*!* Into Cursor tvd, care schimba workarea si rupe legatura, desi tvd ramane deschis cu date
|
||||
PROCEDURE verifica_recordsource_grid
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcLog
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, lnWorkareaLoad, lnWorkareaShow, lcRecordSourceShow, lnReccountTvd, llUsedTvd
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
lnWorkareaLoad = 0
|
||||
lnWorkareaShow = 0
|
||||
lcRecordSourceShow = '?'
|
||||
lnReccountTvd = -1
|
||||
llUsedTvd = .F.
|
||||
|
||||
IF llOk AND Used('tact') AND Reccount('tact') > 0
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
|
||||
*!* dupa Createobject (Load), inainte de Show: tvd e cursorul placeholder gol, pe care s-a legat grid-ul
|
||||
lnWorkareaLoad = Select('tvd')
|
||||
|
||||
loForm.Show()
|
||||
|
||||
lnWorkareaShow = Select('tvd')
|
||||
lcRecordSourceShow = loForm.pgfArticole.Page3.grdArticoleFactura.RecordSource
|
||||
lnReccountTvd = Reccount('tvd')
|
||||
llUsedTvd = Used('tvd')
|
||||
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- verificare RecordSource grid, cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' workarea tvd dupa Load (inainte de Show) = ' + TRANSFORM(lnWorkareaLoad) + CHR(13) + CHR(10) + ;
|
||||
' workarea tvd dupa Show = ' + TRANSFORM(lnWorkareaShow) + CHR(13) + CHR(10) + ;
|
||||
' RecordSource grid dupa Show = [' + lcRecordSourceShow + ']' + CHR(13) + CHR(10) + ;
|
||||
' Used(tvd) dupa Show = ' + TRANSFORM(llUsedTvd) + ', Reccount(tvd) = ' + TRANSFORM(lnReccountTvd) + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
*!* apelul nou al celor 5 apelanti (afisjurcom.do_modifica, importmodifica, modificanote): tact deja
|
||||
*!* incarcat, PregatesteArticoleFacturaEditare('tact') inainte de Createobject - trebuie sa lege grid-ul
|
||||
*!* pe tvd deja plin, la fel ca do_editare_factura, fara ca fallback-ul din Show sa mai reinchida cursorul
|
||||
PROCEDURE verifica_precarcare_articole
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcLog
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, lnWorkareaLoad, lnWorkareaShow, lnReccountTvd, llUsedTvd
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
lnWorkareaLoad = 0
|
||||
lnWorkareaShow = 0
|
||||
lnReccountTvd = -1
|
||||
llUsedTvd = .F.
|
||||
|
||||
IF llOk AND Used('tact') AND Reccount('tact') > 0
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
PregatesteArticoleFacturaEditare('tact')
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
|
||||
*!* dupa Createobject (Load): daca precarcarea a gasit articole, tvd e deja plin cu ele
|
||||
lnWorkareaLoad = Select('tvd')
|
||||
|
||||
loForm.Show()
|
||||
|
||||
lnWorkareaShow = Select('tvd')
|
||||
lnReccountTvd = Reccount('tvd')
|
||||
llUsedTvd = Used('tvd')
|
||||
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- PregatesteArticoleFacturaEditare, cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' workarea tvd dupa Load (cu precarcare) = ' + TRANSFORM(lnWorkareaLoad) + CHR(13) + CHR(10) + ;
|
||||
' workarea tvd dupa Show = ' + TRANSFORM(lnWorkareaShow) + ' (asteptat identica cu cea de dupa Load)' + CHR(13) + CHR(10) + ;
|
||||
' Used(tvd)=' + TRANSFORM(llUsedTvd) + ', Reccount(tvd)=' + TRANSFORM(lnReccountTvd) + CHR(13) + CHR(10) + ;
|
||||
' ' + IIF(lnWorkareaLoad == lnWorkareaShow AND lnWorkareaLoad > 0 AND lnReccountTvd > 0, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
IF Used('crsArticoleFactura')
|
||||
Use In crsArticoleFactura
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
|
||||
Reference in New Issue
Block a user