********************************************************************************
*                         Soft & Art Inform tica                               *
* Cliente.: SAG
* M¢dulo..: Estoque - Programa Principal                                       *
********************************************************************************
// #ifndef __XHARBOUR__
// REQUEST __HBEXTERN__HBSSL__
// #require "hbssl"
// #require "hbtip"
// #require "hbtest"

// #endif

PROCEDURE MAIN(P1)
#include "inkey.ch"

LOCAL   VMCONT,VAR,VMSTR,VLIBVDASERVICO,FLAGVERIFICA:=.F.,FLAGSEN:=.F.,VNOM_EXE,VSDATA:="",VLOJ_STRUCT:={},VCONT:=1,X
PRIVATE GETLIST:={}
PUBLIC  COLORGET,NORMAL0,NORMAL1,NORMAL2,DESTACADO,MENSAGEM,MENU,TITULO,DOS,CRADIO,CRADIO2,HOTKEY,HOTKEY2,COR_INATIVO,;
        FLAGCALC:=.T.,FLAGALTPIXEL:=.F.,FLAGCALL:=.T.,VGFONTE:=0,VGTERMO,VGSIST,VGDES_TER:=SPACE(7),;
        VGTERMINAL:="  ",VGNIVEL,VGUSU:=0,VMMENU:={},VGCURSOR:=2,VGSHOWTER:=.F.,VGMENSAGEM:=.F.,;
        VGTIMEDESC:=VGTIMEMSG:=VGTIMETERM:=0,VGIMP,VGMKEY:={},COR_ERRO,VGPATH:="",VGPATMP:="",VGPACFG:="",;
        VGPATHBAL:="",VGCEP:="",VGSISTEMA:="1",VGARQREL:="",VGIMPHDL:="",VERMELHO,VERDE,AZUL,AMARELO,GETBROW,;
        VGSHOWFILA:=.F.,VGFLAGIMP:=.F.,VGIMPARQ:="",VGIMPLIN:=0,VGFILA:="",VGIMPTIME:=0,VGIMPCHR:=0,;
        VGMODO_IMP:="",VGCONT_MSG:=SECONDS(),VGCONT_IMP:=SECONDS(),VGTIMEIMP:=5,VGCONT_TER:=SECONDS(),;
        VGCOD_TERD:="",VGIMP_ESP:=0,VGIMP_BUF:=768,VG_MOD_PRN:=.F.,VGDESCTELA:=.F.,VGPORTAPRN:="",;
        VGLINUX:=.T.,VGFLAGLOJA:=.T.,VGTELA:="",VGSA_MAIL:="",VGALIASEXE:="sag",VGERASA_MAIL,VGDATA:=DATE(),;
        VGARQ:="",VGHABILITA:="",VGNOM_USU:="",VGNOMLOJ:="",VGATUALIZA:={},VGSOCKETECF,VGNOMECF:="",;
        VGPORTAECF:="",VGIPECF:="",VGCODECF:="",VGSERIECF:="",VGPOSIC_ISS:="",VGLOJA:="",VGDISPLAY:=.T.,;
        VBDTESTE:=.F.,VGRCOLOR1,VGRCOLOR2,VGUF,VGLOCAL,VGSALDO,VGRCOLOR3,VBRUSU,VGGANBIARRA:=.F.,VGCIDADE,;
        VGMENUNOVO:=.F.,VMATLOJSEL:={},VGSIMPLES:=.F.,VG_MEI:=.F.,VGSSH:="",VGPWD:="",VGMAT_EXE:={},VGLIXEIRA:="",;
        VVAR_PRO_1,VVAR_PRO_2,VGCOLORBROW,VGSESSAO,VGNOVO_USU:=.F.,VGSIGLA:="",VGFANTASIA:=SPACE(50),;
        VGMAT_PASTAS:={},VOFF_LINE:=.F.,VGNFSE:=.F.,VGNFE:=.F.,VGSA3:=.F.,VGURRL_MAGENTO:="",VGSOAP_MAGENTO:="",;
        VPASTA_RELPDF:="",VPASTA_MODREL:="",VPASTA_MODLINUX:="",VTESTE:=.F.,VLTIPOPESQPRO,VG_EMIS_BASE:=CTOD(""),;
        VGDATA_ENTREGA:=CTOD(""),VGMOT_ENTREGA:=0,VGM_FILTRO_PRODUTOS:={},VGRCOLOR32,VG_LABEL_P1,VG_LABEL_P2,VG_LABEL_P3

PUBLIC  OP_CAD:=1,OP_CEST:=1,OP_CFIN:=1,OP_CENT:=1,OP_MOV:=1,OP_FIN:=1,OP_REL:=1,OP_RELM:=1,OP_RELC:=1,OP_RELF:=1,;
        OP_UTIL:=1,OP_USEN:=1,OP_UCONF:=1,OP_ECF:=1,OP_UCONFP:=1,OP_FISCAL:=1,VOPC_MENUNFE:=1,VLOJAS_SITE:='',;
        VGERITON:=.F.,VGANDRIOLI:=.F.,VGRECORD:=.F.,VMAT_LJ_IDERIS:={},VGCATARINA:=.F.,VMAT_LJ_SALDOS:={}

#DEFINE HB_COMPAT_C53
***
*OVERRIDE METHOD new  IN CLASS tIPClient WITH MytIPClientNew
***
*hb_settermcp([pt850],[ptiso])
VGLOCAL := "CRYPT(PROIT->LOCALIZA,'PROIT')"
VGLINUX := UPPER(LEFT(OS(),3))=="LIN"
VGSALDO := "PROIT->SALDO_ESTO"
VGSIST  := "SoftArti Sistemas"
VTESTE  := (FILE("blitzkrieg"))
VOFF_LINE:=(FILE("offline"))
P1      := IF(P1==NIL,"",P1)
SETCANCEL(.F.)
SETCURSOR(0)
SET DATE TO BRITISH
SET DATE FORMAT TO "DD/MM/YYYY"
SET WRAP ON
SET DELETED ON
SET SCOREBOARD OFF
SET EPOCH TO 1950
SET CENTURY ON
SET MESSAGE TO 24 CENTER
SetBlink(.T.)
**ALTD(1)
VNOM_EXE   := EXENAME()   //Carrega os dados do executavel para controlar a versao
VGMAT_EXE  := DIRECTORY(VNOM_EXE)
TITULO     := "GR+/W ,B/W ,,,W/B"
MENU       := "B/W   ,W+/W,,,W/B"
MENU1      := "N/W   ,W+/W ,,,W/N ,W+/W ,BG/W"   //"N/W,W+/W, , ,W/N,GR+/B,GR+/W"
MENU2      := "W+/B  ,B/W ,,,W/B"
MENU3      := "B/W   ,W+/N*,,,W/B"         // B/W   ,W+/N*,,,W/B ,N/W
FUNDO      := "W+/BG+,B/W ,,,W/B"
FUNDO2     := "W/W+  ,B/W ,,,N/B"
MENSAGEM   := "W+/BG+,B/W ,,,W/B"        //W+/BG+
PISCA      := "W+/B* ,B/W ,,,W/B"
NORMAL0    := "B+/B  ,B+/W,,,W/B"
NORMAL1    := "W/B   ,B/W* ,,,W/B"
COLORGET   := "W+/B* ,B/W* ,,,W/B"
NORMAL2    := "GR+/B ,B/W ,,,W/B"
CRADIO     := "N+/B  ,W/B ,,,N+/B"
CRADIO2    := "N+/B  ,B/W ,,,N+/B"
DESTACADO  := "W+/B  ,B/W ,,,W/B"
HOTKEY     := "W+/W  ,W/B ,,,W/B"
BOTAO      := "BG/W  ,W+/W,,,W/B"
GETBROW    := "W+/W  ,W+/W,,,W+/W"
COR_ERRO   := "R+/B"
COR_INATIVO:= "BG/B  ,BG/B ,BG/B, BG/B ,BG/B, BG/B, BG/B"
VERMELHO   := "W+/R  ,R/W*,,,W/B"
VERDE      := "G/B   ,N+/W,,,G+/B"
AZUL       := COR_INATIVO
AMARELO    := NORMAL2
DOS        := SETCOLOR()
CBROWSE    := "W/B   ,W+/BG  ,GR+/B ,GR+/W ,N/BG"
VGRCOLOR1  := "B+/B  ,W+/B   ,GR+/B"                              //Usada no Aeval do HbRadioButton
VGRCOLOR2  := "B+/B  ,W/B    ,GR+/B ,GR+/B ,W/B  ,W/B  ,GR+/B"    //Usada no GET do RADIOGROUP

***VGRCOLOR2N := "N+/B  ,N+/B   ,N+/B  ,N+/B  ,N+/B ,N+/B ,N+/B"      //Usada no GET do RADIOGROUP DESABILITADO
VGRCOLOR2N := "B+/B  ,B+/B   ,B+/B  ,B+/B  ,B+/B ,B+/B ,B+/B"      //Usada no GET do RADIOGROUP DESABILITADO

VGRCOLOR22 := "B+/B  ,W/B    ,GR+/B ,GR+/B ,N+/B ,N+/B ,N+/B"     //Usada no GET do RADIOGROUP
VGRCOLOR3  := "W/B   ,B/W*   ,W/B   ,GR+/B"                       //Usada no Get do Checkbox
VGRCOLOR32 := "B/W   ,W/B    ,N/W   ,B/W"                         //Usada no Get do Checkbox
VGRCOLOR3N := "B+/B  ,B+/B   ,B+/B  ,B+/B  ,B+/B  ,B+/B  ,B+/B"                        //Usada no Get do Checkbox
VGRCOLOR3I := "BG+/B ,BG+/B  ,BG+/B ,BG+/B ,BG+/B ,BG+/B ,BG+/B"  //Usada no Get do Checkbox
VGCOLORBROW:="W/B,B/W,W/B , R+/B,R+/W,R+/B , GR+/B,N+/W,GR+/B , G+/B,N+/W,G+/B , RB+/B,RB/W,RB/B"
        //    1   2   3     4    5    6      7     8    9       10   11   12     13    14   15
IF VGMENUNOVO
   //menu novo
   TITULO    := "N/W   ,W+/W,,,W/N"
   FUNDO2    := "W/W+ ,B/W ,,,N/B"
   MENU1     := "N/W,W+/W, , ,W/N,W+/W,BG/W"   //"N/W,W+/W, , ,W/N,GR+/B,GR+/W"
   //             1   2   3 4  5    6     7
   MENU2     := "W+/B ,B/W ,,,W/B"
   MENSAGEM  := "N/GR ,B/W ,,,W/B"     //W+/GR
   PISCA     := "W+*/B ,B/W ,,,W/B"
ENDIF
IF UPPER(P1)=="TESTE"       // Para Teste
   BOTAO     := "BG/W  ,W+/W,,,W/B"
   MENSAGEM  := "N/GR,B/W ,,,W/B" //"W+/GR,B/W ,,,W/B"
   cradiobox := "W/B   ,B/W ,GR+/B ,W+/GR,GR/B,"
   VBDTESTE:= .T.
ENDIF
IF UPPER(P1)=="VERBASE"
   VER_FAZBD()
ENDIF
DispBox(00,00,MAXROW(),MAXCOL(),SPACE(9),FUNDO)
@ 0,21 SAY PADC(VGSIGLA+"-"+ALLTRIM(VGSIST),MAXCOL()-42) COLOR(FUNDO)
LIMPA_MENS()
SHOWTIME(0,MAXCOL()-19,.F.,FUNDO)  //"W+/BG"
***TELADIR:=SAVESCREEN(4,4,8,77)
SHOW_DIR(4,.F.)
IF VOFF_LINE .AND. UPPER(LEFT(OS(),3))="LIN"
   DBUSEAREA(.T.,"dbfntx","sa300100.dbf.linux","PAR",.T.)
ELSE
   DBUSEAREA(.T.,"dbfntx","sa300100.dbf","PAR",.T.)
ENDIF
VSTRU:=PAR->(DBSTRUCT())
FLAGSEN:= !EMPTY(ASCAN(VSTRU,{|_MAT| _MAT[1]=="SA60" }))  // verifica se existe campo para controle de senhas
IF FLAGSEN .AND. P1!="atalho"
   INSTALL()
ENDIF
VGSESSAO  := PEGA_SSH()
VGPATH    := ALLTRIM(CRYPT(PAR->SA2,"PAR"))
VGPATMP   := ALLTRIM(CRYPT(PAR->SA3,"PAR"))
VGCEP     := ALLTRIM(CRYPT(PAR->SA13,"PAR"))
VGSIST    := ALLTRIM(CRYPT(PAR->SA7,"PAR"))
VGARQREL  := ALLTRIM(CRYPT(PAR->ARQREL,"PAR"))
VGLOJA    := ALLTRIM(CRYPT(PAR->LOJA,"PAR"))
VGPATHBAL := ALLTRIM(CRYPT(PAR->PATHBAL,"PAR"))
IF !EMPTY(ASCAN(PAR->(DBSTRUCT()),{|_MAT| ALLTRIM(_MAT[1])=="LIXEIRA" }))
   VGLIXEIRA := ALLTRIM(CRYPT(PAR->LIXEIRA,"PAR"))
ENDIF
AMBIENTE()               //carrega as variaveis locais
IF VGERASA_MAIL
   IF EMPTY(VGSA_MAIL:=ALLTRIM(CRYPT(PAR->SA_MAIL,"PAR")))
      ERRO(" ** ATEN€?O. Caminho para e-mail está vazio. ** ")
   ELSE
      IF !VALDIR(VGSA_MAIL)
         ERRO("ATEN€?O;;Caminho para e-mail nao existe;;;Favor criar")
      ENDIF
   ENDIF
ENDIF
IF !VALDIR(VGPATH)
   ERRO("ATEN€?O;;BASE DE DADOS n„o encontrada;;;verifique parametros")
   FINALIZA()
ENDIF
IF UPPER(P1)=="VERBASE"         // Apenas verifica/cria base de dados
   VER_FAZBD()
   VER_BDADOS(.F.)
   CLOSE DATABASES
   CLEAR SCREEN
   QUIT
ENDIF
IF VTESTE
   IF VGLINUX
      VGPWD:=GETE("PWD")
      IF !ALLTRIM(VGPWD) $ ALLTRIM(VGPATH)
         ERRO("O caminho da base de dados ; VGPATH: "+ALLTRIM(VGPATH) +"; nao ‚ o mesmo local que voce esta executando o sistema;"+ALLTRIM(VGPWD)+";;VERIFIQUE;")
      ENDIF
   ENDIF
   VGTERMINAL := "999"
   VGUSU      := 999
   AMBIENTE()               //carrega as variaveis locais
   ABRE({"TER","USU","IMPRESS","PAR","LOJ","SISDOC","GRAVAR","GRAVAFIN","CADECF","SIS"})
   USU->(DBSETORDER(1),DBSEEK(STRZERO(VGUSU,3)))
   TER->(DBSETORDER(1),DBSEEK(VGTERMINAL))
   LOJ->(DBSETORDER(1),DBGOTOP())
   VGLOJA     := CRYPT(LOJ->COD_LOJ,"LOJ")
   VCNPJ      := ALLTRIM(TIRA(ALLTRIM(CRYPT(LOJ->CGC,"LOJ")),"./-="))
   VLOJ_STRUCT:=LOJ->(DBSTRUCT())
   IF "/art" $ CRYPT(LOJ->NFE_PASTA,"LOJ") .OR. EMPTY(ALLTRIM(CRYPT(LOJ->NFE_PASTA,"LOJ")))
      IF !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| _MAT[1]=="NFE" })).AND.;
         !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| _MAT[1]=="CTE" })).AND.;
         !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| _MAT[1]=="NFCE" })).AND.;
         !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| _MAT[1]=="NFE_PASTA" })).AND.;
         !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| _MAT[1]=="NCE_PASTA" })).AND.;
         !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| _MAT[1]=="NFE_PRODUC" })).AND.;
         !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| _MAT[1]=="NFE_EMAIL" }))

         WHILE LOJ->(!EOF())
            WHILE !TRAVA("LOJ");END
            IF (LOJ->NFE.OR.LOJ->CTE.OR.LOJ->NFCE)

               VNOME_SIST     := SUBSTR(VGPWD,RAT("/",VGPWD)+1)+"/"
               LOJ->NFE_PRODUC := .F.
               LOJ->NFE_EMAIL  := CRYPT("M","LOJ")
               LOJ->IP_SERVER  := CRYPT(SPACE(20),"LOJ")

               IF LOJ->NFE
                  VNOVA_PASTA     := STRTRAN(CRYPT(LOJ->NFE_PASTA,"LOJ"),"/art",VGPWD)
                  LOJ->NFE_PASTA  := CRYPT(PADR(VNOVA_PASTA,LEN(LOJ->NFE_PASTA)),"LOJ")
                  IF LEFT(CRYPT(LOJ->NFE_XMLDES,"LOJ"),4)=="/art"
                     LOJ->NFE_XMLDES := CRYPT(PADR(ALLTRIM(STRTRAN(CRYPT(LOJ->NFE_XMLDES,"LOJ"),"/art",VGPWD)),LEN(LOJ->NFE_XMLDES)),"LOJ")
                  ENDIF
                  IF !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| _MAT[1]=="NFE_AMBIEN" }))
                     LOJ->NFE_AMBIEN := CRYPT(SPACE(LEN(LOJ->NFE_AMBIEN)),"LOJ")
                  ENDIF
               ENDIF

               IF LOJ->NFCE
                  VNOVA_PASTA     := STRTRAN(CRYPT(LOJ->NCE_PASTA,"LOJ"),"/art",VGPWD)
                  LOJ->NCE_PASTA  := CRYPT(PADR(VNOVA_PASTA,LEN(LOJ->NCE_PASTA)),"LOJ")
                  LOJ->NCE_AMBIEN := CRYPT(SPACE(LEN(LOJ->NCE_AMBIEN)),"LOJ")
                  IF LEFT(CRYPT(LOJ->NCE_XMLDES,"LOJ"),4)=="/art"
                     LOJ->NCE_XMLDES := CRYPT(PADR(ALLTRIM(STRTRAN(CRYPT(LOJ->NCE_XMLDES,"LOJ"),"/art",VGPWD)),LEN(LOJ->NCE_XMLDES)),"LOJ")
                  ENDIF
               ENDIF

               IF LOJ->CTE.AND.!EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| _MAT[1]=="CTE_AMBIEN" }))
                  LOJ->CTE_AMBIEN := CRYPT(SPACE(LEN(LOJ->CTE_AMBIEN)),"LOJ")
               ENDIF
               IF LEFT(CRYPT(LOJ->NFS_PASTA,"LOJ"),4)=="/art"
                  LOJ->NFS_PASTA :=CRYPT(PADR(ALLTRIM(STRTRAN(CRYPT(LOJ->NFS_PASTA,"LOJ"),"/art",VGPWD)),LEN(LOJ->NFS_PASTA)),"LOJ")
                  LOJ->NFS_PASTAW:=CRYPT(PADR("S:\",LEN(LOJ->NFS_PASTAW)),"LOJ")
               ENDIF
            ENDIF

            IF LEFT(CRYPT(LOJ->PASTA_DOCS,"LOJ"),4)=="/art" .OR. LEFT(CRYPT(LOJ->PASTA_DOCS,"LOJ"),7)=="arqrel/"
               //LOJ->PASTA_DOCS:=CRYPT(PADR(ALLTRIM(STRTRAN(CRYPT(LOJ->PASTA_DOCS,"LOJ"),"/art",VGPWD)),LEN(LOJ->PASTA_DOCS)),"LOJ")
               LOJ->PASTA_DOCS:=CRYPT(PADR("/server/",LEN(LOJ->PASTA_DOCS)),"LOJ")
               LOJ->PASTA_ORC :=CRYPT(PADR("/server/",LEN(LOJ->PASTA_ORC)),"LOJ")
               LOJ->PASTA_PC  :=CRYPT(PADR("/server/",LEN(LOJ->PASTA_PC)),"LOJ")
               LOJ->PASTA_OS  :=CRYPT(PADR("/server/",LEN(LOJ->PASTA_OS)),"LOJ")
               LOJ->PASTA_SAI :=CRYPT(PADR("/server/",LEN(LOJ->PASTA_SAI)),"LOJ")
               LOJ->PASTA_PEDF:=CRYPT(PADR("/server/",LEN(LOJ->PASTA_PEDF)),"LOJ")
               LOJ->BLOQ_PDF_L:=CRYPT(PADR("/server/",LEN(LOJ->BLOQ_PDF_L)),"LOJ")
            ENDIF
            //IF LEFT(CRYPT(LOJ->NFE_DIR_EL,"LOJ"),4)=="/art"
               LOJ->NFE_DIR_EL:=CRYPT(PADR("arqrel/xml_entradas_lote/",60),"LOJ")
            //ENDIF
            //IF LEFT(CRYPT(LOJ->NFE_DIR_EM,"LOJ"),4)=="/art"
               LOJ->NFE_DIR_EM:=CRYPT(PADR("arqrel/xml_entradas/",60),"LOJ")
            //ENDIF
            IF !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| ALLTRIM(_MAT[1])=="PASTA_BLOQ" }))
               LOJ->PASTA_BLOQ :=CRYPT(PADR("/server/sist/artusb/",LEN(LOJ->PASTA_BLOQ)),"LOJ")
            ENDIF

            IF !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| ALLTRIM(_MAT[1])=="PASTW_DOCS" }))
               LOJ->PASTW_DOCS:=CRYPT(PADR("S:\",LEN(LOJ->PASTW_DOCS)),"LOJ")
            ENDIF
            IF !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| ALLTRIM(_MAT[1])=="PASTW_ORC" }))
               LOJ->PASTW_ORC :=CRYPT(PADR("S:\",LEN(LOJ->PASTW_ORC)),"LOJ")
            ENDIF
            IF !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| ALLTRIM(_MAT[1])=="PASTW_PC" }))
               LOJ->PASTW_PC  :=CRYPT(PADR("S:\",LEN(LOJ->PASTW_PC)),"LOJ")
            ENDIF
            IF !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| ALLTRIM(_MAT[1])=="PASTW_OS" }))
               LOJ->PASTW_OS  :=CRYPT(PADR("S:\",LEN(LOJ->PASTW_OS)),"LOJ")
            ENDIF
            IF !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| ALLTRIM(_MAT[1])=="PASTW_SAI" }))
               LOJ->PASTW_SAI :=CRYPT(PADR("S:\",LEN(LOJ->PASTW_SAI)),"LOJ")
            ENDIF
            IF !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| ALLTRIM(_MAT[1])=="PASTW_PEDF" }))
               LOJ->PASTW_PEDF:=CRYPT(PADR("S:\",LEN(LOJ->PASTW_PEDF)),"LOJ")
            ENDIF
            IF !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| ALLTRIM(_MAT[1])=="BLOQ_PDF" }))
               LOJ->BLOQ_PDF   :=CRYPT(PADR("S:\",LEN(LOJ->BLOQ_PDF)),"LOJ")
            ENDIF
            DESTRAVA("LOJ")
            LOJ->(DBSKIP())
         END
      ENDIF
   ENDIF
   IMPRESS->(DBSETORDER(1),DBGOTOP())
   WHILE IMPRESS->(!EOF())
      IF CRYPT(IMPRESS->COD_IMP,"IMPRESS")==VGTERMINAL
         VGIMP   := VAL(CRYPT(IMPRESS->COD_IMP,"IMPRESS"))
      ENDIF
      WHILE !TRAVA("IMPRESS");END
      IF !EMPTY(CRYPT(IMPRESS->ARQREL,"IMPRESS"))
         IMPRESS->ARQREL :=CRYPT(PADR("/server/sist/artusb/",LEN(IMPRESS->ARQREL)),"IMPRESS")
      ENDIF
      IF ALLTRIM(CRYPT(IMPRESS->PORTA,"IMPRESS"))=="NODOSIMP"
         IMPRESS->FILA:=CRYPT(PADR("hp1102",LEN(IMPRESS->FILA)),"IMPRESS")
      ELSEIF ALLTRIM(CRYPT(IMPRESS->PORTA,"IMPRESS"))=="LPT1"
         IF IMPRESS->ETIQUETAS
            IF !"ZEBRA" $ UPPER(CRYPT(IMPRESS->DES_IMP,"IMPRESS"))
               IMPRESS->FILA:=CRYPT(PADR("argox",LEN(IMPRESS->FILA)),"IMPRESS")
            ELSE
               IMPRESS->FILA:=CRYPT(PADR("zebra",LEN(IMPRESS->FILA)),"IMPRESS")
            ENDIF
         ELSE
            IF IMPRESS->NF .AND. IMPRESS->A4
               IMPRESS->FILA:=CRYPT(PADR("hp1102",LEN(IMPRESS->FILA)),"IMPRESS")
            ELSEIF "BEMATECH" $ CRYPT(IMPRESS->DES_IMP,"IMPRESS") .or.;
                   IMPRESS->NF
               IMPRESS->FILA := CRYPT(PADR("mp4200",LEN(IMPRESS->FILA)),"IMPRESS")
            ELSE
               IMPRESS->FILA:=CRYPT(PADR("epson2000",LEN(IMPRESS->FILA)),"IMPRESS")
            ENDIF
         ENDIF
      ENDIF

      IMPRESS->(DBUNLOCK())
      IMPRESS->(DBSKIP())
   END
   LOJ->(DBSETORDER(1),DBSEEK(VGLOJA))
   VGDES_TER  := PADR(ALLTRIM(CRYPT(TER->DES_TER,"TER")),7)
   VGNIVEL    := VAL(CRYPT(USU->NIVEL,"USU"))
   VGHABILITA := CRYPT(USU->HABILITA,"USU")
   VGSIST    := ALLTRIM(CRYPT(LOJ->NOM_LOJ,"LOJ"))
   VGUF      := CRYPT(LOJ->UF,"LOJ")
   VGCIDADE  := ALLTRIM(CRYPT(LOJ->CID,"LOJ"))
   VMMENU    := FAZMENU(VGNIVEL)
   VGSIMPLES := LOJ->SIMPLES .AND. CRYPT(LOJ->COD_CRT,'LOJ')=="1"
   VGERITON  :=("ERITON"$CRYPT(LOJ->NOM_LOJ,"LOJ")).OR.;
               ("MOTO SERVICE"$CRYPT(LOJ->NOM_LOJ,"LOJ")).OR.;
               ("T2R"$CRYPT(LOJ->NOM_LOJ,"LOJ")).OR.;
               ("EMM"==ALLTRIM(CRYPT(LOJ->NOM_LOJ,"LOJ"))).OR.;
               ("EML"==ALLTRIM(CRYPT(LOJ->NOM_LOJ,"LOJ")))
   VGRECORD:=(("RECORD"$CRYPT(LOJ->NOM_LOJ,"LOJ")).OR.('SHOPPING'$CRYPT(LOJ->NOM_LOJ,"LOJ")))
   VGANDRIOLI:=("ANDRIOLI"$CRYPT(LOJ->NOM_LOJ,"LOJ"))
   VGCATARINA:=('CATARINA'$CRYPT(LOJ->NOM_LOJ,"LOJ"))
   IF !EMPTY(ASCAN(LOJ->(DBSTRUCT()),{|_MAT| ALLTRIM(_MAT[1])=="LOJA_SALDO" }))
      VMAT_LJ_SALDOS := FParseLine(ALLTRIM(CRYPT(LOJ->LOJA_SALDO,'LOJ'))," ")
   ENDIF

   GRAVATER("Entrada no sistema")
   ARQVARS("SA_VARS","UCONFOTI","VPASTA_MODREL",PADR("s:\sist\mod_relat\",60))
   ARQVARS("SA_VARS","UCONFOTI","VPASTA_RELPDF",PADR("/server/sist/artusb/",60))
   ARQVARS("SA_VARS","UCONFOTI","VPASTA_MODLINUX",PADR("/server/sist/mod_relat/",60))
ELSEIF P1=="atalho"
   IF VGLINUX
      VGPWD:=GETE("PWD")
      IF !ALLTRIM(VGPWD) $ ALLTRIM(VGPATH)
         ERRO("O caminho da base de dados ; VGPATH: "+ALLTRIM(VGPATH) +"; nao ‚ o mesmo local que voce esta executando o sistema;"+ALLTRIM(VGPWD)+";;VERIFIQUE;")
      ENDIF
   ENDIF
   VGTERMINAL := "999"
   VGUSU      := 999
   VGNOM_USU  := PADR('Roberval',40)
   AMBIENTE()               //carrega as variaveis locais
   ABRE({"TER","USU","IMPRESS","PAR","LOJ","SISDOC","GRAVAR","GRAVAFIN","CADECF","SIS"})
   USU->(DBSETORDER(1),DBSEEK(STRZERO(VGUSU,3)))
   WHILE !TRAVA('USU');END
   REPLACE USU->NOM_USU WITH CRYPT(PADR('Roberval',40),'USU')
   DESTRAVA('USU')
   TER->(DBSETORDER(1),DBSEEK(VGTERMINAL))
   LOJ->(DBSETORDER(1),DBGOTOP())
   VGLOJA     := CRYPT(LOJ->COD_LOJ,"LOJ")
   VCNPJ      := ALLTRIM(TIRA(ALLTRIM(CRYPT(LOJ->CGC,"LOJ")),"./-="))
   LOJ->(DBSETORDER(1),DBSEEK(VGLOJA))
   VGDES_TER  := PADR(ALLTRIM(CRYPT(TER->DES_TER,"TER")),7)
   VGNIVEL    := VAL(CRYPT(USU->NIVEL,"USU"))
   VGHABILITA := CRYPT(USU->HABILITA,"USU")
   IF IMPRESS->(DBSETORDER(1),DBSEEK(VGTERMINAL))
      VGIMP   := VAL(CRYPT(IMPRESS->COD_IMP,"IMPRESS"))
   ENDIF
   VGERITON  :=("ERITON"$CRYPT(LOJ->NOM_LOJ,"LOJ")).OR.;
               ("MOTO SERVICE"$CRYPT(LOJ->NOM_LOJ,"LOJ")).OR.;
               ("T2R"$CRYPT(LOJ->NOM_LOJ,"LOJ")).OR.;
               ("EMM"==ALLTRIM(CRYPT(LOJ->NOM_LOJ,"LOJ"))).OR.;
               ("EML"==ALLTRIM(CRYPT(LOJ->NOM_LOJ,"LOJ")))
   VGRECORD:=(("RECORD"$CRYPT(LOJ->NOM_LOJ,"LOJ")).OR.('SHOPPING'$CRYPT(LOJ->NOM_LOJ,"LOJ")))
   VGANDRIOLI:=("ANDRIOLI"$CRYPT(LOJ->NOM_LOJ,"LOJ"))
   VGCATARINA:=('CATARINA'$CRYPT(LOJ->NOM_LOJ,"LOJ"))
   //posiciona a ECF
   IF CADECF->(DBSETORDER(1),DBSEEK(CRYPT(TER->IMP_FISCAL,"TER")))
      VGIPECF    := TRIM(CRYPT(CADECF->IP,"CADECF"))
      VGPORTAECF := TRIM(CRYPT(CADECF->PORTA,"CADECF"))
      VGNOMECF   := CRYPT(CADECF->DES_ECF,"CADECF")
      VGCODECF   := CRYPT(CADECF->ECF,"CADECF")
      VGSERIECF  := CRYPT(CADECF->SERIE,"CADECF")
      IF !EMPTY(ASCAN(CADECF->(DBSTRUCT()),{|_MAT| ALLTRIM(_MAT[1])=="POSICAOISS" }))
         VGPOSIC_ISS:=ALLTRIM(STR(CADECF->POSICAOISS))
      ENDIF
   ENDIF
   VGSIST    := ALLTRIM(CRYPT(LOJ->NOM_LOJ,"LOJ"))
   VGUF      := CRYPT(LOJ->UF,"LOJ")
   VGCIDADE  := ALLTRIM(CRYPT(LOJ->CID,"LOJ"))
   VMMENU    := FAZMENU(VGNIVEL)
   VGSIMPLES  := LOJ->SIMPLES .AND. CRYPT(LOJ->COD_CRT,'LOJ')=="1"
   IF !EMPTY(ASCAN(LOJ->(DBSTRUCT()),{|_MAT| ALLTRIM(_MAT[1])=="LOJA_SALDO" }))
      VMAT_LJ_SALDOS := FParseLine(ALLTRIM(CRYPT(LOJ->LOJA_SALDO,'LOJ'))," ")
   ENDIF
   GRAVATER("Entrada no sistema")
ELSE
   IF !FILE(VGPATH+"sa000000.dbf")
      VER_FAZBD()
      VER_BDADOS(.T.)
      FLAGVERIFICA:=.T.
   ENDIF
   ABRE({"TER","USU","IMPRESS","PAR","LOJ","SISDOC","GRAVAR","GRAVAFIN","CADECF",IF(VGMENUNOVO,"NIVLJ","")})
   IF !EMPTY(VAL(P1))
      VGTERMINAL := STRZERO(VAL(P1),3)
   ENDIF
   LE_SENHA2()
   VGHABILITA := CRYPT(USU->(DBSETORDER(1),DBSEEK(STRZERO(VGUSU,3)),HABILITA),"USU")
   IF VGUSU==999
      AMBIENTE()
      IF FLAGVERIFICA
         VER_BDADOS(.T.)
      ENDIF
   ENDIF
ENDIF
IF !EMPTY(VGLOJA)
   IIF(LOJ->(DBSETORDER(1), DBSEEK(VGLOJA)),VGNOMLOJ:=CRYPT(LOJ->NOM_LOJ,"LOJ"),VGNOMLOJ:="Nao encontrada")
   VGSIGLA:=IIF(LOJ->(FOUND()),ALLTRIM(CRYPT(LOJ->SIGLA,"LOJ")),"")
   IF !EMPTY(ASCAN(VLOJ_STRUCT,{|_MAT| ALLTRIM(_MAT[1])=="FANTASIA" }))
      VGFANTASIA:=ALLTRIM(CRYPT(LOJ->FANTASIA,"LOJ"))
   ENDIF
   IF !EMPTY(ASCAN(LOJ->(DBSTRUCT()),{|_MAT| ALLTRIM(_MAT[1])=="LOJA_SALDO" }))
      VMAT_LJ_SALDOS := FParseLine(ALLTRIM(CRYPT(LOJ->LOJA_SALDO,'LOJ'))," ")
   ENDIF
ENDIF
@ 0,00 SAY "SoftArti Sistemas" COLOR(FUNDO)     //"R/BG"
@ 0,21 SAY PADC(VGSIGLA+"-"+ALLTRIM(VGSIST),MAXCOL()-42) COLOR(FUNDO)
IIF(USU->(DBSETORDER(1), DBSEEK(STRZERO(VGUSU,3))),VGNOM_USU:=ALLTRIM(CRYPT(USU->NOM_USU,"USU")),VGNOM_USU:="Nao Encontrado")
VGTIMEDESC := PAR->SA4
VGTIMEMSG  := PAR->SA5
VGTIMEIMP  := PAR->SA5
VGTIMETERM := PAR->SA6
VGMODO_IMP := CRYPT(SISDOC->MODO_IMP,"SISDOC")
VGFILA     := ALLTRIM(CRYPT(PAR->SA11,"PAR"))
VG_MOD_PRN := CRYPT(PAR->SA12,"PAR")=="S"
VGHABILITA := CRYPT(USU->(DBSETORDER(1),DBSEEK(STRZERO(VGUSU,3)),HABILITA),"USU")
DBSELECTAR("GRAVAR")
IF GRAVAR->TERMINAL==VGTERMINAL
   WHILE !TRAVA("GRAVAR");END
   DESTRAVA("GRAVAR")
ENDIF
GRAVAR->(DBCLOSEAREA())
DBSELECTAR("GRAVAFIN")
IF GRAVAFIN->TERMINAL==VGTERMINAL
   WHILE !TRAVA("GRAVAFIN");END
   DESTRAVA("GRAVAFIN")
ENDIF
GRAVAFIN->(DBCLOSEAREA())

IF UPPER(P1)=="VENDEDOR"
   PRODUTOS(,,,,,,,,.F.)
   FINALIZA()
ENDIF

ARQVARS("SA_VARS","UCONFOTI","LIBVDASERVICO",,  @VLIBVDASERVICO)
VLIBVDASERVICO := (VLIBVDASERVICO=="S")         //Este cliente pratica venda de produtos e servicos na rotina de venda.

ARQVARS("SA_VARS","UCONFOTI","VPASTA_MODREL",,  @VPASTA_MODREL)         // pasta padrao para os arquivos modelo de relatorios graficos
ARQVARS("SA_VARS","UCONFOTI","VPASTA_MODLINUX",,@VPASTA_MODLINUX)       // pasta (linux) dos arquivos modelo de relatorios graficos
ARQVARS("SA_VARS","UCONFOTI","VPASTA_RELPDF",,@VPASTA_RELPDF)           // pasta padrao para monitorar arquivos pdf/word/excel/BOLETO
*CONFKEY(K_F3,     "BROWSE_ARQ()"     ,,,,"Pesquisa arquivos/pastas")
CONFKEY(K_F7,     "DESABI_USU()"     ,,,,"Troca usu rio/terminal/loja")
CONFKEY(K_ALT_F7, "DESABI_TER()"     ,,,,"Troca terminal/loja")
CONFKEY(K_F9,     "SHOW_TER()"       ,,,,"Apresenta situa‡„o dos terminais")
CONFKEY(K_ALT_F9, "CONF_IMP()"       ,,,,"Configura impressora")
CONFKEY(-17,      "MENU_PESQUISAS()" ,,,,"Op‡”es pesquisa")                  //shift_f10
CONFKEY(-47,      "SHOW_AGENDA(.T.)" ,,,,"Agenda de ligacoes para clientes")    //alt   + f12

ARQVARS("SA_VARS","UCONFOTI","VTIPOPESQPRO",,@VLTIPOPESQPRO)
VLTIPOPESQPRO := IIF(EMPTY(ALLTRIM(VLTIPOPESQPRO)),"01",VLTIPOPESQPRO)  //Selecione qual o tipo de browse de pesquisa para os produtos o programa vai utilizar.

ARQVARS("SA_VARS","UCONFOTI","VLOJAS_SITE",,@VLOJAS_SITE)
IF !EMPTY(VLOJAS_SITE)
   VMAT_LJ_IDERIS := FParseLine(ALLTRIM(VLOJAS_SITE)," ")
ENDIF
IF EMPTY(LEN(VMAT_LJ_IDERIS))
   AADD(VMAT_LJ_IDERIS,"01")
ENDIF

IF VLTIPOPESQPRO=="05"
   CONFKEY(K_F11,    "PRO_ACAB(,,,,,,,,.T.,.T.)",,,,"Pesquisa de produtos")        // ecadpro.prg
ELSEIF VLTIPOPESQPRO=="06"
   CONFKEY(K_F11,    "TAB_FRETE('000000')",,,,"Tabela de precos")        // ecadpro.prg
   CONFKEY(K_ALT_F11,"EMCOTACTE()",,,,"cota‡„o/coleta")
ELSE
   CONFKEY(K_F11,    "PRODUTOS(,,,,,,,,.T.,.T.)",,,,"Pesquisa de produtos")        // ecadpro.prg
ENDIF
CONFKEY(K_F12,    "CMENSAGE()"       ,,,,"Mensagem para usu rio")
CONFKEY(-12,      "ABRE_GAVETA()"    ,,,,"Shift+F5 Abrir a gaveta do caixa")
CONFKEY(997,      "CALC_FUTURO(0)"   ,,,,"Calcular juros futuros")
IF VGUSU==999 .OR. VGHABILITA=="M" // ECADPRO.PRG
   CONFKEY(999914,"CONF_BROWS('PRODUTOS  ')" ,,,,"Configura Browse de produtos           B ") //ECADPRO.PRG
ENDIF
IF VLIBVDASERVICO       //Este cliente pratica venda de produtos e servicos na rotina de venda.
   CONFKEY(K_F4,  "BROW_SERV()",,,,"Pesquisa servi‡os") // ecadserv.prg
ENDIF
IF NOVO_AUTO("consulta on-line","ECADCLI",108,,,,,,,.F.,.F.)
   CONFKEY(991,  "NOVOCAD_ONLINE()"          ,,,,"Consulta CNPJ/CPF online               N")
ENDIF
CONFKEY(996,     "CLIENTES(,.F.)"            ,,,,"Pesquisa clientes                      C") // ecadcli.prg
CONFKEY(995,     "FORNECEDOR(,.F.)"          ,,,,"Pesquisa fornecedores                  O") // ecadfor.prg
CONFKEY(994,     "PESQ_TRANSP(NIL)"          ,,,,"Pesquisa transportadoras               R")
CONFKEY(993,     "ECADAGEN()"                ,,,,"Agenda de contatos                     G")
CONFKEY(992,     "SHOW_AGENDA(.T.)"          ,,,,"Agenda de ligacoes para clientes       L")
VCT_CERT_DIG()
VBRUSU:=VGUSU

PASTA_DOC("DOCS"     ,@VMSTR)   //adiciona para historico de pastas
IF !EMPTY(VMSTR)
   AADD(VGMAT_PASTAS,VMSTR)
ENDIF
PASTA_DOC("ENT_LOT"  ,@VMSTR)
IF !EMPTY(VMSTR)
   AADD(VGMAT_PASTAS,VMSTR)
ENDIF
PASTA_DOC("ENT_MOV"  ,@VMSTR)
IF !EMPTY(VMSTR)
   AADD(VGMAT_PASTAS,VMSTR)
ENDIF
PASTA_DOC("ORC"      ,@VMSTR)
IF !EMPTY(VMSTR)
   AADD(VGMAT_PASTAS,VMSTR)
ENDIF
PASTA_DOC("PC"       ,@VMSTR)
IF !EMPTY(VMSTR)
   AADD(VGMAT_PASTAS,VMSTR)
ENDIF
PASTA_DOC("OS"       ,@VMSTR)
IF !EMPTY(VMSTR)
   AADD(VGMAT_PASTAS,VMSTR)
ENDIF
PASTA_DOC("SAI"      ,@VMSTR)
IF !EMPTY(VMSTR)
   AADD(VGMAT_PASTAS,VMSTR)
ENDIF
PASTA_DOC("PEDF"     ,@VMSTR)
IF !EMPTY(VMSTR)
   AADD(VGMAT_PASTAS,VMSTR)
ENDIF
IF !EMPTY(VGARQREL).AND.EMPTY(ASCAN(VGMAT_PASTAS,{|_MAT| _MAT==VGARQREL }))
   AADD(VGMAT_PASTAS,VGARQREL)
ENDIF
FOR I:=1 TO LEN(VGMAT_PASTAS)
   IF !SA_ISDIRECTORY(VGMAT_PASTAS[I])
      EXIT
   ENDIF
NEXT
IF I<=LEN(VGMAT_PASTAS)  //existe(m) pasta(s) nao encontrada(s)
   IF VGUSU==999
      EDITA_PASTA_DOCS() // obj_hb/ecadloj.prg
   ENDIF
ENDIF

IF VGUSU==999
   UCONFOTI( nil ,nil ,.T. )  //atualiza variaveis de configuracao
ENDIF

IF VGMENUNOVO
   MENUNOVO()
ELSE
   VMACRO:="MENUPRIN()"
   &VMACRO
ENDIF

*************************
FUNCTION ACESSO_CAD(PCAD)
*************************
IF VGMENUNOVO
   IF MENU_LIBERADO(IIF(RIGHT(PCAD,2)=="()",SUBSTR(PCAD,1,LEN(PCAD)-2),PCAD))
      RETURN(PCAD)
   ELSE
      RETURN(NIL)
   ENDIF
ELSE
   IF PCAD=="FCADIND()"
      RETURN(IIF(VMMENU[09]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADCFO()"
      RETURN(IIF(VMMENU[10]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADSIS()"
      RETURN(IIF(VMMENU[11]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADFER()"
      RETURN(IIF(VMMENU[12]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADUF()"
      RETURN(IIF(VMMENU[13]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADPRO()"
      RETURN(IIF(VMMENU[20]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADPGT()"
      RETURN(IIF(VMMENU[21]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADGRU()"
      RETURN(IIF(VMMENU[22]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADMARC()"
      RETURN(IIF(VMMENU[23]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADPADR()" .OR. PCAD=="ECADPADR(VLAB_1)"
      RETURN(IIF(VMMENU[24]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADCOR()"
      RETURN(IIF(VMMENU[25]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADTAM()"
      RETURN(IIF(VMMENU[26]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADSEC()"
      RETURN(IIF(VMMENU[27]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADGPZ()"
      RETURN(IIF(VMMENU[28]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADDOC()"
      RETURN(IIF(VMMENU[30]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADPOR()"
      RETURN(IIF(VMMENU[31]=="1",PCAD,NIL))
   ELSEIF PCAD=="FCADSUB()".OR.PCAD=="FCADCON()"
      RETURN(IIF(VMMENU[32]=="1",PCAD,NIL))
   ELSEIF PCAD=="FCADCCO()"
      RETURN(IIF(VMMENU[33]=="1",PCAD,NIL))
   ELSEIF PCAD=="FCADBAN()"
      RETURN(IIF(VMMENU[34]=="1",PCAD,NIL))
   ELSEIF PCAD=="FCADTALO()"
      RETURN(IIF(VMMENU[35]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADCLI()"
      RETURN(IIF(VMMENU[40]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADFOR()"
      RETURN(IIF(VMMENU[41]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADVEN()"
      RETURN(IIF(VMMENU[42]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADTRA()"
      RETURN(IIF(VMMENU[43]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADREP()"
      RETURN(IIF(VMMENU[44]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADCTC()"
      RETURN(IIF(VMMENU[45]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADCTF()"
      RETURN(IIF(VMMENU[46]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADCTV()"
      RETURN(IIF(VMMENU[47]=="1",PCAD,NIL))
   ELSEIF LEFT(PCAD,8)=="ECADOFI(" .OR. PCAD=="ECADMEC()"
      RETURN(IIF(VMMENU[48]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADLOJ()"
      RETURN(IIF(VMMENU[49]=="1",PCAD,NIL))
   ELSEIF PCAD=="ALIASGERAL()"
      RETURN(PCAD)
   ELSEIF PCAD=="USENUSU()".OR.PCAD=="USENNIV()"
      RETURN(IIF(VMMENU[181]=="1",PCAD,NIL)) //132
   ELSEIF PCAD=="ECADECF()"
      RETURN(IIF(VMMENU[218]=="1",PCAD,NIL))
   ELSEIF PCAD=="CADAUTOR()"
      RETURN(PCAD)
   ELSEIF PCAD=="EMOVSAI()"
      RETURN(IIF(VMMENU[52]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADSIT()"
      RETURN(IIF(VMMENU[65]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADCLAF()"
      RETURN(IIF(VMMENU[66]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADMON()"
      RETURN(IIF(VMMENU[67]=="1",PCAD,NIL))
   ELSEIF PCAD=="ECADSERV()".OR.PCAD=="ECADUSU()"
      RETURN(PCAD)
   ELSE
      IF VGUSU==999
         ERRO(" Acesso n„o cadastrado no ACESSO_CAD ")
      ENDIF
      RETURN(PCAD)
   ENDIF
ENDIF
RETURN

************************
FUNCTION PEGA_SSH()
************************
LOCAL VRETU:=""
VRETU:=GETE("SSH_CONNECTION")
IF EMPTY(VRETU)
   VRETU:="NAO PEGOU"
ELSE
   IF LEFT(VRETU,2)=="::"
      VRETU:=SUBSTR(VSESSAO,8)
   ENDIF
ENDIF
RETURN(VRETU)
*
******************************************************
FUNCTION PODE_OPERACAO(PMENSAGEM,PAPELIDO,PCOD_AUTORI)
//                      1         2        3
******************************************************
// Verifica se determinada operacao esta ativa na tela e se ela tem alguem para autorizar.
// Caso nao tenha, a operacao esta proibida.
// se estiver INATIVA retorna verdadeiro.
LOCAL VLCODMENU:="",VF_USUARIO_AUTORIZADOR:=.F.
ABRE({"CADMENU","ALIASCLI","LIBUSU"})
DBSELECTAR("CADMENU")
IF CADMENU->(DBSETORDER(2),DBSEEK(PADR(ALLTRIM(PAPELIDO),15)))
   VLCODMENU:=CRYPT(CADMENU->COD_MENU,"CADMENU")
   IF ALIASCLI->(DBSETORDER(1),DBSEEK(VLCODMENU+STRZERO(PCOD_AUTORI,4)))
      IF !ALIASCLI->ATIVO
         RETURN(.T.)
      ENDIF
      IF !LIBUSU->(DBSETORDER(1),DBSEEK(VLCODMENU+STRZERO(PCOD_AUTORI,4)))
         RETURN(.F.)
      ENDIF

      *RETURN(.T.)   // trocar essa linha pelas linhas de baixo
      WHILE LIBUSU->(!EOF()) .AND. CRYPT(LIBUSU->COD_MENU,"LIBUSU")==VLCODMENU .AND. CRYPT(LIBUSU->COD_AUTORI,"LIBUSU")==STRZERO(PCOD_AUTORI,4)
         IF CRYPT(LIBUSU->COD_LOJ,"LIBUSU")==VGLOJA .AND. (ALLTRIM(CRYPT(LIBUSU->COD_USU,"LIBUSU"))==STRZERO(VGUSU,3) .OR. LIBUSU->AUTORIZADO)
            VF_USUARIO_AUTORIZADOR:=.T.         //se vgusu esta como autorizado ou se tem pelo menu um usuario que autoriza outros
            EXIT
         ENDIF
         LIBUSU->(DBSKIP())
      END
      RETURN(VF_USUARIO_AUTORIZADOR)

   ELSE
      RETURN(.T.)
   ENDIF
ELSE
   RETURN(.T.)
ENDIF

// formula excel calc diferenca entre dois valores
// =((C2-D2)/ABS(C2))*100

**********************************
FUNCTION ART_UPPER(PSTRING,POPCAO)
**********************************
LOCAL VLSTR:="",VCONT
PRIVATE VMMAT:={},VLASCAN:=0

AADD(VMMAT,{"”","'"})
AADD(VMMAT,{"“","'"})

AADD(VMMAT,{"à","A"})
AADD(VMMAT,{"á","A"})
AADD(VMMAT,{"Á","A"})
AADD(VMMAT,{"ã","A"})
AADD(VMMAT,{"Ã","A"})
AADD(VMMAT,{"â","A"})
AADD(VMMAT,{"Â","A"})
AADD(VMMAT,{"…","A"})
AADD(VMMAT,{" ","A"})
AADD(VMMAT,{"„","A"})
AADD(VMMAT,{"ƒ","A"})
AADD(VMMAT,{"µ","A"})
AADD(VMMAT,{"Ç","A"})
AADD(VMMAT,{"¶","A"})
AADD(VMMAT,{"Æ","A"})

AADD(VMMAT,{"é","E"})
AADD(VMMAT,{"É","E"})
AADD(VMMAT,{"ê","E"})
AADD(VMMAT,{"Ê","E"})
AADD(VMMAT,{"‚","E"})
AADD(VMMAT,{"ˆ","E"})
AADD(VMMAT,{"Ò","E"})

AADD(VMMAT,{"í","I"})
AADD(VMMAT,{"Í","I"})
AADD(VMMAT,{"¡","I"})

AADD(VMMAT,{"ó","O"})
AADD(VMMAT,{"Ó","O"})
AADD(VMMAT,{"õ","O"})
AADD(VMMAT,{"Õ","O"})
AADD(VMMAT,{"ô","O"})
AADD(VMMAT,{"Ô","O"})
AADD(VMMAT,{"ä","O"})
AADD(VMMAT,{"¢","O"})
AADD(VMMAT,{"”","O"})
AADD(VMMAT,{"“","O"})

AADD(VMMAT,{"ü","U"})
AADD(VMMAT,{"Ü","U"})
AADD(VMMAT,{"ú","U"})
AADD(VMMAT,{"Ú","U"})
AADD(VMMAT,{"?","U"})
AADD(VMMAT,{"£","U"})

AADD(VMMAT,{"ñ","N"})
AADD(VMMAT,{"Ñ","N"})
AADD(VMMAT,{"¤","N"})
AADD(VMMAT,{"N","N"})

AADD(VMMAT,{"ç","C"})
AADD(VMMAT,{"Ç","C"})
AADD(VMMAT,{"‡","C"})

AADD(VMMAT,{"€","C"})

AADD(VMMAT,{"ª","?"})

PSTRING:=UPPER(PSTRING)
FOR VCONT:=1 TO LEN(PSTRING)
   VLSTR+=CONV_CHR(SUBSTR(PSTRING,VCONT,1))
NEXT
RETURN(VLSTR)
*
*************************************
STATIC FUNCTION CONV_CHR(PCHR)
*************************************
* conversao de caracter grafico para texto
* 1.coluna = caracter a converter
* 2.coluna = opcao 1 - minuscula com acento (se houver)
* 3.coluna = opcao 2 - maiuscula com acento (se houver)
* 4.coluna = opcao 3 - somente maiusculo
RETURN(IIF(EMPTY(VLASCAN:=ASCAN(VMMAT,{|_MAT| _MAT[1]==PCHR })),PCHR,VMMAT[VLASCAN,2]))

