************************************************************************************************************** ** Clase: ** oGeneratorNumere ** Proceduri: ** viz_config_serii_complet ** creeaza_cursor_serii ** Functii: ** caut_serii_fact ** caut_tipentitate_permis ************************************************************************************************************** *********************************** Obiect oNumereDocumente ********************************* Define Class oGeneratorNumere As Custom cAliasVechi = Null lInitializare = .F. && modificare 14.07.2010 nTipuriDocument = 30 Declare paPlaje (30,8) ** 1 - numar ** 2 - nume cursor ** 3 - cu_serie ** 4 - cu_plaja ** 5 - id_serie ** 6 - cu buffer .T. daca se genereaza mai multe numere in cadrul aceleiasi operatii ** 7 - tip buffer 1 - in caz de renuntare, se dezaloca toate numerele din buffer ( implicit ) ** 2 - in caz de renuntare, se dezaloca toate numerele din buffer, cu exceptia primului, care este repus in array ** 8 - nume cursor buffer ****************************** Procedure Init *!* modificare 14.07.2010 *!* This.ResetAll() This.lInitializare = .T. This.ResetAll() This.lInitializare = .F. *!* modificare 14.07.2010 ^ Endproc ****************************** Procedure Reset Lparameters tnIdTipDoc With This .paPlaje(tnIdTipDoc,1) = 0 .paPlaje(tnIdTipDoc,2) = Null .paPlaje(tnIdTipDoc,3) = .F. .paPlaje(tnIdTipDoc,4) = .F. .paPlaje(tnIdTipDoc,5) = Null .dezactiveazaBuffer(tnIdTipDoc) Endwith Endproc ****************************** Procedure ResetAll With This For i = 1 To This.nTipuriDocument .Reset(i) Endfor Endwith Endproc ****************************** Procedure ResetNumar Lparameters tnIdTipDoc With This .paPlaje(tnIdTipDoc,1) = 0 .paPlaje(tnIdTipDoc,5) = Null Endwith Endproc ****************************** Procedure ResetNumere With This For i = 1 To This.nTipuriDocument .ResetNumar(i) Endfor Endwith Endproc ****************************** Procedure activeazaBuffer Lparameters tnIdTipDoc,tnTipBuffer Local lnTipBuffer lcSql = [begin pack_serii_numere.seteazaNumereMultiple(1); end;] If goExecutor.oExecuta(lcSql) If Empty(tnTipBuffer) Or !Between(tnTipBuffer,1,2) lnTipBuffer = 1 Else lnTipBuffer = tnTipBuffer Endif lcCursor = [crsbufsertemp]+Alltrim(Str(tnIdTipDoc)) Create Cursor (lcCursor) (numar N(14)) *!* If !Empty(This.paPlaje(tnIdTipDoc,1)) *!* Select (lcCursor) *!* Append Blank *!* Replace numar With This.paPlaje(tnIdTipDoc,1) *!* This.ResetNumar(tnIdTipDoc) *!* Endif This.paPlaje(tnIdTipDoc,6) = .T. This.paPlaje(tnIdTipDoc,7) = lnTipBuffer This.paPlaje(tnIdTipDoc,8) = lcCursor Endif Endproc ****************************** Procedure dezactiveazaBuffer Lparameters tnIdTipDoc lcSql = [begin pack_serii_numere.seteazaNumereMultiple(0); end;] *!* modificare 14.07.2010 : imi apeleaza de 20 de ori procedura la fiecare initializare a obiectului *!* lnSucces = goExecutor.oExecute(lcSql) If (This.lInitializare And tnIdTipDoc = 1) Or !This.lInitializare llSucces = goExecutor.oExecuta(lcSql) Else llSucces = .T. Endif *!* modificare 14.07.2010 ^ If llSucces lcCursor = This.paPlaje(tnIdTipDoc,8) If !Empty(Nvl(lcCursor,[])) Use In (lcCursor) Endif This.paPlaje(tnIdTipDoc,6) = .F. This.paPlaje(tnIdTipDoc,7) = 1 This.paPlaje(tnIdTipDoc,8) = Null Endif Endproc ****************************** Procedure salveazaAliasVechi This.cAliasVechi = Alias() Endproc ****************************** Procedure selecteazaAliasVechi If !Empty(Nvl(This.cAliasVechi,[])) Select (This.cAliasVechi) Endif Endproc ****************************** Function creeaza_cursor_serii Lparameters tnIdTipDoc Local lcSql,lcCursor,llSucces Private pnIdTipDoc,pnRezultat pnIdTipDoc = tnIdTipDoc pnRezultat = 0 This.salveazaAliasVechi() lcCursor = [crsseriitemp]+Alltrim(Str(tnIdTipDoc)) If Used(lcCursor) Use In (lcCursor) Endif lcSql = [{call ] + gcS + [.pack_serii_numere.verifica_cursor_serii(?pnIdTipDoc,?gnIdUtil,?gnIdSucursala,?@pnRezultat)}] llSucces = goExecutor.oExecuta(lcSql,lcCursor) With This *!* modificare 04.09.2012 If !llSucces OR pnRezultat = -1 *!* If !llSucces *!* modificare 04.09.2012 ^ *!* modificare ROAGEST v 2.0.138 lcSql = [{call ] + gcs + [.pack_serii_numere.verifica_tipdoc(?pnIdTipDoc,?@pnRezultat)}] IF !goExecutor.oExecuta(lcSql,lcCursor) *!* modificare ROAGEST v 2.0.138 ^ pnRezultat = 1 .paPlaje(tnIdTipDoc,2) = Null .paPlaje(tnIdTipDoc,3) = .F. .paPlaje(tnIdTipDoc,4) = .F. *!* modificare ROAGEST v 2.0.138 Else .paPlaje(tnIdTipDoc,2) = Null .paPlaje(tnIdTipDoc,3) = Iif(Mod(pnRezultat,2)=1,.T.,.F.) .paPlaje(tnIdTipDoc,4) = .F. Endif *!* modificare ROAGEST v 2.0.138 ^ Else If Reccount(lcCursor) > 0 .paPlaje(tnIdTipDoc,2) = lcCursor .paPlaje(tnIdTipDoc,3) = Iif(Mod(pnRezultat,2)=1,.T.,.F.) .paPlaje(tnIdTipDoc,4) = Iif(pnRezultat>=2,.T.,.F.) Else pnRezultat = 1 .paPlaje(tnIdTipDoc,2) = Null .paPlaje(tnIdTipDoc,3) = .F. .paPlaje(tnIdTipDoc,4) = .F. Endif Endif Endwith This.selecteazaAliasVechi() Release pnIdTipDoc Return pnRezultat Endfunc && creeaza_cursor_serii ****************************** Function aloca_numar Lparameters tnIdTipDoc,tnIdGestiune Private pnIdTipDoc,pnIdGestiune,pnNumar,pnIdSerie Do Case Case Isnull(This.paPlaje(tnIdTipDoc,2)) pnNumar = 0 *!* modificare ROAGEST v 2.0.105 *!* Case This.paPlaje(tnIdTipDoc,1) <> 0 *!* modificare ROAGEST v 2.0.105 ^ Case This.paPlaje(tnIdTipDoc,1) <> 0 And !This.paPlaje(tnIdTipDoc,6) pnNumar = This.paPlaje(tnIdTipDoc,1) Otherwise pnNumar = -1 pnIdTipDoc = tnIdTipDoc pnIdGestiune = Iif(Isnull(tnIdGestiune) Or Pcount()=1,Null,tnIdGestiune) This.salveazaAliasVechi() lcCursor = This.paPlaje(tnIdTipDoc,2) If Used(lcCursor) Select (lcCursor) pnIdSerie = id_serie Else pnIdSerie = Null Endif lcSql=[begin ] + gcS + [.pack_serii_numere.aloca_numar(?pnIdTipDoc,?pnIdSerie,?pnIdGestiune,?gnIdUtil,?gnIdSucursala,?@pnNumar); end;] IF !goExecutor.oExecuta(lcSql) pnNumar = 0 Endif Release pnIdTipDoc,pnIdGestiune,pnIdEntitate With This *!* modificare ROAGEST v 2.0.105 : daca e activat buffer-ul, atunci pun fiecare numar generat in cursor,nu in array ( in afara de primul, care ramane in array ) If This.paPlaje(tnIdTipDoc,6) lcCursor = This.paPlaje(tnIdTipDoc,8) Select (lcCursor) Append Blank Replace numar With pnNumar Else *!* modificare ROAGEST v 2.0.105^ .paPlaje(tnIdTipDoc,1) = pnNumar *!* modificare ROAGEST v 2.0.105 Endif *!* modificare ROAGEST v 2.0.105 ^ .paPlaje(tnIdTipDoc,5) = pnIdSerie Endwith This.selecteazaAliasVechi() Endcase Return pnNumar Endfunc && aloca_numar ****************************** Procedure verifica_numar Lparameters tnIdTipDoc,tnNumar With This If tnNumar <> .paPlaje(tnIdTipDoc,1) And .paPlaje(tnIdTipDoc,1) <> 0 .dezaloca_numar(tnIdTipDoc) Endif Endwith Endproc ****************************** Function verifica_serie Lparameters tnIdTipDoc Local lcCursor,llReturn llReturn = .F. With This If !Isnull(This.paPlaje(tnIdTipDoc,2)) .salveazaAliasVechi() lcCursor = Alltrim(.paPlaje(tnIdTipDoc,2)) If Used(lcCursor) Select (lcCursor) If Nvl(.paPlaje(tnIdTipDoc,5),-99)<>Nvl(id_serie,-99) .dezaloca_numar(tnIdTipDoc) llReturn = .T. Endif Endif .selecteazaAliasVechi() Else llReturn = .T. Endif Endwith Return llReturn Endfunc ****************************** Procedure dezaloca_numar Lparameters tnIdTipDoc Private pnIdTipDoc pnIdTipDoc = tnIdTipDoc With This If !Isnull(This.paPlaje(tnIdTipDoc,2)) .salveazaAliasVechi() If .paPlaje(tnIdTipDoc,1) <> 0 * Cateodata dadea eroare la executia in Oracle wrong type, desi pnIdTipDoc era numeric *!* lcSql=[begin ] + gcS + [.pack_serii_numere.dezaloca_numar(?pnIdTipDoc); end;] lcSql=[begin pack_serii_numere.dezaloca_numar(] + ALLTRIM(TRANSFORM(m.pnIdTipDoc)) + [); end;] If goExecutor.oExecuta(lcSql) .paPlaje(tnIdTipDoc,1) = 0 Endif Endif .selecteazaAliasVechi() Endif Endwith Release pnIdTipDoc Endproc && dezaloca_numar ****************************** Procedure dezaloca_buffer Lparameters tnIdTipDoc,tlDezactiveazaBuffer Private pnIdTipDoc pnIdTipDoc = tnIdTipDoc With This pnTip = .paPlaje(tnIdTipDoc,7) .salveazaAliasVechi() lcSql=[begin ] + gcS + [.pack_serii_numere.dezaloca_numere(?pnIdTipDoc,?pnTip); end;] If goExecutor.oExecuta(lcSql) If pnTip = 1 .paPlaje(tnIdTipDoc,1) = 0 Endif If tlDezactiveazaBuffer .dezactiveazaBuffer(tnIdTipDoc) Endif Endif .selecteazaAliasVechi() Endwith Release pnIdTipDoc,pnTip Endproc && dezaloca_numere ******************************* Procedure dezaloca_numere With This For i = 1 To This.nTipuriDocument If .paPlaje(i,1)<>0 .dezaloca_numar(i) Endif Endfor Endwith Endproc && dezaloca_numere ****************************** Function getNumeCursor Lparameters tnIdTipDoc Return This.paPlaje(tnIdTipDoc,2) Endfunc && getNumeCursor ****************************** Function getSerieCursor Lparameters tnIdTipDoc Local lcSerie With This If Reccount(.paPlaje(tnIdTipDoc,2))>0 .salveazaAliasVechi() Select (.paPlaje(tnIdTipDoc,2)) lcSerie = Alltrim(serie) .selecteazaAliasVechi() Else lcSerie = [] Endif Endwith Return lcSerie Endfunc && getNumeCursor ****************************** Function getLungimeSerie Lparameters tnIdTipDoc Local lnLungime With This If Reccount(.paPlaje(tnIdTipDoc,2))>0 .salveazaAliasVechi() Select (.paPlaje(tnIdTipDoc,2)) lnLungime = lungime .selecteazaAliasVechi() Else lnLungime = Null Endif Endwith Return lnLungime Endfunc && getLungimeSerie ****************************** Function getIdSerie Lparameters tnIdTipDoc Return This.paPlaje(tnIdTipDoc,5) Endfunc && getIdSerie ****************************** Enddefine ************************************ INCEPUT : viz_config_serii_complet ********************************** Procedure viz_config_serii_complet Lparameters tnIdTipDoc Private pcSchema,pcSelect,pcFiltru,pcOrder,poDocumente,poPlaje,poSerii Local llAfiseaza Store [] To pcSchema,pcSelect,pcFiltru,pcOrder,poDocumente,poPlaje,poSerii Store .F. To llAfiseaza pcSchema = [] pcSelect = [select id_tipdoc, id_tipentitate, tipdoc, descriere, maxlen, cu_serie, cu_plaje, tipentitate, plajepeentitate, an, luna, an2caractere from vserii_tipdoc where] If Empty(tnIdTipDoc) pcFiltru = [2=2] Else pcFiltru = [id_tipdoc=] + Alltrim(Str(tnIdTipDoc)) Endif pcOrder = [tipdoc] llAfiseaza = .F. gencursor('poDocumente','crsTipdoc',pcSelect,pcFiltru,pcSchema,pcOrder,llAfiseaza) poDocumente.ca_baza1.afisare() pcSchema = [id_serie N(10),serie C(10),an N(1),luna N(1),lungime N(10),inactiv N(1),resetare C(50),exemplu C(50), isautofactura N(1), isbeneficiari N(1), isterti N(1), isfurnizori N(1), prefix N(5), an2caractere N(1)] pcSelect = [select id_serie, serie, an, luna, lungime, inactiv, resetare, exemplu, isautofactura, isbeneficiari, isterti, isfurnizori, prefix, an2caractere from vserii where] pcFiltru = [2=2] pcOrder = [serie] llAfiseaza = .F. gencursor('poSerii','crsSerii',pcSelect,pcFiltru,pcSchema,pcOrder,llAfiseaza) poSerii.ca_baza1.afisare() pcSchema = [id_plaja N(10),id_tipdoc N(10),id_tipentitate N(10),id_entitate N(10),pl_inf N(18),pl_sup N(18),] + ; [inactiv N(1),id_serie N(10),datai d,datas d,tipentitate C(100),entitate C(100),serie C(10),urmval C(100),valabil N(1)] pcSelect = [select id_plaja, id_tipdoc, id_tipentitate, id_entitate, pl_inf, pl_sup, inactiv, id_serie,] + ; [datai, datas, tipentitate, entitate, serie, urmval, valabil from vplaje_numere where] pcFiltru = [1=2] pcOrder = [id_tipdoc] llAfiseaza = .F. lcFiltruOriginal = [NVL(id_sucursala,-99) = NVL(?gnIdSucursala,-99)] gencursor('poPlaje','crsPlaje',pcSelect,pcFiltru,pcSchema,pcOrder,llAfiseaza,[],.F.,lcFiltruOriginal) ofrmseriicomplet = Createobject('frm_plaje_numere') ofrmseriicomplet.Show(1) Use In (Select('crsTipdoc')) Use In (Select('crsSerii')) Use In (Select('crsPlaje')) Release ofrmseriicomplet, poDocumente, poSerii, poPlaje Endproc && viz_config_serii_complet ************************************ SFARSIT : viz_config_serii_complet ********************************** *********************************** INCEPUT : caut_tipentitate_permis ******************************** Function caut_tipentitate_permis Parameters tnTipDoc,tnPornire, tlDesktop Private pnTipDoc pnTipDoc = tnTipDoc Local lcCont,loCauta, lnPornire, llDesktop lnPornire = tnPornire && 1-incepe cu...6-toate llDesktop = tlDesktop Store "" To loCauta lcSelect = [select id_tipentitate, descriere from ] + gcS + [.vserii_tipentpermis] lcFiltru = [1=2] lcSchema = [] lcOrder = [descriere] lccoloane = [descriere] lcTitlu = [Alegeti tipul entitatii] lcTitluColoane = [Tip entitate] lcFiltruOriginal = [id_tipdoc = ?pnTipDoc] lcNumeProc = [] llToateIreg = .F. loCauta = cauta_alfa(lcSelect,lcFiltru,lcSchema,lcOrder,lccoloane,lcTitlu,lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal,,lnPornire,,,llDesktop) && 11.07.2007 Return loCauta Endfunc && caut_tipentitate_permis ********************************** SFARSIT : caut_tipentitate_permis ******************************** ************************************** INCEPUT : caut_serii_fact ************************************ Function caut_serii_fact Parameters tnPornire, tlDesktop Local lcCont,loCauta, lnPornire, llDesktop lnPornire = tnPornire && 1-incepe cu...6-toate llDesktop = tlDesktop Store "" To loCauta lcSelect = [select id_serie,serie,resetare,lungime,exemplu,an,luna from ] + gcS + [.vserii] lcFiltru = [1=2] lcSchema = [id_serie N(10),serie C(50),resetare C(50),lungime N(10),exemplu C(50),an N(1),luna N(1)] lcOrder = [serie,luna,an] lccoloane = [serie,resetare,lungime,exemplu] lcTitlu = [Alegeti seria] lcTitluColoane = [Serie,Resetare,Lungime,Exemplu] lcFiltruOriginal = [inactiv = 0] lcNumeProc = [] llToateIreg = .F. loCauta = cauta_alfa(lcSelect,lcFiltru,lcSchema,lcOrder,lccoloane,lcTitlu,lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal,,lnPornire,,,llDesktop) && 11.07.2007 Return loCauta Endfunc && caut_serii_fact ************************************** SFARSIT : caut_serii_fact ************************************