*!* 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? *************************************************************************************************************** **** Clase: **** oDateFactura **** init **** initializeaza_politica_pret **** initializeaza_setari_document **** completeaza_setari_document **** genereaza_numar_act **** Reset **** scrieAtasamente **** oDateGestiune **** Reset **** 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 = [] 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 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) Procedure Init Lparameters tnIdSet, tnTip && 0,0 - la listare && id_set,tip Local ldData 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 If INLIST(m.tnTip, 2, 6, 52) And Type('goContract') <> 'U' && FACTURARE DIN ROACONTRACTE .id_client = goContract.id_part .nume_client = goContract.denumire .listaid = goContract.id_ctr .descriere = goContract.contract .id_sectie = goContract.id_sectie .sectie = goContract.sectie .id_responsabil = goContract.id_responsabil .responsabil = goContract.responsabil .id_valuta = goContract.id_valuta .nume_valuta = goContract.nume_val lcSql = [ select id_ctr, contract, numar, data, denumire, scadenta_incasare, opt_facturare, text_standard, afisare_scadenta ]+; [ FROM fact_vcontracte ]+; [ where id_ctr = ] + Alltrim(Str(goContract.id_ctr)) 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 If tnTip = 3 And Type('goComanda') = 'O' && FACTURARE DIN ROACOMENZI .id_client = goComanda.id_part .nume_client = ALLTRIM(goComanda.nume) .listaid = goComanda.id_comanda .descriere = goComanda.nr_comanda .id_sectie = goComanda.id_sectie *!* .sectie = goComanda.sectie *!* .id_responsabil = goComanda.id_responsabil *!* .responsabil = goComanda.responsabil lcSql = [ select sectie from nom_sectii where id_sectie = ] + ALLTRIM(STR(goComanda.id_sectie)) 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 .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 .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 .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) 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)), 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,vvalftva,vvaltva,vdiscountftva,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 = 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 = 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 *********************************************************************************************************