*!* 12.06.2014 *!* marius.mutu *!* adaugat proprietatea oDateFactura.incasatCARD = suma incasata prin CARD POS *!* 19.01.2015 *!* marius.mutu *!* + oDateFactura.completeaza_setari_document() completeaza datele de la un document anterior *!* 19.01.2015 *!* marius.mutu *!* + proprietati: nIdTipDocFactura, nIdTipDocProforma, nIdTipDocBonFiscal, nIdTipDocAvizExpeditie *!* 06.02.2015 *!* marius.mutu *!* la schimbarea poDate.nIdTipDoc se initializeaza poDate.eBonFiscal, .eProforma in nIdTipDoc_Assign *!* 16.06.2015 *!* marius.mutu *!* + proprietati: oDateFactura.id_facturare, nListareDetaliata *!* 30.03.2017 *!* marius.mutu *!* prelucreaza_factura *!* Explicatia articolului a fost marita la 500 de caractere in baza de date, tip Memo si nu poate fi folosita intr-un select group by *!* Am selectat doar primele 240 caractere apoi completez explicatia din cursorul original *!* 31.03.2017 *!* marius.mutu *!* prelucreaza_lista_livrare - explicatie M, nu mergea grupata *!* 30.01.2019 *!* marius.mutu *!* prelucreaza_factura, prelucreaza_recapitulatia - s-au tratat grupare dupa campul explicatie Memo - Cast(explicatie as C(254)) pentru facturare seturi *!* 06.11.2019 *!* marius.mutu *!* +oDateFactura.nIdBeneficiar, nTipFactura *!* 20.12.2019 *!* marius.mutu *!* +oDateFactura.nvalval, ntvaval, ntotval, cValuta, tip_factura - pentru listarea valorilor in valuta pe facturile in lei la ROAACNPRO *!* 22.01.2020 *!* marius.mutu *!* prelucreaza_factura, prelucreaza_factura_valuta + codmatc (codmat client) *!* 22.07.2020 *!* marius.mutu *!* prelucreaza_facturacrs, prelucreaza_factura_valuta: verificare camp codmatc *!* 12.07.2024 *!* marius.mutu *!* alege_optiuni_listare_facturare - se listeaza serii/lot? *!* 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) *!* 14.09.2026 *!* agent *!* + clasa cus_pret_nomenclator - politica de stoc pe pagina Vanzare din fisa articolului (plan #12b, S6b) *!* + incarca_nota_politica/salveaza_nota_politica - nota implicita (cont debitor/creditor) a politicii *!* de stoc, editabila din optiunile de facturare (plan #12b, S7b) *!* 15.09.2026 *!* marius.mutu *!* + verifica_cont_venit_linie - verificare prietenoasa a contului de venit rezolvat pentru o linie *!* de factura, la adaugarea articolului *************************************************************************************************************** **** Clase: **** oDateFactura **** init **** initializeaza_politica_pret **** initializeaza_setari_document **** completeaza_setari_document **** genereaza_numar_act **** Reset **** scrieAtasamente **** oDateGestiune **** Reset **** cus_pret_nomenclator **** asigura_politica **** incarca **** valideaza **** salveaza **** recalculeaza_pret **** incarca_nota_politica **** salveaza_nota_politica **** Functii: **** actualizeaza_document **** actualizeaza_partener_fact **** actualizeaza_politica_pret **** optiuni_format_listare && denumire veche : optiuni_format_factura **** recalculeaza_pret_vanzare_lei **** recalculeaza_pret_vanzare_compus **** Proceduri: **** modifica_pret_articol_compus **** prelucreaza_aviz_cu_tva **** prelucreaza_factura **** prelucreaza_recapitulatie **** prelucreaza_factura_valuta **** prelucreaza_aviz_retur **** prelucreaza_lista_livrare **** creeaza_crsfactura **** creeaza_crsfactura_rate && veche **** copiaza_structura_cursor **** creeaza_backup_cursoare_facturare **** repune_backup_cursoare_facturare **** sterge_backup_cursoare_facturare **** alege_optiuni_listare_facturare **** alege_banci_facturare **** completeaza_explicatie_tva **** completeaza_explicatie_contract *************************************************************************************************************** ******************************************** INCEPUT: oDateFactura ******************************************** #define precizie_max_pret_vz 6 Define Class oDateFactura As Custom Data = {} dataireg = {} nIdTipDoc = 5 nIdTipDocFactura = 5 nIdTipDocProforma = 23 nIdTipDocBonFiscal = 3 nIdTipDocAvizExpeditie = 6 id_fdoc = Null fdoc = [] dataact = {} datascad = {} nract = 0 serie_act = [] nract_retur = 0 serie_act_retur = [] id_client = Null nume_client = [] cod_fiscal = [] listaid = [] && id_comanda sau lista id_aviz descriere = [] && numar comanda sau numere avize id_venchelt = Null && modificare ROAFACTURARE v 2.0.46 venchelt = [] && modificare ROAFACTURARE v 2.0.46 id_responsabil = Null responsabil = [] id_set = 0 tip = 0 id_pol = Null nume_politica = [] nume_responsabil= [] && alte date pentru facturare BIresp = [] CNPresp = [] id_delegat = Null nume_delegat = [] BIdelegat = [] CNPdelegat = [] id_masina = Null nrinmat = [] dataora_exp = {} && modificare ROAFACTURARE v 2.0.80 id_agent = Null nume_agent = [] proc_tva = 0 explicatie_tva = [] && modificare ROAFACTURARE v 2.0.46 zi_curs = {} discount_evidentiat = 0 && daca se evidentiaza discount-ul sau este inclus in pret afisare_scadenta = 1 && modificare ROACONTRACTE v 2.0.38 text_aditional = [] text_aditional_invoice = [] && modificare ROAFACTURARE v 2.0.46 text_aditional_retur = [] text_aditional_en = [] && modificare ROAFACTURARE v 2.0.80 eProforma = 0 nEFactura = 0 && xml eFactura oInfoEFactura = Null && obiect cu infoe eFactura rezultat in urma listarii (cFile, lOk, cMesaj) eBonFiscal = 0 serie_chit = [] && modificare ROAFACTURARE v 2.0.80 explicatie_chit = [] && modificare ROAFACTURARE v 2.0.80 nr_incasare = 0 id_fdoc_incasare= 0 ntip_incasare = 0 && modificare ROAFACTURARE v 2.0.84 id_casa = 0 incasat = 0 && incasat numerar incasatCARD = 0 && incasat prin CARD POS nIncasatPos = 0 && 1 s-a ales bon fiscal prin CARD POS nBonDetaliat = 0 && 1 se listeaza articole individuale; 0 se listeaza "contravaloare factura nr..." incasatTichete = 0 && incasat tichete totalctva = 0 in_valuta = 0 id_valuta = 0 nume_valuta = [] Curs = 0 multiplicator = 1 && modificare ROAFACTURARE v 2.0.90 id_lucrare = 0 nrord = [] id_sectie = 0 sectie = [] totctvaconv = 0 totftvaconv = 0 tottvaconv = 0 nvalval = 0 ntvaval = 0 ntotval = 0 cValuta = [] rezultat_serii = 0 listare_componenta_set = 1 listare_componenta_set_ll = 1 && modificare ROAFACTURARE v 2.0.56 listare_serii = 1 && modificare ROAFACTURARE v 2.0.46 listare_recapitulatie = 1 && modificare ROAFACTURARE v 2.0.46 listare_lista_livrare = 1 && modificare ROAFACTURARE v 2.0.46 id_furnizor = 0 && id_furnizor - imi trebuie la aviz pe baza de NIR furnizor = [] && nume furnizor - imi trebuie la aviz pe baza de NIR nrfactachi = 0 && numar factura achizitie - imi trebuie la aviz pe baza de NIR id_part_rez = Null id_gestiune_init = Null && gestiunea aleasa in formularul de introducere a datelor facturii / avizului cDocAtasate = [crsoDateDocAtasate]&& modificare ROAFACTURARE v 2.0.58 nRelistare = 0 && modificare ROAFACTURARE v 2.0.58 nSalveazaAtasamente = 0 && modificare ROAFACTURARE v 2.0.58 nid_proforma = 9999999999 && modificare ROAFACTURARE v 2.0.58 nid_vanzare = 9999999999 && modificare ROAFACTURARE v 2.0.58 nid_vanzare_retur = 9999999999 && modificare ROAFACTURARE v 2.0.58 sumavorbe = [] && modificare ROAFACTURARE v 2.0.78 coeficient_k = 0 && modificare ROAFACTURARE v 2.0.93 explicatia4 = [] && modificare ROACONTRACTE v 2.0.42 id_ordl = NULL && modificare ROAAUTO v 2.0.33 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 oClient = NULL lCopiere = .F. && copiere factura/aviz nIdBeneficiar = Null nTipFactura = NULL && tip intern factura (ex: ACN 0=TRANZIT/1=CHEIAJ/3=CHIRII/5=APA/6=PENALITATI) id_util = NULL && id utilizator tip_doc_394 = 'F' && FACTURA pentru xml EFactura nRectificativa = 0 && 0 = factura initiala, 1 = factura rectificativa tip_saft = 380 && factura initiala institutie_publica = 0 && 1 = clientul este institutie publica, pentru folosirea coduri articole CPV sau NC8 id_ctr = NULL && ID CONTRACT contract = NULL && CONTNRACT 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, toSursa && 0,0 - la listare && id_set,tip Local ldData, loSursa If !Empty(m.tnIdSet) && modificare ROAFACTURARE v 2.0.58 Use In (SELECT('crsoDateDocAtasate')) Create Cursor crsoDateDocAtasate (nume_frx c(50),fisier w) && modificare ROAFACTURARE v 2.0.58 ^ ldData = Ttod(get_ora()) If Month(ldData)<>gnLuna Or Year(ldData)<>gnAn ldData=Gomonth(Date(gnAn,gnLuna,1),1)-1 Endif With This .Data = ldData .dataireg = ldData .dataact = ldData .tva_incasare = goCalendar.tva_incasare && modificare ROAFACTURARE v 2.2.0 If (tnTip<21) OR INLIST(tnTip,45,48,49,51,52) && modificare ROAFACTURARE v 2.0.87 ( 45 ), v 2.0.93 ( 48 ), v 2.0.95 ( 49 ) .datascad = IIF(TYPE('gnZileScadentaFact') = 'N', Iif(gnZileScadentaFact=-1,Gomonth(ldData,1),ldData+gnZileScadentaFact), GOMONTH(m.ldData,1)) Endif .zi_curs = ldData If Inlist(tnIdSet,223,225,226,227,271) OR INLIST(m.tnTip, 5,6,7,9,10,52) && ,25014,25015,25016,25018,25019,25004,25005,25006,25008,25009,25051,25061) .in_valuta = 1 Endif .id_set = tnIdSet .tip = tnTip .initializeaza_setari_document() If Inlist(tnTip,23,30,41) .initializeaza_politica_pret() Endif *!* .genereaza_numar_act() .discount_evidentiat = IIF(TYPE('gnDiscountEvidentiat') = 'N', m.gnDiscountEvidentiat, 1) .nRelistare = 0 && modificare ROAFACTURARE v 2.0.58 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(loSursa.id_ctr)) lnSucces = goExecutor.oExecute(lcSql,'crsCtrTemp') If lnSucces < 0 AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") Return *!* modificare ROACONTRACTE v 2.0.35 Else lcAlias = SELECT() Select crsctrtemp Calculate Min(scadenta_incasare),MAX(afisare_scadenta) For Inlist(opt_facturare,3,4,0) To lnScadentaIncasare,lnAfisareScadenta If lnScadentaIncasare <> 0 .datascad = .dataact + lnScadentaIncasare Endif && modificare ROACONTRACTE v 2.0.38 .afisare_scadenta = lnAfisareScadenta && modificare ROACONTRACTE v 2.0.38 ^ Go Top Select (lcAlias) *!* modificare ROACONTRACTE v 2.0.35 ^ ENDIF && lnSucces < 0 ENDIF && tnTip = 2 And Type('goContract') <> 'U' && FACTURARE DIN ROACONTRACTE 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(loSursa.id_sectie)) lnSucces = goExecutor.oExecute(lcSql,'crsComTemp') If lnSucces < 0 AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") Return Else lcAlias = SELECT() IF RECCOUNT('crsComTemp') > 0 GO TOP IN crsComTemp .sectie = ALLTRIM(crsComTemp.sectie) ENDIF USE IN (SELECT('crsComTemp')) Select (lcAlias) ENDIF && lnSucces < 0 ENDIF && tnTip = 3 And Type('goComanda') = 'O' Endwith Endif Endproc Procedure initializeaza_politica_pret Local lnIdPol,lcNumePol lnIdPol = 0 lcNumePol = [] actualizeaza_politica_pret(This.tip,@lnIdPol,@lcNumePol) With This .id_pol = lnIdPol .nume_politica = lcNumePol Endwith Endproc Procedure initializeaza_setari_document LPARAMETERS tnTip Local lnIdFdoc, lcFdoc, lnTip lnIdFdoc = 0 lcFdoc = [] * vreau sa ReInitializez id_fdoc, daca schimb tipul documentului FACTURA/PROFORMA/BON FISCAL * BON FISCAL = -101, PROFORMA = -102 lnTip = IIF(EMPTY(m.tnTip), This.tip, m.tnTip) actualizeaza_document(m.lnTip,@lnIdFdoc,@lcFdoc) With This .id_fdoc = lnIdFdoc .fdoc = lcFdoc Endwith Endproc *** Se apeleaza in functie de optiunea Procedure completeaza_setari_document LPARAMETERS toDateAnterior, tlFactura * tlFactura: .T. daca copiez o factura si am nevoie de id-ul facturii anterioare, iar toDateAnterior = toFactura IF TYPE('toDateAnterior') = 'O' AND !ISNULL(toDateAnterior) AND PEMSTATUS(toDateAnterior,'id_lucrare', 5) With This IF m.tlFactura .lCopiere = .T. *.nIdTipDoc = toDateAnterior.nIdTipDoc .id_lucrare = toDateAnterior.id_lucrare .nrord = ALLTRIM(NVL(toDateAnterior.lucrare, '')) *.id_responsabil = toDateAnterior.id_responsabil *.responsabil = toDateAnterior.responsabil .id_sectie = toDateAnterior.id_sectie .sectie = ALLTRIM(NVL(toDateAnterior.sectie, '')) *.id_venchelt = toDateAnterior.id_venchelt *.venchelt = toDateAnterior.venchelt .id_agent = toDateAnterior.id_agent .nume_agent = ALLTRIM(NVL(toDateAnterior.nume_agent , '')) .id_delegat = toDateAnterior.id_delegat .nume_delegat = ALLTRIM(NVL(toDateAnterior.delegat, '')) .BIdelegat = toDateAnterior.BIdelegat .CNPdelegat = toDateAnterior.CNPdelegat .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 ELSE .nIdTipDoc = toDateAnterior.nIdTipDoc .id_lucrare = toDateAnterior.id_lucrare .nrord = toDateAnterior.nrord .id_responsabil = toDateAnterior.id_responsabil .responsabil = toDateAnterior.responsabil .id_sectie = toDateAnterior.id_sectie .sectie = toDateAnterior.sectie .id_venchelt = toDateAnterior.id_venchelt .venchelt = toDateAnterior.venchelt .id_agent = toDateAnterior.id_agent .nume_agent = toDateAnterior.nume_agent .id_delegat = toDateAnterior.id_delegat .nume_delegat = toDateAnterior.nume_delegat .BIdelegat = toDateAnterior.BIdelegat .CNPdelegat = toDateAnterior.CNPdelegat .nrinmat = toDateAnterior.nrinmat .id_masina = toDateAnterior.id_masina ENDIF ENDWITH ENDIF ENDPROC *!* Procedure genereaza_numar_act *!* Private pnTip,pnNumarAct *!* With This *!* pnTip = .tip *!* pnNumarAct = 0 *!* lcSql = [begin ] + gcS + [.pack_facturare.genereaza_numar_act(?pnTip,?gnIdUtil,?@pnNumarAct);] + ; *!* [end;] *!* lnSucces = goExecutor.oExecute(lcSql) *!* If lnSucces<0 *!* amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") *!* Endif *!* .nract = pnNumarAct *!* Endwith *!* Endproc Procedure scrieAtasamente Private pnId,pnTip,pcFormat If Used('crsoDateDocAtasate') And Nvl(poDate.nid_vanzare,9999999999)<>9999999999 If Reccount('crsoDateDocAtasate') > 0 Select crsoDateDocAtasate Scan *!* If poDate.tip = 4 And Like([AVIZ*],Upper(Alltrim(crsoDateDocAtasate.nume_frx))) *!* lcSql = [begin pack_facturare.scrie_atasamente_factura(?poDate.nid_vanzare_retur,?crsoDateDocAtasate.nume_frx,?crsoDateDocAtasate.fisier); end;] *!* Else *!* lcSql = [begin pack_facturare.scrie_atasamente_factura(?poDate.nid_vanzare,?crsoDateDocAtasate.nume_frx,?crsoDateDocAtasate.fisier); end;] *!* Endif lcNume_Frx = crsoDateDocAtasate.nume_frx If poDate.tip = 4 And Like([AVIZ*],Upper(Alltrim(lcNume_Frx))) pnId = poDate.nid_vanzare_retur Else pnId = poDate.nid_vanzare Endif Do Case Case Like([FACTURA_VAL*],Upper(Alltrim(lcNume_Frx))) pnTip= 2 Case Like([FACTURA*],Upper(Alltrim(lcNume_Frx))) pnTip = 1 Case Like([INVOICE*],Upper(Alltrim(lcNume_Frx))) pnTip = 3 Case Like([RECAPITULATIE],Upper(Alltrim(lcNume_Frx))) pnTip = 4 Case Like([AVIZ*],Upper(Alltrim(lcNume_Frx))) pnTip = 5 Endcase If Like([*A5],Upper(Alltrim(lcNume_Frx))) pcFormat = [A5] Else pcFormat = [A4] Endif lcSql = [INSERT INTO ATASAMENTE_VANZARI(ID_VANZARE, TIP, FORMAT, DOCUMENT, ID_UTIL) VALUES (?pnId,?pnTip,?pcFormat,?crsoDateDocAtasate.fisier,?gnIdUtil);] lnSucces = goExecutor.oExecute(lcSql) If lnSucces < 0 AMESSAGEBOX(goExecutor.cEroare,16,"Eroare") Endif Endscan Endif Use In crsoDateDocAtasate Endif Release pnId,pnTip,pcFormat Endproc Procedure Reset Lparameters tnTip && modificare ROAFACTURARE v 2.0.58 If Used('crsoDateDocAtasate') Use In crsoDateDocAtasate Endif Create Cursor crsoDateDocAtasate (nume_frx c(50),fisier w) && modificare ROAFACTURARE v 2.0.58 ^ With This .dataireg = .Data .dataact = .Data If (tnTip<21) OR INLIST(tnTip,45,48,49,51,52) && modificare ROAFACTURARE v 2.0.93 ; v 2.0.95 ( 49 ) *!* modificare v 2.2.4 *!* .datascad = Iif(gnScadentaAutomata=0,Gomonth(.Data,1),.Data+gnZileScadentaFact) .datascad = Iif(gnZileScadentaFact=-1,Gomonth(.Data,1),.Data+gnZileScadentaFact) *!* modificare v 2.2.4 ^ ENDIF .nIdTipDoc = 5 && FACTURA .zi_curs = .Data .id_client = Null .nume_client = [] .listaid = [] && id_comanda, id_contract sau lista id_aviz .descriere = [] && numar comanda, numar contract sau numere avize .id_venchelt = Null && modificare ROAFACTURARE v 2.0.46 .venchelt = [] && modificare ROAFACTURARE v 2.0.46 .id_responsabil = Null .responsabil = [] .id_pol = Null .nume_politica = [] .nume_responsabil= [] && alte date pentru facturare .BIresp = [] .CNPresp = [] .id_delegat = Null .nume_delegat = [] .BIdelegat = [] .CNPdelegat = [] .id_masina = Null .nrinmat = [] .id_agent = Null .dataora_exp = {} && modificare ROAFACTURARE v 2.0.80 .nume_agent = [] .proc_tva = 0 .explicatie_tva = [] && modificare ROAFACTURARE v 2.0.46 .discount_evidentiat = gnDiscountEvidentiat .afisare_scadenta = 1 && modificare ROACONTRACTE v 2.0.38 .text_aditional = [] .text_aditional_invoice = [] && modificare ROAFACTURARE v 2.0.46 .text_aditional_retur = [] .text_aditional_en = [] && modificare ROAFACTURARE v 2.0.80 .eProforma = 0 .nEFactura = 0 .oInfoEFactura = Null .eBonFiscal = 0 .serie_chit = [] && modificare ROAFACTURARE v 2.0.80 .explicatie_chit = [] && modificare ROAFACTURARE v 2.0.80 .nr_incasare = 0 .id_casa = 0 .ntip_incasare = 0 && modificare ROAFACTURARE v 2.0.84 .incasat = 0 && incasat numerar .incasatCARD = 0 && incasat prin CARD POS .nIncasatPos = 0 && 1 s-a ales bon fiscal prin CARD POS .nBonDetaliat = 0 && 1 se listeaza articole individuale; 0 se listeaza "contravaloare factura nr..." .incasatTichete = 0 && incasat tichete .totalctva = 0 .nract = 0 .serie_act = [] .nract_retur = 0 .serie_act_retur = [] .id_valuta = 0 .nume_valuta = [] .Curs = 0 .multiplicator = 1 .id_lucrare = 0 .nrord = [] .id_sectie = 0 .sectie = [] .totctvaconv = 0 .totftvaconv = 0 .tottvaconv = 0 .rezultat_serii = 0 .listare_componenta_set = 1 .listare_componenta_set_ll = 1 && modificare ROAFACTURARE v 2.0.56 .id_part_rez = Null .id_gestiune_init = Null .listare_serii = 1 && modificare ROAFACTURARE v 2.0.46 .listare_recapitulatie = 1 && modificare ROAFACTURARE v 2.0.46 .listare_lista_livrare = 1 && modificare ROAFACTURARE v 2.0.46 .nRelistare = 0 && modificare ROAFACTURARE v 2.0.58 .nSalveazaAtasamente = 0 && modificare ROAFACTURARE v 2.0.58 .nid_proforma = 9999999999 && modificare ROAFACTURARE v 2.0.58 .nid_vanzare = 9999999999 && modificare ROAFACTURARE v 2.0.58 .nid_vanzare_retur = 9999999999 && modificare ROAFACTURARE v 2.0.58 .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 .nListareSilentioasa = 0 && listare fara previzualizare .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 .tip_doc_394 = 'F' && FACTURA pentru xml EFactura .nRectificativa = 0 && 0 = factura initiala, 1 = factura rectificativa .tip_saft = 380 && factura initiala .institutie_publica = 0 && 1 = institutie publica .eFactura = 0 && 1 = se transmite in borderoul eFactura .id_ctr = NULL && ID CONTRACT .contract = NULL && CONTRACT Endwith Endproc PROCEDURE nIdTipDoc_Assign LPARAMETERS tnIdTipDoc This.eProforma = IIF(m.tnIdTipDoc = This.nIdTipDocProforma, 1, 0) This.eBonFiscal = IIF(m.tnIdTipDoc = This.nIdTipDocBonFiscal, 1, 0) this.nIdTipDoc = m.tnIdTipDoc ENDPROC && nIdTipDoc_Assign Enddefine ******************************************** SFARSIT: oDateFactura ******************************************** ******************************************** INCEPUT: oDateGestiune ******************************************** Define Class oDateGestiune As Custom id_gestiune = 0 id_tipgest = 0 Cont = [] acont = [] Procedure Reset With This .id_gestiune = 0 .id_tipgest = 0 .Cont = [] .acont = [] Endwith Enddefine ******************************************** SFARSIT: oDateGestiune ******************************************** ************************************** INCEPUT: actualizeaza_document ****************************************** Function actualizeaza_document Lparameters tnTip,tnIdFdoc,tcFdoc Local llReturn Private pnTip,pnIdFdoc,pcFdoc Store .T. To llReturn pnTip = tnTip pnIdFdoc = tnIdFdoc pcFdoc = tcFdoc lcSql = [begin ] + gcS + [.pack_facturare.citeste_setari_document(?pnTip,?@pnIdFdoc,?@pcFdoc);] + ; [end;] lnSucces = goExecutor.oExecute(lcSql) If lnSucces<0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") pnIdFdoc = Null pcFdoc = [] llReturn = .F. Endif tnIdFdoc = pnIdFdoc tcFdoc = pcFdoc Return llReturn Endfunc ************************************** SFARSIT: actualizeaza_document ***************************************** Function actualizeaza_partener_fact Lparameters tnTip,tnIdPart,tcNumePart Local llReturn Private pnTip,pnIdPart,pcNumePart Store .T. To llReturn pnTip = tnTip pnIdPart = tnIdPart pcNumePart = tcNumePart lcSql = [begin ] + gcS + [.pack_facturare.citeste_setari_partener(?pnTip,?@pnIdPart,?@pcNumePart);] + ; [end;] lnSucces = goExecutor.oExecute(lcSql) If lnSucces<0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") pnIdPart = Null pcNumePart = [] llReturn = .F. Endif tnIdPart = pnIdPart tcNumePart = pcNumePart Return llReturn Endfunc ************************************ SFARSIT: actualizeaza_partener_fact *************************************** Function actualizeaza_politica_pret Lparameters tnTip,tnIdPol,tcNumePol Local llReturn Private pnTip,pnIdPol,pcNumePol Store .T. To llReturn pnTip = tnTip pnIdPol = tnIdPol pcNumePol = tcNumePol lcSql = [begin ] + gcS + [.pack_facturare.citeste_setari_pol_pret(?pnTip,?gnIdUtil,?@pnIdPol,?@pcNumePol);] + ; [end;] lnSucces = goExecutor.oExecute(lcSql) If lnSucces<0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") pnIdPol = Null pcNumePol = [] llReturn = .F. Endif tnIdPol = pnIdPol tcNumePol = pcNumePol Return llReturn Endfunc ************************************ SFARSIT: actualizeaza_politica_pret *************************************** ********************************************************************************************************* Function recalculeaza_pret_vanzare_lei Lparameters tcTabel,tnCurs Private pcSirIdTemp,pcSirDiferenta Store [] To pcSirIdTemp,pcSirDiferenta Local llReturn llReturn = .T. lcSeparator = [|] Select (tcTabel) Calculate Sum(Round(vpretftva*cantitate,gnPVal)),Sum(Round(pretftva*cantitate,gnPc)) To lnTotalVal,lnTotalLei lnTotalVal = Round(lnTotalVal*tnCurs,gnPc) *!* modificare 09.11.2007 *!* If lnTotalVal <> lnTotalLei *!* lnDiferenta = lnTotalVal - lnTotalLei *!* lnSemn = Sign(lnDiferenta) *!* lnDiferenta = Abs(lnDiferenta) *!* lnDiferentaPretU = Exp((-1)*gnPc*Log(10)) *!* lnModificari = 1 *!* Do While lnModificari <> 0 *!* lnModificari = 0 *!* Select (tcTabel) *!* Scan *!* lnDiferentaPret = Round(lnDiferentaPretU*cantitate,gnPc) *!* lnSemnPret = Sign(lnDiferentaPret) *!* If Abs(lnDiferentaPret) <= Abs(lnDiferenta) *!* lnDiferenta = lnDiferenta - lnSemn * lnDiferentaPret If lnTotalVal <> lnTotalLei lnDiferenta = lnTotalVal - lnTotalLei lnSemn = Sign(lnDiferenta) lnDiferentaMin = Abs(lnDiferenta) lnDiferentaPretU = Exp((-1)*gnPPretV*Log(10)) lnModificari = 1 Do While lnModificari <> 0 lnModificari = 0 Select (tcTabel) Scan lnDiferentaPret = Round(lnDiferentaPretU*cantitate,gnPC) lnSemnPret = Sign(cantitate) lnTestDiferenta = lnDiferenta - lnSemn * Abs(lnDiferentaPret) *!* If Abs(lnDiferentaPret) <= Abs(lnDiferenta) And Abs(lnTestDiferenta)= 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 ********************************************************************************************************* ********************************************************************************************************* * verificare prietenoasa D10 la adaugarea liniei; intoarce [] daca linia are cont de venit rezolvat, altfel mesajul de afisat Function verifica_cont_venit_linie Lparameters tnIdArticol, tnIdPol Local lcSql, lnSucces, lcMesaj, lcIdPolStoc, lcIdPol, lcIdArt lcMesaj = [] If Isnull(tnIdArticol) Or Isnull(tnIdPol) Return lcMesaj Endif * fisa poate ajunge aici fara sa fi trecut prin optiunile facturarii - globalul nu exista inca lcIdPolStoc = Iif(Type('gnId_pol_pret_stoc')='N',Alltrim(Str(gnId_pol_pret_stoc)),'0') lcIdPol = Alltrim(Str(tnIdPol)) lcIdArt = Alltrim(Str(tnIdArticol)) * replica exacta a rezolvarii din pack_facturare.contabilizeaza_articol.cursor_articol: deducerea * cont_venit_articol_stoc are prioritate doar pe politica de stoc si doar fara nota pe rand lcSql = [select nom_articole.denumire, b.nume_lista_preturi, ] + ; [nvl(case when a.id_pol = ] + lcIdPolStoc + [ and a.id_nota is null then pack_facturare.cont_venit_articol_stoc(] + lcIdArt + [) end, d.scc) as scc_rezolvat ] + ; [from nom_articole ] + ; [left join crm_politici_pret_art a on a.id_pol = ] + lcIdPol + [ and a.id_articol = nom_articole.id_articol ] + ; [join crm_politici_preturi b on b.id_pol = ] + lcIdPol + [ ] + ; [left join crm_note_vanzari c on c.id_nota = (case when ] + lcIdPol + [ = ] + lcIdPolStoc + [ then nvl(a.id_nota, b.id_nota) else b.id_nota end) ] + ; [left join note_contabile d on d.id_set = c.id_set ] + ; [where nom_articole.id_articol = ] + lcIdArt If Used('crsverifcontvenit') Use In crsverifcontvenit Endif lnSucces = goExecutor.oExecute(lcSql,[crsverifcontvenit]) If lnSucces >= 0 And Used('crsverifcontvenit') And Reccount('crsverifcontvenit') > 0 And Isnull(crsverifcontvenit.scc_rezolvat) lcMesaj = [Articolul ] + Alltrim(Nvl(crsverifcontvenit.denumire,[])) + ; [ nu are cont de venit configurat pe politica ] + Alltrim(Nvl(crsverifcontvenit.nume_lista_preturi,[])) + ; [ - completati contul articolului sau nota contabila a politicii!] Endif If Used('crsverifcontvenit') Use In crsverifcontvenit Endif Return lcMesaj Endfunc && verifica_cont_venit_linie ********************************************************************************************************* ********************************************************************************************************* *!* Function recalculeaza_pret_vanzare_lei_set *!* Lparameters tcTabel,tnCurs *!* Local llReturn *!* llReturn = .T. *!* lcSeparator = [|] *!* Select (tcTabel) *!* Calculate Sum(Round(vpretftva*cantitate,gnPc)),Sum(Round(pretftva*cantitate,gnPc)) To lnTotalVal,lnTotalLei *!* lnTotalVal = Round(lnTotalVal*tnCurs,gnPc) *!* If lnTotalVal <> lnTotalLei *!* lnDiferenta = lnTotalVal - lnTotalLei *!* lnSemn = Sign(lnDiferenta) *!* lnDiferentaMin = Abs(lnDiferenta) *!* lnDiferentaPretU = Exp((-1)*gnPc*Log(10)) *!* lnModificari = 1 *!* Do While lnModificari <> 0 *!* lnModificari = 0 *!* Select (tcTabel) *!* Scan *!* lnDiferentaPret = Round(lnDiferentaPretU*cantitate,gnPc) *!* lnSemnPret = Sign(cantitate) *!* lnTestDiferenta = lnDiferenta - lnSemn * Abs(lnDiferentaPret) *!* *!* If Abs(lnDiferentaPret) <= Abs(lnDiferenta) And Abs(lnTestDiferenta)0 lnPreciziePret = iif(poDate.in_valuta=0,gnPPretV,gnPVal) lnPrecizieValoare = iif(poDate.in_valuta=0,gnPc,gnPVal) lnDiferentaPretU = Exp((-1)*lnPreciziePret*Log(10)) Create Cursor crsxtemp(id_temp N(20),difunit N(18,max(lnPreciziePret,4)),tip_valuta N(1),Curs N(10,max(gnPCurs,4)),multiplicator N(10),; cantitate N(18,max(gnPCant,4)),pret N(18,max(lnPreciziePret,4)),id_set_fact N(20)) *!* modificare ROAFACTURARE v 2.0.46 *!* Insert Into crsxtemp (id_c, difunit, tip_valuta, Curs, cantitate, Pret, id_set_fact) ; *!* Select id_c,Round(Round(lnDiferentaPretU*Iif(poDate.in_valuta=0,Iif(tip_valuta=0,1,Curs),1),gnPPret)*cantitate,gnPc) As difunit,; *!* tip_valuta,Curs,cantitate,Iif(tip_valuta=0,pretftva,vpretftva) As Pret,id_set_fact ; *!* FROM crsfactura Where id_set_fact <> 0 Order By 2 Desc Insert Into crsxtemp (id_temp, difunit, tip_valuta, Curs, multiplicator, cantitate, Pret, id_set_fact) ; Select id_temp,Round(round(lnDiferentaPretU*Iif(poDate.in_valuta=0,Iif(tip_valuta=0,1,Curs/multiplicator),1),lnPreciziePret)*cantitate,lnPrecizieValoare) As difunit,; tip_valuta,Curs,multiplicator,cantitate,Iif(tip_valuta=0,pretftva,vpretftva) As Pret,id_set_fact ; FROM crsfactura Where id_set_fact <> 0 Order By 2 Desc *!* modificare ROAFACTURARE v 2.0.46 ^ Select crsfacturaset Scan lnIdSetFact = id_set_fact lnTotalSet = Iif(poDate.in_valuta=0,Round(pretftva*cantitate,lnPrecizieValoare),Round(vpretftva*cantitate,lnPrecizieValoare)) lnCantitateSet = cantitate lcDenumire = Alltrim(denumire) lnPretInitialSet = Iif(poDate.in_valuta=0,pretftva,vpretftva) lnPretPropusSet = lnPretInitialSet *!* lnDiferentaMin = Round(lnDiferentaPretU*cantitate,gnPc) Select crsfactura Calculate Sum(Round(Iif(poDate.in_valuta=0,Iif(tip_valuta=0,pretftva,Round(vpretftva*Curs/multiplicator,gnPc)),vpretftva)*cantitate,lnPrecizieValoare)) ; For id_set_fact = lnIdSetFact To lnTotal If lnTotalSet <> lnTotal lnDiferenta = lnTotalSet - lnTotal lnDiferentaInitiala = lnDiferenta lnSemn = Sign(lnDiferenta) lnDiferentaMin = Abs(lnDiferenta) *!* lnDiferentaPretU = Exp((-1)*gnPc*Log(10)) lnModificari = 1 Do While lnModificari <> 0 lnModificari = 0 Select crsxtemp Scan For id_set_fact = lnIdSetFact lnTipValuta = tip_valuta lnCurs = Curs / multiplicator lnDiferentaPret = difunit lnSemnPret = Sign(cantitate) lnTestDiferenta = lnDiferenta - lnSemn * Abs(lnDiferentaPret) *!* STRTOFILE(ALLTRIM(STR(lnDiferenta,10,gnPc))+[ >> ]+ALLTRIM(STR(lnDiferentaPret,10,gnPc))+CHR(13)+CHR(10),[c:\testfact.txt],1) *!* modificare ROAFACTURARE v 2.0.46 *!* If Abs(lnDiferentaPret) <= Abs(lnDiferenta) And Abs(lnTestDiferenta)lnDiferentaMin lnDiferentaMin = Abs(lnTestDiferenta) lnDiferenta = lnTestDiferenta Replace Pret With Pret + lnSemn * lnSemnPret * lnDiferentaPretU *!* modificare ROAFACTURARE v 2.0.46 *!* If Abs((lnDiferentaInitiala-lnDiferenta)/lnCantitateSet - Round((lnDiferentaInitiala-lnDiferenta)/lnCantitateSet,gnPc)) <= gnMarjaEroareRepartizare If Round(Abs((lnDiferentaInitiala-lnDiferenta)/lnCantitateSet - Round((lnDiferentaInitiala-lnDiferenta)/lnCantitateSet,lnPreciziePret)),lnPreciziePret) <= gnMarjaEroareRepartizare *!* modificare ROAFACTURARE v 2.0.46 ^ lnPretPropusSet = lnPretInitialSet - lnSemn * lnSemnPret * ; Floor((lnDiferentaInitiala-lnDiferenta)/lnCantitateSet*Exp(lnPreciziePret*Log(10)))*Exp((-1)*lnPreciziePret*Log(10)) Endif If lnDiferenta <> 0 lnModificari = lnModificari + 1 Else lnModificari = 0 Exit Endif Endif Endscan Enddo *!* amessagebox(Alltrim(Str(lnDiferenta,10,gnPc))) *!* modificare ROAFACTURARE v 2.0.46 *!* If Abs(lnDiferenta)>gnMarjaEroareRepartizare If Abs(Round(lnDiferenta,lnPrecizieValoare))>gnMarjaEroareRepartizare *!* modificare ROAFACTURARE v 2.0.46 ^ lnDiferentaUnitara = lnDiferenta/lnCantitateSet *!* amessagebox(ALLTRIM(STR(lnDiferentaUnitara,10,gnPc))+[ ]+ALLTRIM(STR(lnDiferenta,10,gnPc))) If Round(lnDiferentaUnitara,lnPreciziePret)=lnDiferentaUnitara If AMESSAGEBOX("Nu s-a putut repartiza intreaga diferenta." + Chr(13) + Chr(10) + ; "Doriti sa "+Iif(lnDiferentaUnitara>0,[diminuati],[cresteti]) + ; " pretul unitar al articolului compus " + lcDenumire + ; " cu " + formateaza(Abs(lnDiferentaUnitara),14,lnPreciziePret) + " ?"; ,4+32,"Confirmare")==6 Select crsfacturaset && se scade pretul setului cu lnDiferentaUnitara modifica_pret_articol_compus(1,lnDiferentaUnitara) llReturn = .T. Else llReturn = .F. Exit Endif Else If lnPretPropusSet <> lnPretInitialSet If AMESSAGEBOX("Doriti sa modificati pretul pentru " + ; lcDenumire + " din " + formateaza(lnPretInitialSet,18,lnPreciziePret) + ; " in " + formateaza(lnPretPropusSet,18,lnPreciziePret)+" ?",4+32,"Confirmare")=6 modifica_pret_articol_compus(2,lnPretPropusSet) llReturn = .F. Else AMESSAGEBOX("Nu se poate repartiza diferenta de pret pentru articolele din componenta " + ; lcDenumire + " !",48,"Atentie") llReturn = .F. Exit Endif Else AMESSAGEBOX("Nu se poate repartiza diferenta de pret pentru articolele din componenta " + ; lcDenumire + " !",48,"Atentie") llReturn = .F. Exit Endif Endif Endif Endif Endscan Endif If Used('crsxtemp') And llReturn Select crsxtemp Scan *!* modificare ROAFACTURARE v 2.0.46 lnIdTemp = id_temp *!* lnIdC = id_c *!* modificare ROAFACTURARE v 2.0.46 ^ lnPretNou = Pret lnCurs = Curs / multiplicator Select crsfactura *!* modificare ROAFACTURARE v 2.0.46 Locate For id_temp = lnIdTemp *!* Locate For id_c = lnIdC *!* modificare ROAFACTURARE v 2.0.46 ^ If Found() lnTipValuta = tip_valuta If lnTipValuta = 0 *!* modificare ROAFACTURARE v 2.0.46 If pretftva <> lnPretNou *!* modificare ROAFACTURARE v 2.0.46 ^ Replace pretftva With lnPretNou,; pretctva With lnPretNou + Round(lnPretNou*(proc_Tvav-1),lnPreciziePret),; valftva With Round(lnPretNou * cantitate,lnPrecizieValoare),; valtva With Round(Round(lnPretNou * cantitate,lnPrecizieValoare)*(proc_Tvav-1),lnPrecizieValoare),; valctva With valftva + valtva,; valdiminuatftva With Round((lnPretNou-discountftva)*cantitate,lnPrecizieValoare),; valdiminuattva With Round(Round((lnPretNou-discountftva)*cantitate,lnPrecizieValoare)*(proc_Tvav-1),lnPrecizieValoare),; valdiminuatctva With valdiminuatftva + valdiminuattva *!* modificare ROAFACTURARE v 2.0.46 Endif *!* modificare ROAFACTURARE v 2.0.46 ^ Else *!* modificare ROAFACTURARE v 2.0.46 If vpretftva <> lnPretNou *!* modificare ROAFACTURARE v 2.0.46 ^ Replace vpretftva With lnPretNou,; vpretctva With lnPretNou + Round(lnPretNou*(proc_Tvav-1),lnPreciziePret),; vvalftva With Round(lnPretNou * cantitate,lnPrecizieValoare),; vvaltva With Round(Round(lnPretNou * cantitate,lnPrecizieValoare)*(proc_Tvav-1),lnPrecizieValoare),; vvalctva With vvalftva + vvaltva,; vvaldiminuatftva With Round((lnPretNou-vdiscountftva)*cantitate,lnPrecizieValoare),; vvaldiminuattva With Round(Round((lnPretNou-vdiscountftva)*cantitate,lnPrecizieValoare)*(proc_Tvav-1),lnPrecizieValoare),; vvaldiminuatctva With vvaldiminuatftva + vvaldiminuattva,; pretftva With Round(lnPretNou * lnCurs,gnPPretV),; pretctva With Round(lnPretNou * lnCurs,gnPPretV) + Round(Round(lnPretNou * lnCurs,gnPPretV)*(proc_Tvav-1),gnPPretV),; valftva With Round(Round(lnPretNou * lnCurs,gnPPretV) * cantitate,gnPc),; valtva With Round(Round(Round(lnPretNou * lnCurs,gnPPretV) * cantitate,gnPc)*(proc_Tvav-1),gnPc),; valctva With valftva + valtva,; valdiminuatftva With Round(Round((lnPretNou-vdiscountftva)*lnCurs,gnPPretV)*cantitate,gnPc),; valdiminuattva With Round(Round(Round((lnPretNou-vdiscountftva)*lnCurs,gnPPretV)*cantitate,gnPc)*(proc_Tvav-1),gnPc),; valdiminuatctva With valdiminuatftva + valdiminuattva *!* modificare ROAFACTURARE v 2.0.46 Endif *!* modificare ROAFACTURARE v 2.0.46 ^ Endif Endif Select crsxtemp Endscan Use In crsxtemp Endif Return llReturn Endfunc && recalculeaza_pret_vanzare_compus ********************************************************************************************************* Procedure modifica_pret_articol_compus Lparameters tnTip,tnValoare && tnTip = 1 - tnValoare este diferenta && = 2 - tnValoare este pretul nou Local lnPretNou Select crsfacturaset If poDate.in_valuta = 0 lnPretNou = Iif(tnTip=1,pretftva + (-1) * tnValoare,tnValoare) Replace pretftva With lnPretNou,; pretctva With lnPretNou + Round(lnPretNou * (proc_Tvav - 1),gnPPretV),; valftva With Round(lnPretNou * cantitate,gnPc),; valtva With Round(Round(lnPretNou * cantitate,gnPc)*(proc_Tvav-1),gnPc),; valctva With Round(lnPretNou * cantitate,gnPc) + Round(Round(lnPretNou * cantitate,gnPc)*(proc_Tvav-1),gnPc),; valdiminuatftva With Round((lnPretNou - valdiscountftva)*cantitate,gnPc),; valdiminuattva With Round(Round((lnPretNou - valdiscountftva)*cantitate,gnPc)*(proc_Tvav-1),gnPc),; valdiminuatctva With Round((lnPretNou - valdiscountftva)*cantitate,gnPc) + Round(Round((lnPretNou - valdiscountftva)*cantitate,gnPc)*(proc_Tvav-1),gnPc) Else lnPretNou = Iif(tnTip=1,vpretftva + (-1) * tnValoare,tnValoare) Replace vpretftva With lnPretNou,; vpretctva With lnPretNou + Round(lnPretNou * (proc_Tvav - 1), gnPVal),; vvalftva With Round(lnPretNou * cantitate,gnPVal),; vvaltva With Round(Round(lnPretNou * cantitate,gnPVal) * (proc_Tvav - 1),gnPVal),; vvalctva With Round(lnPretNou * cantitate,gnPVal) + Round(Round(lnPretNou * cantitate,gnPVal) * (proc_Tvav - 1),gnPVal),; vvaldiminuatftva With Round((lnPretNou - vdiscountftva) * cantitate,gnPVal),; vvaldiminuattva With Round(Round((lnPretNou - vdiscountftva) * cantitate,gnPVal) * (proc_Tvav - 1),gnPVal),; vvaldiminuatctva With Round((lnPretNou - vdiscountftva) * cantitate,gnPVal) + Round(Round((lnPretNou - vdiscountftva) * cantitate,gnPVal) * (proc_Tvav - 1),gnPVal),; pretftva With Round(lnPretNou*Curs/multiplicator,gnPPretV),; pretctva With Round(lnPretNou*Curs/multiplicator,gnPPretV) + Round(Round(lnPretNou*Curs/multiplicator,gnPPretV) * (proc_Tvav - 1), gnPPretV),; valftva With Round(Round(lnPretNou * Curs/multiplicator,gnPPretV) * cantitate,gnPc),; valtva With Round(Round(Round(lnPretNou * Curs/multiplicator,gnPPretV) * cantitate,gnPc) * (proc_Tvav - 1),gnPc),; valctva With Round(Round(lnPretNou * Curs/multiplicator,gnPPretV) * cantitate,gnPc) + Round(Round(Round(lnPretNou * Curs/multiplicator,gnPPretV) * cantitate,gnPc) * (proc_Tvav - 1),gnPc),; valdiminuatftva With Round(Round((lnPretNou - vdiscountftva)* Curs/multiplicator,gnPPretV) * cantitate,gnPc),; valdiminuattva With Round(Round(Round((lnPretNou - vdiscountftva)* Curs/multiplicator,gnPPretV) * cantitate,gnPc) * (proc_Tvav - 1),gnPc),; valdiminuatctva With Round(Round((lnPretNou - vdiscountftva)* Curs/multiplicator,gnPPretV) * cantitate,gnPc) + Round(Round(Round((lnPretNou - vdiscountftva)* Curs/multiplicator,gnPPretV) * cantitate,gnPc) * (proc_Tvav - 1),gnPc) Endif Endproc && modifica_pret_articol_compus ********************************************************************************************************* *!* Procedure prelucreaza_aviz_cu_tva *!* Lparameters tnDiscountEvidentiat *!* Create Cursor crsfacturafinala(denumire c(100),explicatie c(100),cantitate N(20,4),; *!* pretctva N(20,4),valctva N(20,4),proc_tva N(20,4),um c(10),serie c(100)) *!* Select Recno() As nrcrt,a.denumire,a.explicatie,a.cantitate,a.pretctva,a.valctva,; *!* a.proc_tvav as proc_tva,Nvl(a.um,Space(10)) as um,Nvl(a.serie,' ') As serie From crsfactura a; *!* into Cursor crsfacturafinala *!* Endproc && prelucreaza_aviz_cu_tva ********************************************************************************************************* Procedure prelucreaza_factura *!* modificare ROAFACTURARE v 2.0.67 *!* Lparameters tnDiscountEvidentiat,tnTipFacturare,tnInValuta,tnPretListSubunitati *!* modificare ROAFACTURARE v 2.0.77 : am adaugat tcCursorSursa, tcCursorSursaSet,tcCursorDestinatie Lparameters tcCursorSursa,tcCursorSursaSet,tcCursorDestinatie,tnDiscountEvidentiat,tnInValuta,tnPretListAviz, tnListareDetaliata *!* modificare ROAFACTURARE v 2.0.67 ^ *!* ii transmit tnPretListSubunitati ca parametru pentru ca sa nu mai testez si daca este vorba de o factura sau nu *!* tnListareDetaliata: daca sa se listeze randurile asa cum sunt in loc de grupate dupa articol, pret. sa nu se cumuleze cantitatea pe articole LOCAL llListareDetaliata, lnIdArticol llListareDetaliata = (IIF(TYPE('tnListareDetaliata') = 'N', tnListareDetaliata, 0) = 1) Local lcCursor,lnPretListAviz,lnIdTemp *!* modificare ROAFACTURARE v 2.0.67 : am adaugat id_ctr, numar_contract *!* modificare v 2.0.77 creeaza_facturafinala(tcCursorDestinatie) *!* Create Cursor crsfacturafinala(denumire c(100),explicatie c(240),cantitate N(20,4),pretctva N(20,4),valctva N(20,4),; *!* pretftva N(20,4),pretftvai N(20,4),pretctvai N(20,4),proc_disc N(10,4),valftva N(20,4),valtva N(20,4),; *!* valftvai N(20,4),valctvai N(20,4),valdiscount N(20,4),; *!* proc_tva N(20,4),um c(10),serie c(100),codmat c(50),codbare c(50),codmatf c(50),; *!* id_jtva_coloana N(10),expltva c(100),id_ctr N(10) Null,numar_contract c(100) Null) *!* modificare v 2.0.77 ^ If Used('crsfacttemp') Use In crsfacttemp Endif *!* modificare v 2.0.4 If Empty(tnPretListAviz) lnPretListAviz = 2 Else lnPretListAviz = Nvl(tnPretListAviz,2) ENDIF *!* modificare v 2.0.4 ^ If Empty(tcCursorSursaSet) lcCursor = tcCursorSursa Else If !Used(tcCursorSursaSet) lcCursor = tcCursorSursa Else Select (tcCursorSursaSet) lcTab = Chr(9) lcCrlf = Chr(13) + Chr(10) *!* modificare v 2.0.4 If Used('crsfactstemp') Use In crsfactstemp Endif Select * From (tcCursorSursaSet) Into Cursor crsfactstemp Delete From (tcCursorSursaSet) Select crsfactstemp *!* modificare v 2.0.4 ^ Scan lnIdSetFact = id_set_fact lnCantitate = cantitate lnIdTemp = id_temp && modificare ROAFACTURARE v 2.0.67 Insert Into (tcCursorSursaSet) Select * From crsfactstemp Where id_set_fact = lnIdSetFact *!* modificare ROAFACTURARE v 2.0.67 : am pus lnIdTemp in loc de MIN(id_temp) *!* Insert Into (tcCursorSursaSet) (id_temp,denumire) ; *!* Select lnIdTemp As id_temp,lcTab+Alltrim(Alltrim(denumire)+lcTab+Alltrim(codmat)+lcTab+Alltrim(codmatf)+lcCrlf+Nvl(explicatie,[]))+Space(5)+; *!* Alltrim(Str(Round(Sum(cantitate)/lnCantitate,gnPCant),9,gnPCant))+[ ]+Alltrim(Nvl(um,[])) As denumire ; *!* From (tcCursorSursa) Where id_set_fact = lnIdSetFact Group By denumire,codmat,codmatf,explicatie,um *!* Nu merge gruparea dupa campul explicatie Memo. Initial era tip caracter select denumire,codmat,codmatc,codmatf,cast(explicatie as c(254)) as explicatie,um, Round(Sum(cantitate)/lnCantitate,gnPCant) as cant ; From (tcCursorSursa) ; Where id_set_fact = lnIdSetFact ; Group By 1,2,3,4,5,6 ; into cursor cSeturiTemporar Insert Into (tcCursorSursaSet) (id_temp,denumire) ; Select lnIdTemp As id_temp,lcTab+Alltrim(Alltrim(denumire)+lcTab+Alltrim(codmat)+lcTab+Alltrim(codmatf)+lcCrlf+Nvl(explicatie,[]))+Space(5)+; Alltrim(Str(cant,9,gnPCant))+[ ]+Alltrim(Nvl(um,[])) As denumire ; From cSeturiTemporar USE IN (SELECT('cSeturiTemporar')) Select crsfactstemp *!* modificare v 2.0.4 ^ Endscan Insert Into (tcCursorSursaSet) Select * From (tcCursorSursa) Where Nvl(id_set_fact,0) = 0 *!* modificare v 2.0.4 If Used('crsfactstemp') Use In crsfactstemp Endif *!* modificare v 2.0.4 ^ lcCursor = tcCursorSursaSet Endif Endif *!* modificare ROAFACTURARE v 2.0.31 If gnOrdineElemDoc = 2 Select a.* From (lcCursor) a Into Cursor (lcCursor) Order By a.denumire *!* modificare ROAFACTURARE v 2.0.56 Else Select a.* From (lcCursor) a Into Cursor (lcCursor) Order By a.id_temp *!* modificare ROAFACTURARE v 2.0.56 ^ Endif *!* modificare ROAFACTURARE v 2.0.31 ^ Select Recno() As nrcrt,IIF(m.llListareDetaliata, RECNO(), 1000) as grup, a.* From (lcCursor) a Into Cursor (lcCursor) Order By nrcrt creeaza_crsfacttemp() Do Case Case tnDiscountEvidentiat = 1 And lnPretListAviz = 2 && pret fara tva Insert Into crsfacttemp (nrcrt,denumire,explicatie,codmat,codmatc,codmatf,um,cod_um_iso,cantitate,; pretftva,codbare,pretctva,pretftvai,pretctvai,proc_disc,valftvai,valctvai,; valftva,valtva,discountftva,valdiscountftva,valdiscounttva, proc_Tvav,; serie,id_jtva_coloana,id_jtva_coloana_ex,valctva,discountctva,valdiscountctva,id_ctr,numar_contract,grup, id_articol,lot) ; Select Min(nrcrt) As nrcrt,denumire,LEFT(explicatie, 240) as explicatie,Nvl(codmat,Space(50)) As codmat,; Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,; Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,Sum(cantitate) As cantitate,; pretftva,Nvl(codbare,Space(50)) As codbare,pretctva,; pretftva As pretftvai,pretctva As pretctvai,0 As proc_disc,Sum(valftva) As valftvai,Sum(valftva+valtva) As valctvai,; Sum(valftva) As valftva,Sum(valtva) As valtva, ; discountftva,Sum(valdiscountftva) As valdiscountftva,Sum(valdiscounttva) As valdiscounttva, proc_Tvav,; Min(Nvl(serie,Space(100))) As serie,id_jtva_coloana,id_jtva_coloana_ex, ; SUM(valctva) As valctva,discountctva, Sum(discountctva) As valdiscountctva,id_ctr,numar_contract,grup,id_articol,Min(Nvl(lot,Space(20))) As lot ; FROM (lcCursor) ; group by 2,3,4,5,6,7,8,10,11,12,13,14,15,20,23,25,26,28,30,31,32,33 ; ORDER By 1 && Into Cursor crsfacttemp * Group By denumire,codmat,codmatf,explicatie,um,codbare,pretftva,pretctva,proc_Tvav,id_jtva_coloana,discountftva,discountctva,id_ctr,numar_contract,grup Case tnDiscountEvidentiat = 0 And lnPretListAviz = 2 && pret fara tva Insert Into crsfacttemp (denumire,explicatie,codmat,codmatc,codmatf,cantitate,pretftva,; codbare,pretftvai,pretctvai,pretctva,proc_disc,valftva,valtva,; valftvai,valctvai,discountftva,valdiscountftva,valdiscounttva,proc_Tvav,um,cod_um_iso,; nrcrt,serie,id_jtva_coloana,id_jtva_coloana_ex,valctva,discountctva,valdiscountctva,id_ctr,numar_contract,grup,id_articol,lot) ; Select denumire,LEFT(explicatie, 240) as explicatie,Nvl(codmat,Space(50)) As codmat,Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,Sum(cantitate) As cantitate,pretftva-discountftva As pretftva,; Nvl(codbare,Space(50)) As codbare,pretftva As pretftvai,pretctva As pretctvai,pretctva-discountctva As pretctva,; Iif(cu_tva=0,Iif(pretftva<>0,Round(discountftva/pretftva*100,2),0),; Iif(pretctva<>0,Round(discountctva/pretctva*100,2),0)) As proc_disc,; Sum(valdiminuatftva) As valftva,Sum(valdiminuattva) As valtva,; Sum(valftva) As valftvai,Sum(valftva+valtva) As valctvai,; 0 As discountftva,0 As valdiscountftva,0 As valdiscounttva, proc_Tvav, Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,; Min(nrcrt) As nrcrt,Min(Nvl(serie,Space(100))) As serie,id_jtva_coloana,id_jtva_coloana_ex, ; SUM(valdiminuatctva) As valctva,0 As discountctva, 0 As valdiscountctva,id_ctr,numar_contract,grup,id_articol,Min(Nvl(lot,Space(20))) As lot ; FROM (lcCursor) Group By 1,2,3,4,5,7,8,9,10,11,12,20,21,22,25,26,28,29,30,31,32,33 Order By 23 *!* UNION all Insert Into crsfacttemp (denumire,explicatie,codmat,codmatc,codmatf,cantitate,pretftva,; codbare,pretftvai,pretctvai,pretctva,proc_disc,valftva,valtva,; valftvai,valctvai,discountftva,valdiscountftva,valdiscounttva,proc_Tvav,um,cod_um_iso,; nrcrt,serie,id_jtva_coloana,id_jtva_coloana_ex,valctva,discountctva,valdiscountctva,grup,id_articol,lot) ; Select denumire,explicatie,Nvl(codmat,Space(50)) As codmat,Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,1 As cantitate,pretftva-discountftva as pretftva,; Space(50) As codbare,pretftva As pretftvai,pretctva As pretctvai,pretctva-discountctva As pretctva,; Iif(pretctva<>0,Round(discountctva/pretctva*100,2),0) As proc_disc,; 0 As valftva,0 As valtva,0 As valftvai,0 As valctvai,discountftva,valdiscountftva,valdiscounttva,; proc_Tvav, Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso, nrcrt, Nvl(serie,Space(100)) As serie,id_jtva_coloana,id_jtva_coloana_ex, ; valdiminuatctva As valctva,0 As discountctva, 0 As valdiscountctva, grup,id_articol, Nvl(lot,Space(20)) As lot ; from (lcCursor) Where denumire = Replicate('Z',20) Order By 22 && Into Cursor crsfacttemp Case tnDiscountEvidentiat = 1 And lnPretListAviz = 1 && pret cu tva Insert Into crsfacttemp(nrcrt,denumire,explicatie,codmat,codmatc,codmatf,um,cod_um_iso,cantitate,pretctva,; valctva,valtva,pretftva,codbare,discountctva,valdiscountctva,valdiscounttva,proc_Tvav,serie,id_jtva_coloana,id_jtva_coloana_ex,; pretftvai,pretctvai,proc_disc,valftva,valftvai,valctvai,id_ctr,numar_contract,grup,id_articol,lot) ; Select Min(nrcrt) As nrcrt,denumire,LEFT(explicatie, 240) as explicatie,Nvl(codmat,Space(50)) As codmat,Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,; Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,Sum(cantitate) As cantitate,pretctva,Sum(valctva) As valctva,Sum(valtva) As valtva, ; pretftva,Nvl(codbare,Space(50)) As codbare,discountctva,Sum(valdiscountctva) As valdiscountctva,; Sum(valdiscounttva) As valdiscounttva, proc_Tvav, Min(Nvl(serie,Space(100))) As serie,id_jtva_coloana,id_jtva_coloana_ex, ; pretftva As pretftvai,pretctva As pretctvai,0 As proc_disc,Sum(valftva) As valftva,; Sum(valftva) As valftvai,Sum(valctva) As valctvai,id_ctr,numar_contract,grup,id_articol, Min(Nvl(lot,Space(20))) As lot ; FROM (lcCursor) ; group by 2,3,4,5,6,7,8,10,13,14,15,18,20,21,22,23,24,28,29,30,31 ; ORDER By 1 && Into Cursor crsfacttemp *Group By denumire,codmat,codmatf,explicatie,um,codbare,pretftva, pretctva,proc_Tvav,id_jtva_coloana,discountctva,id_ctr,numar_contract,grup ; Otherwise && pret cu tva Insert Into crsfacttemp(denumire,explicatie,codmat,codmatc,codmatf,cantitate,pretctva,; codbare,pretftvai,pretctvai,pretftva,proc_disc,valftva,valctva,valtva,; valftvai,valctvai,discountctva,valdiscountctva,valdiscounttva,proc_Tvav,um,cod_um_iso,; nrcrt,serie,id_jtva_coloana,id_jtva_coloana_ex,id_ctr,numar_contract,grup,id_articol,lot) ; Select denumire,LEFT(explicatie, 240) as explicatie,Nvl(codmat,Space(50)) As codmat,Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,; Sum(cantitate) As cantitate,pretctva-discountctva As pretctva,; Nvl(codbare,Space(50)) As codbare,pretftva As pretftvai,pretctva As pretctvai,pretftva-discountftva As pretftva,; Iif(cu_tva=0,Iif(pretftva<>0,Round(discountftva/pretftva*100,2),0),; Iif(pretctva<>0,Round(discountctva/pretctva*100,2),0)) As proc_disc,; Sum(valdiminuatftva) As valftva,Sum(valdiminuatctva) As valctva,Sum(valdiminuattva) As valtva,; Sum(valftva) As valftvai,Sum(valctva) As valctvai,; 0 As discountctva,0 As valdiscountctva,0 As valdiscounttva, proc_Tvav, Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,; Min(nrcrt) As nrcrt, Min(Nvl(serie,Space(100))) As serie,id_jtva_coloana,id_jtva_coloana_ex,id_ctr,numar_contract,grup,id_articol, Min(Nvl(lot,Space(20))) As lot ; FROM (lcCursor) Group By 1,2,3,4,5,7,8,9,10,11,12,21,22,23,26,27,28,29,30,31 Order By 24 *!* UNION all Insert Into crsfacttemp(denumire,explicatie,codmat,codmatc,codmatf,cantitate,pretctva,; codbare,pretftvai,pretctvai,pretftva,proc_disc,valftva,valctva,valtva,; valftvai,valctvai,discountctva,valdiscountctva,valdiscounttva,proc_Tvav,um,cod_um_iso,; nrcrt,serie,id_jtva_coloana,id_jtva_coloana_ex,grup,id_articol,lot) ; Select denumire,explicatie,Nvl(codmat,Space(50)) As codmat,Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,; 1 As cantitate,pretctva,; Space(50) As codbare,pretftva As pretftvai,pretctva As pretctvai,pretftva,; Iif(pretctva<>0,Round(discountctva/pretctva*100,2),0) As proc_disc,; 0 As valftva,0 As valctva,0 As valtva,0 As valftvai,0 As valctvai,discountctva,; valdiscountctva,valdiscounttva, proc_Tvav, Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso, nrcrt,; Nvl(serie,Space(100)) As serie,id_jtva_coloana,id_jtva_coloana_ex,grup,id_articol,Nvl(lot,Space(20)) As lot ; from (lcCursor) Where denumire = Replicate('Z',20) Order By 23 && Into Cursor crsfacttemp ENDCASE ******************************** *** Explicatia are 500 de caractere, tip Memo si nu poate fi folosita intr-un select group by *** Am selectat doar primele 240 caractere apoi completez explicatia din cursorul original ******************************** SELECT (lcCursor) SCAN SCATTER NAME loRec MEMO SELECT crsfacttemp LOCATE FOR denumire = loRec.denumire AND Nvl(codmat,Space(50)) = Nvl(loRec.codmat,Space(50)) AND LEFT(explicatie, 240) = LEFT(loRec.explicatie, 240) IF FOUND() REPLACE explicatie WITH ALLTRIM(loRec.explicatie) ENDIF ENDSCAN *!* modificare ROAFACTURARE v 2.0.20 ^ *!* crsfactura(id_temp N(20),id_articol N(20),id_pol N(20),id_gestiune N(20),Cont c(4),um c(10), ; *!* denumire c(100),pretftva N(20,4),pretctva N(20,4),valftva N(20,4), valtva N(20,4), valctva N(20,4),; *!* cantitate N(20,4),discountftva N(20,4), discountctva N(20,4),valdiscountftva N(20,4),valdiscounttva N(20,4),; *!* valdiscountctva N(20,4),valdiminuatftva N(20,4),valdiminuattva N(20,4),; *!* valdiminuatctva N(20,4),proc_tvav N(20,4),cu_tva N(1)) *!* modificare ROAFACTURARE v 2.0.67 *!* Endif *!* modificare ROAFACTURARE v 2.0.67 ^ Select crsfacttemp Scan Scatter Name loArticol Memo Select (tcCursorDestinatie) lcSerie = Nvl(loArticol.serie,'') && modificare ROAFACTURARE v 2.0.46 lcLot = Nvl(loArticol.lot,'') && modificare ROAFACTURARE v 2.0.46 If loArticol.denumire <> Replicate('Z',20) Append Blank *!* modificare v 2.0.4 *!* If lnPretListSubunitati = 2 && pret fara tva *!* *!* modificare v 2.0.4 ^ *!* Replace denumire With Alltrim(loArticol.denumire),explicatie With Alltrim(Nvl(loArticol.explicatie,[ ])),; *!* cantitate With loArticol.cantitate,codmat With Alltrim(NVL(loArticol.codmat,Space(50))),codmatf With Alltrim(loArticol.codmatf),; *!* codbare With Alltrim(NVL(loArticol.codbare,Space(50))),; *!* pretftvai with loArticol.pretftvai,pretctvai with loArticol.pretctvai,proc_disc with loArticol.proc_disc,; *!* pretctva with loArticol.pretctva,pretftva With loArticol.pretftva,; *!* valftva With loArticol.valftva,valtva With loArticol.valtva,; *!* valftvai with loArticol.valftvai,valctvai with loArticol.valctvai,; *!* pretctva With loArticol.pretctva,valctva With loArticol.valctva,valtva With loArticol.valtva,; *!* proc_tva With loArticol.proc_Tvav,um With Alltrim(loArticol.um),serie With Alltrim(loArticol.serie),id_jtva_coloana With loArticol.id_jtva_coloana *!* *!* modificare v 2.0.4 *!* Else Replace denumire With Alltrim(loArticol.denumire),explicatie With Alltrim(Nvl(loArticol.explicatie,[ ])),; cantitate With loArticol.cantitate,codmat With Alltrim(Nvl(loArticol.codmat,Space(50))),codmatc With Alltrim(Nvl(loArticol.codmatc,Space(50))),codmatf With Alltrim(loArticol.codmatf),; codbare With Alltrim(Nvl(loArticol.codbare,Space(50))),; pretftvai With loArticol.pretftvai,pretctvai With loArticol.pretctvai,proc_disc With loArticol.proc_disc,; pretctva With loArticol.pretctva,; pretftva With loArticol.pretftva,valftva With loArticol.valftva,; valftvai With loArticol.valftvai,valctvai With loArticol.valctvai,; pretctva With loArticol.pretctva,valctva With loArticol.valctva,valtva With loArticol.valtva,; proc_tva With loArticol.proc_Tvav,um With Alltrim(loArticol.um),cod_um_iso With Alltrim(loArticol.cod_um_iso),; lot With Alltrim(loArticol.lot),serie With Alltrim(loArticol.serie),id_jtva_coloana With loArticol.id_jtva_coloana,id_jtva_coloana_ex With loArticol.id_jtva_coloana_ex,; id_ctr With loArticol.id_ctr,numar_contract With loArticol.numar_contract, id_articol WITH loArticol.id_articol *!* Endif *!* modificare v 2.0.4 ^ *!* modificare v 2.0.46 lcSerie = [] lcLot = [] Select (tcCursorSursa) *!* modificare v 2.0.47 *!* Scan For Alltrim(denumire) = Alltrim(loArticol.denumire) ; *!* And Alltrim(Nvl(explicatie,[x_x|])) = Alltrim(Nvl(loArticol.explicatie,[x_x|])) ; *!* and Alltrim(Nvl(codmat,[x_x|])) = Alltrim(Nvl(loArticol.codmat,[x_x|])) ; *!* And Alltrim(Nvl(codmatf,[x_x|])) = Alltrim(Nvl(loArticol.codmatf,[x_x|])) ; *!* and Alltrim(Nvl(codbare,[x_x|])) = Alltrim(Nvl(loArticol.codbare,[x_x|])) ; *!* and pretftva = loArticol.pretftva ; *!* and Alltrim(Nvl(um,[x_x|])) = Alltrim(Nvl(loArticol.um,[x_x|])) ; *!* and discountftva = loArticol.discountftva ; *!* and proc_Tvav = loArticol.proc_Tvav *!* lcSerie = lcSerie + Iif(!Empty(Nvl(serie,'')),[,]+Alltrim(serie),[]) *!* Endscan If lnPretListAviz = 2 Scan For Alltrim(denumire) = Alltrim(loArticol.denumire) ; And Alltrim(Nvl(explicatie,[x_x|])) = Alltrim(Nvl(loArticol.explicatie,[x_x|])) ; and Alltrim(Nvl(codmat,[x_x|])) = Alltrim(Nvl(loArticol.codmat,[x_x|])) ; And Alltrim(Nvl(codmatf,[x_x|])) = Alltrim(Nvl(loArticol.codmatf,[x_x|])) ; and Alltrim(Nvl(codbare,[x_x|])) = Alltrim(Nvl(loArticol.codbare,[x_x|])) ; and pretftva = loArticol.pretftva ; and Alltrim(Nvl(um,[x_x|])) = Alltrim(Nvl(loArticol.um,[x_x|])) ; and discountftva = loArticol.discountftva ; and proc_Tvav = loArticol.proc_Tvav ; and Nvl(id_ctr,-1) = Nvl(loArticol.id_ctr,-1) ; and Nvl(numar_contract,'') = Nvl(loArticol.numar_contract,'') lcSerie = lcSerie + Iif(!Empty(Nvl(serie,'')),[,]+Alltrim(serie),[]) lcLot = lcLot + Iif(!Empty(Nvl(lot,'')),[,]+Alltrim(lot),[]) Endscan Else Scan For Alltrim(denumire) = Alltrim(loArticol.denumire) ; And Alltrim(Nvl(explicatie,[x_x|])) = Alltrim(Nvl(loArticol.explicatie,[x_x|])) ; and Alltrim(Nvl(codmat,[x_x|])) = Alltrim(Nvl(loArticol.codmat,[x_x|])) ; And Alltrim(Nvl(codmatf,[x_x|])) = Alltrim(Nvl(loArticol.codmatf,[x_x|])) ; and Alltrim(Nvl(codbare,[x_x|])) = Alltrim(Nvl(loArticol.codbare,[x_x|])) ; and pretctva = loArticol.pretctva ; and Alltrim(Nvl(um,[x_x|])) = Alltrim(Nvl(loArticol.um,[x_x|])) ; and discountctva = loArticol.discountctva ; and proc_Tvav = loArticol.proc_Tvav ; and Nvl(id_ctr,-1) = Nvl(loArticol.id_ctr,-1) ; and Nvl(numar_contract,'') = Nvl(loArticol.numar_contract,'') lcSerie = lcSerie + Iif(!Empty(Nvl(serie,'')),[,]+Alltrim(serie),[]) lcLot = lcLot + Iif(!Empty(Nvl(lot,'')),[,]+Alltrim(lot),[]) Endscan Endif *!* modificare v 2.0.47 ^ Select (tcCursorDestinatie) lcSerie = Iif(!Empty(lcSerie),Substr(lcSerie,2),Nvl(loArticol.serie,'')) lcLot = Iif(!Empty(lcLot),Substr(lcLot,2),Nvl(loArticol.lot,'')) Replace serie With m.lcSerie, lot WITH m.lcLot *!* modificare v 2.0.46 ^ Else loArticol.denumire = [FACTURA] Endif *!* modificare v 2.0.4 If lnPretListAviz = 2 && pret fara tva *!* modificare v 2.0.4 ^ If loArticol.discountftva <> 0 Append Blank lnProcentDiscount = loArticol.discountftva * 100 / loArticol.pretftva Replace denumire With [Discount ]+Alltrim(Str(lnProcentDiscount,10,2))+[ % ]+Alltrim(Proper(loArticol.denumire)),; lot With Iif(!Empty(Nvl(lcLot,[])),[],Alltrim(loArticol.lot)), serie With Iif(!Empty(Nvl(lcSerie,[])),[],Alltrim(loArticol.serie)),; cantitate With loArticol.cantitate,um With Alltrim(loArticol.um),cod_um_iso WITH ALLTRIM(loArticol.cod_um_iso),; codbare With Alltrim(Nvl(loArticol.codbare,Space(50))),; pretftva With (-1) * loArticol.discountftva,valftva With (-1) * loArticol.valdiscountftva,codmat With Alltrim(Nvl(loArticol.codmat,Space(50))),; codmatc With Alltrim(Nvl(loArticol.codmatc,Space(50))),codmatf With Alltrim(loArticol.codmatf),valtva With (-1) * loArticol.valdiscounttva,; proc_tva With loArticol.proc_Tvav,id_jtva_coloana With loArticol.id_jtva_coloana,id_jtva_coloana_ex With loArticol.id_jtva_coloana_ex,; id_ctr With loArticol.id_ctr,numar_contract With loArticol.numar_contract, id_articol WITH loArticol.id_articol Endif *!* modificare v 2.0.4 Else If loArticol.discountctva <> 0 Append Blank lnProcentDiscount = loArticol.discountctva * 100 / loArticol.pretctva Replace denumire With [Discount ]+Alltrim(Str(lnProcentDiscount,10,2))+[ % ]+Alltrim(Proper(loArticol.denumire)),; lot With Iif(!Empty(lcLot),[],Alltrim(loArticol.lot)), serie With Iif(!Empty(lcSerie),[],Alltrim(loArticol.serie)),; cantitate With loArticol.cantitate,um With Alltrim(loArticol.um),cod_um_iso WITH ALLTRIM(loArticol.cod_um_iso),; codmatc With Alltrim(Nvl(loArticol.codmatc,Space(50))),codmatf With Alltrim(loArticol.codmatf),codbare With Alltrim(Nvl(loArticol.codbare,Space(50))),; pretctva With (-1) * loArticol.discountctva,valctva With (-1) * loArticol.valdiscountctva,codmat With Alltrim(Nvl(loArticol.codmat,Space(50))),; valtva With (-1) * loArticol.valdiscounttva,proc_tva With loArticol.proc_Tvav,id_jtva_coloana With loArticol.id_jtva_coloana,id_jtva_coloana_ex With loArticol.id_jtva_coloana_ex,; id_ctr With loArticol.id_ctr,numar_contract With loArticol.numar_contract, id_articol WITH loArticol.id_articol Endif Endif *!* modificare v 2.0.4 ^ Select crsfacttemp Endscan Use In crsfacttemp completeaza_explicatie_tva(tcCursorDestinatie) && modificare ROAFACTURARE v 2.0.46 *!* modificare ROAFACTURARE v 2.0.67 If Inlist(poDate.tip,2,6,26,51,52) completeaza_explicatie_contract(tcCursorDestinatie) Endif *!* modificare ROAFACTURARE v 2.0.67 ^ * Completez CODNC8/CODCPV SELECT (m.tcCursorDestinatie) SCAN lnIdArticol = id_articol loCod = GetCodNC8CPV(m.lnIdArticol) SELECT (m.tcCursorDestinatie) Replace codnc8 WITH loCod.codnc8, codcpv WITH loCod.codcpv ENDSCAN If tnInValuta = 1 *!* nu a fost modificata prelucreaza_factura_valuta pentru ca avizele se fac doar in lei *!* iar optiunea de listare a pretului cu tva este valabila doar pentru RON *!* modificare ROAFACTURARE v 2.0.67 *!* prelucreaza_factura_valuta(tnDiscountEvidentiat,tnTipFacturare) prelucreaza_factura_valuta(tcCursorSursa,tcCursorSursaSet,tnDiscountEvidentiat, tnListareDetaliata) *!* modificare ROAFACTURARE v 2.0.67 ^ Endif Endproc && prelucreaza_factura ********************************************************************************************************* Procedure prelucreaza_lista_livrare *!* modificare ROAFACTURARE v 2.0.67 *!* Lparameters tnTipFacturare *!* modificare ROAFACTURARE v 2.0.67 ^ Local lcCursor lcCursor = [crslltemp] Create Cursor crslistalivrare(nrcrt N(10),denumire c(100),explicatie M,cantitate N(20,max(gnPCant,4)),um c(10),lot c(20) NULL, serie c(100) null,; codmat c(50),codmatf c(50)) If !Used('crsfacturaset') Select a.* From crsfactura a Where a.gestionabil = 1 Into Cursor (lcCursor) Order By 1 Else *!* modificare ROAFACTURARE v 2.0.56 *!* Select a.* From crsfacturaset a Where !Isnull(a.id_set_fact) And Nvl(gestionabil,0) = 1 ; *!* Into Cursor (lcCursor) Order By 1 If poDate.listare_componenta_set_ll = 1 Select a.* From crsfacturaset a Where Nvl(a.gestionabil,0) = 1 Or a.cantitate = 0 ; Into Cursor (lcCursor) Order By 1 Else Select a.* From crsfacturaset a Where Nvl(a.id_set_fact,0)<>0 Or (Nvl(a.id_set_fact,0)=0 And Nvl(a.gestionabil,0) = 1) ; Into Cursor (lcCursor) Order By 1 Endif *!* modificare ROAFACTURARE v 2.0.56 ^ Endif If Reccount(lcCursor) > 0 Select Min(nrcrt) As nrcrt,denumire,Nvl(codmat,Space(50)) As codmat,Nvl(codmatf,Space(50)) As codmatf,; LEFT(explicatie,254) as explicatie,Nvl(um,Space(10)) As um,Sum(cantitate) As cantitate, ; Nvl(lot,Space(20)) As lot, Nvl(serie,Space(100)) As serie ; FROM (lcCursor) Group By 2,3,4,5,6,8,9 ; ORDER By 1 Into Cursor crslistalivrare * denumire,codmat,codmatf,explicatie,um,serie Else Select * From (lcCursor) Into Cursor crslistalivrare Endif Use In (lcCursor) Endproc && prelucreaza_lista_livrare ********************************************************************************************************* Procedure prelucreaza_recapitulatie Lparameters tnDiscountEvidentiat Local lcCursor Create Cursor crsrecapitulatie(denumire c(100),explicatie M,cantitate N(20,max(gnPCant,4)),pretftva N(20,max(gnPPretV,4)),pret_achizitie N(20,max(gnPPret,4)),; valftva N(20,max(gnPc,4)),valtva N(20,max(gnPc,4)),um c(10),lot m,serie m,codmat c(50),codmatf c(50),id_jtva_coloana N(10),expltva c(100)) If Used('crsfacttemp') Use In crsfacttemp Endif *!* modificare ROAFACTURARE v 2.0.31 If gnOrdineElemDoc = 2 Select a.* From crsfactura a Into Cursor crsfactura Order By a.denumire *!* modificare ROAFACTURARE v 2.0.56 Else Select a.* From crsfactura a Into Cursor crsfactura Order By a.id_temp *!* modificare ROAFACTURARE v 2.0.56 ^ Endif *!* modificare ROAFACTURARE v 2.0.31 ^ Select Recno() As nrcrt,a.* From crsfactura a Into Cursor crsfactura Order By nrcrt If tnDiscountEvidentiat = 1 Select Min(nrcrt) As nrcrt,denumire,Nvl(codmat,Space(50)) As codmat,Nvl(codmatf,Space(50)) As codmatf,; CAST(explicatie as C(254)) as explicatie,Nvl(um,Space(10)) As um,Sum(cantitate) As cantitate,pretftva,Sum(valftva) As valftva,; Sum(valtva) As valtva, discountftva,pret_achizitie,Sum(valdiscountftva) As valdiscountftva,; Sum(valdiscounttva) As valdiscounttva, proc_Tvav, Nvl(serie,Space(100)) As serie,; id_jtva_coloana, Nvl(lot,Space(20)) As lot ; FROM crsfactura Group By 2,3,4,5,6,8,11,12,15,16,17,18 ; ORDER By 1 Into Cursor crsfacttemp Else Select denumire,CAST(explicatie as C(254)) as explicatie,Nvl(codmat,Space(50)) As codmat, Sum(cantitate) As cantitate,pretftva-discountftva As pretftva,; Sum(valdiminuatftva) As valftva,Sum(valdiminuattva) As valtva,pret_achizitie,; 0 As discountftva,0 As valdiscountftva,0 As valdiscounttva, proc_Tvav, ; Nvl(um,Space(10)) As um,Min(nrcrt) As nrcrt, Nvl(serie,Space(100)) As serie, ; Nvl(codmatf,Space(50)) As codmatf,id_jtva_coloana, Nvl(lot,Space(20)) As lot ; FROM crsfactura Group By 1,2,3,5,8,12,13,15,16,17,18 ; UNION All ; Select denumire,explicatie,Nvl(codmat,Space(50)) As codmat,1 As cantitate,pretftva,; 0 As valftva,0 As valtva,0 As pret_achizitie,discountftva,valdiscountftva,valdiscounttva,; proc_Tvav, Nvl(um,Space(10)) As um, nrcrt, Nvl(serie,Space(100)) As serie, ; Nvl(codmatf,Space(50)) As codmatf,id_jtva_coloana, Nvl(lot,Space(20)) As lot ; from crsfactura Where denumire = Replicate('Z',20) Order By 14 ; Into Cursor crsfacttemp Endif Select crsfacttemp Scan Scatter Name loArticol Memo Select crsrecapitulatie If loArticol.denumire <> Replicate('Z',20) Append Blank Replace denumire With Alltrim(loArticol.denumire),explicatie With Alltrim(Nvl(loArticol.explicatie,[ ])),; cantitate With loArticol.cantitate,codmat With Nvl(loArticol.codmat,Space(50)),codmatf With Alltrim(loArticol.codmatf),; pretftva With loArticol.pretftva,valftva With loArticol.valftva,valtva With loArticol.valtva,; um With Alltrim(loArticol.um),lot With Alltrim(loArticol.lot),serie With Alltrim(loArticol.serie),; pret_achizitie With loArticol.pret_achizitie,id_jtva_coloana With loArticol.id_jtva_coloana Else loArticol.denumire = [FACTURA] Endif If loArticol.discountftva <> 0 Append Blank lnProcentDiscount = loArticol.discountftva * 100 / loArticol.pretftva Replace denumire With [Discount ]+Alltrim(Str(lnProcentDiscount,10,2))+[ % ]+Alltrim(Proper(loArticol.denumire)),; lot With Alltrim(loArticol.lot),serie With Alltrim(loArticol.serie),cantitate With loArticol.cantitate,um With Alltrim(loArticol.um),; pretftva With (-1) * loArticol.discountftva,valftva With (-1) * loArticol.valdiscountftva,codmat With Nvl(loArticol.codmat,Space(50)),; valtva With (-1) * loArticol.valdiscounttva,pret_achizitie With loArticol.pret_achizitie,codmatf With Nvl(loArticol.codmatf,Space(50)),; id_jtva_coloana With loArticol.id_jtva_coloana Endif Select crsfacttemp Endscan Use In crsfacttemp Endproc && prelucreaza_recapitulatie ********************************************************************************************************* Procedure prelucreaza_factura_valuta Lparameters tcCursorSursa,tcCursorSursaSet,tnDiscountEvidentiat, tnListareDetaliata && ,tnTipFacturare *!* modificare ROAFACTURARE v 2.0.67 *!* modificare v 2.0.77 *!* tnListareDetaliata: daca sa se listeze randurile asa cum sunt in loc de grupate dupa articol, pret. sa nu se cumuleze cantitatea pe articole LOCAL llListareDetaliata, lnIdArticol llListareDetaliata = (IIF(TYPE('tnListareDetaliata') = 'N', tnListareDetaliata, 0) = 1) creeaza_facturafinala([crsfacturafinalaval]) *!* Create Cursor crsfacturafinalaval(denumire c(100),explicatie c(240),cantitate N(20,4),pretftva N(20,4),; *!* valftva N(20,4),valtva N(20,4),proc_tva N(20,4),um c(10),serie m,codmat c(50),codmatf c(50),codbare c(50),; *!* id_jtva_coloana N(10),expltva c(100),id_ctr N(10) Null,numar_contract c(100) Null) *!* modificare v 2.0.77 ^ If Used('crsfacttemp') Use In crsfacttemp Endif If !Used(tcCursorSursaSet) lcCursor = tcCursorSursa Else lcCursor = tcCursorSursaSet Endif *!* modificare ROAFACTURARE v 2.0.56 If gnOrdineElemDoc = 2 Select a.* From (lcCursor) a Into Cursor (lcCursor) Order By a.denumire Else Select a.* From (lcCursor) a Into Cursor (lcCursor) Order By a.id_temp ENDIF *!* modificare ROAFACTURARE v 2.0.56 ^ creeaza_crsfacttemp() If tnDiscountEvidentiat = 1 Insert Into crsfacttemp (nrcrt,denumire,explicatie,um,cod_um_iso,cantitate,pretftva,valftva,valtva, ; discountftva,valdiscountftva,valdiscounttva,proc_Tvav,serie,; codmat,codmatc,codmatf,id_jtva_coloana,codbare,id_ctr,numar_contract,grup,id_articol,lot) ; Select Min(nrcrt) As nrcrt,denumire,LEFT(explicatie, 240) as explicatie,Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,Sum(cantitate) As cantitate,; vpretftva As pretftva,Sum(vvalftva) As valftva,Sum(vvaltva) As valtva, ; vdiscountftva As discountftva,Sum(vvaldiscountftva) As valdiscountftva,; Sum(vvaldiscounttva) As valdiscounttva,proc_Tvav, Min(Nvl(serie,Space(100))) As serie,; Nvl(codmat,Space(50)) As codmat,IIF(TYPE(m.lcCursor + '.codmatc') = 'C', Nvl(codmatc,Space(50)), SPACE(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,id_jtva_coloana, ; Nvl(codbare,Space(50)) As codbare,id_ctr,numar_contract,grup,id_articol, Min(Nvl(lot,Space(20))) As lot ; FROM (lcCursor) Group By 2,3,4,5,7,10,13,15,16,17,18,19,20,21,22,23 ; ORDER By 1 && Into Cursor crsfacttemp Else Insert Into crsfacttemp(denumire,explicatie,cantitate,pretftva,valftva,valtva,; discountftva,valdiscountftva,valdiscounttva,proc_Tvav,um,cod_um_iso,nrcrt,serie,codmat, ; codmatc,codmatf,id_jtva_coloana,codbare,id_ctr,numar_contract,grup,id_articol,lot) ; Select denumire,LEFT(explicatie, 240) as explicatie,Sum(cantitate) As cantitate,vpretftva-vdiscountftva As pretftva,; Sum(vvaldiminuatftva) As valftva,Sum(vvaldiminuattva) As valtva,; 0 As discountftva,0 As valdiscountftva,0 As valdiscounttva, proc_Tvav,; Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,Min(nrcrt) As nrcrt, Min(Nvl(serie,Space(100))) As serie,Nvl(codmat,Space(50)) As codmat, ; IIF(TYPE(m.lcCursor + '.codmatc') = 'C', Nvl(codmatc,Space(50)), SPACE(50)),Nvl(codmatf,Space(50)) As codmatf,id_jtva_coloana,Nvl(codbare,Space(50)) As codbare,id_ctr,numar_contract,grup,id_articol, Min(Nvl(lot,Space(20))) As lot ; FROM (lcCursor) Group By 1,2,4,10,11,12,15,16,17,18,19,20,21,22,23 ; UNION All ; Select denumire,LEFT(explicatie, 240) as explicatie,1 As cantitate,vpretftva As pretftva,; 0 As valftva,0 As valtva,vdiscountftva As discountftva,vvaldiscountftva As valdiscountftva,; vvaldiscounttva As valdiscounttva, proc_Tvav,Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso, nrcrt,; Nvl(serie,Space(100)) As serie,Nvl(codmat,Space(50)) As codmat,IIF(TYPE(m.lcCursor + '.codmatc') = 'C', Nvl(codmatc,Space(50)), SPACE(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf, ; id_jtva_coloana,Nvl(codbare,Space(50)) As codbare,id_ctr,numar_contract,grup,id_articol,Nvl(lot,Space(20)) As lot ; from (lcCursor) Where denumire = Replicate('Z',20) Order By 13 && Into Cursor crsfacttemp Endif *!* modificare ROAFACTURARE v 2.0.46 ^ *!* modificare ROAFACTURARE v 2.0.67 *!* Endif *!* modificare ROAFACTURARE v 2.0.67 ^ ******************************** *** Explicatia are 500 de caractere, tip Memo si nu poate fi folosita intr-un select group by *** Am selectat doar primele 240 caractere apoi completez explicatia din cursorul original ******************************** SELECT (lcCursor) SCAN SCATTER NAME loRec MEMO SELECT crsfacttemp LOCATE FOR denumire = loRec.denumire AND Nvl(codmat,Space(50)) = Nvl(loRec.codmat,Space(50)) AND LEFT(explicatie, 240) = LEFT(loRec.explicatie, 240) IF FOUND() REPLACE explicatie WITH ALLTRIM(loRec.explicatie) ENDIF ENDSCAN Select crsfacttemp Scan Scatter Name loArticol Memo Select crsfacturafinalaval lcSerie = Nvl(loArticol.serie,'') && modificare ROAFACTURARE v 2.0.46 lcLot = Nvl(loArticol.lot,'') If loArticol.denumire <> Replicate('Z',20) Append Blank *!* modificare ROAFACTURARE v 2.0.46 *!* Replace denumire With Alltrim(loArticol.denumire),cantitate With loArticol.cantitate,; *!* explicatie With Alltrim(Nvl(loArticol.explicatie,[ ])),um With Alltrim(loArticol.um),; *!* pretftva With loArticol.pretftva,valftva With loArticol.valftva,valtva With loArticol.valtva,; *!* proc_tva With loArticol.proc_Tvav,serie With Alltrim(loArticol.serie),codmat With Alltrim(NVL(loArticol.codmat,Space(50))) Replace denumire With Alltrim(loArticol.denumire),cantitate With loArticol.cantitate,; explicatie With Alltrim(Nvl(loArticol.explicatie,[ ])),um With Alltrim(loArticol.um),cod_um_iso WITH ALLTRIM(loArticol.cod_um_iso),; id_articol WITH loArticol.id_articol,; pretftva With loArticol.pretftva,valftva With loArticol.valftva,valtva With loArticol.valtva,; proc_tva With loArticol.proc_Tvav,codmat With Alltrim(Nvl(loArticol.codmat,Space(50))), ; codmatc With Alltrim(Nvl(loArticol.codmatc,Space(50))),; codmatf With Alltrim(Nvl(loArticol.codmatf,Space(50))),id_jtva_coloana With loArticol.id_jtva_coloana,; id_ctr With loArticol.id_ctr,numar_contract With loArticol.numar_contract lcSerie = [] lcLot = [] Select (tcCursorSursa) Scan For Alltrim(denumire) = Alltrim(loArticol.denumire) ; And Alltrim(Nvl(explicatie,[ ])) = Alltrim(Nvl(loArticol.explicatie,[ ])) ; and Alltrim(codmat) = Alltrim(loArticol.codmat) ; And Alltrim(codmatf) = Alltrim(loArticol.codmatf) ; and vpretftva = loArticol.pretftva ; and Alltrim(um) = Alltrim(loArticol.um) ; and vdiscountftva = loArticol.discountftva ; and proc_Tvav = loArticol.proc_Tvav ; and Nvl(id_ctr,-1) = Nvl(loArticol.id_ctr,-1) ; and Nvl(numar_contract,'') = Nvl(loArticol.numar_contract,'') lcSerie = lcSerie + Iif(!Empty(Nvl(serie,'')),[,]+Alltrim(serie),[]) lcLot = lcLot + Iif(!Empty(Nvl(lot,'')),[,]+Alltrim(lot),[]) Select crsfactura Endscan Select crsfacturafinalaval lcSerie = Iif(!Empty(lcSerie),Substr(lcSerie,2),Nvl(loArticol.serie,'')) lcLot = Iif(!Empty(lcLot),Substr(lcLot,2),Nvl(loArticol.lot,'')) Replace serie With m.lcSerie, lot WITH m.lcLot *!* modificare ROAFACTURARE v 2.0.46 ^ Else loArticol.denumire = [INVOICE] Endif If loArticol.discountftva <> 0 Append Blank lnProcentDiscount = loArticol.discountftva * 100 / loArticol.pretftva *!* modificare ROAFACTURARE v 2.0.46 *!* Replace denumire With Alltrim(Proper(loArticol.denumire))+[ Discount ]+Alltrim(Str(lnProcentDiscount,10,2))+[ %],; *!* cantitate With loArticol.cantitate,um With Alltrim(loArticol.um),serie With Alltrim(loArticol.serie),; *!* pretftva With (-1) * loArticol.discountftva,valftva With (-1) * loArticol.valdiscountftva,; *!* valtva With (-1) * loArticol.valdiscounttva,proc_tva With loArticol.proc_Tvav,; *!* codmat With Alltrim(NVL(loArticol.codmat,Space(50))) Replace denumire With Alltrim(Proper(loArticol.denumire))+[ Discount ]+Alltrim(Str(lnProcentDiscount,10,2))+[ %],; id_articol WITH loArticol.id_articol,; cantitate With loArticol.cantitate,um With Alltrim(loArticol.um),cod_um_iso WITH ALLTRIM(loArticol.cod_um_iso),lot WITH lcLot, serie With lcSerie,; pretftva With (-1) * loArticol.discountftva,valftva With (-1) * loArticol.valdiscountftva,; valtva With (-1) * loArticol.valdiscounttva,proc_tva With loArticol.proc_Tvav,; codmatc With Alltrim(Nvl(loArticol.codmatc,Space(50))), ; codmat With Alltrim(Nvl(loArticol.codmat,Space(50))),codmatf With Alltrim(Nvl(loArticol.codmatf,Space(50))),; id_jtva_coloana With loArticol.id_jtva_coloana,id_ctr With loArticol.id_ctr,numar_contract With loArticol.numar_contract *!* modificare ROAFACTURARE v 2.0.46 ^ Endif Select crsfacttemp Endscan * Completez CODNC8/CODCPV SELECT crsfacturafinalaval SCAN lnIdArticol = id_articol loCod = GetCodNC8CPV(m.lnIdArticol) SELECT crsfacturafinalaval Replace codnc8 WITH loCod.codnc8, codcpv WITH loCod.codcpv ENDSCAN Use In crsfacttemp Endproc && prelucreaza_factura_valuta ********************************************************************************************************* Procedure prelucreaza_aviz_retur Lparameters tnDiscountEvidentiat *!* modificare v 2.0.77 creeaza_facturacrs([crsavizretur2]) prelucreaza_facturacrs([crsavizretur],[crsavizretur2],0,0,0) prelucreaza_factura([crsavizretur2],[],[crsfacturafinala2],tnDiscountEvidentiat,0,2) If Used('crsavizretur') Use In crsavizretur Endif If Used('crsavizretur2') Use In crsavizretur2 Endif Endproc && prelucreaza_aviz_retur ********************************************************************************************************* *!* modificare ROAFACTURARE v 2.0.46 *!* Function optiuni_format_factura *!* Private pnOptiune *!* pnOptiune = 1 *!* pnButon = 1 *!* lcTitlu = "LISTARE FACTURA" *!* lcExplicatie = "Alegeti formatul facturii:" *!* lcOptiuni = [A4;A5;] *!* lnNrOptiuni = 2 *!* llFaraRenuntare = .T. *!* ofrmopt = Createobject("frm_optiune",lcTitlu,lcExplicatie,lnNrOptiuni,lcOptiuni,llFaraRenuntare) *!* ofrmopt.Show(1) *!* Release ofrmopt *!* Return pnOptiune *!* Endfunc && optiuni_format_factura ********************************************************************************************************* Function optiuni_format_listare Lparameters tnTip && 0 - factura ; 1 - aviz Private pnOptiune pnOptiune = 1 pnButon = 1 If Empty(tnTip) lcTitlu = "LISTARE FACTURA" lcExplicatie = "Alegeti formatul facturii:" Else lcTitlu = "LISTARE AVIZ" lcExplicatie = "Alegeti formatul avizului:" Endif lcOptiuni = [A4;A5;] lnNrOptiuni = 2 llFaraRenuntare = .T. ofrmopt = Createobject("frm_optiune",lcTitlu,lcExplicatie,lnNrOptiuni,lcOptiuni,llFaraRenuntare) ofrmopt.Show(1) Release ofrmopt Return pnOptiune Endfunc && optiuni_format_listare *!* modificare ROAFACTURARE v 2.0.46 ^ ********************************************************************************************************* Procedure creeaza_facturafinala Lparameters tcNumeCursor If Used(tcNumeCursor) Use In (tcNumeCursor) Endif Create Cursor (tcNumeCursor) (denumire c(100),explicatie M,cantitate N(20,max(gnPCant,4)),pretctva N(20,max(gnPPretV,precizie_max_pret_vz)),valctva N(20,max(gnPc,4)),; pretftva N(20,max(gnPPretV,precizie_max_pret_vz)),pretftvai N(20,max(gnPPretV,precizie_max_pret_vz)),pretctvai N(20,max(gnPPretV,precizie_max_pret_vz)),proc_disc N(10,4),valftva N(20,max(gnPc,4)),valtva N(20,max(gnPc,4)),; valftvai N(20,max(gnPc,4)),valctvai N(20,max(gnPc,4)),valdiscount N(20,max(gnPc,4)),; proc_tva N(20,4),um c(10),cod_um_iso C(10) null,lot C(20) null,serie c(100),codmat c(50),codmatc c(50), codbare c(50),codmatf c(50),; id_jtva_coloana N(10),expltva c(100),id_jtva_coloana_ex N(10) null,expltva_ex c(100) null,id_ctr N(10) Null,numar_contract c(100) Null, taxcode N(6) null, id_articol N(10) null, codnc8 V(20) null, codcpv V(20) null) Endproc && creeaza_crsfacturafinala ********************************************************************************************************* Procedure creeaza_facturacrs Lparameters tcNumeCursor If Used(tcNumeCursor) Use In (tcNumeCursor) Endif 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)), 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)),; vvaldiscountctva N(20,max(gnPVal,4)),vvaldiminuatftva N(20,max(gnPVal,4)),vvaldiminuattva N(20,max(gnPVal,4)),vvaldiminuatctva N(20,max(gnPVal,4)),id_set_fact N(20) Null,explicatie M Null,; id_part_rez N(10) Null,id_lucrare_rez N(10) Null,pretv_orig N(20,max(gnPPretV,precizie_max_pret_vz)),pretd N(20,max(gnPPretVal,precizie_max_pret_vz)) Null,id_valuta_d N(15) Null,; id_rata N(20) Null,data_rata d,data_scadenta d,nr_rata N(20),id_ctr N(20) Null,opt_facturare N(3),numar_contract c(100) Null,nume_val c(100),id_rul_aux n(10) null, ; nume_gestiune c(100) null, cgest c(50) null, taxcode N(6) null, codnc8 V(20) null, codcpv V(20) null) Endproc && creeaza_facturacrs ********************************************************************************************************* Procedure creeaza_crsfacttemp If Used('creeaza_crsfacttemp') Use In creeaza_crsfacttemp Endif Create Cursor crsfacttemp(nrcrt N(10),id_articol N(20) null,denumire c(100),explicatie M Null,codmat c(50),codmatc c(50),codmatf c(50),codbare c(50),um c(10),cod_um_iso C(10) null, lot C(20) null, serie c(100) Null,; id_ctr N(10) Null,numar_contract c(100) Null,cantitate N(20,max(gnPCant,4)),; proc_Tvav N(20,4),id_jtva_coloana N(10),id_jtva_coloana_ex N(10) Null,; pretftva N(20,max(gnPPretV,precizie_max_pret_vz)),pretftvai N(20,max(gnPPretV,precizie_max_pret_vz)),pretctva N(20,max(gnPPretV,precizie_max_pret_vz)),pretctvai N(20,max(gnPPretV,precizie_max_pret_vz)),; valftva N(20,max(gnPc,4)),valftvai N(20,max(gnPc,4)),valtva N(20,max(gnPc,4)),valctva N(20,max(gnPc,4)),valctvai N(20,max(gnPc,4)),; proc_disc N(10,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)),valdiscountctva N(20,max(gnPc,4)), grup N(4), taxcode N(6) null, codnc8 V(20) null, codcpv V(20) null) Endproc && creeaza_crsfacttemp ********************************************************************************************************* Procedure prelucreaza_facturacrs Lparameters tcCursorSursa,tcCursorDestinatie,tnProcTvav,tnDiscount,tnDiscountVal Local lnTotalBaza,lnTotalBazaVal,lnIdTemp *!* modificare ROAAUTO v 2.0.41 : am adaugat id_articol 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,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,; NVL(codmatf,Space(50)) As codmatf,; Nvl(codbare,Space(50)) As codbare,Nvl(pret_achizitie,0.000) As pret_achizitie,Nvl(cantitate,1) As cantitate,proc_Tvav,Nvl(um,Space(50)) As um, ; CAST(IIF(TYPE(tcCursorSursa+".cod_um_iso")='U','',cod_um_iso) as C(5)) as cod_um_iso, ; pret_cu_tva As cu_tva,; Iif(pret_cu_tva = 1,Round(Pret,gnPPretV),Round(Pret,gnPPretV)+Round(Round(Pret,gnPPretV)*(proc_Tvav-1),gnPPretV)) As pretctva,; Iif(pret_cu_tva = 1,Round(discount_unitar,gnPPretV),0.000) As discountctva,; Iif(pret_cu_tva = 1,Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc),Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc)+; Round(Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1),gnPc)) As valctva,; Iif(pret_cu_tva = 1,Round(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc),; ROUND((Round(discount_unitar,gnPPretV)-Round(Round(discount_unitar,gnPPretV)*(proc_Tvav-1),gnPPretV))*Nvl(cantitate,1),gnPc)) As valdiscountctva,; IIF(pret_cu_tva = 1,; ROUND((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc),; ROUND((Round(Pret,gnPPretV)+Round(Round(Pret,gnPPretV)*(proc_Tvav-1),gnPPretV)-Round(discount_unitar,gnPPretV)-Round(Round(discount_unitar,gnPPretV)*(proc_Tvav-1),gnPPretV))*Nvl(cantitate,1),gnPc)) As valdiminuatctva,; IIF(pret_cu_tva = 0,; Round(Pret,gnPPretV),; Round(Round(Pret,gnPPretV)/proc_Tvav,gnPPretV)) As pretftva,; IIF(pret_cu_tva = 0,; Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc),; ROUND(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc) - ; Round(Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valftva,; IIF(pret_cu_tva = 0,; Round(Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1),gnPc),; Round(Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valtva,; IIF(pret_cu_tva = 0,; Round(discount_unitar,gnPPretV),; Round(Round(discount_unitar,gnPPretV)/proc_Tvav,gnPPretV)) As discountftva,; IIF(pret_cu_tva = 0,; Round(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc),; ROUND(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc) - ; Round(Round(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valdiscountftva,; IIF(pret_cu_tva = 0,; ROUND(Round(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1),gnPc),; Round(Round(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valdiscounttva,; IIF(pret_cu_tva = 0,; Round((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc),; ROUND((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc) - ; Round(Round((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valdiminuatftva,; IIF(pret_cu_tva = 0,; Round(Round((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc)*(proc_Tvav-1),gnPc),; Round(Round((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valdiminuattva, ; 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) - ; Round(Round(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvalftva,; IIF(pret_cu_tva = 0,; Round(Round(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1),gnPVal),; Round(Round(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvaltva,; 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) - ; Round(Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvaldiscountftva,; IIF(pret_cu_tva = 0,; ROUND(Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1),gnPVal),; Round(Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvaldiscounttva,; IIF(pret_cu_tva = 0,; Round((Round(Pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1),gnPVal),; ROUND((Round(Pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1),gnPVal) - ; Round(Round((Round(Pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1), gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvaldiminuatftva,; IIF(pret_cu_tva = 0,; Round(Round((Round(Pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1),gnPVal),; Round(Round((Round(Pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1), gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvaldiminuattva, ; Nvl(id_vanzare_set,00000000000000000) As id_set_fact,; Iif(Nvl(id_gestiune,0)<>0,1,0) As gestionabil, ; id_ctr,numar_contract,id_valuta,tip_valuta,Nvl(Curs,1.000) As Curs,NVL(multiplicator,1) as multiplicator,nume_val, ; CAST(IIF(TYPE(tcCursorSursa+".codnc8")='U','',codnc8) as V(20)) as codnc8, ; CAST(IIF(TYPE(tcCursorSursa+".codcpv")='U','',codcpv) as V(20)) as codcpv ; From (tcCursorSursa) If tnDiscount<> 0 Select (tcCursorDestinatie) Calculate Sum(valdiminuatftva),Sum(vvaldiminuatftva),Max(id_temp) To lnTotalBaza,lnTotalBazaVal,lnIdTemp Select (tcCursorDestinatie) Append Blank Replace denumire With Replicate('Z',20),cantitate With 1,; pretftva With lnTotalBaza,discountftva With tnDiscount,valdiscountftva With tnDiscount,; valdiscounttva With Round(tnDiscount * (tnProcTvav - 1),gnPc),; vpretftva With lnTotalBazaVal,vdiscountftva With tnDiscountVal,vvaldiscountftva With tnDiscountVal,; vvaldiscounttva With Round(tnDiscountVal * (tnProcTvav - 1),gnPVal),; proc_Tvav With tnProcTvav,id_temp With lnIdTemp+1 Endif Endproc && prelucreaza_facturacrs ********************************************************************************************************* *!* modificare v 2.0.67 *!* Procedure creeaza_crsfactura_rate *!* If Used('crsfactura') *!* Use in crsfactura *!* EndIf *!* Create Cursor crsfactura(id_rata N(20),id_temp N(20),den_rata c(100),data_rata d, data_scadenta d,um c(10),denumire c(100),codmat c(100),codmatf c(100),codbare c(50),; *!* explicatie c(240),nr_rata N(20), valftva N(20,4), valtva N(20,4), valctva N(20,4),serie c(100),Curs N(20,4),id_jtva_coloana N(20),; *!* proc_tvav N(20,4),cu_tva N(1),pretftva N(20,4),pretctva N(20,4),tip_valuta N(1),vpretftva N(20,4),vpretctva N(20,4),discountftva N(20,4)) *!* Endproc && creeaza_crsfactura_rate *!* modificare v 2.0.67 ^ ********************************************************************************************************* Procedure creeaza_backup_cursoare_facturare *!* modificare 03.06.2013 *!* *!* modificare v 2.0.56 *!* *!* Dimension laStructura(1,18),laStructura2(1,18) *!* sterge_backup_cursoare_facturare() *!* copiaza_structura_cursor([crsfactura],[bckpfactura]) *!* *!* Afields(laStructura,[crsfactura]) *!* *!* Create Cursor bckpfactura From Array laStructura *!* *!* modificare v 2.0.56 ^ *!* Select * From crsfactura Into Cursor bckpfactura *!* *!* If Used('crsfacturaset') *!* *!* Afields(laStructura2,[crsfacturaset]) *!* *!* Create Cursor bckpfacturaset From Array laStructura2 *!* *!* Select * From crsfacturaset Into Cursor bckpfacturaset *!* *!* Endif *!* Release laStructura,laStructura2 creeaza_backup_cursoare([crsfactura]) && in oproceduri_comune.prg *!* modificare 03.06.2013 ^ Endproc && creeaza_backup_cursoare_facturare ********************************************************************************************************* Procedure repune_backup_cursoare_facturare *!* modificare ROAFACTURARE v 2.0.46 *!* If Used('bckpfactura') *!* Select * From bckpfactura Into Cursor crsfactura Readwrite *!* Use In bckpfactura *!* Endif If Used('crsfacturaset') Use In crsfacturaset Endif *!* modificare 03.06.2013 *!* If Used('bckpfactura') *!* Select crsfactura *!* lnRecno = Recno() *!* Select * From bckpfactura Into Cursor crsfactura Readwrite *!* Use In bckpfactura *!* Select crsfactura *!* If Reccount('crsfactura') > 0 *!* Go Min(lnRecno,Reccount('crsfactura')) *!* Else *!* Go Top *!* Endif *!* Endif *!* *!* modificare ROAFACTURARE v 2.0.46 ^ *!* *!* If Used('bckpfacturaset') *!* *!* Select * From bckpfacturaset Into Cursor crsfacturaset Readwrite *!* *!* Use In bckpfacturaset *!* *!* Endif repune_backup_cursoare([crsfactura]) && in oproceduri_comune.prg *!* modificare 03.06.2013 ^ Endproc && repune_backup_cursoare_facturare ********************************************************************************************************* Procedure sterge_backup_cursoare_facturare *!* modificare 03.06.2013 *!* If Used('bckpfactura') *!* Use In bckpfactura *!* Endif *!* *!* If Used('bckpfacturaset') *!* *!* Use In bckpfacturaset *!* *!* Endif sterge_backup_cursoare([crsfactura]) *!* modificare 03.06.2013 ^ Endproc && sterge_backup_cursoare_facturare ********************************************************************************************************* ********************************************************************************************************* Procedure alege_banci_facturare Local ofrmbanca lcSql = [select 0 as ales,Nvl(b.banca,b.denumire) as banca,b.cont_banca as cont,b.reg_comert as swift,] + ; [c.adresa from coresp_tip_part a ] + ; [join nom_parteneri b on a.id_part = b.id_part and b.sters = 0 and b.inactiv = 0 ] + ; [left join vadrese_parteneri c on a.id_part = c.id_part and c.principala = 1 ] + ; [where a.id_tip_part = ] + Iif(poDate.in_valuta=0,[24],[25]) + ; [ and b.cont_banca is not null order by 2] lnSucces = goExecutor.oExecute(lcSql,[crsbanci]) If lnSucces < 0 AMESSAGEBOX(goExecutor.cEroare,16,"Eroare") Return Endif gnButon = 1 If Reccount('crsbanci')>1 Select crsbanci Go Top ofrmbanca = Createobject('frm_alege_banca') ofrmbanca.Show(1) Release ofrmbanca Endif If gnButon = 1 Select banca,Cont,swift,adresa From crsbanci Where ales = 1 Into Array laArray Dimension laArray(3,4) poFirma.banca = Iif(!Empty(laArray(1,1)),laArray(1,1),Null) poFirma.cont_banca = Iif(!Empty(laArray(1,2)),laArray(1,2),Null) poFirma.b_swift = Iif(!Empty(laArray(1,3)),laArray(1,3),Null) poFirma.b_adresa = Iif(!Empty(laArray(1,4)),laArray(1,4),Null) poFirma.banca2 = Iif(!Empty(laArray(2,1)),laArray(2,1),Null) poFirma.cont_banca2 = Iif(!Empty(laArray(2,2)),laArray(2,2),Null) poFirma.b_swift2 = Iif(!Empty(laArray(2,3)),laArray(2,3),Null) poFirma.b_adresa2 = Iif(!Empty(laArray(2,4)),laArray(2,4),Null) poFirma.banca3 = Iif(!Empty(laArray(3,1)),laArray(3,1),Null) poFirma.cont_banca3 = Iif(!Empty(laArray(3,2)),laArray(3,2),Null) poFirma.b_swift3 = Iif(!Empty(laArray(3,3)),laArray(3,3),Null) poFirma.b_adresa3 = Iif(!Empty(laArray(3,4)),laArray(3,4),Null) Endif Use In crsbanci Endproc && alege_banci_facturare ********************************************************************************************************* Procedure alege_optiuni_listare_facturare Local loFrmOptiuniList,lcCursorSerii,lnVizibile lnVizibile = 5 If Used('crsfactura') lcCursorSerii = [crsverserartfact] Select Recno() From crsfactura Where !Empty(Nvl(serie,'')) OR !EMPTY(NVL(lot, '')) Into Cursor (lcCursorSerii) If Used(lcCursorSerii) If Reccount(lcCursorSerii)=0 poDate.listare_serii = 0 lnVizibile = lnVizibile - 1 Endif Use In (lcCursorSerii) Endif Endif If !Used('crsfacturaset') poDate.listare_componenta_set = 0 poDate.listare_recapitulatie = 0 lnVizibile = lnVizibile - 2 Else If poDate.eProforma = 1 poDate.listare_recapitulatie = 0 lnVizibile = lnVizibile - 1 Endif Endif *!* modificare ROAFACTURARE v 2.0.67 *!* If !(Nvl(gnListaLivrare,0) = 1 And poDate.eProforma = 0 And !Inlist(pnTipFacturare,1,2) And !InList(poDate.tip,4,7)) If !(Nvl(gnListaLivrare,0) = 1 And poDate.eProforma = 0 And !Inlist(poDate.tip,4,7)) *!* modificare ROAFACTURARE v 2.0.67 ^ poDate.listare_lista_livrare = 0 poDate.listare_componenta_set_ll = 0 lnVizibile = lnVizibile - 2 Else *!* modificare ROAFACTURARE v 2.0.61 : daca nu exista articole gestionabile,nu se mai listeaza If Used('crsfactura') lcCursorGest = [crsvergestartfact] Select Recno() From crsfactura Where gestionabil = 1 Into Cursor (lcCursorGest) If Used(lcCursorGest) If Reccount(lcCursorGest)=0 poDate.listare_lista_livrare = 0 lnVizibile = lnVizibile - 1 Endif Use In (lcCursorGest) Endif Endif *!* If !Used('crsfacturaset') If !Used('crsfacturaset') Or poDate.listare_lista_livrare = 0 *!* modificare ROAFACTURARE v 2.0.61 ^ poDate.listare_componenta_set_ll = 0 lnVizibile = lnVizibile - 1 Endif Endif If lnVizibile <> 0 loFrmOptiuniList = Createobject('frm_alege_optlistfact') loFrmOptiuniList.Show(1) Endif Release loFrmOptiuniList,lcCursorSerii,lnVizibile Endproc && alege_optiuni_listare_facturare ********************************************************************************************************* Procedure completeaza_explicatie_tva Lparameters tcCursor Local lnNrCote,lnNrCote0,lcListaId,lcListaIdEx,lcSql,lnSucces Use In (SELECT('crsproctvav')) IF TYPE(tcCursor + '.id_jtva_coloana_ex') = 'N' Select Distinct id_jtva_coloana,id_jtva_coloana_ex, proc_tva From (tcCursor) Into Cursor crsproctvav else Select Distinct id_jtva_coloana, 0 as id_jtva_coloana_ex, proc_tva From (tcCursor) Into Cursor crsproctvav ENDIF If Reccount('crsproctvav')>0 lnNrCote = Reccount('crsproctvav') lnNrCote0 = 0 lcListaId = [] lcListaIdEx = [-9999] Select crsproctvav Scan For proc_tva = 1 And Nvl(id_jtva_coloana,-1)<>-1 lcListaId = lcListaId + [,] + Alltrim(Str(id_jtva_coloana)) IF !EMPTY(NVL(id_jtva_coloana_ex,0)) lcListaIdEx = lcListaIdEx + [,] + Alltrim(Str(id_jtva_coloana_ex)) ENDIF lnNrCote0 = lnNrCote0 + 1 ENDSCAN lcListaId = IIF(!EMPTY(m.lcListaId), Substr(lcListaId,2), '') *lcListaIdEx = IIF(!EMPTY(m.lcListaIdEx), Substr(lcListaIdEx,2), '') If lnNrCote0 > 0 *!* modificare ROAFACTURARE 2.0.80 : am adaugat NVL(explicatie,denumire) in loc de denumire TEXT TO lcSql TEXTMERGE noshow SELECT j.id_jtva_coloana, jex.id_jtva_coloana_ex, NVL(jex.denumire, j.denumire) as denumire from (select id_jtva_coloana,NVL(explicatie,denumire) as denumire from jtva_coloane where id_jtva_coloana in (<>)) j left join (select id_jtva_coloana, id as id_jtva_coloana_ex, explicatie as denumire from jtva_coloane_explicatii where id in (<>)) jex on jex.id_jtva_coloana = j.id_jtva_coloana ENDTEXT lnSucces = goExecutor.oExecute(lcSql,[crsexpl]) If lnSucces < 0 AMESSAGEBOX(goExecutor.cEroare,16,"Eroare") Else If Reccount('crsexpl')=1 And lnNrCote = lnNrCote0 Select crsexpl poDate.explicatie_tva = Alltrim(denumire) ENDIF Select crsexpl Scan lnIdJtva = NVL(id_jtva_coloana,0) lnIdJtvaEx = NVL(id_jtva_coloana_ex,0) lcDenumire = Alltrim(denumire) Select (tcCursor) IF TYPE(tcCursor + '.id_jtva_coloana_ex') = 'N' AND !EMPTY(m.lnIdJtvaEx) Replace expltva With m.lcDenumire For NVL(id_jtva_coloana_ex,0) = m.lnIdJtvaEx ELSE Replace expltva With m.lcDenumire For NVL(id_jtva_coloana,0) = m.lnIdJtva ENDIF Select crsexpl Endscan Use In crsexpl Endif Endif Endif If Used('crsproctvav') Use In crsproctvav Endif Endproc && completeaza_explicatie_tva ********************************************************************************************************* Procedure completeaza_explicatie_contract Lparameters tcCursor Local lnPozI,lnPozF,lnIdCtr,lnIdCtrPrec,lnDimArray,lnIndex,lnIndexMax,lcNrContract,lnNrInreg lnDimArray = 20 Dimension laContracte[lnDimArray,3] && 1 - id_ctr; 2 - numar si data contract; 3 - pozitiile din factura coresp.ctr. lnIndexMax = 1 lnIdCtrPrec = Null lcNrContract = [] lnNrInreg = 0 lnIndex = 1 Select (tcCursor) Scan For cantitate <> 0 lnIdCtr = id_ctr lnNrInreg = lnNrInreg+1 Do Case Case Isnull(lnIdCtrPrec) And Isnull(lnIdCtr) *!* nimic Case Nvl(lnIdCtr,-1) = Nvl(lnIdCtrPrec,-1) lnPozF = lnNrInreg && Recno() Otherwise If !Isnull(lnIdCtrPrec) lnIndex = Ascan(laContracte,lnIdCtrPrec,1,lnIndexMax*3,1,8) If lnIndex = 0 lnIndex = lnIndexMax lnIndexMax = lnIndexMax + 1 laContracte[lnIndex,1] = lnIdCtrPrec laContracte[lnIndex,2] = lcNrContract laContracte[lnIndex,3] = [] Endif If lnPozI = lnPozF laContracte[lnIndex,3] = laContracte[lnIndex,3] + Alltrim(Str(lnPozI)) + [,] Else laContracte[lnIndex,3] = laContracte[lnIndex,3] + Alltrim(Str(lnPozI)) + [-] + Alltrim(Str(lnPozF)) + [,] Endif Endif If !Isnull(lnIdCtr) lnPozI = lnNrInreg && Recno() lnPozF = lnNrInreg && Recno() Else lnPozI = 0 lnPozF = 0 Endif Endcase lnIdCtrPrec = lnIdCtr lcNrContract = Alltrim(numar_contract) Endscan If !Isnull(lnIdCtrPrec) lnIndex = Ascan(laContracte,lnIdCtrPrec,1,lnIndexMax*3,1,8) If lnIndex = 0 lnIndex = lnIndexMax laContracte[lnIndex,1] = lnIdCtrPrec laContracte[lnIndex,2] = lcNrContract laContracte[lnIndex,3] = [] Endif If lnPozI = lnPozF laContracte[lnIndex,3] = laContracte[lnIndex,3] + Alltrim(Str(lnPozI)) + [,] Else laContracte[lnIndex,3] = laContracte[lnIndex,3] + Alltrim(Str(lnPozI)) + [-] + Alltrim(Str(lnPozF)) + [,] Endif Endif *!* modificare ROAFACTURARE v 2.0.77 && 1-3 : conditia !Empty(Nvl(laContracte[lnIndex,2],[])) a fost adaugata pentru ca daca && pe contract nu e stipulat sa apara textul aditional, atunci pe factura nu aparea nr. contractului, ci doar && "Conform contractului nr. " pcExplicatieContract = [] If lnIndexMax = 1 If !Empty(Nvl(laContracte[lnIndex,2],[])) && 1 pcExplicatieContract = [Conform contractului nr. ] + laContracte[lnIndex,2] Endif && 2 Else For lnIndex = 1 To lnIndexMax If !Empty(laContracte[lnIndex,1]) And !Empty(Nvl(laContracte[lnIndex,2],[])) && 3 pcExplicatieContract = pcExplicatieContract + [;] + Substr(laContracte[lnIndex,3],1,Len(laContracte[lnIndex,3])-1) + [ cf. contractului nr. ] + laContracte[lnIndex,2] Endif Endfor pcExplicatieContract = Substr(pcExplicatieContract,2) Endif 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 ***************************************** ********************************************************************************************************* ********************************************************************************************************* ****************************************** INCEPUT: cus_pret_nomenclator *************************************** Define Class cus_pret_nomenclator As Custom nIdArticol = 0 nIdPolitica = 0 lIncarcat = .F. lPreturiCuTva = .F. nPretFtva = 0 nPretCtva = 0 nProcTvav = 1 nIdVenchelt = .NULL. nIdNota = .NULL. cScd = [] cScc = [] cContDedus = [] cEroare = [] * asigura politica de stoc (o creeaza daca lipseste); intoarce id politica, 0 la esec Procedure asigura_politica Local lcSql, lnSucces Private pnIdUtil, pnIdPolitica pnIdUtil = gnIdUtil pnIdPolitica = 0 lcSql = [begin pack_preturi.asigura_politica_stoc(?pnIdUtil,?@pnIdPolitica); end;] lnSucces = goExecutor.oExecute(lcSql) If lnSucces < 0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") This.nIdPolitica = 0 Else This.nIdPolitica = Nvl(pnIdPolitica,0) Endif Release pnIdUtil, pnIdPolitica Return This.nIdPolitica Endproc && asigura_politica * citeste randul politicii de stoc pentru articol, contul dedus si conturile notei asociate Procedure incarca Lparameters tnIdArticol Local lcSql, lnSucces This.nIdArticol = tnIdArticol This.lIncarcat = .F. This.nPretFtva = 0 This.nPretCtva = 0 This.nProcTvav = (GetProcTvaStandard()+100)/100 This.lPreturiCuTva = .F. This.nIdVenchelt = .NULL. This.nIdNota = .NULL. This.cScd = [] This.cScc = [] This.cContDedus = [] If This.asigura_politica() <= 0 Return .F. Endif lcSql = [select nvl(preturi_cu_tva,0) as preturi_cu_tva from crm_politici_preturi where id_pol = ] + Alltrim(Str(This.nIdPolitica)) If Used('crspreturi') Use In crspreturi Endif lnSucces = goExecutor.oExecute(lcSql,[crspreturi]) If lnSucces >= 0 And Reccount('crspreturi') > 0 This.lPreturiCuTva = (crspreturi.preturi_cu_tva = 1) Endif If Used('crspreturi') Use In crspreturi Endif lcSql = [select pretftva, pretctva, proc_tvav, id_venchelt, id_nota from crm_politici_pret_art ] + ; [where id_pol = ] + Alltrim(Str(This.nIdPolitica)) + [ and id_articol = ] + Alltrim(Str(tnIdArticol)) If Used('crspolart') Use In crspolart Endif lnSucces = goExecutor.oExecute(lcSql,[crspolart]) If lnSucces < 0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") Return .F. Endif If Reccount('crspolart') > 0 This.nPretFtva = Nvl(crspolart.pretftva,0) This.nPretCtva = Nvl(crspolart.pretctva,0) This.nProcTvav = crspolart.proc_tvav If !Isnull(crspolart.id_venchelt) This.nIdVenchelt = crspolart.id_venchelt Endif If !Isnull(crspolart.id_nota) This.nIdNota = crspolart.id_nota Endif Endif If Used('crspolart') Use In crspolart Endif If !Isnull(This.nIdNota) lcSql = [select n.scd, n.scc from crm_note_vanzari v, note_contabile n ] + ; [where v.id_nota = ] + Alltrim(Str(This.nIdNota)) + [ and n.id_set = v.id_set] If Used('crsnotapol') Use In crsnotapol Endif lnSucces = goExecutor.oExecute(lcSql,[crsnotapol]) If lnSucces >= 0 And Reccount('crsnotapol') > 0 This.cScd = Alltrim(Nvl(crsnotapol.scd,[])) This.cScc = Alltrim(Nvl(crsnotapol.scc,[])) Endif If Used('crsnotapol') Use In crsnotapol Endif Endif lcSql = [select pack_facturare.cont_venit_articol_stoc(] + Alltrim(Str(tnIdArticol)) + [) as cont_dedus from dual] If Used('crscontded') Use In crscontded Endif lnSucces = goExecutor.oExecute(lcSql,[crscontded]) If lnSucces >= 0 And Reccount('crscontded') > 0 This.cContDedus = Alltrim(Nvl(crscontded.cont_dedus,[])) Endif If Used('crscontded') Use In crscontded Endif This.lIncarcat = .T. Return .T. Endproc && incarca * valideaza conturile si pretul curente; mesaj + .F. la refuz Procedure valideaza This.cEroare = [] If (!Empty(This.cScd) And Empty(This.cScc)) Or (Empty(This.cScd) And !Empty(This.cScc)) This.cEroare = [Trebuie completate ambele conturi (debit si credit) sau niciunul.] Else If This.nPretFtva < 0 Or This.nPretCtva < 0 This.cEroare = [Pretul nu poate fi negativ.] Endif Endif If !Empty(This.cEroare) AMESSAGEBOX(This.cEroare,0+48,"Atentie") Return .F. Endif Return .T. Endproc && valideaza * scrie pretul si, daca sunt conturi, nota de vanzare aferenta; fara tranzactie proprie Procedure salveaza Lparameters tnIdArticol Local lcSql, lnSucces Private pnIdArticol, pnPretFtva, pnPretCtva, pnProcTvav, pnIdVenchelt, pnIdNota, pnScrieNota If !This.valideaza() Return .F. Endif If !Empty(This.cScd) And !Empty(This.cScc) Private pcScd, pcScc, pnIdUtil pcScd = This.cScd pcScc = This.cScc pnIdUtil = gnIdUtil pnIdNota = 0 lcSql = [begin pack_preturi.gaseste_sau_creeaza_nota_vanzare(?pcScd,?pcScc,?pnIdUtil,?@pnIdNota); end;] lnSucces = goExecutor.oExecute(lcSql) Release pcScd, pcScc, pnIdUtil If lnSucces < 0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") Release pnIdArticol, pnPretFtva, pnPretCtva, pnProcTvav, pnIdVenchelt, pnIdNota, pnScrieNota Return .F. Endif This.nIdNota = Nvl(pnIdNota,0) Else This.nIdNota = .NULL. Endif pnIdArticol = tnIdArticol pnPretFtva = This.nPretFtva pnPretCtva = This.nPretCtva pnProcTvav = This.nProcTvav pnIdVenchelt = This.nIdVenchelt pnIdNota = This.nIdNota pnScrieNota = Iif(This.lIncarcat, 1, 0) lcSql = [begin pack_preturi.salveaza_pret_nomenclator(?pnIdArticol,?pnPretFtva,?pnPretCtva,?pnProcTvav,?pnIdVenchelt,?pnIdNota,?pnScrieNota); end;] lnSucces = goExecutor.oExecute(lcSql) If lnSucces < 0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") Endif Release pnIdArticol, pnPretFtva, pnPretCtva, pnProcTvav, pnIdVenchelt, pnIdNota, pnScrieNota Return (lnSucces >= 0) Endproc && salveaza * recalculeaza pretul opus (cu/fara TVA) dupa proc_tvav curent Procedure recalculeaza_pret Lparameters tnPret, tlSpreCuTva Local lnProcTvav lnProcTvav = Iif(Isnull(This.nProcTvav), (GetProcTvaStandard()+100)/100, This.nProcTvav) If tlSpreCuTva Return Round(tnPret * lnProcTvav, gnPc) Endif Return Round(tnPret / lnProcTvav, gnPc) Endproc && recalculeaza_pret * citeste scd/scc din nota curenta a politicii date (goala daca politica nu are nota) Procedure incarca_nota_politica Lparameters tnIdPol Local lcSql, lnSucces This.cScd = [] This.cScc = [] lcSql = [select n.scd, n.scc from crm_politici_preturi p, crm_note_vanzari v, note_contabile n ] + ; [where p.id_pol = ] + Alltrim(Str(tnIdPol)) + [ and v.id_nota = p.id_nota and n.id_set = v.id_set] If Used('crsnotapolstoc') Use In crsnotapolstoc Endif lnSucces = goExecutor.oExecute(lcSql,[crsnotapolstoc]) If lnSucces >= 0 And Reccount('crsnotapolstoc') > 0 This.cScd = Alltrim(Nvl(crsnotapolstoc.scd,[])) This.cScc = Alltrim(Nvl(crsnotapolstoc.scc,[])) Endif If Used('crsnotapolstoc') Use In crsnotapolstoc Endif Return !Empty(This.cScd) And !Empty(This.cScc) Endproc && incarca_nota_politica * valideaza (ambele conturi sau niciunul) si scrie nota implicita a politicii date Procedure salveaza_nota_politica Lparameters tnIdPol, tcScd, tcScc Local lcSql, lnSucces If (!Empty(tcScd) And Empty(tcScc)) Or (Empty(tcScd) And !Empty(tcScc)) This.cEroare = [Trebuie completate ambele conturi (debit si credit) sau niciunul.] AMESSAGEBOX(This.cEroare,0+48,"Atentie") Return .F. Endif If Empty(tcScd) And Empty(tcScc) Return .T. Endif Private pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol pcScd = tcScd pcScc = tcScc pnIdUtil = gnIdUtil pnIdNota = 0 lcSql = [begin pack_preturi.gaseste_sau_creeaza_nota_vanzare(?pcScd,?pcScc,?pnIdUtil,?@pnIdNota); end;] lnSucces = goExecutor.oExecute(lcSql) If lnSucces < 0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") Release pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol Return .F. Endif pnIdPol = tnIdPol lcSql = [begin pack_preturi.seteaza_nota_politica_stoc(?pnIdPol,?pnIdNota); end;] lnSucces = goExecutor.oExecute(lcSql) If lnSucces < 0 AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") Endif Release pcScd, pcScc, pnIdUtil, pnIdNota, pnIdPol Return (lnSucces >= 0) Endproc && salveaza_nota_politica Enddefine ****************************************** SFARSIT: cus_pret_nomenclator **************************************** *********************************************************************************************************