#13: formular de facturare unificat - etapa curenta
Squash al branch-ului de lucru plan13-s2. Clase: ofacturare (nucleul formularului unificat), ofacturare_comun, ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de cautare), omodificari. Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie si cota standard de TVA cand articolul nu are cota pe politica. Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte proiecte sunt rezolvate pastrand ambele parti. Loguri de rulare a testelor scoase din versionare; testele raman. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -132,6 +132,7 @@ bash.exe.stackdump
|
||||
# (numele reale poarta sufixul scenariului: screenshots_total/, uisync_212/, ...)
|
||||
utile/Teste/**/screenshots*/
|
||||
utile/Teste/**/uisync*/
|
||||
utile/Teste/**/*_log.txt
|
||||
utile/Teste/**/*_log*.txt
|
||||
utile/Teste/**/watchdog_out/
|
||||
utile/Teste/**/*_dialog*.png
|
||||
utile/Teste/**/out/
|
||||
|
||||
@@ -717,7 +717,9 @@ DEFINE CLASS ct_clb_cautare AS _container OF "_baza.vcx"
|
||||
*<DefinedPropArrayMethod>
|
||||
*m: do_activeaza
|
||||
*m: do_apeleaza
|
||||
*m: do_blocheaza_real
|
||||
*m: do_dezactiveaza
|
||||
*m: do_reactiveaza_real
|
||||
*m: do_schimba_explicatia && Schimba caption-ul de la label1.
|
||||
*p: cconditie && Conditia pentru care se apeleaza procedura din cprocedura.
|
||||
*p: clista_parametri && Lista parametri pentru procedura din cparametri ( separati prin virgula ).
|
||||
@@ -797,6 +799,12 @@ DEFINE CLASS ct_clb_cautare AS _container OF "_baza.vcx"
|
||||
This.clb_tx_cautare.text_simplu1.Refresh()
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE do_blocheaza_real
|
||||
This.do_dezactiveaza()
|
||||
This.clb_tx_cautare.text_simplu1.ReadOnly = .T.
|
||||
This.clb_tx_cautare.text_simplu1.TabStop = .F.
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE do_dezactiveaza
|
||||
This.lactiv = .F.
|
||||
This.img_cautare.Visible = .F.
|
||||
@@ -805,6 +813,12 @@ DEFINE CLASS ct_clb_cautare AS _container OF "_baza.vcx"
|
||||
This.clb_tx_cautare.text_simplu1.Refresh()
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE do_reactiveaza_real
|
||||
This.do_activeaza()
|
||||
This.clb_tx_cautare.text_simplu1.ReadOnly = .F.
|
||||
This.clb_tx_cautare.text_simplu1.TabStop = .T.
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE do_schimba_explicatia && Schimba caption-ul de la label1.
|
||||
Lparameters tcExplicatie
|
||||
This.clb_tx_cautare.lb_SIMPLU1.Caption = Alltrim(tcExplicatie)
|
||||
|
||||
@@ -2725,6 +2725,7 @@ DEFINE CLASS frm_alte_date AS _frmbase OF "_frm_base.vcx"
|
||||
Thisform.clb_incasat.Refresh()
|
||||
|
||||
thisform.chkPOS.Value = 0
|
||||
thisform.chkPOS.Valid()
|
||||
thisform.chkDetaliat.Value = 0
|
||||
thisform.chkPOS.Visible = .F.
|
||||
thisform.chkDetaliat.Visible = .F.
|
||||
@@ -2782,6 +2783,7 @@ DEFINE CLASS frm_alte_date AS _frmbase OF "_frm_base.vcx"
|
||||
Thisform.clb_incasat.Refresh()
|
||||
Thisform.clb_serie_chit.genereazaNumar()
|
||||
thisform.chkPOS.Value = 0
|
||||
thisform.chkPOS.Valid()
|
||||
thisform.chkPOS.Visible = .F.
|
||||
thisform.chkDetaliat.Value = 0
|
||||
thisform.chkDetaliat.Visible = .F.
|
||||
@@ -2811,6 +2813,7 @@ DEFINE CLASS frm_alte_date AS _frmbase OF "_frm_base.vcx"
|
||||
Thisform.clb_incasat.Refresh()
|
||||
|
||||
thisform.chkPOS.Value = 0
|
||||
thisform.chkPOS.Valid()
|
||||
thisform.chkPOS.Visible = .T.
|
||||
thisform.chkDetaliat.Value = 0
|
||||
thisform.chkDetaliat.Visible = .T.
|
||||
@@ -2838,7 +2841,6 @@ DEFINE CLASS frm_alte_date AS _frmbase OF "_frm_base.vcx"
|
||||
Thisform.lb_simplu1.Visible=.T.
|
||||
Thisform.cmdModificaBon.Visible=.T. && modifica nr bon fiscal
|
||||
Thisform.clb_nrchit.text_simplu1.ReadOnly = .T.
|
||||
thisform.cb_casa._lbbase1.Caption = 'Banca POS'
|
||||
Thisform.nnrbon = 0
|
||||
poDate.nr_incasare = 0
|
||||
Thisform.do_aloca_nr_pos([CLICK])
|
||||
@@ -2848,6 +2850,7 @@ DEFINE CLASS frm_alte_date AS _frmbase OF "_frm_base.vcx"
|
||||
Thisform.clb_incasat.Refresh()
|
||||
|
||||
thisform.chkPOS.Value = 1
|
||||
thisform.chkPOS.Valid()
|
||||
thisform.chkPOS.Visible = .F.
|
||||
thisform.chkDetaliat.Value = 0
|
||||
thisform.chkDetaliat.Visible = .F.
|
||||
@@ -3024,6 +3027,7 @@ DEFINE CLASS frm_alte_date AS _frmbase OF "_frm_base.vcx"
|
||||
If Type('poGeneratorNumere') = 'O'
|
||||
poGeneratorNumere.dezaloca_numar(16)
|
||||
poGeneratorNumere.dezaloca_numar(3)
|
||||
poGeneratorNumere.dezaloca_numar(26)
|
||||
|
||||
Thisform.nnrbon = 0
|
||||
poDate.nr_incasare = 0
|
||||
@@ -3108,7 +3112,7 @@ DEFINE CLASS frm_alte_date AS _frmbase OF "_frm_base.vcx"
|
||||
*!* modificare ROAFACTURARE v 2.0.67
|
||||
If poDate.eProforma = 0
|
||||
*!* modificare ROAFACTURARE v 2.0.67 ^
|
||||
If Empty(Nvl(poDate.id_delegat,0)) And Empty(Nvl(poDate.id_masina,0))
|
||||
If !poDate.lEditare And Empty(Nvl(poDate.id_delegat,0)) And Empty(Nvl(poDate.id_masina,0)) && la editare, nu suprascrie delegatul/masina documentului cu ultimul folosit
|
||||
poDate.id_delegat = 0
|
||||
poDate.id_masina = 0
|
||||
|
||||
@@ -3146,7 +3150,7 @@ DEFINE CLASS frm_alte_date AS _frmbase OF "_frm_base.vcx"
|
||||
Thisform.AutoCenter = .T.
|
||||
Thisform.Refresh()
|
||||
|
||||
If poDate.incasat <> 0
|
||||
If !poDate.lEditare And poDate.incasat <> 0
|
||||
Thisform.opt_incasat.Value = 2
|
||||
Endif
|
||||
|
||||
@@ -3162,7 +3166,7 @@ DEFINE CLASS frm_alte_date AS _frmbase OF "_frm_base.vcx"
|
||||
Else
|
||||
Thisform.cb_casa._cBBASE1.RowSource = [v_nom_casa.nume,id_part]
|
||||
Thisform.cb_casa._cBBASE1.RowSourceType = 6
|
||||
If !Empty(gnid_part_casa)
|
||||
If !poDate.lEditare And !Empty(gnid_part_casa)
|
||||
Select v_nom_casa
|
||||
Locate For id_part = gnid_part_casa
|
||||
If Found()
|
||||
@@ -3174,13 +3178,13 @@ DEFINE CLASS frm_alte_date AS _frmbase OF "_frm_base.vcx"
|
||||
Endif
|
||||
*!* modificare 01.08 ^
|
||||
*!* modificare ROAFACTURARE v 2.0.46
|
||||
If This.opt_incasat.Value = 2
|
||||
If !poDate.lEditare And This.opt_incasat.Value = 2
|
||||
poDate.incasat = poDate.totalctva
|
||||
Endif
|
||||
*!* modificare ROAFACTURARE v 2.0.46 ^
|
||||
*!* modificare ROAFACTURARE v 2.0.67
|
||||
*!* modificare ROACONTRACTE v 2.0.38
|
||||
IF poDate.tip = 2 AND poDate.afisare_scadenta = 0 AND AT([Scadenta la ],poDate.text_aditional) = 0
|
||||
IF !poDate.lEditare AND poDate.tip = 2 AND poDate.afisare_scadenta = 0 AND AT([Scadenta la ],poDate.text_aditional) = 0
|
||||
poDate.text_aditional = [Scadenta la ] + ALLTRIM(STR(poDate.datascad - poDate.dataact)) + [ zile.] + poDate.text_aditional
|
||||
ENDIF
|
||||
*!* modificare ROACONTRACTE v 2.0.38 ^
|
||||
|
||||
@@ -1578,12 +1578,12 @@ DEFINE CLASS ct_comenzi AS _ctfrmbase OF "_ct_base.vcx"
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE do_factura
|
||||
LOCAL lnRec
|
||||
LOCAL lnRec, loComanda
|
||||
SELECT crsComenzi
|
||||
SCATTER NAME goComanda MEMO
|
||||
SCATTER NAME loComanda MEMO
|
||||
lnRec = RECNO()
|
||||
|
||||
DO facturare_comenzi IN oproceduri_facturare.prg
|
||||
DO facturare_comenzi WITH loComanda IN oproceduri_facturare.prg
|
||||
|
||||
this.do_cauta()
|
||||
|
||||
|
||||
4289
clase/ofacturare.vc2
4289
clase/ofacturare.vc2
File diff suppressed because it is too large
Load Diff
@@ -1262,6 +1262,10 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
|
||||
*< OBJECTDATA: ObjPath="grid_facturi.cInstitutiePublica._checkbox1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grid_facturi.cCodFiscal.Header1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grid_facturi.cCodFiscal.Text1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grid_facturi.cUtilm.Header1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grid_facturi.cUtilm.Text1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grid_facturi.cDataoram.Header1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grid_facturi.cDataoram.Text1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grid_detalii" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grid_detalii.cNume_lista_preturi.Header1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grid_detalii.cNume_lista_preturi.Text1" UniqueID="" Timestamp="" />
|
||||
@@ -1337,6 +1341,7 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
|
||||
|
||||
*<DefinedPropArrayMethod>
|
||||
*m: do_editare_factura
|
||||
*m: do_editare_unificata
|
||||
*m: do_listare_cc
|
||||
*m: do_listare_centr
|
||||
*m: do_listare_document
|
||||
@@ -2225,7 +2230,7 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
|
||||
|
||||
ADD OBJECT 'grid_facturi' AS _grdrow WITH ;
|
||||
Anchor = 15, ;
|
||||
ColumnCount = 44, ;
|
||||
ColumnCount = 46, ;
|
||||
DeleteMark = .F., ;
|
||||
FontSize = 10, ;
|
||||
HeaderHeight = 36, ;
|
||||
@@ -2543,7 +2548,21 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
|
||||
Column44.FontSize = 10, ;
|
||||
Column44.Name = "cCodFiscal", ;
|
||||
Column44.ReadOnly = .T., ;
|
||||
Column44.Width = 103
|
||||
Column44.Width = 103, ;
|
||||
Column45.ColumnOrder = 45, ;
|
||||
Column45.ControlSource = "utilm", ;
|
||||
Column45.FontName = "Arial", ;
|
||||
Column45.FontSize = 10, ;
|
||||
Column45.Name = "cUtilm", ;
|
||||
Column45.ReadOnly = .T., ;
|
||||
Column45.Width = 107, ;
|
||||
Column46.ColumnOrder = 46, ;
|
||||
Column46.ControlSource = "dataoram", ;
|
||||
Column46.FontName = "Arial", ;
|
||||
Column46.FontSize = 10, ;
|
||||
Column46.Name = "cDataoram", ;
|
||||
Column46.ReadOnly = .T., ;
|
||||
Column46.Width = 99
|
||||
*< END OBJECT: ClassLib="_grd_base.vcx" BaseClass="grid" />
|
||||
|
||||
ADD OBJECT 'grid_facturi.cAdresaFacturare.Header1' AS header WITH ;
|
||||
@@ -2759,6 +2778,26 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
|
||||
SelectedBackColor = 0,0,255
|
||||
*< END OBJECT: BaseClass="textbox" />
|
||||
|
||||
ADD OBJECT 'grid_facturi.cDataoram.Header1' AS header WITH ;
|
||||
Alignment = 2, ;
|
||||
Caption = "Dataora modificarii", ;
|
||||
FontName = "Arial", ;
|
||||
FontSize = 10, ;
|
||||
Name = "Header1"
|
||||
*< END OBJECT: BaseClass="header" />
|
||||
|
||||
ADD OBJECT 'grid_facturi.cDataoram.Text1' AS textbox WITH ;
|
||||
BackColor = 255,255,255, ;
|
||||
BorderStyle = 0, ;
|
||||
FontName = "Arial", ;
|
||||
FontSize = 10, ;
|
||||
ForeColor = 0,0,0, ;
|
||||
Margin = 0, ;
|
||||
Name = "Text1", ;
|
||||
ReadOnly = .T., ;
|
||||
SelectedBackColor = 0,0,255
|
||||
*< END OBJECT: BaseClass="textbox" />
|
||||
|
||||
ADD OBJECT 'grid_facturi.cDataoras.Header1' AS header WITH ;
|
||||
Alignment = 2, ;
|
||||
Caption = "Dataora stergerii", ;
|
||||
@@ -3381,6 +3420,26 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
|
||||
SelectedBackColor = 0,0,255
|
||||
*< END OBJECT: BaseClass="textbox" />
|
||||
|
||||
ADD OBJECT 'grid_facturi.cUtilm.Header1' AS header WITH ;
|
||||
Alignment = 2, ;
|
||||
Caption = "Operator modificare", ;
|
||||
FontName = "Arial", ;
|
||||
FontSize = 10, ;
|
||||
Name = "Header1"
|
||||
*< END OBJECT: BaseClass="header" />
|
||||
|
||||
ADD OBJECT 'grid_facturi.cUtilm.Text1' AS textbox WITH ;
|
||||
BackColor = 255,255,255, ;
|
||||
BorderStyle = 0, ;
|
||||
FontName = "Arial", ;
|
||||
FontSize = 10, ;
|
||||
ForeColor = 0,0,0, ;
|
||||
Margin = 0, ;
|
||||
Name = "Text1", ;
|
||||
ReadOnly = .T., ;
|
||||
SelectedBackColor = 0,0,255
|
||||
*< END OBJECT: BaseClass="textbox" />
|
||||
|
||||
ADD OBJECT 'grid_facturi.cUtils.Header1' AS header WITH ;
|
||||
Alignment = 2, ;
|
||||
Caption = "Operator stergere", ;
|
||||
@@ -3679,11 +3738,26 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
|
||||
#DEFINE T41 41 && 'RETUR TRANSFER'
|
||||
#DEFINE T_6 -6 && 'RETUR TRANSFER DIN GESTIUNE VALORICA'
|
||||
|
||||
LOCAL loFactura
|
||||
LOCAL loFactura, lcSql, lnFacturi
|
||||
|
||||
IF !This.IsCopy(crsFacturi.tip)
|
||||
RETURN
|
||||
ENDIF
|
||||
* proforma deja facturata: se avertizeaza, nu se blocheaza
|
||||
IF Nvl(crsFacturi.eproforma,0) = 1
|
||||
lcSql = [SELECT COUNT(*) AS nr FROM vanzari_coresp WHERE sters = 0 AND tip = 4 ] + ;
|
||||
[AND id_vanzare_aviz = ] + Alltrim(Str(crsFacturi.id_vanzare,20,0))
|
||||
IF goExecutor.oExecute(lcSql,[crsprofact]) >= 0 AND Used('crsprofact')
|
||||
lnFacturi = crsprofact.nr
|
||||
Use In (Select('crsprofact'))
|
||||
IF lnFacturi > 0
|
||||
IF amessagebox("Din aceasta proforma s-au emis deja " + Alltrim(Str(lnFacturi)) + ;
|
||||
" facturi. Doriti sa continuati?",4+32,"Confirmare") <> 6
|
||||
RETURN
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
* Copiez orice document, dar il tratez ca pe un caz simplu (factura din lista de preturi, aviz din lista de preturi, transfer simplu)
|
||||
* De exemplu, factura din contract sau din comanda, nu are sens sa fie copiata, dar o tratez ca pe o factura din lista de preturi
|
||||
@@ -3871,6 +3945,96 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
|
||||
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE do_editare_unificata
|
||||
If !This.lactiv3
|
||||
Return
|
||||
Endif
|
||||
|
||||
If Reccount('crsfacturi') = 0
|
||||
amessagebox("Nu exista inregistrari pentru editare!",0+48,"Atentie")
|
||||
Return
|
||||
Endif
|
||||
|
||||
If glLunaInchisa
|
||||
Return
|
||||
Endif
|
||||
|
||||
Local lnSters, llEProforma, lnTipDoc, loForm, pnDiscountRon, pnDiscountValuta
|
||||
Private pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzare, poDate, poSnapshotEditare
|
||||
Store 0 To pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzare
|
||||
Select crsfacturi
|
||||
lnIdVanzare = id_vanzare
|
||||
lnCod = cod
|
||||
pnAn = Year(data_act)
|
||||
pnLuna = Month(data_act)
|
||||
lnSters = sters
|
||||
lnIdFact = id_fact
|
||||
llEProforma = (eproforma = 1)
|
||||
lnTipDoc = tip
|
||||
|
||||
If lnSters = 1
|
||||
amessagebox("Acest document este deja sters!",0+48,"Atentie")
|
||||
Return
|
||||
Endif
|
||||
|
||||
If llEProforma
|
||||
amessagebox("Proformele nu pot fi editate pe aceasta cale!",0+48,"Atentie")
|
||||
Return
|
||||
Endif
|
||||
|
||||
If Inlist(lnTipDoc, 44, 45, 46, 51)
|
||||
amessagebox("Documentele acestui modul nu pot fi editate pe aceasta cale!",0+48,"Atentie")
|
||||
Return
|
||||
Endif
|
||||
|
||||
If (pnAn * 12) + pnLuna <> (gnAn * 12) + gnLuna
|
||||
amessagebox('Nu puteti edita decat inregistrari din luna curenta!',0,'Atentie!')
|
||||
Return
|
||||
Endif
|
||||
|
||||
If ReferinteDocumenteNota(pnAn, pnLuna, lnCod) && odocumente.prg
|
||||
amessagebox("Documentul are referinte (incasari/plati). Nu poate fi editat.", 0+48,"Editare")
|
||||
Return
|
||||
Endif
|
||||
|
||||
If EsteInEFactura(lnIdFact) && ofacturare_editare.prg
|
||||
amessagebox("Documentul a fost trimis in eFactura. Nu poate fi editat.", 0+48,"Editare")
|
||||
Return
|
||||
Endif
|
||||
|
||||
If DocumentAreUrmasi(lnIdVanzare) && ofacturare_editare.prg
|
||||
amessagebox("Documentul are facturi sau avize emise pe lantul lui. Nu poate fi editat.", 0+48,"Editare")
|
||||
Return
|
||||
Endif
|
||||
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdVanzare, @pnDiscountRon, @pnDiscountValuta) && ofacturare_editare.prg
|
||||
If Vartype(poDate) <> 'O'
|
||||
Return
|
||||
Endif
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdVanzare) && ofacturare_editare.prg
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp]) && updateserver.prg
|
||||
update_saft_taxtable() && updateserver.prg
|
||||
If Used('jtva_coloane')
|
||||
Use In jtva_coloane
|
||||
Endif
|
||||
If poDate.tva_incasare = 0
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_ex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
Else
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_neex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
Endif
|
||||
|
||||
loForm = Createobject('frm_facturare_articole2')
|
||||
loForm.ndiscfactron = pnDiscountRon
|
||||
loForm.ndiscfactval = pnDiscountValuta
|
||||
loForm.do_calculeaza_totaluri()
|
||||
*!* S8b: instantaneul se ia AICI - primul punct unde discountul e deja corect si formularul
|
||||
*!* inca nu a fost aratat; ramane in viata cat formularul e deschis (Show() e modal)
|
||||
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, lnIdVanzare, lnIdFact, lnCod, pnAn, pnLuna)
|
||||
loForm.Show()
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE do_listare
|
||||
*!* 26.11.2019
|
||||
*!* marius.mutu
|
||||
@@ -4929,12 +5093,14 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
|
||||
|
||||
PROCEDURE inainte_de_do_modifica
|
||||
Local lnOptiune
|
||||
lnOptiune = xmenu('Modificare \<date factura;Editare \<factura (note, rulaje, articole)')
|
||||
lnOptiune = xmenu('Modificare \<date factura;Editare \<factura (note, rulaje, articole);Editare \<unificata (articole)')
|
||||
Do Case
|
||||
Case lnOptiune = 1
|
||||
This.do_modifica()
|
||||
Case lnOptiune = 2
|
||||
This.do_editare_factura()
|
||||
Case lnOptiune = 3
|
||||
This.do_editare_unificata()
|
||||
Endcase
|
||||
ENDPROC
|
||||
|
||||
|
||||
@@ -14447,7 +14447,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx"
|
||||
SELECT (m.lnAreaTvd)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
IF Nvl(id_vanzare_det,0) = 0 AND Nvl(id_articol,0) = 0
|
||||
IF Nvl(id_ctr,0) = 0 AND Nvl(id_articol,0) = 0
|
||||
AMESSAGEBOX("Linia '" + Alltrim(Nvl(denumire,'')) + "' nu are articol asociat.",0+16,"Eroare")
|
||||
IF Between(m.lnRecnoTvd,1,Reccount('tvd'))
|
||||
GO (m.lnRecnoTvd) IN tvd
|
||||
|
||||
@@ -1 +1 @@
|
||||
2026-08-02
|
||||
2026-09-09
|
||||
|
||||
50
docs/capcana_sqlexec_no_data_found.md
Normal file
50
docs/capcana_sqlexec_no_data_found.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# Capcana: linii pierdute tacut intre VFP si Oracle
|
||||
|
||||
## Simptomul
|
||||
|
||||
Un document se salveaza cu mai putine linii decat are pe ecran. Fara mesaj, fara eroare, fara
|
||||
nimic in log. Totalurile ies mai mici, dar consistente intre ele - deci nu arata a defect.
|
||||
|
||||
## Mecanismul, in doi pasi
|
||||
|
||||
1. Un `SELECT ... INTO` **fara handler** intr-o procedura PL/SQL arunca `ORA-01403`
|
||||
(`NO_DATA_FOUND`) cand predicatul nu potriveste niciun rand.
|
||||
2. ODBC il traduce ca `SQL_NO_DATA`, si **`SQLExec()` intoarce 1, adica succes**. Bucla din VFP
|
||||
testeaza `If lnSucces < 0` si nu vede nimic. Linia dispare fara urma.
|
||||
|
||||
Deci: eroare reala in Oracle -> succes raportat in VFP.
|
||||
|
||||
## De ce nu potriveste predicatul (cauza uzuala)
|
||||
|
||||
Santinela pusa doar pe coloana, nu si pe parametru:
|
||||
|
||||
AND NVL(A.CONT, 'XXXX') = V_CONT
|
||||
|
||||
VFP trimite sir gol pentru campul necompletat, iar in Oracle sirul gol **este NULL**; `'XXXX' = NULL`
|
||||
da UNKNOWN, deci zero randuri. Corect e pe amandoua:
|
||||
|
||||
AND NVL(A.CONT, 'XXXX') = NVL(V_CONT, 'XXXX')
|
||||
|
||||
Pe `ID_GESTIUNE` acelasi tipar merge, fiindca acolo VFP chiar trimite santinela `-1000`.
|
||||
|
||||
Cauza inrudita, acelasi simptom: un camp lipsa din lista de insert a cursorului, pe o coloana
|
||||
numerica **fara `NULL`** - ramane `0` tacit, nu NULL si nu eroare, si predicatul cade pe `0`.
|
||||
|
||||
## Ce se face, in ordinea asta
|
||||
|
||||
1. **Intai garda, apoi cauza.** Infasoara `SELECT ... INTO` in
|
||||
`BEGIN ... EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20000, '... (FACT-0xx : ' || <cheia> || ')')`.
|
||||
Fara ea, orice reparatie de cauza ramane neverificabila: mecanismul care ascunde defectul e inca
|
||||
acolo. Codul `FACT-0xx` **se cauta liber in `USER_SOURCE`**, nu se presupune ca e liber.
|
||||
2. Abia apoi simetrizeaza predicatul.
|
||||
3. **Asertiune pe NUMARUL DE LINII** in testul de flux. Exact piesa care lipsea: identitatea
|
||||
documentului si legaturile lui se pastrau corect, deci toate asertiunile existente treceau.
|
||||
|
||||
## Cum se cauta preventiv
|
||||
|
||||
In `USER_SOURCE`: fiecare `SELECT ... INTO` fara `EXCEPTION` in ramura lui, si fiecare predicat de
|
||||
forma `NVL(<coloana>, <santinela>) = <parametru>`.
|
||||
|
||||
Precedent: `PACK_FACTURARE.adauga_articol_factura`, ramura `ntip = 4` (facturare din avize) - un
|
||||
document reemis cu 2 linii din 4, nedetectat de doua sweep-uri la rand. Reparat 04.09.2026 cu
|
||||
`FACT-030`.
|
||||
@@ -40,7 +40,13 @@ od -An -tx1 <fisier> | tr ' ' '\n' | grep -v '^$' | awk '$1>"7f"' | sort | uniq
|
||||
|
||||
La stricare censul CRESTE (un octet devine trei) - nu urmari doar scaderile. Cauta explicit
|
||||
secventa `EF BF BD`, nu tiparul generic `C3`/`C4`/`C5`/`C8` (acela apare si in UTF-8 legitim
|
||||
din cod).
|
||||
din cod). Decodat cp1250, `EF BF BD` apare ca "�" in caption.
|
||||
|
||||
Varianta veche, utila cand cauti pozitia exacta (linia) a unui octet suspect:
|
||||
|
||||
```bash
|
||||
perl -ne 'print "$.\n" if /[\x80-\xFF]/' <fisier>
|
||||
```
|
||||
|
||||
## Reparare
|
||||
|
||||
@@ -50,7 +56,12 @@ oarba cu 0xBA strica alte litere din alte pozitii. Ia octetul corect per pozitie
|
||||
PowerShell 5.1 (adauga BOM si re-encodeaza). Scrie inapoi ca bytes cp1250 explicit, apoi
|
||||
`txt2vcx.ps1` + fidelity check.
|
||||
|
||||
Cazul simplu (s-a pierdut doar 0xBA), inlocuire punctuala pe octet:
|
||||
Coruperea se repeta la FIECARE scriere, nu doar la prima: editeaza tot ce ai de editat, verifica
|
||||
byte-level, si repara o singura data DUPA ultima scriere - nu intre editari.
|
||||
|
||||
Cazul simplu (s-a pierdut doar un octet, cel original cunoscut, ex. 0xBA pentru s-cu-virgula),
|
||||
inlocuire punctuala pe secventa corupta - acelasi risc de coliziune poate afecta si alte fisiere
|
||||
cu acelasi octet, nu doar pozitia curenta:
|
||||
|
||||
```bash
|
||||
perl -e 'binmode(STDIN);binmode(STDOUT);local $/;$_=<STDIN>;s/\xEF\xBF\xBD/\xBA/g;print' < f > f.tmp
|
||||
|
||||
@@ -158,3 +158,11 @@ Cand un bug apare "de azi", compara cu clasa veche fara sa atingi SVN:
|
||||
Platit pe testarea VIES (23.08.2026): doua blocaje de 90s+; dupa stergerea celor doua fisiere,
|
||||
exact acelasi script a rulat in 1.19s. Completeaza punctul (1) din capcana precedenta: nu doar
|
||||
"exista `.ERR`?", ci si "e `.ERR`-ul de la rularea asta sau de la una anterioara?".
|
||||
- **`TYPE()` pe un obiect nu intoarce `'O'` pentru orice membru.** `.Objects` la un container
|
||||
(`Form`, `Container`, `Grid`) e *Objects Array*: `TYPE('loO.Objects')` da `'A'`, nu `'O'`. O
|
||||
garda `IF TYPE('loO.Objects') = 'O'` e deci mereu falsa, iar `AND`-ul scurtcircuiteaza testul
|
||||
corect de dupa ea - recursia pe arborele de controale nu porneste niciodata, **fara eroare si
|
||||
fara nimic in log**; singurul simptom e un dump care contine doar nivelul 1. Testeaza pe ce
|
||||
folosesti efectiv: `TYPE('loO.Objects.Count') = 'N'` e `'U'` daca lantul punctat nu exista,
|
||||
deci e si suficient, si independent de litera de tip. Aceeasi prudenta la `TYPE('loO.Value')`
|
||||
(tipul variaza cu continutul) si `TYPE('loO.Visible')`.
|
||||
|
||||
50
docs/instalare-ponytail.md
Normal file
50
docs/instalare-ponytail.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# Instalare plugin Ponytail (Claude Code)
|
||||
|
||||
Plugin de nivel user (nu de proiect) care activeaza modul "lazy senior developer" descris in
|
||||
`~/.claude/CLAUDE.md`. Se instaleaza o singura data per calculator, in contul Windows al
|
||||
utilizatorului.
|
||||
|
||||
## Pasi
|
||||
|
||||
Din orice sesiune `claude` (sau `claude -p` cu `--dangerously-skip-permissions` daca ruleaza
|
||||
neatended):
|
||||
|
||||
```
|
||||
claude plugin marketplace add DietrichGebert/ponytail
|
||||
claude plugin install ponytail@ponytail
|
||||
```
|
||||
|
||||
Reporneste sesiunea Claude Code dupa instalare (plugin-urile se incarca la pornire).
|
||||
|
||||
## Verificare
|
||||
|
||||
```
|
||||
claude plugin list
|
||||
```
|
||||
|
||||
Trebuie sa apara `ponytail@ponytail` ca instalat si activ. Sau verifica direct in
|
||||
`~/.claude/settings.json`:
|
||||
|
||||
```json
|
||||
"enabledPlugins": {
|
||||
"ponytail@ponytail": true
|
||||
},
|
||||
"extraKnownMarketplaces": {
|
||||
"ponytail": {
|
||||
"source": { "source": "github", "repo": "DietrichGebert/ponytail" }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Nivel implicit
|
||||
|
||||
Nivelul (`lite|full|ultra`) e setat per sesiune cu `/ponytail <nivel>` sau ramane pe default-ul
|
||||
plugin-ului. Regulile de scara YAGNI/reuse-first pentru proiectele ROA sunt in
|
||||
`reguli_lucru.md`, punctul 3 ("Scara ponytail") — se aplica dupa instalare, nu fac parte din
|
||||
instalarea in sine.
|
||||
|
||||
## Dezinstalare
|
||||
|
||||
```
|
||||
claude plugin uninstall ponytail@ponytail
|
||||
```
|
||||
246
docs/prompt_recreare_statusline.md
Normal file
246
docs/prompt_recreare_statusline.md
Normal file
@@ -0,0 +1,246 @@
|
||||
# Prompt pentru alta sesiune: recreeaza statusline-ul Claude Code
|
||||
|
||||
Copiaza tot ce urmeaza si trimite-l ca prompt intr-o sesiune Claude Code noua
|
||||
(pe alta masina/user), ca sa recreeze exact statusline-ul curent (Windows / Git Bash).
|
||||
|
||||
---
|
||||
|
||||
Vreau sa configurezi un statusline custom pentru Claude Code, pe Windows cu Git Bash.
|
||||
|
||||
1. Verifica ca exista `jq.exe` in `~/.claude/bin/jq.exe`. Daca nu exista, descarca
|
||||
binarul oficial jq pentru Windows (jq-win64.exe de pe github.com/jqlang/jq/releases)
|
||||
si salveaza-l acolo ca `jq.exe`.
|
||||
|
||||
2. Creeaza fisierul `~/.claude/statusline.sh` (bash, LF, executabil) cu continutul de mai jos.
|
||||
|
||||
3. In `~/.claude/settings.json`, adauga/actualizeaza cheia de nivel radacina:
|
||||
```json
|
||||
"statusLine": {
|
||||
"type": "command",
|
||||
"command": "C:/Users/<USER>/.claude/statusline.sh"
|
||||
}
|
||||
```
|
||||
(inlocuieste `<USER>` cu userul curent; foloseste slash-uri, nu backslash).
|
||||
|
||||
Ce face scriptul:
|
||||
- Linia 1: model | ctx folosit/total si % din fereastra | proiect (branch git, cu `*` daca e dirty)
|
||||
- Linia 2: trei bare de puncte (10 puncte fiecare) pentru consum curent (5h), saptamanal (7 zile)
|
||||
si sonnet (7 zile) — procent + timp pana la reset, in format `●●●○○○○○○○ 30% ↺ 2hr 15min`
|
||||
- Cele trei procente vin din `/api/oauth/usage` (acelasi endpoint ca ecranul `/usage`),
|
||||
cu cache de 10 minute in `~/.claude/.statusline-usage.json` si backoff la 429/eroare
|
||||
(20 min, respectiv 5 min), ca sa nu loveasca rate-limit-ul la fiecare prompt.
|
||||
- Pana la primul fetch reusit, current/weekly cad back pe `rate_limits` din JSON-ul primit pe stdin.
|
||||
- Token-ul OAuth se ia din `~/.claude/.credentials.json` (`claudeAiOauth.accessToken`).
|
||||
- La inceput reface PATH-ul (`$HOME/.claude/bin:/usr/bin:/bin:$PATH`), pentru ca Claude Code
|
||||
lanseaza scriptul ca shell non-login/non-interactiv, deci profilul Git Bash nu se incarca
|
||||
si PATH-ul nu are coreutils.
|
||||
|
||||
Continutul complet al `~/.claude/statusline.sh`:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# Claude Code Statusline (Windows / Git Bash)
|
||||
# Line 1: Model | ctx 33K/1M 3% | project (branch*)
|
||||
# Line 2: current <bar> 24% ↺ 3hr │ weekly <bar> 4% ↺ Thu 7pm │ sonnet <bar> 2% ↺ Thu 7pm
|
||||
#
|
||||
# All three usage figures come from /api/oauth/usage -- the same source as the
|
||||
# `/usage` screen -- so the numbers match it exactly. That endpoint is rate-
|
||||
# limited, so the result is cached for 10 min; on failure the last good values
|
||||
# are kept. Until the first successful fetch, current/weekly fall back to the
|
||||
# `rate_limits` object on stdin (slightly different snapshot, but never blank).
|
||||
|
||||
set -o pipefail
|
||||
|
||||
# Claude Code spawns this as a non-login, non-interactive shell, so Git Bash's
|
||||
# profile is never sourced and PATH has no coreutils. Restore them explicitly,
|
||||
# plus the bundled jq.exe in ~/.claude/bin.
|
||||
export PATH="$HOME/.claude/bin:/usr/bin:/bin:$PATH"
|
||||
|
||||
input=$(cat)
|
||||
|
||||
# Validate JSON
|
||||
if ! echo "$input" | jq -e . >/dev/null 2>&1; then
|
||||
printf '\033[90mLoading...\033[0m'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# --- Context / project (line 1) ---
|
||||
model=$(echo "$input" | jq -r '.model.display_name // "?"')
|
||||
workdir=$(echo "$input" | jq -r '.workspace.current_dir // ""')
|
||||
project=$(basename "$workdir" 2>/dev/null) || project="?"
|
||||
|
||||
ctx_pct=$(echo "$input" | jq -r '(.context_window.used_percentage // 0) | floor')
|
||||
[[ "$ctx_pct" =~ ^[0-9]+$ ]] || ctx_pct=0
|
||||
|
||||
ctx_size=$(echo "$input" | jq -r '.context_window.context_window_size // 0')
|
||||
ctx_input=$(echo "$input" | jq -r '.context_window.current_usage.input_tokens // 0')
|
||||
ctx_output=$(echo "$input" | jq -r '.context_window.current_usage.output_tokens // 0')
|
||||
ctx_cache_create=$(echo "$input" | jq -r '.context_window.current_usage.cache_creation_input_tokens // 0')
|
||||
ctx_cache_read=$(echo "$input" | jq -r '.context_window.current_usage.cache_read_input_tokens // 0')
|
||||
ctx_used=$(( ctx_input + ctx_output + ctx_cache_create + ctx_cache_read ))
|
||||
|
||||
fmt_tokens() {
|
||||
local n=$1
|
||||
if [ "$n" -ge 1000000 ]; then printf "%dM" $(( n / 1000000 ))
|
||||
elif [ "$n" -ge 1000 ]; then printf "%dK" $(( n / 1000 ))
|
||||
else printf "%d" "$n"; fi
|
||||
}
|
||||
ctx_used_fmt=$(fmt_tokens "$ctx_used")
|
||||
ctx_size_fmt=$(fmt_tokens "$ctx_size")
|
||||
|
||||
# Git branch with dirty marker
|
||||
git_branch=""
|
||||
if [ -n "$workdir" ] && [ -d "$workdir" ]; then
|
||||
git_branch=$(cd "$workdir" 2>/dev/null && git -c gc.auto=0 rev-parse --abbrev-ref HEAD 2>/dev/null) || git_branch=""
|
||||
if [ -n "$git_branch" ]; then
|
||||
git_dirty=$(cd "$workdir" 2>/dev/null && git -c gc.auto=0 status --porcelain 2>/dev/null | head -1)
|
||||
[ -n "$git_dirty" ] && git_branch="${git_branch}*"
|
||||
fi
|
||||
fi
|
||||
|
||||
# --- Usage: all three figures from /api/oauth/usage, cached ---
|
||||
USAGE_CACHE="$HOME/.claude/.statusline-usage.json"
|
||||
USAGE_REFRESH=600 # refresh at most every 10 min
|
||||
USAGE_BACKOFF_429=1200 # after a rate-limit, wait 20 min before retrying
|
||||
USAGE_BACKOFF_ERR=300 # after any other error, wait 5 min
|
||||
|
||||
now=$(date +%s)
|
||||
c5p=""; c5r=""; c7p=""; c7r=""; csp=""; csr=""; fetched=0; retry=0
|
||||
|
||||
read_usage_cache() {
|
||||
[ -f "$USAGE_CACHE" ] || return
|
||||
c5p=$(jq -r '.five_hour_pct // ""' "$USAGE_CACHE" 2>/dev/null)
|
||||
c5r=$(jq -r '.five_hour_reset // ""' "$USAGE_CACHE" 2>/dev/null)
|
||||
c7p=$(jq -r '.seven_day_pct // ""' "$USAGE_CACHE" 2>/dev/null)
|
||||
c7r=$(jq -r '.seven_day_reset // ""' "$USAGE_CACHE" 2>/dev/null)
|
||||
csp=$(jq -r '.sonnet_pct // ""' "$USAGE_CACHE" 2>/dev/null)
|
||||
csr=$(jq -r '.sonnet_reset // ""' "$USAGE_CACHE" 2>/dev/null)
|
||||
fetched=$(jq -r '(.fetched_at // 0) | floor' "$USAGE_CACHE" 2>/dev/null || echo 0)
|
||||
retry=$(jq -r '(.retry_until // 0) | floor' "$USAGE_CACHE" 2>/dev/null || echo 0)
|
||||
}
|
||||
read_usage_cache
|
||||
[[ "$fetched" =~ ^[0-9]+$ ]] || fetched=0
|
||||
[[ "$retry" =~ ^[0-9]+$ ]] || retry=0
|
||||
|
||||
write_usage_cache() { # 5p 5r 7p 7r sp sr fetched_at retry_until
|
||||
printf '{"five_hour_pct":"%s","five_hour_reset":"%s","seven_day_pct":"%s","seven_day_reset":"%s","sonnet_pct":"%s","sonnet_reset":"%s","fetched_at":%s,"retry_until":%s}\n' \
|
||||
"$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" > "$USAGE_CACHE"
|
||||
}
|
||||
|
||||
refresh_usage() {
|
||||
local creds="$HOME/.claude/.credentials.json" token tmp http
|
||||
[ -f "$creds" ] || return
|
||||
token=$(jq -r '.claudeAiOauth.accessToken // empty' "$creds" 2>/dev/null)
|
||||
[ -n "$token" ] || return
|
||||
tmp="$HOME/.claude/.statusline-usage.tmp.$$"
|
||||
http=$(curl -s -o "$tmp" -w '%{http_code}' --max-time 3 \
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "anthropic-beta: oauth-2025-04-20" \
|
||||
-H "Content-Type: application/json" \
|
||||
"https://api.anthropic.com/api/oauth/usage" 2>/dev/null)
|
||||
if [ "$http" = "200" ]; then
|
||||
local p5 r5 p7 r7 ps rs
|
||||
p5=$(jq -r 'if .five_hour.utilization!=null then (.five_hour.utilization|floor) else "" end' "$tmp" 2>/dev/null)
|
||||
r5=$(jq -r '.five_hour.resets_at // ""' "$tmp" 2>/dev/null)
|
||||
p7=$(jq -r 'if .seven_day.utilization!=null then (.seven_day.utilization|floor) else "" end' "$tmp" 2>/dev/null)
|
||||
r7=$(jq -r '.seven_day.resets_at // ""' "$tmp" 2>/dev/null)
|
||||
ps=$(jq -r 'if .seven_day_sonnet.utilization!=null then (.seven_day_sonnet.utilization|floor) else "" end' "$tmp" 2>/dev/null)
|
||||
rs=$(jq -r '.seven_day_sonnet.resets_at // ""' "$tmp" 2>/dev/null)
|
||||
write_usage_cache "$p5" "$r5" "$p7" "$r7" "$ps" "$rs" "$now" 0
|
||||
elif [ "$http" = "429" ]; then
|
||||
write_usage_cache "$c5p" "$c5r" "$c7p" "$c7r" "$csp" "$csr" "$fetched" "$(( now + USAGE_BACKOFF_429 ))"
|
||||
else
|
||||
write_usage_cache "$c5p" "$c5r" "$c7p" "$c7r" "$csp" "$csr" "$fetched" "$(( now + USAGE_BACKOFF_ERR ))"
|
||||
fi
|
||||
rm -f "$tmp"
|
||||
}
|
||||
|
||||
if [ "$(( now - fetched ))" -gt "$USAGE_REFRESH" ] && [ "$now" -gt "$retry" ]; then
|
||||
refresh_usage
|
||||
read_usage_cache
|
||||
fi
|
||||
|
||||
# current / weekly: use API cache; fall back to stdin rate_limits if not yet fetched
|
||||
if [ -n "$c5p" ]; then
|
||||
five_hr_pct=$c5p; five_hr_reset=$c5r
|
||||
else
|
||||
five_hr_pct=$(echo "$input" | jq -r '(.rate_limits.five_hour.used_percentage // 0) | floor')
|
||||
five_hr_reset=$(echo "$input" | jq -r '.rate_limits.five_hour.resets_at // ""')
|
||||
fi
|
||||
if [ -n "$c7p" ]; then
|
||||
weekly_pct=$c7p; weekly_reset=$c7r
|
||||
else
|
||||
weekly_pct=$(echo "$input" | jq -r '(.rate_limits.seven_day.used_percentage // 0) | floor')
|
||||
weekly_reset=$(echo "$input" | jq -r '.rate_limits.seven_day.resets_at // ""')
|
||||
fi
|
||||
# sonnet: only available from the API
|
||||
sonnet_pct=${csp:-0}; sonnet_reset=$csr
|
||||
|
||||
[[ "$five_hr_pct" =~ ^[0-9]+$ ]] || five_hr_pct=0
|
||||
[[ "$weekly_pct" =~ ^[0-9]+$ ]] || weekly_pct=0
|
||||
[[ "$sonnet_pct" =~ ^[0-9]+$ ]] || sonnet_pct=0
|
||||
|
||||
# --- reset-time formatting (accepts epoch seconds or ISO string) ---
|
||||
to_epoch() {
|
||||
local v="${1%%.*}"
|
||||
if [ -z "$v" ] || [ "$v" = "null" ]; then return 1; fi
|
||||
if [[ "$v" =~ ^[0-9]+$ ]]; then printf '%s' "$v"
|
||||
else date -d "$1" +%s 2>/dev/null || return 1; fi
|
||||
}
|
||||
|
||||
fmt_reset() {
|
||||
# No TZ= : Git Bash's date has no zoneinfo DB, but with TZ unset it uses the
|
||||
# Windows system timezone correctly. Setting TZ=Europe/... falls back to UTC.
|
||||
local e
|
||||
e=$(to_epoch "$1") || { printf '%s' "--"; return; }
|
||||
date -d "@$e" "+%a %-I:%M%P" 2>/dev/null || printf '%s' "--"
|
||||
}
|
||||
|
||||
fmt_remaining() {
|
||||
local e now_ts rem rh rm rd
|
||||
e=$(to_epoch "$1") || { printf '%s' "--"; return; }
|
||||
now_ts=$(date +%s)
|
||||
if [ "$e" -gt "$now_ts" ]; then
|
||||
rem=$(( e - now_ts )); rh=$(( rem / 3600 )); rm=$(( (rem % 3600) / 60 ))
|
||||
if [ "$rh" -gt 24 ]; then
|
||||
rd=$(( rh / 24 )); rh=$(( rh % 24 )); printf "%dd %dh" "$rd" "$rh"
|
||||
elif [ "$rh" -gt 0 ]; then printf "%dhr %dmin" "$rh" "$rm"
|
||||
else printf "%dmin" "$rm"; fi
|
||||
else printf "resetting"; fi
|
||||
}
|
||||
|
||||
five_hr_remain=$(fmt_remaining "$five_hr_reset")
|
||||
weekly_reset_str=$(fmt_reset "$weekly_reset")
|
||||
sonnet_reset_str=$(fmt_reset "$sonnet_reset")
|
||||
|
||||
# --- dot bar ---
|
||||
DOT_TOTAL=10
|
||||
make_dots() {
|
||||
local pct=$1 filled i dots=""
|
||||
filled=$(( pct * DOT_TOTAL / 100 ))
|
||||
[ "$filled" -gt "$DOT_TOTAL" ] && filled=$DOT_TOTAL
|
||||
[ "$filled" -lt 0 ] && filled=0
|
||||
for (( i=0; i<DOT_TOTAL; i++ )); do
|
||||
if [ "$i" -lt "$filled" ]; then dots="${dots}●"; else dots="${dots}○"; fi
|
||||
done
|
||||
printf "%s" "$dots"
|
||||
}
|
||||
|
||||
# --- build & output ---
|
||||
if [ -n "$git_branch" ]; then
|
||||
proj_display="${project} (${git_branch})"
|
||||
else
|
||||
proj_display="${project}"
|
||||
fi
|
||||
line1=$(printf "%s │ ctx %s/%s %d%% │ %s" "$model" "$ctx_used_fmt" "$ctx_size_fmt" "$ctx_pct" "$proj_display")
|
||||
|
||||
line2=$(printf "current %s %d%% ↺ %s │ weekly %s %d%% ↺ %s │ sonnet %s %d%% ↺ %s" \
|
||||
"$(make_dots "$five_hr_pct")" "$five_hr_pct" "$five_hr_remain" \
|
||||
"$(make_dots "$weekly_pct")" "$weekly_pct" "$weekly_reset_str" \
|
||||
"$(make_dots "$sonnet_pct")" "$sonnet_pct" "$sonnet_reset_str")
|
||||
|
||||
printf "%s\n%s" "$line1" "$line2"
|
||||
```
|
||||
|
||||
Dupa ce salvezi fisierul si actualizezi `settings.json`, deschide o sesiune noua Claude
|
||||
Code (sau `/statusline` refresh) ca sa vezi statusline-ul aplicat.
|
||||
@@ -50,8 +50,34 @@
|
||||
`clase\anaf_efactura.vcx`. Motivul e de intretinere: un `.prg` se editeaza direct si diff-ul lui
|
||||
se citeste in git, pe cand codul pus ca metoda in binar trece prin FoxBin2Prg si write-back si
|
||||
se urmareste greu.
|
||||
**Scara ponytail** (plugin activ implicit pe `full`, injectat si in subagenti; `ultra` nu se
|
||||
foloseste pe cod legacy partajat): opreste-te la prima treapta care tine - 1) trebuie sa existe?
|
||||
2) exista deja (`inventar-comun.md`, `COMUN\programe`, `COMUN\clase`) -> refolosesti; 3) o
|
||||
functie VFP nativa o face; 4) se rezolva pe Oracle (view, constrangere, pachet) in loc de cod
|
||||
client; 5) o linie; 6) abia apoi minimul care merge. Scurteaza SOLUTIA, nu cititul - intai
|
||||
urmaresti fluxul real atins. Nu se simplifica niciodata: garzile pe NULL, validarile, tratarea
|
||||
erorilor, drepturile de acces, ce s-a cerut explicit.
|
||||
Abateri obligatorii fata de plugin: (a) **fara comentarii `ponytail:`** in cod (regula 2) -
|
||||
scurtatura deliberata si limita ei se noteaza in `docs\progres.md`, deci `/ponytail-debt` nu
|
||||
are ce culege aici; (b) proba unei logici noi e un script headless (regulile 4 si 8), nu
|
||||
`test_*.py`; (c) handoff-urile, rapoartele din `docs\` si patch-urile sunt output cerut
|
||||
explicit - regula "cod intai, maxim trei randuri" nu li se aplica; (d) `/ponytail-review` pe
|
||||
diff-ul rundei inainte de commit e util, dar `delete:`/`yagni:` sunt IPOTEZE, nu constatari: in
|
||||
`COMUN` apelantii sunt in toate produsele, deci cauti in tot `D:\ROA` inainte sa stergi, iar o
|
||||
garda fara caz in datele de test nu e garda moarta (regula 6); `/ponytail-audit` pe tot
|
||||
arborele nu se ruleaza aici.
|
||||
4. Testare headless (fara IDE): `vfp9.exe -A -T "<script.prg>" <param>` din PowerShell.
|
||||
Mediu, sabloane, capcane, depanare: `depanare_testare_vfp.md`.
|
||||
Rularile intermediare acopera doar familiile de teste atinse de modificarea curenta; suita
|
||||
completa, inclusiv testele de garda pe zonele vecine, se ruleaza doar la rularea finala —
|
||||
garzile exista fiindca schimbarile cad de regula in cod partajat (`COMUN`), vizibil in toate
|
||||
produsele, dar costul lor nu se plateste la fiecare rulare intermediara. Ideal, doar testele
|
||||
atinse direct (de regula 3-10), nu toata familia.
|
||||
Un test normal dureaza 1-5s — ce umfla o rulare nu e testarea, ci asteptarea unui test atarnat.
|
||||
La rulari intermediare: timeout **90s**/test (ce trece de atat e atarnat, nu lent) si pauza
|
||||
**0,5s** intre teste, nu implicitul de 12 minute / 3s, rezervat rularii finale unde chiar
|
||||
conteaza sa distingi "atarnat" de "lent". Tinta: o rulare intermediara sta in secunde-minute,
|
||||
nu ore — daca depaseste, lista e prea larga sau timeout-ul prea mare.
|
||||
5. Editare .vcx/.scx pe text (cache, cp1250 byte-safe, fidelity-check): `flux-editare-vfp-text.md`.
|
||||
Cautare in binare: `cautare_vcx_vct.md`. Versiunile `.??2` sunt instantanee, pot fi mai vechi
|
||||
decat binarul — verifica mtime inainte de concluzii; continutul real e in `.PJX`.
|
||||
@@ -61,12 +87,14 @@
|
||||
tokens/subagent), nu unul singur cu context acumulat; handoff compact pe disc. Verificarea a
|
||||
ce se intoarce si modelul de lucru (backlog de story-uri mici): `orchestrare-subagenti.md`.
|
||||
7. Conventii obligatorii, de citit cand atingi zona respectiva:
|
||||
- editezi `.vc2`/`.sc2` sau `.prg` cu diacritice (ex. `programe\ocautare.prg`) -> fisierele
|
||||
sunt **cp1250** desi antetul FoxBin2Prg declara `CPID="1252"`; Edit/Write corup TOT fisierul
|
||||
(nu doar linia atinsa) la fiecare scriere - scrie continut nou strict ASCII. Cens obligatoriu
|
||||
- editezi `.vc2`/`.sc2` sau `.prg` cu diacritice (ex. `programe\ocautare.prg`, unde `s`-urile cu
|
||||
virgula din `masina`/`si contul`/`transa` sunt octetul `0xBA`) -> fisierele sunt **cp1250**
|
||||
desi antetul FoxBin2Prg declara `CPID="1252"`; Edit/Write corup TOT fisierul (nu doar linia
|
||||
atinsa), ireversibil, la fiecare scriere - scrie continut nou strict ASCII. Cens obligatoriu
|
||||
**inainte SI dupa** fiecare editare (la stricare CRESTE, nu scade):
|
||||
`od -An -tx1 <fisier> | tr ' ' '\n' | grep -v '^$' | awk '$1>"7f"' | sort | uniq -c`. Tabel
|
||||
de octeti si reparare -> `conventie_encoding_cp1252.md`;
|
||||
`od -An -tx1 <fisier> | tr ' ' '\n' | grep -v '^$' | awk '$1>"7f"' | sort | uniq -c`. Tabelul
|
||||
complet de octeti, sensul censului la stricare si procedura de recuperare din git/svn ->
|
||||
`conventie_encoding_cp1252.md`;
|
||||
- adaugi o PROPRIETATE sau o METODA noua intr-o clasa `.vc2`/`.sc2` -> `flux-editare-vfp-text.md`,
|
||||
sectiunea "Membri noi de clasa": fara intrarea `*p:`/`*m:` in `*<DefinedPropArrayMethod>`
|
||||
membrul trece fidelity-check-ul, dar VFP nu-l vede si prima salvare din IDE il sterge tacut;
|
||||
@@ -80,6 +108,8 @@
|
||||
- te conectezi la Oracle pe dev/test, alegi schema sau rulezi un script de pachet ->
|
||||
`conventie_mediu_oracle.md`;
|
||||
- garzi pe valori NULL din Oracle -> `conventie_null_vfp.md`;
|
||||
- procedura PL/SQL cu `SELECT ... INTO` chemata din VFP (linii pierdute tacut) ->
|
||||
`capcana_sqlexec_no_data_found.md`;
|
||||
- export date din Oracle -> `oracle_export.md`;
|
||||
- actualizarea ROA nu se finalizeaza (job update, PACK_UPDATE) -> `depanare-pack-update.md`;
|
||||
- modifici schema Oracle (tabele/view-uri/pachete) -> `scripturi-migrare-db.md`.
|
||||
|
||||
@@ -112,6 +112,28 @@ fluxuri valorice.
|
||||
in urma. Inainte de a te baza pe o linie din el pentru o modificare, confirm-o pe cod
|
||||
(`initializeaza_date_factura`, `CASE`-urile din view-uri) sau pe `XSETS`.
|
||||
|
||||
## Domeniul regenerabil (planul #13)
|
||||
|
||||
Planul #13 introduce editarea articolelor unui document deja emis prin stergere + reemitere
|
||||
(acelasi numar de document, rand nou in `VANZARI`). Domeniul acestui mecanism nu acopera tot
|
||||
`VANZARI.TIP`:
|
||||
|
||||
- **In afara domeniului, prin decizie explicita a lui Marius** (confirmat de inventarul de FK din
|
||||
S11): documentele legate de `REST_NOTE_PLATA` (modul restaurant, `TIP` 46) si de
|
||||
`IPS_VOYAGES_VANZARI` (facturarea voiajelor din ROAACNPRO, `TIP` 51). Pentru ele ramane calea
|
||||
veche de editare pe loc (#6); intrarea in formularul nou le refuza explicit, nu doar le ignora.
|
||||
- **Declarate explicit neacoperite** (recomandare "nu acum"): tipurile **48/49** (custodie) -
|
||||
incarcarea unui document existent in formularul nou nu e implementata pentru ele. Tinta unica
|
||||
pentru editare ramane `frm_facturare_articole2` (formularul nou) - `frm_facturare_articole`
|
||||
(formularul vechi) nu mai primeste cod nou.
|
||||
- **Datorie deschisa, nu excludere**: documentele CONTRACT cu linii de rata
|
||||
(`VANZARI_DETALII.ID_RATA <> 0`) esueaza la reemitere cu eroarea Oracle `Too many columns.` -
|
||||
19 din cele 21 de documente CONTRACT vii sunt in acest perimetru. Cauza-radacina **nu e
|
||||
dovedita**; nu exista azi o reparatie.
|
||||
|
||||
Restul tipurilor din tabelele de mai sus sunt in domeniul regenerabil, verificat pe cele patru
|
||||
familii de scriere (AVIZ, COMANDA, CONTRACT, ELSE).
|
||||
|
||||
## Legaturi
|
||||
|
||||
- `scripturi-migrare-db.md` — sursa de referinta pentru DDL e `MARIUSM_AUTO`, nu o schema de client.
|
||||
|
||||
@@ -24,7 +24,7 @@ DONE 9. ROAGEST - MODIFICARE REGISTRU JURNAL - SA SE POATA MODIFICA SI "NNIR" in
|
||||
|
||||
10. ROAFACTURARE - Integrare pagina contracte si rapoarte contracte in ROAFACTURARE, similar COMENZI in ROAFACTURARE - facturare pe baza de comenzi/contracte. trebuie comasate si drepturile pe obiectele din roacontracte cu obiectele noi din ROAFACTURARE.
|
||||
|
||||
11. ROAFACTURARE - Integrare politici de preturi in ROAFACTURARE - sunt numai editari de liste de preturi, note contabile, nomenclator articole, drepturi pe liste de preturi, care toate se folosesc numai in programul ROAFACTURARE
|
||||
11. ROAFACTURARE - Integrare politici de preturi in ROAFACTURARE - sunt numai editari de liste de preturi, note contabile, nomenclator articole, drepturi pe liste de preturi, care toate se folosesc numai in programul ROAFACTURARE.
|
||||
|
||||
12. ROAFACTURARE - sa pot sa folosesc direct nomenclatorul de articole pe post de lista de preturi, sa nu mai definesc liste de preturi, note contabile asociate. Acum am un echivalent (lista de articole din stoc ca o lista de preturi virtuala)
|
||||
|
||||
@@ -90,3 +90,14 @@ DONE 21. ROACONT - in formularul de verificare coduri fiscale, ar trebui sa fie
|
||||
39. ROA - asistent de suport pe documentatia proprie; butonul de chat exista deja in mesajele de eroare, ii lipseste continutul (manual, versiuni, dictionar de erori). (rec_directie_roacont_2026_09.md, 3.6)
|
||||
|
||||
40. ROACONT - e-Transport: azi nu exista nimic, concurenta are modul dedicat. (rec_directie_roacont_2026_09.md, 3.7)
|
||||
|
||||
41. ROACONT - daca se permite modificarea manuala a sumelor de la TVA, nu se poate si o atentionare daca TVA este altul decat procentul din explicatia de TVA selectata?
|
||||
|
||||
42. ROAFACTURARE - configurarea initiala pentru a putea factura un articol - este foarte complexa si vreau mai fluid, poate si cu un wizzard
|
||||
- definire grup TOTAL in ROADEF si asociere utilizatori in grupul TOTAL
|
||||
- creare articol in ROAPRETURI
|
||||
- creare nota contabila vanzare
|
||||
- creare politica preturi si introducere articol
|
||||
- definire serii numere facturi
|
||||
- completare optiuni document factura, aviz, documente incasare, bon fiscal, bon pos
|
||||
Poate un wizzard
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
925
programe/ofacturare_antet.prg
Normal file
925
programe/ofacturare_antet.prg
Normal file
@@ -0,0 +1,925 @@
|
||||
*!* 21.08.2026
|
||||
*!* marius.mutu
|
||||
*!* oAntetFacturare - logica de antet a formularului unificat frm_facturare_articole2, portata din frm_date_factura /
|
||||
*!* frm_date_aviz (ofacturare.vcx): cautarile (do_cauta_*), do_verifica, validarea antetului (valideaza_antet) si regulile
|
||||
*!* schimbarii felului de document (alege_tipdoc, schimba_tipdoc); formularul vine ca parametru toForm, ramura
|
||||
*!* factura/aviz se alege pe poDate.nIdTipDoc = poDate.nIdTipDocAvizExpeditie.
|
||||
|
||||
*!* 28.08.2026
|
||||
*!* marius.mutu
|
||||
*!* controalele grupului de contabilitate (Ct_clb_venchelt, Ct_clb_sectie, Ct_clb_lucrare, Ct_clb_responsabil,
|
||||
*!* Ct_clb_gestiune_init, Ed_tx_simplu1) au trecut in containerul ct_contabilitate al formularului, deci
|
||||
*!* referintele lor din acest fisier sunt prefixate cu containerul, inclusiv in expresiile Type().
|
||||
|
||||
Define Class oAntetFacturare As Custom
|
||||
|
||||
Function EsteAviz
|
||||
Return poDate.nIdTipDoc = poDate.nIdTipDocAvizExpeditie
|
||||
Endfunc
|
||||
|
||||
Procedure do_cauta_altele
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
If m.llAviz
|
||||
Do Case
|
||||
Case Inlist(toForm.nid_tip,23,41)
|
||||
toForm.do_cauta_gestiune_dest()
|
||||
Case Inlist(toForm.nid_tip,21,25,28,42,47) && modificare v 2.0.93 : am adaugat 47
|
||||
toForm.do_cauta_comanda()
|
||||
Case toForm.nid_tip = 26
|
||||
toForm.do_cauta_contract()
|
||||
Case toForm.nid_tip = 24 && aviz retur
|
||||
toForm.do_cauta_avize()
|
||||
Endcase
|
||||
Else
|
||||
Do Case
|
||||
Case toForm.nid_tip=2
|
||||
toForm.do_cauta_contract()
|
||||
Case toForm.nid_tip=3
|
||||
toForm.do_cauta_comanda()
|
||||
Case toForm.nid_tip=4
|
||||
toForm.do_cauta_avize()
|
||||
*!* modificare v 2.0.46
|
||||
Case toForm.nid_tip=7
|
||||
toForm.do_cauta_factura()
|
||||
*!* modificare v 2.0.46 ^
|
||||
*!* modificare v 2.0.56
|
||||
Case Inlist(toForm.nid_tip,8,9)
|
||||
toForm.do_cauta_facturi()
|
||||
*!* modificare v 2.0.56 ^
|
||||
*!* modificare v 2.0.87
|
||||
Case toForm.nid_tip = 45
|
||||
toForm.do_cauta_locatii()
|
||||
*!* modificare v 2.0.87 ^
|
||||
Endcase
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_avize
|
||||
Lparameters toForm
|
||||
Local lcXMLAvize
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
lcXMLAvize = caut_avize(poDate.id_client) && oproceduri_facturare.prg
|
||||
If !Empty(lcXMLAvize)
|
||||
Xmltocursor(lcXMLAvize, "crsAvizeTemp")
|
||||
*!* modificare v 2.0.44
|
||||
Select id_vanzare,id_comanda,;
|
||||
Padl(Iif(!Empty(Nvl(serie_act,[])),Alltrim(serie_act)+[ ],[])+Alltrim(Str(numar_act,20)),50,[ ]) As numar_act ;
|
||||
From crsAvizeTemp Into Cursor crsAvizeTemp
|
||||
*!* modificare v 2.0.44 ^
|
||||
lcIdVanzare = cursor2lista("crsAvizeTemp", "id_vanzare", ",")
|
||||
lcNumar_Act = cursor2lista("crsAvizeTemp", "numar_act", ",")
|
||||
|
||||
poDate.listaid = lcIdVanzare
|
||||
poDate.descriere = lcNumar_Act
|
||||
AddProperty(poDate,"id_comanda_aviz",0)
|
||||
Select crsAvizeTemp
|
||||
Locate For Not Empty(ID_COMANDA)
|
||||
If Found()
|
||||
poDate.id_comanda_aviz=ID_COMANDA
|
||||
Endif
|
||||
Use In crsAvizeTemp
|
||||
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.but_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_client
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
If m.llAviz
|
||||
Local loCauta
|
||||
Do Case
|
||||
Case poDate.tip = 23
|
||||
loCauta = caut_gestiune_sursa([2,4,5,6,7]) && modificare v 2.0.71 : am adaugat 2
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_gestiune)
|
||||
poDate.id_client = loCauta.id_gestiune
|
||||
poDate.nume_client = loCauta.nume_gestiune
|
||||
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
Endif
|
||||
*!* modificare v 2.0.16
|
||||
Case poDate.tip = 41
|
||||
loCauta = caut_gestiune_sursa([2,4,5,6,7])
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_gestiune)
|
||||
poDate.id_client = loCauta.id_gestiune
|
||||
poDate.nume_client = loCauta.nume_gestiune
|
||||
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
Endif
|
||||
*!* modificare v 2.0.16 ^
|
||||
Case poDate.tip = 25
|
||||
loCauta = caut_gestiune_dest()
|
||||
If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_gestiune,0))
|
||||
poDate.id_client = loCauta.id_gestiune
|
||||
poDate.nume_client = loCauta.nume_gestiune
|
||||
|
||||
poDateGestiuneDest.id_gestiune = loCauta.id_gestiune
|
||||
poDateGestiuneDest.id_tipgest = loCauta.id_tipgest
|
||||
poDateGestiuneDest.Cont = Nvl(loCauta.Cont,[XXXX])
|
||||
poDateGestiuneDest.acont = Nvl(loCauta.acont,[XXXX])
|
||||
|
||||
lcSql = [begin ] + gcS + [.pack_facturare.cauta_date_comanda_gest(?poDate.id_client,?gnIdSucursala,] + ;
|
||||
[?poDate.dataact,?@poDate.listaid,?@poDate.descriere); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
amessagebox(goExecutor.oPrelucrareEroare(),0+16,"Eroare")
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
Endif
|
||||
|
||||
Endif
|
||||
Otherwise
|
||||
&& modificare v 2.0.93 : am adaugat 47
|
||||
loHash = GetHash([cTitlu=>Clienti??cCont=>]+Iif(INLIST(poDate.tip,42,47),[357],Iif(Inlist(poDate.tip,28,29),[461],Alltrim(gcCont411)))+[??lAdaugCorespondente=>1??lVerificaANAF=>1])
|
||||
loHash.SetValue('dDataDoc', Iif(Type('poDate.dataact') = 'D', poDate.dataact, {}))
|
||||
loCauta = CautPartenerContabilitate(loHash)
|
||||
If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire)
|
||||
poDate.id_client = loCauta.id_part
|
||||
poDate.nume_client = loCauta.denumire
|
||||
|
||||
If Inlist(poDate.tip,21,28,42,47) && modificare v 2.0.93 : am adaugat 47
|
||||
lcSql = [begin ] + gcS + [.pack_facturare.cauta_date_comanda(?poDate.id_client,?gnIdSucursala,] + ;
|
||||
[?poDate.dataact,?@poDate.listaid,?@poDate.descriere); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
amessagebox(goExecutor.oPrelucrareEroare(),0+16,"Eroare")
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
Endif
|
||||
Else
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
Endif
|
||||
|
||||
Endif
|
||||
Endcase
|
||||
|
||||
*!* modificare v 2.0.70
|
||||
If Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
Endif
|
||||
*!* modificare v 2.0.70 ^
|
||||
toForm.ct_clb_nume_client.Refresh()
|
||||
toForm.ct_contabilitate.ct_clb_lucrare.SetFocus()
|
||||
Else
|
||||
Local loCauta
|
||||
loHash = GetHash([cTitlu=>Clienti??cCont=>4111??lAdaugCorespondente=>1??lVerificaANAF=>1])
|
||||
loHash.SetValue('dDataDoc', Iif(Type('poDate.dataact') = 'D', poDate.dataact, {}))
|
||||
loCauta = CautPartenerContabilitate(loHash)
|
||||
If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire)
|
||||
If loCauta.id_part <> poDate.id_client
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
poDate.text_aditional = []
|
||||
Endif
|
||||
poDate.id_client = loCauta.id_part
|
||||
poDate.nume_client = loCauta.denumire
|
||||
poDate.cod_fiscal = loCauta.cod_fiscal
|
||||
|
||||
If poDate.tip = 3
|
||||
lcSql = [begin ] + gcS + [.pack_facturare.cauta_date_comanda(?poDate.id_client,?gnIdSucursala,] + ;
|
||||
[?poDate.dataact,?@poDate.listaid,?@poDate.descriere); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
amessagebox(goExecutor.oPrelucrareEroare(),0+16,"Eroare")
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
poDate.text_aditional = []
|
||||
Endif
|
||||
Endif
|
||||
|
||||
*!* If Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
*!* toForm.ct_clb_altele.Refresh()
|
||||
*!* Endif
|
||||
|
||||
* Soldul curent
|
||||
loSoldClient = GetSoldClient(poDate.id_client)
|
||||
toForm.nSoldLei = loSoldClient.sold_lei
|
||||
toForm.nSoldValuta = loSoldClient.sold_valuta
|
||||
toForm.txtSoldLei.Refresh()
|
||||
|
||||
toForm.txtCodFiscal.Refresh()
|
||||
|
||||
toForm.ct_clb_nume_client.Refresh()
|
||||
toForm.ct_contabilitate.ct_clb_lucrare.SetFocus()
|
||||
|
||||
toForm.ct_clb_nume_client.clb_TX_CAUTARE.text_SIMPLU1.ToolTipText = 'Id client: ' + TRANSFORM(poDate.id_client)
|
||||
Else
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
poDate.text_aditional = []
|
||||
|
||||
toForm.ct_clb_nume_client.clb_TX_CAUTARE.text_SIMPLU1.ToolTipText = ''
|
||||
|
||||
toForm.nSoldLei = 0
|
||||
toForm.nSoldValuta = 0
|
||||
toForm.txtSoldLei.Refresh()
|
||||
Endif
|
||||
*!* modificare v 2.0.70
|
||||
If Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
ENDIF
|
||||
*!* modificare v 2.0.70 ^
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_comanda
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
If m.llAviz
|
||||
Local loCauta
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales " + Iif(poDate.tip = 25,[gestiunea destinatie],[clientul]) + " !",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
If poDate.tip = 25
|
||||
loCauta = caut_comanda_gestiune(poDate.id_client)
|
||||
Else
|
||||
loCauta = caut_comanda_client(poDate.id_client)
|
||||
Endif
|
||||
If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_comanda,0))
|
||||
poDate.listaid = loCauta.id_comanda
|
||||
poDate.descriere = ALLTRIM(loCauta.nr_comanda)
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
Else
|
||||
* 12.03.2021
|
||||
* folosesc caut_comanda_clienti in loc de caut_comanda_client,
|
||||
* ca sa pot folosi un client diferit fata de comanda (ex: pers. fizica in loc de pers. juridica)
|
||||
Local loCauta
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
* loCauta = caut_comanda_client(poDate.id_client)
|
||||
loCauta = caut_comanda_clienti(poDate.id_client)
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_comanda)
|
||||
IF poDate.id_client <> loCauta.id_part
|
||||
AMESSAGEBOX('Comanda ' + ALLTRIM(TRANSFORM(loCauta.nr_comanda)) + ' (Client: ' + ALLTRIM(loCauta.nume) + ' Id: ' + ALLTRIM(TRANSFORM(loCauta.id_part)) + ')' + ;
|
||||
' nu apartine clientului ales (' + ALLTRIM(poDate.nume_client) + ' Id: ' + ALLTRIM(TRANSFORM(poDate.id_client)) + ')',0+48,_sCREEN.Caption)
|
||||
ENDIF
|
||||
poDate.listaid = loCauta.id_comanda
|
||||
poDate.descriere = loCauta.nr_comanda
|
||||
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.but_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_contract
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
If m.llAviz
|
||||
Local loCauta
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
*!* modificare v 2.0.67
|
||||
*!* loCauta = caut_contract_facturare(poDate.id_client)
|
||||
*!* If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_ctr,0))
|
||||
*!* poDate.listaid = loCauta.id_ctr
|
||||
*!* poDate.descriere = loCauta.contract
|
||||
*!* *!* If Inlist(loCauta.opt_facturare,3,4) And !Empty(loCauta.scadenta_incasare)
|
||||
*!* *!* poDate.datascad = poDate.dataact + loCauta.scadenta_incasare
|
||||
*!* *!* toForm.clb_data_scadenta.Refresh()
|
||||
*!* *!* *!* Else
|
||||
*!* *!* *!* poDate.datascad = Iif(gnScadentaAutomata=0,Gomonth(poDate.dataact,1),poDate.dataact+gnZileScadentaFact)
|
||||
*!* *!* Endif
|
||||
*!* toForm.ct_clb_altele.Refresh()
|
||||
*!* *!* modificare v 2.0.41
|
||||
*!* If Inlist(loCauta.opt_facturare,3,4)
|
||||
*!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
*!* Else
|
||||
*!* toForm.but_termin1.SetFocus()
|
||||
*!* Endif
|
||||
*!* Else
|
||||
*!* poDate.id_gestiune_init = Null
|
||||
*!* toForm.cgestiune_init = []
|
||||
*!* *!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
*!* *!* toForm.ct_contabilitate.ct_clb_gestiune_init.Refresh()
|
||||
*!* *!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .F.
|
||||
*!* *!* Endif
|
||||
*!* *!* toForm.but_termin1.SetFocus()
|
||||
*!* amessagebox("Acest contract este in rate si nu se poate emite aviz pentru el!",48,"Atentie")
|
||||
*!* Endif
|
||||
*!* *!* modificare v 2.0.41 ^
|
||||
*!* *!* toForm.buT_TERMIN1.SetFocus()
|
||||
*!* Endif
|
||||
lcXMLContracte = caut_contract_facturare(poDate.id_client,[3,4])
|
||||
If !Empty(lcXMLContracte) And gnButon = 1
|
||||
Xmltocursor(lcXMLContracte, "crsCtrTemp")
|
||||
poDate.listaid = cursor2lista("crsCtrTemp", "id_ctr", ",")
|
||||
poDate.descriere = cursor2lista("crsCtrTemp", "contract", ",")
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.but_termin1.SetFocus()
|
||||
Endif
|
||||
*!* Use In crsCtrTemp
|
||||
Endif
|
||||
*!* modificare v 2.0.67 ^
|
||||
Endif
|
||||
Else
|
||||
Local loCauta,lcXMLContracte
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
*!* modificare v 2.0.67
|
||||
*!* loCauta = caut_contract_facturare(poDate.id_client)
|
||||
*!* If !Isnull(loCauta) And !Empty(loCauta.id_ctr)
|
||||
*!* poDate.listaid = loCauta.id_ctr
|
||||
*!* poDate.descriere = loCauta.contract
|
||||
*!* toForm.ct_clb_altele.Refresh()
|
||||
*!* If Inlist(loCauta.opt_facturare,3,4)
|
||||
*!* If !Empty(loCauta.scadenta_incasare)
|
||||
*!* poDate.datascad = poDate.dataact + loCauta.scadenta_incasare
|
||||
*!* toForm.clb_data_scadenta.Refresh()
|
||||
*!* Endif
|
||||
*!* *!* modificare v 2.0.41
|
||||
*!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
*!* Else
|
||||
*!* toForm.but_termin1.SetFocus()
|
||||
*!* Endif
|
||||
*!* *!* modificare v 2.0.41 ^
|
||||
*!* Else
|
||||
*!* *!* poDate.datascad = Iif(gnScadentaAutomata=0,Gomonth(poDate.dataact,1),poDate.dataact+gnZileScadentaFact)
|
||||
*!* *!* modificare v 2.0.41
|
||||
*!* poDate.id_gestiune_init = Null
|
||||
*!* toForm.cgestiune_init = []
|
||||
*!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Refresh()
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .F.
|
||||
*!* Endif
|
||||
*!* toForm.but_termin1.SetFocus()
|
||||
*!* Endif
|
||||
*!* *!* modificare v 2.0.41 ^
|
||||
lcXMLContracte = caut_contract_facturare(poDate.id_client)
|
||||
If !Empty(lcXMLContracte) And gnButon = 1
|
||||
Xmltocursor(lcXMLContracte, "crsCtrTemp")
|
||||
poDate.listaid = cursor2lista("crsCtrTemp", "id_ctr", ",")
|
||||
poDate.descriere = cursor2lista("crsCtrTemp", "contract", ",")
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
Select crsCtrTemp
|
||||
Calculate Min(scadenta_incasare),MAX(afisare_scadenta) For Inlist(opt_facturare,3,4,0) To lnScadentaIncasare,lnAfisareScadenta
|
||||
If lnScadentaIncasare <> 0
|
||||
poDate.datascad = poDate.dataact + lnScadentaIncasare
|
||||
toForm.clb_data_scadenta.Refresh()
|
||||
Endif
|
||||
poDate.afisare_scadenta = lnAfisareScadenta && modificare ROACONTRACTE v 2.0.38
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.but_termin1.SetFocus()
|
||||
Endif
|
||||
*!* Use In crsCtrTemp
|
||||
*!* modificare v 2.0.67 ^
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_factura
|
||||
Lparameters toForm
|
||||
*!* modificare v 2.0.46
|
||||
Local loCauta
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
loCauta = caut_facturi_client(poDate.id_client)
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_fact)
|
||||
poDate.descriere = Alltrim(Alltrim(Nvl(loCauta.serie_act,[]))+[ ]+Alltrim(Str(loCauta.nract,14,0)))
|
||||
poDate.text_aditional = [INVOICE ] + poDate.descriere
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endif
|
||||
EndIf
|
||||
*!* modificare v 2.0.46 ^
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_facturi
|
||||
Lparameters toForm
|
||||
*!* modificare v 2.0.56
|
||||
Local loCauta
|
||||
Do Case
|
||||
Case Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Case Empty(Nvl(poDate.id_valuta,0)) And poDate.tip = 9
|
||||
amessagebox("Nu ati ales valuta!",0+48,"Atentie")
|
||||
toForm.ct_clb_valuta.SetFocus()
|
||||
OTHERWISE
|
||||
* 03.07.2020, marius
|
||||
* Nu stiu de ce se alegea o singura factura la retur.
|
||||
* Era si codul pentru mai multe facturi retur, dar era comentat
|
||||
|
||||
*!* loCauta = caut_facturi_multiple_client(poDate.id_client,poDate.in_valuta,poDate.id_valuta)
|
||||
*!* If gnButon = 1 and !Empty(Nvl(loCauta.id_vanzare,0))
|
||||
*!* poDate.listaid = Alltrim(Str(loCauta.id_vanzare))
|
||||
*!* poDate.descriere = Alltrim(Iif(!Empty(Nvl(loCauta.serie_act,[])),Alltrim(loCauta.serie_act)+[ ],[])+Alltrim(Str(loCauta.numar_act,20,0)))
|
||||
|
||||
* pentru mai multe facturi :
|
||||
lcXMLFacturi = caut_facturi_multiple_client(poDate.id_client,poDate.in_valuta,poDate.id_valuta,.T.)
|
||||
If !Empty(lcXMLFacturi) and gnButon = 1
|
||||
Xmltocursor(lcXMLFacturi, "crsFacturiTemp")
|
||||
Select id_vanzare,;
|
||||
Padl(Iif(!Empty(Nvl(serie_act,[])),Alltrim(serie_act)+[ ],[])+Alltrim(Str(numar_act,20,0)),50,[ ]) As numar_act ;
|
||||
From crsFacturiTemp Into Cursor crsFacturiTemp
|
||||
poDate.listaid = cursor2lista("crsFacturiTemp", "id_vanzare", ",")
|
||||
poDate.descriere = cursor2lista("crsFacturiTemp", "numar_act", ",")
|
||||
USE IN (SELECT('crsFacturiTemp'))
|
||||
|
||||
poDate.text_aditional = Iif(poDate.tip=8,[RETUR FACTURA ],[REFUND INVOICE FOR ]) + poDate.descriere
|
||||
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endcase
|
||||
*!* modificare v 2.0.56 ^
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_fdoc
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
loCauta = caut_fdoc()
|
||||
If !Isnull(loCauta) And !Empty(loCauta.fel_document)
|
||||
poDate.id_fdoc = loCauta.id_fdoc
|
||||
poDate.fdoc = loCauta.fel_document
|
||||
|
||||
toForm.clb_fdoc.Refresh()
|
||||
toForm.clb_dataact.SetFocus()
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_gestiune_dest
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
If Empty(NVL(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales gestiunea " + Iif(poDate.tip = 41,"de la care se face returul!","sursa!") ,0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
If poDate.tip = 41
|
||||
loCauta = caut_gestiune_dest(poDate.id_client,[2,4,5,6,7]) && modificare v 2.0.71 : am adaugat 2
|
||||
Else
|
||||
loCauta = caut_gestiune_dest(poDate.id_client)
|
||||
Endif
|
||||
If !Isnull(loCauta) And !Empty(NVL(loCauta.id_gestiune,0))
|
||||
poDate.listaid = loCauta.id_gestiune
|
||||
poDate.descriere = loCauta.nume_gestiune
|
||||
|
||||
poDateGestiuneDest.id_gestiune = loCauta.id_gestiune
|
||||
poDateGestiuneDest.id_tipgest = loCauta.id_tipgest
|
||||
poDateGestiuneDest.Cont = Nvl(loCauta.Cont,[XXXX])
|
||||
poDateGestiuneDest.acont = Nvl(loCauta.acont,[XXXX])
|
||||
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
toForm.ct_clb_politici_preturi.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_gestiune_init
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
loCauta = caut_gestiune(0,gnIdUtil)
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_gestiune)
|
||||
poDate.id_gestiune_init = loCauta.id_gestiune
|
||||
toForm.cgestiune_init = loCauta.nume_gestiune
|
||||
Else
|
||||
poDate.id_gestiune_init = Null
|
||||
toForm.cgestiune_init = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.Refresh()
|
||||
If m.llAviz
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Else
|
||||
*!* modificare ROACONTRACTE v 2.0.42
|
||||
*!* toForm.buT_TERMIN1.SetFocus()
|
||||
toForm.ct_contabilitate.ed_tx_simplu1._edbase1.SetFocus()
|
||||
*!* modificare ROACONTRACTE v 2.0.42 ^
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_locatii
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
loCauta = caut_locatie_restaurant()
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_rest_locatie)
|
||||
poDate.listaid = loCauta.id_rest_locatie
|
||||
poDate.descriere = loCauta.locatie
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
toForm.but_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_lucrare
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
Local loCauta
|
||||
LOCAL llToateIreg, llNou, lcFiltruOriginal
|
||||
llToateIreg = .F.
|
||||
llNou = .T.
|
||||
lcFiltruOriginal = ''
|
||||
|
||||
loCauta = caut_lucrare(m.llToateIreg, m.llNou, m.lcFiltruOriginal)
|
||||
If m.llAviz
|
||||
|
||||
If !Empty(Nvl(loCauta.id_lucrare,0))
|
||||
poDate.id_lucrare = loCauta.id_lucrare
|
||||
poDate.nrord = loCauta.nrord
|
||||
Else
|
||||
poDate.id_lucrare = Null
|
||||
poDate.nrord = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_lucrare.Refresh()
|
||||
Else
|
||||
*!* modificare v 2.0.46
|
||||
*!* If !Empty(Nvl(loCauta.id_lucrare,0))
|
||||
*!* poDate.id_lucrare = loCauta.id_lucrare
|
||||
*!* poDate.nrord = loCauta.nrord
|
||||
|
||||
*!* toForm.ct_contabilitate.ct_clb_lucrare.Refresh()
|
||||
*!* Endif
|
||||
If gnButon = 1
|
||||
poDate.id_lucrare = loCauta.id_lucrare
|
||||
poDate.nrord = loCauta.nrord
|
||||
Else
|
||||
poDate.id_lucrare = Null
|
||||
poDate.nrord = []
|
||||
Endif
|
||||
*!* modificare v 2.0.46 ^
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_sectie.SetFocus()
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_politica
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
loCauta = caut_politici_curente_util()
|
||||
If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_pol,0))
|
||||
poDate.id_pol = loCauta.id_pol
|
||||
poDate.nume_politica = loCauta.nume
|
||||
|
||||
toForm.ct_clb_politici_preturi.SetFocus()
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_responsabil
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
loCauta = CautPartenerContabilitate(GetHash([cTitlu=>Responsabili??cTipuriParteneri=>]+Alltrim(Str(gnIdTipResponsabili))+[??lAdaugCorespondente=>1]))
|
||||
If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire)
|
||||
poDate.id_responsabil = loCauta.id_part
|
||||
poDate.responsabil = loCauta.denumire
|
||||
Else
|
||||
poDate.id_responsabil = Null
|
||||
poDate.responsabil = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_responsabil.Refresh()
|
||||
Do Case
|
||||
Case Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Otherwise
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endcase
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_sectie
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
Local loCauta
|
||||
LOCAL lnPornire, llDesktop, llToateIreg, llNou, lcFiltruOriginal
|
||||
lnPornire = 0
|
||||
llDesktop = .F.
|
||||
llToateIreg = .F.
|
||||
llNou = .T.
|
||||
lcFiltruOriginal = ''
|
||||
|
||||
loCauta = caut_sectie(lnPornire, llDesktop, m.llToateIreg, m.llNou, m.lcFiltruOriginal)
|
||||
If m.llAviz
|
||||
If !Empty(Nvl(loCauta.id_sectie,0))
|
||||
poDate.id_sectie = loCauta.id_sectie
|
||||
poDate.sectie = loCauta.sectie
|
||||
Else
|
||||
poDate.id_sectie = Null
|
||||
poDate.sectie = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_sectie.Refresh()
|
||||
Else
|
||||
*!* modificare v 2.0.46
|
||||
*!* If !Empty(Nvl(loCauta.id_sectie,0))
|
||||
*!* poDate.id_sectie = loCauta.id_sectie
|
||||
*!* poDate.sectie = loCauta.sectie
|
||||
*!* toForm.ct_contabilitate.ct_clb_sectie.Refresh()
|
||||
*!* Endif
|
||||
If gnButon = 1
|
||||
poDate.id_sectie = loCauta.id_sectie
|
||||
poDate.sectie = loCauta.sectie
|
||||
Else
|
||||
poDate.id_sectie = Null
|
||||
poDate.sectie = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_sectie.Refresh()
|
||||
*!* modificare v 2.0.46 ^
|
||||
Endif
|
||||
Do Case
|
||||
*!* modificare v 2.0.46
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_venchelt.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_venchelt.SetFocus()
|
||||
*!* modificare v 2.0.46 ^
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_responsabil.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_responsabil.SetFocus()
|
||||
Case Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
If m.llAviz
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
Endif
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Otherwise
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endcase
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_valuta
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
loCauta = caut_valuta(1,.F.,.T.)
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_valuta)
|
||||
poDate.id_valuta = loCauta.id_valuta
|
||||
poDate.nume_valuta = loCauta.nume_val
|
||||
|
||||
toForm.ct_clb_valuta.Refresh()
|
||||
If Type('toForm.clb_zi_curs.visible')<>'U'
|
||||
toForm.clb_zi_curs.SetFocus()
|
||||
Else
|
||||
toForm.clb_serie_act1.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_venchelt
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
Local loCauta
|
||||
LOCAL lnPornire, llDesktop, lnTip, lnId, llToateIreg, llNou, lcFiltruOriginal
|
||||
lnPornire = 0
|
||||
llDesktop = .F.
|
||||
lnTip = 2 && venituri
|
||||
lnId = 0
|
||||
llToateIreg = .F.
|
||||
llNou = .T.
|
||||
lcFiltruOriginal = ''
|
||||
loCauta = caut_venchelt(m.lnPornire, m.llDesktop, m.lnTip, m.lnId, m.llToateIreg, m.llNou, m.lcFiltruOriginal)
|
||||
|
||||
If gnButon = 1
|
||||
poDate.id_venchelt = loCauta.id_venchelt
|
||||
poDate.venchelt = loCauta.explicatie
|
||||
Else
|
||||
poDate.id_venchelt = Null
|
||||
poDate.venchelt = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_venchelt.Refresh()
|
||||
Do Case
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_responsabil.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_responsabil.SetFocus()
|
||||
Case Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
If m.llAviz
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
Endif
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Otherwise
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endcase
|
||||
Endproc
|
||||
|
||||
Procedure do_verifica
|
||||
Lparameters toForm
|
||||
Local loDate As "empty"
|
||||
Local lnOptiune, lnRaspuns, loPartener
|
||||
|
||||
lnOptiune = 1
|
||||
loPartener = Null
|
||||
loDate = Createobject("empty")
|
||||
|
||||
AddProperty(loDate, "denumire", poDate.nume_client)
|
||||
AddProperty(loDate, "cod_fiscal", poDate.cod_fiscal)
|
||||
AddProperty(loDate, "tip_verificare", "ANAF_SERVICIU_WEB")
|
||||
|
||||
lnRaspuns = VerificaCodFiscal(loDate, @lnOptiune, @loPartener)
|
||||
Endproc
|
||||
|
||||
Procedure valideaza_antet
|
||||
Lparameters toForm
|
||||
Local plReturn,lcFacturi_dublate, llCopiere, llAviz
|
||||
Store .T. To plReturn
|
||||
llAviz = This.EsteAviz()
|
||||
llCopiere = toForm.lCopiere && copiere factura/aviz
|
||||
|
||||
Do Case
|
||||
Case Empty(poDate.dataireg)
|
||||
amessagebox("Nu ati completat data inregistrarii!",48,"Atentie")
|
||||
toForm.clb_dataireg.SetFocus()
|
||||
plReturn = .F.
|
||||
Case Empty(poDate.dataact)
|
||||
amessagebox("Nu ati completat data documentului!",48,"Atentie")
|
||||
toForm.clb_dataact.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And Empty(poDate.datascad)
|
||||
amessagebox("Nu ati completat data scadenta!",48,"Atentie")
|
||||
toForm.clb_data_scadenta.SetFocus()
|
||||
plReturn = .F.
|
||||
Case Isnull(poDate.id_fdoc) Or Empty(poDate.id_fdoc)
|
||||
amessagebox("Nu ati ales felul documentului!",48,"Atentie")
|
||||
toForm.clb_fdoc.SetFocus()
|
||||
plReturn = .F.
|
||||
*!* modificare v 2.0.56
|
||||
Case !m.llAviz And poDate.in_valuta = 1 And Empty(Nvl(poDate.zi_curs,{})) And Type('toForm.clb_zi_curs.visible')<>'U'
|
||||
*!* Case poDate.in_valuta = 1 And Empty(Nvl(poDate.zi_curs,{}))
|
||||
*!* modificare v 2.0.56 ^
|
||||
amessagebox("Nu ati completat ziua cursului valutar!",48,"Atentie")
|
||||
toForm.clb_zi_curs.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And poDate.in_valuta = 1 And Empty(Nvl(poDate.id_valuta,0))
|
||||
amessagebox("Nu ati completat valuta!",48,"Atentie")
|
||||
toForm.ct_clb_valuta.SetFocus()
|
||||
plReturn = .F.
|
||||
Case Empty(poDate.nract)
|
||||
amessagebox("Nu ati completat numarul documentului!",48,"Atentie")
|
||||
toForm.clb_nract.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !Between(poDate.dataireg,Date(gnAn,gnLuna,1),Gomonth(Date(gnAn,gnLuna,1),1)-1)
|
||||
amessagebox("Data inregistrarii trebuie sa fie din luna "+Alltrim(Str(gnLuna))+"/"+Alltrim(Str(gnAn))+" !",48,"Atentie")
|
||||
toForm.clb_dataireg.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And poDate.datascad<poDate.dataact
|
||||
amessagebox("Data scadenta trebuie sa fie mai mare sau egala cu data documentului!",48,"Atentie")
|
||||
toForm.clb_data_scadenta.SetFocus()
|
||||
plReturn = .F.
|
||||
Case poDate.dataact>poDate.dataireg
|
||||
amessagebox("Data documentului trebuie sa fie mai mica sau egala cu data inregistrarii!",48,"Atentie")
|
||||
toForm.clb_dataact.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And (Empty(poDate.id_client) Or Isnull(poDate.id_client)) && aviz: fara validare client
|
||||
amessagebox("Nu ati ales clientul!",48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And Empty(Nvl(poDate.descriere,[])) And poDate.tip = 7
|
||||
amessagebox("Nu ati ales factura!",48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And Empty(Nvl(poDate.descriere,[])) And m.llCopiere
|
||||
amessagebox("Nu ati ales factura de copiat!",48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
Case m.llAviz And Empty(Nvl(poDate.descriere,[])) And m.llCopiere
|
||||
amessagebox("Nu ati ales avizul de copiat!",48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
*!* modificare v 2.0.56
|
||||
Case !m.llAviz And Empty(Nvl(poDate.descriere,[])) And Inlist(poDate.tip,8,9)
|
||||
amessagebox("Nu ati ales factura/facturile pentru care se face returul!",48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
*!* modificare v 2.0.56 ^
|
||||
Case !m.llAviz And Empty(Nvl(poDate.listaid,[])) And !Inlist(poDate.tip,1,5,7,8,9,10,48,49) && modificare : am adaugat 10 ( v 2.0.56 ), 48 ( v 2.0.93 ), 49 ( v 2.0.95 )
|
||||
Do Case
|
||||
Case Inlist(poDate.tip, 2, 6, 52)
|
||||
lcMesaj = [Nu ati ales contractul!]
|
||||
Case poDate.tip = 3
|
||||
lcMesaj = [Nu ati ales comanda!]
|
||||
Case poDate.tip = 4
|
||||
lcMesaj = [Nu ati ales avizul!]
|
||||
Case poDate.tip = 45 && modificare v 2.0.87
|
||||
lcMesaj = [Nu ati ales locatia!]
|
||||
Endcase
|
||||
amessagebox(lcMesaj,48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
Case m.llAviz And Empty(Nvl(poDate.listaid,[])) And Inlist(poDate.tip,21,23,25,26,28,41,42,47) && modificare v 2.0.93 : am adaugat 47
|
||||
Do Case
|
||||
Case INLIST(poDate.tip,21,25,28,42,47) && modificare v 2.0.93 : am adaugat 47
|
||||
lcMesaj = [Nu ati ales comanda!]
|
||||
Case poDate.tip = 23
|
||||
lcMesaj = [Nu ati ales gestiunea destinatie!]
|
||||
*!* modificare v 2.0.16
|
||||
Case poDate.tip = 41
|
||||
lcMesaj = [Nu ati ales gestiunea catre care se face returul!]
|
||||
*!* modificare v 2.0.16 ^
|
||||
Case poDate.tip = 26
|
||||
lcMesaj = [Nu ati ales contractul!]
|
||||
Endcase
|
||||
amessagebox(lcMesaj,48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
Case m.llAviz And Empty(Nvl(poDate.id_pol,0)) And InList(poDate.tip,23,41)
|
||||
amessagebox("Nu ati ales politica de preturi!",48,"Atentie")
|
||||
toForm.ct_clb_politici_preturi.SetFocus()
|
||||
plReturn = .F.
|
||||
Otherwise
|
||||
*!* modificare v 2.0.46
|
||||
*!* plReturn = .T.
|
||||
lcFacturi_dublate = facturi_duplicate(Iif(m.llAviz,'418','4111'), 0, poDate.serie_act, poDate.nract, [])
|
||||
If !Empty(lcFacturi_dublate)
|
||||
lnRaspuns = amessagebox(lcFacturi_dublate + Chr(13)+"Doriti sa continuati?",4+32,Iif(m.llAviz,"Avize dublate","Facturi dublate"))
|
||||
plReturn = (m.lnRaspuns = 6)
|
||||
Endif
|
||||
*!* modificare v 2.0.46 ^
|
||||
|
||||
* Daca FACTURA si clientul se numeste "CLIENT"[I DIVERSI]
|
||||
* Atentionez ca ar trebui sa se aleaga "BON FISCAL" in loc de "FACTURA"
|
||||
IF poDate.nIdTipDoc = poDate.nIdTipDocFactura AND 'CLIENT'$UPPER(NVL(poDate.nume_client,''))
|
||||
lnRaspuns = amessagebox('Ati ales clientul ' + ALLTRIM(poDate.nume_client) + ' si Tip document = FACTURA in loc de BON FISCAL' + Chr(13)+"Doriti sa continuati?",4+32,"Bon Fiscal")
|
||||
plReturn = (m.lnRaspuns = 6)
|
||||
ENDIF
|
||||
Endcase
|
||||
Return plReturn
|
||||
Endproc
|
||||
|
||||
Function alege_tipdoc
|
||||
Lparameters tcTipDoc
|
||||
LOCAL lnIdTipDoc, lcTipDoc
|
||||
lcTipDoc = UPPER(m.tcTipDoc)
|
||||
|
||||
lnIdTipDoc = IIF(m.lcTipDoc = 'FACTURA', poDate.nIdTipDocFactura, ;
|
||||
IIF(m.lcTipDoc = 'PROFORMA', poDate.nIdTipDocProforma, ;
|
||||
IIF(m.lcTipDoc = 'BON FISCAL', poDate.nIdTipDocBonFiscal, ;
|
||||
IIF(m.lcTipDoc = 'AVIZ', poDate.nIdTipDocAvizExpeditie, poDate.nIdTipDocFactura))))
|
||||
|
||||
*!* poDate.nIdTipDocFactura = 5
|
||||
*!* poDate.nIdTipDocProforma = 23
|
||||
*!* poDate.nIdTipDocBonFiscal = 3
|
||||
*!* poDate.nIdTipDocAvizExpeditie = 6
|
||||
|
||||
*!* poDate.eProforma = IIF(m.lnIdTipDoc = poDate.nIdTipDocProforma, 1, 0)
|
||||
*!* poDate.eBonFiscal = IIF(m.lnIdTipDoc = poDate.nIdTipDocBonFiscal, 1, 0)
|
||||
poDate.initializeaza_setari_document(IIF(m.lnIdTipDoc = poDate.nIdTipDocBonFiscal, -101, IIF(m.lnIdTipDoc = poDate.nIdTipDocProforma, -102, poDate.Tip)))
|
||||
Return m.lnIdTipDoc
|
||||
Endfunc
|
||||
|
||||
Function schimba_tipdoc
|
||||
Lparameters tnIdTipDoc
|
||||
IF poDate.nIdTipDoc = m.tnIdTipDoc
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
poDate.nract = 0
|
||||
poDate.serie_act = ""
|
||||
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
poDate.nIdTipDoc = m.tnIdTipDoc && se initializeaza automat si .eBonFiscal, .eProforma
|
||||
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc) && 1 = CU SERIE, 2 = FARA SERIE CU PLAJE, 3 = CU SERIE SI PLAJE
|
||||
Return .T.
|
||||
Endfunc
|
||||
|
||||
Enddefine
|
||||
@@ -55,6 +55,15 @@
|
||||
*!* 14.04.2026
|
||||
*!* + oDateFactura.cod_fiscal
|
||||
|
||||
*!* 31.08.2026
|
||||
*!* agent
|
||||
*!* creeaza_facturacrs + campul procdisc (procent discount calculat, needitabil) pentru S4c
|
||||
|
||||
*!* 04.09.2026
|
||||
*!* agent
|
||||
*!* prelucreaza_facturacrs + vpretctva/vdiscountctva in lista de insert (pretul si discountul
|
||||
*!* unitar in valuta cu TVA inclus, care plecau 0 la Oracle la reemiterea documentelor in valuta)
|
||||
|
||||
***************************************************************************************************************
|
||||
**** Clase:
|
||||
**** oDateFactura
|
||||
@@ -202,6 +211,7 @@ Define Class oDateFactura As Custom
|
||||
tva_incasare = 0 && modificare ROAGEST v 2.2.0
|
||||
id_facturare = NULL && id adresa facturare
|
||||
adresa_facturare = '' && adresa factuare text
|
||||
motiv_discount = '' && motivul discountului pe factura, valabil doar in sesiunea de editare
|
||||
nListareDetaliata = 0 && articolele se listeaza cumulat dupa cantitate sau detaliat, asa cum au fost adaugate pe factura
|
||||
nListareSilentioasa = 0 && listare fara previzualizare
|
||||
nListareJustPDF = 0 && listare doar pdf
|
||||
@@ -219,13 +229,19 @@ Define Class oDateFactura As Custom
|
||||
eFactura = 0 && 0/1 = se transmite in borderoul eFactura
|
||||
sold_lei = 0 && soldul total pe client la emiterea facturii in lei
|
||||
sold_valuta = 0 && soldul total pe client la emiterea facturii in valuta (nediferentiat pe valuta)
|
||||
|
||||
lProformaSursa = .F. && documentul a fost copiat dintr-o proforma
|
||||
nIdProformaSursa = 0 && id_vanzare al proformei sursa, pentru legatura VANZARI_CORESP
|
||||
lEditare = .F. && document existent deschis in editare, nu document nou
|
||||
id_ruta = NULL && ID_RUTA al documentului deschis in editare
|
||||
cListaSursa = [] && comanda/contract sursa a documentului deschis in editare
|
||||
cListaSursaAvize = [] && avizele sursa ale documentului deschis in editare
|
||||
|
||||
Procedure Init
|
||||
Lparameters tnIdSet, tnTip
|
||||
Lparameters tnIdSet, tnTip, toSursa
|
||||
&& 0,0 - la listare
|
||||
&& id_set,tip
|
||||
|
||||
Local ldData
|
||||
Local ldData, loSursa
|
||||
If !Empty(m.tnIdSet)
|
||||
&& modificare ROAFACTURARE v 2.0.58
|
||||
Use In (SELECT('crsoDateDocAtasate'))
|
||||
@@ -258,22 +274,27 @@ Define Class oDateFactura As Custom
|
||||
.discount_evidentiat = IIF(TYPE('gnDiscountEvidentiat') = 'N', m.gnDiscountEvidentiat, 1)
|
||||
.nRelistare = 0 && modificare ROAFACTURARE v 2.0.58
|
||||
|
||||
If INLIST(m.tnTip, 2, 6, 52) And Type('goContract') <> 'U' && FACTURARE DIN ROACONTRACTE
|
||||
.id_client = goContract.id_part
|
||||
.nume_client = goContract.denumire
|
||||
.cod_fiscal = ALLTRIM(NVL(goContract.cod_fiscal, ''))
|
||||
.listaid = goContract.id_ctr
|
||||
.descriere = goContract.contract
|
||||
.id_sectie = goContract.id_sectie
|
||||
.sectie = goContract.sectie
|
||||
.id_responsabil = goContract.id_responsabil
|
||||
.responsabil = goContract.responsabil
|
||||
.id_valuta = goContract.id_valuta
|
||||
.nume_valuta = goContract.nume_val
|
||||
loSursa = Iif(Type('toSursa') = 'O', toSursa, Null)
|
||||
|
||||
If INLIST(m.tnTip, 2, 6, 52) And (Type('loSursa') = 'O' Or Type('goContract') <> 'U') && FACTURARE DIN ROACONTRACTE
|
||||
If Type('loSursa') <> 'O'
|
||||
loSursa = goContract
|
||||
Endif
|
||||
.id_client = loSursa.id_part
|
||||
.nume_client = loSursa.denumire
|
||||
.cod_fiscal = ALLTRIM(NVL(loSursa.cod_fiscal, ''))
|
||||
.listaid = loSursa.id_ctr
|
||||
.descriere = loSursa.contract
|
||||
.id_sectie = loSursa.id_sectie
|
||||
.sectie = loSursa.sectie
|
||||
.id_responsabil = loSursa.id_responsabil
|
||||
.responsabil = loSursa.responsabil
|
||||
.id_valuta = loSursa.id_valuta
|
||||
.nume_valuta = loSursa.nume_val
|
||||
|
||||
lcSql = [ select id_ctr, contract, numar, data, denumire, scadenta_incasare, opt_facturare, text_standard, afisare_scadenta ]+;
|
||||
[ FROM fact_vcontracte ]+;
|
||||
[ where id_ctr = ] + Alltrim(Str(goContract.id_ctr))
|
||||
[ where id_ctr = ] + Alltrim(Str(loSursa.id_ctr))
|
||||
lnSucces = goExecutor.oExecute(lcSql,'crsCtrTemp')
|
||||
|
||||
If lnSucces < 0
|
||||
@@ -298,18 +319,23 @@ Define Class oDateFactura As Custom
|
||||
|
||||
|
||||
|
||||
If tnTip = 3 And Type('goComanda') = 'O' && FACTURARE DIN ROACOMENZI
|
||||
.id_client = goComanda.id_part
|
||||
.nume_client = ALLTRIM(goComanda.nume)
|
||||
.cod_fiscal = ALLTRIM(NVL(goComanda.cod_fiscal, ''))
|
||||
.listaid = goComanda.id_comanda
|
||||
.descriere = goComanda.nr_comanda
|
||||
.id_sectie = goComanda.id_sectie
|
||||
loSursa = Iif(Type('toSursa') = 'O', toSursa, Null)
|
||||
|
||||
If tnTip = 3 And (Type('loSursa') = 'O' Or Type('goComanda') = 'O') && FACTURARE DIN ROACOMENZI
|
||||
If Type('loSursa') <> 'O'
|
||||
loSursa = goComanda
|
||||
Endif
|
||||
.id_client = loSursa.id_part
|
||||
.nume_client = ALLTRIM(loSursa.nume)
|
||||
.cod_fiscal = ALLTRIM(NVL(loSursa.cod_fiscal, ''))
|
||||
.listaid = loSursa.id_comanda
|
||||
.descriere = loSursa.nr_comanda
|
||||
.id_sectie = loSursa.id_sectie
|
||||
*!* .sectie = goComanda.sectie
|
||||
*!* .id_responsabil = goComanda.id_responsabil
|
||||
*!* .responsabil = goComanda.responsabil
|
||||
|
||||
lcSql = [ select sectie from nom_sectii where id_sectie = ] + ALLTRIM(STR(goComanda.id_sectie))
|
||||
lcSql = [ select sectie from nom_sectii where id_sectie = ] + ALLTRIM(STR(loSursa.id_sectie))
|
||||
lnSucces = goExecutor.oExecute(lcSql,'crsComTemp')
|
||||
|
||||
If lnSucces < 0
|
||||
@@ -385,6 +411,8 @@ Define Class oDateFactura As Custom
|
||||
.nrinmat = ALLTRIM(NVL(toDateAnterior.nrinmat, ''))
|
||||
.id_masina = toDateAnterior.id_masina
|
||||
.listaid = toDateAnterior.id_vanzare
|
||||
.lProformaSursa = PEMSTATUS(toDateAnterior,'eproforma',5) And Nvl(toDateAnterior.eproforma,0) = 1
|
||||
.nIdProformaSursa = Iif(This.lProformaSursa, toDateAnterior.id_vanzare, 0)
|
||||
.descriere = Alltrim(Alltrim(Nvl(toDateAnterior.serie_act,[]))+[ ]+Alltrim(Str(toDateAnterior.numar_act,14,0)))
|
||||
.id_client = toDateAnterior.id_part
|
||||
.nume_client = toDateAnterior.client
|
||||
@@ -570,6 +598,7 @@ Define Class oDateFactura As Custom
|
||||
.sumavorbe = [] && modificare ROAFACTURARE v 2.0.78
|
||||
.coeficient_k = 0 && modificare ROAFACTURARE v 2.0.93
|
||||
.explicatia4 = [] && modificare ROACONTRACTE v 2.0.42
|
||||
.motiv_discount = ''
|
||||
.id_ordl = NULL && modificare ROAAUTO v 2.0.33
|
||||
.id_facturare = NULL
|
||||
.nListareDetaliata = 0
|
||||
@@ -577,6 +606,8 @@ Define Class oDateFactura As Custom
|
||||
.nListareJustPDF = 0 && listare doar pdf
|
||||
.oClient = NULL
|
||||
.lCopiere = .F. && copiere factura/aviz
|
||||
.lProformaSursa = .F.
|
||||
.nIdProformaSursa = 0
|
||||
.nIdBeneficiar = Null
|
||||
.nTipFactura = NULL && tip intern factura (ex: ACN 0=TRANZIT/1=CHEIAJ/3=CHIRII/5=APA/6=PENALITATI)
|
||||
.id_util = NULL && id utilizator
|
||||
@@ -762,6 +793,32 @@ Function recalculeaza_pret_vanzare_lei
|
||||
Endfunc && recalculeaza_pret_vanzare_lei
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
Function deriva_cont_venit_fara_pol
|
||||
* S4g: contul de venit pentru linia fara politica de pret - coresp_cont_venchelt pe contul de gestiune, apoi nom_articole.cont daca incepe cu 6/7, altfel 704
|
||||
Lparameters tnIdArticol,tcContGestiune
|
||||
Local lcCont,lcSql,lnSucces
|
||||
lcCont = [704]
|
||||
If Isnull(tnIdArticol)
|
||||
Return lcCont
|
||||
Endif
|
||||
lcSql = [select nvl((select cont_venit from vcoresp_cont_venchelt where cont = '] + ;
|
||||
OracleSpecialCharacters(Alltrim(Nvl(tcContGestiune,[]))) + [' and cont_venit is not null),] + ;
|
||||
[case when substr(cont,1,1) in ('6','7') then cont else '704' end) as cont_venit ] + ;
|
||||
[from nom_articole where id_articol = ] + Alltrim(Str(tnIdArticol))
|
||||
If Used('crscontvenit')
|
||||
Use In crscontvenit
|
||||
Endif
|
||||
lnSucces = goExecutor.oExecute(lcSql,[crscontvenit])
|
||||
If lnSucces >= 0 And Used('crscontvenit') And Reccount('crscontvenit') > 0
|
||||
lcCont = Alltrim(Nvl(crscontvenit.cont_venit,[704]))
|
||||
Endif
|
||||
If Used('crscontvenit')
|
||||
Use In crscontvenit
|
||||
Endif
|
||||
Return lcCont
|
||||
Endfunc && deriva_cont_venit_fara_pol
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
*!* Function recalculeaza_pret_vanzare_lei_set
|
||||
*!* Lparameters tcTabel,tnCurs
|
||||
*!* Local llReturn
|
||||
@@ -1775,7 +1832,7 @@ Procedure creeaza_facturacrs
|
||||
Create Cursor (tcNumeCursor) (id_c N(20),id_temp N(20),id_articol N(20) null,id_pol N(20) Null,id_gestiune N(20),Cont c(4),um c(10) Null, cod_um_iso c(5) null, ;
|
||||
id_valuta N(10),gestionabil N(1),tip_valuta N(1),Curs N(20,4),multiplicator N(10),id_jtva_coloana N(20) Null,id_jtva_coloana_ex N(20) Null,codmat c(100),codmatc c(100),codmatf c(100),codbare c(50),;
|
||||
pret_achizitie N(20,max(gnPPret,4)),denumire c(100),pretftva N(20,max(gnPPretV,precizie_max_pret_vz)),pretctva N(20,max(gnPPretV,precizie_max_pret_vz)),valftva N(20,max(gnPc,4)), valtva N(20,max(gnPc,4)),valctva N(20,max(gnPc,4)),;
|
||||
cantitate N(20,max(gnPCant,4)),discountftva N(20,max(gnPPretV,4)), discountctva N(20,max(gnPPretV,precizie_max_pret_vz)), valdiscountftva N(20,max(gnPc,4)),valdiscounttva N(20,max(gnPc,4)),;
|
||||
cantitate N(20,max(gnPCant,4)),discountftva N(20,max(gnPPretV,4)), discountctva N(20,max(gnPPretV,precizie_max_pret_vz)), procdisc N(10,2), valdiscountftva N(20,max(gnPc,4)),valdiscounttva N(20,max(gnPc,4)),;
|
||||
valdiscountctva N(20,max(gnPc,4)),valdiminuatftva N(20,max(gnPc,4)),valdiminuattva N(20,max(gnPc,4)),valdiminuatctva N(20,max(gnPc,4)),proc_Tvav N(20,4),cu_tva N(1), lot C(20) null, serie c(100) Null,;
|
||||
vpretftva N(20,max(gnPVal,precizie_max_pret_vz)),vpretctva N(20,max(gnPVal,precizie_max_pret_vz)),vvalftva N(20,max(gnPVal,4)),vvaltva N(20,max(gnPVal,4)),vvalctva N(20,max(gnPVal,4)),;
|
||||
vdiscountftva N(20,max(gnPVal,4)),vdiscountctva N(20,max(gnPVal,4)),vvaldiscountftva N(20,max(gnPVal,4)),vvaldiscounttva N(20,max(gnPVal,4)),;
|
||||
@@ -1806,7 +1863,7 @@ Procedure prelucreaza_facturacrs
|
||||
Insert Into (tcCursorDestinatie) (id_articol,id_temp,explicatie,denumire,lot,serie,codmat,codmatc,id_jtva_coloana,id_jtva_coloana_ex,taxcode,codmatf,codbare,pret_achizitie,cantitate,proc_Tvav,um,cod_um_iso,;
|
||||
cu_tva,pretctva,discountctva,valctva,valdiscountctva,valdiminuatctva,pretftva,;
|
||||
valftva,valtva,discountftva,valdiscountftva,valdiscounttva,valdiminuatftva,;
|
||||
valdiminuattva,vpretftva,vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,;
|
||||
valdiminuattva,vpretftva,vpretctva,vvalftva,vvaltva,vdiscountftva,vdiscountctva,vvaldiscountftva,vvaldiscounttva,;
|
||||
vvaldiminuatftva,vvaldiminuattva,id_set_fact,gestionabil,id_ctr,numar_contract,id_valuta,tip_valuta,Curs,multiplicator,nume_val,codnc8,codcpv) ;
|
||||
SELECT CAST(IIF(TYPE(tcCursorSursa+".id_articol")='U',0,id_articol) as N(20)) as id_articol,id_vanzare_det As id_temp,;
|
||||
explicatie,denumire,lot,serie,Nvl(codmat,Space(50)) As codmat,IIF(TYPE(tcCursorSursa + '.codmatc') = 'C', Nvl(codmatc,Space(50)), SPACE(50)) As codmatc,id_jtva_coloana,id_jtva_coloana_ex,taxcode,;
|
||||
@@ -1853,6 +1910,8 @@ Procedure prelucreaza_facturacrs
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(Pret_val,gnPVal),;
|
||||
Round(Round(Pret_val,gnPVal)/proc_Tvav,gnPVal)) As vpretftva,;
|
||||
Iif(pret_cu_tva = 1,Round(Pret_val,gnPVal),;
|
||||
Round(Pret_val,gnPVal)+Round(Round(Pret_val,gnPVal)*(proc_Tvav-1),gnPVal)) As vpretctva,;
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal),;
|
||||
ROUND(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal) - ;
|
||||
@@ -1863,6 +1922,7 @@ Procedure prelucreaza_facturacrs
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(discount_unitar_val,gnPVal),;
|
||||
Round(Round(discount_unitar_val,gnPVal)/proc_Tvav,gnPVal)) As vdiscountftva,;
|
||||
Iif(pret_cu_tva = 1,Round(discount_unitar_val,gnPVal),0.000) As vdiscountctva,;
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal),;
|
||||
ROUND(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal) - ;
|
||||
@@ -2222,3 +2282,25 @@ Procedure completeaza_explicatie_contract
|
||||
Release lnPozI,lnPozF,lnIdCtr, lnIdCtrPrec, lnDimArray,lnIndex,lcNrContract,lnIndexMax
|
||||
Endproc && completeaza_explicatie_contract
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
******************************* INCEPUT: scrie_legatura_proforma ****************************************
|
||||
Function scrie_legatura_proforma
|
||||
Local lcSql, lnSucces, llReturn
|
||||
llReturn = .T.
|
||||
* legatura proforma -> factura in VANZARI_CORESP (TIP = 4); clistaid se trimite explicit,
|
||||
* nu se citeste din starea sesiunii, pentru ca poDate.listaid poate fi rescris de articolele retur
|
||||
If Type('poDate') = 'O' And poDate.lProformaSursa And Nvl(poDate.nIdProformaSursa,0) > 0 ;
|
||||
And Between(Nvl(poDate.nid_vanzare,0), 1, 9999999998)
|
||||
lcSql = [begin pack_facturare.nid_vanzare := ] + Alltrim(Str(poDate.nid_vanzare,20,0)) + [;] + ;
|
||||
[ pack_facturare.clistaid := '] + Alltrim(Str(poDate.nIdProformaSursa,20,0)) + [';] + ;
|
||||
[ pack_facturare.scrie_corespondente_vanzari(4); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare")
|
||||
llReturn = .F.
|
||||
Endif
|
||||
Endif
|
||||
Return llReturn
|
||||
Endfunc && scrie_legatura_proforma
|
||||
******************************* SFARSIT: scrie_legatura_proforma *****************************************
|
||||
*********************************************************************************************************
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
*** ofacturare_editare
|
||||
|
||||
*!* 11.08.2026
|
||||
*!* 06.09.2026
|
||||
*!* marius.mutu
|
||||
*!* helpere comune pentru editarea unei facturi emise: garda eFactura, cursoarele notei si ale rulajelor,
|
||||
*!* helpere comune pentru editarea unei facturi emise: garda eFactura, garda pe urmasi in lantul
|
||||
*!* aviz -> factura -> retur (VANZARI_CORESP), incarcarea antetului unui document existent (FACT_VFACTURI)
|
||||
*!* intr-un oDateFactura nou (tnIdSet=0, lEditare=.T.), cu discountul de document ca suma si lista de
|
||||
*!* avize sursa (VANZARI_CORESP, TIP=1), liniile unui document existent (VVANZARI_ARTICOLE) direct in
|
||||
*!* crsfactura, cu gestionabil din nomenclatorul curent, contul liniei din document, pretul de
|
||||
*!* vanzare al lotului reluat din rulajul original (RUL) numai pe gestiunile la pret de vanzare
|
||||
*!* (nr_pag 6/7, ca in STOC) si legatura de rezervare (id_part_rez/id_lucrare_rez) tot din RUL,
|
||||
*!* si zi_curs/dataact/datascad normalizate la Date (Ttod) din data_act/data_scad, care vin din
|
||||
*!* Oracle ca DateTime, cursoarele notei si ale rulajelor,
|
||||
*!* randul de vanzare corespunzator notei (inclusiv valuta documentului: in_valuta/id_valuta/nume_val,
|
||||
*!* si id_fact - pentru garda eFactura pe pagina de articole),
|
||||
*!* liniile de articole pentru pagina de articole factura (inclusiv in_stoc si id_vanzare_set/pret_achizitie,
|
||||
@@ -13,7 +21,10 @@
|
||||
*!* compararea/aplicarea sincronizarii cantitate/pret intre rulaje (trul) si articolele facturii (tvd),
|
||||
*!* agregate pe id_articol, in ambele sensuri (documentele in valuta raman doar semnalate, neaplicate);
|
||||
*!* pe linia de articol se poate alege si explicatia TVA (filtrata pe cota liniei), care recoreleaza
|
||||
*!* codul SAF-T, iar liniile deja salvate se actualizeaza cu toate campurile pe care grila le schimba
|
||||
*!* codul SAF-T, iar liniile deja salvate se actualizeaza cu toate campurile pe care grila le schimba,
|
||||
*!* si oglindirea in IncarcaAntetFacturaEditare a copierii incasat->incasatCARD facuta la emitere
|
||||
*!* directa pentru documentele cu tip_incasare=3 (POS/Card), ca reemiterea sa nu mai gaseasca
|
||||
*!* lista de incasare goala in do_scrie_factura
|
||||
|
||||
|
||||
*!* parametru: id_fact
|
||||
@@ -30,6 +41,257 @@ FUNCTION EsteInEFactura
|
||||
ENDFUNC && EsteInEFactura
|
||||
|
||||
|
||||
*!* parametru: id_vanzare; verifica daca documentul are urmasi (aviz/factura/retur) prin VANZARI_CORESP
|
||||
FUNCTION DocumentAreUrmasi
|
||||
LPARAMETERS tnIdVanzare
|
||||
|
||||
LOCAL lcSql, lnNr, llSucces
|
||||
lnNr = 0
|
||||
lcSql = [select count(*) as lnnr from vanzari_coresp where sters = 0 and (] + ;
|
||||
[(tip in (1,2,3) and id_vanzare_aviz = ] + Alltrim(Str(Nvl(m.tnIdVanzare,0))) + [) or ] + ;
|
||||
[(tip = 2 and id_vanzare_aviz in (select id_vanzare_aviz from vanzari_coresp ] + ;
|
||||
[where sters = 0 and tip = 1 and id_vanzare_fact = ] + Alltrim(Str(Nvl(m.tnIdVanzare,0))) + [)))]
|
||||
llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @lnNr)
|
||||
|
||||
RETURN (Nvl(m.lnNr,0) > 0)
|
||||
ENDFUNC && DocumentAreUrmasi
|
||||
|
||||
|
||||
*!* parametru: id_vanzare al unui document existent; iesire prin referinta - tnDiscountRon/tnDiscountValuta,
|
||||
*!* discountul de document ca suma, in lei si in valuta; construieste oDateFactura cu tnIdSet=0, lEditare=.T.
|
||||
*!* intoarce oDateFactura populat, sau .NULL. daca documentul nu exista/e sters sau la eroare Oracle
|
||||
FUNCTION IncarcaAntetFacturaEditare
|
||||
LPARAMETERS tnIdVanzare, tnDiscountRon, tnDiscountValuta
|
||||
|
||||
LOCAL lcSql, lnSucces, loDate, lcListaSursa, lnDiscount, lnDiscountVal
|
||||
tnDiscountRon = 0
|
||||
tnDiscountValuta = 0
|
||||
|
||||
IF Used('v_antet_editare')
|
||||
Use In v_antet_editare
|
||||
ENDIF
|
||||
|
||||
lcSql = [select id_vanzare, tip, eproforma, serie_act, numar_act, data_act, data_scad, discount, ] + ;
|
||||
[discount_evidentiat, delegat, id_delegat, bidelegat, cnpdelegat, nrinmat, id_masina, nume_agent, ] + ;
|
||||
[id_agent, adresa_facturare, id_facturare, dataora_exp, text_aditional, listare_detaliata, tip_saft, ] + ;
|
||||
[efactura, id_ruta, in_valuta, id_valuta, nume_val, curs, multiplicator, id_part, client, cod_fiscal, ] + ;
|
||||
[incasat, nr_incasare, serie_chit, tip_incasare, ] + ;
|
||||
[id_gestiune, id_comanda, id_ctr from fact_vfacturi where id_vanzare = ] + Alltrim(Str(Nvl(m.tnIdVanzare,0))) + [ and sters = 0]
|
||||
|
||||
lnSucces = goExecutor.oExecute(lcSql,[v_antet_editare])
|
||||
goExecutor.oReset()
|
||||
|
||||
IF lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare")
|
||||
RETURN .NULL.
|
||||
ENDIF
|
||||
|
||||
IF Reccount('v_antet_editare') <> 1
|
||||
Use In v_antet_editare
|
||||
RETURN .NULL.
|
||||
ENDIF
|
||||
|
||||
SELECT v_antet_editare
|
||||
loDate = Createobject('oDateFactura',0,0)
|
||||
loDate.lEditare = .T.
|
||||
loDate.zi_curs = Ttod(data_act) && Init cheama citeste_cursuri_zi(poDate.zi_curs), altfel ramane {} si Oracle da ORA-01840
|
||||
|
||||
loDate.tip = tip
|
||||
loDate.nIdTipDoc = Iif(Nvl(eproforma,0) = 1, loDate.nIdTipDocProforma, loDate.nIdTipDocFactura)
|
||||
loDate.serie_act = Nvl(serie_act,[])
|
||||
loDate.nract = Nvl(numar_act,0)
|
||||
loDate.dataact = Ttod(data_act)
|
||||
loDate.datascad = Ttod(data_scad)
|
||||
|
||||
loDate.discount_evidentiat = Nvl(discount_evidentiat,0)
|
||||
loDate.in_valuta = Nvl(in_valuta,0)
|
||||
IF loDate.in_valuta = 1
|
||||
loDate.id_valuta = id_valuta
|
||||
loDate.nume_valuta = Nvl(nume_val,[])
|
||||
loDate.Curs = Nvl(curs,1)
|
||||
loDate.multiplicator = Nvl(multiplicator,1)
|
||||
lnDiscountVal = Nvl(discount,0)
|
||||
lnDiscount = Round(lnDiscountVal * loDate.Curs / loDate.multiplicator, gnPPretV)
|
||||
ELSE
|
||||
lnDiscount = Nvl(discount,0)
|
||||
lnDiscountVal = 0
|
||||
ENDIF
|
||||
tnDiscountRon = lnDiscount
|
||||
tnDiscountValuta = lnDiscountVal
|
||||
|
||||
loDate.id_client = id_part
|
||||
loDate.nume_client = Nvl(client,[])
|
||||
loDate.cod_fiscal = Alltrim(Nvl(cod_fiscal,[]))
|
||||
loDate.id_gestiune_init = id_gestiune
|
||||
|
||||
loDate.incasat = Nvl(incasat,0)
|
||||
loDate.nr_incasare = Nvl(nr_incasare,0)
|
||||
loDate.serie_chit = Alltrim(Nvl(serie_chit,[]))
|
||||
loDate.ntip_incasare = Nvl(tip_incasare,0)
|
||||
IF loDate.ntip_incasare = 3
|
||||
loDate.incasatCARD = loDate.incasat
|
||||
loDate.incasat = 0
|
||||
ENDIF
|
||||
|
||||
loDate.id_delegat = id_delegat
|
||||
loDate.nume_delegat = Nvl(delegat,[])
|
||||
loDate.BIdelegat = Nvl(bidelegat,[])
|
||||
loDate.CNPdelegat = Nvl(cnpdelegat,[])
|
||||
loDate.id_masina = id_masina
|
||||
loDate.nrinmat = Nvl(nrinmat,[])
|
||||
loDate.id_agent = id_agent
|
||||
loDate.nume_agent = Nvl(nume_agent,[])
|
||||
loDate.id_facturare = id_facturare
|
||||
loDate.adresa_facturare = Nvl(adresa_facturare,[])
|
||||
loDate.dataora_exp = dataora_exp
|
||||
*!* Chr(170) e substitutul CR+LF scris la salvare (ofacturare.vc2:14281) - se inverseaza la incarcare
|
||||
loDate.text_aditional = Strtran(Nvl(text_aditional,[]), Chr(170), Chr(13)+Chr(10))
|
||||
loDate.nListareDetaliata = Nvl(listare_detaliata,0)
|
||||
loDate.tip_saft = Nvl(tip_saft,380)
|
||||
loDate.eFactura = Nvl(efactura,0)
|
||||
loDate.id_ruta = id_ruta
|
||||
|
||||
*!* sursa comanda/contract vine direct din antet - doar avizele trec prin VANZARI_CORESP
|
||||
DO CASE
|
||||
CASE !Empty(Nvl(id_comanda,0))
|
||||
lcListaSursa = Alltrim(Str(id_comanda))
|
||||
CASE !Empty(Nvl(id_ctr,0))
|
||||
lcListaSursa = Alltrim(Str(id_ctr))
|
||||
OTHERWISE
|
||||
lcListaSursa = []
|
||||
ENDCASE
|
||||
loDate.cListaSursa = lcListaSursa
|
||||
|
||||
Use In v_antet_editare
|
||||
|
||||
loDate.cListaSursaAvize = IncarcaListaAvizeSursa(m.tnIdVanzare)
|
||||
|
||||
RETURN loDate
|
||||
ENDFUNC && IncarcaAntetFacturaEditare
|
||||
|
||||
|
||||
*!* parametru: id_vanzare al facturii; intoarce lista (separata prin virgula) a id_vanzare ale avizelor
|
||||
*!* sursa (VANZARI_CORESP, TIP=1); lista goala daca documentul nu are avize sursa sau la eroare Oracle
|
||||
FUNCTION IncarcaListaAvizeSursa
|
||||
LPARAMETERS tnIdVanzare
|
||||
|
||||
LOCAL lcSql, lnSucces, lcLista
|
||||
lcLista = []
|
||||
|
||||
IF Used('v_avize_sursa')
|
||||
Use In v_avize_sursa
|
||||
ENDIF
|
||||
|
||||
lcSql = [select id_vanzare_aviz from vanzari_coresp where sters = 0 and tip = 1 and id_vanzare_fact = ] + ;
|
||||
Alltrim(Str(Nvl(m.tnIdVanzare,0)))
|
||||
lnSucces = goExecutor.oExecute(lcSql,[v_avize_sursa])
|
||||
goExecutor.oReset()
|
||||
|
||||
IF lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare")
|
||||
RETURN lcLista
|
||||
ENDIF
|
||||
|
||||
IF lnSucces > 0
|
||||
SELECT v_avize_sursa
|
||||
SCAN
|
||||
lcLista = lcLista + Iif(Empty(m.lcLista),[],[,]) + Alltrim(Str(id_vanzare_aviz))
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
Use In v_avize_sursa
|
||||
|
||||
RETURN lcLista
|
||||
ENDFUNC && IncarcaListaAvizeSursa
|
||||
|
||||
|
||||
*!* parametri: oDateFactura deja incarcat (antet), id_vanzare; incarca liniile nesterse din
|
||||
*!* VVANZARI_ARTICOLE in crsfactura (deschis READWRITE, gol la eroare Oracle); intoarce mereu .T.
|
||||
FUNCTION IncarcaLiniiFacturaEditare
|
||||
LPARAMETERS toDate, tnIdVanzare
|
||||
|
||||
LOCAL llInValuta, lnCursDoc, lnMultDoc, lnIdTemp, lnGestionabil, lcSql
|
||||
|
||||
llInValuta = (toDate.in_valuta = 1)
|
||||
lnCursDoc = Nvl(toDate.Curs,1)
|
||||
lnMultDoc = Nvl(toDate.multiplicator,1)
|
||||
|
||||
IncarcaArticoleFactura(m.tnIdVanzare, 'crsarticole_doc')
|
||||
|
||||
*!* pret/discount_unitar din view sunt in moneda documentului; prelucreaza_facturacrs le vrea in lei
|
||||
IF Used('crsarticole_editare')
|
||||
Use In crsarticole_editare
|
||||
ENDIF
|
||||
SELECT id_vanzare_det, id_articol, explicatie, Nvl(denumire,[]) As denumire, lot, serie, codmat, id_jtva_coloana, taxcode, ;
|
||||
pret_achizitie, cantitate, proc_tvav, pret_cu_tva, id_vanzare_set, id_gestiune, nume_gestiune, Cont, id_ctr, id_valuta, nume_val, in_stoc, ;
|
||||
id_pol, pretd, id_valutad, ;
|
||||
Nvl(curs, m.lnCursDoc) As curs, Nvl(multiplicator, m.lnMultDoc) As multiplicator, ;
|
||||
Iif(m.llInValuta, Round(pret * Nvl(curs, m.lnCursDoc) / Nvl(multiplicator, m.lnMultDoc), gnPPretV), pret) As pret, ;
|
||||
Iif(m.llInValuta, pret, 0) As pret_val, ;
|
||||
Iif(m.llInValuta, Round(discount_unitar * Nvl(curs, m.lnCursDoc) / Nvl(multiplicator, m.lnMultDoc), gnPPretV), discount_unitar) As discount_unitar, ;
|
||||
Iif(m.llInValuta, discount_unitar, 0) As discount_unitar_val, ;
|
||||
Iif(m.llInValuta,1,0) As tip_valuta, ;
|
||||
Cast(.Null. As N(10)) As id_jtva_coloana_ex, Space(50) As codmatf, Space(50) As codbare, Space(10) As um, Space(50) As numar_contract ;
|
||||
FROM crsarticole_doc INTO CURSOR crsarticole_editare READWRITE
|
||||
|
||||
creeaza_facturacrs('crsfactura')
|
||||
prelucreaza_facturacrs('crsarticole_editare','crsfactura',0,0,0)
|
||||
|
||||
*!* gestionabil vine din nomenclatorul curent, nu din id_gestiune; id_gestiune, nume_gestiune, Cont, id_pol/
|
||||
*!* pretd/id_valuta_d si vvaldiminuatctva (total in valuta cu tva, cf. oproceduri_facturare.prg:2282)
|
||||
*!* nu sunt in lista de insert a lui prelucreaza_facturacrs
|
||||
SELECT crsarticole_editare
|
||||
SCAN
|
||||
lnIdTemp = id_vanzare_det
|
||||
lnGestionabil = Iif(Nvl(in_stoc,0) <> 0, 1, 0)
|
||||
SELECT crsfactura
|
||||
REPLACE gestionabil WITH m.lnGestionabil, ;
|
||||
id_gestiune WITH Nvl(crsarticole_editare.id_gestiune, -1000), ;
|
||||
nume_gestiune WITH Nvl(crsarticole_editare.nume_gestiune, []), ;
|
||||
Cont WITH Nvl(crsarticole_editare.Cont, []), ;
|
||||
id_pol WITH crsarticole_editare.id_pol, ;
|
||||
pretd WITH crsarticole_editare.pretd, ;
|
||||
id_valuta_d WITH crsarticole_editare.id_valutad, ;
|
||||
vvaldiminuatctva WITH vvaldiminuatftva + vvaldiminuattva ;
|
||||
FOR id_temp = m.lnIdTemp
|
||||
SELECT crsarticole_editare
|
||||
ENDSCAN
|
||||
|
||||
*!* pretv_orig si legatura de rezervare nu sunt stocate pe document; se reiau din rulajul original
|
||||
*!* pretv are sens doar pe gestiunile la pret de vanzare (nr_pag 6/7); in rest STOC.PRETV e 0
|
||||
lcSql = [select r.id_articol, r.id_gestiune, Nvl(r.cont,' ') as cont, r.pret, ] + ;
|
||||
[Nvl(r.serie,' ') as serie, r.cante as cantitate, ] + ;
|
||||
[case when (select max(g.nr_pag) from nom_gestiuni g ] + ;
|
||||
[where g.id_gestiune = r.id_gestiune) in (6,7) ] + ;
|
||||
[then r.pretv else 0 end as pretv, r.id_tip_rulaj, ] + ;
|
||||
[r.id_part_rez, r.id_lucrare_rez ] + ;
|
||||
[from rul r, vanzari v ] + ;
|
||||
[where v.id_vanzare = ] + Alltrim(Str(m.tnIdVanzare)) + ;
|
||||
[ and r.cod = v.cod and r.sters = 0 and r.cante <> 0 ] + ;
|
||||
[order by r.id_tip_rulaj desc, r.id_rul]
|
||||
IF goExecutor.oExecuta(m.lcSql, 'crs_lot_orig')
|
||||
SELECT crsfactura
|
||||
SCAN FOR gestionabil = 1
|
||||
SELECT crs_lot_orig
|
||||
LOCATE FOR id_articol = crsfactura.id_articol AND id_gestiune = crsfactura.id_gestiune ;
|
||||
AND Alltrim(cont) == Alltrim(crsfactura.Cont) AND pret = crsfactura.pret_achizitie ;
|
||||
AND Alltrim(serie) == Alltrim(Nvl(crsfactura.serie,[])) AND cantitate = crsfactura.cantitate
|
||||
IF Found()
|
||||
REPLACE pretv_orig WITH crs_lot_orig.pretv, ;
|
||||
id_part_rez WITH crs_lot_orig.id_part_rez, ;
|
||||
id_lucrare_rez WITH crs_lot_orig.id_lucrare_rez IN crsfactura
|
||||
ENDIF
|
||||
SELECT crsfactura
|
||||
ENDSCAN
|
||||
Use In crs_lot_orig
|
||||
ENDIF
|
||||
|
||||
Use In crsarticole_doc
|
||||
Use In crsarticole_editare
|
||||
|
||||
RETURN .T.
|
||||
ENDFUNC && IncarcaLiniiFacturaEditare
|
||||
|
||||
|
||||
*!* parametri: cod, an, luna, arata si randurile sterse (implicit .F.)
|
||||
*!* incarca cursoarele notei (tact) si ale rulajelor (trul, trul_obinv), cu recalculul de
|
||||
*!* valoare/valtva/valoarev/valtvav pe randurile goale; raman deschise READWRITE pe seama apelantului
|
||||
@@ -283,6 +545,7 @@ FUNCTION CreeazaCursorArticoleGol
|
||||
CREATE CURSOR (m.lcAlias) (id_vanzare I NULL, id_vanzare_det I NULL, id_articol N(20) NULL, cantitate N(12,3) NULL, pret N(14,4) NULL, pret_cu_tva N(14,4) NULL, proc_tvav N(6,4) NULL, ;
|
||||
discount_unitar N(14,4) NULL, id_gestiune I NULL, cont C(20) NULL, id_valuta I NULL, id_jtva_coloana I NULL, serie C(20) NULL, explicatie C(60) NULL, ;
|
||||
taxcode I NULL, lot C(20) NULL, sters I NULL, id_vanzare_set I NULL, pret_achizitie N(14,4) NULL, denumire C(100) NULL, codmat C(30) NULL, nume_gestiune C(60) NULL, nume_val C(20) NULL, ;
|
||||
id_pol I NULL, id_ctr I NULL, diferenta N(14,4) NULL, pretd N(14,4) NULL, id_valutad I NULL, curs N(10,4) NULL, multiplicator N(10,4) NULL, ;
|
||||
lmodificat L, valoare N(14,2), in_stoc I NULL)
|
||||
ENDFUNC && CreeazaCursorArticoleGol
|
||||
|
||||
|
||||
568
programe/ofacturare_rutare_scriere.prg
Normal file
568
programe/ofacturare_rutare_scriere.prg
Normal file
@@ -0,0 +1,568 @@
|
||||
*** ofacturare_rutare_scriere
|
||||
*!* helpere pentru S8b: comparatia stare-incarcata / stare-curenta la editarea unui document existent,
|
||||
*!* si alegerea rutei de scriere (regenerare / modifica_date_factura / modifica_explicatie_articol / nimic),
|
||||
*!* si mutarea borderoului eFactura la reemitere
|
||||
|
||||
*!* parametri: poDate deja incarcat (dupa IncarcaAntetFacturaEditare + IncarcaLiniiFacturaEditare),
|
||||
*!* discountul curent in lei/valuta (Thisform.ndiscfactron/ndiscfactval, DUPA do_calculeaza_totaluri)
|
||||
*!* construieste si intoarce instantaneul: identitatea documentului vechi (id_vanzare, id_fact, cod,
|
||||
*!* an, luna - din variabilele PRIVATE deja capturate in do_editare_unificata, inainte de stergere),
|
||||
*!* cei 14 parametri de antet, discountul de document (suma + indicator, separat de antet - nu e
|
||||
*!* parametru al modifica_date_factura), copie a liniilor din crsfactura (doar campurile-intrare,
|
||||
*!* cheie id_temp); .NULL. daca poDate nu e in editare
|
||||
FUNCTION CreeazaSnapshotEditare
|
||||
LPARAMETERS toDate, tnDiscountRon, tnDiscountValuta, tnIdVanzare, tnIdFact, tnCod, tnAn, tnLuna
|
||||
|
||||
LOCAL loSnapshot
|
||||
IF VARTYPE(toDate) <> 'O' OR !toDate.lEditare
|
||||
RETURN .NULL.
|
||||
ENDIF
|
||||
|
||||
loSnapshot = CREATEOBJECT('Empty')
|
||||
*!* id-ul real al documentului - NU toDate.nid_vanzare (ramane la sentinela 9999999999 pe calea de
|
||||
*!* editare, IncarcaAntetFacturaEditare nu-l populeaza) - transmis explicit din do_editare_unificata
|
||||
=AddProperty(loSnapshot, 'id_vanzare', NVL(m.tnIdVanzare,0))
|
||||
*!* identitatea documentului vechi - pentru stergerea si reemiterea din S9, nu pentru scrierea azi
|
||||
=AddProperty(loSnapshot, 'id_fact', NVL(m.tnIdFact,0))
|
||||
=AddProperty(loSnapshot, 'cod', NVL(m.tnCod,0))
|
||||
=AddProperty(loSnapshot, 'an', NVL(m.tnAn,0))
|
||||
=AddProperty(loSnapshot, 'luna', NVL(m.tnLuna,0))
|
||||
*!* id_util/dataora ale creatiei documentului vechi - din crsFacturi (gridul din frm_facturi) cand e
|
||||
*!* deschis, fara interogare Oracle noua; altfel (apel fara grid) interogare minima directa pe VANZARI
|
||||
LOCAL lnAreaSnapshot, llGasitAudit, lnIdUtilAudit, ldDataoraAudit
|
||||
lnAreaSnapshot = 0
|
||||
llGasitAudit = .F.
|
||||
IF USED('crsfacturi')
|
||||
lnAreaSnapshot = SELECT()
|
||||
SELECT crsfacturi
|
||||
LOCATE FOR id_vanzare = m.tnIdVanzare
|
||||
IF FOUND('crsfacturi')
|
||||
=AddProperty(loSnapshot, 'id_util', NVL(crsfacturi.id_util,0))
|
||||
=AddProperty(loSnapshot, 'dataora', NVL(crsfacturi.dataora,{}))
|
||||
llGasitAudit = .T.
|
||||
ENDIF
|
||||
IF m.lnAreaSnapshot > 0
|
||||
SELECT (m.lnAreaSnapshot)
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF !m.llGasitAudit
|
||||
lnIdUtilAudit = 0
|
||||
ldDataoraAudit = {}
|
||||
IF USED('v_snap_audit_s14')
|
||||
USE IN v_snap_audit_s14
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta([select id_util, dataora from vanzari where id_vanzare = ] + ALLTRIM(STR(NVL(m.tnIdVanzare,0),14,0)), 'v_snap_audit_s14')
|
||||
SELECT v_snap_audit_s14
|
||||
IF RECCOUNT('v_snap_audit_s14') > 0
|
||||
GO TOP
|
||||
lnIdUtilAudit = NVL(id_util,0)
|
||||
ldDataoraAudit = NVL(dataora,{})
|
||||
ENDIF
|
||||
USE IN v_snap_audit_s14
|
||||
ENDIF
|
||||
=AddProperty(loSnapshot, 'id_util', lnIdUtilAudit)
|
||||
=AddProperty(loSnapshot, 'dataora', ldDataoraAudit)
|
||||
ENDIF
|
||||
*!* cei 14 parametri de antet (modifica_date_factura_parametri.md) - valorile brute din poDate
|
||||
=AddProperty(loSnapshot, 'id_ruta', NVL(toDate.id_ruta,0))
|
||||
=AddProperty(loSnapshot, 'id_delegat', NVL(toDate.id_delegat,0))
|
||||
=AddProperty(loSnapshot, 'id_agent', NVL(toDate.id_agent,0))
|
||||
=AddProperty(loSnapshot, 'id_masina', NVL(toDate.id_masina,0))
|
||||
=AddProperty(loSnapshot, 'dataora_exp', NVL(toDate.dataora_exp,{}))
|
||||
=AddProperty(loSnapshot, 'id_facturare', NVL(toDate.id_facturare,0))
|
||||
=AddProperty(loSnapshot, 'listare_detaliata', NVL(toDate.nListareDetaliata,0))
|
||||
=AddProperty(loSnapshot, 'text_aditional', NVL(toDate.text_aditional,''))
|
||||
=AddProperty(loSnapshot, 'tip_saft', NVL(toDate.tip_saft,0))
|
||||
=AddProperty(loSnapshot, 'efactura', NVL(toDate.eFactura,0))
|
||||
=AddProperty(loSnapshot, 'data_act', NVL(toDate.dataact,{}))
|
||||
=AddProperty(loSnapshot, 'data_scad', NVL(toDate.datascad,{}))
|
||||
=AddProperty(loSnapshot, 'numar_act', NVL(toDate.nract,0))
|
||||
=AddProperty(loSnapshot, 'serie_act', NVL(toDate.serie_act,''))
|
||||
*!* discountul de document - grup de sume, NU parametru al modifica_date_factura (S8b §1, 9e);
|
||||
*!* suma vine din Thisform.ndiscfactron/ndiscfactval DUPA do_calculeaza_totaluri, nu din poDate
|
||||
=AddProperty(loSnapshot, 'discount_ron', NVL(m.tnDiscountRon,0))
|
||||
=AddProperty(loSnapshot, 'discount_val', NVL(m.tnDiscountValuta,0))
|
||||
=AddProperty(loSnapshot, 'discount_evidentiat', NVL(toDate.discount_evidentiat,0))
|
||||
|
||||
*!* liniile - doar campurile pe care utilizatorul le poate schimba, cheie id_temp (=id_vanzare_det)
|
||||
IF USED('crsfactura')
|
||||
IF USED('snap_linii_editare')
|
||||
USE IN snap_linii_editare
|
||||
ENDIF
|
||||
SELECT id_temp, cantitate, pretctva, pretftva, discountctva, discountftva, cu_tva, proc_tvav, ;
|
||||
id_articol, id_gestiune, id_jtva_coloana, taxcode, explicatie, lot, serie, id_pol, pretd, id_valuta_d ;
|
||||
FROM crsfactura INTO CURSOR snap_linii_editare READWRITE
|
||||
ENDIF
|
||||
|
||||
RETURN loSnapshot
|
||||
ENDFUNC && CreeazaSnapshotEditare
|
||||
|
||||
|
||||
*!* parametri: poSnapshotEditare (din CreeazaSnapshotEditare), poDate curent, discountul curent in
|
||||
*!* lei/valuta (Thisform.ndiscfactron/ndiscfactval), alias curent al liniilor (crsfactura)
|
||||
*!* intoarce un cod de ruta: 1=regenerare, 2=modifica_date_factura, 3=modifica_explicatie_articol,
|
||||
*!* 0=nimic; lant cu prioritate (sumele primele) - vezi s8b_rutarea_scrierii.md sectiunea 3.1
|
||||
*!* .NULL. de instantaneu => 0 (document nou, nu editare - nu se ruteaza)
|
||||
FUNCTION AlegeRutaScriereEditare
|
||||
LPARAMETERS toSnapshot, toDate, tnDiscRonCurent, tnDiscValCurent, tcAliasLinii
|
||||
|
||||
LOCAL lcAlias, llSumeSchimbate
|
||||
IF VARTYPE(toSnapshot) <> 'O'
|
||||
RETURN 0
|
||||
ENDIF
|
||||
lcAlias = IIF(TYPE('tcAliasLinii') = 'C' AND !EMPTY(m.tcAliasLinii), m.tcAliasLinii, 'crsfactura')
|
||||
|
||||
llSumeSchimbate = LiniiAuSumeSchimbate(m.lcAlias) OR ;
|
||||
!(ROUND(NVL(m.tnDiscRonCurent,0), gnPc) == ROUND(toSnapshot.discount_ron, gnPc)) OR ;
|
||||
!(ROUND(NVL(m.tnDiscValCurent,0), gnPc) == ROUND(toSnapshot.discount_val, gnPc)) OR ;
|
||||
NVL(toDate.discount_evidentiat,0) <> toSnapshot.discount_evidentiat
|
||||
IF m.llSumeSchimbate
|
||||
RETURN 1 && regenerare - implementarea propriu-zisa e S9
|
||||
ENDIF
|
||||
|
||||
IF !AntetIdenticCuSnapshot(m.toSnapshot, m.toDate)
|
||||
RETURN 2 && modifica_date_factura
|
||||
ENDIF
|
||||
|
||||
IF ExplicatieLinieSchimbata(m.lcAlias)
|
||||
RETURN 3 && modifica_explicatie_articol
|
||||
ENDIF
|
||||
|
||||
RETURN 0 && nimic
|
||||
ENDFUNC && AlegeRutaScriereEditare
|
||||
|
||||
|
||||
*!* parametru: alias curent al liniilor (implicit crsfactura)
|
||||
*!* .T. daca s-a adaugat/sters o linie sau s-a schimbat cantitate/pret/discount/tva/gestiune/lot/serie
|
||||
*!* pe o linie existenta, comparat cu snap_linii_editare (cheie id_temp); precizie: gnPPretV pe
|
||||
*!* pret/discount, gnPCant pe cantitate - nu pe valoarea bruta
|
||||
FUNCTION LiniiAuSumeSchimbate
|
||||
LPARAMETERS tcAlias
|
||||
|
||||
LOCAL lcAlias, llRezultat, lnAreaOrigine, lnIdTemp
|
||||
lcAlias = IIF(TYPE('tcAlias') = 'C' AND !EMPTY(m.tcAlias), m.tcAlias, 'crsfactura')
|
||||
IF !USED('snap_linii_editare') OR !USED(m.lcAlias)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
lnAreaOrigine = SELECT()
|
||||
llRezultat = .F.
|
||||
|
||||
*!* chei doar in snapshot => linie stearsa; chei doar in curent (sau id_temp = 0) => linie noua;
|
||||
*!* daca reccount-urile coincid dar continutul difera (o stergere + o adaugare), scan-ul de mai
|
||||
*!* jos gaseste oricum cheia din snapshot lipsa din curent
|
||||
IF RECCOUNT('snap_linii_editare') <> RECCOUNT(m.lcAlias)
|
||||
llRezultat = .T.
|
||||
ELSE
|
||||
SELECT snap_linii_editare
|
||||
SCAN
|
||||
lnIdTemp = id_temp
|
||||
SELECT (m.lcAlias)
|
||||
LOCATE FOR id_temp = m.lnIdTemp
|
||||
IF !FOUND()
|
||||
llRezultat = .T.
|
||||
EXIT
|
||||
ENDIF
|
||||
IF !(ROUND(cantitate, gnPCant) == ROUND(snap_linii_editare.cantitate, gnPCant)) OR ;
|
||||
!(ROUND(IIF(cu_tva=1,pretctva,pretftva), gnPPretV) == ROUND(IIF(snap_linii_editare.cu_tva=1,snap_linii_editare.pretctva,snap_linii_editare.pretftva), gnPPretV)) OR ;
|
||||
!(ROUND(IIF(cu_tva=1,discountctva,discountftva), gnPPretV) == ROUND(IIF(snap_linii_editare.cu_tva=1,snap_linii_editare.discountctva,snap_linii_editare.discountftva), gnPPretV)) OR ;
|
||||
!(ROUND(proc_tvav,4) == ROUND(snap_linii_editare.proc_tvav,4)) OR ;
|
||||
NVL(id_articol,0) <> NVL(snap_linii_editare.id_articol,0) OR ;
|
||||
NVL(id_gestiune,0) <> NVL(snap_linii_editare.id_gestiune,0) OR ;
|
||||
ALLTRIM(NVL(lot,'')) <> ALLTRIM(NVL(snap_linii_editare.lot,'')) OR ;
|
||||
ALLTRIM(NVL(serie,'')) <> ALLTRIM(NVL(snap_linii_editare.serie,''))
|
||||
llRezultat = .T.
|
||||
EXIT
|
||||
ENDIF
|
||||
SELECT snap_linii_editare
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
|
||||
IF m.lnAreaOrigine > 0
|
||||
SELECT (m.lnAreaOrigine)
|
||||
ENDIF
|
||||
RETURN m.llRezultat
|
||||
ENDFUNC && LiniiAuSumeSchimbate
|
||||
|
||||
|
||||
*!* .T. daca oricare din cei 14 parametri de antet difera fata de snapshot (comparatie simetrica NVL)
|
||||
FUNCTION AntetIdenticCuSnapshot
|
||||
LPARAMETERS toSnapshot, toDate
|
||||
|
||||
RETURN (NVL(toDate.id_ruta,0) == toSnapshot.id_ruta) AND ;
|
||||
(NVL(toDate.id_delegat,0) == toSnapshot.id_delegat) AND ;
|
||||
(NVL(toDate.id_agent,0) == toSnapshot.id_agent) AND ;
|
||||
(NVL(toDate.id_masina,0) == toSnapshot.id_masina) AND ;
|
||||
(NVL(toDate.dataora_exp,{}) == toSnapshot.dataora_exp) AND ;
|
||||
(NVL(toDate.id_facturare,0) == toSnapshot.id_facturare) AND ;
|
||||
(NVL(toDate.nListareDetaliata,0) == toSnapshot.listare_detaliata) AND ;
|
||||
(NVL(toDate.text_aditional,'') == toSnapshot.text_aditional) AND ;
|
||||
(NVL(toDate.tip_saft,0) == toSnapshot.tip_saft) AND ;
|
||||
(NVL(toDate.eFactura,0) == toSnapshot.efactura) AND ;
|
||||
(NVL(toDate.dataact,{}) == toSnapshot.data_act) AND ;
|
||||
(NVL(toDate.datascad,{}) == toSnapshot.data_scad) AND ;
|
||||
(NVL(toDate.nract,0) == toSnapshot.numar_act) AND ;
|
||||
(NVL(toDate.serie_act,'') == toSnapshot.serie_act)
|
||||
ENDFUNC && AntetIdenticCuSnapshot
|
||||
|
||||
|
||||
*!* .T. daca s-a schimbat explicatia sau taxcode-ul pe cel putin o linie existenta (fara alte schimbari -
|
||||
*!* apelat doar dupa ce LiniiAuSumeSchimbate a intors .F.)
|
||||
FUNCTION ExplicatieLinieSchimbata
|
||||
LPARAMETERS tcAlias
|
||||
|
||||
LOCAL lcAlias, llRezultat, lnAreaOrigine, lnIdTemp
|
||||
lcAlias = IIF(TYPE('tcAlias') = 'C' AND !EMPTY(m.tcAlias), m.tcAlias, 'crsfactura')
|
||||
IF !USED('snap_linii_editare') OR !USED(m.lcAlias)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
lnAreaOrigine = SELECT()
|
||||
llRezultat = .F.
|
||||
|
||||
SELECT snap_linii_editare
|
||||
SCAN
|
||||
lnIdTemp = id_temp
|
||||
SELECT (m.lcAlias)
|
||||
LOCATE FOR id_temp = m.lnIdTemp
|
||||
IF FOUND() AND (ALLTRIM(NVL(explicatie,'')) <> ALLTRIM(NVL(snap_linii_editare.explicatie,'')) OR ;
|
||||
NVL(taxcode,0) <> NVL(snap_linii_editare.taxcode,0) OR ;
|
||||
NVL(id_jtva_coloana,0) <> NVL(snap_linii_editare.id_jtva_coloana,0))
|
||||
llRezultat = .T.
|
||||
EXIT
|
||||
ENDIF
|
||||
SELECT snap_linii_editare
|
||||
ENDSCAN
|
||||
|
||||
IF m.lnAreaOrigine > 0
|
||||
SELECT (m.lnAreaOrigine)
|
||||
ENDIF
|
||||
RETURN m.llRezultat
|
||||
ENDFUNC && ExplicatieLinieSchimbata
|
||||
|
||||
|
||||
*!* parametri: poDate curent (antet complet), poSnapshotEditare (id-ul real al documentului - vezi
|
||||
*!* CreeazaSnapshotEditare); scrie cei 14 parametri prin modifica_date_factura, acelasi tipar SQL ca
|
||||
*!* frm_facturi.do_modifica (ofacturare_comun.vc2:4705-4726) - fara tranzactie manuala, la fel ca
|
||||
*!* apelantul copiat; .T. la succes, .F. la eroare Oracle sau la id de document lipsa (cu amessagebox)
|
||||
FUNCTION ScrieAntetEditare
|
||||
LPARAMETERS toDate, toSnapshot
|
||||
|
||||
LOCAL lcSql, lnSucces
|
||||
*!* PRIVATE, nu LOCAL: parametrii legati (?) din TEXT TO se rezolva in scopul in care ruleaza
|
||||
*!* goExecutor.oExecute, nu in cel al acestei functii - un LOCAL/LPARAMETERS e invizibil acolo si
|
||||
*!* SQLExec ramane agatat (acelasi idiom ca poRec in frm_facturi.do_modifica, Private declarat)
|
||||
PRIVATE poRecEditare, lnTipSaft
|
||||
IF VARTYPE(toSnapshot) <> 'O' OR EMPTY(NVL(toSnapshot.id_vanzare,0)) OR toSnapshot.id_vanzare = 9999999999
|
||||
amessagebox('Documentul editat nu are un id valid - nimic nu a fost scris.',16,'Eroare')
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
poRecEditare = toDate
|
||||
|
||||
*!* tip_saft = 0 inseamna nesetat (documente vechi, dinainte de SAFT) - se scrie NULL, nu 0, la fel
|
||||
*!* ca frm_facturi.do_modifica (ofacturare_comun.vc2:4701-4703)
|
||||
lnTipSaft = poRecEditare.tip_saft
|
||||
IF NVL(m.lnTipSaft,0) = 0
|
||||
lnTipSaft = .NULL.
|
||||
ENDIF
|
||||
|
||||
TEXT TO lcSql NOSHOW TEXTMERGE
|
||||
begin pack_facturare.modifica_date_factura(<<Alltrim(Str(toSnapshot.id_vanzare))>>,
|
||||
<<Alltrim(Nvl(Str(toDate.id_ruta),[NULL]))>>,
|
||||
<<Alltrim(Nvl(Str(toDate.id_delegat),[NULL]))>>,
|
||||
<<Alltrim(Nvl(Str(toDate.id_agent),[NULL]))>>,
|
||||
<<Alltrim(Nvl(Str(toDate.id_masina),[NULL]))>>,
|
||||
to_date('<<TTOC(toDate.dataora_exp,1)>>','YYYYMMDDHH24:MI:SS'),
|
||||
<<Alltrim(Nvl(Str(toDate.id_facturare),[NULL]))>>,
|
||||
<<ALLTRIM(STR(NVL(toDate.nListareDetaliata,0)))>>,
|
||||
?poRecEditare.text_aditional,
|
||||
?lnTipSaft,
|
||||
?poRecEditare.eFactura,
|
||||
?poRecEditare.dataact,
|
||||
?poRecEditare.datascad,
|
||||
?poRecEditare.nract,
|
||||
?poRecEditare.serie_act);
|
||||
end;
|
||||
ENDTEXT
|
||||
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
IF lnSucces < 0
|
||||
amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare")
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC && ScrieAntetEditare
|
||||
|
||||
|
||||
*!* parametru: alias curent al liniilor (crsfactura); scrie explicatia/taxcode pe fiecare linie
|
||||
*!* modificata fata de snap_linii_editare, prin modifica_explicatie_articol - acelasi tipar SQL ca
|
||||
*!* frm_modifica_articol_factura.inainte_de_do_termin (ofacturare_comun.vc2:5407-5409); se opreste
|
||||
*!* la primul esec Oracle (.F.), fara tranzactie manuala
|
||||
FUNCTION ScrieExplicatieEditare
|
||||
LPARAMETERS tcAlias
|
||||
|
||||
LOCAL lcAlias, lnAreaOrigine, lnIdTemp, lcSql, llSucces
|
||||
*!* PRIVATE, nu LOCAL - vezi ScrieAntetEditare: ?lnTaxcodeEditare trebuie vizibil din interiorul
|
||||
*!* goExecutor.oExecuta; acelasi tipar ca ?poRec.taxcode in frm_modifica_articol_factura
|
||||
PRIVATE lnTaxcodeEditare
|
||||
lcAlias = IIF(TYPE('tcAlias') = 'C' AND !EMPTY(m.tcAlias), m.tcAlias, 'crsfactura')
|
||||
IF !USED('snap_linii_editare') OR !USED(m.lcAlias)
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
lnAreaOrigine = SELECT()
|
||||
llSucces = .T.
|
||||
|
||||
SELECT snap_linii_editare
|
||||
SCAN
|
||||
lnIdTemp = id_temp
|
||||
SELECT (m.lcAlias)
|
||||
LOCATE FOR id_temp = m.lnIdTemp
|
||||
IF FOUND() AND (ALLTRIM(NVL(explicatie,'')) <> ALLTRIM(NVL(snap_linii_editare.explicatie,'')) OR ;
|
||||
NVL(taxcode,0) <> NVL(snap_linii_editare.taxcode,0) OR ;
|
||||
NVL(id_jtva_coloana,0) <> NVL(snap_linii_editare.id_jtva_coloana,0))
|
||||
lnTaxcodeEditare = taxcode
|
||||
lcSql = [begin pack_facturare.modifica_explicatie_articol(] + Alltrim(Str(m.lnIdTemp)) + [,] + ;
|
||||
['] + Nvl(Alltrim(OracleSpecialCharacters(explicatie)),'') + [',?gnIdUtil,?lnTaxcodeEditare,] + ;
|
||||
Iif(Isnull(id_jtva_coloana),[null],Alltrim(Str(id_jtva_coloana))) + [); end;]
|
||||
llSucces = goExecutor.oExecuta(lcSql)
|
||||
IF !m.llSucces
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDIF
|
||||
SELECT snap_linii_editare
|
||||
ENDSCAN
|
||||
|
||||
IF m.lnAreaOrigine > 0
|
||||
SELECT (m.lnAreaOrigine)
|
||||
ENDIF
|
||||
RETURN m.llSucces
|
||||
ENDFUNC && ScrieExplicatieEditare
|
||||
|
||||
|
||||
*!* parametru: toDate (oDateFactura incarcat pentru editare - IncarcaAntetFacturaEditare populeaza deja
|
||||
*!* cListaSursa - comanda/contract - si cListaSursaAvize - avize, din VANZARI_CORESP TIP=1; S9 §1.5/1.7)
|
||||
*!* intoarce lista de refurnizat ca poDate.listaid la reemitere, aleasa dupa tip - acelasi CASE ca
|
||||
*!* dispecerizarea de scriere din do_scrie_factura (ofacturare.vc2:20171,20214,20249): avize (Tip=4)
|
||||
*!* -> cListaSursaAvize; comenzi (3,21,25,28,42,47) -> cListaSursa; restul (contract/ELSE) -> '' (nu
|
||||
*!* foloseau listaid la emiterea normala nici azi)
|
||||
*!* .NULL. de toDate => ''; nu modifica toDate - apelantul decide cand scrie rezultatul pe poDate.listaid
|
||||
FUNCTION CalculeazaListaidReemitere
|
||||
LPARAMETERS toDate
|
||||
|
||||
IF VARTYPE(toDate) <> 'O'
|
||||
RETURN ''
|
||||
ENDIF
|
||||
|
||||
DO CASE
|
||||
CASE toDate.tip = 4
|
||||
RETURN ALLTRIM(NVL(toDate.cListaSursaAvize, ''))
|
||||
CASE INLIST(toDate.tip, 3, 21, 25, 28, 42, 47)
|
||||
RETURN ALLTRIM(NVL(toDate.cListaSursa, ''))
|
||||
OTHERWISE
|
||||
RETURN ''
|
||||
ENDCASE
|
||||
ENDFUNC && CalculeazaListaidReemitere
|
||||
|
||||
|
||||
*!* piciorul de stergere extras din ofacturare_comun.vc2:4837-4977 (frm_facturi.do_sterge), parametrizat -
|
||||
*!* fara UI (fara confirmare "sunteti sigur", fara refresh de grid) si fara tranzactie proprie:
|
||||
*!* nici SQLSetprop, nici COMMIT/ROLLBACK cand apelantul are deja Transactions=2 -
|
||||
*!* oscrie_in_fisiere e deja transaction-aware (oscrie_in_fisiere.prg:111-117): daca apelantul a
|
||||
*!* deschis deja Transactions=2 inainte de a chema aceasta functie, intra in aceeasi tranzactie
|
||||
*!* (necesar pentru S9-4, stergere+reemitere atomic); altfel fiecare pas isi face singur commit
|
||||
*!* oscrie_in_fisiere posteaza reversarea sub perioada globala activa gnAn/gnLuna (linia lui interna,
|
||||
*!* neschimbabila de aici) - de-aia interogarea vact_tot/vrul_tot si sterge_factura raman pe gnAn/gnLuna
|
||||
*!* ca in original, iar tnAn/tnLuna (perioada documentului) intra doar la finalizeaza_stergere_nota,
|
||||
*!* exact ca pnAn/pnLuna in do_sterge - garda de mai jos impune egalitatea, ca in do_sterge original
|
||||
*!* tnIdUtil optional - implicit gnIdUtil daca nu e transmis
|
||||
*!* tnIdSetVechi, tnIdFdocVechi, tdDataIregVechi optionale, prin referinta: id_set-ul, felul de
|
||||
*!* document si data inregistrarii contabile ale notei sterse, citite din acelasi cursor;
|
||||
*!* raman neatinse daca documentul nu are nota contabila
|
||||
*!* intoarce .T. daca documentul a fost sters (cu sau fara reversare de stoc), .F. la eroare sau garda
|
||||
FUNCTION StergeDocumentFacturare
|
||||
LPARAMETERS tnIdVanzare, tnCod, tnAn, tnLuna, tnIdUtil, tnIdSetVechi, tnIdFdocVechi, tdDataIregVechi
|
||||
|
||||
LOCAL lcSql, lcCursor, lcConditieSters, llRul, llSucces, lnIdSet, lnIdFact, lnIdFactD
|
||||
LOCAL lcCaleDateMenu, lnRezOscrie
|
||||
*!* PRIVATE - legate cu ? in SQL trimis prin goExecutor, invizibile ca LPARAMETERS in scopul lui oExecuta
|
||||
PRIVATE pnIdVanzareSterge, pnAnSterge, pnLunaSterge, pnIdUtilSterge
|
||||
pnIdVanzareSterge = NVL(tnIdVanzare, 0)
|
||||
pnAnSterge = NVL(tnAn, 0)
|
||||
pnLunaSterge = NVL(tnLuna, 0)
|
||||
pnIdUtilSterge = NVL(tnIdUtil, gnIdUtil)
|
||||
|
||||
IF EMPTY(m.pnIdVanzareSterge) OR EMPTY(m.pnAnSterge) OR EMPTY(m.pnLunaSterge)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
*!* aceeasi garda "luna curenta" ca in do_sterge (ofacturare_comun.vc2:4809) - obligatorie, nu doar UI:
|
||||
*!* oscrie_in_fisiere posteaza mereu sub gnAn/gnLuna, indiferent ce se cere aici
|
||||
IF (m.pnAnSterge * 12) + m.pnLunaSterge <> (gnAn * 12) + gnLuna
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
llRul = .F.
|
||||
llSucces = .F.
|
||||
lcConditieSters = [ STERS = 0 AND ]
|
||||
|
||||
Use In (SELECT('actactan'))
|
||||
|
||||
lcSql = [select * from ] + gcs + [.vact_tot where ] + lcConditieSters + [ an = ] + Transform(gnAn) + [ and luna = ] + Transform(gnLuna) + [ and cod = ] + Alltrim(Str(m.tnCod)) + [ order by id_act]
|
||||
lcCursor = [v_act]
|
||||
IF goExecutor.oExecuta(lcSql, lcCursor)
|
||||
Select * From v_act Into Cursor actactan
|
||||
Use In v_act
|
||||
|
||||
lcSql = [select * from ] + gcs + [.vrul_tot where ] + lcConditieSters + [ an = ] + Transform(gnAn) + [ and luna = ] + Transform(gnLuna) + [ and cod = ] + Alltrim(Str(m.tnCod)) + [ order by id_rul]
|
||||
lcCursor = [v_rul]
|
||||
IF goExecutor.oExecuta(lcSql, lcCursor)
|
||||
IF Reccount(lcCursor) > 0
|
||||
llRul = .T.
|
||||
ENDIF
|
||||
|
||||
lcSql = [select * from ] + gcs + [.vrul_obinv_tot where ] + lcConditieSters + [ an = ] + Transform(gnAn) + [ and luna = ] + Transform(gnLuna) + [ and cod = ] + Alltrim(Str(m.tnCod)) + [ order by id_rul_obinv]
|
||||
lcCursor = [v_rul_obinv]
|
||||
IF goExecutor.oExecuta(lcSql, lcCursor)
|
||||
IF Reccount(lcCursor) > 0
|
||||
llRul = .T.
|
||||
ENDIF
|
||||
Select * From v_rul Into Cursor rul_temp
|
||||
Use In v_rul
|
||||
Select * From v_rul_obinv Into Cursor rul_temp_obinv
|
||||
Use In v_rul_obinv
|
||||
|
||||
IF Reccount('actactan') > 0
|
||||
lcCaleDateMenu = gcAppPath + [\COMUN\DATEMENU\]
|
||||
IF !Used('INFISIERE')
|
||||
Use &lcCaleDateMenu.INFISIERE In 0 Alias INFISIERE
|
||||
ENDIF
|
||||
lnRezOscrie = OSCRIE_IN_FISIERE(2, .F., m.llRul)
|
||||
IF Used('infisiere')
|
||||
Use In INFISIERE
|
||||
ENDIF
|
||||
|
||||
IF lnRezOscrie < 0
|
||||
IF lnRezOscrie <> -5
|
||||
amessagebox(goExecutor.cEroare, 0+16, "Eroare")
|
||||
ENDIF
|
||||
ELSE
|
||||
Select actactan
|
||||
GO top
|
||||
lnIdSet = id_set
|
||||
*!* VARTYPE, nu PARAMETERS() - acesta din urma raporteaza ultimul apel imbricat
|
||||
IF VARTYPE(m.tnIdSetVechi) = 'N'
|
||||
tnIdSetVechi = m.lnIdSet
|
||||
ENDIF
|
||||
IF VARTYPE(m.tnIdFdocVechi) = 'N' AND !Isnull(id_fdoc)
|
||||
tnIdFdocVechi = id_fdoc
|
||||
ENDIF
|
||||
IF Inlist(VARTYPE(m.tdDataIregVechi), 'D', 'T') AND !Isnull(dataireg)
|
||||
tdDataIregVechi = dataireg
|
||||
ENDIF
|
||||
lnIdFact = id_fact
|
||||
lnIdFactD = id_factd
|
||||
lcSql = [begin pack_contafin.finalizeaza_stergere_nota(?pnLunaSterge,?pnAnSterge,Null,] + Alltrim(Str(m.lnIdSet)) + [,] + ;
|
||||
Alltrim(Str(m.tnCod)) + [,] + Alltrim(Str(m.lnIdFact)) + [,] + Alltrim(Str(m.lnIdFactD)) + [,?pnIdUtilSterge); end;]
|
||||
IF goExecutor.oExecuta(lcSql)
|
||||
llSucces = .T.
|
||||
ENDIF
|
||||
ENDIF
|
||||
*!* doar cand apelantul nu are deja o tranzactie manuala deschisa - altfel COMMIT-ul
|
||||
*!* ar inchide-o inainte ca apelantul sa-si termine propria scriere
|
||||
IF SQLGetprop(gnHandle, "Transactions") <> 2
|
||||
goExecutor.oExecuta(IIF(m.llSucces, "COMMIT", "ROLLBACK"))
|
||||
ENDIF
|
||||
ELSE
|
||||
lcSql = [begin ] + gcs + [.pack_facturare.sterge_factura(?pnIdVanzareSterge,?gnLuna,?gnAn,?pnIdUtilSterge); end;]
|
||||
llSucces = goExecutor.oExecuta(lcSql)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
|
||||
RETURN m.llSucces
|
||||
ENDFUNC && StergeDocumentFacturare
|
||||
|
||||
|
||||
*!* impune ID_FACT-ul documentului vechi pentru reemiterea curenta, tintit pe grupul (nract, serie_act)
|
||||
*!* al facturii - bucla din SCRIE_IN_ACT parcurge si grupul de incasare, care poate fi primul cand
|
||||
*!* chitanta are aceeasi serie ca factura (masurat: docs\propunere_s9_7_cablare_idfact.md sectiunea 1.5)
|
||||
*!* literale, nu bind ? - bind-ul prin goExecutor se leaga de PRIVATE/PUBLIC, nu de LOCAL/LPARAMETERS
|
||||
*!* .F. daca id-ul lipseste (document fara nota contabila) sau daca apelul Oracle a picat
|
||||
FUNCTION ForteazaIdFactReemitere
|
||||
LPARAMETERS tnIdFact, tnNract, tcSerieAct
|
||||
|
||||
IF EMPTY(NVL(m.tnIdFact, 0))
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
RETURN goExecutor.oExecuta([begin pack_contafin.nIdFactFortat := ] + ALLTRIM(STR(m.tnIdFact,14,0)) + ;
|
||||
[; pack_contafin.nNractFortat := ] + ALLTRIM(STR(NVL(m.tnNract,0),14,0)) + ;
|
||||
[; pack_contafin.cSerieFortata := ] + ;
|
||||
IIF(EMPTY(NVL(m.tcSerieAct,[])), [NULL], ['] + OracleSpecialCharacters(ALLTRIM(m.tcSerieAct)) + [']) + ;
|
||||
[; end;])
|
||||
ENDFUNC && ForteazaIdFactReemitere
|
||||
|
||||
|
||||
*!* sterge fortarea din sesiunea Oracle: ROLLBACK nu reseteaza starea PL/SQL de pachet, iar gnHandle
|
||||
*!* traieste cat aplicatia - o reemitere picata ar contamina documentul urmator al aceluiasi utilizator
|
||||
*!* no-op in afara regenerarii, ca sa nu coste un apel pe drumul normal de scriere
|
||||
FUNCTION CurataIdFactFortat
|
||||
IF TYPE('plRegenerareEditare') <> 'L' OR !plRegenerareEditare
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
RETURN goExecutor.oExecuta([begin pack_contafin.nIdFactFortat := NULL; ] + ;
|
||||
[pack_contafin.nNractFortat := NULL; pack_contafin.cSerieFortata := NULL; end;])
|
||||
ENDFUNC && CurataIdFactFortat
|
||||
|
||||
|
||||
*!* impune id_util/dataora ale creatiei documentului vechi la reemitere - simetric cu ForteazaIdFactReemitere,
|
||||
*!* dar pe variabile proprii PACK_FACTURARE (nid_util_fortat/ddataora_fortata), resetate de
|
||||
*!* initializeaza_date_factura: apelul trebuie facut DUPA acel apel, altfel e inert
|
||||
*!* .F. daca id_util lipseste (document fara creator) sau daca apelul Oracle a picat
|
||||
FUNCTION ForteazaAuditCreareReemitere
|
||||
LPARAMETERS tnIdUtil, tdDataora
|
||||
|
||||
IF EMPTY(NVL(m.tnIdUtil, 0))
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
RETURN goExecutor.oExecuta([begin pack_facturare.nid_util_fortat := ] + ALLTRIM(STR(m.tnIdUtil,14,0)) + ;
|
||||
[; pack_facturare.ddataora_fortata := ] + ;
|
||||
IIF(EMPTY(NVL(m.tdDataora,{})), [NULL], [to_date(']+TTOC(m.tdDataora,1)+[','YYYYMMDDHH24MISS')]) + ;
|
||||
[; end;])
|
||||
ENDFUNC && ForteazaAuditCreareReemitere
|
||||
|
||||
|
||||
*!* sterge fortarea auditului de creare din sesiunea Oracle - simetric cu CurataIdFactFortat
|
||||
*!* no-op in afara regenerarii, ca sa nu coste un apel pe drumul normal de scriere
|
||||
FUNCTION CurataAuditCreareFortat
|
||||
IF TYPE('plRegenerareEditare') <> 'L' OR !plRegenerareEditare
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
RETURN goExecutor.oExecuta([begin pack_facturare.nid_util_fortat := NULL; ] + ;
|
||||
[pack_facturare.ddataora_fortata := NULL; end;])
|
||||
ENDFUNC && CurataAuditCreareFortat
|
||||
|
||||
|
||||
*!* parametri: id_vanzare vechi si nou; muta randurile de borderou eFactura ale documentului
|
||||
*!* regenerat pe id-ul nou - FACT_BORDEROU_DETALII n-are STERS, iar FACT_VBORDEROU_DETALII nu
|
||||
*!* filtreaza vanzari.sters, deci fara mutare borderoul ar afisa in continuare valorile
|
||||
*!* documentului sters, cu serie si numar corecte
|
||||
*!* UPDATE fara randuri potrivite = succes; .F. doar la eroare Oracle sau id lipsa
|
||||
FUNCTION MutaBorderouReemitere
|
||||
LPARAMETERS tnIdVanzareVechi, tnIdVanzareNou
|
||||
|
||||
IF EMPTY(NVL(m.tnIdVanzareVechi,0)) OR EMPTY(NVL(m.tnIdVanzareNou,0))
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
RETURN goExecutor.oExecuta([update ] + gcs + [.fact_borderou_detalii set id_vanzare = ] + ;
|
||||
ALLTRIM(STR(m.tnIdVanzareNou,14,0)) + [ where id_vanzare = ] + ;
|
||||
ALLTRIM(STR(m.tnIdVanzareVechi,14,0)))
|
||||
ENDFUNC && MutaBorderouReemitere
|
||||
104
programe/ogrid_latimi.prg
Normal file
104
programe/ogrid_latimi.prg
Normal file
@@ -0,0 +1,104 @@
|
||||
#DEFINE SYSMETRIC_VSCROLLBARWIDTH 5 && Width of a vertical scroll bar
|
||||
#DEFINE SYSMETRIC_WINDOWBORDERWIDTH 10 && Width of a window border
|
||||
|
||||
*!* 22.08.2026
|
||||
*!* marius.mutu
|
||||
*!* distribuie - imparte spatiul liber sau lipsa dintr-un grid proportional cu latimile de
|
||||
*!* referinta (baseline) ale coloanelor vizibile; baseline-ul se captureaza per coloana, dupa
|
||||
*!* Name, la prima intalnire a fiecarei coloane pe fiecare grid, si nu se mai modifica dupa aceea
|
||||
|
||||
Define Class oGridLatimi As Custom
|
||||
|
||||
nLatimeMinima = 30 && sub acest prag coloana nu mai afiseaza nimic lizibil
|
||||
oBaseline = .Null.
|
||||
|
||||
Procedure Init
|
||||
This.oBaseline = Createobject('Collection')
|
||||
Endproc
|
||||
|
||||
Procedure distribuie
|
||||
Lparameters toGrid
|
||||
|
||||
Local lnColCount, lnI, lnUltimaCol, lnLatimeUtila, lnSpatiuLiber, lnSumBaseline, lnSumaAlocata, lnTarget
|
||||
Local lcGridKey, lnKeyIndex, llModificat
|
||||
Local loBaselineGrid, loCol
|
||||
|
||||
If Vartype(m.toGrid) <> 'O'
|
||||
Return .F.
|
||||
Endif
|
||||
|
||||
lnColCount = toGrid.ColumnCount
|
||||
If m.lnColCount <= 0
|
||||
Return .F.
|
||||
Endif
|
||||
|
||||
* baseline separat per grid, identificat prin adresa obiectului - un al doilea grid nu mosteneste baseline-ul primului
|
||||
lcGridKey = Sys(1272, m.toGrid)
|
||||
lnKeyIndex = This.oBaseline.Getkey(m.lcGridKey)
|
||||
If m.lnKeyIndex = 0
|
||||
loBaselineGrid = Createobject('Collection')
|
||||
This.oBaseline.Add(m.loBaselineGrid, m.lcGridKey)
|
||||
Else
|
||||
loBaselineGrid = This.oBaseline.Item(m.lnKeyIndex)
|
||||
Endif
|
||||
|
||||
* coloana noua sau intalnita prima data pe acest grid - latimea ei curenta devine referinta
|
||||
For lnI = 1 To m.lnColCount
|
||||
loCol = toGrid.Columns(m.lnI)
|
||||
If loCol.Visible And loBaselineGrid.Getkey(loCol.Name) = 0
|
||||
loBaselineGrid.Add(loCol.Width, loCol.Name)
|
||||
Endif
|
||||
Endfor
|
||||
|
||||
* coloanele scoase cu RemoveObject nu mai sunt in toGrid.Columns - se ignora automat, baseline-ul lor ramane neatins
|
||||
lnSumBaseline = 0
|
||||
lnUltimaCol = 0
|
||||
For lnI = 1 To m.lnColCount
|
||||
loCol = toGrid.Columns(m.lnI)
|
||||
If loCol.Visible
|
||||
lnSumBaseline = m.lnSumBaseline + loBaselineGrid.Item(loCol.Name)
|
||||
lnUltimaCol = m.lnI
|
||||
Endif
|
||||
Endfor
|
||||
|
||||
If m.lnUltimaCol = 0 Or m.lnSumBaseline <= 0
|
||||
Return .F.
|
||||
Endif
|
||||
|
||||
lnLatimeUtila = toGrid.Width
|
||||
If toGrid.ScrollBars = 2 Or toGrid.ScrollBars = 3
|
||||
lnLatimeUtila = m.lnLatimeUtila - Sysmetric(SYSMETRIC_VSCROLLBARWIDTH)
|
||||
Endif
|
||||
If toGrid.BorderStyle = 1
|
||||
lnLatimeUtila = m.lnLatimeUtila - Sysmetric(SYSMETRIC_WINDOWBORDERWIDTH) * 2
|
||||
Endif
|
||||
|
||||
lnSpatiuLiber = m.lnLatimeUtila - m.lnSumBaseline
|
||||
|
||||
llModificat = .F.
|
||||
lnSumaAlocata = 0
|
||||
For lnI = 1 To m.lnColCount
|
||||
loCol = toGrid.Columns(m.lnI)
|
||||
If loCol.Visible And m.lnI <> m.lnUltimaCol
|
||||
lnTarget = loBaselineGrid.Item(loCol.Name) + Round(m.lnSpatiuLiber * loBaselineGrid.Item(loCol.Name) / m.lnSumBaseline, 0)
|
||||
lnTarget = Max(m.lnTarget, This.nLatimeMinima)
|
||||
lnSumaAlocata = m.lnSumaAlocata + m.lnTarget
|
||||
If loCol.Width <> m.lnTarget
|
||||
loCol.Width = m.lnTarget
|
||||
llModificat = .T.
|
||||
Endif
|
||||
Endif
|
||||
Endfor
|
||||
|
||||
* ultima coloana vizibila primeste restul exact, ca sa nu ramana pixeli goi din rotunjire
|
||||
loCol = toGrid.Columns(m.lnUltimaCol)
|
||||
lnTarget = Max(m.lnLatimeUtila - m.lnSumaAlocata, This.nLatimeMinima)
|
||||
If loCol.Width <> m.lnTarget
|
||||
loCol.Width = m.lnTarget
|
||||
llModificat = .T.
|
||||
Endif
|
||||
|
||||
Return m.llModificat
|
||||
Endproc
|
||||
|
||||
Enddefine
|
||||
@@ -117,7 +117,7 @@ Endproc && facturare_lista_de_preturi
|
||||
************************************ SFARSIT: facturare_lista_de_preturi ***********************************
|
||||
************************************ INCEPUT: facturare_contracte ******************************************
|
||||
Procedure facturare_contracte
|
||||
LPARAMETERS tcTip
|
||||
LPARAMETERS tcTip, toSursa
|
||||
|
||||
LOCAL lcTip
|
||||
lcTip = UPPER(ALLTRIM(TRANSFORM(m.tcTip)))
|
||||
@@ -127,17 +127,18 @@ Procedure facturare_contracte
|
||||
ENDIF
|
||||
DO CASE
|
||||
CASE m.lcTip = 'FACTURA LEI'
|
||||
factureaza(2)
|
||||
factureaza(2, NULL, toSursa)
|
||||
CASE m.lcTip = 'INVOICE'
|
||||
factureaza(6)
|
||||
factureaza(6, NULL, toSursa)
|
||||
CASE m.lcTip = 'FACTURA VALUTA'
|
||||
factureaza(52)
|
||||
factureaza(52, NULL, toSursa)
|
||||
ENDCASE
|
||||
Endproc && facturare_contracte
|
||||
************************************ SFARSIT: facturare_contracte ******************************************
|
||||
************************************ INCEPUT: facturare_comenzi ********************************************
|
||||
Procedure facturare_comenzi
|
||||
factureaza(3)
|
||||
LPARAMETERS toSursa
|
||||
factureaza(3, NULL, toSursa)
|
||||
Endproc && facturare_comenzi
|
||||
************************************ SFARSIT: facturare_comenzi ********************************************
|
||||
************************************ INCEPUT: facturare_avize ***********************************************
|
||||
@@ -338,7 +339,7 @@ Procedure vizualizare_facturi
|
||||
|
||||
lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ;
|
||||
['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),delegat c(70),'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),id_utilm I,utilm c(30),dataoram t,delegat c(70),'+] + ;
|
||||
['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ;
|
||||
['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ;
|
||||
['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ;
|
||||
@@ -350,7 +351,7 @@ Procedure vizualizare_facturi
|
||||
|
||||
lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ;
|
||||
['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,id_utilm,utilm,dataoram,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ;
|
||||
['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ;
|
||||
['valuta,id_valuta,valval,tvaval,totval,'+] + ;
|
||||
@@ -2391,4 +2392,56 @@ Function calculeaza_totaluri
|
||||
Release lnProcTvav_19_119
|
||||
Return toArticol
|
||||
Endfunc
|
||||
******************************************* SFARSIT: calculeaza_totaluri *******************************************
|
||||
******************************************* SFARSIT: calculeaza_totaluri *******************************************
|
||||
|
||||
******************************************* INCEPUT: recalc_discount_linie *******************************************
|
||||
Function recalc_discount_linie
|
||||
Lparameters toArticol, tnValoare, tnTip
|
||||
Local lnProcent, lnDiscountTva, lnDiscountTva_val
|
||||
If toArticol.cu_tva = 0
|
||||
Do Case
|
||||
Case tnTip = 1
|
||||
lnProcent = tnValoare
|
||||
If toArticol.tip_valuta = 0
|
||||
toArticol.discountftva = Round(toArticol.pretftva * lnProcent / 100, gnPPretV)
|
||||
Else
|
||||
toArticol.vdiscountftva = Round(toArticol.vpretftva * lnProcent / 100, gnPVal)
|
||||
toArticol.discountftva = Round(toArticol.vdiscountftva * toArticol.Curs / toArticol.multiplicator, gnPPretV)
|
||||
Endif
|
||||
Case tnTip = 2
|
||||
toArticol.discountftva = tnValoare
|
||||
Case tnTip = 3
|
||||
toArticol.vdiscountftva = tnValoare
|
||||
toArticol.discountftva = Round(toArticol.vdiscountftva * toArticol.Curs / toArticol.multiplicator, gnPPretV)
|
||||
Endcase
|
||||
lnDiscountTva = Round(toArticol.discountftva * (toArticol.proc_tvav-1), gnPPretV)
|
||||
toArticol.discountctva = lnDiscountTva + toArticol.discountftva
|
||||
If toArticol.tip_valuta = 1
|
||||
lnDiscountTva_val = Round(toArticol.vdiscountftva * (toArticol.proc_tvav-1), gnPVal)
|
||||
toArticol.vdiscountctva = lnDiscountTva_val + toArticol.vdiscountftva
|
||||
Endif
|
||||
Else
|
||||
Do Case
|
||||
Case tnTip = 1
|
||||
lnProcent = tnValoare
|
||||
If toArticol.tip_valuta = 0
|
||||
toArticol.discountctva = Round(toArticol.pretctva * lnProcent / 100, gnPPretV)
|
||||
Else
|
||||
toArticol.vdiscountctva = Round(toArticol.vpretctva * lnProcent / 100, gnPVal)
|
||||
toArticol.discountctva = Round(toArticol.vdiscountctva * toArticol.Curs / toArticol.multiplicator, gnPPretV)
|
||||
Endif
|
||||
Case tnTip = 2
|
||||
toArticol.discountctva = tnValoare
|
||||
Case tnTip = 3
|
||||
toArticol.vdiscountctva = tnValoare
|
||||
toArticol.discountctva = Round(toArticol.vdiscountctva * toArticol.Curs / toArticol.multiplicator, gnPPretV)
|
||||
Endcase
|
||||
toArticol.discountftva = IIF(toArticol.proc_tvav<>0,Round(toArticol.discountctva / toArticol.proc_tvav , gnPPretV),0)
|
||||
If toArticol.tip_valuta = 1
|
||||
toArticol.vdiscountftva = IIF(toArticol.proc_tvav<>0,Round(toArticol.vdiscountctva / toArticol.proc_tvav , gnPVal),0)
|
||||
Endif
|
||||
Endif
|
||||
toArticol.procdisc = IIF(toArticol.pretftva <> 0, Round(toArticol.discountftva / toArticol.pretftva * 100, 2), 0)
|
||||
Return toArticol
|
||||
Endfunc
|
||||
******************************************* SFARSIT: recalc_discount_linie *******************************************
|
||||
@@ -27,7 +27,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcTestLog)
|
||||
ON ERROR DO ErrBench WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WrLogB WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -28,7 +28,7 @@ gcUltimaEroareSQL = ''
|
||||
ON ERROR DO ErrDeCe WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WrLog5 WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -68,7 +68,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcTestLog)
|
||||
ON ERROR DO VpaErr200 WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WriteTestLog200 WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -50,7 +50,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcTestLog)
|
||||
ON ERROR DO VpaErrRTVAI WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WriteTestLogRTVAI WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -33,7 +33,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcTestLog)
|
||||
ON ERROR DO VpaErrMargine WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WriteTestLogMargine WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -28,7 +28,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcTestLog)
|
||||
ON ERROR DO VpaErrTvainc WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WriteTestLogTvainc WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -40,7 +40,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcTestLog)
|
||||
ON ERROR DO VpaErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WriteTestLog WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -29,7 +29,7 @@ gcUltimaEroareSQL = ''
|
||||
ON ERROR DO ErrRand WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WrLog4 WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -26,7 +26,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcTestLog)
|
||||
ON ERROR DO ErrCompl WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
DO WrLog3 WITH 'mediu OK'
|
||||
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ gnMockRaspuns = 6
|
||||
ON ERROR DO ErrP1000 WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WrLog2 WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -45,7 +45,7 @@ gnMockRaspuns = 6
|
||||
ON ERROR DO ErrTimp WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WrLog WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
100
utile/Teste/editare_factura/assert_id_part_rez.prg
Normal file
100
utile/Teste/editare_factura/assert_id_part_rez.prg
Normal file
@@ -0,0 +1,100 @@
|
||||
* assert_id_part_rez.prg
|
||||
* Verificarea pe date vii ceruta inainte de reparatia 3.3 (id_part_rez / id_lucrare_rez la editare).
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
*!* A. coloanele exista in VANZARI_DETALII?
|
||||
lcSql = "select column_name, data_type, nullable from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VANZARI_DETALII' and column_name in ('ID_PART_REZ','ID_LUCRARE_REZ','ID_VANZARE','ID_VANZARE_DET','STERS') order by column_name"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsA')
|
||||
STRTOFILE('A) VANZARI_DETALII coloane rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsA'), RECCOUNT('crsA'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsA')
|
||||
SELECT crsA
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADR(ALLTRIM(column_name), 18) + ' ' + PADR(ALLTRIM(data_type), 10) + ' null=' + ALLTRIM(NVL(nullable,'?')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsA
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* B. exista randuri cu valori nenule?
|
||||
lcSql = "select count(*) as tot, count(id_part_rez) as cu_part, count(id_lucrare_rez) as cu_lucr from vanzari_detalii where sters = 0"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsB')
|
||||
STRTOFILE('B) numaratoare rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsB') AND RECCOUNT('crsB') > 0
|
||||
STRTOFILE(' total=' + TRANSFORM(crsB.tot) + ' cu id_part_rez=' + TRANSFORM(crsB.cu_part) + ' cu id_lucrare_rez=' + TRANSFORM(crsB.cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN crsB
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* C. documentele cu valori nenule (top 20)
|
||||
lcSql = "select id_vanzare, count(*) as nr, count(id_part_rez) as cu_part, count(id_lucrare_rez) as cu_lucr from vanzari_detalii where sters = 0 and (id_part_rez is not null or id_lucrare_rez is not null) group by id_vanzare order by id_vanzare desc"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsC')
|
||||
STRTOFILE('C) documente cu rezervare rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsC'), RECCOUNT('crsC'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsC')
|
||||
SELECT crsC
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' linii=' + TRANSFORM(nr) + ' cu_part=' + TRANSFORM(cu_part) + ' cu_lucr=' + TRANSFORM(cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsC
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* D. VVANZARI_ARTICOLE chiar nu le expune?
|
||||
lcSql = "select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VVANZARI_ARTICOLE' and column_name in ('ID_PART_REZ','ID_LUCRARE_REZ') order by column_name"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsD')
|
||||
STRTOFILE('D) VVANZARI_ARTICOLE expune? rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsD'), RECCOUNT('crsD'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsD
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* E. ce face Oracle cu valoarea (BODY 4110-4165)
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 4100 and 4165 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsE')
|
||||
STRTOFILE('E) BODY 4100-4165 rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsE'), RECCOUNT('crsE'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsE')
|
||||
SELECT crsE
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsE
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* F. orice consumator al coloanelor in PL/SQL (unde conteaza 0 vs NULL)
|
||||
lcSql = "select name, type, line, text from user_source where (lower(text) like '%id_part_rez%' or lower(text) like '%id_lucrare_rez%') order by name, type, line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsF')
|
||||
STRTOFILE('F) consumatori PL/SQL rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsF'), RECCOUNT('crsF'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsF')
|
||||
SELECT crsF
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADR(ALLTRIM(name), 22) + ' ' + PADR(ALLTRIM(type), 14) + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsF
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
100
utile/Teste/editare_factura/assert_id_part_rez2.prg
Normal file
100
utile/Teste/editare_factura/assert_id_part_rez2.prg
Normal file
@@ -0,0 +1,100 @@
|
||||
* assert_id_part_rez2.prg
|
||||
* Unde traiesc de fapt ID_PART_REZ / ID_LUCRARE_REZ: VANZARI_DETALII nu le are (proba 1).
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez2_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
*!* G. toate obiectele MARIUSM_AUTO care au coloanele
|
||||
lcSql = "select t.table_name, o.object_type, count(*) as nr from all_tab_columns t, all_objects o where t.owner = 'MARIUSM_AUTO' and o.owner = t.owner and o.object_name = t.table_name and t.column_name in ('ID_PART_REZ','ID_LUCRARE_REZ') group by t.table_name, o.object_type order by t.table_name"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsG')
|
||||
STRTOFILE('G) obiecte cu coloanele rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsG'), RECCOUNT('crsG'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsG')
|
||||
SELECT crsG
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADR(ALLTRIM(table_name), 32) + ' ' + PADR(ALLTRIM(object_type), 12) + ' col=' + TRANSFORM(nr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsG
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* H. cate randuri RUL au valori nenule, si pe ce documente
|
||||
lcSql = "select count(*) as tot, count(id_part_rez) as cu_part, count(id_lucrare_rez) as cu_lucr from rul where sters = 0"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsH')
|
||||
STRTOFILE('H) RUL rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsH') AND RECCOUNT('crsH') > 0
|
||||
STRTOFILE(' total=' + TRANSFORM(crsH.tot) + ' cu id_part_rez=' + TRANSFORM(crsH.cu_part) + ' cu id_lucrare_rez=' + TRANSFORM(crsH.cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN crsH
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* I. documente de vanzare cu rezervare pe RUL
|
||||
lcSql = "select v.id_vanzare, v.tip, count(*) as nr, count(r.id_part_rez) as cu_part, count(r.id_lucrare_rez) as cu_lucr from rul r, vanzari v where r.cod = v.cod and r.sters = 0 and v.sters = 0 and (r.id_part_rez is not null or r.id_lucrare_rez is not null) group by v.id_vanzare, v.tip order by v.id_vanzare desc"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsI')
|
||||
STRTOFILE('I) documente vanzare cu rezervare rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsI'), RECCOUNT('crsI'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsI')
|
||||
SELECT crsI
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(NVL(tip,-1)) + ' linii=' + TRANSFORM(nr) + ' cu_part=' + TRANSFORM(cu_part) + ' cu_lucr=' + TRANSFORM(cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsI
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* J. de unde citeste PACK_FACTURARE coloanele (BODY 3190-3270)
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 3190 and 3270 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsJ')
|
||||
STRTOFILE('J) BODY 3190-3270 rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsJ'), RECCOUNT('crsJ'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsJ')
|
||||
SELECT crsJ
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsJ
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* K. ce coloane are VANZARI_DETALII, integral (ca sa nu ramana dubiu)
|
||||
lcSql = "select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VANZARI_DETALII' order by column_id"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsK')
|
||||
STRTOFILE('K) VANZARI_DETALII toate coloanele rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsK'), RECCOUNT('crsK'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsK')
|
||||
SELECT crsK
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsK
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* L. ce coloane are VANZARI_DETALII_TEMP
|
||||
lcSql = "select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VANZARI_DETALII_TEMP' order by column_id"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsL')
|
||||
STRTOFILE('L) VANZARI_DETALII_TEMP coloane rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsL'), RECCOUNT('crsL'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsL')
|
||||
SELECT crsL
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsL
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
86
utile/Teste/editare_factura/assert_id_part_rez3.prg
Normal file
86
utile/Teste/editare_factura/assert_id_part_rez3.prg
Normal file
@@ -0,0 +1,86 @@
|
||||
* assert_id_part_rez3.prg
|
||||
* Unde persista legatura de rezervare, daca VANZARI_DETALII nu are coloanele (proba 2).
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez3_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
*!* M. coloanele RUL
|
||||
lcSql = "select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'RUL' order by column_id"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsM')
|
||||
STRTOFILE('M) RUL coloane rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsM'), RECCOUNT('crsM'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsM')
|
||||
SELECT crsM
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsM
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* N. documente de vanzare cu rezervare pe RUL (fara v.tip)
|
||||
lcSql = "select v.id_vanzare as idv, count(*) as nr, count(r.id_part_rez) as cu_part, count(r.id_lucrare_rez) as cu_lucr from rul r, vanzari v where r.cod = v.cod and r.sters = 0 and v.sters = 0 and (r.id_part_rez is not null or r.id_lucrare_rez is not null) group by v.id_vanzare order by v.id_vanzare desc"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsN')
|
||||
STRTOFILE('N) documente vanzare cu rezervare rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsN'), RECCOUNT('crsN'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsN')
|
||||
SELECT crsN
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(idv) + ' randuri_rul=' + TRANSFORM(nr) + ' cu_part=' + TRANSFORM(cu_part) + ' cu_lucr=' + TRANSFORM(cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* O. unde scrie PACK_FACTURARE in VANZARI_DETALII (mutarea din TEMP)
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and lower(text) like '%vanzari_detalii%' order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsO')
|
||||
STRTOFILE('O) referinte VANZARI_DETALII in BODY rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsO'), RECCOUNT('crsO'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsO')
|
||||
SELECT crsO
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsO
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* P. cum se calculeaza CUSTODIE (BODY 4166-4200)
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 4166 and 4200 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsP')
|
||||
STRTOFILE('P) BODY 4166-4200 rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsP'), RECCOUNT('crsP'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsP')
|
||||
SELECT crsP
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsP
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* Q. sursa view-ului VVANZARI_ARTICOLE (ca sa se vada de unde vine, si ce se poate adauga fara sa se atinga)
|
||||
lcSql = "select count(*) as nr from all_views where owner = 'MARIUSM_AUTO' and view_name = 'VVANZARI_ARTICOLE'"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsQ')
|
||||
STRTOFILE('Q) VVANZARI_ARTICOLE e view? rc=' + TRANSFORM(lnS) + ' nr=' + TRANSFORM(IIF(USED('crsQ') AND RECCOUNT('crsQ')>0, crsQ.nr, -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsQ')
|
||||
USE IN crsQ
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
74
utile/Teste/editare_factura/assert_id_part_rez4.prg
Normal file
74
utile/Teste/editare_factura/assert_id_part_rez4.prg
Normal file
@@ -0,0 +1,74 @@
|
||||
* assert_id_part_rez4.prg
|
||||
* Documentele de vanzare care au legatura de rezervare pe RUL (candidati pentru proba pe date reale).
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez4_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
lcSql = [select v.id_vanzare as idv, v.id_firma as idf, count(*) as nr, ] + ;
|
||||
[count(r.id_part_rez) as cu_part, count(r.id_lucrare_rez) as cu_lucr ] + ;
|
||||
[from rul r, vanzari v ] + ;
|
||||
[where r.cod = v.cod and r.sters = 0 and v.sters = 0 ] + ;
|
||||
[and (r.id_part_rez is not null or r.id_lucrare_rez is not null) ] + ;
|
||||
[group by v.id_vanzare, v.id_firma order by v.id_vanzare desc]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsN')
|
||||
STRTOFILE('N) documente vanzare cu rezervare rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsN'), RECCOUNT('crsN'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsN')
|
||||
SELECT crsN
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(idv) + ' id_firma=' + TRANSFORM(NVL(idf,-1)) + ' randuri_rul=' + TRANSFORM(nr) + ' cu_part=' + TRANSFORM(cu_part) + ' cu_lucr=' + TRANSFORM(cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* distributia pe tipuri de rulaj a randurilor cu rezervare
|
||||
lcSql = [select r.id_tip_rulaj as tipr, count(*) as nr from rul r ] + ;
|
||||
[where r.sters = 0 and (r.id_part_rez is not null or r.id_lucrare_rez is not null) ] + ;
|
||||
[group by r.id_tip_rulaj order by r.id_tip_rulaj]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsO')
|
||||
STRTOFILE('O) distributie id_tip_rulaj rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsO'), RECCOUNT('crsO'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsO')
|
||||
SELECT crsO
|
||||
SCAN
|
||||
STRTOFILE(' id_tip_rulaj=' + TRANSFORM(NVL(tipr,-1)) + ' randuri=' + TRANSFORM(nr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsO
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* constrangeri pe RUL.ID_PART_REZ / ID_LUCRARE_REZ (0 vs NULL)
|
||||
lcSql = [select c.constraint_name as cnume, c.constraint_type as ctip, cc.column_name as ccol ] + ;
|
||||
[from all_constraints c, all_cons_columns cc ] + ;
|
||||
[where c.owner = 'MARIUSM_AUTO' and c.constraint_name = cc.constraint_name ] + ;
|
||||
[and c.owner = cc.owner and cc.table_name = 'RUL' ] + ;
|
||||
[and cc.column_name in ('ID_PART_REZ','ID_LUCRARE_REZ')]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsP')
|
||||
STRTOFILE('P) constrangeri RUL rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsP'), RECCOUNT('crsP'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsP')
|
||||
SELECT crsP
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(NVL(cnume,'')) + ' tip=' + ALLTRIM(NVL(ctip,'')) + ' col=' + ALLTRIM(NVL(ccol,'')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsP
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
55
utile/Teste/editare_factura/assert_id_part_rez5.prg
Normal file
55
utile/Teste/editare_factura/assert_id_part_rez5.prg
Normal file
@@ -0,0 +1,55 @@
|
||||
* assert_id_part_rez5.prg
|
||||
* Candidatii pentru proba pe date reale + coloanele VANZARI.
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez5_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
lcSql = [select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and table_name = 'VANZARI' order by column_id]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsV')
|
||||
STRTOFILE('V) VANZARI coloane rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsV'), RECCOUNT('crsV'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsV')
|
||||
SELECT crsV
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsV
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
lcSql = [select v.id_vanzare as idv, count(*) as nr, ] + ;
|
||||
[count(r.id_part_rez) as cu_part, count(r.id_lucrare_rez) as cu_lucr ] + ;
|
||||
[from rul r, vanzari v ] + ;
|
||||
[where r.cod = v.cod and r.sters = 0 and v.sters = 0 ] + ;
|
||||
[and (r.id_part_rez is not null or r.id_lucrare_rez is not null) ] + ;
|
||||
[group by v.id_vanzare order by v.id_vanzare desc]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsN')
|
||||
STRTOFILE('N) documente vanzare cu rezervare rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsN'), RECCOUNT('crsN'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsN')
|
||||
SELECT crsN
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(idv) + ' randuri_rul=' + TRANSFORM(nr) + ' cu_part=' + TRANSFORM(cu_part) + ' cu_lucr=' + TRANSFORM(cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
78
utile/Teste/editare_factura/assert_id_part_rez6.prg
Normal file
78
utile/Teste/editare_factura/assert_id_part_rez6.prg
Normal file
@@ -0,0 +1,78 @@
|
||||
* assert_id_part_rez6.prg
|
||||
* Exista o cheie directa intre randul RUL si linia de document (id_vanzare_det)?
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez6_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql, lcDoc
|
||||
lcDoc = '540'
|
||||
|
||||
*!* randurile RUL ale documentului
|
||||
lcSql = [select r.id_rul as idrul, r.id_fact as idfact, r.id_articol as idart, r.id_gestiune as idgest, ] + ;
|
||||
[r.cont as ccont, r.pret as npret, r.cante as ncante, r.pretv as npretv, ] + ;
|
||||
[r.id_tip_rulaj as tipr, r.id_part_rez as ipr, r.id_lucrare_rez as ilr, r.serie as cserie ] + ;
|
||||
[from rul r, vanzari v where r.cod = v.cod and v.id_vanzare = ] + lcDoc + ;
|
||||
[ and r.sters = 0 order by r.id_tip_rulaj desc, r.id_rul]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsR')
|
||||
STRTOFILE('R) RUL doc ' + lcDoc + ' rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsR'), RECCOUNT('crsR'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsR')
|
||||
SELECT crsR
|
||||
SCAN
|
||||
STRTOFILE(' id_rul=' + TRANSFORM(idrul) + ' id_fact=' + IIF(ISNULL(idfact),'NULL',TRANSFORM(idfact)) + ;
|
||||
' art=' + TRANSFORM(NVL(idart,-1)) + ' gest=' + TRANSFORM(NVL(idgest,-1)) + ;
|
||||
' cont=[' + ALLTRIM(NVL(ccont,'')) + '] pret=' + TRANSFORM(NVL(npret,0)) + ;
|
||||
' cante=' + TRANSFORM(NVL(ncante,0)) + ' pretv=' + TRANSFORM(NVL(npretv,0)) + ;
|
||||
' tipr=' + TRANSFORM(NVL(tipr,-1)) + ' serie=[' + ALLTRIM(NVL(cserie,'')) + ']' + ;
|
||||
' id_part_rez=' + IIF(ISNULL(ipr),'NULL',TRANSFORM(ipr)) + ;
|
||||
' id_lucrare_rez=' + IIF(ISNULL(ilr),'NULL',TRANSFORM(ilr)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsR
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* liniile documentului
|
||||
lcSql = [select d.id_vanzare_det as idvd, d.id_articol as idart, d.id_gestiune as idgest, ] + ;
|
||||
[d.cont as ccont, d.pret_achizitie as npa, d.cantitate as ncant, d.serie as cserie ] + ;
|
||||
[from vanzari_detalii d where d.id_vanzare = ] + lcDoc + [ and d.sters = 0 order by d.id_vanzare_det]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsD')
|
||||
STRTOFILE('S) VANZARI_DETALII doc ' + lcDoc + ' rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsD'), RECCOUNT('crsD'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare_det=' + TRANSFORM(idvd) + ' art=' + TRANSFORM(NVL(idart,-1)) + ;
|
||||
' gest=' + TRANSFORM(NVL(idgest,-1)) + ' cont=[' + ALLTRIM(NVL(ccont,'')) + ']' + ;
|
||||
' pret_achiz=' + TRANSFORM(NVL(npa,0)) + ' cant=' + TRANSFORM(NVL(ncant,0)) + ;
|
||||
' serie=[' + ALLTRIM(NVL(cserie,'')) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsD
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* cate randuri RUL au id_fact care exista in vanzari_detalii (potrivire directa)
|
||||
lcSql = [select count(*) as tot, count(r.id_fact) as cu_fact ] + ;
|
||||
[from rul r where r.sters = 0 and (r.id_part_rez is not null or r.id_lucrare_rez is not null)]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsT')
|
||||
STRTOFILE('T) RUL cu rezervare: id_fact completat rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsT') AND RECCOUNT('crsT') > 0
|
||||
STRTOFILE(' total=' + TRANSFORM(crsT.tot) + ' cu_id_fact=' + TRANSFORM(crsT.cu_fact) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN crsT
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
78
utile/Teste/editare_factura/assert_id_part_rez7.prg
Normal file
78
utile/Teste/editare_factura/assert_id_part_rez7.prg
Normal file
@@ -0,0 +1,78 @@
|
||||
* assert_id_part_rez7.prg
|
||||
* Cate randuri au valori NENULE SI NENULE-DE-ZERO; ce documente. Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez7_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
lcSql = [select count(*) as tot, ] + ;
|
||||
[sum(case when r.id_part_rez is not null and r.id_part_rez <> 0 then 1 else 0 end) as part_nz, ] + ;
|
||||
[sum(case when r.id_lucrare_rez is not null and r.id_lucrare_rez <> 0 then 1 else 0 end) as lucr_nz, ] + ;
|
||||
[sum(case when r.id_part_rez = 0 then 1 else 0 end) as part_z ] + ;
|
||||
[from rul r where r.sters = 0]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsA')
|
||||
STRTOFILE('A) RUL rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsA') AND RECCOUNT('crsA') > 0
|
||||
STRTOFILE(' total=' + TRANSFORM(crsA.tot) + ' part<>0=' + TRANSFORM(NVL(crsA.part_nz,0)) + ;
|
||||
' lucr<>0=' + TRANSFORM(NVL(crsA.lucr_nz,0)) + ' part=0=' + TRANSFORM(NVL(crsA.part_z,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN crsA
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
lcSql = [select v.id_vanzare as idv, count(*) as nr, ] + ;
|
||||
[sum(case when r.id_part_rez is not null and r.id_part_rez <> 0 then 1 else 0 end) as part_nz, ] + ;
|
||||
[sum(case when r.id_lucrare_rez is not null and r.id_lucrare_rez <> 0 then 1 else 0 end) as lucr_nz ] + ;
|
||||
[from rul r, vanzari v where r.cod = v.cod and r.sters = 0 and v.sters = 0 ] + ;
|
||||
[and ((r.id_part_rez is not null and r.id_part_rez <> 0) or (r.id_lucrare_rez is not null and r.id_lucrare_rez <> 0)) ] + ;
|
||||
[group by v.id_vanzare order by v.id_vanzare desc]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsB')
|
||||
STRTOFILE('B) documente cu rezervare reala rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsB'), RECCOUNT('crsB'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsB')
|
||||
SELECT crsB
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(idv) + ' randuri_rul=' + TRANSFORM(nr) + ;
|
||||
' part<>0=' + TRANSFORM(NVL(part_nz,0)) + ' lucr<>0=' + TRANSFORM(NVL(lucr_nz,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsB
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* valorile efective, cu documentul si linia
|
||||
lcSql = [select v.id_vanzare as idv, r.id_rul as idrul, r.id_articol as idart, r.id_gestiune as idgest, ] + ;
|
||||
[r.cont as ccont, r.pret as npret, r.cante as ncante, r.id_tip_rulaj as tipr, ] + ;
|
||||
[r.id_part_rez as ipr, r.id_lucrare_rez as ilr ] + ;
|
||||
[from rul r, vanzari v where r.cod = v.cod and r.sters = 0 and v.sters = 0 ] + ;
|
||||
[and ((r.id_part_rez is not null and r.id_part_rez <> 0) or (r.id_lucrare_rez is not null and r.id_lucrare_rez <> 0)) ] + ;
|
||||
[order by v.id_vanzare desc, r.id_rul]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsC')
|
||||
STRTOFILE('C) randurile cu rezervare reala rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsC'), RECCOUNT('crsC'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsC')
|
||||
SELECT crsC
|
||||
SCAN
|
||||
STRTOFILE(' doc=' + TRANSFORM(idv) + ' id_rul=' + TRANSFORM(idrul) + ' art=' + TRANSFORM(NVL(idart,-1)) + ;
|
||||
' gest=' + TRANSFORM(NVL(idgest,-1)) + ' cont=[' + ALLTRIM(NVL(ccont,'')) + ']' + ;
|
||||
' pret=' + TRANSFORM(NVL(npret,0)) + ' cante=' + TRANSFORM(NVL(ncante,0)) + ' tipr=' + TRANSFORM(NVL(tipr,-1)) + ;
|
||||
' id_part_rez=' + IIF(ISNULL(ipr),'NULL',TRANSFORM(ipr)) + ;
|
||||
' id_lucrare_rez=' + IIF(ISNULL(ilr),'NULL',TRANSFORM(ilr)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsC
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
43
utile/Teste/editare_factura/assert_id_part_rez8.prg
Normal file
43
utile/Teste/editare_factura/assert_id_part_rez8.prg
Normal file
@@ -0,0 +1,43 @@
|
||||
* assert_id_part_rez8.prg
|
||||
* Alegerea unui document de control cu id_part_rez = 0 SI linii gestionabile (in_stoc <> 0).
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez8_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
lcSql = [select v.id_vanzare as idv, count(*) as nr, ] + ;
|
||||
[sum(case when nvl(n.in_stoc,0) <> 0 then 1 else 0 end) as gest ] + ;
|
||||
[from rul r, vanzari v, nom_articole n ] + ;
|
||||
[where r.cod = v.cod and r.sters = 0 and v.sters = 0 and n.id_articol = r.id_articol ] + ;
|
||||
[and r.id_part_rez = 0 and r.cante <> 0 ] + ;
|
||||
[group by v.id_vanzare having sum(case when nvl(n.in_stoc,0) <> 0 then 1 else 0 end) > 0 ] + ;
|
||||
[order by v.id_vanzare desc]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsA')
|
||||
STRTOFILE('A) docuri cu id_part_rez=0 si articole in stoc rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsA'), RECCOUNT('crsA'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsA')
|
||||
SELECT crsA
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(idv) + ' randuri=' + TRANSFORM(nr) + ' gestionabile=' + TRANSFORM(NVL(gest,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsA
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
68
utile/Teste/editare_factura/assert_pretval_apelanti.prg
Normal file
68
utile/Teste/editare_factura/assert_pretval_apelanti.prg
Normal file
@@ -0,0 +1,68 @@
|
||||
* assert_pretval_apelanti.prg
|
||||
* Asertiune ceruta inainte de reparatia vpretctva/vdiscountctva (docs\propunere_comparatie_coloane_crsfactura.md:310):
|
||||
* toti apelantii lui prelucreaza_facturacrs trebuie sa aiba pret_val si discount_unitar_val in cursorul sursa.
|
||||
* Doar SELECT pe MARIUSM_AUTO. Sursele statice (Create Cursor / SELECT ... As pret_val) se verifica in raport.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_pretval_apelanti_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
*!* A. crsdetalii (ofacturare_stoc.prg:578 "select * from fact_vfacturi_detalii")
|
||||
lcSql = "select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'FACT_VFACTURI_DETALII' and column_name in ('PRET_VAL','DISCOUNT_UNITAR_VAL') order by column_name"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsA')
|
||||
STRTOFILE('A) FACT_VFACTURI_DETALII rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsA'), RECCOUNT('crsA'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsA')
|
||||
SELECT crsA
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsA
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* B. antetele procedurilor care produc ref cursoarele celorlalti apelanti Oracle
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' " + ;
|
||||
"and (lower(text) like '%procedure citeste_vanzari_seturi%' or lower(text) like '%procedure citeste_proforme_seturi%' " + ;
|
||||
"or lower(text) like '%procedure finalizeaza_scriere_verificare%') order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsB')
|
||||
STRTOFILE('B) antete proceduri rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsB'), RECCOUNT('crsB'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsB')
|
||||
SELECT crsB
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsB
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* C. toate liniile din corpul pachetului care numesc pret_val / discount_unitar_val
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' " + ;
|
||||
"and (lower(text) like '%pret_val%' or lower(text) like '%discount_unitar_val%') order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsC')
|
||||
STRTOFILE('C) linii cu pret_val/discount_unitar_val rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsC'), RECCOUNT('crsC'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsC')
|
||||
SELECT crsC
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsC
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
42
utile/Teste/editare_factura/assert_pretval_apelanti2.prg
Normal file
42
utile/Teste/editare_factura/assert_pretval_apelanti2.prg
Normal file
@@ -0,0 +1,42 @@
|
||||
* assert_pretval_apelanti2.prg -- delimitarea procedurilor din PACK_FACTURARE intre 14200 si 15900
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_pretval_apelanti2_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
LOCAL lnS, lcSql
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' " + ;
|
||||
"and line between 14200 and 15900 and regexp_like(text, '^\s*(procedure|function)\s', 'i') order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsH')
|
||||
STRTOFILE('antete 14200..15900 rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsH'), RECCOUNT('crsH'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsH')
|
||||
SELECT crsH
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsH
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 15100 and 15200 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsD')
|
||||
STRTOFILE('corp 15100..15200 rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsD
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
30
utile/Teste/editare_factura/assert_pretval_apelanti3.prg
Normal file
30
utile/Teste/editare_factura/assert_pretval_apelanti3.prg
Normal file
@@ -0,0 +1,30 @@
|
||||
* assert_pretval_apelanti3.prg -- corpul finalizeaza_scriere_verificare (14238..14340)
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_pretval_apelanti3_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
LOCAL lnS, lcSql
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 14238 and 14340 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsD')
|
||||
STRTOFILE('rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE(PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsD
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
30
utile/Teste/editare_factura/assert_pretval_apelanti4.prg
Normal file
30
utile/Teste/editare_factura/assert_pretval_apelanti4.prg
Normal file
@@ -0,0 +1,30 @@
|
||||
* assert_pretval_apelanti3.prg -- corpul finalizeaza_scriere_verificare (14238..14340)
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_pretval_apelanti4_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
LOCAL lnS, lcSql
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 14183 and 14238 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsD')
|
||||
STRTOFILE('rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE(PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsD
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
60
utile/Teste/editare_factura/check_cols.prg
Normal file
60
utile/Teste/editare_factura/check_cols.prg
Normal file
@@ -0,0 +1,60 @@
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\check_cols_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS
|
||||
lnS = goExecutor.oExecute("select column_name from user_tab_columns where table_name='VPLAJE_NUMERE' order by column_id", 'crsCol1')
|
||||
STRTOFILE('VPLAJE_NUMERE cols: ' + Transform(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsCol1')
|
||||
SELECT crsCol1
|
||||
SCAN
|
||||
STRTOFILE(column_name + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS2
|
||||
lnS2 = goExecutor.oExecute("select column_name, data_type from user_tab_columns where table_name in ('FACT_VFACTURI') and column_name in ('INCASAT','NR_INCASARE','INCASATCARD','INCASATTICHETE','TIP_INCASARE','SERIE_CHIT') order by column_name", 'crsCol2')
|
||||
STRTOFILE('FACT_VFACTURI incasare cols: ' + Transform(lnS2) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsCol2')
|
||||
SELECT crsCol2
|
||||
SCAN
|
||||
STRTOFILE(column_name + ' ' + data_type + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS3
|
||||
lnS3 = goExecutor.oExecute("select column_name, data_type from user_tab_columns where table_name = 'VANZARI' and column_name in ('INCASAT','NR_INCASARE','INCASATCARD','INCASATTICHETE','TIP_INCASARE','SERIE_CHIT','ID_CASA') order by column_name", 'crsCol3')
|
||||
STRTOFILE('VANZARI incasare cols: ' + Transform(lnS3) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsCol3')
|
||||
SELECT crsCol3
|
||||
SCAN
|
||||
STRTOFILE(column_name + ' ' + data_type + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS4
|
||||
lnS4 = goExecutor.oExecute("select id_vanzare, incasat, nr_incasare from fact_vfacturi where id_vanzare=1071", 'crsDoc')
|
||||
STRTOFILE('doc 1071: ' + Transform(lnS4) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsDoc')
|
||||
SELECT crsDoc
|
||||
STRTOFILE('incasat=' + Transform(incasat) + ' nr_incasare=' + Transform(Nvl(nr_incasare,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
50
utile/Teste/editare_factura/check_doc1071_incasare.prg
Normal file
50
utile/Teste/editare_factura/check_doc1071_incasare.prg
Normal file
@@ -0,0 +1,50 @@
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\check_doc1071_incasare_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS
|
||||
lnS = goExecutor.oExecute("select id_vanzare, incasat, nr_incasare, serie_chit, tip_incasare, cod, numar_act from fact_vfacturi where id_vanzare=1071", 'crsD')
|
||||
STRTOFILE('doc1071: ' + Transform(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsD')
|
||||
SELECT crsD
|
||||
STRTOFILE('incasat=' + Transform(incasat) + ' nr_incasare=' + Transform(Nvl(nr_incasare,-1)) + ;
|
||||
' serie_chit=[' + Transform(Nvl(serie_chit,'?')) + '] tip_incasare=' + Transform(Nvl(tip_incasare,-1)) + ;
|
||||
' cod=' + Transform(cod) + ' numar_act=' + Transform(numar_act) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS2
|
||||
lnS2 = goExecutor.oExecute("select scd, scc, id_fdoc, serie_act, nract, suma, sters, perechec from act where cod=(select cod from fact_vfacturi where id_vanzare=1071) and perechec=(select numar_act from fact_vfacturi where id_vanzare=1071) and substr(scd,1,1)='5' and scc<>'418'", 'crsAct')
|
||||
STRTOFILE('act rows: ' + Transform(lnS2) + ' reccount=' + Transform(Iif(Used('crsAct'),Reccount('crsAct'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsAct')
|
||||
SELECT crsAct
|
||||
SCAN
|
||||
STRTOFILE('scd=' + scd + ' scc=' + scc + ' id_fdoc=' + Transform(Nvl(id_fdoc,-1)) + ' serie_act=' + Transform(Nvl(serie_act,'?')) + ;
|
||||
' nract=' + Transform(Nvl(nract,0)) + ' suma=' + Transform(Nvl(suma,0)) + ' sters=' + Transform(sters) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS3
|
||||
lnS3 = goExecutor.oExecute("select PACK_SESIUNE.getoptiunefirma(USER,'ID_FDOC_CHITANTA') as chit, PACK_SESIUNE.getoptiunefirma(USER,'ID_FDOC_BONFISCAL') as bon, PACK_SESIUNE.getoptiunefirma(USER,'ID_FDOC_CARD') as card from dual", 'crsOpt')
|
||||
STRTOFILE('optiuni fdoc: ' + Transform(lnS3) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsOpt')
|
||||
SELECT crsOpt
|
||||
STRTOFILE('ID_FDOC_CHITANTA=' + Transform(chit) + ' ID_FDOC_BONFISCAL=' + Transform(bon) + ' ID_FDOC_CARD=' + Transform(card) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
29
utile/Teste/editare_factura/check_tip_incasare_distrib.prg
Normal file
29
utile/Teste/editare_factura/check_tip_incasare_distrib.prg
Normal file
@@ -0,0 +1,29 @@
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\check_tip_incasare_distrib_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS
|
||||
lnS = goExecutor.oExecute("select tip_incasare, count(*) as nr from fact_vfacturi where incasat<>0 and sters=0 group by tip_incasare order by tip_incasare", 'crsD')
|
||||
STRTOFILE('distrib: ' + Transform(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE('tip_incasare=' + Transform(Nvl(tip_incasare,-1)) + ' nr=' + Transform(nr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
27
utile/Teste/editare_factura/check_vartype_semantics.prg
Normal file
27
utile/Teste/editare_factura/check_vartype_semantics.prg
Normal file
@@ -0,0 +1,27 @@
|
||||
* check_vartype_semantics.prg
|
||||
* Verifica empiric daca Vartype(varNedeclarata) arunca eroare sau intoarce 'U',
|
||||
* fara Oracle, fara conectare - doar semantica limbajului VFP.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\check_vartype_semantics_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
LOCAL lcRezultat
|
||||
lcRezultat = 'NEATINS'
|
||||
lcRezultat = Vartype(poNedeclaratXyz)
|
||||
STRTOFILE('Vartype(poNedeclaratXyz) = [' + Transform(lcRezultat) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL lcRezultat2
|
||||
lcRezultat2 = 'NEATINS'
|
||||
lcRezultat2 = Type('poNedeclaratXyz')
|
||||
STRTOFILE('Type(''poNedeclaratXyz'') = [' + Transform(lcRezultat2) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
38
utile/Teste/editare_factura/check_view_def.prg
Normal file
38
utile/Teste/editare_factura/check_view_def.prg
Normal file
@@ -0,0 +1,38 @@
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\check_view_def_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS
|
||||
lnS = goExecutor.oExecute("select text from user_views where view_name='FACT_VFACTURI'", 'crsV')
|
||||
STRTOFILE('view text: ' + Transform(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsV')
|
||||
SELECT crsV
|
||||
STRTOFILE(Text + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS2
|
||||
lnS2 = goExecutor.oExecute("select table_name from user_tables where table_name in ('VANZARI','VANZARI_DETALII','VANZARI_INCASARI','VANZARI_CORESP')", 'crsT')
|
||||
STRTOFILE('tabele: ' + Transform(lnS2) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsT')
|
||||
SELECT crsT
|
||||
SCAN
|
||||
STRTOFILE(table_name + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
@@ -125,6 +125,8 @@ TRY
|
||||
|
||||
*----- PROCEDURI (mock amessagebox PRIMUL) -----
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg"
|
||||
*-- CdocGasesteIdVanzare: dovada de scriere pe jonctiunea serie_act + nract
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\lib_comparatie_documente.prg" ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
@@ -406,7 +408,10 @@ FUNCTION CreeazaDocument
|
||||
|
||||
PRIVATE poDate, poGeneratorNumere, poDateGestiuneDest, pnTotalDiscountAvize
|
||||
LOCAL lnIdSet, lcSqlCursor, lcCursor, lnSucces, lnIdVanzareRezultat
|
||||
LOCAL lcSerieAlocata, lnNractAlocat
|
||||
lnIdVanzareRezultat = 0
|
||||
lcSerieAlocata = ''
|
||||
lnNractAlocat = 0
|
||||
pnTotalDiscountAvize = 0
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
@@ -460,6 +465,8 @@ FUNCTION CreeazaDocument
|
||||
poDate.nract = poGeneratorNumere.aloca_numar(poDate.nIdTipDoc, NULL)
|
||||
poGeneratorNumere.verifica_numar(poDate.nIdTipDoc, poDate.nract)
|
||||
gnIdUtil = -3
|
||||
lcSerieAlocata = ALLTRIM(TRANSFORM(NVL(poDate.serie_act, [])))
|
||||
lnNractAlocat = poDate.nract
|
||||
DO S8Log WITH ' numar alocat: serie_act=[' + TRANSFORM(NVL(poDate.serie_act,[])) + '] nract=' + TRANSFORM(poDate.nract)
|
||||
|
||||
IF poDate.tva_incasare = 0
|
||||
@@ -513,8 +520,13 @@ FUNCTION CreeazaDocument
|
||||
*-- crsarticole vine cu Buffering optimistic pe rand (3) - REPLACE fara TABLEUPDATE() ramane
|
||||
*-- in bufferul local si e pierdut la urmatoarea citire/mutare de recno (verificat empiric:
|
||||
*-- REPLACE arata cantitate=1 imediat, dar orice citire ulterioara arata iar 0).
|
||||
*-- Lista de preturi a articolului e in EURO (tip_valuta=1), iar do_scrie_articole
|
||||
*-- trimite pe ramura aceea vpretftva, derivat din pret_val - fortand doar pret,
|
||||
*-- documentul iesea cu VANZARI_DETALII.PRET=0. Se forteaza perechea, coerent cu cursul.
|
||||
SELECT (lcCursor)
|
||||
REPLACE ALL cantitate WITH 1
|
||||
REPLACE ALL cantitate WITH 1, ;
|
||||
pret_val WITH IIF(tip_valuta = 1, 100, 0), ;
|
||||
pret WITH IIF(tip_valuta = 1, ROUND(100 * IIF(NVL(curs, 0) = 0, 1, curs) / IIF(NVL(multiplicator, 0) = 0, 1, multiplicator), gnPPretV), 100)
|
||||
=TABLEUPDATE(.T., .T., lcCursor)
|
||||
GO TOP
|
||||
DO S8Log WITH ' dupa fix cantitate: ' + lcCursor + '.cantitate=' + TRANSFORM(cantitate)
|
||||
@@ -580,11 +592,14 @@ FUNCTION CreeazaDocument
|
||||
ENDDO
|
||||
DO S8Log WITH ' do_termin() -> ' + TRANSFORM(lnScris) + ' (frm_alte_date tratat=' + TRANSFORM(glDlgTratat8) + ') poDate.nid_vanzare=' + TRANSFORM(NVL(poDate.nid_vanzare,0))
|
||||
|
||||
IF lnScris
|
||||
lnIdVanzareRezultat = NVL(poDate.nid_vanzare, 0)
|
||||
ELSE
|
||||
*-- do_termin() intoarce mereu .T. (_frm_base.vc2:363, DoDefault fara RETURN) si nid_vanzare
|
||||
*-- ramane santinela la esec: singura dovada e randul din VANZARI, pe serie_act + nract.
|
||||
lnIdVanzareRezultat = CdocGasesteIdVanzare(lcSerieAlocata, lnNractAlocat)
|
||||
IF lnIdVanzareRezultat < 0
|
||||
lnIdVanzareRezultat = 0
|
||||
ENDIF
|
||||
DO S8Log WITH ' verificare in VANZARI pe ' + lcSerieAlocata + ' ' + TRANSFORM(lnNractAlocat) + ;
|
||||
' -> id_vanzare=' + TRANSFORM(lnIdVanzareRezultat)
|
||||
|
||||
IF TYPE('goFrm8') = 'O' AND !ISNULL(goFrm8)
|
||||
goFrm8.Release()
|
||||
|
||||
57
utile/Teste/editare_factura/curata_s11_borderou.prg
Normal file
57
utile/Teste/editare_factura/curata_s11_borderou.prg
Normal file
@@ -0,0 +1,57 @@
|
||||
* curata_s11_borderou.prg - sterge fizic borderourile semanate de proba S11 (rularile 2 si 4 ale
|
||||
* lui test_s9_4_regenerare.prg le lasa in urma; rularile 3 si 5 se curata singure).
|
||||
* Parametru: lista de id-uri FACT_BORDEROU, separate prin virgula. Borderourile dinainte de proba
|
||||
* (id <= 19 pe MARIUSM_AUTO la 04.09.2026) NU se ating.
|
||||
LPARAMETERS tcListaId
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\curata_s11_borderou_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' lista=' + TRANSFORM(tcListaId) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
LOCAL lcLista
|
||||
lcLista = CHRTRAN(ALLTRIM(TRANSFORM(tcListaId)), ' ', '')
|
||||
IF EMPTY(lcLista) OR !ISDIGIT(LEFT(lcLista, 1))
|
||||
STRTOFILE('EROARE: se cere o lista de id-uri numerice, ex: DO curata_s11_borderou WITH "20,21"' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnDet, lnAnt
|
||||
lnDet = -1
|
||||
lnAnt = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.fact_borderou_detalii where id_borderou in (] + lcLista + [)], @lnDet)
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.fact_borderou where id in (] + lcLista + [)], @lnAnt)
|
||||
STRTOFILE('inainte: ' + TRANSFORM(lnAnt) + ' borderouri, ' + TRANSFORM(lnDet) + ' randuri de detaliu' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF goExecutor.oExecuta([delete from ] + gcs + [.fact_borderou_detalii where id_borderou in (] + lcLista + [)]) AND ;
|
||||
goExecutor.oExecuta([delete from ] + gcs + [.fact_borderou where id in (] + lcLista + [)])
|
||||
goExecutor.oExecuta([COMMIT])
|
||||
ELSE
|
||||
STRTOFILE('ESEC la stergere: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
goExecutor.oExecuta([ROLLBACK])
|
||||
ENDIF
|
||||
|
||||
lnDet = -1
|
||||
lnAnt = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.fact_borderou_detalii where id_borderou in (] + lcLista + [)], @lnDet)
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.fact_borderou where id in (] + lcLista + [)], @lnAnt)
|
||||
STRTOFILE('dupa: ' + TRANSFORM(lnAnt) + ' borderouri, ' + TRANSFORM(lnDet) + ' randuri de detaliu' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
lnDet = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.fact_borderou_detalii], @lnDet)
|
||||
STRTOFILE('total ramas in FACT_BORDEROU_DETALII: ' + TRANSFORM(lnDet) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
40
utile/Teste/editare_factura/curata_s9_5_atasamente.prg
Normal file
40
utile/Teste/editare_factura/curata_s9_5_atasamente.prg
Normal file
@@ -0,0 +1,40 @@
|
||||
* curata_s9_5_atasamente.prg - sterge fizic atasamentele semanate de probele S9-5 si S11 pe
|
||||
* documentele atinse (S9-5: 1073 controlul negativ, 1074 rularea verde; S11: 1127 rularea verde,
|
||||
* 1128 controlul negativ, 1076/1111/1129 rulari care nu au consumat documentul).
|
||||
* Randurile legate prin COD (cele 20 mostenite) NU se ating.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\curata_s9_5_atasamente_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnNr
|
||||
lnNr = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.atasamente_vanzari where id_vanzare in (1073,1074,1076,1111,1127,1128,1129)], @lnNr)
|
||||
STRTOFILE('inainte: ' + TRANSFORM(lnNr) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF goExecutor.oExecuta([delete from ] + gcs + [.atasamente_vanzari where id_vanzare in (1073,1074,1076,1111,1127,1128,1129)])
|
||||
goExecutor.oExecuta([COMMIT])
|
||||
ENDIF
|
||||
|
||||
lnNr = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.atasamente_vanzari where id_vanzare in (1073,1074,1076,1111,1127,1128,1129)], @lnNr)
|
||||
STRTOFILE('dupa: ' + TRANSFORM(lnNr) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
lnNr = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.atasamente_vanzari], @lnNr)
|
||||
STRTOFILE('total ramas in tabela: ' + TRANSFORM(lnNr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
@@ -4,6 +4,11 @@
|
||||
* (pack_contafin.finalizeaza_modificare_nota -> pack_facturare.actualizeaza_vanzari), deci orice
|
||||
* ancorare pe cod moare tacut; ID_VANZARE ramane, dar nici el nu e cunoscut dinainte.
|
||||
*
|
||||
* *!* 06.09.2026
|
||||
* *!* marius.mutu
|
||||
* *!* Cazurile care aleg documente cu articole reale exclud notele cu un rand activ pe un cont
|
||||
* *!* care cere simbol analitic si nu il are; altfel verificare_note_contabile respinge salvarea.
|
||||
*
|
||||
* DescoperaCazTest(<nume caz>, <alias destinatie>) -> .T. daca a gasit un document, lasand in alias
|
||||
* un singur rand cu cod, an, luna, id_vanzare, tip, nlin (plus nract/serie_act/dataact/nract_fara
|
||||
* pentru cazul de coliziune). Pe .F. aliasul ramane cu 0 randuri.
|
||||
@@ -26,7 +31,7 @@
|
||||
FUNCTION DescoperaCazTest
|
||||
LPARAMETERS tcCaz, tcAlias
|
||||
|
||||
LOCAL lcAlias, lcNlin, lcPrim, lcJoinP, lcTriplete, lcJoinT, lcOrb, lcNractFara, lcSql, lnSucces
|
||||
LOCAL lcAlias, lcNlin, lcPrim, lcJoinP, lcTriplete, lcJoinT, lcOrb, lcNractFara, lcFiltruAnalitic, lcSql, lnSucces
|
||||
|
||||
lcAlias = IIF(Type('tcAlias') = 'C' AND !Empty(m.tcAlias), m.tcAlias, 'crscaz')
|
||||
|
||||
@@ -59,15 +64,21 @@ FUNCTION DescoperaCazTest
|
||||
[(select 1 from vanzari w where w.cod=y.cod and nvl(w.numar_act,-1)=nvl(y.nract,-1) ] + ;
|
||||
[and nvl(w.serie_act,' ')=nvl(y.serie_act,' ') and trunc(w.data_act)=trunc(y.dataact) and w.sters=0))]
|
||||
|
||||
*!* verificare_note_contabile respinge salvarea unei note cu cont ce cere analitic si nu il are
|
||||
lcFiltruAnalitic = [not exists (select 1 from vact_tot x where x.cod=p.cod and x.an=p.an and x.luna=p.luna ] + ;
|
||||
[and x.sters=0 and nvl(x.suma,0)<>0 and ( ] + ;
|
||||
[(x.ascd is null and exists (select 1 from vplcont_analitic pa where pa.cont=x.scd and pa.an=?gnAn and pa.inactiv=0)) ] + ;
|
||||
[or (x.ascc is null and exists (select 1 from vplcont_analitic pa where pa.cont=x.scc and pa.an=?gnAn and pa.inactiv=0)) ))]
|
||||
|
||||
DO CASE
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'FACTURA_ARTICOLE'
|
||||
lcSql = [select * from (select v.id_vanzare, p.cod, p.an, p.luna, v.tip, ] + m.lcNlin + [ nlin from ] + ;
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where v.tip = 1 and ] + m.lcNlin + [ > 0 ] + ;
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where v.tip = 1 and ] + m.lcNlin + [ > 0 and ] + m.lcFiltruAnalitic + [ ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'NEFACTURA_ARTICOLE'
|
||||
lcSql = [select * from (select v.id_vanzare, p.cod, p.an, p.luna, v.tip, ] + m.lcNlin + [ nlin from ] + ;
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where v.tip <> 1 and ] + m.lcNlin + [ > 0 ] + ;
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where v.tip <> 1 and ] + m.lcNlin + [ > 0 and ] + m.lcFiltruAnalitic + [ ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'FARA_RULAJE'
|
||||
@@ -75,11 +86,12 @@ FUNCTION DescoperaCazTest
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where ] + m.lcNlin + [ > 0 ] + ;
|
||||
[and not exists (select 1 from vrul_tot r where r.cod=p.cod and r.an=p.an and r.luna=p.luna and r.sters=0) ] + ;
|
||||
[and not exists (select 1 from vrul_obinv_tot r where r.cod=p.cod and r.an=p.an and r.luna=p.luna and r.sters=0) ] + ;
|
||||
[and ] + m.lcFiltruAnalitic + [ ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'PRIM_RAND_ORB'
|
||||
lcSql = [select * from (select v.id_vanzare, p.cod, p.an, p.luna, v.tip, ] + m.lcNlin + [ nlin from ] + ;
|
||||
m.lcTriplete + [ ] + m.lcJoinP + [ where ] + m.lcNlin + [ > 0 and ] + m.lcOrb + [ ] + ;
|
||||
m.lcTriplete + [ ] + m.lcJoinP + [ where ] + m.lcNlin + [ > 0 and ] + m.lcOrb + [ and ] + m.lcFiltruAnalitic + [ ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'COLIZIUNE_COD'
|
||||
@@ -91,6 +103,7 @@ FUNCTION DescoperaCazTest
|
||||
m.lcTriplete + [ ] + m.lcJoinP + [ where ] + m.lcNlin + [ > 0 and ] + m.lcOrb + [ ] + ;
|
||||
[and (select count(distinct v2.id_vanzare) from vanzari v2 where v2.cod=p.cod and v2.sters=0) >= 2 ] + ;
|
||||
[and ] + Strtran(m.lcNractFara, [<COL>], [nract]) + [ is not null ] + ;
|
||||
[and ] + m.lcFiltruAnalitic + [ ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'NOTA_FARA_VANZARI'
|
||||
|
||||
454
utile/Teste/editare_factura/emite_document_stoc_s93.prg
Normal file
454
utile/Teste/editare_factura/emite_document_stoc_s93.prg
Normal file
@@ -0,0 +1,454 @@
|
||||
* emite_document_stoc_s93.prg
|
||||
* Reumple rezervorul lui test_s9_3_stergere.prg (candidat eligibil: STERS=0, in luna activa,
|
||||
* fara referinte/urmasi, cu randuri REALE in vact_tot SI vrul_tot). Emite UN document REAL
|
||||
* in MARIUSM_AUTO@ROA_CENTRAL prin fluxul de productie (docs\raport_datoria4_stergere.md).
|
||||
*
|
||||
* Baza: COMUN\utile\Teste\facturare_unificat\test_s3b_emitere_reala.prg (tnTip=22, AVIZ din lista
|
||||
* de preturi, client RAJA id_part=463, forma veche frm_facturare_articole, tip_incasare=1) -
|
||||
* singura combinatie confirmata ca scrie in VANZARI in acest mediu. DOUA modificari fata de acel
|
||||
* fisier, ambele necesare ca sa apara randuri in RUL (nu doar in ACT):
|
||||
*
|
||||
* 1) NU se mai reseteaza gnIdUtil la -3 inainte de cursor_preturi (acolo ramane doar pentru
|
||||
* alocarea numarului). Cu gnIdUtil=8 lista de preturi FACT_VPRETURI_UTILIZATOR intoarce
|
||||
* articole GESTIONABILE cu stoc real (verificat read-only); cu -3 intoarce un singur articol
|
||||
* negestionabil, cantitate 0 - de-asta suita S3b/creeaza_documente_s8 nu producea niciodata
|
||||
* randuri vrul_tot (docs\raport_s13b_fixturi.md §6.1).
|
||||
* 2) V_FILTRU_COD = '11.00003' (id_articol=315554536, ACOPERIRE FAR VOLVO FH12) restrange
|
||||
* cursor_preturi la UN singur articol gestionabil cu stoc mare (>11000 bucati la data
|
||||
* scrierii acestui fisier), ca sa nu intre in document toata lista de preturi a utilizatorului 8.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\...\emite_document_stoc_s93.prg" (headless, cateva secunde)
|
||||
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out\emite_document_stoc_s93.log
|
||||
* Rezultat: STRTOFILE cu 'id_vanzare=<n>' la succes, sau 'ESEC' - vezi raportul pentru numerele arse.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gnPass, gnFail
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out")
|
||||
MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out"
|
||||
ENDIF
|
||||
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out\emite_document_stoc_s93.log"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcLog)
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
ON ERROR DO EmiteErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\achizitie_import\stub_verificare"
|
||||
|
||||
DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0
|
||||
DO EmiteLog WITH 'EROARE: conectare Oracle esuata'
|
||||
DO EmiteFinal
|
||||
ENDIF
|
||||
DO EmiteLog WITH 'test_init_env_auto_roafacturare OK, gnHandle=' + TRANSFORM(gnHandle)
|
||||
SQLSETPROP(gnHandle, "QueryTimeOut", 45)
|
||||
|
||||
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE
|
||||
SET CLASSLIB TO gridextras.vcx ADDITIVE
|
||||
SET CLASSLIB TO _cb_base.vcx ADDITIVE
|
||||
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\lib_comparatie_documente.prg" ADDITIVE
|
||||
|
||||
IF !actualizeaza_optiuni_program()
|
||||
DO EmiteLog WITH 'EROARE: actualizeaza_optiuni_program()'
|
||||
DO EmiteFinal
|
||||
ENDIF
|
||||
*-- gnScadereStoc=1 (nu 0, spre deosebire de test_s3b_emitere_reala.prg): cu 0, do_adauga_articol
|
||||
*-- ocoleste mereu do_alege_stoc (ofacturare.vc2:13021), deci ID_GESTIUNE ramane null pe linie si
|
||||
*-- nu apare niciun rand in vrul_tot, indiferent de cantitate/stoc. Cu 1 si UN singur candidat de
|
||||
*-- gestiune (Reccount(crsgestarticol)=1) + tlImplicit=.T., do_alege_stoc(ofacturare.vc2:13478)
|
||||
*-- alege automat gestiunea, FARA sa arate modalul (frm_articol_gest_factura.inainte_de_do_termin
|
||||
*-- se autoconfirma cand nu exista nicio eroare de validare).
|
||||
gnScadereStoc = 1
|
||||
gnModTotFact = 0
|
||||
gnFactSeturi = 0
|
||||
gnListareAvizBonFiscal = 0
|
||||
gnid_part_casa = 0
|
||||
gnIdSucursala = 167
|
||||
goExecutor.oExecuta([begin pack_contafin.set_id_sucursala(?gnIdSucursala); end;])
|
||||
DO EmiteLog WITH 'optiuni OK gnScadereStoc=' + TRANSFORM(gnScadereStoc) + ' gnIdSucursala=' + TRANSFORM(gnIdSucursala)
|
||||
|
||||
PUBLIC goDriverAD, glDlgTratatAD, gnTipIncasareCerut, gnNrIncasareCapturat, gcClaseVazute
|
||||
glDlgTratatAD = .F.
|
||||
gnTipIncasareCerut = 1
|
||||
gnNrIncasareCapturat = 0
|
||||
gcClaseVazute = ';'
|
||||
goDriverAD = CREATEOBJECT('driverAlteDateEmite')
|
||||
_SCREEN.AddObject('tmrDrvEmite', 'Timer')
|
||||
_SCREEN.tmrDrvEmite.Interval = 200
|
||||
BINDEVENT(_SCREEN.tmrDrvEmite, 'Timer', goDriverAD, 'Executa')
|
||||
_SCREEN.tmrDrvEmite.Enabled = .T.
|
||||
|
||||
*-- driverGestArticol: acelasi timer, un al doilea BINDEVENT - conduce modalul per-linie
|
||||
*-- FRM_ARTICOL_GEST_FACTURA (do_alege_stoc, ofacturare.vc2:13518/13526/13540)
|
||||
PUBLIC goDriverGest, glDlgTratatGest, goUltimulFormGest
|
||||
glDlgTratatGest = .F.
|
||||
goUltimulFormGest = .NULL.
|
||||
goDriverGest = CREATEOBJECT('driverGestArticol')
|
||||
BINDEVENT(_SCREEN.tmrDrvEmite, 'Timer', goDriverGest, 'Executa')
|
||||
|
||||
_SCREEN.Caption = 'emite_document_stoc_s93 - reumplere pool S9-3'
|
||||
|
||||
LOCAL lnIdVz
|
||||
lnIdVz = CreeazaDocumentStoc()
|
||||
_SCREEN.tmrDrvEmite.Enabled = .F.
|
||||
|
||||
DO Assert WITH lnIdVz > 0, 'documentul exista in VANZARI (jonctiune serie_act+nract), e=' + TRANSFORM(lnIdVz)
|
||||
IF lnIdVz > 0
|
||||
DO EmiteLog WITH 'id_vanzare=' + TRANSFORM(lnIdVz)
|
||||
ELSE
|
||||
DO EmiteLog WITH 'ESEC'
|
||||
ENDIF
|
||||
|
||||
DO EmiteFinal
|
||||
|
||||
CATCH TO loExc
|
||||
DO EmiteLog WITH 'CATCH TOP-LEVEL ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO EmiteFinal
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE EmiteLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13)+CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE EmiteErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO EmiteLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE EmiteFinal
|
||||
DO EmiteLog WITH CHR(13)+CHR(10) + 'TOTAL pass=' + TRANSFORM(gnPass) + ' fail=' + TRANSFORM(gnFail)
|
||||
DO EmiteLog WITH 'END ' + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Assert
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO EmiteLog WITH 'PASS: ' + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO EmiteLog WITH 'FAIL: ' + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
*==================================================================================
|
||||
* CreeazaDocumentStoc: emite un document REAL (tnTip=22, cursor_preturi filtrat pe UN articol
|
||||
* gestionabil cu stoc), tip_incasare=1 (Fara incasare), forma veche. Intoarce id_vanzare (>0
|
||||
* succes) sau 0.
|
||||
FUNCTION CreeazaDocumentStoc
|
||||
*-- lcFiltruCod PRIVATE, nu LOCAL: goExecutor.oExecute leaga parametrii dupa numele
|
||||
*-- variabilei (ca poDate.* mai jos), deci trebuie vizibila din metoda apelata, nu doar aici.
|
||||
PRIVATE poDate, poGeneratorNumere, poDateGestiuneDest, lcFiltruCod
|
||||
LOCAL lnIdSet, lcSqlCursor, lcCursor, lnSucces, lnIdVanzareRezultat, tnTip, tnIdClient, tnIdDelegat
|
||||
LOCAL lcSerieAlocata, lnNractAlocat
|
||||
lnIdVanzareRezultat = 0
|
||||
lcSerieAlocata = ''
|
||||
lnNractAlocat = 0
|
||||
gnNrIncasareCapturat = 0
|
||||
tnTip = 22
|
||||
tnIdClient = 463
|
||||
tnIdDelegat = 256
|
||||
*-- 4294507796 / MOTOREDUCTOR 20SEC: UN singur lot in gestiunea 1 (Reccount(crsgestarticol)=1,
|
||||
*-- verificat read-only) - conditia lui do_alege_stoc pentru autoselectie fara modal.
|
||||
lcFiltruCod = '0V2549'
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
|
||||
lnIdSet = 25900
|
||||
poDate = CREATEOBJECT("oDateFactura", lnIdSet, tnTip)
|
||||
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
|
||||
poDateGestiuneDest = CREATEOBJECT("oDateGestiune")
|
||||
poDate.nIdTipDoc = 6 && AVIZ - plaja globala
|
||||
|
||||
gnIdUtil = 8
|
||||
poGeneratorNumere.ResetNumere()
|
||||
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc)
|
||||
|
||||
poDate.id_client = tnIdClient
|
||||
poDate.id_delegat = tnIdDelegat
|
||||
poDate.zi_curs = {^2026-08-10}
|
||||
*-- gestiune reala (nu NULL): fara ea cursor_preturi arata articolul gestionabil dar
|
||||
*-- scrierea documentului nu are de unde sa scada stocul - primul document emis (id_vanzare=1474)
|
||||
*-- a iesit cu 0 randuri in vrul_tot desi articolul era gestionabil, cu stoc.
|
||||
poDate.id_gestiune_init = 1
|
||||
|
||||
IF poDate.rezultat_serii = 3
|
||||
poDate.serie_act = poGeneratorNumere.getSerieCursor(poDate.nIdTipDoc)
|
||||
ENDIF
|
||||
poDate.nract = poGeneratorNumere.aloca_numar(poDate.nIdTipDoc, NULL)
|
||||
poGeneratorNumere.verifica_numar(poDate.nIdTipDoc, poDate.nract)
|
||||
*-- gnIdUtil ramane 8 (NU -3, spre deosebire de test_s3b_emitere_reala.prg): cu -3
|
||||
*-- cursor_preturi intoarce un singur articol negestionabil, cantitate 0 - fara asta
|
||||
*-- documentul nu ar avea nicio sansa de rand in RUL.
|
||||
lcSerieAlocata = ALLTRIM(TRANSFORM(NVL(poDate.serie_act, [])))
|
||||
lnNractAlocat = poDate.nract
|
||||
DO EmiteLog WITH 'poDate.nract=' + TRANSFORM(poDate.nract) + ' serie_act=[' + TRANSFORM(NVL(poDate.serie_act,[])) + ']'
|
||||
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC'$UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC'$UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_preturi(?poDate.zi_curs,?poDate.tip,?poDate.id_valuta,] + ;
|
||||
[?poDate.id_gestiune_init,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala,?lcFiltruCod)}]
|
||||
|
||||
lcCursor = [crsarticole]
|
||||
lnSucces = goExecutor.oExecute(lcSqlCursor, lcCursor)
|
||||
IF lnSucces < 0
|
||||
DO EmiteLog WITH 'EROARE cursor articole: ' + goExecutor.oPrelucrareEroare()
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
DO CurataJtva
|
||||
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
IF RECCOUNT(lcCursor) = 0
|
||||
DO EmiteLog WITH 'Nu exista articole (Reccount=0) - abandon document'
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
DO CurataJtva
|
||||
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
RETURN 0
|
||||
ENDIF
|
||||
DO EmiteLog WITH 'crsarticole Reccount=' + TRANSFORM(RECCOUNT(lcCursor))
|
||||
|
||||
SELECT (lcCursor)
|
||||
REPLACE ALL cantitate WITH 1, ;
|
||||
pret_val WITH IIF(tip_valuta = 1, 100, 0), ;
|
||||
pret WITH IIF(tip_valuta = 1, ROUND(100 * IIF(NVL(curs, 0) = 0, 1, curs) / IIF(NVL(multiplicator, 0) = 0, 1, multiplicator), gnPPretV), 100)
|
||||
=TABLEUPDATE(.T., .T., lcCursor)
|
||||
GO TOP
|
||||
|
||||
creeaza_facturacrs([crsfactura])
|
||||
|
||||
IF poDate.in_valuta = 1
|
||||
SELECT DISTINCT Curs, nume_val, id_valuta, multiplicator FROM (lcCursor) WITH (Buffering = .T.) WHERE tip_valuta = 1 ORDER BY nume_val INTO CURSOR crscursuri
|
||||
SELECT crscursuri
|
||||
poDate.Curs = Curs
|
||||
poDate.multiplicator = multiplicator
|
||||
ELSE
|
||||
citeste_cursuri_zi(poDate.zi_curs)
|
||||
IF RECCOUNT('crscursuri') = 0
|
||||
USE IN crscursuri
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF TYPE(lcCursor + '.nume_lista_preturi') <> 'U'
|
||||
CREATE CURSOR crspolitici (id_pol N(20), nume_lista_preturi c(100))
|
||||
SELECT crspolitici
|
||||
INSERT INTO crspolitici(id_pol, nume_lista_preturi) VALUES (-9999, '<TOATE>')
|
||||
INSERT INTO crspolitici(id_pol, nume_lista_preturi) ;
|
||||
SELECT DISTINCT id_pol, nume_lista_preturi FROM (lcCursor) ORDER BY nume_lista_preturi
|
||||
ENDIF
|
||||
|
||||
PUBLIC goFrmEmite
|
||||
goFrmEmite = CREATEOBJECT('frm_facturare_articole')
|
||||
goFrmEmite.WindowType = 0
|
||||
goFrmEmite.Show()
|
||||
DOEVENTS FORCE
|
||||
DO EmiteLog WITH 'formular afisat modeless (VECHI frm_facturare_articole)'
|
||||
|
||||
glDlgTratatGest = .F.
|
||||
goFrmEmite.do_adauga_tot()
|
||||
DOEVENTS FORCE
|
||||
DO EmiteLog WITH 'do_adauga_tot() -> Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura')) + ;
|
||||
' glDlgTratatGest=' + TRANSFORM(glDlgTratatGest)
|
||||
|
||||
*-- do_initializeaza_articol zeroeste cantitatea la adaugare (ca la tip 1, ofacturare.vc2:13890) -
|
||||
*-- se scrie explicit dupa adaugare, ca in test_s6_1_lista_preturi.prg (SeteazaCantitati):
|
||||
*-- fara asta VANZARI_DETALII.CANTITATE ramane 0 si nu apare niciun rand in vrul_tot.
|
||||
LOCAL loArtCant
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
REPLACE cantitate WITH 1
|
||||
SCATTER NAME loArtCant MEMO
|
||||
loArtCant = calculeaza_totaluri(loArtCant)
|
||||
GATHER NAME loArtCant MEMO
|
||||
ENDSCAN
|
||||
DO EmiteLog WITH 'cantitate setata explicit pe crsfactura'
|
||||
|
||||
goFrmEmite.do_calculeaza_totaluri()
|
||||
DOEVENTS FORCE
|
||||
|
||||
LOCAL lnScris
|
||||
glDlgTratatAD = .F.
|
||||
gnTipIncasareCerut = 1
|
||||
lnScris = goFrmEmite.do_termin()
|
||||
LOCAL lnWait
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratatAD AND lnWait < 10
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO EmiteLog WITH 'do_termin() -> ' + TRANSFORM(lnScris) + ' poDate.nid_vanzare=' + TRANSFORM(NVL(poDate.nid_vanzare,0))
|
||||
|
||||
lnIdVanzareRezultat = CdocGasesteIdVanzare(lcSerieAlocata, lnNractAlocat)
|
||||
IF lnIdVanzareRezultat < 0
|
||||
lnIdVanzareRezultat = 0
|
||||
ENDIF
|
||||
DO EmiteLog WITH 'verificare in VANZARI pe ' + lcSerieAlocata + ' ' + TRANSFORM(lnNractAlocat) + ' -> id_vanzare=' + TRANSFORM(lnIdVanzareRezultat)
|
||||
|
||||
IF TYPE('goFrmEmite') = 'O' AND !ISNULL(goFrmEmite)
|
||||
goFrmEmite.Release()
|
||||
ENDIF
|
||||
goFrmEmite = NULL
|
||||
|
||||
IF USED('crspolitici')
|
||||
USE IN crspolitici
|
||||
ENDIF
|
||||
IF USED('crscursuri')
|
||||
USE IN crscursuri
|
||||
ENDIF
|
||||
IF USED('crsfactura')
|
||||
USE IN crsfactura
|
||||
ENDIF
|
||||
IF USED('crsarticole')
|
||||
USE IN crsarticole
|
||||
ENDIF
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF USED('jtva_coloane_temp')
|
||||
USE IN jtva_coloane_temp
|
||||
ENDIF
|
||||
|
||||
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
RETURN lnIdVanzareRezultat
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE CurataJtva
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF USED('jtva_coloane_temp')
|
||||
USE IN jtva_coloane_temp
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
*==================================================================================
|
||||
*-- driverAlteDateEmite: identic cu driverAlteDateAD din test_s3b_emitere_reala.prg - cauta
|
||||
* FRM_ALTE_DATE prin _SCREEN.Forms si ii seteaza opt_incasat.Value INAINTE de do_termin().
|
||||
DEFINE CLASS driverAlteDateEmite AS Custom
|
||||
PROCEDURE Executa
|
||||
LOCAL lnI, loForm, llGasit, loMsgForm
|
||||
llGasit = .F.
|
||||
loMsgForm = NULL
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
LOCAL lcClasa
|
||||
lcClasa = UPPER(_SCREEN.Forms(lnI).Class)
|
||||
IF lcClasa == 'FRM_ALTE_DATE'
|
||||
loForm = _SCREEN.Forms(lnI)
|
||||
llGasit = .T.
|
||||
ENDIF
|
||||
IF 'MESSAGEBOX_FORM' $ lcClasa
|
||||
loMsgForm = _SCREEN.Forms(lnI)
|
||||
ENDIF
|
||||
IF !(lcClasa $ gcClaseVazute)
|
||||
gcClaseVazute = gcClaseVazute + lcClasa + ';'
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF !ISNULL(loMsgForm)
|
||||
TRY
|
||||
DO CASE
|
||||
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdYes', 5)
|
||||
loMsgForm.cmgBotones.cmdYes.Click()
|
||||
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdOk', 5)
|
||||
loMsgForm.cmgBotones.cmdOk.Click()
|
||||
ENDCASE
|
||||
CATCH TO loExcMsg
|
||||
DO EmiteLog WITH '[diag timer] messagebox_form: CATCH ' + TRANSFORM(loExcMsg.ErrorNo) + ' ' + loExcMsg.Message
|
||||
ENDTRY
|
||||
ENDIF
|
||||
IF glDlgTratatAD OR !llGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
TRY
|
||||
loForm.opt_incasat.Value = gnTipIncasareCerut
|
||||
gnNrIncasareCapturat = poDate.nr_incasare
|
||||
loForm.do_termin()
|
||||
glDlgTratatAD = .T.
|
||||
CATCH TO loExcDrv
|
||||
DO EmiteLog WITH 'driverAlteDateEmite: CATCH ErrorNo=' + TRANSFORM(loExcDrv.ErrorNo) + ' Message=' + loExcDrv.Message + ;
|
||||
' Procedure=' + loExcDrv.Procedure + ' LineNo=' + TRANSFORM(loExcDrv.LineNo)
|
||||
glDlgTratatAD = .T.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
*==================================================================================
|
||||
*-- driverGestArticol: acelasi mecanism (poll _SCREEN.Forms + apel direct do_termin(), fara input
|
||||
* real) ca driverAlteDateAD/driverAlteDateEmite, dar pentru FRM_ARTICOL_GEST_FACTURA - modalul
|
||||
* per-linie al lui do_alege_stoc (ofacturare.vc2:13518/13526/13540), aratat neconditionat cand
|
||||
* inainte_de_do_termin() esueaza pe randul curent din crsgestarticol (chiar si pe ramura cu un
|
||||
* singur lot + tlImplicit, ofacturare.vc2:13495-13524, pentru ca poArticol.cantitate a fost deja
|
||||
* zeroit de do_initializeaza_articol - ofacturare.vc2:13922, tip 22 fara opt_facturare 1/2).
|
||||
* Copiaza pe poArticol campurile randului curent din crsgestarticol (ce ar face si navigarea in
|
||||
* grid_gestiuni.AfterRowColChange, ofacturare.vc2:4227-4239) plus o cantitate nenula, apoi cheama
|
||||
* do_termin() direct pe formular.
|
||||
*-- do_adauga_tot() SCANeaza crsarticole (aici 2 randuri, acelasi articol pe doua liste de preturi
|
||||
* ale utilizatorului 8) si cheama do_alege_stoc() o data PE RAND - modalul poate aparea de mai multe
|
||||
* ori, secvential, in aceeasi rulare. De-asta flagul de "tratat" nu e global (ca la frm_alte_date,
|
||||
* aratat o singura data): retine INSTANTA de formular deja tratata (goUltimulFormGest) - o instanta
|
||||
* noua (formular urmator) tot se trateaza, aceeasi instanta nu se retrateaza daca timer-ul mai apuca
|
||||
* un tick inainte sa se inchida.
|
||||
DEFINE CLASS driverGestArticol AS Custom
|
||||
PROCEDURE Executa
|
||||
LOCAL lnI, loForm, llGasit
|
||||
llGasit = .F.
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
LOCAL lcClasa
|
||||
lcClasa = UPPER(_SCREEN.Forms(lnI).Class)
|
||||
IF lcClasa == 'FRM_ARTICOL_GEST_FACTURA'
|
||||
loForm = _SCREEN.Forms(lnI)
|
||||
llGasit = .T.
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF !llGasit OR loForm = goUltimulFormGest
|
||||
RETURN
|
||||
ENDIF
|
||||
TRY
|
||||
SELECT crsgestarticol
|
||||
GO TOP
|
||||
poArticol.cantitate = 1
|
||||
poArticol.pret_achizitie = Pret
|
||||
poArticol.lot = NVL(lot, [])
|
||||
poArticol.serie = NVL(serie, [])
|
||||
poArticol.id_gestiune = id_gestiune
|
||||
poArticol.Cont = ALLTRIM(Cont)
|
||||
poArticol.id_lucrare_rez = id_lucrare_rez
|
||||
poArticol.id_part_rez = id_part_rez
|
||||
poArticol.pretv_orig = pretv
|
||||
poArticol.id_valuta_d = NVL(id_valuta, 0)
|
||||
poArticol.pretd = pretd
|
||||
DO EmiteLog WITH ' driverGestArticol: id_gestiune=' + TRANSFORM(poArticol.id_gestiune) + ;
|
||||
' pret_achizitie=' + TRANSFORM(poArticol.pret_achizitie) + ' cantitate=' + TRANSFORM(poArticol.cantitate)
|
||||
loForm.do_termin()
|
||||
glDlgTratatGest = .T.
|
||||
goUltimulFormGest = loForm
|
||||
CATCH TO loExcDrv
|
||||
DO EmiteLog WITH 'driverGestArticol: CATCH ErrorNo=' + TRANSFORM(loExcDrv.ErrorNo) + ' Message=' + loExcDrv.Message + ;
|
||||
' Procedure=' + loExcDrv.Procedure + ' LineNo=' + TRANSFORM(loExcDrv.LineNo)
|
||||
glDlgTratatGest = .T.
|
||||
goUltimulFormGest = loForm
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
49
utile/Teste/editare_factura/find_defect5_doc.prg
Normal file
49
utile/Teste/editare_factura/find_defect5_doc.prg
Normal file
@@ -0,0 +1,49 @@
|
||||
* find_defect5_doc.prg
|
||||
* Cautare read-only: document real cu incasat<>0, tip 1-4, ne-proforma, in luna curenta,
|
||||
* care trece garzile din do_editare_unificata (nesters, fara referinte/urmasi/eFactura).
|
||||
* Nu scrie nimic. Scris pentru dovada defectului 5 (docs\raport_s8_defect5_incasat.md).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\find_defect5_doc_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lcSelect, lnSucces
|
||||
lcSelect = [select id_vanzare, tip, eproforma, sters, incasat, data_act, nr_incasare, id_fact from fact_vfacturi ] + ;
|
||||
[where incasat <> 0 and tip between 1 and 4 and eproforma = 0 and sters = 0 ] + ;
|
||||
[and extract(year from data_act) = ] + TRANSFORM(gnAn) + [ and extract(month from data_act) = ] + TRANSFORM(gnLuna) + [ ] + ;
|
||||
[order by id_vanzare]
|
||||
|
||||
lnSucces = goExecutor.oExecute(lcSelect, 'crsCandidati')
|
||||
STRTOFILE('oExecute: ' + TRANSFORM(lnSucces) + ' eroare: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
goExecutor.oReset()
|
||||
|
||||
IF lnSucces >= 0 AND USED('crsCandidati')
|
||||
STRTOFILE('candidati gasiti: ' + TRANSFORM(RECCOUNT('crsCandidati')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crsCandidati
|
||||
SCAN
|
||||
STRTOFILE('id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' incasat=' + TRANSFORM(incasat) + ;
|
||||
' data_act=' + TRANSFORM(data_act) + ' nr_incasare=' + TRANSFORM(nr_incasare) + ' id_fact=' + TRANSFORM(NVL(id_fact,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ELSE
|
||||
STRTOFILE('interogare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
61
utile/Teste/editare_factura/find_tipincasare23_doc.prg
Normal file
61
utile/Teste/editare_factura/find_tipincasare23_doc.prg
Normal file
@@ -0,0 +1,61 @@
|
||||
* find_tipincasare23_doc.prg
|
||||
* Cautare read-only: document real cu tip_incasare in (2,3), incasat<>0, tip 1-4, ne-proforma,
|
||||
* nesters, ca sa probeze maparea D4 (bon fiscal / card) alaturi de documentul 1071 (chitanta).
|
||||
* Nu scrie nimic.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\find_tipincasare23_doc_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lcSelect, lnSucces
|
||||
lcSelect = [select id_vanzare, tip, eproforma, sters, incasat, nr_incasare, tip_incasare, serie_chit, data_act, id_fact from fact_vfacturi ] + ;
|
||||
[where incasat <> 0 and tip between 1 and 4 and eproforma = 0 and sters = 0 and tip_incasare in (2,3) ] + ;
|
||||
[order by tip_incasare, id_vanzare]
|
||||
|
||||
lnSucces = goExecutor.oExecute(lcSelect, 'crsCandidati')
|
||||
STRTOFILE('oExecute: ' + TRANSFORM(lnSucces) + ' eroare: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
goExecutor.oReset()
|
||||
|
||||
IF lnSucces >= 0 AND USED('crsCandidati')
|
||||
STRTOFILE('candidati gasiti: ' + TRANSFORM(RECCOUNT('crsCandidati')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crsCandidati
|
||||
SCAN
|
||||
STRTOFILE('id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' incasat=' + TRANSFORM(incasat) + ;
|
||||
' nr_incasare=' + TRANSFORM(nr_incasare) + ' tip_incasare=' + TRANSFORM(tip_incasare) + ;
|
||||
' serie_chit=[' + TRANSFORM(NVL(serie_chit,'')) + ']' + ;
|
||||
' data_act=' + TRANSFORM(data_act) + ' id_fact=' + TRANSFORM(NVL(id_fact,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ELSE
|
||||
STRTOFILE('interogare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
*!* verifica si luna documentului 1071, util pentru decizia rutei de proba (do_editare_unificata cere luna curenta)
|
||||
IF Used('crs1071')
|
||||
Use In crs1071
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_vanzare, data_act, sters, eproforma, tip, id_fact from fact_vfacturi where id_vanzare = 1071], 'crs1071')
|
||||
goExecutor.oReset()
|
||||
IF lnSucces >= 0 AND USED('crs1071') AND RECCOUNT('crs1071') = 1
|
||||
STRTOFILE('1071: data_act=' + TRANSFORM(crs1071.data_act) + ' sters=' + TRANSFORM(crs1071.sters) + ' eproforma=' + TRANSFORM(crs1071.eproforma) + ' tip=' + TRANSFORM(crs1071.tip) + ' id_fact=' + TRANSFORM(NVL(crs1071.id_fact,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
STRTOFILE('gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
57
utile/Teste/editare_factura/mock_incarca_linii_prefix.prg
Normal file
57
utile/Teste/editare_factura/mock_incarca_linii_prefix.prg
Normal file
@@ -0,0 +1,57 @@
|
||||
* mock_incarca_linii_prefix.prg
|
||||
* Control negativ pentru FACT-008: versiunea DINAINTE de reparatie a lui
|
||||
* IncarcaLiniiFacturaEditare (fara Cont in crsarticole_editare / REPLACE si fara re-derivarea lui
|
||||
* pretv_orig din RUL). Se incarca INAINTEA lui ofacturare_editare.prg in SET PROCEDURE, deci
|
||||
* castiga la nume duplicat. Nu atinge niciun fisier de productie.
|
||||
FUNCTION IncarcaLiniiFacturaEditare
|
||||
LPARAMETERS toDate, tnIdVanzare
|
||||
|
||||
LOCAL llInValuta, lnCursDoc, lnMultDoc, lnIdTemp, lnGestionabil
|
||||
|
||||
llInValuta = (toDate.in_valuta = 1)
|
||||
lnCursDoc = Nvl(toDate.Curs,1)
|
||||
lnMultDoc = Nvl(toDate.multiplicator,1)
|
||||
|
||||
IncarcaArticoleFactura(m.tnIdVanzare, 'crsarticole_doc')
|
||||
|
||||
IF Used('crsarticole_editare')
|
||||
Use In crsarticole_editare
|
||||
ENDIF
|
||||
SELECT id_vanzare_det, id_articol, explicatie, Nvl(denumire,[]) As denumire, lot, serie, codmat, id_jtva_coloana, taxcode, ;
|
||||
pret_achizitie, cantitate, proc_tvav, pret_cu_tva, id_vanzare_set, id_gestiune, id_ctr, id_valuta, nume_val, in_stoc, ;
|
||||
id_pol, pretd, id_valutad, ;
|
||||
Nvl(curs, m.lnCursDoc) As curs, Nvl(multiplicator, m.lnMultDoc) As multiplicator, ;
|
||||
Iif(m.llInValuta, Round(pret * Nvl(curs, m.lnCursDoc) / Nvl(multiplicator, m.lnMultDoc), gnPPretV), pret) As pret, ;
|
||||
Iif(m.llInValuta, pret, 0) As pret_val, ;
|
||||
Iif(m.llInValuta, Round(discount_unitar * Nvl(curs, m.lnCursDoc) / Nvl(multiplicator, m.lnMultDoc), gnPPretV), discount_unitar) As discount_unitar, ;
|
||||
Iif(m.llInValuta, discount_unitar, 0) As discount_unitar_val, ;
|
||||
Iif(m.llInValuta,1,0) As tip_valuta, ;
|
||||
Cast(.Null. As N(10)) As id_jtva_coloana_ex, Space(50) As codmatf, Space(50) As codbare, Space(10) As um, Space(50) As numar_contract ;
|
||||
FROM crsarticole_doc INTO CURSOR crsarticole_editare READWRITE
|
||||
|
||||
creeaza_facturacrs('crsfactura')
|
||||
prelucreaza_facturacrs('crsarticole_editare','crsfactura',0,0,0)
|
||||
|
||||
*!* gestionabil vine din nomenclatorul curent, nu din id_gestiune; id_gestiune, Cont, id_pol/
|
||||
*!* pretd/id_valuta_d si vvaldiminuatctva (total in valuta cu tva, cf. oproceduri_facturare.prg:2282)
|
||||
*!* nu sunt in lista de insert a lui prelucreaza_facturacrs
|
||||
SELECT crsarticole_editare
|
||||
SCAN
|
||||
lnIdTemp = id_vanzare_det
|
||||
lnGestionabil = Iif(Nvl(in_stoc,0) <> 0, 1, 0)
|
||||
SELECT crsfactura
|
||||
REPLACE gestionabil WITH m.lnGestionabil, ;
|
||||
id_gestiune WITH Nvl(crsarticole_editare.id_gestiune, -1000), ;
|
||||
id_pol WITH crsarticole_editare.id_pol, ;
|
||||
pretd WITH crsarticole_editare.pretd, ;
|
||||
id_valuta_d WITH crsarticole_editare.id_valutad, ;
|
||||
vvaldiminuatctva WITH vvaldiminuatftva + vvaldiminuattva ;
|
||||
FOR id_temp = m.lnIdTemp
|
||||
SELECT crsarticole_editare
|
||||
ENDSCAN
|
||||
|
||||
Use In crsarticole_doc
|
||||
Use In crsarticole_editare
|
||||
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
147
utile/Teste/editare_factura/probe_defect5.prg
Normal file
147
utile/Teste/editare_factura/probe_defect5.prg
Normal file
@@ -0,0 +1,147 @@
|
||||
* probe_defect5.prg
|
||||
* Proba unica, ne-permanenta: deschide pe traseul real (frm_facturi.do_editare_unificata) un
|
||||
* document cu incasat<>0, tip 1-4, ne-proforma (id_vanzare=1071, gasit prin find_defect5_doc.prg)
|
||||
* si logheaza daca apare eroare VFP sau daca formularul se deschide normal. Nu scrie in Oracle.
|
||||
* Foloseste acelasi mecanism ca test_s8_pas7_cablare.prg (driverS8p7), copiat aici temporar.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_defect5_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
PUBLIC gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PUBLIC goDriverS8p7
|
||||
goDriverS8p7 = Createobject('driverS8p7')
|
||||
_SCREEN.AddObject('tmrS8p7', 'Timer')
|
||||
_SCREEN.tmrS8p7.Interval = 150
|
||||
Bindevent(_SCREEN.tmrS8p7, 'Timer', goDriverS8p7, 'Executa')
|
||||
_SCREEN.tmrS8p7.Enabled = .T.
|
||||
|
||||
Private poFacturi
|
||||
poFacturi = Null
|
||||
IF Used('crsfacturi')
|
||||
Use In crsfacturi
|
||||
ENDIF
|
||||
|
||||
LOCAL lcSchema, lcSelect, lcOrder, lcFiltru
|
||||
lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ;
|
||||
['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),delegat c(70),'+] + ;
|
||||
['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ;
|
||||
['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ;
|
||||
['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ;
|
||||
['id_delegat n(10),id_agent n(10),id_masina n(10),valoarea N(20,4),nume_gestiune C(50),id_sectie n(5),sectie c(50),id_lucrare n(20), lucrare c(200),'+] + ;
|
||||
['tip_incasare n(10),afisare_scadenta n(1),id_ordl n(10),tva_incasare n(1),listare_detaliata n(1),'+] + ;
|
||||
['id_facturare n(10),adresa_facturare c(250),email_facturare c(100),adresa_client c(250),email_client c(100),adresa_beneficiar c(250),email_beneficiar c(100),'+] + ;
|
||||
['id_beneficiar n(20),beneficiar C(100),tip_factura N(5),ctip_factura C(100), id_ctr N(10), contract C(100),eproforma N(1),tip_saft N(3) null,tip_saftname V(250) null,'+]+;
|
||||
['id_livrare N(10),adresa_livrare V(250), denumire_adresa_livrare V(100), email_livrare V(100),institutie_publica N(1) null,efactura N(1) null,cod_fiscal C(20),id_fact N(20)']
|
||||
|
||||
lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ;
|
||||
['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ;
|
||||
['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ;
|
||||
['valuta,id_valuta,valval,tvaval,totval,'+] + ;
|
||||
['id_delegat,id_agent,id_masina,valoarea,'+] + ;
|
||||
['nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare,listare_detaliata,'+] + ;
|
||||
['id_facturare,adresa_facturare,email_facturare,adresa_client,email_client,adresa_beneficiar,email_beneficiar,'+] + ;
|
||||
['id_beneficiar, beneficiar, tip_factura, ctip_factura, id_ctr, contract, eproforma,tip_saft,tip_saftname, '+]+;
|
||||
['id_livrare,adresa_livrare,denumire_adresa_livrare,email_livrare,institutie_publica,efactura,cod_fiscal,id_fact from fact_vfacturi where ']
|
||||
|
||||
lcOrder = [data_act,numar_act]
|
||||
lcFiltru = [id_vanzare = 1071]
|
||||
gencursor('poFacturi', 'crsfacturi', lcSelect, lcFiltru, lcSchema, lcOrder, .F., [], .F., [])
|
||||
poFacturi.ca_baza1.afisare()
|
||||
|
||||
IF !Used('crsfacturi') OR Reccount('crsfacturi') <> 1
|
||||
STRTOFILE('EROARE: crsfacturi nu are 1071' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
STRTOFILE('crsfacturi OK, incasat=' + Transform(crsfacturi.incasat) + ' tip=' + Transform(crsfacturi.tip) + ' eproforma=' + Transform(crsfacturi.eproforma) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
Select crsfacturi
|
||||
Local loFrm
|
||||
loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx')
|
||||
STRTOFILE('Newobject(frm_facturi): ' + Vartype(m.loFrm) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
Select crsfacturi
|
||||
Locate For id_vanzare = 1071
|
||||
STRTOFILE('Locate 1071: Found=' + Transform(Found()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
goDriverS8p7.Reseteaza()
|
||||
STRTOFILE('inainte de do_editare_unificata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
loFrm.do_editare_unificata()
|
||||
STRTOFILE('dupa do_editare_unificata, mesaj amessagebox=[' + gcMockUltimMesaj + '] driver.lGasit=' + Transform(goDriverS8p7.lGasit) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
_SCREEN.tmrS8p7.Enabled = .F.
|
||||
Try
|
||||
_SCREEN.RemoveObject('tmrS8p7')
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
Try
|
||||
loFrm.Release()
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
DEFINE CLASS driverS8p7 AS Custom
|
||||
lBusy = .F.
|
||||
lGasit = .F.
|
||||
|
||||
PROCEDURE Reseteaza
|
||||
This.lGasit = .F.
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Executa
|
||||
IF This.lBusy OR This.lGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
This.lBusy = .T.
|
||||
TRY
|
||||
LOCAL lnI, loFrm2
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
IF Upper(_SCREEN.Forms(m.lnI).Class) == 'FRM_FACTURARE_ARTICOLE2'
|
||||
loFrm2 = _SCREEN.Forms(m.lnI)
|
||||
This.lGasit = .T.
|
||||
loFrm2.Release()
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
CATCH TO loExcS8p7
|
||||
STRTOFILE('DRIVER EROARE ' + TRANSFORM(loExcS8p7.ErrorNo) + ' ' + loExcS8p7.Message + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
FINALLY
|
||||
This.lBusy = .F.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
233
utile/Teste/editare_factura/probe_defect5_latent.prg
Normal file
233
utile/Teste/editare_factura/probe_defect5_latent.prg
Normal file
@@ -0,0 +1,233 @@
|
||||
* probe_defect5_latent.prg
|
||||
* I1 din mandatul defect5b: simuleaza reparatia golului de incarcare (poDate.incasat nepopulat,
|
||||
* docs\raport_s8_defect5_incasat.md) FARA sa atinga codul de productie. Repeta pas-cu-pas corpul
|
||||
* real al frm_facturi.do_editare_unificata (ofacturare_comun.vc2:3890-3975), cu poDate.incasat
|
||||
* fortat la valoarea reala din baza dupa IncarcaAntetFacturaEditare si inainte de Createobject/Show,
|
||||
* ca sa arate ce s-ar intampla daca golul de incarcare ar fi reparat. Nu scrie in Oracle (doar
|
||||
* SELECT prin gencursor/goExecutor), nu modifica niciun .vc2/.vcx.
|
||||
* Document: id_vanzare=1071 (tip=1, incasat=119, eproforma=0, sters=0), gasit de
|
||||
* find_defect5_doc.prg. Driver de inchidere modal: acelasi driverS8p7 din test_s8_pas7_cablare.prg.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_defect5_latent_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
PUBLIC gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PUBLIC goDriverS8p7
|
||||
goDriverS8p7 = Createobject('driverS8p7')
|
||||
_SCREEN.AddObject('tmrS8p7', 'Timer')
|
||||
_SCREEN.tmrS8p7.Interval = 150
|
||||
Bindevent(_SCREEN.tmrS8p7, 'Timer', goDriverS8p7, 'Executa')
|
||||
_SCREEN.tmrS8p7.Enabled = .T.
|
||||
|
||||
*!* --- G2: instantaneu vplaje_numere INAINTE ---
|
||||
LOCAL lnSuccesG2a
|
||||
lnSuccesG2a = goExecutor.oExecute('select * from vplaje_numere order by 1', 'crsplaje_inainte')
|
||||
STRTOFILE('vplaje_numere INAINTE: oExecute=' + Transform(lnSuccesG2a) + ' randuri=' + ;
|
||||
Transform(Iif(Used('crsplaje_inainte'), Reccount('crsplaje_inainte'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnIdVanzare
|
||||
lnIdVanzare = 1071
|
||||
|
||||
*!* --- replica exacta a corpului do_editare_unificata (ofacturare_comun.vc2:3890-3975) ---
|
||||
Local lnSters, llEProforma, lnTipDoc, loForm, pnDiscountRon, pnDiscountValuta
|
||||
Private pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzareP, poDate
|
||||
Store 0 To pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzareP
|
||||
|
||||
LOCAL lnSuccesSel
|
||||
lnSuccesSel = goExecutor.oExecute('select id_vanzare,cod,data_act,sters,id_fact,eproforma,tip,incasat from fact_vfacturi where id_vanzare=' + Transform(lnIdVanzare), 'crsUnic')
|
||||
IF lnSuccesSel < 0 OR !Used('crsUnic') OR Reccount('crsUnic') <> 1
|
||||
STRTOFILE('EROARE: documentul 1071 nu a putut fi reincarcat pentru replica' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
SELECT crsUnic
|
||||
lnIdVanzareP = id_vanzare
|
||||
lnCod = cod
|
||||
pnAn = Year(data_act)
|
||||
pnLuna = Month(data_act)
|
||||
lnSters = sters
|
||||
lnIdFact = id_fact
|
||||
llEProforma = (eproforma = 1)
|
||||
lnTipDoc = tip
|
||||
LOCAL lnIncasatReal
|
||||
lnIncasatReal = incasat
|
||||
|
||||
STRTOFILE('replica: id_vanzare=' + Transform(lnIdVanzareP) + ' tip=' + Transform(lnTipDoc) + ;
|
||||
' eproforma=' + Transform(llEProforma) + ' sters=' + Transform(lnSters) + ' incasat_real=' + Transform(lnIncasatReal) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF lnSters = 1
|
||||
STRTOFILE('OPRIT: document sters' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF llEProforma
|
||||
STRTOFILE('OPRIT: proforma' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF Inlist(lnTipDoc, 44, 45, 46, 51)
|
||||
STRTOFILE('OPRIT: tip in afara perimetrului' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF (pnAn * 12) + pnLuna <> (gnAn * 12) + gnLuna
|
||||
STRTOFILE('OPRIT: nu e in luna curenta de lucru' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF ReferinteDocumenteNota(pnAn, pnLuna, lnCod)
|
||||
STRTOFILE('OPRIT: are referinte (incasari/plati)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF EsteInEFactura(lnIdFact)
|
||||
STRTOFILE('OPRIT: e in eFactura' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF DocumentAreUrmasi(lnIdVanzareP)
|
||||
STRTOFILE('OPRIT: are urmasi' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdVanzareP, @pnDiscountRon, @pnDiscountValuta)
|
||||
IF Vartype(poDate) <> 'O'
|
||||
STRTOFILE('OPRIT: IncarcaAntetFacturaEditare a esuat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('poDate.incasat INAINTE de fortare (asa cum e azi, defect infirmat/latent) = ' + Transform(poDate.incasat) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* FORTARE - simuleaza reparatia golului de incarcare, fara sa atinga IncarcaAntetFacturaEditare
|
||||
poDate.incasat = lnIncasatReal
|
||||
|
||||
STRTOFILE('poDate.incasat DUPA fortare (simuleaza reparatia) = ' + Transform(poDate.incasat) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdVanzareP)
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
IF Used('jtva_coloane')
|
||||
Use In jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_ex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
ELSE
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_neex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('inainte de Createobject(frm_facturare_articole2)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
goDriverS8p7.Reseteaza()
|
||||
loForm = Createobject('frm_facturare_articole2')
|
||||
|
||||
STRTOFILE('Createobject terminat (Init a rulat deja aici, inclusiv blocul incasat<>0 daca poDate.incasat<>0)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loForm.ndiscfactron = pnDiscountRon
|
||||
loForm.ndiscfactval = pnDiscountValuta
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
STRTOFILE('inainte de Show()' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
loForm.Show()
|
||||
STRTOFILE('dupa Show(), mesaj amessagebox=[' + gcMockUltimMesaj + '] driver.lGasit=' + Transform(goDriverS8p7.lGasit) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
_SCREEN.tmrS8p7.Enabled = .F.
|
||||
Try
|
||||
_SCREEN.RemoveObject('tmrS8p7')
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
Try
|
||||
loForm.Release()
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
*!* --- G2: instantaneu vplaje_numere DUPA ---
|
||||
LOCAL lnSuccesG2b
|
||||
lnSuccesG2b = goExecutor.oExecute('select * from vplaje_numere order by 1', 'crsplaje_dupa')
|
||||
STRTOFILE('vplaje_numere DUPA: oExecute=' + Transform(lnSuccesG2b) + ' randuri=' + ;
|
||||
Transform(Iif(Used('crsplaje_dupa'), Reccount('crsplaje_dupa'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
goExecutor.oReset()
|
||||
|
||||
IF Used('crsplaje_inainte') AND Used('crsplaje_dupa')
|
||||
LOCAL lnDiferente, lnIdPlajaC, lnUrmvalInainte, lnUrmvalDupa
|
||||
lnDiferente = 0
|
||||
SELECT crsplaje_inainte
|
||||
SCAN
|
||||
lnIdPlajaC = id_plaja
|
||||
lnUrmvalInainte = urmval
|
||||
SELECT crsplaje_dupa
|
||||
LOCATE FOR id_plaja = lnIdPlajaC
|
||||
IF FOUND()
|
||||
lnUrmvalDupa = urmval
|
||||
IF lnUrmvalInainte <> lnUrmvalDupa
|
||||
lnDiferente = lnDiferente + 1
|
||||
STRTOFILE('DIFERENTA vplaje_numere: id_plaja=' + Transform(lnIdPlajaC) + ;
|
||||
' urmval_inainte=' + Transform(lnUrmvalInainte) + ' urmval_dupa=' + Transform(lnUrmvalDupa) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ELSE
|
||||
lnDiferente = lnDiferente + 1
|
||||
STRTOFILE('LIPSA in dupa: id_plaja=' + Transform(lnIdPlajaC) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
SELECT crsplaje_inainte
|
||||
ENDSCAN
|
||||
STRTOFILE('G2 vplaje_numere: total diferente urmval=' + Transform(lnDiferente) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
DEFINE CLASS driverS8p7 AS Custom
|
||||
lBusy = .F.
|
||||
lGasit = .F.
|
||||
|
||||
PROCEDURE Reseteaza
|
||||
This.lGasit = .F.
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Executa
|
||||
IF This.lBusy OR This.lGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
This.lBusy = .T.
|
||||
TRY
|
||||
LOCAL lnI, loFrm2
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
IF Upper(_SCREEN.Forms(m.lnI).Class) == 'FRM_FACTURARE_ARTICOLE2'
|
||||
loFrm2 = _SCREEN.Forms(m.lnI)
|
||||
This.lGasit = .T.
|
||||
loFrm2.Release()
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
CATCH TO loExcS8p7
|
||||
STRTOFILE('DRIVER EROARE ' + TRANSFORM(loExcS8p7.ErrorNo) + ' ' + loExcS8p7.Message + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
FINALLY
|
||||
This.lBusy = .F.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
403
utile/Teste/editare_factura/probe_fact005_avize.prg
Normal file
403
utile/Teste/editare_factura/probe_fact005_avize.prg
Normal file
@@ -0,0 +1,403 @@
|
||||
* probe_fact005_avize.prg
|
||||
* Diagnostic pentru "Nu exista articole in lista de vanzare! (FACT-005)" pe documentul 1119
|
||||
* (AVIZ-B, rularea 2 din test_s9_8_flux.prg, firma 167). Repeta EXACT scenariul rularii 2, dar cu
|
||||
* goExecutor inlocuit de o subclasa care logheaza fiecare statement, masoara starea reala in
|
||||
* Oracle in punctele-cheie (dupa stergere, inainte de scrie_factura_avize) si BLOCHEAZA apelul
|
||||
* scrie_factura_avize - deci nu se scrie nimic si nu se consuma niciun numar.
|
||||
*
|
||||
* Masoara, in ordine, in ACEEASI tranzactie:
|
||||
* - inainte: FACTURAT pe avizul sursa 684, randurile VANZARI_CORESP, VANZARI_CANTITATI
|
||||
* - dupa StergeDocumentFacturare (detectat prin primul initializeaza_date_factura): aceleasi
|
||||
* - inainte de scrie_factura_avize: count(*) pe VANZARI_DETALII_TEMP + listaid + ramas avize
|
||||
* La final: ROLLBACK.
|
||||
|
||||
*!* tnIdFirma: firma pe care intra harness-ul. 167 = firma documentului 1119 (corect);
|
||||
*!* 0 = fara firma, exact cum a rulat sweep-ul S12 din 04.09 01:23 (cade pe firma implicita 110)
|
||||
*!* tnControlNegativ = 1: goleste CONT-ul in apelurile adauga_articol_factura (ca inainte de
|
||||
*!* reparatia FACT-008), ca sa se vada daca reapare FACT-005
|
||||
*!* tnFaraInfasurare = 1: apelul se trimite EXACT cum il trimite productia, fara EXCEPTION WHEN
|
||||
*!* OTHERS - se vede codul real intors de SQLExec, deci daca eroarea e tacuta sau zgomotoasa
|
||||
LPARAMETERS tnIdFirma, tnControlNegativ, tnFaraInfasurare
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, poDate, poSnapshotEditare, gnNrAdaugaArt, pcErrF005, gnControlNegativ, gnFaraInfasurare
|
||||
pcErrF005 = SPACE(400)
|
||||
gnControlNegativ = VAL(TRANSFORM(tnControlNegativ))
|
||||
gnFaraInfasurare = VAL(TRANSFORM(tnFaraInfasurare))
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_fact005_avize_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=F005-AVIZ doc=1119 aviz=684 firma_ceruta=' + ;
|
||||
TRANSFORM(VAL(TRANSFORM(tnIdFirma))) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8, VAL(TRANSFORM(tnIdFirma))
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnNrAdaugaArt = 0
|
||||
|
||||
STRTOFILE('perioada activa gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + ;
|
||||
' gnIdFirma=' + TRANSFORM(gnIdFirma) + ' gnIdSucursala=' + TRANSFORM(gnIdSucursala) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO Probeaza
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Probeaza
|
||||
LOCAL loForm, lnDiscRon, lnDiscVal, lnIdV, lnRuta, llRez, loSpy, loReal
|
||||
lnIdV = 1119
|
||||
|
||||
DO StareAvize WITH 'INAINTE'
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdV, @lnDiscRon, @lnDiscVal)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
STRTOFILE('EROARE: antetul nu s-a incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
STRTOFILE('poDate.tip=' + TRANSFORM(poDate.tip) + ' poDate.listaid=[' + TRANSFORM(NVL(poDate.listaid,'<NULL>')) + ;
|
||||
'] poDate.cListaSursaAvize=[' + TRANSFORM(NVL(poDate.cListaSursaAvize,'<NULL>')) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdV)
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
STRTOFILE('EROARE: liniile nu s-au incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
STRTOFILE('crsfactura: ' + TRANSFORM(RECCOUNT('crsfactura')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
STRTOFILE(' rand ' + TRANSFORM(RECNO()) + ': id_temp=' + TRANSFORM(NVL(crsfactura.id_temp,-1)) + ;
|
||||
' id_articol=' + TRANSFORM(NVL(crsfactura.id_articol,-1)) + ;
|
||||
' id_gestiune=' + TRANSFORM(NVL(crsfactura.id_gestiune,-1)) + ;
|
||||
' cantitate=' + TRANSFORM(crsfactura.cantitate) + ;
|
||||
' opt_facturare=' + TRANSFORM(NVL(crsfactura.opt_facturare,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
GO TOP IN crsfactura
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
loForm = CREATEOBJECT('SpyFrm005')
|
||||
loForm.ndiscfactron = lnDiscRon
|
||||
loForm.ndiscfactval = lnDiscVal
|
||||
loForm.do_calculeaza_totaluri()
|
||||
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, ;
|
||||
lnIdV, Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), ;
|
||||
Val1([select nvl(cod,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), gnAn, gnLuna)
|
||||
IF VARTYPE(poSnapshotEditare) <> 'O'
|
||||
STRTOFILE('EROARE: instantaneul nu s-a creat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
REPLACE cantitate WITH cantitate + 1 IN crsfactura
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura')
|
||||
STRTOFILE('ruta aleasa = ' + TRANSFORM(lnRuta) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loReal = goExecutor
|
||||
loSpy = CREATEOBJECT('SpyF005')
|
||||
loSpy.nHandle = gnHandle
|
||||
goExecutor = loSpy
|
||||
|
||||
STRTOFILE('--- INCEPE do_scrie_factura ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
llRez = loForm.do_scrie_factura()
|
||||
STRTOFILE('--- do_scrie_factura a intors ' + TRANSFORM(llRez) + ' ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
goExecutor = loReal
|
||||
STRTOFILE('statemente capturate: ' + TRANSFORM(loSpy.nIdx) + ' adauga_articol_factura: ' + TRANSFORM(gnNrAdaugaArt) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('ultimul mesaj prin mock: [' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
DO StareAvize WITH 'DUPA ROLLBACK'
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* StareAvize: starea legaturii aviz->factura, citita prin conexiunea curenta (deci vede si ce e
|
||||
* nescris-inca-necomis in tranzactia proprie).
|
||||
*==============================================================================================
|
||||
PROCEDURE StareAvize
|
||||
LPARAMETERS tcEticheta
|
||||
STRTOFILE(tcEticheta + ' | vanzari.1119 sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from vanzari where id_vanzare = 1119])) + ;
|
||||
' id_fact=' + TRANSFORM(Val1([select nvl(id_fact,-9) as v from vanzari where id_vanzare = 1119])) + ;
|
||||
' | aviz 684 facturat=' + TRANSFORM(Val1([select nvl(facturat,-9) as v from vanzari where id_vanzare = 684])) + ;
|
||||
' sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from vanzari where id_vanzare = 684])) + ;
|
||||
' | coresp(fact=1119,sters=0)=' + TRANSFORM(Val1([select count(*) as v from vanzari_coresp where id_vanzare_fact = 1119 and sters = 0])) + ;
|
||||
' coresp(fact=1119,total)=' + TRANSFORM(Val1([select count(*) as v from vanzari_coresp where id_vanzare_fact = 1119])) + ;
|
||||
' | cantitati vii pe det 1119=' + TRANSFORM(Val1([select count(*) as v from vanzari_cantitati where sters = 0 and id_vanzare_det in (select id_vanzare_det from vanzari_detalii where id_vanzare = 1119)])) + ;
|
||||
' | ramas_avize_lista(684)=' + TRANSFORM(Val1([select pack_facturare.exista_ramas_avize_lista('684') as v from dual])) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* ListeazaTemp: continutul VANZARI_DETALII_TEMP in tranzactia curenta (tabela temporara pe
|
||||
* tranzactie - se vede doar din aceasta sesiune).
|
||||
*==============================================================================================
|
||||
PROCEDURE ListeazaTemp
|
||||
LPARAMETERS tcEticheta
|
||||
LOCAL lnR
|
||||
IF USED('v_tmp95')
|
||||
USE IN v_tmp95
|
||||
ENDIF
|
||||
lnR = SQLExec(gnHandle, [select id_temp, id_articol, id_gestiune, cantitate, pret, proc_tvav, in_stoc from vanzari_detalii_temp order by id_temp], 'v_tmp95')
|
||||
IF lnR < 0 OR !USED('v_tmp95')
|
||||
STRTOFILE(tcEticheta + ': EROARE la citirea VANZARI_DETALII_TEMP' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
STRTOFILE(tcEticheta + ': VANZARI_DETALII_TEMP are ' + TRANSFORM(RECCOUNT('v_tmp95')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT v_tmp95
|
||||
SCAN
|
||||
STRTOFILE(' id_temp=' + TRANSFORM(NVL(v_tmp95.id_temp,-1)) + ;
|
||||
' id_articol=' + TRANSFORM(NVL(v_tmp95.id_articol,-1)) + ;
|
||||
' id_gestiune=' + TRANSFORM(NVL(v_tmp95.id_gestiune,-1)) + ;
|
||||
' cantitate=' + TRANSFORM(NVL(v_tmp95.cantitate,-1)) + ;
|
||||
' pret=' + TRANSFORM(NVL(v_tmp95.pret,-1)) + ;
|
||||
' proc_tvav=' + TRANSFORM(NVL(v_tmp95.proc_tvav,-1)) + ;
|
||||
' in_stoc=' + TRANSFORM(NVL(v_tmp95.in_stoc,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_tmp95
|
||||
ENDPROC
|
||||
|
||||
|
||||
FUNCTION Val1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnRet, lnR
|
||||
lnRet = -1
|
||||
IF USED('v_val96')
|
||||
USE IN v_val96
|
||||
ENDIF
|
||||
lnR = SQLExec(gnHandle, tcSql, 'v_val96')
|
||||
IF lnR >= 0 AND USED('v_val96')
|
||||
SELECT v_val96
|
||||
IF RECCOUNT('v_val96') > 0
|
||||
GO TOP
|
||||
lnRet = NVL(v_val96.v, -1)
|
||||
ENDIF
|
||||
USE IN v_val96
|
||||
ENDIF
|
||||
RETURN lnRet
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE NEPRINSA ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* SpyFrm005: subclasa a formularului real, cu o singura schimbare - do_inchide_tranzactie face
|
||||
* MEREU ROLLBACK, niciodata COMMIT. Restul fluxului ruleaza neatins, deci nimic nu se scrie.
|
||||
*==============================================================================================
|
||||
DEFINE CLASS SpyFrm005 AS frm_facturare_articole2 OF "D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare.vcx"
|
||||
PROCEDURE do_inchide_tranzactie
|
||||
LPARAMETERS tnTip
|
||||
STRTOFILE(' [SpyFrm005] do_inchide_tranzactie(' + TRANSFORM(tnTip) + ') -> fortat ROLLBACK' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
*!* documentul reemis se masoara AICI - dupa acest apel nu mai exista nimic
|
||||
LOCAL lnIdVNou
|
||||
lnIdVNou = Val1([select nvl(max(id_vanzare),0) as v from vanzari])
|
||||
STRTOFILE('DOCUMENT REEMIS (inainte de rollback) id_vanzare=' + TRANSFORM(lnIdVNou) + ;
|
||||
' linii vii=' + TRANSFORM(Val1([select count(*) as v from vanzari_detalii where id_vanzare = ] + TRANSFORM(lnIdVNou) + [ and sters = 0])) + ;
|
||||
' (originalul 1119 are 4)' + ;
|
||||
' id_fact=' + TRANSFORM(Val1([select nvl(id_fact,-9) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdVNou))) + ;
|
||||
' tip=' + TRANSFORM(Val1([select nvl(tip,-9) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdVNou))) + ;
|
||||
' coresp(fact=nou,tip=1,sters=0)=' + TRANSFORM(Val1([select count(*) as v from vanzari_coresp where id_vanzare_fact = ] + TRANSFORM(lnIdVNou) + [ and tip = 1 and sters = 0])) + ;
|
||||
' total_cu_tva=' + TRANSFORM(Val1([select nvl(total_cu_tva,-9) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdVNou))) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN DODEFAULT(2)
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* SpyF005: subclasa a lui oexecutor. Logheaza fiecare statement, masoara starea in punctele-cheie
|
||||
* si BLOCHEAZA scrie_factura_avize (RETURN -1) - deci nu se scrie nimic.
|
||||
*==============================================================================================
|
||||
DEFINE CLASS SpyF005 AS oexecutor
|
||||
nIdx = 0
|
||||
nVazutInit = 0
|
||||
nUrmaTemp = 0
|
||||
|
||||
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
||||
LOCAL lnI, lnRet, loEx, lcS, lcC, lnPc
|
||||
THIS.nIdx = THIS.nIdx + 1
|
||||
lnI = THIS.nIdx
|
||||
lnPc = PCOUNT()
|
||||
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '<NU E SIR>')
|
||||
lcC = IIF(VARTYPE(m.tcCursor) = 'C', m.tcCursor, '')
|
||||
|
||||
STRTOFILE('#' + TRANSFORM(lnI) + ' pcount=' + TRANSFORM(lnPc) + ' cursor=[' + lcC + ']' + ;
|
||||
' len=' + TRANSFORM(LEN(lcS)) + CHR(13) + CHR(10) + ;
|
||||
' SQL=[' + LEFT(lcS, 1400) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* apelul se ruleaza infasurat intr-un EXCEPTION WHEN OTHERS care intoarce sqlcode/sqlerrm
|
||||
*!* prin bind OUT - acelasi apel, aceleasi argumente, dar cu eroarea vizibila
|
||||
IF 'adauga_articol_factura' $ lcS
|
||||
gnNrAdaugaArt = gnNrAdaugaArt + 1
|
||||
LOCAL lcInner, lnB, lcNou
|
||||
IF gnControlNegativ = 1
|
||||
lcS = STRTRAN(lcS, [,'371',], [,'',])
|
||||
STRTOFILE(' [control negativ] CONT golit in apel' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
lcInner = SUBSTR(lcS, 7)
|
||||
lnB = RAT('end;', lcInner)
|
||||
IF lnB > 1
|
||||
lcInner = LEFT(lcInner, lnB - 1)
|
||||
ENDIF
|
||||
pcErrF005 = SPACE(400)
|
||||
IF gnFaraInfasurare = 1
|
||||
LOCAL ARRAY laErr[1]
|
||||
lnRet = SQLExec(gnHandle, lcS)
|
||||
pcErrF005 = IIF(lnRet < 0 AND AERROR(laErr) > 0, TRANSFORM(laErr[1,3]), 'OK')
|
||||
STRTOFILE(' -> [neinfasurat] ret=' + TRANSFORM(lnRet) + ' err=[' + ALLTRIM(TRANSFORM(pcErrF005)) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO ListeazaTemp WITH ' dupa acest adauga_articol_factura'
|
||||
RETURN lnRet
|
||||
ENDIF
|
||||
LOCAL lcQ
|
||||
lcQ = CHR(39)
|
||||
lcNou = [begin begin ] + lcInner + [ ?@pcErrF005 := ] + lcQ + [OK] + lcQ + [; exception when others then ] + ;
|
||||
[?@pcErrF005 := to_char(sqlcode) || ] + lcQ + [ ] + lcQ + [ || substr(sqlerrm,1,300); end; end;]
|
||||
lnRet = SQLExec(gnHandle, lcNou)
|
||||
STRTOFILE(' -> [infasurat] ret=' + TRANSFORM(lnRet) + ' pcErrF005=[' + ALLTRIM(TRANSFORM(pcErrF005)) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO ListeazaTemp WITH ' dupa acest adauga_articol_factura'
|
||||
RETURN IIF(lnRet < 0, -1, 1)
|
||||
ENDIF
|
||||
|
||||
*!* primul initializeaza_date_factura vine imediat DUPA StergeDocumentFacturare
|
||||
IF 'initializeaza_date_factura' $ lcS AND THIS.nVazutInit = 0
|
||||
THIS.nVazutInit = 1
|
||||
DO StareAvize WITH 'DUPA STERGERE (inainte de initializeaza_date_factura)'
|
||||
ENDIF
|
||||
|
||||
IF 'scrie_factura_avize' $ lcS
|
||||
STRTOFILE(' *** punct de masura: inainte de scrie_factura_avize ***' + CHR(13) + CHR(10) + ;
|
||||
' vanzari_detalii_temp = ' + TRANSFORM(Val1([select count(*) as v from vanzari_detalii_temp])) + ' randuri' + CHR(13) + CHR(10) + ;
|
||||
' act_temp = ' + TRANSFORM(Val1([select count(*) as v from act_temp])) + ' randuri' + CHR(13) + CHR(10) + ;
|
||||
' poDate.listaid = [' + TRANSFORM(NVL(poDate.listaid,'<NULL>')) + ']' + CHR(13) + CHR(10) + ;
|
||||
' clistaid Oracle = [' + TRANSFORM(Sir1([select nvl(pack_facturare.clistaid,'<NULL>') as v from dual])) + ']' + CHR(13) + CHR(10) + ;
|
||||
' ntip Oracle = ' + TRANSFORM(Val1([select nvl(pack_facturare.ntip,-9) as v from dual])) + CHR(13) + CHR(10) + ;
|
||||
' nid_sucursala Oracle = ' + TRANSFORM(Val1([select nvl(pack_facturare.nid_sucursala,-9) as v from dual])) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO ListeazaTemp WITH ' inainte de scrie_factura_avize'
|
||||
DO StareAvize WITH 'INAINTE DE scrie_factura_avize'
|
||||
|
||||
*!* acelasi apel, dar cu REF CURSOR-ul si OUT-ul in variabile PL/SQL locale si cu
|
||||
*!* EXCEPTION WHEN OTHERS care intoarce sqlcode/sqlerrm - apoi se intoarce mereu -1,
|
||||
*!* deci fluxul cade pe ramura de eroare (ROLLBACK) chiar daca apelul ar fi reusit
|
||||
LOCAL lcQ2, lnP1, lcArg, lcBloc
|
||||
lcQ2 = CHR(39)
|
||||
lnP1 = AT('(', lcS)
|
||||
lcArg = SUBSTR(lcS, lnP1 + 1, RAT(')', lcS) - lnP1 - 1)
|
||||
lcArg = STRTRAN(lcArg, '?@poDate.nid_vanzare', 'v')
|
||||
pcErrF005 = SPACE(400)
|
||||
THIS.nUrmaTemp = 2
|
||||
ENDIF
|
||||
|
||||
lnRet = -1
|
||||
TRY
|
||||
DO CASE
|
||||
CASE lnPc <= 1
|
||||
lnRet = DODEFAULT(m.tcSql)
|
||||
CASE lnPc = 2
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor)
|
||||
CASE lnPc = 3
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress)
|
||||
CASE lnPc = 4
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress)
|
||||
CASE lnPc = 5
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle)
|
||||
CASE lnPc = 6
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError)
|
||||
CASE lnPc = 7
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError)
|
||||
OTHERWISE
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError, m.tlReconnect)
|
||||
ENDCASE
|
||||
STRTOFILE(' -> ret=' + TRANSFORM(lnRet) + IIF(lnRet < 0, ' EROARE=[' + THIS.cEroare + ']', '') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF THIS.nUrmaTemp > 0
|
||||
THIS.nUrmaTemp = 0
|
||||
DO ListeazaTemp WITH ' dupa acest statement'
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' -> EXCEPTIE VFP la statement #' + TRANSFORM(lnI) + ;
|
||||
': ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ;
|
||||
' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnRet = -1
|
||||
THIS.cEroare = 'SpyF005: ' + TRANSFORM(loEx.Message)
|
||||
ENDTRY
|
||||
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
|
||||
FUNCTION oPrelucrareEroare
|
||||
RETURN 'SpyF005: ' + TRANSFORM(THIS.cEroare)
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
|
||||
|
||||
FUNCTION Sir1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lcRet, lnR
|
||||
lcRet = '<eroare>'
|
||||
IF USED('v_sir96')
|
||||
USE IN v_sir96
|
||||
ENDIF
|
||||
lnR = SQLExec(gnHandle, tcSql, 'v_sir96')
|
||||
IF lnR >= 0 AND USED('v_sir96')
|
||||
SELECT v_sir96
|
||||
IF RECCOUNT('v_sir96') > 0
|
||||
GO TOP
|
||||
lcRet = ALLTRIM(TRANSFORM(NVL(v_sir96.v, '<NULL>')))
|
||||
ENDIF
|
||||
USE IN v_sir96
|
||||
ENDIF
|
||||
RETURN lcRet
|
||||
ENDFUNC
|
||||
39
utile/Teste/editare_factura/probe_incarca_antet.prg
Normal file
39
utile/Teste/editare_factura/probe_incarca_antet.prg
Normal file
@@ -0,0 +1,39 @@
|
||||
* probe_incarca_antet.prg - apeleaza direct IncarcaAntetFacturaEditare (fara do_editare_unificata,
|
||||
* fara Createobject pe forma) pe cele 4 documente vechi, sa vada daca poDate se construieste OK.
|
||||
* Read-only. Diagnostic pentru docs\triaj_s8_regresie_28fail.md.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_incarca_antet_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
PROCEDURE Proba
|
||||
LPARAMETERS tnId
|
||||
LOCAL loDate, pnA, pnB
|
||||
loDate = IncarcaAntetFacturaEditare(tnId, @pnA, @pnB)
|
||||
STRTOFILE(Transform(tnId) + ': Vartype=' + Vartype(loDate) + ' oExecutor.cEroare=[' + Nvl(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Vartype(loDate) == 'O'
|
||||
STRTOFILE(Transform(tnId) + ': tip=' + Transform(loDate.tip) + ' incasat=' + Transform(loDate.incasat) + ' lEditare=' + Transform(loDate.lEditare) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
DO Proba WITH 1113
|
||||
DO Proba WITH 1055
|
||||
DO Proba WITH 1048
|
||||
DO Proba WITH 1130
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
50
utile/Teste/editare_factura/probe_s11_borderou_schema.prg
Normal file
50
utile/Teste/editare_factura/probe_s11_borderou_schema.prg
Normal file
@@ -0,0 +1,50 @@
|
||||
* probe_s11_borderou_schema.prg - read-only: semnaturile PACK_FACT_BORDEROU + structurile
|
||||
* FACT_BORDEROU / FACT_BORDEROU_DETALII / FACT_VBORDEROU_DETALII
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s11_borderou_schema_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Dump WITH [select line, text from user_source where name = 'PACK_FACT_BORDEROU' and type = 'PACKAGE' order by line], 'SPEC PACK_FACT_BORDEROU'
|
||||
DO Dump WITH [select column_name, data_type, data_length, nullable, column_id from user_tab_columns where table_name = 'FACT_BORDEROU' order by column_id], 'COLOANE FACT_BORDEROU'
|
||||
DO Dump WITH [select column_name, data_type, data_length, nullable, column_id from user_tab_columns where table_name = 'FACT_BORDEROU_DETALII' order by column_id], 'COLOANE FACT_BORDEROU_DETALII'
|
||||
DO Dump WITH [select column_name, data_type, data_length, column_id from user_tab_columns where table_name = 'FACT_VBORDEROU_DETALII' order by column_id], 'COLOANE FACT_VBORDEROU_DETALII'
|
||||
DO Dump WITH [select id, id_borderou, id_vanzare from ] + gcs + [.fact_borderou_detalii order by id], 'CONTINUT FACT_BORDEROU_DETALII'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Dump
|
||||
LPARAMETERS tcSql, tcTitlu
|
||||
LOCAL lnI, lcLinie
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + m.tcTitlu + ' ===' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_dump')
|
||||
USE IN v_dump
|
||||
ENDIF
|
||||
IF !goExecutor.oExecuta(m.tcSql, 'v_dump')
|
||||
STRTOFILE('ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_dump
|
||||
SCAN
|
||||
lcLinie = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_dump')
|
||||
lcLinie = lcLinie + IIF(lnI > 1, ' | ', '') + ALLTRIM(TRANSFORM(NVL(EVALUATE(FIELD(lnI, 'v_dump')), '')))
|
||||
ENDFOR
|
||||
STRTOFILE(STRTRAN(STRTRAN(lcLinie, CHR(13), ''), CHR(10), '') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_dump
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
53
utile/Teste/editare_factura/probe_s11_borderou_view.prg
Normal file
53
utile/Teste/editare_factura/probe_s11_borderou_view.prg
Normal file
@@ -0,0 +1,53 @@
|
||||
* probe_s11_borderou_view.prg - read-only: coloanele de total din VANZARI + definitia
|
||||
* FACT_VBORDEROU_DETALII prin dbms_metadata (CLOB, nu LONG - LONG agata ODBC-ul)
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s11_borderou_view_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Dump WITH [select column_name, data_type from user_tab_columns where table_name = 'VANZARI' ] + ;
|
||||
[and (column_name like '%TOTAL%' or column_name like '%VAL%') order by column_id], 'COLOANE TOTAL/VAL in VANZARI'
|
||||
|
||||
DO Dump WITH [select rn, substr(d, 1 + (rn-1)*180, 180) as bucata from ] + ;
|
||||
[(select dbms_metadata.get_ddl('VIEW','FACT_VBORDEROU_DETALII') d from dual), ] + ;
|
||||
[(select level rn from dual connect by level <= 60) ] + ;
|
||||
[where 1 + (rn-1)*180 <= length(d) order by rn], 'DDL FACT_VBORDEROU_DETALII'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Dump
|
||||
LPARAMETERS tcSql, tcTitlu
|
||||
LOCAL lnI, lcLinie
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + m.tcTitlu + ' ===' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_dump')
|
||||
USE IN v_dump
|
||||
ENDIF
|
||||
IF !goExecutor.oExecuta(m.tcSql, 'v_dump')
|
||||
STRTOFILE('ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_dump
|
||||
SCAN
|
||||
lcLinie = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_dump')
|
||||
lcLinie = lcLinie + IIF(lnI > 1, ' | ', '') + ALLTRIM(TRANSFORM(NVL(EVALUATE(FIELD(lnI, 'v_dump')), '')))
|
||||
ENDFOR
|
||||
STRTOFILE(STRTRAN(STRTRAN(lcLinie, CHR(13), ''), CHR(10), ' '), gcErrLog, 1)
|
||||
STRTOFILE(CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_dump
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
52
utile/Teste/editare_factura/probe_s11_candidati.prg
Normal file
52
utile/Teste/editare_factura/probe_s11_candidati.prg
Normal file
@@ -0,0 +1,52 @@
|
||||
* probe_s11_candidati.prg - read-only: candidatii eligibili pentru rularea 2, cu totalul si
|
||||
* numarul de linii, ca sa se vada care sunt reziduuri degenerate (total 0).
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s11_candidati_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lcSql, lnI, lcLinie
|
||||
lcSql = [select v.id_vanzare, v.cod, v.tip, v.id_fact, v.total_cu_tva, v.serie_act, v.numar_act, ] + ;
|
||||
[(select count(*) from vanzari_detalii d where d.sters = 0 and d.id_vanzare = v.id_vanzare) as linii, ] + ;
|
||||
[(select nvl(min(d.id_articol),0) from vanzari_detalii d where d.sters = 0 and d.id_vanzare = v.id_vanzare) as art_min ] + ;
|
||||
[from vanzari v where v.sters = 0 ] + ;
|
||||
[ and extract(year from v.data_act) = ] + TRANSFORM(gnAn) + ;
|
||||
[ and extract(month from v.data_act) = ] + TRANSFORM(gnLuna) + ;
|
||||
[ and nvl(v.eproforma,0) = 0 ] + ;
|
||||
[ and v.id_vanzare not in (1047,1048,1055,1113,1130) ] + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vact_tot a where a.sters = 0 and a.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and a.luna = ] + TRANSFORM(gnLuna) + [ and a.cod = v.cod) ] + ;
|
||||
[ and v.tip not in (4,3,21,25,28,42,47,44,45,46,51) ] + ;
|
||||
[ and exists (select 1 from vanzari_detalii d where d.sters = 0 and d.id_vanzare = v.id_vanzare and nvl(d.cantitate,0) > 0) ] + ;
|
||||
[ order by v.id_vanzare]
|
||||
|
||||
IF !goExecutor.oExecuta(lcSql, 'v_c')
|
||||
STRTOFILE('ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
STRTOFILE('id_vanzare | cod | tip | id_fact | total_cu_tva | serie | numar | linii | art_min' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT v_c
|
||||
SCAN
|
||||
lcLinie = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_c')
|
||||
lcLinie = lcLinie + IIF(lnI > 1, ' | ', '') + ALLTRIM(TRANSFORM(NVL(EVALUATE(FIELD(lnI, 'v_c')), '')))
|
||||
ENDFOR
|
||||
STRTOFILE(lcLinie + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_c
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
52
utile/Teste/editare_factura/probe_s11_stare_dupa.prg
Normal file
52
utile/Teste/editare_factura/probe_s11_stare_dupa.prg
Normal file
@@ -0,0 +1,52 @@
|
||||
* probe_s11_stare_dupa.prg - read-only: starea lasata de rularile probei S11 (documente atinse,
|
||||
* atasamente semanate, borderouri semanate), inainte de curatenie.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s11_stare_dupa_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Dump WITH [select id_vanzare, sters, serie_act, numar_act, total_cu_tva, id_fact from vanzari ] + ;
|
||||
[where id_vanzare in (1076,1111,1127,1128,1129,1169,1170) order by id_vanzare], 'DOCUMENTE ATINSE'
|
||||
DO Dump WITH [select id_vanzare, sters, count(*) as nr from ] + gcs + [.atasamente_vanzari ] + ;
|
||||
[where id_vanzare in (1076,1111,1127,1128,1129,1169,1170) group by id_vanzare, sters order by 1,2], 'ATASAMENTE SEMANATE'
|
||||
DO Dump WITH [select id, id_part, sters, trimis from ] + gcs + [.fact_borderou where id >= 20 order by id], 'BORDEROURI SEMANATE'
|
||||
DO Dump WITH [select id, id_borderou, id_vanzare from ] + gcs + [.fact_borderou_detalii where id_borderou >= 20 order by id], 'DETALII BORDEROU SEMANATE'
|
||||
DO Dump WITH [select max(numar_act) as ultim_sss from vanzari where serie_act = 'SSS'], 'ULTIMUL NUMAR SSS'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Dump
|
||||
LPARAMETERS tcSql, tcTitlu
|
||||
LOCAL lnI, lcLinie
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + m.tcTitlu + ' ===' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_dump')
|
||||
USE IN v_dump
|
||||
ENDIF
|
||||
IF !goExecutor.oExecuta(m.tcSql, 'v_dump')
|
||||
STRTOFILE('ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_dump
|
||||
SCAN
|
||||
lcLinie = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_dump')
|
||||
lcLinie = lcLinie + IIF(lnI > 1, ' | ', '') + ALLTRIM(TRANSFORM(NVL(EVALUATE(FIELD(lnI, 'v_dump')), '')))
|
||||
ENDFOR
|
||||
STRTOFILE(lcLinie + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_dump
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
278
utile/Teste/editare_factura/probe_s12_gestiune.prg
Normal file
278
utile/Teste/editare_factura/probe_s12_gestiune.prg
Normal file
@@ -0,0 +1,278 @@
|
||||
* probe_s12_gestiune.prg
|
||||
* Proba care APARA reparatia FACT-007 (docs\propunere_fact007_gestiune.md, aplicata in
|
||||
* ofacturare_editare.prg): verifica ca id_gestiune ajunge de la VANZARI_DETALII pana la
|
||||
* argumentul V_ID_GESTIUNE al apelului pack_facturare.adauga_articol_factura, cu NULL in sursa
|
||||
* mapat la -1000. Cade daca reparatia dispare sau daca e inlocuita cu o alta valoare (ex. 0).
|
||||
* NIMIC nu se scrie in Oracle: citirile sunt reale, dar do_scrie_articole() ruleaza cu goExecutor
|
||||
* mockat (tipar identic cu test_s11_izolare_camp_1472.prg).
|
||||
*
|
||||
* Pasul 1: sursa reala (VVANZARI_ARTICOLE prin IncarcaArticoleFactura) - construieste harta
|
||||
* id_temp -> gestiune asteptata (NULL -> -1000).
|
||||
* Pasul 2: crsfactura dupa IncarcaLiniiFacturaEditare - compara linie cu linie cu harta.
|
||||
* Pasul 3: SQL-ul generat de do_scrie_articole, argumentul 6 (V_ID_GESTIUNE) per apel, comparat
|
||||
* cu harta.
|
||||
* Pasul 4: rerulare pe acelasi crsfactura - verifica idempotenta rezultatului.
|
||||
LPARAMETERS tnIdV
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate
|
||||
|
||||
IF VARTYPE(tnIdV) = 'C'
|
||||
tnIdV = VAL(tnIdV)
|
||||
ENDIF
|
||||
IF EMPTY(tnIdV)
|
||||
tnIdV = 631
|
||||
ENDIF
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s12_gestiune_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' doc = ' + TRANSFORM(tnIdV) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO probe_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
PUBLIC gcGestiuniSql
|
||||
gcGestiuniSql = ''
|
||||
|
||||
DO Diagnostic WITH tnIdV
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Diagnostic
|
||||
LPARAMETERS tnIdV
|
||||
LOCAL lnDiscRon, lnDiscVal, lnRanduri, lnCorecte, lcAsteptatGestiuni, lnGestAsteptata
|
||||
|
||||
*!* PASUL 1: sursa reala, inainte de orice prelucrare; construieste harta id_temp -> gestiune asteptata
|
||||
IncarcaArticoleFactura(tnIdV, 'crs_src_probe')
|
||||
IF USED('crs_gest_expect')
|
||||
USE IN crs_gest_expect
|
||||
ENDIF
|
||||
CREATE CURSOR crs_gest_expect (id_temp N(10), gest_exp N(10))
|
||||
INDEX ON id_temp TAG id_temp
|
||||
|
||||
STRTOFILE('--- PAS 1: sursa VVANZARI_ARTICOLE (crs_src_probe) ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
LOCAL lnIdTempSrc, lnGestExpSrc
|
||||
SELECT crs_src_probe
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare_det=' + TRANSFORM(id_vanzare_det) + ;
|
||||
' id_articol=' + TRANSFORM(NVL(id_articol,-1)) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' in_stoc=' + TRANSFORM(NVL(in_stoc,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnIdTempSrc = id_vanzare_det
|
||||
lnGestExpSrc = NVL(id_gestiune,-1000)
|
||||
INSERT INTO crs_gest_expect (id_temp, gest_exp) VALUES (lnIdTempSrc, lnGestExpSrc)
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'P1 sursa contine cel putin o linie', RECCOUNT('crs_src_probe') > 0, TRANSFORM(RECCOUNT('crs_src_probe'))
|
||||
|
||||
*!* PASUL 2: incarcarea de editare
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(tnIdV, @lnDiscRon, @lnDiscVal)
|
||||
DO asserteaza WITH 'P2 antetul documentului ' + TRANSFORM(tnIdV) + ' s-a incarcat', VARTYPE(poDate) = 'O', VARTYPE(poDate)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, tnIdV)
|
||||
DO asserteaza WITH 'P2 liniile s-au incarcat in crsfactura', ;
|
||||
USED('crsfactura') AND RECCOUNT('crsfactura') > 0, TRANSFORM(IIF(USED('crsfactura'), RECCOUNT('crsfactura'), -1))
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- PAS 2: crsfactura dupa IncarcaLiniiFacturaEditare ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnRanduri = 0
|
||||
lnCorecte = 0
|
||||
lcAsteptatGestiuni = ''
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
lnRanduri = lnRanduri + 1
|
||||
lnGestAsteptata = GestiuneAsteptata(id_temp)
|
||||
STRTOFILE(' id_temp=' + TRANSFORM(id_temp) + ;
|
||||
' id_articol=' + IIF(ISNULL(id_articol), 'NULL', TRANSFORM(id_articol)) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' gestionabil=' + TRANSFORM(gestionabil) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF NVL(id_gestiune,-9999999) = lnGestAsteptata
|
||||
lnCorecte = lnCorecte + 1
|
||||
ENDIF
|
||||
lcAsteptatGestiuni = lcAsteptatGestiuni + ALLTRIM(STR(lnGestAsteptata)) + ';'
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'P2 liniile din crsfactura poarta gestiunea din sursa (NULL -> -1000)', ;
|
||||
lnCorecte = lnRanduri AND lnRanduri > 0, TRANSFORM(lnCorecte) + '/' + TRANSFORM(lnRanduri)
|
||||
|
||||
*!* normalizare locala: fara virgule in sirurile din SQL, ca argumentul 6 sa fie extractibil
|
||||
SELECT crsfactura
|
||||
REPLACE ALL explicatie WITH 'probe-s12', serie WITH '', lot WITH '', opt_facturare WITH 0 IN crsfactura
|
||||
GO TOP IN crsfactura
|
||||
|
||||
*!* PASUL 3: ce ajunge in SQL, cu mock (nimic nu se executa in Oracle)
|
||||
DO RuleazaCuMock WITH 'PAS3'
|
||||
DO asserteaza WITH 'P3 argumentul 6 (V_ID_GESTIUNE) e gestiunea sursei pe fiecare apel', ;
|
||||
gcGestiuniSql == lcAsteptatGestiuni, gcGestiuniSql + ' <> ' + lcAsteptatGestiuni
|
||||
|
||||
*!* PASUL 4: idempotenta - a doua rulare pe acelasi crsfactura trebuie sa dea acelasi rezultat
|
||||
GO TOP IN crsfactura
|
||||
DO RuleazaCuMock WITH 'PAS4-idempotenta'
|
||||
DO asserteaza WITH 'P4 a doua rulare da acelasi argument 6 (idempotenta)', ;
|
||||
gcGestiuniSql == lcAsteptatGestiuni, gcGestiuniSql + ' <> ' + lcAsteptatGestiuni
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* RuleazaCuMock: do_scrie_articole() cu goExecutor mockat; strange argumentul 6 al fiecarui apel
|
||||
* pack_facturare.adauga_articol_factura in gcGestiuniSql, separat prin ';'.
|
||||
*==============================================================================================
|
||||
PROCEDURE RuleazaCuMock
|
||||
LPARAMETERS tcPrefix
|
||||
LOCAL loForm, loMock, loExecutorReal, llReturn
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
|
||||
IF TYPE('plRegenerareEditare') <> 'U'
|
||||
RELEASE plRegenerareEditare
|
||||
ENDIF
|
||||
|
||||
loExecutorReal = goExecutor
|
||||
loMock = CREATEOBJECT('MockGoExecutorS12Gest')
|
||||
goExecutor = loMock
|
||||
|
||||
llReturn = loForm.do_scrie_articole()
|
||||
|
||||
goExecutor = loExecutorReal
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
gcGestiuniSql = loMock.cGestiuni
|
||||
|
||||
STRTOFILE(tcPrefix + ' do_scrie_articole()=' + TRANSFORM(llReturn) + ;
|
||||
' apeluri_articol=' + TRANSFORM(loMock.nApeluriArticol) + ;
|
||||
' argumente_6=[' + gcGestiuniSql + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcPrefix + ' --- ultimul SQL de articol ---' + CHR(13) + CHR(10) + ;
|
||||
TRANSFORM(loMock.cSqlUltim) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
RELEASE loForm
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE GestiuneAsteptata
|
||||
LPARAMETERS tnIdTemp
|
||||
LOCAL lnRet, lnSelPrev
|
||||
|
||||
lnSelPrev = SELECT()
|
||||
SELECT crs_gest_expect
|
||||
IF SEEK(m.tnIdTemp)
|
||||
lnRet = gest_exp
|
||||
ELSE
|
||||
lnRet = -9999999
|
||||
ENDIF
|
||||
SELECT (lnSelPrev)
|
||||
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE probe_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
DEFINE CLASS MockGoExecutorS12Gest AS Custom
|
||||
cGestiuni = ''
|
||||
cSqlUltim = ''
|
||||
nApeluri = 0
|
||||
nApeluriArticol = 0
|
||||
cEroare = ''
|
||||
|
||||
FUNCTION oExecute(tcSql)
|
||||
LOCAL lcSql, lnPoz, lcRest
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcSql) <> 'C'
|
||||
RETURN 1
|
||||
ENDIF
|
||||
lcSql = m.tcSql
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
DO WHILE lnPoz > 0
|
||||
THIS.nApeluriArticol = THIS.nApeluriArticol + 1
|
||||
lcRest = SUBSTR(lcSql, lnPoz + LEN('adauga_articol_factura('))
|
||||
THIS.cGestiuni = THIS.cGestiuni + ALLTRIM(GETWORDNUM(lcRest, 6, ',')) + ';'
|
||||
THIS.cSqlUltim = m.tcSql
|
||||
lcSql = lcRest
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
ENDDO
|
||||
RETURN 1
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oExecuta(tcSql, tcCursor)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcCursor) = 'C' AND !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (xdummy I)
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oPrelucrareEroare()
|
||||
RETURN 'MockGoExecutorS12Gest: ' + THIS.cEroare
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
297
utile/Teste/editare_factura/probe_s12_stoc.prg
Normal file
297
utile/Teste/editare_factura/probe_s12_stoc.prg
Normal file
@@ -0,0 +1,297 @@
|
||||
* probe_s12_stoc.prg
|
||||
* Proba de izolare pentru FACT-008 ("Articolul ... nu mai e in stoc!"): verifica daca pretv_orig
|
||||
* (pretul de vanzare din STOC ales la emiterea initiala) supravietuieste traseului de reemitere.
|
||||
* pack_facturare.descarca_gestiune cauta randul de stoc cu A.PRETV = V_PRETV_ALES, iar
|
||||
* V_PRETV_ALES vine din VANZARI_DETALII_TEMP.PRETV_ORIG, adica din argumentul 22 al apelului
|
||||
* pack_facturare.adauga_articol_factura, adica din crsfactura.pretv_orig.
|
||||
* Asertiunile sunt scrise in sensul CORECT: pretv_orig = STOC.PRETV al lotului, adica nenul
|
||||
* doar pe gestiunile la pret de vanzare (NOM_GESTIUNI.NR_PAG in 6/7) si 0 in rest.
|
||||
* NIMIC nu se scrie in Oracle: citirile sunt reale, do_scrie_articole() ruleaza cu goExecutor
|
||||
* mockat (tipar identic cu probe_s12_gestiune.prg / test_s11_izolare_camp_1472.prg).
|
||||
*
|
||||
* Pasul 1: sursa reala (VVANZARI_ARTICOLE prin IncarcaArticoleFactura).
|
||||
* Pasul 2: crsfactura dupa IncarcaLiniiFacturaEditare - pretv_orig per linie.
|
||||
* Pasul 3: SQL-ul generat de do_scrie_articole, argumentul 22 (V_PRETV_ORIG) per apel.
|
||||
LPARAMETERS tnIdV
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate
|
||||
|
||||
IF VARTYPE(tnIdV) = 'C'
|
||||
tnIdV = VAL(tnIdV)
|
||||
ENDIF
|
||||
IF EMPTY(tnIdV)
|
||||
tnIdV = 1188
|
||||
ENDIF
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s12_stoc_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' doc = ' + TRANSFORM(tnIdV) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO probe_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
PUBLIC gcPretvSql, gcContSql
|
||||
gcPretvSql = ''
|
||||
gcContSql = ''
|
||||
|
||||
DO Diagnostic WITH tnIdV
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Diagnostic
|
||||
LPARAMETERS tnIdV
|
||||
LOCAL lnDiscRon, lnDiscVal, lnGestionabile, lnCuPretv, lnArg, lnArgNenule, lnArgTotal
|
||||
LOCAL lnAsteptatNenule, lcGestPV
|
||||
LOCAL lnCuCont, lnSrcCuCont, lnCtTotal, lnCtNenule
|
||||
|
||||
IncarcaArticoleFactura(tnIdV, 'crs_src_probe')
|
||||
STRTOFILE('--- PAS 1: sursa VVANZARI_ARTICOLE (crs_src_probe) ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crs_src_probe
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare_det=' + TRANSFORM(id_vanzare_det) + ;
|
||||
' id_articol=' + TRANSFORM(NVL(id_articol,-1)) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' in_stoc=' + TRANSFORM(NVL(in_stoc,-1)) + ;
|
||||
' cont=[' + NVL(cont,'') + ']' + ;
|
||||
' pret_achizitie=' + TRANSFORM(NVL(pret_achizitie,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
SELECT COUNT(*) AS n FROM crs_src_probe WHERE !EMPTY(NVL(cont,'')) INTO CURSOR crs_cnt_cont
|
||||
lnSrcCuCont = crs_cnt_cont.n
|
||||
USE IN crs_cnt_cont
|
||||
DO asserteaza WITH 'P1 sursa contine cel putin o linie', RECCOUNT('crs_src_probe') > 0, TRANSFORM(RECCOUNT('crs_src_probe'))
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(tnIdV, @lnDiscRon, @lnDiscVal)
|
||||
DO asserteaza WITH 'P2 antetul documentului ' + TRANSFORM(tnIdV) + ' s-a incarcat', VARTYPE(poDate) = 'O', VARTYPE(poDate)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, tnIdV)
|
||||
DO asserteaza WITH 'P2 liniile s-au incarcat in crsfactura', ;
|
||||
USED('crsfactura') AND RECCOUNT('crsfactura') > 0, TRANSFORM(IIF(USED('crsfactura'), RECCOUNT('crsfactura'), -1))
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- PAS 2: crsfactura dupa IncarcaLiniiFacturaEditare ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
*!* pe gestiunile la pret de achizitie STOC.PRETV e 0, deci si pretv_orig trebuie sa fie 0
|
||||
lcGestPV = ','
|
||||
IF goExecutor.oExecuta('select id_gestiune from nom_gestiuni where nr_pag in (6,7)', 'crs_gest_pv')
|
||||
SELECT crs_gest_pv
|
||||
SCAN
|
||||
lcGestPV = lcGestPV + ALLTRIM(STR(crs_gest_pv.id_gestiune)) + ','
|
||||
ENDSCAN
|
||||
USE IN crs_gest_pv
|
||||
ENDIF
|
||||
DO asserteaza WITH 'P2 lista gestiunilor la pret de vanzare s-a incarcat', LEN(lcGestPV) > 1, lcGestPV
|
||||
|
||||
lnGestionabile = 0
|
||||
lnCuPretv = 0
|
||||
lnAsteptatNenule = 0
|
||||
lnCuCont = 0
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
STRTOFILE(' id_temp=' + TRANSFORM(id_temp) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' gestionabil=' + TRANSFORM(gestionabil) + ;
|
||||
' pret_achizitie=' + TRANSFORM(pret_achizitie) + ;
|
||||
' cont=[' + Cont + ']' + ;
|
||||
' pretv_orig=' + TRANSFORM(pretv_orig) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF !EMPTY(Cont)
|
||||
lnCuCont = lnCuCont + 1
|
||||
ENDIF
|
||||
IF gestionabil = 1
|
||||
lnGestionabile = lnGestionabile + 1
|
||||
IF ',' + ALLTRIM(STR(NVL(id_gestiune, -1))) + ',' $ lcGestPV
|
||||
lnAsteptatNenule = lnAsteptatNenule + 1
|
||||
ENDIF
|
||||
IF pretv_orig <> 0
|
||||
lnCuPretv = lnCuPretv + 1
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'P2 documentul are cel putin o linie gestionabila', lnGestionabile > 0, TRANSFORM(lnGestionabile)
|
||||
DO asserteaza WITH 'P2 crsfactura.pretv_orig e nenul exact pe liniile de pe gestiuni la pret de vanzare', ;
|
||||
lnCuPretv = lnAsteptatNenule AND lnGestionabile > 0, ;
|
||||
TRANSFORM(lnCuPretv) + ' nenule fata de ' + TRANSFORM(lnAsteptatNenule) + ' asteptate din ' + TRANSFORM(lnGestionabile) + ' gestionabile'
|
||||
DO asserteaza WITH 'P2 crsfactura.Cont e completat pe toate liniile care au CONT in sursa', ;
|
||||
lnCuCont = lnSrcCuCont AND lnSrcCuCont > 0, TRANSFORM(lnCuCont) + '/' + TRANSFORM(lnSrcCuCont)
|
||||
|
||||
*!* normalizare locala: fara virgule in sirurile din SQL, ca argumentul 22 sa fie extractibil
|
||||
SELECT crsfactura
|
||||
REPLACE ALL explicatie WITH 'probe-s12', serie WITH '', lot WITH '', opt_facturare WITH 0 IN crsfactura
|
||||
GO TOP IN crsfactura
|
||||
|
||||
DO RuleazaCuMock WITH 'PAS3'
|
||||
|
||||
lnArgTotal = 0
|
||||
lnArgNenule = 0
|
||||
FOR lnArg = 1 TO GETWORDCOUNT(gcPretvSql, ';')
|
||||
lnArgTotal = lnArgTotal + 1
|
||||
IF VAL(GETWORDNUM(gcPretvSql, lnArg, ';')) <> 0
|
||||
lnArgNenule = lnArgNenule + 1
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO asserteaza WITH 'P3 argumentul 22 (V_PRETV_ORIG) reia pretv_orig din crsfactura', ;
|
||||
lnArgTotal > 0 AND lnArgNenule = lnCuPretv, gcPretvSql
|
||||
|
||||
lnCtTotal = 0
|
||||
lnCtNenule = 0
|
||||
FOR lnArg = 1 TO GETWORDCOUNT(gcContSql, ';')
|
||||
lnCtTotal = lnCtTotal + 1
|
||||
IF !EMPTY(STRTRAN(GETWORDNUM(gcContSql, lnArg, ';'), CHR(39), ''))
|
||||
lnCtNenule = lnCtNenule + 1
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO asserteaza WITH 'P3 argumentul 16 (V_CONT) e nevid pe fiecare apel de articol', ;
|
||||
lnCtTotal > 0 AND lnCtNenule = lnCtTotal, gcContSql
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* RuleazaCuMock: do_scrie_articole() cu goExecutor mockat; strange argumentul 22 al fiecarui apel
|
||||
* pack_facturare.adauga_articol_factura in gcPretvSql, separat prin ';'.
|
||||
*==============================================================================================
|
||||
PROCEDURE RuleazaCuMock
|
||||
LPARAMETERS tcPrefix
|
||||
LOCAL loForm, loMock, loExecutorReal, llReturn
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
|
||||
IF TYPE('plRegenerareEditare') <> 'U'
|
||||
RELEASE plRegenerareEditare
|
||||
ENDIF
|
||||
|
||||
loExecutorReal = goExecutor
|
||||
loMock = CREATEOBJECT('MockGoExecutorS12Stoc')
|
||||
goExecutor = loMock
|
||||
|
||||
llReturn = loForm.do_scrie_articole()
|
||||
|
||||
goExecutor = loExecutorReal
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
gcPretvSql = loMock.cPretv
|
||||
gcContSql = loMock.cCont
|
||||
|
||||
STRTOFILE(tcPrefix + ' do_scrie_articole()=' + TRANSFORM(llReturn) + ;
|
||||
' apeluri_articol=' + TRANSFORM(loMock.nApeluriArticol) + ;
|
||||
' argumente_22=[' + gcPretvSql + ']' + ;
|
||||
' argumente_16=[' + gcContSql + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcPrefix + ' --- ultimul SQL de articol ---' + CHR(13) + CHR(10) + ;
|
||||
TRANSFORM(loMock.cSqlUltim) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
RELEASE loForm
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE probe_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
DEFINE CLASS MockGoExecutorS12Stoc AS Custom
|
||||
cPretv = ''
|
||||
cCont = ''
|
||||
cSqlUltim = ''
|
||||
nApeluri = 0
|
||||
nApeluriArticol = 0
|
||||
cEroare = ''
|
||||
|
||||
FUNCTION oExecute(tcSql)
|
||||
LOCAL lcSql, lnPoz, lcRest
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcSql) <> 'C'
|
||||
RETURN 1
|
||||
ENDIF
|
||||
lcSql = m.tcSql
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
DO WHILE lnPoz > 0
|
||||
THIS.nApeluriArticol = THIS.nApeluriArticol + 1
|
||||
lcRest = SUBSTR(lcSql, lnPoz + LEN('adauga_articol_factura('))
|
||||
THIS.cPretv = THIS.cPretv + ALLTRIM(GETWORDNUM(lcRest, 22, ',')) + ';'
|
||||
THIS.cCont = THIS.cCont + ALLTRIM(GETWORDNUM(lcRest, 16, ',')) + ';'
|
||||
THIS.cSqlUltim = m.tcSql
|
||||
lcSql = lcRest
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
ENDDO
|
||||
RETURN 1
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oExecuta(tcSql, tcCursor)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcCursor) = 'C' AND !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (xdummy I)
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oPrelucrareEroare()
|
||||
RETURN 'MockGoExecutorS12Stoc: ' + THIS.cEroare
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
282
utile/Teste/editare_factura/probe_s12_stoc_ctrlneg.prg
Normal file
282
utile/Teste/editare_factura/probe_s12_stoc_ctrlneg.prg
Normal file
@@ -0,0 +1,282 @@
|
||||
* probe_s12_stoc.prg
|
||||
* Proba de izolare pentru FACT-008 ("Articolul ... nu mai e in stoc!"): verifica daca pretv_orig
|
||||
* (pretul de vanzare din STOC ales la emiterea initiala) supravietuieste traseului de reemitere.
|
||||
* pack_facturare.descarca_gestiune cauta randul de stoc cu A.PRETV = V_PRETV_ALES, iar
|
||||
* V_PRETV_ALES vine din VANZARI_DETALII_TEMP.PRETV_ORIG, adica din argumentul 22 al apelului
|
||||
* pack_facturare.adauga_articol_factura, adica din crsfactura.pretv_orig.
|
||||
* Asertiunile sunt scrise in sensul CORECT (pretv_orig <> 0 pe liniile gestionabile), deci ele
|
||||
* PICA atat timp cat defectul exista si TREC dupa reparatie.
|
||||
* NIMIC nu se scrie in Oracle: citirile sunt reale, do_scrie_articole() ruleaza cu goExecutor
|
||||
* mockat (tipar identic cu probe_s12_gestiune.prg / test_s11_izolare_camp_1472.prg).
|
||||
*
|
||||
* Pasul 1: sursa reala (VVANZARI_ARTICOLE prin IncarcaArticoleFactura).
|
||||
* Pasul 2: crsfactura dupa IncarcaLiniiFacturaEditare - pretv_orig per linie.
|
||||
* Pasul 3: SQL-ul generat de do_scrie_articole, argumentul 22 (V_PRETV_ORIG) per apel.
|
||||
LPARAMETERS tnIdV
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate
|
||||
|
||||
IF VARTYPE(tnIdV) = 'C'
|
||||
tnIdV = VAL(tnIdV)
|
||||
ENDIF
|
||||
IF EMPTY(tnIdV)
|
||||
tnIdV = 631
|
||||
ENDIF
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s12_stoc_ctrlneg_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' doc = ' + TRANSFORM(tnIdV) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO probe_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\mock_incarca_linii_prefix.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
PUBLIC gcPretvSql, gcContSql
|
||||
gcPretvSql = ''
|
||||
gcContSql = ''
|
||||
|
||||
DO Diagnostic WITH tnIdV
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Diagnostic
|
||||
LPARAMETERS tnIdV
|
||||
LOCAL lnDiscRon, lnDiscVal, lnGestionabile, lnCuPretv, lnArg, lnArgNenule, lnArgTotal
|
||||
LOCAL lnCuCont, lnSrcCuCont, lnCtTotal, lnCtNenule
|
||||
|
||||
IncarcaArticoleFactura(tnIdV, 'crs_src_probe')
|
||||
STRTOFILE('--- PAS 1: sursa VVANZARI_ARTICOLE (crs_src_probe) ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crs_src_probe
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare_det=' + TRANSFORM(id_vanzare_det) + ;
|
||||
' id_articol=' + TRANSFORM(NVL(id_articol,-1)) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' in_stoc=' + TRANSFORM(NVL(in_stoc,-1)) + ;
|
||||
' cont=[' + NVL(cont,'') + ']' + ;
|
||||
' pret_achizitie=' + TRANSFORM(NVL(pret_achizitie,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
SELECT COUNT(*) AS n FROM crs_src_probe WHERE !EMPTY(NVL(cont,'')) INTO CURSOR crs_cnt_cont
|
||||
lnSrcCuCont = crs_cnt_cont.n
|
||||
USE IN crs_cnt_cont
|
||||
DO asserteaza WITH 'P1 sursa contine cel putin o linie', RECCOUNT('crs_src_probe') > 0, TRANSFORM(RECCOUNT('crs_src_probe'))
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(tnIdV, @lnDiscRon, @lnDiscVal)
|
||||
DO asserteaza WITH 'P2 antetul documentului ' + TRANSFORM(tnIdV) + ' s-a incarcat', VARTYPE(poDate) = 'O', VARTYPE(poDate)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, tnIdV)
|
||||
DO asserteaza WITH 'P2 liniile s-au incarcat in crsfactura', ;
|
||||
USED('crsfactura') AND RECCOUNT('crsfactura') > 0, TRANSFORM(IIF(USED('crsfactura'), RECCOUNT('crsfactura'), -1))
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- PAS 2: crsfactura dupa IncarcaLiniiFacturaEditare ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnGestionabile = 0
|
||||
lnCuPretv = 0
|
||||
lnCuCont = 0
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
STRTOFILE(' id_temp=' + TRANSFORM(id_temp) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' gestionabil=' + TRANSFORM(gestionabil) + ;
|
||||
' pret_achizitie=' + TRANSFORM(pret_achizitie) + ;
|
||||
' cont=[' + Cont + ']' + ;
|
||||
' pretv_orig=' + TRANSFORM(pretv_orig) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF !EMPTY(Cont)
|
||||
lnCuCont = lnCuCont + 1
|
||||
ENDIF
|
||||
IF gestionabil = 1
|
||||
lnGestionabile = lnGestionabile + 1
|
||||
IF pretv_orig <> 0
|
||||
lnCuPretv = lnCuPretv + 1
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'P2 documentul are cel putin o linie gestionabila', lnGestionabile > 0, TRANSFORM(lnGestionabile)
|
||||
DO asserteaza WITH 'P2 crsfactura.pretv_orig e nenul pe liniile gestionabile', ;
|
||||
lnCuPretv = lnGestionabile AND lnGestionabile > 0, TRANSFORM(lnCuPretv) + '/' + TRANSFORM(lnGestionabile)
|
||||
DO asserteaza WITH 'P2 crsfactura.Cont e completat pe toate liniile care au CONT in sursa', ;
|
||||
lnCuCont = lnSrcCuCont AND lnSrcCuCont > 0, TRANSFORM(lnCuCont) + '/' + TRANSFORM(lnSrcCuCont)
|
||||
|
||||
*!* normalizare locala: fara virgule in sirurile din SQL, ca argumentul 22 sa fie extractibil
|
||||
SELECT crsfactura
|
||||
REPLACE ALL explicatie WITH 'probe-s12', serie WITH '', lot WITH '', opt_facturare WITH 0 IN crsfactura
|
||||
GO TOP IN crsfactura
|
||||
|
||||
DO RuleazaCuMock WITH 'PAS3'
|
||||
|
||||
lnArgTotal = 0
|
||||
lnArgNenule = 0
|
||||
FOR lnArg = 1 TO GETWORDCOUNT(gcPretvSql, ';')
|
||||
lnArgTotal = lnArgTotal + 1
|
||||
IF VAL(GETWORDNUM(gcPretvSql, lnArg, ';')) <> 0
|
||||
lnArgNenule = lnArgNenule + 1
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO asserteaza WITH 'P3 argumentul 22 (V_PRETV_ORIG) e nenul pe fiecare apel de articol', ;
|
||||
lnArgTotal > 0 AND lnArgNenule = lnArgTotal, gcPretvSql
|
||||
|
||||
lnCtTotal = 0
|
||||
lnCtNenule = 0
|
||||
FOR lnArg = 1 TO GETWORDCOUNT(gcContSql, ';')
|
||||
lnCtTotal = lnCtTotal + 1
|
||||
IF !EMPTY(STRTRAN(GETWORDNUM(gcContSql, lnArg, ';'), CHR(39), ''))
|
||||
lnCtNenule = lnCtNenule + 1
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO asserteaza WITH 'P3 argumentul 16 (V_CONT) e nevid pe fiecare apel de articol', ;
|
||||
lnCtTotal > 0 AND lnCtNenule = lnCtTotal, gcContSql
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* RuleazaCuMock: do_scrie_articole() cu goExecutor mockat; strange argumentul 22 al fiecarui apel
|
||||
* pack_facturare.adauga_articol_factura in gcPretvSql, separat prin ';'.
|
||||
*==============================================================================================
|
||||
PROCEDURE RuleazaCuMock
|
||||
LPARAMETERS tcPrefix
|
||||
LOCAL loForm, loMock, loExecutorReal, llReturn
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
|
||||
IF TYPE('plRegenerareEditare') <> 'U'
|
||||
RELEASE plRegenerareEditare
|
||||
ENDIF
|
||||
|
||||
loExecutorReal = goExecutor
|
||||
loMock = CREATEOBJECT('MockGoExecutorS12Stoc')
|
||||
goExecutor = loMock
|
||||
|
||||
llReturn = loForm.do_scrie_articole()
|
||||
|
||||
goExecutor = loExecutorReal
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
gcPretvSql = loMock.cPretv
|
||||
gcContSql = loMock.cCont
|
||||
|
||||
STRTOFILE(tcPrefix + ' do_scrie_articole()=' + TRANSFORM(llReturn) + ;
|
||||
' apeluri_articol=' + TRANSFORM(loMock.nApeluriArticol) + ;
|
||||
' argumente_22=[' + gcPretvSql + ']' + ;
|
||||
' argumente_16=[' + gcContSql + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcPrefix + ' --- ultimul SQL de articol ---' + CHR(13) + CHR(10) + ;
|
||||
TRANSFORM(loMock.cSqlUltim) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
RELEASE loForm
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE probe_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
DEFINE CLASS MockGoExecutorS12Stoc AS Custom
|
||||
cPretv = ''
|
||||
cCont = ''
|
||||
cSqlUltim = ''
|
||||
nApeluri = 0
|
||||
nApeluriArticol = 0
|
||||
cEroare = ''
|
||||
|
||||
FUNCTION oExecute(tcSql)
|
||||
LOCAL lcSql, lnPoz, lcRest
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcSql) <> 'C'
|
||||
RETURN 1
|
||||
ENDIF
|
||||
lcSql = m.tcSql
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
DO WHILE lnPoz > 0
|
||||
THIS.nApeluriArticol = THIS.nApeluriArticol + 1
|
||||
lcRest = SUBSTR(lcSql, lnPoz + LEN('adauga_articol_factura('))
|
||||
THIS.cPretv = THIS.cPretv + ALLTRIM(GETWORDNUM(lcRest, 22, ',')) + ';'
|
||||
THIS.cCont = THIS.cCont + ALLTRIM(GETWORDNUM(lcRest, 16, ',')) + ';'
|
||||
THIS.cSqlUltim = m.tcSql
|
||||
lcSql = lcRest
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
ENDDO
|
||||
RETURN 1
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oExecuta(tcSql, tcCursor)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcCursor) = 'C' AND !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (xdummy I)
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oPrelucrareEroare()
|
||||
RETURN 'MockGoExecutorS12Stoc: ' + THIS.cEroare
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
316
utile/Teste/editare_factura/probe_s12_sucursala.prg
Normal file
316
utile/Teste/editare_factura/probe_s12_sucursala.prg
Normal file
@@ -0,0 +1,316 @@
|
||||
* probe_s12_sucursala.prg
|
||||
* Masoara starea de sesiune Oracle care intra in predicatul de stoc al lui
|
||||
* pack_facturare.descarca_gestiune (PACK_FACTURARE BODY:7329-7341): nid_sucursala, nan, nluna.
|
||||
* O variabila de pachet PL/SQL traieste per sesiune, deci se citeste pe ACELASI gnHandle pe care
|
||||
* ruleaza fluxul, printr-un bloc anonim care intoarce valorile in textul unui
|
||||
* raise_application_error (fara DML, fara DDL).
|
||||
*
|
||||
* tnIdV - documentul reemis (631 sau 580)
|
||||
* tnForceAn - perioada activa fortata (ca in test_s9_8_flux: 2014 1)
|
||||
* tnForceLuna
|
||||
* tnSuc - daca <> 0, forteaza gnIdSucursala inainte de do_scrie_factura (experimentul
|
||||
* decisiv: daca FACT-008 dispare, esecul era artefact de harness). ATENTIE: pe
|
||||
* valoarea corecta fluxul SCRIE in Oracle.
|
||||
LPARAMETERS tnIdV, tnForceAn, tnForceLuna, tnSuc
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate, poSnapshotEditare
|
||||
|
||||
IF VARTYPE(tnIdV) = 'C'
|
||||
tnIdV = VAL(tnIdV)
|
||||
ENDIF
|
||||
IF EMPTY(tnIdV)
|
||||
tnIdV = 631
|
||||
ENDIF
|
||||
IF VARTYPE(tnSuc) = 'C'
|
||||
tnSuc = VAL(tnSuc)
|
||||
ENDIF
|
||||
IF EMPTY(tnSuc)
|
||||
tnSuc = 0
|
||||
ENDIF
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s12_sucursala_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' doc=' + TRANSFORM(tnIdV) + ;
|
||||
' suc_fortata=' + TRANSFORM(tnSuc) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO probe_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', VAL(TRANSFORM(tnForceAn)), VAL(TRANSFORM(tnForceLuna))
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
DO Masoara WITH tnIdV, tnSuc
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Masoara
|
||||
LPARAMETERS tnIdV, tnSuc
|
||||
LOCAL loForm, lnDiscRon, lnDiscVal, lnRuta, llRez, lnIdVMaxInainte, lnNr, lnIdVNou
|
||||
|
||||
STRTOFILE('--- STAREA VFP DUPA INIT ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gnIdFirma = ' + TRANSFORM(gnIdFirma) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gnIdSucursala: tip=' + VARTYPE(gnIdSucursala) + ' isnull=' + TRANSFORM(ISNULL(gnIdSucursala)) + ;
|
||||
' valoare=' + TRANSFORM(NVL(gnIdSucursala, -777)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gcCondSucursala = <' + TRANSFORM(gcCondSucursala) + '>' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' goFirma.id_firma = ' + TRANSFORM(NVL(goFirma.Id_Firma, -777)) + ;
|
||||
' goFirma.id_mama = ' + TRANSFORM(NVL(goFirma.id_mama, -777)) + ;
|
||||
' goFirma.firma = ' + TRANSFORM(NVL(goFirma.firma, '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* ce intoarce interogarea de firma din harness, in ordinea reala a randurilor
|
||||
IF USED('c_fsuc')
|
||||
USE IN c_fsuc
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta("select id_firma, firma, id_mama from syn_v_nom_firme where schema = ?gcS", 'c_fsuc')
|
||||
STRTOFILE('--- syn_v_nom_firme pentru schema (ordinea reala) ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT c_fsuc
|
||||
SCAN
|
||||
STRTOFILE(' rand ' + TRANSFORM(RECNO()) + ': id_firma=' + TRANSFORM(id_firma) + ;
|
||||
' id_mama=' + TRANSFORM(NVL(id_mama, -777)) + ' firma=' + ALLTRIM(NVL(firma, '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN c_fsuc
|
||||
ENDIF
|
||||
|
||||
*!* id_sucursala al documentului tintit
|
||||
STRTOFILE(' VANZARI.id_sucursala doc ' + TRANSFORM(tnIdV) + ' = ' + ;
|
||||
TRANSFORM(Val1("select nvl(id_sucursala,-777) as v from vanzari where id_vanzare = " + TRANSFORM(tnIdV))) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO CitestePachet WITH 'INAINTE de flux'
|
||||
|
||||
IF tnSuc <> 0
|
||||
gnIdSucursala = tnSuc
|
||||
STRTOFILE('*** gnIdSucursala FORTAT la ' + TRANSFORM(gnIdSucursala) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
lnIdVMaxInainte = Val1("select nvl(max(id_vanzare),0) as v from vanzari")
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(tnIdV, @lnDiscRon, @lnDiscVal)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
STRTOFILE('EROARE: antetul nu s-a incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
STRTOFILE(' poDate.dataireg = ' + TRANSFORM(poDate.dataireg) + ;
|
||||
' poDate.dataact = ' + TRANSFORM(poDate.dataact) + ;
|
||||
' poDate.tip = ' + TRANSFORM(poDate.Tip) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, tnIdV)
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
STRTOFILE('EROARE: liniile nu s-au incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
update_jtva_coloane("JV", "jtva_coloane_temp")
|
||||
update_saft_taxtable()
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
loForm.ndiscfactron = lnDiscRon
|
||||
loForm.ndiscfactval = lnDiscVal
|
||||
loForm.do_calculeaza_totaluri()
|
||||
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, ;
|
||||
tnIdV, Val1("select nvl(id_fact,0) as v from vanzari where id_vanzare = " + TRANSFORM(tnIdV)), ;
|
||||
Val1("select nvl(cod,0) as v from vanzari where id_vanzare = " + TRANSFORM(tnIdV)), gnAn, gnLuna)
|
||||
IF VARTYPE(poSnapshotEditare) <> 'O'
|
||||
STRTOFILE('EROARE: instantaneul nu s-a creat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
REPLACE cantitate WITH cantitate + 1 IN crsfactura
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura')
|
||||
STRTOFILE(' ruta aleasa = ' + TRANSFORM(lnRuta) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
llRez = loForm.do_scrie_factura()
|
||||
STRTOFILE(' do_scrie_factura() = ' + TRANSFORM(llRez) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' ultimul mesaj prin mock: <' + gcMockUltimMesaj + '>' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO CitestePachet WITH 'DUPA do_scrie_factura'
|
||||
|
||||
lnNr = Val1("select count(*) as v from vanzari where sters = 0 and id_vanzare > " + TRANSFORM(lnIdVMaxInainte))
|
||||
lnIdVNou = Val1("select nvl(max(id_vanzare),0) as v from vanzari where sters = 0 and id_vanzare > " + TRANSFORM(lnIdVMaxInainte))
|
||||
STRTOFILE(' documente noi nesterse dupa apel = ' + TRANSFORM(lnNr) + ' id_vanzare nou = ' + TRANSFORM(lnIdVNou) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO ReplayPredicat WITH tnIdV
|
||||
|
||||
RELEASE loForm
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* ReplayPredicat: rejoaca ramura ELSE "din STOC" a lui descarca_gestiune (BODY:7328-7345) in
|
||||
* ACEEASI sesiune, cu valorile reale trimise pentru prima linie a documentului, de doua ori:
|
||||
* (a) cu pack_facturare.nid_sucursala asa cum e in sesiune, (b) cu 167 pus literal in locul ei.
|
||||
* Singura diferenta intre cele doua rulari e sucursala. Doar SELECT, in bloc PL/SQL (variabilele
|
||||
* de pachet nu se pot referi din SQL pur); rezultatul vine in textul unei erori.
|
||||
*==============================================================================================
|
||||
PROCEDURE ReplayPredicat
|
||||
LPARAMETERS tnIdV
|
||||
LOCAL lcArt, lcGest, lcPret, lcPretd, lcValutad, lcPretv, lcCante, lcUnde
|
||||
|
||||
DO CASE
|
||||
CASE tnIdV = 631
|
||||
lcArt = '315554536'
|
||||
lcGest = '19'
|
||||
lcPret = '100'
|
||||
lcPretd = '0'
|
||||
lcValutad = '0'
|
||||
lcPretv = '200'
|
||||
lcCante = '4'
|
||||
CASE tnIdV = 580
|
||||
lcArt = '315554536'
|
||||
lcGest = '4'
|
||||
lcPret = '100'
|
||||
lcPretd = '0'
|
||||
lcValutad = '3'
|
||||
lcPretv = '120.97'
|
||||
lcCante = '2'
|
||||
OTHERWISE
|
||||
STRTOFILE(' ReplayPredicat: document necunoscut, sarit' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDCASE
|
||||
|
||||
lcUnde = " from stoc a where " + lcCante + " <> 0 and nvl(a.id_sucursala,-99) = @SUC@" + ;
|
||||
" and a.id_articol = " + lcArt + ;
|
||||
" and a.id_gestiune = " + lcGest + ;
|
||||
" and nvl(a.cont,'XXXX') = '371'" + ;
|
||||
" and a.pret = " + lcPret + ;
|
||||
" and a.pretd = " + lcPretd + ;
|
||||
" and nvl(a.id_valuta,0) = decode(" + lcValutad + ", -99, 0, nvl(" + lcValutad + ",0))" + ;
|
||||
" and a.pretv = " + lcPretv + ;
|
||||
" and nvl(a.serie,'+_') = nvl(null,'+_')" + ;
|
||||
" and a.luna = pack_facturare.nluna and a.an = pack_facturare.nan" + ;
|
||||
" and a.cants + a.cant > a.cante" + ;
|
||||
" and nvl(a.id_part_rez,0) = 0 and nvl(a.id_lucrare_rez,0) = 0"
|
||||
|
||||
DO NumaraLoturi WITH 'REPLAY sucursala = cea din sesiune', ;
|
||||
STRTRAN(lcUnde, '@SUC@', 'nvl(pack_facturare.nid_sucursala,-99)')
|
||||
DO NumaraLoturi WITH 'REPLAY sucursala = 167 (literal)', ;
|
||||
STRTRAN(lcUnde, '@SUC@', 'nvl(167,-99)')
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE NumaraLoturi
|
||||
LPARAMETERS tcEticheta, tcUnde
|
||||
LOCAL lcSql, lnR, laErr, lcVechi
|
||||
lcVechi = SQLGETPROP(gnHandle, 'DispWarnings')
|
||||
SQLSETPROP(gnHandle, 'DispWarnings', .F.)
|
||||
|
||||
lcSql = "declare n number; begin select count(*) into n" + tcUnde + ;
|
||||
"; raise_application_error(-20998, 'REPLAY n=<'||n||'>'); end;"
|
||||
|
||||
DIMENSION laErr[1]
|
||||
lnR = SQLEXEC(gnHandle, lcSql)
|
||||
IF lnR < 0
|
||||
AERROR(laErr)
|
||||
STRTOFILE(' [' + tcEticheta + '] ' + STRTRAN(STRTRAN(TRANSFORM(laErr[1,3]), CHR(13), ' '), CHR(10), ' ') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
STRTOFILE(' [' + tcEticheta + '] NEASTEPTAT: fara eroare (r=' + TRANSFORM(lnR) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
SQLSETPROP(gnHandle, 'DispWarnings', lcVechi)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* CitestePachet: citeste variabilele publice de pachet pe ACELASI handle, printr-un bloc anonim
|
||||
* care le intoarce in textul erorii (nu scrie nimic). SQLEXEC nu declanseaza ON ERROR.
|
||||
*==============================================================================================
|
||||
PROCEDURE CitestePachet
|
||||
LPARAMETERS tcMoment
|
||||
LOCAL lcSql, lnR, laErr, lcVechi
|
||||
lcVechi = SQLGETPROP(gnHandle, 'DispWarnings')
|
||||
SQLSETPROP(gnHandle, 'DispWarnings', .F.)
|
||||
|
||||
lcSql = "begin raise_application_error(-20999, 'PKVAR nid_sucursala=<'" + ;
|
||||
"||nvl(to_char(pack_facturare.nid_sucursala),'NULL')||'> nan=<'" + ;
|
||||
"||nvl(to_char(pack_facturare.nan),'NULL')||'> nluna=<'" + ;
|
||||
"||nvl(to_char(pack_facturare.nluna),'NULL')||'>'); end;"
|
||||
|
||||
DIMENSION laErr[1]
|
||||
lnR = SQLEXEC(gnHandle, lcSql)
|
||||
IF lnR < 0
|
||||
AERROR(laErr)
|
||||
STRTOFILE(' [' + tcMoment + '] ' + STRTRAN(STRTRAN(TRANSFORM(laErr[1,3]), CHR(13), ' '), CHR(10), ' ') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
STRTOFILE(' [' + tcMoment + '] NEASTEPTAT: blocul nu a intors eroare (r=' + TRANSFORM(lnR) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
SQLSETPROP(gnHandle, 'DispWarnings', lcVechi)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
FUNCTION Val1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnV
|
||||
lnV = -1
|
||||
IF USED('c_val1')
|
||||
USE IN c_val1
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'c_val1')
|
||||
SELECT c_val1
|
||||
IF RECCOUNT('c_val1') >= 1
|
||||
GO TOP
|
||||
lnV = NVL(v, -1)
|
||||
ENDIF
|
||||
USE IN c_val1
|
||||
ENDIF
|
||||
RETURN lnV
|
||||
ENDFUNC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE probe_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
99
utile/Teste/editare_factura/probe_s13_callshape.prg
Normal file
99
utile/Teste/editare_factura/probe_s13_callshape.prg
Normal file
@@ -0,0 +1,99 @@
|
||||
* probe_s13_callshape.prg
|
||||
* Forma apelului care cade: {call proc(...argumente..., ?@obiect.proprietate)} unde procedura are
|
||||
* si un ultim parametru OUT REF CURSOR nedat in apel (legat automat de driver ca result set).
|
||||
* Reproducem forma pe pack_facturare.cursor_avize (V_LISTAID IN, V_ID_UTIL IN, V_DISCOUNT OUT
|
||||
* NUMBER, V_CURSOR OUT REF CURSOR) - aceeasi forma ca scrie_factura2, dar procedura NU scrie nimic
|
||||
* (initializeaza_facturare seteaza doar variabile de pachet; cursorul se deschide pe lista goala).
|
||||
*
|
||||
* Trei variante, ca sa izolam ce declanseaza VFP 1872:
|
||||
* 1) ?@ legat de o variabila PUBLIC simpla
|
||||
* 2) ?@ legat de o proprietate de obiect (exact ca ?@poDate.nid_vanzare)
|
||||
* 3) acelasi cursor, dar chemat fara {call} (control)
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, pnDisc, poX
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_callshape_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-CALLSHAPE' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
pnDisc = 0
|
||||
poX = CREATEOBJECT('Empty')
|
||||
ADDPROPERTY(poX, 'nid_vanzare', 0)
|
||||
|
||||
DO Incearca WITH '1. {call cursor_avize(...,?@pnDisc)} - variabila PUBLIC', [{call pack_facturare.cursor_avize('',8,?@pnDisc)}], 'c_1'
|
||||
DO Incearca WITH '2. {call cursor_avize(...,?@poX.nid_vanzare)} - proprietate de obiect', [{call pack_facturare.cursor_avize('',8,?@poX.nid_vanzare)}], 'c_2'
|
||||
DO Incearca WITH '3. {call cursor_verificare} - fara parametru OUT scalar (control)', [{call pack_facturare.cursor_verificare}], 'c_3'
|
||||
|
||||
*!* CONTROLUL care conteaza: aceeasi procedura (are OUT REF CURSOR), dar cu un argument care
|
||||
*!* face Oracle sa arunce INAINTE de OPEN-ul cursorului. Daca VFP raporteaza 1872 in loc de
|
||||
*!* eroarea Oracle, atunci "Too many columns." e MASCA unei erori Oracle, nu un defect de coloane.
|
||||
DO Incearca WITH '4. {call cursor_avize} cu lista invalida - Oracle arunca inainte de OPEN', [{call pack_facturare.cursor_avize('abc',8,?@pnDisc)}], 'c_4'
|
||||
DO Incearca WITH '5. {call cursor_avize} cu id_util inexistent', [{call pack_facturare.cursor_avize('',-987654,?@pnDisc)}], 'c_5'
|
||||
DO Incearca WITH '6. begin ... end; care arunca (fara REF CURSOR) - control', [begin raise_application_error(-20000,'proba s13'); end;], 'c_6'
|
||||
DO Incearca WITH '7. {call} pe procedura inexistenta', [{call pack_facturare.procedura_inexistenta_s13(1)}], 'c_7'
|
||||
|
||||
*!* Argumentul 11 al lui scrie_factura2 e o EXPRESIE cu virgula in ea:
|
||||
*!* to_date('20090518121908','YYYYMMDDHH24MISS'). Driverul ODBC construieste blocul anonim din
|
||||
*!* lista de argumente (vezi testul 7: foloseste DBMS_DESCRIBE), deci virgula dinauntru poate fi
|
||||
*!* citita ca separator si numarul de argumente iese gresit.
|
||||
DO Incearca WITH '8. {call cursor_avize} cu expresie ce contine virgula ca argument', [{call pack_facturare.cursor_avize(to_char(sysdate,'YYYYMMDD'),8,?@pnDisc)}], 'c_8'
|
||||
DO Incearca WITH '9. {call cursor_avize} cu NULL ca argument text', [{call pack_facturare.cursor_avize(NULL,8,?@pnDisc)}], 'c_9'
|
||||
DO Incearca WITH '10. {call cursor_avize} cu to_date(...) ca argument', [{call pack_facturare.cursor_avize(to_char(to_date('20090518','YYYYMMDD'),'DD'),8,?@pnDisc)}], 'c_10'
|
||||
|
||||
*!* Statement-ul EXACT care cade in flux, dar intr-o sesiune curata: VANZARI_DETALII_TEMP (tabela
|
||||
*!* temporara de sesiune) e goala, deci procedura arunca FACT-004 la linia 4974 INAINTE sa deschida
|
||||
*!* REF CURSOR-ul si inainte de orice scriere reala. Daca VFP raporteaza eroarea Oracle -> 1872
|
||||
*!* apare doar pe drumul de succes. Daca raporteaza tot 1872 -> e defect de descriere, nu de date.
|
||||
DO Incearca WITH '11. statement-ul REAL al doc 360, sesiune curata (temp goale)', ;
|
||||
[{call pack_facturare.scrie_factura2(300.00,57.00,0.00,'',0,NULL,NULL,NULL,NULL,0,to_date('20090518121908','YYYYMMDDHH24MISS'),NULL,'',1,0,?@poX.nid_vanzare)}], 'c_11'
|
||||
|
||||
STRTOFILE('pnDisc dupa apel = ' + TRANSFORM(pnDisc) + ' poX.nid_vanzare = ' + TRANSFORM(poX.nid_vanzare) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE Incearca
|
||||
LPARAMETERS tcEticheta, tcSql, tcCursor
|
||||
LOCAL lnRet, loEx, laE[1], lnI, lnLatime, laF[1], lnF, lcAlte, lnJ
|
||||
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
STRTOFILE('--- ' + tcEticheta + ' ---' + CHR(13) + CHR(10) + ' SQL=[' + tcSql + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
TRY
|
||||
lnRet = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
STRTOFILE(' ret=' + TRANSFORM(lnRet) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnRet >= 0
|
||||
FOR lnJ = 0 TO 3
|
||||
lcAlte = tcCursor + IIF(lnJ = 0, '', TRANSFORM(lnJ))
|
||||
IF USED(lcAlte)
|
||||
lnF = AFIELDS(laF, lcAlte)
|
||||
lnLatime = 0
|
||||
FOR lnI = 1 TO lnF
|
||||
lnLatime = lnLatime + laF[lnI, 3]
|
||||
ENDFOR
|
||||
STRTOFILE(' cursor [' + lcAlte + ']: ' + TRANSFORM(lnF) + ' coloane, latime rand = ' + ;
|
||||
TRANSFORM(lnLatime) + ' octeti, ' + TRANSFORM(RECCOUNT(lcAlte)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN (lcAlte)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ELSE
|
||||
IF AERROR(laE) > 0
|
||||
STRTOFILE(' AERROR: ' + TRANSFORM(laE[1]) + ' | ' + TRANSFORM(laE[2]) + ' | ' + TRANSFORM(laE[3]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' EXCEPTIE: ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
27
utile/Teste/editare_factura/probe_s13_errtext.prg
Normal file
27
utile/Teste/editare_factura/probe_s13_errtext.prg
Normal file
@@ -0,0 +1,27 @@
|
||||
* probe_s13_errtext.prg
|
||||
* Ce numar de eroare VFP are textul "Too many columns." - masurat, nu ghicit.
|
||||
* Comanda ERROR n genereaza eroarea VFP cu numarul n; TRY/CATCH ii citeste textul.
|
||||
* Nu atinge Oracle, nu atinge nimic pe disc in afara propriului log.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
LOCAL lcLog, lnI, loEx, lcMsg
|
||||
lcLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_errtext_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-ERRTEXT' + CHR(13) + CHR(10), lcLog)
|
||||
|
||||
FOR lnI = 1 TO 2500
|
||||
lcMsg = ''
|
||||
TRY
|
||||
ERROR lnI
|
||||
CATCH TO loEx
|
||||
lcMsg = loEx.Message
|
||||
ENDTRY
|
||||
IF 'COLUMN' $ UPPER(lcMsg) OR 'TOO MANY' $ UPPER(lcMsg)
|
||||
STRTOFILE(TRANSFORM(lnI) + ' -> [' + lcMsg + ']' + CHR(13) + CHR(10), lcLog, 1)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
33
utile/Teste/editare_factura/probe_s13_errtext2.prg
Normal file
33
utile/Teste/editare_factura/probe_s13_errtext2.prg
Normal file
@@ -0,0 +1,33 @@
|
||||
* probe_s13_errtext2.prg
|
||||
* Continuarea sweep-ului de numere de eroare VFP (prima rulare s-a oprit in jurul lui 224).
|
||||
* Scrie un heartbeat cu numarul curent, ca sa se vada exact unde moare.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
LOCAL lcLog, lcBeat, lnI, loEx, lcMsg, lcBuf
|
||||
lcLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_errtext2_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
lcBeat = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_errtext2_beat.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-ERRTEXT2' + CHR(13) + CHR(10), lcLog)
|
||||
|
||||
lcBuf = ''
|
||||
FOR lnI = 224 TO 2500
|
||||
STRTOFILE(TRANSFORM(lnI), lcBeat)
|
||||
lcMsg = ''
|
||||
TRY
|
||||
ERROR lnI
|
||||
CATCH TO loEx
|
||||
lcMsg = loEx.Message
|
||||
ENDTRY
|
||||
IF 'COLUMN' $ UPPER(lcMsg) OR 'TOO MANY' $ UPPER(lcMsg)
|
||||
lcBuf = lcBuf + TRANSFORM(lnI) + ' -> [' + lcMsg + ']' + CHR(13) + CHR(10)
|
||||
ENDIF
|
||||
IF MOD(lnI, 100) = 0
|
||||
STRTOFILE('... ajuns la ' + TRANSFORM(lnI) + CHR(13) + CHR(10) + lcBuf, lcLog, 1)
|
||||
lcBuf = ''
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
STRTOFILE(lcBuf + 'end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
1
utile/Teste/editare_factura/probe_s13_errtext2_beat.txt
Normal file
1
utile/Teste/editare_factura/probe_s13_errtext2_beat.txt
Normal file
@@ -0,0 +1 @@
|
||||
1116
|
||||
91
utile/Teste/editare_factura/probe_s13_poison.prg
Normal file
91
utile/Teste/editare_factura/probe_s13_poison.prg
Normal file
@@ -0,0 +1,91 @@
|
||||
* probe_s13_poison.prg
|
||||
* In flux, statement-ul care cade ({call scrie_factura2 ... REF CURSOR OUT}) vine imediat dupa doua
|
||||
* statemente cu 52 de parametri legati fiecare (INSERT INTO ACT_TEMP ... 52 x "?"), din mecanismul
|
||||
* de stergere/regenerare S9. Aceeasi procedura, chemata din bloc anonim cu REF CURSOR-ul intr-o
|
||||
* variabila locala PL/SQL, se executa fara probleme - deci esecul e strict la materializarea
|
||||
* result set-ului in VFP.
|
||||
*
|
||||
* Ipoteza probata aici: un statement cu multi parametri legati executat inainte strica descrierea
|
||||
* result set-ului pentru urmatorul apel cu REF CURSOR OUT. Totul read-only (select din dual +
|
||||
* proceduri care doar deschid cursoare).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, p1
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_poison_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-POISON' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
p1 = 1
|
||||
|
||||
DO Incearca WITH 'T1 baseline: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t1'
|
||||
DO Incearca WITH 'T2 statement cu 52 parametri legati', CuParametri(52), 'c_t2'
|
||||
DO Incearca WITH 'T3 dupa 52 parametri: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t3'
|
||||
DO Incearca WITH 'T4 dupa 52 parametri: select normal', [select * from vact where 1 = 2], 'c_t4'
|
||||
DO Incearca WITH 'T5 din nou: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t5'
|
||||
DO Incearca WITH 'T6 statement cu 5 parametri legati', CuParametri(5), 'c_t6'
|
||||
DO Incearca WITH 'T7 dupa 5 parametri: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t7'
|
||||
|
||||
*!* in flux, conexiunea e in tranzactie MANUALA (Transactions = 2) si a facut deja DML
|
||||
STRTOFILE('--- trec pe tranzactie manuala (Transactions = 2) ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SQLSetProp(gnHandle, 'Transactions', 2)
|
||||
DO Incearca WITH 'T8 in tranzactie manuala: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t8'
|
||||
DO Incearca WITH 'T9 DML pe tabela temporara de sesiune', [insert into act_temp (id_act, luna, an, sters) values (?p1, 4, 2009, 0)], 'c_t9'
|
||||
DO Incearca WITH 'T10 dupa DML, in tranzactie: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t10'
|
||||
DO Incearca WITH 'T11 dupa DML, in tranzactie: select normal', [select * from vact where 1 = 2], 'c_t11'
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
STRTOFILE('--- rollback facut, inapoi pe Transactions = 1 ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO Incearca WITH 'T12 dupa rollback: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t12'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
FUNCTION CuParametri
|
||||
LPARAMETERS tnN
|
||||
LOCAL lcS, lnI
|
||||
lcS = 'select 1 as v from dual where '
|
||||
FOR lnI = 1 TO tnN
|
||||
lcS = lcS + '?p1 is not null and '
|
||||
ENDFOR
|
||||
RETURN lcS + '1 = 1'
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE Incearca
|
||||
LPARAMETERS tcEticheta, tcSql, tcCursor
|
||||
LOCAL lnRet, loEx, laE[1], lnI, lnLatime, laF[1], lnF
|
||||
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
TRY
|
||||
lnRet = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
IF lnRet >= 0 AND USED(tcCursor)
|
||||
lnF = AFIELDS(laF, tcCursor)
|
||||
lnLatime = 0
|
||||
FOR lnI = 1 TO lnF
|
||||
lnLatime = lnLatime + laF[lnI, 3]
|
||||
ENDFOR
|
||||
STRTOFILE(tcEticheta + ' -> ret=' + TRANSFORM(lnRet) + ' ' + TRANSFORM(lnF) + ' coloane, latime ' + ;
|
||||
TRANSFORM(lnLatime) + ', ' + TRANSFORM(RECCOUNT(tcCursor)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN (tcCursor)
|
||||
ELSE
|
||||
STRTOFILE(tcEticheta + ' -> ret=' + TRANSFORM(lnRet) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnRet < 0 AND AERROR(laE) > 0
|
||||
STRTOFILE(' AERROR: ' + TRANSFORM(laE[1]) + ' | ' + TRANSFORM(laE[2]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(tcEticheta + ' -> EXCEPTIE ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' [' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
86
utile/Teste/editare_factura/probe_s13_refcursor.prg
Normal file
86
utile/Teste/editare_factura/probe_s13_refcursor.prg
Normal file
@@ -0,0 +1,86 @@
|
||||
* probe_s13_refcursor.prg
|
||||
* Ce anume nu poate materializa VFP la statement-ul {call pack_facturare.scrie_factura2(...)}:
|
||||
* rezultatul lui este REF CURSOR-ul OUT V_CURSOR_VERIFICARE (parametrul 17, nedat in apel, legat
|
||||
* automat de driverul ODBC ca result set). Doua ramuri posibile in pachet (liniile 4877/4881,
|
||||
* 5113/5126 din PACKAGE BODY):
|
||||
* a) pack_facturare.cursor_verificare(...) - SELECT cu ~75 coloane si 17 JOIN-uri pe ACT_TEMP
|
||||
* b) SELECT * FROM ACT_TEMP WHERE 1 = 2 - doar coloanele lui ACT_TEMP
|
||||
* Probam ambele forme direct prin SQLExec, in aceeasi sesiune, FARA nicio scriere:
|
||||
* cursor_verificare are un singur parametru, OUT REF CURSOR, deci nu modifica nimic.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_refcursor_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-REFCURSOR' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Incearca WITH 'A. select direct din ACT_TEMP', [select * from act_temp where 1 = 2], 'c_a'
|
||||
DO Incearca WITH 'B. {call} cu REF CURSOR OUT (cursor_verificare)', [{call pack_facturare.cursor_verificare}], 'c_b'
|
||||
DO Incearca WITH 'C. select cu 300 de coloane din dual', ConstruiesteSelectLarg(300), 'c_c'
|
||||
DO Incearca WITH 'D. select cu 254 de coloane din dual', ConstruiesteSelectLarg(254), 'c_d'
|
||||
DO Incearca WITH 'E. select cu 255 de coloane din dual', ConstruiesteSelectLarg(255), 'c_e'
|
||||
DO Incearca WITH 'F. select cu 256 de coloane din dual', ConstruiesteSelectLarg(256), 'c_f'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
FUNCTION ConstruiesteSelectLarg
|
||||
LPARAMETERS tnN
|
||||
LOCAL lcS, lnI
|
||||
lcS = 'select '
|
||||
FOR lnI = 1 TO tnN
|
||||
lcS = lcS + IIF(lnI > 1, ',', '') + '1 as c' + TRANSFORM(lnI)
|
||||
ENDFOR
|
||||
RETURN lcS + ' from dual'
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE Incearca
|
||||
LPARAMETERS tcEticheta, tcSql, tcCursor
|
||||
LOCAL lnRet, loEx, laE[1], lnI, lnLatime, laF[1], lnF
|
||||
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- ' + tcEticheta + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' SQL(len=' + TRANSFORM(LEN(tcSql)) + ')=[' + LEFT(tcSql, 400) + IIF(LEN(tcSql) > 400, '...', '') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
lnRet = -999
|
||||
TRY
|
||||
lnRet = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
STRTOFILE(' ret=' + TRANSFORM(lnRet) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnRet < 0
|
||||
IF AERROR(laE) > 0
|
||||
STRTOFILE(' AERROR: ' + TRANSFORM(laE[1]) + ' | ' + TRANSFORM(laE[2]) + ' | ' + TRANSFORM(laE[3]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ELSE
|
||||
IF USED(tcCursor)
|
||||
lnF = AFIELDS(laF, tcCursor)
|
||||
lnLatime = 0
|
||||
FOR lnI = 1 TO lnF
|
||||
lnLatime = lnLatime + laF[lnI, 3]
|
||||
ENDFOR
|
||||
STRTOFILE(' cursor creat: ' + TRANSFORM(lnF) + ' coloane, latime rand = ' + TRANSFORM(lnLatime) + ' octeti, ' + ;
|
||||
TRANSFORM(RECCOUNT(tcCursor)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN (tcCursor)
|
||||
ELSE
|
||||
STRTOFILE(' (niciun cursor creat)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' EXCEPTIE: ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
407
utile/Teste/editare_factura/probe_s13_toomanycolumns.prg
Normal file
407
utile/Teste/editare_factura/probe_s13_toomanycolumns.prg
Normal file
@@ -0,0 +1,407 @@
|
||||
* probe_s13_toomanycolumns.prg
|
||||
* Diagnostic pentru "Too many columns." pe documentul 360 (CONTRACT-B, rularea 6 din
|
||||
* test_s9_8_flux.prg, perioada fortata 2009/4). Repeta EXACT scenariul rularii 6, dar cu
|
||||
* goExecutor inlocuit de o SUBCLASA a lui oexecutor care logheaza fiecare statement inainte de
|
||||
* executie si prinde exceptia exact la statement-ul care cade (numar de eroare + mesaj + procedura
|
||||
* + linie), apoi intoarce -1 in loc sa o propage - ca fluxul sa cada pe ramura normala de eroare
|
||||
* (do_inchide_tranzactie(2) = ROLLBACK), nu pe CATCH-ul din do_scrie_factura.
|
||||
*
|
||||
* Nu modifica niciun fisier de productie. Nu face COMMIT. La final verifica cascada de 6 randuri
|
||||
* a documentului 360 (VANZARI, VANZARI_DETALII, DOCUMENTE, ACT x2, CTR_RATE_FACTURI).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate, poSnapshotEditare, goFormReemitere
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_toomanycolumns_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-TMC doc=360 perioada=2009/4' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
STRTOFILE('perioada activa gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO Probeaza
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Probeaza
|
||||
LOCAL loForm, lnDiscRon, lnDiscVal, lnIdV, lnRuta, llRez, loSpy, loReal
|
||||
lnIdV = 360
|
||||
|
||||
DO bat WITH 'intrat in Probeaza'
|
||||
DO StareCascada WITH 'INAINTE'
|
||||
DO bat WITH 'dupa StareCascada INAINTE'
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdV, @lnDiscRon, @lnDiscVal)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
STRTOFILE('EROARE: antetul nu s-a incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdV)
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
STRTOFILE('EROARE: liniile nu s-au incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
DO DescrieCursorFactura
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
loForm.ndiscfactron = lnDiscRon
|
||||
loForm.ndiscfactval = lnDiscVal
|
||||
loForm.do_calculeaza_totaluri()
|
||||
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, ;
|
||||
lnIdV, Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), ;
|
||||
Val1([select nvl(cod,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), gnAn, gnLuna)
|
||||
IF VARTYPE(poSnapshotEditare) <> 'O'
|
||||
STRTOFILE('EROARE: instantaneul nu s-a creat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
REPLACE cantitate WITH cantitate + 1 IN crsfactura
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura')
|
||||
STRTOFILE('ruta aleasa = ' + TRANSFORM(lnRuta) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loReal = goExecutor
|
||||
loSpy = CREATEOBJECT('SpyS13')
|
||||
loSpy.nHandle = gnHandle
|
||||
goExecutor = loSpy
|
||||
|
||||
STRTOFILE('--- INCEPE do_scrie_factura, statementele urmeaza in ordine ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
llRez = loForm.do_scrie_factura()
|
||||
STRTOFILE('--- do_scrie_factura a intors ' + TRANSFORM(llRez) + ' ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
goExecutor = loReal
|
||||
STRTOFILE('statemente capturate: ' + TRANSFORM(loSpy.nIdx) + ' esecuri: ' + TRANSFORM(loSpy.nEsecuri) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('ultimul mesaj prin mock: [' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
DO StareCascada WITH 'DUPA'
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* DescrieCursorFactura: structura si continutul crsfactura (campurile NULL + opt_facturare, care
|
||||
* decide branch-ul adauga_rata_factura vs adauga_articol_factura).
|
||||
*==============================================================================================
|
||||
PROCEDURE DescrieCursorFactura
|
||||
LOCAL laF[1], lnF, lnI, lcNule
|
||||
lnF = AFIELDS(laF, 'crsfactura')
|
||||
STRTOFILE('--- crsfactura: ' + TRANSFORM(RECCOUNT('crsfactura')) + ' randuri, ' + TRANSFORM(lnF) + ' campuri ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
lcNule = ''
|
||||
FOR lnI = 1 TO lnF
|
||||
IF ISNULL(EVALUATE('crsfactura.' + laF[lnI,1]))
|
||||
lcNule = lcNule + laF[lnI,1] + ' '
|
||||
ENDIF
|
||||
ENDFOR
|
||||
STRTOFILE(' rand ' + TRANSFORM(RECNO()) + ': opt_facturare=' + TRANSFORM(crsfactura.opt_facturare) + ;
|
||||
' id_rata=' + TRANSFORM(NVL(crsfactura.id_rata,-1)) + ' denumire=[' + TRANSFORM(NVL(crsfactura.denumire,'<NULL>')) + ']' + ;
|
||||
' NULL pe -> ' + IIF(EMPTY(lcNule), '(niciun camp)', lcNule) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
GO TOP IN crsfactura
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE StareCascada
|
||||
LPARAMETERS tcEticheta
|
||||
LOCAL lnIdFact
|
||||
lnIdFact = Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = 360])
|
||||
STRTOFILE(tcEticheta + ' GLOBAL: max_id_vanzare=' + TRANSFORM(Val1([select nvl(max(id_vanzare),0) as v from vanzari])) + ;
|
||||
' count_vanzari=' + TRANSFORM(Val1([select count(*) as v from vanzari])) + ;
|
||||
' max_numar_act_SSS=' + TRANSFORM(Val1([select nvl(max(numar_act),0) as v from vanzari where serie_act = 'SSS'])) + ;
|
||||
' max_numar_act_serie360=' + TRANSFORM(Val1([select nvl(max(numar_act),0) as v from vanzari where nvl(serie_act,'@') = (select nvl(serie_act,'@') from vanzari where id_vanzare = 360)])) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcEticheta + ' CASCADA 360: vanzari.sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from vanzari where id_vanzare = 360])) + ;
|
||||
' id_fact=' + TRANSFORM(lnIdFact) + ;
|
||||
' vanzari_detalii_vii=' + TRANSFORM(Val1([select count(*) as v from vanzari_detalii where id_vanzare = 360 and sters = 0])) + ;
|
||||
' documente.sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from documente where id_doc = ] + TRANSFORM(lnIdFact))) + ;
|
||||
' act_vii=' + TRANSFORM(Val1([select count(*) as v from act where id_fact = ] + TRANSFORM(lnIdFact) + [ and sters = 0])) + ;
|
||||
' ctr_rate_facturi_vii=' + TRANSFORM(Val1([select count(*) as v from ctr_rate_facturi where id_fact = ] + TRANSFORM(lnIdFact) + [ and sters = 0])) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
*==============================================================================================
|
||||
* MasoaraResultSets: ruleaza statement-ul care cade cu BatchMode = .F., ca sa vada result set-urile
|
||||
* unul cate unul (cate coloane are fiecare), si logheaza integral AERROR() daca tot cade.
|
||||
*==============================================================================================
|
||||
PROCEDURE MasoaraResultSets
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
LOCAL lnR, lnM, lnPas, loEx, laE[1], lnI, lnJ, lcN, laF[1], lnF, lnLat
|
||||
|
||||
STRTOFILE(' *** masurare separata, BatchMode=.F. ***' + CHR(13) + CHR(10) + ;
|
||||
' BatchMode initial = ' + TRANSFORM(SQLGetProp(gnHandle, 'BatchMode')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* diagnostice in ACEEASI stare de sesiune, inainte de statement-ul care cade
|
||||
PUBLIC pnDummyS13
|
||||
pnDummyS13 = 0
|
||||
LOCAL laM[1], lnM2
|
||||
lnM2 = AMEMBERS(laM, poDate, 0)
|
||||
STRTOFILE(' poDate: ' + TRANSFORM(lnM2) + ' membri, TYPE(poDate.nid_vanzare)=' + TYPE('poDate.nid_vanzare') + ;
|
||||
' valoare=' + TRANSFORM(poDate.nid_vanzare) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO Diag WITH 'D1 {call cursor_avize} cu ?@poDate.nid_vanzare', [{call pack_facturare.cursor_avize('',8,?@poDate.nid_vanzare)}], 'c_dg1'
|
||||
DO Diag WITH 'D2 {call cursor_avize} cu ?@pnDummyS13 (PUBLIC)', [{call pack_facturare.cursor_avize('',8,?@pnDummyS13)}], 'c_dg2'
|
||||
DO Diag WITH 'D3 select * from vact where 1 = 2', [select * from vact where 1 = 2], 'c_dg3'
|
||||
DO Diag WITH 'D4 {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_dg4'
|
||||
|
||||
STRTOFILE(' USED(crsact) inainte de apel = ' + TRANSFORM(USED('crsact')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO LogCursoare WITH 'crsact', 'inainte de apel'
|
||||
|
||||
*!* Acelasi apel, aceeasi stare de sesiune, dar prin bloc anonim cu REF CURSOR-ul intr-o
|
||||
*!* variabila LOCALA PL/SQL - deci nu se mai intoarce niciun result set catre VFP. Daca asa
|
||||
*!* trece, atunci esecul e strict la materializarea REF CURSOR-ului, nu la executia procedurii.
|
||||
LOCAL lcArg, lnP1, lcBloc
|
||||
lnP1 = AT('(', tcSql)
|
||||
lcArg = SUBSTR(tcSql, lnP1 + 1, RAT(')', tcSql) - lnP1 - 1)
|
||||
lcArg = STRTRAN(lcArg, '?@poDate.nid_vanzare', '?@pnDummyS13')
|
||||
lcBloc = 'begin declare c pack_facturare.cursor_facturare; begin pack_facturare.scrie_factura2(' + ;
|
||||
lcArg + ',c); end; end;'
|
||||
DO Diag WITH 'D5 acelasi apel, REF CURSOR in variabila locala PL/SQL', lcBloc, 'c_real'
|
||||
STRTOFILE(' pnDummyS13 dupa D5 = ' + TRANSFORM(pnDummyS13) + ' ISNULL=' + TRANSFORM(ISNULL(pnDummyS13)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
*!* ce ramura a luat scrie_factura2 la linia 5112: verifica_note_contabile(1) > 0 -> cursor_verificare
|
||||
DO Diag WITH 'D6 verifica_note_contabile(1) dupa D5', [select pack_contafin.verifica_note_contabile(1) as v from dual], 'c_ver'
|
||||
IF USED('c_ver')
|
||||
USE IN c_ver
|
||||
ENDIF
|
||||
IF SQLExec(gnHandle, [select pack_contafin.verifica_note_contabile(1) as v from dual], 'c_ver') >= 0 AND USED('c_ver')
|
||||
SELECT c_ver
|
||||
GO TOP
|
||||
STRTOFILE(' verifica_note_contabile(1) = ' + TRANSFORM(NVL(c_ver.v, -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN c_ver
|
||||
ENDIF
|
||||
DO Diag WITH 'D7 {call cursor_verificare} dupa D5', [{call pack_facturare.cursor_verificare}], 'c_dg7'
|
||||
|
||||
SQLSetProp(gnHandle, 'BatchMode', .F.)
|
||||
lnPas = 0
|
||||
TRY
|
||||
lnR = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
STRTOFILE(' SQLExec ret=' + TRANSFORM(lnR) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO LogCursoare WITH tcCursor, 'dupa SQLExec'
|
||||
DO WHILE lnPas < 10
|
||||
lnPas = lnPas + 1
|
||||
lnM = SQLMoreResults(gnHandle, tcCursor)
|
||||
STRTOFILE(' SQLMoreResults #' + TRANSFORM(lnPas) + ' ret=' + TRANSFORM(lnM) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO LogCursoare WITH tcCursor, 'dupa SQLMoreResults #' + TRANSFORM(lnPas)
|
||||
IF lnM <> 1
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDDO
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' EXCEPTIE la masurare (pas ' + TRANSFORM(lnPas) + '): ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ;
|
||||
' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnI = AERROR(laE)
|
||||
IF lnI > 0
|
||||
FOR lnJ = 1 TO ALEN(laE, 2)
|
||||
STRTOFILE(' AERROR[1,' + TRANSFORM(lnJ) + '] = ' + TRANSFORM(laE[1, lnJ]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDFOR
|
||||
ENDIF
|
||||
DO LogCursoare WITH tcCursor, 'dupa exceptie'
|
||||
ENDTRY
|
||||
SQLSetProp(gnHandle, 'BatchMode', .T.)
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE Diag
|
||||
LPARAMETERS tcEticheta, tcSql, tcCursor
|
||||
LOCAL lnR, loEx
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
TRY
|
||||
lnR = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
STRTOFILE(' ' + tcEticheta + ' -> ret=' + TRANSFORM(lnR) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO LogCursoare WITH tcCursor, tcEticheta
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' ' + tcEticheta + ' -> EXCEPTIE ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' [' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE LogCursoare
|
||||
LPARAMETERS tcCursor, tcMoment
|
||||
LOCAL lnJ, lcN, laF[1], lnF, lnI, lnLat
|
||||
FOR lnJ = 0 TO 4
|
||||
lcN = tcCursor + IIF(lnJ = 0, '', TRANSFORM(lnJ))
|
||||
IF USED(lcN)
|
||||
lnF = AFIELDS(laF, lcN)
|
||||
lnLat = 0
|
||||
FOR lnI = 1 TO lnF
|
||||
lnLat = lnLat + laF[lnI, 3]
|
||||
ENDFOR
|
||||
STRTOFILE(' [' + tcMoment + '] cursor ' + lcN + ': ' + TRANSFORM(lnF) + ' coloane, latime ' + ;
|
||||
TRANSFORM(lnLat) + ', ' + TRANSFORM(RECCOUNT(lcN)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE bat
|
||||
LPARAMETERS tcPas
|
||||
STRTOFILE('BAT ' + TTOC(DATETIME()) + ' ' + m.tcPas + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
FUNCTION Val1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnRet
|
||||
lnRet = -1
|
||||
DO bat WITH 'Val1 intra: ' + m.tcSql
|
||||
IF USED('v_val97')
|
||||
USE IN v_val97
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'v_val97')
|
||||
SELECT v_val97
|
||||
IF RECCOUNT('v_val97') > 0
|
||||
GO TOP
|
||||
lnRet = NVL(v_val97.v, -1)
|
||||
ENDIF
|
||||
USE IN v_val97
|
||||
ENDIF
|
||||
DO bat WITH 'Val1 iese: ' + TRANSFORM(lnRet)
|
||||
RETURN lnRet
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE NEPRINSA ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* SpyS13: subclasa a lui oexecutor. Logheaza fiecare statement INAINTE de executie, il executa
|
||||
* prin DODEFAULT (comportament identic cu al clasei de baza, acelasi PCOUNT), si daca SQLExec
|
||||
* arunca o exceptie o logheaza integral (ErrorNo/Message/Procedure/LineNo) si intoarce -1 in loc
|
||||
* sa o propage - fluxul cade atunci pe ramura normala de eroare, care face ROLLBACK.
|
||||
*==============================================================================================
|
||||
DEFINE CLASS SpyS13 AS oexecutor
|
||||
nIdx = 0
|
||||
nEsecuri = 0
|
||||
|
||||
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
||||
LOCAL lnI, lnRet, loEx, lcS, lcC, lnPc
|
||||
THIS.nIdx = THIS.nIdx + 1
|
||||
lnI = THIS.nIdx
|
||||
lnPc = PCOUNT()
|
||||
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '<NU E SIR>')
|
||||
lcC = IIF(VARTYPE(m.tcCursor) = 'C', m.tcCursor, '')
|
||||
|
||||
STRTOFILE('#' + TRANSFORM(lnI) + ' pcount=' + TRANSFORM(lnPc) + ' cursor=[' + lcC + ']' + ;
|
||||
' vartype=' + VARTYPE(m.tcSql) + ' len=' + TRANSFORM(LEN(lcS)) + ;
|
||||
' semne_intrebare=' + TRANSFORM(OCCURS('?', lcS)) + CHR(13) + CHR(10) + ;
|
||||
' SQL=[' + lcS + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF 'scrie_factura2' $ lcS
|
||||
DO MasoaraResultSets WITH lcS, lcC
|
||||
THIS.nEsecuri = THIS.nEsecuri + 1
|
||||
THIS.cEroare = 'SpyS13: statement masurat separat, nu se mai executa'
|
||||
RETURN -1
|
||||
ENDIF
|
||||
|
||||
lnRet = -1
|
||||
TRY
|
||||
DO CASE
|
||||
CASE lnPc <= 1
|
||||
lnRet = DODEFAULT(m.tcSql)
|
||||
CASE lnPc = 2
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor)
|
||||
CASE lnPc = 3
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress)
|
||||
CASE lnPc = 4
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress)
|
||||
CASE lnPc = 5
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle)
|
||||
CASE lnPc = 6
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError)
|
||||
CASE lnPc = 7
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError)
|
||||
OTHERWISE
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError, m.tlReconnect)
|
||||
ENDCASE
|
||||
STRTOFILE(' -> ret=' + TRANSFORM(lnRet) + IIF(lnRet < 0, ' EROARE=[' + THIS.cEroare + ']', '') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
CATCH TO loEx
|
||||
THIS.nEsecuri = THIS.nEsecuri + 1
|
||||
STRTOFILE(' -> EXCEPTIE VFP la statement #' + TRANSFORM(lnI) + ;
|
||||
': ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ;
|
||||
' Message=[' + TRANSFORM(loEx.Message) + ']' + ;
|
||||
' Details=[' + TRANSFORM(loEx.Details) + ']' + ;
|
||||
' Procedure=' + TRANSFORM(loEx.Procedure) + ;
|
||||
' LineNo=' + TRANSFORM(loEx.Lineno) + ;
|
||||
' LineContents=[' + TRANSFORM(loEx.LineContents) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnRet = -1
|
||||
THIS.cEroare = 'SpyS13: ' + TRANSFORM(loEx.Message)
|
||||
ENDTRY
|
||||
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
|
||||
FUNCTION oPrelucrareEroare
|
||||
RETURN 'SpyS13: ' + TRANSFORM(THIS.cEroare)
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
58
utile/Teste/editare_factura/probe_s13_vact.prg
Normal file
58
utile/Teste/editare_factura/probe_s13_vact.prg
Normal file
@@ -0,0 +1,58 @@
|
||||
* probe_s13_vact.prg
|
||||
* Ramura de succes a lui pack_facturare.scrie_factura2 (PACKAGE BODY, liniile 5126-5127) deschide
|
||||
* REF CURSOR-ul OUT pe [select * from VACT where 1 = 2]. Verificam daca VFP poate materializa acel
|
||||
* result set - si daca nu, cate coloane vede de fapt. Doar SELECT-uri, nicio scriere.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_vact_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-VACT' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Incearca WITH 'A. select * from vact where 1 = 2', [select * from vact where 1 = 2], 'c_a'
|
||||
DO Incearca WITH 'B. select * from vact_tot where 1 = 2', [select * from vact_tot where 1 = 2], 'c_b'
|
||||
DO Incearca WITH 'C. select * from vact (fara filtru, primul rand)', [select * from vact where rownum <= 1], 'c_c'
|
||||
DO Incearca WITH 'D. select * from fact_vfacturi where 1 = 2', [select * from fact_vfacturi where 1 = 2], 'c_d'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE Incearca
|
||||
LPARAMETERS tcEticheta, tcSql, tcCursor
|
||||
LOCAL lnRet, loEx, laE[1], lnI, lnLatime, laF[1], lnF
|
||||
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
STRTOFILE('--- ' + tcEticheta + ' ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
TRY
|
||||
lnRet = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
STRTOFILE(' ret=' + TRANSFORM(lnRet) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnRet >= 0 AND USED(tcCursor)
|
||||
lnF = AFIELDS(laF, tcCursor)
|
||||
lnLatime = 0
|
||||
FOR lnI = 1 TO lnF
|
||||
lnLatime = lnLatime + laF[lnI, 3]
|
||||
ENDFOR
|
||||
STRTOFILE(' cursor creat: ' + TRANSFORM(lnF) + ' coloane, latime rand = ' + TRANSFORM(lnLatime) + ' octeti' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
IF lnRet < 0 AND AERROR(laE) > 0
|
||||
STRTOFILE(' AERROR: ' + TRANSFORM(laE[1]) + ' | ' + TRANSFORM(laE[2]) + ' | ' + TRANSFORM(laE[3]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' EXCEPTIE: ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
301
utile/Teste/editare_factura/probe_s13b_batchmode_direct.prg
Normal file
301
utile/Teste/editare_factura/probe_s13b_batchmode_direct.prg
Normal file
@@ -0,0 +1,301 @@
|
||||
* probe_s13b_batchmode_direct.prg
|
||||
* Ultima verificare ceruta de docs/diagnostic_contract_too_many_columns.md (sectiunea Necunoscut):
|
||||
* statement-ul #15 ({call pack_facturare.scrie_factura2(...)}, ofacturare.vc2:20307-20328) executat
|
||||
* DIRECT dupa statement-ul #14, cu BatchMode ramas .T. (neschimbat) si FARA diagnosticele D1-D7
|
||||
* intercalate - spre deosebire de probe_s13_toomanycolumns.prg, care la #15 devia intai prin
|
||||
* MasoaraResultSets (D1-D7, apoi comuta pe BatchMode=.F.).
|
||||
*
|
||||
* Nu modifica niciun fisier de productie. Nu face COMMIT. La final verifica cascada documentului
|
||||
* 360 (VANZARI, VANZARI_DETALII, DOCUMENTE, ACT x2, CTR_RATE_FACTURI).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
PUBLIC poDate, poSnapshotEditare, goFormReemitere
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13b_batchmode_direct_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13B-DIRECT doc=360 perioada=2009/4' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
STRTOFILE('perioada activa gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO Probeaza
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Probeaza
|
||||
LOCAL loForm, lnDiscRon, lnDiscVal, lnIdV, lnRuta, llRez, loSpy, loReal
|
||||
lnIdV = 360
|
||||
|
||||
DO StareCascada WITH 'INAINTE'
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdV, @lnDiscRon, @lnDiscVal)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
STRTOFILE('EROARE: antetul nu s-a incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdV)
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
STRTOFILE('EROARE: liniile nu s-au incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
loForm.ndiscfactron = lnDiscRon
|
||||
loForm.ndiscfactval = lnDiscVal
|
||||
loForm.do_calculeaza_totaluri()
|
||||
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, ;
|
||||
lnIdV, Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), ;
|
||||
Val1([select nvl(cod,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), gnAn, gnLuna)
|
||||
IF VARTYPE(poSnapshotEditare) <> 'O'
|
||||
STRTOFILE('EROARE: instantaneul nu s-a creat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
REPLACE cantitate WITH cantitate + 1 IN crsfactura
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura')
|
||||
STRTOFILE('ruta aleasa = ' + TRANSFORM(lnRuta) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loReal = goExecutor
|
||||
loSpy = CREATEOBJECT('SpyS13Direct')
|
||||
loSpy.nHandle = gnHandle
|
||||
goExecutor = loSpy
|
||||
|
||||
STRTOFILE('BatchMode inainte de do_scrie_factura = ' + TRANSFORM(SQLGetProp(gnHandle, 'BatchMode')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('--- INCEPE do_scrie_factura, statementele urmeaza in ordine ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
llRez = loForm.do_scrie_factura()
|
||||
STRTOFILE('--- do_scrie_factura a intors ' + TRANSFORM(llRez) + ' ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
goExecutor = loReal
|
||||
STRTOFILE('statemente capturate: ' + TRANSFORM(loSpy.nIdx) + ' #15 interceptat=' + TRANSFORM(loSpy.lInterceptat15) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('ultimul mesaj prin mock: [' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
DO StareCascada WITH 'DUPA'
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE StareCascada
|
||||
LPARAMETERS tcEticheta
|
||||
LOCAL lnIdFact
|
||||
lnIdFact = Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = 360])
|
||||
STRTOFILE(tcEticheta + ' GLOBAL: max_id_vanzare=' + TRANSFORM(Val1([select nvl(max(id_vanzare),0) as v from vanzari])) + ;
|
||||
' count_vanzari=' + TRANSFORM(Val1([select count(*) as v from vanzari])) + ;
|
||||
' max_numar_act_SSS=' + TRANSFORM(Val1([select nvl(max(numar_act),0) as v from vanzari where serie_act = 'SSS'])) + ;
|
||||
' max_numar_act_serie360=' + TRANSFORM(Val1([select nvl(max(numar_act),0) as v from vanzari where nvl(serie_act,'@') = (select nvl(serie_act,'@') from vanzari where id_vanzare = 360)])) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcEticheta + ' CASCADA 360: vanzari.sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from vanzari where id_vanzare = 360])) + ;
|
||||
' id_fact=' + TRANSFORM(lnIdFact) + ;
|
||||
' vanzari_detalii_vii=' + TRANSFORM(Val1([select count(*) as v from vanzari_detalii where id_vanzare = 360 and sters = 0])) + ;
|
||||
' documente.sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from documente where id_doc = ] + TRANSFORM(lnIdFact))) + ;
|
||||
' act_vii=' + TRANSFORM(Val1([select count(*) as v from act where id_fact = ] + TRANSFORM(lnIdFact) + [ and sters = 0])) + ;
|
||||
' ctr_rate_facturi_vii=' + TRANSFORM(Val1([select count(*) as v from ctr_rate_facturi where id_fact = ] + TRANSFORM(lnIdFact) + [ and sters = 0])) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* LogCursoareCumulativ: la BatchMode=.T., un singur SQLExec pe un statement cu mai multe result
|
||||
* set-uri le materializeaza direct in tcCursor, tcCursor1, tcCursor2, ... (fara SQLMoreResults).
|
||||
* Numara coloanele PE FIECARE si intoarce totalul cumulat - ipoteza de testat e ca VFP insumeaza
|
||||
* coloanele tuturor cursoarelor batch-ului, nu doar pe ale celui mai lat.
|
||||
*==============================================================================================
|
||||
FUNCTION LogCursoareCumulativ
|
||||
LPARAMETERS tcCursor, tcMoment
|
||||
LOCAL lnJ, lcN, laF[1], lnF, lnTotalCampuri
|
||||
lnTotalCampuri = 0
|
||||
FOR lnJ = 0 TO 8
|
||||
lcN = tcCursor + IIF(lnJ = 0, '', TRANSFORM(lnJ))
|
||||
IF USED(lcN)
|
||||
lnF = AFIELDS(laF, lcN)
|
||||
lnTotalCampuri = lnTotalCampuri + lnF
|
||||
STRTOFILE(' [' + tcMoment + '] cursor ' + lcN + ': ' + TRANSFORM(lnF) + ' coloane, ' + ;
|
||||
TRANSFORM(RECCOUNT(lcN)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
STRTOFILE(' [' + tcMoment + '] TOTAL CUMULAT coloane (toate sub-cursoarele batch-ului) = ' + ;
|
||||
TRANSFORM(lnTotalCampuri) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN lnTotalCampuri
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE bat
|
||||
LPARAMETERS tcPas
|
||||
STRTOFILE('BAT ' + TTOC(DATETIME()) + ' ' + m.tcPas + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
FUNCTION Val1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnRet
|
||||
lnRet = -1
|
||||
IF USED('v_val97b')
|
||||
USE IN v_val97b
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'v_val97b')
|
||||
SELECT v_val97b
|
||||
IF RECCOUNT('v_val97b') > 0
|
||||
GO TOP
|
||||
lnRet = NVL(v_val97b.v, -1)
|
||||
ENDIF
|
||||
USE IN v_val97b
|
||||
ENDIF
|
||||
RETURN lnRet
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE NEPRINSA ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* SpyS13Direct: subclasa a lui oexecutor, identica cu SpyS13 (probe_s13_toomanycolumns.prg) pentru
|
||||
* toate statementele - DODEFAULT, acelasi PCOUNT. Diferenta e DOAR la statement-ul #15
|
||||
* (continut = 'scrie_factura2'): aici NU devia prin diagnostice (D1-D7) si NU schimba BatchMode -
|
||||
* face SQLExec() direct, cu BatchMode ramas asa cum e (implicit .T.), si prinde exceptia integral.
|
||||
*==============================================================================================
|
||||
DEFINE CLASS SpyS13Direct AS oexecutor
|
||||
nIdx = 0
|
||||
lInterceptat15 = .F.
|
||||
|
||||
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
||||
LOCAL lnI, lnRet, loEx, lcS, lcC, lnPc, lnR, laE[1], lnJ, lnTotalCol
|
||||
THIS.nIdx = THIS.nIdx + 1
|
||||
lnI = THIS.nIdx
|
||||
lnPc = PCOUNT()
|
||||
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '<NU E SIR>')
|
||||
lcC = IIF(VARTYPE(m.tcCursor) = 'C', m.tcCursor, '')
|
||||
|
||||
STRTOFILE('#' + TRANSFORM(lnI) + ' pcount=' + TRANSFORM(lnPc) + ' cursor=[' + lcC + ']' + ;
|
||||
' BatchMode=' + TRANSFORM(SQLGetProp(THIS.nHandle, 'BatchMode')) + CHR(13) + CHR(10) + ;
|
||||
' SQL=[' + lcS + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF 'scrie_factura2' $ lcS
|
||||
THIS.lInterceptat15 = .T.
|
||||
STRTOFILE(' *** statement #15: SQLExec DIRECT, fara D1-D7, BatchMode neschimbat ***' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED(lcC)
|
||||
USE IN (lcC)
|
||||
ENDIF
|
||||
TRY
|
||||
lnR = SQLExec(THIS.nHandle, m.tcSql, m.tcCursor)
|
||||
STRTOFILE(' SQLExec ret=' + TRANSFORM(lnR) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnR < 0
|
||||
STRTOFILE(' ret<0 FARA exceptie VFP - eroare SQL normala, nu 1872.' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF AERROR(laE) > 0
|
||||
FOR lnJ = 1 TO ALEN(laE, 2)
|
||||
STRTOFILE(' AERROR[1,' + TRANSFORM(lnJ) + '] = ' + TRANSFORM(laE[1, lnJ]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDFOR
|
||||
ENDIF
|
||||
ENDIF
|
||||
lnTotalCol = LogCursoareCumulativ(lcC, 'dupa SQLExec #15 direct')
|
||||
STRTOFILE(' NU s-a reprodus 1872 - statement #15 a reusit direct (fara eroare 1872).' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' S-A REPRODUS: EXCEPTIE la statement #15 direct: ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ;
|
||||
' Message=[' + TRANSFORM(loEx.Message) + '] Procedure=' + TRANSFORM(loEx.Procedure) + ;
|
||||
' LineNo=' + TRANSFORM(loEx.Lineno) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF AERROR(laE) > 0
|
||||
FOR lnJ = 1 TO ALEN(laE, 2)
|
||||
STRTOFILE(' AERROR[1,' + TRANSFORM(lnJ) + '] = ' + TRANSFORM(laE[1, lnJ]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDFOR
|
||||
ENDIF
|
||||
ENDTRY
|
||||
THIS.cEroare = 'SpyS13Direct: statement #15 masurat direct'
|
||||
RETURN -1
|
||||
ENDIF
|
||||
|
||||
lnRet = -1
|
||||
TRY
|
||||
DO CASE
|
||||
CASE lnPc <= 1
|
||||
lnRet = DODEFAULT(m.tcSql)
|
||||
CASE lnPc = 2
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor)
|
||||
CASE lnPc = 3
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress)
|
||||
CASE lnPc = 4
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress)
|
||||
CASE lnPc = 5
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle)
|
||||
CASE lnPc = 6
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError)
|
||||
CASE lnPc = 7
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError)
|
||||
OTHERWISE
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError, m.tlReconnect)
|
||||
ENDCASE
|
||||
STRTOFILE(' -> ret=' + TRANSFORM(lnRet) + IIF(lnRet < 0, ' EROARE=[' + THIS.cEroare + ']', '') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' -> EXCEPTIE VFP la statement #' + TRANSFORM(lnI) + ;
|
||||
': ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnRet = -1
|
||||
THIS.cEroare = 'SpyS13Direct: ' + TRANSFORM(loEx.Message)
|
||||
ENDTRY
|
||||
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
|
||||
FUNCTION oPrelucrareEroare
|
||||
RETURN 'SpyS13Direct: ' + TRANSFORM(THIS.cEroare)
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
123
utile/Teste/editare_factura/probe_s8p8_candidati.prg
Normal file
123
utile/Teste/editare_factura/probe_s8p8_candidati.prg
Normal file
@@ -0,0 +1,123 @@
|
||||
* probe_s8p8_candidati.prg
|
||||
* READ-ONLY. Cauta in MARIUSM_AUTO candidati pentru test_s8_editare_incarcare.prg (pasul 8):
|
||||
* A) document FARA delegat (id_delegat null/0), tip intre 1 si 4, luna curenta (gnAn/gnLuna)
|
||||
* B) document de tip AVIZ SUBUNITATI (23) sau AVIZ RETUR SUBUNITATI (41) - singurele doua tipuri
|
||||
* pe care Ct_clb_politici_preturi ramane prezent la editare (verificat pe cod, ofacturare.vc2
|
||||
* ~21580-21660), luna curenta
|
||||
* Foloseste fact_vfacturi (acelasi view ca IncarcaAntetFacturaEditare), an/luna derivate din data_act.
|
||||
* Nu scrie nimic - doar SELECT.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s8p8_candidati_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO ErrH WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('gnAn/gnLuna=' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL lnSucces
|
||||
|
||||
*!* --- A: document fara delegat, tip 1-4, luna curenta, nesters, ne-eproforma ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, nvl(id_delegat,0) id_delegat, sters, eproforma, data_act from fact_vfacturi] + ;
|
||||
[ where tip between 1 and 4 and sters=0 and nvl(eproforma,0)=0 and nvl(id_delegat,0)=0] + ;
|
||||
[ and extract(year from data_act)*12+extract(month from data_act) = ] + TRANSFORM(gnAn*12+gnLuna) + ;
|
||||
[ order by id_vanzare desc], 'v_faradeleg')
|
||||
STRTOFILE('A) fara delegat: lnSucces=' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_faradeleg'),RECCOUNT('v_faradeleg'),-1)) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_faradeleg')
|
||||
SELECT v_faradeleg
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' sters=' + TRANSFORM(sters) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_faradeleg
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* --- B: aviz subunitati (23) / retur subunitati (41), luna curenta, nesters, ne-eproforma ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, nvl(id_delegat,0) id_delegat, sters, eproforma, data_act from fact_vfacturi] + ;
|
||||
[ where tip in (23,41) and sters=0 and nvl(eproforma,0)=0] + ;
|
||||
[ and extract(year from data_act)*12+extract(month from data_act) = ] + TRANSFORM(gnAn*12+gnLuna) + ;
|
||||
[ order by id_vanzare desc], 'v_aviz')
|
||||
STRTOFILE('B) aviz 23/41 luna curenta: lnSucces=' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_aviz'),RECCOUNT('v_aviz'),-1)) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_aviz')
|
||||
SELECT v_aviz
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_aviz
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* --- B2: acelasi, fara restrictia de luna, ca sa vedem daca exista DELOC in schema ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, sters, eproforma, data_act from fact_vfacturi] + ;
|
||||
[ where tip in (23,41) and sters=0 and nvl(eproforma,0)=0 order by id_vanzare desc], 'v_aviz_all')
|
||||
STRTOFILE('B2) aviz 23/41 ORICE luna: lnSucces=' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_aviz_all'),RECCOUNT('v_aviz_all'),-1)) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_aviz_all')
|
||||
SELECT v_aviz_all
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_aviz_all
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* --- B3: orice tip de aviz posibil (21,22,23,24,25,26,28,30,41,42,47), orice luna - ca sa stim daca
|
||||
*!* exista MACAR ceva aviz in schema, chiar daca nu pe 23/41 ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, sters, eproforma, data_act from fact_vfacturi] + ;
|
||||
[ where tip in (21,22,23,24,25,26,28,30,41,42,47) and sters=0 and nvl(eproforma,0)=0 order by id_vanzare desc], 'v_aviz_larg')
|
||||
STRTOFILE('B3) orice tip aviz, orice luna: lnSucces=' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_aviz_larg'),RECCOUNT('v_aviz_larg'),-1)) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_aviz_larg')
|
||||
SELECT v_aviz_larg
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_aviz_larg
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* --- C: sanitate - documentele 1113/1055/1048/1130/1071/1072 folosite deja, ce data au ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, data_act from fact_vfacturi where id_vanzare in (1113,1055,1048,1130,1071,1072) order by id_vanzare], 'v_ref')
|
||||
STRTOFILE('C) documente existente in suita (referinta data_act): lnSucces=' + TRANSFORM(lnSucces) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_ref')
|
||||
SELECT v_ref
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_ref
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* --- D: fara delegat, ORICE tip valid (exclus 44,45,46,51 - garda do_editare_unificata), luna curenta ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, nvl(id_delegat,0) id_delegat, sters, eproforma, data_act from fact_vfacturi] + ;
|
||||
[ where tip not in (44,45,46,51) and sters=0 and nvl(eproforma,0)=0 and nvl(id_delegat,0)=0] + ;
|
||||
[ and extract(year from data_act)*12+extract(month from data_act) = ] + TRANSFORM(gnAn*12+gnLuna) + ;
|
||||
[ order by id_vanzare desc], 'v_faradeleg2')
|
||||
STRTOFILE('D) fara delegat, orice tip valid, luna curenta: lnSucces=' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_faradeleg2'),RECCOUNT('v_faradeleg2'),-1)) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_faradeleg2')
|
||||
SELECT v_faradeleg2
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_faradeleg2
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE ErrH
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
82
utile/Teste/editare_factura/probe_s8p8_garzi.prg
Normal file
82
utile/Teste/editare_factura/probe_s8p8_garzi.prg
Normal file
@@ -0,0 +1,82 @@
|
||||
* probe_s8p8_garzi.prg
|
||||
* READ-ONLY. Verifica, pentru candidatii gasiti de probe_s8p8_candidati.prg, garzile REALE ale
|
||||
* do_editare_unificata (ofacturare_comun.vc2:3890+), enumerate in docs\raport_s8_driver_determinist.md
|
||||
* X3: nesters, ne-eproforma, tip valid (not in 44,45,46,51), luna documentului = luna curenta
|
||||
* (gnAn/gnLuna), ReferinteDocumenteNota, EsteInEFactura, DocumentAreUrmasi, IncarcaAntetFacturaEditare.
|
||||
* Nu scrie in Oracle - doar SELECT + apeluri read-only la functiile de garda.
|
||||
* Candidati verificati: 1047 (fara delegat, tip=-12), 953 (aviz tip=23, mai 2022 - istoric).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s8p8_garzi_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO ErrH WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
STRTOFILE('gnAn/gnLuna=' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO VerificaGarzi WITH 1047, 'fara delegat, tip=-12 DEVIZE AUTO'
|
||||
DO VerificaGarzi WITH 953, 'aviz tip=23, istoric mai 2022'
|
||||
DO VerificaGarzi WITH 1110, 'aviz tip=22, august 2026 (Ct_clb_politici_preturi scos oricum)'
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE VerificaGarzi
|
||||
LPARAMETERS tnIdVanzare, tcEticheta
|
||||
LOCAL lnSucces, lnSters, llEProforma, lnTipDoc, pnAn, pnLuna, lnCod, lnIdFact
|
||||
STRTOFILE(CHR(13)+CHR(10) + '=== ' + TRANSFORM(tnIdVanzare) + ' [' + tcEticheta + '] ===' + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
|
||||
IF USED('crsGarzi')
|
||||
USE IN crsGarzi
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute('select id_vanzare,cod,data_act,sters,id_fact,eproforma,tip from fact_vfacturi where id_vanzare=' + TRANSFORM(m.tnIdVanzare), 'crsGarzi')
|
||||
goExecutor.oReset()
|
||||
IF lnSucces < 0 OR !USED('crsGarzi') OR RECCOUNT('crsGarzi') <> 1
|
||||
STRTOFILE(' NU S-A GASIT documentul (lnSucces=' + TRANSFORM(lnSucces) + ')' + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT crsGarzi
|
||||
lnCod = cod
|
||||
pnAn = YEAR(data_act)
|
||||
pnLuna = MONTH(data_act)
|
||||
lnSters = sters
|
||||
lnIdFact = id_fact
|
||||
llEProforma = (eproforma = 1)
|
||||
lnTipDoc = tip
|
||||
USE IN crsGarzi
|
||||
|
||||
STRTOFILE(' sters=' + TRANSFORM(lnSters) + ' eproforma=' + TRANSFORM(llEProforma) + ' tip=' + TRANSFORM(lnTipDoc) + ' an/luna=' + TRANSFORM(pnAn) + '/' + TRANSFORM(pnLuna) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gate2 nesters: ' + TRANSFORM(lnSters = 0) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gate5 ne-eproforma: ' + TRANSFORM(!llEProforma) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gate6 tip valid (not in 44,45,46,51): ' + TRANSFORM(!INLIST(lnTipDoc,44,45,46,51)) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gate7 luna curenta (' + TRANSFORM(pnAn*12+pnLuna) + '=' + TRANSFORM(gnAn*12+gnLuna) + '): ' + TRANSFORM((pnAn*12+pnLuna) == (gnAn*12+gnLuna)) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL llRef, llEFact, llUrm
|
||||
llRef = ReferinteDocumenteNota(pnAn, pnLuna, lnCod)
|
||||
STRTOFILE(' gate8 fara referinte (!ReferinteDocumenteNota): ' + TRANSFORM(!llRef) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
llEFact = EsteInEFactura(lnIdFact)
|
||||
STRTOFILE(' gate9 nu e in eFactura: ' + TRANSFORM(!llEFact) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
llUrm = DocumentAreUrmasi(m.tnIdVanzare)
|
||||
STRTOFILE(' gate10 fara urmasi: ' + TRANSFORM(!llUrm) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL poDateT, lnDiscR, lnDiscV
|
||||
poDateT = IncarcaAntetFacturaEditare(m.tnIdVanzare, @lnDiscR, @lnDiscV)
|
||||
STRTOFILE(' gate11 IncarcaAntetFacturaEditare reuseste: ' + TRANSFORM(VARTYPE(poDateT) == 'O') + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL llToateTrec
|
||||
llToateTrec = (lnSters=0) AND !llEProforma AND !INLIST(lnTipDoc,44,45,46,51) AND ((pnAn*12+pnLuna)==(gnAn*12+gnLuna)) ;
|
||||
AND !llRef AND !llEFact AND !llUrm AND (VARTYPE(poDateT) == 'O')
|
||||
STRTOFILE(' ==> TOATE GARZILE TREC (ar trebui sa se deschida): ' + TRANSFORM(llToateTrec) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE ErrH
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
33
utile/Teste/editare_factura/probe_s9_4_coldoc.prg
Normal file
33
utile/Teste/editare_factura/probe_s9_4_coldoc.prg
Normal file
@@ -0,0 +1,33 @@
|
||||
* probe_s9_4_coldoc.prg - READ-ONLY: coloanele tabelei DOCUMENTE.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_coldoc_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnOk, lcL, lnI
|
||||
IF goExecutor.oExecuta([select column_name, data_type from all_tab_columns where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and table_name = 'DOCUMENTE' order by column_id], 'v_c')
|
||||
SELECT v_c
|
||||
STRTOFILE('DOCUMENTE are ' + TRANSFORM(RECCOUNT('v_c')) + ' coloane:' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lcL = ''
|
||||
SCAN
|
||||
lcL = lcL + ALLTRIM(column_name) + '(' + ALLTRIM(data_type) + ') '
|
||||
ENDSCAN
|
||||
STRTOFILE(lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN v_c
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
43
utile/Teste/editare_factura/probe_s9_4_coloane.prg
Normal file
43
utile/Teste/editare_factura/probe_s9_4_coloane.prg
Normal file
@@ -0,0 +1,43 @@
|
||||
* probe_s9_4_coloane.prg - READ-ONLY: coloanele tabelelor pe care le interogheaza test_s9_4.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_coloane_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Col WITH 'RUL'
|
||||
DO Col WITH 'VANZARI_DETALII'
|
||||
DO Col WITH 'VANZARI_CORESP'
|
||||
DO Col WITH 'VANZARI'
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Col
|
||||
LPARAMETERS tcTabela
|
||||
LOCAL lcL
|
||||
IF USED('v_c')
|
||||
USE IN v_c
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta([select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and table_name = '] + tcTabela + [' order by column_id], 'v_c')
|
||||
SELECT v_c
|
||||
lcL = ''
|
||||
SCAN
|
||||
lcL = lcL + ALLTRIM(column_name) + ' '
|
||||
ENDSCAN
|
||||
STRTOFILE('=== ' + tcTabela + ' (' + TRANSFORM(RECCOUNT('v_c')) + '): ' + lcL + CHR(13) + CHR(10) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN v_c
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
66
utile/Teste/editare_factura/probe_s9_4_documente.prg
Normal file
66
utile/Teste/editare_factura/probe_s9_4_documente.prg
Normal file
@@ -0,0 +1,66 @@
|
||||
* probe_s9_4_documente.prg - READ-ONLY: de ce atarna "select count(*) from documente where id_fact = ?"
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_documente_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE conectare' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
*!* sesiuni blocante inainte de orice altceva
|
||||
DO Lista WITH 'sesiuni care blocheaza', ;
|
||||
[select s.sid, s.status, s.osuser, s.machine, s.last_call_et, s.blocking_session, s.event ] + ;
|
||||
[from v$session s where s.username = 'MARIUSM_AUTO' order by s.sid]
|
||||
|
||||
DO Lista WITH 'lacate pe obiecte', ;
|
||||
[select l.session_id, o.object_name, l.locked_mode from v$locked_object l, all_objects o ] + ;
|
||||
[where l.object_id = o.object_id]
|
||||
|
||||
DO Lista WITH 'cate randuri are DOCUMENTE (cu timeout implicit)', [select count(*) as nr from documente]
|
||||
|
||||
DO Lista WITH 'indecsi pe DOCUMENTE', ;
|
||||
[select index_name, column_name, column_position from all_ind_columns ] + ;
|
||||
[where table_name = 'DOCUMENTE' and table_owner = 'MARIUSM_AUTO' order by index_name, column_position]
|
||||
|
||||
DO Lista WITH 'DOCUMENTE - ce fel de obiect e', ;
|
||||
[select owner, object_type from all_objects where object_name = 'DOCUMENTE']
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Lista
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcL, ltT
|
||||
ltT = DATETIME()
|
||||
STRTOFILE('--> pornesc: ' + tcTitlu + ' ' + TTOC(ltT) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_dg')
|
||||
USE IN v_dg
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_dg')
|
||||
IF !lnOk
|
||||
STRTOFILE(' EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_dg
|
||||
STRTOFILE(' ' + TRANSFORM(RECCOUNT('v_dg')) + ' randuri in ' + ;
|
||||
TRANSFORM(DATETIME() - ltT) + ' sec' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SCAN WHILE RECNO() <= 15
|
||||
lcL = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_dg')
|
||||
lcL = lcL + ALLTRIM(FIELD(lnI, 'v_dg')) + '=' + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_dg')))) + ' '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_dg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
62
utile/Teste/editare_factura/probe_s9_4_fdoc.prg
Normal file
62
utile/Teste/editare_factura/probe_s9_4_fdoc.prg
Normal file
@@ -0,0 +1,62 @@
|
||||
* probe_s9_4_fdoc.prg - READ-ONLY: id_fdoc e uniform pe randurile vact_tot ale unui document?
|
||||
* Extractia din StergeDocumentFacturare ia primul rand (GO top, order by id_act), nu max().
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_fdoc_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
*!* randurile documentului vechi 1071 (cod 1141096), in ordinea pe care o vede actactan
|
||||
DO Lista WITH 'vact_tot cod 1141096 (doc vechi 1071), order by id_act - primul rand e cel citit', ;
|
||||
[select id_act, id_fdoc, id_set, dataireg from ] + gcs + [.vact_tot ] + ;
|
||||
[where an = 2026 and luna = 8 and cod = 1141096 order by id_act]
|
||||
|
||||
DO Lista WITH 'vact_tot pentru documentul nou 1138', ;
|
||||
[select a.id_act, a.id_fdoc, a.dataireg from ] + gcs + [.vact_tot a, vanzari v ] + ;
|
||||
[where v.id_vanzare = 1138 and a.cod = v.cod and a.sters = 0 order by a.id_act]
|
||||
|
||||
*!* cat de des e id_fdoc neuniform in interiorul unui document
|
||||
DO Lista WITH 'documente cu id_fdoc NEUNIFORM pe perioada activa', ;
|
||||
[select count(*) as documente_neuniforme from (] + ;
|
||||
[select cod from ] + gcs + [.vact_tot where sters = 0 and an = 2026 and luna = 8 ] + ;
|
||||
[group by cod having count(distinct id_fdoc) > 1)]
|
||||
|
||||
DO Lista WITH 'total documente distincte in vact_tot pe perioada activa', ;
|
||||
[select count(distinct cod) as total from ] + gcs + [.vact_tot where sters = 0 and an = 2026 and luna = 8]
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Lista
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcL
|
||||
IF USED('v_q')
|
||||
USE IN v_q
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_q')
|
||||
IF !lnOk
|
||||
STRTOFILE('--- ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_q
|
||||
STRTOFILE('--- ' + tcTitlu + ': ' + TRANSFORM(RECCOUNT('v_q')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SCAN WHILE RECNO() <= 20
|
||||
lcL = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_q')
|
||||
lcL = lcL + ALLTRIM(FIELD(lnI, 'v_q')) + '=' + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_q')))) + ' '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_q
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
70
utile/Teste/editare_factura/probe_s9_4_fidelitate.prg
Normal file
70
utile/Teste/editare_factura/probe_s9_4_fidelitate.prg
Normal file
@@ -0,0 +1,70 @@
|
||||
* probe_s9_4_fidelitate.prg - READ-ONLY: ID_FDOC si DATAIREG sunt ajungibile din cursorul pe care
|
||||
* piciorul de stergere il citeste deja (actactan = select * from vact_tot)? Si ce valori au?
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_fidelitate_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
*!* 1. coloanele view-ului din care se umple actactan
|
||||
DO Lista WITH 'coloane VACT_TOT care ne intereseaza', ;
|
||||
[select column_name, data_type from all_tab_columns where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and table_name = 'VACT_TOT' and column_name in ('ID_FDOC','DATAIREG','ID_SET','ID_FACT','ID_FACTD','COD','AN','LUNA') ] + ;
|
||||
[order by column_name]
|
||||
|
||||
*!* 2. exista ID_FDOC pe VANZARI? (alta sursa posibila pentru valoarea documentului vechi)
|
||||
DO Lista WITH 'cate randuri vact_tot au id_fdoc nenul, pe perioada activa', ;
|
||||
[select count(*) as total, sum(case when id_fdoc is null then 1 else 0 end) as nule, ] + ;
|
||||
[sum(case when id_fdoc is not null then 1 else 0 end) as nenule ] + ;
|
||||
[from ] + gcs + [.vact_tot where sters = 0 and an = 2026 and luna = 8]
|
||||
|
||||
*!* 3. valorile reale pentru documentele de test (exact ce ar citi actactan)
|
||||
DO Lista WITH 'vact_tot pentru codurile de test (1141095=doc 1070, 1140912=doc 1056)', ;
|
||||
[select cod, id_set, id_fdoc, id_fact, dataireg from ] + gcs + [.vact_tot ] + ;
|
||||
[where sters = 0 and an = 2026 and luna = 8 and cod in (1141095, 1140912) order by cod, id_act]
|
||||
|
||||
*!* 4. cate randuri din vact_tot au dataireg diferita de data_act a documentului
|
||||
DO Lista WITH 'dataireg vs data_act pe perioada activa (cate difera)', ;
|
||||
[select count(*) as total, ] + ;
|
||||
[sum(case when trunc(a.dataireg) = trunc(v.data_act) then 1 else 0 end) as egale, ] + ;
|
||||
[sum(case when trunc(a.dataireg) <> trunc(v.data_act) then 1 else 0 end) as diferite ] + ;
|
||||
[from ] + gcs + [.vact_tot a, vanzari v ] + ;
|
||||
[where a.sters = 0 and a.an = 2026 and a.luna = 8 and v.sters = 0 and v.cod = a.cod]
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Lista
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcL
|
||||
IF USED('v_f')
|
||||
USE IN v_f
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_f')
|
||||
IF !lnOk
|
||||
STRTOFILE('--- ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_f
|
||||
STRTOFILE('--- ' + tcTitlu + ': ' + TRANSFORM(RECCOUNT('v_f')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SCAN WHILE RECNO() <= 20
|
||||
lcL = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_f')
|
||||
lcL = lcL + ALLTRIM(FIELD(lnI, 'v_f')) + '=' + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_f')))) + ' '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_f
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
67
utile/Teste/editare_factura/probe_s9_4_hang.prg
Normal file
67
utile/Teste/editare_factura/probe_s9_4_hang.prg
Normal file
@@ -0,0 +1,67 @@
|
||||
* probe_s9_4_hang.prg - READ-ONLY: reproduce secventa INAINTE din Rularea2 pe documentul 1056.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog, gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_hang_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE conectare' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
LOCAL lnIdV, lnIdFact, lcSerie, lnNumar, lnDoc, lnOk
|
||||
lnIdV = 1056
|
||||
|
||||
DO U WITH 'antet prin oExecuta'
|
||||
IF goExecutor.oExecuta([select id_fact, serie_act, numar_act from vanzari where id_vanzare = ] + TRANSFORM(lnIdV), 'v_a')
|
||||
SELECT v_a
|
||||
GO TOP
|
||||
lnIdFact = NVL(id_fact, 0)
|
||||
lcSerie = ALLTRIM(NVL(serie_act, ''))
|
||||
lnNumar = NVL(numar_act, 0)
|
||||
USE IN v_a
|
||||
ENDIF
|
||||
DO U WITH 'id_fact=[' + TRANSFORM(lnIdFact) + '] tip=' + VARTYPE(lnIdFact) + ;
|
||||
' serie=[' + TRANSFORM(lcSerie) + '] numar=' + TRANSFORM(lnNumar)
|
||||
|
||||
DO U WITH 'SQL construit: ' + [select count(*) as nr from documente where id_fact = ] + TRANSFORM(lnIdFact)
|
||||
|
||||
DO U WITH 'varianta A: oExecuta pe documente'
|
||||
lnOk = goExecutor.oExecuta([select count(*) as nr from documente where id_fact = ] + TRANSFORM(lnIdFact), 'v_d')
|
||||
DO U WITH ' oExecuta a intors ' + TRANSFORM(lnOk) + ' eroare=[' + TRANSFORM(goExecutor.cEroare) + ']'
|
||||
IF USED('v_d')
|
||||
SELECT v_d
|
||||
GO TOP
|
||||
DO U WITH ' nr = ' + TRANSFORM(nr)
|
||||
USE IN v_d
|
||||
ENDIF
|
||||
|
||||
DO U WITH 'varianta B: oSelecteaza2Value pe documente (suspectul)'
|
||||
lnDoc = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from documente where id_fact = ] + TRANSFORM(lnIdFact), @lnDoc)
|
||||
DO U WITH ' lnDoc = ' + TRANSFORM(lnDoc)
|
||||
|
||||
DO U WITH 'ultimul mesaj prin mock: [' + gcMockUltimMesaj + ']'
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE U
|
||||
LPARAMETERS tcT
|
||||
STRTOFILE(TTOC(DATETIME()) + ' ' + m.tcT + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
59
utile/Teste/editare_factura/probe_s9_4_nota.prg
Normal file
59
utile/Teste/editare_factura/probe_s9_4_nota.prg
Normal file
@@ -0,0 +1,59 @@
|
||||
* probe_s9_4_nota.prg - READ-ONLY: s-a creat o nota contabila NOUA la regenerarea doc 1070 -> 1137?
|
||||
* ID_SET e comun pe perioada, deci identitatea notei e ID_DOC (PK-ul din DOCUMENTE).
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_nota_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Lista WITH 'DOCUMENTE pentru SSS/594 (nota veche + nota noua)', ;
|
||||
[select id_doc, id_set, sters, nract, serie_act, dataact, dataireg from documente ] + ;
|
||||
[where nract = 594 and serie_act = 'SSS' order by id_doc]
|
||||
|
||||
DO Lista WITH 'cate valori distincte de ID_SET exista pe perioada activa', ;
|
||||
[select count(distinct id_set) as seturi, count(*) as randuri from ] + gcs + [.vact_tot ] + ;
|
||||
[where sters = 0 and an = 2026 and luna = 8]
|
||||
|
||||
DO Lista WITH 'documentul nou 1137 - id_fdoc si dataireg reale scrise', ;
|
||||
[select a.cod, a.id_fdoc, a.dataireg, v.data_act from ] + gcs + [.vact_tot a, vanzari v ] + ;
|
||||
[where v.id_vanzare = 1137 and a.cod = v.cod and a.sters = 0]
|
||||
|
||||
DO Lista WITH 'documentul vechi 1070 - stare finala', ;
|
||||
[select id_vanzare, cod, sters, id_fact from vanzari where id_vanzare in (1070, 1137) order by id_vanzare]
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Lista
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcL
|
||||
IF USED('v_n')
|
||||
USE IN v_n
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_n')
|
||||
IF !lnOk
|
||||
STRTOFILE('--- ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_n
|
||||
STRTOFILE('--- ' + tcTitlu + ': ' + TRANSFORM(RECCOUNT('v_n')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SCAN WHILE RECNO() <= 20
|
||||
lcL = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_n')
|
||||
lcL = lcL + ALLTRIM(FIELD(lnI, 'v_n')) + '=' + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_n')))) + ' '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_n
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
87
utile/Teste/editare_factura/probe_s9_4_nuluri.prg
Normal file
87
utile/Teste/editare_factura/probe_s9_4_nuluri.prg
Normal file
@@ -0,0 +1,87 @@
|
||||
* probe_s9_4_nuluri.prg - READ-ONLY: ce proprietati ale lui poDate raman NULL pe calea de editare
|
||||
* si care dintre ele pica in expresia de construire a SQL-ului din do_scrie_articole.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog, poDate
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_nuluri_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
LOCAL lnR, lnV
|
||||
poDate = IncarcaAntetFacturaEditare(1070, @lnR, @lnV)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
STRTOFILE('nu s-a incarcat antetul' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
*!* exact proprietatile folosite in expresia SQL din do_scrie_articole
|
||||
DO P WITH 'dataireg'
|
||||
DO P WITH 'id_fdoc'
|
||||
DO P WITH 'dataact'
|
||||
DO P WITH 'datascad'
|
||||
DO P WITH 'serie_act'
|
||||
DO P WITH 'nract'
|
||||
DO P WITH 'id_client'
|
||||
DO P WITH 'id_lucrare'
|
||||
DO P WITH 'id_sectie'
|
||||
DO P WITH 'id_venchelt'
|
||||
DO P WITH 'id_responsabil'
|
||||
DO P WITH 'explicatia4'
|
||||
DO P WITH 'listaid'
|
||||
DO P WITH 'descriere'
|
||||
DO P WITH 'tip'
|
||||
DO P WITH 'id_set'
|
||||
DO P WITH 'zi_curs'
|
||||
DO P WITH 'id_valuta'
|
||||
DO P WITH 'in_valuta'
|
||||
DO P WITH 'tva_incasare'
|
||||
|
||||
*!* care apel concret pica: Alltrim(Str(x)) pe fiecare proprietate numerica suspecta
|
||||
DO T WITH 'id_fdoc'
|
||||
DO T WITH 'id_valuta'
|
||||
DO T WITH 'id_lucrare'
|
||||
DO T WITH 'id_sectie'
|
||||
DO T WITH 'id_set'
|
||||
DO T WITH 'tva_incasare'
|
||||
DO T WITH 'in_valuta'
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE P
|
||||
LPARAMETERS tcProp
|
||||
LOCAL lcT, lcV
|
||||
lcT = TYPE('poDate.' + tcProp)
|
||||
lcV = '?'
|
||||
IF ISNULL(EVALUATE('poDate.' + tcProp))
|
||||
lcV = '.NULL.'
|
||||
ELSE
|
||||
lcV = TRANSFORM(EVALUATE('poDate.' + tcProp))
|
||||
ENDIF
|
||||
STRTOFILE(PADR(tcProp, 18) + ' TYPE=' + lcT + ' valoare=' + lcV + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE T
|
||||
LPARAMETERS tcProp
|
||||
LOCAL lcRez
|
||||
lcRez = '<<< A PICAT >>>'
|
||||
TRY
|
||||
lcRez = '[' + Alltrim(Str(EVALUATE('poDate.' + tcProp))) + ']'
|
||||
CATCH TO loE
|
||||
lcRez = '<<< EROARE ' + TRANSFORM(loE.ErrorNo) + ': ' + loE.Message + ' >>>'
|
||||
ENDTRY
|
||||
STRTOFILE('Alltrim(Str(poDate.' + PADR(tcProp, 16) + ')) -> ' + lcRez + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
54
utile/Teste/editare_factura/probe_s9_4_parameters.prg
Normal file
54
utile/Teste/editare_factura/probe_s9_4_parameters.prg
Normal file
@@ -0,0 +1,54 @@
|
||||
* probe_s9_4_parameters.prg
|
||||
* READ-ONLY, fara Oracle: PARAMETERS() vs PCOUNT() vs VARTYPE() intr-o functie cu parametri
|
||||
* optionali, dupa ce s-a executat un apel imbricat. Decide garda din hunk C (S9-4).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_parameters_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
LOCAL lnOut, llR
|
||||
lnOut = 0
|
||||
|
||||
*!* cazul 1: apelant care TRANSMITE al 6-lea parametru prin referinta
|
||||
llR = Tinta(1, 2, 3, 4, 5, @lnOut)
|
||||
STRTOFILE('CU al 6-lea param: lnOut dupa apel = ' + TRANSFORM(lnOut) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* cazul 2: apelant care NU il transmite
|
||||
llR = Tinta(1, 2, 3, 4, 5)
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
FUNCTION Tinta
|
||||
LPARAMETERS t1, t2, t3, t4, t5, t6
|
||||
LOCAL lnDummy
|
||||
|
||||
STRTOFILE('--- apel Tinta ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' INAINTE de apel imbricat: PARAMETERS()=' + TRANSFORM(PARAMETERS()) + ;
|
||||
' PCOUNT()=' + TRANSFORM(PCOUNT()) + ' VARTYPE(m.t6)=' + VARTYPE(m.t6) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* apel imbricat cu 2 parametri - exact situatia din StergeDocumentFacturare (goExecutor, OSCRIE_IN_FISIERE)
|
||||
lnDummy = Imbricat(10, 20)
|
||||
|
||||
STRTOFILE(' DUPA apel imbricat cu 2 param: PARAMETERS()=' + TRANSFORM(PARAMETERS()) + ;
|
||||
' PCOUNT()=' + TRANSFORM(PCOUNT()) + ' VARTYPE(m.t6)=' + VARTYPE(m.t6) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF VARTYPE(m.t6) = 'N'
|
||||
t6 = 4242
|
||||
STRTOFILE(' garda VARTYPE: a scris in t6' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
STRTOFILE(' garda VARTYPE: NU a scris in t6' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
|
||||
FUNCTION Imbricat
|
||||
LPARAMETERS a, b
|
||||
RETURN a + b
|
||||
ENDFUNC
|
||||
141
utile/Teste/editare_factura/probe_s9_4_recensamant.prg
Normal file
141
utile/Teste/editare_factura/probe_s9_4_recensamant.prg
Normal file
@@ -0,0 +1,141 @@
|
||||
* probe_s9_4_recensamant.prg
|
||||
* READ-ONLY: recensamant de candidati eligibili pe paliere + disponibilitatea DATA_IREG.
|
||||
* Nu scrie nimic in Oracle.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_recensamant_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
DO Ruleaza
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE Ruleaza
|
||||
LOCAL lcExclusi, lcPer, lcSql, lnOk
|
||||
lcExclusi = [1047,1048,1055,1113,1130]
|
||||
STRTOFILE('perioada activa gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + ;
|
||||
' gcs=' + gcs + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
lcPer = [ and extract(year from v.data_act) = ] + TRANSFORM(gnAn) + ;
|
||||
[ and extract(month from v.data_act) = ] + TRANSFORM(gnLuna)
|
||||
|
||||
*!* --- palier 3 (cel mai larg): STERS=0 in perioada activa, fara niciun filtru de continut ---
|
||||
DO Listeaza WITH 'P3a toate nesterse in perioada activa', ;
|
||||
[select v.id_vanzare, v.cod, v.tip from vanzari v where v.sters = 0] + lcPer + [ order by v.id_vanzare]
|
||||
|
||||
DO Listeaza WITH 'P3b + randuri reale in vact_tot', ;
|
||||
[select v.id_vanzare, v.cod, v.tip from vanzari v where v.sters = 0] + lcPer + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vact_tot a where a.sters = 0 and a.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and a.luna = ] + TRANSFORM(gnLuna) + [ and a.cod = v.cod) order by v.id_vanzare]
|
||||
|
||||
DO Listeaza WITH 'P3c + vact_tot SI vrul_tot', ;
|
||||
[select v.id_vanzare, v.cod, v.tip from vanzari v where v.sters = 0] + lcPer + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vact_tot a where a.sters = 0 and a.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and a.luna = ] + TRANSFORM(gnLuna) + [ and a.cod = v.cod) ] + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vrul_tot r where r.sters = 0 and r.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and r.luna = ] + TRANSFORM(gnLuna) + [ and r.cod = v.cod) order by v.id_vanzare]
|
||||
|
||||
*!* --- paliere 1 si 2: peste P3c / P3b se aplica in VFP filtrul referinte + urmasi ---
|
||||
DO Filtreaza WITH 'PALIER 1 (strict S9-3: vact+vrul, fara referinte/urmasi)', ;
|
||||
[select v.id_vanzare, v.cod, v.tip from vanzari v where v.sters = 0] + lcPer + ;
|
||||
[ and v.id_vanzare not in (] + lcExclusi + [)] + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vact_tot a where a.sters = 0 and a.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and a.luna = ] + TRANSFORM(gnLuna) + [ and a.cod = v.cod) ] + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vrul_tot r where r.sters = 0 and r.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and r.luna = ] + TRANSFORM(gnLuna) + [ and r.cod = v.cod) order by v.id_vanzare]
|
||||
|
||||
DO Filtreaza WITH 'PALIER 2 (fara cerinta vrul_tot)', ;
|
||||
[select v.id_vanzare, v.cod, v.tip from vanzari v where v.sters = 0] + lcPer + ;
|
||||
[ and v.id_vanzare not in (] + lcExclusi + [)] + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vact_tot a where a.sters = 0 and a.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and a.luna = ] + TRANSFORM(gnLuna) + [ and a.cod = v.cod) order by v.id_vanzare]
|
||||
|
||||
*!* --- DATA_IREG: exista pe VANZARI / pe view-ul folosit de IncarcaAntetFacturaEditare? ---
|
||||
DO Listeaza WITH 'COLOANE %IREG% in all_tab_columns', ;
|
||||
[select owner, table_name, column_name, data_type from all_tab_columns ] + ;
|
||||
[where column_name like '%IREG%' and table_name in ('VANZARI','FACT_VFACTURI','VACT_TOT') ] + ;
|
||||
[order by owner, table_name, column_name]
|
||||
|
||||
DO Listeaza WITH 'toate coloanele FACT_VFACTURI cu DATA in nume', ;
|
||||
[select owner, table_name, column_name from all_tab_columns ] + ;
|
||||
[where table_name = 'FACT_VFACTURI' and column_name like 'DATA%' order by owner, column_name]
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE Listeaza
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcLinie
|
||||
IF USED('v_rec')
|
||||
USE IN v_rec
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_rec')
|
||||
IF !lnOk
|
||||
STRTOFILE('--- ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_rec
|
||||
STRTOFILE('--- ' + tcTitlu + ': ' + TRANSFORM(RECCOUNT('v_rec')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
GO TOP
|
||||
SCAN WHILE RECNO() <= 12
|
||||
lcLinie = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_rec')
|
||||
lcLinie = lcLinie + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_rec')))) + ' | '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcLinie + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_rec
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE Filtreaza
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnNr, lcLista, lnIdV, lnCod, lnTip
|
||||
IF USED('v_rec2')
|
||||
USE IN v_rec2
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_rec2')
|
||||
IF !lnOk
|
||||
STRTOFILE('=== ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
lnNr = 0
|
||||
lcLista = ''
|
||||
SELECT v_rec2
|
||||
SCAN
|
||||
lnIdV = id_vanzare
|
||||
lnCod = cod
|
||||
lnTip = tip
|
||||
IF !ReferinteDocumenteNota(gnAn, gnLuna, lnCod) AND !DocumentAreUrmasi(lnIdV)
|
||||
lnNr = lnNr + 1
|
||||
IF lnNr <= 8
|
||||
lcLista = lcLista + TRANSFORM(lnIdV) + '/' + TRANSFORM(lnCod) + '/tip=' + TRANSFORM(lnTip) + ' '
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
USE IN v_rec2
|
||||
STRTOFILE('=== ' + tcTitlu + ': ' + TRANSFORM(lnNr) + ' eligibili' + CHR(13) + CHR(10) + ;
|
||||
' ' + lcLista + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
51
utile/Teste/editare_factura/probe_s9_4_stare.prg
Normal file
51
utile/Teste/editare_factura/probe_s9_4_stare.prg
Normal file
@@ -0,0 +1,51 @@
|
||||
* probe_s9_4_stare.prg - READ-ONLY: starea documentului 1051 si a eventualelor documente noi.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_stare_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE conectare' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
DO Lista WITH 'doc 1051', [select id_vanzare, cod, tip, sters, id_fact, serie_act, numar_act, dataoras from vanzari where id_vanzare = 1051]
|
||||
DO Lista WITH 'orice vanzare cu id_vanzare > 1140 (documente noi)', [select id_vanzare, cod, tip, sters, id_fact, numar_act from vanzari where id_vanzare > 1140 order by id_vanzare]
|
||||
DO Lista WITH 'ultimele 8 vanzari dupa id', [select * from (select id_vanzare, cod, tip, sters, id_fact, numar_act, dataoras from vanzari order by id_vanzare desc) where rownum <= 8]
|
||||
DO Lista WITH 'rul nesters pe cod 1140907', [select count(*) as nr from rul where sters = 0 and an = 2026 and luna = 8 and cod = 1140907]
|
||||
DO Lista WITH 'vact_tot nesters pe cod 1140907', [select count(*) as nr from ] + gcs + [.vact_tot where sters = 0 and an = 2026 and luna = 8 and cod = 1140907]
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Lista
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcL
|
||||
IF USED('v_st')
|
||||
USE IN v_st
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_st')
|
||||
IF !lnOk
|
||||
STRTOFILE('--- ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_st
|
||||
STRTOFILE('--- ' + tcTitlu + ': ' + TRANSFORM(RECCOUNT('v_st')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SCAN
|
||||
lcL = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_st')
|
||||
lcL = lcL + ALLTRIM(FIELD(lnI, 'v_st')) + '=' + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_st')))) + ' '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_st
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
78
utile/Teste/editare_factura/probe_s9_5_atasamente.prg
Normal file
78
utile/Teste/editare_factura/probe_s9_5_atasamente.prg
Normal file
@@ -0,0 +1,78 @@
|
||||
* probe_s9_5_atasamente.prg - READ-ONLY: structura ATASAMENTE_VANZARI, sursa view-ului
|
||||
* VATASAMENTE_VANZARI, orice referinta din PL/SQL, si populatia din perioada activa.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_5_atasamente_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
IF EMPTY(lcProcExistent)
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg"
|
||||
ELSE
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
ENDIF
|
||||
|
||||
DO Sectiune WITH 'F. constrangeri pe ATASAMENTE_VANZARI', ;
|
||||
[select c.constraint_name || ' ' || c.constraint_type as l ] + ;
|
||||
[from all_constraints c where c.owner = 'MARIUSM_AUTO' and c.table_name = 'ATASAMENTE_VANZARI']
|
||||
|
||||
DO Sectiune WITH 'G. populatia: total randuri / distincte id_vanzare', ;
|
||||
[select 'total=' || count(*) || ' documente=' || count(distinct id_vanzare) as l from MARIUSM_AUTO.atasamente_vanzari]
|
||||
|
||||
DO Sectiune WITH 'H. atasamente pe documentele perioadei active (top 20)', ;
|
||||
[select 'id_vanzare=' || a.id_vanzare || ' nr=' || count(*) as l ] + ;
|
||||
[from MARIUSM_AUTO.atasamente_vanzari a join MARIUSM_AUTO.vanzari v on v.id_vanzare = a.id_vanzare ] + ;
|
||||
[where extract(year from v.data_act) = 2026 and extract(month from v.data_act) = 8 ] + ;
|
||||
[group by a.id_vanzare order by a.id_vanzare]
|
||||
|
||||
DO Sectiune WITH 'I. atasamente pe documentele produse de S9-4 (1137,1138,1139) si sursele lor', ;
|
||||
[select 'id_vanzare=' || id_vanzare || ' nr=' || count(*) as l from MARIUSM_AUTO.atasamente_vanzari ] + ;
|
||||
[where id_vanzare in (1070,1071,1072,1137,1138,1139,1051) group by id_vanzare order by id_vanzare]
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Sectiune
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lcOut, lnN
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + tcTitlu + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_s')
|
||||
USE IN v_s
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'v_s')
|
||||
SELECT v_s
|
||||
lnN = RECCOUNT('v_s')
|
||||
IF lnN = 0
|
||||
STRTOFILE(' (zero randuri)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
lcOut = ''
|
||||
SCAN
|
||||
lcOut = lcOut + ' ' + ALLTRIM(NVL(v_s.l, '<null>')) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
STRTOFILE(lcOut, gcErrLog, 1)
|
||||
ENDIF
|
||||
USE IN v_s
|
||||
ELSE
|
||||
STRTOFILE(' ESEC interogare: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
73
utile/Teste/editare_factura/probe_s9_5_plsql.prg
Normal file
73
utile/Teste/editare_factura/probe_s9_5_plsql.prg
Normal file
@@ -0,0 +1,73 @@
|
||||
* probe_s9_5_plsql.prg - READ-ONLY: sursa PL/SQL din jurul referintelor la ATASAMENTE_VANZARI.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_5_plsql_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
DO Sursa WITH 'PACK_CONTAFIN', 8250, 8345
|
||||
DO Sursa WITH 'PACK_FACTURARE', 12800, 12885
|
||||
|
||||
DO Randuri WITH 'populatia ATASAMENTE_VANZARI, pe coloane cheie', ;
|
||||
[select 'id_at_vanz=' || id_at_vanz || ' id_vanzare=' || nvl(to_char(id_vanzare),'NULL') || ] + ;
|
||||
[' cod=' || nvl(to_char(cod),'NULL') || ' tip=' || nvl(to_char(tip),'NULL') || ' sters=' || sters || ] + ;
|
||||
[' lung=' || nvl(to_char(dbms_lob.getlength(document)),'NULL') as l ] + ;
|
||||
[from MARIUSM_AUTO.atasamente_vanzari order by id_at_vanz]
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Sursa
|
||||
LPARAMETERS tcNume, tnDe, tnPana
|
||||
LOCAL lcOut
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + tcNume + ' ' + TRANSFORM(tnDe) + '-' + TRANSFORM(tnPana) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_s')
|
||||
USE IN v_s
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta([select line, rtrim(text) as t from all_source where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and name = '] + tcNume + [' and type = 'PACKAGE BODY' and line between ] + ;
|
||||
TRANSFORM(tnDe) + [ and ] + TRANSFORM(tnPana) + [ order by line], 'v_s')
|
||||
lcOut = ''
|
||||
SELECT v_s
|
||||
SCAN
|
||||
lcOut = lcOut + PADL(TRANSFORM(v_s.line), 6) + ': ' + CHRTRAN(ALLTRIM(NVL(v_s.t, '')), CHR(10) + CHR(13), '') + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
STRTOFILE(lcOut, gcErrLog, 1)
|
||||
USE IN v_s
|
||||
ELSE
|
||||
STRTOFILE(' ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Randuri
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lcOut
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + tcTitlu + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_r')
|
||||
USE IN v_r
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'v_r')
|
||||
lcOut = ''
|
||||
SELECT v_r
|
||||
SCAN
|
||||
lcOut = lcOut + ' ' + ALLTRIM(NVL(v_r.l, '<null>')) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
STRTOFILE(IIF(EMPTY(lcOut), ' (zero randuri)' + CHR(13) + CHR(10), lcOut), gcErrLog, 1)
|
||||
USE IN v_r
|
||||
ELSE
|
||||
STRTOFILE(' ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
58
utile/Teste/editare_factura/probe_s9_aviz.prg
Normal file
58
utile/Teste/editare_factura/probe_s9_aviz.prg
Normal file
@@ -0,0 +1,58 @@
|
||||
* probe_s9_aviz.prg
|
||||
* Repeta doar cautarea candidatului aviz din probe_s9_candidati.prg, cu diagnostic de eroare Oracle
|
||||
* (coloana gresita suspectata: id_vanzare_sursa in loc de id_vanzare_aviz pe VANZARI_CORESP).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_aviz_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
LOCAL lcSql, lnSucces
|
||||
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod from vanzari v where v.sters=0 and v.tip=4 ] + ;
|
||||
[and extract(year from v.data_act)=] + TRANSFORM(gnAn) + [ and extract(month from v.data_act)=] + TRANSFORM(gnLuna) + ;
|
||||
[ and v.eproforma=0 and v.id_vanzare in (select id_vanzare_fact from vanzari_coresp where tip=1 and sters=0) ] + ;
|
||||
[and rownum <= 5]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_aviz')
|
||||
STRTOFILE('aviz(fara luna): ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_aviz'),RECCOUNT('v_cand_aviz'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnSucces < 0
|
||||
STRTOFILE('eroare: ' + goExecutor.oPrelucrareEroare() + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
IF USED('v_cand_aviz')
|
||||
SELECT v_cand_aviz
|
||||
SCAN
|
||||
STRTOFILE(' aviz cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_aviz
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* fara restrictia de luna curenta, doar sa vedem daca exista vreun aviz cu sursa in tot arhivul
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod, v.data_act from vanzari v where v.sters=0 and v.tip=4 ] + ;
|
||||
[and v.eproforma=0 and v.id_vanzare in (select id_vanzare_fact from vanzari_coresp where tip=1 and sters=0) ] + ;
|
||||
[and rownum <= 10 order by v.data_act desc]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_aviz2')
|
||||
STRTOFILE('aviz(orice data): ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_aviz2'),RECCOUNT('v_cand_aviz2'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnSucces < 0
|
||||
STRTOFILE('eroare: ' + goExecutor.oPrelucrareEroare() + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
IF USED('v_cand_aviz2')
|
||||
SELECT v_cand_aviz2
|
||||
SCAN
|
||||
STRTOFILE(' aviz cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + ' data_act=' + TRANSFORM(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_aviz2
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
88
utile/Teste/editare_factura/probe_s9_candidati.prg
Normal file
88
utile/Teste/editare_factura/probe_s9_candidati.prg
Normal file
@@ -0,0 +1,88 @@
|
||||
* probe_s9_candidati.prg
|
||||
* Cauta, read-only, cate un document editabil de fiecare familie pentru testul S9-1/S9-2:
|
||||
* aviz (tip=4, cu avize sursa reale), comanda (tip in 3,21,25,28,42,47, cu id_comanda), contract
|
||||
* (tip in 2,6,26,52, cu id_ctr), ELSE (fara comanda/ctr/aviz sursa). Luna curenta, sters=0,
|
||||
* fara urmasi, fara eproforma, fara efactura.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_candidati_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
STRTOFILE('gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL lcSql, lnSucces
|
||||
|
||||
*!* aviz cu avize sursa reale (VANZARI_CORESP TIP=1)
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod from vanzari v where v.sters=0 and v.tip=4 ] + ;
|
||||
[and extract(year from v.data_act)=] + TRANSFORM(gnAn) + [ and extract(month from v.data_act)=] + TRANSFORM(gnLuna) + ;
|
||||
[ and v.eproforma=0 and v.id_vanzare in (select id_vanzare_fact from vanzari_coresp where tip=1 and sters=0) ] + ;
|
||||
[and not exists (select 1 from vanzari_coresp c where c.id_vanzare_sursa=v.id_vanzare and c.sters=0) ] + ;
|
||||
[and rownum <= 5]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_aviz')
|
||||
STRTOFILE('aviz: ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_aviz'),RECCOUNT('v_cand_aviz'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_cand_aviz')
|
||||
SELECT v_cand_aviz
|
||||
SCAN
|
||||
STRTOFILE(' aviz cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_aviz
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* comanda, cu id_comanda populat
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod, v.id_comanda from vanzari v where v.sters=0 and v.tip in (3,21,25,28,42,47) ] + ;
|
||||
[and extract(year from v.data_act)=] + TRANSFORM(gnAn) + [ and extract(month from v.data_act)=] + TRANSFORM(gnLuna) + ;
|
||||
[ and v.eproforma=0 and v.id_comanda is not null and rownum <= 5]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_cmd')
|
||||
STRTOFILE('comanda: ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_cmd'),RECCOUNT('v_cand_cmd'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_cand_cmd')
|
||||
SELECT v_cand_cmd
|
||||
SCAN
|
||||
STRTOFILE(' comanda cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + ' id_comanda=' + TRANSFORM(id_comanda) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_cmd
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* contract, cu id_ctr populat
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod, v.id_ctr from vanzari v where v.sters=0 and v.tip in (2,6,26,52) ] + ;
|
||||
[and extract(year from v.data_act)=] + TRANSFORM(gnAn) + [ and extract(month from v.data_act)=] + TRANSFORM(gnLuna) + ;
|
||||
[ and v.eproforma=0 and v.id_ctr is not null and rownum <= 5]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_ctr')
|
||||
STRTOFILE('contract: ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_ctr'),RECCOUNT('v_cand_ctr'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_cand_ctr')
|
||||
SELECT v_cand_ctr
|
||||
SCAN
|
||||
STRTOFILE(' contract cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + ' id_ctr=' + TRANSFORM(id_ctr) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_ctr
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* ELSE: tip fara comanda/ctr, fara aviz sursa (asteptam listaid = '')
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod from vanzari v where v.sters=0 and v.tip not in (3,21,25,28,42,47,4,2,6,26,52,44,45,46,51) ] + ;
|
||||
[and extract(year from v.data_act)=] + TRANSFORM(gnAn) + [ and extract(month from v.data_act)=] + TRANSFORM(gnLuna) + ;
|
||||
[ and v.eproforma=0 and v.id_comanda is null and v.id_ctr is null and rownum <= 5]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_else')
|
||||
STRTOFILE('else: ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_else'),RECCOUNT('v_cand_else'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_cand_else')
|
||||
SELECT v_cand_else
|
||||
SCAN
|
||||
STRTOFILE(' else cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_else
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
183
utile/Teste/editare_factura/probe_trace_editare.prg
Normal file
183
utile/Teste/editare_factura/probe_trace_editare.prg
Normal file
@@ -0,0 +1,183 @@
|
||||
* probe_trace_editare.prg - trace pas cu pas a do_editare_unificata (replica, read-only in afara de
|
||||
* obiectele in memorie) pe documentele 1055 (PASS) si 1113 (FAIL), ca sa gaseasca unde diverg.
|
||||
* Diagnostic pentru docs\triaj_s8_regresie_28fail.md. Nu scrie in Oracle.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_trace_editare_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
PUBLIC gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PROCEDURE Traseaza(tcDoc, tcMsg)
|
||||
STRTOFILE(tcDoc + ': ' + tcMsg + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
*!* driver minimal: gaseste FRM_FACTURARE_ARTICOLE2 in _SCREEN.Forms si il elibereaza, ca sa nu
|
||||
*!* blocheze la infinit modalul din proba (acelasi tipar ca driverS8p7 din test_s8_pas7_cablare.prg)
|
||||
DEFINE CLASS driverTrace AS Custom
|
||||
lBusy = .F.
|
||||
lGasit = .F.
|
||||
PROCEDURE Reseteaza
|
||||
This.lGasit = .F.
|
||||
ENDPROC
|
||||
PROCEDURE Executa
|
||||
IF This.lBusy OR This.lGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
This.lBusy = .T.
|
||||
LOCAL lnI, loFrm2
|
||||
TRY
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
IF Upper(_SCREEN.Forms(m.lnI).Class) == 'FRM_FACTURARE_ARTICOLE2'
|
||||
loFrm2 = _SCREEN.Forms(m.lnI)
|
||||
This.lGasit = .T.
|
||||
STRTOFILE('driverTrace: gasit form, WindowType=' + Transform(loFrm2.WindowType) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
loFrm2.Release()
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
CATCH TO loExcTrace
|
||||
STRTOFILE('driverTrace EROARE ' + Transform(loExcTrace.ErrorNo) + ' ' + loExcTrace.Message + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
FINALLY
|
||||
This.lBusy = .F.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PUBLIC goDriverTrace
|
||||
goDriverTrace = Createobject('driverTrace')
|
||||
_SCREEN.AddObject('tmrTrace', 'Timer')
|
||||
_SCREEN.tmrTrace.Interval = 150
|
||||
Bindevent(_SCREEN.tmrTrace, 'Timer', goDriverTrace, 'Executa')
|
||||
_SCREEN.tmrTrace.Enabled = .T.
|
||||
|
||||
PROCEDURE VerificaTrace
|
||||
LPARAMETERS tnIdVanzare
|
||||
LOCAL lcDoc, lnSucces, lcSchema, lcSelect, lcOrder, lcFiltru
|
||||
lcDoc = Transform(tnIdVanzare)
|
||||
|
||||
IF Used('crsfacturi')
|
||||
Use In crsfacturi
|
||||
ENDIF
|
||||
lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ;
|
||||
['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),delegat c(70),'+] + ;
|
||||
['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ;
|
||||
['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ;
|
||||
['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ;
|
||||
['id_delegat n(10),id_agent n(10),id_masina n(10),valoarea N(20,4),nume_gestiune C(50),id_sectie n(5),sectie c(50),id_lucrare n(20), lucrare c(200),'+] + ;
|
||||
['tip_incasare n(10),afisare_scadenta n(1),id_ordl n(10),tva_incasare n(1),listare_detaliata n(1),'+] + ;
|
||||
['id_facturare n(10),adresa_facturare c(250),email_facturare c(100),adresa_client c(250),email_client c(100),adresa_beneficiar c(250),email_beneficiar c(100),'+] + ;
|
||||
['id_beneficiar n(20),beneficiar C(100),tip_factura N(5),ctip_factura C(100), id_ctr N(10), contract C(100),eproforma N(1),tip_saft N(3) null,tip_saftname V(250) null,'+]+;
|
||||
['id_livrare N(10),adresa_livrare V(250), denumire_adresa_livrare V(100), email_livrare V(100),institutie_publica N(1) null,efactura N(1) null,cod_fiscal C(20),id_fact N(20)']
|
||||
|
||||
lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ;
|
||||
['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ;
|
||||
['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ;
|
||||
['valuta,id_valuta,valval,tvaval,totval,'+] + ;
|
||||
['id_delegat,id_agent,id_masina,valoarea,'+] + ;
|
||||
['nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare,listare_detaliata,'+] + ;
|
||||
['id_facturare,adresa_facturare,email_facturare,adresa_client,email_client,adresa_beneficiar,email_beneficiar,'+] + ;
|
||||
['id_beneficiar, beneficiar, tip_factura, ctip_factura, id_ctr, contract, eproforma,tip_saft,tip_saftname, '+]+;
|
||||
['id_livrare,adresa_livrare,denumire_adresa_livrare,email_livrare,institutie_publica,efactura,cod_fiscal,id_fact from fact_vfacturi where ']
|
||||
|
||||
lcOrder = [data_act,numar_act]
|
||||
lcFiltru = [id_vanzare = ] + lcDoc
|
||||
gencursor('poFacturi', 'crsfacturi', lcSelect, lcFiltru, lcSchema, lcOrder, .F., [], .F., [])
|
||||
DO Traseaza WITH lcDoc, 'crsfacturi Reccount=' + Transform(Reccount('crsfacturi'))
|
||||
|
||||
LOCAL lnSters, llEProforma, lnTipDoc, loForm, pnDiscountRon, pnDiscountValuta
|
||||
Private pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzare, poDate
|
||||
Store 0 To pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzare
|
||||
Select crsfacturi
|
||||
lnIdVanzare = id_vanzare
|
||||
lnCod = cod
|
||||
pnAn = Year(data_act)
|
||||
pnLuna = Month(data_act)
|
||||
lnSters = sters
|
||||
lnIdFact = id_fact
|
||||
llEProforma = (eproforma = 1)
|
||||
lnTipDoc = tip
|
||||
DO Traseaza WITH lcDoc, 'garzi: sters=' + Transform(lnSters) + ' eproforma=' + Transform(llEProforma) + ' tip=' + Transform(lnTipDoc) + ;
|
||||
' luna_ok=' + Transform((pnAn*12+pnLuna)==(gnAn*12+gnLuna)) + ' referinte=' + Transform(ReferinteDocumenteNota(pnAn,pnLuna,lnCod)) + ;
|
||||
' efactura=' + Transform(EsteInEFactura(lnIdFact)) + ' urmasi=' + Transform(DocumentAreUrmasi(lnIdVanzare))
|
||||
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdVanzare, @pnDiscountRon, @pnDiscountValuta)
|
||||
DO Traseaza WITH lcDoc, 'IncarcaAntetFacturaEditare Vartype=' + Vartype(poDate)
|
||||
IF Vartype(poDate) <> 'O'
|
||||
DO Traseaza WITH lcDoc, 'ABANDON: poDate nu e obiect'
|
||||
RETURN
|
||||
ENDIF
|
||||
DO Traseaza WITH lcDoc, 'poDate.tip=' + Transform(poDate.tip) + ' poDate.incasat=' + Transform(poDate.incasat) + ' poDate.lEditare=' + Transform(poDate.lEditare) + ' poDate.ntip_incasare=' + Transform(poDate.ntip_incasare)
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdVanzare)
|
||||
DO Traseaza WITH lcDoc, 'IncarcaLiniiFacturaEditare terminat'
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
IF Used('jtva_coloane')
|
||||
Use In jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_ex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
ELSE
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_neex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
ENDIF
|
||||
DO Traseaza WITH lcDoc, 'jtva_coloane pregatit'
|
||||
|
||||
loForm = Createobject('frm_facturare_articole2')
|
||||
DO Traseaza WITH lcDoc, 'Createobject Vartype=' + Vartype(loForm)
|
||||
IF Vartype(loForm) <> 'O'
|
||||
DO Traseaza WITH lcDoc, 'ABANDON: loForm nu e obiect'
|
||||
RETURN
|
||||
ENDIF
|
||||
DO Traseaza WITH lcDoc, 'loForm.WindowType=' + Transform(loForm.WindowType) + ' Visible=' + Transform(loForm.Visible)
|
||||
loForm.ndiscfactron = pnDiscountRon
|
||||
loForm.ndiscfactval = pnDiscountValuta
|
||||
loForm.do_calculeaza_totaluri()
|
||||
DO Traseaza WITH lcDoc, 'do_calculeaza_totaluri terminat, ntotalron=' + Transform(loForm.ntotalron)
|
||||
|
||||
DO Traseaza WITH lcDoc, 'inainte de Show(), FormCount=' + Transform(_SCREEN.FormCount)
|
||||
goDriverTrace.Reseteaza()
|
||||
loForm.Show()
|
||||
DO Traseaza WITH lcDoc, 'DUPA Show() - a revenit, lGasit=' + Transform(goDriverTrace.lGasit) + ' gcMockUltimMesaj=[' + gcMockUltimMesaj + ']'
|
||||
TRY
|
||||
loForm.Release()
|
||||
CATCH
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
|
||||
DO VerificaTrace WITH 1055
|
||||
DO VerificaTrace WITH 1113
|
||||
|
||||
_SCREEN.tmrTrace.Enabled = .F.
|
||||
TRY
|
||||
_SCREEN.RemoveObject('tmrTrace')
|
||||
CATCH
|
||||
ENDTRY
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
42
utile/Teste/editare_factura/probe_triaj_incasare.prg
Normal file
42
utile/Teste/editare_factura/probe_triaj_incasare.prg
Normal file
@@ -0,0 +1,42 @@
|
||||
* probe_triaj_incasare.prg - diagnostic read-only, triaj regresie 28 FAIL (docs\triaj_s8_regresie_28fail.md)
|
||||
* Interogheaza campurile relevante pentru bugul din actualizeaza_tipincasare / seteaza_mod_incasare
|
||||
* pe cele 4 documente vechi (1113,1055,1048,1130) + cele 2 noi (1071,1072), sa gaseasca ce le diferentiaza.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_triaj_incasare_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
LOCAL lnSucces, lcSql
|
||||
lcSql = [select id_vanzare, tip, eproforma, sters, in_valuta, incasat, tip_incasare, ] + ;
|
||||
[nr_incasare, serie_chit from fact_vfacturi where id_vanzare in (1113,1055,1048,1130,1071,1072) order by id_vanzare]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'crsProbe')
|
||||
goExecutor.oReset()
|
||||
IF lnSucces < 0
|
||||
STRTOFILE('EROARE query: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SELECT crsProbe
|
||||
SCAN
|
||||
STRTOFILE(TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' eproforma=' + TRANSFORM(eproforma) + ;
|
||||
' sters=' + TRANSFORM(sters) + ' in_valuta=' + TRANSFORM(in_valuta) + ' incasat=' + TRANSFORM(Nvl(incasat,-1)) + ;
|
||||
' tip_incasare=' + TRANSFORM(Nvl(tip_incasare,-1)) + ;
|
||||
' nr_incasare=' + TRANSFORM(Nvl(nr_incasare,-1)) + ;
|
||||
' serie_chit=[' + TRANSFORM(Nvl(serie_chit,'')) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsProbe
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
54
utile/Teste/editare_factura/s9_6_snapshot_dupa.txt
Normal file
54
utile/Teste/editare_factura/s9_6_snapshot_dupa.txt
Normal file
@@ -0,0 +1,54 @@
|
||||
===== B1: randuri DOCUMENTE scrise prin ramura NOT MATCHED, DUPA aplicare (8010204..8010208) =====
|
||||
===== comparate cu randurile scrise prin INSERT-ul vechi, INAINTE de aplicare (8010196..8010203) =====
|
||||
|
||||
ID_DOC DATAORA ID_UTIL STERS DATAORAS ID_UTILS TVA_INCASARE SERIE_ACT NRACT DATAACT ID_PART ID_CTR CONT ACON ID_VALUTA ID_SUCURSALA IP_ANI IP_LUNAI IP_SOLDI ID_SET DATAIREG TIP_SAFT
|
||||
---------- ------------------- ---------- ---------- ------------------- ---------- ------------ ---------- ---------- ---------- ---------- ---------- ---- ---- ---------- ------------ ---------- ---------- ---------- ---------- ---------- ----------
|
||||
8010196 03.09.2026 06:37:00 8 0 0 0 SSS 594 26.08.2026 25021 26.08.2026
|
||||
8010197 03.09.2026 06:40:14 8 0 0 0 SSS 44 26.08.2026 25021 26.08.2026
|
||||
8010198 03.09.2026 06:40:14 8 0 0 0 SSS 595 26.08.2026 25021 26.08.2026
|
||||
8010199 03.09.2026 06:41:53 8 0 0 0 SSS 596 26.08.2026 25021 26.08.2026
|
||||
8010200 03.09.2026 06:41:53 8 0 0 0 66 26.08.2026 25021 26.08.2026
|
||||
8010201 03.09.2026 07:18:04 8 0 0 0 SSS 600 26.08.2026 25021 26.08.2026
|
||||
8010202 03.09.2026 07:23:29 8 0 0 0 SSS 45 26.08.2026 25021 26.08.2026
|
||||
8010203 03.09.2026 07:23:29 8 0 0 0 SSS 601 26.08.2026 25021 26.08.2026
|
||||
8010204 03.09.2026 08:37:25 8 1 03.09.2026 08:41:30 8 0 SSS 602 26.08.2026 25021 26.08.2026
|
||||
8010205 03.09.2026 08:37:25 8 1 03.09.2026 08:41:11 8 0 67 26.08.2026 25021 26.08.2026
|
||||
8010206 03.09.2026 08:41:11 8 1 03.09.2026 08:41:30 8 0 67 26.08.2026 25021 26.08.2026
|
||||
8010207 03.09.2026 08:41:30 8 1 03.09.2026 08:41:46 8 0 67 26.08.2026 25021 26.08.2026
|
||||
8010208 03.09.2026 08:41:46 8 1 03.09.2026 08:41:47 8 0 67 26.08.2026 25021 26.08.2026
|
||||
8017983 03.09.2026 08:41:30 8 0 03.09.2026 08:41:47 8 0 SSS 602 26.08.2026 25021 26.08.2026
|
||||
|
||||
14 rows selected.
|
||||
|
||||
===== coloane care difera intre lotul INAINTE si lotul DUPA (asteptat: niciuna, in afara de id_doc/dataora/nract) =====
|
||||
|
||||
COLOANA VALORI_DISTINCTE
|
||||
-------- ----------------
|
||||
ID_UTIL 1
|
||||
STERS 1
|
||||
ID_UTILS 2
|
||||
ID_SET 1
|
||||
DATAIREG 1
|
||||
|
||||
5 rows selected.
|
||||
|
||||
===== totaluri DOCUMENTE dupa toate probele =====
|
||||
|
||||
TOTAL STERS1 STERS0 MAX_ID_DOC
|
||||
---------- ---------- ---------- ----------
|
||||
37564 370 37194 8017983
|
||||
|
||||
1 row selected.
|
||||
|
||||
===== igiena: id_doc duplicat (trebuie gol) =====
|
||||
|
||||
no rows selected
|
||||
|
||||
===== marcaj VERSIUNE =====
|
||||
|
||||
SCRIPT_FINAL TIP_SCRIPT DATA_SCRIP SEQ_SCRIPT
|
||||
---------------------------------------------------------------------------------------------------- -------------------------------------------------- ---------- ----------
|
||||
wip13_2026_09_03_01_COMUN_PACK_CONTAFIN.sql COMUN_PACK_CONTAFIN 03.09.2026 1
|
||||
|
||||
1 row selected.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user