#13: formular de facturare unificat - etapa curenta
Squash al branch-ului de lucru plan13-s2. Clase: ofacturare (nucleul formularului unificat), ofacturare_comun, ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de cautare), omodificari. Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie si cota standard de TVA cand articolul nu are cota pe politica. Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte proiecte sunt rezolvate pastrand ambele parti. Loguri de rulare a testelor scoase din versionare; testele raman. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
This commit is contained in:
File diff suppressed because it is too large
Load Diff
925
programe/ofacturare_antet.prg
Normal file
925
programe/ofacturare_antet.prg
Normal file
@@ -0,0 +1,925 @@
|
||||
*!* 21.08.2026
|
||||
*!* marius.mutu
|
||||
*!* oAntetFacturare - logica de antet a formularului unificat frm_facturare_articole2, portata din frm_date_factura /
|
||||
*!* frm_date_aviz (ofacturare.vcx): cautarile (do_cauta_*), do_verifica, validarea antetului (valideaza_antet) si regulile
|
||||
*!* schimbarii felului de document (alege_tipdoc, schimba_tipdoc); formularul vine ca parametru toForm, ramura
|
||||
*!* factura/aviz se alege pe poDate.nIdTipDoc = poDate.nIdTipDocAvizExpeditie.
|
||||
|
||||
*!* 28.08.2026
|
||||
*!* marius.mutu
|
||||
*!* controalele grupului de contabilitate (Ct_clb_venchelt, Ct_clb_sectie, Ct_clb_lucrare, Ct_clb_responsabil,
|
||||
*!* Ct_clb_gestiune_init, Ed_tx_simplu1) au trecut in containerul ct_contabilitate al formularului, deci
|
||||
*!* referintele lor din acest fisier sunt prefixate cu containerul, inclusiv in expresiile Type().
|
||||
|
||||
Define Class oAntetFacturare As Custom
|
||||
|
||||
Function EsteAviz
|
||||
Return poDate.nIdTipDoc = poDate.nIdTipDocAvizExpeditie
|
||||
Endfunc
|
||||
|
||||
Procedure do_cauta_altele
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
If m.llAviz
|
||||
Do Case
|
||||
Case Inlist(toForm.nid_tip,23,41)
|
||||
toForm.do_cauta_gestiune_dest()
|
||||
Case Inlist(toForm.nid_tip,21,25,28,42,47) && modificare v 2.0.93 : am adaugat 47
|
||||
toForm.do_cauta_comanda()
|
||||
Case toForm.nid_tip = 26
|
||||
toForm.do_cauta_contract()
|
||||
Case toForm.nid_tip = 24 && aviz retur
|
||||
toForm.do_cauta_avize()
|
||||
Endcase
|
||||
Else
|
||||
Do Case
|
||||
Case toForm.nid_tip=2
|
||||
toForm.do_cauta_contract()
|
||||
Case toForm.nid_tip=3
|
||||
toForm.do_cauta_comanda()
|
||||
Case toForm.nid_tip=4
|
||||
toForm.do_cauta_avize()
|
||||
*!* modificare v 2.0.46
|
||||
Case toForm.nid_tip=7
|
||||
toForm.do_cauta_factura()
|
||||
*!* modificare v 2.0.46 ^
|
||||
*!* modificare v 2.0.56
|
||||
Case Inlist(toForm.nid_tip,8,9)
|
||||
toForm.do_cauta_facturi()
|
||||
*!* modificare v 2.0.56 ^
|
||||
*!* modificare v 2.0.87
|
||||
Case toForm.nid_tip = 45
|
||||
toForm.do_cauta_locatii()
|
||||
*!* modificare v 2.0.87 ^
|
||||
Endcase
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_avize
|
||||
Lparameters toForm
|
||||
Local lcXMLAvize
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
lcXMLAvize = caut_avize(poDate.id_client) && oproceduri_facturare.prg
|
||||
If !Empty(lcXMLAvize)
|
||||
Xmltocursor(lcXMLAvize, "crsAvizeTemp")
|
||||
*!* modificare v 2.0.44
|
||||
Select id_vanzare,id_comanda,;
|
||||
Padl(Iif(!Empty(Nvl(serie_act,[])),Alltrim(serie_act)+[ ],[])+Alltrim(Str(numar_act,20)),50,[ ]) As numar_act ;
|
||||
From crsAvizeTemp Into Cursor crsAvizeTemp
|
||||
*!* modificare v 2.0.44 ^
|
||||
lcIdVanzare = cursor2lista("crsAvizeTemp", "id_vanzare", ",")
|
||||
lcNumar_Act = cursor2lista("crsAvizeTemp", "numar_act", ",")
|
||||
|
||||
poDate.listaid = lcIdVanzare
|
||||
poDate.descriere = lcNumar_Act
|
||||
AddProperty(poDate,"id_comanda_aviz",0)
|
||||
Select crsAvizeTemp
|
||||
Locate For Not Empty(ID_COMANDA)
|
||||
If Found()
|
||||
poDate.id_comanda_aviz=ID_COMANDA
|
||||
Endif
|
||||
Use In crsAvizeTemp
|
||||
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.but_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_client
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
If m.llAviz
|
||||
Local loCauta
|
||||
Do Case
|
||||
Case poDate.tip = 23
|
||||
loCauta = caut_gestiune_sursa([2,4,5,6,7]) && modificare v 2.0.71 : am adaugat 2
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_gestiune)
|
||||
poDate.id_client = loCauta.id_gestiune
|
||||
poDate.nume_client = loCauta.nume_gestiune
|
||||
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
Endif
|
||||
*!* modificare v 2.0.16
|
||||
Case poDate.tip = 41
|
||||
loCauta = caut_gestiune_sursa([2,4,5,6,7])
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_gestiune)
|
||||
poDate.id_client = loCauta.id_gestiune
|
||||
poDate.nume_client = loCauta.nume_gestiune
|
||||
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
Endif
|
||||
*!* modificare v 2.0.16 ^
|
||||
Case poDate.tip = 25
|
||||
loCauta = caut_gestiune_dest()
|
||||
If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_gestiune,0))
|
||||
poDate.id_client = loCauta.id_gestiune
|
||||
poDate.nume_client = loCauta.nume_gestiune
|
||||
|
||||
poDateGestiuneDest.id_gestiune = loCauta.id_gestiune
|
||||
poDateGestiuneDest.id_tipgest = loCauta.id_tipgest
|
||||
poDateGestiuneDest.Cont = Nvl(loCauta.Cont,[XXXX])
|
||||
poDateGestiuneDest.acont = Nvl(loCauta.acont,[XXXX])
|
||||
|
||||
lcSql = [begin ] + gcS + [.pack_facturare.cauta_date_comanda_gest(?poDate.id_client,?gnIdSucursala,] + ;
|
||||
[?poDate.dataact,?@poDate.listaid,?@poDate.descriere); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
amessagebox(goExecutor.oPrelucrareEroare(),0+16,"Eroare")
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
Endif
|
||||
|
||||
Endif
|
||||
Otherwise
|
||||
&& modificare v 2.0.93 : am adaugat 47
|
||||
loHash = GetHash([cTitlu=>Clienti??cCont=>]+Iif(INLIST(poDate.tip,42,47),[357],Iif(Inlist(poDate.tip,28,29),[461],Alltrim(gcCont411)))+[??lAdaugCorespondente=>1??lVerificaANAF=>1])
|
||||
loHash.SetValue('dDataDoc', Iif(Type('poDate.dataact') = 'D', poDate.dataact, {}))
|
||||
loCauta = CautPartenerContabilitate(loHash)
|
||||
If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire)
|
||||
poDate.id_client = loCauta.id_part
|
||||
poDate.nume_client = loCauta.denumire
|
||||
|
||||
If Inlist(poDate.tip,21,28,42,47) && modificare v 2.0.93 : am adaugat 47
|
||||
lcSql = [begin ] + gcS + [.pack_facturare.cauta_date_comanda(?poDate.id_client,?gnIdSucursala,] + ;
|
||||
[?poDate.dataact,?@poDate.listaid,?@poDate.descriere); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
amessagebox(goExecutor.oPrelucrareEroare(),0+16,"Eroare")
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
Endif
|
||||
Else
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
Endif
|
||||
|
||||
Endif
|
||||
Endcase
|
||||
|
||||
*!* modificare v 2.0.70
|
||||
If Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
Endif
|
||||
*!* modificare v 2.0.70 ^
|
||||
toForm.ct_clb_nume_client.Refresh()
|
||||
toForm.ct_contabilitate.ct_clb_lucrare.SetFocus()
|
||||
Else
|
||||
Local loCauta
|
||||
loHash = GetHash([cTitlu=>Clienti??cCont=>4111??lAdaugCorespondente=>1??lVerificaANAF=>1])
|
||||
loHash.SetValue('dDataDoc', Iif(Type('poDate.dataact') = 'D', poDate.dataact, {}))
|
||||
loCauta = CautPartenerContabilitate(loHash)
|
||||
If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire)
|
||||
If loCauta.id_part <> poDate.id_client
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
poDate.text_aditional = []
|
||||
Endif
|
||||
poDate.id_client = loCauta.id_part
|
||||
poDate.nume_client = loCauta.denumire
|
||||
poDate.cod_fiscal = loCauta.cod_fiscal
|
||||
|
||||
If poDate.tip = 3
|
||||
lcSql = [begin ] + gcS + [.pack_facturare.cauta_date_comanda(?poDate.id_client,?gnIdSucursala,] + ;
|
||||
[?poDate.dataact,?@poDate.listaid,?@poDate.descriere); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
amessagebox(goExecutor.oPrelucrareEroare(),0+16,"Eroare")
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
poDate.text_aditional = []
|
||||
Endif
|
||||
Endif
|
||||
|
||||
*!* If Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
*!* toForm.ct_clb_altele.Refresh()
|
||||
*!* Endif
|
||||
|
||||
* Soldul curent
|
||||
loSoldClient = GetSoldClient(poDate.id_client)
|
||||
toForm.nSoldLei = loSoldClient.sold_lei
|
||||
toForm.nSoldValuta = loSoldClient.sold_valuta
|
||||
toForm.txtSoldLei.Refresh()
|
||||
|
||||
toForm.txtCodFiscal.Refresh()
|
||||
|
||||
toForm.ct_clb_nume_client.Refresh()
|
||||
toForm.ct_contabilitate.ct_clb_lucrare.SetFocus()
|
||||
|
||||
toForm.ct_clb_nume_client.clb_TX_CAUTARE.text_SIMPLU1.ToolTipText = 'Id client: ' + TRANSFORM(poDate.id_client)
|
||||
Else
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
poDate.text_aditional = []
|
||||
|
||||
toForm.ct_clb_nume_client.clb_TX_CAUTARE.text_SIMPLU1.ToolTipText = ''
|
||||
|
||||
toForm.nSoldLei = 0
|
||||
toForm.nSoldValuta = 0
|
||||
toForm.txtSoldLei.Refresh()
|
||||
Endif
|
||||
*!* modificare v 2.0.70
|
||||
If Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
ENDIF
|
||||
*!* modificare v 2.0.70 ^
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_comanda
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
If m.llAviz
|
||||
Local loCauta
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales " + Iif(poDate.tip = 25,[gestiunea destinatie],[clientul]) + " !",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
If poDate.tip = 25
|
||||
loCauta = caut_comanda_gestiune(poDate.id_client)
|
||||
Else
|
||||
loCauta = caut_comanda_client(poDate.id_client)
|
||||
Endif
|
||||
If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_comanda,0))
|
||||
poDate.listaid = loCauta.id_comanda
|
||||
poDate.descriere = ALLTRIM(loCauta.nr_comanda)
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
Else
|
||||
* 12.03.2021
|
||||
* folosesc caut_comanda_clienti in loc de caut_comanda_client,
|
||||
* ca sa pot folosi un client diferit fata de comanda (ex: pers. fizica in loc de pers. juridica)
|
||||
Local loCauta
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
* loCauta = caut_comanda_client(poDate.id_client)
|
||||
loCauta = caut_comanda_clienti(poDate.id_client)
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_comanda)
|
||||
IF poDate.id_client <> loCauta.id_part
|
||||
AMESSAGEBOX('Comanda ' + ALLTRIM(TRANSFORM(loCauta.nr_comanda)) + ' (Client: ' + ALLTRIM(loCauta.nume) + ' Id: ' + ALLTRIM(TRANSFORM(loCauta.id_part)) + ')' + ;
|
||||
' nu apartine clientului ales (' + ALLTRIM(poDate.nume_client) + ' Id: ' + ALLTRIM(TRANSFORM(poDate.id_client)) + ')',0+48,_sCREEN.Caption)
|
||||
ENDIF
|
||||
poDate.listaid = loCauta.id_comanda
|
||||
poDate.descriere = loCauta.nr_comanda
|
||||
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.but_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_contract
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
If m.llAviz
|
||||
Local loCauta
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
*!* modificare v 2.0.67
|
||||
*!* loCauta = caut_contract_facturare(poDate.id_client)
|
||||
*!* If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_ctr,0))
|
||||
*!* poDate.listaid = loCauta.id_ctr
|
||||
*!* poDate.descriere = loCauta.contract
|
||||
*!* *!* If Inlist(loCauta.opt_facturare,3,4) And !Empty(loCauta.scadenta_incasare)
|
||||
*!* *!* poDate.datascad = poDate.dataact + loCauta.scadenta_incasare
|
||||
*!* *!* toForm.clb_data_scadenta.Refresh()
|
||||
*!* *!* *!* Else
|
||||
*!* *!* *!* poDate.datascad = Iif(gnScadentaAutomata=0,Gomonth(poDate.dataact,1),poDate.dataact+gnZileScadentaFact)
|
||||
*!* *!* Endif
|
||||
*!* toForm.ct_clb_altele.Refresh()
|
||||
*!* *!* modificare v 2.0.41
|
||||
*!* If Inlist(loCauta.opt_facturare,3,4)
|
||||
*!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
*!* Else
|
||||
*!* toForm.but_termin1.SetFocus()
|
||||
*!* Endif
|
||||
*!* Else
|
||||
*!* poDate.id_gestiune_init = Null
|
||||
*!* toForm.cgestiune_init = []
|
||||
*!* *!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
*!* *!* toForm.ct_contabilitate.ct_clb_gestiune_init.Refresh()
|
||||
*!* *!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .F.
|
||||
*!* *!* Endif
|
||||
*!* *!* toForm.but_termin1.SetFocus()
|
||||
*!* amessagebox("Acest contract este in rate si nu se poate emite aviz pentru el!",48,"Atentie")
|
||||
*!* Endif
|
||||
*!* *!* modificare v 2.0.41 ^
|
||||
*!* *!* toForm.buT_TERMIN1.SetFocus()
|
||||
*!* Endif
|
||||
lcXMLContracte = caut_contract_facturare(poDate.id_client,[3,4])
|
||||
If !Empty(lcXMLContracte) And gnButon = 1
|
||||
Xmltocursor(lcXMLContracte, "crsCtrTemp")
|
||||
poDate.listaid = cursor2lista("crsCtrTemp", "id_ctr", ",")
|
||||
poDate.descriere = cursor2lista("crsCtrTemp", "contract", ",")
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.but_termin1.SetFocus()
|
||||
Endif
|
||||
*!* Use In crsCtrTemp
|
||||
Endif
|
||||
*!* modificare v 2.0.67 ^
|
||||
Endif
|
||||
Else
|
||||
Local loCauta,lcXMLContracte
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
*!* modificare v 2.0.67
|
||||
*!* loCauta = caut_contract_facturare(poDate.id_client)
|
||||
*!* If !Isnull(loCauta) And !Empty(loCauta.id_ctr)
|
||||
*!* poDate.listaid = loCauta.id_ctr
|
||||
*!* poDate.descriere = loCauta.contract
|
||||
*!* toForm.ct_clb_altele.Refresh()
|
||||
*!* If Inlist(loCauta.opt_facturare,3,4)
|
||||
*!* If !Empty(loCauta.scadenta_incasare)
|
||||
*!* poDate.datascad = poDate.dataact + loCauta.scadenta_incasare
|
||||
*!* toForm.clb_data_scadenta.Refresh()
|
||||
*!* Endif
|
||||
*!* *!* modificare v 2.0.41
|
||||
*!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
*!* Else
|
||||
*!* toForm.but_termin1.SetFocus()
|
||||
*!* Endif
|
||||
*!* *!* modificare v 2.0.41 ^
|
||||
*!* Else
|
||||
*!* *!* poDate.datascad = Iif(gnScadentaAutomata=0,Gomonth(poDate.dataact,1),poDate.dataact+gnZileScadentaFact)
|
||||
*!* *!* modificare v 2.0.41
|
||||
*!* poDate.id_gestiune_init = Null
|
||||
*!* toForm.cgestiune_init = []
|
||||
*!* If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Refresh()
|
||||
*!* toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .F.
|
||||
*!* Endif
|
||||
*!* toForm.but_termin1.SetFocus()
|
||||
*!* Endif
|
||||
*!* *!* modificare v 2.0.41 ^
|
||||
lcXMLContracte = caut_contract_facturare(poDate.id_client)
|
||||
If !Empty(lcXMLContracte) And gnButon = 1
|
||||
Xmltocursor(lcXMLContracte, "crsCtrTemp")
|
||||
poDate.listaid = cursor2lista("crsCtrTemp", "id_ctr", ",")
|
||||
poDate.descriere = cursor2lista("crsCtrTemp", "contract", ",")
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
Select crsCtrTemp
|
||||
Calculate Min(scadenta_incasare),MAX(afisare_scadenta) For Inlist(opt_facturare,3,4,0) To lnScadentaIncasare,lnAfisareScadenta
|
||||
If lnScadentaIncasare <> 0
|
||||
poDate.datascad = poDate.dataact + lnScadentaIncasare
|
||||
toForm.clb_data_scadenta.Refresh()
|
||||
Endif
|
||||
poDate.afisare_scadenta = lnAfisareScadenta && modificare ROACONTRACTE v 2.0.38
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.Visible = .T.
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.but_termin1.SetFocus()
|
||||
Endif
|
||||
*!* Use In crsCtrTemp
|
||||
*!* modificare v 2.0.67 ^
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_factura
|
||||
Lparameters toForm
|
||||
*!* modificare v 2.0.46
|
||||
Local loCauta
|
||||
If Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
loCauta = caut_facturi_client(poDate.id_client)
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_fact)
|
||||
poDate.descriere = Alltrim(Alltrim(Nvl(loCauta.serie_act,[]))+[ ]+Alltrim(Str(loCauta.nract,14,0)))
|
||||
poDate.text_aditional = [INVOICE ] + poDate.descriere
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endif
|
||||
EndIf
|
||||
*!* modificare v 2.0.46 ^
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_facturi
|
||||
Lparameters toForm
|
||||
*!* modificare v 2.0.56
|
||||
Local loCauta
|
||||
Do Case
|
||||
Case Empty(Nvl(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales clientul!",0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Case Empty(Nvl(poDate.id_valuta,0)) And poDate.tip = 9
|
||||
amessagebox("Nu ati ales valuta!",0+48,"Atentie")
|
||||
toForm.ct_clb_valuta.SetFocus()
|
||||
OTHERWISE
|
||||
* 03.07.2020, marius
|
||||
* Nu stiu de ce se alegea o singura factura la retur.
|
||||
* Era si codul pentru mai multe facturi retur, dar era comentat
|
||||
|
||||
*!* loCauta = caut_facturi_multiple_client(poDate.id_client,poDate.in_valuta,poDate.id_valuta)
|
||||
*!* If gnButon = 1 and !Empty(Nvl(loCauta.id_vanzare,0))
|
||||
*!* poDate.listaid = Alltrim(Str(loCauta.id_vanzare))
|
||||
*!* poDate.descriere = Alltrim(Iif(!Empty(Nvl(loCauta.serie_act,[])),Alltrim(loCauta.serie_act)+[ ],[])+Alltrim(Str(loCauta.numar_act,20,0)))
|
||||
|
||||
* pentru mai multe facturi :
|
||||
lcXMLFacturi = caut_facturi_multiple_client(poDate.id_client,poDate.in_valuta,poDate.id_valuta,.T.)
|
||||
If !Empty(lcXMLFacturi) and gnButon = 1
|
||||
Xmltocursor(lcXMLFacturi, "crsFacturiTemp")
|
||||
Select id_vanzare,;
|
||||
Padl(Iif(!Empty(Nvl(serie_act,[])),Alltrim(serie_act)+[ ],[])+Alltrim(Str(numar_act,20,0)),50,[ ]) As numar_act ;
|
||||
From crsFacturiTemp Into Cursor crsFacturiTemp
|
||||
poDate.listaid = cursor2lista("crsFacturiTemp", "id_vanzare", ",")
|
||||
poDate.descriere = cursor2lista("crsFacturiTemp", "numar_act", ",")
|
||||
USE IN (SELECT('crsFacturiTemp'))
|
||||
|
||||
poDate.text_aditional = Iif(poDate.tip=8,[RETUR FACTURA ],[REFUND INVOICE FOR ]) + poDate.descriere
|
||||
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endcase
|
||||
*!* modificare v 2.0.56 ^
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_fdoc
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
loCauta = caut_fdoc()
|
||||
If !Isnull(loCauta) And !Empty(loCauta.fel_document)
|
||||
poDate.id_fdoc = loCauta.id_fdoc
|
||||
poDate.fdoc = loCauta.fel_document
|
||||
|
||||
toForm.clb_fdoc.Refresh()
|
||||
toForm.clb_dataact.SetFocus()
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_gestiune_dest
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
If Empty(NVL(poDate.id_client,0))
|
||||
amessagebox("Nu ati ales gestiunea " + Iif(poDate.tip = 41,"de la care se face returul!","sursa!") ,0+48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
Else
|
||||
If poDate.tip = 41
|
||||
loCauta = caut_gestiune_dest(poDate.id_client,[2,4,5,6,7]) && modificare v 2.0.71 : am adaugat 2
|
||||
Else
|
||||
loCauta = caut_gestiune_dest(poDate.id_client)
|
||||
Endif
|
||||
If !Isnull(loCauta) And !Empty(NVL(loCauta.id_gestiune,0))
|
||||
poDate.listaid = loCauta.id_gestiune
|
||||
poDate.descriere = loCauta.nume_gestiune
|
||||
|
||||
poDateGestiuneDest.id_gestiune = loCauta.id_gestiune
|
||||
poDateGestiuneDest.id_tipgest = loCauta.id_tipgest
|
||||
poDateGestiuneDest.Cont = Nvl(loCauta.Cont,[XXXX])
|
||||
poDateGestiuneDest.acont = Nvl(loCauta.acont,[XXXX])
|
||||
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
toForm.ct_clb_politici_preturi.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_gestiune_init
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
loCauta = caut_gestiune(0,gnIdUtil)
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_gestiune)
|
||||
poDate.id_gestiune_init = loCauta.id_gestiune
|
||||
toForm.cgestiune_init = loCauta.nume_gestiune
|
||||
Else
|
||||
poDate.id_gestiune_init = Null
|
||||
toForm.cgestiune_init = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.Refresh()
|
||||
If m.llAviz
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Else
|
||||
*!* modificare ROACONTRACTE v 2.0.42
|
||||
*!* toForm.buT_TERMIN1.SetFocus()
|
||||
toForm.ct_contabilitate.ed_tx_simplu1._edbase1.SetFocus()
|
||||
*!* modificare ROACONTRACTE v 2.0.42 ^
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_locatii
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
loCauta = caut_locatie_restaurant()
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_rest_locatie)
|
||||
poDate.listaid = loCauta.id_rest_locatie
|
||||
poDate.descriere = loCauta.locatie
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
toForm.but_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_lucrare
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
Local loCauta
|
||||
LOCAL llToateIreg, llNou, lcFiltruOriginal
|
||||
llToateIreg = .F.
|
||||
llNou = .T.
|
||||
lcFiltruOriginal = ''
|
||||
|
||||
loCauta = caut_lucrare(m.llToateIreg, m.llNou, m.lcFiltruOriginal)
|
||||
If m.llAviz
|
||||
|
||||
If !Empty(Nvl(loCauta.id_lucrare,0))
|
||||
poDate.id_lucrare = loCauta.id_lucrare
|
||||
poDate.nrord = loCauta.nrord
|
||||
Else
|
||||
poDate.id_lucrare = Null
|
||||
poDate.nrord = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_lucrare.Refresh()
|
||||
Else
|
||||
*!* modificare v 2.0.46
|
||||
*!* If !Empty(Nvl(loCauta.id_lucrare,0))
|
||||
*!* poDate.id_lucrare = loCauta.id_lucrare
|
||||
*!* poDate.nrord = loCauta.nrord
|
||||
|
||||
*!* toForm.ct_contabilitate.ct_clb_lucrare.Refresh()
|
||||
*!* Endif
|
||||
If gnButon = 1
|
||||
poDate.id_lucrare = loCauta.id_lucrare
|
||||
poDate.nrord = loCauta.nrord
|
||||
Else
|
||||
poDate.id_lucrare = Null
|
||||
poDate.nrord = []
|
||||
Endif
|
||||
*!* modificare v 2.0.46 ^
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_sectie.SetFocus()
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_politica
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
loCauta = caut_politici_curente_util()
|
||||
If !Isnull(loCauta) And !Empty(Nvl(loCauta.id_pol,0))
|
||||
poDate.id_pol = loCauta.id_pol
|
||||
poDate.nume_politica = loCauta.nume
|
||||
|
||||
toForm.ct_clb_politici_preturi.SetFocus()
|
||||
If Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Else
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_responsabil
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
loCauta = CautPartenerContabilitate(GetHash([cTitlu=>Responsabili??cTipuriParteneri=>]+Alltrim(Str(gnIdTipResponsabili))+[??lAdaugCorespondente=>1]))
|
||||
If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire)
|
||||
poDate.id_responsabil = loCauta.id_part
|
||||
poDate.responsabil = loCauta.denumire
|
||||
Else
|
||||
poDate.id_responsabil = Null
|
||||
poDate.responsabil = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_responsabil.Refresh()
|
||||
Do Case
|
||||
Case Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Otherwise
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endcase
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_sectie
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
Local loCauta
|
||||
LOCAL lnPornire, llDesktop, llToateIreg, llNou, lcFiltruOriginal
|
||||
lnPornire = 0
|
||||
llDesktop = .F.
|
||||
llToateIreg = .F.
|
||||
llNou = .T.
|
||||
lcFiltruOriginal = ''
|
||||
|
||||
loCauta = caut_sectie(lnPornire, llDesktop, m.llToateIreg, m.llNou, m.lcFiltruOriginal)
|
||||
If m.llAviz
|
||||
If !Empty(Nvl(loCauta.id_sectie,0))
|
||||
poDate.id_sectie = loCauta.id_sectie
|
||||
poDate.sectie = loCauta.sectie
|
||||
Else
|
||||
poDate.id_sectie = Null
|
||||
poDate.sectie = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_sectie.Refresh()
|
||||
Else
|
||||
*!* modificare v 2.0.46
|
||||
*!* If !Empty(Nvl(loCauta.id_sectie,0))
|
||||
*!* poDate.id_sectie = loCauta.id_sectie
|
||||
*!* poDate.sectie = loCauta.sectie
|
||||
*!* toForm.ct_contabilitate.ct_clb_sectie.Refresh()
|
||||
*!* Endif
|
||||
If gnButon = 1
|
||||
poDate.id_sectie = loCauta.id_sectie
|
||||
poDate.sectie = loCauta.sectie
|
||||
Else
|
||||
poDate.id_sectie = Null
|
||||
poDate.sectie = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_sectie.Refresh()
|
||||
*!* modificare v 2.0.46 ^
|
||||
Endif
|
||||
Do Case
|
||||
*!* modificare v 2.0.46
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_venchelt.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_venchelt.SetFocus()
|
||||
*!* modificare v 2.0.46 ^
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_responsabil.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_responsabil.SetFocus()
|
||||
Case Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
If m.llAviz
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
Endif
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U' && modificare v 2.0.41
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Otherwise
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endcase
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_valuta
|
||||
Lparameters toForm
|
||||
Local loCauta
|
||||
loCauta = caut_valuta(1,.F.,.T.)
|
||||
If !Isnull(loCauta) And !Empty(loCauta.id_valuta)
|
||||
poDate.id_valuta = loCauta.id_valuta
|
||||
poDate.nume_valuta = loCauta.nume_val
|
||||
|
||||
toForm.ct_clb_valuta.Refresh()
|
||||
If Type('toForm.clb_zi_curs.visible')<>'U'
|
||||
toForm.clb_zi_curs.SetFocus()
|
||||
Else
|
||||
toForm.clb_serie_act1.SetFocus()
|
||||
Endif
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure do_cauta_venchelt
|
||||
Lparameters toForm
|
||||
Local llAviz
|
||||
llAviz = This.EsteAviz()
|
||||
Local loCauta
|
||||
LOCAL lnPornire, llDesktop, lnTip, lnId, llToateIreg, llNou, lcFiltruOriginal
|
||||
lnPornire = 0
|
||||
llDesktop = .F.
|
||||
lnTip = 2 && venituri
|
||||
lnId = 0
|
||||
llToateIreg = .F.
|
||||
llNou = .T.
|
||||
lcFiltruOriginal = ''
|
||||
loCauta = caut_venchelt(m.lnPornire, m.llDesktop, m.lnTip, m.lnId, m.llToateIreg, m.llNou, m.lcFiltruOriginal)
|
||||
|
||||
If gnButon = 1
|
||||
poDate.id_venchelt = loCauta.id_venchelt
|
||||
poDate.venchelt = loCauta.explicatie
|
||||
Else
|
||||
poDate.id_venchelt = Null
|
||||
poDate.venchelt = []
|
||||
Endif
|
||||
toForm.ct_contabilitate.ct_clb_venchelt.Refresh()
|
||||
Do Case
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_responsabil.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_responsabil.SetFocus()
|
||||
Case Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
If m.llAviz
|
||||
toForm.ct_clb_altele.Refresh()
|
||||
Endif
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
Case Type('toForm.ct_contabilitate.ct_clb_gestiune_init.visible')<>'U'
|
||||
toForm.ct_contabilitate.ct_clb_gestiune_init.SetFocus()
|
||||
Otherwise
|
||||
toForm.buT_TERMIN1.SetFocus()
|
||||
Endcase
|
||||
Endproc
|
||||
|
||||
Procedure do_verifica
|
||||
Lparameters toForm
|
||||
Local loDate As "empty"
|
||||
Local lnOptiune, lnRaspuns, loPartener
|
||||
|
||||
lnOptiune = 1
|
||||
loPartener = Null
|
||||
loDate = Createobject("empty")
|
||||
|
||||
AddProperty(loDate, "denumire", poDate.nume_client)
|
||||
AddProperty(loDate, "cod_fiscal", poDate.cod_fiscal)
|
||||
AddProperty(loDate, "tip_verificare", "ANAF_SERVICIU_WEB")
|
||||
|
||||
lnRaspuns = VerificaCodFiscal(loDate, @lnOptiune, @loPartener)
|
||||
Endproc
|
||||
|
||||
Procedure valideaza_antet
|
||||
Lparameters toForm
|
||||
Local plReturn,lcFacturi_dublate, llCopiere, llAviz
|
||||
Store .T. To plReturn
|
||||
llAviz = This.EsteAviz()
|
||||
llCopiere = toForm.lCopiere && copiere factura/aviz
|
||||
|
||||
Do Case
|
||||
Case Empty(poDate.dataireg)
|
||||
amessagebox("Nu ati completat data inregistrarii!",48,"Atentie")
|
||||
toForm.clb_dataireg.SetFocus()
|
||||
plReturn = .F.
|
||||
Case Empty(poDate.dataact)
|
||||
amessagebox("Nu ati completat data documentului!",48,"Atentie")
|
||||
toForm.clb_dataact.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And Empty(poDate.datascad)
|
||||
amessagebox("Nu ati completat data scadenta!",48,"Atentie")
|
||||
toForm.clb_data_scadenta.SetFocus()
|
||||
plReturn = .F.
|
||||
Case Isnull(poDate.id_fdoc) Or Empty(poDate.id_fdoc)
|
||||
amessagebox("Nu ati ales felul documentului!",48,"Atentie")
|
||||
toForm.clb_fdoc.SetFocus()
|
||||
plReturn = .F.
|
||||
*!* modificare v 2.0.56
|
||||
Case !m.llAviz And poDate.in_valuta = 1 And Empty(Nvl(poDate.zi_curs,{})) And Type('toForm.clb_zi_curs.visible')<>'U'
|
||||
*!* Case poDate.in_valuta = 1 And Empty(Nvl(poDate.zi_curs,{}))
|
||||
*!* modificare v 2.0.56 ^
|
||||
amessagebox("Nu ati completat ziua cursului valutar!",48,"Atentie")
|
||||
toForm.clb_zi_curs.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And poDate.in_valuta = 1 And Empty(Nvl(poDate.id_valuta,0))
|
||||
amessagebox("Nu ati completat valuta!",48,"Atentie")
|
||||
toForm.ct_clb_valuta.SetFocus()
|
||||
plReturn = .F.
|
||||
Case Empty(poDate.nract)
|
||||
amessagebox("Nu ati completat numarul documentului!",48,"Atentie")
|
||||
toForm.clb_nract.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !Between(poDate.dataireg,Date(gnAn,gnLuna,1),Gomonth(Date(gnAn,gnLuna,1),1)-1)
|
||||
amessagebox("Data inregistrarii trebuie sa fie din luna "+Alltrim(Str(gnLuna))+"/"+Alltrim(Str(gnAn))+" !",48,"Atentie")
|
||||
toForm.clb_dataireg.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And poDate.datascad<poDate.dataact
|
||||
amessagebox("Data scadenta trebuie sa fie mai mare sau egala cu data documentului!",48,"Atentie")
|
||||
toForm.clb_data_scadenta.SetFocus()
|
||||
plReturn = .F.
|
||||
Case poDate.dataact>poDate.dataireg
|
||||
amessagebox("Data documentului trebuie sa fie mai mica sau egala cu data inregistrarii!",48,"Atentie")
|
||||
toForm.clb_dataact.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And (Empty(poDate.id_client) Or Isnull(poDate.id_client)) && aviz: fara validare client
|
||||
amessagebox("Nu ati ales clientul!",48,"Atentie")
|
||||
toForm.ct_clb_nume_client.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And Empty(Nvl(poDate.descriere,[])) And poDate.tip = 7
|
||||
amessagebox("Nu ati ales factura!",48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
Case !m.llAviz And Empty(Nvl(poDate.descriere,[])) And m.llCopiere
|
||||
amessagebox("Nu ati ales factura de copiat!",48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
Case m.llAviz And Empty(Nvl(poDate.descriere,[])) And m.llCopiere
|
||||
amessagebox("Nu ati ales avizul de copiat!",48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
*!* modificare v 2.0.56
|
||||
Case !m.llAviz And Empty(Nvl(poDate.descriere,[])) And Inlist(poDate.tip,8,9)
|
||||
amessagebox("Nu ati ales factura/facturile pentru care se face returul!",48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
*!* modificare v 2.0.56 ^
|
||||
Case !m.llAviz And Empty(Nvl(poDate.listaid,[])) And !Inlist(poDate.tip,1,5,7,8,9,10,48,49) && modificare : am adaugat 10 ( v 2.0.56 ), 48 ( v 2.0.93 ), 49 ( v 2.0.95 )
|
||||
Do Case
|
||||
Case Inlist(poDate.tip, 2, 6, 52)
|
||||
lcMesaj = [Nu ati ales contractul!]
|
||||
Case poDate.tip = 3
|
||||
lcMesaj = [Nu ati ales comanda!]
|
||||
Case poDate.tip = 4
|
||||
lcMesaj = [Nu ati ales avizul!]
|
||||
Case poDate.tip = 45 && modificare v 2.0.87
|
||||
lcMesaj = [Nu ati ales locatia!]
|
||||
Endcase
|
||||
amessagebox(lcMesaj,48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
Case m.llAviz And Empty(Nvl(poDate.listaid,[])) And Inlist(poDate.tip,21,23,25,26,28,41,42,47) && modificare v 2.0.93 : am adaugat 47
|
||||
Do Case
|
||||
Case INLIST(poDate.tip,21,25,28,42,47) && modificare v 2.0.93 : am adaugat 47
|
||||
lcMesaj = [Nu ati ales comanda!]
|
||||
Case poDate.tip = 23
|
||||
lcMesaj = [Nu ati ales gestiunea destinatie!]
|
||||
*!* modificare v 2.0.16
|
||||
Case poDate.tip = 41
|
||||
lcMesaj = [Nu ati ales gestiunea catre care se face returul!]
|
||||
*!* modificare v 2.0.16 ^
|
||||
Case poDate.tip = 26
|
||||
lcMesaj = [Nu ati ales contractul!]
|
||||
Endcase
|
||||
amessagebox(lcMesaj,48,"Atentie")
|
||||
toForm.ct_clb_altele.SetFocus()
|
||||
plReturn = .F.
|
||||
Case m.llAviz And Empty(Nvl(poDate.id_pol,0)) And InList(poDate.tip,23,41)
|
||||
amessagebox("Nu ati ales politica de preturi!",48,"Atentie")
|
||||
toForm.ct_clb_politici_preturi.SetFocus()
|
||||
plReturn = .F.
|
||||
Otherwise
|
||||
*!* modificare v 2.0.46
|
||||
*!* plReturn = .T.
|
||||
lcFacturi_dublate = facturi_duplicate(Iif(m.llAviz,'418','4111'), 0, poDate.serie_act, poDate.nract, [])
|
||||
If !Empty(lcFacturi_dublate)
|
||||
lnRaspuns = amessagebox(lcFacturi_dublate + Chr(13)+"Doriti sa continuati?",4+32,Iif(m.llAviz,"Avize dublate","Facturi dublate"))
|
||||
plReturn = (m.lnRaspuns = 6)
|
||||
Endif
|
||||
*!* modificare v 2.0.46 ^
|
||||
|
||||
* Daca FACTURA si clientul se numeste "CLIENT"[I DIVERSI]
|
||||
* Atentionez ca ar trebui sa se aleaga "BON FISCAL" in loc de "FACTURA"
|
||||
IF poDate.nIdTipDoc = poDate.nIdTipDocFactura AND 'CLIENT'$UPPER(NVL(poDate.nume_client,''))
|
||||
lnRaspuns = amessagebox('Ati ales clientul ' + ALLTRIM(poDate.nume_client) + ' si Tip document = FACTURA in loc de BON FISCAL' + Chr(13)+"Doriti sa continuati?",4+32,"Bon Fiscal")
|
||||
plReturn = (m.lnRaspuns = 6)
|
||||
ENDIF
|
||||
Endcase
|
||||
Return plReturn
|
||||
Endproc
|
||||
|
||||
Function alege_tipdoc
|
||||
Lparameters tcTipDoc
|
||||
LOCAL lnIdTipDoc, lcTipDoc
|
||||
lcTipDoc = UPPER(m.tcTipDoc)
|
||||
|
||||
lnIdTipDoc = IIF(m.lcTipDoc = 'FACTURA', poDate.nIdTipDocFactura, ;
|
||||
IIF(m.lcTipDoc = 'PROFORMA', poDate.nIdTipDocProforma, ;
|
||||
IIF(m.lcTipDoc = 'BON FISCAL', poDate.nIdTipDocBonFiscal, ;
|
||||
IIF(m.lcTipDoc = 'AVIZ', poDate.nIdTipDocAvizExpeditie, poDate.nIdTipDocFactura))))
|
||||
|
||||
*!* poDate.nIdTipDocFactura = 5
|
||||
*!* poDate.nIdTipDocProforma = 23
|
||||
*!* poDate.nIdTipDocBonFiscal = 3
|
||||
*!* poDate.nIdTipDocAvizExpeditie = 6
|
||||
|
||||
*!* poDate.eProforma = IIF(m.lnIdTipDoc = poDate.nIdTipDocProforma, 1, 0)
|
||||
*!* poDate.eBonFiscal = IIF(m.lnIdTipDoc = poDate.nIdTipDocBonFiscal, 1, 0)
|
||||
poDate.initializeaza_setari_document(IIF(m.lnIdTipDoc = poDate.nIdTipDocBonFiscal, -101, IIF(m.lnIdTipDoc = poDate.nIdTipDocProforma, -102, poDate.Tip)))
|
||||
Return m.lnIdTipDoc
|
||||
Endfunc
|
||||
|
||||
Function schimba_tipdoc
|
||||
Lparameters tnIdTipDoc
|
||||
IF poDate.nIdTipDoc = m.tnIdTipDoc
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
poDate.nract = 0
|
||||
poDate.serie_act = ""
|
||||
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
poDate.nIdTipDoc = m.tnIdTipDoc && se initializeaza automat si .eBonFiscal, .eProforma
|
||||
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc) && 1 = CU SERIE, 2 = FARA SERIE CU PLAJE, 3 = CU SERIE SI PLAJE
|
||||
Return .T.
|
||||
Endfunc
|
||||
|
||||
Enddefine
|
||||
@@ -55,6 +55,15 @@
|
||||
*!* 14.04.2026
|
||||
*!* + oDateFactura.cod_fiscal
|
||||
|
||||
*!* 31.08.2026
|
||||
*!* agent
|
||||
*!* creeaza_facturacrs + campul procdisc (procent discount calculat, needitabil) pentru S4c
|
||||
|
||||
*!* 04.09.2026
|
||||
*!* agent
|
||||
*!* prelucreaza_facturacrs + vpretctva/vdiscountctva in lista de insert (pretul si discountul
|
||||
*!* unitar in valuta cu TVA inclus, care plecau 0 la Oracle la reemiterea documentelor in valuta)
|
||||
|
||||
***************************************************************************************************************
|
||||
**** Clase:
|
||||
**** oDateFactura
|
||||
@@ -202,6 +211,7 @@ Define Class oDateFactura As Custom
|
||||
tva_incasare = 0 && modificare ROAGEST v 2.2.0
|
||||
id_facturare = NULL && id adresa facturare
|
||||
adresa_facturare = '' && adresa factuare text
|
||||
motiv_discount = '' && motivul discountului pe factura, valabil doar in sesiunea de editare
|
||||
nListareDetaliata = 0 && articolele se listeaza cumulat dupa cantitate sau detaliat, asa cum au fost adaugate pe factura
|
||||
nListareSilentioasa = 0 && listare fara previzualizare
|
||||
nListareJustPDF = 0 && listare doar pdf
|
||||
@@ -219,13 +229,19 @@ Define Class oDateFactura As Custom
|
||||
eFactura = 0 && 0/1 = se transmite in borderoul eFactura
|
||||
sold_lei = 0 && soldul total pe client la emiterea facturii in lei
|
||||
sold_valuta = 0 && soldul total pe client la emiterea facturii in valuta (nediferentiat pe valuta)
|
||||
|
||||
lProformaSursa = .F. && documentul a fost copiat dintr-o proforma
|
||||
nIdProformaSursa = 0 && id_vanzare al proformei sursa, pentru legatura VANZARI_CORESP
|
||||
lEditare = .F. && document existent deschis in editare, nu document nou
|
||||
id_ruta = NULL && ID_RUTA al documentului deschis in editare
|
||||
cListaSursa = [] && comanda/contract sursa a documentului deschis in editare
|
||||
cListaSursaAvize = [] && avizele sursa ale documentului deschis in editare
|
||||
|
||||
Procedure Init
|
||||
Lparameters tnIdSet, tnTip
|
||||
Lparameters tnIdSet, tnTip, toSursa
|
||||
&& 0,0 - la listare
|
||||
&& id_set,tip
|
||||
|
||||
Local ldData
|
||||
Local ldData, loSursa
|
||||
If !Empty(m.tnIdSet)
|
||||
&& modificare ROAFACTURARE v 2.0.58
|
||||
Use In (SELECT('crsoDateDocAtasate'))
|
||||
@@ -258,22 +274,27 @@ Define Class oDateFactura As Custom
|
||||
.discount_evidentiat = IIF(TYPE('gnDiscountEvidentiat') = 'N', m.gnDiscountEvidentiat, 1)
|
||||
.nRelistare = 0 && modificare ROAFACTURARE v 2.0.58
|
||||
|
||||
If INLIST(m.tnTip, 2, 6, 52) And Type('goContract') <> 'U' && FACTURARE DIN ROACONTRACTE
|
||||
.id_client = goContract.id_part
|
||||
.nume_client = goContract.denumire
|
||||
.cod_fiscal = ALLTRIM(NVL(goContract.cod_fiscal, ''))
|
||||
.listaid = goContract.id_ctr
|
||||
.descriere = goContract.contract
|
||||
.id_sectie = goContract.id_sectie
|
||||
.sectie = goContract.sectie
|
||||
.id_responsabil = goContract.id_responsabil
|
||||
.responsabil = goContract.responsabil
|
||||
.id_valuta = goContract.id_valuta
|
||||
.nume_valuta = goContract.nume_val
|
||||
loSursa = Iif(Type('toSursa') = 'O', toSursa, Null)
|
||||
|
||||
If INLIST(m.tnTip, 2, 6, 52) And (Type('loSursa') = 'O' Or Type('goContract') <> 'U') && FACTURARE DIN ROACONTRACTE
|
||||
If Type('loSursa') <> 'O'
|
||||
loSursa = goContract
|
||||
Endif
|
||||
.id_client = loSursa.id_part
|
||||
.nume_client = loSursa.denumire
|
||||
.cod_fiscal = ALLTRIM(NVL(loSursa.cod_fiscal, ''))
|
||||
.listaid = loSursa.id_ctr
|
||||
.descriere = loSursa.contract
|
||||
.id_sectie = loSursa.id_sectie
|
||||
.sectie = loSursa.sectie
|
||||
.id_responsabil = loSursa.id_responsabil
|
||||
.responsabil = loSursa.responsabil
|
||||
.id_valuta = loSursa.id_valuta
|
||||
.nume_valuta = loSursa.nume_val
|
||||
|
||||
lcSql = [ select id_ctr, contract, numar, data, denumire, scadenta_incasare, opt_facturare, text_standard, afisare_scadenta ]+;
|
||||
[ FROM fact_vcontracte ]+;
|
||||
[ where id_ctr = ] + Alltrim(Str(goContract.id_ctr))
|
||||
[ where id_ctr = ] + Alltrim(Str(loSursa.id_ctr))
|
||||
lnSucces = goExecutor.oExecute(lcSql,'crsCtrTemp')
|
||||
|
||||
If lnSucces < 0
|
||||
@@ -298,18 +319,23 @@ Define Class oDateFactura As Custom
|
||||
|
||||
|
||||
|
||||
If tnTip = 3 And Type('goComanda') = 'O' && FACTURARE DIN ROACOMENZI
|
||||
.id_client = goComanda.id_part
|
||||
.nume_client = ALLTRIM(goComanda.nume)
|
||||
.cod_fiscal = ALLTRIM(NVL(goComanda.cod_fiscal, ''))
|
||||
.listaid = goComanda.id_comanda
|
||||
.descriere = goComanda.nr_comanda
|
||||
.id_sectie = goComanda.id_sectie
|
||||
loSursa = Iif(Type('toSursa') = 'O', toSursa, Null)
|
||||
|
||||
If tnTip = 3 And (Type('loSursa') = 'O' Or Type('goComanda') = 'O') && FACTURARE DIN ROACOMENZI
|
||||
If Type('loSursa') <> 'O'
|
||||
loSursa = goComanda
|
||||
Endif
|
||||
.id_client = loSursa.id_part
|
||||
.nume_client = ALLTRIM(loSursa.nume)
|
||||
.cod_fiscal = ALLTRIM(NVL(loSursa.cod_fiscal, ''))
|
||||
.listaid = loSursa.id_comanda
|
||||
.descriere = loSursa.nr_comanda
|
||||
.id_sectie = loSursa.id_sectie
|
||||
*!* .sectie = goComanda.sectie
|
||||
*!* .id_responsabil = goComanda.id_responsabil
|
||||
*!* .responsabil = goComanda.responsabil
|
||||
|
||||
lcSql = [ select sectie from nom_sectii where id_sectie = ] + ALLTRIM(STR(goComanda.id_sectie))
|
||||
lcSql = [ select sectie from nom_sectii where id_sectie = ] + ALLTRIM(STR(loSursa.id_sectie))
|
||||
lnSucces = goExecutor.oExecute(lcSql,'crsComTemp')
|
||||
|
||||
If lnSucces < 0
|
||||
@@ -385,6 +411,8 @@ Define Class oDateFactura As Custom
|
||||
.nrinmat = ALLTRIM(NVL(toDateAnterior.nrinmat, ''))
|
||||
.id_masina = toDateAnterior.id_masina
|
||||
.listaid = toDateAnterior.id_vanzare
|
||||
.lProformaSursa = PEMSTATUS(toDateAnterior,'eproforma',5) And Nvl(toDateAnterior.eproforma,0) = 1
|
||||
.nIdProformaSursa = Iif(This.lProformaSursa, toDateAnterior.id_vanzare, 0)
|
||||
.descriere = Alltrim(Alltrim(Nvl(toDateAnterior.serie_act,[]))+[ ]+Alltrim(Str(toDateAnterior.numar_act,14,0)))
|
||||
.id_client = toDateAnterior.id_part
|
||||
.nume_client = toDateAnterior.client
|
||||
@@ -570,6 +598,7 @@ Define Class oDateFactura As Custom
|
||||
.sumavorbe = [] && modificare ROAFACTURARE v 2.0.78
|
||||
.coeficient_k = 0 && modificare ROAFACTURARE v 2.0.93
|
||||
.explicatia4 = [] && modificare ROACONTRACTE v 2.0.42
|
||||
.motiv_discount = ''
|
||||
.id_ordl = NULL && modificare ROAAUTO v 2.0.33
|
||||
.id_facturare = NULL
|
||||
.nListareDetaliata = 0
|
||||
@@ -577,6 +606,8 @@ Define Class oDateFactura As Custom
|
||||
.nListareJustPDF = 0 && listare doar pdf
|
||||
.oClient = NULL
|
||||
.lCopiere = .F. && copiere factura/aviz
|
||||
.lProformaSursa = .F.
|
||||
.nIdProformaSursa = 0
|
||||
.nIdBeneficiar = Null
|
||||
.nTipFactura = NULL && tip intern factura (ex: ACN 0=TRANZIT/1=CHEIAJ/3=CHIRII/5=APA/6=PENALITATI)
|
||||
.id_util = NULL && id utilizator
|
||||
@@ -762,6 +793,32 @@ Function recalculeaza_pret_vanzare_lei
|
||||
Endfunc && recalculeaza_pret_vanzare_lei
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
Function deriva_cont_venit_fara_pol
|
||||
* S4g: contul de venit pentru linia fara politica de pret - coresp_cont_venchelt pe contul de gestiune, apoi nom_articole.cont daca incepe cu 6/7, altfel 704
|
||||
Lparameters tnIdArticol,tcContGestiune
|
||||
Local lcCont,lcSql,lnSucces
|
||||
lcCont = [704]
|
||||
If Isnull(tnIdArticol)
|
||||
Return lcCont
|
||||
Endif
|
||||
lcSql = [select nvl((select cont_venit from vcoresp_cont_venchelt where cont = '] + ;
|
||||
OracleSpecialCharacters(Alltrim(Nvl(tcContGestiune,[]))) + [' and cont_venit is not null),] + ;
|
||||
[case when substr(cont,1,1) in ('6','7') then cont else '704' end) as cont_venit ] + ;
|
||||
[from nom_articole where id_articol = ] + Alltrim(Str(tnIdArticol))
|
||||
If Used('crscontvenit')
|
||||
Use In crscontvenit
|
||||
Endif
|
||||
lnSucces = goExecutor.oExecute(lcSql,[crscontvenit])
|
||||
If lnSucces >= 0 And Used('crscontvenit') And Reccount('crscontvenit') > 0
|
||||
lcCont = Alltrim(Nvl(crscontvenit.cont_venit,[704]))
|
||||
Endif
|
||||
If Used('crscontvenit')
|
||||
Use In crscontvenit
|
||||
Endif
|
||||
Return lcCont
|
||||
Endfunc && deriva_cont_venit_fara_pol
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
*!* Function recalculeaza_pret_vanzare_lei_set
|
||||
*!* Lparameters tcTabel,tnCurs
|
||||
*!* Local llReturn
|
||||
@@ -1775,7 +1832,7 @@ Procedure creeaza_facturacrs
|
||||
Create Cursor (tcNumeCursor) (id_c N(20),id_temp N(20),id_articol N(20) null,id_pol N(20) Null,id_gestiune N(20),Cont c(4),um c(10) Null, cod_um_iso c(5) null, ;
|
||||
id_valuta N(10),gestionabil N(1),tip_valuta N(1),Curs N(20,4),multiplicator N(10),id_jtva_coloana N(20) Null,id_jtva_coloana_ex N(20) Null,codmat c(100),codmatc c(100),codmatf c(100),codbare c(50),;
|
||||
pret_achizitie N(20,max(gnPPret,4)),denumire c(100),pretftva N(20,max(gnPPretV,precizie_max_pret_vz)),pretctva N(20,max(gnPPretV,precizie_max_pret_vz)),valftva N(20,max(gnPc,4)), valtva N(20,max(gnPc,4)),valctva N(20,max(gnPc,4)),;
|
||||
cantitate N(20,max(gnPCant,4)),discountftva N(20,max(gnPPretV,4)), discountctva N(20,max(gnPPretV,precizie_max_pret_vz)), valdiscountftva N(20,max(gnPc,4)),valdiscounttva N(20,max(gnPc,4)),;
|
||||
cantitate N(20,max(gnPCant,4)),discountftva N(20,max(gnPPretV,4)), discountctva N(20,max(gnPPretV,precizie_max_pret_vz)), procdisc N(10,2), valdiscountftva N(20,max(gnPc,4)),valdiscounttva N(20,max(gnPc,4)),;
|
||||
valdiscountctva N(20,max(gnPc,4)),valdiminuatftva N(20,max(gnPc,4)),valdiminuattva N(20,max(gnPc,4)),valdiminuatctva N(20,max(gnPc,4)),proc_Tvav N(20,4),cu_tva N(1), lot C(20) null, serie c(100) Null,;
|
||||
vpretftva N(20,max(gnPVal,precizie_max_pret_vz)),vpretctva N(20,max(gnPVal,precizie_max_pret_vz)),vvalftva N(20,max(gnPVal,4)),vvaltva N(20,max(gnPVal,4)),vvalctva N(20,max(gnPVal,4)),;
|
||||
vdiscountftva N(20,max(gnPVal,4)),vdiscountctva N(20,max(gnPVal,4)),vvaldiscountftva N(20,max(gnPVal,4)),vvaldiscounttva N(20,max(gnPVal,4)),;
|
||||
@@ -1806,7 +1863,7 @@ Procedure prelucreaza_facturacrs
|
||||
Insert Into (tcCursorDestinatie) (id_articol,id_temp,explicatie,denumire,lot,serie,codmat,codmatc,id_jtva_coloana,id_jtva_coloana_ex,taxcode,codmatf,codbare,pret_achizitie,cantitate,proc_Tvav,um,cod_um_iso,;
|
||||
cu_tva,pretctva,discountctva,valctva,valdiscountctva,valdiminuatctva,pretftva,;
|
||||
valftva,valtva,discountftva,valdiscountftva,valdiscounttva,valdiminuatftva,;
|
||||
valdiminuattva,vpretftva,vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,;
|
||||
valdiminuattva,vpretftva,vpretctva,vvalftva,vvaltva,vdiscountftva,vdiscountctva,vvaldiscountftva,vvaldiscounttva,;
|
||||
vvaldiminuatftva,vvaldiminuattva,id_set_fact,gestionabil,id_ctr,numar_contract,id_valuta,tip_valuta,Curs,multiplicator,nume_val,codnc8,codcpv) ;
|
||||
SELECT CAST(IIF(TYPE(tcCursorSursa+".id_articol")='U',0,id_articol) as N(20)) as id_articol,id_vanzare_det As id_temp,;
|
||||
explicatie,denumire,lot,serie,Nvl(codmat,Space(50)) As codmat,IIF(TYPE(tcCursorSursa + '.codmatc') = 'C', Nvl(codmatc,Space(50)), SPACE(50)) As codmatc,id_jtva_coloana,id_jtva_coloana_ex,taxcode,;
|
||||
@@ -1853,6 +1910,8 @@ Procedure prelucreaza_facturacrs
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(Pret_val,gnPVal),;
|
||||
Round(Round(Pret_val,gnPVal)/proc_Tvav,gnPVal)) As vpretftva,;
|
||||
Iif(pret_cu_tva = 1,Round(Pret_val,gnPVal),;
|
||||
Round(Pret_val,gnPVal)+Round(Round(Pret_val,gnPVal)*(proc_Tvav-1),gnPVal)) As vpretctva,;
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal),;
|
||||
ROUND(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal) - ;
|
||||
@@ -1863,6 +1922,7 @@ Procedure prelucreaza_facturacrs
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(discount_unitar_val,gnPVal),;
|
||||
Round(Round(discount_unitar_val,gnPVal)/proc_Tvav,gnPVal)) As vdiscountftva,;
|
||||
Iif(pret_cu_tva = 1,Round(discount_unitar_val,gnPVal),0.000) As vdiscountctva,;
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal),;
|
||||
ROUND(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal) - ;
|
||||
@@ -2222,3 +2282,25 @@ Procedure completeaza_explicatie_contract
|
||||
Release lnPozI,lnPozF,lnIdCtr, lnIdCtrPrec, lnDimArray,lnIndex,lcNrContract,lnIndexMax
|
||||
Endproc && completeaza_explicatie_contract
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
******************************* INCEPUT: scrie_legatura_proforma ****************************************
|
||||
Function scrie_legatura_proforma
|
||||
Local lcSql, lnSucces, llReturn
|
||||
llReturn = .T.
|
||||
* legatura proforma -> factura in VANZARI_CORESP (TIP = 4); clistaid se trimite explicit,
|
||||
* nu se citeste din starea sesiunii, pentru ca poDate.listaid poate fi rescris de articolele retur
|
||||
If Type('poDate') = 'O' And poDate.lProformaSursa And Nvl(poDate.nIdProformaSursa,0) > 0 ;
|
||||
And Between(Nvl(poDate.nid_vanzare,0), 1, 9999999998)
|
||||
lcSql = [begin pack_facturare.nid_vanzare := ] + Alltrim(Str(poDate.nid_vanzare,20,0)) + [;] + ;
|
||||
[ pack_facturare.clistaid := '] + Alltrim(Str(poDate.nIdProformaSursa,20,0)) + [';] + ;
|
||||
[ pack_facturare.scrie_corespondente_vanzari(4); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare")
|
||||
llReturn = .F.
|
||||
Endif
|
||||
Endif
|
||||
Return llReturn
|
||||
Endfunc && scrie_legatura_proforma
|
||||
******************************* SFARSIT: scrie_legatura_proforma *****************************************
|
||||
*********************************************************************************************************
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
*** ofacturare_editare
|
||||
|
||||
*!* 11.08.2026
|
||||
*!* 06.09.2026
|
||||
*!* marius.mutu
|
||||
*!* helpere comune pentru editarea unei facturi emise: garda eFactura, cursoarele notei si ale rulajelor,
|
||||
*!* helpere comune pentru editarea unei facturi emise: garda eFactura, garda pe urmasi in lantul
|
||||
*!* aviz -> factura -> retur (VANZARI_CORESP), incarcarea antetului unui document existent (FACT_VFACTURI)
|
||||
*!* intr-un oDateFactura nou (tnIdSet=0, lEditare=.T.), cu discountul de document ca suma si lista de
|
||||
*!* avize sursa (VANZARI_CORESP, TIP=1), liniile unui document existent (VVANZARI_ARTICOLE) direct in
|
||||
*!* crsfactura, cu gestionabil din nomenclatorul curent, contul liniei din document, pretul de
|
||||
*!* vanzare al lotului reluat din rulajul original (RUL) numai pe gestiunile la pret de vanzare
|
||||
*!* (nr_pag 6/7, ca in STOC) si legatura de rezervare (id_part_rez/id_lucrare_rez) tot din RUL,
|
||||
*!* si zi_curs/dataact/datascad normalizate la Date (Ttod) din data_act/data_scad, care vin din
|
||||
*!* Oracle ca DateTime, cursoarele notei si ale rulajelor,
|
||||
*!* randul de vanzare corespunzator notei (inclusiv valuta documentului: in_valuta/id_valuta/nume_val,
|
||||
*!* si id_fact - pentru garda eFactura pe pagina de articole),
|
||||
*!* liniile de articole pentru pagina de articole factura (inclusiv in_stoc si id_vanzare_set/pret_achizitie,
|
||||
@@ -13,7 +21,10 @@
|
||||
*!* compararea/aplicarea sincronizarii cantitate/pret intre rulaje (trul) si articolele facturii (tvd),
|
||||
*!* agregate pe id_articol, in ambele sensuri (documentele in valuta raman doar semnalate, neaplicate);
|
||||
*!* pe linia de articol se poate alege si explicatia TVA (filtrata pe cota liniei), care recoreleaza
|
||||
*!* codul SAF-T, iar liniile deja salvate se actualizeaza cu toate campurile pe care grila le schimba
|
||||
*!* codul SAF-T, iar liniile deja salvate se actualizeaza cu toate campurile pe care grila le schimba,
|
||||
*!* si oglindirea in IncarcaAntetFacturaEditare a copierii incasat->incasatCARD facuta la emitere
|
||||
*!* directa pentru documentele cu tip_incasare=3 (POS/Card), ca reemiterea sa nu mai gaseasca
|
||||
*!* lista de incasare goala in do_scrie_factura
|
||||
|
||||
|
||||
*!* parametru: id_fact
|
||||
@@ -30,6 +41,257 @@ FUNCTION EsteInEFactura
|
||||
ENDFUNC && EsteInEFactura
|
||||
|
||||
|
||||
*!* parametru: id_vanzare; verifica daca documentul are urmasi (aviz/factura/retur) prin VANZARI_CORESP
|
||||
FUNCTION DocumentAreUrmasi
|
||||
LPARAMETERS tnIdVanzare
|
||||
|
||||
LOCAL lcSql, lnNr, llSucces
|
||||
lnNr = 0
|
||||
lcSql = [select count(*) as lnnr from vanzari_coresp where sters = 0 and (] + ;
|
||||
[(tip in (1,2,3) and id_vanzare_aviz = ] + Alltrim(Str(Nvl(m.tnIdVanzare,0))) + [) or ] + ;
|
||||
[(tip = 2 and id_vanzare_aviz in (select id_vanzare_aviz from vanzari_coresp ] + ;
|
||||
[where sters = 0 and tip = 1 and id_vanzare_fact = ] + Alltrim(Str(Nvl(m.tnIdVanzare,0))) + [)))]
|
||||
llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @lnNr)
|
||||
|
||||
RETURN (Nvl(m.lnNr,0) > 0)
|
||||
ENDFUNC && DocumentAreUrmasi
|
||||
|
||||
|
||||
*!* parametru: id_vanzare al unui document existent; iesire prin referinta - tnDiscountRon/tnDiscountValuta,
|
||||
*!* discountul de document ca suma, in lei si in valuta; construieste oDateFactura cu tnIdSet=0, lEditare=.T.
|
||||
*!* intoarce oDateFactura populat, sau .NULL. daca documentul nu exista/e sters sau la eroare Oracle
|
||||
FUNCTION IncarcaAntetFacturaEditare
|
||||
LPARAMETERS tnIdVanzare, tnDiscountRon, tnDiscountValuta
|
||||
|
||||
LOCAL lcSql, lnSucces, loDate, lcListaSursa, lnDiscount, lnDiscountVal
|
||||
tnDiscountRon = 0
|
||||
tnDiscountValuta = 0
|
||||
|
||||
IF Used('v_antet_editare')
|
||||
Use In v_antet_editare
|
||||
ENDIF
|
||||
|
||||
lcSql = [select id_vanzare, tip, eproforma, serie_act, numar_act, data_act, data_scad, discount, ] + ;
|
||||
[discount_evidentiat, delegat, id_delegat, bidelegat, cnpdelegat, nrinmat, id_masina, nume_agent, ] + ;
|
||||
[id_agent, adresa_facturare, id_facturare, dataora_exp, text_aditional, listare_detaliata, tip_saft, ] + ;
|
||||
[efactura, id_ruta, in_valuta, id_valuta, nume_val, curs, multiplicator, id_part, client, cod_fiscal, ] + ;
|
||||
[incasat, nr_incasare, serie_chit, tip_incasare, ] + ;
|
||||
[id_gestiune, id_comanda, id_ctr from fact_vfacturi where id_vanzare = ] + Alltrim(Str(Nvl(m.tnIdVanzare,0))) + [ and sters = 0]
|
||||
|
||||
lnSucces = goExecutor.oExecute(lcSql,[v_antet_editare])
|
||||
goExecutor.oReset()
|
||||
|
||||
IF lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare")
|
||||
RETURN .NULL.
|
||||
ENDIF
|
||||
|
||||
IF Reccount('v_antet_editare') <> 1
|
||||
Use In v_antet_editare
|
||||
RETURN .NULL.
|
||||
ENDIF
|
||||
|
||||
SELECT v_antet_editare
|
||||
loDate = Createobject('oDateFactura',0,0)
|
||||
loDate.lEditare = .T.
|
||||
loDate.zi_curs = Ttod(data_act) && Init cheama citeste_cursuri_zi(poDate.zi_curs), altfel ramane {} si Oracle da ORA-01840
|
||||
|
||||
loDate.tip = tip
|
||||
loDate.nIdTipDoc = Iif(Nvl(eproforma,0) = 1, loDate.nIdTipDocProforma, loDate.nIdTipDocFactura)
|
||||
loDate.serie_act = Nvl(serie_act,[])
|
||||
loDate.nract = Nvl(numar_act,0)
|
||||
loDate.dataact = Ttod(data_act)
|
||||
loDate.datascad = Ttod(data_scad)
|
||||
|
||||
loDate.discount_evidentiat = Nvl(discount_evidentiat,0)
|
||||
loDate.in_valuta = Nvl(in_valuta,0)
|
||||
IF loDate.in_valuta = 1
|
||||
loDate.id_valuta = id_valuta
|
||||
loDate.nume_valuta = Nvl(nume_val,[])
|
||||
loDate.Curs = Nvl(curs,1)
|
||||
loDate.multiplicator = Nvl(multiplicator,1)
|
||||
lnDiscountVal = Nvl(discount,0)
|
||||
lnDiscount = Round(lnDiscountVal * loDate.Curs / loDate.multiplicator, gnPPretV)
|
||||
ELSE
|
||||
lnDiscount = Nvl(discount,0)
|
||||
lnDiscountVal = 0
|
||||
ENDIF
|
||||
tnDiscountRon = lnDiscount
|
||||
tnDiscountValuta = lnDiscountVal
|
||||
|
||||
loDate.id_client = id_part
|
||||
loDate.nume_client = Nvl(client,[])
|
||||
loDate.cod_fiscal = Alltrim(Nvl(cod_fiscal,[]))
|
||||
loDate.id_gestiune_init = id_gestiune
|
||||
|
||||
loDate.incasat = Nvl(incasat,0)
|
||||
loDate.nr_incasare = Nvl(nr_incasare,0)
|
||||
loDate.serie_chit = Alltrim(Nvl(serie_chit,[]))
|
||||
loDate.ntip_incasare = Nvl(tip_incasare,0)
|
||||
IF loDate.ntip_incasare = 3
|
||||
loDate.incasatCARD = loDate.incasat
|
||||
loDate.incasat = 0
|
||||
ENDIF
|
||||
|
||||
loDate.id_delegat = id_delegat
|
||||
loDate.nume_delegat = Nvl(delegat,[])
|
||||
loDate.BIdelegat = Nvl(bidelegat,[])
|
||||
loDate.CNPdelegat = Nvl(cnpdelegat,[])
|
||||
loDate.id_masina = id_masina
|
||||
loDate.nrinmat = Nvl(nrinmat,[])
|
||||
loDate.id_agent = id_agent
|
||||
loDate.nume_agent = Nvl(nume_agent,[])
|
||||
loDate.id_facturare = id_facturare
|
||||
loDate.adresa_facturare = Nvl(adresa_facturare,[])
|
||||
loDate.dataora_exp = dataora_exp
|
||||
*!* Chr(170) e substitutul CR+LF scris la salvare (ofacturare.vc2:14281) - se inverseaza la incarcare
|
||||
loDate.text_aditional = Strtran(Nvl(text_aditional,[]), Chr(170), Chr(13)+Chr(10))
|
||||
loDate.nListareDetaliata = Nvl(listare_detaliata,0)
|
||||
loDate.tip_saft = Nvl(tip_saft,380)
|
||||
loDate.eFactura = Nvl(efactura,0)
|
||||
loDate.id_ruta = id_ruta
|
||||
|
||||
*!* sursa comanda/contract vine direct din antet - doar avizele trec prin VANZARI_CORESP
|
||||
DO CASE
|
||||
CASE !Empty(Nvl(id_comanda,0))
|
||||
lcListaSursa = Alltrim(Str(id_comanda))
|
||||
CASE !Empty(Nvl(id_ctr,0))
|
||||
lcListaSursa = Alltrim(Str(id_ctr))
|
||||
OTHERWISE
|
||||
lcListaSursa = []
|
||||
ENDCASE
|
||||
loDate.cListaSursa = lcListaSursa
|
||||
|
||||
Use In v_antet_editare
|
||||
|
||||
loDate.cListaSursaAvize = IncarcaListaAvizeSursa(m.tnIdVanzare)
|
||||
|
||||
RETURN loDate
|
||||
ENDFUNC && IncarcaAntetFacturaEditare
|
||||
|
||||
|
||||
*!* parametru: id_vanzare al facturii; intoarce lista (separata prin virgula) a id_vanzare ale avizelor
|
||||
*!* sursa (VANZARI_CORESP, TIP=1); lista goala daca documentul nu are avize sursa sau la eroare Oracle
|
||||
FUNCTION IncarcaListaAvizeSursa
|
||||
LPARAMETERS tnIdVanzare
|
||||
|
||||
LOCAL lcSql, lnSucces, lcLista
|
||||
lcLista = []
|
||||
|
||||
IF Used('v_avize_sursa')
|
||||
Use In v_avize_sursa
|
||||
ENDIF
|
||||
|
||||
lcSql = [select id_vanzare_aviz from vanzari_coresp where sters = 0 and tip = 1 and id_vanzare_fact = ] + ;
|
||||
Alltrim(Str(Nvl(m.tnIdVanzare,0)))
|
||||
lnSucces = goExecutor.oExecute(lcSql,[v_avize_sursa])
|
||||
goExecutor.oReset()
|
||||
|
||||
IF lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare")
|
||||
RETURN lcLista
|
||||
ENDIF
|
||||
|
||||
IF lnSucces > 0
|
||||
SELECT v_avize_sursa
|
||||
SCAN
|
||||
lcLista = lcLista + Iif(Empty(m.lcLista),[],[,]) + Alltrim(Str(id_vanzare_aviz))
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
Use In v_avize_sursa
|
||||
|
||||
RETURN lcLista
|
||||
ENDFUNC && IncarcaListaAvizeSursa
|
||||
|
||||
|
||||
*!* parametri: oDateFactura deja incarcat (antet), id_vanzare; incarca liniile nesterse din
|
||||
*!* VVANZARI_ARTICOLE in crsfactura (deschis READWRITE, gol la eroare Oracle); intoarce mereu .T.
|
||||
FUNCTION IncarcaLiniiFacturaEditare
|
||||
LPARAMETERS toDate, tnIdVanzare
|
||||
|
||||
LOCAL llInValuta, lnCursDoc, lnMultDoc, lnIdTemp, lnGestionabil, lcSql
|
||||
|
||||
llInValuta = (toDate.in_valuta = 1)
|
||||
lnCursDoc = Nvl(toDate.Curs,1)
|
||||
lnMultDoc = Nvl(toDate.multiplicator,1)
|
||||
|
||||
IncarcaArticoleFactura(m.tnIdVanzare, 'crsarticole_doc')
|
||||
|
||||
*!* pret/discount_unitar din view sunt in moneda documentului; prelucreaza_facturacrs le vrea in lei
|
||||
IF Used('crsarticole_editare')
|
||||
Use In crsarticole_editare
|
||||
ENDIF
|
||||
SELECT id_vanzare_det, id_articol, explicatie, Nvl(denumire,[]) As denumire, lot, serie, codmat, id_jtva_coloana, taxcode, ;
|
||||
pret_achizitie, cantitate, proc_tvav, pret_cu_tva, id_vanzare_set, id_gestiune, nume_gestiune, Cont, id_ctr, id_valuta, nume_val, in_stoc, ;
|
||||
id_pol, pretd, id_valutad, ;
|
||||
Nvl(curs, m.lnCursDoc) As curs, Nvl(multiplicator, m.lnMultDoc) As multiplicator, ;
|
||||
Iif(m.llInValuta, Round(pret * Nvl(curs, m.lnCursDoc) / Nvl(multiplicator, m.lnMultDoc), gnPPretV), pret) As pret, ;
|
||||
Iif(m.llInValuta, pret, 0) As pret_val, ;
|
||||
Iif(m.llInValuta, Round(discount_unitar * Nvl(curs, m.lnCursDoc) / Nvl(multiplicator, m.lnMultDoc), gnPPretV), discount_unitar) As discount_unitar, ;
|
||||
Iif(m.llInValuta, discount_unitar, 0) As discount_unitar_val, ;
|
||||
Iif(m.llInValuta,1,0) As tip_valuta, ;
|
||||
Cast(.Null. As N(10)) As id_jtva_coloana_ex, Space(50) As codmatf, Space(50) As codbare, Space(10) As um, Space(50) As numar_contract ;
|
||||
FROM crsarticole_doc INTO CURSOR crsarticole_editare READWRITE
|
||||
|
||||
creeaza_facturacrs('crsfactura')
|
||||
prelucreaza_facturacrs('crsarticole_editare','crsfactura',0,0,0)
|
||||
|
||||
*!* gestionabil vine din nomenclatorul curent, nu din id_gestiune; id_gestiune, nume_gestiune, Cont, id_pol/
|
||||
*!* pretd/id_valuta_d si vvaldiminuatctva (total in valuta cu tva, cf. oproceduri_facturare.prg:2282)
|
||||
*!* nu sunt in lista de insert a lui prelucreaza_facturacrs
|
||||
SELECT crsarticole_editare
|
||||
SCAN
|
||||
lnIdTemp = id_vanzare_det
|
||||
lnGestionabil = Iif(Nvl(in_stoc,0) <> 0, 1, 0)
|
||||
SELECT crsfactura
|
||||
REPLACE gestionabil WITH m.lnGestionabil, ;
|
||||
id_gestiune WITH Nvl(crsarticole_editare.id_gestiune, -1000), ;
|
||||
nume_gestiune WITH Nvl(crsarticole_editare.nume_gestiune, []), ;
|
||||
Cont WITH Nvl(crsarticole_editare.Cont, []), ;
|
||||
id_pol WITH crsarticole_editare.id_pol, ;
|
||||
pretd WITH crsarticole_editare.pretd, ;
|
||||
id_valuta_d WITH crsarticole_editare.id_valutad, ;
|
||||
vvaldiminuatctva WITH vvaldiminuatftva + vvaldiminuattva ;
|
||||
FOR id_temp = m.lnIdTemp
|
||||
SELECT crsarticole_editare
|
||||
ENDSCAN
|
||||
|
||||
*!* pretv_orig si legatura de rezervare nu sunt stocate pe document; se reiau din rulajul original
|
||||
*!* pretv are sens doar pe gestiunile la pret de vanzare (nr_pag 6/7); in rest STOC.PRETV e 0
|
||||
lcSql = [select r.id_articol, r.id_gestiune, Nvl(r.cont,' ') as cont, r.pret, ] + ;
|
||||
[Nvl(r.serie,' ') as serie, r.cante as cantitate, ] + ;
|
||||
[case when (select max(g.nr_pag) from nom_gestiuni g ] + ;
|
||||
[where g.id_gestiune = r.id_gestiune) in (6,7) ] + ;
|
||||
[then r.pretv else 0 end as pretv, r.id_tip_rulaj, ] + ;
|
||||
[r.id_part_rez, r.id_lucrare_rez ] + ;
|
||||
[from rul r, vanzari v ] + ;
|
||||
[where v.id_vanzare = ] + Alltrim(Str(m.tnIdVanzare)) + ;
|
||||
[ and r.cod = v.cod and r.sters = 0 and r.cante <> 0 ] + ;
|
||||
[order by r.id_tip_rulaj desc, r.id_rul]
|
||||
IF goExecutor.oExecuta(m.lcSql, 'crs_lot_orig')
|
||||
SELECT crsfactura
|
||||
SCAN FOR gestionabil = 1
|
||||
SELECT crs_lot_orig
|
||||
LOCATE FOR id_articol = crsfactura.id_articol AND id_gestiune = crsfactura.id_gestiune ;
|
||||
AND Alltrim(cont) == Alltrim(crsfactura.Cont) AND pret = crsfactura.pret_achizitie ;
|
||||
AND Alltrim(serie) == Alltrim(Nvl(crsfactura.serie,[])) AND cantitate = crsfactura.cantitate
|
||||
IF Found()
|
||||
REPLACE pretv_orig WITH crs_lot_orig.pretv, ;
|
||||
id_part_rez WITH crs_lot_orig.id_part_rez, ;
|
||||
id_lucrare_rez WITH crs_lot_orig.id_lucrare_rez IN crsfactura
|
||||
ENDIF
|
||||
SELECT crsfactura
|
||||
ENDSCAN
|
||||
Use In crs_lot_orig
|
||||
ENDIF
|
||||
|
||||
Use In crsarticole_doc
|
||||
Use In crsarticole_editare
|
||||
|
||||
RETURN .T.
|
||||
ENDFUNC && IncarcaLiniiFacturaEditare
|
||||
|
||||
|
||||
*!* parametri: cod, an, luna, arata si randurile sterse (implicit .F.)
|
||||
*!* incarca cursoarele notei (tact) si ale rulajelor (trul, trul_obinv), cu recalculul de
|
||||
*!* valoare/valtva/valoarev/valtvav pe randurile goale; raman deschise READWRITE pe seama apelantului
|
||||
@@ -283,6 +545,7 @@ FUNCTION CreeazaCursorArticoleGol
|
||||
CREATE CURSOR (m.lcAlias) (id_vanzare I NULL, id_vanzare_det I NULL, id_articol N(20) NULL, cantitate N(12,3) NULL, pret N(14,4) NULL, pret_cu_tva N(14,4) NULL, proc_tvav N(6,4) NULL, ;
|
||||
discount_unitar N(14,4) NULL, id_gestiune I NULL, cont C(20) NULL, id_valuta I NULL, id_jtva_coloana I NULL, serie C(20) NULL, explicatie C(60) NULL, ;
|
||||
taxcode I NULL, lot C(20) NULL, sters I NULL, id_vanzare_set I NULL, pret_achizitie N(14,4) NULL, denumire C(100) NULL, codmat C(30) NULL, nume_gestiune C(60) NULL, nume_val C(20) NULL, ;
|
||||
id_pol I NULL, id_ctr I NULL, diferenta N(14,4) NULL, pretd N(14,4) NULL, id_valutad I NULL, curs N(10,4) NULL, multiplicator N(10,4) NULL, ;
|
||||
lmodificat L, valoare N(14,2), in_stoc I NULL)
|
||||
ENDFUNC && CreeazaCursorArticoleGol
|
||||
|
||||
|
||||
568
programe/ofacturare_rutare_scriere.prg
Normal file
568
programe/ofacturare_rutare_scriere.prg
Normal file
@@ -0,0 +1,568 @@
|
||||
*** ofacturare_rutare_scriere
|
||||
*!* helpere pentru S8b: comparatia stare-incarcata / stare-curenta la editarea unui document existent,
|
||||
*!* si alegerea rutei de scriere (regenerare / modifica_date_factura / modifica_explicatie_articol / nimic),
|
||||
*!* si mutarea borderoului eFactura la reemitere
|
||||
|
||||
*!* parametri: poDate deja incarcat (dupa IncarcaAntetFacturaEditare + IncarcaLiniiFacturaEditare),
|
||||
*!* discountul curent in lei/valuta (Thisform.ndiscfactron/ndiscfactval, DUPA do_calculeaza_totaluri)
|
||||
*!* construieste si intoarce instantaneul: identitatea documentului vechi (id_vanzare, id_fact, cod,
|
||||
*!* an, luna - din variabilele PRIVATE deja capturate in do_editare_unificata, inainte de stergere),
|
||||
*!* cei 14 parametri de antet, discountul de document (suma + indicator, separat de antet - nu e
|
||||
*!* parametru al modifica_date_factura), copie a liniilor din crsfactura (doar campurile-intrare,
|
||||
*!* cheie id_temp); .NULL. daca poDate nu e in editare
|
||||
FUNCTION CreeazaSnapshotEditare
|
||||
LPARAMETERS toDate, tnDiscountRon, tnDiscountValuta, tnIdVanzare, tnIdFact, tnCod, tnAn, tnLuna
|
||||
|
||||
LOCAL loSnapshot
|
||||
IF VARTYPE(toDate) <> 'O' OR !toDate.lEditare
|
||||
RETURN .NULL.
|
||||
ENDIF
|
||||
|
||||
loSnapshot = CREATEOBJECT('Empty')
|
||||
*!* id-ul real al documentului - NU toDate.nid_vanzare (ramane la sentinela 9999999999 pe calea de
|
||||
*!* editare, IncarcaAntetFacturaEditare nu-l populeaza) - transmis explicit din do_editare_unificata
|
||||
=AddProperty(loSnapshot, 'id_vanzare', NVL(m.tnIdVanzare,0))
|
||||
*!* identitatea documentului vechi - pentru stergerea si reemiterea din S9, nu pentru scrierea azi
|
||||
=AddProperty(loSnapshot, 'id_fact', NVL(m.tnIdFact,0))
|
||||
=AddProperty(loSnapshot, 'cod', NVL(m.tnCod,0))
|
||||
=AddProperty(loSnapshot, 'an', NVL(m.tnAn,0))
|
||||
=AddProperty(loSnapshot, 'luna', NVL(m.tnLuna,0))
|
||||
*!* id_util/dataora ale creatiei documentului vechi - din crsFacturi (gridul din frm_facturi) cand e
|
||||
*!* deschis, fara interogare Oracle noua; altfel (apel fara grid) interogare minima directa pe VANZARI
|
||||
LOCAL lnAreaSnapshot, llGasitAudit, lnIdUtilAudit, ldDataoraAudit
|
||||
lnAreaSnapshot = 0
|
||||
llGasitAudit = .F.
|
||||
IF USED('crsfacturi')
|
||||
lnAreaSnapshot = SELECT()
|
||||
SELECT crsfacturi
|
||||
LOCATE FOR id_vanzare = m.tnIdVanzare
|
||||
IF FOUND('crsfacturi')
|
||||
=AddProperty(loSnapshot, 'id_util', NVL(crsfacturi.id_util,0))
|
||||
=AddProperty(loSnapshot, 'dataora', NVL(crsfacturi.dataora,{}))
|
||||
llGasitAudit = .T.
|
||||
ENDIF
|
||||
IF m.lnAreaSnapshot > 0
|
||||
SELECT (m.lnAreaSnapshot)
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF !m.llGasitAudit
|
||||
lnIdUtilAudit = 0
|
||||
ldDataoraAudit = {}
|
||||
IF USED('v_snap_audit_s14')
|
||||
USE IN v_snap_audit_s14
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta([select id_util, dataora from vanzari where id_vanzare = ] + ALLTRIM(STR(NVL(m.tnIdVanzare,0),14,0)), 'v_snap_audit_s14')
|
||||
SELECT v_snap_audit_s14
|
||||
IF RECCOUNT('v_snap_audit_s14') > 0
|
||||
GO TOP
|
||||
lnIdUtilAudit = NVL(id_util,0)
|
||||
ldDataoraAudit = NVL(dataora,{})
|
||||
ENDIF
|
||||
USE IN v_snap_audit_s14
|
||||
ENDIF
|
||||
=AddProperty(loSnapshot, 'id_util', lnIdUtilAudit)
|
||||
=AddProperty(loSnapshot, 'dataora', ldDataoraAudit)
|
||||
ENDIF
|
||||
*!* cei 14 parametri de antet (modifica_date_factura_parametri.md) - valorile brute din poDate
|
||||
=AddProperty(loSnapshot, 'id_ruta', NVL(toDate.id_ruta,0))
|
||||
=AddProperty(loSnapshot, 'id_delegat', NVL(toDate.id_delegat,0))
|
||||
=AddProperty(loSnapshot, 'id_agent', NVL(toDate.id_agent,0))
|
||||
=AddProperty(loSnapshot, 'id_masina', NVL(toDate.id_masina,0))
|
||||
=AddProperty(loSnapshot, 'dataora_exp', NVL(toDate.dataora_exp,{}))
|
||||
=AddProperty(loSnapshot, 'id_facturare', NVL(toDate.id_facturare,0))
|
||||
=AddProperty(loSnapshot, 'listare_detaliata', NVL(toDate.nListareDetaliata,0))
|
||||
=AddProperty(loSnapshot, 'text_aditional', NVL(toDate.text_aditional,''))
|
||||
=AddProperty(loSnapshot, 'tip_saft', NVL(toDate.tip_saft,0))
|
||||
=AddProperty(loSnapshot, 'efactura', NVL(toDate.eFactura,0))
|
||||
=AddProperty(loSnapshot, 'data_act', NVL(toDate.dataact,{}))
|
||||
=AddProperty(loSnapshot, 'data_scad', NVL(toDate.datascad,{}))
|
||||
=AddProperty(loSnapshot, 'numar_act', NVL(toDate.nract,0))
|
||||
=AddProperty(loSnapshot, 'serie_act', NVL(toDate.serie_act,''))
|
||||
*!* discountul de document - grup de sume, NU parametru al modifica_date_factura (S8b §1, 9e);
|
||||
*!* suma vine din Thisform.ndiscfactron/ndiscfactval DUPA do_calculeaza_totaluri, nu din poDate
|
||||
=AddProperty(loSnapshot, 'discount_ron', NVL(m.tnDiscountRon,0))
|
||||
=AddProperty(loSnapshot, 'discount_val', NVL(m.tnDiscountValuta,0))
|
||||
=AddProperty(loSnapshot, 'discount_evidentiat', NVL(toDate.discount_evidentiat,0))
|
||||
|
||||
*!* liniile - doar campurile pe care utilizatorul le poate schimba, cheie id_temp (=id_vanzare_det)
|
||||
IF USED('crsfactura')
|
||||
IF USED('snap_linii_editare')
|
||||
USE IN snap_linii_editare
|
||||
ENDIF
|
||||
SELECT id_temp, cantitate, pretctva, pretftva, discountctva, discountftva, cu_tva, proc_tvav, ;
|
||||
id_articol, id_gestiune, id_jtva_coloana, taxcode, explicatie, lot, serie, id_pol, pretd, id_valuta_d ;
|
||||
FROM crsfactura INTO CURSOR snap_linii_editare READWRITE
|
||||
ENDIF
|
||||
|
||||
RETURN loSnapshot
|
||||
ENDFUNC && CreeazaSnapshotEditare
|
||||
|
||||
|
||||
*!* parametri: poSnapshotEditare (din CreeazaSnapshotEditare), poDate curent, discountul curent in
|
||||
*!* lei/valuta (Thisform.ndiscfactron/ndiscfactval), alias curent al liniilor (crsfactura)
|
||||
*!* intoarce un cod de ruta: 1=regenerare, 2=modifica_date_factura, 3=modifica_explicatie_articol,
|
||||
*!* 0=nimic; lant cu prioritate (sumele primele) - vezi s8b_rutarea_scrierii.md sectiunea 3.1
|
||||
*!* .NULL. de instantaneu => 0 (document nou, nu editare - nu se ruteaza)
|
||||
FUNCTION AlegeRutaScriereEditare
|
||||
LPARAMETERS toSnapshot, toDate, tnDiscRonCurent, tnDiscValCurent, tcAliasLinii
|
||||
|
||||
LOCAL lcAlias, llSumeSchimbate
|
||||
IF VARTYPE(toSnapshot) <> 'O'
|
||||
RETURN 0
|
||||
ENDIF
|
||||
lcAlias = IIF(TYPE('tcAliasLinii') = 'C' AND !EMPTY(m.tcAliasLinii), m.tcAliasLinii, 'crsfactura')
|
||||
|
||||
llSumeSchimbate = LiniiAuSumeSchimbate(m.lcAlias) OR ;
|
||||
!(ROUND(NVL(m.tnDiscRonCurent,0), gnPc) == ROUND(toSnapshot.discount_ron, gnPc)) OR ;
|
||||
!(ROUND(NVL(m.tnDiscValCurent,0), gnPc) == ROUND(toSnapshot.discount_val, gnPc)) OR ;
|
||||
NVL(toDate.discount_evidentiat,0) <> toSnapshot.discount_evidentiat
|
||||
IF m.llSumeSchimbate
|
||||
RETURN 1 && regenerare - implementarea propriu-zisa e S9
|
||||
ENDIF
|
||||
|
||||
IF !AntetIdenticCuSnapshot(m.toSnapshot, m.toDate)
|
||||
RETURN 2 && modifica_date_factura
|
||||
ENDIF
|
||||
|
||||
IF ExplicatieLinieSchimbata(m.lcAlias)
|
||||
RETURN 3 && modifica_explicatie_articol
|
||||
ENDIF
|
||||
|
||||
RETURN 0 && nimic
|
||||
ENDFUNC && AlegeRutaScriereEditare
|
||||
|
||||
|
||||
*!* parametru: alias curent al liniilor (implicit crsfactura)
|
||||
*!* .T. daca s-a adaugat/sters o linie sau s-a schimbat cantitate/pret/discount/tva/gestiune/lot/serie
|
||||
*!* pe o linie existenta, comparat cu snap_linii_editare (cheie id_temp); precizie: gnPPretV pe
|
||||
*!* pret/discount, gnPCant pe cantitate - nu pe valoarea bruta
|
||||
FUNCTION LiniiAuSumeSchimbate
|
||||
LPARAMETERS tcAlias
|
||||
|
||||
LOCAL lcAlias, llRezultat, lnAreaOrigine, lnIdTemp
|
||||
lcAlias = IIF(TYPE('tcAlias') = 'C' AND !EMPTY(m.tcAlias), m.tcAlias, 'crsfactura')
|
||||
IF !USED('snap_linii_editare') OR !USED(m.lcAlias)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
lnAreaOrigine = SELECT()
|
||||
llRezultat = .F.
|
||||
|
||||
*!* chei doar in snapshot => linie stearsa; chei doar in curent (sau id_temp = 0) => linie noua;
|
||||
*!* daca reccount-urile coincid dar continutul difera (o stergere + o adaugare), scan-ul de mai
|
||||
*!* jos gaseste oricum cheia din snapshot lipsa din curent
|
||||
IF RECCOUNT('snap_linii_editare') <> RECCOUNT(m.lcAlias)
|
||||
llRezultat = .T.
|
||||
ELSE
|
||||
SELECT snap_linii_editare
|
||||
SCAN
|
||||
lnIdTemp = id_temp
|
||||
SELECT (m.lcAlias)
|
||||
LOCATE FOR id_temp = m.lnIdTemp
|
||||
IF !FOUND()
|
||||
llRezultat = .T.
|
||||
EXIT
|
||||
ENDIF
|
||||
IF !(ROUND(cantitate, gnPCant) == ROUND(snap_linii_editare.cantitate, gnPCant)) OR ;
|
||||
!(ROUND(IIF(cu_tva=1,pretctva,pretftva), gnPPretV) == ROUND(IIF(snap_linii_editare.cu_tva=1,snap_linii_editare.pretctva,snap_linii_editare.pretftva), gnPPretV)) OR ;
|
||||
!(ROUND(IIF(cu_tva=1,discountctva,discountftva), gnPPretV) == ROUND(IIF(snap_linii_editare.cu_tva=1,snap_linii_editare.discountctva,snap_linii_editare.discountftva), gnPPretV)) OR ;
|
||||
!(ROUND(proc_tvav,4) == ROUND(snap_linii_editare.proc_tvav,4)) OR ;
|
||||
NVL(id_articol,0) <> NVL(snap_linii_editare.id_articol,0) OR ;
|
||||
NVL(id_gestiune,0) <> NVL(snap_linii_editare.id_gestiune,0) OR ;
|
||||
ALLTRIM(NVL(lot,'')) <> ALLTRIM(NVL(snap_linii_editare.lot,'')) OR ;
|
||||
ALLTRIM(NVL(serie,'')) <> ALLTRIM(NVL(snap_linii_editare.serie,''))
|
||||
llRezultat = .T.
|
||||
EXIT
|
||||
ENDIF
|
||||
SELECT snap_linii_editare
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
|
||||
IF m.lnAreaOrigine > 0
|
||||
SELECT (m.lnAreaOrigine)
|
||||
ENDIF
|
||||
RETURN m.llRezultat
|
||||
ENDFUNC && LiniiAuSumeSchimbate
|
||||
|
||||
|
||||
*!* .T. daca oricare din cei 14 parametri de antet difera fata de snapshot (comparatie simetrica NVL)
|
||||
FUNCTION AntetIdenticCuSnapshot
|
||||
LPARAMETERS toSnapshot, toDate
|
||||
|
||||
RETURN (NVL(toDate.id_ruta,0) == toSnapshot.id_ruta) AND ;
|
||||
(NVL(toDate.id_delegat,0) == toSnapshot.id_delegat) AND ;
|
||||
(NVL(toDate.id_agent,0) == toSnapshot.id_agent) AND ;
|
||||
(NVL(toDate.id_masina,0) == toSnapshot.id_masina) AND ;
|
||||
(NVL(toDate.dataora_exp,{}) == toSnapshot.dataora_exp) AND ;
|
||||
(NVL(toDate.id_facturare,0) == toSnapshot.id_facturare) AND ;
|
||||
(NVL(toDate.nListareDetaliata,0) == toSnapshot.listare_detaliata) AND ;
|
||||
(NVL(toDate.text_aditional,'') == toSnapshot.text_aditional) AND ;
|
||||
(NVL(toDate.tip_saft,0) == toSnapshot.tip_saft) AND ;
|
||||
(NVL(toDate.eFactura,0) == toSnapshot.efactura) AND ;
|
||||
(NVL(toDate.dataact,{}) == toSnapshot.data_act) AND ;
|
||||
(NVL(toDate.datascad,{}) == toSnapshot.data_scad) AND ;
|
||||
(NVL(toDate.nract,0) == toSnapshot.numar_act) AND ;
|
||||
(NVL(toDate.serie_act,'') == toSnapshot.serie_act)
|
||||
ENDFUNC && AntetIdenticCuSnapshot
|
||||
|
||||
|
||||
*!* .T. daca s-a schimbat explicatia sau taxcode-ul pe cel putin o linie existenta (fara alte schimbari -
|
||||
*!* apelat doar dupa ce LiniiAuSumeSchimbate a intors .F.)
|
||||
FUNCTION ExplicatieLinieSchimbata
|
||||
LPARAMETERS tcAlias
|
||||
|
||||
LOCAL lcAlias, llRezultat, lnAreaOrigine, lnIdTemp
|
||||
lcAlias = IIF(TYPE('tcAlias') = 'C' AND !EMPTY(m.tcAlias), m.tcAlias, 'crsfactura')
|
||||
IF !USED('snap_linii_editare') OR !USED(m.lcAlias)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
lnAreaOrigine = SELECT()
|
||||
llRezultat = .F.
|
||||
|
||||
SELECT snap_linii_editare
|
||||
SCAN
|
||||
lnIdTemp = id_temp
|
||||
SELECT (m.lcAlias)
|
||||
LOCATE FOR id_temp = m.lnIdTemp
|
||||
IF FOUND() AND (ALLTRIM(NVL(explicatie,'')) <> ALLTRIM(NVL(snap_linii_editare.explicatie,'')) OR ;
|
||||
NVL(taxcode,0) <> NVL(snap_linii_editare.taxcode,0) OR ;
|
||||
NVL(id_jtva_coloana,0) <> NVL(snap_linii_editare.id_jtva_coloana,0))
|
||||
llRezultat = .T.
|
||||
EXIT
|
||||
ENDIF
|
||||
SELECT snap_linii_editare
|
||||
ENDSCAN
|
||||
|
||||
IF m.lnAreaOrigine > 0
|
||||
SELECT (m.lnAreaOrigine)
|
||||
ENDIF
|
||||
RETURN m.llRezultat
|
||||
ENDFUNC && ExplicatieLinieSchimbata
|
||||
|
||||
|
||||
*!* parametri: poDate curent (antet complet), poSnapshotEditare (id-ul real al documentului - vezi
|
||||
*!* CreeazaSnapshotEditare); scrie cei 14 parametri prin modifica_date_factura, acelasi tipar SQL ca
|
||||
*!* frm_facturi.do_modifica (ofacturare_comun.vc2:4705-4726) - fara tranzactie manuala, la fel ca
|
||||
*!* apelantul copiat; .T. la succes, .F. la eroare Oracle sau la id de document lipsa (cu amessagebox)
|
||||
FUNCTION ScrieAntetEditare
|
||||
LPARAMETERS toDate, toSnapshot
|
||||
|
||||
LOCAL lcSql, lnSucces
|
||||
*!* PRIVATE, nu LOCAL: parametrii legati (?) din TEXT TO se rezolva in scopul in care ruleaza
|
||||
*!* goExecutor.oExecute, nu in cel al acestei functii - un LOCAL/LPARAMETERS e invizibil acolo si
|
||||
*!* SQLExec ramane agatat (acelasi idiom ca poRec in frm_facturi.do_modifica, Private declarat)
|
||||
PRIVATE poRecEditare, lnTipSaft
|
||||
IF VARTYPE(toSnapshot) <> 'O' OR EMPTY(NVL(toSnapshot.id_vanzare,0)) OR toSnapshot.id_vanzare = 9999999999
|
||||
amessagebox('Documentul editat nu are un id valid - nimic nu a fost scris.',16,'Eroare')
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
poRecEditare = toDate
|
||||
|
||||
*!* tip_saft = 0 inseamna nesetat (documente vechi, dinainte de SAFT) - se scrie NULL, nu 0, la fel
|
||||
*!* ca frm_facturi.do_modifica (ofacturare_comun.vc2:4701-4703)
|
||||
lnTipSaft = poRecEditare.tip_saft
|
||||
IF NVL(m.lnTipSaft,0) = 0
|
||||
lnTipSaft = .NULL.
|
||||
ENDIF
|
||||
|
||||
TEXT TO lcSql NOSHOW TEXTMERGE
|
||||
begin pack_facturare.modifica_date_factura(<<Alltrim(Str(toSnapshot.id_vanzare))>>,
|
||||
<<Alltrim(Nvl(Str(toDate.id_ruta),[NULL]))>>,
|
||||
<<Alltrim(Nvl(Str(toDate.id_delegat),[NULL]))>>,
|
||||
<<Alltrim(Nvl(Str(toDate.id_agent),[NULL]))>>,
|
||||
<<Alltrim(Nvl(Str(toDate.id_masina),[NULL]))>>,
|
||||
to_date('<<TTOC(toDate.dataora_exp,1)>>','YYYYMMDDHH24:MI:SS'),
|
||||
<<Alltrim(Nvl(Str(toDate.id_facturare),[NULL]))>>,
|
||||
<<ALLTRIM(STR(NVL(toDate.nListareDetaliata,0)))>>,
|
||||
?poRecEditare.text_aditional,
|
||||
?lnTipSaft,
|
||||
?poRecEditare.eFactura,
|
||||
?poRecEditare.dataact,
|
||||
?poRecEditare.datascad,
|
||||
?poRecEditare.nract,
|
||||
?poRecEditare.serie_act);
|
||||
end;
|
||||
ENDTEXT
|
||||
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
IF lnSucces < 0
|
||||
amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare")
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC && ScrieAntetEditare
|
||||
|
||||
|
||||
*!* parametru: alias curent al liniilor (crsfactura); scrie explicatia/taxcode pe fiecare linie
|
||||
*!* modificata fata de snap_linii_editare, prin modifica_explicatie_articol - acelasi tipar SQL ca
|
||||
*!* frm_modifica_articol_factura.inainte_de_do_termin (ofacturare_comun.vc2:5407-5409); se opreste
|
||||
*!* la primul esec Oracle (.F.), fara tranzactie manuala
|
||||
FUNCTION ScrieExplicatieEditare
|
||||
LPARAMETERS tcAlias
|
||||
|
||||
LOCAL lcAlias, lnAreaOrigine, lnIdTemp, lcSql, llSucces
|
||||
*!* PRIVATE, nu LOCAL - vezi ScrieAntetEditare: ?lnTaxcodeEditare trebuie vizibil din interiorul
|
||||
*!* goExecutor.oExecuta; acelasi tipar ca ?poRec.taxcode in frm_modifica_articol_factura
|
||||
PRIVATE lnTaxcodeEditare
|
||||
lcAlias = IIF(TYPE('tcAlias') = 'C' AND !EMPTY(m.tcAlias), m.tcAlias, 'crsfactura')
|
||||
IF !USED('snap_linii_editare') OR !USED(m.lcAlias)
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
lnAreaOrigine = SELECT()
|
||||
llSucces = .T.
|
||||
|
||||
SELECT snap_linii_editare
|
||||
SCAN
|
||||
lnIdTemp = id_temp
|
||||
SELECT (m.lcAlias)
|
||||
LOCATE FOR id_temp = m.lnIdTemp
|
||||
IF FOUND() AND (ALLTRIM(NVL(explicatie,'')) <> ALLTRIM(NVL(snap_linii_editare.explicatie,'')) OR ;
|
||||
NVL(taxcode,0) <> NVL(snap_linii_editare.taxcode,0) OR ;
|
||||
NVL(id_jtva_coloana,0) <> NVL(snap_linii_editare.id_jtva_coloana,0))
|
||||
lnTaxcodeEditare = taxcode
|
||||
lcSql = [begin pack_facturare.modifica_explicatie_articol(] + Alltrim(Str(m.lnIdTemp)) + [,] + ;
|
||||
['] + Nvl(Alltrim(OracleSpecialCharacters(explicatie)),'') + [',?gnIdUtil,?lnTaxcodeEditare,] + ;
|
||||
Iif(Isnull(id_jtva_coloana),[null],Alltrim(Str(id_jtva_coloana))) + [); end;]
|
||||
llSucces = goExecutor.oExecuta(lcSql)
|
||||
IF !m.llSucces
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDIF
|
||||
SELECT snap_linii_editare
|
||||
ENDSCAN
|
||||
|
||||
IF m.lnAreaOrigine > 0
|
||||
SELECT (m.lnAreaOrigine)
|
||||
ENDIF
|
||||
RETURN m.llSucces
|
||||
ENDFUNC && ScrieExplicatieEditare
|
||||
|
||||
|
||||
*!* parametru: toDate (oDateFactura incarcat pentru editare - IncarcaAntetFacturaEditare populeaza deja
|
||||
*!* cListaSursa - comanda/contract - si cListaSursaAvize - avize, din VANZARI_CORESP TIP=1; S9 §1.5/1.7)
|
||||
*!* intoarce lista de refurnizat ca poDate.listaid la reemitere, aleasa dupa tip - acelasi CASE ca
|
||||
*!* dispecerizarea de scriere din do_scrie_factura (ofacturare.vc2:20171,20214,20249): avize (Tip=4)
|
||||
*!* -> cListaSursaAvize; comenzi (3,21,25,28,42,47) -> cListaSursa; restul (contract/ELSE) -> '' (nu
|
||||
*!* foloseau listaid la emiterea normala nici azi)
|
||||
*!* .NULL. de toDate => ''; nu modifica toDate - apelantul decide cand scrie rezultatul pe poDate.listaid
|
||||
FUNCTION CalculeazaListaidReemitere
|
||||
LPARAMETERS toDate
|
||||
|
||||
IF VARTYPE(toDate) <> 'O'
|
||||
RETURN ''
|
||||
ENDIF
|
||||
|
||||
DO CASE
|
||||
CASE toDate.tip = 4
|
||||
RETURN ALLTRIM(NVL(toDate.cListaSursaAvize, ''))
|
||||
CASE INLIST(toDate.tip, 3, 21, 25, 28, 42, 47)
|
||||
RETURN ALLTRIM(NVL(toDate.cListaSursa, ''))
|
||||
OTHERWISE
|
||||
RETURN ''
|
||||
ENDCASE
|
||||
ENDFUNC && CalculeazaListaidReemitere
|
||||
|
||||
|
||||
*!* piciorul de stergere extras din ofacturare_comun.vc2:4837-4977 (frm_facturi.do_sterge), parametrizat -
|
||||
*!* fara UI (fara confirmare "sunteti sigur", fara refresh de grid) si fara tranzactie proprie:
|
||||
*!* nici SQLSetprop, nici COMMIT/ROLLBACK cand apelantul are deja Transactions=2 -
|
||||
*!* oscrie_in_fisiere e deja transaction-aware (oscrie_in_fisiere.prg:111-117): daca apelantul a
|
||||
*!* deschis deja Transactions=2 inainte de a chema aceasta functie, intra in aceeasi tranzactie
|
||||
*!* (necesar pentru S9-4, stergere+reemitere atomic); altfel fiecare pas isi face singur commit
|
||||
*!* oscrie_in_fisiere posteaza reversarea sub perioada globala activa gnAn/gnLuna (linia lui interna,
|
||||
*!* neschimbabila de aici) - de-aia interogarea vact_tot/vrul_tot si sterge_factura raman pe gnAn/gnLuna
|
||||
*!* ca in original, iar tnAn/tnLuna (perioada documentului) intra doar la finalizeaza_stergere_nota,
|
||||
*!* exact ca pnAn/pnLuna in do_sterge - garda de mai jos impune egalitatea, ca in do_sterge original
|
||||
*!* tnIdUtil optional - implicit gnIdUtil daca nu e transmis
|
||||
*!* tnIdSetVechi, tnIdFdocVechi, tdDataIregVechi optionale, prin referinta: id_set-ul, felul de
|
||||
*!* document si data inregistrarii contabile ale notei sterse, citite din acelasi cursor;
|
||||
*!* raman neatinse daca documentul nu are nota contabila
|
||||
*!* intoarce .T. daca documentul a fost sters (cu sau fara reversare de stoc), .F. la eroare sau garda
|
||||
FUNCTION StergeDocumentFacturare
|
||||
LPARAMETERS tnIdVanzare, tnCod, tnAn, tnLuna, tnIdUtil, tnIdSetVechi, tnIdFdocVechi, tdDataIregVechi
|
||||
|
||||
LOCAL lcSql, lcCursor, lcConditieSters, llRul, llSucces, lnIdSet, lnIdFact, lnIdFactD
|
||||
LOCAL lcCaleDateMenu, lnRezOscrie
|
||||
*!* PRIVATE - legate cu ? in SQL trimis prin goExecutor, invizibile ca LPARAMETERS in scopul lui oExecuta
|
||||
PRIVATE pnIdVanzareSterge, pnAnSterge, pnLunaSterge, pnIdUtilSterge
|
||||
pnIdVanzareSterge = NVL(tnIdVanzare, 0)
|
||||
pnAnSterge = NVL(tnAn, 0)
|
||||
pnLunaSterge = NVL(tnLuna, 0)
|
||||
pnIdUtilSterge = NVL(tnIdUtil, gnIdUtil)
|
||||
|
||||
IF EMPTY(m.pnIdVanzareSterge) OR EMPTY(m.pnAnSterge) OR EMPTY(m.pnLunaSterge)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
*!* aceeasi garda "luna curenta" ca in do_sterge (ofacturare_comun.vc2:4809) - obligatorie, nu doar UI:
|
||||
*!* oscrie_in_fisiere posteaza mereu sub gnAn/gnLuna, indiferent ce se cere aici
|
||||
IF (m.pnAnSterge * 12) + m.pnLunaSterge <> (gnAn * 12) + gnLuna
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
llRul = .F.
|
||||
llSucces = .F.
|
||||
lcConditieSters = [ STERS = 0 AND ]
|
||||
|
||||
Use In (SELECT('actactan'))
|
||||
|
||||
lcSql = [select * from ] + gcs + [.vact_tot where ] + lcConditieSters + [ an = ] + Transform(gnAn) + [ and luna = ] + Transform(gnLuna) + [ and cod = ] + Alltrim(Str(m.tnCod)) + [ order by id_act]
|
||||
lcCursor = [v_act]
|
||||
IF goExecutor.oExecuta(lcSql, lcCursor)
|
||||
Select * From v_act Into Cursor actactan
|
||||
Use In v_act
|
||||
|
||||
lcSql = [select * from ] + gcs + [.vrul_tot where ] + lcConditieSters + [ an = ] + Transform(gnAn) + [ and luna = ] + Transform(gnLuna) + [ and cod = ] + Alltrim(Str(m.tnCod)) + [ order by id_rul]
|
||||
lcCursor = [v_rul]
|
||||
IF goExecutor.oExecuta(lcSql, lcCursor)
|
||||
IF Reccount(lcCursor) > 0
|
||||
llRul = .T.
|
||||
ENDIF
|
||||
|
||||
lcSql = [select * from ] + gcs + [.vrul_obinv_tot where ] + lcConditieSters + [ an = ] + Transform(gnAn) + [ and luna = ] + Transform(gnLuna) + [ and cod = ] + Alltrim(Str(m.tnCod)) + [ order by id_rul_obinv]
|
||||
lcCursor = [v_rul_obinv]
|
||||
IF goExecutor.oExecuta(lcSql, lcCursor)
|
||||
IF Reccount(lcCursor) > 0
|
||||
llRul = .T.
|
||||
ENDIF
|
||||
Select * From v_rul Into Cursor rul_temp
|
||||
Use In v_rul
|
||||
Select * From v_rul_obinv Into Cursor rul_temp_obinv
|
||||
Use In v_rul_obinv
|
||||
|
||||
IF Reccount('actactan') > 0
|
||||
lcCaleDateMenu = gcAppPath + [\COMUN\DATEMENU\]
|
||||
IF !Used('INFISIERE')
|
||||
Use &lcCaleDateMenu.INFISIERE In 0 Alias INFISIERE
|
||||
ENDIF
|
||||
lnRezOscrie = OSCRIE_IN_FISIERE(2, .F., m.llRul)
|
||||
IF Used('infisiere')
|
||||
Use In INFISIERE
|
||||
ENDIF
|
||||
|
||||
IF lnRezOscrie < 0
|
||||
IF lnRezOscrie <> -5
|
||||
amessagebox(goExecutor.cEroare, 0+16, "Eroare")
|
||||
ENDIF
|
||||
ELSE
|
||||
Select actactan
|
||||
GO top
|
||||
lnIdSet = id_set
|
||||
*!* VARTYPE, nu PARAMETERS() - acesta din urma raporteaza ultimul apel imbricat
|
||||
IF VARTYPE(m.tnIdSetVechi) = 'N'
|
||||
tnIdSetVechi = m.lnIdSet
|
||||
ENDIF
|
||||
IF VARTYPE(m.tnIdFdocVechi) = 'N' AND !Isnull(id_fdoc)
|
||||
tnIdFdocVechi = id_fdoc
|
||||
ENDIF
|
||||
IF Inlist(VARTYPE(m.tdDataIregVechi), 'D', 'T') AND !Isnull(dataireg)
|
||||
tdDataIregVechi = dataireg
|
||||
ENDIF
|
||||
lnIdFact = id_fact
|
||||
lnIdFactD = id_factd
|
||||
lcSql = [begin pack_contafin.finalizeaza_stergere_nota(?pnLunaSterge,?pnAnSterge,Null,] + Alltrim(Str(m.lnIdSet)) + [,] + ;
|
||||
Alltrim(Str(m.tnCod)) + [,] + Alltrim(Str(m.lnIdFact)) + [,] + Alltrim(Str(m.lnIdFactD)) + [,?pnIdUtilSterge); end;]
|
||||
IF goExecutor.oExecuta(lcSql)
|
||||
llSucces = .T.
|
||||
ENDIF
|
||||
ENDIF
|
||||
*!* doar cand apelantul nu are deja o tranzactie manuala deschisa - altfel COMMIT-ul
|
||||
*!* ar inchide-o inainte ca apelantul sa-si termine propria scriere
|
||||
IF SQLGetprop(gnHandle, "Transactions") <> 2
|
||||
goExecutor.oExecuta(IIF(m.llSucces, "COMMIT", "ROLLBACK"))
|
||||
ENDIF
|
||||
ELSE
|
||||
lcSql = [begin ] + gcs + [.pack_facturare.sterge_factura(?pnIdVanzareSterge,?gnLuna,?gnAn,?pnIdUtilSterge); end;]
|
||||
llSucces = goExecutor.oExecuta(lcSql)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
|
||||
RETURN m.llSucces
|
||||
ENDFUNC && StergeDocumentFacturare
|
||||
|
||||
|
||||
*!* impune ID_FACT-ul documentului vechi pentru reemiterea curenta, tintit pe grupul (nract, serie_act)
|
||||
*!* al facturii - bucla din SCRIE_IN_ACT parcurge si grupul de incasare, care poate fi primul cand
|
||||
*!* chitanta are aceeasi serie ca factura (masurat: docs\propunere_s9_7_cablare_idfact.md sectiunea 1.5)
|
||||
*!* literale, nu bind ? - bind-ul prin goExecutor se leaga de PRIVATE/PUBLIC, nu de LOCAL/LPARAMETERS
|
||||
*!* .F. daca id-ul lipseste (document fara nota contabila) sau daca apelul Oracle a picat
|
||||
FUNCTION ForteazaIdFactReemitere
|
||||
LPARAMETERS tnIdFact, tnNract, tcSerieAct
|
||||
|
||||
IF EMPTY(NVL(m.tnIdFact, 0))
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
RETURN goExecutor.oExecuta([begin pack_contafin.nIdFactFortat := ] + ALLTRIM(STR(m.tnIdFact,14,0)) + ;
|
||||
[; pack_contafin.nNractFortat := ] + ALLTRIM(STR(NVL(m.tnNract,0),14,0)) + ;
|
||||
[; pack_contafin.cSerieFortata := ] + ;
|
||||
IIF(EMPTY(NVL(m.tcSerieAct,[])), [NULL], ['] + OracleSpecialCharacters(ALLTRIM(m.tcSerieAct)) + [']) + ;
|
||||
[; end;])
|
||||
ENDFUNC && ForteazaIdFactReemitere
|
||||
|
||||
|
||||
*!* sterge fortarea din sesiunea Oracle: ROLLBACK nu reseteaza starea PL/SQL de pachet, iar gnHandle
|
||||
*!* traieste cat aplicatia - o reemitere picata ar contamina documentul urmator al aceluiasi utilizator
|
||||
*!* no-op in afara regenerarii, ca sa nu coste un apel pe drumul normal de scriere
|
||||
FUNCTION CurataIdFactFortat
|
||||
IF TYPE('plRegenerareEditare') <> 'L' OR !plRegenerareEditare
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
RETURN goExecutor.oExecuta([begin pack_contafin.nIdFactFortat := NULL; ] + ;
|
||||
[pack_contafin.nNractFortat := NULL; pack_contafin.cSerieFortata := NULL; end;])
|
||||
ENDFUNC && CurataIdFactFortat
|
||||
|
||||
|
||||
*!* impune id_util/dataora ale creatiei documentului vechi la reemitere - simetric cu ForteazaIdFactReemitere,
|
||||
*!* dar pe variabile proprii PACK_FACTURARE (nid_util_fortat/ddataora_fortata), resetate de
|
||||
*!* initializeaza_date_factura: apelul trebuie facut DUPA acel apel, altfel e inert
|
||||
*!* .F. daca id_util lipseste (document fara creator) sau daca apelul Oracle a picat
|
||||
FUNCTION ForteazaAuditCreareReemitere
|
||||
LPARAMETERS tnIdUtil, tdDataora
|
||||
|
||||
IF EMPTY(NVL(m.tnIdUtil, 0))
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
RETURN goExecutor.oExecuta([begin pack_facturare.nid_util_fortat := ] + ALLTRIM(STR(m.tnIdUtil,14,0)) + ;
|
||||
[; pack_facturare.ddataora_fortata := ] + ;
|
||||
IIF(EMPTY(NVL(m.tdDataora,{})), [NULL], [to_date(']+TTOC(m.tdDataora,1)+[','YYYYMMDDHH24MISS')]) + ;
|
||||
[; end;])
|
||||
ENDFUNC && ForteazaAuditCreareReemitere
|
||||
|
||||
|
||||
*!* sterge fortarea auditului de creare din sesiunea Oracle - simetric cu CurataIdFactFortat
|
||||
*!* no-op in afara regenerarii, ca sa nu coste un apel pe drumul normal de scriere
|
||||
FUNCTION CurataAuditCreareFortat
|
||||
IF TYPE('plRegenerareEditare') <> 'L' OR !plRegenerareEditare
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
RETURN goExecutor.oExecuta([begin pack_facturare.nid_util_fortat := NULL; ] + ;
|
||||
[pack_facturare.ddataora_fortata := NULL; end;])
|
||||
ENDFUNC && CurataAuditCreareFortat
|
||||
|
||||
|
||||
*!* parametri: id_vanzare vechi si nou; muta randurile de borderou eFactura ale documentului
|
||||
*!* regenerat pe id-ul nou - FACT_BORDEROU_DETALII n-are STERS, iar FACT_VBORDEROU_DETALII nu
|
||||
*!* filtreaza vanzari.sters, deci fara mutare borderoul ar afisa in continuare valorile
|
||||
*!* documentului sters, cu serie si numar corecte
|
||||
*!* UPDATE fara randuri potrivite = succes; .F. doar la eroare Oracle sau id lipsa
|
||||
FUNCTION MutaBorderouReemitere
|
||||
LPARAMETERS tnIdVanzareVechi, tnIdVanzareNou
|
||||
|
||||
IF EMPTY(NVL(m.tnIdVanzareVechi,0)) OR EMPTY(NVL(m.tnIdVanzareNou,0))
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
RETURN goExecutor.oExecuta([update ] + gcs + [.fact_borderou_detalii set id_vanzare = ] + ;
|
||||
ALLTRIM(STR(m.tnIdVanzareNou,14,0)) + [ where id_vanzare = ] + ;
|
||||
ALLTRIM(STR(m.tnIdVanzareVechi,14,0)))
|
||||
ENDFUNC && MutaBorderouReemitere
|
||||
104
programe/ogrid_latimi.prg
Normal file
104
programe/ogrid_latimi.prg
Normal file
@@ -0,0 +1,104 @@
|
||||
#DEFINE SYSMETRIC_VSCROLLBARWIDTH 5 && Width of a vertical scroll bar
|
||||
#DEFINE SYSMETRIC_WINDOWBORDERWIDTH 10 && Width of a window border
|
||||
|
||||
*!* 22.08.2026
|
||||
*!* marius.mutu
|
||||
*!* distribuie - imparte spatiul liber sau lipsa dintr-un grid proportional cu latimile de
|
||||
*!* referinta (baseline) ale coloanelor vizibile; baseline-ul se captureaza per coloana, dupa
|
||||
*!* Name, la prima intalnire a fiecarei coloane pe fiecare grid, si nu se mai modifica dupa aceea
|
||||
|
||||
Define Class oGridLatimi As Custom
|
||||
|
||||
nLatimeMinima = 30 && sub acest prag coloana nu mai afiseaza nimic lizibil
|
||||
oBaseline = .Null.
|
||||
|
||||
Procedure Init
|
||||
This.oBaseline = Createobject('Collection')
|
||||
Endproc
|
||||
|
||||
Procedure distribuie
|
||||
Lparameters toGrid
|
||||
|
||||
Local lnColCount, lnI, lnUltimaCol, lnLatimeUtila, lnSpatiuLiber, lnSumBaseline, lnSumaAlocata, lnTarget
|
||||
Local lcGridKey, lnKeyIndex, llModificat
|
||||
Local loBaselineGrid, loCol
|
||||
|
||||
If Vartype(m.toGrid) <> 'O'
|
||||
Return .F.
|
||||
Endif
|
||||
|
||||
lnColCount = toGrid.ColumnCount
|
||||
If m.lnColCount <= 0
|
||||
Return .F.
|
||||
Endif
|
||||
|
||||
* baseline separat per grid, identificat prin adresa obiectului - un al doilea grid nu mosteneste baseline-ul primului
|
||||
lcGridKey = Sys(1272, m.toGrid)
|
||||
lnKeyIndex = This.oBaseline.Getkey(m.lcGridKey)
|
||||
If m.lnKeyIndex = 0
|
||||
loBaselineGrid = Createobject('Collection')
|
||||
This.oBaseline.Add(m.loBaselineGrid, m.lcGridKey)
|
||||
Else
|
||||
loBaselineGrid = This.oBaseline.Item(m.lnKeyIndex)
|
||||
Endif
|
||||
|
||||
* coloana noua sau intalnita prima data pe acest grid - latimea ei curenta devine referinta
|
||||
For lnI = 1 To m.lnColCount
|
||||
loCol = toGrid.Columns(m.lnI)
|
||||
If loCol.Visible And loBaselineGrid.Getkey(loCol.Name) = 0
|
||||
loBaselineGrid.Add(loCol.Width, loCol.Name)
|
||||
Endif
|
||||
Endfor
|
||||
|
||||
* coloanele scoase cu RemoveObject nu mai sunt in toGrid.Columns - se ignora automat, baseline-ul lor ramane neatins
|
||||
lnSumBaseline = 0
|
||||
lnUltimaCol = 0
|
||||
For lnI = 1 To m.lnColCount
|
||||
loCol = toGrid.Columns(m.lnI)
|
||||
If loCol.Visible
|
||||
lnSumBaseline = m.lnSumBaseline + loBaselineGrid.Item(loCol.Name)
|
||||
lnUltimaCol = m.lnI
|
||||
Endif
|
||||
Endfor
|
||||
|
||||
If m.lnUltimaCol = 0 Or m.lnSumBaseline <= 0
|
||||
Return .F.
|
||||
Endif
|
||||
|
||||
lnLatimeUtila = toGrid.Width
|
||||
If toGrid.ScrollBars = 2 Or toGrid.ScrollBars = 3
|
||||
lnLatimeUtila = m.lnLatimeUtila - Sysmetric(SYSMETRIC_VSCROLLBARWIDTH)
|
||||
Endif
|
||||
If toGrid.BorderStyle = 1
|
||||
lnLatimeUtila = m.lnLatimeUtila - Sysmetric(SYSMETRIC_WINDOWBORDERWIDTH) * 2
|
||||
Endif
|
||||
|
||||
lnSpatiuLiber = m.lnLatimeUtila - m.lnSumBaseline
|
||||
|
||||
llModificat = .F.
|
||||
lnSumaAlocata = 0
|
||||
For lnI = 1 To m.lnColCount
|
||||
loCol = toGrid.Columns(m.lnI)
|
||||
If loCol.Visible And m.lnI <> m.lnUltimaCol
|
||||
lnTarget = loBaselineGrid.Item(loCol.Name) + Round(m.lnSpatiuLiber * loBaselineGrid.Item(loCol.Name) / m.lnSumBaseline, 0)
|
||||
lnTarget = Max(m.lnTarget, This.nLatimeMinima)
|
||||
lnSumaAlocata = m.lnSumaAlocata + m.lnTarget
|
||||
If loCol.Width <> m.lnTarget
|
||||
loCol.Width = m.lnTarget
|
||||
llModificat = .T.
|
||||
Endif
|
||||
Endif
|
||||
Endfor
|
||||
|
||||
* ultima coloana vizibila primeste restul exact, ca sa nu ramana pixeli goi din rotunjire
|
||||
loCol = toGrid.Columns(m.lnUltimaCol)
|
||||
lnTarget = Max(m.lnLatimeUtila - m.lnSumaAlocata, This.nLatimeMinima)
|
||||
If loCol.Width <> m.lnTarget
|
||||
loCol.Width = m.lnTarget
|
||||
llModificat = .T.
|
||||
Endif
|
||||
|
||||
Return m.llModificat
|
||||
Endproc
|
||||
|
||||
Enddefine
|
||||
@@ -117,7 +117,7 @@ Endproc && facturare_lista_de_preturi
|
||||
************************************ SFARSIT: facturare_lista_de_preturi ***********************************
|
||||
************************************ INCEPUT: facturare_contracte ******************************************
|
||||
Procedure facturare_contracte
|
||||
LPARAMETERS tcTip
|
||||
LPARAMETERS tcTip, toSursa
|
||||
|
||||
LOCAL lcTip
|
||||
lcTip = UPPER(ALLTRIM(TRANSFORM(m.tcTip)))
|
||||
@@ -127,17 +127,18 @@ Procedure facturare_contracte
|
||||
ENDIF
|
||||
DO CASE
|
||||
CASE m.lcTip = 'FACTURA LEI'
|
||||
factureaza(2)
|
||||
factureaza(2, NULL, toSursa)
|
||||
CASE m.lcTip = 'INVOICE'
|
||||
factureaza(6)
|
||||
factureaza(6, NULL, toSursa)
|
||||
CASE m.lcTip = 'FACTURA VALUTA'
|
||||
factureaza(52)
|
||||
factureaza(52, NULL, toSursa)
|
||||
ENDCASE
|
||||
Endproc && facturare_contracte
|
||||
************************************ SFARSIT: facturare_contracte ******************************************
|
||||
************************************ INCEPUT: facturare_comenzi ********************************************
|
||||
Procedure facturare_comenzi
|
||||
factureaza(3)
|
||||
LPARAMETERS toSursa
|
||||
factureaza(3, NULL, toSursa)
|
||||
Endproc && facturare_comenzi
|
||||
************************************ SFARSIT: facturare_comenzi ********************************************
|
||||
************************************ INCEPUT: facturare_avize ***********************************************
|
||||
@@ -338,7 +339,7 @@ Procedure vizualizare_facturi
|
||||
|
||||
lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ;
|
||||
['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),delegat c(70),'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),id_utilm I,utilm c(30),dataoram t,delegat c(70),'+] + ;
|
||||
['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ;
|
||||
['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ;
|
||||
['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ;
|
||||
@@ -350,7 +351,7 @@ Procedure vizualizare_facturi
|
||||
|
||||
lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ;
|
||||
['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,id_utilm,utilm,dataoram,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ;
|
||||
['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ;
|
||||
['valuta,id_valuta,valval,tvaval,totval,'+] + ;
|
||||
@@ -2391,4 +2392,56 @@ Function calculeaza_totaluri
|
||||
Release lnProcTvav_19_119
|
||||
Return toArticol
|
||||
Endfunc
|
||||
******************************************* SFARSIT: calculeaza_totaluri *******************************************
|
||||
******************************************* SFARSIT: calculeaza_totaluri *******************************************
|
||||
|
||||
******************************************* INCEPUT: recalc_discount_linie *******************************************
|
||||
Function recalc_discount_linie
|
||||
Lparameters toArticol, tnValoare, tnTip
|
||||
Local lnProcent, lnDiscountTva, lnDiscountTva_val
|
||||
If toArticol.cu_tva = 0
|
||||
Do Case
|
||||
Case tnTip = 1
|
||||
lnProcent = tnValoare
|
||||
If toArticol.tip_valuta = 0
|
||||
toArticol.discountftva = Round(toArticol.pretftva * lnProcent / 100, gnPPretV)
|
||||
Else
|
||||
toArticol.vdiscountftva = Round(toArticol.vpretftva * lnProcent / 100, gnPVal)
|
||||
toArticol.discountftva = Round(toArticol.vdiscountftva * toArticol.Curs / toArticol.multiplicator, gnPPretV)
|
||||
Endif
|
||||
Case tnTip = 2
|
||||
toArticol.discountftva = tnValoare
|
||||
Case tnTip = 3
|
||||
toArticol.vdiscountftva = tnValoare
|
||||
toArticol.discountftva = Round(toArticol.vdiscountftva * toArticol.Curs / toArticol.multiplicator, gnPPretV)
|
||||
Endcase
|
||||
lnDiscountTva = Round(toArticol.discountftva * (toArticol.proc_tvav-1), gnPPretV)
|
||||
toArticol.discountctva = lnDiscountTva + toArticol.discountftva
|
||||
If toArticol.tip_valuta = 1
|
||||
lnDiscountTva_val = Round(toArticol.vdiscountftva * (toArticol.proc_tvav-1), gnPVal)
|
||||
toArticol.vdiscountctva = lnDiscountTva_val + toArticol.vdiscountftva
|
||||
Endif
|
||||
Else
|
||||
Do Case
|
||||
Case tnTip = 1
|
||||
lnProcent = tnValoare
|
||||
If toArticol.tip_valuta = 0
|
||||
toArticol.discountctva = Round(toArticol.pretctva * lnProcent / 100, gnPPretV)
|
||||
Else
|
||||
toArticol.vdiscountctva = Round(toArticol.vpretctva * lnProcent / 100, gnPVal)
|
||||
toArticol.discountctva = Round(toArticol.vdiscountctva * toArticol.Curs / toArticol.multiplicator, gnPPretV)
|
||||
Endif
|
||||
Case tnTip = 2
|
||||
toArticol.discountctva = tnValoare
|
||||
Case tnTip = 3
|
||||
toArticol.vdiscountctva = tnValoare
|
||||
toArticol.discountctva = Round(toArticol.vdiscountctva * toArticol.Curs / toArticol.multiplicator, gnPPretV)
|
||||
Endcase
|
||||
toArticol.discountftva = IIF(toArticol.proc_tvav<>0,Round(toArticol.discountctva / toArticol.proc_tvav , gnPPretV),0)
|
||||
If toArticol.tip_valuta = 1
|
||||
toArticol.vdiscountftva = IIF(toArticol.proc_tvav<>0,Round(toArticol.vdiscountctva / toArticol.proc_tvav , gnPVal),0)
|
||||
Endif
|
||||
Endif
|
||||
toArticol.procdisc = IIF(toArticol.pretftva <> 0, Round(toArticol.discountftva / toArticol.pretftva * 100, 2), 0)
|
||||
Return toArticol
|
||||
Endfunc
|
||||
******************************************* SFARSIT: recalc_discount_linie *******************************************
|
||||
Reference in New Issue
Block a user