;** INFCE54  *******************************************************************
;*  Importacao de NFCeïs              Layout 028                       - NFCE  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 27/06/2019 por Kamila Gomes
;Ultima Alteracao: 02/07/2019 por Kamila gomes 
;Motivo Alteracao: Ajustes pega s‚rie do NFCE 
;Ultima Alteracao: 23/08/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes layout 028, novos valores registro 058 e 045
;Ultima Alteracao: 02/09/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes frete por conta 0 sem frete
;Ultima Alteracao: 02/09/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes layout 028, novos valores registro 058 e 045
;Ultima Alteracao: 10/09/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes item cancelado desprezar
;Ultima Alteracao: 04/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes total pis erro opaf
;Ultima Alteracao: 06/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes total item truncar 
;Ultima Alteracao: 18/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes situacao do item nfce inutilizada   
;Ultima Alteracao: 27/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nfce inutilizada   

;*******************************************************************************
;* Carrega F1 Personalizado do ShowDialog                                      *
;*******************************************************************************
Proc SDCarrega_F1()

;----- Se existe ECF's cadastradas para a EMPRESA ------------------------------
{Ask} {\\Sistemas\\Vendas\\Opaf_ecf} Check
Moveto [Codigo da Empresa   ] TypeIn "~VSDGEMPRESA.."
Moveto [Inativo             ] TypeIn "not S"
Do_It!
ClearImage
ClearImage

If IsEmpty("Answer")
   Then MSG = "N„o h  ECF cadastrada para a empresa "+VSDGEMPRESA+"!" 
        Return False
EndIf

;----- Verifica se tem mais um N§ de ECF cadastrado para a mesma EMPRESA -------
{Ask} {\\Sistemas\\Vendas\\Opaf_ecf} 
Moveto [Numero de Serie     ] TypeIn "Calc Count as Calculo"
Moveto [Numero ECF          ] Check
Moveto [Codigo da Empresa   ] TypeIn "~VSDGEMPRESA.."
Moveto [Inativo             ] TypeIn "not S"
Do_It!
ClearImage
ClearImage

View "Answer"
Scan
  If [Calculo]>1
     Then ClearImage
          MSG = "H  mais de um n§ de PDV cadastrada para a empresa "+VSDGEMPRESA+"!" 
          Return False
  EndIf   
EndScan

;---- Monta os ECF's de acordo com a EMPRESA -----------------------------------  
{Ask} {\\Sistemas\\Vendas\\Opaf_ecf}
Moveto [Numero de Serie     ] Check
Moveto [Numero ECF          ] Check
Moveto [Modelo Impressora   ] Check
Moveto [Reinicio operacao   ] Check
Moveto [Codigo do Usuario   ] Check
Moveto [Codigo da Empresa   ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Inativo             ]       TypeIn "not S"
Do_It!
ClearImage
ClearImage

View "Answer" 
Monta_Opcoes("ECF","F1_Temp")

Return True

EndProc ;SDCarrega_F1()

;*******************************************************************************
;* Proximo arquivo RT                                                          *
;*******************************************************************************
Proc ArqRT()
Private num

Aguarde("Aguardando resposta do INTEGRADOR")

{Tools} {Info} {Inventory} {Files} TypeIn VSDGCAMINHO+"\\RT*.T" Enter ClearImage

If IsEmpty("List")
   Then num=0
   Else View "List"
        End
        num=SubStr([Name],3,6)
        If E_Numerico(num)
           Then num=Numval(num)
           Else num=0
        EndIf   
        ClearAll
EndIf

num=num+1
CriaProximo_ArqT(num)

For wc From 1 to 6  
  Aguarde("Aguardando resposta do INTEGRADOR tentativa "+StrVal(wc)+"/6 de 15 Segundos")

  Sleep 15000
  If IsFile(ARQL) Then QuitLoop EndIf
  
EndFor
LimpAguarde()

If Not IsFile(ARQL) 
   Then MSG    ="Arquivo de Log de retorno nÆo gerado !// //"
        MSG=MSG+"Verificar se INTEGRADOR do OPAF esta em execu‡Æo !//"
        MSG=MSG+"Caso nÆo esteja em execu‡Æo, carrega-lo e repetir esta opera‡Æo !"
        Mensagem(MSG)
        Return False
EndIf

Importa(ARQL) ; Importa LOG
STATUS=""
MSG="Arquivo LOG "+ARQL+"// //"
View "Impopaf"
Scan
  If SubStr([Impopaf->Texto],1,6)="INICIO"  Or 
     SubStr([Impopaf->Texto],1,3)="FIM"     Or 
     SubStr([Impopaf->Texto],1,6)="STATUS" 
     Then STATUS=SubStr([Impopaf->Texto],1,10)
          MSG=MSG+[Texto]+"//"
  EndIf             
EndScan
If STATUS<>"STATUS; OK"
   Then MSG=MSG+"//Verificar o arquivo LOG as ocorrˆncias// //"
        Mensagem(MSG)
        Return False
   Else COR_MENSAGEM="1"
        Mensagem(MSG)
EndIf   

Importa(ARQS) ; Importa Dados


Return True
EndProc

;*******************************************************************************
;* Cria Proximo arquivo RT                                                     *
;*******************************************************************************
Proc CriaProximo_ArqT(num)
Private num

ARQRET="RT"+AlinhM(STrVal(num),6)
ARQ=VSDGCAMINHO+"\\"+ARQRET+".L"+VSDGNECF
If IsFile(ARQ) Then Deleta_Arquivo(ARQ) EndIf

ARQ=VSDGCAMINHO+"\\"+ARQRET+".S"+VSDGNECF
If IsFile(ARQ) Then Deleta_Arquivo(ARQ) EndIf

ARQ=VSDGCAMINHO+"\\RETORNO.TXT"
If IsFile(ARQ) Then Deleta_Arquivo(ARQ) EndIf
        
Print File ARQ "101"
Print File ARQ AlinhM(Tira_CharNum(CNPJ_Empr),14)
Print File ARQ "RET"
Print File ARQ AlinhM(StrVal(Day(VSDGDTINI)),2)+AlinhM(StrVal(Month(VSDGDTINI)),2)+AlinhM(StrVal(Year(VSDGDTINI)),4)
Print File ARQ SubStr(VSDGHRINI,1,2)+SubStr(VSDGHRINI,4,2)+"00"
Print File ARQ AlinhM(StrVal(Day(VSDGDTFIM)),2)+AlinhM(StrVal(Month(VSDGDTFIM)),2)+AlinhM(StrVal(Year(VSDGDTFIM)),4)
If SubStr(VSDGHRFIM,1,2)="24"
   Then Print File ARQ "235959"
   Else Print File ARQ SubStr(VSDGHRFIM,1,2)+SubStr(VSDGHRFIM,4,2)+"59"
EndIf   
Print File ARQ "0000"
Print File ARQ "028"
Print File ARQ "\n"

Print File ARQ "111\n"
Print File ARQ "112\n"
Print File ARQ "113\n"
Print File ARQ "117\n"
Print File ARQ "118\n"
Print File ARQ "145\n"
Print File ARQ "158\n"

Print File ARQ "099"
Print File ARQ AlinhM("7",10)
Print File ARQ "\n"

ARQL=VSDGCAMINHO+"\\"+ARQRET+".L"+VSDGNECF
ARQS=VSDGCAMINHO+"\\"+ARQRET+".S"+VSDGNECF
ARQT=VSDGCAMINHO+"\\"+ARQRET+".T"

Copia_Arquivo(ARQ+" "+ARQT)
Deleta_Arquivo(ARQ)

EndProc

;*******************************************************************************
;* Importa dados TXT -> DB                                                     *
;*******************************************************************************
Proc Importa(ARQUIVO)
Private ARQUIVO

If Not IsTable("Impopaf")
   Then {Create} {impopaf}  "Texto" Enter  "m70" Do_It! 
EndIf

Aguarde("Convertendo TXT->DB ["+ARQUIVO+"]")
Empty("Impopaf")
If IsAssigned(varinner) Then release vars varinner  EndIf

FileRead ARQUIVO to varinner
Edit "Impopaf"
pos=1
While True
  posf=searchFrom("\n",varinner,pos)
  if posf=0 then quitLoop endif
  [Texto]=substr(varinner,pos,(posf-pos))
  Down
  pos=posf+1
EndWhile
Do_It!
ClearAll

If ARQUIVO = ARQS Then Cria_Registros() EndIf

If IsAssigned(varinner) Then release vars varinner  EndIf

Endproc

;*******************************************************************************
;* Cria tabelas de registros                                                   *
;*******************************************************************************
Proc Cria_Registros()
Private NOMREG

Array REGOPAF[9]
REGOPAF[1]="Opaf001"
REGOPAF[2]="Opaf011"
REGOPAF[3]="Opaf012"
REGOPAF[4]="Opaf013"
REGOPAF[5]="Opaf017"
REGOPAF[6]="Opaf018"
REGOPAF[7]="Opaf045"
REGOPAF[8]="Opaf058"
REGOPAF[9]="Opaf099"

NOMREG = ""
For i From 1 To ArraySize(REGOPAF)
    NOMREG= SubStr(REGOPAF[i],5,3)
    If Not IsTable(REGOPAF[i])
       Then {Create} TypeIn REGOPAF[i] Enter TypeIn "Texto" Enter TypeIn "m70" Do_It! 
    EndIf
    ClearAll
    
    {Ask} {ImpOpaf} Enter Check
    Moveto [Texto] TypeIn "~NOMREG.." 
    Do_It!
    ClearAll
    
    Rename "Answer" REGOPAF[i]    
EndFor

EndProc  ;Cria_Registros()

;*******************************************************************************
;* Verifica C¢digo da Condi‡Æo de Pagamento                                    *
;*******************************************************************************
Proc VerCodCondPagto(PARAM)
Private AUX,PARAM

AUX = PARAM
If Len(AUX)=3
   Then LETRA = SubStr(AUX,1,2)
        Switch
          Case LETRA="10" : LETRA = "A"
          Case LETRA="11" : LETRA = "B"
          Case LETRA="12" : LETRA = "C"
          Case LETRA="13" : LETRA = "D"
          Case LETRA="14" : LETRA = "E"
          Case LETRA="15" : LETRA = "F"
          Case LETRA="16" : LETRA = "G"
          Case LETRA="17" : LETRA = "H"
          Case LETRA="18" : LETRA = "I"
          Case LETRA="19" : LETRA = "J"
          Case LETRA="20" : LETRA = "K"
          Case LETRA="21" : LETRA = "L"
          Case LETRA="22" : LETRA = "M"
          Case LETRA="23" : LETRA = "N"
          Case LETRA="24" : LETRA = "O"
          Case LETRA="25" : LETRA = "P"
          Case LETRA="26" : LETRA = "Q"
          Case LETRA="27" : LETRA = "R"
          Case LETRA="28" : LETRA = "S"
          Case LETRA="29" : LETRA = "T"
          Case LETRA="30" : LETRA = "U"
          Case LETRA="31" : LETRA = "V"
          Case LETRA="32" : LETRA = "W"
          Case LETRA="33" : LETRA = "X"
          Case LETRA="34" : LETRA = "Y"
          Case LETRA="35" : LETRA = "Z"
        EndSwitch  
        CONDPAGTO = LETRA + SubStr(AUX,3,1)
   Else CONDPAGTO = AUX
EndIf

Return CONDPAGTO                               

EndProc ;VerCodCondPagto

;*******************************************************************************
;* Processa dados NFCe                                                         *
;*******************************************************************************
Proc ProcessaC()
private clienteok

NR=NRecords("Opaf011")
opaf011ok=false

View "\\Sistemas\\Cadastro\\Tppagto"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Represen"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Estoque\\Itens"
View "Tbprcab"
View "P_Cartao"
View "ECF_C"
View "Opaf_FP"
View "CondPgto"
View "NotaC"
View "NotaI"
View "NotaV"
View "NotaIC"
CoEdit "Opaf058", "Opaf045", "Opaf013", "Opaf012", "Opaf011"
SetHighLight Current Record 23 Field 31

Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Convertendo NFCe "+Completa(StrVal(Recno())+"/"+StrVal(NR),9," ")+BARRA_STRING)
  
  DTCUPOM=DateVal(SubStr([Opaf011->Texto],29,2)+"/"+
                 SubStr([Opaf011->Texto],27,2)+"/"+
                 SubStr([Opaf011->Texto],31,4))
  HRCUPOM=SubStr([Opaf011->Texto],329,2)+":"+SubStr([Opaf011->Texto],331,2)
  
  If DTCUPOM<VSDGDTINI Then Loop EndIf
  If DTCUPOM>VSDGDTFIM Then Loop EndIf 

  CUPOM  =       SubStr([Opaf011->Texto],04,10)
  NECF   =NumVal(SubStr([Opaf011->Texto],16,02))
  
  SERIEECF="ID"+Alinhm(strval(NECF),4)+Tira_CharNum(CNPJ_EMPR)
  if rtrim(SubStr([Opaf011->Texto],1068,20))<>SERIEECF   ; saber se ‚ NFCe
     then loop
  endif    

  NRDOCTO=""
  CDDOCTO=""
  SRDOCTO=""
  NECF   =AlinhM(StrVal(NECF),2) 
  
  cupom_inutilizado=false
  
  Moveto "Opaf045"
  Scan For SubStr([Opaf045->Texto],04,10)=CUPOM and SubStr([Opaf045->Texto],16,02)=NECF
     if SubStr([Opaf045->Texto],18,01)= "1" and
        SubStr([Opaf045->Texto],20,01)<>"R"
        then
             NRDOCTO    =SubStr([Opaf045->Texto],29,06)
             CDDOCTO    ="NCE"+strval(NumVal(SubStr([Opaf045->Texto],23,03)))
             SRDOCTO    ="NCE"+strval(NumVal(SubStr([Opaf045->Texto],23,03)))
             
             if SubStr([Opaf045->Texto],20,01)="I"
                then cupom_inutilizado=true
             endif
             quitloop 
     endif
  EndScan

  Moveto "Opaf011"
  if isblank(NRDOCTO)
     then loop
  endif   

  Moveto "NotaC"
  While True
     Moveto [Codigo da Empresa]
     Locate VSDGEMPRESA,NRDOCTO,SRDOCTO
     If Not RetVal
        Then
             End Down
             [Codigo da Empresa          ]=VSDGEMPRESA
             [Numero do Documento        ]=NRDOCTO
             [Codigo do Documento        ]=CDDOCTO
             [Serie do Documento         ]=SRDOCTO
             If IsLockRecord()
                Then Del
                Else UnLockRecord     
             EndIf        
             Loop
     EndIf
     If Not IsLockRecord()
        Then QuitLoop
     EndIf   
  EndWhile   
  
  [Data de Emissao            ]=DTCUPOM
  [Data de Saida              ]=[Data de Emissao    ]
  [Hora de Saida              ]=HRCUPOM
  
  If NumVal(Substr([Opaf011->Texto],369,13))<>0
    Then [Numero DAV_PreVenda ]=Substr([Opaf011->Texto],369,13)
  EndIf
  If NumVal(Substr([Opaf011->Texto],382,13))<>0
    Then [Numero DAV_PreVenda ]=Substr([Opaf011->Texto],382,13)
  EndIf

  CODC=RTrim(SubStr([Opaf011->Texto],350,4))
  
  clienteok=false  
  if not isblank(CODC)
     then GetRecord "\\Sistemas\\Cadastro\\Destinat" CODC To Reg_Busca_Lookup
          If RetVal
             then clienteok=true
          endif
  endif       
  if clienteok  
     Then 
          [Codigo ]=CODC
     else
          [Codigo ]=VSDGCLIENTE ; cliente padrao, diversos, consumidor final
          If LTrim(RTrim(SubStr([Opaf011->Texto],101,30)))<>""
           Then [Razao Social   ]=upper(RTrim(SubStr([Opaf011->Texto],101,30)))
                [Endereco       ]=upper(RTrim(SubStr([Opaf011->Texto],131,30)))
                [Bairro         ]=upper(RTrim(SubStr([Opaf011->Texto],161,20)))
                [Telefone       ]=RTrim(SubStr([Opaf011->Texto],213,15))
                CGC_CPF=LTrim(RTrim(Substr([Opaf011->Texto],87,14)))
                Switch
                  Case Len(CGC_CPF)=11:
                       CGC_CPF=Substr(CGC_CPF,1,3)+"."+Substr(CGC_CPF,4,3)
                               +"."+Substr(CGC_CPF,7,3)+"-"+Substr(CGC_CPF,10,2)
                       [CGC        ]=CGC_CPF
                       [Tipo Pessoa]="FISICA"        
                  Case Len(CGC_CPF)=14:
                       CGC_CPF=Substr(CGC_CPF,1,2)+"."+Substr(CGC_CPF,3,3)+"."+
                               Substr(CGC_CPF,6,3)+"/"+Substr(CGC_CPF,9,4)+"-"+
                               Substr(CGC_CPF,13,2)
                       [CGC        ]=CGC_CPF
                       [Tipo Pessoa]="JURIDICA"        
                EndSwitch                   
                CID              =upper(RTrim(SubStr([Opaf011->Texto],181,20)))
                UF               =upper(RTrim(SubStr([Opaf011->Texto],211,02)))
                GetRecord "\\Sistemas\\Cadastro\\Cidades" CID,UF To Reg_Busca_Lookup
                If Not RetVal
                   Then CID=""
                        UF =""
                EndIf
                [Cidade         ]=CID
                [UF             ]=UF
          EndIf   
  EndIf
  
  CODR=AlinhM(RTrim(SubStr([Opaf011->Texto],228,4)),4)
  GetRecord "\\Sistemas\\Cadastro\\Represen" CODR To Reg_Busca_Lookup
  If Not Retval
    Then CODR=VSDGVENDEDOR
  EndIf   
  [Codigo do Representante    ]=CODR
  
  CODT=AlinhM(SubStr([Opaf011->Texto],319,5),5)
  GetRecord "\\Sistemas\\Vendas\\Tbprcab" CODT To Reg_Busca_Lookup
  If Not Retval
    Then CODT=""                     
  EndIf                                
  
  [Codigo da Tabela           ]=CODT
  [Codigo da Destinacao       ]=CODD 
  [Codigo da Transportadora   ]=VSDGTRANSP
  [Frete por Conta            ]="0"

  [Valor Mercadoria           ]=NumVal(SubStr([Opaf045->Texto],249,13))/100
  [Valor do Desconto          ]=NumVal(SubStr([Opaf045->Texto],262,13))/100
  [Valor Desconto             ]=[Valor do Desconto]
  [Valor Despesas Acessorias  ]=NumVal(SubStr([Opaf045->Texto],301,13))/100
  [Valor Mercadoria Liquido   ]=[Valor Mercadoria]-[Valor Desconto]
  [Valor Nota Fiscal          ]=NumVal(SubStr([Opaf045->Texto],614,13))/100   

  [Valor BCICMS               ]=NumVal(SubStr([Opaf045->Texto],197,13))/100
  [Valor ICMS                 ]=NumVal(SubStr([Opaf045->Texto],210,13))/100
  [Valor PIS                  ]=NumVal(SubStr([Opaf045->Texto],275,13))/100
  [Valor COFINS               ]=NumVal(SubStr([Opaf045->Texto],288,13))/100

  [Frete Incluso na Nota      ]=":"
  [Chave_Acesso_NFe           ]=SubStr([Opaf045->Texto],58,44)

  
  cupom_cancelado=false
  If SubStr([Opaf011->Texto],253,1)="C"
    Then [Situacao           ]="C"
         cupom_cancelado      =true  
  EndIf
  [Sistema Gerador            ]="CF"
  [Numero da OF               ]=AlinhM(RTrim(SubStr([Opaf011->Texto],14,4)),6)
  If PARAM_RATEIO_COMISSAO = "S"                                                     
     Then [Observacao na Nota Fiscal]=RTrim(SubStr([Opaf011->Texto],269,25))
          OBS2 = LTrim(SubStr([Opaf011->Texto],294,25))
          If OBS2<>""
             Then OBS2 = AlinhM(RTrim(SubStr(OBS2,1,4)),4)
                  GetRecord "\\Sistemas\\Cadastro\\Represen" OBS2 To COMISSAO
                  If Not RetVal
                     Then MSG = "Representante: "+OBS2+" referente a NFCe: "+NRDOCTO+"// nÆo cadastrado Verificar !"
                          Mensagem(MSG)
                     Else Moveto "NotaIC"
                          Moveto [Codigo da Empresa]
                          Locate VSDGEMPRESA,NRDOCTO,SRDOCTO
                          If Not RetVal
                             Then End Down
                                  [Codigo da Empresa        ] = VSDGEMPRESA 
                                  [Numero do Documento      ] = NRDOCTO 
                                  [Serie do Documento       ] = SRDOCTO
                                  [Item do Documento        ] = 0
                                  [Codigo do Representante  ] = COMISSAO["Codigo do Representante"]
                                  [Nome Fantasia Represent  ] = COMISSAO["Nome Fantasia Represent"]
                                  If (COMISSAO["Comissao do Representante"])<>BlankNum()
                                     Then [Comissao do Representante] = COMISSAO["Comissao do Representante"]
                                     Else [Comissao do Representante] = 0
                                  EndIf
                          EndIf
                          Moveto "NotaC"
                  EndIf   
          EndIf   
     Else [Observacao na Nota Fiscal]=RTrim(RTrim(SubStr([Opaf011->Texto],269,25))+"   "+
                                      RTrim(SubStr([Opaf011->Texto],294,25)))
  EndIf

  if not isblank([Observacao na Nota Fiscal])
     then [Observacao na Nota Fiscal]=[Observacao na Nota Fiscal]+", "
  endif   
  [Observacao na Nota Fiscal]=[Observacao na Nota Fiscal]+RTrim(SubStr([Opaf045->Texto],314,300))

    
  ;--- zera totalizadores -----------------------------------------------
  TXDESCTO_TOTAL =([Valor Desconto             ]/[Valor Mercadoria])*100 ; regra sistema
  
  GEROU_COMPDIAS = False

  Seqv    = 0
  cv      = 0
  cp      = 0
  FP      = "OU"
  NC      = ""
  vrtroco = 0
  
  TOT_PIS = 0 ;provisorio erro OPAF
  
  If Item_Cupom() 
  Then Venc_Cupom()           
       Venc_CompDias()
       
       Moveto "NotaC"
       Moveto [Codigo da Empresa]
       Locate VSDGEMPRESA,NRDOCTO,SRDOCTO
       If RetVal
          Then 
               [Valor Troco          ]=vrtroco
               
               If cv>=1 Then [Tipo de Pagamento]="V" EndIf   
               If cp>=1 Then [Tipo de Pagamento]="P" EndIf
      
               Moveto [Condicao de Pagamento]
               CODP=Rtrim(SubStr([Opaf011->Texto],367,3))
               If CODP<>""
                  Then CODP=VerCodCondPagto(CODP)
               EndIf   
               If CODP="" Or CODP="000" Then CODP="00" EndIf
               
               If CODP="" or CODP="00" 
                  Then If [Tipo de Pagamento]="V"
                          Then CODIGO_AVANCO = "..VISTA.."
                          Else CODIGO_AVANCO = "..PRAZO.."
                       EndIf
                       Moveto "CondPgto"
                       Moveto [Descricao CondPagto]
                       Locate PATTERN CODIGO_AVANCO
                       If RetVal 
                          Then CODP = [Condicao de Pagamento]  
                          else CODP = ""
                       EndIf    
                       Moveto "NotaC" 
               EndIf
               [Condicao de Pagamento] = CODP

               If FP<>""
                  Then GetRecord "\\Sistemas\\Cadastro\\Tppagto" FP To REG_BUSCA_FP
                       If RetVal
                          Then [Forma de Pagamento] = FP  
                       EndIf
               EndIf
               
               If FP="CD"
                Then [Tipo de Pagamento  ] = "P"
                     [Numero de Parcelas ] = 1
                     [Composicao de Dias ] = "1"
               EndIf
               
               If GEROU_COMPDIAS
                  Then If COM_DIAS <> "" And COM_DIAS <> BlankNum()
                         Then [Composicao de Dias       ] = COM_DIAS
                         Else [Numero de Parcelas       ] = NUM_PARC
                       EndIf  
               EndIf                
       EndIf
  EndIf

  Moveto "NotaC"
  [Valor PIS                  ]=TOT_PIS

  If cupom_inutilizado
     then  
         [Situacao                 ]="C"
         [Codigo da Destinacao     ]=""
         [Descricao da Destinacao  ]="INUTILIZADA"
         [CFO                      ]=""
         [Razao Social             ]="* * NFC-e INUTILIZADA * *"
         [Tipo Movimento Estoque   ]="S"
         [Observacao na Nota Fiscal]="ERRO CONTROLE NUMERACAO"
  endif 
  
  Controle_Dia()
  if not isblank(vsdgchapa)
     then [Codigo_Usuario]=vsdgchapa
  endif    

  UnLockRecord

  opaf011ok=True  
  Moveto "Opaf011"
EndScan 
Do_It!
ClearAll


if not opaf011ok
   then return
endif     

;***** Em 10.11.2014 por Andrey/Kamila - *****
;***** Correcao Numero de Dias e Data de Vencimento no NOTAV *****
;***** Para Qualquer tipo de forma de pagamento ******************
NR=NRecords("Opaf011")

View "NotaC"
View "NotaV"
CoEdit "Opaf045","Opaf011"
SetHighLight Current Record 23 Field 31
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Convertendo NFCe "+Completa(StrVal(Recno())+"/"+StrVal(NR),9," ")+BARRA_STRING)
  
  If SubStr([Opaf011->Texto],1,3)="011"
     Then 
          CUPOM   = SubStr([Opaf011->Texto],04,10)
          NECF    = AlinhM(StrVal(NumVal(SubStr([Opaf011->Texto],16,2))),2) 
          
          NRDOCTO = ""
          SRDOCTO = "NCE1"

          Moveto "Opaf045"
          Scan For SubStr([Opaf045->Texto],04,10)=CUPOM and SubStr([Opaf045->Texto],16,02)=NECF
             if SubStr([Opaf045->Texto],18,01)= "1" and
                SubStr([Opaf045->Texto],20,01)<>"R"
                then
                     NRDOCTO    =SubStr([Opaf045->Texto],29,06)
                     quitloop
             endif
          EndScan

          Moveto "NotaC"
          Moveto [Codigo da Empresa]
          Locate VSDGEMPRESA,NRDOCTO,SRDOCTO 
          If RetVal
             Then 
                  CONT_CT = 0
                  NOME_CT = "****"

                  Moveto "NotaV"
                  Moveto [Codigo da Empresa]
                  Locate VSDGEMPRESA,NRDOCTO,SRDOCTO
                  If RetVal
                     Then While [Codigo da Empresa   ] = VSDGEMPRESA And
                                [Numero do Documento ] = NRDOCTO     And
                                [Serie do Documento  ] = SRDOCTO
                                
                                If [Forma de Pagamento]="CT" Or [Forma de Pagamento]="CD"  Or [Forma de Pagamento]="CL"
                                   Then GetRecord "\\Sistemas\\Vendas\\P_Cartao" VSDGEMPRESA,[Nome do Cartao] To CARTAO
                                        If RetVal
                                           Then If NOME_CT <> CARTAO["Nome do Cartao"]
                                                   Then NOME_CT = CARTAO["Nome do Cartao"]
                                                        CONT_CT = 0
                                                EndIf
                                                CONT_CT = CONT_CT + 1

                                                NDIAS = (NumVal(CARTAO["Numero Dias Vencimento"]) * CONT_CT)
                                                [Data] = [NotaC->Data de Emissao] + (NumVal(CARTAO["Numero Dias Vencimento"]) * CONT_CT)
                                                [Numero de Dias] = NDIAS
                                        EndIf   
                                   Else [Numero de Dias] = [Data]-[NotaC->Data de Emissao]
                                EndIf
                                Skip
                                If Eot() Then QuitLoop EndIf
                          EndWhile         
                          UnLockRecord      
                  EndIf
          EndIf   
  EndIf   
  Moveto "Opaf011"     
EndScan
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Processa dados Itens NFCe                                                   *
;*******************************************************************************
Proc Item_Cupom()
   
itemCupom = False    

Moveto "Opaf012"
Scan For SubStr([Opaf012->Texto],04,10)=CUPOM and SubStr([Opaf012->Texto],16,2)=NECF

   If SubStr([Opaf012->Texto],147,1)="C"  Then Loop EndIf

   ItemCupom = True
  
	 Moveto "NotaI"
	 While True
     Moveto [Codigo da Empresa]
     Locate VSDGEMPRESA,NRDOCTO,SRDOCTO,NumVal(SubStr([Opaf012->Texto],163,4))
     If Not RetVal
        Then End Down
             [Codigo da Empresa          ]=VSDGEMPRESA
             [Numero do Documento        ]=NRDOCTO
             [Serie do Documento         ]=SRDOCTO
             [Item do Documento          ]=NumVal(SubStr([Opaf012->Texto],163,4))
             If IsLockRecord()
                Then Del
                Else UnLockRecord     
             EndIf        
             Loop
     EndIf
     If Not IsLockRecord()
        Then QuitLoop
     EndIf   
   EndWhile   

   [Descricao do Item           ]=RTrim(SubStr([Opaf012->Texto],047,40))
   [Unidade Fiscal              ]=RTrim(SubStr([Opaf012->Texto],087,02))

   CODIT=""
   CODAUX=RTrim(SubStr([Opaf012->Texto],186,20))
   Moveto [Codigo do Item]
   If CODAUX<>"" And Busca_Lookup("Codigo de Barras",CODAUX,"SM")
    Then CODIT=Reg_Busca_Lookup["Codigo do Item"]
    Else GetRecord "\\Sistemas\\Estoque\\Itens" CODAUX To Reg_Busca_Lookup
         If Retval  
            Then CODIT=Reg_Busca_Lookup["Codigo do Item"]
         EndIf
   EndIf
   CODAUX=RTrim(SubStr([Opaf012->Texto],027,20))
   If CODAUX<>CODIT
    Then GetRecord "\\Sistemas\\Estoque\\Itens" CODAUX To Reg_Busca_Lookup
         If Retval 
            Then CODIT=Reg_Busca_Lookup["Codigo do Item"]
         EndIf 
   EndIf 
   
   If CODIT=""
    Then MSG=    "Codigo do Item/Codigo de Barras n„o cadastrado !// //"
         MSG=MSG+"NFCe: "+SRDOCTO+" - "+NRDOCTO+"//"
         MSG=MSG+"Codigo: "+CODAUX+"// //"  
         MSG=MSG+"Lan‡amento inv lido!"
         Mensagem(MSG)
   EndIf       

   [Codigo do Item             ]=CODIT
   [Quantidade                 ]=NumVal(SubStr([Opaf012->Texto],90,13))/1000
                       PrecoUnit=NumVal(SubStr([Opaf012->Texto],103,13))/100
   [Preco Unitario             ]= PrecoUnit
   [Preco Unitario Tabela      ]= PrecoUnit
   [Preco Total                ]= ndecimal(([Quantidade]*[Preco Unitario       ]),2)

   Moveto "Opaf058"
   Item58 = false
   Scan For SubStr([Opaf058->Texto],04,10)=CUPOM and SubStr([Opaf058->Texto],16,2)=NECF     and 
            NumVal(SubStr([Opaf058->Texto],058,04))=NumVal(SubStr([Opaf012->Texto],163,04)) and
             RTrim(SubStr([Opaf058->Texto],018,20))= RTrim(SubStr([Opaf012->Texto],027,20))

      Item58    = True
      quitloop 
   Endscan
	 Moveto "NotaI"


   origitem=""
   cstitem =""

   if Item58
      then
           [Taxa Desconto Total ]=TXDESCTO_TOTAL
           [Valor Desconto Total]=NumVal(SubStr([Opaf058->Texto],062,13))/100
           [Valor OutDesp Total ]=NumVal(SubStr([Opaf058->Texto],075,13))/100

           origitem              =       SubStr([Opaf058->Texto],088,01)
           cstitem               =       SubStr([Opaf058->Texto],089,03)
           [ICMS_BC             ]=NumVal(SubStr([Opaf058->Texto],092,13))/100 
           [Aliquota de ICMS    ]=NumVal(SubStr([Opaf058->Texto],105,13))/100
           [Valor do ICMS       ]=NumVal(SubStr([Opaf058->Texto],118,13))/100

           [PIS_CST             ]=       SubStr([Opaf058->Texto],131,02)
           [PIS_BC              ]=NumVal(SubStr([Opaf058->Texto],133,13))/100 
           [PIS_Aliquota        ]=NumVal(SubStr([Opaf058->Texto],146,13))/100
           [PIS_Valor           ]=NumVal(SubStr([Opaf058->Texto],159,13))/100
        	       
           [COFINS_CST          ]=       SubStr([Opaf058->Texto],172,02)
           [COFINS_BC           ]=NumVal(SubStr([Opaf058->Texto],174,13))/100 
           [COFINS_Aliquota     ]=NumVal(SubStr([Opaf058->Texto],187,13))/100
           [COFINS_Valor        ]=NumVal(SubStr([Opaf058->Texto],200,13))/100
           
           
           TOT_PIS=TOT_PIS+[PIS_Valor           ]
   endif   


   ;----------------------------------------------------------------------------
   If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
      Then 
          [CSOSN                   ]=cstitem
          Switch
            Case [CSOSN                   ]="500":
                 [Tipo Tributacao         ]=origitem+"60"
                 [Tributacao de ICMS      ]="S"
                 
            Case [CSOSN                   ]="400":
                 [Tipo Tributacao         ]=origitem+"41"
                 [Tributacao de ICMS      ]="N"

            Case [CSOSN                   ]="103":
                 [Tipo Tributacao         ]=origitem+"40"
                 [Tributacao de ICMS      ]="I"

            otherwise                            :
                 [Tipo Tributacao         ]=origitem+"90"
                 [Tributacao de ICMS      ]="O"

          EndSwitch
          
          [ICMS_BC                 ]=BlankNum() 
          [Aliquota de ICMS        ]=BlankNum()
          [Valor do ICMS           ]=BlankNum()
          
          [ICMS_CREDSN_Aliquota    ]=BlankNum()
          [ICMS_CredSN_Valor       ]=BlankNum()
          
          [PIS_CST                 ]="99"
          [PIS_Aliquota            ]=BlankNum()
          [PIS_BC                  ]=BlankNum() 
          [PIS_Valor               ]=BlankNum()
          
          [COFINS_CST              ]="99"
          [COFINS_Aliquota         ]=BlankNum()
          [COFINS_BC               ]=BlankNum() 
          [COFINS_Valor            ]=BlankNum()
      else
          [Tipo Tributacao         ]=cstitem
          Switch
            Case SubStr([Tipo Tributacao],2,2)="00" and [Valor do ICMS]<=0:
                 [Tipo Tributacao         ]=SubStr([Tipo Tributacao],1,1)+"90"
                 [Tributacao de ICMS      ]="O"
                 [ICMS_BC                 ]=BlankNum() 
                 [Aliquota de ICMS        ]=BlankNum()
                 [Valor do ICMS           ]=BlankNum()
                 
            Case SubStr([Tipo Tributacao],2,2)="00":
                 [Tributacao de ICMS      ]="D"

            Case SubStr([Tipo Tributacao],2,2)="60":
                 [Tributacao de ICMS      ]="S"
                 [ICMS_BC                 ]=BlankNum() 
                 [Aliquota de ICMS        ]=BlankNum()
                 [Valor do ICMS           ]=BlankNum()

            Case SubStr([Tipo Tributacao],2,2)="40":
                 [Tributacao de ICMS      ]="I"
                 [ICMS_BC                 ]=BlankNum() 
                 [Aliquota de ICMS        ]=BlankNum()
                 [Valor do ICMS           ]=BlankNum()

            Case SubStr([Tipo Tributacao],2,2)="41":
                 [Tributacao de ICMS      ]="N"
                 [ICMS_BC                 ]=BlankNum() 
                 [Aliquota de ICMS        ]=BlankNum()
                 [Valor do ICMS           ]=BlankNum()

          EndSwitch

          [CSOSN                   ]="900"
          [ICMS_CREDSN_Aliquota    ]=BlankNum()
          [ICMS_CredSN_Valor       ]=BlankNum()
   EndIf        
   [Codigo MVA          ]=""
   [MVA                 ]=BlankNum()
   [ICMS_ST_Aliquota    ]=BlankNum()                  
   ;----------------------------------------------------------------------------

   ;* Seta Variaveis PegaCFOP
   Checa_CFOP      =[NotaC->Tipo Movimento Estoque]
   CFO_C           =[NotaC->CFO      ]
   CFOP_TPITEM     =[Tipo do Item      ]
   CFOP_TRIBICMS   =[Tributacao de ICMS]
   CFOP_TPTRIB     =[Tipo Tributacao   ]
   CFOP_EMPRESA    =[NotaC->Codigo da Empresa ]
   CFOP_ATIVEMPRESA=ATIVEMPR
   Play "\\Sistemas\\Exporta\\PegaCFOP"
   [CFO            ]=CFO_C
   [Tipo Tributacao]=CFOP_TPTRIB

   [Codigo da Tabela]=[NotaC->Codigo da Tabela]
   UnLockRecord

   Moveto "Opaf012"
EndScan

switch
  case cupom_inutilizado=true And ItemCupom = false:
     Moveto "NotaI"
     NumItem = 1
		 While True
       Moveto [Codigo da Empresa]
       Locate VSDGEMPRESA,NRDOCTO,SRDOCTO,NumItem
       If Not RetVal
          Then End Down
               [Codigo da Empresa          ]=VSDGEMPRESA
               [Numero do Documento        ]=NRDOCTO
               [Serie do Documento         ]=SRDOCTO
               [Item do Documento          ]=NumItem
               If IsLockRecord()
                  Then Del
                  Else UnLockRecord     
               EndIf        
               Loop
       EndIf
       If Not IsLockRecord()
          Then QuitLoop
       EndIf   
     EndWhile   
    [Descricao do Item  ]="* * NFC-e INUTILIZADA * *"
    Return False

  case cupom_cancelado=true And ItemCupom = false:
     Moveto "NotaI"
     NumItem = 1
		 While True
       Moveto [Codigo da Empresa]
       Locate VSDGEMPRESA,NRDOCTO,SRDOCTO,NumItem
       If Not RetVal
          Then End Down
               [Codigo da Empresa          ]=VSDGEMPRESA
               [Numero do Documento        ]=NRDOCTO
               [Serie do Documento         ]=SRDOCTO
               [Item do Documento          ]=NumItem
               If IsLockRecord()
                  Then Del
                  Else UnLockRecord     
               EndIf        
               Loop
       EndIf
       If Not IsLockRecord()
          Then QuitLoop
       EndIf   
     EndWhile   
    [Situacao_Item]="C" 
    [Descricao do Item           ]="ITEM CANCELADO"
    Return False

endswitch

Return True         
         
EndProc ;ItensCupom

;*******************************************************************************
;* Processa dados Vencimento Cupom                                             *
;*******************************************************************************
Proc Venc_Cupom()

Moveto "Opaf013"
Scan For SubStr([Opaf013->Texto],04,10)=CUPOM and SubStr([Opaf013->Texto],20,2)=NECF

   If SubStr([Opaf013->Texto],55,05)="Troco"
      Then vrtroco=NumVal(SubStr([Opaf013->Texto],33,13))/100
      
           If vrtroco<>0 And vrtroco<>BlankNum()
  				    Then Moveto "NotaV"
                   Moveto [Codigo da Empresa]
                   Locate VSDGEMPRESA,NRDOCTO,SRDOCTO,AlinhM(StrVal(Seqv),2)
                   If RetVal
                      Then [Valor]=[Valor] -  vrtroco
                           UnLockRecord
                   EndIf
           EndIf       
      Else 
           Seqv=Seqv+1
  				 Moveto "NotaV"
  				 While True
             Moveto [Codigo da Empresa]
             Locate VSDGEMPRESA,NRDOCTO,SRDOCTO,AlinhM(StrVal(Seqv),2)
             If Not RetVal
                Then End Down
                     [Codigo da Empresa          ]=VSDGEMPRESA
                     [Numero do Documento        ]=NRDOCTO
                     [Serie do Documento         ]=SRDOCTO
                     [Sequencia                  ]=AlinhM(StrVal(Seqv),2)
                     If IsLockRecord()
                         Then Del
                         Else UnLockRecord     
                     EndIf        
                     Loop
             EndIf
             If Not IsLockRecord()
                 Then QuitLoop
             EndIf   
           EndWhile
           [Data                       ]=DateVal(SubStr([Opaf013->Texto],48,2)+"/"+
                                                 SubStr([Opaf013->Texto],46,2)+"/"+
                                                 SubStr([Opaf013->Texto],50,4))
           
           CF=SubStr([Opaf013->Texto],31,02)
           If CF="01"
              Then [Valor]=NumVal(SubStr([Opaf013->Texto],33,13))/100 -  vrtroco
              Else [Valor]=NumVal(SubStr([Opaf013->Texto],33,13))/100
           EndIf
           [Observacao                 ]=RTrim(SubStr([Opaf013->Texto],55,20))

           Switch
             Case SubStr([Opaf013->Texto],85,1)="V": cv=cv+1
             Case SubStr([Opaf013->Texto],85,1)="P": cp=cp+1
           EndSwitch  

           NC = ""
           FP = "OU"
           
           ;---- Setando valores da Forma de Pagamento da tabela OPAF ----------
           GetRecord "\\Sistemas\\Vendas\\Opaf_FP" CF To REG_FP
           If Retval
            Then FP = REG_FP["Forma de Pagamento"] 
                 If REG_FP["Tipo"]="P" Or REG_FP["Tipo"]="T" ;CartÆo Debito/Credito ou TEF 
                    Then NC=REG_FP["Descricao Operacao"] ; Nome do CartÆo
                 EndIf
           EndIf        
           
           ;---- Verificando a existˆncia do tipo de pagamento -----------------
           If FP<>""
              Then GetRecord "\\Sistemas\\Cadastro\\Tppagto" FP To REG_FP
                   If Not RetVal
                      Then FP = "" 
                   EndIf
           EndIf
           
           Moveto "Notav" 
           [Forma de Pagamento]=FP
           
           If [Forma de Pagamento]="CD" 
              Then [Data]=DTCUPOM 
           EndIf
           
           If NC<>""
              Then GetRecord "\\Sistemas\\Cadastro\\cartoes" NC To regcartoes
                   if retval
                      then [Nome do Cartao] = NC
                   endif
                   [Numero do Cartao]=SubStr([Opaf013->Texto],309,40)    
           EndIf
           UnLockRecord
   EndIf  
   Moveto "Opaf013" 
EndScan

EndProc ;Venc_Cupom()

;*******************************************************************************
;* Rotina p/ Selecionar Registros                                              *
;*******************************************************************************
Proc Composicao_Dias()
Private CONT,AUX_COM_DIAS,Pos

Moveto "NotaV"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA,NRDOCTO,SRDOCTO
If RetVal
   Then GEROU_COMPDIAS = True
        CONT     = 0
        COM_DIAS = ""
        NUM_PARC = 0
        While [Codigo da Empresa  ] = VSDGEMPRESA And
              [Numero do Documento] = NRDOCTO     And
              [Serie do Documento ] = SRDOCTO
              
              CONT = CONT + 1
              If ([Data]-[NotaC->Data de Emissao]) < 0
                 Then AUX_COM_DIAS = "000000"
                 Else AUX_COM_DIAS = AlinhM(StrVal([Data]-[NotaC->Data de Emissao]),6)
              EndIf

              If Search(AUX_COM_DIAS,COM_DIAS) = 0
                 Then NUM_PARC = NUM_PARC + 1
                      If Int(NumVal(AUX_COM_DIAS)) = 0 
                         Then If CONT > 1
                                 Then COM_DIAS = AUX_COM_DIAS + "/" + COM_DIAS
                                 Else COM_DIAS = AUX_COM_DIAS                         
                               EndIf
                         Else If CONT > 1
                                 Then COM_DIAS = COM_DIAS + "/" + AUX_COM_DIAS
                                 Else COM_DIAS = COM_DIAS + AUX_COM_DIAS
                              EndIf
                      EndIf            
              EndIf   
              
              Skip
              If Eot() Then QuitLoop EndIf
        EndWhile

        CONT         = 0
        AUX_COM_DIAS = COM_DIAS
        Pos = Search("/",AUX_COM_DIAS)
        
        If Pos = 0
           Then COM_DIAS = StrVal(Int(NumVal(AUX_COM_DIAS)))
           Else COM_DIAS = ""
        EndIf   
        
        While Pos > 0
          INT_DIAS = Int(NumVal(SubStr(AUX_COM_DIAS,1,Pos-1)))
          If Pos <> 100000
             Then AUX_COM_DIAS = SubStr(AUX_COM_DIAS,Pos+1,Len(AUX_COM_DIAS))
          EndIf
          CONT = CONT + 1
          
          If CONT > 1
             Then COM_DIAS = COM_DIAS + "/" + StrVal(INT_DIAS)  
             Else COM_DIAS = COM_DIAS + StrVal(INT_DIAS)
          EndIf  
          If Pos = 100000
             Then QuitLoop 
          EndIf   
          
          Pos = Search("/",AUX_COM_DIAS)
          If Pos = 0
             Then Pos = 100000
          EndIf 
        EndWhile
        
        If COM_DIAS="" Or COM_DIAS=BlankNum()
           Then COM_DIAS = "0"
                NUM_PARC = 1
        EndIf
        Moveto "NotaC"     
   Else GEROU_COMPDIAS = False
        If Not IsAssigned(COM_DIAS) Then COM_DIAS = "" EndIf
        If COM_DIAS="" Or COM_DIAS=BlankNum()
           Then COM_DIAS = "0"
                NUM_PARC = 1
        EndIf
        Moveto "NotaC"     
EndIf          

EndProc ;Composicao_Dias() 

;*******************************************************************************
;* Processa dados Composi‡Æo de Dias                                           *
;*******************************************************************************
Proc Venc_CompDias()

Moveto "NotaC"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA,NRDOCTO,SRDOCTO
If Not RetVal
   Then COM_DIAS = ""
        NUM_PARC = BlankNum() 
        GEROU_COMPDIAS = False
   Else Composicao_Dias()
EndIf

EndProc ;Venc_CompDias()

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ConfOpcoes(Opcao)
Private Opcao

Switch
  Case Opcao="Ler":
       If IsFile("IM_IDBR.sc")
           Then Play "IM_IDBR"
           Else VSDGCAMINHO="C:\\OPAF\\MONITORA\\RETORNO"
       EndIf
  Case Opcao="Gravar":
       FileWrite        "IM_IDBR.sc" From ";****** Variaveis de Configura‡„o Caminho Vise Informatica"+"\n"

       NCAMINHO=""
       For i From 1 to Len(VSDGCAMINHO)
         If SubStr(VSDGCAMINHO,i,1)=Chr(92)
            Then NCAMINHO=NCAMINHO+Chr(92)
         EndIf
         NCAMINHO=NCAMINHO+SubStr(VSDGCAMINHO,i,1)
       EndFor
       FileWrite Append "IM_IDBR.sc" From "VSDGCAMINHO="+Chr(34)+NCAMINHO+Chr(34)+"\n"

EndSwitch
EndProc ;

;*******************************************************************************
;* Verifica se a empresa est  cadastrado no OPAF_ECF                           *
;*******************************************************************************
Proc Verifica_Empresa_OpafECF()

;---- Implementado em 07.11.2016 -----------------------------------------------
NAO_ACHOU = 0
EMPRESA_CADASTRADA=False
View "Opaf_Ecf"
Scan
  If [Codigo da Empresa]=""
     Then NAO_ACHOU = NAO_ACHOU + 1
          QuitLoop
  EndIf
EndScan
ClearImage

If NAO_ACHOU > 0
   Then COR_MENSAGEM="ALERTA"
        MSG = 
        Completa("Empresa nÆo vinculada ao n§ do ECF.",70," ")+"//"+
        Completa("Ser  preciso realizar este v¡nculo para prosseguir com a importa‡„o.",70," ")+"////"+
        Completa("Informe a empresa em todos os registros da seguinte rotina: ",70," ")+"//"+
        Completa("FATURAMENTO > OPAF - Integra‡„o > 39. Informa‡”es adicionais do ECF",70," ")
        Mensagem(MSG)
        Return False    
EndIf   
Release Vars NAO_ACHOU,EMPRESA_CADASTRADA,COR_MENSAGEM
Return True                             

EndProc ;Verifica_Empresa_OpafECF()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA=""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: 
          If Campo="TG_NECF"
              Then If Not SDCarrega_F1()
                      Then MENSAGEM(MSG)
                      Else Seleciona_Opcoes("ECF","F1_Temp")
                   EndIf
              Else Dialog_F1()    
          EndIf       
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_CAMINHO"       : Campo="TG_DTFIM" 
            Case Campo="TG_NECF"          : Campo="TG_CAMINHO"
            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"    : 
                         VSDGEMPRESA=ControlValue("TG_EMPRESA")
                         If Not IsBlanK(VSDGEMPRESA)
                            Then VSDGEMPRESA   = AlinhM(VSDGEMPRESA,4)
                                 VSDGNECF      = ""
                                 VSDGNSERIE    = ""
                                 VSDGNREINICIO = ""
                                 If Not SDCarrega_F1()
                                    Then MENSAGEM(MSG)
                                    Else Campo="TG_DTINI"
                                 EndIf   
                         EndIf 
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="TG_CAMINHO"
                    Case Campo="TG_CAMINHO"    :
                         VSDGCAMINHO=ControlValue("TG_CAMINHO")
                         If IsBlanK(VSDGCAMINHO)
                            Then Campo="TG_CAMINHO"
                            Else Campo="TG_NECF"
                         EndIf
                    Case Campo="TG_NECF"       : Campo="YES"
                         VSDGNECF=ControlValue("TG_NECF")
                         If Not IsBlanK(VSDGNECF)
                            Then VSDGNECF=AlinhM(VSDGNECF,2)
                                 If Not SDCarrega_F1()
                                    Then MENSAGEM(MSG)
                                         Campo="YES"
                                    Else If Not Checa_Opcoes("ECF",VSDGNECF)
                                            Then VSDGNSERIE    = ""
                                                 VSDGNREINICIO = ""

                                                 VSDGCHAPA     = ""
                                                 VSDGNOMCHAPA  = ""

                                                 VSDGCONTA     = ""
                                                 VSDGNOMCONTA  = ""

                                                 MENSAGEM("Numero ECF n„o Cadastrado !")       
                                                 Campo="TG_NECF"
                                            else
                                                 VSDGNOMCHAPA  = ""
                                                 VSDGNOMCONTA  = ""

                                                 getrecord "\\sistemas\\cadastro\\usuarios" vsdgchapa to regusuarios
                                                 if retval
                                                    then 
                                                         VSDGNOMCHAPA=regusuarios["Nome"        ]
                                                         VSDGCONTA   =regusuarios["Conta Padrao"]

                                                         getrecord "\\sistemas\\ctacor\\conta" VSDGCONTA to regcontas   
                                                         if retval
                                                            then 
                                                                 VSDGNOMCONTA=regcontas["Descricao da Conta"]
                                                         endif   
                                                 endif   
                                         EndIf
                                 EndIf 
                           Else MENSAGEM("Numero ECF n„o Cadastrado !")
                                 Campo="TG_NECF"      
                         EndIf
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
 Case Campo="TG_EMPRESA" : MSG_CAMPO="Informe a Empresa"
 Case Campo="TG_CAMINHO" : MSG_CAMPO="Caminho a ser importado o arquivo.  Exemplo: C:\\OPAF\\MONITORA\\RETORNO"
 Case Campo="TG_NECF"    : MSG_CAMPO="Informe o Numero do PDV e confira o Numero de Serie! " 
                           TECLA=TECLA+"F1=Consultar" 
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf

LimpAguarde()

ConfOpcoes("Ler")

VSDGEMPRESA=""
VSDGDTINI  =BlankDate()
VSDGDTFIM  =BlankDate()
VSDGHRINI  ="00:00"
VSDGHRFIM  ="24:00"
VSDGNECF   =""
VSDGNSERIE =""
VSDGCHAPA  =""
VSDGCONTA  =""

If Not Verifica_Empresa_OpafECF()
   Then Return
EndIf   

COR_MENSAGEM="1"
Mensagem("Antes de executar esta rotina, verifique se // o INTEGRADOR do OPAF esta carregado !")
Release Vars COR_MENSAGEM

While True
 ShowDialog "Importa‡Æo de dados do OPAF/NFCe - VersÆo 5.4" Proc "SD_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "TAB","ReverseTab","ENTER","ESC","F1",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140    
     @ 05,12 Height 17 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_NOMEMP" To VSDGNOMEMP

    Label  @ 02,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 03,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,16 "at‚" For "TG_DTFIM"
    Accept @ 03,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 04,00 "Caminho"  For "TG_CAMINHO"
    Accept @ 05,01 Width 33 "A37"  Picture "!*!" Tag "TG_CAMINHO" To VSDGCAMINHO

    Label  @ 06,00 "N§ ECF, N£mero de S‚rie"  For "TG_NECF"
    Accept @ 07,01 Width 07 "A2"  Picture "#*#" Tag "TG_NECF" To VSDGNECF

    Accept @ 07,09 Width 25 "A20"  Picture "#*#" Tag "TG_NSERIE" To VSDGNSERIE

    Label  @ 08,00 "Usu rio Vinculado"  For "TG_CHAPA"
    Accept @ 09,01 Width 07 "A4"  Picture "#*#" Tag "TG_CHAPA" To VSDGCHAPA
    Accept @ 09,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCHAPA"  To VSDGNOMCHAPA

    Label  @ 10,00 "Conta Vinculada"  For "TG_CONTA"
    Accept @ 11,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA" To VSDGCONTA
    Accept @ 11,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMCONT" To VSDGNOMCONTA

    Pushbutton @ 13,22 width 13 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 13,36 width 13 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Empresa inv lida !")
          Loop
  EndIf   
  If Direxists(VSDGCAMINHO)=0
     Then Mensagem("Caminho especificado n„o existe !")
          Loop
  EndIf

  If IsBlank(VSDGDTINI)  Or IsBlank(VSDGDTFIM)
     Then Mensagem("Data Invalida !")
          Loop
  EndIf
  
  If IsBlank(VSDGNECF)
     Then Mensagem("Numero ECF Inv lido!")
          Loop
  EndIf  
  
  If Not SDCarrega_F1()
     Then MENSAGEM(MSG)
          Loop
  EndIf           

  If SubStr(VSDGCAMINHO,Len(VSDGCAMINHO),1)="\\"
     Then VSDGCAMINHO=SubStr(VSDGCAMINHO,1,Len(VSDGCAMINHO)-1)
  EndIf

  ;*** Pega UF/Tipo Empresa Controle ***
  View "\\Sistemas\\Cadastro\\Empresas"
  Moveto [Codigo da Empresa]
  Locate VSDGEMPRESA
  If RetVal
     Then CNPJ_EMPR=[CGC Empresa      ]
           ATIVEMPR=[Atividade        ]
            UF_EMPR=[UF Empresa       ]
            TPEMPR =[Tipo da Empresa  ]
     Else CNPJ_EMPR="??"
           ATIVEMPR="??"
            UF_EMPR="??"
            TPEMPR ="??"
  EndIf
  ClearAll
  
  View "P_Cupom"
  Moveto [Codigo_Empresa]
  Locate VSDGEMPRESA
  If RetVal
     Then VSDGCLIENTE  = [Codigo_Cliente        ]
          VSDGVENDEDOR = [Codigo_Vendedor       ]
          VSDGTRANSP   = [Codigo_Transportadora ]
          CODD         = [Codigo_Destinacao     ]
     Else Mensagem("Parametros n„o Cadastrado para esta Empresa !")
  EndIf       
  ClearAll

  If Not ArqRT()
     Then Loop
  EndIf   
  
  If IsEmpty("Opaf011") And IsEmpty("Opaf045")
     Then Mensagem("Nao existem dados a serem importados !")
          Loop
     Else ProcessaC()
  EndIf
 
  ConfOpcoes("Gravar")

  COR_MENSAGEM="1"
  MSG="Opera‡Æo concluida!          // //"
  MSG=MSG+"Execute os passos abaixo para conferˆncia e seu correto controle:// //"
  MSG=MSG+"- Relat¢rio resumo de vendas NFCeïs por forma de pagamento  e//"
  MSG=MSG+"  produtos do dia, e confira com vendas;                          // //"
  MSG=MSG+"- Reprocessamento do estoque para atualizar novas vendas;        // //"
  MSG=MSG+"- Gerar titulos a receber Prazo/Cartäes;                         // //"
  MSG=MSG+"- Exporta‡Æo de vendas a vista p/ caixa;                         "
  
  Mensagem(MSG)
  Release Vars COR_MENSAGEM

EndWhile
ClearAll
Release Vars All
Release Procs All
