;** Exp_NFE  *******************************************************************
;* Exportacao de Dados NF-e  Cadastros                                         *
;*******************************************************************************
;Autor: Visao/Vise
;Desenvolvido    : 31/03/2009 por Anivel Augusto Rodrigues
;Ultima Alteracao: 17/13/2010 por Antonio Marcelo Alves
;Movito Alteracao: Verificando dados antes de exportar
;Ultima Alteracao: 01/12/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo de "ExecVise -> Vexe"
;Ultima Alteracao: 01/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.                  
;Ultima Alteracao: 29/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                  

;*******************************************************************************
; Checagem de CGG ou CPF Formatado                                             *
;*******************************************************************************
Proc Checa_CGC_CPF_Formatado(Campo_CGC_CPF)
Private Campo_CGC_CPF, Validar
;validar cgc/cpf
;123456789012345678
;##.###.###/####-##  CGC
;12345678901234
;###.###.###-##      CPF

Validar=False
If SubStr(Campo_CGC_CPF,03,1)="." and
   SubStr(Campo_CGC_CPF,07,1)="." and
   SubStr(Campo_CGC_CPF,11,1)="/" and
   SubStr(Campo_CGC_CPF,16,1)="-"
   Then WVR=""               ;CGC
        WVR=SubStr(Campo_CGC_CPF,01,2)+
            SubStr(Campo_CGC_CPF,04,3)+
            SubStr(Campo_CGC_CPF,08,3)+
            SubStr(Campo_CGC_CPF,12,4)+
            SubStr(Campo_CGC_CPF,17,2)
        If E_Numerico(WVR)
           Then CHECACGC(WVR)
                If WB=0
                   Then Validar=True
                EndIf
        EndIf
   Else If SubStr(Campo_CGC_CPF,04,1)="." and
           SubStr(Campo_CGC_CPF,08,1)="." and
           SubStr(Campo_CGC_CPF,12,1)="-"
           Then WVR=""               ;CPF
                WVR=SubStr(Campo_CGC_CPF,01,3)+
                    SubStr(Campo_CGC_CPF,05,3)+
                    SubStr(Campo_CGC_CPF,09,3)+
                    SubStr(Campo_CGC_CPF,13,2)
                If E_Numerico(WVR)
                   Then CHECACPF(WVR)
                        If WB=0
                           Then Validar=True
                        EndIf
                EndIf
        EndIf
EndIf
Return Validar
EndProc

;*******************************************************************************
;* Rotina Valida IE  (Dir)                                                     *
;*******************************************************************************
Proc Valida_IE(IE,UF)
private wi
Numero = ""
VarTemp ="S"
Igual = True
resultado = True

for wi from 1 to 15
 If SubStr(Strim(IE),wi,1) = "1" Or
    SubStr(Strim(IE),wi,1) = "2" Or
    SubStr(Strim(IE),wi,1) = "3" Or
    SubStr(Strim(IE),wi,1) = "4" Or
    SubStr(Strim(IE),wi,1) = "5" Or
    SubStr(Strim(IE),wi,1) = "6" Or
    SubStr(Strim(IE),wi,1) = "7" Or
    SubStr(Strim(IE),wi,1) = "8" Or
    SubStr(Strim(IE),wi,1) = "9" Or
    SubStr(Strim(IE),wi,1) = "0"
    Then Numero = Numero + SubStr(Strim(IE),wi,1)
 EndIf   
EndFor

for wi from 1 to 15
 If SubStr(Numero,wi,1) = "1" Or
    SubStr(Numero,wi,1) = "2" Or
    SubStr(Numero,wi,1) = "3" Or
    SubStr(Numero,wi,1) = "4" Or
    SubStr(Numero,wi,1) = "5" Or
    SubStr(Numero,wi,1) = "6" Or
    SubStr(Numero,wi,1) = "7" Or
    SubStr(Numero,wi,1) = "8" Or
    SubStr(Numero,wi,1) = "9" Or
    SubStr(Numero,wi,1) = "0"
    Then If SubStr(Numero,wi,1) <> SubStr(Numero,1,1)
            Then Igual = False
                 QuitLoop
         EndIf
 EndIf               
EndFor

If Not Igual
   Then ExecVise("VIE "+IE+" "+UF)
        for wi from 1 to 5
         Sleep(1000)
         If IsFile("C:\\FUNCOES.txt")
            Then FileRead "C:\\FUNCOES.txt" to VarTemp
                 Quitloop
         EndIf
        Endfor
        If VarTemp = "N"
           Then resultado = False
           Else resultado = True     
        EndIf
EndIf        
   
return  Resultado
EndProc    ; (Valida_IE)

;*******************************************************************************
;* Rotina Converte caracter especial e passa para numero                       *
;*******************************************************************************
Proc Tira_CharNum(s)
private s, sn, i, ch

sn=""
For i from 1 to Len(s)
  ch=SubStr(s,i,1)
  Switch
   Case Asc(ch)=48  : ch=0 ; 0
   Case Asc(ch)=49  : ch=1 ; 1
   Case Asc(ch)=50  : ch=2 ; 2
   Case Asc(ch)=51  : ch=3 ; 3
   Case Asc(ch)=52  : ch=4 ; 4
   Case Asc(ch)=53  : ch=5 ; 5
   Case Asc(ch)=54  : ch=6 ; 6
   Case Asc(ch)=55  : ch=7 ; 7
   Case Asc(ch)=56  : ch=8 ; 8
   Case Asc(ch)=57  : ch=9 ; 9
   OtherWise:ch=""
  EndSwitch
  sn=sn+ StrVal(ch)
EndFor
Return Upper(sn)
EndProc


;*******************************************************************************
;* LogrNumCompl                                                                *
;*******************************************************************************
Proc PegaEndereco(s)
Private s,posl,posn

End_Logradouro =""
End_Numero     =""
End_Complemento=""

posl=SearchFrom(",",s,1)
If posl<2
   Then End_Logradouro =s
   Else End_Logradouro=LTrim(RTrim(SubStr(s,1,posl-1)))
       
        posn=SearchFrom(",",s,posl+1)
        If posn>1
           Then End_Numero     =LTrim(RTrim(SubStr(s,posl+1,(posn-posl)-1)))
                End_Complemento=LTrim(RTrim(SubStr(s,posn+1,40)))
           Else End_Numero     =LTrim(RTrim(SubStr(s,posl+1,40)))     
        EndIf
EndIf   

EndProc

;*******************************************************************************
;* Tira_CharEspecial                                                                *
;*******************************************************************************
Proc Tira_CharEspecial(s)
private s, sn, i, ch

sn=""
For i from 1 to Len(s)
  ch=SubStr(s,i,1)
  Switch
   Case Asc(ch)=38  : ch="E" ;&
   Case Asc(ch)=48  : ch="0" ;0
   Case Asc(ch)=49  : ch="1" ;1
   Case Asc(ch)=50  : ch="2" ;2
   Case Asc(ch)=51  : ch="3" ;3
   Case Asc(ch)=52  : ch="4" ;4
   Case Asc(ch)=53  : ch="5" ;5
   Case Asc(ch)=54  : ch="6" ;6
   Case Asc(ch)=55  : ch="7" ;7
   Case Asc(ch)=56  : ch="8" ;8
   Case Asc(ch)=57  : ch="9" ;9
   Case Asc(ch)=65  : ch="A" ;A
   Case Asc(ch)=66  : ch="B" ;B
   Case Asc(ch)=67  : ch="C" ;C
   Case Asc(ch)=68  : ch="D" ;D
   Case Asc(ch)=69  : ch="E" ;E
   Case Asc(ch)=70  : ch="F" ;F
   Case Asc(ch)=71  : ch="G" ;G
   Case Asc(ch)=72  : ch="H" ;H
   Case Asc(ch)=73  : ch="I" ;I
   Case Asc(ch)=74  : ch="J" ;J
   Case Asc(ch)=75  : ch="K" ;K
   Case Asc(ch)=76  : ch="L" ;L
   Case Asc(ch)=77  : ch="M" ;M
   Case Asc(ch)=78  : ch="N" ;N
   Case Asc(ch)=79  : ch="O" ;O
   Case Asc(ch)=80  : ch="P" ;P
   Case Asc(ch)=81  : ch="Q" ;Q
   Case Asc(ch)=82  : ch="R" ;R
   Case Asc(ch)=83  : ch="S" ;S
   Case Asc(ch)=84  : ch="T" ;T
   Case Asc(ch)=85  : ch="U" ;U
   Case Asc(ch)=86  : ch="V" ;V
   Case Asc(ch)=87  : ch="W" ;W
   Case Asc(ch)=88  : ch="X" ;X
   Case Asc(ch)=89  : ch="Y" ;Y
   Case Asc(ch)=90  : ch="Z" ;Z
   Case Asc(ch)=97  : ch="A" ;a
   Case Asc(ch)=98  : ch="B" ;b
   Case Asc(ch)=99  : ch="C" ;c
   Case Asc(ch)=100 : ch="D" ;d
   Case Asc(ch)=101 : ch="E" ;e
   Case Asc(ch)=102 : ch="F" ;f
   Case Asc(ch)=103 : ch="G" ;g
   Case Asc(ch)=104 : ch="H" ;h
   Case Asc(ch)=105 : ch="I" ;i
   Case Asc(ch)=106 : ch="J" ;j
   Case Asc(ch)=107 : ch="K" ;k
   Case Asc(ch)=108 : ch="L" ;l
   Case Asc(ch)=109 : ch="M" ;m
   Case Asc(ch)=110 : ch="N" ;n
   Case Asc(ch)=111 : ch="O" ;o
   Case Asc(ch)=112 : ch="P" ;p
   Case Asc(ch)=113 : ch="Q" ;q
   Case Asc(ch)=114 : ch="R" ;r
   Case Asc(ch)=115 : ch="S" ;s
   Case Asc(ch)=116 : ch="T" ;t
   Case Asc(ch)=117 : ch="U" ;u
   Case Asc(ch)=118 : ch="V" ;v
   Case Asc(ch)=119 : ch="W" ;w
   Case Asc(ch)=120 : ch="X" ;x
   Case Asc(ch)=121 : ch="Y" ;y
   Case Asc(ch)=122 : ch="Z" ;z
   Case Asc(ch)=128 : ch="C" ;Ç
   Case Asc(ch)=129 : ch="U" ;ü
   Case Asc(ch)=130 : ch="E" ;é
   Case Asc(ch)=131 : ch="A" ;â
   Case Asc(ch)=132 : ch="A" ;ä
   Case Asc(ch)=133 : ch="A" ;à
   Case Asc(ch)=134 : ch="A" ;å
   Case Asc(ch)=135 : ch="C" ;ç
   Case Asc(ch)=136 : ch="E" ;ê
   Case Asc(ch)=137 : ch="E" ;ë
   Case Asc(ch)=138 : ch="E" ;è
   Case Asc(ch)=139 : ch="I" ;ï
   Case Asc(ch)=140 : ch="I" ;î
   Case Asc(ch)=141 : ch="I" ;ì
   Case Asc(ch)=142 : ch="A" ;-
   Case Asc(ch)=143 : ch="A" ;+
   Case Asc(ch)=144 : ch="E" ;+
   Case Asc(ch)=147 : ch="O" ;ô
   Case Asc(ch)=148 : ch="O" ;ö
   Case Asc(ch)=149 : ch="O" ;=
   Case Asc(ch)=150 : ch="U" ;û
   Case Asc(ch)=151 : ch="U" ;ù
   Case Asc(ch)=152 : ch="Y" ;ÿ
   Case Asc(ch)=153 : ch="O" ;Ö
   Case Asc(ch)=154 : ch="U" ;_
   Case Asc(ch)=160 : ch="A" ;á
   Case Asc(ch)=161 : ch="U" ;ù
   Case Asc(ch)=162 : ch="O" ;ó
   Case Asc(ch)=163 : ch="U" ;ú
   Case Asc(ch)=164 : ch="N" ;ñ
   Case Asc(ch)=165 : ch="N" ;Ñ
   Case Asc(ch)=181 : ch="A" ;-
   Case Asc(ch)=182 : ch="A" ;-
   Case Asc(ch)=183 : ch="A" ;+
   Case Asc(ch)=198 : ch="A" ;ã
   Case Asc(ch)=199 : ch="A" ;+
   Case Asc(ch)=210 : ch="E" ;-
   Case Asc(ch)=211 : ch="E" ;-
   Case Asc(ch)=212 : ch="E" ;+
   Case Asc(ch)=214 : ch="I" ;-
   Case Asc(ch)=215 : ch="I" ;+
   Case Asc(ch)=216 : ch="I" ;Ï
   Case Asc(ch)=222 : ch="I" ;Ý
   Case Asc(ch)=224 : ch="O" ;Ó
   Case Asc(ch)=226 : ch="O" ;Ô
   Case Asc(ch)=227 : ch="O" ;Ò
   Case Asc(ch)=228 : ch="O" ;õ
   Case Asc(ch)=229 : ch="O" ;i
   Case Asc(ch)=233 : ch="U" ;+
   Case Asc(ch)=234 : ch="U" ;Ý
   Case Asc(ch)=235 : ch="U" ;+
   Case Asc(ch)=236 : ch="Y" ;ý
   Case Asc(ch)=237 : ch="Y" ;Ý
   OtherWise: ch=" "
  EndSwitch
  sn=sn+ch
EndFor
Return Upper(sn)
EndProc

;-------------------------------------------------------------------------------

Proc EMITENTES()

ARQ = "\\Sistemas\\Exporta\\Dados\\"+"NFEEMITE.TXT"
ArqErro = "\\Sistemas\\Exporta\\Dados\\"+"ERREMITE.TXT"
Deleta_Arquivo(ARQ)
Deleta_Arquivo(ArqErro)

{Tools} {More} {Directory} {\\Sistemas\\Cadastro} 
{Ask} {\\Sistemas\\Cadastro\\Destinat} Check
Moveto [Codigo           ] TypeIn "~VSDGEMPRESA"
Moveto [Tipo             ] TypeIn "E"
Do_It!

NR = NRecords("Answer")
FileWrite Append ARQ From "EMITENTE|"+StrVal(NR)+"\n"
FileWrite Append ArqErro From "Codigo "+Completa("Razao Social",41," ")+"Motivo \n"

While Not EOT() And Recno()>0  
  Barra(NR, RecNo())
  Aguarde("Aguarde, Gerando Emitentes "+BARRA_STRING)
  Erro = False
  IE = ""
  {View} {Cidades}
  Moveto [Cidade]
  Locate[Answer->Cidade]
  If RetVal 
     Then If Not IsBlank([Pais]) And [Pais]<>"BRASIL"
             Then CODMUN ="9999999"
                  NOMMUN ="EXTERIOR"
                  UF     ="EX"
                  CODPAIS=""
             Else CODMUN = StrVal([Codigo_Cidade])
                  NOMMUN =RTrim([Cidade])
                  UF     =RTrim([UF])
                  CODPAIS=StrVal([Codigo_Pais])
          EndIf 
     Else FileWrite Append ArqErro From Completa([Codigo],7," ")+Completa([Razao Social], 41," ")+"Nao foi encontrada a cidade "+[Answer->Cidade]+" \n"
          ;Mensagem("NÆo foi encontrada a cidade "+[Answer->Cidade]+" Verificar o Candastro")
          Erro = True
          ;QuitLoop
  Endif
  ClearImage
   
  FileWrite Append ARQ From "A|1.01"+"\n"
  LINHA="C|"
  Switch
    Case [Tipo Pessoa]="FISICA"   : LINHA=LINHA+"CPF|"
    Case [Tipo Pessoa]="JURIDICA" : LINHA=LINHA+"CNPJ|"
    OtherWise                     : LINHA=LINHA+"|"
  EndSwitch
  PegaEndereco(RTrim([Answer->Endereco]))
  If (Tira_CharNum([CGC]) = "") Or (Tira_CharNum(SubStr([CGC],1,9)) = "0000000")
     Then FileWrite Append ArqErro From Completa([Codigo],7," ")+Completa([Razao Social], 41," ")+"CNPJ/CPF Invalido \n"
          ;Mensagem("CNPJ/CPF Inv lido !// Corrigir Cadastro !")
          Erro = True
          ;QuitLoop
     Else If Not Checa_CGC_CPF_Formatado([CGC])
             Then FileWrite Append ArqErro From Completa([Codigo],7," ")+Completa([Razao Social], 41," ")+"CNPJ/CPF Invalido \n"
                  Erro = True
                  ;QuitLoop
          EndIf        
  EndIf
  
  IE = [IE]
  If IE = "ISENTO"
     Then FileWrite Append ArqErro From Completa([Codigo],7," ")+Completa([Razao Social], 41," ")+"IE: ISENTO nao permitido \n"
          Erro = True
  EndIf
  
  If End_Logradouro = ""
     Then FileWrite Append ArqErro From Completa([Codigo],7," ")+Completa([Razao Social], 41," ")+"Endereco: Logradouro nao informado \n"
          Erro = True
  EndIf   
 
  If End_Numero = ""
     Then FileWrite Append ArqErro From Completa([Codigo],7," ")+Completa([Razao Social], 41," ")+"Endereco: Numero nao informado \n"
          Erro = True
  EndIf
 
  If [Bairro] = ""
     Then FileWrite Append ArqErro From Completa([Codigo],7," ")+Completa([Razao Social], 41," ")+"Endereco: Bairro nao informado \n"
          Erro = True
  EndIf
  
  LINHA=LINHA+Tira_CharNum([CGC])+"|"+
        Tira_CharEspecial(RTrim([Razao Social]))+"|"+
        Tira_CharEspecial(RTrim([Nome Fantasia EmitDest]))+"|"+
        Tira_CharEspecial(RTrim(IE))+"|"+
        "|"+
        Tira_CharNum(RTrim([IM]))+"|"+
        "|"+
        Tira_CharEspecial(End_Logradouro)+"|"+
        Tira_CharEspecial(End_Numero)+"|"+
        Tira_CharEspecial(End_Complemento)+"|"+
        Tira_CharEspecial(RTrim([Answer->Bairro]))+"|"+
        CODMUN+"|"+
        Tira_CharEspecial(NOMMUN)+"|"+
        UF+"|"+
        Tira_CharNum([Answer->CEP])+"|"+
        CODPAIS+"|"+
        Tira_CharEspecial(RTrim([Answer->Pais]))+"|"+
        Tira_CharNum([Answer->Telefone])+"|"

  FileWrite Append ARQ From LINHA+"\n"

  Moveto "Answer"
  Skip
EndWhile

ClearAll
{Tools} {More} {Directory} {\\Sistemas\\Exporta}
If Not Erro 
   Then MSG1="EMITENTES      -> ["+SubStr(Directory(),1,2)+ARQ+"]//"
        Deleta_Arquivo(ArqErro)
   ;Else Deleta_Arquivo(ARQ)
EndIf
   
EndProc
;-------------------------------------------------------------------------------


Proc CLIENTES()

ARQ = "\\Sistemas\\Exporta\\Dados\\"+"NFECLIEN.TXT"
ArqErro = "\\Sistemas\\Exporta\\Dados\\"+"ERRCLIEN.TXT"
Deleta_Arquivo(ARQ)
Deleta_Arquivo(ArqErro)

{Tools} {More} {Directory} {\\Sistemas\\Cadastro} 
{Ask} {\\Sistemas\\Cadastro\\Destinat} Check
Moveto [Codigo           ] Example "Codc" TypeIn ",>=~VSDGDESTINATINI, <=~VSDGDESTINATFIM"
Moveto [Tipo             ] TypeIn "C"
Moveto [Inativo          ] TypeIn "Not S"
Do_It!

NR = NRecords("Answer")
FileWrite Append ARQ From "CLIENTE|"+StrVal(NR)+"\n"
FileWrite Append ArqErro From "Codigo "+Completa("Razao Social",41," ")+"Motivo \n"
While Not EOT() And Recno()>0
  Barra(NR, RecNo())
  Aguarde("Aguarde, Gerando Clientes "+BARRA_STRING)
  Erro = False
  IE = ""
  Codigo = ""
  {View} {Cidades}
  Moveto [Cidade]
  Locate[Answer->Cidade]
  If RetVal 
     Then If Not IsBlank([Pais]) And [Pais]<>"BRASIL"
             Then CODMUN ="9999999"
                  NOMMUN ="EXTERIOR"
                  UF     ="EX"
                  CODPAIS=""
             Else CODMUN = StrVal([Codigo_Cidade])
                  NOMMUN =RTrim([Cidade])
                  UF     =RTrim([UF])
                  CODPAIS=StrVal([Codigo_Pais])
          EndIf
     Else CODMUN  = ""
          NOMMUN  = ""
          UF      = ""
          CODPAIS = ""
  Endif
  ClearImage

  PegaEndereco(RTrim([Answer->Endereco]))
  
  If (Tira_CharNum([CGC]) = "") Or (Tira_CharNum(SubStr([CGC],1,9)) = "0000000")
     Then FileWrite Append ArqErro From Completa([Codigo],7," ")+Completa([Razao Social], 41," ")+"CNPJ/CPF Invalido \n"
          Erro = True
     Else If Not Checa_CGC_CPF_Formatado([CGC])
             Then FileWrite Append ArqErro From Completa([Codigo],7," ")+Completa([Razao Social],41," ")+"CNPJ/CPF Invalido \n"
                  Erro = True
          EndIf        
  EndIf
 
  If [Tipo Pessoa]=""
     Then FileWrite Append ArqErro From Completa([Codigo],7," ")+Completa([Razao Social],41," ")+"Tipo de pessoa (Fisica ou Juridica) nao informado \n"
          Erro = True
  EndIf  
  
  If [Tipo Pessoa]="JURIDICA"
     Then IE = Tira_CharNum([IE])
          If IE <> "ISENTO" And []<>"NAOCONTRIBUINTE"
             Then Codigo = [Codigo]
                  If Not Valida_IE(IE,UF)
                     Then IE = ""
                  EndIf
                  Do_It!
                  Moveto [Codigo]
                  Locate Codigo     
          EndIf  
  EndIf  
  
  If CODPAIS = ""
     Then CODPAIS = "1058" 
  EndIf  
  
  FileWrite Append ARQ From "A|1.01"+"\n"
  LINHA="E|"
  Switch
    Case [Tipo Pessoa]="FISICA"   : LINHA=LINHA+"CPF|"
    Case [Tipo Pessoa]="JURIDICA" : LINHA=LINHA+"CNPJ|"
    OtherWise                     : LINHA=LINHA+"|"
  EndSwitch
  LINHA=LINHA+Tira_CharNum([CGC])+"|"+
        Tira_CharEspecial(RTrim([Razao Social]))+"|"+
        Tira_CharEspecial(RTrim(IE))+"|"+
        "|"+
        Tira_CharEspecial(End_Logradouro)+"|"+
        Tira_CharEspecial(End_Numero)+"|"+
        Tira_CharEspecial(End_Complemento)+"|"+
        Tira_CharEspecial(RTrim([Answer->Bairro]))+"|"+
        CODMUN+"|"+
        Tira_CharEspecial(NOMMUN)+"|"+
        UF+"|"+
        Tira_CharNum([Answer->CEP])+"|"+
        CODPAIS+"|"+
        Tira_CharEspecial(RTrim([Answer->Pais]))+"|"+
        Tira_CharNum([Answer->Telefone])+"|"
  
  FileWrite Append ARQ From LINHA+"\n"

  Moveto "Answer"
  Skip
EndWhile
ClearAll
{Tools} {More} {Directory} {\\Sistemas\\Exporta}
If Not Erro 
   Then MSG2="CLIENTES       -> ["+SubStr(Directory(),1,2)+ARQ+"]//"
        Deleta_Arquivo(ArqErro)
   ;Else Deleta_Arquivo(ARQ)
EndIf

EndProc
;-------------------------------------------------------------------------------


Proc PRODUTOS()

ARQ = "\\Sistemas\\Exporta\\Dados\\"+"NFEPRODU.TXT"
ArqErro = "\\Sistemas\\Exporta\\Dados\\"+"ERRPRODU.TXT"
Deleta_Arquivo(ARQ)
Deleta_Arquivo(ArqErro)


{Ask} {\\Sistemas\\Estoque\\Itens} Check
Moveto [Codigo do Item   ] Example "codit"
Moveto [Inativo          ] TypeIn "Not S"
Do_It!
ClearAll


View "\\Sistemas\\Vendas\\TbprIte"
View "Answer"
NR = NRecords("Answer")
FileWrite Append ARQ From "PRODUTO|"+StrVal(NR)+"| \n"
FileWrite Append ArqErro From Completa("Codigo",11," ")+Completa("Descricao do Item",41," ")+"Motivo \n"
Erro = False

Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Gerando Produtos"+BARRA_STRING)

  PRECO=BlankNum()
  If Not IsBlank(VSDGTABELA)
     Then Moveto "\\Sistemas\\Vendas\\TbPrIte"
          Moveto [Codigo da Tabela]
          Locate VSDGTABELA,[Answer->Codigo do Item]
          If RetVal
             Then PRECO=[Preco Unitario]
          EndIf
          Moveto "Answer"
  EndIf

  FileWrite Append ARQ From "A|1.01"+"\n"
  LINHA="I|"
  LINHA=LINHA+
        [Codigo do Item]+"|"+
        Tira_CharEspecial(RTrim([Descricao do Item]))+"|"+
        "|"+
        ;RTrim([Codigo de Barras])+"|"+
        RTrim([NCM])+"|"+
        "|"+
        "|"+
        RTrim([Unidade Fiscal])+"|"+
        MONTA_STRING(Format("W12.2,EIC",PRECO),"ND","",0)+"|"+
        "|"+
        "|"+
        "|"+
        "|"
  FileWrite Append ARQ From LINHA+"\n"

  LINHA="M|0|1|"
  FileWrite Append ARQ From LINHA+"\n"
  
  If SubStr([Tipo Tributacao],2,2) = ""
     Then FileWrite Append ArqErro From Completa([Codigo do Item],11," ")+Completa([Descricao do Item],41," ")+"Tipo Tributacao nao foi preenchido \n"
          Erro = True
  EndIf     
  LINHA="N|"
  LINHA=LINHA+SubStr([Tipo Tributacao],2,2)+
        "|"+
        "|"+
        MONTA_STRING(Format("W12.2,EIC",[Aliquota de ICMS]),"ND","",0)+"|"+
        MONTA_STRING(Format("W12.2,EIC",[Aliquota Reduzida BCICMS]),"ND","",0)+"|"+
        "|"+
        "|"+
        "|"
  FileWrite Append ARQ From LINHA+"\n"



; LINHA="M|1|1"
; FileWrite Append ARQ From LINHA+"\n"
;
; LINHA="O|"
; LINHA=LINHA+
;       "|"+
;       "|"+
;       "|"
; FileWrite Append ARQ From LINHA+"\n"

  Moveto "Answer"
EndScan
Do_It!
ClearAll

If Not Erro 
   Then MSG3="PRODUTOS       -> ["+SubStr(Directory(),1,2)+ARQ+"]//"
        Deleta_Arquivo(ArqErro)
   ;Else Deleta_Arquivo(ARQ)
EndIf

EndProc
;-------------------------------------------------------------------------------



Proc TRANSPORTADORAS()

ARQ = "\\Sistemas\\Exporta\\Dados\\"+"NFETRANS.TXT"
ArqErro = "\\Sistemas\\Exporta\\Dados\\"+"ERRTRANS.TXT"
Deleta_Arquivo(ARQ)
Deleta_Arquivo(ArqErro)

{Ask} {\\Sistemas\\Vendas\\Transpor} Check
Do_It!
ClearAll

CoEdit "Answer"
NR = NRecords("Answer")
FileWrite Append ARQ From "TRANSPORTADORA|"+StrVal(NR)+"\n"
FileWrite Append ArqErro From "Codigo "+Completa("Razao Social",41," ")+"Motivo \n"
Texto ="Tipo de pessoa (Fisica ou Juridica) nao informado \n"
Erro=False
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Gerando Transportadoras"+BARRA_STRING)
  IE = ""
  codigo = ""
  If (Tira_CharNum([CGC Transport]) = "") Or (Tira_CharNum(SubStr([CGC Transport],1,9)) = "0000000")
     Then FileWrite Append ArqErro From Completa([Codigo da Transportadora],7," ")+Completa([Razao Social Transport], 41," ")+"CNPJ/CPF Invalido \n"
          Erro = True
     Else If Not Checa_CGC_CPF_Formatado([CGC Transport])
             Then FileWrite Append ArqErro From Completa([Codigo da Transportadora],7," ")+Completa([Razao Social Transport],41," ")+"CNPJ/CPF Invalido \n"
                  Erro = True
          EndIf        
  EndIf
  
  If (Tipo_CGC_CPF([CGC Transport])="")
     Then FileWrite Append ArqErro From Completa([Codigo da Transportadora],7," ")+Completa([Razao Social Transport],41," ")+Texto
          Erro = True
  EndIf    
  
  If (Tipo_CGC_CPF([CGC Transport])="CGC") and ([UF Transport] <> "") and ([IE Transport] <> "")
     Then IE = Tira_CharNum([IE Transport])
          If IE <> "ISENTO" And []<>"NAOCONTRIBUINTE"
             Then Codigo = [Codigo da Transportadora]
                  If Not Valida_IE(IE,[UF Transport])
                     Then IE = ""
                  EndIf   
                  Do_It!
                  Moveto [Codigo da Transportadora]
                  Locate Codigo
          EndIf  
  EndIf    

  FileWrite Append ARQ From "A|1.01"+"\n"
  LINHA="X|"
  Switch
    Case Tipo_CGC_CPF([CGC Transport])="CPF"   : LINHA=LINHA+"CPF|"
    Case Tipo_CGC_CPF([CGC Transport])="CGC"   : LINHA=LINHA+"CNPJ|"
    OtherWise                                  : LINHA=LINHA+"|"
  EndSwitch
  LINHA=LINHA+Tira_CharNum([CGC Transport])+"|"+
        Tira_CharEspecial(RTrim([Razao Social Transport]))+"|"+
        RTrim(IE)+"|"+
        Tira_CharEspecial(RTrim([Answer->Endereco Transport]))+"|"+
        Tira_CharEspecial(RTrim([Answer->Cidade Transport]))+"|"+
        Tira_CharEspecial(RTrim([Answer->UF Transport]))+"|"

  FileWrite Append ARQ From LINHA+"\n"

  Moveto "Answer"
EndScan
Do_It!
ClearAll

If Not Erro 
   Then MSG4="TRANSPORTADORAS-> ["+SubStr(Directory(),1,2)+ARQ+"]//"
        Deleta_Arquivo(ArqErro)
   ;Else Deleta_Arquivo(ARQ)
EndIf
EndProc
;-------------------------------------------------------------------------------

;******************************************************************************
;*Procedimento responsavel pela montagem do cgc/cpf
;******************************************************************************
Proc MONTA_STRING(MSTRING,NUMALF,OP,TM)
M_NOVO = ""
Switch
   Case NUMALF = "N":
        For I From 1 to Len(MSTRING)
            If (Asc(SubStr(MSTRING,I,1)) >= 48) And
               (Asc(SubStr(MSTRING,I,1)) <= 57)
               Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
            EndIf
        EndFor
   Case NUMALF = "A":
        For I From 1 to Len(MSTRING)
            If (Asc(SubStr(MSTRING,I,1)) >= 065) And
               (Asc(SubStr(MSTRING,I,1)) <= 122)
               Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
            EndIf
        EndFor
   Case NUMALF = "AN":
        For I From 1 to Len(MSTRING)
            If (Asc(SubStr(MSTRING,I,1)) >= 065) And
               (Asc(SubStr(MSTRING,I,1)) <= 122) Or
               (Asc(SubStr(MSTRING,I,1)) >= 48) And
               (Asc(SubStr(MSTRING,I,1)) <= 57)
               Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
            EndIf
        EndFor
   Case NUMALF = "ND":
        If MSTRING=""        Then MSTRING="0" EndIf
        If RTrim(MSTRING)="" Then MSTRING="0" EndIf
        For I From 1 to Len(MSTRING)
            If (Asc(SubStr(MSTRING,I,1)) >= 48) And
               (Asc(SubStr(MSTRING,I,1)) <= 57) Or
               (Asc(SubStr(MSTRING,I,1)) = 46)
               Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
            EndIf
        EndFor
        If M_NOVO = "0"    Then M_NOVO = "" EndIf
        If M_NOVO = "0,00" Then M_NOVO = "" EndIf
   Case NUMALF = "D":
        MSTRING=AlinhM(LTrim(StrVal(MSTRING)),10)
        M_NOVO = SubStr(MSTRING,7,4)+
                 SubStr(MSTRING,4,2)+
                 SubStr(MSTRING,1,2)
EndSwitch
If TM>0 And Len(M_NOVO)>TM
   Then M_NOVO=""
EndIf
IF OP="A"
   Then M_NOVO=ALINHM(M_NOVO,14)
EndIf

Return(M_NOVO)
EndProc ; (Monta_String)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"     : Campo="NO"
            Case Campo="TG_TABELA"      : Campo="TG_EMPRESA"
            Case Campo="TG_OPCOES"      : Campo="TG_TABELA"
            Case Campo="TG_DESTINATINI" : Campo="TG_OPCOES"
                                          If VSDGOPCAO[2]=True or VSDGOPCAO[5]
                                             Then 
                                             Else Campo="TG_OPCOES"
                                                  VSDGDESTINATINI=""
                                                  VSDGDESTINATFIM=""
                                          EndIf 
            Case Campo="TG_DESTINATFIM" : If VSDGOPCAO[2]=True or VSDGOPCAO[5]
                                             Then Campo="TG_DESTINATINI"
                                             Else Campo="TG_OPCOES"
                                                  VSDGDESTINATINI=""
                                                  VSDGDESTINATFIM=""
                                          EndIf   
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"     : Campo="TG_TABELA"
                    Case Campo="TG_TABELA"      : Campo="TG_OPCOES"
                    Case Campo="TG_OPCOES"      : If VSDGOPCAO[2]=True or VSDGOPCAO[5]
                                                     Then Campo="TG_DESTINATINI"
                                                     Else Campo="YES"
                                                          VSDGDESTINATINI=""
                                                          VSDGDESTINATFIM=""
                                                  EndIf
                    Case Campo="TG_DESTINATINI" : If VSDGOPCAO[2]=True or VSDGOPCAO[5]
                                                     Then Campo="TG_DESTINATFIM"
                                                     Else Campo="YES"
                                                          VSDGDESTINATINI=""
                                                          VSDGDESTINATFIM=""
                                                  EndIf 
                                                  
                    Case Campo="TG_DESTINATFIM" : Campo="YES" 
                                                  If VSDGOPCAO[2]=True or VSDGOPCAO[5]
                                                     Then 
                                                     Else VSDGDESTINATINI=""
                                                          VSDGDESTINATFIM=""
                                                  EndIf                              
                                                                            
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="":
     MSG_CAMPO=""
  Case Campo="TG_TABELA":
     MSG_CAMPO="Informe uma tabela p/ gerar produto com o pre‡o"
  Case Campo="TG_OPCOES":
     MSG_CAMPO="Informe o tipo do arquivo que sera gerado"     
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"

If Not IsAssigned(NOMEMPRESA)       Then NOMEMPRESA="Teste"  EndIf

LimpAguarde()

VSDGEMPRESA =""
VSDGTABELA   =""
VSDGDESTINATINI=""
VSDGDESTINATFIM=""
Array VSDGOPCAO[5]
VSDGOPCAO[5]=True

While True

  ShowDialog "Exporta‡„o NF-e - Cadastros" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 16 Width 72

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Tabela"  For "TG_TABELA"
    Accept @ 03,01 Width 08 "A5"  Picture "#*#" Tag "TG_TABELA" To VSDGTABELA
    Accept @ 03,10 Width 24 "A30" Picture "!*!" Tag "TG_NOMTAB" To VSDGNOMTAB

    Label  @ 05,00 "Op‡”es de Tabelas" For "TG_OPCOES"
    CheckBoxes @6,00 Height 5 Width 20 Tag "TG_OPCOES"
    "Emitentes      " to VSDGOPCAO[1],
    "Clientes       " to VSDGOPCAO[2],
    "Produtos       " to VSDGOPCAO[3],
    "Transportadoras" to VSDGOPCAO[4],
    "Todas          " to VSDGOPCAO[5]
    
    Label  @ 00,35 "Intervalo C¢digo de"  For "TG_DESTINATINI"
    Accept @ 01,36 Width 14 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINATINI" To VSDGDESTINATINI
    Label  @ 01,50 "at‚"  For "TG_DESTINATFIM"
    Accept @ 01,55 Width 14 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINATFIM" To VSDGDESTINATFIM
    
    Pushbutton @ 12,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 12,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA) And
     (VSDGOPCAO[1]=True or VSDGOPCAO[5]=True)
     Then Mensagem("Informe uma Empresa !")
          Loop
  EndIf

	MSG1=""
	MSG2=""
	MSG3=""
	MSG4=""

  If VSDGOPCAO[1]=True or VSDGOPCAO[5]=True Then EMITENTES()       EndIf
  If VSDGOPCAO[2]=True or VSDGOPCAO[5]=True Then CLIENTES()        EndIf
  If VSDGOPCAO[3]=True or VSDGOPCAO[5]=True Then PRODUTOS()        EndIf
  If VSDGOPCAO[4]=True or VSDGOPCAO[5]=True Then TRANSPORTADORAS() EndIf

  LimpAguarde()

	MSG="Arquivo(s) gerado(s): // //"
	Mensagem(MSG+MSG1+MSG2+MSG3+MSG4)

EndWhile
ClearAll
Release Vars All
Release Procs All
