;** Exp_IDBR *******************************************************************
;*  Exportacao de dados p/ ECF ID Brasil  OPAF                                 *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 20/08/2010 por Anivel Augusto Rodrigues
;Ultima Alteracao: 04/10/2010 por Karina 
;Motivo Alteracao: Ajustes Layout 003, versao 1.1 Opaf
;Ultima Alteracao: 21/10/2010 por Karina 
;Motivo Alteracao: Ajustes Numero_ECF
;Ultima Alteracao: 07/01/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Numero ECF e Aliquota Red BCICMS
;Ultima Alteracao: 12/01/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Numero ECF e Numero de Serie
;Ultima Alteracao: 09/02/2011 por Karina OAndrade
;Motivo Alteracao: Ajustes Proc CondPagto
;Ultima Alteracao: 14/02/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TabPreco
;Ultima Alteracao: 09/03/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Layout 005,versao 2.0.1 OPAF
;Ultima Alteracao: 08/04/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Aliquota Red BCICMS
;Ultima Alteracao: 10/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Layout 006,versao 2.1.0 OPAF
;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 CGC zerado.
;Ultima Alteracao: 26/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Registro 033 - Codigo Vinculado
;Ultima Alteracao: 20/09/2011 por Karina Andrade
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 05/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Layout 007,versao 3.0.0 OPAF
;Ultima Alteracao: 13/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Codigo_Cidade e desabilitado envio do CSOSN
;Ultima Alteracao: 15/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagem Inicial
;Ultima Alteracao: 27/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes COR_MENSAGEM="1" quando log correto
;Ultima Alteracao: 17/04/2012 por Karina Andrade
;Motivo Alteracao: Add exporta‡Ćo de itens do tipo Embalagem 
;                  para SYS_CODIGO_CLIENTE="0005"
;Ultima Alteracao: 20/04/2012 por Karina Andrade
;Motivo Alteracao: Ajustes para EMPRESA que possui mais de 1 ECF - CONCENTRADOR 
;Ultima Alteracao: 24/04/2012 por Karina Andrade
;Motivo Alteracao: Ajustes tempo retorno log quando selecionado inventario
;Ultima Alteracao: 08/05/2012 por Karina Andrade
;Motivo Alteracao: Ajustes tempo para retorno log quando selecionado inventario
;Ultima Alteracao: 05/06/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Data referente ao inventario
;Ultima Alteracao: 16/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagem Inicial/Final e arquivo remessa
;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: 26/02/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nĆo pesquisar tabela preco 2 se for em branco
;Ultima Alteracao: 22/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes campo Limite de credito
;Ultima Alteracao: 16/04/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes CGC invalido "111111111"  
;Ultima Alteracao: 15/07/2013 por Karina Andrade
;Motivo Alteracao: Habilitado envio do CSOSN     

;*******************************************************************************
;* Proximo arquivo RM                                                          *
;*******************************************************************************
Proc ArqRM(tipo)
Private num, tipo, narqr, narql, wcc, cc, ccr, ccp, num1, num2

Aguarde("Gerando a remessa par o INTEGRADOR/OPAF ")


If IsTable(PrivDir()+"Temp_LWR") Then Delete PrivDir()+"Temp_LWR" EndIf
If IsTable(PrivDir()+"Temp_LWL") Then Delete PrivDir()+"Temp_LWL" EndIf
If IsTable(PrivDir()+"Temp_LMR") Then Delete PrivDir()+"Temp_LMR" EndIf

{Tools} {Info} {Inventory} {Files} TypeIn VSDGCAMINHOW+"\\RM*.R" Enter ClearImage
Rename "List" PrivDir()+"Temp_LWR"

{Tools} {Info} {Inventory} {Files} TypeIn VSDGCAMINHOW+"\\RM*.L"+VSDGNECF Enter ClearImage
Rename "List" PrivDir()+"Temp_LWL"

{Tools} {Info} {Inventory} {Files} TypeIn VSDGCAMINHO +"\\RM*.R"  Enter ClearImage
Rename "List" PrivDir()+"Temp_LMR"

num=0
ccr=0
View PrivDir()+"Temp_LMR"
View PrivDir()+"Temp_LWL"
View PrivDir()+"Temp_LWR"
Scan          
  CopyToArray REG

  num=SubStr([Name],3,6)
  If E_Numerico(num)
     Then num=Numval(num)
     Else num=0
  EndIf   

  narqr=REG["Name"]
  narql=SubStr(REG["Name"],1,8)+".l"+VSDGNECF

  cc=0
  Moveto PrivDir()+"Temp_LWL"
  Moveto [Name]
  Locate narql       
  If RetVal
     Then cc=cc+1 
     Else ccr=ccr+1           
  EndIf   
      
  Moveto PrivDir()+"Temp_LMR"
  Moveto [Name]
  Locate narqr       
  If RetVal
     Then cc=cc+1 
  EndIf   
      
  Moveto PrivDir()+"Temp_LWR"
  If cc>0 And [Date]<=(Today()-8)
     Then Deleta_Arquivo(VSDGCAMINHO +"\\"+narqr)
          Deleta_Arquivo(VSDGCAMINHO +"\\"+narql)
          
          Deleta_Arquivo(VSDGCAMINHOW+"\\"+narqr)
          Deleta_Arquivo(VSDGCAMINHOW+"\\"+narql)
  EndIf

EndScan   
ClearAll
num1=num


ccp=0
num=0
View PrivDir()+"Temp_LWR"
View PrivDir()+"Temp_LMR"
Scan          
  CopyToArray REG

  narqr=REG["Name"]
  narql=SubStr(REG["Name"],1,8)+".l"+VSDGNECF

  cc=0
  Moveto PrivDir()+"Temp_LWR"
  Moveto [Name]
  Locate narqr       
  If RetVal
     Then cc=1 
     Else ccp=ccp+1
  EndIf   
      
  Moveto PrivDir()+"Temp_LMR"
  If cc=0
     Then num=SubStr([Name],3,6)
          If E_Numerico(num)
             Then num=Numval(num)
             Else num=0
          EndIf   
  EndIf     
  
EndScan   
ClearAll
num2=num

If num2>=num1 
   Then num=num2
   Else num=num1
EndIf   

num=num+1
CriaProximo_ArqM(num)

Delete PrivDir()+"Temp_LWR"
Delete PrivDir()+"Temp_LWL"
Delete PrivDir()+"Temp_LMR"

COR_MENSAGEM="1"
MSG    ="Arquivo remessa gerado em: // //"
MSG=MSG+ARQR+"// //"
MSG=MSG+"Verificar:                                                         //"
MSG=MSG+"- INTEGRADOR do OPAF j  executou ou esta executando alguma remessa;//"
MSG=MSG+"- Resultado do arquivo LOG desta remessa se esta Ok ou algum erro. "
Mensagem(MSG)

If ccr>0 or ccp>0 Then
  COR_MENSAGEM="1"
  MSG=""
  If ccr>0 Then MSG=MSG+"Existe(m) "+StrVal(ccr)+" outro(s) arquivo(s) em processamento//" EndIf 
  If ccp>0 Then MSG=MSG+"Existe(m) "+StrVal(ccp)+" outro(s) arquivo(s) a processar//"      EndIf 
  MSG=MSG+"Verifique o processo pendente pelo INTEGRADOR, alem deste gerado!//"
  Mensagem(MSG)
EndIf

Return True
EndProc

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

ARQREM="RM"+AlinhM(STrVal(num),6)
ARQT=VSDGCAMINHO+"\\"+ARQREM+".L"+VSDGNECF
If IsFile(ARQT) Then Deleta_Arquivo(ARQT) EndIf

ARQT=VSDGCAMINHO+"\\"+ARQREM+".R"
If IsFile(ARQT) Then Deleta_Arquivo(ARQT) EndIf

ARQL=VSDGCAMINHO+"\\"+ARQREM+".L"+VSDGNECF
ARQR=VSDGCAMINHO+"\\"+ARQREM+".R"

Copia_Arquivo(ARQ+" "+ARQR)
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

;*******************************************************************************
;* Gera Cabecalho                                                              *
;*******************************************************************************
Proc Cabecalho()
ClearAll

Print File ARQ "001"
Print File ARQ AlinhM(Tira_CharNum(CNPJ_Empr),14)
Print File ARQ "REM"
Print File ARQ AlinhM(StrVal(Day(Today())),2)+AlinhM(StrVal(Month(Today())),2)+AlinhM(StrVal(Year(Today())),4)
Print File ARQ SubStr(Time(),1,2)+SubStr(Time(),4,2)+SubStr(Time(),7,2)
Print File ARQ "0000"
Print File ARQ "008"  ;KAMILA
Print File ARQ "\n"

NReg=0
EndProc

;*******************************************************************************
;* Gera Rodape                                                                 *
;*******************************************************************************
Proc Rodape()
ClearAll

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

EndProc

;*******************************************************************************
;* Gera Usuarios                                                               *
;*******************************************************************************
Proc Usuarios()
ClearAll

Barra(1,1)
AGUARDE("Aguarde, Exportando Usu rios "+BARRA_STRING)

Print File ARQ "002"
Print File ARQ Completa("USER1",15," ")
Print File ARQ Completa("user1",60," ")
Print File ARQ "A"
Print File ARQ "2"
Print File ARQ "A"
Print File ARQ "\n"
NReg=NReg+1

Print File ARQ "002"
Print File ARQ Completa("USER2",15," ")
Print File ARQ Completa("user2",60," ")
Print File ARQ "A"
Print File ARQ "2"
Print File ARQ "A"
Print File ARQ "\n"
NReg=NReg+1

EndProc

;*******************************************************************************
;* Gera Arquivo Texto -- Clientes                                              *
;*******************************************************************************
Proc Clientes()
ClearAll
;ConsumidorFinal()

NR=NRecords("\\Sistemas\\Cadastro\\Destinat")

View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Cadastro\\Destinat"

Scan

  Barra(NR, RecNo())
  AGUARDE("Aguarde, Exportando Clientes "+BARRA_STRING)

  If IsBlank([CGC])                   Then Loop EndIf
  If [CGC]="00.000.000/0000-00"       Then Loop EndIf
  If [CGC]="000.000.000-00"           Then Loop EndIf
  If [CGC]="00000.000/0000-00"        Then Loop EndIf
  If [CGC]="11.111.111/1111-11"       Then Loop EndIf
  If [CGC]="111.111.111-11"           Then Loop EndIf
  If [CGC]="11111.111/1111-11"        Then Loop EndIf
  If Tipo_CGC_CPF([CGC])=""           Then Loop EndIf
  If IsBlank([Razao Social])          Then Loop EndIf
  If [Tipo]<>"C"                      Then Loop EndIf

  Print File ARQ "004"
  Print File ARQ Completa(AlinhM([Codigo],4),15," ") 
  Print File ARQ Completa(Tira_CharNum([CGC]),14," ")
  Print File ARQ Format("W60,AL",Tira_charEspecial([Razao Social]))
  
  PegaEndereco([Endereco])

  Print File ARQ Format("W60,AL",Tira_charEspecial(End_Logradouro))
  Print File ARQ Format("W30,AL",Tira_charEspecial([Cidade]))
  Print File ARQ Format("W60,AL",Tira_charEspecial([Bairro]))
  Print File ARQ Format("W02,AL",[UF])
  Print File ARQ Format("W15,AL",Tira_charEspecial([Telefone]))
  Print File ARQ Format("W60,AL",[Endereco_Eletronico])
  
  If [Inativo]="N" 
    Then Print File ARQ "A"
         Print File ARQ Completa(" ",25," ")  
    Else Print File ARQ "I"
         Print File ARQ "Verificar com a Gerencia!" 
  EndIf
  
  ; Complemento de 01 a 04 = 20.20.40.40   
  Print File ARQ Completa(" ",20," ")
  Print File ARQ Completa(" ",20," ")
  Print File ARQ Completa(" ",40," ")
  Print File ARQ Completa(" ",40," ")
  
  If [Tipo Pessoa]="JURIDICA"
    Then Print File ARQ Format("W14,AL",Monta_String([IE])) 
    Else Print File ARQ Format("W14,AL",Monta_String([RG])) 
  EndIf   
  
  Print File ARQ AlinhM(Tira_CharNum([Cep]),8)
  Print File ARQ Completa(End_Numero,10," ")

  CIDADE=[Cidade]
  Moveto "\\Sistemas\\Cadastro\\Cidades"
  Moveto [Cidade]
  Locate CIDADE
  If [UF]<>"EX"
    Then Print File ARQ Completa(StrVal([Codigo_Cidade]),7," ")
    Else Print File ARQ Completa(" ",7," ")
  EndIf  
  Moveto "\\Sistemas\\Cadastro\\Destinat"
  
  Print File ARQ Completa(Tira_charEspecial(End_Complemento),60," ")
  Print File ARQ Completa(Monta_String([ISUFRAMA]),9," ")
  Print File ARQ Completa([Endereco_Eletronico],200," ")
  Print File ARQ Completa(" ",100," ")
  Print File ARQ Completa("",13,"0")  ;kamila
  Print File ARQ "\n"

  NReg=NReg+1
EndScan
Do_It!
ClearAll
EndProc ;(ExportaC)


Proc ConsumidorFinal()
  Print File ARQ "004"
  Print File ARQ "123456789012345"
  Print File ARQ "12345678901234"
  Print File ARQ Format("W30,AL",Tira_charEspecial("CONSUMIDOR FINAL"))
  Print File ARQ Format("W30,AL",Tira_charEspecial(""))
  Print File ARQ Format("W30,AL",Tira_charEspecial(""))
  Print File ARQ Format("W20,AL",Tira_charEspecial(""))
  Print File ARQ Format("W02,AL","MG")
  Print File ARQ Format("W15,AL","")
  Print File ARQ Format("W60,AL","")
  Print File ARQ "\n"

  NReg=NReg+1
EndProc ;ConsumidorFinal()


Proc PegaEndereco(s)
Private s,posl,posn

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

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

EndProc ;PegaEndereco(s)

Proc Monta_String(MSTRING)
M_NOVO = ""

For I From 1 to Len(MSTRING)
    If (Asc(SubStr(MSTRING,I,1)) >= 48) And
       (Asc(SubStr(MSTRING,I,1)) <= 57)
       Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
    EndIf
EndFor

Return(M_NOVO)
EndProc ; (Monta_String)

;*******************************************************************************
;* Gera Arquivo Texto p/ Produtos                                              *
;*******************************************************************************
Proc Produtos(wi)
ClearAll

NR=NRecords("\\Sistemas\\Estoque\\Itens")

View "\\Sistemas\\Vendas\\Opaf_Ref"
View "\\Sistemas\\Vendas\\TbPrIte"
View "\\Sistemas\\Estoque\\SdEstq"
View "\\Sistemas\\Estoque\\Itens"

Scan
  Barra(NR, RecNo())
  Switch
    Case wi=1 : AGUARDE("Aguarde, Exportando Produtos        "+BARRA_STRING)
    Case wi=2 : AGUARDE("Aguarde, Exportando Pre‡os          "+BARRA_STRING)
    Case wi=3 : AGUARDE("Aguarde, Exportando Invent rio      "+BARRA_STRING)
    Case wi=4 : AGUARDE("Aguarde, Exportando C˘digo de Barras"+BARRA_STRING)
  EndSwitch

  If IsBlank([Descricao do Item])  Then Loop EndIf
  If IsBlank([Tipo Tributacao  ])  Then Loop EndIf
  If [Tributacao de ICMS]="D" And 
     [Aliquota de ICMS]<=0         Then Loop EndIf

  If [Tipo do Item]<>"P" And [Tipo do Item]<>"C" And [Tipo do Item]<>"T" And 
     ([Tipo do Item]<>"E" Or SYS_CODIGO_CLIENTE<>"0005") 
     Then  Loop
  EndIf   

  Switch
    Case wi=1:
      Print File ARQ "005"
      ;limitou a 14 caracteres
      Print File ARQ ""+Completa([Codigo do Item  ],20," ")
      Print File ARQ ""+Completa(Tira_CharEspecial([Descricao do Item]),40," ")
      Print File ARQ ""+Completa(Tira_CharEspecial([Unidade Fiscal   ]),3," ")
      Print File ARQ ""+Completa(Tira_CharEspecial(SubStr([Descricao Complementar],1,30)),30," ")
      Print File ARQ ""+Completa(Tira_CharEspecial([Referencia]),30," ")
      If [Tipo Codigo_Barras]<>""
        Then Print File ARQ ""+Completa(Tira_CharEspecial([Codigo de Barras]),30," ")
        Else Print File ARQ ""+Completa(Tira_CharEspecial(" "),30," ")
      EndIf  
      Switch
        Case [Inativo]="S" : Print File ARQ "I"
        OtherWise          : Print File ARQ "A"
      EndSwitch
      
      If (TP_Empr="SIMPLES NACIONAL" Or TP_Empr="SIMPLES NAC. ESRB")
        Then Print File ARQ AlinhM([CSOSN          ],3)
        Else 
              Print File ARQ AlinhM(Substr([Tipo Tributacao],2,3),3)
      EndIf
        
      Switch
       Case [Tributacao de ICMS]="D" :Print File ARQ "T"
       Case [Tributacao de ICMS]="S" :Print File ARQ "F"
       Case [Tributacao de ICMS]="I" :Print File ARQ "I"
       Case [Tributacao de ICMS]="N" :Print File ARQ "N"
       Case [Tributacao de ICMS]="O" :Print File ARQ "N"
       OtherWise                     :Print File ARQ " "
      EndSwitch
      If [Tributacao de ICMS]="D"
         Then If [Aliquota Reduzida BCICMS]>0
                Then res  = Round(([Aliquota de ICMS] * [Aliquota Reduzida BCICMS])/100,2)
                     aliq = [Aliquota de ICMS] - res
                     Print File ARQ AlinhM(StrVal(Int(aliq*100)),4)
                Else Print File ARQ AlinhM(StrVal(Int([Aliquota de ICMS]*100)),4)
              EndIf  
         Else Print File ARQ "0000"
      EndIf
      Switch
       Case [Tipo do Item]="T" : Print File ARQ "T"
       OtherWise               : Print File ARQ "P"
      EndSwitch
      Print File ARQ AlinhM("0",13)
      ;ver KG
      Print File ARQ "U"
      Print FIle ARQ "F"
      If [Tipo do Item]="C"
        Then Print FIle ARQ "S"
        Else Print FIle ARQ " "
      EndIf  
      Print File ARQ Completa(Substr([Tipo Tributacao],1,1),1," ")
      
      If [Tipo do Item]="C"
        Then 
            Switch
             Case [Tributacao de ISSQN]="D" :Print File ARQ "N"
             Case [Tributacao de ISSQN]="N" :Print File ARQ "N"
             Case [Tributacao de ISSQN]="I" :Print File ARQ "I"
             Case [Tributacao de ISSQN]="R" :Print File ARQ "R"
             Case [Tributacao de ISSQN]="S" :Print File ARQ "S"
            EndSwitch
        Else Print File ARQ " "
      EndIf
      Print File ARQ "N"  ;kamila
      Print FIle ARQ "\n"

      NReg=NReg+1
      
    Case wi=2: 
      CODITEM=[Codigo do Item]

      For wx From 1 To 2
        Switch
          Case wx=1 : CODTAB=VSDGTABELA
          Case wx=2 : CODTAB=VSDGTABELA2
                      If IsBlank(CODTAB) Then Loop EndIf
                      
        EndSwitch

        Moveto "\\Sistemas\\Vendas\\TbPrIte"
        Moveto [Codigo da Tabela]
        Locate CODTAB, CODITEM
        If RetVal
           Then If Not IsBlank([Preco Unitario]) And [Preco Unitario]>0 
                   Then Print File ARQ "006"
                        Print File ARQ ""+Completa([Codigo do Item  ],20," ")
                        Switch
                          Case wx=1 : Print File ARQ CODTAB+"VISTA"
                          Case wx=2 : Print File ARQ CODTAB+"PRAZO"
                        EndSwitch
                        valor=AlinhM(Tira_CharNum(LTrim(Rtrim(Format("W13.2",[Preco Unitario])))),13)
                        Print File ARQ valor 
                        Print FIle ARQ "\n"
                        NReg=NReg+1
                EndIf
        EndIf
      EndFor

    Case wi=3:
      CODITEM=[Codigo do Item]
      UNID   =[Unidade Fiscal]
      DESCR  =[Descricao do Item]

      Moveto "\\Sistemas\\Estoque\\SdEstq"
      Moveto [Codigo da Empresa]
      Locate VSDGEMPRESA, CODITEM, ANOREF, MESREF
      If RetVal
         Then Print File ARQ "020"
              Print File ARQ DIAREF+MESREF+ANOREF
              Print File ARQ ""+Completa([Codigo do Item  ],20," ")
              Print File ARQ ""+Completa(Tira_CharEspecial(DESCR),40," ")
              If [Saldo Atual]>0
                 Then Print File ARQ AlinhM(StrVal(Int([Saldo Atual]*1000)),13)
                 Else Print File ARQ AlinhM("0",13)
              EndIf   
              If ([Custo Total Atual]/[Saldo Atual])>0
                 Then CT=NDecimal([Custo Total Atual]/[Saldo Atual],2)
                      Print File ARQ AlinhM(StrVal(Int(CT*100)),13)
                 Else Print File ARQ AlinhM("0",13)
              EndIf
              Print FIle ARQ "1"
              Print FIle ARQ Completa("",14,"0")
              Print FIle ARQ Completa("",14," ")
              Print File ARQ ""+Completa(Tira_CharEspecial(UF_Empr),2," ")
              Print File ARQ ""+Completa(Tira_CharEspecial(UNID),3," ")
              Print FIle ARQ "\n"
              NReg=NReg+1
      EndIf

    Case wi=4:
      CODITEM=[Codigo do Item    ]
      TPCB   =[Tipo Codigo_Barras]
      CB     =[Codigo de Barras  ]      
      INATIVO=[Inativo           ]
      OK=False
      For wx From 1 To 2
        Switch
          Case wx=1 : CODTAB=VSDGTABELA
          Case wx=2 : CODTAB=VSDGTABELA2
        EndSwitch
  
        Moveto "\\Sistemas\\Vendas\\TbPrIte"
        Moveto [Codigo da Tabela]
        Locate CODTAB, CODITEM
        If RetVal
           Then If Not IsBlank([Preco Unitario]) And [Preco Unitario]>0 
                   Then OK=True
                        QuitLoop
                EndIf        
        EndIf
      EndFor  

      Moveto "\\Sistemas\\Vendas\\Opaf_Ref"
      Moveto [Codigo do Item]
      Locate CODITEM
      If RetVal
        Then If [Codigo Vinculado]<>CB or INATIVO="S"
              Then Print File ARQ "033"
                   Print File ARQ ""+Completa(CODITEM,20," ")
                   Print File ARQ ""+Completa([Codigo Vinculado],20," ")
                   Print File ARQ "S"
                   Print FIle ARQ "\n"
                   NReg=NReg+1
             EndIf
      EndIf 
        
      Moveto "\\Sistemas\\Estoque\\Itens"
      If Ok
        Then If Not IsBlank(TPCB) And Not IsBlank(CB) And INATIVO<>"S"
               Then Print File ARQ "033"
                    Print File ARQ ""+Completa(CODITEM,20," ")
                    Print File ARQ ""+Completa(CB,20," ")
                    Print File ARQ " "
                    Print FIle ARQ "\n"
                    NReg=NReg+1
             EndIf       
      EndIf
  EndSwitch

  Moveto "\\Sistemas\\Estoque\\Itens"
EndScan
ClearAll
If wi=4 Then Atualiza_CodVinculado() EndIf
 
EndProc ;(ExportaP)

;*******************************************************************************
;* Atualiza Codigo Vinculado - Registro 033                                    *
;*******************************************************************************
Proc Atualiza_CodVinculado()

Coedit "\\Sistemas\\Vendas\\Opaf_Ref","\\Sistemas\\Estoque\\Itens"

Scan
 
  If IsBlank([Descricao do Item])  Then Loop EndIf
  If IsBlank([Tipo Tributacao  ])  Then Loop EndIf
  If [Tributacao de ICMS]="D" And 
     [Aliquota de ICMS]<=0         Then Loop EndIf

  If [Tipo do Item]<>"P" And [Tipo do Item]<>"C" And [Tipo do Item]<>"T" 
     Then Loop
  EndIf   

  CODITEM=[Codigo do Item    ]
  TPCB   =[Tipo Codigo_Barras]
  CB     =[Codigo de Barras  ]      
  INATIVO=[Inativo           ]
  
  Moveto "\\Sistemas\\Vendas\\Opaf_Ref"
  Moveto [Codigo do Item]
  Locate CODITEM
  If RetVal
    Then If [Codigo Vinculado]<>CB
          Then If IsBlank(TPCB) Or IsBlank(CB) Or INATIVO="S"
                Then Del
                Else [Codigo Vinculado] = CB
               EndIf 
         EndIf 
    Else If Not IsBlank(TPCB) And Not IsBlank(CB) And INATIVO<>"S"
          Then End Down
               [Codigo do Item  ] = CODITEM
               [Codigo Vinculado] = CB 
         EndIf
  EndIf      
  
  Moveto "\\Sistemas\\Estoque\\Itens"

EndScan

Do_It!
ClearAll

EndProc ;Atualiza_CodVinculado()      

;*******************************************************************************
;* Gera Arquivo Texto -- Vendedores                                            *
;*******************************************************************************
Proc Vendedores()
ClearAll

NR=NRecords("\\Sistemas\\Cadastro\\Represen")

View "\\Sistemas\\Cadastro\\Represen"
Scan
  Barra(NR, RecNo())
  AGUARDE("Aguarde, Exportando Vendedores"+BARRA_STRING)

  Print File ARQ "003"
  Print File ARQ Completa([Codigo do Representante],10," ")
  Print File ARQ Completa([Nome Fantasia Represent],30," ")
  Switch
    Case [Inativo Represent]="S" : Print File ARQ "I"
    OtherWise                    : Print File ARQ "A"
  EndSwitch
  Print File ARQ "\n"

  NReg=NReg+1

EndScan
ClearAll
EndProc ; Vendedores()

;*******************************************************************************
;* Gera Arquivo Texto -- Cond.Pagamento                                        *
;*******************************************************************************
Proc CondPagtos()
ClearAll

;;;**** Forma de Pagamento  ******
NR=NRecords("\\Sistemas\\Vendas\\OPAF_FP")

View "\\Sistemas\\Vendas\\OPAF_FP"
Scan 

  Barra(NR, RecNo())
  AGUARDE("Aguarde, Exportando Formas de Pagamento "+BARRA_STRING)

  Print File ARQ "009"
  Print File ARQ AlinhM([Codigo Operacao],2)
  Print File ARQ Completa([Descricao Operacao],30," ")
  Print File ARQ Completa([Descricao ECF],20," ")
  Print File ARQ Completa([Tipo],1," ")
  Print File ARQ Completa([Condicao de Pagamento],1," ")
  Print File ARQ AlinhM([Numero Maximo de Parcelas],3)
  Print File ARQ Completa([Gerenciador Padrao TEF],1," ")
  Print File ARQ Completa([Ativo],1," ")
  ; posso limitar o troco se informar nos parametros do configurador
  If [Tipo]<>"E"
    Then Print File ARQ "9999999999999"
    Else Print File ARQ "0000000000000"  
  EndIf 
  Print File ARQ "NNNN" ;kamila
  Print File ARQ "\n"

  NReg=NReg+1

EndScan
ClearAll

;;;**** Condi‡Ćo de Pagamento  ******
NR=NRecords("\\Sistemas\\Vendas\\CondPgto")

View "\\Sistemas\\Vendas\\CondPgto"
Scan 

  Barra(NR, RecNo())
  AGUARDE("Aguarde, Exportando Cond.Pagamento "+BARRA_STRING)

  If [Tipo de Pagamento]="O"  Then Loop EndIf
  If [Utiliza_ECF      ]<>"S" Then Loop EndIf
  If [Codigo_FP_ECF    ]<>"" And [Composicao de Dias]="" Then Loop EndIf 

  Print File ARQ "024"
  Print File ARQ AlinhM([Condicao de Pagamento],4)
  Print File ARQ Completa([Descricao CondPagto],30," ")
  Print File ARQ "0000000000001"

  ;Transforma composi‡Ćo de dias
  COMPDIAS=""
  If [Codigo_FP_ECF]<>""
   Then NP=[Numero de Parcelas]
        j=1
        i=1
        While i<=NP
          pos_s=SearchFrom("/",[Composicao de Dias],j)
          If pos_s=0
            Then If i>1
                  Then NDIAS=NumVal(SubStr([Composicao de Dias],j,(Len([Composicao de Dias])-(j-1))))
                   Else If Not IsBlank([Composicao de Dias])
                          Then NDIAS=NumVal(SubStr([Composicao de Dias],j,Len([Composicao de Dias])))
                          Else NDIAS=0
                        EndIf
                 EndIf
            Else NDIAS=NumVal(SubStr([Composicao de Dias],j,pos_s-j))
                 j=pos_s+1
          EndIf
          i=i+1
          If pos_s=0
            Then COMPDIAS = COMPDIAS + AlinhM(StrVal(NDIAS),3)
                 QuitLoop 
            Else COMPDIAS = COMPDIAS + AlinhM(StrVal(NDIAS),3)+ "/"
          EndIf  
        EndWhile
  EndIf  
  
  Print File ARQ Completa(COMPDIAS,200," ")
  
  If [Taxa Desconto]>0
    Then Print File ARQ AlinhM(Tira_CharNum(LTrim(Rtrim(Format("W13.2",[Taxa Desconto])))),13)
         Print File ARQ "0000000000000"
         Print File ARQ "0000000000000"
         Print File ARQ "0000000000000"
         Print File ARQ "999"
         Print File ARQ AlinhM([Codigo_FP_ECF],2)
    Else 
        Print File ARQ "0000000000000"
        Print File ARQ "0000000000000" 
        Print File ARQ "0000000000000"
        Print File ARQ "0000000000000"
        Print File ARQ "999"
        Print File ARQ AlinhM([Codigo_FP_ECF],2)
  EndIf     
  
  Print File ARQ "N"
  Print File ARQ "A"  ;kamila
  Print File ARQ "\n"

  NReg=NReg+1

EndScan
ClearAll
Return

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

Switch
  Case Opcao="Ler":
       If IsFile("EX_IDBR.sc")
           Then Play "EX_IDBR"
       EndIf

       If Not IsAssigned(VSDGCAMINHO)   Then VSDGCAMINHO ="C:\\OPAF\\MONITORA\\REMESSA"     EndIf
       If Not IsAssigned(VSDGCAMINHOW)  Then VSDGCAMINHOW="C:\\OPAF\\INTEGR~1\\WORK\\REM" EndIf

  Case Opcao="Gravar":
       FileWrite        "EX_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 "EX_IDBR.sc" From "VSDGCAMINHO="+Chr(34)+NCAMINHO+Chr(34)+"\n"

       NCAMINHO=""
       For i From 1 to Len(VSDGCAMINHOW)
         If SubStr(VSDGCAMINHOW,i,1)=Chr(92)
            Then NCAMINHO=NCAMINHO+Chr(92)
         EndIf
         NCAMINHO=NCAMINHO+SubStr(VSDGCAMINHOW,i,1)
       EndFor
       FileWrite Append "EX_IDBR.sc" From "VSDGCAMINHOW="+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 ]
                  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_TABELA"        : Campo="TG_EMPRESA"
            Case Campo="TG_TABELA2"       : Campo="TG_TABELA"
            Case Campo="TG_CAMINHO"       : Campo="TG_TABELA2"
            Case Campo="TG_CAMINHOW"      : Campo="TG_CAMINHO"
            Case Campo="TG_NECF"          : Campo="TG_CAMINHOW"
            Case Campo="TG_OPCOES"        : Campo="TG_NECF"
            Case Campo="YES" Or Campo="NO": Campo="TG_OPCOES"
          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_TABELA"
                         EndIf      
                    Case Campo="TG_TABELA"     :
                        If Not IsBlank(VSDGTABELA)
                           Then Campo="TG_TABELA2"
                        EndIf
                    Case Campo="TG_TABELA2"    : Campo="TG_CAMINHO"
                    Case Campo="TG_CAMINHO"    :
                         VSDGCAMINHO=ControlValue("TG_CAMINHO")
                         If Not IsBlanK(VSDGCAMINHO)
                            Then Campo="TG_CAMINHOW"
                         EndIf
                    Case Campo="TG_CAMINHOW"    :
                         VSDGCAMINHOW=ControlValue("TG_CAMINHOW")
                         If Not IsBlanK(VSDGCAMINHOW)
                            Then 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]
                                          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) And
                            (VSDGOPCAO[3]=False) And
                            (VSDGOPCAO[4]=False) And
                            (VSDGOPCAO[5]=False) And
                            (VSDGOPCAO[6]=False) And
                            (VSDGOPCAO[7]=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_TIPOE"   : MSG_CAMPO="Tipo de Exporta‡„o (P=Parcial  T=Total)"
 Case Campo="TG_CAMINHO" : MSG_CAMPO="Caminho de remessa OPAF.         Exemplo: C:\\OPAF\\MONITORA\\REMESSA"
 Case Campo="TG_CAMINHOW": MSG_CAMPO="Caminho de controle INTEGRADOR.  Exemplo: C:\\INTEGR~1\\WORK\\REM"
 Case Campo="TG_TABELA"  : MSG_CAMPO="Tabela de Pre‡o A VISTA"
 Case Campo="TG_TABELA2" : MSG_CAMPO="Tabela de Pre‡o A PRAZO"
 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()

ConfOpcoes("Ler")
VSDGEMPRESA=""
VSDGDTINI=BlankDate()
VSDGDTFIM=BlankDate()
VSDGNSERIE=""
VSDGNECF=""

Array VSDGOPCAO[7]
VSDGOPCAO[1]=False
VSDGOPCAO[2]=False
VSDGOPCAO[3]=False
VSDGOPCAO[4]=False
VSDGOPCAO[5]=False
VSDGOPCAO[6]=False
VSDGOPCAO[7]=False

COR_MENSAGEM="1"
MSG=    "Antes de executar esta rotina:                                      // //"
MSG=MSG+" - Verifique se o INTEGRADOR do OPAF esta carregado;                //" 
MSG=MSG+" - Visualize o INTEGRADOR para acompanhar a opera‡Ćo;               //" 
MSG=MSG+" - Visualize na pasta remessa o resultado do LOG desta remessa:     //" 
MSG=MSG+"   * pasta= "+VSDGCAMINHOW+"                // //" 
MSG=MSG+" - Ao exportar o invent rio, lembre de reprocessar estoque primeiro."
Mensagem(MSG)
Release Vars COR_MENSAGEM


While True
 ShowDialog "Exporta‡„o de dados p/ OPAF - VersĆo 3.1" 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 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 "Tabela A VISTA"  For "TG_TABELA"
    Accept @ 03,01 Width 08 "A5"  Picture "#*#" Tag "TG_TABELA" To VSDGTABELA
    Accept @ 03,10 Width 33 "A30" Picture "!*!" Tag "TG_NOMTAB" To VSDGNOMTAB

    Label  @ 04,00 "Tabela A PRAZO"  For "TG_TABELA2"
    Accept @ 05,01 Width 08 "A5"  Picture "#*#" Tag "TG_TABELA2" To VSDGTABELA2
    Accept @ 05,10 Width 33 "A30" Picture "!*!" Tag "TG_NOMTAB2" To VSDGNOMTAB2

    Label  @ 06,00 "Caminho OPAF"  For "TG_CAMINHO"
    Accept @ 07,01 Width 42 "A37"  Picture "!*!" Tag "TG_CAMINHO" To VSDGCAMINHO
    
    Label  @ 08,00 "Caminho INTEGRADOR"  For "TG_CAMINHOW"
    Accept @ 09,01 Width 42 "A37"  Picture "!*!" Tag "TG_CAMINHOW" To VSDGCAMINHOW
    
    Label  @ 10,00 "ECF"  For "TG_NECF"
    Accept @ 11,01 Width 05 "A2"  Picture "#*#" Tag "TG_NECF" To VSDGNECF
    
    Label  @ 10,06 "Numero de Serie"  For "TG_NSERIE"
    Accept @ 11,07 Width 23 "A20"  Picture "#*#" Tag "TG_NSERIE" To VSDGNSERIE

    Label  @ 01,45 "Op‡oes " For "TG_OPCOES"
    CheckBoxes @2,46 Height 7 Width 25 Tag "TG_OPCOES"
    "Clientes         " to VSDGOPCAO[1],
    "Produtos         " to VSDGOPCAO[2],
    "Tabelas de Pre‡os" to VSDGOPCAO[3],
    "Invent rio       " to VSDGOPCAO[4],
    "Usu rios         " to VSDGOPCAO[5],
    "Vendedores       " to VSDGOPCAO[6],
    "Cond.Pagtos      " to VSDGOPCAO[7]

    Pushbutton @ 13,20 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(VSDGNECF)
     Then Mensagem("Numero ECF Inv lido!")
          Loop
  EndIf  

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

  DIAREF=AlinhM(StrVal(  Day(Today()-1)),2)
  MESREF=AlinhM(StrVal(Month(Today()-1)),2)
  ANOREF=AlinhM(StrVal( Year(Today()-1)),4)

  View "\\Sistemas\\Cadastro\\Empresas"
  Moveto [Codigo da Empresa]
  Locate VSDGEMPRESA
  If RetVal
     Then CNPJ_Empr=[CGC Empresa    ]
            UF_Empr=[UF Empresa     ]
            TP_Empr=[Tipo da Empresa]
     Else CNPJ_Empr=""
            UF_Empr=""
            TP_Empr=""
  EndIf
  ClearAll
  
  ARQ=VSDGCAMINHO+"\\REMESSA.TXT"
  If IsFile(ARQ) Then Deleta_Arquivo(ARQ) EndIf
  
  Aguarde("Processando dados") 
  Cabecalho()
  If VSDGOPCAO[5]=True Then Usuarios()   EndIf
  If VSDGOPCAO[6]=True Then Vendedores() EndIf
  If VSDGOPCAO[1]=True Then Clientes()   EndIf
  If VSDGOPCAO[2]=True Then Produtos(1)  EndIf
  If VSDGOPCAO[3]=True Then Produtos(2)  EndIf
  If VSDGOPCAO[7]=True Then CondPagtos() EndIf
  If VSDGOPCAO[4]=True Then Produtos(3)  EndIf
  If VSDGOPCAO[2]=True Then Produtos(4)  EndIf   
  Rodape()
  ARQRM("Normal")
  ConfOpcoes("Gravar")

  LimpAguarde()
 
EndWhile
ClearAll
Release Vars All
Release Procs All
