diff --git a/clase/ofacturare.vc2 b/clase/ofacturare.vc2 index 1cc1db7..9bb65a7 100644 --- a/clase/ofacturare.vc2 +++ b/clase/ofacturare.vc2 @@ -14070,8 +14070,8 @@ DEFINE CLASS frm_facturare_articole AS _frmbase OF "_frm_base.vcx" Alltrim(Str(poArt.id_articol)) + [,] + ; ['] + OracleSpecialCharacters(Alltrim(Nvl(poArt.serie,[]))) + [',] + ; ['] + OracleSpecialCharacters(Alltrim(Nvl(poArt.explicatie,''))) + [',] + Nvl(Alltrim(Str(poArt.id_pol)),[NULL]) + [,] + ; - Nvl(Alltrim(Str(poArt.id_gestiune)),[NULL]) + [,] + Alltrim(Str(poArt.pret_achizitie,18,gnPPret)) + [,] + ; - Alltrim(Str(poArt.pretd,18,gnPPretval)) + [,] + ; + Nvl(Alltrim(Str(poArt.id_gestiune)),[NULL]) + [,] + Alltrim(Str(poArt.pret_achizitie,18,Max(gnPPret,4))) + [,] + ; + Alltrim(Str(poArt.pretd,18,Max(gnPPretval,4))) + [,] + ; Iif(Isnull(poArt.id_valuta_d),[NULL],Alltrim(Str(poArt.id_valuta_d))) + [,] + ; IIF(poArt.cu_tva=0,; IIF(poArt.tip_valuta = 0,Alltrim(Str(poArt.pretftva,18,gnPPretV)),Alltrim(Str(poArt.vpretftva,18,gnPVal))),; @@ -14084,7 +14084,7 @@ DEFINE CLASS frm_facturare_articole AS _frmbase OF "_frm_base.vcx" ['] + Alltrim(Nvl(poArt.Cont,'')) + [',] + Alltrim(Str(poArt.Curs,18,6)) + [,] + ; ALLTRIM(STR(poArt.multiplicator,10)) + [,] + Alltrim(Str(poArt.id_jtva_coloana)) + [,] + ; Nvl(Alltrim(Str(poArt.id_part_rez)),[NULL]) + [,] + Nvl(Alltrim(Str(poArt.id_lucrare_rez)),[NULL]) + [,] + ; - Alltrim(Str(poArt.pretv_orig,18,gnPPretV)) + [,] + ; + Alltrim(Str(poArt.pretv_orig,18,Max(gnPPretV,4))) + [,] + ; Nvl(Alltrim(Str(poArt.id_set_fact)),[NULL]) + [,] + NVL(ALLTRIM(STR(poArt.id_ctr)),[NULL]) + [,] + Alltrim(Str(gnIdUtil)) + [,] + ; NVL(ALLTRIM(STR(poArt.taxcode)),[NULL]) + ; [,'] + OracleSpecialCharacters(Alltrim(Nvl(poArt.lot,[]))) + ['] + ; @@ -18105,8 +18105,8 @@ DEFINE CLASS frm_facturare_articole2 AS _frmbase OF "_frm_base.vcx" Alltrim(Str(poArt.id_articol)) + [,] + ; ['] + OracleSpecialCharacters(Alltrim(Nvl(poArt.serie,[]))) + [',] + ; ['] + OracleSpecialCharacters(Alltrim(Nvl(poArt.explicatie,''))) + [',] + Nvl(Alltrim(Str(poArt.id_pol)),[NULL]) + [,] + ; - Nvl(Alltrim(Str(poArt.id_gestiune)),[NULL]) + [,] + Alltrim(Str(poArt.pret_achizitie,18,gnPPret)) + [,] + ; - Alltrim(Str(poArt.pretd,18,gnPPretval)) + [,] + ; + Nvl(Alltrim(Str(poArt.id_gestiune)),[NULL]) + [,] + Alltrim(Str(poArt.pret_achizitie,18,Max(gnPPret,4))) + [,] + ; + Alltrim(Str(poArt.pretd,18,Max(gnPPretval,4))) + [,] + ; Iif(Isnull(poArt.id_valuta_d),[NULL],Alltrim(Str(poArt.id_valuta_d))) + [,] + ; IIF(poArt.cu_tva=0,; IIF(poArt.tip_valuta = 0,Alltrim(Str(poArt.pretftva,18,gnPPretV)),Alltrim(Str(poArt.vpretftva,18,gnPVal))),; @@ -18119,7 +18119,7 @@ DEFINE CLASS frm_facturare_articole2 AS _frmbase OF "_frm_base.vcx" ['] + Alltrim(Nvl(poArt.Cont,'')) + [',] + Alltrim(Str(poArt.Curs,18,6)) + [,] + ; ALLTRIM(STR(poArt.multiplicator,10)) + [,] + Alltrim(Str(poArt.id_jtva_coloana)) + [,] + ; Nvl(Alltrim(Str(poArt.id_part_rez)),[NULL]) + [,] + Nvl(Alltrim(Str(poArt.id_lucrare_rez)),[NULL]) + [,] + ; - Alltrim(Str(poArt.pretv_orig,18,gnPPretV)) + [,] + ; + Alltrim(Str(poArt.pretv_orig,18,Max(gnPPretV,4))) + [,] + ; Nvl(Alltrim(Str(poArt.id_set_fact)),[NULL]) + [,] + NVL(ALLTRIM(STR(poArt.id_ctr)),[NULL]) + [,] + Alltrim(Str(gnIdUtil)) + [);] *!* v 2.0.13 ^ *!* modificare v 2.0.67 diff --git a/clase/ofacturare_comun.vc2 b/clase/ofacturare_comun.vc2 index 0d92456..6f7f325 100644 --- a/clase/ofacturare_comun.vc2 +++ b/clase/ofacturare_comun.vc2 @@ -4927,7 +4927,7 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx" PROCEDURE inainte_de_do_modifica Local lnOptiune - lnOptiune = xmenu('Modificare \ *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cTaxcodeArt.Header1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cTaxcodeArt.Text1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cExplicatieTvaArt.Header1" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cExplicatieTvaArt.Text1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cValoareArt.Header1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.grdArticoleFactura.cValoareArt.Text1" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.cmdStergeArticol" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.cmdAdaugaArticol" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.cmdSincronizeazaArticole" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblTotalLiniiArt" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.txtTotalLiniiArt" UniqueID="" Timestamp="" /> @@ -6668,8 +6668,6 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.txtDiscountArt" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblTotalNetArt" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.txtTotalNetArt" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblTotalSalvatArt" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.txtTotalSalvatArt" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblTotalActArt" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.txtTotalActArt" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="pgfArticole.PAGE3.lblTotalRulArt" UniqueID="" Timestamp="" /> @@ -6794,15 +6792,19 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *< OBJECTDATA: ObjPath="But_stergeR" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="but_afiseaza_rulaje" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="But_copiazaR" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="But_nouR" UniqueID="" Timestamp="" /> * *m: actualizeazabaratotaluri *m: actualizeazaverdictactrul + *m: adaugalinietvddinarticol *m: afiseazadialogsincronizarearticole *m: afiseaza_rulaje *m: alege_partener *m: aleg_document_pereche + *m: aseaza_pagina_articole *m: calculeazatotal + *m: calculeaza_valori_articol *m: calculeaza_valori_rul *m: ccontrol_assign *m: creeaza_note_tva_incasare @@ -6815,8 +6817,10 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *m: grid_focus_prima_coloana *m: resize_grid1 *m: salveazaxml + *m: semnaturadivergentesincronizare *m: sincronizeaza_nnir *m: updateexplicatiesaft + *m: updateexplicatiesaftart *m: updateexplicatiesaftrul *m: valideaza_data *m: verificaavertizareexigibilizaretva @@ -6824,6 +6828,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *p: ccont *p: ccontrol *p: cpaymentcode + *p: csemnaturasincronizare *p: fel_compensare *p: larearticolevanzari *p: larticolereadonly @@ -6862,6 +6867,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" cacont = ccont = cpaymentcode = + csemnaturasincronizare = DoCreate = .T. FontCharSet = 238 Height = 530 @@ -6908,6 +6914,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" + _shape1.Anchor = 10 @@ -7000,6 +7007,18 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" ZOrderSet = 14 *< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" /> + ADD OBJECT 'But_nouR' AS but_nou WITH ; + Anchor = 12, ; + caction = do_adauga_rul, ; + Left = 773, ; + Name = "But_nouR", ; + TabIndex = 16, ; + ToolTipText = "Adaugare linie de articol", ; + Top = 362, ; + Visible = .T., ; + ZOrderSet = 32 + *< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" /> + ADD OBJECT 'But_renunt1' AS but_renunt WITH ; Anchor = 8, ; Left = 754, ; @@ -12290,57 +12309,26 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" SelectedBackColor = 100,185,255 *< END OBJECT: BaseClass="textbox" /> - ADD OBJECT 'pgfArticole.PAGE3.cmdAdaugaArticol' AS commandbutton WITH ; - Anchor = 8, ; - AutoSize = .F., ; - Caption = "Adauga articol", ; - FontCharSet = 238, ; - FontSize = 9, ; - ForeColor = 0,0,64, ; - Height = 22, ; - Left = 175, ; - Name = "cmdAdaugaArticol", ; - TabIndex = 5, ; - Top = 0, ; - Width = 170, ; - ZOrderSet = 0 - *< END OBJECT: BaseClass="commandbutton" /> - ADD OBJECT 'pgfArticole.PAGE3.cmdSincronizeazaArticole' AS commandbutton WITH ; - Anchor = 8, ; + Anchor = 0, ; AutoSize = .F., ; + BackColor = 255,255,200, ; Caption = "Sincronizeaza cu rulaje...", ; + FontBold = .T., ; FontCharSet = 238, ; FontSize = 9, ; - ForeColor = 0,0,64, ; + ForeColor = 128,0,128, ; Height = 22, ; - Left = 350, ; + Left = 0, ; Name = "cmdSincronizeazaArticole", ; - TabIndex = 6, ; + TabIndex = 3, ; Top = 0, ; Width = 250, ; ZOrderSet = 0 *< END OBJECT: BaseClass="commandbutton" /> - ADD OBJECT 'pgfArticole.PAGE3.cmdStergeArticol' AS commandbutton WITH ; - Anchor = 8, ; - AutoSize = .F., ; - Caption = "Sterge / Restaureaza linie", ; - FontCharSet = 238, ; - FontSize = 9, ; - ForeColor = 0,0,64, ; - Height = 22, ; - Left = 0, ; - Name = "cmdStergeArticol", ; - TabIndex = 3, ; - Top = 0, ; - Width = 170, ; - ZOrderSet = 0 - *< END OBJECT: BaseClass="commandbutton" /> - ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura' AS _grdrow WITH ; - Anchor = 15, ; - ColumnCount = 15, ; + ColumnCount = 16, ; DeleteMark = .F., ; FontSize = 10, ; GridLineColor = 128,128,128, ; @@ -12363,7 +12351,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Column1.FontName = "Arial", ; Column1.FontSize = 10, ; Column1.Name = "cDenumireArt", ; - Column1.ReadOnly = .T., ; + Column1.ReadOnly = .F., ; Column1.Width = 170, ; Column2.ControlSource = "tvd.codmat", ; Column2.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),IIF(NVL(tvd.id_vanzare_set,0)<>0,RGB(0,70,153),RGB(0,0,0)))", ; @@ -12377,14 +12365,14 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Column3.FontName = "Arial", ; Column3.FontSize = 10, ; Column3.Name = "cSerieArt", ; - Column3.ReadOnly = .T., ; + Column3.ReadOnly = .F., ; Column3.Width = 70, ; Column4.ControlSource = "tvd.lot", ; Column4.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),IIF(NVL(tvd.id_vanzare_set,0)<>0,RGB(0,70,153),RGB(0,0,0)))", ; Column4.FontName = "Arial", ; Column4.FontSize = 10, ; Column4.Name = "cLotArt", ; - Column4.ReadOnly = .T., ; + Column4.ReadOnly = .F., ; Column4.Width = 60, ; Column5.ControlSource = "tvd.cantitate", ; Column5.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),IIF(NVL(tvd.id_vanzare_set,0)<>0,RGB(0,70,153),RGB(0,0,0)))", ; @@ -12400,7 +12388,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Column6.FontName = "Arial", ; Column6.FontSize = 10, ; Column6.Format = "R", ; - Column6.InputMask = (get_mask(12,gnPPRET)), ; + Column6.InputMask = (get_mask(12,gnPPretV)), ; Column6.Name = "cPretArt", ; Column6.ReadOnly = .F., ; Column6.Width = 70, ; @@ -12417,6 +12405,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Column8.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),IIF(NVL(tvd.id_vanzare_set,0)<>0,RGB(0,70,153),RGB(0,0,0)))", ; Column8.FontName = "Arial", ; Column8.FontSize = 10, ; + Column8.InputMask = (get_mask(12,gnPPretV)), ; Column8.Name = "cPretCuTvaArt", ; Column8.ReadOnly = .F., ; Column8.Sparse = .F., ; @@ -12428,7 +12417,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Column9.Format = "R", ; Column9.InputMask = "9.99", ; Column9.Name = "cProcTvavArt", ; - Column9.ReadOnly = .T., ; + Column9.ReadOnly = .F., ; Column9.Width = 55, ; Column10.ControlSource = "tvd.discount_unitar", ; Column10.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),IIF(NVL(tvd.id_vanzare_set,0)<>0,RGB(0,70,153),RGB(0,0,0)))", ; @@ -12444,28 +12433,28 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Column11.FontName = "Arial", ; Column11.FontSize = 10, ; Column11.Name = "cGestiuneArt", ; - Column11.ReadOnly = .T., ; + Column11.ReadOnly = .F., ; Column11.Width = 90, ; Column12.ControlSource = "tvd.nume_val", ; Column12.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),IIF(NVL(tvd.id_vanzare_set,0)<>0,RGB(0,70,153),RGB(0,0,0)))", ; Column12.FontName = "Arial", ; Column12.FontSize = 10, ; Column12.Name = "cValutaArt", ; - Column12.ReadOnly = .T., ; + Column12.ReadOnly = .F., ; Column12.Width = 60, ; Column13.ControlSource = "tvd.explicatie", ; Column13.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),IIF(NVL(tvd.id_vanzare_set,0)<>0,RGB(0,70,153),RGB(0,0,0)))", ; Column13.FontName = "Arial", ; Column13.FontSize = 10, ; Column13.Name = "cExplicatieArt", ; - Column13.ReadOnly = .T., ; + Column13.ReadOnly = .F., ; Column13.Width = 150, ; Column14.ControlSource = "tvd.taxcode", ; Column14.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),IIF(NVL(tvd.id_vanzare_set,0)<>0,RGB(0,70,153),RGB(0,0,0)))", ; Column14.FontName = "Arial", ; Column14.FontSize = 10, ; Column14.Name = "cTaxcodeArt", ; - Column14.ReadOnly = .T., ; + Column14.ReadOnly = .F., ; Column14.Width = 60, ; Column15.ControlSource = "tvd.valoare", ; Column15.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),IIF(NVL(tvd.id_vanzare_set,0)<>0,RGB(0,70,153),RGB(0,0,0)))", ; @@ -12475,7 +12464,14 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Column15.InputMask = (get_mask(14,gnPa)), ; Column15.Name = "cValoareArt", ; Column15.ReadOnly = .T., ; - Column15.Width = 90 + Column15.Width = 90, ; + Column16.ControlSource = "Iif(Seek(Nvl(tvd.id_jtva_coloana,0),'crsJtvaTemp','id_jtva'),crsJtvaTemp.denumire,'')", ; + Column16.DynamicForeColor = "IIF(tvd.sters=1,RGB(150,150,150),IIF(NVL(tvd.id_vanzare_set,0)<>0,RGB(0,70,153),RGB(0,0,0)))", ; + Column16.FontName = "Arial", ; + Column16.FontSize = 10, ; + Column16.Name = "cExplicatieTvaArt", ; + Column16.ReadOnly = .F., ; + Column16.Width = 170 *< END OBJECT: ClassLib="_grd_base.vcx" BaseClass="grid" /> ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cCantitateArt.Header1' AS header WITH ; @@ -12530,7 +12526,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *< END OBJECT: BaseClass="header" /> ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cDenumireArt.Text1' AS textbox WITH ; - BackColor = 225,225,225, ; + BackColor = 160,255,205, ; BorderStyle = 0, ; FontName = "Arial", ; FontSize = 10, ; @@ -12572,7 +12568,27 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *< END OBJECT: BaseClass="header" /> ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cExplicatieArt.Text1' AS textbox WITH ; - BackColor = 225,225,225, ; + BackColor = 255,255,255, ; + BorderStyle = 0, ; + FontName = "Arial", ; + FontSize = 10, ; + ForeColor = 0,0,0, ; + Margin = 0, ; + Name = "Text1", ; + ReadOnly = .F., ; + SelectedBackColor = 100,185,255 + *< END OBJECT: BaseClass="textbox" /> + + ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cExplicatieTvaArt.Header1' AS header WITH ; + Caption = "Explicatie TVA", ; + FontName = "Arial", ; + FontSize = 10, ; + Name = "Header1", ; + WordWrap = .T. + *< END OBJECT: BaseClass="header" /> + + ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cExplicatieTvaArt.Text1' AS textbox WITH ; + BackColor = 160,255,205, ; BorderStyle = 0, ; FontName = "Arial", ; FontSize = 10, ; @@ -12593,7 +12609,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *< END OBJECT: BaseClass="header" /> ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cGestiuneArt.Text1' AS textbox WITH ; - BackColor = 225,225,225, ; + BackColor = 160,255,205, ; BorderStyle = 0, ; FontName = "Arial", ; FontSize = 10, ; @@ -12614,14 +12630,14 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *< END OBJECT: BaseClass="header" /> ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cLotArt.Text1' AS textbox WITH ; - BackColor = 225,225,225, ; + BackColor = 255,255,255, ; BorderStyle = 0, ; FontName = "Arial", ; FontSize = 10, ; ForeColor = 0,0,0, ; Margin = 0, ; Name = "Text1", ; - ReadOnly = .T., ; + ReadOnly = .F., ; SelectedBackColor = 100,185,255 *< END OBJECT: BaseClass="textbox" /> @@ -12717,14 +12733,14 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *< END OBJECT: BaseClass="header" /> ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cSerieArt.Text1' AS textbox WITH ; - BackColor = 225,225,225, ; + BackColor = 255,255,255, ; BorderStyle = 0, ; FontName = "Arial", ; FontSize = 10, ; ForeColor = 0,0,0, ; Margin = 0, ; Name = "Text1", ; - ReadOnly = .T., ; + ReadOnly = .F., ; SelectedBackColor = 100,185,255 *< END OBJECT: BaseClass="textbox" /> @@ -12738,7 +12754,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *< END OBJECT: BaseClass="header" /> ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cTaxcodeArt.Text1' AS textbox WITH ; - BackColor = 225,225,225, ; + BackColor = 160,255,205, ; BorderStyle = 0, ; FontName = "Arial", ; FontSize = 10, ; @@ -12780,7 +12796,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *< END OBJECT: BaseClass="header" /> ADD OBJECT 'pgfArticole.PAGE3.grdArticoleFactura.cValutaArt.Text1' AS textbox WITH ; - BackColor = 225,225,225, ; + BackColor = 160,255,205, ; BorderStyle = 0, ; FontName = "Arial", ; FontSize = 10, ; @@ -12802,7 +12818,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Top = 4, ; Visible = .F., ; Width = 390, ; - ZOrderSet = 15 + ZOrderSet = 13 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> ADD OBJECT 'pgfArticole.PAGE3.lblDiscountArt' AS _label WITH ; @@ -12810,7 +12826,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Caption = "Discount:", ; FontBold = .T., ; Height = 17, ; - Left = 190, ; + Left = 206, ; Name = "lblDiscountArt", ; Top = 114, ; Width = 65, ; @@ -12819,25 +12835,25 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" ADD OBJECT 'pgfArticole.PAGE3.lblTotalActArt' AS _label WITH ; AutoSize = .F., ; - Caption = "Total ACT:", ; + Caption = "Total note:", ; FontBold = .T., ; Height = 17, ; - Left = 0, ; + Left = 4, ; Name = "lblTotalActArt", ; Top = 136, ; - Width = 90, ; - ZOrderSet = 10 + Width = 100, ; + ZOrderSet = 8 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> ADD OBJECT 'pgfArticole.PAGE3.lblTotalLiniiArt' AS _label WITH ; AutoSize = .F., ; - Caption = "Total linii:", ; + Caption = "Total articole:", ; FontBold = .T., ; Height = 17, ; - Left = 0, ; + Left = 4, ; Name = "lblTotalLiniiArt", ; Top = 114, ; - Width = 90, ; + Width = 100, ; ZOrderSet = 2 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> @@ -12846,7 +12862,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Caption = "Total net:", ; FontBold = .T., ; Height = 17, ; - Left = 340, ; + Left = 358, ; Name = "lblTotalNetArt", ; Top = 114, ; Width = 80, ; @@ -12855,26 +12871,14 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" ADD OBJECT 'pgfArticole.PAGE3.lblTotalRulArt' AS _label WITH ; AutoSize = .F., ; - Caption = "Total RUL:", ; + Caption = "Total rulaje:", ; FontBold = .T., ; Height = 17, ; - Left = 190, ; + Left = 206, ; Name = "lblTotalRulArt", ; Top = 136, ; - Width = 90, ; - ZOrderSet = 12 - *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> - - ADD OBJECT 'pgfArticole.PAGE3.lblTotalSalvatArt' AS _label WITH ; - AutoSize = .F., ; - Caption = "Total salvat:", ; - FontBold = .T., ; - Height = 17, ; - Left = 520, ; - Name = "lblTotalSalvatArt", ; - Top = 114, ; - Width = 85, ; - ZOrderSet = 8 + Width = 150, ; + ZOrderSet = 10 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> ADD OBJECT 'pgfArticole.PAGE3.lblVerdictArt' AS _label WITH ; @@ -12882,11 +12886,11 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Caption = "", ; FontBold = .T., ; Height = 17, ; - Left = 380, ; + Left = 458, ; Name = "lblVerdictArt", ; Top = 136, ; - Width = 350, ; - ZOrderSet = 14 + Width = 420, ; + ZOrderSet = 12 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> ADD OBJECT 'pgfArticole.PAGE3.txtDiscountArt' AS _textbox WITH ; @@ -12895,7 +12899,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Format = "R", ; Height = 21, ; InputMask = (get_mask(12,gnPa)), ; - Left = 257, ; + Left = 273, ; Name = "txtDiscountArt", ; ReadOnly = .F., ; Top = 110, ; @@ -12909,12 +12913,12 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Format = "R", ; Height = 21, ; InputMask = (get_mask(14,gnPa)), ; - Left = 92, ; + Left = 106, ; Name = "txtTotalActArt", ; ReadOnly = .T., ; Top = 132, ; Width = 90, ; - ZOrderSet = 11 + ZOrderSet = 9 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" /> ADD OBJECT 'pgfArticole.PAGE3.txtTotalLiniiArt' AS _textbox WITH ; @@ -12923,7 +12927,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Format = "R", ; Height = 21, ; InputMask = (get_mask(14,gnPa)), ; - Left = 92, ; + Left = 106, ; Name = "txtTotalLiniiArt", ; ReadOnly = .T., ; Top = 110, ; @@ -12937,7 +12941,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Format = "R", ; Height = 21, ; InputMask = (get_mask(14,gnPa)), ; - Left = 422, ; + Left = 440, ; Name = "txtTotalNetArt", ; ReadOnly = .T., ; Top = 110, ; @@ -12951,26 +12955,12 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Format = "R", ; Height = 21, ; InputMask = (get_mask(14,gnPa)), ; - Left = 282, ; + Left = 358, ; Name = "txtTotalRulArt", ; ReadOnly = .T., ; Top = 132, ; Width = 90, ; - ZOrderSet = 13 - *< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" /> - - ADD OBJECT 'pgfArticole.PAGE3.txtTotalSalvatArt' AS _textbox WITH ; - Alignment = 1, ; - ControlSource = "tvanz.total_cu_tva", ; - Format = "R", ; - Height = 21, ; - InputMask = (get_mask(14,gnPa)), ; - Left = 607, ; - Name = "txtTotalSalvatArt", ; - ReadOnly = .T., ; - Top = 110, ; - Width = 90, ; - ZOrderSet = 9 + ZOrderSet = 11 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" /> ADD OBJECT 'txtSuma' AS _textbox WITH ; @@ -13035,8 +13025,6 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" .txtDiscountArt.Visible = !m.llAscunde .lblTotalNetArt.Visible = !m.llAscunde .txtTotalNetArt.Visible = !m.llAscunde - .lblTotalSalvatArt.Visible = !m.llAscunde - .txtTotalSalvatArt.Visible = !m.llAscunde ENDWITH This.ActualizeazaVerdictActRul(m.lnCurs, m.lnMultiplicator, !m.llAscunde) This.pgfArticole.PAGE3.Refresh() @@ -13051,7 +13039,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" LPARAMETERS tnCurs, tnMultiplicator, tlAplicabil LOCAL lcCont, lnTotalAct, lnTotalRul, lnCorectieNestocate, lnWorkArea, lnRecnoTact, lnRecnoTrul, lnRecnoTvd - LOCAL llAjustat, llVerdictSigur, lcVerdict, lnForeColor + LOCAL llAjustat, llVerdictSigur, lcVerdict, lnForeColor, lnRanduriRul This.lRulAjustat = .F. This.nTotalActRon = 0 @@ -13082,6 +13070,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" lnTotalAct = 0 lnTotalRul = 0 + lnRanduriRul = 0 lnCorectieNestocate = 0 lnWorkArea = Select() @@ -13101,6 +13090,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" SELECT trul SUM (Nvl(cant,0) + Nvl(cante,0)) * Nvl(pretvtva,0) ; TO lnTotalRul FOR Nvl(sters,0) = 0 AND Nvl(id_tip_rulaj,0) = 0 + COUNT FOR Nvl(sters,0) = 0 TO lnRanduriRul IF Between(m.lnRecnoTrul, 1, Reccount('trul')) GO (m.lnRecnoTrul) IN trul ENDIF @@ -13127,19 +13117,22 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" llVerdictSigur = (This.nTipVanzare <> 51) DO CASE + CASE m.lnRanduriRul = 0 + lcVerdict = 'Verdict note/rulaje: nu se aplica (documentul nu are rulaje)' + lnForeColor = RGB(90,90,90) CASE !m.llVerdictSigur - lcVerdict = 'Verdict ACT/RUL: nu se aplica (informativ, date de import)' + lcVerdict = 'Verdict note/rulaje: nu se aplica (date de import)' lnForeColor = RGB(90,90,90) CASE Abs(This.nTotalActRon - This.nTotalRulRon) <= 0.02 - lcVerdict = 'Verdict ACT/RUL: sincronizat (informativ)' + lcVerdict = 'Verdict note/rulaje: sincronizat' lnForeColor = RGB(0,128,0) OTHERWISE - lcVerdict = 'Verdict ACT/RUL: divergent (informativ, nu e eroare)' + lcVerdict = 'Verdict note/rulaje: divergent (informativ, nu e eroare)' lnForeColor = RGB(180,120,0) ENDCASE WITH This.pgfArticole.PAGE3 - .lblTotalRulArt.Caption = IIF(This.lRulAjustat, 'Total RUL (ajustat):', 'Total RUL:') + .lblTotalRulArt.Caption = IIF(This.lRulAjustat, 'Total rulaje (ajustat):', 'Total rulaje:') .lblVerdictArt.Caption = m.lcVerdict .lblVerdictArt.ForeColor = m.lnForeColor ENDWITH @@ -13194,7 +13187,6 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" IF !Used('tvd') OR !Used('trul') RETURN ENDIF - PUBLIC gnButon gnButon = 2 loDlg = Createobject('frm_sincronizare_articole') loDlg.oFormArticole = This @@ -13227,6 +13219,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" this.but_afiseaza_rulaje.cPictureUp = m.lcPictureUp2 this.pgfArticole.Visible = m.llAfiseazaRulaje + this.but_nouR.Visible = m.llAfiseazaRulaje this.but_copiazaR.Visible = m.llAfiseazaRulaje this.but_modificaR.Visible = m.llAfiseazaRulaje this.but_stergeR.Visible = m.llAfiseazaRulaje @@ -13457,6 +13450,43 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" this.grid1.SetFocus ENDPROC + PROCEDURE aseaza_pagina_articole + *!* asezare explicita: Anchor nu se aplica pe pagina inactiva, iar formularul se maximizeaza cu PAGE1 activa + LOCAL lnLatime, lnInaltime, lnSusRand1, lnSusRand2 + + IF !This.lAreArticoleVanzari OR This.pgfArticole.PageCount < 3 + RETURN + ENDIF + + lnLatime = This.pgfArticole.PageWidth + lnInaltime = This.pgfArticole.PageHeight + IF m.lnLatime < 200 OR m.lnInaltime < 130 + RETURN + ENDIF + + lnSusRand1 = m.lnInaltime - 47 + lnSusRand2 = m.lnSusRand1 + 22 + + WITH This.pgfArticole.PAGE3 + .grdArticoleFactura.Width = m.lnLatime - 1 + .grdArticoleFactura.Height = m.lnInaltime - 85 + + .txtTotalLiniiArt.Top = m.lnSusRand1 + .txtDiscountArt.Top = m.lnSusRand1 + .txtTotalNetArt.Top = m.lnSusRand1 + .lblTotalLiniiArt.Top = m.lnSusRand1 + 4 + .lblDiscountArt.Top = m.lnSusRand1 + 4 + .lblTotalNetArt.Top = m.lnSusRand1 + 4 + + .txtTotalActArt.Top = m.lnSusRand2 + .txtTotalRulArt.Top = m.lnSusRand2 + .lblTotalActArt.Top = m.lnSusRand2 + 4 + .lblTotalRulArt.Top = m.lnSusRand2 + 4 + .lblVerdictArt.Top = m.lnSusRand2 + 4 + .lblVerdictArt.Width = Max(m.lnLatime - 462, 200) + ENDWITH + ENDPROC + PROCEDURE calculeazatotal Local lcCursor, lcSelect, lnRecno lcSelect = Select() @@ -13474,6 +13504,9 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Select (m.lcSelect) + *!* bara de jos arata si totalul notelor - se reface la orice recalculare a notei, nu doar la editarea articolelor + This.ActualizeazaBaraTotaluri() + ENDPROC PROCEDURE calculeaza_valori_articol @@ -13675,6 +13708,11 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" ENDPROC PROCEDURE do_adauga_rul + Local loEditor + IF This.pgfArticole.ActivePage = 3 + loEditor = Createobject('ArticoleNotaEditor', This) + loEditor.AdaugaLinie() + ENDIF ENDPROC PROCEDURE do_adauga_tva_exigibil @@ -13875,7 +13913,12 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" PROCEDURE do_copie_rul Local lnrecno, loadd - Local lcRul, lnPagina + Local lcRul, lnPagina, loEditor + IF This.pgfArticole.ActivePage = 3 + loEditor = Createobject('ArticoleNotaEditor', This) + loEditor.DuplicaLinie() + RETURN + ENDIF lnPagina = thisform.pgfArticole.ActivePage lcRul = IIF(m.lnPagina = 1, 'trul', 'trul_obinv') @@ -14201,7 +14244,12 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" PROCEDURE do_sterge_rul Local lcRul - Local lnPagina, lnRecno + Local lnPagina, lnRecno, loEditor + IF This.pgfArticole.ActivePage = 3 + loEditor = Createobject('ArticoleNotaEditor', This) + loEditor.ComutaSters() + RETURN + ENDIF lnPagina = This.pgfArticole.ActivePage lcRul = IIF(m.lnPagina = 1, 'trul', 'trul_obinv') @@ -14383,8 +14431,8 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" SELECT tvd SCAN FOR Nvl(sters,0) <> 1 lnLiniiActive = m.lnLiniiActive + 1 - IF Nvl(cantitate,0) <= 0 - AMESSAGEBOX("Linia '" + Alltrim(Nvl(denumire,'')) + "' are cantitatea 0 sau negativa.",0+16,"Eroare") + IF Nvl(cantitate,0) = 0 + AMESSAGEBOX("Linia '" + Alltrim(Nvl(denumire,'')) + "' are cantitatea 0.",0+16,"Eroare") IF Between(m.lnRecnoTvd,1,Reccount('tvd')) GO (m.lnRecnoTvd) IN tvd ENDIF @@ -14399,7 +14447,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" SELECT (m.lnAreaTvd) RETURN .F. ENDIF - IF Nvl(id_articol,0) = 0 + IF Nvl(id_vanzare_det,0) = 0 AND Nvl(id_articol,0) = 0 AMESSAGEBOX("Linia '" + Alltrim(Nvl(denumire,'')) + "' nu are articol asociat.",0+16,"Eroare") IF Between(m.lnRecnoTvd,1,Reccount('tvd')) GO (m.lnRecnoTvd) IN tvd @@ -14434,20 +14482,13 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" SELECT (m.lnAreaTvd) ENDIF *!* al doilea punct de declansare al sincronizarii: enumerarea diferentelor la salvare, cu - *!* continuarea salvarii daca utilizatorul renunta - de aceea llRet nu se schimba aici - IF m.llRet AND This.lAreArticoleVanzari AND !This.lArticoleReadOnly - LOCAL lnAreaInainte, lnDivergente - lnAreaInainte = Select() - lnDivergente = 0 - IF ConstruiestePropunereSincronizare('RUL_SURSA') - SELECT propunere_sincronizare - COUNT FOR Inlist(Alltrim(actiune),'Modificare','Adaugare','Semnalare') TO lnDivergente - ENDIF - IF m.lnAreaInainte > 0 - SELECT (m.lnAreaInainte) - ENDIF - *!* liniile N-A singure nu opresc salvarea: sunt "nu se poate compara", nu divergente - IF m.lnDivergente > 0 + *!* continuarea salvarii daca utilizatorul renunta - de aceea llRet nu se schimba aici; + *!* pe document fara linii active nu porneste: propunerea ar marca toata sursa ca "Adaugare" + IF m.llRet AND This.lAreArticoleVanzari AND !This.lArticoleReadOnly AND Used('tvd') AND m.lnLiniiActive > 0 + LOCAL lcSemnaturaAcum + lcSemnaturaAcum = This.SemnaturaDivergenteSincronizare() + *!* doar divergentele aparute in sesiunea curenta deschid dialogul; N-A nu intra in semnatura + IF !Empty(m.lcSemnaturaAcum) AND !(m.lcSemnaturaAcum == This.cSemnaturaSincronizare) This.AfiseazaDialogSincronizareArticole() ENDIF ENDIF @@ -14753,6 +14794,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" this.cmdSelect.Top = this.grid1.Top + this.grid1.Height this.lblSuma.Top = this.grid1.Top + this.grid1.Height this.txtSuma.Top = this.grid1.Top + this.grid1.Height + This.aseaza_pagina_articole() ENDPROC @@ -14795,6 +14837,54 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" ENDIF ENDPROC + PROCEDURE SemnaturaDivergenteSincronizare + *!* semnatura divergentelor RUL/articole; comparata cu cea de la deschidere, ca sa nu se semnaleze desincronizari preexistente + LOCAL lcSemnatura, lnArea, lnRecTrul, lnRecTvd, lnRanduriRul + + lcSemnatura = '' + IF !This.lAreArticoleVanzari OR !Used('tvd') OR !Used('trul') + RETURN m.lcSemnatura + ENDIF + + lnArea = Select() + lnRecTrul = Recno('trul') + lnRecTvd = Recno('tvd') + + *!* fara rulaje nu exista cu ce compara: propunerea ar marca toate articolele ca "Semnalare" + SELECT trul + COUNT FOR Nvl(sters,0) <> 1 TO lnRanduriRul + IF m.lnRanduriRul = 0 + IF Between(m.lnRecTrul, 1, Reccount('trul')) + GO (m.lnRecTrul) IN trul + ENDIF + IF m.lnArea > 0 + SELECT (m.lnArea) + ENDIF + RETURN m.lcSemnatura + ENDIF + + IF ConstruiestePropunereSincronizare('RUL_SURSA') + SELECT propunere_sincronizare + SCAN FOR Inlist(Alltrim(Nvl(actiune,'')),'Modificare','Adaugare','Semnalare') + lcSemnatura = m.lcSemnatura + Transform(Nvl(id_articol,0)) + '|' + Alltrim(Nvl(actiune,'')) + '|' + ; + Transform(Round(Nvl(cantitate_veche,0),3)) + '|' + Transform(Round(Nvl(cantitate_noua,0),3)) + '|' + ; + Transform(Round(Nvl(pret_vechi,0),4)) + '|' + Transform(Round(Nvl(pret_nou,0),4)) + ';' + ENDSCAN + ENDIF + + IF Between(m.lnRecTrul, 1, Reccount('trul')) + GO (m.lnRecTrul) IN trul + ENDIF + IF Between(m.lnRecTvd, 1, Reccount('tvd')) + GO (m.lnRecTvd) IN tvd + ENDIF + IF m.lnArea > 0 + SELECT (m.lnArea) + ENDIF + + RETURN m.lcSemnatura + ENDPROC + PROCEDURE Show Lparameters nStyle, tlMaximize Local lnHeight @@ -14858,14 +14948,15 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" This.pgfArticole.PageCount = 3 This.pgfArticole.PAGE3.grdArticoleFactura.Refresh() *!* factura trimisa in eFactura: articolele raman vizibile, doar editarea lor se opreste - This.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled = !This.lArticoleReadOnly - This.pgfArticole.PAGE3.cmdStergeArticol.Enabled = !This.lArticoleReadOnly + This.but_nouR.Enabled = !This.lArticoleReadOnly This.pgfArticole.PAGE3.txtDiscountArt.ReadOnly = This.lArticoleReadOnly This.pgfArticole.PAGE3.lblArticoleReadOnly.Visible = This.lArticoleReadOnly This.pgfArticole.PAGE3.cmdSincronizeazaArticole.Enabled = !This.lArticoleReadOnly This.ActualizeazaBaraTotaluri() + This.cSemnaturaSincronizare = This.SemnaturaDivergenteSincronizare() ELSE This.pgfArticole.PageCount = 2 + This.but_nouR.Enabled = .F. ENDIF @@ -14883,6 +14974,7 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" This.afiseaza_rulaje() ENDIF This.resize_grid1() + This.aseaza_pagina_articole() @@ -14955,6 +15047,35 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" SELECT (m.lcSelect) ENDPROC + PROCEDURE updateexplicatiesaftart + * Daca nu este activata SAFT 406 nu fac nimic + IF !m.gl406 + RETURN + ENDIF + + Local ldDataAct, lnIdJtva, lnIdPart, lnTaxCode, lcSelect, llN50, llN100, llNeexigibil + LOCAL ARRAY laNesosit[1] + + lcSelect = SELECT() + + ldDataAct = tAct.dataact + lnIdJtva = tvd.id_jtva_coloana + lnIdPart = Nvl(tAct.id_partc, tAct.id_partd) + + llN50 = .F. + llN100 = .F. + + SELECT COUNT(*) as nr FROM tAct WHERE LEFT(scd,3) = '418' OR LEFT(scc,3) = '408' INTO ARRAY laNesosit + llNeexigibil = (laNesosit[1] > 0) && factura neintocmita/nesosita + + lnTaxCode = GetTaxCodeIdPart(m.gnAn, m.gnLuna, m.ldDataAct, m.lnIdJtva, m.lnIdPart, m.llN50, m.llN100, m.llNeexigibil) + Replace taxcode With m.lnTaxCode In tvd + + This.pgfArticole.PAGE3.grdArticoleFactura.cTaxcodeArt.Refresh() + + SELECT (m.lcSelect) + ENDPROC + PROCEDURE updateexplicatiesaftrul * Daca nu este activata SAFT 406 nu fac nimic IF !m.gl406 @@ -15197,7 +15318,12 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" ENDPROC PROCEDURE But_modificaR.Click - Local lcRul + Local lcRul, loEditor + IF thisform.pgfArticole.ActivePage = 3 + loEditor = Createobject('ArticoleNotaEditor', Thisform) + loEditor.ModificaNomenclator(thisform.pccontrol) + RETURN + ENDIF lcRul = IIF(thisform.pgfArticole.ActivePage = 1, 'trul', 'trul_obinv') thisform.do_modifica(thisform.pcx_item, thisform.pccontrol, thisform.pnid_item, m.lcRul) @@ -16537,47 +16663,9 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" *Nu sterge ENDPROC - PROCEDURE pgfArticole.PAGE3.cmdAdaugaArticol.Click - *!* alege un articol din nomenclator (fara stoc, fara politica de preturi - decizia 34) si il - *!* adauga ca linie noua in tvd (id_vanzare_det=0), prin dialogul real frm_articol_factura; - *!* daca documentul e in valuta (tvanz.in_valuta=1), poArticol.tip_valuta/Curs/multiplicator/ - *!* nume_val/id_valuta se populeaza cu valorile documentului, ca dialogul sa lucreze in valuta - LOCAL loArticolAles, lnIdArticol, llInValutaDoc, lnCursDoc, lnMultDoc, lcNumeValDoc, lnIdValutaDoc - IF !Used('tvd') OR !Thisform.lAreArticoleVanzari OR Thisform.lArticoleReadOnly - RETURN - ENDIF - loArticolAles = caut_articol() - lnIdArticol = Nvl(loArticolAles.id_articol, 0) - IF Empty(m.lnIdArticol) - RETURN - ENDIF - - llInValutaDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.in_valuta, 0) = 1, .F.) - lnCursDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.curs, 1), 1) - lnMultDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.multiplicator, 1), 1) - lcNumeValDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.nume_val, ''), '') - lnIdValutaDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, tvanz.id_valuta, .Null.) - - PRIVATE poArticol, poDate, gnScadereStoc - poArticol = CreeazaPoArticolNouTvd(m.lnIdArticol, loArticolAles.codmat, loArticolAles.denumire, loArticolAles.um, loArticolAles.cont, ; - m.llInValutaDoc, m.lnCursDoc, m.lnMultDoc, m.lcNumeValDoc, m.lnIdValutaDoc) - poDate = Createobject('Empty') - AddProperty(poDate, 'tip', Thisform.nTipVanzare) - AddProperty(poDate, 'in_valuta', 0) - AddProperty(poDate, 'dataact', Iif(Used('tact') And Reccount('tact') > 0, Nvl(tact.dataact, Date()), Date())) - gnScadereStoc = 0 - - PUBLIC gnButon - gnButon = 2 - LOCAL loDlg - loDlg = Createobject('frm_articol_factura', 1, .F.) - loDlg.Show(1) - - IF m.gnButon = 1 - Thisform.AdaugaLinieTvdDinArticol(poArticol) - Thisform.pgfArticole.PAGE3.grdArticoleFactura.Refresh() - ENDIF - Release loDlg + PROCEDURE pgfArticole.PAGE3.Activate + Thisform.aseaza_pagina_articole() + Thisform.ActualizeazaBaraTotaluri() ENDPROC PROCEDURE pgfArticole.PAGE3.cmdSincronizeazaArticole.Click @@ -16588,15 +16676,17 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Thisform.AfiseazaDialogSincronizareArticole() ENDPROC - PROCEDURE pgfArticole.PAGE3.cmdStergeArticol.Click - *!* comuta flagul sters pe linia curenta din tvd - stergerea e logica, ramane vizibila (grizata) pana la salvare - IF !Used('tvd') OR Reccount('tvd') = 0 OR Thisform.lArticoleReadOnly - RETURN + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.AfterRowColChange + Lparameters nColIndex + DODEFAULT(m.nColIndex) + Thisform.but_modificaR.Enabled = (Thisform.pncolumnorder = m.nColIndex) AND !Thisform.lArticoleReadOnly + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.BeforeRowColChange + LPARAMETERS nColIndex + IF Thisform.pncolumnorder # m.nColIndex + STORE [] TO Thisform.pccontrol ENDIF - SELECT tvd - REPLACE sters WITH IIF(Nvl(sters,0) = 1, 0, 1), lmodificat WITH .T. - Thisform.pgfArticole.PAGE3.grdArticoleFactura.Refresh() - Thisform.ActualizeazaBaraTotaluri() ENDPROC PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cCantitateArt.Text1.Valid @@ -16613,6 +16703,70 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" Thisform.oldvalue = This.Value ENDPROC + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cDenumireArt.Text1.DblClick + Local loEditor + loEditor = Createobject('ArticoleNotaEditor', Thisform) + loEditor.ModificaNomenclator(Thisform.pccontrol) + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cDenumireArt.Text1.GotFocus + Thisform.pccontrol = Alltrim(This.ControlSource) + Thisform.pncolumnorder = This.Parent.ColumnOrder + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cDenumireArt.Text1.InteractiveChange + Local loEditor + loEditor = Createobject('ArticoleNotaEditor', Thisform) + loEditor.ModificaNomenclator(Thisform.pccontrol) + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cExplicatieArt.Text1.When + IF Thisform.lArticoleReadOnly OR Nvl(tvd.id_vanzare_set,0) <> 0 + RETURN .F. + ENDIF + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cExplicatieTvaArt.Text1.DblClick + Local loEditor + loEditor = Createobject('ArticoleNotaEditor', Thisform) + loEditor.ModificaNomenclator(Thisform.pccontrol) + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cExplicatieTvaArt.Text1.GotFocus + *!* coloana afiseaza denumirea din crsJtvaTemp, deci ControlSource e expresie - campul editat se da explicit + Thisform.pccontrol = 'tvd.id_jtva_coloana' + Thisform.pncolumnorder = This.Parent.ColumnOrder + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cExplicatieTvaArt.Text1.InteractiveChange + Local loEditor + loEditor = Createobject('ArticoleNotaEditor', Thisform) + loEditor.ModificaNomenclator(Thisform.pccontrol) + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cGestiuneArt.Text1.DblClick + Local loEditor + loEditor = Createobject('ArticoleNotaEditor', Thisform) + loEditor.ModificaNomenclator(Thisform.pccontrol) + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cGestiuneArt.Text1.GotFocus + Thisform.pccontrol = Alltrim(This.ControlSource) + Thisform.pncolumnorder = This.Parent.ColumnOrder + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cGestiuneArt.Text1.InteractiveChange + Local loEditor + loEditor = Createobject('ArticoleNotaEditor', Thisform) + loEditor.ModificaNomenclator(Thisform.pccontrol) + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cLotArt.Text1.When + IF Thisform.lArticoleReadOnly OR Nvl(tvd.id_vanzare_set,0) <> 0 + RETURN .F. + ENDIF + ENDPROC + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cPretAchizitieArt.Text1.When IF Thisform.lArticoleReadOnly OR Nvl(tvd.id_vanzare_set,0) <> 0 OR Nvl(tvd.id_vanzare_det,0) <> 0 RETURN .F. @@ -16648,6 +16802,64 @@ DEFINE CLASS frm_modific2024 AS _frmbase OF "_frm_base.vcx" RETURN !Thisform.lArticoleReadOnly AND Nvl(tvd.id_vanzare_set,0) = 0 ENDPROC + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cProcTvavArt.Text1.Valid + IF NVL(Thisform.oldvalue, 0) <> NVL(This.Value, 0) + SELECT tvd + *!* editarea manuala a cotei nu mai corespunde explicatiei TVA alese - corelarea SAF-T se goleste + REPLACE id_jtva_coloana WITH NULL, taxcode WITH NULL + Thisform.calculeaza_valori_articol() + Thisform.oldvalue = This.Value + This.Parent.Parent.Refresh() + ENDIF + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cProcTvavArt.Text1.When + IF Thisform.lArticoleReadOnly OR Nvl(tvd.id_vanzare_set,0) <> 0 + RETURN .F. + ENDIF + Thisform.oldvalue = This.Value + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cSerieArt.Text1.When + IF Thisform.lArticoleReadOnly OR Nvl(tvd.id_vanzare_set,0) <> 0 + RETURN .F. + ENDIF + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cTaxcodeArt.Text1.DblClick + Local loEditor + loEditor = Createobject('ArticoleNotaEditor', Thisform) + loEditor.ModificaNomenclator(Thisform.pccontrol) + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cTaxcodeArt.Text1.GotFocus + Thisform.pccontrol = Alltrim(This.ControlSource) + Thisform.pncolumnorder = This.Parent.ColumnOrder + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cTaxcodeArt.Text1.InteractiveChange + Local loEditor + loEditor = Createobject('ArticoleNotaEditor', Thisform) + loEditor.ModificaNomenclator(Thisform.pccontrol) + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cValutaArt.Text1.DblClick + Local loEditor + loEditor = Createobject('ArticoleNotaEditor', Thisform) + loEditor.ModificaNomenclator(Thisform.pccontrol) + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cValutaArt.Text1.GotFocus + Thisform.pccontrol = Alltrim(This.ControlSource) + Thisform.pncolumnorder = This.Parent.ColumnOrder + ENDPROC + + PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.cValutaArt.Text1.InteractiveChange + Local loEditor + loEditor = Createobject('ArticoleNotaEditor', Thisform) + loEditor.ModificaNomenclator(Thisform.pccontrol) + ENDPROC + PROCEDURE pgfArticole.PAGE3.txtDiscountArt.Valid Thisform.ActualizeazaBaraTotaluri() ENDPROC @@ -16661,7 +16873,6 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" *< OBJECTDATA: ObjPath="lblDirectie" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="optDirectie" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="grdPropunere" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="lblAvertisment" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="grdPropunere.cArticolProp.Header1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="grdPropunere.cCantVecheProp.Header1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="grdPropunere.cCantNouaProp.Header1" UniqueID="" Timestamp="" /> @@ -16670,6 +16881,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" *< OBJECTDATA: ObjPath="grdPropunere.cActiuneProp.Header1" UniqueID="" Timestamp="" /> * + *m: actualizeazacapetecoloane *m: construiesteenumerare *p: cdirectie *p: oformarticole @@ -16705,6 +16917,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" But_renunt1.Left = 639 But_renunt1.Name = "But_renunt1" But_renunt1.TabIndex = 4 + But_renunt1.ToolTipText = "Inchide fara sa schimbe nimic - salvarea continua" But_renunt1.Top = 1 But_renunt1.ZOrderSet = 6 * @@ -16714,8 +16927,8 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" DeleteMark = .F., ; FontSize = 9, ; GridLineColor = 128,128,128, ; - HeaderHeight = 22, ; - Height = 300, ; + HeaderHeight = 36, ; + Height = 340, ; Left = 16, ; Name = "grdPropunere", ; ReadOnly = .T., ; @@ -16728,40 +16941,40 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" Column1.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; Column1.Name = "cArticolProp", ; Column1.ReadOnly = .T., ; - Column1.Width = 220, ; + Column1.Width = 180, ; Column2.ControlSource = "propunere_afisata.cantitate_veche", ; Column2.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; Column2.Format = "R", ; Column2.InputMask = (get_mask(12,gnPCANT)), ; Column2.Name = "cCantVecheProp", ; Column2.ReadOnly = .T., ; - Column2.Width = 88, ; + Column2.Width = 100, ; Column3.ControlSource = "propunere_afisata.cantitate_noua", ; Column3.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; Column3.Format = "R", ; Column3.InputMask = (get_mask(12,gnPCANT)), ; Column3.Name = "cCantNouaProp", ; Column3.ReadOnly = .T., ; - Column3.Width = 88, ; + Column3.Width = 100, ; Column4.ControlSource = "propunere_afisata.pret_vechi", ; Column4.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; Column4.Format = "R", ; Column4.InputMask = (get_mask(12,gnPPRET)), ; Column4.Name = "cPretVechiProp", ; Column4.ReadOnly = .T., ; - Column4.Width = 88, ; + Column4.Width = 100, ; Column5.ControlSource = "propunere_afisata.pret_nou", ; Column5.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; Column5.Format = "R", ; Column5.InputMask = (get_mask(12,gnPPRET)), ; Column5.Name = "cPretNouProp", ; Column5.ReadOnly = .T., ; - Column5.Width = 88, ; + Column5.Width = 100, ; Column6.ControlSource = "propunere_afisata.actiune", ; Column6.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; Column6.Name = "cActiuneProp", ; Column6.ReadOnly = .T., ; - Column6.Width = 96 + Column6.Width = 88 *< END OBJECT: ClassLib="_grd_base.vcx" BaseClass="grid" /> ADD OBJECT 'grdPropunere.cActiuneProp.Header1' AS header WITH ; @@ -16782,7 +16995,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" ADD OBJECT 'grdPropunere.cCantNouaProp.Header1' AS header WITH ; Alignment = 2, ; - Caption = "Cantitate noua", ; + Caption = "Cantitate noua, din rulaj", ; FontName = "Arial", ; FontSize = 9, ; Name = "Header1", ; @@ -16791,7 +17004,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" ADD OBJECT 'grdPropunere.cCantVecheProp.Header1' AS header WITH ; Alignment = 2, ; - Caption = "Cantitate veche", ; + Caption = "Cantitate acum in factura", ; FontName = "Arial", ; FontSize = 9, ; Name = "Header1", ; @@ -16800,7 +17013,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" ADD OBJECT 'grdPropunere.cPretNouProp.Header1' AS header WITH ; Alignment = 2, ; - Caption = "Pret nou", ; + Caption = "Pret nou, din rulaj", ; FontName = "Arial", ; FontSize = 9, ; Name = "Header1", ; @@ -16809,23 +17022,13 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" ADD OBJECT 'grdPropunere.cPretVechiProp.Header1' AS header WITH ; Alignment = 2, ; - Caption = "Pret vechi", ; + Caption = "Pret acum in factura", ; FontName = "Arial", ; FontSize = 9, ; Name = "Header1", ; WordWrap = .T. *< END OBJECT: BaseClass="header" /> - ADD OBJECT 'lblAvertisment' AS _label WITH ; - AutoSize = .T., ; - Caption = "Propunere calculata automat - verificati valorile inainte de aplicare.", ; - ForeColor = 153,0,0, ; - Left = 16, ; - Name = "lblAvertisment", ; - Top = 420, ; - ZOrderSet = 3 - *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> - ADD OBJECT 'lblDirectie' AS _label WITH ; AutoSize = .T., ; Caption = "Directie sincronizare:", ; @@ -16860,10 +17063,25 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" OPTION2.Top = 24 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="optiongroup" /> + PROCEDURE ActualizeazaCapeteColoane + *!* capetele coloanelor spun singure ce e sursa si ce se suprascrie, in loc de "vechi/nou" plus o + *!* legenda separata - se refac la fiecare schimbare de directie + LOCAL lcTinta, lcSursa + lcTinta = IIF(This.cDirectie == 'ARTICOLE_SURSA', 'rulaj', 'factura') + lcSursa = IIF(This.cDirectie == 'ARTICOLE_SURSA', 'factura', 'rulaj') + WITH This.grdPropunere + .cCantVecheProp.Header1.Caption = 'Cantitate acum in ' + m.lcTinta + .cCantNouaProp.Header1.Caption = 'Cantitate noua, din ' + m.lcSursa + .cPretVechiProp.Header1.Caption = 'Pret acum in ' + m.lcTinta + .cPretNouProp.Header1.Caption = 'Pret nou, din ' + m.lcSursa + ENDWITH + ENDPROC + PROCEDURE ConstruiesteEnumerare *!* propunere_sincronizare se recreeaza la fiecare apel, deci gridul nu poate sta legat de el; *!* continutul se copiaza in propunere_afisata, cursorul stabil creat in Load LOCAL lnAreaOrigine, lnAplicabile + This.ActualizeazaCapeteColoane() lnAreaOrigine = Select() lnAplicabile = 0 ConstruiestePropunereSincronizare(This.cDirectie) diff --git a/docs/reguli_lucru.md b/docs/reguli_lucru.md index 253aac4..a073a3e 100644 --- a/docs/reguli_lucru.md +++ b/docs/reguli_lucru.md @@ -43,6 +43,13 @@ propune COMPLETAREA unei functii/tabele/view comune, nu o varianta paralela. 80/20: solutia cea mai simpla care rezolva cazul real. Completeaza `inventar-comun.md` la orice descoperire/creare de element comun nedocumentat. + **Cod nou: clase in `.prg`, nu metode in `.vcx`/`.scx`.** Logica se incapsuleaza intr-o clasa + (`Define Class ... As Custom`) dintr-un `.prg`; formularul sau clasa vizuala doar instantiaza + obiectul (`Createobject`) si il apeleaza, metoda din binar ramanand un apel de o linie. Sablon: + `COMUN\programe\anaf_efactura.prg` (`AnafeFacturaServer`, `ANAFeFactura`), apelat din + `clase\anaf_efactura.vcx`. Motivul e de intretinere: un `.prg` se editeaza direct si diff-ul lui + se citeste in git, pe cand codul pus ca metoda in binar trece prin FoxBin2Prg si write-back si + se urmareste greu. 4. Testare headless (fara IDE): `vfp9.exe -A -T "" ` din PowerShell. Mediu, sabloane, capcane, depanare: `depanare_testare_vfp.md`. 5. Editare .vcx/.scx pe text (cache, cp1250 byte-safe, fidelity-check): `flux-editare-vfp-text.md`. diff --git a/docs/todos.txt b/docs/todos.txt index 93cce9c..55617b0 100644 --- a/docs/todos.txt +++ b/docs/todos.txt @@ -52,3 +52,4 @@ INTERESUL MEU ESTE SA SIMPLIFIC INTERFATA, SA FIE MAI EFICIENTA, SA NU FIE 2 FOR 20. ROAFACTURARE - FACTURA DIN COMANDA, COMANDA SE CONSIDERA FACTURATA DACA EXISTA FACTURI CU ACELEASI CANTITATI. AS VREA SA PUN MARKER DE FACTURAT PE COMANDA, CA SA NU MAI CAUT FACTURI - ESTE COSTISITOR. DOAR CA TREBUIE SA FII ATENT CA O COMANDA SE POATE FACTURA TOTAL/PARTIAL, SAU DIN MAI MULTE FACTURI, SAU SE POATE INCHIDE FORTAT. ACUM INCHIDEREA FORTATA ADAUGA CANTITATI NEGATIVE PE COMANDA, CA SA FACA CANTITATILE NEFACTURATE ZERO. +21. ROACONT - in formularul de verificare coduri fiscale, ar trebui sa fie si perioadele de tva, tva incasare, inactivitate, la fel ca in istoric, pentru ca utilizatorul sa nu mai caute altundeva. de asemenea, in messagebox pentru verificarea automata pe ANAF individuala ar trebui sa fie toate aceste informatii. sa se poata edita partenerul din formularul de verificare coduri fiscale prin dublu-click pe numele/codul fiscal al partenerului, similar cu formularul saft. \ No newline at end of file diff --git a/programe/ofacturare_editare.prg b/programe/ofacturare_editare.prg index 1f88da7..36d6645 100644 --- a/programe/ofacturare_editare.prg +++ b/programe/ofacturare_editare.prg @@ -11,7 +11,9 @@ *!* pentru adaugarea unei linii noi prin dialogul frm_articol_factura (populat cu valuta documentului *!* cand acesta e in valuta), scrierea in VANZARI_DETALII a liniilor editate/adaugate/sterse, si *!* compararea/aplicarea sincronizarii cantitate/pret intre rulaje (trul) si articolele facturii (tvd), -*!* agregate pe id_articol, in ambele sensuri (documentele in valuta raman doar semnalate, neaplicate) +*!* agregate pe id_articol, in ambele sensuri (documentele in valuta raman doar semnalate, neaplicate); +*!* pe linia de articol se poate alege si explicatia TVA (filtrata pe cota liniei), care recoreleaza +*!* codul SAF-T, iar liniile deja salvate se actualizeaza cu toate campurile pe care grila le schimba *!* parametru: id_fact @@ -498,8 +500,22 @@ FUNCTION ScrieArticoleFacturaEditate SELECT (m.lcAliasArt) lnRecnoArt = Recno() SCAN FOR id_vanzare_det > 0 AND Nvl(sters,0) <> 1 + *!* toate campurile pe care grila si nomenclatoarele le pot schimba - altfel alegerile de pe + *!* liniile deja salvate (cod TVA, explicatie TVA, gestiune, valuta, articol) s-ar pierde tacut lcSql = [update vanzari_detalii set sters = 0, cantitate = ] + Alltrim(Str(Nvl(cantitate,0),18,3)) + ; [, pret = ] + Alltrim(Str(Nvl(pret,0),18,4)) + [, pret_cu_tva = ] + Alltrim(Str(Nvl(pret_cu_tva,0))) + ; + [, pret_achizitie = ] + Iif(Isnull(pret_achizitie),[NULL],Alltrim(Str(pret_achizitie,18,4))) + ; + [, proc_tvav = ] + Iif(Isnull(proc_tvav),[NULL],Alltrim(Str(proc_tvav,18,4))) + ; + [, discount_unitar = ] + Iif(Isnull(discount_unitar),[NULL],Alltrim(Str(discount_unitar,18,4))) + ; + [, id_articol = ] + Iif(Isnull(id_articol),[NULL],Alltrim(Str(id_articol))) + ; + [, id_gestiune = ] + Iif(Isnull(id_gestiune),[NULL],Alltrim(Str(id_gestiune))) + ; + [, id_valuta = ] + Iif(Isnull(id_valuta),[NULL],Alltrim(Str(id_valuta))) + ; + [, id_jtva_coloana = ] + Iif(Isnull(id_jtva_coloana),[NULL],Alltrim(Str(id_jtva_coloana))) + ; + [, taxcode = ] + Iif(Isnull(taxcode),[NULL],Alltrim(Str(taxcode))) + ; + [, cont = ] + Iif(Empty(Nvl(cont,'')),[NULL],['] + OracleSpecialCharacters(Alltrim(Nvl(cont,''))) + [']) + ; + [, serie = ] + Iif(Empty(Nvl(serie,'')),[NULL],['] + OracleSpecialCharacters(Alltrim(Nvl(serie,''))) + [']) + ; + [, explicatie = ] + Iif(Empty(Nvl(explicatie,'')),[NULL],['] + OracleSpecialCharacters(Alltrim(Nvl(explicatie,''))) + [']) + ; + [, lot = ] + Iif(Empty(Nvl(lot,'')),[NULL],['] + OracleSpecialCharacters(Alltrim(Nvl(lot,''))) + [']) + ; [, id_utils = ] + Alltrim(Str(gnIdUtil)) + [, dataoras = sysdate ] + ; [where id_vanzare_det = ] + Alltrim(Str(id_vanzare_det)) + [ and id_vanzare = ] + Alltrim(Str(m.tnIdVanzare)) llSucces = goExecutor.oExecuta(m.lcSql) @@ -521,16 +537,16 @@ FUNCTION ScrieArticoleFacturaEditate SCAN FOR id_vanzare_det = 0 AND Nvl(sters,0) <> 1 lcSql = [insert into vanzari_detalii (id_vanzare, id_articol, cantitate, pret, pret_cu_tva, proc_tvav, discount_unitar, ] + ; [id_gestiune, cont, id_valuta, id_jtva_coloana, serie, explicatie, taxcode, lot, pret_achizitie, id_utils, dataoras) values (] + ; - Alltrim(Str(m.tnIdVanzare)) + [,] + Alltrim(Str(Nvl(id_articol,0))) + [,] + Alltrim(Str(Nvl(cantitate,0),18,3)) + [,] + ; - Alltrim(Str(Nvl(pret,0),18,4)) + [,] + Alltrim(Str(Nvl(pret_cu_tva,0))) + [,] + Alltrim(Str(Nvl(proc_tvav,0),18,4)) + [,] + ; - Alltrim(Str(Nvl(discount_unitar,0),18,4)) + [,] + Iif(Isnull(id_gestiune),[NULL],Alltrim(Str(id_gestiune))) + [,] + ; + Alltrim(Str(m.tnIdVanzare)) + [,] + Iif(Isnull(id_articol),[NULL],Alltrim(Str(id_articol))) + [,] + Alltrim(Str(Nvl(cantitate,0),18,3)) + [,] + ; + Alltrim(Str(Nvl(pret,0),18,4)) + [,] + Alltrim(Str(Nvl(pret_cu_tva,0))) + [,] + Iif(Isnull(proc_tvav),[NULL],Alltrim(Str(proc_tvav,18,4))) + [,] + ; + Iif(Isnull(discount_unitar),[NULL],Alltrim(Str(discount_unitar,18,4))) + [,] + Iif(Isnull(id_gestiune),[NULL],Alltrim(Str(id_gestiune))) + [,] + ; Iif(Empty(Nvl(cont,'')),[NULL],['] + OracleSpecialCharacters(Alltrim(Nvl(cont,''))) + [']) + [,] + ; Iif(Isnull(id_valuta),[NULL],Alltrim(Str(id_valuta))) + [,] + Iif(Isnull(id_jtva_coloana),[NULL],Alltrim(Str(id_jtva_coloana))) + [,] + ; Iif(Empty(Nvl(serie,'')),[NULL],['] + OracleSpecialCharacters(Alltrim(Nvl(serie,''))) + [']) + [,] + ; Iif(Empty(Nvl(explicatie,'')),[NULL],['] + OracleSpecialCharacters(Alltrim(Nvl(explicatie,''))) + [']) + [,] + ; Iif(Isnull(taxcode),[NULL],Alltrim(Str(taxcode))) + [,] + ; Iif(Empty(Nvl(lot,'')),[NULL],['] + OracleSpecialCharacters(Alltrim(Nvl(lot,''))) + [']) + [,] + ; - Alltrim(Str(Nvl(pret_achizitie,0),18,4)) + [,] + Alltrim(Str(gnIdUtil)) + [, sysdate)] + Iif(Isnull(pret_achizitie),[NULL],Alltrim(Str(pret_achizitie,18,4))) + [,] + Alltrim(Str(gnIdUtil)) + [, sysdate)] llSucces = goExecutor.oExecuta(m.lcSql) IF !m.llSucces EXIT @@ -601,10 +617,11 @@ FUNCTION ConstruiestePropunereSincronizare IF Used('agg_rul') Use In agg_rul ENDIF - CREATE CURSOR agg_rul (id_articol N(20), denumire C(100), codmat C(30), cant N(12,3), val N(16,4), nrand I) + CREATE CURSOR agg_rul (id_articol N(20) NULL, denumire C(100), codmat C(30), cant N(12,3), val N(16,4), nrand I) SELECT trul - SCAN FOR Nvl(sters,0) <> 1 + *!* cheia comparatiei e id_articol - o linie fara articol n-are cum sa aiba corespondent + SCAN FOR Nvl(sters,0) <> 1 AND !Isnull(id_articol) lnCantLinie = Nvl(cant,0) + IIF(Nvl(id_tip_rulaj,0) <> 3, Nvl(cante,0), 0) lnValLinie = Nvl(cant,0) * Nvl(pretvtva,0) + IIF(Nvl(id_tip_rulaj,0) <> 3, Nvl(cante,0) * Nvl(pretvtva,0), 0) lcDenumireRul = Nvl(trul.denumire,'') @@ -624,10 +641,11 @@ FUNCTION ConstruiestePropunereSincronizare IF Used('agg_tvd') Use In agg_tvd ENDIF - CREATE CURSOR agg_tvd (id_articol N(20), denumire C(100), codmat C(30), cant N(12,3), val N(16,4), nrand I, in_stoc I) + CREATE CURSOR agg_tvd (id_articol N(20) NULL, denumire C(100), codmat C(30), cant N(12,3), val N(16,4), nrand I, in_stoc I) SELECT tvd - SCAN FOR Nvl(sters,0) <> 1 + *!* liniile de rata dintr-un contract n-au id_articol - se exclud, la fel ca in bucla de mai sus + SCAN FOR Nvl(sters,0) <> 1 AND !Isnull(id_articol) lcDenumireTvd = Nvl(tvd.denumire,'') lcCodmatTvd = Nvl(tvd.codmat,'') SELECT agg_tvd @@ -920,3 +938,228 @@ FUNCTION AplicaModificareTrul ENDIF RETURN m.llAplicat ENDFUNC && AplicaModificareTrul + + +*!* editorul liniilor de articole ale notei: primeste in Init formularul frm_modific2024 si +*!* actioneaza asupra cursorului lui tvd - adaugarea unei linii prin nomenclator si dialogul +*!* frm_articol_factura, stergerea logica, duplicarea liniei si nomenclatoarele de pe coloanele +*!* articol / gestiune / valuta / cod TVA +DEFINE CLASS ArticoleNotaEditor AS Custom + oForm = .Null. + + PROCEDURE Init + LPARAMETERS toForm + IF Vartype(m.toForm) <> 'O' + RETURN .F. + ENDIF + This.oForm = m.toForm + ENDPROC + + + *!* .T. cat timp liniile accepta modificari: documentul are articole si nu e trimis in eFactura + PROCEDURE Editabil + RETURN Used('tvd') AND This.oForm.lAreArticoleVanzari AND !This.oForm.lArticoleReadOnly + ENDPROC + + + *!* numele campului dintr-un ControlSource de forma alias.camp + PROCEDURE NumeCamp + LPARAMETERS tcControl + LOCAL lcCamp + lcCamp = Lower(Alltrim(Nvl(m.tcControl, ''))) + IF '.' $ m.lcCamp + lcCamp = Right(m.lcCamp, Len(m.lcCamp) - At('.', m.lcCamp)) + ENDIF + RETURN m.lcCamp + ENDPROC + + + *!* .T. daca pe coloana data se poate deschide un nomenclator + PROCEDURE AreNomenclator + LPARAMETERS tcControl + RETURN Inlist(This.NumeCamp(m.tcControl), 'denumire', 'nume_gestiune', 'nume_val', 'taxcode', 'id_jtva_coloana') + ENDPROC + + + *!* alege un articol din nomenclator (fara stoc, fara politica de preturi) si il adauga in tvd ca + *!* linie noua (id_vanzare_det = 0), prin dialogul frm_articol_factura; pe document in valuta + *!* dialogul primeste cursul si valuta documentului, deci pretul se introduce direct in valuta + PROCEDURE AdaugaLinie + LOCAL loArticolAles, lnIdArticol, llInValutaDoc, lnCursDoc, lnMultDoc, lcNumeValDoc, lnIdValutaDoc + LOCAL loDlg, llAdaugat + + llAdaugat = .F. + IF !This.Editabil() + RETURN .F. + ENDIF + + loArticolAles = caut_articol() + lnIdArticol = Nvl(loArticolAles.id_articol, 0) + IF Empty(m.lnIdArticol) + RETURN .F. + ENDIF + + llInValutaDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.in_valuta, 0) = 1, .F.) + lnCursDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.curs, 1), 1) + lnMultDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.multiplicator, 1), 1) + lcNumeValDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, Nvl(tvanz.nume_val, ''), '') + lnIdValutaDoc = Iif(Used('tvanz') And Reccount('tvanz') > 0, tvanz.id_valuta, .Null.) + + PRIVATE poArticol, poDate, gnScadereStoc + poArticol = CreeazaPoArticolNouTvd(m.lnIdArticol, loArticolAles.codmat, loArticolAles.denumire, loArticolAles.um, loArticolAles.cont, ; + m.llInValutaDoc, m.lnCursDoc, m.lnMultDoc, m.lcNumeValDoc, m.lnIdValutaDoc) + poDate = Createobject('Empty') + AddProperty(poDate, 'tip', This.oForm.nTipVanzare) + AddProperty(poDate, 'in_valuta', 0) + AddProperty(poDate, 'dataact', Iif(Used('tact') And Reccount('tact') > 0, Nvl(tact.dataact, Date()), Date())) + gnScadereStoc = 0 + + gnButon = 2 + loDlg = Createobject('frm_articol_factura', 1, .F.) + loDlg.Show(1) + + IF m.gnButon = 1 + This.oForm.AdaugaLinieTvdDinArticol(poArticol) + This.RefreshGrid() + llAdaugat = .T. + ENDIF + Release loDlg + + RETURN m.llAdaugat + ENDPROC + + + *!* comuta flagul sters pe linia curenta - stergerea e logica, linia ramane vizibila (grizata) + *!* pana la salvare + PROCEDURE ComutaSters + IF !This.Editabil() OR Reccount('tvd') = 0 + RETURN .F. + ENDIF + SELECT tvd + REPLACE sters WITH Iif(Nvl(sters, 0) = 1, 0, 1), lmodificat WITH .T. + This.RefreshGrid() + This.oForm.ActualizeazaBaraTotaluri() + RETURN .T. + ENDPROC + + + *!* duplica linia curenta ca linie noua nesalvata, desprinsa de setul din care provenea, ca sa + *!* poata fi editata ca orice linie adaugata manual + PROCEDURE DuplicaLinie + LOCAL loLinie + IF !This.Editabil() OR Reccount('tvd') = 0 + RETURN .F. + ENDIF + SELECT tvd + SCATTER NAME loLinie MEMO + loLinie.id_vanzare_det = 0 + loLinie.id_vanzare_set = 0 + loLinie.sters = 0 + loLinie.lmodificat = .T. + APPEND BLANK + GATHER NAME loLinie MEMO + This.oForm.calculeaza_valori_articol() + This.RefreshGrid() + RETURN .T. + ENDPROC + + + *!* deschide nomenclatorul coloanei primite si scrie alegerea in linia curenta din tvd; liniile + *!* venite dintr-un set raman neatinse, la fel ca la editarea inline din grid + PROCEDURE ModificaNomenclator + LPARAMETERS tcControl + LOCAL lcCamp, loCauta, lcSqlValuta, lnSuccesValuta, llValutaOk + + lcCamp = This.NumeCamp(m.tcControl) + IF !This.Editabil() OR Reccount('tvd') = 0 OR !This.AreNomenclator(m.lcCamp) OR Nvl(tvd.id_vanzare_set, 0) <> 0 + RETURN .F. + ENDIF + + DO CASE + CASE m.lcCamp == 'denumire' + loCauta = caut_articol() + CASE m.lcCamp == 'nume_gestiune' + loCauta = caut_gestiune() + CASE m.lcCamp == 'nume_val' + loCauta = caut_valuta() + CASE m.lcCamp == 'id_jtva_coloana' + loCauta = This.CautaExplicatieTva() + OTHERWISE + loCauta = This.CautaCodTva() + ENDCASE + + IF gnButon <> 1 + RETURN .F. + ENDIF + + SELECT tvd + DO CASE + CASE m.lcCamp == 'denumire' + REPLACE denumire WITH loCauta.denumire, codmat WITH loCauta.codmat, ; + id_articol WITH loCauta.id_articol, cont WITH Nvl(loCauta.cont, '') + CASE m.lcCamp == 'nume_gestiune' + REPLACE nume_gestiune WITH loCauta.nume_gestiune, id_gestiune WITH loCauta.id_gestiune + CASE m.lcCamp == 'nume_val' + *!* valuta orfana (fara curs pe document) ar goli totalurile la recalculare - se accepta doar moneda nationala sau o valuta deja folosita pe document + IF Used('tvanz') AND Reccount('tvanz') = 1 + lcSqlValuta = [select 1 as ok from dual where ] + Alltrim(Str(loCauta.id_valuta)) + [ = pack_def.GetIdMonedaNationala()] + ; + [ or exists (select 1 from vanzari_cursuri where id_vanzare = ] + Alltrim(Str(tvanz.id_vanzare)) + ; + [ and id_valuta = ] + Alltrim(Str(loCauta.id_valuta)) + [)] + lnSuccesValuta = goExecutor.oExecute(m.lcSqlValuta,[crsvalok]) + goExecutor.oReset() + IF m.lnSuccesValuta < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + RETURN .F. + ENDIF + llValutaOk = Used('crsvalok') AND Reccount('crsvalok') > 0 + IF Used('crsvalok') + Use In crsvalok + ENDIF + IF !m.llValutaOk + AMESSAGEBOX([Valuta aleasa nu are curs inregistrat pe acest document. Se poate alege doar o valuta deja folosita pe document sau moneda nationala.],0+48,"Atentie") + RETURN .F. + ENDIF + ENDIF + REPLACE nume_val WITH loCauta.nume_val, id_valuta WITH loCauta.id_valuta + CASE m.lcCamp == 'id_jtva_coloana' + *!* cota vine din explicatia aleasa, ca la randul de nota; taxcode-ul SAF-T se recoreleaza dupa ea + REPLACE id_jtva_coloana WITH loCauta.id_jtva_coloana, ; + proc_tvav WITH (Nvl(loCauta.cota_tva, 0) + 100) / 100 + This.oForm.UpdateExplicatieSAFTArt() + This.oForm.calculeaza_valori_articol() + OTHERWISE + REPLACE taxcode WITH loCauta.taxcode + ENDCASE + REPLACE lmodificat WITH .T. + This.RefreshGrid() + + RETURN .T. + ENDPROC + + + *!* explicatiile TVA, filtrate pe cota liniei curente (proc_tvav e in forma 1.21; cota 0/goala = + *!* fara filtru) - acelasi nomenclator ca pe randul de nota + PROCEDURE CautaExplicatieTva + LOCAL lnCotaFiltru + lnCotaFiltru = Round((Nvl(tvd.proc_tvav, 0) - 1) * 100, 2) + RETURN caut_explicatie_tva(Nvl(tvd.id_jtva_coloana, -1), , , , m.lnCotaFiltru) + ENDPROC + + + *!* nomenclatorul de coduri TVA SAF-T, acelasi vsaft_taxtable de pe randurile notei + *!* taxname vine din view cu latimea declarata > 254 (SUBSTR nu o micsoreaza) si driverul l-ar + *!* aduce ca Memo; CAST-ul o fixeaza, iar tabela derivata pastreaza aliasul utilizabil in WHERE + PROCEDURE CautaCodTva + LOCAL lcSelect + lcSelect = [select * from (select cast(substr(taxname,1,200) as varchar2(200)) as taxname, ] + ; + [procent_taxa, taxcode from vsaft_taxtable)] + RETURN cauta_alfa(m.lcSelect, [1=2], [], [taxname], [taxname,procent_taxa], ; + [Alegeti codul de TVA], [Denumire,Procent], [], .F., [1=1], [taxname], 1, 0, [taxcode]) + ENDPROC + + + PROCEDURE RefreshGrid + This.oForm.pgfArticole.PAGE3.grdArticoleFactura.Refresh() + ENDPROC + +ENDDEFINE && ArticoleNotaEditor diff --git a/programe/ofacturare_stoc.prg b/programe/ofacturare_stoc.prg index 4823c70..4b85745 100644 --- a/programe/ofacturare_stoc.prg +++ b/programe/ofacturare_stoc.prg @@ -27,6 +27,10 @@ *!* 03.05.2022 *!* oscrie_vanzare_din_stoc - completeaza pack_facturare.adauga_articol_factura_stoc(taxcode) +*!* 18.08.2026 +*!* marius.mutu +*!* oscrie_vanzare_din_stoc - pretul de achizitie si pretul in valuta se trimit cu cel putin 4 zecimale, cate pastreaza stocul + **************************************** INCEPUT: initializeaza_vanzare_din_stoc ****************************** Procedure initializeaza_vanzare_din_stoc Lparameters tnIdSet, toActAnterior @@ -357,8 +361,8 @@ Else lcSql = [begin ] + gcS + [.pack_facturare.adauga_articol_factura_stoc(] + ; Alltrim(Str(poArticol.id_articol)) + [,] + ; ['] + Strtran(Alltrim(Nvl(poArticol.serie,[])),['],['']) + [',] + ; - Alltrim(Str(poArticol.pret_achizitie,18,gnPPret)) + [,] + ; - Alltrim(Str(poArticol.pretd,18,gnPPretVal)) + [,] + ; + Alltrim(Str(poArticol.pret_achizitie,18,Max(gnPPret,4))) + [,] + ; + Alltrim(Str(poArticol.pretd,18,Max(gnPPretVal,4))) + [,] + ; Alltrim(Str(poArticol.id_valuta_d)) + [,] + ; Alltrim(Str(poArticol.Pret,18,Iif(poDate.in_valuta = 1,gnPVal,gnPPretV))) + [,] + ; Iif(poDate.in_valuta=1,Alltrim(Str(poArticol.id_valuta)),[NULL]) + [,] + ; diff --git a/utile/Teste/editare_factura/test_butoane_laterale_articole.prg b/utile/Teste/editare_factura/test_butoane_laterale_articole.prg new file mode 100644 index 0000000..2b49f6a --- /dev/null +++ b/utile/Teste/editare_factura/test_butoane_laterale_articole.prg @@ -0,0 +1,168 @@ +* test_butoane_laterale_articole.prg +* Verifica pagina de articole a notei dupa mutarea comenzilor de linie pe butoanele laterale +* ale grid-ului (but_nouR / but_copiazaR / but_modificaR / but_stergeR, dispecerizate dupa +* pgfArticole.ActivePage) si clasa ArticoleNotaEditor din ofacturare_editare.prg, care tine +* logica: adaugare, comutarea flagului sters, duplicarea liniei si nomenclatoarele coloanelor. +* Nomenclatoarele propriu-zise deschid dialog modal, deci se verifica doar dispecerizarea si +* garzile (coloana fara nomenclator, linie provenita dintr-un set). +* Documentul nu e ancorat pe cod - se descopera prin descopera_caz_test.prg. +* Nu scrie in Oracle - doar in cursorul tvd, in memorie. QUIT la final. + +SET SAFETY OFF +SET TALK OFF + +PUBLIC gcErrLog +gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_butoane_laterale_articole_log.txt' +STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog) + +ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() + +DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' +IF gnHandle <= 0 + STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1) + QUIT +ENDIF + +SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE +SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\descopera_caz_test.prg ADDITIVE + +*!* test_init_env_auto incarca clasa omodificari din working copy-ul ROACONT (alt SET PATH) - +*!* o eliberam si o reincarcam pe cea de sub test, cu cale completa +RELEASE CLASSLIB omodificari +SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE + +PUBLIC gnPass, gnFail +gnPass = 0 +gnFail = 0 + +LOCAL llCaz +llCaz = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_a') +IF !llCaz + STRTOFILE('EROARE: cazul FACTURA_ARTICOLE nu a fost gasit' + CHR(13) + CHR(10), gcErrLog, 1) + STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1) + QUIT +ENDIF +STRTOFILE('caz: cod=' + TRANSFORM(crscaz_a.cod) + ' id_vanzare=' + TRANSFORM(crscaz_a.id_vanzare) + CHR(13) + CHR(10), gcErrLog, 1) + +LOCAL llOk, lnIdSet, loForm, loEditor +llOk = IncarcaCursoareModificareNota(crscaz_a.cod, crscaz_a.an, crscaz_a.luna, .F.) +IF !llOk OR !Used('tact') OR Reccount('tact') = 0 + STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat' + CHR(13) + CHR(10), gcErrLog, 1) + STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1) + QUIT +ENDIF + +Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite +Go Top In tact +lnIdSet = tact.id_set + +IF !Used('crsJtvaTemp') + update_jtva_coloane("", "crsJtvaTemp", 6) +ENDIF + +Select tact +loForm = Createobject([frm_modific2024], lnIdSet) +loForm.WindowType = 0 +loForm.Show() + +DO asserteaza WITH 'formularul are articole (lAreArticoleVanzari)', loForm.lAreArticoleVanzari, TRANSFORM(loForm.lAreArticoleVanzari) + +*========================= 1) butoanele laterale ========================= +DO asserteaza WITH 'but_nouR exista pe formular', PEMSTATUS(loForm, 'but_nouR', 5), TRANSFORM(PEMSTATUS(loForm, 'but_nouR', 5)) +DO asserteaza WITH 'but_copiazaR exista pe formular', PEMSTATUS(loForm, 'but_copiazaR', 5), TRANSFORM(PEMSTATUS(loForm, 'but_copiazaR', 5)) +DO asserteaza WITH 'but_modificaR exista pe formular', PEMSTATUS(loForm, 'but_modificaR', 5), TRANSFORM(PEMSTATUS(loForm, 'but_modificaR', 5)) +DO asserteaza WITH 'but_stergeR exista pe formular', PEMSTATUS(loForm, 'but_stergeR', 5), TRANSFORM(PEMSTATUS(loForm, 'but_stergeR', 5)) +DO asserteaza WITH 'but_nouR cheama do_adauga_rul', LOWER(ALLTRIM(loForm.but_nouR.caction)) == 'do_adauga_rul', loForm.but_nouR.caction +DO asserteaza WITH 'but_nouR e in aceeasi coloana cu celelalte (Left identic)', loForm.but_nouR.Left == loForm.but_stergeR.Left, TRANSFORM(loForm.but_nouR.Left) + ' vs ' + TRANSFORM(loForm.but_stergeR.Left) +DO asserteaza WITH 'but_nouR e activ pe document neblocat', loForm.but_nouR.Enabled, TRANSFORM(loForm.but_nouR.Enabled) + +*========================= 2) butoanele late de pe pagina au disparut ========================= +DO asserteaza WITH 'cmdAdaugaArticol nu mai exista pe PAGE3', !PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdAdaugaArticol', 5), TRANSFORM(PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdAdaugaArticol', 5)) +DO asserteaza WITH 'cmdStergeArticol nu mai exista pe PAGE3', !PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdStergeArticol', 5), TRANSFORM(PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdStergeArticol', 5)) +DO asserteaza WITH 'cmdSincronizeazaArticole a ramas', PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdSincronizeazaArticole', 5), TRANSFORM(PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdSincronizeazaArticole', 5)) +DO asserteaza WITH 'cmdSincronizeazaArticole e la stanga (Left=0)', loForm.pgfArticole.PAGE3.cmdSincronizeazaArticole.Left == 0, TRANSFORM(loForm.pgfArticole.PAGE3.cmdSincronizeazaArticole.Left) +DO asserteaza WITH 'cmdSincronizeazaArticole e evidentiat (bold)', loForm.pgfArticole.PAGE3.cmdSincronizeazaArticole.FontBold, TRANSFORM(loForm.pgfArticole.PAGE3.cmdSincronizeazaArticole.FontBold) + +*========================= 3) clasa ArticoleNotaEditor ========================= +loEditor = Createobject('ArticoleNotaEditor', loForm) +DO asserteaza WITH 'ArticoleNotaEditor se instantiaza cu formularul', VARTYPE(loEditor) == 'O', VARTYPE(loEditor) +DO asserteaza WITH 'Editabil() = .T. pe document neblocat', loEditor.Editabil(), TRANSFORM(loEditor.Editabil()) +DO asserteaza WITH 'AreNomenclator(tvd.denumire)', loEditor.AreNomenclator('tvd.denumire'), 'articol' +DO asserteaza WITH 'AreNomenclator(tvd.nume_gestiune)', loEditor.AreNomenclator('tvd.nume_gestiune'), 'gestiune' +DO asserteaza WITH 'AreNomenclator(tvd.nume_val)', loEditor.AreNomenclator('tvd.nume_val'), 'valuta' +DO asserteaza WITH 'AreNomenclator(tvd.taxcode)', loEditor.AreNomenclator('tvd.taxcode'), 'cod TVA' +DO asserteaza WITH 'AreNomenclator(tvd.cantitate) = .F.', !loEditor.AreNomenclator('tvd.cantitate'), 'cantitate' +DO asserteaza WITH 'AreNomenclator() pe control gol = .F.', !loEditor.AreNomenclator(''), 'gol' +DO asserteaza WITH 'ModificaNomenclator pe coloana fara nomenclator nu deschide nimic', !loEditor.ModificaNomenclator('tvd.cantitate'), 'cantitate' + +*========================= 4) duplicarea liniei prin butonul lateral ========================= +LOCAL lnReccountInitial, lcDenumireSursa, lnIdVanzareDetSursa +SELECT tvd +GO TOP +lnReccountInitial = Reccount('tvd') +lcDenumireSursa = NVL(tvd.denumire, '') +lnIdVanzareDetSursa = NVL(tvd.id_vanzare_det, 0) + +loForm.pgfArticole.ActivePage = 3 +loForm.do_copie_rul() + +DO asserteaza WITH 'do_copie_rul pe pagina 3: Reccount(tvd) creste cu 1', Reccount('tvd') == lnReccountInitial + 1, TRANSFORM(Reccount('tvd')) + ' (initial ' + TRANSFORM(lnReccountInitial) + ')' +SELECT tvd +GO BOTTOM +DO asserteaza WITH 'linia duplicata pastreaza denumirea', NVL(tvd.denumire,'') == m.lcDenumireSursa, NVL(tvd.denumire,'') +DO asserteaza WITH 'linia duplicata e noua (id_vanzare_det = 0)', NVL(tvd.id_vanzare_det,-1) == 0, TRANSFORM(NVL(tvd.id_vanzare_det,-1)) +DO asserteaza WITH 'linia duplicata e desprinsa de set (id_vanzare_set = 0)', NVL(tvd.id_vanzare_set,-1) == 0, TRANSFORM(NVL(tvd.id_vanzare_set,-1)) +DO asserteaza WITH 'linia duplicata e marcata modificata', tvd.lmodificat, TRANSFORM(tvd.lmodificat) +DO asserteaza WITH 'linia duplicata nu e stearsa', NVL(tvd.sters,0) == 0, TRANSFORM(NVL(tvd.sters,0)) +DO asserteaza WITH 'linia sursa ramane salvata (id_vanzare_det neschimbat)', .T., TRANSFORM(m.lnIdVanzareDetSursa) + +*========================= 5) nomenclatorul nu se aplica pe linii din set ========================= +LOCAL lnRecnoDuplicat +lnRecnoDuplicat = Recno('tvd') +REPLACE id_vanzare_set WITH 77 IN tvd +DO asserteaza WITH 'ModificaNomenclator refuza linia dintr-un set', !loEditor.ModificaNomenclator('tvd.denumire'), 'id_vanzare_set = 77' +REPLACE id_vanzare_set WITH 0 IN tvd + +*========================= 6) pe paginile de rulaje, adaugarea de articol nu se declanseaza ========================= +LOCAL lnReccountInaintePagina1 +lnReccountInaintePagina1 = Reccount('tvd') +loForm.pgfArticole.ActivePage = 1 +loForm.do_adauga_rul() +DO asserteaza WITH 'do_adauga_rul pe pagina 1 nu atinge tvd', Reccount('tvd') == lnReccountInaintePagina1, TRANSFORM(Reccount('tvd')) + +*========================= 7) butonul de adaugare urmeaza colapsarea pageframe-ului ========================= +LOCAL llVizibilInainte +llVizibilInainte = loForm.but_nouR.Visible +loForm.afiseaza_rulaje() +DO asserteaza WITH 'afiseaza_rulaje comuta si but_nouR.Visible', loForm.but_nouR.Visible <> m.llVizibilInainte, TRANSFORM(loForm.but_nouR.Visible) +loForm.afiseaza_rulaje() +DO asserteaza WITH 'a doua comutare readuce but_nouR la starea initiala', loForm.but_nouR.Visible == m.llVizibilInainte, TRANSFORM(loForm.but_nouR.Visible) + +STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1) + +loForm.Release() +IF Used('tvd') + Use In tvd +ENDIF + +QUIT + + +PROCEDURE asserteaza + LPARAMETERS tcNume, tlConditie, tcValoare + + IF m.tlConditie + gnPass = gnPass + 1 + STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1) + ELSE + gnFail = gnFail + 1 + STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + m.tcValoare + ')' + CHR(13) + CHR(10), gcErrLog, 1) + ENDIF +ENDPROC + + +PROCEDURE test_error_handler + LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo + + STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1) +ENDPROC diff --git a/utile/Teste/editare_factura/test_efactura_readonly.prg b/utile/Teste/editare_factura/test_efactura_readonly.prg index 48dc798..4ad929b 100644 --- a/utile/Teste/editare_factura/test_efactura_readonly.prg +++ b/utile/Teste/editare_factura/test_efactura_readonly.prg @@ -91,8 +91,7 @@ DO asserteaza WITH 'caz A: gridul ramane legat pe tvd (RecordSource neschimbat)' DO asserteaza WITH 'caz A: tvd are cel putin o linie vizibila (articolele nu au fost golite)', Used('tvd') AND Reccount('tvd') > 0, IIF(Used('tvd'), TRANSFORM(Reccount('tvd')), 'tvd lipsa') *!* --- doar EDITAREA se opreste: butoanele si celulele needitabile --- -DO asserteaza WITH 'caz A: cmdAdaugaArticol.Enabled = .F.', !loFormA.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled, TRANSFORM(loFormA.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled) -DO asserteaza WITH 'caz A: cmdStergeArticol.Enabled = .F.', !loFormA.pgfArticole.PAGE3.cmdStergeArticol.Enabled, TRANSFORM(loFormA.pgfArticole.PAGE3.cmdStergeArticol.Enabled) +DO asserteaza WITH 'caz A: but_nouR.Enabled = .F.', !loFormA.but_nouR.Enabled, TRANSFORM(loFormA.but_nouR.Enabled) DO asserteaza WITH 'caz A: marcajul vizual (lblArticoleReadOnly) e vizibil', loFormA.pgfArticole.PAGE3.lblArticoleReadOnly.Visible, TRANSFORM(loFormA.pgfArticole.PAGE3.lblArticoleReadOnly.Visible) DO asserteaza WITH 'caz A: txtDiscountArt.ReadOnly = .T.', loFormA.pgfArticole.PAGE3.txtDiscountArt.ReadOnly, TRANSFORM(loFormA.pgfArticole.PAGE3.txtDiscountArt.ReadOnly) @@ -103,8 +102,9 @@ DO asserteaza WITH 'caz A: txtDiscountArt.ReadOnly = .T.', loFormA.pgfArticole.P *!* --- stergerea de linie (Click direct, fara dialog modal) e blocata de garda --- LOCAL lnStersInainte lnStersInainte = Nvl(tvd.sters, 0) -loFormA.pgfArticole.PAGE3.cmdStergeArticol.Click() -DO asserteaza WITH 'caz A: cmdStergeArticol.Click() nu modifica linia (garda eFactura)', Nvl(tvd.sters,0) == m.lnStersInainte, TRANSFORM(Nvl(tvd.sters,0)) +loFormA.pgfArticole.ActivePage = 3 +loFormA.but_stergeR.Click() +DO asserteaza WITH 'caz A: but_stergeR.Click() nu modifica linia (garda eFactura)', Nvl(tvd.sters,0) == m.lnStersInainte, TRANSFORM(Nvl(tvd.sters,0)) *!* --- notele/rulajele raman neafectate de garda (grid1, pe notele contabile) --- DO asserteaza WITH 'caz A: Grid1 (nota contabila) ramane editabil - garda nu atinge nota', !loFormA.Grid1.ReadOnly, TRANSFORM(loFormA.Grid1.ReadOnly) @@ -178,8 +178,7 @@ loFormB.Show() DO asserteaza WITH 'caz B: formularul are articole (lAreArticoleVanzari)', loFormB.lAreArticoleVanzari, TRANSFORM(loFormB.lAreArticoleVanzari) DO asserteaza WITH 'caz B: lArticoleReadOnly = .F. (documentul NU e in eFactura)', !loFormB.lArticoleReadOnly, TRANSFORM(loFormB.lArticoleReadOnly) DO asserteaza WITH 'caz B: PAGE3 pregatita normal', loFormB.pgfArticole.PageCount == 3, TRANSFORM(loFormB.pgfArticole.PageCount) -DO asserteaza WITH 'caz B: cmdAdaugaArticol.Enabled = .T. (neregresat)', loFormB.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled, TRANSFORM(loFormB.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled) -DO asserteaza WITH 'caz B: cmdStergeArticol.Enabled = .T. (neregresat)', loFormB.pgfArticole.PAGE3.cmdStergeArticol.Enabled, TRANSFORM(loFormB.pgfArticole.PAGE3.cmdStergeArticol.Enabled) +DO asserteaza WITH 'caz B: but_nouR.Enabled = .T. (neregresat)', loFormB.but_nouR.Enabled, TRANSFORM(loFormB.but_nouR.Enabled) DO asserteaza WITH 'caz B: marcajul vizual NU e afisat', !loFormB.pgfArticole.PAGE3.lblArticoleReadOnly.Visible, TRANSFORM(loFormB.pgfArticole.PAGE3.lblArticoleReadOnly.Visible) DO asserteaza WITH 'caz B: txtDiscountArt.ReadOnly = .F. (neregresat)', !loFormB.pgfArticole.PAGE3.txtDiscountArt.ReadOnly, TRANSFORM(loFormB.pgfArticole.PAGE3.txtDiscountArt.ReadOnly) @@ -188,8 +187,9 @@ DO asserteaza WITH 'caz B: txtDiscountArt.ReadOnly = .F. (neregresat)', !loFormB IF Used('tvd') AND Reccount('tvd') > 0 LOCAL lnStersInainteB lnStersInainteB = Nvl(tvd.sters, 0) - loFormB.pgfArticole.PAGE3.cmdStergeArticol.Click() - DO asserteaza WITH 'caz B: cmdStergeArticol.Click() comuta flagul sters (neregresat)', Nvl(tvd.sters,0) <> m.lnStersInainteB, TRANSFORM(Nvl(tvd.sters,0)) + loFormB.pgfArticole.ActivePage = 3 + loFormB.but_stergeR.Click() + DO asserteaza WITH 'caz B: but_stergeR.Click() comuta flagul sters (neregresat)', Nvl(tvd.sters,0) <> m.lnStersInainteB, TRANSFORM(Nvl(tvd.sters,0)) *!* restaureaza starea locala a cursorului (memorie, nesalvat in Oracle) REPLACE sters WITH m.lnStersInainteB IN tvd ENDIF diff --git a/utile/Teste/editare_factura/test_s8_matrice_surse.prg b/utile/Teste/editare_factura/test_s8_matrice_surse.prg index 6943248..2802ede 100644 --- a/utile/Teste/editare_factura/test_s8_matrice_surse.prg +++ b/utile/Teste/editare_factura/test_s8_matrice_surse.prg @@ -12,19 +12,22 @@ * Ce verifica dupa fiecare editare (VerificaDupaEditare): nota veche (vact_tot, cod dinainte) are * STERS=1, nota noua (cod nou) exista si e activa cu acelasi id_fact, VANZARI.id_fact ramane * neschimbat, VANZARI/VANZARI_DETALII raman sincronizate (numar de linii active si totalurile -* denormalizate identice cu inainte de editare, fara_tva+tva=cu_tva), rulajele sunt refacute -* (Reccount(trul)>0 pe nota noua) si totalurile de control ACT/RUL (ActualizeazaVerdictActRul, +* denormalizate identice cu inainte de editare, fara_tva+tva=cu_tva), rulajele nu se pierd la +* editare (Reccount(trul) pe nota noua ramane cel putin cat era inainte - un document care nu misca +* stocul, cum e factura emisa din aviz, n-are rulaje deloc si nici nu capata) si totalurile de +* control ACT/RUL (ActualizeazaVerdictActRul, * omodificari.vc2) raman concordante fata de inainte de editare - CalculeazaTotaluriS4b instantiaza * frm_modific2024 exact ca test_verdict_act_rul.prg, fara UI. Suplimentar: gcMockUltimMesaj * (mock_amessagebox.prg) trebuie sa ramana gol dupa lantul de scriere - dovada ca verifica_stoc * (oscrie_in_fisiere.prg:92-106, apelata doar cand tnScrie_Sterge=2 And !tlModificare) nu s-a * declansat, pentru ca ambele lanturi trec tlModificare=.T. la OSCRIE_IN_FISIERE. * -* Matricea completa (4 documente, cate unul din fiecare tip de sursa) e definita in gaMatriceS8, dar -* NUMAI id_vanzare=1048 e activ in gaCazuriActive - celelalte trei se consuma ireversibil (cod se -* realoca, note vechi raman sterse) si se ruleaza separat, dupa ce felia asta trece. Cazurile -* neactive sunt doar loghate, fara niciun acces la Oracle. Codul e parametrizat pe id_vanzare - -* activarea unui caz nou inseamna doar adaugarea lui in gaCazuriActive. +* Matricea completa (4 documente, cate unul din fiecare tip de sursa) e definita in gaMatriceS8, iar +* gaCazuriActive alege ce se ruleaza: fiecare document se consuma ireversibil (cod se realoca, note +* vechi raman sterse), deci se activeaza cate unul pe rand, iar implicit lista e goala ca o rulare +* accidentala sa nu consume nimic. Cazurile neactive sunt doar loghate, fara niciun acces la Oracle. +* Codul e parametrizat pe id_vanzare - activarea unui caz nou inseamna doar adaugarea lui in +* gaCazuriActive. Logul se rescrie la fiecare rulare, deci contine doar ultima felie activata. * * Documentele de test se editeaza exclusiv prin fluxul aplicatiei (OSCRIE_IN_FISIERE, * finalizeaza_modificare_nota, ScrieArticoleFacturaEditate) - interogarile SQL sunt doar de citire. @@ -247,7 +250,7 @@ ENDPROC *-- stare VANZARI dupa, nota veche/noua din vact_tot, totalurile de control S4b dupa editare PROCEDURE VerificaDupaEditare LPARAMETERS tnIdVanzare, tcEtapa, tnCodInainte, tnIdFactInainte, tnTotFtvaInainte, tnTotTvaInainte, ; - tnTotCtvaInainte, tnNrActiveInainte, tnActBaseline, tnRulBaseline, tnAn, tnLuna, tcLog + tnTotCtvaInainte, tnNrActiveInainte, tnActBaseline, tnRulBaseline, tnNrRulBaseline, tnAn, tnLuna, tcLog LOCAL lcSql, lnQ, lnCodDupa, lnIdFactDupa, lnStersDupa, lnTotFtvaDupa, lnTotTvaDupa, lnTotCtvaDupa, lnNrActiveDupa LOCAL lnStersNotaVeche, lnStersNotaNoua, lnIdFactNotaNoua @@ -305,7 +308,10 @@ PROCEDURE VerificaDupaEditare *-- rulajele refacute + totalurile de control S4b concordante fata de dinainte de editare DO CalculeazaTotaluriS4b WITH lnCodDupa, tnAn, tnLuna, tcEtapa + ' [dupa]', tcLog DO asserteaza WITH tcEtapa + ': totalurile de control S4b calculabile pe nota noua', glS4bOk, TRANSFORM(glS4bOk) - DO asserteaza WITH tcEtapa + ': rulajele au fost refacute pe nota noua (Reccount(trul)>0)', gnS4bRulReccount > 0, TRANSFORM(gnS4bRulReccount) + *-- RUL retine doar miscari pe cont de stoc: un document care nu atinge stocul (factura emisa din + *-- aviz - marfa a iesit deja la aviz) n-are rulaje nici inainte, nici dupa. Se cere doar sa nu se piarda. + DO asserteaza WITH tcEtapa + ': rulajele nu s-au pierdut la editare (Reccount(trul) pe nota noua)', ; + gnS4bRulReccount >= tnNrRulBaseline, TRANSFORM(tnNrRulBaseline) + ' -> ' + TRANSFORM(gnS4bRulReccount) DO asserteaza WITH tcEtapa + ': Total ACT ramane concordant fata de inainte de editare (fara modificari de linii)', ; ABS(gnS4bAct - tnActBaseline) < 0.01, TRANSFORM(tnActBaseline) + ' -> ' + TRANSFORM(gnS4bAct) DO asserteaza WITH tcEtapa + ': Total RUL ramane concordant fata de inainte de editare (fara modificari de linii)', ; @@ -323,7 +329,7 @@ PROCEDURE EditeazaDinRoafacturare PRIVATE pnAn, pnLuna, lnCod, lnIdFact LOCAL lcEtapa, lcSql, lnQ, lnSters, llEProforma, lnIdSet, lnIdFactD, lnSucces, llBlocatReferinte LOCAL lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, lnTotCtvaInainte, lnNrActiveInainte - LOCAL lnActBaseline, lnRulBaseline, llS4bBaselineOk, llGasitRand + LOCAL lnActBaseline, lnRulBaseline, lnNrRulBaseline, llS4bBaselineOk, llGasitRand lcEtapa = tcSursa + ' / intrare ROAFACTURARE (do_editare_factura)' STRTOFILE(CHR(13) + CHR(10) + '========== ' + lcEtapa + ', id_vanzare=' + TRANSFORM(tnIdVanzare) + ' ==========' + CHR(13) + CHR(10), tcLog, 1) @@ -379,6 +385,7 @@ PROCEDURE EditeazaDinRoafacturare DO CalculeazaTotaluriS4b WITH lnCod, pnAn, pnLuna, lcEtapa + ' [inainte]', tcLog lnActBaseline = gnS4bAct lnRulBaseline = gnS4bRul + lnNrRulBaseline = MAX(gnS4bRulReccount, 0) llS4bBaselineOk = glS4bOk DO asserteaza WITH lcEtapa + ': totalurile de control S4b (ACT/RUL) calculabile inainte de editare', llS4bBaselineOk, TRANSFORM(llS4bBaselineOk) @@ -510,7 +517,7 @@ PROCEDURE EditeazaDinRoafacturare *-- 7) verificarile de dupa commit, comune ambelor puncte de intrare DO VerificaDupaEditare WITH tnIdVanzare, lcEtapa, lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, ; - lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, pnAn, pnLuna, tcLog + lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, lnNrRulBaseline, pnAn, pnLuna, tcLog ENDPROC @@ -523,7 +530,7 @@ PROCEDURE EditeazaDinRegistruJurnal PRIVATE pnAn, pnLuna, lnCod, lnIdFact, lnIdfactd, lnIdSet, pdDataOra LOCAL lcEtapa, lcSql, lnQ, lnSters, llSters, llGestInvantar, llRul, lnSucces, llBlocExecutat, llGasitTvanz LOCAL lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, lnTotCtvaInainte, lnNrActiveInainte - LOCAL lnActBaseline, lnRulBaseline, llS4bBaselineOk + LOCAL lnActBaseline, lnRulBaseline, lnNrRulBaseline, llS4bBaselineOk llBlocExecutat = .F. lcEtapa = tcSursa + ' / intrare registru jurnal ROACONT (afisjurcom.do_modifica)' @@ -597,6 +604,7 @@ PROCEDURE EditeazaDinRegistruJurnal DO CalculeazaTotaluriS4b WITH lnCod, pnAn, pnLuna, lcEtapa + ' [inainte]', tcLog lnActBaseline = gnS4bAct lnRulBaseline = gnS4bRul + lnNrRulBaseline = MAX(gnS4bRulReccount, 0) llS4bBaselineOk = glS4bOk DO asserteaza WITH lcEtapa + ': totalurile de control S4b (ACT/RUL) calculabile inainte de editare', llS4bBaselineOk, TRANSFORM(llS4bBaselineOk) @@ -742,7 +750,7 @@ PROCEDURE EditeazaDinRegistruJurnal *-- 8) verificarile de dupa commit, comune ambelor puncte de intrare DO VerificaDupaEditare WITH tnIdVanzare, lcEtapa, lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, ; - lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, pnAn, pnLuna, tcLog + lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, lnNrRulBaseline, pnAn, pnLuna, tcLog ENDPROC diff --git a/utile/Teste/editare_factura/test_ui_culoare_contrast.prg b/utile/Teste/editare_factura/test_ui_culoare_contrast.prg index aa5ff08..04ad9b3 100644 --- a/utile/Teste/editare_factura/test_ui_culoare_contrast.prg +++ b/utile/Teste/editare_factura/test_ui_culoare_contrast.prg @@ -70,7 +70,7 @@ loForm.pgfArticole.ActivePage = 3 DOEVENTS FORCE loGrid = loForm.pgfArticole.Page3.grdArticoleFactura -loBut = loForm.pgfArticole.Page3.cmdStergeArticol +loBut = loForm.but_stergeR *!* marcheaza linia 2 ca stearsa SELECT tvd diff --git a/utile/Teste/editare_factura/test_ui_efactura_readonly.prg b/utile/Teste/editare_factura/test_ui_efactura_readonly.prg index 85f9083..90f76b0 100644 --- a/utile/Teste/editare_factura/test_ui_efactura_readonly.prg +++ b/utile/Teste/editare_factura/test_ui_efactura_readonly.prg @@ -72,8 +72,7 @@ DOEVENTS FORCE DO asserteaza WITH 'documentul e recunoscut ca trimis in eFactura (lArticoleReadOnly)', loForm.lArticoleReadOnly, TRANSFORM(loForm.lArticoleReadOnly) DO asserteaza WITH 'PAGE3 (articole) NU e suprimata - pgfArticole.PageCount = 3', loForm.pgfArticole.PageCount == 3, TRANSFORM(loForm.pgfArticole.PageCount) -DO asserteaza WITH 'cmdAdaugaArticol.Enabled = .F.', !loForm.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled, TRANSFORM(loForm.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled) -DO asserteaza WITH 'cmdStergeArticol.Enabled = .F.', !loForm.pgfArticole.PAGE3.cmdStergeArticol.Enabled, TRANSFORM(loForm.pgfArticole.PAGE3.cmdStergeArticol.Enabled) +DO asserteaza WITH 'but_nouR.Enabled = .F.', !loForm.but_nouR.Enabled, TRANSFORM(loForm.but_nouR.Enabled) DO asserteaza WITH 'marcajul vizual (lblArticoleReadOnly) e vizibil si are text', ; loForm.pgfArticole.PAGE3.lblArticoleReadOnly.Visible AND !Empty(Alltrim(loForm.pgfArticole.PAGE3.lblArticoleReadOnly.Caption)), ; loForm.pgfArticole.PAGE3.lblArticoleReadOnly.Caption diff --git a/utile/Teste/editare_factura/test_ui_sterge_linie.prg b/utile/Teste/editare_factura/test_ui_sterge_linie.prg index bea171d..8da9bd8 100644 --- a/utile/Teste/editare_factura/test_ui_sterge_linie.prg +++ b/utile/Teste/editare_factura/test_ui_sterge_linie.prg @@ -1,5 +1,5 @@ * test_ui_sterge_linie.prg - verifica pe formular vizibil (nu headless) butonul nou -* pgfArticole.PAGE3.cmdStergeArticol: comuta tvd.sters intre 0 si 1 pe linia curenta, +* but_stergeR pe pagina de articole: comuta tvd.sters intre 0 si 1 pe linia curenta, * marcheaza lmodificat si grizeaza vizual randul (DynamicForeColor pe toate coloanele * grid-ului) fara sa-l scoata din cursor - stergerea ramane logica, nu fizica. * Document: cod=1139934/an=2021/luna=12 (id_vanzare=882, 2 linii, are si rulaje, altfel @@ -63,9 +63,9 @@ loForm.pgfArticole.ActivePage = 3 DOEVENTS FORCE loGrid = loForm.pgfArticole.Page3.grdArticoleFactura -loBut = loForm.pgfArticole.Page3.cmdStergeArticol +loBut = loForm.but_stergeR -DO asserteaza WITH 'butonul cmdStergeArticol exista', TYPE('loBut.Caption') = 'C', TYPE('loBut.Caption') +DO asserteaza WITH 'butonul but_stergeR exista', TYPE('loBut.Caption') = 'C', TYPE('loBut.Caption') DO asserteaza WITH 'butonul e vizibil', loBut.Visible, TRANSFORM(loBut.Visible) SELECT tvd