sync SVN r18107
This commit is contained in:
@@ -175,6 +175,8 @@ DEFINE CLASS _cusodatabase AS _custom OF "_baza.vcx"
|
||||
lcMesaj = "Inregistrarea a fost stearsa!"
|
||||
AMESSAGE(lcMesaj,0+48,lctip)
|
||||
Endif
|
||||
Else
|
||||
llSucces = .F.
|
||||
Endif
|
||||
|
||||
Endif
|
||||
|
||||
@@ -18687,14 +18687,14 @@ DEFINE CLASS frm_facturare_articole2 AS _frmbase OF "_frm_base.vcx"
|
||||
*!* marius.mutu
|
||||
*!* daca cantitatea ramasa dupa adaugarea articolului gestionabil este < 0, atunci pun 0 ca sa pot intra pe ramura facturare fara stoc
|
||||
|
||||
Lparameters tlImplicit, tlContract, tlRetur
|
||||
Lparameters tlImplicit, tlContract, tlRetur, tlDoarAvertisment
|
||||
* llImplicit = .T. => daca exista o singura linie in stoc, atunci nu mai apare formularul de completare a datelor
|
||||
* tlContract = .T. => provine din gridul cu articole din contract
|
||||
* tlRetur = .T. => se face retur la articolul selectat (trebuie selectat din rulaj in loc de stoc)
|
||||
|
||||
Private pnProcentDiscountMem
|
||||
Local ofrmadarticol As "frm_articol_factura"
|
||||
Local lcSelectActualizare, lcSql, llActualizat, llSucces, lnListaIdOld, lnRecno, lnSucces
|
||||
Local lcMesajContVenit, lcSelectActualizare, lcSql, llActualizat, llSucces, lnListaIdOld, lnRecno, lnSucces
|
||||
Local lnTotalCantitate, loCauta
|
||||
*:Global gnButon, poArtLista
|
||||
pnProcentDiscountMem = 0
|
||||
@@ -18734,6 +18734,17 @@ DEFINE CLASS frm_facturare_articole2 AS _frmbase OF "_frm_base.vcx"
|
||||
gnButon = 2
|
||||
|
||||
If Thisform.do_verifica_articol(poArticol, tlContract, lnCantitate)
|
||||
lcMesajContVenit = verifica_cont_venit_linie(poArticol.id_articol, poArticol.Id_Pol)
|
||||
If !Empty(lcMesajContVenit)
|
||||
If Type('pcAcumulatorContVenit') = 'C'
|
||||
pcAcumulatorContVenit = pcAcumulatorContVenit + Chr(13) + lcMesajContVenit
|
||||
Else
|
||||
AMESSAGEBOX(lcMesajContVenit, 0+48, "Atentie")
|
||||
Endif
|
||||
If !tlDoarAvertisment
|
||||
Return
|
||||
Endif
|
||||
Endif
|
||||
Do Case
|
||||
Case (poArticol.gestionabil = 0 Or gnScadereStoc = 0 Or poDate.tip = 45) && 45 = ROARESTAURANT
|
||||
* initializez frm_articol_factura, sa se initializeze toate calculele si daca nu arat formularul (adaugare toate articolele)
|
||||
@@ -18953,6 +18964,16 @@ DEFINE CLASS frm_facturare_articole2 AS _frmbase OF "_frm_base.vcx"
|
||||
Endif
|
||||
Endif
|
||||
|
||||
Local lcMesajContVenit, lnIdPolLinie
|
||||
lnIdPolLinie = Iif(Type('toArticol.Id_Pol')='N', toArticol.Id_Pol, Nvl(gnId_pol_pret_stoc,0))
|
||||
If Type('toArticol.Id_Pol') <> 'N'
|
||||
AddProperty(toArticol, 'Id_Pol', lnIdPolLinie)
|
||||
Endif
|
||||
lcMesajContVenit = verifica_cont_venit_linie(toArticol.id_articol, lnIdPolLinie)
|
||||
If !Empty(lcMesajContVenit)
|
||||
AMESSAGEBOX(lcMesajContVenit, 0+48, "Atentie")
|
||||
Return .F.
|
||||
Endif
|
||||
If Inlist(poDate.tip, 3, 4, 21, 25, 28, 42, 47) And !Thisform.do_verifica_articol(toArticol, .F., tnCantitate)
|
||||
save_grid_tag(Thisform.grd_factura)
|
||||
Select crsfactura
|
||||
@@ -19097,6 +19118,8 @@ DEFINE CLASS frm_facturare_articole2 AS _frmbase OF "_frm_base.vcx"
|
||||
PROCEDURE do_adauga_tot
|
||||
If Used('crsarticole') And Reccount('crsarticole')>0
|
||||
Local lnNrInregistrare,lnRaspuns,lcArticol,llGestionabil
|
||||
Private pcAcumulatorContVenit
|
||||
pcAcumulatorContVenit = []
|
||||
Select crsarticole
|
||||
Scan
|
||||
lnNrInregistrare = Recno()
|
||||
@@ -19105,7 +19128,7 @@ DEFINE CLASS frm_facturare_articole2 AS _frmbase OF "_frm_base.vcx"
|
||||
llGestionabil = (Type('crsArticole.gestionabil') = 'N' And Nvl(crsarticole.gestionabil, 0) = 1)
|
||||
Do While lnRaspuns = 7
|
||||
If (cantitate > 0 And m.llGestionabil) Or (!m.llGestionabil) && adaug si articolele cu cantitate negativa (ex: articolul de discount)
|
||||
Thisform.do_adauga_articol(.T.)
|
||||
Thisform.do_adauga_articol(.T., .F., .F., .T.)
|
||||
Endif
|
||||
Select crsarticole
|
||||
Go lnNrInregistrare
|
||||
@@ -19118,6 +19141,9 @@ DEFINE CLASS frm_facturare_articole2 AS _frmbase OF "_frm_base.vcx"
|
||||
Select crsarticole
|
||||
Go lnNrInregistrare
|
||||
Endscan
|
||||
If !Empty(pcAcumulatorContVenit)
|
||||
AMESSAGEBOX("Articole fara cont de venit configurat:" + pcAcumulatorContVenit, 0+48, "Atentie")
|
||||
Endif
|
||||
Local lcJtvaLipsa, lnRecFactura, lnSelFactura
|
||||
lcJtvaLipsa = []
|
||||
lnSelFactura = Select()
|
||||
@@ -22607,6 +22633,8 @@ DEFINE CLASS frm_optiuni_facturare AS _frmbase OF "_frm_base.vcx"
|
||||
*< OBJECTDATA: ObjPath="pgfrm_optiuni.Page1.Op_coeficient_k" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="pgfrm_optiuni.Page1.op_aviz_bon_fiscal" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="pgfrm_optiuni.Page1.op_factura_email" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="pgfrm_optiuni.Page1.Clb_nota_stoc_debit" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="pgfrm_optiuni.Page1.Clb_nota_stoc_credit" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="pgfrm_optiuni.Page2.Ed_txt_subsol_fact" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="pgfrm_optiuni.Page2.Ct_clb_fdoc_factura" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="pgfrm_optiuni.Page2.op_printdenumire" UniqueID="" Timestamp="" />
|
||||
@@ -22664,6 +22692,8 @@ DEFINE CLASS frm_optiuni_facturare AS _frmbase OF "_frm_base.vcx"
|
||||
*p: cpolpretk
|
||||
*p: cpolpretstoc
|
||||
*p: cpolprettr
|
||||
*p: csccnotastoc
|
||||
*p: cscdnotastoc
|
||||
*p: natasamentefact
|
||||
*p: nidfdocaviz
|
||||
*p: nidfdocavizretur
|
||||
@@ -22697,6 +22727,8 @@ DEFINE CLASS frm_optiuni_facturare AS _frmbase OF "_frm_base.vcx"
|
||||
cpolpretk =
|
||||
cpolpretstoc =
|
||||
cpolprettr =
|
||||
csccnotastoc =
|
||||
cscdnotastoc =
|
||||
DoCreate = .T.
|
||||
FontCharSet = 238
|
||||
Height = 586
|
||||
@@ -22815,6 +22847,38 @@ DEFINE CLASS frm_optiuni_facturare AS _frmbase OF "_frm_base.vcx"
|
||||
Lb_simplu1.Name = "Lb_simplu1"
|
||||
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
|
||||
|
||||
ADD OBJECT 'pgfrm_optiuni.Page1.Clb_nota_stoc_credit' AS clb_tx_simplu WITH ;
|
||||
Height = 29, ;
|
||||
Left = 9, ;
|
||||
Name = "Clb_nota_stoc_credit", ;
|
||||
TabIndex = 16, ;
|
||||
Top = 469, ;
|
||||
Width = 510, ;
|
||||
Text_simplu1.Height = 23, ;
|
||||
Text_simplu1.Left = 254, ;
|
||||
Text_simplu1.Name = "Text_simplu1", ;
|
||||
Text_simplu1.Top = 3, ;
|
||||
Text_simplu1.Width = 90, ;
|
||||
Lb_simplu1.Caption = "Nota implicita stoc - cont creditor", ;
|
||||
Lb_simplu1.Name = "Lb_simplu1"
|
||||
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
|
||||
|
||||
ADD OBJECT 'pgfrm_optiuni.Page1.Clb_nota_stoc_debit' AS clb_tx_simplu WITH ;
|
||||
Height = 29, ;
|
||||
Left = 9, ;
|
||||
Name = "Clb_nota_stoc_debit", ;
|
||||
TabIndex = 15, ;
|
||||
Top = 440, ;
|
||||
Width = 510, ;
|
||||
Text_simplu1.Height = 23, ;
|
||||
Text_simplu1.Left = 254, ;
|
||||
Text_simplu1.Name = "Text_simplu1", ;
|
||||
Text_simplu1.Top = 3, ;
|
||||
Text_simplu1.Width = 90, ;
|
||||
Lb_simplu1.Caption = "Nota implicita stoc - cont debitor", ;
|
||||
Lb_simplu1.Name = "Lb_simplu1"
|
||||
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
|
||||
|
||||
ADD OBJECT 'pgfrm_optiuni.Page1.Clb_zile_scadenta' AS clb_tx_simplu WITH ;
|
||||
Height = 29, ;
|
||||
Left = 9, ;
|
||||
@@ -24113,6 +24177,7 @@ DEFINE CLASS frm_optiuni_facturare AS _frmbase OF "_frm_base.vcx"
|
||||
Local lcTextConformFact5, lcTextConformFact6, lcTextFooterFact1, lcTextFooterFact2
|
||||
Local lcTextFooterFact3, lcTextFooterFact4, lcTextFooterFact5, lnPrintDenumire, lnTextConformitate, lnId_fdoc_card
|
||||
Local lcTextConformFact7, lcTextConformFact8, lnFacturaSold
|
||||
Local lcScdNotaStoc, lcSccNotaStoc
|
||||
*:Global gcTextConformFact7, gcTextConformFact8, gnFacturaSold, gnId_fdoc_card
|
||||
*:Global gcTextConformFact1, gcTextConformFact2, gcTextConformFact3, gcTextConformFact4
|
||||
*:Global gcTextConformFact5, gcTextConformFact6, gcTextFooterFact1, gcTextFooterFact2
|
||||
@@ -24172,6 +24237,8 @@ DEFINE CLASS frm_optiuni_facturare AS _frmbase OF "_frm_base.vcx"
|
||||
lnId_part_casa = Thisform.nidpartcasa
|
||||
lnId_pol_pret_tr = Thisform.nidpolprettr
|
||||
lnId_pol_pret_stoc = Thisform.nidpolpretstoc
|
||||
lcScdNotaStoc = Alltrim(.page1.clb_nota_stoc_debit.text_simplu1.Value)
|
||||
lcSccNotaStoc = Alltrim(.page1.clb_nota_stoc_credit.text_simplu1.Value)
|
||||
*!* modificare v 2.0.58
|
||||
lnAtasamenteFact = .page1.op_salvare_pdf._optiongrup1.Value
|
||||
*!* modificare v 2.0.58 ^
|
||||
@@ -24451,6 +24518,18 @@ DEFINE CLASS frm_optiuni_facturare AS _frmbase OF "_frm_base.vcx"
|
||||
Endif
|
||||
*!* modificare v 2.0.93 ^
|
||||
|
||||
If lcScdNotaStoc <> This.cScdNotaStoc Or lcSccNotaStoc <> This.cSccNotaStoc
|
||||
Local loNotaStoc
|
||||
loNotaStoc = Createobject('cus_pret_nomenclator')
|
||||
If !loNotaStoc.salveaza_nota_politica(lnId_pol_pret_stoc, lcScdNotaStoc, lcSccNotaStoc)
|
||||
Release loNotaStoc
|
||||
Return .F.
|
||||
Endif
|
||||
Release loNotaStoc
|
||||
This.cScdNotaStoc = lcScdNotaStoc
|
||||
This.cSccNotaStoc = lcSccNotaStoc
|
||||
Endif
|
||||
|
||||
Set Exact &lcSetare
|
||||
|
||||
If !Empty(lcOptiuni) And !Empty(lcValori)
|
||||
@@ -24571,6 +24650,21 @@ DEFINE CLASS frm_optiuni_facturare AS _frmbase OF "_frm_base.vcx"
|
||||
|
||||
actualizeaza_politica_pret(23,@gnId_pol_pret_tr,@lcPolPretTr)
|
||||
actualizeaza_politica_pret(1,@gnId_pol_pret_stoc,@lcPolPretStoc)
|
||||
If Empty(Nvl(gnId_pol_pret_stoc,0))
|
||||
Local loPolStoc, lnIdPolStoc
|
||||
loPolStoc = Createobject('cus_pret_nomenclator')
|
||||
lnIdPolStoc = loPolStoc.asigura_politica()
|
||||
Release loPolStoc
|
||||
If lnIdPolStoc > 0
|
||||
actualizeaza_politica_pret(1,@gnId_pol_pret_stoc,@lcPolPretStoc)
|
||||
Endif
|
||||
Endif
|
||||
Local loNotaStoc
|
||||
loNotaStoc = Createobject('cus_pret_nomenclator')
|
||||
loNotaStoc.incarca_nota_politica(Nvl(gnId_pol_pret_stoc,0))
|
||||
This.cScdNotaStoc = loNotaStoc.cScd
|
||||
This.cSccNotaStoc = loNotaStoc.cScc
|
||||
Release loNotaStoc
|
||||
*!* modificare v 2.0.58
|
||||
Thisform.natasamentefact = 2-Nvl(citeste_optiune_firma([ATASAMENTEFACT]),0)
|
||||
*!* modificare v 2.0.58 ^
|
||||
@@ -24647,6 +24741,9 @@ DEFINE CLASS frm_optiuni_facturare AS _frmbase OF "_frm_base.vcx"
|
||||
.op_factura_email._optiongrup1.Value = IIF(Nvl(m.gnFacturaEmail,0) = 0, 2, IIF(Nvl(m.gnFacturaEmail,0) = 1, 1, 3))
|
||||
|
||||
.ct_clb_pol_pret_stoc.clb_tx_cautare.teXT_SIMPLU1.Refresh()
|
||||
.ct_clb_pol_pret_stoc.Enabled = Empty(Thisform.nidpolpretstoc)
|
||||
.clb_nota_stoc_debit.text_simplu1.Value = This.cScdNotaStoc
|
||||
.clb_nota_stoc_credit.text_simplu1.Value = This.cSccNotaStoc
|
||||
*!* modificare v 2.0.58
|
||||
.op_salvare_pdf._optiongrup1.Value = Thisform.natasamentefact
|
||||
.op_salvare_pdf.Refresh()
|
||||
|
||||
@@ -85,7 +85,7 @@ DEFINE CLASS cus_odata_catalog_articole AS _cusodatabase OF "_cus_odata_base.vcx
|
||||
IIF(Isnull(pnId_part),[NULL],Alltrim(Str(pnId_part)))+[,] + ;
|
||||
Alltrim(Str(pnTaxaReconditionare,18,4)) + [,] + ;
|
||||
Alltrim(Str(pnListareCodBare)) + [,?@pnIdAMS,] + ;
|
||||
alltrim(str(pnTip)) + [,0] + [, '] + m.pcCodNC8 + [',] + ALLTRIM(STR(NVL(m.pnGreutate, 0),12,4)) + [,] + ALLTRIM(STR(m.pnIdTaraOrigine)) + [, '] + m.pcCodCPV + [','] + m.pcCodUMISO + ['); end;]
|
||||
alltrim(str(pnTip)) + [,0] + [, '] + m.pcCodNC8 + [',] + ALLTRIM(STR(NVL(m.pnGreutate, 0),12,4)) + [,] + IIF(ISNULL(m.pnIdTaraOrigine), [NULL], ALLTRIM(STR(m.pnIdTaraOrigine))) + [, '] + m.pcCodCPV + [','] + m.pcCodUMISO + ['); end;]
|
||||
Case lcActiune = "UPDATE"
|
||||
lcSql = [begin pack_preturi.modifica_articol(?gnAn,]+Alltrim(Str(pnId))+[, ']+;
|
||||
pccodmat+ [', '] + pccodmatf + [', '] + pcconditii_pastrare + [','] + pcdenumire+[',] + ;
|
||||
@@ -707,6 +707,14 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx"
|
||||
*< OBJECTDATA: ObjPath="_pageframe1.Page2.ct_tara_origine" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="_pageframe1.Page2.lblIntrastat" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="_pageframe1.Page2.Clb_tx_simplu2" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_pret_ftva" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_pret_ctva" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="_pageframe1.Page3.Cb_tx_proc_tvav" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="_pageframe1.Page3.Cb_tx_venit" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_scd" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_scc" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="_pageframe1.Page3.Clb_tx_cont_dedus" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="_pageframe1.Page3.Lb_info_conturi" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="Cus_odata_parteneri_articole_coduri" UniqueID="" Timestamp="" />
|
||||
|
||||
*<DefinedPropArrayMethod>
|
||||
@@ -720,6 +728,7 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx"
|
||||
*p: nid
|
||||
*p: ogeneratorcodbare
|
||||
*p: ogeneratorcodmat
|
||||
*p: opretnom
|
||||
*p: orec
|
||||
*</DefinedPropArrayMethod>
|
||||
|
||||
@@ -731,10 +740,12 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx"
|
||||
nid = 0
|
||||
ogeneratorcodbare = .NULL.
|
||||
ogeneratorcodmat = .NULL.
|
||||
opretnom = .NULL.
|
||||
Width = 610
|
||||
_memberdata = <VFPData>
|
||||
<memberdata name="ogeneratorcodmat" type="property" display="oGeneratorCodmat"/>
|
||||
<memberdata name="ogeneratorcodbare" type="property" display="oGeneratorCodBare"/>
|
||||
<memberdata name="opretnom" type="property" display="oPretNom"/>
|
||||
</VFPData>
|
||||
_shape1.Height = 29
|
||||
_shape1.Left = 0
|
||||
@@ -766,14 +777,16 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx"
|
||||
Height = 415, ;
|
||||
Left = 1, ;
|
||||
Name = "_pageframe1", ;
|
||||
PageCount = 2, ;
|
||||
PageCount = 3, ;
|
||||
TabIndex = 1, ;
|
||||
Top = 27, ;
|
||||
Width = 610, ;
|
||||
Page1.Caption = "Articol", ;
|
||||
Page1.Name = "Page1", ;
|
||||
Page2.Caption = "Alte informatii", ;
|
||||
Page2.Name = "Page2"
|
||||
Page2.Name = "Page2", ;
|
||||
Page3.Caption = "Vanzare", ;
|
||||
Page3.Name = "Page3"
|
||||
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="pageframe" />
|
||||
|
||||
ADD OBJECT '_pageframe1.Page1._checkbox1' AS _checkbox WITH ;
|
||||
@@ -1459,6 +1472,146 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx"
|
||||
Top = 8
|
||||
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" />
|
||||
|
||||
ADD OBJECT '_pageframe1.Page3.Cb_tx_proc_tvav' AS cb_tx_simplu WITH ;
|
||||
Height = 29, ;
|
||||
Left = 9, ;
|
||||
Name = "Cb_tx_proc_tvav", ;
|
||||
TabIndex = 3, ;
|
||||
Top = 82, ;
|
||||
Width = 380, ;
|
||||
ZOrderSet = 2, ;
|
||||
_cbbase1.Height = 23, ;
|
||||
_cbbase1.Left = 185, ;
|
||||
_cbbase1.Name = "_cbbase1", ;
|
||||
_cbbase1.Top = 3, ;
|
||||
_cbbase1.Width = 163, ;
|
||||
_lbbase1.Caption = "Cota TVA", ;
|
||||
_lbbase1.Name = "_lbbase1"
|
||||
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
|
||||
|
||||
ADD OBJECT '_pageframe1.Page3.Cb_tx_venit' AS cb_tx_simplu WITH ;
|
||||
Height = 29, ;
|
||||
Left = 9, ;
|
||||
Name = "Cb_tx_venit", ;
|
||||
TabIndex = 4, ;
|
||||
Top = 118, ;
|
||||
Width = 380, ;
|
||||
ZOrderSet = 3, ;
|
||||
_cbbase1.BoundColumn = 2, ;
|
||||
_cbbase1.BoundTo = .T., ;
|
||||
_cbbase1.ColumnCount = 2, ;
|
||||
_cbbase1.ColumnLines = .F., ;
|
||||
_cbbase1.ColumnWidths = "184,0", ;
|
||||
_cbbase1.Height = 23, ;
|
||||
_cbbase1.Left = 185, ;
|
||||
_cbbase1.Name = "_cbbase1", ;
|
||||
_cbbase1.Top = 3, ;
|
||||
_cbbase1.Width = 184, ;
|
||||
_lbbase1.Caption = "Tip venit", ;
|
||||
_lbbase1.Name = "_lbbase1"
|
||||
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
|
||||
|
||||
ADD OBJECT '_pageframe1.Page3.Clb_tx_cont_dedus' AS clb_tx_simplu WITH ;
|
||||
Height = 29, ;
|
||||
Left = 9, ;
|
||||
Name = "Clb_tx_cont_dedus", ;
|
||||
TabIndex = 7, ;
|
||||
Top = 226, ;
|
||||
Width = 380, ;
|
||||
ZOrderSet = 6, ;
|
||||
Text_simplu1.Height = 23, ;
|
||||
Text_simplu1.Left = 185, ;
|
||||
Text_simplu1.MaxLength = 12, ;
|
||||
Text_simplu1.Name = "Text_simplu1", ;
|
||||
Text_simplu1.ReadOnly = .T., ;
|
||||
Text_simplu1.Top = 3, ;
|
||||
Text_simplu1.Width = 113, ;
|
||||
Lb_simplu1.Caption = "Cont venit articol", ;
|
||||
Lb_simplu1.Name = "Lb_simplu1"
|
||||
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
|
||||
|
||||
ADD OBJECT '_pageframe1.Page3.Clb_tx_pret_ctva' AS clb_tx_simplu WITH ;
|
||||
Height = 29, ;
|
||||
Left = 9, ;
|
||||
Name = "Clb_tx_pret_ctva", ;
|
||||
TabIndex = 2, ;
|
||||
Top = 46, ;
|
||||
Width = 380, ;
|
||||
ZOrderSet = 1, ;
|
||||
Text_simplu1.Format = "RK", ;
|
||||
Text_simplu1.Height = 23, ;
|
||||
Text_simplu1.InputMask = (GET_MASK(14,gnPC)), ;
|
||||
Text_simplu1.Left = 185, ;
|
||||
Text_simplu1.Name = "Text_simplu1", ;
|
||||
Text_simplu1.Top = 3, ;
|
||||
Text_simplu1.Width = 113, ;
|
||||
Lb_simplu1.Caption = "Pret cu TVA", ;
|
||||
Lb_simplu1.Name = "Lb_simplu1"
|
||||
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
|
||||
|
||||
ADD OBJECT '_pageframe1.Page3.Clb_tx_pret_ftva' AS clb_tx_simplu WITH ;
|
||||
Height = 29, ;
|
||||
Left = 9, ;
|
||||
Name = "Clb_tx_pret_ftva", ;
|
||||
TabIndex = 1, ;
|
||||
Top = 10, ;
|
||||
Width = 380, ;
|
||||
ZOrderSet = 0, ;
|
||||
Text_simplu1.Format = "RK", ;
|
||||
Text_simplu1.Height = 23, ;
|
||||
Text_simplu1.InputMask = (GET_MASK(14,gnPC)), ;
|
||||
Text_simplu1.Left = 185, ;
|
||||
Text_simplu1.Name = "Text_simplu1", ;
|
||||
Text_simplu1.Top = 3, ;
|
||||
Text_simplu1.Width = 113, ;
|
||||
Lb_simplu1.Caption = "Pret fara TVA", ;
|
||||
Lb_simplu1.Name = "Lb_simplu1"
|
||||
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
|
||||
|
||||
ADD OBJECT '_pageframe1.Page3.Clb_tx_scc' AS clb_tx_simplu WITH ;
|
||||
Height = 29, ;
|
||||
Left = 9, ;
|
||||
Name = "Clb_tx_scc", ;
|
||||
TabIndex = 6, ;
|
||||
Top = 190, ;
|
||||
Width = 380, ;
|
||||
ZOrderSet = 5, ;
|
||||
Text_simplu1.Height = 23, ;
|
||||
Text_simplu1.Left = 185, ;
|
||||
Text_simplu1.MaxLength = 12, ;
|
||||
Text_simplu1.Name = "Text_simplu1", ;
|
||||
Text_simplu1.Top = 3, ;
|
||||
Text_simplu1.Width = 113, ;
|
||||
Lb_simplu1.Caption = "Cont creditor", ;
|
||||
Lb_simplu1.Name = "Lb_simplu1"
|
||||
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
|
||||
|
||||
ADD OBJECT '_pageframe1.Page3.Clb_tx_scd' AS clb_tx_simplu WITH ;
|
||||
Height = 29, ;
|
||||
Left = 9, ;
|
||||
Name = "Clb_tx_scd", ;
|
||||
TabIndex = 5, ;
|
||||
Top = 154, ;
|
||||
Width = 380, ;
|
||||
ZOrderSet = 4, ;
|
||||
Text_simplu1.Height = 23, ;
|
||||
Text_simplu1.Left = 185, ;
|
||||
Text_simplu1.MaxLength = 12, ;
|
||||
Text_simplu1.Name = "Text_simplu1", ;
|
||||
Text_simplu1.Top = 3, ;
|
||||
Text_simplu1.Width = 113, ;
|
||||
Lb_simplu1.Caption = "Cont debitor", ;
|
||||
Lb_simplu1.Name = "Lb_simplu1"
|
||||
*< END OBJECT: ClassLib="lb_tx.vcx" BaseClass="container" />
|
||||
|
||||
ADD OBJECT '_pageframe1.Page3.Lb_info_conturi' AS _label WITH ;
|
||||
Caption = "Necompletate: debit 4111, credit contul de venit al articolului", ;
|
||||
Left = 9, ;
|
||||
Name = "Lb_info_conturi", ;
|
||||
TabIndex = 8, ;
|
||||
Top = 262
|
||||
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" />
|
||||
|
||||
ADD OBJECT 'But_renunt1' AS but_renunt WITH ;
|
||||
Left = 551, ;
|
||||
Name = "But_renunt1", ;
|
||||
@@ -1686,6 +1839,10 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx"
|
||||
Endscan
|
||||
|
||||
Set Deleted &lcDeleted
|
||||
|
||||
If m.llReturn And Vartype(Thisform.oPretNom) = "O"
|
||||
llReturn = Thisform.oPretNom.salveaza(m.lnIdArticol)
|
||||
Endif
|
||||
Endif && cus_odata_catalog_articole
|
||||
|
||||
Thisform.do_inchide_tranzactie(Iif(m.llReturn, 1, 2))
|
||||
@@ -1767,8 +1924,65 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx"
|
||||
If gnCodBareAutomat = 2
|
||||
This.oGeneratorCodBare= Createobject("oGeneratorNumere")
|
||||
lnRezultat2 = This.oGeneratorCodBare.creeaza_cursor_serii(15)
|
||||
EndIf
|
||||
EndIf
|
||||
*!* 07.09.2009 ^
|
||||
|
||||
If gcNumeProgram = [ROAFACTURARE]
|
||||
This.oPretNom = Createobject("cus_pret_nomenclator")
|
||||
This.oPretNom.incarca(Iif(Upper(Alltrim(m.tcActiune)) = [UPDATE], m.tnId, 0))
|
||||
This._pageframe1.Page3.Clb_tx_pret_ftva.Text_simplu1.ControlSource = "Thisform.oPretNom.nPretFtva"
|
||||
This._pageframe1.Page3.Clb_tx_pret_ctva.Text_simplu1.ControlSource = "Thisform.oPretNom.nPretCtva"
|
||||
This._pageframe1.Page3.Clb_tx_scd.Text_simplu1.ControlSource = "Thisform.oPretNom.cScd"
|
||||
This._pageframe1.Page3.Clb_tx_scc.Text_simplu1.ControlSource = "Thisform.oPretNom.cScc"
|
||||
This._pageframe1.Page3.Clb_tx_cont_dedus.Text_simplu1.ControlSource = "Thisform.oPretNom.cContDedus"
|
||||
If Used('crsvenchelt')
|
||||
Use In crsvenchelt
|
||||
Endif
|
||||
goExecutor.oExecute([select id_venchelt, explicatie as venchelt from vnom_venchel where inactiv = 0 order by explicatie],[crsvenchelt])
|
||||
This._pageframe1.Page3.Cb_tx_venit._cbbase1.RowSourceType = 6
|
||||
This._pageframe1.Page3.Cb_tx_venit._cbbase1.RowSource = "crsvenchelt.venchelt,id_venchelt"
|
||||
This._pageframe1.Page3.Cb_tx_venit._cbbase1.ControlSource = "Thisform.oPretNom.nIdVenchelt"
|
||||
If Used('crs_cote_tva')
|
||||
Use In crs_cote_tva
|
||||
Endif
|
||||
If Used('crs_cote_tva2')
|
||||
Use In crs_cote_tva2
|
||||
Endif
|
||||
goExecutor.oExecute([select procent, proc_tva from ] + gcS + [.vcote_tva where an = ?gnAn and luna = ?gnLuna order by proc_tva desc],[crs_cote_tva2])
|
||||
Create Cursor crs_cote_tva (procent C(100), proc_tva N(10,2) Null)
|
||||
If Used('crs_cote_tva2')
|
||||
Insert Into crs_cote_tva (procent, proc_tva) Select Alltrim(Str(procent,10,2)), proc_tva From crs_cote_tva2
|
||||
Use In crs_cote_tva2
|
||||
Endif
|
||||
Select crs_cote_tva
|
||||
Append Blank
|
||||
Replace procent With [<ALES LA FACTURARE>]
|
||||
This._pageframe1.Page3.Cb_tx_proc_tvav._cbbase1.RowSourceType = 2
|
||||
This._pageframe1.Page3.Cb_tx_proc_tvav._cbbase1.RowSource = "crs_cote_tva"
|
||||
If Isnull(This.oPretNom.nProcTvav)
|
||||
Locate For Isnull(proc_tva)
|
||||
Else
|
||||
Locate For !Isnull(proc_tva) And proc_tva = This.oPretNom.nProcTvav
|
||||
Endif
|
||||
If !Found()
|
||||
Go Bottom
|
||||
Endif
|
||||
This._pageframe1.Page3.Cb_tx_proc_tvav._cbbase1.ListIndex = Recno()
|
||||
If This.oPretNom.lPreturiCuTva
|
||||
This._pageframe1.Page3.Clb_tx_pret_ctva.Lb_simplu1.Caption = "Pret cu TVA (pret lista)"
|
||||
This._pageframe1.Page3.Clb_tx_pret_ctva.Lb_simplu1.FontBold = .T.
|
||||
This._pageframe1.Page3.Clb_tx_pret_ftva.Lb_simplu1.Caption = "Pret fara TVA"
|
||||
This._pageframe1.Page3.Clb_tx_pret_ftva.Lb_simplu1.FontBold = .F.
|
||||
Else
|
||||
This._pageframe1.Page3.Clb_tx_pret_ftva.Lb_simplu1.Caption = "Pret fara TVA (pret lista)"
|
||||
This._pageframe1.Page3.Clb_tx_pret_ftva.Lb_simplu1.FontBold = .T.
|
||||
This._pageframe1.Page3.Clb_tx_pret_ctva.Lb_simplu1.Caption = "Pret cu TVA"
|
||||
This._pageframe1.Page3.Clb_tx_pret_ctva.Lb_simplu1.FontBold = .F.
|
||||
Endif
|
||||
This._pageframe1.PageCount = 3
|
||||
Else
|
||||
This._pageframe1.PageCount = 2
|
||||
Endif
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Load
|
||||
@@ -1927,6 +2141,30 @@ DEFINE CLASS frm_catalog_articole_nou AS _frmbase OF "_frm_base.vcx"
|
||||
thisform.do_alege_partener()
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE _pageframe1.Page3.Cb_tx_proc_tvav._cbbase1.InteractiveChange
|
||||
Select crs_cote_tva
|
||||
Thisform.oPretNom.nProcTvav = crs_cote_tva.proc_tva
|
||||
If Thisform.oPretNom.lPreturiCuTva
|
||||
Thisform.oPretNom.nPretFtva = Thisform.oPretNom.recalculeaza_pret(Thisform.oPretNom.nPretCtva, .F.)
|
||||
Thisform._pageframe1.Page3.Clb_tx_pret_ftva.Text_simplu1.Refresh()
|
||||
Else
|
||||
Thisform.oPretNom.nPretCtva = Thisform.oPretNom.recalculeaza_pret(Thisform.oPretNom.nPretFtva, .T.)
|
||||
Thisform._pageframe1.Page3.Clb_tx_pret_ctva.Text_simplu1.Refresh()
|
||||
Endif
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE _pageframe1.Page3.Clb_tx_pret_ctva.Text_simplu1.Valid
|
||||
Thisform.oPretNom.nPretCtva = This.Value
|
||||
Thisform.oPretNom.nPretFtva = Thisform.oPretNom.recalculeaza_pret(This.Value, .F.)
|
||||
Thisform._pageframe1.Page3.Clb_tx_pret_ftva.Text_simplu1.Refresh()
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE _pageframe1.Page3.Clb_tx_pret_ftva.Text_simplu1.Valid
|
||||
Thisform.oPretNom.nPretFtva = This.Value
|
||||
Thisform.oPretNom.nPretCtva = Thisform.oPretNom.recalculeaza_pret(This.Value, .T.)
|
||||
Thisform._pageframe1.Page3.Clb_tx_pret_ctva.Text_simplu1.Refresh()
|
||||
ENDPROC
|
||||
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS frm_config_codbare AS frm_termin_renunt OF "_frm_child.vcx"
|
||||
|
||||
@@ -64,6 +64,17 @@
|
||||
*!* 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)
|
||||
|
||||
*!* 14.09.2026
|
||||
*!* agent
|
||||
*!* + clasa cus_pret_nomenclator - politica de stoc pe pagina Vanzare din fisa articolului (plan #12b, S6b)
|
||||
*!* + incarca_nota_politica/salveaza_nota_politica - nota implicita (cont debitor/creditor) a politicii
|
||||
*!* de stoc, editabila din optiunile de facturare (plan #12b, S7b)
|
||||
|
||||
*!* 15.09.2026
|
||||
*!* marius.mutu
|
||||
*!* + verifica_cont_venit_linie - verificare prietenoasa a contului de venit rezolvat pentru o linie
|
||||
*!* de factura, la adaugarea articolului
|
||||
|
||||
***************************************************************************************************************
|
||||
**** Clase:
|
||||
**** oDateFactura
|
||||
@@ -76,6 +87,14 @@
|
||||
**** scrieAtasamente
|
||||
**** oDateGestiune
|
||||
**** Reset
|
||||
**** cus_pret_nomenclator
|
||||
**** asigura_politica
|
||||
**** incarca
|
||||
**** valideaza
|
||||
**** salveaza
|
||||
**** recalculeaza_pret
|
||||
**** incarca_nota_politica
|
||||
**** salveaza_nota_politica
|
||||
**** Functii:
|
||||
**** actualizeaza_document
|
||||
**** actualizeaza_partener_fact
|
||||
@@ -819,6 +838,44 @@ Function deriva_cont_venit_fara_pol
|
||||
Endfunc && deriva_cont_venit_fara_pol
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
* verificare prietenoasa D10 la adaugarea liniei; intoarce [] daca linia are cont de venit rezolvat, altfel mesajul de afisat
|
||||
Function verifica_cont_venit_linie
|
||||
Lparameters tnIdArticol, tnIdPol
|
||||
Local lcSql, lnSucces, lcMesaj, lcIdPolStoc, lcIdPol, lcIdArt
|
||||
lcMesaj = []
|
||||
If Isnull(tnIdArticol) Or Isnull(tnIdPol)
|
||||
Return lcMesaj
|
||||
Endif
|
||||
* fisa poate ajunge aici fara sa fi trecut prin optiunile facturarii - globalul nu exista inca
|
||||
lcIdPolStoc = Iif(Type('gnId_pol_pret_stoc')='N',Alltrim(Str(gnId_pol_pret_stoc)),'0')
|
||||
lcIdPol = Alltrim(Str(tnIdPol))
|
||||
lcIdArt = Alltrim(Str(tnIdArticol))
|
||||
* replica exacta a rezolvarii din pack_facturare.contabilizeaza_articol.cursor_articol: deducerea
|
||||
* cont_venit_articol_stoc are prioritate doar pe politica de stoc si doar fara nota pe rand
|
||||
lcSql = [select nom_articole.denumire, b.nume_lista_preturi, ] + ;
|
||||
[nvl(case when a.id_pol = ] + lcIdPolStoc + [ and a.id_nota is null then pack_facturare.cont_venit_articol_stoc(] + lcIdArt + [) end, d.scc) as scc_rezolvat ] + ;
|
||||
[from nom_articole ] + ;
|
||||
[left join crm_politici_pret_art a on a.id_pol = ] + lcIdPol + [ and a.id_articol = nom_articole.id_articol ] + ;
|
||||
[join crm_politici_preturi b on b.id_pol = ] + lcIdPol + [ ] + ;
|
||||
[left join crm_note_vanzari c on c.id_nota = (case when ] + lcIdPol + [ = ] + lcIdPolStoc + [ then nvl(a.id_nota, b.id_nota) else b.id_nota end) ] + ;
|
||||
[left join note_contabile d on d.id_set = c.id_set ] + ;
|
||||
[where nom_articole.id_articol = ] + lcIdArt
|
||||
If Used('crsverifcontvenit')
|
||||
Use In crsverifcontvenit
|
||||
Endif
|
||||
lnSucces = goExecutor.oExecute(lcSql,[crsverifcontvenit])
|
||||
If lnSucces >= 0 And Used('crsverifcontvenit') And Reccount('crsverifcontvenit') > 0 And Isnull(crsverifcontvenit.scc_rezolvat)
|
||||
lcMesaj = [Articolul ] + Alltrim(Nvl(crsverifcontvenit.denumire,[])) + ;
|
||||
[ nu are cont de venit configurat pe politica ] + Alltrim(Nvl(crsverifcontvenit.nume_lista_preturi,[])) + ;
|
||||
[ - completati contul articolului sau nota contabila a politicii!]
|
||||
Endif
|
||||
If Used('crsverifcontvenit')
|
||||
Use In crsverifcontvenit
|
||||
Endif
|
||||
Return lcMesaj
|
||||
Endfunc && verifica_cont_venit_linie
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
*!* Function recalculeaza_pret_vanzare_lei_set
|
||||
*!* Lparameters tcTabel,tnCurs
|
||||
*!* Local llReturn
|
||||
@@ -2304,3 +2361,249 @@ Function scrie_legatura_proforma
|
||||
Endfunc && scrie_legatura_proforma
|
||||
******************************* SFARSIT: scrie_legatura_proforma *****************************************
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
****************************************** INCEPUT: cus_pret_nomenclator ***************************************
|
||||
Define Class cus_pret_nomenclator As Custom
|
||||
nIdArticol = 0
|
||||
nIdPolitica = 0
|
||||
lIncarcat = .F.
|
||||
lPreturiCuTva = .F.
|
||||
nPretFtva = 0
|
||||
nPretCtva = 0
|
||||
nProcTvav = 1
|
||||
nIdVenchelt = .NULL.
|
||||
nIdNota = .NULL.
|
||||
cScd = []
|
||||
cScc = []
|
||||
cContDedus = []
|
||||
cEroare = []
|
||||
|
||||
* asigura politica de stoc (o creeaza daca lipseste); intoarce id politica, 0 la esec
|
||||
Procedure asigura_politica
|
||||
Local lcSql, lnSucces
|
||||
Private pnIdUtil, pnIdPolitica
|
||||
pnIdUtil = gnIdUtil
|
||||
pnIdPolitica = 0
|
||||
lcSql = [begin pack_preturi.asigura_politica_stoc(?pnIdUtil,?@pnIdPolitica); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare")
|
||||
This.nIdPolitica = 0
|
||||
Else
|
||||
This.nIdPolitica = Nvl(pnIdPolitica,0)
|
||||
Endif
|
||||
Release pnIdUtil, pnIdPolitica
|
||||
Return This.nIdPolitica
|
||||
Endproc && asigura_politica
|
||||
|
||||
* citeste randul politicii de stoc pentru articol, contul dedus si conturile notei asociate
|
||||
Procedure incarca
|
||||
Lparameters tnIdArticol
|
||||
Local lcSql, lnSucces
|
||||
This.nIdArticol = tnIdArticol
|
||||
This.lIncarcat = .F.
|
||||
This.nPretFtva = 0
|
||||
This.nPretCtva = 0
|
||||
This.nProcTvav = (GetProcTvaStandard()+100)/100
|
||||
This.lPreturiCuTva = .F.
|
||||
This.nIdVenchelt = .NULL.
|
||||
This.nIdNota = .NULL.
|
||||
This.cScd = []
|
||||
This.cScc = []
|
||||
This.cContDedus = []
|
||||
If This.asigura_politica() <= 0
|
||||
Return .F.
|
||||
Endif
|
||||
lcSql = [select nvl(preturi_cu_tva,0) as preturi_cu_tva from crm_politici_preturi where id_pol = ] + Alltrim(Str(This.nIdPolitica))
|
||||
If Used('crspreturi')
|
||||
Use In crspreturi
|
||||
Endif
|
||||
lnSucces = goExecutor.oExecute(lcSql,[crspreturi])
|
||||
If lnSucces >= 0 And Reccount('crspreturi') > 0
|
||||
This.lPreturiCuTva = (crspreturi.preturi_cu_tva = 1)
|
||||
Endif
|
||||
If Used('crspreturi')
|
||||
Use In crspreturi
|
||||
Endif
|
||||
lcSql = [select pretftva, pretctva, proc_tvav, id_venchelt, id_nota from crm_politici_pret_art ] + ;
|
||||
[where id_pol = ] + Alltrim(Str(This.nIdPolitica)) + [ and id_articol = ] + Alltrim(Str(tnIdArticol))
|
||||
If Used('crspolart')
|
||||
Use In crspolart
|
||||
Endif
|
||||
lnSucces = goExecutor.oExecute(lcSql,[crspolart])
|
||||
If lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare")
|
||||
Return .F.
|
||||
Endif
|
||||
If Reccount('crspolart') > 0
|
||||
This.nPretFtva = Nvl(crspolart.pretftva,0)
|
||||
This.nPretCtva = Nvl(crspolart.pretctva,0)
|
||||
This.nProcTvav = crspolart.proc_tvav
|
||||
If !Isnull(crspolart.id_venchelt)
|
||||
This.nIdVenchelt = crspolart.id_venchelt
|
||||
Endif
|
||||
If !Isnull(crspolart.id_nota)
|
||||
This.nIdNota = crspolart.id_nota
|
||||
Endif
|
||||
Endif
|
||||
If Used('crspolart')
|
||||
Use In crspolart
|
||||
Endif
|
||||
If !Isnull(This.nIdNota)
|
||||
lcSql = [select n.scd, n.scc from crm_note_vanzari v, note_contabile n ] + ;
|
||||
[where v.id_nota = ] + Alltrim(Str(This.nIdNota)) + [ and n.id_set = v.id_set]
|
||||
If Used('crsnotapol')
|
||||
Use In crsnotapol
|
||||
Endif
|
||||
lnSucces = goExecutor.oExecute(lcSql,[crsnotapol])
|
||||
If lnSucces >= 0 And Reccount('crsnotapol') > 0
|
||||
This.cScd = Alltrim(Nvl(crsnotapol.scd,[]))
|
||||
This.cScc = Alltrim(Nvl(crsnotapol.scc,[]))
|
||||
Endif
|
||||
If Used('crsnotapol')
|
||||
Use In crsnotapol
|
||||
Endif
|
||||
Endif
|
||||
lcSql = [select pack_facturare.cont_venit_articol_stoc(] + Alltrim(Str(tnIdArticol)) + [) as cont_dedus from dual]
|
||||
If Used('crscontded')
|
||||
Use In crscontded
|
||||
Endif
|
||||
lnSucces = goExecutor.oExecute(lcSql,[crscontded])
|
||||
If lnSucces >= 0 And Reccount('crscontded') > 0
|
||||
This.cContDedus = Alltrim(Nvl(crscontded.cont_dedus,[]))
|
||||
Endif
|
||||
If Used('crscontded')
|
||||
Use In crscontded
|
||||
Endif
|
||||
This.lIncarcat = .T.
|
||||
Return .T.
|
||||
Endproc && incarca
|
||||
|
||||
* valideaza conturile si pretul curente; mesaj + .F. la refuz
|
||||
Procedure valideaza
|
||||
This.cEroare = []
|
||||
If (!Empty(This.cScd) And Empty(This.cScc)) Or (Empty(This.cScd) And !Empty(This.cScc))
|
||||
This.cEroare = [Trebuie completate ambele conturi (debit si credit) sau niciunul.]
|
||||
Else
|
||||
If This.nPretFtva < 0 Or This.nPretCtva < 0
|
||||
This.cEroare = [Pretul nu poate fi negativ.]
|
||||
Endif
|
||||
Endif
|
||||
If !Empty(This.cEroare)
|
||||
AMESSAGEBOX(This.cEroare,0+48,"Atentie")
|
||||
Return .F.
|
||||
Endif
|
||||
Return .T.
|
||||
Endproc && valideaza
|
||||
|
||||
* scrie pretul si, daca sunt conturi, nota de vanzare aferenta; fara tranzactie proprie
|
||||
Procedure salveaza
|
||||
Lparameters tnIdArticol
|
||||
Local lcSql, lnSucces
|
||||
Private pnIdArticol, pnPretFtva, pnPretCtva, pnProcTvav, pnIdVenchelt, pnIdNota, pnScrieNota
|
||||
If !This.valideaza()
|
||||
Return .F.
|
||||
Endif
|
||||
If !Empty(This.cScd) And !Empty(This.cScc)
|
||||
Private pcScd, pcScc, pnIdUtil
|
||||
pcScd = This.cScd
|
||||
pcScc = This.cScc
|
||||
pnIdUtil = gnIdUtil
|
||||
pnIdNota = 0
|
||||
lcSql = [begin pack_preturi.gaseste_sau_creeaza_nota_vanzare(?pcScd,?pcScc,?pnIdUtil,?@pnIdNota); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
Release pcScd, pcScc, pnIdUtil
|
||||
If lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare")
|
||||
Release pnIdArticol, pnPretFtva, pnPretCtva, pnProcTvav, pnIdVenchelt, pnIdNota, pnScrieNota
|
||||
Return .F.
|
||||
Endif
|
||||
This.nIdNota = Nvl(pnIdNota,0)
|
||||
Else
|
||||
This.nIdNota = .NULL.
|
||||
Endif
|
||||
pnIdArticol = tnIdArticol
|
||||
pnPretFtva = This.nPretFtva
|
||||
pnPretCtva = This.nPretCtva
|
||||
pnProcTvav = This.nProcTvav
|
||||
pnIdVenchelt = This.nIdVenchelt
|
||||
pnIdNota = This.nIdNota
|
||||
pnScrieNota = Iif(This.lIncarcat, 1, 0)
|
||||
lcSql = [begin pack_preturi.salveaza_pret_nomenclator(?pnIdArticol,?pnPretFtva,?pnPretCtva,?pnProcTvav,?pnIdVenchelt,?pnIdNota,?pnScrieNota); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare")
|
||||
Endif
|
||||
Release pnIdArticol, pnPretFtva, pnPretCtva, pnProcTvav, pnIdVenchelt, pnIdNota, pnScrieNota
|
||||
Return (lnSucces >= 0)
|
||||
Endproc && salveaza
|
||||
|
||||
* recalculeaza pretul opus (cu/fara TVA) dupa proc_tvav curent
|
||||
Procedure recalculeaza_pret
|
||||
Lparameters tnPret, tlSpreCuTva
|
||||
Local lnProcTvav
|
||||
lnProcTvav = Iif(Isnull(This.nProcTvav), (GetProcTvaStandard()+100)/100, This.nProcTvav)
|
||||
If tlSpreCuTva
|
||||
Return Round(tnPret * lnProcTvav, gnPc)
|
||||
Endif
|
||||
Return Round(tnPret / lnProcTvav, gnPc)
|
||||
Endproc && recalculeaza_pret
|
||||
|
||||
* citeste scd/scc din nota curenta a politicii date (goala daca politica nu are nota)
|
||||
Procedure incarca_nota_politica
|
||||
Lparameters tnIdPol
|
||||
Local lcSql, lnSucces
|
||||
This.cScd = []
|
||||
This.cScc = []
|
||||
lcSql = [select n.scd, n.scc from crm_politici_preturi p, crm_note_vanzari v, note_contabile n ] + ;
|
||||
[where p.id_pol = ] + Alltrim(Str(tnIdPol)) + [ and v.id_nota = p.id_nota and n.id_set = v.id_set]
|
||||
If Used('crsnotapolstoc')
|
||||
Use In crsnotapolstoc
|
||||
Endif
|
||||
lnSucces = goExecutor.oExecute(lcSql,[crsnotapolstoc])
|
||||
If lnSucces >= 0 And Reccount('crsnotapolstoc') > 0
|
||||
This.cScd = Alltrim(Nvl(crsnotapolstoc.scd,[]))
|
||||
This.cScc = Alltrim(Nvl(crsnotapolstoc.scc,[]))
|
||||
Endif
|
||||
If Used('crsnotapolstoc')
|
||||
Use In crsnotapolstoc
|
||||
Endif
|
||||
Return !Empty(This.cScd) And !Empty(This.cScc)
|
||||
Endproc && incarca_nota_politica
|
||||
|
||||
* valideaza (ambele conturi sau niciunul) si scrie nota implicita a politicii date
|
||||
Procedure salveaza_nota_politica
|
||||
Lparameters tnIdPol, tcScd, tcScc
|
||||
Local lcSql, lnSucces
|
||||
If (!Empty(tcScd) And Empty(tcScc)) Or (Empty(tcScd) And !Empty(tcScc))
|
||||
This.cEroare = [Trebuie completate ambele conturi (debit si credit) sau niciunul.]
|
||||
AMESSAGEBOX(This.cEroare,0+48,"Atentie")
|
||||
Return .F.
|
||||
Endif
|
||||
If Empty(tcScd) And Empty(tcScc)
|
||||
Return .T.
|
||||
Endif
|
||||
Private pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol
|
||||
pcScd = tcScd
|
||||
pcScc = tcScc
|
||||
pnIdUtil = gnIdUtil
|
||||
pnIdNota = 0
|
||||
lcSql = [begin pack_preturi.gaseste_sau_creeaza_nota_vanzare(?pcScd,?pcScc,?pnIdUtil,?@pnIdNota); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare")
|
||||
Release pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol
|
||||
Return .F.
|
||||
Endif
|
||||
pnIdPol = tnIdPol
|
||||
lcSql = [begin pack_preturi.seteaza_nota_politica_stoc(?pnIdPol,?pnIdNota); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare")
|
||||
Endif
|
||||
Release pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol
|
||||
Return (lnSucces >= 0)
|
||||
Endproc && salveaza_nota_politica
|
||||
Enddefine
|
||||
****************************************** SFARSIT: cus_pret_nomenclator ****************************************
|
||||
*********************************************************************************************************
|
||||
|
||||
626
utile/Teste/facturare_unificat/probe_12b_s4b_matrice.prg
Normal file
626
utile/Teste/facturare_unificat/probe_12b_s4b_matrice.prg
Normal file
@@ -0,0 +1,626 @@
|
||||
* probe_12b_s4b_matrice.prg
|
||||
* Plan #12b, S4b - proba A (matrice, zero date) + "mutatie de control" pe pachetul de DINAINTE
|
||||
* de S4b. Starea curenta a schemei (MARIUSM_AUTO) la data rularii: S4a aplicat (functia
|
||||
* pack_facturare.cont_venit_articol_stoc exista), dar cursor_articol din contabilizeaza_articol
|
||||
* NU citeste inca A.ID_NOTA, nu deduce SCC din cont si nu are garda FACT-033 - SCD/SCC/ASCD/ASCC
|
||||
* vin azi INTOTDEAUNA din nota politicii (B.ID_NOTA), indiferent de politica sau de articol.
|
||||
*
|
||||
* Apeleaza direct pack_facturare.contabilizeaza_articol(v_row) cu un rand
|
||||
* VANZARI_DETALII_TEMP%ROWTYPE construit in PL/SQL (fara sa treaca prin RPC-ul de adaugare
|
||||
* linie/UI), citeste rezultatul din ACT_TEMP (GTT ON COMMIT DELETE ROWS) in aceeasi tranzactie
|
||||
* manuala (Transactions=2). Fiecare caz care muta date (ID_NOTA pe rand sau pe politica, CONT pe
|
||||
* articol) isi restaureaza mutatia INAUNTRUL propriului bloc PL/SQL (pe calea de succes SI pe
|
||||
* exceptie, ca sa nu contamineze cazurile urmatoare cand acest script va fi rerulat dupa ce S4b
|
||||
* va introduce chiar erorile FACT-033 asteptate) - ROLLBACK-ul final e doar plasa de siguranta.
|
||||
*
|
||||
* Asteptarile (valorile "S4b" din sectiunea 3 a planului) sunt calculate independent de codul
|
||||
* testat: din baseline_12b.md sectiunea 6 (notele 5 si 6, statice) si din interogari separate
|
||||
* (nota politicii reale, pack_facturare.GetAnaliticByGrupUtilizatori) - nu din cursor_articol.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File ruleaza_suita.ps1 -Nume probe_12b_s4b_matrice
|
||||
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_12b_s4b_matrice.log
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gcCaz, gnPass, gnFail, gnTransOriginal, gcErrMsg
|
||||
gcErrMsg = ""
|
||||
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_12b_s4b_matrice.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out")
|
||||
MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out"
|
||||
ENDIF
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
gcCaz = ""
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
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 AfLog WITH "FAIL: conexiune Oracle esuata"
|
||||
DO Final
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle)
|
||||
|
||||
gnTransOriginal = SQLGETPROP(gnHandle, "Transactions")
|
||||
SQLSETPROP(gnHandle, "Transactions", 2)
|
||||
DO AfLog WITH "Transactions manual, original=" + TRANSFORM(gnTransOriginal)
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* precondition: nid_politica_stoc = 41 dupa initializeaza_facturare(8) - altfel ramurile
|
||||
* "politica reala" ar trece tautologic (nimic nu ar mai fi cu adevarat "politica de stoc")
|
||||
gcCaz = "[precondition] "
|
||||
LOCAL lnOk, lcSql
|
||||
* pack_facturare are propriile variabile de antet de document (nnumar_act, cserie_act, datele,
|
||||
* nid_moneda_nationala, nperechec, nid_fdoc, nid_factc, nid_part, nid_partc, nid_set - toate
|
||||
* NOT NULL in ACT_TEMP sau folosite in DECODE-uri care ajung acolo) - neinitializate de
|
||||
* initializeaza_facturare (care seteaza doar politica de stoc) si nici de test_init_env_auto_*.
|
||||
* Fara ele contabilizeaza_articol pica pe ORA-01400 (NRACT/PERECHEC/ID_SET) inainte sa ajunga la
|
||||
* SCD/SCC - descoperit prin proba directa pe sqlplus, nu presupus.
|
||||
lcSql = [begin pack_facturare.initializeaza_facturare(8); ] + ;
|
||||
[if nvl(pack_facturare.nid_politica_stoc,0) <> 41 then raise_application_error(-20900,'nid_politica_stoc='||to_char(pack_facturare.nid_politica_stoc)); end if; ] + ;
|
||||
[pack_facturare.nnumar_act := 999999; pack_facturare.cserie_act := 'TST'; ] + ;
|
||||
[pack_facturare.ddata_ireg := sysdate; pack_facturare.ddata_act := sysdate; pack_facturare.ddata_scadenta := sysdate; ] + ;
|
||||
[pack_facturare.nid_moneda_nationala := 3; pack_facturare.nperechec := 0; pack_facturare.nid_fdoc := 0; ] + ;
|
||||
[pack_facturare.nid_factc := 0; pack_facturare.nid_part := 0; pack_facturare.nid_partc := 0; pack_facturare.nid_set := 25000; ] + ;
|
||||
[pack_facturare.nid_sectie_stoc := nvl(pack_facturare.nid_sectie_stoc,1); end;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
DO Verdict WITH lnOk > 0, "initializeaza_facturare(8) + antet document proba + precondition nid_politica_stoc=41"
|
||||
IF lnOk <= 0
|
||||
DO AfLog WITH "BLOCAT: precondition esuata, opresc"
|
||||
DO Final
|
||||
ENDIF
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* descoperire (read-only): articolul singurei politici 32/33, politica reala a articolului 1
|
||||
* (D5), nota acelei politici reale, si analiticele de grup (GetAnaliticByGrupUtilizatori) pentru
|
||||
* conturile folosite mai jos - toate independente de cursor_articol
|
||||
gcCaz = "[descoperire] "
|
||||
LOCAL lnArtPol32, lnArtPol33, lnPolReala1, lnNotaRealaOrig
|
||||
lnArtPol32 = 0
|
||||
lnArtPol33 = 0
|
||||
lnPolReala1 = 0
|
||||
lnNotaRealaOrig = 0
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select id_articol from crm_politici_pret_art where id_pol = 32 and rownum = 1", "crsp32")
|
||||
IF lnOk > 0 AND USED('crsp32') AND RECCOUNT('crsp32') = 1
|
||||
lnArtPol32 = crsp32.id_articol
|
||||
ENDIF
|
||||
IF USED('crsp32')
|
||||
USE IN crsp32
|
||||
ENDIF
|
||||
DO AfLog WITH "articol politica 32 (HOTEL TAXE) = " + TRANSFORM(lnArtPol32)
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select id_articol from crm_politici_pret_art where id_pol = 33 and rownum = 1", "crsp33")
|
||||
IF lnOk > 0 AND USED('crsp33') AND RECCOUNT('crsp33') = 1
|
||||
lnArtPol33 = crsp33.id_articol
|
||||
ENDIF
|
||||
IF USED('crsp33')
|
||||
USE IN crsp33
|
||||
ENDIF
|
||||
DO AfLog WITH "articol politica 33 (HOTEL CAZARE) = " + TRANSFORM(lnArtPol33)
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select id_pol from crm_politici_pret_art where id_articol = 1 and id_pol <> 41 and rownum = 1", "crspr1")
|
||||
IF lnOk > 0 AND USED('crspr1') AND RECCOUNT('crspr1') = 1
|
||||
lnPolReala1 = crspr1.id_pol
|
||||
ENDIF
|
||||
IF USED('crspr1')
|
||||
USE IN crspr1
|
||||
ENDIF
|
||||
DO AfLog WITH "politica reala a articolului 1 (D5) = " + TRANSFORM(lnPolReala1)
|
||||
|
||||
IF lnArtPol32 = 0 OR lnArtPol33 = 0 OR lnPolReala1 = 0
|
||||
DO AfLog WITH "BLOCAT: descoperire incompleta (art32=" + TRANSFORM(lnArtPol32) + " art33=" + TRANSFORM(lnArtPol33) + " polreala1=" + TRANSFORM(lnPolReala1) + ")"
|
||||
DO Final
|
||||
ENDIF
|
||||
|
||||
LOCAL lcScdReal, lcAscdReal, lcSccReal, lcAsccReal
|
||||
lcScdReal = ""
|
||||
lcAscdReal = ""
|
||||
lcSccReal = ""
|
||||
lcAsccReal = ""
|
||||
lcSql = "select b.id_nota, nvl(d.scd,'<NULL>') scd, nvl(d.ascd,'<NULL>') ascd, nvl(d.scc,'<NULL>') scc, nvl(d.ascc,'<NULL>') ascc" + ;
|
||||
" from crm_politici_preturi b join crm_note_vanzari c on b.id_nota = c.id_nota join note_contabile d on c.id_set = d.id_set" + ;
|
||||
" where b.id_pol = " + TRANSFORM(lnPolReala1)
|
||||
lnOk = SQLEXEC(gnHandle, lcSql, "crsnr")
|
||||
IF lnOk > 0 AND USED('crsnr') AND RECCOUNT('crsnr') = 1
|
||||
lnNotaRealaOrig = crsnr.id_nota
|
||||
lcScdReal = ALLTRIM(crsnr.scd)
|
||||
lcAscdReal = ALLTRIM(crsnr.ascd)
|
||||
lcSccReal = ALLTRIM(crsnr.scc)
|
||||
lcAsccReal = ALLTRIM(crsnr.ascc)
|
||||
ELSE
|
||||
DO AfLog WITH "BLOCAT: nu am gasit nota politicii reale " + TRANSFORM(lnPolReala1)
|
||||
DO Final
|
||||
ENDIF
|
||||
IF USED('crsnr')
|
||||
USE IN crsnr
|
||||
ENDIF
|
||||
DO AfLog WITH "nota politicii reale " + TRANSFORM(lnPolReala1) + " = id_nota " + TRANSFORM(lnNotaRealaOrig) + " SCD=" + lcScdReal + " ASCD=" + lcAscdReal + " SCC=" + lcSccReal + " ASCC=" + lcAsccReal
|
||||
|
||||
LOCAL lcAsc4111, lcAsc461, lcAsc7583, lcAsc707, lcAsc7015, lcAsc418, lcAscScdReal, lcAscSccReal
|
||||
lcSql = "select nvl(pack_facturare.GetAnaliticByGrupUtilizatori(8,'4111'),'<NULL>') a1, nvl(pack_facturare.GetAnaliticByGrupUtilizatori(8,'461'),'<NULL>') a2," + ;
|
||||
" nvl(pack_facturare.GetAnaliticByGrupUtilizatori(8,'7583'),'<NULL>') a3, nvl(pack_facturare.GetAnaliticByGrupUtilizatori(8,'707'),'<NULL>') a4," + ;
|
||||
" nvl(pack_facturare.GetAnaliticByGrupUtilizatori(8,'7015'),'<NULL>') a5, nvl(pack_facturare.GetAnaliticByGrupUtilizatori(8,'418'),'<NULL>') a6," + ;
|
||||
" nvl(pack_facturare.GetAnaliticByGrupUtilizatori(8,'" + lcScdReal + "'),'<NULL>') a7, nvl(pack_facturare.GetAnaliticByGrupUtilizatori(8,'" + lcSccReal + "'),'<NULL>') a8" + ;
|
||||
" from dual"
|
||||
lnOk = SQLEXEC(gnHandle, lcSql, "crsga")
|
||||
IF lnOk > 0 AND USED('crsga') AND RECCOUNT('crsga') = 1
|
||||
lcAsc4111 = ALLTRIM(crsga.a1)
|
||||
lcAsc461 = ALLTRIM(crsga.a2)
|
||||
lcAsc7583 = ALLTRIM(crsga.a3)
|
||||
lcAsc707 = ALLTRIM(crsga.a4)
|
||||
lcAsc7015 = ALLTRIM(crsga.a5)
|
||||
lcAsc418 = ALLTRIM(crsga.a6)
|
||||
lcAscScdReal = ALLTRIM(crsga.a7)
|
||||
lcAscSccReal = ALLTRIM(crsga.a8)
|
||||
ELSE
|
||||
DO AfLog WITH "BLOCAT: nu am putut citi analiticele de grup"
|
||||
DO Final
|
||||
ENDIF
|
||||
IF USED('crsga')
|
||||
USE IN crsga
|
||||
ENDIF
|
||||
* fallback NVL ca in cod: daca nota nu are ASCD/ASCC propriu, cel efectiv e cel din grup
|
||||
IF lcAscdReal == "<NULL>"
|
||||
lcAscdReal = lcAscScdReal
|
||||
ENDIF
|
||||
IF lcAsccReal == "<NULL>"
|
||||
lcAsccReal = lcAscSccReal
|
||||
ENDIF
|
||||
DO AfLog WITH "GetAnaliticByGrupUtilizatori(8,.): 4111=" + lcAsc4111 + " 461=" + lcAsc461 + " 7583=" + lcAsc7583 + " 707=" + lcAsc707 + " 7015=" + lcAsc7015 + " 418=" + lcAsc418
|
||||
DO AfLog WITH "ASCD/ASCC efective (dupa fallback NVL) ale politicii reale " + TRANSFORM(lnPolReala1) + ": ASCD=" + lcAscdReal + " ASCC=" + lcAsccReal
|
||||
|
||||
* nota 6 (PRODUCTIE, politica 41) si nota 5 (VANZARE MARFA) - statice, din baseline_12b.md sect. 6
|
||||
LOCAL lcN6Scd, lcN6Ascd, lcN6Scc, lcN6Ascc, lcN5Scd, lcN5Ascd, lcN5Scc, lcN5Ascc
|
||||
lcN6Scd = "4111"
|
||||
lcN6Ascd = lcAsc4111 && nota 6 are ASCD gol -> fallback grup
|
||||
lcN6Scc = "7015"
|
||||
lcN6Ascc = lcAsc7015 && nota 6 are ASCC gol -> fallback grup
|
||||
lcN5Scd = "4111"
|
||||
lcN5Ascd = "11"
|
||||
lcN5Scc = "707"
|
||||
lcN5Ascc = "11"
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* CAZ 1: nota pe rand (A.ID_NOTA) 461=7583, creata in tranzactie pe un articol fara nota proprie
|
||||
* Tinta S4b (D10 regula 1): SCD/SCC/ASCD/ASCC din nota RANDULUI = 461/7583/asc461/asc7583
|
||||
gcCaz = "[caz1-nota-pe-rand-461-7583] "
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; v_id_nota crm_note_vanzari.id_nota%TYPE; v_id_set crm_note_vanzari.id_set%TYPE; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 1; pack_facturare.nid_act := -901000; ] + ;
|
||||
[INSERT INTO crm_note_vanzari (denumire, id_util, id_sectie, dataora) VALUES ('PROBA S4B CAZ1', 8, 1, SYSDATE) RETURNING id_nota, id_set INTO v_id_nota, v_id_set; ] + ;
|
||||
[INSERT INTO note_contabile (explicatie, scd, scc, ordine, cu_tva, ptva, id_set, in_valuta, id_jtva_coloana) VALUES ('PROBA S4B CAZ1', '461', '7583', 1, 1, 21, v_id_set, 0, 35); ] + ;
|
||||
[UPDATE crm_politici_pret_art SET id_nota = v_id_nota WHERE id_pol = 41 AND id_articol = 4294507216; ] + ;
|
||||
[v_row.id_pol := 41; v_row.id_articol := 4294507216; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 10; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S4B CAZ1'; v_row.proc_tvav := 1.19; ] + ;
|
||||
[BEGIN v_res := pack_facturare.contabilizeaza_articol(v_row); ] + ;
|
||||
[EXCEPTION WHEN OTHERS THEN UPDATE crm_politici_pret_art SET id_nota = NULL WHERE id_pol = 41 AND id_articol = 4294507216; RAISE; END; ] + ;
|
||||
[UPDATE crm_politici_pret_art SET id_nota = NULL WHERE id_pol = 41 AND id_articol = 4294507216; END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
DO Verdict WITH lnOk > 0, "apelul a trecut fara eroare (azi nicio garda pe nota randului)"
|
||||
IF lnOk > 0
|
||||
DO LeaActTemp WITH -900999
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH "obtinut azi: SCD=" + ALLTRIM(crsact.scd) + " ASCD=" + ALLTRIM(crsact.ascd) + " SCC=" + ALLTRIM(crsact.scc) + " ASCC=" + ALLTRIM(crsact.ascc)
|
||||
DO AfLog WITH "asteptat S4b: SCD=461 ASCD=" + lcAsc461 + " SCC=7583 ASCC=" + lcAsc7583
|
||||
DO Verdict WITH ALLTRIM(crsact.scd) == "461" AND ALLTRIM(crsact.scc) == "7583", "SCD/SCC = nota randului (461/7583) - tinta S4b regula 1"
|
||||
ELSE
|
||||
DO Verdict WITH .F., "nicio linie in ACT_TEMP (neasteptat)"
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* CAZ 2: articol CONT=371 (CORESP->707) pe politica 41, cu nota 5 (ASCC=11) fortata temporar ca
|
||||
* nota implicita a politicii 41. Tinta S4b (D10 regula 2): SCC=707 (dedus), ASCC din grup - NU 11
|
||||
gcCaz = "[caz2-cont371-nota5-ascc-grup] "
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; v_orig NUMBER; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 1; pack_facturare.nid_act := -901100; ] + ;
|
||||
[SELECT id_nota INTO v_orig FROM crm_politici_preturi WHERE id_pol = 41; ] + ;
|
||||
[UPDATE crm_politici_preturi SET id_nota = 5 WHERE id_pol = 41; ] + ;
|
||||
[v_row.id_pol := 41; v_row.id_articol := 2910202427; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 10; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S4B CAZ2'; v_row.proc_tvav := 1.19; ] + ;
|
||||
[BEGIN v_res := pack_facturare.contabilizeaza_articol(v_row); ] + ;
|
||||
[EXCEPTION WHEN OTHERS THEN UPDATE crm_politici_preturi SET id_nota = v_orig WHERE id_pol = 41; RAISE; END; ] + ;
|
||||
[UPDATE crm_politici_preturi SET id_nota = v_orig WHERE id_pol = 41; END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
DO Verdict WITH lnOk > 0, "apelul a trecut fara eroare"
|
||||
IF lnOk > 0
|
||||
DO LeaActTemp WITH -901099
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH "obtinut azi: SCD=" + ALLTRIM(crsact.scd) + " ASCD=" + ALLTRIM(crsact.ascd) + " SCC=" + ALLTRIM(crsact.scc) + " ASCC=" + ALLTRIM(crsact.ascc)
|
||||
DO AfLog WITH "asteptat S4b: SCD=" + lcN5Scd + " ASCD=" + lcN5Ascd + " SCC=707 ASCC(grup)=" + lcAsc707 + " [azi foloseste ASCC-ul notei=11, nu grupul]"
|
||||
DO Verdict WITH ALLTRIM(crsact.scc) == "707" AND ALLTRIM(crsact.ascc) == lcAsc707, "SCC dedus (707) SI ASCC din grup (nu 11 din nota) - tinta S4b regula 2"
|
||||
ELSE
|
||||
DO Verdict WITH .F., "nicio linie in ACT_TEMP (neasteptat)"
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* CAZ 3: articol scratch (4294507213, DISCOUNT) cu CONT temporar '707' (incepe cu 7 -> dedus =
|
||||
* el insusi), pe politica 41 cu nota implicita neatinsa (nota 6). Tinta S4b: SCC=707 (dedus),
|
||||
* nu 7015 (nota politicii, cum e azi)
|
||||
gcCaz = "[caz3-cont707-dedus] "
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; v_orig_cont nom_articole.cont%TYPE; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 1; pack_facturare.nid_act := -901200; ] + ;
|
||||
[SELECT cont INTO v_orig_cont FROM nom_articole WHERE id_articol = 4294507213; ] + ;
|
||||
[UPDATE nom_articole SET cont = '707' WHERE id_articol = 4294507213; ] + ;
|
||||
[v_row.id_pol := 41; v_row.id_articol := 4294507213; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 10; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S4B CAZ3'; v_row.proc_tvav := 1.19; ] + ;
|
||||
[BEGIN v_res := pack_facturare.contabilizeaza_articol(v_row); ] + ;
|
||||
[EXCEPTION WHEN OTHERS THEN UPDATE nom_articole SET cont = v_orig_cont WHERE id_articol = 4294507213; RAISE; END; ] + ;
|
||||
[UPDATE nom_articole SET cont = v_orig_cont WHERE id_articol = 4294507213; END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
DO Verdict WITH lnOk > 0, "apelul a trecut fara eroare"
|
||||
IF lnOk > 0
|
||||
DO LeaActTemp WITH -901199
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH "obtinut azi: SCD=" + ALLTRIM(crsact.scd) + " ASCD=" + ALLTRIM(crsact.ascd) + " SCC=" + ALLTRIM(crsact.scc) + " ASCC=" + ALLTRIM(crsact.ascc)
|
||||
DO AfLog WITH "asteptat S4b: SCD=" + lcN6Scd + " ASCD=" + lcN6Ascd + " SCC=707 ASCC(grup)=" + lcAsc707
|
||||
DO Verdict WITH ALLTRIM(crsact.scc) == "707", "SCC = cont dedus (707), nu nota politicii (7015) - tinta S4b regula 2"
|
||||
ELSE
|
||||
DO Verdict WITH .F., "nicio linie in ACT_TEMP (neasteptat)"
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* CAZ 4: articol fara cont (CONT NULL), pe politica 41, fara nicio mutatie. Tinta S4b (regula 3,
|
||||
* fallback) = nota politicii = azi (4111/7015) - neschimbat de S4b
|
||||
gcCaz = "[caz4-faracont-notapolitica] "
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 1; pack_facturare.nid_act := -901300; ] + ;
|
||||
[v_row.id_pol := 41; v_row.id_articol := 4294507216; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 10; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S4B CAZ4'; v_row.proc_tvav := 1.19; ] + ;
|
||||
[v_res := pack_facturare.contabilizeaza_articol(v_row); END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
DO Verdict WITH lnOk > 0, "apelul a trecut fara eroare"
|
||||
IF lnOk > 0
|
||||
DO LeaActTemp WITH -901299
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH "obtinut azi: SCD=" + ALLTRIM(crsact.scd) + " ASCD=" + ALLTRIM(crsact.ascd) + " SCC=" + ALLTRIM(crsact.scc) + " ASCC=" + ALLTRIM(crsact.ascc)
|
||||
DO AfLog WITH "asteptat S4b: SCD=" + lcN6Scd + " ASCD=" + lcN6Ascd + " SCC=" + lcN6Scc + " ASCC=" + lcN6Ascc
|
||||
DO Verdict WITH ALLTRIM(crsact.scd) == lcN6Scd AND ALLTRIM(crsact.scc) == lcN6Scc, "SCD/SCC = nota politicii (4111/7015) - neschimbat de S4b"
|
||||
ELSE
|
||||
DO Verdict WITH .F., "nicio linie in ACT_TEMP (neasteptat)"
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* CAZ 5: politica de stoc cu ID_NOTA (al politicii) NULL temporar + articol fara cont. Tinta S4b:
|
||||
* FACT-033 (SCC final NULL -> refuz). Azi: nicio garda, linia se scrie cu SCD/SCC NULL (gaura V2)
|
||||
gcCaz = "[caz5-politicastoc-faranota-faracont] "
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; v_orig NUMBER; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 1; pack_facturare.nid_act := -901400; ] + ;
|
||||
[SELECT id_nota INTO v_orig FROM crm_politici_preturi WHERE id_pol = 41; ] + ;
|
||||
[UPDATE crm_politici_preturi SET id_nota = NULL WHERE id_pol = 41; ] + ;
|
||||
[v_row.id_pol := 41; v_row.id_articol := 4294507216; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 10; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S4B CAZ5'; v_row.proc_tvav := 1.19; ] + ;
|
||||
[BEGIN v_res := pack_facturare.contabilizeaza_articol(v_row); ] + ;
|
||||
[EXCEPTION WHEN OTHERS THEN UPDATE crm_politici_preturi SET id_nota = v_orig WHERE id_pol = 41; RAISE; END; ] + ;
|
||||
[UPDATE crm_politici_preturi SET id_nota = v_orig WHERE id_pol = 41; END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
IF lnOk <= 0
|
||||
DO LogErr
|
||||
DO Verdict WITH .T., "S4b implementat: garda a refuzat linia fara cont de venit (asteptarea planului)"
|
||||
DO VerifMesajFact033 WITH 4294507216, 41
|
||||
ELSE
|
||||
DO LeaActTemp WITH -901399
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH "obtinut azi: SCD=" + ALLTRIM(crsact.scd) + " SCC=" + ALLTRIM(crsact.scc) + " (asteptat S4b: eroare FACT-033, nicio linie)"
|
||||
DO Verdict WITH .F., "FACT-033 absenta - linia s-a scris cu SCD/SCC NULL (gaura V2, S4b trebuie sa o astupe)"
|
||||
ELSE
|
||||
DO Verdict WITH .F., "nicio linie si nicio eroare (neasteptat)"
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* CAZ 6: nota politicii cu AL DOILEA rand adaugat in NOTE_CONTABILE (acelasi ID_SET). Tinta S4b:
|
||||
* FACT-033 (garda pe nota cu mai mult de un rand). Azi: WHILE cursor_articol%FOUND dubleaza
|
||||
* venitul - 2 randuri in ACT_TEMP, fara nicio eroare
|
||||
gcCaz = "[caz6-nota-dublu-rand] "
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; v_orig NUMBER; v_id_nota crm_note_vanzari.id_nota%TYPE; v_id_set crm_note_vanzari.id_set%TYPE; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 1; pack_facturare.nid_act := -901500; ] + ;
|
||||
[SELECT id_nota INTO v_orig FROM crm_politici_preturi WHERE id_pol = 41; ] + ;
|
||||
[INSERT INTO crm_note_vanzari (denumire, id_util, id_sectie, dataora) VALUES ('PROBA S4B CAZ6', 8, 1, SYSDATE) RETURNING id_nota, id_set INTO v_id_nota, v_id_set; ] + ;
|
||||
[INSERT INTO note_contabile (explicatie, scd, scc, ordine, cu_tva, ptva, id_set, in_valuta, id_jtva_coloana) VALUES ('PROBA S4B CAZ6 rand1', '461', '7583', 1, 1, 21, v_id_set, 0, 35); ] + ;
|
||||
[INSERT INTO note_contabile (explicatie, scd, scc, ordine, cu_tva, ptva, id_set, in_valuta, id_jtva_coloana) VALUES ('PROBA S4B CAZ6 rand2', '462', '7584', 2, 1, 21, v_id_set, 0, 35); ] + ;
|
||||
[UPDATE crm_politici_preturi SET id_nota = v_id_nota WHERE id_pol = 41; ] + ;
|
||||
[v_row.id_pol := 41; v_row.id_articol := 4294507216; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 10; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S4B CAZ6'; v_row.proc_tvav := 1.19; ] + ;
|
||||
[BEGIN v_res := pack_facturare.contabilizeaza_articol(v_row); ] + ;
|
||||
[EXCEPTION WHEN OTHERS THEN UPDATE crm_politici_preturi SET id_nota = v_orig WHERE id_pol = 41; RAISE; END; ] + ;
|
||||
[UPDATE crm_politici_preturi SET id_nota = v_orig WHERE id_pol = 41; END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
IF lnOk <= 0
|
||||
DO LogErr
|
||||
DO Verdict WITH .T., "S4b implementat: garda a refuzat nota cu mai mult de un rand (asteptarea planului)"
|
||||
DO VerifMesajFact033 WITH 4294507216, 41
|
||||
ELSE
|
||||
LOCAL lnCnt
|
||||
lnCnt = 0
|
||||
IF USED('crscnt')
|
||||
USE IN crscnt
|
||||
ENDIF
|
||||
lnOk = SQLEXEC(gnHandle, "select count(*) cnt from act_temp where id_act between -901499 and -901498", "crscnt")
|
||||
IF lnOk > 0 AND USED('crscnt')
|
||||
lnCnt = crscnt.cnt
|
||||
ENDIF
|
||||
IF USED('crscnt')
|
||||
USE IN crscnt
|
||||
ENDIF
|
||||
DO AfLog WITH "obtinut azi: " + TRANSFORM(lnCnt) + " randuri in ACT_TEMP (asteptat S4b: 0, eroare FACT-033)"
|
||||
IF lnCnt = 2
|
||||
DO LeaActTemp WITH -901499
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH " rand1: SCD=" + ALLTRIM(crsact.scd) + " SCC=" + ALLTRIM(crsact.scc)
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
DO LeaActTemp WITH -901498
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH " rand2: SCD=" + ALLTRIM(crsact.scd) + " SCC=" + ALLTRIM(crsact.scc)
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
ENDIF
|
||||
DO Verdict WITH .F., "FACT-033 absenta - venitul se dubleaza tacut (" + TRANSFORM(lnCnt) + " randuri), S4b trebuie sa refuze"
|
||||
ENDIF
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* CAZ 7: acelasi articol D5 (id=1, CONT=371) pe politica REALA (nu de stoc), fara nicio mutatie.
|
||||
* Tinta S4b: nota politicii reale, neschimbata - regulile D9/D10 nu ating politicile reale
|
||||
gcCaz = "[caz7-articol1-politica-reala] "
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 1; pack_facturare.nid_act := -901600; ] + ;
|
||||
[v_row.id_pol := ] + TRANSFORM(lnPolReala1) + [; v_row.id_articol := 1; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 10; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S4B CAZ7'; v_row.proc_tvav := 1.19; ] + ;
|
||||
[v_res := pack_facturare.contabilizeaza_articol(v_row); END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
DO Verdict WITH lnOk > 0, "apelul a trecut fara eroare"
|
||||
IF lnOk > 0
|
||||
DO LeaActTemp WITH -901599
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH "obtinut azi: SCD=" + ALLTRIM(crsact.scd) + " ASCD=" + ALLTRIM(crsact.ascd) + " SCC=" + ALLTRIM(crsact.scc) + " ASCC=" + ALLTRIM(crsact.ascc)
|
||||
DO AfLog WITH "asteptat (azi si dupa S4b, neschimbat): SCD=" + lcScdReal + " ASCD=" + lcAscdReal + " SCC=" + lcSccReal + " ASCC=" + lcAsccReal
|
||||
DO Verdict WITH ALLTRIM(crsact.scd) == lcScdReal AND ALLTRIM(crsact.scc) == lcSccReal, "SCD/SCC = nota politicii reale, neschimbat de S4b"
|
||||
ELSE
|
||||
DO Verdict WITH .F., "nicio linie in ACT_TEMP (neasteptat)"
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* CAZ 8: politica 32 (HOTEL TAXE), fara nota deloc. Tinta S4b: FACT-033. Azi: SCD/SCC NULL, fara eroare
|
||||
gcCaz = "[caz8-politica32-faranota] "
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 1; pack_facturare.nid_act := -901700; ] + ;
|
||||
[v_row.id_pol := 32; v_row.id_articol := ] + TRANSFORM(lnArtPol32) + [; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 10; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S4B CAZ8'; v_row.proc_tvav := 1.19; ] + ;
|
||||
[v_res := pack_facturare.contabilizeaza_articol(v_row); END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
IF lnOk <= 0
|
||||
DO LogErr
|
||||
DO Verdict WITH .T., "S4b implementat: garda a refuzat politica 32 fara nota (asteptarea planului)"
|
||||
DO VerifMesajFact033 WITH lnArtPol32, 32
|
||||
ELSE
|
||||
DO LeaActTemp WITH -901699
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH "obtinut azi: SCD=" + ALLTRIM(crsact.scd) + " SCC=" + ALLTRIM(crsact.scc) + " (asteptat S4b: eroare FACT-033)"
|
||||
ENDIF
|
||||
DO Verdict WITH .F., "FACT-033 absenta - politica reala fara nota trece tacut azi"
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* CAZ 9: politica 33 (HOTEL CAZARE), fara nota deloc. Tinta S4b: FACT-033. Azi: idem caz 8
|
||||
gcCaz = "[caz9-politica33-faranota] "
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 1; pack_facturare.nid_act := -901800; ] + ;
|
||||
[v_row.id_pol := 33; v_row.id_articol := ] + TRANSFORM(lnArtPol33) + [; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 10; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S4B CAZ9'; v_row.proc_tvav := 1.19; ] + ;
|
||||
[v_res := pack_facturare.contabilizeaza_articol(v_row); END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
IF lnOk <= 0
|
||||
DO LogErr
|
||||
DO Verdict WITH .T., "S4b implementat: garda a refuzat politica 33 fara nota (asteptarea planului)"
|
||||
DO VerifMesajFact033 WITH lnArtPol33, 33
|
||||
ELSE
|
||||
DO LeaActTemp WITH -901799
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH "obtinut azi: SCD=" + ALLTRIM(crsact.scd) + " SCC=" + ALLTRIM(crsact.scc) + " (asteptat S4b: eroare FACT-033)"
|
||||
ENDIF
|
||||
DO Verdict WITH .F., "FACT-033 absenta - politica reala fara nota trece tacut azi"
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* CAZ 10: politica reala D5 (a articolului 1) cu ID_NOTA pus pe NULL temporar. Tinta S4b:
|
||||
* FACT-033 (garda "pe orice politica", nu doar de stoc). Azi: SCD/SCC NULL, fara eroare
|
||||
gcCaz = "[caz10-politicareala-notanull] "
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; v_orig NUMBER; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 1; pack_facturare.nid_act := -901900; ] + ;
|
||||
[SELECT id_nota INTO v_orig FROM crm_politici_preturi WHERE id_pol = ] + TRANSFORM(lnPolReala1) + [; ] + ;
|
||||
[UPDATE crm_politici_preturi SET id_nota = NULL WHERE id_pol = ] + TRANSFORM(lnPolReala1) + [; ] + ;
|
||||
[v_row.id_pol := ] + TRANSFORM(lnPolReala1) + [; v_row.id_articol := 1; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 10; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S4B CAZ10'; v_row.proc_tvav := 1.19; ] + ;
|
||||
[BEGIN v_res := pack_facturare.contabilizeaza_articol(v_row); ] + ;
|
||||
[EXCEPTION WHEN OTHERS THEN UPDATE crm_politici_preturi SET id_nota = v_orig WHERE id_pol = ] + TRANSFORM(lnPolReala1) + [; RAISE; END; ] + ;
|
||||
[UPDATE crm_politici_preturi SET id_nota = v_orig WHERE id_pol = ] + TRANSFORM(lnPolReala1) + [; END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
IF lnOk <= 0
|
||||
DO LogErr
|
||||
DO Verdict WITH .T., "S4b implementat: garda a refuzat politica reala fara nota (asteptarea planului)"
|
||||
DO VerifMesajFact033 WITH 1, lnPolReala1
|
||||
ELSE
|
||||
DO LeaActTemp WITH -901899
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH "obtinut azi: SCD=" + ALLTRIM(crsact.scd) + " SCC=" + ALLTRIM(crsact.scc) + " (asteptat S4b: eroare FACT-033)"
|
||||
ENDIF
|
||||
DO Verdict WITH .F., "FACT-033 absenta - garda azi nu exista pe nicio politica"
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
|
||||
* verificare restaurare politica reala (defensiv, inainte de ROLLBACK-ul final)
|
||||
lnOk = SQLEXEC(gnHandle, "select id_nota from crm_politici_preturi where id_pol = " + TRANSFORM(lnPolReala1), "crschk")
|
||||
IF lnOk > 0 AND USED('crschk') AND RECCOUNT('crschk') = 1
|
||||
DO Verdict WITH crschk.id_nota == lnNotaRealaOrig, "restaurare in tranzactie: politica reala " + TRANSFORM(lnPolReala1) + " are din nou id_nota=" + TRANSFORM(lnNotaRealaOrig)
|
||||
ENDIF
|
||||
IF USED('crschk')
|
||||
USE IN crschk
|
||||
ENDIF
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* CAZ 11 (aviz, ntip=22): articol CONT=371 (CORESP->707) pe politica 41, nota implicita restaurata
|
||||
* (nota 6). SCD e fortat 418 pe avize INDIFERENT de S4b (cod neschimbat); SCC: azi=nota (7015),
|
||||
* tinta S4b=dedus (707)
|
||||
gcCaz = "[caz11-aviz-scd418-sccdedus] "
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 22; pack_facturare.nid_act := -902000; ] + ;
|
||||
[v_row.id_pol := 41; v_row.id_articol := 2910202427; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 10; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S4B CAZ11'; v_row.proc_tvav := 1.19; ] + ;
|
||||
[v_res := pack_facturare.contabilizeaza_articol(v_row); END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
DO Verdict WITH lnOk > 0, "apelul a trecut fara eroare"
|
||||
IF lnOk > 0
|
||||
DO LeaActTemp WITH -901999
|
||||
IF USED('crsact') AND RECCOUNT('crsact') = 1
|
||||
DO AfLog WITH "obtinut azi: SCD=" + ALLTRIM(crsact.scd) + " ASCD=" + ALLTRIM(crsact.ascd) + " SCC=" + ALLTRIM(crsact.scc) + " ASCC=" + ALLTRIM(crsact.ascc)
|
||||
DO AfLog WITH "asteptat S4b: SCD=418 ASCD=" + lcAsc418 + " SCC=707 ASCC(grup)=" + lcAsc707
|
||||
DO Verdict WITH ALLTRIM(crsact.scd) == "418", "SCD=418 pe aviz - neschimbat de S4b (cod deja existent)"
|
||||
DO Verdict WITH ALLTRIM(crsact.scc) == "707", "SCC = cont dedus (707), nu nota politicii (7015) - tinta S4b regula 2, valabila si pe aviz"
|
||||
ELSE
|
||||
DO Verdict WITH .F., "nicio linie in ACT_TEMP (neasteptat)"
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
|
||||
DO Final
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
PROCEDURE LogErr
|
||||
LOCAL laErr[1]
|
||||
AERROR(laErr)
|
||||
gcErrMsg = TRANSFORM(laErr[2])
|
||||
DO AfLog WITH " eroare reala: " + TRANSFORM(laErr[1]) + " / " + gcErrMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerifMesajFact033
|
||||
* verifica ca mesajul FACT-033 (gcErrMsg, populat de LogErr) numeste articolul si politica -
|
||||
* denumirile vin din tabele, in afara pachetului testat
|
||||
LPARAMETERS tnIdArticol, tnIdPol
|
||||
LOCAL lcDenArt, lcDenPol
|
||||
lcDenArt = ""
|
||||
lcDenPol = ""
|
||||
IF USED('crsver')
|
||||
USE IN crsver
|
||||
ENDIF
|
||||
IF SQLEXEC(gnHandle, "select denumire from nom_articole where id_articol = " + TRANSFORM(tnIdArticol), "crsver") > 0 AND USED('crsver')
|
||||
lcDenArt = ALLTRIM(crsver.denumire)
|
||||
ENDIF
|
||||
IF USED('crsver')
|
||||
USE IN crsver
|
||||
ENDIF
|
||||
IF SQLEXEC(gnHandle, "select nume_lista_preturi from crm_politici_preturi where id_pol = " + TRANSFORM(tnIdPol), "crsver") > 0 AND USED('crsver')
|
||||
lcDenPol = ALLTRIM(crsver.nume_lista_preturi)
|
||||
ENDIF
|
||||
IF USED('crsver')
|
||||
USE IN crsver
|
||||
ENDIF
|
||||
DO Verdict WITH !EMPTY(lcDenArt) AND !EMPTY(lcDenPol) AND lcDenArt $ gcErrMsg AND lcDenPol $ gcErrMsg, ;
|
||||
"mesajul FACT-033 numeste articolul (" + lcDenArt + ") si politica (" + lcDenPol + "): " + gcErrMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE LeaActTemp
|
||||
LPARAMETERS tnIdAct
|
||||
LOCAL lnRet
|
||||
IF USED('crsact')
|
||||
USE IN crsact
|
||||
ENDIF
|
||||
lnRet = SQLEXEC(gnHandle, "select nvl(scd,'<NULL>') scd, nvl(ascd,'<NULL>') ascd, nvl(scc,'<NULL>') scc, nvl(ascc,'<NULL>') ascc from act_temp where id_act = " + TRANSFORM(tnIdAct), "crsact")
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Verdict
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO AfLog WITH "PASS: " + gcCaz + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Final
|
||||
LOCAL lnOk
|
||||
gcCaz = "[final] "
|
||||
lnOk = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk)
|
||||
IF TYPE('gnTransOriginal') = 'N'
|
||||
SQLSETPROP(gnHandle, "Transactions", gnTransOriginal)
|
||||
ENDIF
|
||||
DO AfLog WITH "TOTAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail)
|
||||
DO AfLog WITH "END " + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
763
utile/Teste/facturare_unificat/probe_12b_s4b_proba_b_dupa.prg
Normal file
763
utile/Teste/facturare_unificat/probe_12b_s4b_proba_b_dupa.prg
Normal file
@@ -0,0 +1,763 @@
|
||||
* probe_12b_s4b_proba_b_dupa.prg
|
||||
* Plan 12b, S4b partea 3 - Proba B "DUPA": copie a probe_12b_s4b_proba_b_inainte.prg (mecanica
|
||||
* nemodificata), aceeasi emitere reala (tip_incasare=1, "Fara incasare", forma veche) - client
|
||||
* RAJA (id_part=463), plaja utilizatorului 8. Se ruleaza PE PACHETUL NOU (wip12_07, D10 aplicat),
|
||||
* ca sa produca documentul comparat cu cel "inainte" (id_vanzare=1883) prin
|
||||
* lib_comparatie_documente.CompAct.
|
||||
*
|
||||
* Criteriul 1 de "gata" al S3b, PROBA REALA (nu structurala): emite documente REALE in Oracle
|
||||
* (MARIUSM_AUTO@ROA_CENTRAL, aprobat explicit de Marius) prin fluxul de emitere efectiv, pe
|
||||
* fiecare din cele patru tipuri de incasare (1=Fara incasare, 2=Chitanta, 3=Bon fiscal, 4=POS/Card),
|
||||
* o data pe formularul vechi (frm_facturare_articole) si o data pe cel unificat
|
||||
* (frm_facturare_articole2), si compara randurile persistate in VANZARI dupa commit.
|
||||
*
|
||||
* Sursa documentului e cursor_preturi (lista de preturi, client RAJA id_part=463) cu tnTip=22 -
|
||||
* singura combinatie confirmata prin proba read-only (probe_emitere_reala.prg) ca intoarce articole
|
||||
* in acest mediu; tnTip=5 (FACTURA direct) da Reccount=0. Numerotarea/serie a documentului ramane
|
||||
* cea naturala pentru tnTip=22 (AVIZ, nIdTipDoc=6, plaja globala) - neatinsa, nu conteaza pentru
|
||||
* criteriul de paritate a INCASARII, care e independent de seria documentului.
|
||||
*
|
||||
* Mecanica bazata pe COMUN\utile\Teste\editare_factura\creeaza_documente_s8.prg (mediu Oracle real
|
||||
* + clase de productie, dovedit ca emite documente reale pentru tnTip=22): dialogul modal de antet
|
||||
* e inlocuit cu setare directa poDate (ca acolo), iar "Do Form verificare" (ofacturare.vc2:14404 /
|
||||
* :20126) e ocolit cu acelasi stub versionat COMUN\utile\Teste\achizitie_import\stub_verificare\
|
||||
* (SET PATH cu el primul).
|
||||
*
|
||||
* Diferenta fata de creeaza_documente_s8.prg: al doilea modal (frm_alte_date, doar pe calea veche)
|
||||
* NU e doar "confirmat" - un driver pe Timer ii seteaza opt_incasat.Value la tipul cerut INAINTE
|
||||
* sa-i cheme do_termin(), exact tehnica validata structural in test_s3b_paritate_emitere.prg (setarea
|
||||
* de .Value declanseaza opt_incasat.ProgrammaticChange -> actualizeaza_tipincasare(), cod real).
|
||||
* Pe calea noua nu exista al doilea modal (opt_incasat e inline pe formular): se seteaza direct pe
|
||||
* goFrm inainte de goFrm.do_termin().
|
||||
*
|
||||
* De ce NU se compara nr_incasare/NR_INCASAT intre vechi si nou (asa cum a facut suita structurala):
|
||||
* acolo numerele erau dezalocate dupa fiecare tip, deci acelasi numar fizic se realoca in faza 2.
|
||||
* Aici documentele raman scrise (nu se dezaloca nimic dupa un commit reusit), deci vechi si nou aloca
|
||||
* NUMERE DIFERITE, consecutive, din aceeasi plaja - egalitatea lor ar fi o eroare, nu o dovada.
|
||||
* Paritatea reala verificata e (a) consistenta interna - VANZARI.NR_INCASAT persistat == poDate.nr_incasare
|
||||
* capturat chiar inainte de scriere, pe fiecare document in parte, si (b) egalitatea intre vechi/nou a
|
||||
* CODULUI de tip (VANZARI.TIP_INCASAT) si a SUMEI (VANZARI.SUMA_INCASAT) - marimi care nu depind de
|
||||
* alocarea secventiala si trebuie sa fie identice daca cele doua cai proceseaza acelasi lcListaIncasare.
|
||||
*
|
||||
* CONSUMA DATE REALE: fiecare pereche (tip, forma) scrie un document nou in VANZARI (client 463),
|
||||
* iar tipurile 2/3/4 aloca si un numar real de chitanta/bon fiscal/pos (serii 16/3/26). Niciun
|
||||
* rollback, nicio stergere - documentele raman in schema, de inspectat de Marius.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\probe_12b_s4b_proba_b_dupa.prg"
|
||||
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_12b_s4b_proba_b_dupa.log
|
||||
|
||||
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
|
||||
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_12b_s4b_proba_b_dupa.log"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcLog)
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
ON ERROR DO S3bErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL lcAppPathLocal, lcSql
|
||||
lcAppPathLocal = "D:\ROA\ROAFACTURARE\"
|
||||
|
||||
*-- stub_verificare PRIMUL (SET PATH plain, nu ADDITIVE): test_init_env_auto_roafacturare.prg
|
||||
*-- face el insusi SET PATH TO ... ADDITIVE mai jos, care ADAUGA dupa (nu inaintea) intrarilor
|
||||
*-- deja existente - asta pastreaza stub_verificare cu prioritate fata de COMUN\FERESTRE, ca
|
||||
*-- "Do Form verificare" (ofacturare.vc2:14404 / :20126) sa rezolve la stub, nu la formularul real
|
||||
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\achizitie_import\stub_verificare"
|
||||
|
||||
*-- mediul REAL, identic cu cel folosit de test_s3b_paritate_emitere.prg (deja dovedit ca
|
||||
*-- instantiaza fara agatare frm_facturare_articole2 - orice reconstructie manuala a acestui
|
||||
*-- mediu s-a dovedit incompleta si a agatat headless in interiorul Init-ului formularului nou,
|
||||
*-- la constructia coloanei Gestiune din grd_factura (vezi raport)
|
||||
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 S3bLog WITH 'EROARE: conectare Oracle esuata'
|
||||
DO S3bFinal
|
||||
ENDIF
|
||||
DO S3bLog WITH 'test_init_env_auto_roafacturare OK, gnHandle=' + TRANSFORM(gnHandle)
|
||||
|
||||
*-- fara asta, un lacat Oracle blocheaza rularea la infinit, invizibil in log
|
||||
SQLSETPROP(gnHandle, "QueryTimeOut", 45)
|
||||
|
||||
*-- clase suplimentare, necesare pentru grd_factura (coloane cu combo pe cursor SQL)
|
||||
SET PATH TO (lcAppPathLocal + "COMUN\utile\gridextras") ADDITIVE
|
||||
SET CLASSLIB TO gridextras.vcx ADDITIVE
|
||||
SET CLASSLIB TO _cb_base.vcx ADDITIVE
|
||||
DO S3bLog WITH 'SET CLASSLIB suplimentar OK'
|
||||
|
||||
*-- mock amessagebox: la nume duplicat castiga fisierul de proceduri deschis cel mai recent
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
DO S3bLog WITH 'mock_amessagebox OK'
|
||||
|
||||
*-- 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
|
||||
|
||||
*-- initializare REALA a optiunilor de program (tehnica din test_s3b_paritate_emitere.prg) -
|
||||
*-- creeaza dinamic globalele gnXxx/glXxx/gcXxx din tabela OPTIUNI; suprascrise imediat dupa
|
||||
*-- cu valorile care bypaseaza dialogurile per-linie in mediul headless
|
||||
IF !actualizeaza_optiuni_program()
|
||||
DO S3bLog WITH 'EROARE: actualizeaza_optiuni_program()'
|
||||
DO S3bFinal
|
||||
ENDIF
|
||||
gnScadereStoc = 0
|
||||
gnModTotFact = 0
|
||||
gnFactSeturi = 0
|
||||
gnListareAvizBonFiscal = 0
|
||||
gnid_part_casa = 0
|
||||
*-- 167: singura sucursala cu plaje pentru chitanta/bon fiscal/pos in acest mediu (16/3/26);
|
||||
*-- verificat READ-ONLY (probe_emitere_reala.prg) ca nu schimba Reccount(cursor_preturi)
|
||||
gnIdSucursala = 167
|
||||
lcSql = [begin pack_contafin.set_id_sucursala(?gnIdSucursala); end;]
|
||||
goExecutor.oExecuta(lcSql)
|
||||
DO S3bLog WITH 'actualizeaza_optiuni_program OK, gnScadereStoc=' + TRANSFORM(gnScadereStoc) + ' gnIdSucursala=' + TRANSFORM(gnIdSucursala)
|
||||
|
||||
PUBLIC gcMockUltimMesaj, gnMockUltimTip
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
*----- driver: conduce frm_alte_date (singurul modal ramas, doar pe calea veche) -----
|
||||
PUBLIC goDriverAD, glDlgTratatAD, gnTipIncasareCerut, gnNrIncasareCapturat, gcClaseVazute
|
||||
glDlgTratatAD = .F.
|
||||
gnTipIncasareCerut = 1
|
||||
gnNrIncasareCapturat = 0
|
||||
gcClaseVazute = ';'
|
||||
goDriverAD = CREATEOBJECT('driverAlteDateAD')
|
||||
_SCREEN.AddObject('tmrDrvAD', 'Timer')
|
||||
_SCREEN.tmrDrvAD.Interval = 200
|
||||
BINDEVENT(_SCREEN.tmrDrvAD, 'Timer', goDriverAD, 'Executa')
|
||||
_SCREEN.tmrDrvAD.Enabled = .T.
|
||||
*-- _SCREEN ramane invizibil (default -A -T), ca in test_s3b_paritate_emitere.prg - un GETFILE()
|
||||
*-- nativ (dialog "Open") aparut la o SET SCREEN VISIBLE = .T. a agatat rularea (vezi raport)
|
||||
_SCREEN.Caption = 'S3b - emitere reala (paritate incasare vechi/nou)'
|
||||
DO S3bLog WITH 'driver+timer pregatiti'
|
||||
|
||||
*-- pre-proba plajelor 3/16/26 - plasa de siguranta, evita blocaj invizibil daca lipsesc
|
||||
DO S3bLog WITH 'pre-proba plaje: tip3=' + TRANSFORM(RanduriSerii(3)) + ' tip16=' + TRANSFORM(RanduriSerii(16)) + ;
|
||||
' tip26=' + TRANSFORM(RanduriSerii(26))
|
||||
|
||||
*-- stare INAINTE: ultimul NR_INCASAT emis pe fiecare tip de incasare, in TOATA schema
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + '===== STARE INAINTE (MAX(NR_INCASAT) pe tip_incasat, toata schema) ====='
|
||||
DO LogStareMaxIncasat
|
||||
|
||||
CREATE CURSOR crsRezultate (tip_incasare N(1), forma C(10), id_vanzare N(10), cod N(10), ;
|
||||
serie_act C(10), id_fact N(10), nr_incasare_asteptat N(10), nr_incasat N(10), ;
|
||||
tip_incasat N(10), suma_incasat N(18,2), serie_incasat C(10), total_cu_tva N(18,2))
|
||||
|
||||
LOCAL laNumeTip[4]
|
||||
laNumeTip[1] = 'Fara incasare'
|
||||
laNumeTip[2] = 'Chitanta'
|
||||
laNumeTip[3] = 'Bon fiscal'
|
||||
laNumeTip[4] = 'POS Card'
|
||||
|
||||
*-- FORMA NOUA: BLOCATA in aceasta sesiune (vezi docs\raport_s3b_emitere_reala.md) -
|
||||
*-- frm_facturare_articole2 agata la CREATEOBJECT (Init -> grd_factura.cGestiune.cCboGestiune
|
||||
*-- -> _cb_base.vc2 combosql.Init:589 -> RefreshData(0):826 -> SelectData():832 -> un dialog
|
||||
*-- nativ "Open" real, needeterminat cauzal, indiferent de mediu/tip/vizibilitate _SCREEN).
|
||||
*-- Ramane .F. neconditionat aici; DACA se rezolva blocajul, se schimba in .T. pentru ambele.
|
||||
PUBLIC glIncercaFormaNoua
|
||||
glIncercaFormaNoua = .F.
|
||||
|
||||
LOCAL lnTip, lnIdVz, lnIdVzDupa
|
||||
lnIdVzDupa = 0
|
||||
FOR lnTip = 1 TO 1
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + '===== TIP ' + TRANSFORM(lnTip) + ' (' + laNumeTip[lnTip] + ') - FORMA VECHE (tnTip=22) ====='
|
||||
lnIdVz = CreeazaDocumentIncasare(lnTip, .F.)
|
||||
DO InregistreazaRezultat WITH lnTip, 'vechi', lnIdVz
|
||||
IF lnIdVz > 0
|
||||
DO LogLiniiDocument WITH lnIdVz
|
||||
lnIdVzDupa = lnIdVz
|
||||
ENDIF
|
||||
|
||||
IF glIncercaFormaNoua
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + '===== TIP ' + TRANSFORM(lnTip) + ' (' + laNumeTip[lnTip] + ') - FORMA NOUA (tnTip=3) ====='
|
||||
lnIdVz = CreeazaDocumentIncasare(lnTip, .T.)
|
||||
DO InregistreazaRezultat WITH lnTip, 'nou', lnIdVz
|
||||
ELSE
|
||||
DO S3bLog WITH ' forma noua SARITA (blocata, vezi raport)'
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + '===== COMPARATIE VECHI / NOU, PE TIP ====='
|
||||
DO ComparaRezultate
|
||||
|
||||
*-- 12b S4b partea 3: CompAct intre documentul "inainte" (1883, SSS/100135, pachetul vechi)
|
||||
*-- si documentul "dupa" tocmai emis (pachetul nou, wip12_07) - aceeasi emitere, acelasi client.
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + '===== CompAct: SSS/100135 (inainte) vs documentul nou (dupa) ====='
|
||||
IF lnIdVzDupa > 0
|
||||
LOCAL lcSerieDupa, lnNractDupa, lnQAct
|
||||
lnQAct = goExecutor.oExecute([select serie_act, numar_act from vanzari where id_vanzare=] + ;
|
||||
TRANSFORM(lnIdVzDupa), 'crsVzDupa')
|
||||
IF lnQAct > 0 AND RECCOUNT('crsVzDupa') = 1
|
||||
lcSerieDupa = ALLTRIM(crsVzDupa.serie_act)
|
||||
lnNractDupa = crsVzDupa.numar_act
|
||||
USE IN crsVzDupa
|
||||
DO S3bLog WITH ' document dupa: serie_act=' + lcSerieDupa + ' numar_act=' + TRANSFORM(lnNractDupa) + ;
|
||||
' id_vanzare=' + TRANSFORM(lnIdVzDupa)
|
||||
=CompAct('SSS', 100135, lcSerieDupa, lnNractDupa, '12b S4b proba B inainte/dupa')
|
||||
ELSE
|
||||
DO S3bLog WITH ' EROARE: nu s-a putut citi serie_act/numar_act pentru id_vanzare=' + TRANSFORM(lnIdVzDupa)
|
||||
ENDIF
|
||||
ELSE
|
||||
DO S3bLog WITH ' EROARE: documentul dupa nu s-a scris (id_vanzare<=0), CompAct sarit'
|
||||
ENDIF
|
||||
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + '===== STARE DUPA (MAX(NR_INCASAT) pe tip_incasat, toata schema) ====='
|
||||
DO LogStareMaxIncasat
|
||||
|
||||
_SCREEN.tmrDrvAD.Enabled = .F.
|
||||
DO S3bFinal
|
||||
|
||||
CATCH TO loExc
|
||||
DO S3bLog WITH 'CATCH TOP-LEVEL ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO S3bFinal
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE S3bLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13)+CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE S3bErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO S3bLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE S3bFinal
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + 'TOTAL pass=' + TRANSFORM(gnPass) + ' fail=' + TRANSFORM(gnFail)
|
||||
DO S3bLog WITH 'END ' + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Assert
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO S3bLog WITH 'PASS: ' + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO S3bLog WITH 'FAIL: ' + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
*-- cate randuri de plaja intoarce verifica_cursor_serii pentru un tip de document, fara sa aloce
|
||||
FUNCTION RanduriSerii
|
||||
LPARAMETERS tnIdTipDoc
|
||||
LOCAL lnOk, lnRanduri, lcSql
|
||||
LOCAL ARRAY laErr[1]
|
||||
PRIVATE pnIdTipDoc, pnRezultat
|
||||
pnIdTipDoc = tnIdTipDoc
|
||||
pnRezultat = 0
|
||||
lnRanduri = -1
|
||||
lcSql = "{call " + gcS + ".pack_serii_numere.verifica_cursor_serii(?pnIdTipDoc,?gnIdUtil,?gnIdSucursala,?@pnRezultat)}"
|
||||
lnOk = SQLEXEC(gnHandle, lcSql, "crsprobapl")
|
||||
IF lnOk > 0
|
||||
lnRanduri = RECCOUNT("crsprobapl")
|
||||
USE IN (SELECT("crsprobapl"))
|
||||
ELSE
|
||||
AERROR(laErr)
|
||||
DO S3bLog WITH 'pre-proba plaje tip ' + TRANSFORM(tnIdTipDoc) + ' ESEC: ' + TRANSFORM(laErr[2])
|
||||
ENDIF
|
||||
RETURN lnRanduri
|
||||
ENDFUNC
|
||||
|
||||
*-- 12b S4b: liniile VANZARI_DETALII (id_pol) + randurile ACT (SCD/SCC) ale documentului, ca
|
||||
*-- instantaneu "inainte" pentru CompAct (partea 3) - client/document fixe, notate in stare.
|
||||
PROCEDURE LogLiniiDocument
|
||||
LPARAMETERS tnIdVz
|
||||
LOCAL lnQ
|
||||
lnQ = goExecutor.oExecute([select id_articol, id_pol, cont from vanzari_detalii where sters=0 and id_vanzare=] + ;
|
||||
TRANSFORM(tnIdVz) + [ order by id_articol], 'crsLiniiVz')
|
||||
IF lnQ > 0
|
||||
SELECT crsLiniiVz
|
||||
SCAN
|
||||
DO S3bLog WITH ' [proba B linie] id_articol=' + TRANSFORM(id_articol) + ' id_pol=' + TRANSFORM(NVL(id_pol,-1)) + ' cont=' + TRANSFORM(NVL(cont,''))
|
||||
ENDSCAN
|
||||
USE IN crsLiniiVz
|
||||
ENDIF
|
||||
lnQ = goExecutor.oExecute([select scd, scc, ascd, ascc, id_venchelt from act a ] + ;
|
||||
[join vanzari v on v.serie_act=a.serie_act and v.numar_act=a.nract ] + ;
|
||||
[where a.sters=0 and v.id_vanzare=] + TRANSFORM(tnIdVz) + [ order by scd, scc], 'crsActVz')
|
||||
IF lnQ > 0
|
||||
SELECT crsActVz
|
||||
SCAN
|
||||
DO S3bLog WITH ' [proba B ACT] SCD=' + TRANSFORM(NVL(scd,'')) + ' SCC=' + TRANSFORM(NVL(scc,'')) + ;
|
||||
' ASCD=' + TRANSFORM(NVL(ascd,'')) + ' ASCC=' + TRANSFORM(NVL(ascc,'')) + ' ID_VENCHELT=' + TRANSFORM(NVL(id_venchelt,-1))
|
||||
ENDSCAN
|
||||
USE IN crsActVz
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE LogStareMaxIncasat
|
||||
LOCAL lnQ
|
||||
lnQ = goExecutor.oExecute([select tip_incasat, max(nr_incasat) as maxnr, count(*) as nr ] + ;
|
||||
[from vanzari where tip_incasat is not null group by tip_incasat order by tip_incasat], 'crsMaxInc')
|
||||
IF lnQ > 0
|
||||
SELECT crsMaxInc
|
||||
SCAN
|
||||
DO S3bLog WITH ' tip_incasat=' + TRANSFORM(tip_incasat) + ' max(nr_incasat)=' + TRANSFORM(maxnr) + ' nr_documente=' + TRANSFORM(nr)
|
||||
ENDSCAN
|
||||
USE IN crsMaxInc
|
||||
ELSE
|
||||
DO S3bLog WITH ' EROARE citire stare incasat: ' + goExecutor.oPrelucrareEroare()
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
*-- citeste randul VANZARI scris pentru id_vanzare si-l adauga in crsRezultate
|
||||
PROCEDURE InregistreazaRezultat
|
||||
LPARAMETERS tnTip, tcForma, tnIdVz
|
||||
DO Assert WITH tnIdVz > 0, '[' + tcForma + ' tip=' + TRANSFORM(tnTip) + '] documentul exista in VANZARI (jonctiune serie_act+nract), e=' + TRANSFORM(tnIdVz)
|
||||
IF tnIdVz <= 0
|
||||
DO S3bLog WITH ' ' + tcForma + ' tip=' + TRANSFORM(tnTip) + ': documentul NU s-a scris (id_vanzare=0), fara rand in VANZARI'
|
||||
INSERT INTO crsRezultate (tip_incasare, forma, id_vanzare) VALUES (tnTip, tcForma, 0)
|
||||
RETURN
|
||||
ENDIF
|
||||
LOCAL lnQ
|
||||
lnQ = goExecutor.oExecute([select id_vanzare, cod, serie_act, nvl(id_fact,0) as id_fact, ] + ;
|
||||
[nvl(nr_incasat,0) as nr_incasat, nvl(tip_incasat,0) as tip_incasat, nvl(suma_incasat,0) as suma_incasat, ] + ;
|
||||
[nvl(serie_incasat,'') as serie_incasat, total_cu_tva from vanzari where id_vanzare = ] + TRANSFORM(tnIdVz), 'crsVz1')
|
||||
IF lnQ <= 0 OR RECCOUNT('crsVz1') <> 1
|
||||
DO S3bLog WITH ' ' + tcForma + ' tip=' + TRANSFORM(tnTip) + ': EROARE citire VANZARI id_vanzare=' + TRANSFORM(tnIdVz)
|
||||
INSERT INTO crsRezultate (tip_incasare, forma, id_vanzare) VALUES (tnTip, tcForma, tnIdVz)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT crsVz1
|
||||
INSERT INTO crsRezultate (tip_incasare, forma, id_vanzare, cod, serie_act, id_fact, ;
|
||||
nr_incasare_asteptat, nr_incasat, tip_incasat, suma_incasat, serie_incasat, total_cu_tva) ;
|
||||
VALUES (tnTip, tcForma, tnIdVz, crsVz1.cod, NVL(crsVz1.serie_act,''), crsVz1.id_fact, ;
|
||||
gnNrIncasareCapturat, crsVz1.nr_incasat, crsVz1.tip_incasat, crsVz1.suma_incasat, NVL(crsVz1.serie_incasat,''), crsVz1.total_cu_tva)
|
||||
DO S3bLog WITH ' ' + tcForma + ' tip=' + TRANSFORM(tnTip) + ': id_vanzare=' + TRANSFORM(tnIdVz) + ' cod=' + TRANSFORM(crsVz1.cod) + ;
|
||||
' serie_act=' + TRANSFORM(crsVz1.serie_act) + ' id_fact=' + TRANSFORM(crsVz1.id_fact) + ;
|
||||
' nr_incasat=' + TRANSFORM(crsVz1.nr_incasat) + ' (asteptat ' + TRANSFORM(gnNrIncasareCapturat) + ') tip_incasat=' + TRANSFORM(crsVz1.tip_incasat) + ;
|
||||
' suma_incasat=' + TRANSFORM(crsVz1.suma_incasat) + ' serie_incasat=[' + TRANSFORM(crsVz1.serie_incasat) + ']' + ;
|
||||
' total_cu_tva=' + TRANSFORM(crsVz1.total_cu_tva)
|
||||
USE IN crsVz1
|
||||
|
||||
DO Assert WITH crsRezultate.nr_incasat = gnNrIncasareCapturat, ;
|
||||
'[' + tcForma + ' tip=' + TRANSFORM(tnTip) + '] VANZARI.NR_INCASAT persistat (' + TRANSFORM(crsRezultate.nr_incasat) + ;
|
||||
') == poDate.nr_incasare capturat inainte de scriere (' + TRANSFORM(gnNrIncasareCapturat) + ')'
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE ComparaRezultate
|
||||
LOCAL lnTip, lnRVechi, lnRNou
|
||||
IF !glIncercaFormaNoua
|
||||
DO S3bLog WITH ' forma noua sarita in aceasta rulare - fara comparatie vechi/nou, doar valorile persistate pe forma veche'
|
||||
RETURN
|
||||
ENDIF
|
||||
FOR lnTip = 1 TO 4
|
||||
SELECT crsRezultate
|
||||
LOCATE FOR tip_incasare = lnTip AND forma == 'vechi'
|
||||
IF !FOUND()
|
||||
DO Assert WITH .F., '[tip=' + TRANSFORM(lnTip) + '] rand vechi gasit in crsRezultate'
|
||||
LOOP
|
||||
ENDIF
|
||||
lnRVechi = RECNO()
|
||||
LOCATE FOR tip_incasare = lnTip AND forma == 'nou'
|
||||
IF !FOUND()
|
||||
DO Assert WITH .F., '[tip=' + TRANSFORM(lnTip) + '] rand nou gasit in crsRezultate'
|
||||
LOOP
|
||||
ENDIF
|
||||
lnRNou = RECNO()
|
||||
|
||||
LOCAL lnIdVechi, lnIdNou, lnTipIncVechi, lnTipIncNou, lnSumaVechi, lnSumaNou, lcSerieVechi, lcSerieNou
|
||||
GO lnRVechi IN crsRezultate
|
||||
lnIdVechi = crsRezultate.id_vanzare
|
||||
lnTipIncVechi = crsRezultate.tip_incasat
|
||||
lnSumaVechi = crsRezultate.suma_incasat
|
||||
lcSerieVechi = crsRezultate.serie_incasat
|
||||
GO lnRNou IN crsRezultate
|
||||
lnIdNou = crsRezultate.id_vanzare
|
||||
lnTipIncNou = crsRezultate.tip_incasat
|
||||
lnSumaNou = crsRezultate.suma_incasat
|
||||
lcSerieNou = crsRezultate.serie_incasat
|
||||
|
||||
IF lnIdVechi <= 0 OR lnIdNou <= 0
|
||||
DO Assert WITH .F., '[tip=' + TRANSFORM(lnTip) + '] ambele documente s-au scris (vechi id_vanzare=' + ;
|
||||
TRANSFORM(lnIdVechi) + ' nou id_vanzare=' + TRANSFORM(lnIdNou) + ')'
|
||||
LOOP
|
||||
ENDIF
|
||||
|
||||
DO Assert WITH lnTipIncVechi = lnTipIncNou, '[tip=' + TRANSFORM(lnTip) + '] VANZARI.TIP_INCASAT identic (vechi=' + ;
|
||||
TRANSFORM(lnTipIncVechi) + ' nou=' + TRANSFORM(lnTipIncNou) + ')'
|
||||
DO Assert WITH ABS(lnSumaVechi - lnSumaNou) < 0.005, '[tip=' + TRANSFORM(lnTip) + '] VANZARI.SUMA_INCASAT identica (vechi=' + ;
|
||||
TRANSFORM(lnSumaVechi) + ' nou=' + TRANSFORM(lnSumaNou) + ')'
|
||||
DO Assert WITH ALLTRIM(lcSerieVechi) == ALLTRIM(lcSerieNou), '[tip=' + TRANSFORM(lnTip) + '] VANZARI.SERIE_INCASAT identica (vechi=[' + ;
|
||||
ALLTRIM(lcSerieVechi) + '] nou=[' + ALLTRIM(lcSerieNou) + '])'
|
||||
ENDFOR
|
||||
ENDPROC
|
||||
|
||||
*==================================================================================
|
||||
* CreeazaDocumentIncasare: emite un document REAL prin fluxul de productie (tnTip=22, cursor_preturi,
|
||||
* client RAJA id_part=463), aplicand tipul de incasare cerut pe formularul indicat. Intoarce
|
||||
* poDate.nid_vanzare (>0 succes) sau 0 (esec, detaliat in log). gnNrIncasareCapturat e umplut cu
|
||||
* poDate.nr_incasare chiar inainte de do_termin() - marimea persistata se verifica fata de asta.
|
||||
FUNCTION CreeazaDocumentIncasare
|
||||
LPARAMETERS tnTipIncasare, tlFormNou
|
||||
|
||||
PRIVATE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
LOCAL lnIdSet, lcSqlCursor, lcCursor, lnSucces, lnIdVanzareRezultat, tnTip, tnIdClient, tnIdDelegat
|
||||
LOCAL lcSerieAlocata, lnNractAlocat
|
||||
lnIdVanzareRezultat = 0
|
||||
lcSerieAlocata = ''
|
||||
lnNractAlocat = 0
|
||||
gnNrIncasareCapturat = 0
|
||||
*-- FORMA VECHE: tnTip=22 (AVIZ din lista de preturi) - calea PROVENITA, curata, fara efecte
|
||||
*-- secundare (nu intra pe ramura "comanda" din do_scrie_factura). opt_incasat traieste pe
|
||||
*-- frm_alte_date (clasa separata), deci nu are restrictia Between(poDate.tip,1,4).
|
||||
*-- FORMA NOUA: are nevoie de tnTip Between(1,4) ca opt_incasat sa existe inline pe formular
|
||||
*-- (ofacturare.vc2:21066) - singurele din acel interval cu date reale in cursor_preturi sunt
|
||||
*-- 3/4 (probe_emitere_reala.prg), dar tnTip=3 declanseaza un MESSAGEBOX_FORM real necunoscut
|
||||
*-- mock-ului ("Doriti sa se inchida comanda?") si formularul nou insusi agata la CREATEOBJECT
|
||||
*-- pe coloana Gestiune a grd_factura (vezi raport) - BLOCAT, nerezolvat in aceasta sesiune.
|
||||
*-- 12b S4b proba B: incercari tnTip=1 (client 332) si tnTip=2 (client 463) - Reccount=0 in acest
|
||||
*-- mediu (poDate.id_gestiune_init implicit NULL); revenire la tnTip=22/client 463, singura
|
||||
*-- combinatie confirmata ca intoarce articole headless (probe_emitere_reala.prg) - a dat
|
||||
*-- documentul real id_vanzare=1883, aproape integral pe politica de stoc (41), nu politica reala
|
||||
*-- 34 tintita initial - limitare consemnata in stare, nu blocanta (proba A caz7 acopera regresia
|
||||
*-- pe politica reala 34 direct in PL/SQL)
|
||||
tnTip = IIF(tlFormNou, 3, 22)
|
||||
tnIdClient = 463
|
||||
tnIdDelegat = 256
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
|
||||
lnIdSet = 25000 + tnTip - 1 + gnScadereStoc * 10
|
||||
poDate = CREATEOBJECT("oDateFactura", lnIdSet, tnTip)
|
||||
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
|
||||
poDateGestiuneDest = CREATEOBJECT("oDateGestiune")
|
||||
|
||||
IF !tlFormNou
|
||||
poDate.nIdTipDoc = 6 && AVIZ - plaja globala, dovedit (id_vanzare 1061/1062/1063)
|
||||
ENDIF
|
||||
|
||||
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}
|
||||
|
||||
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 = -3
|
||||
lcSerieAlocata = ALLTRIM(TRANSFORM(NVL(poDate.serie_act, [])))
|
||||
lnNractAlocat = poDate.nract
|
||||
DO S3bLog 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)}]
|
||||
|
||||
lcCursor = [crsarticole]
|
||||
lnSucces = goExecutor.oExecute(lcSqlCursor, lcCursor)
|
||||
IF lnSucces < 0
|
||||
DO S3bLog WITH ' EROARE cursor articole: ' + goExecutor.oPrelucrareEroare()
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
DO S3bCurataJtva
|
||||
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
IF RECCOUNT(lcCursor) = 0
|
||||
DO S3bLog WITH ' Nu exista articole (Reccount=0) - abandon document'
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
DO S3bCurataJtva
|
||||
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
RETURN 0
|
||||
ENDIF
|
||||
DO S3bLog WITH ' crsarticole Reccount=' + TRANSFORM(RECCOUNT(lcCursor))
|
||||
|
||||
*-- 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, ;
|
||||
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
|
||||
|
||||
*-- formularul, modeless (apel direct de metode) - vechi sau unificat, dupa tlFormNou
|
||||
PUBLIC goFrmS3b
|
||||
IF tlFormNou
|
||||
goFrmS3b = CREATEOBJECT('frm_facturare_articole2')
|
||||
ELSE
|
||||
goFrmS3b = CREATEOBJECT('frm_facturare_articole')
|
||||
ENDIF
|
||||
DO S3bLog WITH ' CREATEOBJECT OK, VARTYPE=' + VARTYPE(goFrmS3b)
|
||||
goFrmS3b.WindowType = 0
|
||||
DO S3bLog WITH ' WindowType=0 OK'
|
||||
goFrmS3b.Show()
|
||||
DO S3bLog WITH ' Show() OK'
|
||||
DOEVENTS FORCE
|
||||
DO S3bLog WITH ' formular afisat modeless (' + IIF(tlFormNou, 'NOU frm_facturare_articole2', 'VECHI frm_facturare_articole') + ')'
|
||||
|
||||
goFrmS3b.do_adauga_tot()
|
||||
DOEVENTS FORCE
|
||||
DO S3bLog WITH ' do_adauga_tot() -> Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
goFrmS3b.do_calculeaza_totaluri()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*-- CONT_VENIT asteptat, derivat exact ca in do_scrie_articole (ofacturare.vc2:14279), citit
|
||||
*-- direct din randul crsfactura pe care do_scrie_articole il va scana
|
||||
LOCAL lcExpContVenit, lnExpIdPol, lnExpIdArticol, lcExpCont, loExecutorReal
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
lnExpIdPol = crsfactura.id_pol
|
||||
lnExpIdArticol = crsfactura.id_articol
|
||||
lcExpCont = crsfactura.Cont
|
||||
lcExpContVenit = IIF(EMPTY(NVL(lnExpIdPol, 0)), deriva_cont_venit_fara_pol(lnExpIdArticol, lcExpCont), '<NULL>')
|
||||
|
||||
*-- spion pe goExecutor (tehnica SpyS13, probe_s13_toomanycolumns.prg): captureaza SQL-ul real
|
||||
*-- trimis de do_scrie_articole, fara sa-i schimbe comportamentul (DODEFAULT pe PCOUNT)
|
||||
loExecutorReal = goExecutor
|
||||
goExecutor = CREATEOBJECT('SpyContVenit')
|
||||
goExecutor.nHandle = gnHandle
|
||||
|
||||
LOCAL lnScris
|
||||
IF tlFormNou
|
||||
*-- opt_incasat e inline pe formular - fara al doilea modal
|
||||
goFrmS3b.seteaza_mod_incasare(tnTipIncasare)
|
||||
gnNrIncasareCapturat = poDate.nr_incasare
|
||||
DO S3bLog WITH ' opt_incasat.Value=' + TRANSFORM(tnTipIncasare) + ' -> poDate.nr_incasare=' + TRANSFORM(gnNrIncasareCapturat) + ;
|
||||
' incasat=' + TRANSFORM(poDate.incasat) + ' incasatCARD=' + TRANSFORM(poDate.incasatCARD)
|
||||
lnScris = goFrmS3b.do_termin()
|
||||
ELSE
|
||||
*-- calea veche: al doilea modal (frm_alte_date) e condus de goDriverAD/tmrDrvAD
|
||||
glDlgTratatAD = .F.
|
||||
gnTipIncasareCerut = tnTipIncasare
|
||||
lnScris = goFrmS3b.do_termin()
|
||||
LOCAL lnWait
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratatAD AND lnWait < 10
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
ENDIF
|
||||
DO S3bLog WITH ' do_termin() -> ' + TRANSFORM(lnScris) + ' poDate.nid_vanzare=' + TRANSFORM(NVL(poDate.nid_vanzare,0))
|
||||
|
||||
*-- restaureaza goExecutor real si verifica CONT_VENIT trimis de do_scrie_articole
|
||||
LOCAL lcActualContVenit, lcEticheta
|
||||
lcEticheta = '[' + IIF(tlFormNou,'nou','vechi') + ' tip=' + TRANSFORM(tnTipIncasare) + ']'
|
||||
DO Assert WITH goExecutor.cLastArtCall # '', ;
|
||||
lcEticheta + ' do_scrie_articole a trimis adauga_articol_factura (spion pe goExecutor)'
|
||||
IF goExecutor.cLastArtCall # ''
|
||||
lcActualContVenit = ExtrageContVenit(goExecutor.cLastArtCall)
|
||||
DO Assert WITH lcActualContVenit == lcExpContVenit, ;
|
||||
lcEticheta + ' CONT_VENIT trimis de do_scrie_articole = [' + lcExpContVenit + '], obtinut [' + lcActualContVenit + ']'
|
||||
ENDIF
|
||||
goExecutor = loExecutorReal
|
||||
|
||||
*-- 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 S3bLog WITH ' verificare in VANZARI pe ' + lcSerieAlocata + ' ' + TRANSFORM(lnNractAlocat) + ;
|
||||
' -> id_vanzare=' + TRANSFORM(lnIdVanzareRezultat)
|
||||
|
||||
IF TYPE('goFrmS3b') = 'O' AND !ISNULL(goFrmS3b)
|
||||
goFrmS3b.Release()
|
||||
ENDIF
|
||||
goFrmS3b = 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 S3bCurataJtva
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF USED('jtva_coloane_temp')
|
||||
USE IN jtva_coloane_temp
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
*-- extrage parametrul 29 (CONT_VENIT) dintr-un apel capturat pack_facturare.adauga_articol_factura(...);
|
||||
*-- pozitia 28 e mereu literalul NULL, deci pos29 e tot ce urmeaza dupa ultima virgula dinaintea "); end;"
|
||||
FUNCTION ExtrageContVenit
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnEnd, lcParams, lnComma, lcPos29
|
||||
lnEnd = AT('); end;', tcSql)
|
||||
IF lnEnd = 0
|
||||
RETURN '<NEPARSABIL>'
|
||||
ENDIF
|
||||
lcParams = LEFT(tcSql, lnEnd - 1)
|
||||
lnComma = RAT(',', lcParams)
|
||||
IF lnComma = 0
|
||||
RETURN '<NEPARSABIL>'
|
||||
ENDIF
|
||||
lcPos29 = SUBSTR(lcParams, lnComma + 1)
|
||||
IF UPPER(lcPos29) == 'NULL'
|
||||
RETURN '<NULL>'
|
||||
ENDIF
|
||||
RETURN STRTRAN(lcPos29, "'", '')
|
||||
ENDFUNC
|
||||
|
||||
*==================================================================================
|
||||
*-- SpyContVenit: subclasa a lui oexecutor (tehnica SpyS13 din probe_s13_toomanycolumns.prg) -
|
||||
*-- logheaza in cLastArtCall statementul adauga_articol_factura, apoi executa normal prin
|
||||
*-- DODEFAULT pe PCOUNT (fara sa schimbe comportamentul real)
|
||||
DEFINE CLASS SpyContVenit AS oexecutor
|
||||
cLastArtCall = ''
|
||||
|
||||
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
||||
LOCAL lnPc, lcS, lnRet
|
||||
lnPc = PCOUNT()
|
||||
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '')
|
||||
IF 'adauga_articol_factura(' $ lcS
|
||||
THIS.cLastArtCall = lcS
|
||||
ENDIF
|
||||
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
|
||||
CATCH TO loExSpy
|
||||
lnRet = -1
|
||||
THIS.cEroare = 'SpyContVenit: ' + TRANSFORM(loExSpy.Message)
|
||||
ENDTRY
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
*==================================================================================
|
||||
*-- driverAlteDateAD: cauta FRM_ALTE_DATE prin _SCREEN.Forms si ii seteaza opt_incasat.Value la
|
||||
* gnTipIncasareCerut INAINTE de a-i chema .do_termin() - acelasi mecanism ca driverAlteDate8 din
|
||||
* creeaza_documente_s8.prg, cu un singur adaos (selectia tipului de incasare).
|
||||
DEFINE CLASS driverAlteDateAD 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 + ';'
|
||||
DO S3bLog WITH ' [diag timer] forma noua vazuta: ' + lcClasa + ' Caption=[' + TRANSFORM(_SCREEN.Forms(lnI).Caption) + ']'
|
||||
ENDIF
|
||||
ENDFOR
|
||||
*-- confirmare reala neacoperita de mock_amessagebox (forma modala messagebox_form) -
|
||||
*-- apasa automat cmdYes/cmdOk, ca in productie la raspuns implicit "Da"
|
||||
IF !ISNULL(loMsgForm)
|
||||
TRY
|
||||
DO CASE
|
||||
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdYes', 5)
|
||||
DO S3bLog WITH ' [diag timer] messagebox_form: apas cmgBotones.cmdYes'
|
||||
loMsgForm.cmgBotones.cmdYes.Click()
|
||||
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdOk', 5)
|
||||
DO S3bLog WITH ' [diag timer] messagebox_form: apas cmgBotones.cmdOk'
|
||||
loMsgForm.cmgBotones.cmdOk.Click()
|
||||
ENDCASE
|
||||
CATCH TO loExcMsg
|
||||
DO S3bLog WITH ' [diag timer] messagebox_form: CATCH ' + TRANSFORM(loExcMsg.ErrorNo) + ' ' + loExcMsg.Message
|
||||
ENDTRY
|
||||
ENDIF
|
||||
IF glDlgTratatAD OR !llGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
LOCAL loAC
|
||||
loAC = loForm.ActiveControl
|
||||
TRY
|
||||
loForm.opt_incasat.Value = gnTipIncasareCerut
|
||||
gnNrIncasareCapturat = poDate.nr_incasare
|
||||
DO S3bLog WITH ' driverAlteDateAD: opt_incasat.Value=' + TRANSFORM(gnTipIncasareCerut) + ;
|
||||
' -> poDate.nr_incasare=' + TRANSFORM(gnNrIncasareCapturat) + ' incasat=' + TRANSFORM(poDate.incasat) + ;
|
||||
' incasatCARD=' + TRANSFORM(poDate.incasatCARD)
|
||||
loForm.do_termin()
|
||||
glDlgTratatAD = .T.
|
||||
CATCH TO loExcDrv
|
||||
DO S3bLog WITH ' driverAlteDateAD: CATCH ErrorNo=' + TRANSFORM(loExcDrv.ErrorNo) + ' Message=' + loExcDrv.Message + ;
|
||||
' Procedure=' + loExcDrv.Procedure + ' LineNo=' + TRANSFORM(loExcDrv.LineNo)
|
||||
glDlgTratatAD = .T.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
740
utile/Teste/facturare_unificat/probe_12b_s4b_proba_b_inainte.prg
Normal file
740
utile/Teste/facturare_unificat/probe_12b_s4b_proba_b_inainte.prg
Normal file
@@ -0,0 +1,740 @@
|
||||
* probe_12b_s4b_proba_b_inainte.prg
|
||||
* Plan 12b, S4b partea 2 - Proba B "INAINTE": copie a test_s3b_emitere_reala.prg (mecanica
|
||||
* nemodificata, deja dovedita), restransa la o singura emitere reala (tip_incasare=1, "Fara
|
||||
* incasare", forma veche) - client RAJA (id_part=463), plaja utilizatorului 8. Se ruleaza PE
|
||||
* PACHETUL DE DINAINTE de D10 (S4a), ca sa capteze un instantaneu real al SCD/SCC pe politica
|
||||
* reala inainte de schimbare; "dupa" (aceeasi client, mecanism) il face partea 3, cu CompAct.
|
||||
*
|
||||
* Criteriul 1 de "gata" al S3b, PROBA REALA (nu structurala): emite documente REALE in Oracle
|
||||
* (MARIUSM_AUTO@ROA_CENTRAL, aprobat explicit de Marius) prin fluxul de emitere efectiv, pe
|
||||
* fiecare din cele patru tipuri de incasare (1=Fara incasare, 2=Chitanta, 3=Bon fiscal, 4=POS/Card),
|
||||
* o data pe formularul vechi (frm_facturare_articole) si o data pe cel unificat
|
||||
* (frm_facturare_articole2), si compara randurile persistate in VANZARI dupa commit.
|
||||
*
|
||||
* Sursa documentului e cursor_preturi (lista de preturi, client RAJA id_part=463) cu tnTip=22 -
|
||||
* singura combinatie confirmata prin proba read-only (probe_emitere_reala.prg) ca intoarce articole
|
||||
* in acest mediu; tnTip=5 (FACTURA direct) da Reccount=0. Numerotarea/serie a documentului ramane
|
||||
* cea naturala pentru tnTip=22 (AVIZ, nIdTipDoc=6, plaja globala) - neatinsa, nu conteaza pentru
|
||||
* criteriul de paritate a INCASARII, care e independent de seria documentului.
|
||||
*
|
||||
* Mecanica bazata pe COMUN\utile\Teste\editare_factura\creeaza_documente_s8.prg (mediu Oracle real
|
||||
* + clase de productie, dovedit ca emite documente reale pentru tnTip=22): dialogul modal de antet
|
||||
* e inlocuit cu setare directa poDate (ca acolo), iar "Do Form verificare" (ofacturare.vc2:14404 /
|
||||
* :20126) e ocolit cu acelasi stub versionat COMUN\utile\Teste\achizitie_import\stub_verificare\
|
||||
* (SET PATH cu el primul).
|
||||
*
|
||||
* Diferenta fata de creeaza_documente_s8.prg: al doilea modal (frm_alte_date, doar pe calea veche)
|
||||
* NU e doar "confirmat" - un driver pe Timer ii seteaza opt_incasat.Value la tipul cerut INAINTE
|
||||
* sa-i cheme do_termin(), exact tehnica validata structural in test_s3b_paritate_emitere.prg (setarea
|
||||
* de .Value declanseaza opt_incasat.ProgrammaticChange -> actualizeaza_tipincasare(), cod real).
|
||||
* Pe calea noua nu exista al doilea modal (opt_incasat e inline pe formular): se seteaza direct pe
|
||||
* goFrm inainte de goFrm.do_termin().
|
||||
*
|
||||
* De ce NU se compara nr_incasare/NR_INCASAT intre vechi si nou (asa cum a facut suita structurala):
|
||||
* acolo numerele erau dezalocate dupa fiecare tip, deci acelasi numar fizic se realoca in faza 2.
|
||||
* Aici documentele raman scrise (nu se dezaloca nimic dupa un commit reusit), deci vechi si nou aloca
|
||||
* NUMERE DIFERITE, consecutive, din aceeasi plaja - egalitatea lor ar fi o eroare, nu o dovada.
|
||||
* Paritatea reala verificata e (a) consistenta interna - VANZARI.NR_INCASAT persistat == poDate.nr_incasare
|
||||
* capturat chiar inainte de scriere, pe fiecare document in parte, si (b) egalitatea intre vechi/nou a
|
||||
* CODULUI de tip (VANZARI.TIP_INCASAT) si a SUMEI (VANZARI.SUMA_INCASAT) - marimi care nu depind de
|
||||
* alocarea secventiala si trebuie sa fie identice daca cele doua cai proceseaza acelasi lcListaIncasare.
|
||||
*
|
||||
* CONSUMA DATE REALE: fiecare pereche (tip, forma) scrie un document nou in VANZARI (client 463),
|
||||
* iar tipurile 2/3/4 aloca si un numar real de chitanta/bon fiscal/pos (serii 16/3/26). Niciun
|
||||
* rollback, nicio stergere - documentele raman in schema, de inspectat de Marius.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s3b_emitere_reala.prg"
|
||||
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s3b_emitere_reala.log
|
||||
|
||||
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
|
||||
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_12b_s4b_proba_b_inainte.log"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcLog)
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
ON ERROR DO S3bErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL lcAppPathLocal, lcSql
|
||||
lcAppPathLocal = "D:\ROA\ROAFACTURARE\"
|
||||
|
||||
*-- stub_verificare PRIMUL (SET PATH plain, nu ADDITIVE): test_init_env_auto_roafacturare.prg
|
||||
*-- face el insusi SET PATH TO ... ADDITIVE mai jos, care ADAUGA dupa (nu inaintea) intrarilor
|
||||
*-- deja existente - asta pastreaza stub_verificare cu prioritate fata de COMUN\FERESTRE, ca
|
||||
*-- "Do Form verificare" (ofacturare.vc2:14404 / :20126) sa rezolve la stub, nu la formularul real
|
||||
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\achizitie_import\stub_verificare"
|
||||
|
||||
*-- mediul REAL, identic cu cel folosit de test_s3b_paritate_emitere.prg (deja dovedit ca
|
||||
*-- instantiaza fara agatare frm_facturare_articole2 - orice reconstructie manuala a acestui
|
||||
*-- mediu s-a dovedit incompleta si a agatat headless in interiorul Init-ului formularului nou,
|
||||
*-- la constructia coloanei Gestiune din grd_factura (vezi raport)
|
||||
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 S3bLog WITH 'EROARE: conectare Oracle esuata'
|
||||
DO S3bFinal
|
||||
ENDIF
|
||||
DO S3bLog WITH 'test_init_env_auto_roafacturare OK, gnHandle=' + TRANSFORM(gnHandle)
|
||||
|
||||
*-- fara asta, un lacat Oracle blocheaza rularea la infinit, invizibil in log
|
||||
SQLSETPROP(gnHandle, "QueryTimeOut", 45)
|
||||
|
||||
*-- clase suplimentare, necesare pentru grd_factura (coloane cu combo pe cursor SQL)
|
||||
SET PATH TO (lcAppPathLocal + "COMUN\utile\gridextras") ADDITIVE
|
||||
SET CLASSLIB TO gridextras.vcx ADDITIVE
|
||||
SET CLASSLIB TO _cb_base.vcx ADDITIVE
|
||||
DO S3bLog WITH 'SET CLASSLIB suplimentar OK'
|
||||
|
||||
*-- mock amessagebox: la nume duplicat castiga fisierul de proceduri deschis cel mai recent
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
DO S3bLog WITH 'mock_amessagebox OK'
|
||||
|
||||
*-- 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
|
||||
|
||||
*-- initializare REALA a optiunilor de program (tehnica din test_s3b_paritate_emitere.prg) -
|
||||
*-- creeaza dinamic globalele gnXxx/glXxx/gcXxx din tabela OPTIUNI; suprascrise imediat dupa
|
||||
*-- cu valorile care bypaseaza dialogurile per-linie in mediul headless
|
||||
IF !actualizeaza_optiuni_program()
|
||||
DO S3bLog WITH 'EROARE: actualizeaza_optiuni_program()'
|
||||
DO S3bFinal
|
||||
ENDIF
|
||||
gnScadereStoc = 0
|
||||
gnModTotFact = 0
|
||||
gnFactSeturi = 0
|
||||
gnListareAvizBonFiscal = 0
|
||||
gnid_part_casa = 0
|
||||
*-- 167: singura sucursala cu plaje pentru chitanta/bon fiscal/pos in acest mediu (16/3/26);
|
||||
*-- verificat READ-ONLY (probe_emitere_reala.prg) ca nu schimba Reccount(cursor_preturi)
|
||||
gnIdSucursala = 167
|
||||
lcSql = [begin pack_contafin.set_id_sucursala(?gnIdSucursala); end;]
|
||||
goExecutor.oExecuta(lcSql)
|
||||
DO S3bLog WITH 'actualizeaza_optiuni_program OK, gnScadereStoc=' + TRANSFORM(gnScadereStoc) + ' gnIdSucursala=' + TRANSFORM(gnIdSucursala)
|
||||
|
||||
PUBLIC gcMockUltimMesaj, gnMockUltimTip
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
*----- driver: conduce frm_alte_date (singurul modal ramas, doar pe calea veche) -----
|
||||
PUBLIC goDriverAD, glDlgTratatAD, gnTipIncasareCerut, gnNrIncasareCapturat, gcClaseVazute
|
||||
glDlgTratatAD = .F.
|
||||
gnTipIncasareCerut = 1
|
||||
gnNrIncasareCapturat = 0
|
||||
gcClaseVazute = ';'
|
||||
goDriverAD = CREATEOBJECT('driverAlteDateAD')
|
||||
_SCREEN.AddObject('tmrDrvAD', 'Timer')
|
||||
_SCREEN.tmrDrvAD.Interval = 200
|
||||
BINDEVENT(_SCREEN.tmrDrvAD, 'Timer', goDriverAD, 'Executa')
|
||||
_SCREEN.tmrDrvAD.Enabled = .T.
|
||||
*-- _SCREEN ramane invizibil (default -A -T), ca in test_s3b_paritate_emitere.prg - un GETFILE()
|
||||
*-- nativ (dialog "Open") aparut la o SET SCREEN VISIBLE = .T. a agatat rularea (vezi raport)
|
||||
_SCREEN.Caption = 'S3b - emitere reala (paritate incasare vechi/nou)'
|
||||
DO S3bLog WITH 'driver+timer pregatiti'
|
||||
|
||||
*-- pre-proba plajelor 3/16/26 - plasa de siguranta, evita blocaj invizibil daca lipsesc
|
||||
DO S3bLog WITH 'pre-proba plaje: tip3=' + TRANSFORM(RanduriSerii(3)) + ' tip16=' + TRANSFORM(RanduriSerii(16)) + ;
|
||||
' tip26=' + TRANSFORM(RanduriSerii(26))
|
||||
|
||||
*-- stare INAINTE: ultimul NR_INCASAT emis pe fiecare tip de incasare, in TOATA schema
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + '===== STARE INAINTE (MAX(NR_INCASAT) pe tip_incasat, toata schema) ====='
|
||||
DO LogStareMaxIncasat
|
||||
|
||||
CREATE CURSOR crsRezultate (tip_incasare N(1), forma C(10), id_vanzare N(10), cod N(10), ;
|
||||
serie_act C(10), id_fact N(10), nr_incasare_asteptat N(10), nr_incasat N(10), ;
|
||||
tip_incasat N(10), suma_incasat N(18,2), serie_incasat C(10), total_cu_tva N(18,2))
|
||||
|
||||
LOCAL laNumeTip[4]
|
||||
laNumeTip[1] = 'Fara incasare'
|
||||
laNumeTip[2] = 'Chitanta'
|
||||
laNumeTip[3] = 'Bon fiscal'
|
||||
laNumeTip[4] = 'POS Card'
|
||||
|
||||
*-- FORMA NOUA: BLOCATA in aceasta sesiune (vezi docs\raport_s3b_emitere_reala.md) -
|
||||
*-- frm_facturare_articole2 agata la CREATEOBJECT (Init -> grd_factura.cGestiune.cCboGestiune
|
||||
*-- -> _cb_base.vc2 combosql.Init:589 -> RefreshData(0):826 -> SelectData():832 -> un dialog
|
||||
*-- nativ "Open" real, needeterminat cauzal, indiferent de mediu/tip/vizibilitate _SCREEN).
|
||||
*-- Ramane .F. neconditionat aici; DACA se rezolva blocajul, se schimba in .T. pentru ambele.
|
||||
PUBLIC glIncercaFormaNoua
|
||||
glIncercaFormaNoua = .F.
|
||||
|
||||
LOCAL lnTip, lnIdVz
|
||||
FOR lnTip = 1 TO 1
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + '===== TIP ' + TRANSFORM(lnTip) + ' (' + laNumeTip[lnTip] + ') - FORMA VECHE (tnTip=22) ====='
|
||||
lnIdVz = CreeazaDocumentIncasare(lnTip, .F.)
|
||||
DO InregistreazaRezultat WITH lnTip, 'vechi', lnIdVz
|
||||
IF lnIdVz > 0
|
||||
DO LogLiniiDocument WITH lnIdVz
|
||||
ENDIF
|
||||
|
||||
IF glIncercaFormaNoua
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + '===== TIP ' + TRANSFORM(lnTip) + ' (' + laNumeTip[lnTip] + ') - FORMA NOUA (tnTip=3) ====='
|
||||
lnIdVz = CreeazaDocumentIncasare(lnTip, .T.)
|
||||
DO InregistreazaRezultat WITH lnTip, 'nou', lnIdVz
|
||||
ELSE
|
||||
DO S3bLog WITH ' forma noua SARITA (blocata, vezi raport)'
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + '===== COMPARATIE VECHI / NOU, PE TIP ====='
|
||||
DO ComparaRezultate
|
||||
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + '===== STARE DUPA (MAX(NR_INCASAT) pe tip_incasat, toata schema) ====='
|
||||
DO LogStareMaxIncasat
|
||||
|
||||
_SCREEN.tmrDrvAD.Enabled = .F.
|
||||
DO S3bFinal
|
||||
|
||||
CATCH TO loExc
|
||||
DO S3bLog WITH 'CATCH TOP-LEVEL ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO S3bFinal
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE S3bLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13)+CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE S3bErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO S3bLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE S3bFinal
|
||||
DO S3bLog WITH CHR(13)+CHR(10) + 'TOTAL pass=' + TRANSFORM(gnPass) + ' fail=' + TRANSFORM(gnFail)
|
||||
DO S3bLog WITH 'END ' + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Assert
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO S3bLog WITH 'PASS: ' + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO S3bLog WITH 'FAIL: ' + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
*-- cate randuri de plaja intoarce verifica_cursor_serii pentru un tip de document, fara sa aloce
|
||||
FUNCTION RanduriSerii
|
||||
LPARAMETERS tnIdTipDoc
|
||||
LOCAL lnOk, lnRanduri, lcSql
|
||||
LOCAL ARRAY laErr[1]
|
||||
PRIVATE pnIdTipDoc, pnRezultat
|
||||
pnIdTipDoc = tnIdTipDoc
|
||||
pnRezultat = 0
|
||||
lnRanduri = -1
|
||||
lcSql = "{call " + gcS + ".pack_serii_numere.verifica_cursor_serii(?pnIdTipDoc,?gnIdUtil,?gnIdSucursala,?@pnRezultat)}"
|
||||
lnOk = SQLEXEC(gnHandle, lcSql, "crsprobapl")
|
||||
IF lnOk > 0
|
||||
lnRanduri = RECCOUNT("crsprobapl")
|
||||
USE IN (SELECT("crsprobapl"))
|
||||
ELSE
|
||||
AERROR(laErr)
|
||||
DO S3bLog WITH 'pre-proba plaje tip ' + TRANSFORM(tnIdTipDoc) + ' ESEC: ' + TRANSFORM(laErr[2])
|
||||
ENDIF
|
||||
RETURN lnRanduri
|
||||
ENDFUNC
|
||||
|
||||
*-- 12b S4b: liniile VANZARI_DETALII (id_pol) + randurile ACT (SCD/SCC) ale documentului, ca
|
||||
*-- instantaneu "inainte" pentru CompAct (partea 3) - client/document fixe, notate in stare.
|
||||
PROCEDURE LogLiniiDocument
|
||||
LPARAMETERS tnIdVz
|
||||
LOCAL lnQ
|
||||
lnQ = goExecutor.oExecute([select id_articol, id_pol, cont from vanzari_detalii where sters=0 and id_vanzare=] + ;
|
||||
TRANSFORM(tnIdVz) + [ order by id_articol], 'crsLiniiVz')
|
||||
IF lnQ > 0
|
||||
SELECT crsLiniiVz
|
||||
SCAN
|
||||
DO S3bLog WITH ' [proba B linie] id_articol=' + TRANSFORM(id_articol) + ' id_pol=' + TRANSFORM(NVL(id_pol,-1)) + ' cont=' + TRANSFORM(NVL(cont,''))
|
||||
ENDSCAN
|
||||
USE IN crsLiniiVz
|
||||
ENDIF
|
||||
lnQ = goExecutor.oExecute([select scd, scc, ascd, ascc, id_venchelt from act a ] + ;
|
||||
[join vanzari v on v.serie_act=a.serie_act and v.numar_act=a.nract ] + ;
|
||||
[where a.sters=0 and v.id_vanzare=] + TRANSFORM(tnIdVz) + [ order by scd, scc], 'crsActVz')
|
||||
IF lnQ > 0
|
||||
SELECT crsActVz
|
||||
SCAN
|
||||
DO S3bLog WITH ' [proba B ACT] SCD=' + TRANSFORM(NVL(scd,'')) + ' SCC=' + TRANSFORM(NVL(scc,'')) + ;
|
||||
' ASCD=' + TRANSFORM(NVL(ascd,'')) + ' ASCC=' + TRANSFORM(NVL(ascc,'')) + ' ID_VENCHELT=' + TRANSFORM(NVL(id_venchelt,-1))
|
||||
ENDSCAN
|
||||
USE IN crsActVz
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE LogStareMaxIncasat
|
||||
LOCAL lnQ
|
||||
lnQ = goExecutor.oExecute([select tip_incasat, max(nr_incasat) as maxnr, count(*) as nr ] + ;
|
||||
[from vanzari where tip_incasat is not null group by tip_incasat order by tip_incasat], 'crsMaxInc')
|
||||
IF lnQ > 0
|
||||
SELECT crsMaxInc
|
||||
SCAN
|
||||
DO S3bLog WITH ' tip_incasat=' + TRANSFORM(tip_incasat) + ' max(nr_incasat)=' + TRANSFORM(maxnr) + ' nr_documente=' + TRANSFORM(nr)
|
||||
ENDSCAN
|
||||
USE IN crsMaxInc
|
||||
ELSE
|
||||
DO S3bLog WITH ' EROARE citire stare incasat: ' + goExecutor.oPrelucrareEroare()
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
*-- citeste randul VANZARI scris pentru id_vanzare si-l adauga in crsRezultate
|
||||
PROCEDURE InregistreazaRezultat
|
||||
LPARAMETERS tnTip, tcForma, tnIdVz
|
||||
DO Assert WITH tnIdVz > 0, '[' + tcForma + ' tip=' + TRANSFORM(tnTip) + '] documentul exista in VANZARI (jonctiune serie_act+nract), e=' + TRANSFORM(tnIdVz)
|
||||
IF tnIdVz <= 0
|
||||
DO S3bLog WITH ' ' + tcForma + ' tip=' + TRANSFORM(tnTip) + ': documentul NU s-a scris (id_vanzare=0), fara rand in VANZARI'
|
||||
INSERT INTO crsRezultate (tip_incasare, forma, id_vanzare) VALUES (tnTip, tcForma, 0)
|
||||
RETURN
|
||||
ENDIF
|
||||
LOCAL lnQ
|
||||
lnQ = goExecutor.oExecute([select id_vanzare, cod, serie_act, nvl(id_fact,0) as id_fact, ] + ;
|
||||
[nvl(nr_incasat,0) as nr_incasat, nvl(tip_incasat,0) as tip_incasat, nvl(suma_incasat,0) as suma_incasat, ] + ;
|
||||
[nvl(serie_incasat,'') as serie_incasat, total_cu_tva from vanzari where id_vanzare = ] + TRANSFORM(tnIdVz), 'crsVz1')
|
||||
IF lnQ <= 0 OR RECCOUNT('crsVz1') <> 1
|
||||
DO S3bLog WITH ' ' + tcForma + ' tip=' + TRANSFORM(tnTip) + ': EROARE citire VANZARI id_vanzare=' + TRANSFORM(tnIdVz)
|
||||
INSERT INTO crsRezultate (tip_incasare, forma, id_vanzare) VALUES (tnTip, tcForma, tnIdVz)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT crsVz1
|
||||
INSERT INTO crsRezultate (tip_incasare, forma, id_vanzare, cod, serie_act, id_fact, ;
|
||||
nr_incasare_asteptat, nr_incasat, tip_incasat, suma_incasat, serie_incasat, total_cu_tva) ;
|
||||
VALUES (tnTip, tcForma, tnIdVz, crsVz1.cod, NVL(crsVz1.serie_act,''), crsVz1.id_fact, ;
|
||||
gnNrIncasareCapturat, crsVz1.nr_incasat, crsVz1.tip_incasat, crsVz1.suma_incasat, NVL(crsVz1.serie_incasat,''), crsVz1.total_cu_tva)
|
||||
DO S3bLog WITH ' ' + tcForma + ' tip=' + TRANSFORM(tnTip) + ': id_vanzare=' + TRANSFORM(tnIdVz) + ' cod=' + TRANSFORM(crsVz1.cod) + ;
|
||||
' serie_act=' + TRANSFORM(crsVz1.serie_act) + ' id_fact=' + TRANSFORM(crsVz1.id_fact) + ;
|
||||
' nr_incasat=' + TRANSFORM(crsVz1.nr_incasat) + ' (asteptat ' + TRANSFORM(gnNrIncasareCapturat) + ') tip_incasat=' + TRANSFORM(crsVz1.tip_incasat) + ;
|
||||
' suma_incasat=' + TRANSFORM(crsVz1.suma_incasat) + ' serie_incasat=[' + TRANSFORM(crsVz1.serie_incasat) + ']' + ;
|
||||
' total_cu_tva=' + TRANSFORM(crsVz1.total_cu_tva)
|
||||
USE IN crsVz1
|
||||
|
||||
DO Assert WITH crsRezultate.nr_incasat = gnNrIncasareCapturat, ;
|
||||
'[' + tcForma + ' tip=' + TRANSFORM(tnTip) + '] VANZARI.NR_INCASAT persistat (' + TRANSFORM(crsRezultate.nr_incasat) + ;
|
||||
') == poDate.nr_incasare capturat inainte de scriere (' + TRANSFORM(gnNrIncasareCapturat) + ')'
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE ComparaRezultate
|
||||
LOCAL lnTip, lnRVechi, lnRNou
|
||||
IF !glIncercaFormaNoua
|
||||
DO S3bLog WITH ' forma noua sarita in aceasta rulare - fara comparatie vechi/nou, doar valorile persistate pe forma veche'
|
||||
RETURN
|
||||
ENDIF
|
||||
FOR lnTip = 1 TO 4
|
||||
SELECT crsRezultate
|
||||
LOCATE FOR tip_incasare = lnTip AND forma == 'vechi'
|
||||
IF !FOUND()
|
||||
DO Assert WITH .F., '[tip=' + TRANSFORM(lnTip) + '] rand vechi gasit in crsRezultate'
|
||||
LOOP
|
||||
ENDIF
|
||||
lnRVechi = RECNO()
|
||||
LOCATE FOR tip_incasare = lnTip AND forma == 'nou'
|
||||
IF !FOUND()
|
||||
DO Assert WITH .F., '[tip=' + TRANSFORM(lnTip) + '] rand nou gasit in crsRezultate'
|
||||
LOOP
|
||||
ENDIF
|
||||
lnRNou = RECNO()
|
||||
|
||||
LOCAL lnIdVechi, lnIdNou, lnTipIncVechi, lnTipIncNou, lnSumaVechi, lnSumaNou, lcSerieVechi, lcSerieNou
|
||||
GO lnRVechi IN crsRezultate
|
||||
lnIdVechi = crsRezultate.id_vanzare
|
||||
lnTipIncVechi = crsRezultate.tip_incasat
|
||||
lnSumaVechi = crsRezultate.suma_incasat
|
||||
lcSerieVechi = crsRezultate.serie_incasat
|
||||
GO lnRNou IN crsRezultate
|
||||
lnIdNou = crsRezultate.id_vanzare
|
||||
lnTipIncNou = crsRezultate.tip_incasat
|
||||
lnSumaNou = crsRezultate.suma_incasat
|
||||
lcSerieNou = crsRezultate.serie_incasat
|
||||
|
||||
IF lnIdVechi <= 0 OR lnIdNou <= 0
|
||||
DO Assert WITH .F., '[tip=' + TRANSFORM(lnTip) + '] ambele documente s-au scris (vechi id_vanzare=' + ;
|
||||
TRANSFORM(lnIdVechi) + ' nou id_vanzare=' + TRANSFORM(lnIdNou) + ')'
|
||||
LOOP
|
||||
ENDIF
|
||||
|
||||
DO Assert WITH lnTipIncVechi = lnTipIncNou, '[tip=' + TRANSFORM(lnTip) + '] VANZARI.TIP_INCASAT identic (vechi=' + ;
|
||||
TRANSFORM(lnTipIncVechi) + ' nou=' + TRANSFORM(lnTipIncNou) + ')'
|
||||
DO Assert WITH ABS(lnSumaVechi - lnSumaNou) < 0.005, '[tip=' + TRANSFORM(lnTip) + '] VANZARI.SUMA_INCASAT identica (vechi=' + ;
|
||||
TRANSFORM(lnSumaVechi) + ' nou=' + TRANSFORM(lnSumaNou) + ')'
|
||||
DO Assert WITH ALLTRIM(lcSerieVechi) == ALLTRIM(lcSerieNou), '[tip=' + TRANSFORM(lnTip) + '] VANZARI.SERIE_INCASAT identica (vechi=[' + ;
|
||||
ALLTRIM(lcSerieVechi) + '] nou=[' + ALLTRIM(lcSerieNou) + '])'
|
||||
ENDFOR
|
||||
ENDPROC
|
||||
|
||||
*==================================================================================
|
||||
* CreeazaDocumentIncasare: emite un document REAL prin fluxul de productie (tnTip=22, cursor_preturi,
|
||||
* client RAJA id_part=463), aplicand tipul de incasare cerut pe formularul indicat. Intoarce
|
||||
* poDate.nid_vanzare (>0 succes) sau 0 (esec, detaliat in log). gnNrIncasareCapturat e umplut cu
|
||||
* poDate.nr_incasare chiar inainte de do_termin() - marimea persistata se verifica fata de asta.
|
||||
FUNCTION CreeazaDocumentIncasare
|
||||
LPARAMETERS tnTipIncasare, tlFormNou
|
||||
|
||||
PRIVATE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
LOCAL lnIdSet, lcSqlCursor, lcCursor, lnSucces, lnIdVanzareRezultat, tnTip, tnIdClient, tnIdDelegat
|
||||
LOCAL lcSerieAlocata, lnNractAlocat
|
||||
lnIdVanzareRezultat = 0
|
||||
lcSerieAlocata = ''
|
||||
lnNractAlocat = 0
|
||||
gnNrIncasareCapturat = 0
|
||||
*-- FORMA VECHE: tnTip=22 (AVIZ din lista de preturi) - calea PROVENITA, curata, fara efecte
|
||||
*-- secundare (nu intra pe ramura "comanda" din do_scrie_factura). opt_incasat traieste pe
|
||||
*-- frm_alte_date (clasa separata), deci nu are restrictia Between(poDate.tip,1,4).
|
||||
*-- FORMA NOUA: are nevoie de tnTip Between(1,4) ca opt_incasat sa existe inline pe formular
|
||||
*-- (ofacturare.vc2:21066) - singurele din acel interval cu date reale in cursor_preturi sunt
|
||||
*-- 3/4 (probe_emitere_reala.prg), dar tnTip=3 declanseaza un MESSAGEBOX_FORM real necunoscut
|
||||
*-- mock-ului ("Doriti sa se inchida comanda?") si formularul nou insusi agata la CREATEOBJECT
|
||||
*-- pe coloana Gestiune a grd_factura (vezi raport) - BLOCAT, nerezolvat in aceasta sesiune.
|
||||
*-- 12b S4b proba B: incercari tnTip=1 (client 332) si tnTip=2 (client 463) - Reccount=0 in acest
|
||||
*-- mediu (poDate.id_gestiune_init implicit NULL); revenire la tnTip=22/client 463, singura
|
||||
*-- combinatie confirmata ca intoarce articole headless (probe_emitere_reala.prg) - a dat
|
||||
*-- documentul real id_vanzare=1883, aproape integral pe politica de stoc (41), nu politica reala
|
||||
*-- 34 tintita initial - limitare consemnata in stare, nu blocanta (proba A caz7 acopera regresia
|
||||
*-- pe politica reala 34 direct in PL/SQL)
|
||||
tnTip = IIF(tlFormNou, 3, 22)
|
||||
tnIdClient = 463
|
||||
tnIdDelegat = 256
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
|
||||
lnIdSet = 25000 + tnTip - 1 + gnScadereStoc * 10
|
||||
poDate = CREATEOBJECT("oDateFactura", lnIdSet, tnTip)
|
||||
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
|
||||
poDateGestiuneDest = CREATEOBJECT("oDateGestiune")
|
||||
|
||||
IF !tlFormNou
|
||||
poDate.nIdTipDoc = 6 && AVIZ - plaja globala, dovedit (id_vanzare 1061/1062/1063)
|
||||
ENDIF
|
||||
|
||||
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}
|
||||
|
||||
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 = -3
|
||||
lcSerieAlocata = ALLTRIM(TRANSFORM(NVL(poDate.serie_act, [])))
|
||||
lnNractAlocat = poDate.nract
|
||||
DO S3bLog 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)}]
|
||||
|
||||
lcCursor = [crsarticole]
|
||||
lnSucces = goExecutor.oExecute(lcSqlCursor, lcCursor)
|
||||
IF lnSucces < 0
|
||||
DO S3bLog WITH ' EROARE cursor articole: ' + goExecutor.oPrelucrareEroare()
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
DO S3bCurataJtva
|
||||
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
IF RECCOUNT(lcCursor) = 0
|
||||
DO S3bLog WITH ' Nu exista articole (Reccount=0) - abandon document'
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
DO S3bCurataJtva
|
||||
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
RETURN 0
|
||||
ENDIF
|
||||
DO S3bLog WITH ' crsarticole Reccount=' + TRANSFORM(RECCOUNT(lcCursor))
|
||||
|
||||
*-- 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, ;
|
||||
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
|
||||
|
||||
*-- formularul, modeless (apel direct de metode) - vechi sau unificat, dupa tlFormNou
|
||||
PUBLIC goFrmS3b
|
||||
IF tlFormNou
|
||||
goFrmS3b = CREATEOBJECT('frm_facturare_articole2')
|
||||
ELSE
|
||||
goFrmS3b = CREATEOBJECT('frm_facturare_articole')
|
||||
ENDIF
|
||||
DO S3bLog WITH ' CREATEOBJECT OK, VARTYPE=' + VARTYPE(goFrmS3b)
|
||||
goFrmS3b.WindowType = 0
|
||||
DO S3bLog WITH ' WindowType=0 OK'
|
||||
goFrmS3b.Show()
|
||||
DO S3bLog WITH ' Show() OK'
|
||||
DOEVENTS FORCE
|
||||
DO S3bLog WITH ' formular afisat modeless (' + IIF(tlFormNou, 'NOU frm_facturare_articole2', 'VECHI frm_facturare_articole') + ')'
|
||||
|
||||
goFrmS3b.do_adauga_tot()
|
||||
DOEVENTS FORCE
|
||||
DO S3bLog WITH ' do_adauga_tot() -> Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
goFrmS3b.do_calculeaza_totaluri()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*-- CONT_VENIT asteptat, derivat exact ca in do_scrie_articole (ofacturare.vc2:14279), citit
|
||||
*-- direct din randul crsfactura pe care do_scrie_articole il va scana
|
||||
LOCAL lcExpContVenit, lnExpIdPol, lnExpIdArticol, lcExpCont, loExecutorReal
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
lnExpIdPol = crsfactura.id_pol
|
||||
lnExpIdArticol = crsfactura.id_articol
|
||||
lcExpCont = crsfactura.Cont
|
||||
lcExpContVenit = IIF(EMPTY(NVL(lnExpIdPol, 0)), deriva_cont_venit_fara_pol(lnExpIdArticol, lcExpCont), '<NULL>')
|
||||
|
||||
*-- spion pe goExecutor (tehnica SpyS13, probe_s13_toomanycolumns.prg): captureaza SQL-ul real
|
||||
*-- trimis de do_scrie_articole, fara sa-i schimbe comportamentul (DODEFAULT pe PCOUNT)
|
||||
loExecutorReal = goExecutor
|
||||
goExecutor = CREATEOBJECT('SpyContVenit')
|
||||
goExecutor.nHandle = gnHandle
|
||||
|
||||
LOCAL lnScris
|
||||
IF tlFormNou
|
||||
*-- opt_incasat e inline pe formular - fara al doilea modal
|
||||
goFrmS3b.seteaza_mod_incasare(tnTipIncasare)
|
||||
gnNrIncasareCapturat = poDate.nr_incasare
|
||||
DO S3bLog WITH ' opt_incasat.Value=' + TRANSFORM(tnTipIncasare) + ' -> poDate.nr_incasare=' + TRANSFORM(gnNrIncasareCapturat) + ;
|
||||
' incasat=' + TRANSFORM(poDate.incasat) + ' incasatCARD=' + TRANSFORM(poDate.incasatCARD)
|
||||
lnScris = goFrmS3b.do_termin()
|
||||
ELSE
|
||||
*-- calea veche: al doilea modal (frm_alte_date) e condus de goDriverAD/tmrDrvAD
|
||||
glDlgTratatAD = .F.
|
||||
gnTipIncasareCerut = tnTipIncasare
|
||||
lnScris = goFrmS3b.do_termin()
|
||||
LOCAL lnWait
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratatAD AND lnWait < 10
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
ENDIF
|
||||
DO S3bLog WITH ' do_termin() -> ' + TRANSFORM(lnScris) + ' poDate.nid_vanzare=' + TRANSFORM(NVL(poDate.nid_vanzare,0))
|
||||
|
||||
*-- restaureaza goExecutor real si verifica CONT_VENIT trimis de do_scrie_articole
|
||||
LOCAL lcActualContVenit, lcEticheta
|
||||
lcEticheta = '[' + IIF(tlFormNou,'nou','vechi') + ' tip=' + TRANSFORM(tnTipIncasare) + ']'
|
||||
DO Assert WITH goExecutor.cLastArtCall # '', ;
|
||||
lcEticheta + ' do_scrie_articole a trimis adauga_articol_factura (spion pe goExecutor)'
|
||||
IF goExecutor.cLastArtCall # ''
|
||||
lcActualContVenit = ExtrageContVenit(goExecutor.cLastArtCall)
|
||||
DO Assert WITH lcActualContVenit == lcExpContVenit, ;
|
||||
lcEticheta + ' CONT_VENIT trimis de do_scrie_articole = [' + lcExpContVenit + '], obtinut [' + lcActualContVenit + ']'
|
||||
ENDIF
|
||||
goExecutor = loExecutorReal
|
||||
|
||||
*-- 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 S3bLog WITH ' verificare in VANZARI pe ' + lcSerieAlocata + ' ' + TRANSFORM(lnNractAlocat) + ;
|
||||
' -> id_vanzare=' + TRANSFORM(lnIdVanzareRezultat)
|
||||
|
||||
IF TYPE('goFrmS3b') = 'O' AND !ISNULL(goFrmS3b)
|
||||
goFrmS3b.Release()
|
||||
ENDIF
|
||||
goFrmS3b = 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 S3bCurataJtva
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF USED('jtva_coloane_temp')
|
||||
USE IN jtva_coloane_temp
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
*-- extrage parametrul 29 (CONT_VENIT) dintr-un apel capturat pack_facturare.adauga_articol_factura(...);
|
||||
*-- pozitia 28 e mereu literalul NULL, deci pos29 e tot ce urmeaza dupa ultima virgula dinaintea "); end;"
|
||||
FUNCTION ExtrageContVenit
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnEnd, lcParams, lnComma, lcPos29
|
||||
lnEnd = AT('); end;', tcSql)
|
||||
IF lnEnd = 0
|
||||
RETURN '<NEPARSABIL>'
|
||||
ENDIF
|
||||
lcParams = LEFT(tcSql, lnEnd - 1)
|
||||
lnComma = RAT(',', lcParams)
|
||||
IF lnComma = 0
|
||||
RETURN '<NEPARSABIL>'
|
||||
ENDIF
|
||||
lcPos29 = SUBSTR(lcParams, lnComma + 1)
|
||||
IF UPPER(lcPos29) == 'NULL'
|
||||
RETURN '<NULL>'
|
||||
ENDIF
|
||||
RETURN STRTRAN(lcPos29, "'", '')
|
||||
ENDFUNC
|
||||
|
||||
*==================================================================================
|
||||
*-- SpyContVenit: subclasa a lui oexecutor (tehnica SpyS13 din probe_s13_toomanycolumns.prg) -
|
||||
*-- logheaza in cLastArtCall statementul adauga_articol_factura, apoi executa normal prin
|
||||
*-- DODEFAULT pe PCOUNT (fara sa schimbe comportamentul real)
|
||||
DEFINE CLASS SpyContVenit AS oexecutor
|
||||
cLastArtCall = ''
|
||||
|
||||
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
||||
LOCAL lnPc, lcS, lnRet
|
||||
lnPc = PCOUNT()
|
||||
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '')
|
||||
IF 'adauga_articol_factura(' $ lcS
|
||||
THIS.cLastArtCall = lcS
|
||||
ENDIF
|
||||
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
|
||||
CATCH TO loExSpy
|
||||
lnRet = -1
|
||||
THIS.cEroare = 'SpyContVenit: ' + TRANSFORM(loExSpy.Message)
|
||||
ENDTRY
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
*==================================================================================
|
||||
*-- driverAlteDateAD: cauta FRM_ALTE_DATE prin _SCREEN.Forms si ii seteaza opt_incasat.Value la
|
||||
* gnTipIncasareCerut INAINTE de a-i chema .do_termin() - acelasi mecanism ca driverAlteDate8 din
|
||||
* creeaza_documente_s8.prg, cu un singur adaos (selectia tipului de incasare).
|
||||
DEFINE CLASS driverAlteDateAD 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 + ';'
|
||||
DO S3bLog WITH ' [diag timer] forma noua vazuta: ' + lcClasa + ' Caption=[' + TRANSFORM(_SCREEN.Forms(lnI).Caption) + ']'
|
||||
ENDIF
|
||||
ENDFOR
|
||||
*-- confirmare reala neacoperita de mock_amessagebox (forma modala messagebox_form) -
|
||||
*-- apasa automat cmdYes/cmdOk, ca in productie la raspuns implicit "Da"
|
||||
IF !ISNULL(loMsgForm)
|
||||
TRY
|
||||
DO CASE
|
||||
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdYes', 5)
|
||||
DO S3bLog WITH ' [diag timer] messagebox_form: apas cmgBotones.cmdYes'
|
||||
loMsgForm.cmgBotones.cmdYes.Click()
|
||||
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdOk', 5)
|
||||
DO S3bLog WITH ' [diag timer] messagebox_form: apas cmgBotones.cmdOk'
|
||||
loMsgForm.cmgBotones.cmdOk.Click()
|
||||
ENDCASE
|
||||
CATCH TO loExcMsg
|
||||
DO S3bLog WITH ' [diag timer] messagebox_form: CATCH ' + TRANSFORM(loExcMsg.ErrorNo) + ' ' + loExcMsg.Message
|
||||
ENDTRY
|
||||
ENDIF
|
||||
IF glDlgTratatAD OR !llGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
LOCAL loAC
|
||||
loAC = loForm.ActiveControl
|
||||
TRY
|
||||
loForm.opt_incasat.Value = gnTipIncasareCerut
|
||||
gnNrIncasareCapturat = poDate.nr_incasare
|
||||
DO S3bLog WITH ' driverAlteDateAD: opt_incasat.Value=' + TRANSFORM(gnTipIncasareCerut) + ;
|
||||
' -> poDate.nr_incasare=' + TRANSFORM(gnNrIncasareCapturat) + ' incasat=' + TRANSFORM(poDate.incasat) + ;
|
||||
' incasatCARD=' + TRANSFORM(poDate.incasatCARD)
|
||||
loForm.do_termin()
|
||||
glDlgTratatAD = .T.
|
||||
CATCH TO loExcDrv
|
||||
DO S3bLog WITH ' driverAlteDateAD: CATCH ErrorNo=' + TRANSFORM(loExcDrv.ErrorNo) + ' Message=' + loExcDrv.Message + ;
|
||||
' Procedure=' + loExcDrv.Procedure + ' LineNo=' + TRANSFORM(loExcDrv.LineNo)
|
||||
glDlgTratatAD = .T.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
@@ -0,0 +1,406 @@
|
||||
* probe_12b_s6b_clasa_pret_nomenclator.prg
|
||||
* Plan #12b, S6b - proba headless pe clasa cus_pret_nomenclator (COMUN\programe\ofacturare_comun.prg:2319),
|
||||
* definita direct in .prg (Set Procedure To ofacturare_comun.prg, deja Additive in mediul de test),
|
||||
* nu in .vcx - CREATEOBJECT direct, fara SET CLASSLIB.
|
||||
*
|
||||
* Articol de proba: 2528841557 (ARIPA FATA AUDI A4), are deja rand pe politica 41 (tiparul S5/S5b).
|
||||
* Conturi 461/7583 (tiparul S5b caz2 si S4b caz1/caz6): validate in PLCONT, fara nota preexistenta.
|
||||
*
|
||||
* Cazuri (numerotate ca in docs\stare_plan_12b.md / plan_12b, sectiunea S6b):
|
||||
* (1) asigura_politica -> 41; incarca -> salveaza (12.34/1.21, conturi goale) -> instanta noua
|
||||
* incarca -> aceleasi valori; citire si prin cursor_preturi (tiparul S5).
|
||||
* (2) doar cont debit fara credit -> valideaza .F., spion: zero apeluri RPC.
|
||||
* (3) esec fortat pe al doilea RPC (salveaza_pret_nomenclator) dupa ce primul (gaseste_sau_creeaza_
|
||||
* nota_vanzare, real, 461/7583) a creat nota -> salveaza .F.; SAVEPOINT/ROLLBACK TO local (nu
|
||||
* tot lantul), apoi SELECT confirma ca nici nota noua, nici randul nu au ramas modificate.
|
||||
* (4) rand cu ID_NOTA existent (pus direct prin SQL, in tranzactie), instanta noua fara incarca,
|
||||
* salveaza -> ID_NOTA neschimbat (pnScrieNota=0 cand lIncarcat=.F.).
|
||||
* (5) conturi 461/7583 salvate prin clasa (real, fara spion) -> pack_facturare.contabilizeaza_articol
|
||||
* pe un rand de factura pentru acelasi articol/politica -> ACT_TEMP.SCD=461/SCC=7583 (tiparul S4b-A).
|
||||
* (6) recalculeaza_pret: 100 fara TVA la proc_tvav=1.21 -> 121 si invers: 121 -> 100, rotunjire la
|
||||
* zecimalele reale (gnPc=2, verificat egal cu pack_sesiune.nzecimale_pretv - baseline_12b.sql:114).
|
||||
*
|
||||
* Spion pe goExecutor (subclasa, DODEFAULT pe PCOUNT) - tiparul din probe_12b_s7a_optiuni_readonly.prg /
|
||||
* editare_factura\probe_s13_toomanycolumns.prg: nu opreste executia decat pentru cazul (3), unde
|
||||
* filtreaza explicit SQL-ul care contine 'salveaza_pret_nomenclator' si intoarce -1 fara sa-l trimita.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File ruleaza_suita.ps1 -Nume probe_12b_s6b_clasa_pret_nomenclator
|
||||
* Log: D:\ROA\ROAFACTURARE\docs\loguri_12b\s6b_clasa.log (cerut de sarcina, nu out\)
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gcCaz, gnPass, gnFail, gnTransOriginal, gcErrMsg, gnIdArtProba, gnAn, gnLuna
|
||||
gcErrMsg = ""
|
||||
gcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\s6b_clasa.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
|
||||
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
|
||||
ENDIF
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
gcCaz = ""
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
gnIdArtProba = 2528841557
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
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 AfLog WITH "FAIL: conexiune Oracle esuata"
|
||||
DO Final
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
* gnPc lipseste din test_init_env_auto_roafacturare - il seteaza aplicatia real la nivelul sesiunii,
|
||||
* tiparul din alte probe ale suitei (gnPc = 2, ex. test_s4c_discount_grid.prg)
|
||||
PUBLIC gnPc
|
||||
gnPc = 2
|
||||
DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle) + " gnPc=" + TRANSFORM(gnPc)
|
||||
|
||||
IF TYPE('cus_pret_nomenclator') <> 'C' AND !("CUS_PRET_NOMENCLATOR" $ UPPER(SET('PROCEDURE')))
|
||||
* verificare informativa - CREATEOBJECT esueaza oricum mai jos daca clasa nu e vizibila
|
||||
DO AfLog WITH "info: SET(PROCEDURE) nu confirma explicit ofacturare_comun.prg (verificare slaba, se bazeaza pe CREATEOBJECT)"
|
||||
ENDIF
|
||||
|
||||
gnTransOriginal = SQLGETPROP(gnHandle, "Transactions")
|
||||
SQLSETPROP(gnHandle, "Transactions", 2)
|
||||
DO AfLog WITH "Transactions manual, original=" + TRANSFORM(gnTransOriginal)
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* precondition: articolul de proba e chiar pe politica 41, si pack_facturare are politica de
|
||||
* stoc + antetul de document initializate (cerut de contabilizeaza_articol la cazul 5, tiparul
|
||||
* precondition din probe_12b_s4b_matrice.prg)
|
||||
gcCaz = "[precondition] "
|
||||
LOCAL lnOk, lcSql
|
||||
lnOk = SQLEXEC(gnHandle, "select count(*) cnt from crm_politici_pret_art where id_pol = 41 and id_articol = " + TRANSFORM(gnIdArtProba), "crspre")
|
||||
DO Verdict WITH lnOk > 0 AND USED('crspre') AND crspre.cnt = 1, "articolul " + TRANSFORM(gnIdArtProba) + " e pe politica 41 (cnt=" + TRANSFORM(IIF(USED('crspre'),crspre.cnt,-1)) + ")"
|
||||
IF USED('crspre')
|
||||
USE IN crspre
|
||||
ENDIF
|
||||
|
||||
gnAn = YEAR(DATETIME())
|
||||
gnLuna = MONTH(DATETIME())
|
||||
lcSql = [begin pack_facturare.initializeaza_facturare(8); ] + ;
|
||||
[if nvl(pack_facturare.nid_politica_stoc,0) <> 41 then raise_application_error(-20900,'nid_politica_stoc='||to_char(pack_facturare.nid_politica_stoc)); end if; ] + ;
|
||||
[pack_facturare.nnumar_act := 999998; pack_facturare.cserie_act := 'TST'; ] + ;
|
||||
[pack_facturare.ddata_ireg := sysdate; pack_facturare.ddata_act := sysdate; pack_facturare.ddata_scadenta := sysdate; ] + ;
|
||||
[pack_facturare.nid_moneda_nationala := 3; pack_facturare.nperechec := 0; pack_facturare.nid_fdoc := 0; ] + ;
|
||||
[pack_facturare.nid_factc := 0; pack_facturare.nid_part := 0; pack_facturare.nid_partc := 0; pack_facturare.nid_set := 26000; ] + ;
|
||||
[pack_facturare.nid_sectie_stoc := nvl(pack_facturare.nid_sectie_stoc,1); pack_facturare.ntip := 1; end;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
DO Verdict WITH lnOk > 0, "initializeaza_facturare(8) + antet document proba + precondition nid_politica_stoc=41"
|
||||
IF lnOk <= 0
|
||||
DO AfLog WITH "BLOCAT: precondition esuata, opresc"
|
||||
DO Final
|
||||
ENDIF
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (1): asigura_politica -> incarca -> salveaza (conturi goale) -> instanta noua incarca
|
||||
*==========================================================================================
|
||||
gcCaz = "[1-incarca-salveaza-reincarca] "
|
||||
LOCAL loP1, loP1b
|
||||
loP1 = CREATEOBJECT('cus_pret_nomenclator')
|
||||
LOCAL lnPol1
|
||||
lnPol1 = loP1.asigura_politica()
|
||||
DO Verdict WITH lnPol1 = 41, "asigura_politica() = 41 (obtinut " + TRANSFORM(lnPol1) + ")"
|
||||
|
||||
DO Verdict WITH loP1.incarca(gnIdArtProba), "incarca(" + TRANSFORM(gnIdArtProba) + ") = .T."
|
||||
DO AfLog WITH " inainte de salveaza: pretftva=" + TRANSFORM(loP1.nPretFtva) + " pretctva=" + TRANSFORM(loP1.nPretCtva) + " proc_tvav=" + TRANSFORM(loP1.nProcTvav) + " id_nota=" + TRANSFORM(NVL(loP1.nIdNota,-999))
|
||||
|
||||
loP1.nPretFtva = 12.34
|
||||
loP1.nProcTvav = 1.21
|
||||
loP1.nPretCtva = loP1.recalculeaza_pret(loP1.nPretFtva, .T.)
|
||||
loP1.cScd = []
|
||||
loP1.cScc = []
|
||||
DO Verdict WITH loP1.salveaza(gnIdArtProba), "salveaza() = .T. (pretftva=12.34 pretctva=" + TRANSFORM(loP1.nPretCtva) + " proc_tvav=1.21, conturi goale)"
|
||||
|
||||
loP1b = CREATEOBJECT('cus_pret_nomenclator')
|
||||
DO Verdict WITH loP1b.incarca(gnIdArtProba), "instanta noua: incarca(" + TRANSFORM(gnIdArtProba) + ") = .T."
|
||||
DO Verdict WITH loP1b.nPretFtva == 12.34, "reincarcat pretftva=12.34 (obtinut " + TRANSFORM(loP1b.nPretFtva) + ")"
|
||||
DO Verdict WITH loP1b.nPretCtva == loP1.nPretCtva, "reincarcat pretctva=" + TRANSFORM(loP1.nPretCtva) + " (obtinut " + TRANSFORM(loP1b.nPretCtva) + ")"
|
||||
DO Verdict WITH loP1b.nProcTvav == 1.21, "reincarcat proc_tvav=1.21 (obtinut " + TRANSFORM(loP1b.nProcTvav) + ")"
|
||||
DO Verdict WITH ISNULL(loP1b.nIdNota), "reincarcat id_nota=NULL (conturi goale la salvare, incarcat=.T. -> scrie_nota=1)"
|
||||
|
||||
* citire si prin cursor_preturi (tiparul S5): articol vizibil prin STOC temporar (gestiune 1, cants=10)
|
||||
gcCaz = "[1b-cursor_preturi] "
|
||||
LOCAL lnIdStoc
|
||||
lnOk = SQLEXEC(gnHandle, "select nvl(max(id_stoc),0)+1 idn from stoc", "crsids")
|
||||
lnIdStoc = IIF(lnOk > 0 AND USED('crsids'), crsids.idn, 0)
|
||||
IF USED('crsids')
|
||||
USE IN crsids
|
||||
ENDIF
|
||||
lcSql = "insert into stoc (id_stoc, an, luna, id_articol, pret, pretv, tva, tvav, cants, cant, cante, cont, pretd, id_gestiune, proc_tvav, id_sucursala) values (" + ;
|
||||
TRANSFORM(lnIdStoc) + "," + TRANSFORM(gnAn) + "," + TRANSFORM(gnLuna) + "," + TRANSFORM(gnIdArtProba) + ",0,0,0,0,10,0,0,'371',0,1,1.21,167)"
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
DO Verdict WITH lnOk > 0, "INSERT STOC temporar pentru vizibilitate in cursor_preturi (id_stoc=" + TRANSFORM(lnIdStoc) + ")"
|
||||
|
||||
PRIVATE pnIdArtCursor, pnGasitCursor, pnPretCursor, pnProcCursor
|
||||
pnIdArtCursor = gnIdArtProba
|
||||
pnGasitCursor = 0
|
||||
pnPretCursor = 0
|
||||
pnProcCursor = 0
|
||||
* ?@ ca tinta de asignare directa (nu doar ca parametru de apel) e confirmat in COMUN\clase\ocomenzi.vc2:1916
|
||||
* ([begin ?@pcMesajVerificareCom:=pack_comenzi.verifica_acces_comanda(...); end;]) - dar doar ca instructiune
|
||||
* de top-level, o singura data; asignarile de mai jos se fac dupa LOOP, in variabile PL/SQL simple pe
|
||||
* parcursul buclei, ca sa nu riscam un bind ?@ neconfirmat imbricat in IF/LOOP (View Parameter modal)
|
||||
lcSql = [declare v_cursor pack_facturare.cursor_facturare; v_id_c number; v_id_articol number; v_lot varchar2(50); v_serie varchar2(50); ] + ;
|
||||
[v_id_pol number; v_id_valuta number; v_nume_lista varchar2(200); v_discount number; v_discount_val number; ] + ;
|
||||
[v_codmat varchar2(50); v_codbare varchar2(50); v_denumire varchar2(200); v_um varchar2(50); v_gestionabil number; ] + ;
|
||||
[v_cantitate number; v_proc_tvav number; v_preturi_cu_tva number; v_curs number; v_multiplicator number; ] + ;
|
||||
[v_pret number; v_pret_val number; v_tip_valuta number; v_nume_val varchar2(50); v_modificabil number; ] + ;
|
||||
[v_gasit number := 0; v_pret_out number := 0; v_proc_out number := 0; ] + ;
|
||||
[begin pack_facturare.cursor_preturi(trunc(sysdate),1,3,null,] + TRANSFORM(gnLuna) + [,] + TRANSFORM(gnAn) + [,8,167,v_cursor); ] + ;
|
||||
[loop fetch v_cursor into v_id_c, v_id_articol, v_lot, v_serie, v_id_pol, v_id_valuta, v_nume_lista, v_discount, v_discount_val, ] + ;
|
||||
[v_codmat, v_codbare, v_denumire, v_um, v_gestionabil, v_cantitate, v_proc_tvav, v_preturi_cu_tva, v_curs, v_multiplicator, ] + ;
|
||||
[v_pret, v_pret_val, v_tip_valuta, v_nume_val, v_modificabil; ] + ;
|
||||
[exit when v_cursor%notfound; if v_id_articol = ] + TRANSFORM(gnIdArtProba) + [ then v_gasit := 1; v_pret_out := v_pret; v_proc_out := v_proc_tvav; exit; end if; end loop; ] + ;
|
||||
[close v_cursor; ?@pnGasitCursor := v_gasit; ?@pnPretCursor := v_pret_out; ?@pnProcCursor := v_proc_out; end;]
|
||||
lnOk = goExecutor.oExecute(lcSql)
|
||||
DO Verdict WITH lnOk >= 0, "bloc cursor_preturi executat fara eroare"
|
||||
DO AfLog WITH " cursor_preturi: gasit=" + TRANSFORM(pnGasitCursor) + " pret=" + TRANSFORM(pnPretCursor) + " proc_tvav=" + TRANSFORM(pnProcCursor)
|
||||
DO Verdict WITH pnGasitCursor = 1, "articolul apare in cursor_preturi (STOC temporar vizibil)"
|
||||
DO Verdict WITH ROUND(pnPretCursor,2) == 12.34, "cursor_preturi.pret = 12.34 (obtinut " + TRANSFORM(pnPretCursor) + ")"
|
||||
DO Verdict WITH ROUND(pnProcCursor,2) == 1.21, "cursor_preturi.proc_tvav = 1.21 (obtinut " + TRANSFORM(pnProcCursor) + ")"
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "delete from stoc where id_stoc = " + TRANSFORM(lnIdStoc))
|
||||
DO Verdict WITH lnOk >= 0, "curatare STOC temporar"
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (2): doar cont debit fara credit -> valideaza .F., zero apeluri RPC
|
||||
*==========================================================================================
|
||||
gcCaz = "[2-doar-debit-zero-rpc] "
|
||||
LOCAL loP2, loRealTmp, loSpy2
|
||||
loP2 = CREATEOBJECT('cus_pret_nomenclator')
|
||||
loP2.nPretFtva = 10
|
||||
loP2.nPretCtva = 12.1
|
||||
loP2.nProcTvav = 1.21
|
||||
loP2.cScd = '461'
|
||||
loP2.cScc = []
|
||||
DO Verdict WITH !loP2.valideaza(), "valideaza() = .F. (doar debit, fara credit)"
|
||||
|
||||
loRealTmp = goExecutor
|
||||
loSpy2 = CREATEOBJECT('SpyS6b')
|
||||
goExecutor = loSpy2
|
||||
LOCAL llRezSalv2
|
||||
llRezSalv2 = loP2.salveaza(gnIdArtProba)
|
||||
goExecutor = loRealTmp
|
||||
DO Verdict WITH !llRezSalv2, "salveaza() = .F. (refuz pe validare)"
|
||||
DO Verdict WITH loSpy2.nApeluri = 0, "zero apeluri RPC prin executor (" + TRANSFORM(loSpy2.nApeluri) + " obtinut)"
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (3): esec fortat pe al doilea RPC (salveaza_pret_nomenclator), dupa ce primul (nota
|
||||
* 461/7583) chiar s-a executat - SAVEPOINT local, ROLLBACK TO, apoi SELECT de confirmare
|
||||
*==========================================================================================
|
||||
gcCaz = "[3-esec-al-doilea-rpc] "
|
||||
lnOk = SQLEXEC(gnHandle, "SAVEPOINT SP_CAZ3")
|
||||
DO Verdict WITH lnOk > 0, "SAVEPOINT SP_CAZ3"
|
||||
|
||||
LOCAL lnMaxNotaInainte, lnIdNotaRandInainte
|
||||
lnOk = SQLEXEC(gnHandle, "select nvl(max(id_nota),0) mx from crm_note_vanzari", "crsmx1")
|
||||
lnMaxNotaInainte = IIF(lnOk > 0 AND USED('crsmx1'), crsmx1.mx, -1)
|
||||
IF USED('crsmx1')
|
||||
USE IN crsmx1
|
||||
ENDIF
|
||||
lnOk = SQLEXEC(gnHandle, "select id_nota from crm_politici_pret_art where id_pol = 41 and id_articol = " + TRANSFORM(gnIdArtProba), "crsid1")
|
||||
lnIdNotaRandInainte = IIF(lnOk > 0 AND USED('crsid1'), NVL(crsid1.id_nota,-999), -999)
|
||||
IF USED('crsid1')
|
||||
USE IN crsid1
|
||||
ENDIF
|
||||
DO AfLog WITH " inainte: max(id_nota)=" + TRANSFORM(lnMaxNotaInainte) + " id_nota rand=" + TRANSFORM(lnIdNotaRandInainte)
|
||||
|
||||
LOCAL loP3, loSpy3
|
||||
loP3 = CREATEOBJECT('cus_pret_nomenclator')
|
||||
DO Verdict WITH loP3.incarca(gnIdArtProba), "incarca() pentru caz3"
|
||||
loP3.nPretFtva = 20
|
||||
loP3.nProcTvav = 1.21
|
||||
loP3.nPretCtva = loP3.recalculeaza_pret(loP3.nPretFtva, .T.)
|
||||
loP3.cScd = '461'
|
||||
loP3.cScc = '7583'
|
||||
|
||||
loRealTmp = goExecutor
|
||||
loSpy3 = CREATEOBJECT('SpyS6b')
|
||||
loSpy3.lForteazaEsecSalveaza = .T.
|
||||
goExecutor = loSpy3
|
||||
LOCAL llRezSalv3
|
||||
llRezSalv3 = loP3.salveaza(gnIdArtProba)
|
||||
goExecutor = loRealTmp
|
||||
DO Verdict WITH !llRezSalv3, "salveaza() = .F. (RPC2 fortat sa esueze)"
|
||||
DO Verdict WITH loSpy3.nApeluri = 2, "2 apeluri RPC (nota + salveaza_pret_nomenclator interceptat) - " + TRANSFORM(loSpy3.nApeluri)
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "ROLLBACK TO SP_CAZ3")
|
||||
DO Verdict WITH lnOk > 0, "ROLLBACK TO SP_CAZ3"
|
||||
|
||||
LOCAL lnMaxNotaDupa, lnIdNotaRandDupa
|
||||
lnOk = SQLEXEC(gnHandle, "select nvl(max(id_nota),0) mx from crm_note_vanzari", "crsmx2")
|
||||
lnMaxNotaDupa = IIF(lnOk > 0 AND USED('crsmx2'), crsmx2.mx, -1)
|
||||
IF USED('crsmx2')
|
||||
USE IN crsmx2
|
||||
ENDIF
|
||||
lnOk = SQLEXEC(gnHandle, "select id_nota from crm_politici_pret_art where id_pol = 41 and id_articol = " + TRANSFORM(gnIdArtProba), "crsid2")
|
||||
lnIdNotaRandDupa = IIF(lnOk > 0 AND USED('crsid2'), NVL(crsid2.id_nota,-999), -999)
|
||||
IF USED('crsid2')
|
||||
USE IN crsid2
|
||||
ENDIF
|
||||
DO AfLog WITH " dupa ROLLBACK: max(id_nota)=" + TRANSFORM(lnMaxNotaDupa) + " id_nota rand=" + TRANSFORM(lnIdNotaRandDupa)
|
||||
DO Verdict WITH lnMaxNotaDupa = lnMaxNotaInainte, "dupa ROLLBACK nicio nota noua (max(id_nota) neschimbat)"
|
||||
DO Verdict WITH lnIdNotaRandDupa = lnIdNotaRandInainte, "dupa ROLLBACK randul politicii nu a fost modificat (id_nota=" + TRANSFORM(lnIdNotaRandDupa) + ")"
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (4): rand cu ID_NOTA existent (SQL direct), instanta noua fara incarca -> ID_NOTA neschimbat
|
||||
*==========================================================================================
|
||||
gcCaz = "[4-fara-incarca-idnota-neschimbat] "
|
||||
LOCAL lnNotaFixata
|
||||
lnNotaFixata = 6
|
||||
lnOk = SQLEXEC(gnHandle, "update crm_politici_pret_art set id_nota = " + TRANSFORM(lnNotaFixata) + " where id_pol = 41 and id_articol = " + TRANSFORM(gnIdArtProba))
|
||||
DO Verdict WITH lnOk > 0, "UPDATE id_nota=" + TRANSFORM(lnNotaFixata) + " direct pe rand (precondition caz 4)"
|
||||
|
||||
LOCAL loP4
|
||||
loP4 = CREATEOBJECT('cus_pret_nomenclator')
|
||||
DO Verdict WITH !loP4.lIncarcat, "instanta noua: lIncarcat=.F. (fara incarca)"
|
||||
loP4.nPretFtva = 30
|
||||
loP4.nProcTvav = 1.21
|
||||
loP4.nPretCtva = loP4.recalculeaza_pret(loP4.nPretFtva, .T.)
|
||||
DO Verdict WITH loP4.salveaza(gnIdArtProba), "salveaza() fara incarca = .T."
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select id_nota from crm_politici_pret_art where id_pol = 41 and id_articol = " + TRANSFORM(gnIdArtProba), "crsid4")
|
||||
DO Verdict WITH lnOk > 0 AND USED('crsid4') AND NVL(crsid4.id_nota,-999) = lnNotaFixata, "id_nota neschimbat dupa salveaza() fara incarca (" + TRANSFORM(IIF(USED('crsid4'),NVL(crsid4.id_nota,-999),-999)) + ", asteptat " + TRANSFORM(lnNotaFixata) + ")"
|
||||
IF USED('crsid4')
|
||||
USE IN crsid4
|
||||
ENDIF
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (5): conturi 461/7583 salvate prin clasa (real) -> contabilizeaza_articol -> ACT_TEMP
|
||||
*==========================================================================================
|
||||
gcCaz = "[5-conturi-461-7583-contabilizare] "
|
||||
LOCAL loP5
|
||||
loP5 = CREATEOBJECT('cus_pret_nomenclator')
|
||||
DO Verdict WITH loP5.incarca(gnIdArtProba), "incarca() pentru caz5"
|
||||
loP5.nPretFtva = 40
|
||||
loP5.nProcTvav = 1.21
|
||||
loP5.nPretCtva = loP5.recalculeaza_pret(loP5.nPretFtva, .T.)
|
||||
loP5.cScd = '461'
|
||||
loP5.cScc = '7583'
|
||||
DO Verdict WITH loP5.salveaza(gnIdArtProba), "salveaza() real cu conturi 461/7583 = .T."
|
||||
DO Verdict WITH !ISNULL(loP5.nIdNota) AND loP5.nIdNota > 0, "id_nota atribuit dupa salveaza (" + TRANSFORM(NVL(loP5.nIdNota,-1)) + ")"
|
||||
|
||||
lcSql = [DECLARE v_row vanzari_detalii_temp%ROWTYPE; v_res NUMBER; ] + ;
|
||||
[BEGIN pack_facturare.ntip := 1; pack_facturare.nid_act := -906000; ] + ;
|
||||
[v_row.id_pol := 41; v_row.id_articol := ] + TRANSFORM(gnIdArtProba) + [; v_row.cont_venit := NULL; ] + ;
|
||||
[v_row.cantitate := 1; v_row.pret := 40; v_row.discount_unitar := 0; v_row.pret_cu_tva := 0; ] + ;
|
||||
[v_row.id_valuta := 3; v_row.curs := 1; v_row.multiplicator := 1; v_row.id_gestiune := -1000; ] + ;
|
||||
[v_row.in_stoc := 0; v_row.explicatia := 'PROBA S6B CAZ5'; v_row.proc_tvav := 1.21; ] + ;
|
||||
[v_res := pack_facturare.contabilizeaza_articol(v_row); END;]
|
||||
lnOk = SQLEXEC(gnHandle, lcSql)
|
||||
DO Verdict WITH lnOk > 0, "contabilizeaza_articol fara eroare"
|
||||
IF lnOk > 0
|
||||
* ACT_TEMP.ID_ACT = nid_act + 1, nu nid_act (tiparul confirmat pe toate cele 11 cazuri din
|
||||
* probe_12b_s4b_matrice.prg, ex. nid_act=-901000 -> LeaActTemp WITH -900999)
|
||||
lnOk = SQLEXEC(gnHandle, "select nvl(scd,'<NULL>') scd, nvl(scc,'<NULL>') scc from act_temp where id_act = -905999", "crsact5")
|
||||
IF lnOk > 0 AND USED('crsact5') AND RECCOUNT('crsact5') = 1
|
||||
DO AfLog WITH " ACT_TEMP: SCD=" + ALLTRIM(crsact5.scd) + " SCC=" + ALLTRIM(crsact5.scc)
|
||||
DO Verdict WITH ALLTRIM(crsact5.scd) == "461" AND ALLTRIM(crsact5.scc) == "7583", "ACT_TEMP.SCD/SCC = 461/7583 (nota scrisa prin clasa)"
|
||||
ELSE
|
||||
DO Verdict WITH .F., "nicio linie in ACT_TEMP (neasteptat)"
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF USED('crsact5')
|
||||
USE IN crsact5
|
||||
ENDIF
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (6): recalculeaza_pret, rotunjire pe gnPc (verificat egal cu pack_sesiune.nzecimale_pretv)
|
||||
*==========================================================================================
|
||||
gcCaz = "[6-recalculeaza_pret] "
|
||||
* pack_sesiune.nzecimale_pretv e variabila de pachet PL/SQL, neselectabila direct din SQL
|
||||
* (ORA-06553 PLS-221, confirmat in docs\baseline_12b.md:6-9) - SQLEXEC-ul de mai jos esua tacut
|
||||
* (lnOk<=0), de-aia asertul vechi trecea gnPc fata de fallback-ul -1, nu fata de o valoare reala.
|
||||
* recalculeaza_pret (ofacturare_comun.prg:2485/2487) foloseste Round(tnPret*nProcTvav, gnPc) -
|
||||
* gnPc e sursa reala de rotunjire, nu pachetul Oracle; verificat prin cod (vfp_symbols -Grep).
|
||||
DO Verdict WITH gnPc = 2, "gnPc = 2 (precizie sume lei, sursa reala din recalculeaza_pret - ofacturare_comun.prg:2485)"
|
||||
|
||||
LOCAL loP6
|
||||
loP6 = CREATEOBJECT('cus_pret_nomenclator')
|
||||
loP6.nProcTvav = 1.21
|
||||
DO Verdict WITH loP6.recalculeaza_pret(100, .T.) == 121, "recalculeaza_pret(100,.T.) = 121 (obtinut " + TRANSFORM(loP6.recalculeaza_pret(100,.T.)) + ")"
|
||||
DO Verdict WITH loP6.recalculeaza_pret(121, .F.) == 100, "recalculeaza_pret(121,.F.) = 100 (obtinut " + TRANSFORM(loP6.recalculeaza_pret(121,.F.)) + ")"
|
||||
|
||||
DO Final
|
||||
|
||||
*==================================================================================================
|
||||
* Spion pe goExecutor - subclasa DODEFAULT pe PCOUNT (nu opreste executia), tiparul din
|
||||
* probe_12b_s7a_optiuni_readonly.prg. lForteazaEsecSalveaza=.T. intoarce -1 fara sa mai trimita
|
||||
* SQL-ul cand acesta contine 'salveaza_pret_nomenclator' (cazul 3) - restul trece prin DODEFAULT.
|
||||
*==================================================================================================
|
||||
DEFINE CLASS SpyS6b AS oexecutor
|
||||
nApeluri = 0
|
||||
cToateSql = ''
|
||||
lForteazaEsecSalveaza = .F.
|
||||
|
||||
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
||||
LOCAL lnRet, lnPc, lcS
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '<NU E SIR>')
|
||||
THIS.cToateSql = THIS.cToateSql + lcS + CHR(13) + CHR(10)
|
||||
STRTOFILE(' SpyS6b #' + TRANSFORM(THIS.nApeluri) + ' SQL=[' + lcS + ']' + CHR(13) + CHR(10), gcLog, 1)
|
||||
|
||||
IF THIS.lForteazaEsecSalveaza AND 'SALVEAZA_PRET_NOMENCLATOR' $ UPPER(lcS)
|
||||
STRTOFILE(' SpyS6b: ESEC FORTAT (nu trimit SQL-ul de mai sus)' + CHR(13) + CHR(10), gcLog, 1)
|
||||
RETURN -1
|
||||
ENDIF
|
||||
|
||||
lnPc = PCOUNT()
|
||||
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
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE Verdict
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO AfLog WITH "PASS: " + gcCaz + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Final
|
||||
LOCAL lnOk
|
||||
gcCaz = "[final] "
|
||||
lnOk = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk)
|
||||
IF TYPE('gnTransOriginal') = 'N'
|
||||
SQLSETPROP(gnHandle, "Transactions", gnTransOriginal)
|
||||
ENDIF
|
||||
DO AfLog WITH "TOTAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail)
|
||||
DO AfLog WITH "END " + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
@@ -0,0 +1,785 @@
|
||||
* probe_12b_s6c_fisa_pagina_vanzare.prg
|
||||
* Plan #12b, S6c - proba headless pe frm_catalog_articole_nou (COMUN\clase\onom_articole.vc2:662),
|
||||
* Page3 "Vanzare" (docs\plan_12b_nomenclator_politica_stoc.md, sectiunea S6c).
|
||||
*
|
||||
* Partea 1 (fara scriere in Oracle, fara salvare), doua cazuri, in DOUA procese vfp9 separate -
|
||||
* Init() executa neconditionat (indiferent de gcNumeProgram) generatorul de coduri automate
|
||||
* (creeaza_cursor_serii); a doua instantiere a formularului in ACELASI proces se autobloca (nu
|
||||
* apuca sa arunce nicio eroare prinsa de TRY, nici dupa ROLLBACK intre cele doua CREATEOBJECT -
|
||||
* incercat si infirmat), deci fiecare caz porneste propriul vfp9, cu propriul gnHandle:
|
||||
* (0a) implicit, fara parametru - CREATEOBJECT sub gcNumeProgram=ROAFACTURARE - trece (errno=0);
|
||||
* PageCount=3; Thisform.oPretNom instantiat (Vartype='O'); valorile incarcate in oPretNom
|
||||
* comparate cu un SELECT direct, independent de goExecutor, pe crm_politici_pret_art;
|
||||
* TabIndex pe cele 7 controale din Page3; recalculeaza_pret (ftva<->ctva) apelat prin
|
||||
* Thisform.oPretNom, cu proc_tvav real incarcat.
|
||||
* (0b) cu parametrul ROACONT - acelasi CREATEOBJECT sub gcNumeProgram=ROACONT - trece (errno=0);
|
||||
* PageCount=2; Thisform.oPretNom NU e instantiat (Vartype<>'O').
|
||||
*
|
||||
* Partea 2 (scrie in Oracle, tot in tranzactie/ROLLBACK), patru cazuri, fiecare in procesul lui
|
||||
* propriu (acelasi motiv ca la partea 1 - o singura instantiere a formularului per proces).
|
||||
* Salvarea headless NU trece prin inainte_de_do_termin() (onom_articole.vc2:1777) - confirmat cu
|
||||
* un script de diagnostic: This.ActiveControl.BaseClass (linia 1782, primul rand al metodei)
|
||||
* arunca ERROR 1924 "ACTIVECONTROL is not an object" pe un formular niciodata Show(), deci fara
|
||||
* focus real de fereastra (masina partajata - nu se face Show()). In loc, proba apeleaza direct,
|
||||
* in aceeasi ordine ca in productie, metodele reale de salvare pe care inainte_de_do_termin le
|
||||
* orchestreaza (onom_articole.vc2:1799-1840): Thisform.do_deschide_tranzactie(),
|
||||
* Thisform.cus_odata_catalog_articole.salvare(Thisform.orec, Thisform.NID) (cu lSilent=.T., ca sa
|
||||
* sara peste dialogul modal de confirmare - _cus_odata_base.vc2:126-130), apoi
|
||||
* Thisform.oPretNom.salveaza(idArticol) (COMUN\programe\ofacturare_comun.prg:2487).
|
||||
* Diferenta fata de fluxul real: pe cazurile de succes (CAZ1/CAZ2) proba NU cheama
|
||||
* Thisform.do_inchide_tranzactie(1) - acela face un SQLCOMMIT() real, ireversibil, pe schema de
|
||||
* test; verificarea se face prin SELECT in aceeasi tranzactie manuala, apoi un ROLLBACK direct
|
||||
* (nu wrapper-ul de productie). Pe CAZ3 (esec fortat), do_inchide_tranzactie(2) chiar se cheama -
|
||||
* acela face SQLROLLBACK(), sigur de rulat real, exact cum cere sarcina.
|
||||
* (CAZ1) articol NOU (INSERT), pret/TVA/conturi (461/7583) setate pe Page3 (Thisform.oPretNom) ->
|
||||
* dupa salvare, randul din crm_politici_pret_art exista in Oracle (in tranzactie) cu
|
||||
* valorile puse de proba, id_nota alocat; apoi ROLLBACK direct, zero date ramase.
|
||||
* (CAZ2) articolul de proba (2528841557, UPDATE) cu pret/TVA/conturi noi pe Page3 -> randul din
|
||||
* crm_politici_pret_art actualizat in Oracle (in tranzactie); apoi ROLLBACK direct.
|
||||
* (CAZ3) articol NOU (INSERT) - articolul se salveaza real, apoi salvarea randului de pret e
|
||||
* fortata sa esueze cu un spion pe goExecutor (subclasa oexecutor, filtreaza SQL-ul care
|
||||
* contine 'salveaza_pret_nomenclator', fara modificare de productie - tiparul SpyS6b din
|
||||
* probe_12b_s6b_clasa_pret_nomenclator.prg) -> Thisform.do_inchide_tranzactie(2) (ROLLBACK
|
||||
* real) -> articolul nou nu mai exista.
|
||||
* (CAZ4) regresie garda NULL (onom_articole.vc2:88, S6c-4) - articol NOU (INSERT) cu
|
||||
* id_tara_origine fortat NULL -> cus_odata_catalog_articole.salvare() trebuie sa construiasca
|
||||
* un SQL real (nu This.csql NULL) si sa scrie efectiv in Oracle; verificat direct dupa
|
||||
* codmat (id_tara_origine ramas NULL), apoi ROLLBACK direct. Inainte de reparatie, csql
|
||||
* devenea NULL si salvare() intorcea .T. fara nicio scriere (defect de productie #1).
|
||||
* (CAZ5) regresie S6c-5 (_cus_odata_base.vc2:150-181) - subclasa LOCALA proba
|
||||
* (cus_odata_vid_s6c5 AS cus_odata_catalog_articole, make_sql suprascris gol, fara nicio
|
||||
* modificare de productie) forteaza This.csql gol -> salvare() trebuie sa intoarca .F.
|
||||
* (inainte de reparatie intorcea .T. fara sa trimita niciun SQL - defect de productie #2).
|
||||
* Nu scrie in Oracle (verificat prin spion pe goExecutor, 0 apeluri).
|
||||
* Manual, ramane datorie deschisa (nu se automatizeaza): aspectul paginii si fluxul real
|
||||
* "articol nou -> factura"; fisa deschisa din NIR si din importul e-Factura.
|
||||
*
|
||||
* Articol de proba: 2528841557, pe politica 41 (tiparul S5/S5b/S6b).
|
||||
*
|
||||
* Rulare (0a): powershell -ExecutionPolicy Bypass -File ruleaza_suita.ps1 -Nume probe_12b_s6c_fisa_pagina_vanzare
|
||||
* Rulare (0b): "C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" -A -T probe_12b_s6c_fisa_pagina_vanzare.prg ROACONT
|
||||
* Rulare (CAZ1/CAZ2/CAZ3/CAZ4/CAZ5): "...\vfp9.exe" -A -T probe_12b_s6c_fisa_pagina_vanzare.prg CAZ1 (idem CAZ2, CAZ3, CAZ4, CAZ5)
|
||||
* Log: D:\ROA\ROAFACTURARE\docs\loguri_12b\s6c_fisa.log (cerut de sarcina, nu out\; fiecare
|
||||
* proces face APPEND peste rularile anterioare)
|
||||
|
||||
PARAMETERS tcModo
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
LOCAL lcCazSel
|
||||
lcCazSel = UPPER(ALLTRIM(IIF(VARTYPE(tcModo) = "C", tcModo, "")))
|
||||
LOCAL llCazB
|
||||
llCazB = (lcCazSel == "ROACONT")
|
||||
|
||||
PUBLIC gcLog, gcCaz, gnPass, gnFail
|
||||
gcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\s6c_fisa.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
|
||||
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
|
||||
ENDIF
|
||||
DO CASE
|
||||
CASE llCazB
|
||||
STRTOFILE("--- caz (0b), proces separat, START " + TTOC(DATETIME()) + " ---" + CHR(13) + CHR(10), gcLog, 1)
|
||||
CASE INLIST(lcCazSel, "CAZ1", "CAZ2", "CAZ3", "CAZ4", "CAZ5")
|
||||
STRTOFILE("--- partea 2, caz (" + lcCazSel + "), proces separat, START " + TTOC(DATETIME()) + " ---" + CHR(13) + CHR(10), gcLog, 1)
|
||||
OTHERWISE
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
ENDCASE
|
||||
gcCaz = ""
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
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 AfLog WITH "FAIL: conexiune Oracle esuata"
|
||||
DO Final
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
PUBLIC gnPc
|
||||
gnPc = 2
|
||||
DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle) + " gnPc=" + TRANSFORM(gnPc)
|
||||
|
||||
* incarcare explicita din calea COMPLETA (tiparul S7a) - ofacturare.vcx inainte de onom_articole.vcx,
|
||||
* la fel ca la instalarea reala (roafacturare.prg incarca tot COMUN\CLASE la pornire)
|
||||
SET PATH TO (gcAppPath + "COMUN\CLASE") ADDITIVE
|
||||
SET CLASSLIB TO (gcAppPath + "COMUN\CLASE\ofacturare.vcx") ADDITIVE
|
||||
SET CLASSLIB TO (gcAppPath + "COMUN\CLASE\onom_articole.vcx") ADDITIVE
|
||||
DO AfLog WITH "SET CLASSLIB ofacturare + onom_articole OK (cale completa)"
|
||||
|
||||
* precondition-urile pe care le face onomenclatoare.prg (nom_articole_modifica/nou) inainte sa
|
||||
* deschida fisa - fara ele Init() pica pe alias lipsa (crs_grupe_art / vnom_um_iso), independent
|
||||
* de continutul paginii Vanzare
|
||||
update_um()
|
||||
update_um_iso()
|
||||
update_grupe_art()
|
||||
update_subgrupe_art()
|
||||
DO AfLog WITH "preconditii onomenclatoare (update_um/update_um_iso/update_grupe_art/update_subgrupe_art) OK"
|
||||
|
||||
LOCAL lnIdArtProba, lnOk, loRec
|
||||
lnIdArtProba = 2528841557
|
||||
gcCaz = "[precondition] "
|
||||
lnOk = SQLEXEC(gnHandle, "select count(*) cnt from crm_politici_pret_art where id_pol = 41 and id_articol = " + TRANSFORM(lnIdArtProba), "crspre")
|
||||
DO Verdict WITH lnOk > 0 AND USED('crspre') AND crspre.cnt = 1, "articolul " + TRANSFORM(lnIdArtProba) + " e pe politica 41 (mod UPDATE)"
|
||||
IF USED('crspre')
|
||||
USE IN crspre
|
||||
ENDIF
|
||||
|
||||
lnOk = goExecutor.oExecuta('select * from vnom_articole where id_articol = ' + TRANSFORM(lnIdArtProba), 'vnom_articole_nou')
|
||||
DO Verdict WITH lnOk # .F. AND USED('vnom_articole_nou') AND RECCOUNT('vnom_articole_nou') = 1, "SELECT vnom_articole pentru articolul de proba"
|
||||
SELECT vnom_articole_nou
|
||||
SCATTER NAME loRec MEMO
|
||||
loRec.conditii_pastrare = NVL(loRec.conditii_pastrare,'')
|
||||
USE IN vnom_articole_nou
|
||||
|
||||
PUBLIC gcNumeProgram
|
||||
|
||||
DO CASE
|
||||
CASE !llCazB AND !INLIST(lcCazSel, "CAZ1", "CAZ2", "CAZ3", "CAZ4", "CAZ5")
|
||||
*==========================================================================================
|
||||
* CAZ (0a): CREATEOBJECT sub gcNumeProgram = ROAFACTURARE - trece, plus verificarile din plan
|
||||
* care nu scriu in Oracle: PageCount, instantierea oPretNom, valorile incarcate, TabIndex,
|
||||
* recalculeaza_pret
|
||||
*==========================================================================================
|
||||
* SELECT direct pe crm_politici_pret_art, PRIN SQLEXEC (fara goExecutor, deci independent de
|
||||
* incarca()) - referinta pentru compararea valorilor incarcate in Thisform.oPretNom
|
||||
LOCAL lnPretFtvaDirect, lnPretCtvaDirect, lnProcTvavDirect, lnIdVenchDirect, lnIdNotaDirect, llVenchNullDirect, llNotaNullDirect, llProcNullDirect
|
||||
gcCaz = "[precondition] "
|
||||
lnOk = SQLEXEC(gnHandle, "select pretftva, pretctva, proc_tvav, id_venchelt, id_nota from crm_politici_pret_art where id_pol = 41 and id_articol = " + TRANSFORM(lnIdArtProba), "crsdirect")
|
||||
DO Verdict WITH lnOk > 0 AND USED('crsdirect') AND RECCOUNT('crsdirect') = 1, "SELECT direct (SQLEXEC) pe crm_politici_pret_art, referinta pentru caz (0a)"
|
||||
lnPretFtvaDirect = NVL(crsdirect.pretftva,0)
|
||||
lnPretCtvaDirect = NVL(crsdirect.pretctva,0)
|
||||
llProcNullDirect = ISNULL(crsdirect.proc_tvav)
|
||||
lnProcTvavDirect = NVL(crsdirect.proc_tvav,-1)
|
||||
llVenchNullDirect = ISNULL(crsdirect.id_venchelt)
|
||||
lnIdVenchDirect = NVL(crsdirect.id_venchelt,-1)
|
||||
llNotaNullDirect = ISNULL(crsdirect.id_nota)
|
||||
lnIdNotaDirect = NVL(crsdirect.id_nota,-1)
|
||||
IF USED('crsdirect')
|
||||
USE IN crsdirect
|
||||
ENDIF
|
||||
DO AfLog WITH " referinta directa: pretftva=" + TRANSFORM(lnPretFtvaDirect) + " pretctva=" + TRANSFORM(lnPretCtvaDirect) + " proc_tvav=" + IIF(llProcNullDirect,"NULL",TRANSFORM(lnProcTvavDirect)) + " id_venchelt=" + IIF(llVenchNullDirect,"NULL",TRANSFORM(lnIdVenchDirect)) + " id_nota=" + IIF(llNotaNullDirect,"NULL",TRANSFORM(lnIdNotaDirect))
|
||||
|
||||
gcCaz = "[0a-createobject-ROAFACTURARE] "
|
||||
gcNumeProgram = 'ROAFACTURARE'
|
||||
PRIVATE poRec, pnIdAMS
|
||||
poRec = loRec
|
||||
pnIdAMS = lnIdArtProba
|
||||
|
||||
LOCAL loForm1, llCrapat1, lcErrMsg1, lnErrNo1
|
||||
llCrapat1 = .F.
|
||||
lcErrMsg1 = ''
|
||||
lnErrNo1 = 0
|
||||
TRY
|
||||
loForm1 = CREATEOBJECT('frm_catalog_articole_nou', loRec, lnIdArtProba, 'UPDATE')
|
||||
CATCH TO loExc1
|
||||
llCrapat1 = .T.
|
||||
lnErrNo1 = loExc1.ErrorNo
|
||||
lcErrMsg1 = loExc1.Message
|
||||
ENDTRY
|
||||
DO AfLog WITH " rezultat: llCrapat=" + TRANSFORM(llCrapat1) + " errno=" + TRANSFORM(lnErrNo1) + " mesaj=[" + lcErrMsg1 + "]"
|
||||
DO Verdict WITH !llCrapat1 AND lnErrNo1 = 0, "CREATEOBJECT trece sub gcNumeProgram=ROAFACTURARE (errno=0)"
|
||||
|
||||
IF !llCrapat1
|
||||
DO Verdict WITH loForm1._pageframe1.PageCount = 3, "PageCount = 3 (Page3 Vanzare vizibila, obtinut " + TRANSFORM(loForm1._pageframe1.PageCount) + ")"
|
||||
DO Verdict WITH VARTYPE(loForm1.oPretNom) = "O", "Thisform.oPretNom instantiat (Vartype=" + VARTYPE(loForm1.oPretNom) + ")"
|
||||
|
||||
IF VARTYPE(loForm1.oPretNom) = "O"
|
||||
gcCaz = "[0a-valori-opretnom] "
|
||||
DO Verdict WITH loForm1.oPretNom.nPretFtva == lnPretFtvaDirect, "oPretNom.nPretFtva = " + TRANSFORM(lnPretFtvaDirect) + " (obtinut " + TRANSFORM(loForm1.oPretNom.nPretFtva) + ")"
|
||||
DO Verdict WITH loForm1.oPretNom.nPretCtva == lnPretCtvaDirect, "oPretNom.nPretCtva = " + TRANSFORM(lnPretCtvaDirect) + " (obtinut " + TRANSFORM(loForm1.oPretNom.nPretCtva) + ")"
|
||||
DO Verdict WITH IIF(llProcNullDirect, ISNULL(loForm1.oPretNom.nProcTvav), loForm1.oPretNom.nProcTvav == lnProcTvavDirect), "oPretNom.nProcTvav = " + IIF(llProcNullDirect,"NULL",TRANSFORM(lnProcTvavDirect)) + " (obtinut " + IIF(ISNULL(loForm1.oPretNom.nProcTvav),"NULL",TRANSFORM(loForm1.oPretNom.nProcTvav)) + ")"
|
||||
DO Verdict WITH IIF(llVenchNullDirect, ISNULL(loForm1.oPretNom.nIdVenchelt), loForm1.oPretNom.nIdVenchelt == lnIdVenchDirect), "oPretNom.nIdVenchelt = " + IIF(llVenchNullDirect,"NULL",TRANSFORM(lnIdVenchDirect)) + " (obtinut " + IIF(ISNULL(loForm1.oPretNom.nIdVenchelt),"NULL",TRANSFORM(loForm1.oPretNom.nIdVenchelt)) + ")"
|
||||
DO Verdict WITH IIF(llNotaNullDirect, ISNULL(loForm1.oPretNom.nIdNota), loForm1.oPretNom.nIdNota == lnIdNotaDirect), "oPretNom.nIdNota = " + IIF(llNotaNullDirect,"NULL",TRANSFORM(lnIdNotaDirect)) + " (obtinut " + IIF(ISNULL(loForm1.oPretNom.nIdNota),"NULL",TRANSFORM(loForm1.oPretNom.nIdNota)) + ")"
|
||||
|
||||
gcCaz = "[0a-tabindex-page3] "
|
||||
DO Verdict WITH loForm1._pageframe1.Page3.Clb_tx_pret_ftva.TabIndex = 1, "TabIndex Clb_tx_pret_ftva = 1"
|
||||
DO Verdict WITH loForm1._pageframe1.Page3.Clb_tx_pret_ctva.TabIndex = 2, "TabIndex Clb_tx_pret_ctva = 2"
|
||||
DO Verdict WITH loForm1._pageframe1.Page3.Cb_tx_proc_tvav.TabIndex = 3, "TabIndex Cb_tx_proc_tvav = 3"
|
||||
DO Verdict WITH loForm1._pageframe1.Page3.Cb_tx_venit.TabIndex = 4, "TabIndex Cb_tx_venit = 4"
|
||||
DO Verdict WITH loForm1._pageframe1.Page3.Clb_tx_scd.TabIndex = 5, "TabIndex Clb_tx_scd = 5"
|
||||
DO Verdict WITH loForm1._pageframe1.Page3.Clb_tx_scc.TabIndex = 6, "TabIndex Clb_tx_scc = 6"
|
||||
DO Verdict WITH loForm1._pageframe1.Page3.Clb_tx_cont_dedus.TabIndex = 7, "TabIndex Clb_tx_cont_dedus = 7"
|
||||
|
||||
gcCaz = "[0a-recalculeaza-pret] "
|
||||
LOCAL lnFtvaTest, lnCtvaCalc, lnFtvaInapoi, lnCoefEfectiv
|
||||
lnFtvaTest = 100
|
||||
lnCoefEfectiv = IIF(ISNULL(loForm1.oPretNom.nProcTvav), (GetProcTvaStandard()+100)/100, loForm1.oPretNom.nProcTvav)
|
||||
lnCtvaCalc = loForm1.oPretNom.recalculeaza_pret(lnFtvaTest, .T.)
|
||||
lnFtvaInapoi = loForm1.oPretNom.recalculeaza_pret(lnCtvaCalc, .F.)
|
||||
DO AfLog WITH " recalculeaza_pret: proc_tvav efectiv=" + TRANSFORM(lnCoefEfectiv) + " 100->" + TRANSFORM(lnCtvaCalc) + "->" + TRANSFORM(lnFtvaInapoi)
|
||||
DO Verdict WITH lnCtvaCalc == ROUND(lnFtvaTest * lnCoefEfectiv, gnPc), "recalculeaza_pret(100,.T.) = 100 * proc_tvav efectiv rotunjit (obtinut " + TRANSFORM(lnCtvaCalc) + ")"
|
||||
DO Verdict WITH lnFtvaInapoi == lnFtvaTest, "recalculeaza_pret(recalculeaza_pret(100,.T.),.F.) = 100 (reciproc, obtinut " + TRANSFORM(lnFtvaInapoi) + ")"
|
||||
ENDIF
|
||||
|
||||
RELEASE loForm1
|
||||
ENDIF
|
||||
|
||||
DO AfLog WITH " caz (0b) ruleaza intr-un proces vfp9 separat (vezi antetul fisierului) - reentranta"
|
||||
DO AfLog WITH " CREATEOBJECT('frm_catalog_articole_nou') in acelasi proces se autoblocheaza."
|
||||
CASE llCazB
|
||||
*==========================================================================================
|
||||
* CAZ (0b): CREATEOBJECT sub gcNumeProgram = ROACONT (proces separat de (0a)) - trece
|
||||
* (errno=0), Page3 invizibila (PageCount=2) si oPretNom NEinstantiat, dovada ca defectul
|
||||
* original (ERROR 1736) nu revine si ca ramura gcNumeProgram din Init izoleaza corect
|
||||
* celelalte produse
|
||||
*==========================================================================================
|
||||
gcCaz = "[0b-createobject-ROACONT] "
|
||||
gcNumeProgram = 'ROACONT'
|
||||
PRIVATE poRec, pnIdAMS
|
||||
poRec = loRec
|
||||
pnIdAMS = lnIdArtProba
|
||||
|
||||
LOCAL loForm2, llCrapat2, lcErrMsg2, lnErrNo2
|
||||
llCrapat2 = .F.
|
||||
lcErrMsg2 = ''
|
||||
lnErrNo2 = 0
|
||||
TRY
|
||||
loForm2 = CREATEOBJECT('frm_catalog_articole_nou', loRec, lnIdArtProba, 'UPDATE')
|
||||
CATCH TO loExc2
|
||||
llCrapat2 = .T.
|
||||
lnErrNo2 = loExc2.ErrorNo
|
||||
lcErrMsg2 = loExc2.Message
|
||||
ENDTRY
|
||||
DO AfLog WITH " rezultat: llCrapat=" + TRANSFORM(llCrapat2) + " errno=" + TRANSFORM(lnErrNo2) + " mesaj=[" + lcErrMsg2 + "]"
|
||||
DO Verdict WITH !llCrapat2 AND lnErrNo2 = 0, "CREATEOBJECT trece sub gcNumeProgram=ROACONT (errno=0)"
|
||||
|
||||
IF !llCrapat2
|
||||
DO Verdict WITH loForm2._pageframe1.PageCount = 2, "PageCount = 2 (Page3 Vanzare invizibila, obtinut " + TRANSFORM(loForm2._pageframe1.PageCount) + ")"
|
||||
DO Verdict WITH VARTYPE(loForm2.oPretNom) <> "O", "Thisform.oPretNom NEinstantiat sub ROACONT (Vartype=" + VARTYPE(loForm2.oPretNom) + ")"
|
||||
RELEASE loForm2
|
||||
ENDIF
|
||||
|
||||
DO AfLog WITH ""
|
||||
DO AfLog WITH " Partea 2 (INSERT/UPDATE la salvare, cu scriere in Oracle) - cazurile CAZ1/CAZ2/CAZ3"
|
||||
DO AfLog WITH " ale acestui fisier, fiecare in procesul lui propriu (vezi antetul fisierului)."
|
||||
|
||||
*=================================================================================================
|
||||
* CAZ (1): articol NOU (INSERT) - pret/TVA/conturi setate pe Page3 (Thisform.oPretNom), salvat prin
|
||||
* metodele reale de salvare (nu inainte_de_do_termin, vezi antetul); dupa salvare, verificat direct
|
||||
* din Oracle, in aceeasi tranzactie manuala, apoi ROLLBACK direct (nu do_inchide_tranzactie(1) -
|
||||
* ala ar comite real)
|
||||
*=================================================================================================
|
||||
CASE lcCazSel == "CAZ1"
|
||||
gcCaz = "[1-articol-nou-page3-vanzare] "
|
||||
gcNumeProgram = 'ROAFACTURARE'
|
||||
|
||||
LOCAL lcCodMat1
|
||||
lcCodMat1 = "PS6C2B1" + SYS(2015)
|
||||
loRec.codmat = lcCodMat1
|
||||
loRec.codmatf = lcCodMat1
|
||||
loRec.denumire = "PROBA S6C2B ARTICOL NOU CAZ1"
|
||||
loRec.codbare = ""
|
||||
* articolul de proba (2528841557) are id_tara_origine NULL - make_sql (onom_articole.vc2:88,
|
||||
* ramura INSERT) NU garzeste NULL-ul (spre deosebire de ramura UPDATE, linia 100), deci
|
||||
* This.csql devine NULL (propagare NULL in concatenare) si salvare() raporteaza .T. fara sa
|
||||
* trimita vreun SQL - defect de productie, NEREPARAT; proba isi alege un id_tara_origine
|
||||
* valid (dintr-un articol real) ca sa poata testa ce i s-a cerut (pret/TVA/ID_NOTA pe Page3)
|
||||
LOCAL lnOkTara1, lnTaraOrigine1
|
||||
lnTaraOrigine1 = 0
|
||||
lnOkTara1 = SQLEXEC(gnHandle, "select id_tara_origine from vnom_articole where id_tara_origine is not null and rownum = 1", "crstara1")
|
||||
IF lnOkTara1 > 0 AND USED('crstara1') AND RECCOUNT('crstara1') = 1
|
||||
lnTaraOrigine1 = crstara1.id_tara_origine
|
||||
ENDIF
|
||||
IF USED('crstara1')
|
||||
USE IN crstara1
|
||||
ENDIF
|
||||
IF lnTaraOrigine1 > 0
|
||||
loRec.id_tara_origine = lnTaraOrigine1
|
||||
ENDIF
|
||||
|
||||
PRIVATE poRec, pnIdAMS
|
||||
poRec = loRec
|
||||
pnIdAMS = 0
|
||||
|
||||
LOCAL loForm1, llCrapat1, lcErrMsg1, lnErrNo1
|
||||
llCrapat1 = .F.
|
||||
lcErrMsg1 = ''
|
||||
lnErrNo1 = 0
|
||||
TRY
|
||||
loForm1 = CREATEOBJECT('frm_catalog_articole_nou', loRec, 0, 'INSERT')
|
||||
CATCH TO loExc1
|
||||
llCrapat1 = .T.
|
||||
lnErrNo1 = loExc1.ErrorNo
|
||||
lcErrMsg1 = loExc1.Message
|
||||
ENDTRY
|
||||
DO AfLog WITH " rezultat CREATEOBJECT: llCrapat=" + TRANSFORM(llCrapat1) + " errno=" + TRANSFORM(lnErrNo1) + " mesaj=[" + lcErrMsg1 + "]"
|
||||
DO Verdict WITH !llCrapat1 AND VARTYPE(loForm1) = "O", "CREATEOBJECT('frm_catalog_articole_nou',...,'INSERT') trece (errno=0)"
|
||||
|
||||
IF !llCrapat1
|
||||
DO Verdict WITH VARTYPE(loForm1.oPretNom) = "O", "oPretNom instantiat pe formularul de INSERT"
|
||||
|
||||
IF VARTYPE(loForm1.oPretNom) = "O"
|
||||
LOCAL lnPretFtvaNou, lnProcTvavNou, lnPretCtvaNou
|
||||
lnPretFtvaNou = 55.55
|
||||
lnProcTvavNou = 1.19
|
||||
lnPretCtvaNou = loForm1.oPretNom.recalculeaza_pret(lnPretFtvaNou, .T.)
|
||||
loForm1.oPretNom.nPretFtva = lnPretFtvaNou
|
||||
loForm1.oPretNom.nProcTvav = lnProcTvavNou
|
||||
loForm1.oPretNom.nPretCtva = lnPretCtvaNou
|
||||
loForm1.oPretNom.cScd = '461'
|
||||
loForm1.oPretNom.cScc = '7583'
|
||||
|
||||
loForm1.cus_odata_catalog_articole.lSilent = .T.
|
||||
DO Verdict WITH loForm1.do_deschide_tranzactie(), "do_deschide_tranzactie() = .T."
|
||||
|
||||
DO AfLog WITH " diagnostic: lSilent=" + TRANSFORM(loForm1.cus_odata_catalog_articole.lSilent) + " cactiune=[" + loForm1.cus_odata_catalog_articole.cactiune + "] validare()=" + TRANSFORM(loForm1.cus_odata_catalog_articole.validare()) + " TYPE(orec)=" + TYPE('loForm1.orec') + " TYPE(NID)=" + TYPE('loForm1.NID')
|
||||
|
||||
* spion NEUTRU (nu forteaza esec) doar ca sa vada proba exact ce SQL a trimis (sau nu)
|
||||
* cus_odata_catalog_articole.salvare() prin goExecutor - diagnostic, nu modifica fluxul
|
||||
LOCAL loRealExec1, loSpy1
|
||||
loRealExec1 = goExecutor
|
||||
loSpy1 = CREATEOBJECT('SpyS6c2b')
|
||||
goExecutor = loSpy1
|
||||
|
||||
LOCAL llSalvatArticol1
|
||||
llSalvatArticol1 = loForm1.cus_odata_catalog_articole.salvare(loForm1.orec, loForm1.NID)
|
||||
goExecutor = loRealExec1
|
||||
DO AfLog WITH " diagnostic: dupa salvare() lsalvareconfirmata=" + TRANSFORM(loForm1.cus_odata_catalog_articole.lsalvareconfirmata) + " VARTYPE(csql)=" + VARTYPE(loForm1.cus_odata_catalog_articole.csql) + " csql=[" + TRANSFORM(loForm1.cus_odata_catalog_articole.csql) + "]"
|
||||
DO AfLog WITH " diagnostic: SpyS6c2b apeluri=" + TRANSFORM(loSpy1.nApeluri)
|
||||
DO Verdict WITH llSalvatArticol1, "cus_odata_catalog_articole.salvare() INSERT = .T. (codmat=" + lcCodMat1 + ")"
|
||||
|
||||
* pnIdAMS (OUT bind ?@pnIdAMS din make_sql) a ramas 0 dupa un INSERT confirmat reusit -
|
||||
* id-ul real se ia din Oracle, dupa codmat (unic, generat mai sus), nu din pnIdAMS
|
||||
DO AfLog WITH " info: pnIdAMS dupa INSERT=" + TRANSFORM(NVL(pnIdAMS,-1)) + " (neconcludent, vezi cautarea dupa codmat mai jos)"
|
||||
LOCAL lnIdArtNou1, lnOkIdNou1
|
||||
lnIdArtNou1 = 0
|
||||
lnOkIdNou1 = SQLEXEC(gnHandle, "select id_articol from vnom_articole where codmat = '" + lcCodMat1 + "'", "crsidnou1")
|
||||
IF lnOkIdNou1 > 0 AND USED('crsidnou1') AND RECCOUNT('crsidnou1') = 1
|
||||
lnIdArtNou1 = crsidnou1.id_articol
|
||||
ENDIF
|
||||
IF USED('crsidnou1')
|
||||
USE IN crsidnou1
|
||||
ENDIF
|
||||
DO AfLog WITH " id articol nou (cautat dupa codmat)=" + TRANSFORM(lnIdArtNou1)
|
||||
DO Verdict WITH lnIdArtNou1 > 0, "articolul nou gasit dupa codmat, id_articol > 0 (obtinut " + TRANSFORM(lnIdArtNou1) + ")"
|
||||
|
||||
LOCAL llSalvatPret1
|
||||
llSalvatPret1 = .F.
|
||||
IF lnIdArtNou1 > 0
|
||||
llSalvatPret1 = loForm1.oPretNom.salveaza(lnIdArtNou1)
|
||||
ENDIF
|
||||
DO Verdict WITH llSalvatPret1, "oPretNom.salveaza() = .T. (articol nou)"
|
||||
|
||||
LOCAL lnOkAnyPol1
|
||||
lnOkAnyPol1 = SQLEXEC(gnHandle, "select id_pol, pretftva, pretctva, proc_tvav, id_nota from crm_politici_pret_art where id_articol = " + TRANSFORM(lnIdArtNou1), "crsanypol1")
|
||||
DO AfLog WITH " diagnostic: randuri crm_politici_pret_art (orice id_pol) pentru articolul nou=" + TRANSFORM(IIF(lnOkAnyPol1>0 AND USED('crsanypol1'),RECCOUNT('crsanypol1'),-1)) + " nIdPolitica(oPretNom)=" + TRANSFORM(loForm1.oPretNom.nIdPolitica)
|
||||
IF USED('crsanypol1')
|
||||
SELECT crsanypol1
|
||||
SCAN
|
||||
DO AfLog WITH " id_pol=" + TRANSFORM(crsanypol1.id_pol) + " pretftva=" + TRANSFORM(crsanypol1.pretftva) + " id_nota=" + TRANSFORM(NVL(crsanypol1.id_nota,-1))
|
||||
ENDSCAN
|
||||
USE IN crsanypol1
|
||||
ENDIF
|
||||
|
||||
LOCAL lnOkSel1
|
||||
lnOkSel1 = SQLEXEC(gnHandle, "select pretftva, pretctva, proc_tvav, id_nota from crm_politici_pret_art where id_pol = 41 and id_articol = " + TRANSFORM(lnIdArtNou1), "crscaz1")
|
||||
DO Verdict WITH lnOkSel1 > 0 AND USED('crscaz1') AND RECCOUNT('crscaz1') = 1, "randul politicii de pret exista in Oracle pentru articolul nou (in tranzactie)"
|
||||
IF USED('crscaz1') AND RECCOUNT('crscaz1') = 1
|
||||
DO Verdict WITH ROUND(crscaz1.pretftva,2) == lnPretFtvaNou, "Oracle pretftva=" + TRANSFORM(lnPretFtvaNou) + " (obtinut " + TRANSFORM(crscaz1.pretftva) + ")"
|
||||
DO Verdict WITH ROUND(crscaz1.pretctva,2) == lnPretCtvaNou, "Oracle pretctva=" + TRANSFORM(lnPretCtvaNou) + " (obtinut " + TRANSFORM(crscaz1.pretctva) + ")"
|
||||
DO Verdict WITH ROUND(crscaz1.proc_tvav,2) == lnProcTvavNou, "Oracle proc_tvav=" + TRANSFORM(lnProcTvavNou) + " (obtinut " + TRANSFORM(crscaz1.proc_tvav) + ")"
|
||||
DO Verdict WITH !ISNULL(crscaz1.id_nota) AND crscaz1.id_nota > 0, "Oracle id_nota atribuit (" + TRANSFORM(NVL(crscaz1.id_nota,-1)) + ")"
|
||||
ENDIF
|
||||
IF USED('crscaz1')
|
||||
USE IN crscaz1
|
||||
ENDIF
|
||||
|
||||
LOCAL lnOkArt1
|
||||
lnOkArt1 = SQLEXEC(gnHandle, "select count(*) cnt from vnom_articole where id_articol = " + TRANSFORM(lnIdArtNou1), "crsart1")
|
||||
DO Verdict WITH lnOkArt1 > 0 AND USED('crsart1') AND crsart1.cnt = 1, "articolul nou exista in vnom_articole (in tranzactie)"
|
||||
IF USED('crsart1')
|
||||
USE IN crsart1
|
||||
ENDIF
|
||||
|
||||
* fara Thisform.do_inchide_tranzactie(1) - ar face SQLCOMMIT() real; ROLLBACK direct
|
||||
* dupa verificare, ca sa nu ramana date (cerinta explicita a sarcinii)
|
||||
LOCAL lnOkRb1
|
||||
lnOkRb1 = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO Verdict WITH lnOkRb1 > 0, "ROLLBACK direct dupa verificare (nu do_inchide_tranzactie(1))"
|
||||
SQLSETPROP(gnHandle, "Transactions", 1)
|
||||
ENDIF
|
||||
|
||||
RELEASE loForm1
|
||||
ENDIF
|
||||
|
||||
*=================================================================================================
|
||||
* CAZ (2): articolul de proba (existent, UPDATE) - pret/TVA/conturi noi pe Page3 -> randul din
|
||||
* crm_politici_pret_art actualizat in Oracle (in tranzactie), apoi ROLLBACK direct
|
||||
*=================================================================================================
|
||||
CASE lcCazSel == "CAZ2"
|
||||
gcCaz = "[2-articol-existent-page3-modificat] "
|
||||
gcNumeProgram = 'ROAFACTURARE'
|
||||
|
||||
PRIVATE poRec, pnIdAMS
|
||||
poRec = loRec
|
||||
pnIdAMS = lnIdArtProba
|
||||
|
||||
LOCAL loForm2, llCrapat2, lcErrMsg2, lnErrNo2
|
||||
llCrapat2 = .F.
|
||||
lcErrMsg2 = ''
|
||||
lnErrNo2 = 0
|
||||
TRY
|
||||
loForm2 = CREATEOBJECT('frm_catalog_articole_nou', loRec, lnIdArtProba, 'UPDATE')
|
||||
CATCH TO loExc2b
|
||||
llCrapat2 = .T.
|
||||
lnErrNo2 = loExc2b.ErrorNo
|
||||
lcErrMsg2 = loExc2b.Message
|
||||
ENDTRY
|
||||
DO AfLog WITH " rezultat CREATEOBJECT: llCrapat=" + TRANSFORM(llCrapat2) + " errno=" + TRANSFORM(lnErrNo2) + " mesaj=[" + lcErrMsg2 + "]"
|
||||
DO Verdict WITH !llCrapat2 AND VARTYPE(loForm2) = "O", "CREATEOBJECT('frm_catalog_articole_nou',...,'UPDATE') trece (errno=0)"
|
||||
|
||||
IF !llCrapat2
|
||||
DO Verdict WITH VARTYPE(loForm2.oPretNom) = "O", "oPretNom instantiat pe formularul de UPDATE"
|
||||
|
||||
IF VARTYPE(loForm2.oPretNom) = "O"
|
||||
LOCAL lnPretFtvaMod, lnProcTvavMod, lnPretCtvaMod
|
||||
lnPretFtvaMod = 77.70
|
||||
lnProcTvavMod = 1.09
|
||||
lnPretCtvaMod = loForm2.oPretNom.recalculeaza_pret(lnPretFtvaMod, .T.)
|
||||
loForm2.oPretNom.nPretFtva = lnPretFtvaMod
|
||||
loForm2.oPretNom.nProcTvav = lnProcTvavMod
|
||||
loForm2.oPretNom.nPretCtva = lnPretCtvaMod
|
||||
loForm2.oPretNom.cScd = '461'
|
||||
loForm2.oPretNom.cScc = '7583'
|
||||
|
||||
loForm2.cus_odata_catalog_articole.lSilent = .T.
|
||||
DO Verdict WITH loForm2.do_deschide_tranzactie(), "do_deschide_tranzactie() = .T."
|
||||
|
||||
LOCAL llSalvatArticol2
|
||||
llSalvatArticol2 = loForm2.cus_odata_catalog_articole.salvare(loForm2.orec, loForm2.NID)
|
||||
DO Verdict WITH llSalvatArticol2, "cus_odata_catalog_articole.salvare() UPDATE = .T."
|
||||
|
||||
DO AfLog WITH " diagnostic: inainte de salveaza() nIdPolitica=" + TRANSFORM(loForm2.oPretNom.nIdPolitica) + " nPretFtva=" + TRANSFORM(loForm2.oPretNom.nPretFtva) + " nProcTvav=" + TRANSFORM(loForm2.oPretNom.nProcTvav) + " lIncarcat=" + TRANSFORM(loForm2.oPretNom.lIncarcat)
|
||||
LOCAL loRealExec2, loSpy2
|
||||
loRealExec2 = goExecutor
|
||||
loSpy2 = CREATEOBJECT('SpyS6c2b')
|
||||
goExecutor = loSpy2
|
||||
LOCAL llSalvatPret2
|
||||
llSalvatPret2 = loForm2.oPretNom.salveaza(lnIdArtProba)
|
||||
goExecutor = loRealExec2
|
||||
DO AfLog WITH " diagnostic: dupa salveaza() nPretFtva=" + TRANSFORM(loForm2.oPretNom.nPretFtva) + " nIdNota=" + TRANSFORM(NVL(loForm2.oPretNom.nIdNota,-1))
|
||||
DO Verdict WITH llSalvatPret2, "oPretNom.salveaza() = .T. (articol existent " + TRANSFORM(lnIdArtProba) + ")"
|
||||
|
||||
LOCAL lnOkSel2
|
||||
lnOkSel2 = SQLEXEC(gnHandle, "select pretftva, pretctva, proc_tvav, id_nota from crm_politici_pret_art where id_pol = 41 and id_articol = " + TRANSFORM(lnIdArtProba), "crscaz2")
|
||||
DO Verdict WITH lnOkSel2 > 0 AND USED('crscaz2') AND RECCOUNT('crscaz2') = 1, "randul politicii de pret exista in Oracle pentru articolul modificat (in tranzactie)"
|
||||
IF USED('crscaz2') AND RECCOUNT('crscaz2') = 1
|
||||
DO Verdict WITH ROUND(crscaz2.pretftva,2) == lnPretFtvaMod, "Oracle pretftva=" + TRANSFORM(lnPretFtvaMod) + " (obtinut " + TRANSFORM(crscaz2.pretftva) + ")"
|
||||
DO Verdict WITH ROUND(crscaz2.pretctva,2) == lnPretCtvaMod, "Oracle pretctva=" + TRANSFORM(lnPretCtvaMod) + " (obtinut " + TRANSFORM(crscaz2.pretctva) + ")"
|
||||
DO Verdict WITH ROUND(crscaz2.proc_tvav,2) == lnProcTvavMod, "Oracle proc_tvav=" + TRANSFORM(lnProcTvavMod) + " (obtinut " + TRANSFORM(crscaz2.proc_tvav) + ")"
|
||||
DO Verdict WITH !ISNULL(crscaz2.id_nota) AND crscaz2.id_nota > 0, "Oracle id_nota atribuit (" + TRANSFORM(NVL(crscaz2.id_nota,-1)) + ")"
|
||||
ENDIF
|
||||
IF USED('crscaz2')
|
||||
USE IN crscaz2
|
||||
ENDIF
|
||||
|
||||
LOCAL lnOkRb2
|
||||
lnOkRb2 = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO Verdict WITH lnOkRb2 > 0, "ROLLBACK direct dupa verificare (articolul existent ramane cu valorile originale)"
|
||||
SQLSETPROP(gnHandle, "Transactions", 1)
|
||||
ENDIF
|
||||
|
||||
RELEASE loForm2
|
||||
ENDIF
|
||||
|
||||
*=================================================================================================
|
||||
* CAZ (3): articol NOU (INSERT) - articolul se salveaza real, apoi salvarea randului de pret e
|
||||
* fortata sa esueze cu un spion pe goExecutor (subclasa oexecutor, tiparul SpyS6b din
|
||||
* probe_12b_s6b_clasa_pret_nomenclator.prg, fara nicio modificare de productie) -> flux real:
|
||||
* Thisform.do_inchide_tranzactie(2) - ROLLBACK real - articolul nou nu mai exista
|
||||
*=================================================================================================
|
||||
CASE lcCazSel == "CAZ3"
|
||||
gcCaz = "[3-esec-salvare-pret-articol-nou] "
|
||||
gcNumeProgram = 'ROAFACTURARE'
|
||||
|
||||
LOCAL lcCodMat3
|
||||
lcCodMat3 = "PS6C2B3" + SYS(2015)
|
||||
loRec.codmat = lcCodMat3
|
||||
loRec.codmatf = lcCodMat3
|
||||
loRec.denumire = "PROBA S6C2B ARTICOL NOU CAZ3 ESEC"
|
||||
loRec.codbare = ""
|
||||
* vezi nota din CAZ1 - id_tara_origine NULL blocheaza INSERT-ul (defect de productie, NEREPARAT)
|
||||
LOCAL lnOkTara3, lnTaraOrigine3
|
||||
lnTaraOrigine3 = 0
|
||||
lnOkTara3 = SQLEXEC(gnHandle, "select id_tara_origine from vnom_articole where id_tara_origine is not null and rownum = 1", "crstara3")
|
||||
IF lnOkTara3 > 0 AND USED('crstara3') AND RECCOUNT('crstara3') = 1
|
||||
lnTaraOrigine3 = crstara3.id_tara_origine
|
||||
ENDIF
|
||||
IF USED('crstara3')
|
||||
USE IN crstara3
|
||||
ENDIF
|
||||
IF lnTaraOrigine3 > 0
|
||||
loRec.id_tara_origine = lnTaraOrigine3
|
||||
ENDIF
|
||||
|
||||
PRIVATE poRec, pnIdAMS
|
||||
poRec = loRec
|
||||
pnIdAMS = 0
|
||||
|
||||
LOCAL loForm3, llCrapat3, lcErrMsg3, lnErrNo3
|
||||
llCrapat3 = .F.
|
||||
lcErrMsg3 = ''
|
||||
lnErrNo3 = 0
|
||||
TRY
|
||||
loForm3 = CREATEOBJECT('frm_catalog_articole_nou', loRec, 0, 'INSERT')
|
||||
CATCH TO loExc3
|
||||
llCrapat3 = .T.
|
||||
lnErrNo3 = loExc3.ErrorNo
|
||||
lcErrMsg3 = loExc3.Message
|
||||
ENDTRY
|
||||
DO AfLog WITH " rezultat CREATEOBJECT: llCrapat=" + TRANSFORM(llCrapat3) + " errno=" + TRANSFORM(lnErrNo3) + " mesaj=[" + lcErrMsg3 + "]"
|
||||
DO Verdict WITH !llCrapat3 AND VARTYPE(loForm3) = "O", "CREATEOBJECT('frm_catalog_articole_nou',...,'INSERT') trece (errno=0, caz3)"
|
||||
|
||||
IF !llCrapat3 AND VARTYPE(loForm3.oPretNom) = "O"
|
||||
loForm3.oPretNom.nPretFtva = 33.33
|
||||
loForm3.oPretNom.nProcTvav = 1.19
|
||||
loForm3.oPretNom.nPretCtva = loForm3.oPretNom.recalculeaza_pret(33.33, .T.)
|
||||
* conturi goale - fortarea esecului tinteste doar salveaza_pret_nomenclator, nu nota
|
||||
loForm3.oPretNom.cScd = ''
|
||||
loForm3.oPretNom.cScc = ''
|
||||
|
||||
loForm3.cus_odata_catalog_articole.lSilent = .T.
|
||||
DO Verdict WITH loForm3.do_deschide_tranzactie(), "do_deschide_tranzactie() = .T. (caz3)"
|
||||
|
||||
LOCAL llSalvatArticol3
|
||||
llSalvatArticol3 = loForm3.cus_odata_catalog_articole.salvare(loForm3.orec, loForm3.NID)
|
||||
DO Verdict WITH llSalvatArticol3, "cus_odata_catalog_articole.salvare() INSERT = .T. (articolul e creat inainte de esecul pe pret)"
|
||||
|
||||
* id-ul se cauta dupa codmat (unic), nu din pnIdAMS - vezi nota din CAZ1
|
||||
LOCAL lnIdArtNou3, lnOkIdNou3
|
||||
lnIdArtNou3 = 0
|
||||
lnOkIdNou3 = SQLEXEC(gnHandle, "select id_articol from vnom_articole where codmat = '" + lcCodMat3 + "'", "crsidnou3")
|
||||
IF lnOkIdNou3 > 0 AND USED('crsidnou3') AND RECCOUNT('crsidnou3') = 1
|
||||
lnIdArtNou3 = crsidnou3.id_articol
|
||||
ENDIF
|
||||
IF USED('crsidnou3')
|
||||
USE IN crsidnou3
|
||||
ENDIF
|
||||
DO AfLog WITH " id articol nou caz3 (cautat dupa codmat)=" + TRANSFORM(lnIdArtNou3)
|
||||
DO Verdict WITH lnIdArtNou3 > 0, "articolul nou gasit dupa codmat, id_articol > 0 (caz3, obtinut " + TRANSFORM(lnIdArtNou3) + ")"
|
||||
|
||||
LOCAL loRealExec3, loSpy3
|
||||
loRealExec3 = goExecutor
|
||||
loSpy3 = CREATEOBJECT('SpyS6c2b')
|
||||
loSpy3.lForteazaEsecSalveaza = .T.
|
||||
goExecutor = loSpy3
|
||||
|
||||
LOCAL llSalvatPret3
|
||||
llSalvatPret3 = .F.
|
||||
IF lnIdArtNou3 > 0
|
||||
llSalvatPret3 = loForm3.oPretNom.salveaza(lnIdArtNou3)
|
||||
ENDIF
|
||||
goExecutor = loRealExec3
|
||||
DO Verdict WITH !llSalvatPret3, "oPretNom.salveaza() = .F. (salveaza_pret_nomenclator interceptat/fortat sa esueze)"
|
||||
|
||||
* flux real: llReturn=.F. -> Thisform.do_inchide_tranzactie(2) - SQLROLLBACK() real, sigur
|
||||
LOCAL llInchis3
|
||||
llInchis3 = loForm3.do_inchide_tranzactie(IIF(llSalvatPret3, 1, 2))
|
||||
DO Verdict WITH llInchis3, "do_inchide_tranzactie(2) = .T. (ROLLBACK real, tnTip=2)"
|
||||
|
||||
IF lnIdArtNou3 > 0
|
||||
LOCAL lnOkArt3
|
||||
lnOkArt3 = SQLEXEC(gnHandle, "select count(*) cnt from vnom_articole where id_articol = " + TRANSFORM(lnIdArtNou3), "crsart3")
|
||||
DO Verdict WITH lnOkArt3 > 0 AND USED('crsart3') AND crsart3.cnt = 0, "articolul nou NU exista dupa do_inchide_tranzactie(2) (cnt=" + TRANSFORM(IIF(USED('crsart3'),crsart3.cnt,-1)) + ")"
|
||||
IF USED('crsart3')
|
||||
USE IN crsart3
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RELEASE loForm3
|
||||
ENDIF
|
||||
|
||||
*=================================================================================================
|
||||
* CAZ (4): regresie garda NULL (S6c-4, onom_articole.vc2:88) - articol NOU (INSERT) cu
|
||||
* id_tara_origine fortat NULL -> cus_odata_catalog_articole.salvare() trebuie sa construiasca SQL
|
||||
* real (nu This.csql NULL) si sa scrie efectiv in Oracle - verificat direct dupa codmat, apoi
|
||||
* ROLLBACK direct
|
||||
*=================================================================================================
|
||||
CASE lcCazSel == "CAZ4"
|
||||
gcCaz = "[4-articol-nou-tara-origine-null] "
|
||||
gcNumeProgram = 'ROAFACTURARE'
|
||||
|
||||
LOCAL lcCodMat4
|
||||
lcCodMat4 = "PS6C4" + SYS(2015)
|
||||
loRec.codmat = lcCodMat4
|
||||
loRec.codmatf = lcCodMat4
|
||||
loRec.denumire = "PROBA S6C4 ARTICOL NOU TARA ORIGINE NULL"
|
||||
loRec.codbare = ""
|
||||
loRec.id_tara_origine = .NULL.
|
||||
|
||||
PRIVATE poRec, pnIdAMS
|
||||
poRec = loRec
|
||||
pnIdAMS = 0
|
||||
|
||||
LOCAL loForm4, llCrapat4, lcErrMsg4, lnErrNo4
|
||||
llCrapat4 = .F.
|
||||
lcErrMsg4 = ''
|
||||
lnErrNo4 = 0
|
||||
TRY
|
||||
loForm4 = CREATEOBJECT('frm_catalog_articole_nou', loRec, 0, 'INSERT')
|
||||
CATCH TO loExc4
|
||||
llCrapat4 = .T.
|
||||
lnErrNo4 = loExc4.ErrorNo
|
||||
lcErrMsg4 = loExc4.Message
|
||||
ENDTRY
|
||||
DO AfLog WITH " rezultat CREATEOBJECT: llCrapat=" + TRANSFORM(llCrapat4) + " errno=" + TRANSFORM(lnErrNo4) + " mesaj=[" + lcErrMsg4 + "]"
|
||||
DO Verdict WITH !llCrapat4 AND VARTYPE(loForm4) = "O", "CREATEOBJECT('frm_catalog_articole_nou',...,'INSERT') trece (errno=0, caz4)"
|
||||
|
||||
IF !llCrapat4
|
||||
loForm4.cus_odata_catalog_articole.lSilent = .T.
|
||||
DO Verdict WITH loForm4.do_deschide_tranzactie(), "do_deschide_tranzactie() = .T. (caz4)"
|
||||
|
||||
LOCAL llSalvatArticol4
|
||||
llSalvatArticol4 = loForm4.cus_odata_catalog_articole.salvare(loForm4.orec, loForm4.NID)
|
||||
DO AfLog WITH " diagnostic: VARTYPE(csql)=" + VARTYPE(loForm4.cus_odata_catalog_articole.csql) + " csql=[" + TRANSFORM(loForm4.cus_odata_catalog_articole.csql) + "]"
|
||||
DO Verdict WITH llSalvatArticol4, "cus_odata_catalog_articole.salvare() INSERT = .T. (id_tara_origine NULL, codmat=" + lcCodMat4 + ")"
|
||||
DO Verdict WITH VARTYPE(loForm4.cus_odata_catalog_articole.csql) = "C" AND !EMPTY(loForm4.cus_odata_catalog_articole.csql), "This.csql construit (nu NULL) cu id_tara_origine NULL"
|
||||
|
||||
LOCAL lnIdArtNou4, lnOkIdNou4
|
||||
lnIdArtNou4 = 0
|
||||
lnOkIdNou4 = SQLEXEC(gnHandle, "select id_articol, id_tara_origine from vnom_articole where codmat = '" + lcCodMat4 + "'", "crsidnou4")
|
||||
DO Verdict WITH lnOkIdNou4 > 0 AND USED('crsidnou4') AND RECCOUNT('crsidnou4') = 1, "articolul nou exista in Oracle dupa codmat (in tranzactie, caz4)"
|
||||
IF USED('crsidnou4') AND RECCOUNT('crsidnou4') = 1
|
||||
lnIdArtNou4 = crsidnou4.id_articol
|
||||
DO Verdict WITH ISNULL(crsidnou4.id_tara_origine), "id_tara_origine ramas NULL in Oracle (caz4)"
|
||||
ENDIF
|
||||
IF USED('crsidnou4')
|
||||
USE IN crsidnou4
|
||||
ENDIF
|
||||
DO AfLog WITH " id articol nou caz4 (cautat dupa codmat)=" + TRANSFORM(lnIdArtNou4)
|
||||
DO Verdict WITH lnIdArtNou4 > 0, "articolul nou gasit dupa codmat, id_articol > 0 (caz4, obtinut " + TRANSFORM(lnIdArtNou4) + ")"
|
||||
|
||||
LOCAL lnOkRb4
|
||||
lnOkRb4 = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO Verdict WITH lnOkRb4 > 0, "ROLLBACK direct dupa verificare (caz4, nu do_inchide_tranzactie(1))"
|
||||
SQLSETPROP(gnHandle, "Transactions", 1)
|
||||
|
||||
RELEASE loForm4
|
||||
ENDIF
|
||||
|
||||
*=================================================================================================
|
||||
* CAZ (5): regresie S6c-5 (_cus_odata_base.vc2:150-181) - subclasa LOCALA proba
|
||||
* (cus_odata_vid_s6c5, definita mai jos in acest fisier, fara nicio modificare de productie)
|
||||
* suprascrie make_sql lasand This.csql gol -> llConditie devine .F. in salvare() -> trebuie sa
|
||||
* intoarca .F. (inainte de reparatie intorcea .T. fara sa trimita niciun SQL). Nu instantiaza
|
||||
* formularul, nu atinge Oracle - doar apeleaza direct salvare() pe obiectul de proba, cu spion pe
|
||||
* goExecutor ca sa confirme 0 apeluri.
|
||||
*=================================================================================================
|
||||
CASE lcCazSel == "CAZ5"
|
||||
gcCaz = "[5-sql-gol-salvare-fals] "
|
||||
gcNumeProgram = 'ROAFACTURARE'
|
||||
|
||||
LOCAL loObj5, llRet5, loRealExec5, loSpy5
|
||||
loObj5 = CREATEOBJECT('cus_odata_vid_s6c5')
|
||||
loObj5.lSilent = .T.
|
||||
loObj5.cactiune = 'INSERT'
|
||||
|
||||
loRealExec5 = goExecutor
|
||||
loSpy5 = CREATEOBJECT('SpyS6c2b')
|
||||
goExecutor = loSpy5
|
||||
|
||||
llRet5 = loObj5.salvare(loRec, 0)
|
||||
goExecutor = loRealExec5
|
||||
|
||||
DO AfLog WITH " diagnostic: VARTYPE(csql)=" + VARTYPE(loObj5.csql) + " csql=[" + TRANSFORM(loObj5.csql) + "] SpyS6c2b apeluri=" + TRANSFORM(loSpy5.nApeluri)
|
||||
DO Verdict WITH !llRet5, "salvare() = .F. cand make_sql lasa csql gol (S6c-5, regresie)"
|
||||
DO Verdict WITH EMPTY(loObj5.csql), "csql a ramas gol (make_sql suprascris nu construieste SQL)"
|
||||
DO Verdict WITH loSpy5.nApeluri = 0, "goExecutor.oExecute NU a fost apelat (nimic trimis la Oracle)"
|
||||
|
||||
RELEASE loObj5
|
||||
ENDCASE
|
||||
|
||||
DO Final
|
||||
|
||||
*==================================================================================================
|
||||
* Spion pe goExecutor - subclasa DODEFAULT pe PCOUNT (nu opreste executia), tiparul SpyS6b din
|
||||
* probe_12b_s6b_clasa_pret_nomenclator.prg. lForteazaEsecSalveaza=.T. intoarce -1 fara sa mai
|
||||
* trimita SQL-ul cand acesta contine 'salveaza_pret_nomenclator' (caz CAZ3) - restul trece prin
|
||||
* DODEFAULT.
|
||||
*==================================================================================================
|
||||
DEFINE CLASS SpyS6c2b AS oexecutor
|
||||
nApeluri = 0
|
||||
cToateSql = ''
|
||||
lForteazaEsecSalveaza = .F.
|
||||
|
||||
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
||||
LOCAL lnRet, lnPc, lcS
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '<NU E SIR>')
|
||||
THIS.cToateSql = THIS.cToateSql + lcS + CHR(13) + CHR(10)
|
||||
STRTOFILE(' SpyS6c2b #' + TRANSFORM(THIS.nApeluri) + ' SQL=[' + lcS + ']' + CHR(13) + CHR(10), gcLog, 1)
|
||||
|
||||
IF THIS.lForteazaEsecSalveaza AND 'SALVEAZA_PRET_NOMENCLATOR' $ UPPER(lcS)
|
||||
STRTOFILE(' SpyS6c2b: ESEC FORTAT (nu trimit SQL-ul de mai sus)' + CHR(13) + CHR(10), gcLog, 1)
|
||||
RETURN -1
|
||||
ENDIF
|
||||
|
||||
lnPc = PCOUNT()
|
||||
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
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
*==================================================================================================
|
||||
* Subclasa LOCALA de proba (CAZ5, S6c-5) - fara nicio modificare de productie. make_sql suprascris
|
||||
* gol, This.csql ramane la valoarea implicita din clasa de baza (sir gol), ca sa forteze ramura
|
||||
* llConditie = .F. in _cus_odata_base.vc2 salvare().
|
||||
*==================================================================================================
|
||||
DEFINE CLASS cus_odata_vid_s6c5 AS cus_odata_catalog_articole
|
||||
PROCEDURE make_sql
|
||||
LPARAMETERS toRec, tnId
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE Verdict
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO AfLog WITH "PASS: " + gcCaz + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Final
|
||||
LOCAL lnOk
|
||||
gcCaz = "[final] "
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
lnOk = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk) + " (plasa de siguranta - fiecare caz isi face deja propriul ROLLBACK/verificare inainte de asta)"
|
||||
ENDIF
|
||||
DO AfLog WITH "PARTIAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail)
|
||||
DO AfLog WITH "END " + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
@@ -0,0 +1,187 @@
|
||||
* probe_12b_s7a_optiuni_readonly.prg
|
||||
* Plan #12b, S7a - proba headless pe frm_optiuni_facturare (COMUN\clase\ofacturare.vc2:24650):
|
||||
* .ct_clb_pol_pret_stoc.Enabled = Empty(Thisform.nidpolpretstoc) in Init.
|
||||
*
|
||||
* nidpolpretstoc vine din pack_facturare.citeste_setari_pol_pret(1, gnIdUtil, ...) (apelata din
|
||||
* actualizeaza_politica_pret, ofacturare.vc2:24573). Sursa PL/SQL (ALL_SOURCE, verificata inainte
|
||||
* de proba, nu presupusa) pentru V_TIP=1 NU filtreaza dupa V_ID_UTIL - citeste direct
|
||||
* OPTIUNI.VARVALUE (VARNAME='ID_POL_PRET_STOC') si verifica doar ca politica exista si nu e STERS
|
||||
* in CRM_POLITICI_PRETURI. Filtrul pe utilizator (CRM_VPOLPRETCURUTIL) exista doar pe ramurile
|
||||
* V_TIP IN (23,30,41) si V_TIP IN (48,49) - S3 a scos exact acest filtru de pe ramura V_TIP=1
|
||||
* ("Locul #3 (citire din OPTIUNI + CRM_POLITICI_PRETURI, fara view-ul pe utilizator)"). Cum S3 e
|
||||
* deja aplicat REAL pe schema (stare_plan_12b.md), id_util=4 (fara drept azi la politica 41 prin
|
||||
* CRM_VPOLPRETCURUTIL, baseline_12b.md sectiunea 11) primeste ACUM acelasi id_pol=41 ca id_util=8
|
||||
* pe aceasta ramura - nota "fara drept inainte de S3" din plan descrie starea DINAINTE de aplicarea
|
||||
* reala a S3, nu starea curenta a schemei.
|
||||
*
|
||||
* Spion pe goExecutor (subclasa, DODEFAULT pe PCOUNT) - tiparul din
|
||||
* editare_factura\probe_s13_toomanycolumns.prg: nu opreste executia, doar logheaza fiecare SQL.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File ruleaza_suita.ps1 -Nume probe_12b_s7a_optiuni_readonly
|
||||
* Log: D:\ROA\ROAFACTURARE\docs\loguri_12b\s7a_optiuni_readonly.log (cerut de sarcina, nu out\)
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gcCaz, gnPass, gnFail
|
||||
gcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\s7a_optiuni_readonly.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
|
||||
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
|
||||
ENDIF
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
gcCaz = ""
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
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 AfLog WITH "FAIL: conexiune Oracle esuata"
|
||||
DO Final
|
||||
ENDIF
|
||||
DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle)
|
||||
|
||||
* incarcare explicita a clasei din calea COMPLETA (nu relativa via SET PATH), ca sa fim siguri
|
||||
* care ofacturare.vcx s-a incarcat de fapt
|
||||
RELEASE CLASSLIB ofacturare
|
||||
SET CLASSLIB TO (gcAppPath + "COMUN\CLASE\ofacturare.vcx") ADDITIVE
|
||||
DO AfLog WITH "SET CLASSLIB la " + gcAppPath + "COMUN\CLASE\ofacturare.vcx"
|
||||
|
||||
gnTransOriginal = SQLGETPROP(gnHandle, "Transactions")
|
||||
SQLSETPROP(gnHandle, "Transactions", 2)
|
||||
DO AfLog WITH "Transactions manual, original=" + TRANSFORM(gnTransOriginal)
|
||||
|
||||
LOCAL loForm1, loForm2, loForm3, loForm4, loReal, loSpy
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
gcCaz = "[1: optiune setata, id_util=8] "
|
||||
gnIdUtil = 8
|
||||
loForm1 = CREATEOBJECT('frm_optiuni_facturare', 1)
|
||||
DO Verdict WITH LOWER(JUSTFNAME(loForm1.ClassLibrary)) == 'ofacturare.vcx', ;
|
||||
"ClassLibrary incarcat = ofacturare.vcx (cale completa) - " + TRANSFORM(loForm1.ClassLibrary)
|
||||
DO Verdict WITH loForm1.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .F., ;
|
||||
"Enabled=.F. dupa Init (nidpolpretstoc=" + TRANSFORM(loForm1.nidpolpretstoc) + ")"
|
||||
loForm1.Refresh()
|
||||
DO Verdict WITH loForm1.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .F., "Enabled=.F. dupa Refresh()"
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
gcCaz = "[2: optiune setata, id_util=4 fara drept CRM_VPOLPRETCURUTIL] "
|
||||
gnIdUtil = 4
|
||||
loForm2 = CREATEOBJECT('frm_optiuni_facturare', 1)
|
||||
DO Verdict WITH loForm2.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .F., ;
|
||||
"Enabled=.F. dupa Init (nidpolpretstoc=" + TRANSFORM(loForm2.nidpolpretstoc) + ") - fara filtru pe utilizator pe ramura V_TIP=1, cf. sursei citite"
|
||||
loForm2.Refresh()
|
||||
DO Verdict WITH loForm2.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .F., "Enabled=.F. dupa Refresh()"
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
gcCaz = "[3: optiune GOALA] "
|
||||
gnIdUtil = 8
|
||||
LOCAL lnOk
|
||||
lnOk = SQLEXEC(gnHandle, "UPDATE OPTIUNI SET VARVALUE = NULL WHERE PROGRAM = 'ROAFACTURARE' AND VARNAME = 'ID_POL_PRET_STOC'")
|
||||
DO Verdict WITH lnOk > 0, "UPDATE OPTIUNI ID_POL_PRET_STOC=NULL (in tranzactie, ROLLBACK la final) - lnOk=" + TRANSFORM(lnOk)
|
||||
loForm3 = CREATEOBJECT('frm_optiuni_facturare', 1)
|
||||
DO Verdict WITH loForm3.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .T., ;
|
||||
"Enabled=.T. cu optiunea goala (nidpolpretstoc=" + TRANSFORM(NVL(loForm3.nidpolpretstoc, -999)) + ")"
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
* revin la optiunea reala (41) pentru cazul 4 - salvare fara schimbare trebuie sa compare fata
|
||||
* de valoarea reala din OPTIUNI, nu fata de NULL-ul de mai sus
|
||||
lnOk = SQLEXEC(gnHandle, "UPDATE OPTIUNI SET VARVALUE = '41' WHERE PROGRAM = 'ROAFACTURARE' AND VARNAME = 'ID_POL_PRET_STOC'")
|
||||
DO Verdict WITH lnOk > 0, "restaurare OPTIUNI ID_POL_PRET_STOC=41 (tot in tranzactie) - lnOk=" + TRANSFORM(lnOk)
|
||||
|
||||
gcCaz = "[4: salvare fara schimbare de camp, spion oexecutor] "
|
||||
loForm4 = CREATEOBJECT('frm_optiuni_facturare', 1)
|
||||
loReal = goExecutor
|
||||
loSpy = CREATEOBJECT('SpyS7a')
|
||||
loSpy.nHandle = gnHandle
|
||||
goExecutor = loSpy
|
||||
loForm4.inainte_de_do_termin()
|
||||
goExecutor = loReal
|
||||
DO Verdict WITH !('modificare_politica_stoc' $ UPPER(loSpy.cToateSql)) AND !('MODIFICARE_POLITICA_STOC' $ loSpy.cToateSql), ;
|
||||
"niciun SQL trimis prin executor nu contine modificare_politica_stoc (" + TRANSFORM(loSpy.nApeluri) + " apel(uri))"
|
||||
|
||||
*----------------------------------------------------------------------------------------
|
||||
gcCaz = "[mutatie de control, instanta separata] "
|
||||
LOCAL loFormCtrl
|
||||
gnIdUtil = 8
|
||||
loFormCtrl = CREATEOBJECT('frm_optiuni_facturare', 1)
|
||||
loFormCtrl.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .T.
|
||||
DO Verdict WITH loFormCtrl.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .T., ;
|
||||
"dupa fortare manuala Enabled=.T. pe o instanta separata - un assert naiv 'Enabled=.F.' de la cazul 1 ar fi picat aici, deci asertul e sensibil la linia din Init"
|
||||
|
||||
DO Final
|
||||
|
||||
*==================================================================================================
|
||||
* Spion pe goExecutor - subclasa DODEFAULT pe PCOUNT (nu opreste executia), tiparul din
|
||||
* editare_factura\probe_s13_toomanycolumns.prg. Acumuleaza toate SQL-urile intr-un singur sir,
|
||||
* pentru un singur test de substring la final.
|
||||
*==================================================================================================
|
||||
DEFINE CLASS SpyS7a AS oexecutor
|
||||
nApeluri = 0
|
||||
cToateSql = ''
|
||||
|
||||
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
||||
LOCAL lnRet, lnPc, lcS
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '<NU E SIR>')
|
||||
THIS.cToateSql = THIS.cToateSql + lcS + CHR(13) + CHR(10)
|
||||
STRTOFILE(' SpyS7a #' + TRANSFORM(THIS.nApeluri) + ' SQL=[' + lcS + ']' + CHR(13) + CHR(10), gcLog, 1)
|
||||
|
||||
lnPc = PCOUNT()
|
||||
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
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE Verdict
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO AfLog WITH "PASS: " + gcCaz + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Final
|
||||
LOCAL lnOk
|
||||
gcCaz = "[final] "
|
||||
lnOk = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk)
|
||||
IF TYPE('gnTransOriginal') = 'N'
|
||||
SQLSETPROP(gnHandle, "Transactions", gnTransOriginal)
|
||||
ENDIF
|
||||
DO AfLog WITH "TOTAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail)
|
||||
DO AfLog WITH "END " + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
181
utile/Teste/facturare_unificat/probe_12b_s7b_politica_nota.prg
Normal file
181
utile/Teste/facturare_unificat/probe_12b_s7b_politica_nota.prg
Normal file
@@ -0,0 +1,181 @@
|
||||
* probe_12b_s7b_politica_nota.prg
|
||||
* Plan #12b, S7b - proba headless pe clasa cus_pret_nomenclator (COMUN\programe\ofacturare_comun.prg:2323),
|
||||
* metodele adaugate in S7b: incarca_nota_politica / salveaza_nota_politica (nota implicita a politicii
|
||||
* de stoc, folosita in optiunile facturarii, ofacturare.vc2). Clasa e definita direct in .prg
|
||||
* (Set Procedure To ofacturare_comun.prg, deja Additive in mediul de test) - CREATEOBJECT direct.
|
||||
*
|
||||
* Cazuri:
|
||||
* (1) asigura_politica() apelata de doua ori, ca din ROACONTRACTE (acelasi pachet PL/SQL,
|
||||
* D14 = pack_preturi.asigura_politica_stoc) dupa ce optiunea e golita -> o singura politica
|
||||
* noua (numarate randurile CRM_POLITICI_PRETURI inainte/dupa fiecare apel, nu doar id-ul).
|
||||
* (2) salveaza_nota_politica(id_pol_nou, '461', '7583') -> ID_NOTA citit DIRECT din
|
||||
* CRM_POLITICI_PRETURI (nu din proprietatile instantei), plus SCD/SCC ale notei citite prin
|
||||
* JOIN CRM_NOTE_VANZARI/NOTE_CONTABILE, comparate cu valorile asteptate 461/7583.
|
||||
* (3) incarca_nota_politica(acelasi id_pol) pe o instanta noua -> cScd/cScc = 461/7583, identic
|
||||
* cu ce s-a scris la (2).
|
||||
* Politica noua de la (1) e folosita si la (2)/(3), ca sa nu atinga politica 41 de productie -
|
||||
* dispare oricum la ROLLBACK.
|
||||
*
|
||||
* Spion pe goExecutor: nu e nevoie - toate verificarile citesc direct din Oracle (SQLEXEC), nu
|
||||
* numara apeluri RPC.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File ruleaza_suita.ps1 -Nume probe_12b_s7b_politica_nota
|
||||
* Log: D:\ROA\ROAFACTURARE\docs\loguri_12b\s7b_proba.log (cerut de sarcina, nu out\)
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gcCaz, gnPass, gnFail, gnTransOriginal
|
||||
gcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\s7b_proba.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
|
||||
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
|
||||
ENDIF
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
gcCaz = ""
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
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 AfLog WITH "FAIL: conexiune Oracle esuata"
|
||||
DO Final
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle)
|
||||
|
||||
gnTransOriginal = SQLGETPROP(gnHandle, "Transactions")
|
||||
SQLSETPROP(gnHandle, "Transactions", 2)
|
||||
DO AfLog WITH "Transactions manual, original=" + TRANSFORM(gnTransOriginal)
|
||||
|
||||
LOCAL lnOk, lnCntInit, lnCntDupa1, lnCntDupa2, lcOptInit, loA, loB, lnPolA, lnPolB
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (1): asigura_politica_stoc apelata de doua ori (ca din ROACONTRACTE) -> o singura politica
|
||||
*==========================================================================================
|
||||
gcCaz = "[1-asigura_politica_stoc-x2] "
|
||||
|
||||
* precondition: sesiunea reala initializeaza pack_facturare.nid_moneda_nationala inaintea D14
|
||||
* (initializeaza_facturare) - tiparul confirmat in docs\proba_s6a_asigura_politica_stoc.sql
|
||||
lnOk = SQLEXEC(gnHandle, "begin pack_facturare.nid_moneda_nationala := pack_def.GetIdMonedaNationala(); end;")
|
||||
DO Verdict WITH lnOk > 0, "precondition pack_facturare.nid_moneda_nationala initializat"
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select count(*) cnt from crm_politici_preturi", "crscnt0")
|
||||
lnCntInit = IIF(lnOk > 0 AND USED('crscnt0'), crscnt0.cnt, -1)
|
||||
IF USED('crscnt0')
|
||||
USE IN crscnt0
|
||||
ENDIF
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select varvalue from optiuni where program='ROAFACTURARE' and varname='ID_POL_PRET_STOC'", "crsopt0")
|
||||
lcOptInit = IIF(lnOk > 0 AND USED('crsopt0') AND !ISNULL(crsopt0.varvalue), ALLTRIM(crsopt0.varvalue), "")
|
||||
IF USED('crsopt0')
|
||||
USE IN crsopt0
|
||||
ENDIF
|
||||
DO AfLog WITH " OPTIUNE initiala ID_POL_PRET_STOC=[" + lcOptInit + "], politici initial=" + TRANSFORM(lnCntInit)
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "UPDATE OPTIUNI SET VARVALUE = NULL WHERE PROGRAM = 'ROAFACTURARE' AND VARNAME = 'ID_POL_PRET_STOC'")
|
||||
DO Verdict WITH lnOk > 0, "UPDATE OPTIUNI ID_POL_PRET_STOC=NULL (tranzactie, ROLLBACK la final) - lnOk=" + TRANSFORM(lnOk)
|
||||
|
||||
loA = CREATEOBJECT('cus_pret_nomenclator')
|
||||
lnPolA = loA.asigura_politica()
|
||||
DO Verdict WITH lnPolA > 0, "primul apel asigura_politica() > 0 (obtinut " + TRANSFORM(lnPolA) + ")"
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select count(*) cnt from crm_politici_preturi", "crscnt1")
|
||||
lnCntDupa1 = IIF(lnOk > 0 AND USED('crscnt1'), crscnt1.cnt, -1)
|
||||
IF USED('crscnt1')
|
||||
USE IN crscnt1
|
||||
ENDIF
|
||||
DO Verdict WITH lnCntDupa1 = lnCntInit + 1, "dupa primul apel: politici " + TRANSFORM(lnCntInit) + " -> " + TRANSFORM(lnCntDupa1) + " (+1 asteptat)"
|
||||
|
||||
loB = CREATEOBJECT('cus_pret_nomenclator')
|
||||
lnPolB = loB.asigura_politica()
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select count(*) cnt from crm_politici_preturi", "crscnt2")
|
||||
lnCntDupa2 = IIF(lnOk > 0 AND USED('crscnt2'), crscnt2.cnt, -1)
|
||||
IF USED('crscnt2')
|
||||
USE IN crscnt2
|
||||
ENDIF
|
||||
|
||||
DO Verdict WITH lnPolB = lnPolA, "al doilea apel (ca din ROACONTRACTE) intoarce acelasi id=" + TRANSFORM(lnPolA) + " (obtinut " + TRANSFORM(lnPolB) + ")"
|
||||
DO Verdict WITH lnCntDupa2 = lnCntDupa1, "al doilea apel NU creeaza politica noua (politici " + TRANSFORM(lnCntDupa1) + " -> " + TRANSFORM(lnCntDupa2) + ")"
|
||||
|
||||
IF !EMPTY(lcOptInit)
|
||||
lnOk = SQLEXEC(gnHandle, "UPDATE OPTIUNI SET VARVALUE = '" + lcOptInit + "' WHERE PROGRAM = 'ROAFACTURARE' AND VARNAME = 'ID_POL_PRET_STOC'")
|
||||
DO Verdict WITH lnOk > 0, "restaurare OPTIUNI ID_POL_PRET_STOC=" + lcOptInit + " (tot in tranzactie) - lnOk=" + TRANSFORM(lnOk)
|
||||
ENDIF
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (2): salveaza_nota_politica scrie ID_NOTA in CRM_POLITICI_PRETURI (citit din Oracle)
|
||||
*==========================================================================================
|
||||
gcCaz = "[2-salveaza_nota_politica] "
|
||||
LOCAL loC, llRes2, lnIdNotaCitit
|
||||
|
||||
loC = CREATEOBJECT('cus_pret_nomenclator')
|
||||
llRes2 = loC.salveaza_nota_politica(lnPolA, '461', '7583')
|
||||
DO Verdict WITH llRes2, "salveaza_nota_politica(" + TRANSFORM(lnPolA) + ",461,7583) = .T."
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select id_nota from crm_politici_preturi where id_pol = " + TRANSFORM(lnPolA), "crsverif2")
|
||||
lnIdNotaCitit = IIF(lnOk > 0 AND USED('crsverif2') AND RECCOUNT('crsverif2') = 1, NVL(crsverif2.id_nota,-999), -999)
|
||||
IF USED('crsverif2')
|
||||
USE IN crsverif2
|
||||
ENDIF
|
||||
DO Verdict WITH lnIdNotaCitit > 0, "ID_NOTA citit direct din CRM_POLITICI_PRETURI (nu din instanta) > 0 - obtinut " + TRANSFORM(lnIdNotaCitit)
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select n.scd, n.scc from crm_note_vanzari v, note_contabile n where v.id_nota = " + TRANSFORM(lnIdNotaCitit) + " and n.id_set = v.id_set", "crsnota2")
|
||||
DO Verdict WITH lnOk > 0 AND USED('crsnota2') AND RECCOUNT('crsnota2') = 1 AND ALLTRIM(crsnota2.scd) == "461" AND ALLTRIM(crsnota2.scc) == "7583", ;
|
||||
"nota din Oracle are scd/scc = 461/7583 (asteptat independent, nu cursorul clasei) - obtinut " + ;
|
||||
IIF(USED('crsnota2') AND RECCOUNT('crsnota2') = 1, ALLTRIM(NVL(crsnota2.scd,'?')) + '/' + ALLTRIM(NVL(crsnota2.scc,'?')), '<lipsa>')
|
||||
IF USED('crsnota2')
|
||||
USE IN crsnota2
|
||||
ENDIF
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (3): incarca_nota_politica citeste inapoi identic (instanta noua)
|
||||
*==========================================================================================
|
||||
gcCaz = "[3-incarca_nota_politica] "
|
||||
LOCAL loD, llRes3
|
||||
|
||||
loD = CREATEOBJECT('cus_pret_nomenclator')
|
||||
llRes3 = loD.incarca_nota_politica(lnPolA)
|
||||
DO Verdict WITH llRes3, "incarca_nota_politica(" + TRANSFORM(lnPolA) + ") = .T."
|
||||
DO Verdict WITH ALLTRIM(loD.cScd) == "461", "incarca_nota_politica: cScd=461 (obtinut [" + ALLTRIM(loD.cScd) + "])"
|
||||
DO Verdict WITH ALLTRIM(loD.cScc) == "7583", "incarca_nota_politica: cScc=7583 (obtinut [" + ALLTRIM(loD.cScc) + "])"
|
||||
|
||||
DO Final
|
||||
|
||||
*==================================================================================================
|
||||
PROCEDURE Verdict
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO AfLog WITH "PASS: " + gcCaz + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Final
|
||||
LOCAL lnOk
|
||||
gcCaz = "[final] "
|
||||
lnOk = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk)
|
||||
IF TYPE('gnTransOriginal') = 'N'
|
||||
SQLSETPROP(gnHandle, "Transactions", gnTransOriginal)
|
||||
ENDIF
|
||||
DO AfLog WITH "TOTAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail)
|
||||
DO AfLog WITH "END " + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
401
utile/Teste/facturare_unificat/probe_12b_s8_cai_1_3.prg
Normal file
401
utile/Teste/facturare_unificat/probe_12b_s8_cai_1_3.prg
Normal file
@@ -0,0 +1,401 @@
|
||||
* probe_12b_s8_cai_1_3.prg
|
||||
* Plan 12b, S8-4b: proba headless a caii 1 (do_adauga_articol) si caii 3 (do_adauga_tot) din
|
||||
* frm_facturare_articole2 (COMUN\clase\ofacturare.vc2) pentru verificarea prietenoasa D10 a
|
||||
* contului de venit (S8-3). Calea 2 (do_adauga_articol_cautat) e alt fisier.
|
||||
*
|
||||
* Instantiere formular headless (tipar dovedit, COMUN\utile\Teste\facturare_unificat\test_s3_4b_incarca_articole.prg,
|
||||
* 95 PASS): SET PATH/CLASSLIB gridextras + _cb_base ADDITIVE inainte de Createobject, crsfactura
|
||||
* deschis (structura goala + camp gestiune) inainte de Createobject (grd_factura.Column e legat la
|
||||
* crsFactura.denumire), o singura instanta refolosita pe cele 3 cazuri.
|
||||
*
|
||||
* crsarticole: structura REALA descoperita cu AFIELDS pe pack_facturare.cursor_preturi(tnTip=1)
|
||||
* (24 campuri), nu cursorul sintetic din mock_cursor_articole.prg (are pretftva/pretctva direct,
|
||||
* incompatibil cu do_initializeaza_articol care cere Pret/pret_val si le deriva singur).
|
||||
*
|
||||
* Politica de stoc (ID_NOTA NULL, tranzactie, ROLLBACK la final) + cele doua articole (cont dedus /
|
||||
* fara cont dedus) alese din baza vie prin acelasi tipar ca probe_12b_s8_verifica_linie.prg (caz3/caz4).
|
||||
* Articolele sunt marcate gestionabil=0 in crsarticole (nu reflecta starea reala din nomenclator) ca
|
||||
* sa ocoleasca do_alege_stoc (ramura de stoc, neatinsa de S8-3) - do_verifica_articol si Do Case-ul
|
||||
* de ramificare din do_adauga_articol trec amandoua pe gestionabil=0, indiferent de gnScadereStoc.
|
||||
*
|
||||
* Spion amessagebox propriu (contor + text), incarcat PRIMUL (SET PROCEDURE TO (acest fisier), &lcProcExistent).
|
||||
*
|
||||
* Cazuri:
|
||||
* (1) calea 1, articol FARA cont dedus -> do_adauga_articol(.T.) nu adauga (Reccount(crsfactura)
|
||||
* neschimbat), spion: 1 mesaj continand denumirea articolului. PASS.
|
||||
* (2) calea 1, articol CU cont dedus -> linia se adauga (Reccount+1), 0 mesaje. PASS.
|
||||
* (3) calea 3, do_adauga_tot() pe crsarticole cu ambele articole (problema + OK) -> AMBELE linii
|
||||
* adaugate (Reccount+2), spion: EXACT 1 mesaj, continand denumirea articolului problema, nu si
|
||||
* pe a celui OK. PASS.
|
||||
*
|
||||
* S8-4d: blocajul (2)/(3) era lipsa cursorului 'saft_taxtable' - Createobject("frm_articol_factura",...)
|
||||
* (ofacturare.vc2:18751) executa in Init (:2678, gl406) un Requery() pe un combo RowSourceType=3 legat
|
||||
* de 'saft_taxtable'; cu SET TABLEPROMPT OFF eroarea reala era "File 'saft_taxtable.dbf' does not exist."
|
||||
* Fix: update_saft_taxtable() (COMUN\programe\updateserver.prg), acelasi apel facut de aplicatie in
|
||||
* factureaza() (COMUN\programe\ofacturare.prg) imediat dupa update_jtva_coloane(), inainte de
|
||||
* Createobject('frm_facturare_articole2'). glIncearcaCazSucces implicit .T.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\probe_12b_s8_cai_1_3.prg"
|
||||
* Log: D:\ROA\ROAFACTURARE\docs\loguri_12b\s8_cai_1_3.log
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
SET TABLEPROMPT OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gcCaz, gnPass, gnFail, gnTransOriginal
|
||||
PUBLIC gcSpionMesaje, gnSpionCount
|
||||
gcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\s8_cai_1_3.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
|
||||
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
|
||||
ENDIF
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog, 1)
|
||||
gcCaz = ""
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
gcSpionMesaje = ""
|
||||
gnSpionCount = 0
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
*-- spion amessagebox: se incarca PRIMUL (inaintea aplicatiei), ca sa castige la nume duplicat
|
||||
LOCAL lcProcExistent, lcCmdProc
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
lcCmdProc = [SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\probe_12b_s8_cai_1_3.prg"]
|
||||
IF !EMPTY(lcProcExistent)
|
||||
lcCmdProc = lcCmdProc + ", " + lcProcExistent
|
||||
ENDIF
|
||||
&lcCmdProc
|
||||
|
||||
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 AfLog WITH "FAIL: conexiune Oracle esuata"
|
||||
DO Final
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle)
|
||||
|
||||
gnTransOriginal = SQLGETPROP(gnHandle, "Transactions")
|
||||
SQLSETPROP(gnHandle, "Transactions", 2)
|
||||
DO AfLog WITH "Transactions manual, original=" + TRANSFORM(gnTransOriginal)
|
||||
|
||||
IF !actualizeaza_optiuni_program()
|
||||
DO AfLog WITH "FAIL: actualizeaza_optiuni_program()"
|
||||
DO Final
|
||||
ENDIF
|
||||
DO AfLog WITH "actualizeaza_optiuni_program OK, gnScadereStoc=" + TRANSFORM(NVL(gnScadereStoc, -1))
|
||||
|
||||
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE
|
||||
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras\gridextras.vcx" ADDITIVE
|
||||
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\clase\_cb_base.vcx" ADDITIVE
|
||||
DO AfLog WITH "SET CLASSLIB suplimentar OK"
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
DO AfLog WITH "update_saft_taxtable OK, Reccount=" + TRANSFORM(IIF(USED('saft_taxtable'), RECCOUNT('saft_taxtable'), -1))
|
||||
|
||||
*==========================================================================================
|
||||
* alegere date: politica de stoc curenta + articol OK (cont dedus) + articol problema (fara cont)
|
||||
*==========================================================================================
|
||||
LOCAL lnOk, lnIdPolStoc, lnIdArtOk, lnIdArtProblema, lcDenOk, lcDenProblema
|
||||
LOCAL llGasitOk, llGasitProblema
|
||||
|
||||
gcCaz = "[setup] "
|
||||
lnOk = SQLEXEC(gnHandle, "select varvalue from optiuni where program='ROAFACTURARE' and varname='ID_POL_PRET_STOC'", "crsopt")
|
||||
lnIdPolStoc = IIF(lnOk > 0 AND USED('crsopt') AND !ISNULL(crsopt.varvalue), VAL(ALLTRIM(crsopt.varvalue)), 0)
|
||||
IF USED('crsopt')
|
||||
USE IN crsopt
|
||||
ENDIF
|
||||
DO Verdict WITH lnIdPolStoc > 0, "politica de stoc citita din OPTIUNI, id_pol=" + TRANSFORM(lnIdPolStoc)
|
||||
IF lnIdPolStoc <= 0
|
||||
DO Final
|
||||
ENDIF
|
||||
PUBLIC gnId_pol_pret_stoc
|
||||
gnId_pol_pret_stoc = lnIdPolStoc
|
||||
|
||||
* articol OK: rand al politicii de stoc, ID_NOTA propriu NULL, cont_venit_articol_stoc rezolvat
|
||||
lnOk = SQLEXEC(gnHandle, ;
|
||||
"select a.id_articol from crm_politici_pret_art a " + ;
|
||||
"where a.id_pol = " + TRANSFORM(lnIdPolStoc) + " and a.id_nota is null " + ;
|
||||
"and pack_facturare.cont_venit_articol_stoc(a.id_articol) is not null and rownum = 1", "crsok")
|
||||
llGasitOk = lnOk > 0 AND USED('crsok') AND RECCOUNT('crsok') = 1
|
||||
lnIdArtOk = IIF(llGasitOk, crsok.id_articol, 0)
|
||||
IF USED('crsok')
|
||||
USE IN crsok
|
||||
ENDIF
|
||||
DO AfLog WITH "articol OK ales: id_articol=" + TRANSFORM(lnIdArtOk)
|
||||
|
||||
* articol problema: alt rand al politicii de stoc, ID_NOTA propriu NULL, fara cont dedus
|
||||
lnOk = SQLEXEC(gnHandle, ;
|
||||
"select a.id_articol from crm_politici_pret_art a " + ;
|
||||
"where a.id_pol = " + TRANSFORM(lnIdPolStoc) + " and a.id_nota is null " + ;
|
||||
"and a.id_articol <> " + TRANSFORM(lnIdArtOk) + " " + ;
|
||||
"and pack_facturare.cont_venit_articol_stoc(a.id_articol) is null and rownum = 1", "crsprob")
|
||||
llGasitProblema = lnOk > 0 AND USED('crsprob') AND RECCOUNT('crsprob') = 1
|
||||
lnIdArtProblema = IIF(llGasitProblema, crsprob.id_articol, 0)
|
||||
IF USED('crsprob')
|
||||
USE IN crsprob
|
||||
ENDIF
|
||||
DO AfLog WITH "articol PROBLEMA ales: id_articol=" + TRANSFORM(lnIdArtProblema)
|
||||
|
||||
IF !llGasitOk OR !llGasitProblema
|
||||
DO AfLog WITH "FAIL: date insuficiente in baza vie (articol OK sau PROBLEMA negasit), opresc proba"
|
||||
gnFail = gnFail + 1
|
||||
DO Final
|
||||
ENDIF
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select denumire from nom_articole where id_articol = " + TRANSFORM(lnIdArtOk), "crsden1")
|
||||
lcDenOk = IIF(lnOk > 0 AND USED('crsden1') AND RECCOUNT('crsden1') = 1, ALLTRIM(NVL(crsden1.denumire, [])), [<necunoscut>])
|
||||
IF USED('crsden1')
|
||||
USE IN crsden1
|
||||
ENDIF
|
||||
lnOk = SQLEXEC(gnHandle, "select denumire from nom_articole where id_articol = " + TRANSFORM(lnIdArtProblema), "crsden2")
|
||||
lcDenProblema = IIF(lnOk > 0 AND USED('crsden2') AND RECCOUNT('crsden2') = 1, ALLTRIM(NVL(crsden2.denumire, [])), [<necunoscut>])
|
||||
IF USED('crsden2')
|
||||
USE IN crsden2
|
||||
ENDIF
|
||||
DO AfLog WITH "denumiri: OK=[" + lcDenOk + "] PROBLEMA=[" + lcDenProblema + "]"
|
||||
|
||||
* politica de stoc cu ID_NOTA NULL (tranzactie, ROLLBACK la final) - fortez ramura "fara cont dedus"
|
||||
gcCaz = "[setup] "
|
||||
lnOk = SQLEXEC(gnHandle, "UPDATE crm_politici_preturi SET id_nota = NULL WHERE id_pol = " + TRANSFORM(lnIdPolStoc))
|
||||
DO Verdict WITH lnOk > 0, "UPDATE politica de stoc ID_NOTA=NULL (tranzactie, ROLLBACK la final) - lnOk=" + TRANSFORM(lnOk)
|
||||
|
||||
*==========================================================================================
|
||||
* mediu formular: poDate, jtva_coloane, crsfactura gol, Createobject
|
||||
*==========================================================================================
|
||||
PRIVATE poDate, poGeneratorNumere
|
||||
LOCAL lnIdSet
|
||||
lnIdSet = 25000 + 30 - 1 + NVL(gnScadereStoc, 0) * 10
|
||||
poDate = CREATEOBJECT("oDateFactura", lnIdSet, 30)
|
||||
poDate.dataireg = DATE(gnAn, gnLuna, 10)
|
||||
poDate.dataact = poDate.dataireg
|
||||
poDate.zi_curs = poDate.dataireg
|
||||
poDate.id_client = 1
|
||||
poDate.nIdTipDoc = 6
|
||||
poGeneratorNumere = NULL
|
||||
DO AfLog WITH "poDate OK, tip=" + TRANSFORM(poDate.tip) + " in_valuta=" + TRANSFORM(poDate.in_valuta) + " tva_incasare=" + TRANSFORM(NVL(poDate.tva_incasare, -1))
|
||||
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF NVL(poDate.tva_incasare, 0) = 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 AfLog WITH "jtva_coloane Reccount=" + TRANSFORM(RECCOUNT('jtva_coloane'))
|
||||
|
||||
DO PregatesteFacturaGoala
|
||||
|
||||
LOCAL loForm
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
DO Verdict WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2"
|
||||
IF VARTYPE(loForm) <> 'O'
|
||||
DO Final
|
||||
ENDIF
|
||||
* fara Show()/WindowType - formularul ramane necreat vizual, ca in test_s3_4b_incarca_articole.prg
|
||||
DO AfLog WITH "formular creat, nu afisat (fara Show())"
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (1): calea 1, articol fara cont dedus -> refuz
|
||||
*==========================================================================================
|
||||
gcCaz = "[1-calea1-refuz] "
|
||||
DO PregatesteArticoleUnRand WITH lnIdArtProblema, lcDenProblema, lnIdPolStoc
|
||||
|
||||
LOCAL lnReccountInainte
|
||||
lnReccountInainte = RECCOUNT('crsfactura')
|
||||
gnSpionCount = 0
|
||||
gcSpionMesaje = ""
|
||||
|
||||
loForm.do_adauga_articol(.T.)
|
||||
|
||||
DO Verdict WITH RECCOUNT('crsfactura') == lnReccountInainte, ;
|
||||
"Reccount(crsfactura) neschimbat (" + TRANSFORM(RECCOUNT('crsfactura')) + ", era " + TRANSFORM(lnReccountInainte) + ")"
|
||||
DO Verdict WITH gnSpionCount == 1, "spion: 1 mesaj (obtinut " + TRANSFORM(gnSpionCount) + ")"
|
||||
DO Verdict WITH lcDenProblema $ gcSpionMesaje, "mesajul contine denumirea articolului [" + lcDenProblema + "] - mesaj: [" + gcSpionMesaje + "]"
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (2): calea 1, articol cu cont dedus -> linia se adauga
|
||||
*==========================================================================================
|
||||
IF TYPE('glIncearcaCazSucces') = 'U'
|
||||
PUBLIC glIncearcaCazSucces
|
||||
glIncearcaCazSucces = .T.
|
||||
ENDIF
|
||||
|
||||
gcCaz = "[2-calea1-cont-dedus] "
|
||||
IF !glIncearcaCazSucces
|
||||
DO AfLog WITH "BLOCAT: " + gcCaz + "sarit (glIncearcaCazSucces=.F.) - ramura de succes a lui do_adauga_articol atarna headless, vezi antetul fisierului"
|
||||
ELSE
|
||||
DO PregatesteArticoleUnRand WITH lnIdArtOk, lcDenOk, lnIdPolStoc
|
||||
|
||||
lnReccountInainte = RECCOUNT('crsfactura')
|
||||
gnSpionCount = 0
|
||||
gcSpionMesaje = ""
|
||||
|
||||
loForm.do_adauga_articol(.T.)
|
||||
|
||||
DO Verdict WITH RECCOUNT('crsfactura') == lnReccountInainte + 1, ;
|
||||
"Reccount(crsfactura) creste cu 1 (" + TRANSFORM(RECCOUNT('crsfactura')) + ", era " + TRANSFORM(lnReccountInainte) + ")"
|
||||
DO Verdict WITH gnSpionCount == 0, "spion: 0 mesaje (obtinut " + TRANSFORM(gnSpionCount) + ") - " + gcSpionMesaje
|
||||
ENDIF
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (3): calea 3, do_adauga_tot() pe ambele articole -> ambele linii, UN singur mesaj
|
||||
* (scaneaza crsarticole si cheama do_adauga_articol pe fiecare rand)
|
||||
*==========================================================================================
|
||||
gcCaz = "[3-calea3-adauga-tot] "
|
||||
IF !glIncearcaCazSucces
|
||||
DO AfLog WITH "BLOCAT: " + gcCaz + "sarit (glIncearcaCazSucces=.F.) - aceeasi ramura de succes ca (2)"
|
||||
ELSE
|
||||
DO PregatesteFacturaGoala
|
||||
loForm.grd_factura.RecordSource = ''
|
||||
loForm.grd_factura.RecordSource = 'crsfactura'
|
||||
DO PregatesteArticoleDoiaRanduri WITH lnIdArtProblema, lcDenProblema, lnIdArtOk, lcDenOk, lnIdPolStoc
|
||||
|
||||
lnReccountInainte = RECCOUNT('crsfactura')
|
||||
gnSpionCount = 0
|
||||
gcSpionMesaje = ""
|
||||
|
||||
loForm.do_adauga_tot()
|
||||
|
||||
DO Verdict WITH RECCOUNT('crsfactura') == lnReccountInainte + 2, ;
|
||||
"Reccount(crsfactura) creste cu 2, ambele linii adaugate (" + TRANSFORM(RECCOUNT('crsfactura')) + ", era " + TRANSFORM(lnReccountInainte) + ")"
|
||||
DO Verdict WITH gnSpionCount == 1, "spion: EXACT 1 mesaj (obtinut " + TRANSFORM(gnSpionCount) + ") - " + gcSpionMesaje
|
||||
DO Verdict WITH lcDenProblema $ gcSpionMesaje, "mesajul contine denumirea articolului problema [" + lcDenProblema + "]"
|
||||
DO Verdict WITH !(lcDenOk $ gcSpionMesaje), "mesajul NU contine denumirea articolului OK [" + lcDenOk + "]"
|
||||
ENDIF
|
||||
|
||||
IF VARTYPE(loForm) = 'O' AND !ISNULL(loForm)
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
loForm = NULL
|
||||
|
||||
DO Final
|
||||
|
||||
*==================================================================================================
|
||||
*-- spion amessagebox - contor + texte, incarcat PRIMUL (vezi SET PROCEDURE la inceput)
|
||||
FUNCTION amessagebox
|
||||
LPARAMETERS tcMessage, tnDialogBoxType, tcTitle, tcFont, tnTimeOut, tnTimeoutValue
|
||||
gnSpionCount = gnSpionCount + 1
|
||||
gcSpionMesaje = gcSpionMesaje + "[" + TRANSFORM(tcMessage) + "]" + CHR(13) + CHR(10)
|
||||
DO AfLog WITH " [spion amessagebox] " + TRANSFORM(tcMessage)
|
||||
RETURN 6
|
||||
ENDFUNC
|
||||
|
||||
*-- crsfactura gol, cu campul 'gestiune' suplimentar cerut de grd_factura.cGestiune (ca in
|
||||
*-- test_s3_4b_incarca_articole.prg) - obligatoriu inainte de Createobject (legare ControlSource)
|
||||
PROCEDURE PregatesteFacturaGoala
|
||||
IF USED('crsfactura')
|
||||
USE IN crsfactura
|
||||
ENDIF
|
||||
creeaza_facturacrs([crsfactura])
|
||||
SELECT *, CAST(NULL AS C(100)) AS gestiune FROM crsfactura INTO CURSOR crsfact_tmp READWRITE
|
||||
USE IN crsfactura
|
||||
SELECT * FROM crsfact_tmp INTO CURSOR crsfactura READWRITE
|
||||
USE IN crsfact_tmp
|
||||
ENDPROC
|
||||
|
||||
*-- crsarticole cu structura REALA (24 campuri, AFIELDS pe cursor_preturi tnTip=1), UN singur rand,
|
||||
*-- gestionabil=0 (ocoleste do_alege_stoc, neatins de S8-3)
|
||||
PROCEDURE PregatesteArticoleUnRand
|
||||
LPARAMETERS tnIdArticol, tcDenumire, tnIdPol
|
||||
IF USED('crsarticole')
|
||||
USE IN crsarticole
|
||||
ENDIF
|
||||
DO CreeazaStructuraArticole
|
||||
INSERT INTO crsarticole (id_c, id_articol, lot, serie, id_pol, id_valuta, nume_lista_preturi, ;
|
||||
discount_unitar, discount_unitar_val, codmat, codbare, denumire, um, gestionabil, ;
|
||||
cantitate, proc_tvav, preturi_cu_tva, curs, multiplicator, pret, pret_val, tip_valuta, ;
|
||||
nume_val, modificabil) ;
|
||||
VALUES (1, tnIdArticol, [], [], tnIdPol, 1, [S8-4b], 0, 0, [S8-4b], [], tcDenumire, [BUC], 0, ;
|
||||
1, 1.19, 0, 0, 1, 100, 0, 0, [RON], 1)
|
||||
GO TOP IN crsarticole
|
||||
ENDPROC
|
||||
|
||||
*-- crsarticole cu DOUA randuri (problema + OK), pentru do_adauga_tot
|
||||
PROCEDURE PregatesteArticoleDoiaRanduri
|
||||
LPARAMETERS tnIdArtProblema, tcDenProblema, tnIdArtOk, tcDenOk, tnIdPol
|
||||
IF USED('crsarticole')
|
||||
USE IN crsarticole
|
||||
ENDIF
|
||||
DO CreeazaStructuraArticole
|
||||
INSERT INTO crsarticole (id_c, id_articol, lot, serie, id_pol, id_valuta, nume_lista_preturi, ;
|
||||
discount_unitar, discount_unitar_val, codmat, codbare, denumire, um, gestionabil, ;
|
||||
cantitate, proc_tvav, preturi_cu_tva, curs, multiplicator, pret, pret_val, tip_valuta, ;
|
||||
nume_val, modificabil) ;
|
||||
VALUES (1, tnIdArtProblema, [], [], tnIdPol, 1, [S8-4b], 0, 0, [S8-4b], [], tcDenProblema, [BUC], 0, ;
|
||||
1, 1.19, 0, 0, 1, 100, 0, 0, [RON], 1)
|
||||
INSERT INTO crsarticole (id_c, id_articol, lot, serie, id_pol, id_valuta, nume_lista_preturi, ;
|
||||
discount_unitar, discount_unitar_val, codmat, codbare, denumire, um, gestionabil, ;
|
||||
cantitate, proc_tvav, preturi_cu_tva, curs, multiplicator, pret, pret_val, tip_valuta, ;
|
||||
nume_val, modificabil) ;
|
||||
VALUES (2, tnIdArtOk, [], [], tnIdPol, 1, [S8-4b], 0, 0, [S8-4b], [], tcDenOk, [BUC], 0, ;
|
||||
1, 1.19, 0, 0, 1, 100, 0, 0, [RON], 1)
|
||||
GO TOP IN crsarticole
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaStructuraArticole
|
||||
CREATE CURSOR crsarticole (id_c N(8,0), id_articol N(20,0), lot C(20), serie C(20), id_pol N(7,0), ;
|
||||
id_valuta N(7,0), nume_lista_preturi C(100), discount_unitar N(8,2), discount_unitar_val N(8,2), ;
|
||||
codmat C(50), codbare C(50), denumire C(100), um C(20), gestionabil N(3,0), cantitate N(8,2), ;
|
||||
proc_tvav N(12,4), preturi_cu_tva N(3,0), curs N(14,4), multiplicator N(12,0), pret N(8,2), ;
|
||||
pret_val N(8,2), tip_valuta N(3,0), nume_val C(20), modificabil N(3,0))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Verdict
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO AfLog WITH "PASS: " + gcCaz + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
LOCAL lnI, laStack
|
||||
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
||||
DO AfLog WITH " MESSAGE(1)=" + TRANSFORM(MESSAGE(1))
|
||||
DO AfLog WITH " SYS(16)=" + TRANSFORM(SYS(16))
|
||||
IF ASTACKINFO(laStack) > 0
|
||||
LOCAL lnJ, lcRand
|
||||
FOR lnI = 1 TO ALEN(laStack, 1)
|
||||
lcRand = " STACK[" + TRANSFORM(lnI) + "]"
|
||||
FOR lnJ = 1 TO ALEN(laStack, 2)
|
||||
lcRand = lcRand + " c" + TRANSFORM(lnJ) + "=" + TRANSFORM(laStack(lnI, lnJ))
|
||||
ENDFOR
|
||||
DO AfLog WITH lcRand
|
||||
ENDFOR
|
||||
ENDIF
|
||||
gnFail = gnFail + 1
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Final
|
||||
LOCAL lnOk
|
||||
gcCaz = "[final] "
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
lnOk = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk)
|
||||
IF TYPE('gnTransOriginal') = 'N'
|
||||
SQLSETPROP(gnHandle, "Transactions", gnTransOriginal)
|
||||
ENDIF
|
||||
ENDIF
|
||||
DO AfLog WITH "TOTAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail)
|
||||
DO AfLog WITH "END " + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
382
utile/Teste/facturare_unificat/probe_12b_s8_calea_2.prg
Normal file
382
utile/Teste/facturare_unificat/probe_12b_s8_calea_2.prg
Normal file
@@ -0,0 +1,382 @@
|
||||
* probe_12b_s8_calea_2.prg
|
||||
* Plan 12b, S8-4a: proba headless a caii 2 (do_adauga_articol_cautat) din frm_facturare_articole2
|
||||
* (COMUN\clase\ofacturare.vc2) pentru verificarea prietenoasa D10 a contului de venit (S8-3/S8-4a).
|
||||
*
|
||||
* PAS 0 (dovada): pe aceasta cale, obiectul toArticol vine dintr-un Scatter Name pe crsCodmat/
|
||||
* crsDenumire. Analiza statica din raportul S8-3 a citat proprietatile design-time csourcesql/
|
||||
* csourcewhere de pe combosql_cautare (:17528/:17564, doar 7 coloane, fara id_pol) - dar acelea NU
|
||||
* sunt folosite la rulare: refreshdata/selectdata (ofacturare.vc2:463-529) ignora total csourcesql
|
||||
* si cheama This.cursor_preturi_call() (:446-461), adica {call pack_facturare.cursor_preturi(...)}
|
||||
* (sau cursor_gestiune pentru tip=41) - acelasi mecanism ca la crsarticole (calea 1). Structura reala
|
||||
* a cursorului (creeaza_cursor_gol :426-444, reordoneaza :498-512) INCLUDE id_pol. Asadar in cazul
|
||||
* normal Type('toArticol.Id_Pol')='N' e adevarat, iar linia scrisa in crsfactura (Gather la
|
||||
* ofacturare.vc2:19018) primeste chiar politica reala rezolvata de cursor_preturi pentru articolul
|
||||
* respectiv - nu politica de stoc.
|
||||
*
|
||||
* Fix S8-4a (ofacturare.vc2:18968-18972): confirmat empiric (probe separat, Gather Name cu
|
||||
* proprietate lipsa NU arunca eroare si LASA campul destinatie neschimbat, adica linia ar fi ramas
|
||||
* cu Id_Pol vechi/implicit daca toArticol nu are proprietatea) ca fallback-ul gnId_pol_pret_stoc
|
||||
* calculat pentru verificare (lnIdPolLinie) nu ajungea niciodata in linia scrisa cand proprietatea
|
||||
* lipsea din toArticol - AddProperty(toArticol,'Id_Pol',lnIdPolLinie) inchide acest gol; e no-op
|
||||
* cand Type('toArticol.Id_Pol')='N' (cazul normal, politica reala).
|
||||
*
|
||||
* Cazuri (fara mock goExecutor, politica de stoc cu ID_NOTA NULL in tranzactie, ROLLBACK la final):
|
||||
* (a) toArticol FARA proprietatea Id_Pol, articol fara cont dedus -> do_adauga_articol_cautat = .F.,
|
||||
* Reccount(crsfactura) neschimbat, spion amessagebox: mesaj continand denumirea articolului.
|
||||
* (b) toArticol FARA proprietatea Id_Pol, articol CU cont dedus -> linia se adauga (Reccount+1),
|
||||
* spion 0 apeluri, iar crsfactura.Id_Pol al liniei noi == gnId_pol_pret_stoc (fallback aplicat).
|
||||
* (c) toArticol CU Id_Pol = o politica reala (<> politica de stoc, cu nota proprie valida) -> linia
|
||||
* se adauga, crsfactura.Id_Pol al liniei noi == acea politica reala (Type='N', fix no-op,
|
||||
* politica ramane cea reala, nu cea de stoc).
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\probe_12b_s8_calea_2.prg"
|
||||
* Log: D:\ROA\ROAFACTURARE\docs\loguri_12b\s8_calea_2.log
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gcCaz, gnPass, gnFail, gnTransOriginal
|
||||
PUBLIC gcSpionMesaje, gnSpionCount
|
||||
gcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\s8_calea_2.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
|
||||
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
|
||||
ENDIF
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
gcCaz = ""
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
gcSpionMesaje = ""
|
||||
gnSpionCount = 0
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
*-- spion amessagebox: se incarca PRIMUL (inaintea aplicatiei), ca sa castige la nume duplicat
|
||||
LOCAL lcProcExistent, lcCmdProc
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
lcCmdProc = [SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\probe_12b_s8_calea_2.prg"]
|
||||
IF !EMPTY(lcProcExistent)
|
||||
lcCmdProc = lcCmdProc + ", " + lcProcExistent
|
||||
ENDIF
|
||||
&lcCmdProc
|
||||
|
||||
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 AfLog WITH "FAIL: conexiune Oracle esuata"
|
||||
DO Final
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle)
|
||||
|
||||
gnTransOriginal = SQLGETPROP(gnHandle, "Transactions")
|
||||
SQLSETPROP(gnHandle, "Transactions", 2)
|
||||
DO AfLog WITH "Transactions manual, original=" + TRANSFORM(gnTransOriginal)
|
||||
|
||||
IF !actualizeaza_optiuni_program()
|
||||
DO AfLog WITH "FAIL: actualizeaza_optiuni_program()"
|
||||
DO Final
|
||||
ENDIF
|
||||
DO AfLog WITH "actualizeaza_optiuni_program OK, gnScadereStoc=" + TRANSFORM(NVL(gnScadereStoc, -1))
|
||||
|
||||
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE
|
||||
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras\gridextras.vcx" ADDITIVE
|
||||
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\clase\_cb_base.vcx" ADDITIVE
|
||||
DO AfLog WITH "SET CLASSLIB suplimentar OK"
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
|
||||
*==========================================================================================
|
||||
* alegere date: politica de stoc curenta + articol OK (cont dedus) + articol problema (fara cont)
|
||||
* + o politica reala cu nota proprie valida (caz c) - acelasi tipar ca probe_12b_s8_cai_1_3.prg /
|
||||
* probe_12b_s8_verifica_linie.prg
|
||||
*==========================================================================================
|
||||
LOCAL lnOk, lnIdPolStoc, lnIdArtOk, lnIdArtProblema, lcDenOk, lcDenProblema, lnIdPolReal, lnIdArtReal
|
||||
LOCAL llGasitOk, llGasitProblema, llGasitPolReal, llGasitArtReal
|
||||
|
||||
gcCaz = "[setup] "
|
||||
lnOk = SQLEXEC(gnHandle, "select varvalue from optiuni where program='ROAFACTURARE' and varname='ID_POL_PRET_STOC'", "crsopt")
|
||||
lnIdPolStoc = IIF(lnOk > 0 AND USED('crsopt') AND !ISNULL(crsopt.varvalue), VAL(ALLTRIM(crsopt.varvalue)), 0)
|
||||
IF USED('crsopt')
|
||||
USE IN crsopt
|
||||
ENDIF
|
||||
DO Verdict WITH lnIdPolStoc > 0, "politica de stoc citita din OPTIUNI, id_pol=" + TRANSFORM(lnIdPolStoc)
|
||||
IF lnIdPolStoc <= 0
|
||||
DO Final
|
||||
ENDIF
|
||||
PUBLIC gnId_pol_pret_stoc
|
||||
gnId_pol_pret_stoc = lnIdPolStoc
|
||||
|
||||
* articol OK: rand al politicii de stoc, ID_NOTA propriu NULL, cont_venit_articol_stoc rezolvat
|
||||
lnOk = SQLEXEC(gnHandle, ;
|
||||
"select a.id_articol from crm_politici_pret_art a " + ;
|
||||
"where a.id_pol = " + TRANSFORM(lnIdPolStoc) + " and a.id_nota is null " + ;
|
||||
"and pack_facturare.cont_venit_articol_stoc(a.id_articol) is not null and rownum = 1", "crsok")
|
||||
llGasitOk = lnOk > 0 AND USED('crsok') AND RECCOUNT('crsok') = 1
|
||||
lnIdArtOk = IIF(llGasitOk, crsok.id_articol, 0)
|
||||
IF USED('crsok')
|
||||
USE IN crsok
|
||||
ENDIF
|
||||
DO AfLog WITH "articol OK ales: id_articol=" + TRANSFORM(lnIdArtOk)
|
||||
|
||||
* articol problema: alt rand al politicii de stoc, ID_NOTA propriu NULL, fara cont dedus
|
||||
lnOk = SQLEXEC(gnHandle, ;
|
||||
"select a.id_articol from crm_politici_pret_art a " + ;
|
||||
"where a.id_pol = " + TRANSFORM(lnIdPolStoc) + " and a.id_nota is null " + ;
|
||||
"and a.id_articol <> " + TRANSFORM(lnIdArtOk) + " " + ;
|
||||
"and pack_facturare.cont_venit_articol_stoc(a.id_articol) is null and rownum = 1", "crsprob")
|
||||
llGasitProblema = lnOk > 0 AND USED('crsprob') AND RECCOUNT('crsprob') = 1
|
||||
lnIdArtProblema = IIF(llGasitProblema, crsprob.id_articol, 0)
|
||||
IF USED('crsprob')
|
||||
USE IN crsprob
|
||||
ENDIF
|
||||
DO AfLog WITH "articol PROBLEMA ales: id_articol=" + TRANSFORM(lnIdArtProblema)
|
||||
|
||||
* caz (c): o politica reala (<> politica de stoc) cu nota proprie valida (scc nenul) + un articol activ
|
||||
lnOk = SQLEXEC(gnHandle, ;
|
||||
"select p.id_pol from crm_politici_preturi p " + ;
|
||||
"join crm_note_vanzari v on v.id_nota = p.id_nota " + ;
|
||||
"join note_contabile n on n.id_set = v.id_set and n.scc is not null " + ;
|
||||
"where p.id_pol <> " + TRANSFORM(lnIdPolStoc) + " and rownum = 1", "crspolreal")
|
||||
llGasitPolReal = lnOk > 0 AND USED('crspolreal') AND RECCOUNT('crspolreal') = 1
|
||||
lnIdPolReal = IIF(llGasitPolReal, crspolreal.id_pol, 0)
|
||||
IF USED('crspolreal')
|
||||
USE IN crspolreal
|
||||
ENDIF
|
||||
lnOk = SQLEXEC(gnHandle, "select id_articol from nom_articole where sters = 0 and rownum = 1", "crsartreal")
|
||||
llGasitArtReal = lnOk > 0 AND USED('crsartreal') AND RECCOUNT('crsartreal') = 1
|
||||
lnIdArtReal = IIF(llGasitArtReal, crsartreal.id_articol, 0)
|
||||
IF USED('crsartreal')
|
||||
USE IN crsartreal
|
||||
ENDIF
|
||||
DO AfLog WITH "CAZ(c) ales: id_pol_real=" + TRANSFORM(lnIdPolReal) + " id_articol=" + TRANSFORM(lnIdArtReal)
|
||||
|
||||
IF !llGasitOk OR !llGasitProblema OR !llGasitPolReal OR !llGasitArtReal
|
||||
DO AfLog WITH "FAIL: date insuficiente in baza vie, opresc proba"
|
||||
gnFail = gnFail + 1
|
||||
DO Final
|
||||
ENDIF
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select denumire from nom_articole where id_articol = " + TRANSFORM(lnIdArtOk), "crsden1")
|
||||
lcDenOk = IIF(lnOk > 0 AND USED('crsden1') AND RECCOUNT('crsden1') = 1, ALLTRIM(NVL(crsden1.denumire, [])), [<necunoscut>])
|
||||
IF USED('crsden1')
|
||||
USE IN crsden1
|
||||
ENDIF
|
||||
lnOk = SQLEXEC(gnHandle, "select denumire from nom_articole where id_articol = " + TRANSFORM(lnIdArtProblema), "crsden2")
|
||||
lcDenProblema = IIF(lnOk > 0 AND USED('crsden2') AND RECCOUNT('crsden2') = 1, ALLTRIM(NVL(crsden2.denumire, [])), [<necunoscut>])
|
||||
IF USED('crsden2')
|
||||
USE IN crsden2
|
||||
ENDIF
|
||||
DO AfLog WITH "denumiri: OK=[" + lcDenOk + "] PROBLEMA=[" + lcDenProblema + "]"
|
||||
|
||||
* politica de stoc cu ID_NOTA NULL (tranzactie, ROLLBACK la final) - fortez ramura "fara cont dedus"
|
||||
gcCaz = "[setup] "
|
||||
lnOk = SQLEXEC(gnHandle, "UPDATE crm_politici_preturi SET id_nota = NULL WHERE id_pol = " + TRANSFORM(lnIdPolStoc))
|
||||
DO Verdict WITH lnOk > 0, "UPDATE politica de stoc ID_NOTA=NULL (tranzactie, ROLLBACK la final) - lnOk=" + TRANSFORM(lnOk)
|
||||
|
||||
*==========================================================================================
|
||||
* mediu formular: poDate, jtva_coloane, crsfactura gol, Createobject
|
||||
*==========================================================================================
|
||||
PRIVATE poDate, poGeneratorNumere
|
||||
LOCAL lnIdSet
|
||||
lnIdSet = 25000 + 30 - 1 + NVL(gnScadereStoc, 0) * 10
|
||||
poDate = CREATEOBJECT("oDateFactura", lnIdSet, 30)
|
||||
poDate.dataireg = DATE(gnAn, gnLuna, 10)
|
||||
poDate.dataact = poDate.dataireg
|
||||
poDate.zi_curs = poDate.dataireg
|
||||
poDate.id_client = 1
|
||||
poDate.nIdTipDoc = 6
|
||||
poGeneratorNumere = NULL
|
||||
DO AfLog WITH "poDate OK, tip=" + TRANSFORM(poDate.tip) + " id_pol=" + TRANSFORM(NVL(poDate.id_pol,-1)) + " in_valuta=" + TRANSFORM(poDate.in_valuta)
|
||||
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF NVL(poDate.tva_incasare, 0) = 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 AfLog WITH "jtva_coloane Reccount=" + TRANSFORM(RECCOUNT('jtva_coloane'))
|
||||
|
||||
DO PregatesteFacturaGoala
|
||||
|
||||
LOCAL loForm
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
DO Verdict WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2"
|
||||
IF VARTYPE(loForm) <> 'O'
|
||||
DO Final
|
||||
ENDIF
|
||||
DO AfLog WITH "formular creat, nu afisat (fara Show())"
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (a): toArticol fara Id_Pol, articol fara cont dedus -> refuz
|
||||
*==========================================================================================
|
||||
gcCaz = "[a-calea2-refuz] "
|
||||
LOCAL loArticol, lnReccountInainte
|
||||
|
||||
loArticol = PregatesteToArticol(lnIdArtProblema, lcDenProblema, .F., 0)
|
||||
lnReccountInainte = RECCOUNT('crsfactura')
|
||||
gnSpionCount = 0
|
||||
gcSpionMesaje = ""
|
||||
|
||||
LOCAL llRezA
|
||||
llRezA = loForm.do_adauga_articol_cautat(loArticol, loArticol.cantitate)
|
||||
|
||||
DO Verdict WITH llRezA = .F., "do_adauga_articol_cautat = .F. (obtinut " + TRANSFORM(llRezA) + ")"
|
||||
DO Verdict WITH RECCOUNT('crsfactura') == lnReccountInainte, ;
|
||||
"Reccount(crsfactura) neschimbat (" + TRANSFORM(RECCOUNT('crsfactura')) + ", era " + TRANSFORM(lnReccountInainte) + ")"
|
||||
DO Verdict WITH gnSpionCount >= 1, "spion: cel putin 1 mesaj (obtinut " + TRANSFORM(gnSpionCount) + ")"
|
||||
DO Verdict WITH lcDenProblema $ gcSpionMesaje, "mesajul contine denumirea articolului [" + lcDenProblema + "] - mesaj: [" + gcSpionMesaje + "]"
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (b): toArticol fara Id_Pol, articol CU cont dedus -> linia se adauga cu Id_Pol = politica de stoc
|
||||
*==========================================================================================
|
||||
gcCaz = "[b-calea2-cont-dedus] "
|
||||
loArticol = PregatesteToArticol(lnIdArtOk, lcDenOk, .F., 0)
|
||||
DO Verdict WITH TYPE('loArticol.Id_Pol') = 'U', "toArticol FARA proprietatea Id_Pol (Type=" + TYPE('loArticol.Id_Pol') + ")"
|
||||
|
||||
SELECT crsfactura
|
||||
APPEND BLANK
|
||||
lnReccountInainte = RECCOUNT('crsfactura')
|
||||
gnSpionCount = 0
|
||||
gcSpionMesaje = ""
|
||||
|
||||
LOCAL llRezB
|
||||
llRezB = loForm.do_adauga_articol_cautat(loArticol, loArticol.cantitate)
|
||||
|
||||
DO Verdict WITH llRezB = .T., "do_adauga_articol_cautat = .T. (obtinut " + TRANSFORM(llRezB) + ")"
|
||||
DO Verdict WITH gnSpionCount == 0, "spion: 0 mesaje (obtinut " + TRANSFORM(gnSpionCount) + ") - " + gcSpionMesaje
|
||||
DO Verdict WITH VARTYPE(crsfactura.Id_Pol) = 'N' AND crsfactura.Id_Pol == gnId_pol_pret_stoc, ;
|
||||
"linia noua primeste Id_Pol = politica de stoc (" + TRANSFORM(gnId_pol_pret_stoc) + ", obtinut " + TRANSFORM(NVL(crsfactura.Id_Pol,-999)) + ")"
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (c): toArticol CU Id_Pol = politica reala (<> politica de stoc) -> linia pastreaza politica reala
|
||||
*==========================================================================================
|
||||
gcCaz = "[c-calea2-politica-reala] "
|
||||
loArticol = PregatesteToArticol(lnIdArtReal, "articol-real", .T., lnIdPolReal)
|
||||
DO Verdict WITH TYPE('loArticol.Id_Pol') = 'N' AND loArticol.Id_Pol == lnIdPolReal, ;
|
||||
"toArticol.Id_Pol = politica reala aleasa (" + TRANSFORM(lnIdPolReal) + ", obtinut " + TRANSFORM(NVL(loArticol.Id_Pol,-999)) + ")"
|
||||
|
||||
SELECT crsfactura
|
||||
APPEND BLANK
|
||||
gnSpionCount = 0
|
||||
gcSpionMesaje = ""
|
||||
|
||||
LOCAL llRezC
|
||||
llRezC = loForm.do_adauga_articol_cautat(loArticol, loArticol.cantitate)
|
||||
|
||||
DO Verdict WITH llRezC = .T., "do_adauga_articol_cautat = .T. (obtinut " + TRANSFORM(llRezC) + ")"
|
||||
DO Verdict WITH gnSpionCount == 0, "spion: 0 mesaje (obtinut " + TRANSFORM(gnSpionCount) + ") - " + gcSpionMesaje
|
||||
DO Verdict WITH VARTYPE(crsfactura.Id_Pol) = 'N' AND crsfactura.Id_Pol == lnIdPolReal, ;
|
||||
"linia noua pastreaza Id_Pol = politica reala (" + TRANSFORM(lnIdPolReal) + ", obtinut " + TRANSFORM(NVL(crsfactura.Id_Pol,-999)) + "), nu politica de stoc"
|
||||
|
||||
IF VARTYPE(loForm) = 'O' AND !ISNULL(loForm)
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
loForm = NULL
|
||||
|
||||
DO Final
|
||||
|
||||
*==================================================================================================
|
||||
*-- spion amessagebox - contor + texte, incarcat PRIMUL (vezi SET PROCEDURE la inceput)
|
||||
FUNCTION amessagebox
|
||||
LPARAMETERS tcMessage, tnDialogBoxType, tcTitle, tcFont, tnTimeOut, tnTimeoutValue
|
||||
gnSpionCount = gnSpionCount + 1
|
||||
gcSpionMesaje = gcSpionMesaje + "[" + TRANSFORM(tcMessage) + "]" + CHR(13) + CHR(10)
|
||||
DO AfLog WITH " [spion amessagebox] " + TRANSFORM(tcMessage)
|
||||
RETURN 6
|
||||
ENDFUNC
|
||||
|
||||
*-- crsfactura gol, cu campul 'gestiune' suplimentar cerut de grd_factura.cGestiune (ca in
|
||||
*-- probe_12b_s8_cai_1_3.prg) - obligatoriu inainte de Createobject (legare ControlSource)
|
||||
PROCEDURE PregatesteFacturaGoala
|
||||
IF USED('crsfactura')
|
||||
USE IN crsfactura
|
||||
ENDIF
|
||||
creeaza_facturacrs([crsfactura])
|
||||
SELECT *, CAST(NULL AS C(100)) AS gestiune FROM crsfactura INTO CURSOR crsfact_tmp READWRITE
|
||||
USE IN crsfactura
|
||||
SELECT * FROM crsfact_tmp INTO CURSOR crsfactura READWRITE
|
||||
USE IN crsfact_tmp
|
||||
ENDPROC
|
||||
|
||||
*-- toArticol: obiect echivalent unui Scatter Name pe crsCodmat/crsDenumire (structura reala,
|
||||
*-- creeaza_cursor_gol/reordoneaza din ofacturare.vc2, 20 coloane), fara/cu id_pol dupa caz
|
||||
FUNCTION PregatesteToArticol
|
||||
LPARAMETERS tnIdArticol, tcDenumire, tlCuIdPol, tnIdPol
|
||||
LOCAL lcCursor, loObj
|
||||
IF USED('crstoart')
|
||||
USE IN crstoart
|
||||
ENDIF
|
||||
IF m.tlCuIdPol
|
||||
CREATE CURSOR crstoart (codmat C(100), denumire C(100), um C(10), pret N(20,4), ;
|
||||
nume_val C(20), nume_lista_preturi C(100), proc_tvav N(20,4), codbare C(50), id_articol N(20), ;
|
||||
id_pol N(20), gestionabil N(1), preturi_cu_tva N(1), tip_valuta N(1), curs N(20,4), ;
|
||||
multiplicator N(10), id_valuta N(10), discount_unitar N(20,4), discount_unitar_val N(20,4), ;
|
||||
cantitate N(20,4), pret_val N(20,4))
|
||||
INSERT INTO crstoart (codmat, denumire, um, pret, nume_val, nume_lista_preturi, proc_tvav, codbare, ;
|
||||
id_articol, id_pol, gestionabil, preturi_cu_tva, tip_valuta, curs, multiplicator, id_valuta, ;
|
||||
discount_unitar, discount_unitar_val, cantitate, pret_val) ;
|
||||
VALUES ([S8-4A], tcDenumire, [BUC], 100, [RON], [S8-4a], 1.19, [], tnIdArticol, ;
|
||||
tnIdPol, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0)
|
||||
ELSE
|
||||
CREATE CURSOR crstoart (codmat C(100), denumire C(100), um C(10), pret N(20,4), ;
|
||||
nume_val C(20), nume_lista_preturi C(100), proc_tvav N(20,4), codbare C(50), id_articol N(20), ;
|
||||
gestionabil N(1), preturi_cu_tva N(1), tip_valuta N(1), curs N(20,4), ;
|
||||
multiplicator N(10), id_valuta N(10), discount_unitar N(20,4), discount_unitar_val N(20,4), ;
|
||||
cantitate N(20,4), pret_val N(20,4))
|
||||
INSERT INTO crstoart (codmat, denumire, um, pret, nume_val, nume_lista_preturi, proc_tvav, codbare, ;
|
||||
id_articol, gestionabil, preturi_cu_tva, tip_valuta, curs, multiplicator, id_valuta, ;
|
||||
discount_unitar, discount_unitar_val, cantitate, pret_val) ;
|
||||
VALUES ([S8-4A], tcDenumire, [BUC], 100, [RON], [S8-4a], 1.19, [], tnIdArticol, ;
|
||||
0, 0, 0, 1, 1, 1, 0, 0, 1, 0)
|
||||
ENDIF
|
||||
SELECT crstoart
|
||||
GO TOP
|
||||
SCATTER NAME loObj MEMO
|
||||
RETURN loObj
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE Verdict
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO AfLog WITH "PASS: " + gcCaz + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
||||
gnFail = gnFail + 1
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Final
|
||||
LOCAL lnOk
|
||||
gcCaz = "[final] "
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
lnOk = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk)
|
||||
IF TYPE('gnTransOriginal') = 'N'
|
||||
SQLSETPROP(gnHandle, "Transactions", gnTransOriginal)
|
||||
ENDIF
|
||||
ENDIF
|
||||
DO AfLog WITH "TOTAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail)
|
||||
DO AfLog WITH "END " + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
213
utile/Teste/facturare_unificat/probe_12b_s8_verifica_linie.prg
Normal file
213
utile/Teste/facturare_unificat/probe_12b_s8_verifica_linie.prg
Normal file
@@ -0,0 +1,213 @@
|
||||
* probe_12b_s8_verifica_linie.prg
|
||||
* Proba headless pentru ofacturare_comun.prg / verifica_cont_venit_linie (langa deriva_cont_venit_fara_pol).
|
||||
* Fara mock pe goExecutor - toate verificarile trec prin Oracle real (MARIUSM_AUTO), in tranzactie
|
||||
* manuala, ROLLBACK la final.
|
||||
*
|
||||
* Datele (articole, politici, note) se aleg din baza vie la rulare, nu sunt fixe - scrise in log.
|
||||
* Cazuri:
|
||||
* (1) politica reala (id_pol <> politica de stoc), cu nota proprie valida -> []
|
||||
* (2) politica de stoc, rand cu ID_NOTA propriu pe articol, valid -> []
|
||||
* (3) politica de stoc, rand fara ID_NOTA propriu, dar cont_venit_articol_stoc(articol) rezolvat -> []
|
||||
* (4) politica de stoc cu ID_NOTA NULL (fortat in tranzactie), rand fara ID_NOTA propriu, fara cont
|
||||
* dedus -> mesaj nevid, continand denumirea articolului
|
||||
*
|
||||
* Rulare: powershell -File ruleaza_suita.ps1 -Nume probe_12b_s8_verifica_linie (sau vfp9.exe -A -T direct)
|
||||
* Log: D:\ROA\ROAFACTURARE\docs\loguri_12b\s8_verifica_linie.log
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gcCaz, gnPass, gnFail, gnTransOriginal
|
||||
gcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\s8_verifica_linie.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
|
||||
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
|
||||
ENDIF
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
gcCaz = ""
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
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 AfLog WITH "FAIL: conexiune Oracle esuata"
|
||||
DO Final
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle)
|
||||
|
||||
gnTransOriginal = SQLGETPROP(gnHandle, "Transactions")
|
||||
SQLSETPROP(gnHandle, "Transactions", 2)
|
||||
DO AfLog WITH "Transactions manual, original=" + TRANSFORM(gnTransOriginal)
|
||||
|
||||
LOCAL lnOk, lnIdPolStoc, lnIdArtCaz1, lnIdPolCaz1, lnIdArtCaz2, lnIdPolArtCaz2, lnIdNotaCaz2, ;
|
||||
lnIdArtCaz3, lnIdArtCaz4, lcMesaj, lcDenumireCaz4, ;
|
||||
llGasitCaz1, llGasitArtCaz1, llGasitCaz2, llGasitNotaCaz2, llGasitCaz3, llGasitCaz4
|
||||
|
||||
*==========================================================================================
|
||||
* alegere date: politica de stoc curenta
|
||||
*==========================================================================================
|
||||
gcCaz = "[setup] "
|
||||
lnOk = SQLEXEC(gnHandle, "select varvalue from optiuni where program='ROAFACTURARE' and varname='ID_POL_PRET_STOC'", "crsopt")
|
||||
lnIdPolStoc = IIF(lnOk > 0 AND USED('crsopt') AND !ISNULL(crsopt.varvalue), VAL(ALLTRIM(crsopt.varvalue)), 0)
|
||||
IF USED('crsopt')
|
||||
USE IN crsopt
|
||||
ENDIF
|
||||
DO Verdict WITH lnIdPolStoc > 0, "politica de stoc citita din OPTIUNI, id_pol=" + TRANSFORM(lnIdPolStoc)
|
||||
IF lnIdPolStoc <= 0
|
||||
DO Final
|
||||
ENDIF
|
||||
PUBLIC gnId_pol_pret_stoc
|
||||
gnId_pol_pret_stoc = lnIdPolStoc
|
||||
|
||||
* caz (1): o politica reala cu nota proprie valida (scc nenul) - orice articol activ merge, ramura
|
||||
* reala nu foloseste randul din crm_politici_pret_art
|
||||
lnOk = SQLEXEC(gnHandle, ;
|
||||
"select p.id_pol from crm_politici_preturi p " + ;
|
||||
"join crm_note_vanzari v on v.id_nota = p.id_nota " + ;
|
||||
"join note_contabile n on n.id_set = v.id_set and n.scc is not null " + ;
|
||||
"where p.id_pol <> " + TRANSFORM(lnIdPolStoc) + " and rownum = 1", "crs1")
|
||||
llGasitCaz1 = lnOk > 0 AND USED('crs1') AND RECCOUNT('crs1') = 1
|
||||
lnIdPolCaz1 = IIF(llGasitCaz1, crs1.id_pol, 0)
|
||||
IF USED('crs1')
|
||||
USE IN crs1
|
||||
ENDIF
|
||||
lnOk = SQLEXEC(gnHandle, "select id_articol from nom_articole where sters = 0 and rownum = 1", "crsart1")
|
||||
llGasitArtCaz1 = lnOk > 0 AND USED('crsart1') AND RECCOUNT('crsart1') = 1
|
||||
lnIdArtCaz1 = IIF(llGasitArtCaz1, crsart1.id_articol, 0)
|
||||
IF USED('crsart1')
|
||||
USE IN crsart1
|
||||
ENDIF
|
||||
DO AfLog WITH "CAZ1 ales: id_pol=" + TRANSFORM(lnIdPolCaz1) + " id_articol=" + TRANSFORM(lnIdArtCaz1)
|
||||
|
||||
* caz (2): rand existent al politicii de stoc, cu ID_NOTA propriu setat (in tranzactie) la o nota valida
|
||||
lnOk = SQLEXEC(gnHandle, ;
|
||||
"select id_pol_art, id_articol from crm_politici_pret_art where id_pol = " + TRANSFORM(lnIdPolStoc) + " and rownum = 1", "crs2")
|
||||
llGasitCaz2 = lnOk > 0 AND USED('crs2') AND RECCOUNT('crs2') = 1
|
||||
lnIdPolArtCaz2 = IIF(llGasitCaz2, crs2.id_pol_art, 0)
|
||||
lnIdArtCaz2 = IIF(llGasitCaz2, crs2.id_articol, 0)
|
||||
IF USED('crs2')
|
||||
USE IN crs2
|
||||
ENDIF
|
||||
lnOk = SQLEXEC(gnHandle, ;
|
||||
"select v.id_nota from crm_note_vanzari v, note_contabile n " + ;
|
||||
"where n.id_set = v.id_set and n.scc is not null and rownum = 1", "crs2b")
|
||||
llGasitNotaCaz2 = lnOk > 0 AND USED('crs2b') AND RECCOUNT('crs2b') = 1
|
||||
lnIdNotaCaz2 = IIF(llGasitNotaCaz2, crs2b.id_nota, 0)
|
||||
IF USED('crs2b')
|
||||
USE IN crs2b
|
||||
ENDIF
|
||||
DO AfLog WITH "CAZ2 ales: id_pol_art=" + TRANSFORM(lnIdPolArtCaz2) + " id_articol=" + TRANSFORM(lnIdArtCaz2) + " id_nota_fortata=" + TRANSFORM(lnIdNotaCaz2)
|
||||
|
||||
* caz (3): alt rand al politicii de stoc, ID_NOTA propriu NULL, cu cont_venit_articol_stoc rezolvat
|
||||
lnOk = SQLEXEC(gnHandle, ;
|
||||
"select a.id_articol from crm_politici_pret_art a " + ;
|
||||
"where a.id_pol = " + TRANSFORM(lnIdPolStoc) + " and a.id_nota is null " + ;
|
||||
"and a.id_articol <> " + TRANSFORM(lnIdArtCaz2) + " " + ;
|
||||
"and pack_facturare.cont_venit_articol_stoc(a.id_articol) is not null and rownum = 1", "crs3")
|
||||
llGasitCaz3 = lnOk > 0 AND USED('crs3') AND RECCOUNT('crs3') = 1
|
||||
lnIdArtCaz3 = IIF(llGasitCaz3, crs3.id_articol, 0)
|
||||
IF USED('crs3')
|
||||
USE IN crs3
|
||||
ENDIF
|
||||
DO AfLog WITH "CAZ3 ales: id_articol=" + TRANSFORM(lnIdArtCaz3)
|
||||
|
||||
* caz (4): alt rand al politicii de stoc, ID_NOTA propriu NULL, fara cont dedus
|
||||
lnOk = SQLEXEC(gnHandle, ;
|
||||
"select a.id_articol from crm_politici_pret_art a " + ;
|
||||
"where a.id_pol = " + TRANSFORM(lnIdPolStoc) + " and a.id_nota is null " + ;
|
||||
"and a.id_articol not in (" + TRANSFORM(lnIdArtCaz2) + "," + TRANSFORM(lnIdArtCaz3) + ") " + ;
|
||||
"and pack_facturare.cont_venit_articol_stoc(a.id_articol) is null and rownum = 1", "crs4")
|
||||
llGasitCaz4 = lnOk > 0 AND USED('crs4') AND RECCOUNT('crs4') = 1
|
||||
lnIdArtCaz4 = IIF(llGasitCaz4, crs4.id_articol, 0)
|
||||
IF USED('crs4')
|
||||
USE IN crs4
|
||||
ENDIF
|
||||
DO AfLog WITH "CAZ4 ales: id_articol=" + TRANSFORM(lnIdArtCaz4)
|
||||
|
||||
IF !llGasitCaz1 OR !llGasitArtCaz1 OR !llGasitCaz2 OR !llGasitNotaCaz2 OR !llGasitCaz3 OR !llGasitCaz4
|
||||
DO AfLog WITH "FAIL: date insuficiente in baza vie pentru cele 4 cazuri, opresc proba"
|
||||
gnFail = gnFail + 1
|
||||
DO Final
|
||||
ENDIF
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (1): politica reala -> []
|
||||
*==========================================================================================
|
||||
gcCaz = "[1-politica-reala] "
|
||||
lcMesaj = verifica_cont_venit_linie(lnIdArtCaz1, lnIdPolCaz1)
|
||||
DO Verdict WITH EMPTY(lcMesaj), "verifica_cont_venit_linie(" + TRANSFORM(lnIdArtCaz1) + "," + TRANSFORM(lnIdPolCaz1) + ") = [] (obtinut [" + lcMesaj + "])"
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (2): politica de stoc, ID_NOTA pe rand -> []
|
||||
*==========================================================================================
|
||||
gcCaz = "[2-nota-pe-rand] "
|
||||
lnOk = SQLEXEC(gnHandle, "UPDATE crm_politici_pret_art SET id_nota = " + TRANSFORM(lnIdNotaCaz2) + " WHERE id_pol_art = " + TRANSFORM(lnIdPolArtCaz2))
|
||||
DO Verdict WITH lnOk > 0, "UPDATE id_nota pe rand (tranzactie, ROLLBACK la final) - lnOk=" + TRANSFORM(lnOk)
|
||||
lcMesaj = verifica_cont_venit_linie(lnIdArtCaz2, lnIdPolStoc)
|
||||
DO Verdict WITH EMPTY(lcMesaj), "verifica_cont_venit_linie(" + TRANSFORM(lnIdArtCaz2) + "," + TRANSFORM(lnIdPolStoc) + ") = [] (obtinut [" + lcMesaj + "])"
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (3): politica de stoc, fara nota pe rand, cont dedus -> []
|
||||
*==========================================================================================
|
||||
gcCaz = "[3-cont-dedus] "
|
||||
lcMesaj = verifica_cont_venit_linie(lnIdArtCaz3, lnIdPolStoc)
|
||||
DO Verdict WITH EMPTY(lcMesaj), "verifica_cont_venit_linie(" + TRANSFORM(lnIdArtCaz3) + "," + TRANSFORM(lnIdPolStoc) + ") = [] (obtinut [" + lcMesaj + "])"
|
||||
|
||||
*==========================================================================================
|
||||
* CAZ (4): politica de stoc cu ID_NOTA NULL, fara nota rand, fara cont dedus -> mesaj nevid
|
||||
*==========================================================================================
|
||||
gcCaz = "[4-fara-cont] "
|
||||
lnOk = SQLEXEC(gnHandle, "UPDATE crm_politici_preturi SET id_nota = NULL WHERE id_pol = " + TRANSFORM(lnIdPolStoc))
|
||||
DO Verdict WITH lnOk > 0, "UPDATE politica de stoc ID_NOTA=NULL (tranzactie, ROLLBACK la final) - lnOk=" + TRANSFORM(lnOk)
|
||||
lcMesaj = verifica_cont_venit_linie(lnIdArtCaz4, lnIdPolStoc)
|
||||
DO Verdict WITH !EMPTY(lcMesaj), "verifica_cont_venit_linie(" + TRANSFORM(lnIdArtCaz4) + "," + TRANSFORM(lnIdPolStoc) + ") <> [] (obtinut [" + lcMesaj + "])"
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select denumire from nom_articole where id_articol = " + TRANSFORM(lnIdArtCaz4), "crsden4")
|
||||
lcDenumireCaz4 = IIF(lnOk > 0 AND USED('crsden4') AND RECCOUNT('crsden4') = 1, ALLTRIM(NVL(crsden4.denumire,[])), [<necunoscut>])
|
||||
IF USED('crsden4')
|
||||
USE IN crsden4
|
||||
ENDIF
|
||||
DO Verdict WITH !EMPTY(lcDenumireCaz4) AND lcDenumireCaz4 $ lcMesaj, ;
|
||||
"mesajul contine denumirea articolului ales [" + lcDenumireCaz4 + "] - mesaj: [" + lcMesaj + "]"
|
||||
|
||||
DO Final
|
||||
|
||||
*==================================================================================================
|
||||
PROCEDURE Verdict
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO AfLog WITH "PASS: " + gcCaz + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Final
|
||||
LOCAL lnOk
|
||||
gcCaz = "[final] "
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
lnOk = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk)
|
||||
IF TYPE('gnTransOriginal') = 'N'
|
||||
SQLSETPROP(gnHandle, "Transactions", gnTransOriginal)
|
||||
ENDIF
|
||||
ENDIF
|
||||
DO AfLog WITH "TOTAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail)
|
||||
DO AfLog WITH "END " + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
258
utile/Teste/facturare_unificat/probe_vanzare_ui_cota_tva.prg
Normal file
258
utile/Teste/facturare_unificat/probe_vanzare_ui_cota_tva.prg
Normal file
@@ -0,0 +1,258 @@
|
||||
* probe_vanzare_ui_cota_tva.prg
|
||||
* Proba headless pe pagina "Vanzare" din fisa articolului (COMUN\clase\onom_articole.vc2, clasa
|
||||
* frm_catalog_articole_nou) si pe clasa cus_pret_nomenclator (COMUN\programe\ofacturare_comun.prg):
|
||||
* combo-ul de cota TVA din tabela pe luni, pastrarea PROC_TVAV NULL ("ales la facturare"), cota
|
||||
* standard pe articol nou, recalculul pretului derivat si etichetele paginii.
|
||||
*
|
||||
* Fara dialoguri: formularul nu se arata niciodata (CREATEOBJECT fara Show()), iar AMESSAGEBOX e
|
||||
* inlocuit de mock-ul incarcat de test_init_env_auto_roafacturare.prg sub -A -T.
|
||||
* Fara scriere permanenta in Oracle: singura scriere (cazul NOMEN) se face in tranzactie manuala,
|
||||
* inchisa cu ROLLBACK.
|
||||
* Cazurile ruleaza in procese vfp9 separate - a doua instantiere a formularului in acelasi proces
|
||||
* se autoblocheaza (tiparul probe_12b_s6c_fisa_pagina_vanzare.prg).
|
||||
*
|
||||
* Articol de proba: 2528841557, pe politica 41 (PRETURI_CU_TVA = 0, PROC_TVAV = NULL).
|
||||
* Cotele lunii (comun.vcote_tva): 21/1.21, 19/1.19, 11/1.11, 0/1, apoi randul "<ALES LA FACTURARE>".
|
||||
*
|
||||
* Rulare (form): powershell -ExecutionPolicy Bypass -File ruleaza_suita.ps1 -Nume probe_vanzare_ui_cota_tva
|
||||
* Rulare (nomen): "C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" -A -T probe_vanzare_ui_cota_tva.prg NOMEN
|
||||
* Log: D:\ROA\ROAFACTURARE\docs\loguri_12b\vanzare_ui_cota_tva.log (fiecare proces face APPEND)
|
||||
|
||||
PARAMETERS tcModo
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
LOCAL lcMod
|
||||
lcMod = UPPER(ALLTRIM(IIF(VARTYPE(tcModo) = "C", tcModo, "")))
|
||||
IF EMPTY(lcMod)
|
||||
lcMod = "FORM"
|
||||
ENDIF
|
||||
|
||||
PUBLIC gcLog, gcCaz, gnPass, gnFail
|
||||
gcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\vanzare_ui_cota_tva.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
|
||||
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
|
||||
ENDIF
|
||||
STRTOFILE("--- caz (" + lcMod + ") START " + TTOC(DATETIME()) + " ---" + CHR(13) + CHR(10), gcLog, 1)
|
||||
gcCaz = ""
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
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 AfLog WITH "FAIL: conexiune Oracle esuata"
|
||||
DO Final
|
||||
ENDIF
|
||||
PUBLIC gnPc
|
||||
gnPc = 2
|
||||
gnIdUtil = 8
|
||||
gcNumeProgram = [ROAFACTURARE]
|
||||
DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle) + " gnPc=" + TRANSFORM(gnPc) + " gnAn=" + TRANSFORM(gnAn) + " gnLuna=" + TRANSFORM(gnLuna) + " gnPc=" + TRANSFORM(gnPc)
|
||||
|
||||
LOCAL lnIdArtProba, lnProcStd, lnCoefStd
|
||||
lnIdArtProba = 2528841557
|
||||
lnProcStd = GetProcTvaStandard()
|
||||
lnCoefStd = ROUND((lnProcStd + 100)/100, 4)
|
||||
DO AfLog WITH "cota standard " + TRANSFORM(gnLuna) + "/" + TRANSFORM(gnAn) + ": procent=" + TRANSFORM(lnProcStd) + " coeficient=" + TRANSFORM(lnCoefStd)
|
||||
|
||||
DO CASE
|
||||
*=================================================================================================
|
||||
* Cazul FORM: pagina "Vanzare" - combo cota TVA din vcote_tva, etichete, recalcul
|
||||
*=================================================================================================
|
||||
CASE lcMod == "FORM"
|
||||
* incarcare explicita din calea COMPLETA (tiparul S7a): ofacturare.vcx inainte de
|
||||
* onom_articole.vcx, ca la instalarea reala
|
||||
SET PATH TO (gcAppPath + "COMUN\CLASE") ADDITIVE
|
||||
SET CLASSLIB TO (gcAppPath + "COMUN\CLASE\ofacturare.vcx") ADDITIVE
|
||||
SET CLASSLIB TO (gcAppPath + "COMUN\CLASE\onom_articole.vcx") ADDITIVE
|
||||
|
||||
* precondition-urile pe care le face onomenclatoare.prg inainte sa deschida fisa
|
||||
update_um()
|
||||
update_um_iso()
|
||||
update_grupe_art()
|
||||
update_subgrupe_art()
|
||||
|
||||
gcCaz = "[form-precondition] "
|
||||
LOCAL lnOk, loRec
|
||||
lnOk = goExecutor.oExecuta('select * from vnom_articole where id_articol = ' + TRANSFORM(lnIdArtProba), 'vnom_articole_nou')
|
||||
DO Verdict WITH lnOk # .F. AND USED('vnom_articole_nou') AND RECCOUNT('vnom_articole_nou') = 1, "SELECT vnom_articole pentru articolul de proba"
|
||||
SELECT vnom_articole_nou
|
||||
SCATTER NAME loRec MEMO
|
||||
loRec.conditii_pastrare = NVL(loRec.conditii_pastrare,'')
|
||||
USE IN vnom_articole_nou
|
||||
|
||||
lnOk = SQLEXEC(gnHandle, "select a.proc_tvav, nvl(p.preturi_cu_tva,0) ptva from crm_politici_pret_art a, crm_politici_preturi p where a.id_pol = p.id_pol and a.id_pol = 41 and a.id_articol = " + TRANSFORM(lnIdArtProba), "crsref")
|
||||
DO Verdict WITH lnOk > 0 AND USED('crsref') AND RECCOUNT('crsref') = 1, "referinta directa proc_tvav / preturi_cu_tva pentru politica 41"
|
||||
LOCAL llRefProcNull, lnRefPreturiCuTva
|
||||
llRefProcNull = .F.
|
||||
lnRefPreturiCuTva = -1
|
||||
IF USED('crsref') AND RECCOUNT('crsref') = 1
|
||||
llRefProcNull = ISNULL(crsref.proc_tvav)
|
||||
lnRefPreturiCuTva = crsref.ptva
|
||||
ENDIF
|
||||
IF USED('crsref')
|
||||
USE IN crsref
|
||||
ENDIF
|
||||
DO AfLog WITH " referinta: proc_tvav=" + IIF(llRefProcNull,"NULL",TRANSFORM(lnCoefStd)) + " preturi_cu_tva=" + TRANSFORM(lnRefPreturiCuTva)
|
||||
DO Verdict WITH llRefProcNull, "preconditie: articolul de proba are PROC_TVAV NULL (cazul 'ales la facturare')"
|
||||
DO Verdict WITH lnRefPreturiCuTva = 0, "preconditie: politica 41 are PRETURI_CU_TVA = 0 (referinta e pretul fara TVA)"
|
||||
|
||||
gcCaz = "[form-createobject] "
|
||||
PRIVATE poRec, pnIdAMS
|
||||
poRec = loRec
|
||||
pnIdAMS = lnIdArtProba
|
||||
LOCAL loForm, llCrapat, lcErrMsg, lnErrNo
|
||||
llCrapat = .F.
|
||||
lcErrMsg = ''
|
||||
lnErrNo = 0
|
||||
TRY
|
||||
loForm = CREATEOBJECT('frm_catalog_articole_nou', loRec, lnIdArtProba, 'UPDATE')
|
||||
CATCH TO loExc
|
||||
llCrapat = .T.
|
||||
lnErrNo = loExc.ErrorNo
|
||||
lcErrMsg = loExc.Message
|
||||
DO AfLog WITH " diagnostic exceptie: Procedure=[" + TRANSFORM(loExc.Procedure) + "] LineNo=" + TRANSFORM(loExc.LineNo) + " LineContents=[" + TRANSFORM(loExc.LineContents) + "] Details=[" + TRANSFORM(loExc.Details) + "]"
|
||||
ENDTRY
|
||||
DO AfLog WITH " rezultat CREATEOBJECT: llCrapat=" + TRANSFORM(llCrapat) + " errno=" + TRANSFORM(lnErrNo) + " mesaj=[" + lcErrMsg + "]"
|
||||
DO Verdict WITH !llCrapat AND lnErrNo = 0, "CREATEOBJECT frm_catalog_articole_nou (UPDATE) trece (errno=0)"
|
||||
|
||||
IF !llCrapat
|
||||
LOCAL loCb, lnI, lcLista
|
||||
|
||||
gcCaz = "[form-combo-cota] "
|
||||
DO Verdict WITH loForm._pageframe1.PageCount = 3, "PageCount = 3 (Page3 Vanzare vizibila)"
|
||||
DO Verdict WITH PEMSTATUS(loForm._pageframe1.Page3,"Cb_tx_proc_tvav",5), "controlul Cb_tx_proc_tvav exista pe Page3"
|
||||
DO Verdict WITH PEMSTATUS(loForm._pageframe1.Page3,"Clb_tx_proc_tvav",5) = .F., "vechiul Clb_tx_proc_tvav (textbox) nu mai exista"
|
||||
loCb = loForm._pageframe1.Page3.Cb_tx_proc_tvav._cbbase1
|
||||
DO Verdict WITH UPPER(ALLTRIM(loCb.BaseClass)) = "COMBOBOX", "Cb_tx_proc_tvav._cbbase1 e ComboBox (obtinut " + ALLTRIM(loCb.BaseClass) + ")"
|
||||
DO Verdict WITH loCb.RowSourceType = 2, "RowSourceType = 2 alias (obtinut " + TRANSFORM(loCb.RowSourceType) + ")"
|
||||
DO Verdict WITH UPPER(ALLTRIM(loCb.RowSource)) = "CRS_COTE_TVA", "RowSource = crs_cote_tva (obtinut [" + loCb.RowSource + "])"
|
||||
DO Verdict WITH USED('crs_cote_tva'), "cursorul crs_cote_tva e deschis"
|
||||
DO Verdict WITH loCb.ListCount = 5, "ListCount = 5 (4 cote ale lunii + randul 'ales la facturare') (obtinut " + TRANSFORM(loCb.ListCount) + ")"
|
||||
lcLista = ""
|
||||
FOR lnI = 1 TO loCb.ListCount
|
||||
lcLista = lcLista + "[" + ALLTRIM(loCb.List(lnI)) + "]"
|
||||
ENDFOR
|
||||
DO AfLog WITH " lista combo: " + lcLista
|
||||
DO Verdict WITH ALLTRIM(loCb.List(1)) = "21.00", "primul rand afiseaza procentul 21 (obtinut [" + ALLTRIM(loCb.List(1)) + "])"
|
||||
DO Verdict WITH ALLTRIM(loCb.List(loCb.ListCount)) = "<ALES LA FACTURARE>", "ultimul rand e <ALES LA FACTURARE> (obtinut [" + ALLTRIM(loCb.List(loCb.ListCount)) + "])"
|
||||
DO Verdict WITH loCb.ListIndex = loCb.ListCount, "ListIndex pe randul 'ales la facturare' (PROC_TVAV NULL) (obtinut " + TRANSFORM(loCb.ListIndex) + ")"
|
||||
DO Verdict WITH loForm._pageframe1.Page3.Cb_tx_proc_tvav.TabIndex = 3, "TabIndex Cb_tx_proc_tvav = 3"
|
||||
|
||||
gcCaz = "[form-date-neatinse] "
|
||||
DO Verdict WITH ISNULL(loForm.oPretNom.nProcTvav), "nProcTvav a ramas NULL dupa Init (cota din baza nu a fost alterata) (obtinut " + IIF(ISNULL(loForm.oPretNom.nProcTvav),"NULL",TRANSFORM(loForm.oPretNom.nProcTvav)) + ")"
|
||||
DO Verdict WITH loForm.oPretNom.lPreturiCuTva = .F., "lPreturiCuTva = .F. (politica 41)"
|
||||
|
||||
gcCaz = "[form-etichete] "
|
||||
DO Verdict WITH loForm._pageframe1.Page3.Clb_tx_cont_dedus.Lb_simplu1.Caption = "Cont venit articol", "eticheta contului de venit = 'Cont venit articol' (obtinut [" + loForm._pageframe1.Page3.Clb_tx_cont_dedus.Lb_simplu1.Caption + "])"
|
||||
DO Verdict WITH loForm._pageframe1.Page3.Clb_tx_pret_ftva.Lb_simplu1.Caption = "Pret fara TVA (pret lista)", "eticheta pretului de referinta = 'Pret fara TVA (pret lista)' (obtinut [" + loForm._pageframe1.Page3.Clb_tx_pret_ftva.Lb_simplu1.Caption + "])"
|
||||
DO Verdict WITH loForm._pageframe1.Page3.Clb_tx_pret_ftva.Lb_simplu1.FontBold, "eticheta pretului de referinta e FontBold"
|
||||
DO Verdict WITH loForm._pageframe1.Page3.Clb_tx_pret_ctva.Lb_simplu1.Caption = "Pret cu TVA", "eticheta celuilalt pret = 'Pret cu TVA' (obtinut [" + loForm._pageframe1.Page3.Clb_tx_pret_ctva.Lb_simplu1.Caption + "])"
|
||||
DO Verdict WITH !loForm._pageframe1.Page3.Clb_tx_pret_ctva.Lb_simplu1.FontBold, "eticheta celuilalt pret NU e FontBold"
|
||||
DO Verdict WITH PEMSTATUS(loForm._pageframe1.Page3,"Lb_info_conturi",5), "controlul Lb_info_conturi exista pe Page3"
|
||||
DO Verdict WITH loForm._pageframe1.Page3.Lb_info_conturi.Caption = "Necompletate: debit 4111, credit contul de venit al articolului", "textul informativ al conturilor (obtinut [" + loForm._pageframe1.Page3.Lb_info_conturi.Caption + "])"
|
||||
|
||||
gcCaz = "[form-interactive-change] "
|
||||
SELECT crs_cote_tva
|
||||
LOCATE FOR !ISNULL(proc_tva) AND proc_tva = lnCoefStd
|
||||
DO Verdict WITH FOUND(), "randul cotei standard (" + TRANSFORM(lnCoefStd) + ") gasit in crs_cote_tva"
|
||||
loCb.ListIndex = RECNO()
|
||||
loForm.oPretNom.nPretFtva = 100
|
||||
loForm.oPretNom.nPretCtva = 0
|
||||
loCb.InteractiveChange()
|
||||
DO Verdict WITH ROUND(NVL(loForm.oPretNom.nProcTvav,0),4) = lnCoefStd, "InteractiveChange a scris coeficientul " + TRANSFORM(lnCoefStd) + " in nProcTvav (obtinut " + TRANSFORM(loForm.oPretNom.nProcTvav) + ")"
|
||||
DO Verdict WITH ROUND(loForm.oPretNom.nPretCtva,2) = ROUND(100 * lnCoefStd,2), "pretul derivat recalculat de combo: 100 fara TVA -> " + TRANSFORM(ROUND(100 * lnCoefStd,2)) + " cu TVA (obtinut " + TRANSFORM(loForm.oPretNom.nPretCtva) + ")"
|
||||
|
||||
gcCaz = "[form-recalcul] "
|
||||
loForm.oPretNom.nProcTvav = .NULL.
|
||||
DO Verdict WITH loForm.oPretNom.recalculeaza_pret(100, .T.) = ROUND(100 * lnCoefStd, gnPc), "recalculeaza_pret cu cota lipsa (NULL) foloseste cota standard a lunii: 100 -> " + TRANSFORM(ROUND(100 * lnCoefStd, gnPc)) + " (obtinut " + TRANSFORM(loForm.oPretNom.recalculeaza_pret(100, .T.)) + ")"
|
||||
loForm.oPretNom.nProcTvav = 1.21
|
||||
DO Verdict WITH loForm.oPretNom.recalculeaza_pret(100, .T.) = 121, "recalculeaza_pret(100,.T.) cu coeficientul 1.21 = 121 (obtinut " + TRANSFORM(loForm.oPretNom.recalculeaza_pret(100, .T.)) + ")"
|
||||
DO Verdict WITH loForm.oPretNom.recalculeaza_pret(121, .F.) = 100, "recalculeaza_pret(121,.F.) = 100 (reciproc, obtinut " + TRANSFORM(loForm.oPretNom.recalculeaza_pret(121, .F.)) + ")"
|
||||
|
||||
RELEASE loForm
|
||||
ENDIF
|
||||
|
||||
*=================================================================================================
|
||||
* Cazul NOMEN: clasa cus_pret_nomenclator - cota standard pe articol nou, PROC_TVAV NULL salvat
|
||||
*=================================================================================================
|
||||
CASE lcMod == "NOMEN"
|
||||
gcCaz = "[nomen-articol-nou] "
|
||||
LOCAL loPN
|
||||
loPN = CREATEOBJECT('cus_pret_nomenclator')
|
||||
DO Verdict WITH VARTYPE(loPN) = "O", "cus_pret_nomenclator instantiat"
|
||||
DO Verdict WITH loPN.incarca(0), "incarca(0) (articol nou) = .T."
|
||||
DO Verdict WITH !ISNULL(loPN.nProcTvav) AND ROUND(loPN.nProcTvav,4) = lnCoefStd, "articol nou: nProcTvav = coeficientul standard " + TRANSFORM(lnCoefStd) + " (obtinut " + TRANSFORM(loPN.nProcTvav) + ")"
|
||||
DO Verdict WITH loPN.nPretFtva = 0 AND loPN.nPretCtva = 0, "articol nou: preturile pornesc de la 0"
|
||||
DO Verdict WITH loPN.recalculeaza_pret(100, .T.) = ROUND(100 * lnCoefStd, gnPc), "articol nou: 100 fara TVA -> " + TRANSFORM(ROUND(100 * lnCoefStd, gnPc)) + " cu TVA"
|
||||
DO Verdict WITH loPN.recalculeaza_pret(ROUND(100 * lnCoefStd, gnPc), .F.) = 100, "articol nou: revenire la 100 fara TVA (reciproc)"
|
||||
|
||||
gcCaz = "[nomen-articol-existent-null] "
|
||||
LOCAL loPE
|
||||
loPE = CREATEOBJECT('cus_pret_nomenclator')
|
||||
DO Verdict WITH loPE.incarca(lnIdArtProba), "incarca(" + TRANSFORM(lnIdArtProba) + ") = .T."
|
||||
DO Verdict WITH ISNULL(loPE.nProcTvav), "articol existent cu PROC_TVAV NULL: nProcTvav ramane NULL (obtinut " + IIF(ISNULL(loPE.nProcTvav),"NULL",TRANSFORM(loPE.nProcTvav)) + ")"
|
||||
DO Verdict WITH loPE.lPreturiCuTva = .F., "lPreturiCuTva = .F. pentru politica 41"
|
||||
DO Verdict WITH loPE.recalculeaza_pret(100, .T.) = ROUND(100 * lnCoefStd, gnPc), "cota lipsa: recalculeaza_pret foloseste cota standard (100 -> " + TRANSFORM(ROUND(100 * lnCoefStd, gnPc)) + ") (obtinut " + TRANSFORM(loPE.recalculeaza_pret(100, .T.)) + ")"
|
||||
|
||||
gcCaz = "[nomen-salvare-proc-tvav-null] "
|
||||
LOCAL lnTransOrig, lnOk2
|
||||
lnTransOrig = SQLGETPROP(gnHandle, "Transactions")
|
||||
SQLSETPROP(gnHandle, "Transactions", 2)
|
||||
loPE.nPretFtva = 50
|
||||
loPE.nPretCtva = 60.5
|
||||
DO Verdict WITH ISNULL(loPE.nProcTvav), "preconditie: nProcTvav e NULL inainte de salveaza()"
|
||||
DO Verdict WITH loPE.salveaza(lnIdArtProba), "salveaza() = .T. cu PROC_TVAV NULL"
|
||||
lnOk2 = SQLEXEC(gnHandle, "select proc_tvav, pretftva, pretctva from crm_politici_pret_art where id_pol = 41 and id_articol = " + TRANSFORM(lnIdArtProba), "crsnull")
|
||||
DO Verdict WITH lnOk2 > 0 AND USED('crsnull') AND RECCOUNT('crsnull') = 1, "randul din crm_politici_pret_art citit in tranzactie"
|
||||
IF USED('crsnull') AND RECCOUNT('crsnull') = 1
|
||||
DO Verdict WITH ISNULL(crsnull.proc_tvav), "Oracle: PROC_TVAV a ramas NULL dupa salvare"
|
||||
DO Verdict WITH ROUND(crsnull.pretftva,2) = 50, "Oracle: PRETFTVA = 50 (obtinut " + TRANSFORM(crsnull.pretftva) + ")"
|
||||
DO Verdict WITH ROUND(crsnull.pretctva,2) = 60.5, "Oracle: PRETCTVA = 60.5 (obtinut " + TRANSFORM(crsnull.pretctva) + ")"
|
||||
ENDIF
|
||||
IF USED('crsnull')
|
||||
USE IN crsnull
|
||||
ENDIF
|
||||
lnOk2 = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
SQLSETPROP(gnHandle, "Transactions", lnTransOrig)
|
||||
DO Verdict WITH lnOk2 > 0, "ROLLBACK dupa verificare (datele de proba nu raman)"
|
||||
ENDCASE
|
||||
|
||||
DO Final
|
||||
|
||||
PROCEDURE Verdict
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO AfLog WITH "PASS: " + gcCaz + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Final
|
||||
LOCAL lnOk
|
||||
gcCaz = "[final] "
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
lnOk = SQLEXEC(gnHandle, "ROLLBACK")
|
||||
DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk) + " (plasa de siguranta)"
|
||||
ENDIF
|
||||
DO AfLog WITH "PARTIAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail)
|
||||
DO AfLog WITH "END " + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
23
utile/Teste/facturare_unificat/s6c4_compile.prg
Normal file
23
utile/Teste/facturare_unificat/s6c4_compile.prg
Normal file
@@ -0,0 +1,23 @@
|
||||
* s6c4_compile.prg
|
||||
* Compilare headless onom_articole.vcx dupa garda NULL la INSERT (id_tara_origine).
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
CLOSE DATABASES
|
||||
lcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\s6c4_compile.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
|
||||
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
|
||||
ENDIF
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), lcLog)
|
||||
ON ERROR DO CErr WITH ERROR(), MESSAGE(), LINENO()
|
||||
|
||||
SET DEFAULT TO "D:\ROA\ROAFACTURARE\COMUN\clase"
|
||||
COMPILE CLASSLIB onom_articole.vcx
|
||||
STRTOFILE("COMPILE OK" + CHR(13) + CHR(10), lcLog, 1)
|
||||
STRTOFILE("END " + TTOC(DATETIME()) + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE CErr
|
||||
LPARAMETERS tnErr, tcMsg, tnLine
|
||||
STRTOFILE("COMPILE FAIL " + TRANSFORM(tnErr) + " " + tcMsg + " line=" + TRANSFORM(tnLine) + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
35
utile/Teste/facturare_unificat/s7b2_compile.prg
Normal file
35
utile/Teste/facturare_unificat/s7b2_compile.prg
Normal file
@@ -0,0 +1,35 @@
|
||||
* s7b2_compile.prg - plan #12b, S7b-2: COMPILE CLASSLIB headless pe ofacturare.vcx dupa
|
||||
* write-back-ul textului (nota implicita a politicii de stoc in optiuni). Fara Oracle -
|
||||
* COMPILE CLASSLIB nu are nevoie de conexiune, doar verifica sintaxa claselor.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File ruleaza_suita.ps1 -Nume s7b2_compile
|
||||
* Log: out\s7b2_compile.log (copiat apoi in docs\loguri_12b\s7b2_compile.log)
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gcVcx
|
||||
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\s7b2_compile.log"
|
||||
gcVcx = "D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare.vcx"
|
||||
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
|
||||
ON ERROR DO s7b2_err WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
COMPILE CLASSLIB (gcVcx)
|
||||
|
||||
IF FILE(STRTRAN(gcVcx, ".vcx", ".err"))
|
||||
STRTOFILE("COMPILE ESEC" + CHR(13) + CHR(10), gcLog, 1)
|
||||
STRTOFILE(FILETOSTR(STRTRAN(gcVcx, ".vcx", ".err")), gcLog, 1)
|
||||
ELSE
|
||||
STRTOFILE("COMPILE OK" + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDIF
|
||||
|
||||
QUIT
|
||||
|
||||
PROCEDURE s7b2_err
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE("EROARE " + TRANSFORM(tnErr) + " " + tcMsg + " in " + tcProg + " linia " + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
40
utile/Teste/facturare_unificat/s8_3_compile.prg
Normal file
40
utile/Teste/facturare_unificat/s8_3_compile.prg
Normal file
@@ -0,0 +1,40 @@
|
||||
* s8_3_compile.prg - plan #12b, S8-3: COMPILE CLASSLIB headless pe ofacturare.vcx dupa
|
||||
* write-back-ul verificarii de cont de venit pe cele trei cai de adaugare a liniei.
|
||||
* Fara Oracle - COMPILE CLASSLIB nu are nevoie de conexiune, doar verifica sintaxa claselor.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T s8_3_compile.prg
|
||||
* Log: out\s8_3_compile.log
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET TABLEPROMPT OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gcVcx
|
||||
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\s8_3_compile.log"
|
||||
gcVcx = "D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare.vcx"
|
||||
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
|
||||
ON ERROR DO s8_3_err WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
IF FILE(STRTRAN(gcVcx, ".vcx", ".err"))
|
||||
DELETE FILE (STRTRAN(gcVcx, ".vcx", ".err"))
|
||||
ENDIF
|
||||
|
||||
COMPILE CLASSLIB (gcVcx)
|
||||
|
||||
IF FILE(STRTRAN(gcVcx, ".vcx", ".err"))
|
||||
STRTOFILE("COMPILE ESEC" + CHR(13) + CHR(10), gcLog, 1)
|
||||
STRTOFILE(FILETOSTR(STRTRAN(gcVcx, ".vcx", ".err")), gcLog, 1)
|
||||
ELSE
|
||||
STRTOFILE("COMPILE OK" + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDIF
|
||||
|
||||
QUIT
|
||||
|
||||
PROCEDURE s8_3_err
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE("EROARE " + TRANSFORM(tnErr) + " " + tcMsg + " in " + tcProg + " linia " + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
23
utile/Teste/facturare_unificat/s8_4a_compile.prg
Normal file
23
utile/Teste/facturare_unificat/s8_4a_compile.prg
Normal file
@@ -0,0 +1,23 @@
|
||||
* s8_4a_compile.prg
|
||||
* Compilare headless ofacturare.vcx dupa write-back S8-4a (toArticol.Id_Pol in do_adauga_articol_cautat).
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
CLOSE DATABASES
|
||||
lcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\s8_4a_compile.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
|
||||
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
|
||||
ENDIF
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), lcLog)
|
||||
ON ERROR DO CErr WITH ERROR(), MESSAGE(), LINENO()
|
||||
|
||||
SET DEFAULT TO "D:\ROA\ROAFACTURARE\COMUN\clase"
|
||||
COMPILE CLASSLIB ofacturare.vcx
|
||||
STRTOFILE("COMPILE OK" + CHR(13) + CHR(10), lcLog, 1)
|
||||
STRTOFILE("END " + TTOC(DATETIME()) + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE CErr
|
||||
LPARAMETERS tnErr, tcMsg, tnLine
|
||||
STRTOFILE("COMPILE FAIL " + TRANSFORM(tnErr) + " " + tcMsg + " line=" + TRANSFORM(tnLine) + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
57
utile/Teste/facturare_unificat/vanzare_ui_compile.prg
Normal file
57
utile/Teste/facturare_unificat/vanzare_ui_compile.prg
Normal file
@@ -0,0 +1,57 @@
|
||||
* vanzare_ui_compile.prg
|
||||
* Compilare headless a fisierelor atinse de pagina "Vanzare" din fisa articolului: class library
|
||||
* onom_articole.vcx (clasa frm_catalog_articole_nou, combo cota TVA) si programul
|
||||
* ofacturare_comun.prg (clasa cus_pret_nomenclator). Fara Oracle - verifica doar sintaxa.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File ruleaza_suita.ps1 -Nume vanzare_ui_compile
|
||||
* Log: out\vanzare_ui_compile.log
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gcCaz, lnErori
|
||||
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\vanzare_ui_compile.log"
|
||||
gcCaz = ""
|
||||
lnErori = 0
|
||||
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
ON ERROR DO CErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO Compileaza WITH "D:\ROA\ROAFACTURARE\COMUN\clase", "onom_articole.vcx"
|
||||
DO Compileaza WITH "D:\ROA\ROAFACTURARE\COMUN\programe", "ofacturare_comun.prg"
|
||||
|
||||
STRTOFILE("REZULTAT erori=" + TRANSFORM(lnErori) + CHR(13) + CHR(10), gcLog, 1)
|
||||
STRTOFILE("END " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Compileaza
|
||||
LPARAMETERS tcDir, tcFisier
|
||||
LOCAL lcCale, lcErr
|
||||
lcCale = ADDBS(tcDir) + tcFisier
|
||||
lcErr = STRTRAN(lcCale, ".vcx", ".err")
|
||||
lcErr = STRTRAN(lcErr, ".prg", ".err")
|
||||
IF FILE(lcErr)
|
||||
DELETE FILE (lcErr)
|
||||
ENDIF
|
||||
SET DEFAULT TO (tcDir)
|
||||
IF UPPER(JUSTEXT(tcFisier)) = "VCX"
|
||||
COMPILE CLASSLIB (tcFisier)
|
||||
ELSE
|
||||
COMPILE (tcFisier)
|
||||
ENDIF
|
||||
IF FILE(lcErr)
|
||||
lnErori = lnErori + 1
|
||||
STRTOFILE("COMPILE ESEC " + tcFisier + CHR(13) + CHR(10), gcLog, 1)
|
||||
STRTOFILE(FILETOSTR(lcErr), gcLog, 1)
|
||||
ELSE
|
||||
STRTOFILE("COMPILE OK " + tcFisier + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
lnErori = lnErori + 1
|
||||
STRTOFILE("EROARE " + TRANSFORM(tnErr) + " " + tcMsg + " in " + tcProg + " linia " + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
Reference in New Issue
Block a user