;** Imp_Opaf *******************************************************************
;*  Importacao de Cupons Fiscais                             - OPAF            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 25/08/2010 por Anivel Augusto Rodrigues
;Ultima Alteracao: 05/10/2010 por Bruno/Karina 
;Motivo Alteracao: Ajustes Num Cupom Final
;Ultima Alteracao: 11/10/2010 por Karina 
;Motivo Alteracao: Ajustes Numero Serie ReducaoZ e extensao arquivo LOG 
;Ultima Alteracao: 21/10/2010 por Karina 
;Motivo Alteracao: Ajustes Numero_ECF
;Ultima Alteracao: 26/10/2010 por Karina 
;Motivo Alteracao: Ajustes Diversos
;Ultima Alteracao: 10/12/2010 por Karina 
;Motivo Alteracao: Ajustes p/ buscar cliente e Vendedor da P_Cupom
;Ultima Alteracao: 06/01/2011 por Karina 
;Motivo Alteracao: Ajustes Lookup
;Ultima Alteracao: 07/01/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Numero ECF
;Ultima Alteracao: 10/01/2011 por Antonio Marcelo
;Motivo Alteracao: Corre‡Æo Lookup Forma de Pagamento
;Ultima Alteracao: 11/01/2011 por Karina
;Motivo Alteracao: Ajustes Troco e Numero de serie
;Ultima Alteracao: 12/01/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Numero ECF,Numero de Serie e Transportadora 
;Ultima Alteracao: 12/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP item ST
;Ultima Alteracao: 04/02/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Codigo Destinacao  
;Ultima Alteracao: 09/02/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Proc CondPagto
;Ultima Alteracao: 10/03/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Layout 005,versao 2.0.1 OPAF
;Ultima Alteracao: 18/05/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Serie do Documento e Reinicio Operacao 
;Ultima Alteracao: 24/05/2011 por Karina Andrade
;Motivo Alteracao: Ajustes ProcessaC e ProcessaZ (Reinicio Operacao)
;Ultima Alteracao: 08/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes ProcessaZ (Aliquotas) 
;Ultima Alteracao: 10/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Layout 006,versao 2.1.0 OPAF
;Ultima Alteracao: 06/07/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Numero Contador Final
;Ultima Alteracao: 15/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Layout 006,versao 2.1.0 OPAF
;Ultima Alteracao: 18/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Registro 012 - Busca Codigo do Item ou Codigo de Barras
;Ultima Alteracao: 01/12/2011 por Karina Andrade
;Motivo Alteracao: Add Calculo PIS/COFINS
;Ultima Alteracao: 05/12/2011 por Karina Andrade
;Motivo Alteracao: Add campo Numero DAV_PreVenda
;Ultima Alteracao: 23/12/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Carrega_Parametros P_Cupom
;Ultima Alteracao: 05/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Layout 007,versao 3.0.0 OPAF
;Ultima Alteracao: 15/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagem Final
;Ultima Alteracao: 19/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Controle_Dia() para ProcessaZ()
;Ultima Alteracao: 27/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes COR_MENSAGEM="1" quando log correto, CODAUX e CODIT
;Ultima Alteracao: 20/04/2012 por Karina Andrade
;Motivo Alteracao: Ajustes para EMPRESA que possui mais de 1 ECF - CONCENTRADOR
;Ultima Alteracao: 17/05/2012 por Karina Andrade
;Motivo Alteracao: Ajustes tempo e cria‡Æo do arquivo de resposta do LOG. 
;Ultima Alteracao: 14/06/2012 por Karina Andrade
;Motivo Alteracao: Ajustes CFOP utilizando PEGACFOP
;Ultima Alteracao: 20/06/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Numero de Serie Fabricacao SYS_CODIGO_CLIENTE="0022"
;Ultima Alteracao: 10/07/2012 por Bruno Carvalho
;Motivo Alteracao: Inclu¡do "Sistema Gerador" na rotina de importa‡Æo para "NotaC"
;Ultima Alteracao: 22/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tratamento item de cupom cancelado      
;Ultima Alteracao: 19/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Substitui‡Æo Editor novo arquivo por FileWrite
;Ultima Alteracao: 23/11/2012 por Kamila Gomes
;Motivo Alteracao: Ajustes Layout 008,versao 3.1.0 OPAF
;Ultima Alteracao: 14/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagem final                                
;Ultima Alteracao: 15/02/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Numero Contador de Reducao Z
;Ultima Alteracao: 21/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Numero Contador de Reducao Z
;Ultima Alteracao: 22/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes linha 936, erro sintaxe
;Ultima Alteracao: 04/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes item cancelado, padrao importar redu‡Æo e cupons
;Ultima Alteracao: 05/04/2013 por Kamila Gomes
;Motivo Alteracao: Aumento do tempo de aguardo do integrador
;Ultima Alteracao: 13/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateio descontos e acrescimos
;Ultima Alteracao: 17/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateio descontos e acrescimos
;Ultima Alteracao: 18/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes txdescto/acresc sistema e ecf  
;Ultima Alteracao: 24/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes criterio adicionar difrateio descto/acresc   
;Ultima Alteracao: 09/05/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes icms item com redu‡Æo bc   
;Ultima Alteracao: 13/05/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes item cancelado descto/acresc item desprezado
;Ultima Alteracao: 03/12/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes VrTroco - Impopaft 
;Ultima Alteracao: 23/12/2013 por Karina Andrade
;Motivo Alteracao: Retirado ajustes Numero de Serie Fabricacao SYS_CODIGO_CLIENTE="0022"
;Ultima Alteracao: 14/02/2014 por Karina Andrade
;Motivo Alteracao: Ajustes ProcessaZ() para Mapa Resumo zerado

;*******************************************************************************
;* 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

If VSDGDTFIM-VSDGDTINI > 5
  Then tempo=20000
       seg  ="60"  
  Else tempo=15000
       seg  ="45"  
EndIf

num=num+1
CriaProximo_ArqT(num)

For wc From 1 to 3  
  Aguarde("Aguardando resposta do INTEGRADOR tentativa "+StrVal(wc)+"/3 at‚ "+seg+" Segundos")

  For wi From 1 To 3 
    Sleep tempo
    If IsFile(ARQL) Then QuitLoop EndIf
  EndFor
  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 repitir 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
If IsTable("Impopaft")
   Then Delete "Impopaft"
EndIf
Copy "Impopaf" "Impopaft"

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 "008"   ;kamila
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 "099"
Print File ARQ AlinhM("5",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 IsAssigned(varinner) Then release vars varinner  EndIf

Endproc

;*******************************************************************************
;* totalizar                                                                   *
;*******************************************************************************
Proc Totalizar(tot,vr)
Private tot, vr, wi

For wi From 1 To 20
 If SubStr(totalizadores[wi],1,5)=tot Or SubStr(totalizadores[wi],1,5)="00000"
    Then totalizadores[wi]=tot+StrVal(NumVal(SubStr(totalizadores[wi],6,15))+vr)
         quitloop
 Endif           
EndFor

EndProc

;*******************************************************************************
;* Processa dados Cupom                                                        *
;*******************************************************************************
Proc ProcessaC()

Array Totalizadores[20]

NR=NRecords("Impopaf")
REDZ=True

View "ECF_C"
View "Opaf_FP"
View "NotaC"
View "NotaI"
View "NotaV"
View "Impopaft"
CoEdit "Impopaf"
SetHighLight Current Record 23 Field 31
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Convertendo Cupom "+Completa(StrVal(Recno())+"/"+StrVal(NR),9," ")+BARRA_STRING)

  Switch
    Case SubStr([Impopaf->Texto],1,3)="011": ;** Cupom **

         DTCUPOM=DateVal(SubStr([Impopaf->Texto],26,2)+"/"+
                         SubStr([Impopaf->Texto],24,2)+"/"+
                         SubStr([Impopaf->Texto],28,4))
 
         HRCUPOM=SubStr([Impopaf->Texto],326,2)+":"+SubStr([Impopaf->Texto],328,2)

         If Not REDZ And DTRZ=DTCUPOM 
          Then Loop
         EndIf                  

         Switch
           Case DTCUPOM<VSDGDTINI : Loop 
           Case DTCUPOM>VSDGDTFIM : Loop 

           Case DTCUPOM=VSDGDTINI And
                HRCUPOM<VSDGHRINI : Loop
           Case DTCUPOM=VSDGDTFIM And
                HRCUPOM>VSDGHRFIM : Loop

         EndSwitch
         
         NECF=NumVal(SubStr([Impopaf->Texto],16,2))

         Moveto "ECF_C"
         Moveto [Numero do ECF]
         Locate IndexOrder by "Ind_ecf1" NECF,VSDGEMPRESA,DTCUPOM 
         If RetVal
            Then CRO=[Reinicio Operacao]
            Else REDZ=False
                 DTRZ=DTCUPOM
                 MSG="NÆo foi encontrado Redu‡Æo Z - Mapa Resumo //"
                 MSG=MSG+"para o dia "+SubStr(DTRZ,1,2)+"/"+
                                       SubStr(DTRZ,4,2)+"/"+
                                       SubStr(DTRZ,7,4)+".//"
                 MSG=MSG+"Cupons referente a este dia nÆo serÆo importados!"
                 Mensagem(MSG)          
                 Loop   
         EndIf      

         Moveto "Impopaf"
                   
         CUPOM=SubStr([Impopaf->Texto],18,6)
         NECF =StrVal(NECF)
         CDDOCTO="X"+NECF+SubStr(CRO,2,2)
         SRDOCTO="X"+NECF+SubStr(CRO,2,2)
         NECF =AlinhM(StrVal(NECF),2) 
        
         Moveto "NotaC"
         While True
             Moveto [Codigo da Empresa]
             Locate VSDGEMPRESA,CUPOM,SRDOCTO
             If Not RetVal
                Then
                     End Down
                     [Codigo da Empresa          ]=VSDGEMPRESA
                     [Numero do Documento        ]=CUPOM
                     [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([Impopaf->Texto],363,13))<>0
            Then [Numero DAV_PreVenda ]=Substr([Impopaf->Texto],363,13)
         EndIf
         If NumVal(Substr([Impopaf->Texto],376,13))<>0
            Then [Numero DAV_PreVenda ]=Substr([Impopaf->Texto],373,13)
         EndIf
         
         CODC=RTrim(SubStr([Impopaf->Texto],344,4))
         Moveto[Codigo]
         If Not Busca_Lookup("Codigo",CODC,"SM")
           Then CODC=VSDGCLIENTE
                [Codigo         ]=CODC
                If LTrim(RTrim(SubStr([Impopaf->Texto],098,30)))<>""
                 Then [Razao Social   ]=RTrim(SubStr([Impopaf->Texto],098,30))
                      [Endereco       ]=RTrim(SubStr([Impopaf->Texto],128,30))
                      [Bairro         ]=RTrim(SubStr([Impopaf->Texto],158,20))
                      [Telefone       ]=RTrim(SubStr([Impopaf->Texto],210,15))
                      CGC_CPF=LTrim(RTrim(Substr([Impopaf->Texto],84,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              =RTrim(SubStr([Impopaf->Texto],178,20))
                      UF               =RTrim(SubStr([Impopaf->Texto],208,02))
                      Moveto [Cidade]
                      Ativa_Lookup()
                      Moveto [Cidade]
                      Locate CID,UF
                      If Not RetVal
                         Then CID=""
                              UF =""
                      EndIf
                      KeyPress "ESC"
                      [Cidade         ]=CID
                      [UF             ]=UF
                EndIf   
           Else [Codigo ]=CODC
         EndIf
         
         CODR=AlinhM(RTrim(SubStr([Impopaf->Texto],225,4)),4)
         Moveto [Codigo do Representante]
         If Not Busca_Lookup("Codigo do Representante",CODR,"SM")
            Then CODR=VSDGVENDEDOR
         EndIf   
         [Codigo do Representante    ]=CODR

         CODT=AlinhM(SubStr([Impopaf->Texto],316,5),5)
         Moveto [Codigo da Tabela]
         If Not Busca_Lookup("Codigo da Tabela",CODT,"")
            Then CODT=""                     
         EndIf
         [Codigo da Tabela           ]=CODT
         [Codigo da Destinacao       ]=CODD 
         [Codigo da Transportadora   ]=VSDGTRANSP
         [Frete por Conta            ]="1"
         [Valor do Desconto          ]=NumVal(SubStr([Impopaf->Texto],45,13))/100
         [Valor Despesas Acessorias  ]=NumVal(SubStr([Impopaf->Texto],58,13))/100
         [Valor Mercadoria           ]=NumVal(SubStr([Impopaf->Texto],32,13))/100
         [Valor Desconto             ]=[Valor do Desconto]
         [Valor Mercadoria Liquido   ]=[Valor Mercadoria]-[Valor Desconto]
         [Valor Nota Fiscal          ]=NumVal(SubStr([Impopaf->Texto],71,13))/100
         [Frete Incluso na Nota      ]=":"
         cupom_cancelado=false
         If SubStr([Impopaf->Texto],250,1)="C"
            Then [Situacao           ]="C"
                 cupom_cancelado      =true  
         EndIf
         [Sistema Gerador            ]="CF"
         [Numero da OF               ]=AlinhM(RTrim(SubStr([Impopaf->Texto],14,4)),6)
         [Observacao na Nota Fiscal  ]=RTrim(RTrim(SubStr([Impopaf->Texto],266,25))+"   "+
                                             RTrim(SubStr([Impopaf->Texto],291,25)))

         ;--- zera totalizadores -----------------------------------------------
         For i From 1 To 20
           Totalizadores[i]="000000.00"
         EndFor

         vrrateio_descto=0
         vrrateio_acresc=0

         vrtotal_descto=[Valor Desconto             ]
         vrtotal_acresc=[Valor Despesas Acessorias  ]

         TXDESCTO_TOTAL =([Valor Desconto             ]/[Valor Mercadoria])*100 ; regra sistema
         TXACRESC_TOTAL =([Valor Despesas Acessorias  ]/[Valor Mercadoria])*100 ; regra sistema

         TXDESCTO_RATEIO=NDecimal(([Valor Desconto             ]/[Valor Mercadoria])*100,2) ; regra do ecf
         TXACRESC_RATEIO=NDecimal(([Valor Despesas Acessorias  ]/[Valor Mercadoria])*100,2) ; regra do ecf


         ISSQN  =False 
         Seqv   =0
         cv     =0
         cp     =0
         FP     ="OU"
         NC     =""
         vrtroco=0


         Moveto "Impopaft"
         Scan 
           Switch
              ;--- gravar itens ------------------------------------------------
              Case SubStr([Impopaft->Texto],1,3)="012"  And  ;** Itens **
                   SubStr([Impopaft->Texto],16,2)=NECF  And
                   SubStr([Impopaft->Texto],18,6)=CUPOM:
          
          				 Moveto "NotaI"
          				 While True
                     Moveto [Codigo da Empresa]
                     Locate VSDGEMPRESA,CUPOM,SRDOCTO,NumVal(SubStr([Impopaft->Texto],160,4))
                     If Not RetVal
                        Then End Down
                             [Codigo da Empresa          ]=VSDGEMPRESA
                             [Numero do Documento        ]=CUPOM
                             [Serie do Documento         ]=SRDOCTO
                             [Item do Documento          ]=NumVal(SubStr([Impopaft->Texto],160,4))
                             If IsLockRecord()
                                Then Del
                                Else UnLockRecord     
                             EndIf        
                             Loop
                     EndIf
                     If Not IsLockRecord()
                        Then QuitLoop
                     EndIf   
                   EndWhile   

                   If SubStr([Impopaft->Texto],144,1)="C" 
                      Then [Situacao_Item]="C" 
                   EndIf
                   [Descricao do Item           ]=RTrim(SubStr([Impopaft->Texto],044,40))
                   [Unidade Fiscal              ]=RTrim(SubStr([Impopaft->Texto],084,02))

                   CODIT=""
                   CODAUX=RTrim(SubStr([Impopaft->Texto],183,20))
                   Moveto [Codigo do Item]
                   If CODAUX<>"" And Busca_Lookup("Codigo de Barras",CODAUX,"SM")
                    Then CODIT=Reg_Busca_Lookup["Codigo do Item"]
                    Else If CODAUX<>"" And Busca_Lookup("Codigo do Item",CODAUX,"SM") 
                          Then CODIT=Reg_Busca_Lookup["Codigo do Item"]
                         ; Else CODAUX=RTrim(SubStr([Impopaft->Texto],024,20))
                         ;      If Busca_Lookup("Codigo do Item",CODAUX,"SM")
                         ;       Then CODIT=Reg_Busca_Lookup["Codigo do Item"]
                         ;      EndIf 
                         EndIf
                   EndIf
                   
                   CODAUX=RTrim(SubStr([Impopaft->Texto],024,20))
                   If CODAUX<>CODIT
                    Then If Busca_Lookup("Codigo do Item",CODAUX,"SM")
                          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+"Cupom Fiscal: "+SRDOCTO+" - "+CUPOM+"//"
                         MSG=MSG+"Codigo: "+CODAUX+"// //"  
                         MSG=MSG+"Lan‡amento inv lido!"
                         Mensagem(MSG)
                   EndIf       

                   [Codigo do Item             ]=CODIT

                   [Quantidade                 ]=NumVal(SubStr([Impopaft->Texto],87,13))/1000
          
                                       PrecoUnit=NumVal(SubStr([Impopaft->Texto],100,13))/100
                                      DesctoUnit=NumVal(SubStr([Impopaft->Texto],113,13))/100
                                      AcrescUnit=NumVal(SubStr([Impopaft->Texto],126,13))/100
          
                                             IAT=SubStr([Impopaft->Texto],164,01)

                   If [Situacao_Item  ] ="C"
                      Then DesctoUnit=0                  
                           AcrescUnit=0
                   EndIf   
          
                   [Preco Unitario             ]= PrecoUnit+AcrescUnit
                   [Valor Desconto Unitario    ]= DesctoUnit
                   [Preco Unitario Tabela      ]= PrecoUnit
                   DesctoTotal=[Quantidade]*DesctoUnit
                   Switch
                     Case IAT="T" : [Preco Total]=NDecimal(([Quantidade]*[Preco Unitario])-DesctoTotal,2)
                     Case IAT="A" : [Preco Total]=   Round(([Quantidade]*[Preco Unitario])-DesctoTotal,2)
                   EndSwitch                                     

                   AliqICMS_CUPOM=NumVal(SubStr([Impopaft->Texto],140,4))/100

                   If [Tipo do Item]<>"C" Then
                       Switch
                         Case SubStr([Impopaft->Texto],139,1)="T" And [Tributacao de ICMS]<>"D":
                              [Tributacao de ICMS      ]="D"
                              [Tipo Tributacao         ]=SubStr([Tipo Tributacao],1,1)+"00"
                              [CSOSN                   ]="900"
                              [Aliquota de Icms        ]=AliqICMS_CUPOM  
                              [Aliquota Reduzida BCICMS]=0
                         Case SubStr([Impopaft->Texto],139,1)="F" And [Tributacao de ICMS]<>"S":
                              [Tributacao de ICMS      ]="S"
                              [Tipo Tributacao         ]=SubStr([Tipo Tributacao],1,1)+"60"
                              [CSOSN                   ]="500"
                              [Aliquota de Icms        ]=0 
                              [Aliquota Reduzida BCICMS]=0
                         Case SubStr([Impopaft->Texto],139,1)="I" And [Tributacao de ICMS]<>"I":
                              [Tributacao de ICMS      ]="I"
                              [Tipo Tributacao         ]=SubStr([Tipo Tributacao],1,1)+"40"
                              [CSOSN                   ]="400"
                              [Aliquota de Icms        ]=0 
                              [Aliquota Reduzida BCICMS]=0
                         Case SubStr([Impopaft->Texto],139,1)="N" And [Tributacao de ICMS]<>"N":
                              [Tributacao de ICMS      ]="N"
                              [Tipo Tributacao         ]=SubStr([Tipo Tributacao],1,1)+"41"
                              [CSOSN                   ]="400"
                              [Aliquota de Icms        ]=0 
                              [Aliquota Reduzida BCICMS]=0
                       EndSwitch
                   EndIf

                   Switch
                     Case [Tributacao de ICMS]="D" :tot="T"
                     Case [Tributacao de ICMS]="S" :tot="F"
                     Case [Tributacao de ICMS]="I" :tot="I"
                     Case [Tributacao de ICMS]="N" :tot="N"
                     Case [Tributacao de ICMS]="O" :tot="N"
                     OtherWise                     :tot="S"
                   EndSwitch

                   AliqICMS=[Aliquota de ICMS]
                   If [Tributacao de ICMS]="D"
                      Then If [Aliquota Reduzida BCICMS]>0
                             Then res     =Round((AliqICMS*[Aliquota Reduzida BCICMS])/100,2)
                                  AliqICMS=AliqICMS-res
                                  tot=tot+AlinhM(StrVal(Int(AliqICMS*100)),4)
                             Else tot=tot+AlinhM(StrVal(Int(AliqICMS*100)),4)
                           EndIf  
                      Else tot=tot+"0000"
                   EndIf
                   
                   [Taxa Desconto Total        ]=TXDESCTO_TOTAL
                   [Valor Desconto Total       ]=NDecimal(([Preco Total]*TXDESCTO_RATEIO)/100,2)
                   [Valor OutDesp Total        ]=NDecimal(([Preco Total]*TXACRESC_RATEIO)/100,2)

                   If [Situacao_Item]<>"C"
                      Then Totalizar(tot,[Preco Total]) 
                           vrrateio_descto=vrrateio_descto+[Valor Desconto Total       ]
                           vrrateio_acresc=vrrateio_acresc+[Valor OutDesp Total        ]
                   EndIf        
                   
                   Switch
                      Case SubStr([Impopaft->Texto],167,1)=" " And SubStr([Impopaft->Texto],139,1)="T":
                  				 VBC=([Preco Total]-[Valor Desconto Total])+[Valor OutDesp Total        ]
                           VBC=VBC-NDecimal((VBC*[Aliquota Reduzida BCICMS])/100,2)
                  				 If AliqICMS>0 And VBC>0
                              Then [Valor do ICMS   ]=NDecimal((VBC*[Aliquota de ICMS])/100,2)
                                   [ICMS_BC         ]=VBC 
                  				 EndIf
                  
                      Case SubStr([Impopaft->Texto],167,1)="S":
                  				 If [Tributacao de ISSQN]="D"
                  						Then ISSQN=True 
                                   If [Aliquota de ISSQN]>0 And [Preco Total]>0
                                     Then [Valor do ISSQN ]= NDecimal(([Preco Total]*[Aliquota de ISSQN])/100,2)
                                          [ISSQN_BC       ]= [Preco Total]
                  				         EndIf
                                   
                  				 EndIf
                   EndSwitch  

          				 VBC=([Preco Total]-[Valor Desconto Total])+[Valor OutDesp Total        ]
                   If [PIS_Aliquota ]>0
                     Then [PIS_Valor  ]= NDecimal((VBC*[PIS_Aliquota])/100,2)
                          [PIS_BC     ]=VBC 
          				 EndIf 
          				 If [COFINS_Aliquota ]>0
                     Then [COFINS_Valor  ]= NDecimal((VBC*[COFINS_Aliquota])/100,2)
                          [COFINS_BC     ]=VBC 
          				 EndIf

                   ;* 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
              
              ;--- gravar vencimentos ------------------------------------------
              Case SubStr([Impopaft->Texto],01,03)="013"  And  ;** Vencimentos **
                   SubStr([Impopaft->Texto],20,02)=NECF   And
                   SubStr([Impopaft->Texto],22,06)=CUPOM:
                   
                   If SubStr([Impopaft->Texto],52,05)="Troco"
                      Then vrtroco=NumVal(SubStr([Impopaft->Texto],30,13))/100
                           If CUPOM = SubStr([Impopaft->Texto],22,6)
                              Then If vrtroco<>0 And vrtroco<>BlankNum()
                          				    Then Moveto "NotaV"
                                           Moveto [Codigo da Empresa]
                                           Locate VSDGEMPRESA,CUPOM,SRDOCTO,AlinhM(StrVal(Seqv),2)
                                           If RetVal
                                              Then [Valor]=[Valor] -  vrtroco
                                                   UnLockRecord
                                           EndIf
                                   EndIf       
                           EndIf 
                      Else Seqv=Seqv+1
                  				 Moveto "NotaV"
                  				 
                  				 While True
                             Moveto [Codigo da Empresa]
                             Locate VSDGEMPRESA,CUPOM,SRDOCTO,AlinhM(StrVal(Seqv),2)
                             If Not RetVal
                                Then End Down
                                     [Codigo da Empresa          ]=VSDGEMPRESA
                                     [Numero do Documento        ]=CUPOM
                                     [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([Impopaft->Texto],45,2)+"/"+
                                                                 SubStr([Impopaft->Texto],43,2)+"/"+
                                                                 SubStr([Impopaft->Texto],47,4))
                           
                           ;e qdo for troco pra outra forma de pagto?
                           CF=SubStr([Impopaft->Texto],28,02)
                           If CF="01"
                              Then [Valor]=NumVal(SubStr([Impopaft->Texto],30,13))/100 -  vrtroco
                              Else [Valor]=NumVal(SubStr([Impopaft->Texto],30,13))/100
                           EndIf
                              
                           [Observacao                 ]=RTrim(SubStr([Impopaft->Texto],52,20))
        
                           Switch
                             Case SubStr([Impopaft->Texto],82,1)="V": cv=cv+1
                             Case SubStr([Impopaft->Texto],82,1)="P": cp=cp+1
                           EndSwitch  
        
                           NC=""
                           FP="OU"
                           Moveto "Opaf_FP"
                           Moveto [Codigo Operacao]
                           Locate CF
                           If Retval
                            Then Moveto [Tipo]
                                 FP   = [Forma de Pagamento  ] 
                                 If [Tipo]="P" ;CartÆo Debito/Credito  
                                    Then NC=[Descricao Operacao] ; Nome do CartÆo
                                 EndIf
                           EndIf        
                           Moveto "Notav" 
                           Moveto [Forma de Pagamento]
                           If Not Busca_Lookup("Tipo do Pagamento",FP,"")
                              Then FP=""
                           EndIf
                           
                           [Forma de Pagamento]=FP
                           If [Forma de Pagamento]="CD" Then [Data]=DTCUPOM EndIf
                           
                           If NC<>""
                              Then Moveto [Nome do Cartao]
                                   If Not Busca_Lookup("Nome do Cartao",NC,"")
                                      Then NC=""
                                   EndIf
                           EndIf
                           [Nome do Cartao    ]=NC
 
                           UnLockRecord
                   EndIf 
           EndSwitch
           
           Moveto "Impopaft"
         EndScan

         ;---- acerto rateio ---------------------------------------------------
         difrateio_descto=vrtotal_descto-vrrateio_descto
         difrateio_acresc=vrtotal_acresc-vrrateio_acresc

         VRBCICMS  =0
         VRICMS    =0

         VRBCISSQN =0
         VRISSQN   =0

         VRBCPIS   =0
         VRPIS     =0

         VRBCCOFINS=0
         VRCOFINS  =0

         maiorgrupo=0 ; regra ecf
         maiorvalor=0

         For wi From 1 To 20
           If SubStr(totalizadores[wi],1,5)<>"S0000" And
              NumVal(SubStr(totalizadores[wi],6,15))>=maiorvalor
              Then maiorvalor=NumVal(SubStr(totalizadores[wi],6,15))
                   maiorgrupo=wi
           Endif         
         EndFor

         Moveto "NotaI"
         Moveto [Codigo da Empresa]
         Locate VSDGEMPRESA, CUPOM, SRDOCTO
         If RetVal
           Then While [Codigo da Empresa  ]=VSDGEMPRESA And
                      [Numero do Documento]=CUPOM       And
                      [Serie do Documento ]=SRDOCTO
      
                 If [Situacao_Item]<>"C" Then

                     If difrateio_descto>0 or difrateio_acresc>0
                        Then
    
                            Switch
                              Case [Tributacao de ICMS]="D" :tot="T"
                              Case [Tributacao de ICMS]="S" :tot="F"
                              Case [Tributacao de ICMS]="I" :tot="I"
                              Case [Tributacao de ICMS]="N" :tot="N"
                              Case [Tributacao de ICMS]="O" :tot="N"
                              OtherWise                     :tot="S"
                            EndSwitch
                            
                            AliqICMS=[Aliquota de ICMS]
                            If [Tributacao de ICMS]="D"
                               Then If [Aliquota Reduzida BCICMS]>0
                                      Then res     =Round((AliqICMS*[Aliquota Reduzida BCICMS])/100,2)
                                           AliqICMS=AliqICMS-res
                                           tot=tot+AlinhM(StrVal(Int(AliqICMS*100)),4)
                                      Else tot=tot+AlinhM(StrVal(Int(AliqICMS*100)),4)
                                    EndIf  
                               Else tot=tot+"0000"
                            EndIf
                            If tot=SubStr(totalizadores[maiorgrupo],1,5) And                     ; regra ecf
                               [Preco Total]>=([Valor Desconto Total]+difrateio_descto) 
                               Then
                                    [Valor Desconto Total       ]=[Valor Desconto Total       ]+difrateio_descto
                                    [Valor OutDesp Total        ]=[Valor OutDesp Total        ]+difrateio_acresc
    
                                    VBC=([Preco Total]-[Valor Desconto Total])+[Valor OutDesp Total        ]
                                    
                                    If [PIS_Aliquota ]>0
                                       Then [PIS_Valor  ]= NDecimal((VBC*[PIS_Aliquota])/100,2)
                                            [PIS_BC     ]=VBC 
                                    EndIf 
                                    If [COFINS_Aliquota ]>0
                                       Then [COFINS_Valor  ]= NDecimal((VBC*[COFINS_Aliquota])/100,2)
                                            [COFINS_BC     ]=VBC 
                                    EndIf
                                    
                                    If [Tributacao de ICMS]="D"
                                       Then VBC=([Preco Total]-[Valor Desconto Total])+[Valor OutDesp Total        ]
                                            VBC=VBC-NDecimal((VBC*[Aliquota Reduzida BCICMS])/100,2)
                                            If AliqICMS>0 And VBC>0
                                               Then [Valor do ICMS   ]=NDecimal((VBC*[Aliquota de ICMS])/100,2)
                                                    [ICMS_BC         ]=VBC 
                                            EndIf
                                    EndIf   
    
                                    difrateio_descto=0
                                    difrateio_acresc=0
                                    
                                    unlockrecord
                                    
                            EndIf
    
                      EndIf
    
                     VRBCICMS  =VRBCICMS  +[ICMS_BC       ]
                     VRICMS    =VRICMS    +[Valor do ICMS ]
 
                     VRBCISSQN =VRBCISSQN +[ISSQN_BC      ]
                     VRISSQN   =VRISSQN   +[Valor do ISSQN]
            
                     VRBCPIS   =VRBCPIS   +[PIS_BC        ]
                     VRPIS     =VRPIS     +[PIS_Valor     ]
            
                     VRBCCOFINS=VRBCCOFINS+[COFINS_BC     ]
                     VRCOFINS  =VRCOFINS  +[COFINS_Valor  ]
                  EndIf
      
                  Moveto "NotaI" 
                  Skip
                  If EOT() Then QuitLoop EndIf
                EndWhile
        Endif


         Moveto "NotaC"
         Moveto [Codigo da Empresa]
         Locate VSDGEMPRESA,CUPOM,SRDOCTO
         If RetVal
            Then
                 [Valor BCICMS         ]=VRBCICMS
                 [Valor ICMS           ]=VRICMS
                 [Valor ISSQN          ]=VRISSQN      
                 [Valor BCISSQN        ]=VRBCISSQN
                 [Valor PIS            ]=VRPIS
                 [Valor COFINS         ]=VRCOFINS
                 
                 If cv>=1 Then [Tipo de Pagamento]="V" EndIf   
                 If cp>=1 Then [Tipo de Pagamento]="P" EndIf
        
                 Moveto [Condicao de Pagamento      ]
                 CODP=SubStr([Impopaf->Texto],361,2)
                 
                 If CODP="" or CODP="00" 
                  Then If [Tipo de Pagamento]="V" 
                        Then If Busca_Lookup("Codigo_Avanco","001","")
                                Then CODP=REG_BUSCA_LOOKUP["Condicao de Pagamento"]
                             EndIf
                        Else If Busca_Lookup("Codigo_Avanco","002","")
                                Then CODP=REG_BUSCA_LOOKUP["Condicao de Pagamento"]
                             EndIf
                       EndIf      
                 EndIf
                 [Condicao de Pagamento      ]=CODP
        
                 Moveto [Forma de Pagamento]
                 If Not Busca_Lookup("Tipo do Pagamento",FP,"")
                    Then FP=""
                 EndIf
                 [Forma de Pagamento         ]=FP
                 
                 If FP="CD"
                  Then [Tipo de Pagamento ]="P"
                       [Numero de Parcelas]=1
                       [Composicao de Dias]="1"
                 EndIf      
           
                 Controle_Dia() 
                 UnLockRecord
         EndIf
         
  EndSwitch
  
  Moveto "Impopaf"
EndScan
Do_It!

ClearAll

EndProc

;*******************************************************************************
;* Processa dados Reducao Z                                                    *
;*******************************************************************************
Proc ProcessaZ()

NR=NRecords("Impopaf")

;View "P_Cupom"
View "ECF_C"
View "ECF_T"
View "ECF_S"
View "Impopaft"
CoEdit "Impopaf"
SetHighLight Current Record 23 Field 31
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Convertendo Reducao Z "+Completa(StrVal(Recno())+"/"+StrVal(NR),9," ")+BARRA_STRING)

  Switch
    Case SubStr([Impopaf->Texto],01,3)="017":

         If SubStr([Impopaf->Texto],150,4)="0000"
            Then Loop
         EndIf   

         DTREDZ=DateVal(SubStr([Impopaf->Texto],148,2)+"/"+
                        SubStr([Impopaf->Texto],146,2)+"/"+
                        SubStr([Impopaf->Texto],150,4))
         Switch
           Case DTREDZ<VSDGDTINI : Loop 
           Case DTREDZ>VSDGDTFIM : Loop 
         EndSwitch
         
         PKCUPOM=SubStr([Impopaf->Texto],04,10)
         NECF =SubStr([Impopaf->Texto],163,1)
         CRO=SubStr([Impopaf->Texto],334,3)
         SRDOCTO="X"+NECF+SubStr(CRO,2,2)
         NECF=NumVal(NECF)    

         ;*** Implementado em 14.02.2014 ********************
         CUP_I = SubStr([Impopaf->Texto],014,06)
         CUP_F = SubStr([Impopaf->Texto],020,06)
         
         If SubStr([Impopaf->Texto],177,06) <> "000000" And                           ;Numero Cupom Reducao
            (CUP_I ="000000"    And  CUP_F ="000000")   
            Then Moveto "Impopaf"
                 Loop
         EndIf
         ;***************************************************
  
         Moveto "ECF_C"
         While True
           Moveto [Numero do ECF]
           Locate IndexOrder by "Ind_ecf1" NECF,VSDGEMPRESA,DTREDZ
           If Not RetVal
              Then End Down
                   [Codigo da Empresa       ]=VSDGEMPRESA
                   [Serie do Documento      ]=SRDOCTO
                   [Data                    ]=DTREDZ
                   [Numero do ECF           ]=NumVal(SubStr([Impopaf->Texto],160,04))
                   [Reinicio Operacao       ]=CRO         
                   [Numero Serie Fabricacao ]=SubStr([Impopaf->Texto],270,20)

                   If IsLockRecord()
                         Then Del
                         Else UnLockRecord     
                   EndIf        
                   Loop
           EndIf
           If Not IsLockRecord()
              Then QuitLoop
           EndIf   
         EndWhile

         [Numero Sequencia           ]="000000"
         [Numero Cupom Inicial       ]=SubStr([Impopaf->Texto],014,06)
         [Numero Cupom Final         ]=SubStr([Impopaf->Texto],020,06)
         [Numero Cupom Reducao       ]=SubStr([Impopaf->Texto],177,06)
         [Contador Reducao           ]=SubStr([Impopaf->Texto],062,06)
         [Totalizador Inicial        ]=NumVal(SubStr([Impopaf->Texto],026,18))/100
         [Totalizador Final          ]=NumVal(SubStr([Impopaf->Texto],044,18))/100
         [Cancelados                 ]=NumVal(SubStr([Impopaf->Texto],068,13))/100
         [Descontos                  ]=NumVal(SubStr([Impopaf->Texto],094,13))/100
         [Isento                     ]=NumVal(SubStr([Impopaf->Texto],107,13))/100
         [Nao Incidencia             ]=NumVal(SubStr([Impopaf->Texto],120,13))/100
         [Substituicao Tributaria    ]=NumVal(SubStr([Impopaf->Texto],133,13))/100
         [Acrescimos                 ]=NumVal(SubStr([Impopaf->Texto],081,13))/100
         [Acrescimos Financeiros     ]=0
         [Sangria                    ]=0
         [Suprimentos                ]=0
         [ISSQN                      ]=0
         [ISSQN Cancelados           ]=NumVal(SubStr([Impopaf->Texto],192,13))/100
         [ISSQN Descontos            ]=NumVal(SubStr([Impopaf->Texto],218,13))/100
         [ISSQN Acrescimos           ]=NumVal(SubStr([Impopaf->Texto],205,13))/100
         [ISSQN Isento               ]=NumVal(SubStr([Impopaf->Texto],231,13))/100
         [ISSQN Nao Incidencia       ]=NumVal(SubStr([Impopaf->Texto],244,13))/100
         [ISSQN Subs. Tributaria     ]=NumVal(SubStr([Impopaf->Texto],257,13))/100
         Controle_Dia()
         UnLockRecord

         Moveto "Impopaft"
         Scan For SubStr([Impopaft->Texto],01,03)="018"        And ;** Aliquotas **
                  SubStr([Impopaft->Texto],47,01)=StrVal(NECF) And
                  SubStr([Impopaft->Texto],04,10)=PKCUPOM
                  
           If SubStr([Impopaft->Texto],50,01)="S" 
            Then Moveto "ECF_S"
                 While True
                   Moveto [Codigo da Empresa]
                   Locate VSDGEMPRESA,SRDOCTO,DTREDZ,NumVal(SubStr([Impopaft->Texto],14,04))/100
                   If Not RetVal
                      Then End Down
                           [Codigo da Empresa          ]=VSDGEMPRESA
                           [Serie do Documento         ]=SRDOCTO
                           [Data                       ]=DTREDZ
                           [Indice Aliquota            ]=SubStr([Impopaft->Texto],48,02)
                           [Aliquota de ISSQN          ]=NumVal(SubStr([Impopaft->Texto],14,04))/100
                           If IsLockRecord()
                                 Then Del
                                 Else UnLockRecord     
                           EndIf        
                           Loop
                   EndIf
                   If Not IsLockRecord()
                      Then QuitLoop
                   EndIf   
                 EndWhile
                 [Base de Calculo ISSQN      ]=NumVal(SubStr([Impopaft->Texto],18,13))/100
                 [Valor do ISSQN             ]=NumVal(SubStr([Impopaft->Texto],31,13))/100
                 UnLockRecord
                 Moveto "Impopaft"
            Else Moveto "ECF_T"
                 While True
                   Moveto [Codigo da Empresa]
                   Locate VSDGEMPRESA,SRDOCTO,DTREDZ,NumVal(SubStr([Impopaft->Texto],14,04))/100
                   If Not RetVal
                      Then End Down
                           [Codigo da Empresa          ]=VSDGEMPRESA
                           [Serie do Documento         ]=SRDOCTO
                           [Data                       ]=DTREDZ
                           [Indice Aliquota            ]=SubStr([Impopaft->Texto],48,02)
                           [Aliquota de ICMS           ]=NumVal(SubStr([Impopaft->Texto],14,04))/100
                           If IsLockRecord()
                                 Then Del
                                 Else UnLockRecord     
                           EndIf        
                           Loop
                   EndIf
                   If Not IsLockRecord()
                      Then QuitLoop
                   EndIf   
                 EndWhile
                 [Base de Calculo ICMS       ]=NumVal(SubStr([Impopaft->Texto],18,13))/100
                 [Valor do ICMS              ]=NumVal(SubStr([Impopaft->Texto],31,13))/100
                 UnLockRecord
                 Moveto "Impopaft"
           EndIf
           
         EndScan
  EndSwitch

  Moveto "Impopaf"
EndScan
Do_It!
ClearAll

EndProc

;************************************
;* 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 ;

;*******************************************************************************
;* 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
                  executarF1=false
                  Dynarray WinArray5[]
                  Window Handle Dialog To JANELA_DIALOG
                  Window GetAttributes JANELA_DIALOG To WinArray5
                  
                  View "\\Sistemas\\Vendas\\Opaf_ECF"    executarF1=True
                  
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA_DIALOG From WinArray5
          
                  executarF1=Consulta_Sem_F1()
                  If executarF1
                     Then Campo="TG_NSERIE"
                                 VSDGNECF     =[Numero ECF       ]
                                 VSDGNSERIE   =[Numero de Serie  ]
                                 VSDGNREINICIO=[Reinicio Operacao]
                  EndIf
                  Window Select JANELA_DIALOG
                  WinArray5["FLOATING"]=True
                  Window SetAttributes JANELA_DIALOG From WinArray5
 
                  ClearImage
                  Echo Normal
                  Echo Off
                  RefreshDialog
                  Campo="TG_NECF"
              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_HRINI"         : Campo="TG_DTINI"
            Case Campo="TG_DTFIM"         : Campo="TG_HRINI"
            Case Campo="TG_HRFIM"         : Campo="TG_DTFIM"
            Case Campo="TG_CAMINHO"       : Campo="TG_HRFIM"  
            Case Campo="TG_NECF"          : Campo="TG_CAMINHO"
            Case Campo="TG_OPCOES"        : Campo="TG_NECF"
            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 IsBlanK(VSDGEMPRESA)
                          Then Campo="TG_EMPRESA"                           
                          Else VSDGEMPRESA=AlinhM(VSDGEMPRESA,4)
                               Campo="TG_DTINI"
                         EndIf 
                    Case Campo="TG_DTINI"      : Campo="TG_HRINI"
                    Case Campo="TG_HRINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="TG_HRFIM"
                    Case Campo="TG_HRFIM"      : 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"       :
                          VSDGNECF=ControlValue("TG_NECF")
                          If Not IsBlanK(VSDGNECF)
                             Then VSDGNECF=AlinhM(VSDGNECF,2)
                                  View NOWINDOW "\\Sistemas\\Vendas\\OPAF_ECF"
                                  Moveto [Numero ECF]
                                  Locate VSDGNECF
                                  If RetVal
                                     Then VSDGNSERIE   =[Numero de Serie]
                                          VSDGNREINICIO=[Reinicio Operacao]  
                                          Campo="TG_OPCOES"
                                     Else MENSAGEM("Numero ECF n„o Cadastrado !")       
                                  EndIf
                                  ClearImage
                             Else MENSAGEM("Numero ECF n„o Cadastrado !") 
                                  Campo="TG_NECF"
                         EndIf     
                    Case Campo="TG_OPCOES"     :
                         If (VSDGOPCAO[1]=False) And
                            (VSDGOPCAO[2]=False)
                            Then Campo="TG_OPCOES"
                            Else Campo="YES"
                         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_OPCOES"  : MSG_CAMPO="Selecione uma ou mais op‡oes se desejar !"
                           TECLA    ="=Mover  Barra de espa‡o=Marca/Desmarca "
 Case Campo="TG_NECF"    : MSG_CAMPO="Informe o Numero do ECF 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()

Array AICMS[10]
Array VIICMS[10]
Array BCICMS[10]
Array RICMS[10]

Array AISSQN[10]
Array BCISSQN[10]
Array VIISSQN[10]
           
Array APIS[10]
Array VIPIS[10]
Array BCPIS[10]

Array ACOFINS[10]
Array VICOFINS[10]
Array BCCOFINS[10]
           
Array VSDGOPCAO[2]
VSDGOPCAO[1]=True 
VSDGOPCAO[2]=True 

ConfOpcoes("Ler")

VSDGEMPRESA=""
VSDGDTINI  =BlankDate()
VSDGDTFIM  =BlankDate()
VSDGHRINI  =""
VSDGHRFIM  =""
VSDGNECF   =""
VSDGNSERIE =""

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 " 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 13 Width 76

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

    Label  @ 02,00 "Per¡odo Referente" For "TG_DTINI"
    Label  @ 03,00 "de" For "TG_DTINI"
    Accept @ 03,04 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Accept @ 03,18 Width 08 "A5"  Picture "##:##" Tag "TG_HRINI" To VSDGHRINI

    Label  @ 03,26 "at‚" For "TG_DTFIM"
    Accept @ 03,31 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
    Accept @ 03,46 Width 08 "A5"  Picture "##:##" Tag "TG_HRFIM" To VSDGHRFIM

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

    Label  @ 06,00 "ECF"  For "TG_NECF"
    Accept @ 07,01 Width 05 "A2"  Picture "#*#" Tag "TG_NECF" To VSDGNECF

    Label  @ 06,06 "Numero de Serie"  For "TG_NSERIE"
    Accept @ 07,07 Width 23 "A20"  Picture "#*#" Tag "TG_NSERIE" To VSDGNSERIE


    Label  @ 01,55 "Op‡oes " For "TG_OPCOES"
    CheckBoxes @2,56 Height 7 Width 15 Tag "TG_OPCOES"
    "Redu‡Æo Z  " to VSDGOPCAO[1],
    "Cupons     " to VSDGOPCAO[2]

    Pushbutton @ 09,20 width 13 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 09,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(VSDGHRINI)  Or IsBlank(VSDGHRFIM)
     Then Mensagem("Hora Invalida !")
          Loop
  EndIf
  
  If IsBlank(VSDGNECF)
     Then Mensagem("Numero ECF Inv lido!")
          Loop
  EndIf  
  
  If Not VSDGOPCAO[1] And
     Not VSDGOPCAO[2]     
     Then Mensagem("Selecione uma das opcäes !")
          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       ]
            TP_EMPR=[Tipo da Empresa  ]
     Else CNPJ_EMPR="??"
           ATIVEMPR="??"
            UF_EMPR="??"
            TP_EMPR="??"
  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 VSDGOPCAO[1] Then ProcessaZ() EndIf
  If VSDGOPCAO[2] Then ProcessaC() EndIf

  If IsTable("Impopaft")
     Then Delete "ImpOpaft"
  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 ECF/Cupons por forma de pagamento  e//"
  MSG=MSG+"  produtos do dia, e confira com vendas l¡quidas da redu‡Æo 'Z'; // //"
  MSG=MSG+"- Confira mapa resumo com a redu‡Æo 'Z';                         // //"
  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
