;** Exp_IDBR *******************************************************************
;*  Exportacao de dados p/ ECF ID Brasil  OPAF   Layout 022                    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 29/08/2016 por Kamila Gomes
;Ultima Alteracao: 08/11/2016 por Bruno Carvalho
;Motivo Alteracao: Add SDCarrega_F1() e ajustes p/ trazer apenas n§ de ECF vinculadas a empresa informada
;Ultima Alteracao: 29/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog         
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()
;Ultima Alteracao: 02/01/2017 por Rafael Matos
;Motivo Alteracao: Ajustes TG_EMPRESA E SDCarrega_F1()         
;Ultima Alteracao: 02/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes outros dados ecf
;Ultima Alteracao: 07/12/2017 por Bruno Carvalho
;Motivo Alteracao: Comentado LOOP ao montar o registro dos itens quando [Data de Manutencao] = BlankNum()
;                  #0227# haviam itens com dt manuten‡Æo em branco, logo os itens nÆo estavam indo pro OPAF
;Ultima Alteracao: 08/12/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes gerar 033 sem preco porque nÆo escolheu ir tabela de preco, sys_valor()
;Ultima Alteracao: 19/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SDCarrega_F1() s¢ ECF ativo
;Ultima Alteracao: 20/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes arquivo remessa ordem sequencial
;Ultima Alteracao: 05/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes destino arquivo remessa
;Ultima Alteracao: 18/10/2018 por Bruno Carvalho
;Motivo Alteracao: Erro de Sintaxe na proc Produtos()            
;Ultima Alteracao: 19/10/2018 por Bruno Carvalho
;Motivo Alteracao: Proc Tempohrs() e vari vel #tini# nÆo estava sendo setado                  
;Ultima Alteracao: 13/05/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CheckTG_OPOF[1]

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

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

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

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

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

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

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

Return True

EndProc ;SDCarrega_F1()

;*******************************************************************************
;*  Rotina para mostrar as horas                                               *
;*******************************************************************************
Proc Tempohrs(tini)
private tini,hrs,seg,h,m,s, tfim

tfim=ticks()
if tfim<tini
   then seg=(86400000-tini)
        seg=(seg+tfim)/1000
   else seg=(tfim-tini)/1000
endif

h=seg/3600
m=(h-int(h))*60
s=(m-int(m))*60

hrs=AlinhM(StrVal(int(h)),2)+":"+
    AlinhM(StrVal(int(m)),2)+":"+
    AlinhM(StrVal(Round(s,0)),2)
return hrs

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

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

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

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

{Tools} {Info} {Inventory} {Files} TypeIn VSDGCAMINHOW+"\\RM0*.L*" Enter ClearImage
Add "List"  PrivDir()+"Temp_LWR"

{Tools} {Info} {Inventory} {Files} TypeIn VSDGCAMINHO +"\\RM0*.R*" Enter ClearImage
Add "List"  PrivDir()+"Temp_LWR"

{Tools} {Info} {Inventory} {Files} TypeIn VSDGCAMINHO +"\\RM0*.L*" Enter ClearImage
Add "List"  PrivDir()+"Temp_LWR"
ClearAll

if istable("Keyviol") then delete "Keyviol" endif

num=0

View  PrivDir()+"Temp_LWR"
Scan          
  CopyToArray REG

  narqr=REG["Name"]

  If [Date]<=(Today()-2)
     Then 
          Deleta_Arquivo(VSDGCAMINHO +"\\"+narqr)
          Deleta_Arquivo(VSDGCAMINHOW+"\\"+narqr)
  EndIf

  s=SubStr(REG["Name"],3,6)
  If E_Numerico(s)
     Then num=Numval(s)
  EndIf   

EndScan   
ClearAll
Delete PrivDir()+"Temp_LWR"

num=num+1

if search("OPAF_INT",VSDGCAMINHOW)>0
   then ARQR  =VSDGCAMINHOW+"\\"+"RM"+AlinhM(STrVal(num),6)+".R"
   Else ARQR  =VSDGCAMINHO +"\\"+"RM"+AlinhM(STrVal(num),6)+".R"
endif

Copia_Arquivo(ARQ+" "+ARQR)

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. ////"
MSG=MSG+"Dura‡„o: "+Tempohrs(tini)
Mensagem(MSG)

Return True
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 "022"
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

NR=NRecords("Opaf_Us")

View "Opaf_Us"
Scan
  Barra(NR, RecNo())
  AGUARDE("Aguarde, Exportando Usu rios "+BARRA_STRING)

  ;***** Nivel de Acesso ******************************************
  Switch
    Case Upper([Nivel de Acesso])="OPERADOR"   : NV_ACESSO = "1"
    Case Upper([Nivel de Acesso])="SUPERVISOR" : NV_ACESSO = "2"
    Case Upper([Nivel de Acesso])="GERENTE"    : NV_ACESSO = "3"
    OtherWise                                  : NV_ACESSO = " "  
  EndSwitch
  
  ;***** Status ***************************************************
  Switch
    Case Upper([Status])="ATIVO"   : STATUS = "A"
    Case Upper([Status])="INATIVO" : STATUS = "I"
    OtherWise                      : STATUS = " "  
  EndSwitch

  Print File ARQ "002"
  Print File ARQ Completa([Chapa],15," ")
  Print File ARQ Completa([Senha],60," ")
  Print File ARQ Completa(STATUS,1," ")
  Print File ARQ Completa(NV_ACESSO,1," ")
  Print File ARQ "A"
  Print File ARQ "\n"
  NReg=NReg+1
EndScan
ClearAll

EndProc ;Usuarios()

;*******************************************************************************
;* 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]="99.999.999/9999-99"       Then Loop EndIf
  If [CGC]="999.999.999-99"           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
  
  If [Data da Manutencao]=BlankDate()
     Then If (VSDGDTINI2<>BlankDate() And [Data_Cadastro] < VSDGDTINI2) Or [Data_Cadastro] > VSDGDTFIM2
             Then Loop  
          EndIf
     Else If (VSDGDTINI2<>BlankDate() And [Data da Manutencao] < VSDGDTINI2) Or [Data da Manutencao] > VSDGDTFIM2
             Then Loop  
          EndIf
  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"
  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)
Private DESC_NCM_CEST
ClearAll

If IsEmpty(TabelaREF)
   Then Return
EndIf   

NR=NRecords(TabelaREF)
   
View TabelaREF                     
Scan
  Barra(NR, RecNo())
  Switch
    Case wi=1 : AGUARDE("Aguarde, Exportando Produtos        "+BARRA_STRING)
    Case wi=2 : AGUARDE("Aguarde, Exportando Precos          "+BARRA_STRING)
    Case wi=3 : AGUARDE("Aguarde, Exportando Invent rio "+DATAR+BARRA_STRING)
    Case wi=4 : AGUARDE("Aguarde, Exportando Codigo de Barras"+BARRA_STRING)
    Case wi=5 : AGUARDE("Aguarde, Exportando Estoque Atual   "+BARRA_STRING)
  EndSwitch
         
  Switch
  
    Case wi=1: ; Item
      
      If [Data da Manutencao]=BlankDate()
         Then ;If (VSDGDTINI2<>BlankDate() And [Data_Cadastro] < VSDGDTINI2) Or [Data_Cadastro] > VSDGDTFIM2
              ;   Then Loop  
              ;EndIf
         Else If (VSDGDTINI2<>BlankDate() And ([Data da Manutencao] < VSDGDTINI2)) Or [Data da Manutencao] > VSDGDTFIM2
                 Then Loop  
              EndIf
      EndIf
      GetRecord "\\Sistemas\\Estoque\\Iten_Com" [Codigo do Item] to REG_IT_COM
      If RetVal
         Then CODCEST = REG_IT_COM["CEST"] 
         Else CODCEST = ""
      EndIf
      DESC_NCM_CEST="NCM: "+[NCM] ;+" CEST: "+CODCEST   ;CEST j  tem um campo espec¡fico
      
      Print File ARQ "005"
      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," ")
      If Sys_Codigo_Cliente="0000"
         Then Print File ARQ ""+Completa(Tira_CharEspecial(SubStr([Descricao Complementar],1,30)),30," ")
         Else Print File ARQ ""+Completa(Tira_CharEspecial(SubStr(DESC_NCM_CEST,1,30)),30," ")
      EndIf
      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 "T"
      
      Print File ARQ AlinhM("0",13)
      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"                                                        ;Alterado por Kamila
      
      If [Tipo do Item]="C"
        Then Print File ARQ Completa(StrVal([Codigo_Servico]),10," ")
             Print File ARQ "00"
        Else Print File ARQ Completa([NCM           ],10," ")
          If [EX_TIPI] = "" 
            Then Print File ARQ "00"
            Else Print File ARQ Completa([EX_TIPI],2,"0")
          EndIf              
      EndIf
      
      If [Fracionado]="S"
         Then Print File ARQ "S"
         Else Print File ARQ "N"
      EndIf
      Print File ARQ Completa("",13,"0")
      Print File ARQ Completa(CODCEST,7,"0")
      Print File ARQ "\n"

      NReg=NReg+1
      
    Case wi=2: ;Tabela de pre‡o
    
      For wx From 1 To 2
       Switch
         Case wx=1 : If IsBlank([Preco Unitario1]) Or [Preco Unitario1]=0
                        Then Loop
                        Else DesTbPreco = VSDGTABELA+"VISTA" 
                             Preco      = [Preco Unitario1]
                     EndIf
         Case wx=2 : If IsBlank([Preco Unitario2]) Or [Preco Unitario2]=0
                        Then Loop 
                        Else DesTbPreco = VSDGTABELA2+"PRAZO"
                             Preco      = [Preco Unitario2]
                     EndIf
       EndSwitch
       
       If [TbPreco]="X" 
          Then Print File ARQ "006"
               Print File ARQ ""+Completa([Codigo do Item  ],20," ")
               Print File ARQ DesTbPreco
               valor=AlinhM(Tira_CharNum(LTrim(Rtrim(Format("W13.2",Preco)))),13)
               Print File ARQ valor 
               Print FIle ARQ "\n"
               NReg=NReg+1  
       EndIf      
      EndFor

    Case wi=3: ; Inventario dia anterior
                       
      Print File ARQ "020"
      Print File ARQ VSDGDIAREF+VSDGMESREF+VSDGANO
      Print File ARQ ""+Completa([Codigo do Item],20," ")
      Print File ARQ ""+Completa(Tira_CharEspecial([Descricao do Item]),40," ")
      If [Saldo Atual]>0
          Then QT=NDecimal([Saldo Atual],3)
               Print File ARQ AlinhM(StrVal(Int(QT*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([Unidade Fiscal]),3," ")
      Print FIle ARQ "\n"
      NReg=NReg+1

    Case wi=4: ; Codigo vinculado (Codigo de Barras)  
      
       If [Data da Manutencao]=BlankDate()
          Then ;If (VSDGDTINI2<>BlankDate() And [Data_Cadastro] < VSDGDTINI2) Or [Data_Cadastro] > VSDGDTFIM2
               ;   Then Loop  
               ;EndIf
          Else If (VSDGDTINI2<>BlankDate() And [Data da Manutencao] < VSDGDTINI2) Or [Data da Manutencao] > VSDGDTFIM2
                  Then Loop  
               EndIf
       EndIf

       OK = False
       If [Inativo]<>"S" 
          Then 
               OK=True

                ;     For wx From 1 To 2
                ;       Switch
                ;         Case wx=1 : If Not IsBlank([Preco Unitario1]) And [Preco Unitario1]>0 
                ;                        Then OK=True
                ;                             QuitLoop
                ;                     EndIf
                ;         Case wx=2 : If Not IsBlank([Preco Unitario2]) And [Preco Unitario2]>0 
                ;                        Then OK=True
                ;                             QuitLoop
                ;                     EndIf
                ;       EndSwitch
                ;     EndFor
      endif
    
      If [Opaf_Ref]="X" And ([Codigo Vinculado]<>[Codigo de Barras] or [Inativo]="S")
         Then Print File ARQ "033"
              Print File ARQ ""+Completa([Codigo do Item],20," ")
              Print File ARQ ""+Completa([Codigo Vinculado],20," ")
              Print File ARQ "S"
              Print FIle ARQ "\n"
              NReg=NReg+1
      EndIf

      If Ok
         Then If Not IsBlank([Tipo Codigo_Barras]) And Not IsBlank([Codigo de Barras]) And [Inativo]<>"S"
                Then Print File ARQ "033"
                     Print File ARQ ""+Completa([Codigo do Item],20," ")
                     Print File ARQ ""+Completa([Codigo de Barras],20," ")
                     Print File ARQ " "
                     Print FIle ARQ "\n"
                     NReg=NReg+1
              EndIf       
      EndIf 
      
  Case wi=5:
      
       If [Sdestq]<>"X" Then Loop EndIf
       Print File ARQ "041"
       Print File ARQ ""+Completa([Codigo do Item  ],20," ")
       If [Saldo Atual Hoje]>0
          Then Print File ARQ AlinhM(StrVal(Int([Saldo Atual Hoje]*1000)),13)
          Else Print File ARQ AlinhM("0",13)
       EndIf   
       Print File ARQ VSDGDIA+VSDGMES+VSDGANO
       Print File ARQ HORA
       Print FIle ARQ "\n"
       NReg=NReg+1      
  
  EndSwitch
EndScan
ClearAll

If wi = 4 Then Atualiza_CodVinculado() EndIf

EndProc ;Produtos()

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

NR=NRecords(TabelaREF)

View "\\Sistemas\\Vendas\\Opaf_Ref"
Coedit TabelaREF

Scan
  Barra(NR, RecNo())
  AGUARDE("Aguarde, Verificando c¢digo vinculados   "+BARRA_STRING)
  
  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 TabelaREF
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()

;*******************************************************************************
;* Verifica Cond.Pagamento                                                     *
;*******************************************************************************
Proc VerCondPagto()
Private AUX

AUX = [Condicao de Pagamento]
If Type(NumVal(SubStr(AUX,1,1)))<>"N"
   Then LETRA = Asc(SubStr(AUX,1,1))
        LETRA = LETRA - 64
        Switch
          Case LETRA=1  : LETRA = "10" ;A
          Case LETRA=2  : LETRA = "11" ;B
          Case LETRA=3  : LETRA = "12" ;C
          Case LETRA=4  : LETRA = "13" ;D
          Case LETRA=5  : LETRA = "14" ;E
          Case LETRA=6  : LETRA = "15" ;F
          Case LETRA=7  : LETRA = "16" ;G
          Case LETRA=8  : LETRA = "17" ;H
          Case LETRA=9  : LETRA = "18" ;I
          Case LETRA=10 : LETRA = "19" ;J
          Case LETRA=11 : LETRA = "20" ;K
          Case LETRA=12 : LETRA = "21" ;L
          Case LETRA=13 : LETRA = "22" ;M
          Case LETRA=14 : LETRA = "23" ;N
          Case LETRA=15 : LETRA = "24" ;O
          Case LETRA=16 : LETRA = "25" ;P
          Case LETRA=17 : LETRA = "26" ;Q
          Case LETRA=18 : LETRA = "27" ;R
          Case LETRA=19 : LETRA = "28" ;S
          Case LETRA=20 : LETRA = "29" ;T
          Case LETRA=21 : LETRA = "30" ;U
          Case LETRA=22 : LETRA = "31" ;V
          Case LETRA=23 : LETRA = "32" ;W
          Case LETRA=24 : LETRA = "33" ;X
          Case LETRA=25 : LETRA = "34" ;Y
          Case LETRA=26 : LETRA = "35" ;Z
          OtherWise     : LETRA = (999935 * LETRA) + (65*LETRA)
                          LETRA = SubStr(LETRA,1,2)
        EndSwitch  
        CONDPAGTO = LETRA + SubStr(AUX,2,1)
   Else CONDPAGTO = AUX
EndIf

EndProc ;VerCondPagto()

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

Switch
  Case wa=1 : ;;;**** Forma de Pagamento  ******
              NR=NRecords("\\Sistemas\\Vendas\\OPAF_FP")
              
              View "\\Sistemas\\Vendas\\OPAF_FP"
              Barra(NR, RecNo())
              AGUARDE("Aguarde, Exportando Formas de Pagamento "+BARRA_STRING)
  Case wa=2 : ;;;**** Condi‡Æo de Pagamento  ******
              NR=NRecords("\\Sistemas\\Vendas\\CondPgto")
              
              View "\\Sistemas\\Vendas\\CondPgto"
              Barra(NR, RecNo())
              AGUARDE("Aguarde, Exportando Cond.Pagamento "+BARRA_STRING)
EndSwitch

Scan 

  Switch
    Case wa=1 : ;;;**** Forma de Pagamento  ******
        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 
        If [Tipo] = "C" Or [Tipo] = "E"
          Then Print File ARQ "NS" 
          Else Print File ARQ "NN"      
        EndIf
        
        If [Tipo] = "C" Or [Tipo] = "E"
          Then Print File ARQ "SN" 
          Else Print File ARQ "NN"      
        EndIf
        
        Print File ARQ "\n"
      
        NReg=NReg+1
        
    Case wa=2 :  ;;;**** Condi‡Æo de Pagamento  ******
        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 
      
        VerCondPagto()
      
        Print File ARQ "024"
        Print File ARQ AlinhM(CONDPAGTO,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 "0000000000000" 
        Print File ARQ "\n"
      
        NReg=NReg+1
  EndSwitch
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 ;ConfOpcoes()

;*******************************************************************************
;* Rotina para Criar Tabela                                                    *
;*******************************************************************************
Proc Adiciona_Registro(Tabela)
Private Tabela

If IsEmpty("Answer")
   Then NAO_FAZ = True
        Return
EndIf 

Switch
 Case Tabela="Itens" :  
      {Ask} {Answer} TypeIn "Fast Delete"
      Moveto [Tributacao de ICMS] TypeIn "D"
      Moveto [Aliquota de ICMS  ] TypeIn "<=0"
      Do_It!
      ClearAll
      
      {Ask} {Answer} TypeIn "Fast Delete"
      Moveto [Tipo Tributacao   ] TypeIn "Blank"
      Do_It!
      ClearAll 

      ;Habilitar quando Lei Transparencia fiscal obrigatoria
      ;{Ask} {Answer} TypeIn "Fast Delete"
      ;Moveto [Codigo do Item    ] TypeIn "_Cod"
      ;{Ask} {\\Sistemas\\Estoque\\Itens}
      ;Moveto [Codigo do Item    ] TypeIn "_Cod"  
      ;Moveto [NCM               ] TypeIn "Blank"
      ;Do_It!
      ;ClearAll 


      {Ask} {Answer}
      Moveto [Codigo do Item          ] Example "CodI"     
      Moveto [Descricao do Item       ] Example "Desc"     
      Moveto [Unidade Fiscal          ] Example "UnF"     
      Moveto [Tipo do Item            ] Example "TipI"     
      Moveto [Descricao Tipo do Item  ] Example "DTip"     
      Moveto [Codigo da Familia       ] Example "CodF"     
      Moveto [Descricao da Familia    ] Example "DesF"     
      Moveto [Codigo do Grupo         ] Example "CodG"     
      Moveto [Descricao do Grupo      ] Example "DesG"     
      Moveto [Codigo da Marca         ] Example "CodM"     
      Moveto [Descricao da Marca      ] Example "DesM"          
      Moveto [Tributacao de ICMS      ] Example "Trib"     
      Moveto [Aliquota de ICMS        ] Example "Aliq"         
      Moveto [Tipo Tributacao         ] Example "TipT"     
      Moveto [Descricao Complementar  ] Example "DsC"     
      Moveto [Codigo Fornecedor       ] Example "CodD"       
      Moveto [Inativo                 ] Example "Inat"     
      Moveto [Referencia              ] Example "Refe"     
      Moveto [Codigo da Grade         ] Example "CodE"
      Moveto [Tipo Codigo_Barras      ] Example "TpCodB"
      Moveto [Codigo de Barras        ] Example "CodB"
      Moveto [CSOSN                   ] Example "Csosn"
      Moveto [Aliquota Reduzida BCICMS] Example "AlRed"
      Moveto [Tributacao de ISSQN     ] Example "Issq"
      Moveto [Codigo_Servico          ] Example "Serv"
      Moveto [NCM                     ] Example "Ncm"
      Moveto [Data da Manutencao      ] Example "dtMov"
      Moveto [Data_Cadastro           ] Example "dtCad"
      
      {Ask} TypeIn TabelaREF Enter TypeIn "Insert" Enter
      Moveto [Codigo do Item        ] Example "CodI"   
      Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA"   
      Moveto [Descricao do Item     ] Example "Desc"     
      Moveto [Unidade Fiscal        ] Example "UnF"     
      Moveto [Tipo do Item          ] Example "TipI"     
      Moveto [Descricao Tipo do Item] Example "DTip"     
      Moveto [Codigo da Familia     ] Example "CodF"     
      Moveto [Descricao da Familia  ] Example "DesF"     
      Moveto [Codigo do Grupo       ] Example "CodG"     
      Moveto [Descricao do Grupo    ] Example "DesG"     
      Moveto [Codigo da Marca       ] Example "CodM"     
      Moveto [Descricao da Marca    ] Example "DesM"          
      Moveto [Tributacao de ICMS    ] Example "Trib"     
      Moveto [Aliquota de ICMS      ] Example "Aliq"         
      Moveto [Tipo Tributacao       ] Example "TipT"     
      Moveto [Descricao Complementar] Example "DsC"     
      Moveto [Codigo Fornecedor     ] Example "CodD"       
      Moveto [Inativo               ] Example "Inat"     
      Moveto [Referencia            ] Example "Refe"     
      Moveto [Codigo da Grade       ] Example "CodE"
      Moveto [Tipo Codigo_Barras    ] Example "TpCodB"
      Moveto [Codigo de Barras      ] Example "CodB"
      Moveto [CSOSN                 ] Example "Csosn"
      Moveto [Aliquota Reduzida BCICMS] Example "AlRed"
      Moveto [Tributacao de ISSQN   ] Example "Issq"
      Moveto [Codigo_Servico        ] Example "Serv"
      Moveto [NCM                   ] Example "Ncm"
      Moveto [Data da Manutencao    ] Example "dtMov"
      Moveto [Data_Cadastro         ] Example "dtCad"
      Do_It!
      ClearAll
      
      ;******* Ajusta dados do complemento dos Itens ******
      {Ask} {\\Sistemas\\Estoque\\Iten_com}
      Moveto [Codigo do Item        ] Example "item"
      Moveto [Situacao              ] Example "Situ"
      Moveto [Fracionado            ] Example "frac"
      Moveto [EX_TIPI               ] Example "ExTi"
     {Ask} TypeIn TabelaREF Enter TypeIn "Fast" Enter
      Moveto [Codigo do Item        ] Example "item"
      Moveto [Situacao              ] TypeIn "Changeto " Example "Situ"
      Moveto [Fracionado            ] TypeIn "Changeto " Example "frac"
      Moveto [EX_TIPI               ] TypeIn "Changeto " Example "ExTi"      
      Do_It!
      ClearAll
      
 Case Tabela="Sdestq" :
      {Ask} {Answer}
      Moveto [Codigo da Empresa] Example "Cemp" 
      Moveto [Codigo do Item   ] Example "CodI"
      Moveto [Saldo Atual      ] Example "Sald" 
      {Ask} TypeIn TabelaREF Enter
      Moveto [Codigo da Empresa] Example "Cemp" 
      Moveto [Codigo do Item   ] Example "CodI"
      Moveto [Saldo Atual Hoje ] TypeIn "Changeto _Sald"
      Moveto [Sdestq           ] TypeIn "Changeto X" 
      Do_It!
      ClearAll
      
 Case Tabela="Preco" :
      {Ask} {Answer}
      Moveto [Codigo do Item   ] Example "CodI"
      Moveto [Preco Unitario   ] Example "PrUn" 
      {Ask} TypeIn TabelaREF Enter
      Moveto [Codigo do Item   ] Example "CodI"
      Moveto [TbPreco          ] TypeIn "Changeto X" 
      Switch
        Case prec=1 : Moveto [Preco Unitario1] TypeIn "Changeto _PrUn"
        Case prec=2 : Moveto [Preco Unitario2] TypeIn "Changeto _PrUn" 
      EndSwitch   
      Do_It!
      ClearAll  
      
 Case Tabela="Opaf" : 
      {Ask} {Answer}
      Moveto [Codigo do Item   ] Example "CodI"
      Moveto [Codigo Vinculado ] Example "CodV"
      {Ask} TypeIn TabelaREF Enter
      Moveto [Codigo do Item   ] Example "CodI"
      Moveto [Codigo Vinculado ] TypeIn "Changeto _Codv"      
      Moveto [Opaf_Ref         ] TypeIn "Changeto X" 
      Do_It!
      ClearAll  
      
EndSwitch
   
EndProc ;Adiciona Registro()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Gera_Tabela()

TabelaREF=Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Estoque\\RM_4002" TabelaREF
Empty TabelaREF

;**** Itens **************************************** 
{Ask} {\\Sistemas\\Estoque\\Itens} Check
Moveto [Tipo do Item      ] TypeIn "P Or C Or T Or E"
Do_It!
ClearAll
         
Adiciona_Registro("Itens")

If VSDGOPCAO[4] 
   Then SetDir "\\Sistemas\\Estoque"
        Play "RM_0011C"
        SetDir "\\Sistemas\\Vendas"
EndIf

If VSDGOPCAO[8]
   Then ;**** Saldo de Estoque Atual ***********************
        {Ask} TypeIn TabelaREF Enter
        Moveto [Codigo da Empresa] Example "Cemp" 
        Moveto [Codigo do Item   ] Example "CodI"
        {Ask} {\\Sistemas\\Estoque\\SdEstq}
        Moveto [Codigo da Empresa] Check Example "Cemp" 
        Moveto [Codigo do Item   ] Check Example "CodI"
        Moveto [Ano Referencia   ] TypeIn "~VSDGANO"
        Moveto [Mes Referencia   ] TypeIn "~VSDGMES"
        Moveto [Saldo Atual      ] Check
        
        Do_It!
        ClearAll
        
        Adiciona_Registro("Sdestq")
EndIf

If VSDGOPCAO[2] Or VSDGOPCAO[3]  
   Then ;**** Tabela de Pre‡o ******************************
        
        For prec From 1 To 2
          Switch
            Case prec=1 : CODTAB=VSDGTABELA
            Case prec=2 : CODTAB=VSDGTABELA2
                          If IsBlank(CODTAB) Then Loop EndIf
          EndSwitch
          
          {Ask} TypeIn TabelaREF Enter
          Moveto [Codigo do Item   ] Example "CodI"
          {Ask} {\\Sistemas\\Vendas\\TbPrIte}
          Moveto [Codigo da Tabela ] TypeIn "~CODTAB" 
          Moveto [Codigo do Item   ] Check Example "CodI"
          Moveto [Preco Unitario   ] Check
          Do_It!
          ClearAll
        
          Adiciona_Registro("Preco")
  
        EndFor  
EndIf

If VSDGOPCAO[2]
   Then ;**** Opaf *****************************************
        {Ask} TypeIn TabelaREF Enter
        Moveto [Codigo do Item   ] Example "CodI"
        {Ask} {\\Sistemas\\Vendas\\Opaf_Ref}
        Moveto [Codigo do Item   ] Check Example "CodI"
        Moveto [Codigo Vinculado ] Check
        Do_It!
        ClearAll
        
        Adiciona_Registro("Opaf")
EndIf

EndProc ;Gera_Tabela()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog_DtExp(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: 
          Dialog_F1()    
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_DTINI2"         : Campo="NO"
            Case Campo="TG_DTFIM2"         : Campo="TG_DTINI2"
            Case Campo="YES" Or Campo="NO": Campo="TG_DTINI2"
          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_DTINI2"           : Campo="TG_DTFIM2"
                    Case Campo="TG_DTFIM2"           : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
 Case Campo="TG_DTINI2" : MSG_CAMPO="Em Branco = Data desde do Inicio"
 Case Campo="TG_DTFIM2" : MSG_CAMPO="Informe a Data Final"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog_DtExp()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Data_Exp()
Private Temp1
LimpAguarde()

Temp1      = True
VSDGDTINI2 = BlankDate()
VSDGDTFIM2 = BlankDate()

While True
  ShowDialog "Per¡odo de Exporta‡Æo de Clientes/Produtos" Proc "SD_Dialog_DtExp"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 07 Width 56

    Label  @ 00,00 "Per¡odo" For "TG_DTINI2"
    Label  @ 01,00 "de" For "TG_DTINI2"
    Accept @ 01,04 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI2" To VSDGDTINI2
    Label  @ 01,17 "at‚" For "TG_DTFIM2"
    Accept @ 01,22 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM2" To VSDGDTFIM2

    Pushbutton @ 03,14 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 03,28 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog

  If Not RetVal 
     Then Temp1 = False 
          QuitLoop 
  EndIf
    
  If VSDGDTFIM2=BlankDate()
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf
  QuitLoop
EndWhile

Return Temp1  
EndProc ;Data_Exp()

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

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

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

EndProc ;Verifica_Empresa_OpafECF()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA=""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: 
          If Campo="TG_NECF"
              Then If Not SDCarrega_F1()
                      Then MENSAGEM(MSG)
                      Else Seleciona_Opcoes("ECF","F1_Temp")
                   EndIf
              Else Dialog_F1()    
          EndIf        
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_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 Not IsBlanK(VSDGEMPRESA)
                            Then VSDGEMPRESA   = AlinhM(VSDGEMPRESA,4)
                                 VSDGNECF      = ""
                                 VSDGNSERIE    = ""
                                 VSDGNREINICIO = ""
                                 If Not SDCarrega_F1()
                                    Then MENSAGEM(MSG)
                                    Else Campo="TG_TABELA"
                                 EndIf
                             Else FastMsg("Empresa Inv lida !") 
                                  Campo="TG_EMPRESA"
                                  VSDGNOMEMP=""                                        
                         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"       : Campo="TG_OPCOES"
                         VSDGNECF=ControlValue("TG_NECF")
                         If Not IsBlanK(VSDGNECF)
                            Then VSDGNECF=AlinhM(VSDGNECF,2)
                                 If Not SDCarrega_F1()
                                    Then MENSAGEM(MSG)
                                         Campo="TG_NECF"
                                    Else If Not Checa_Opcoes("ECF",VSDGNECF)
                                            Then VSDGNSERIE    = ""
                                                 VSDGNREINICIO = ""
                                                 MENSAGEM("Numero ECF n„o Cadastrado !")       
                                                 Campo="TG_NECF"   
                                                 
                                         EndIf
                                 EndIf 
                           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) And
                            (VSDGOPCAO[8]=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"  : MensagemCheckBoxes()
  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 ;SD_Dialog()

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

sys_valor()

LimpAguarde()

ConfOpcoes("Ler")
VSDGEMPRESA=""
VSDGDTINI=BlankDate()
VSDGDTFIM=BlankDate()
VSDGNSERIE=""
VSDGNECF=""
Array CheckTG_OPOF[1]        CheckTG_OPOF[1]       =False ; False=+OF, True=-OF

VSDGDIAREF = AlinhM(StrVal(Day(Today()-1)),2)
VSDGDIA    = AlinhM(StrVal(Day(Today())),2)
VSDGMES    = AlinhM(StrVal(Month(Today())),2)
VSDGANO    = AlinhM(StrVal( Year(Today())),4)
HORA       = Substr(Time(),1,2)+Substr(Time(),4,2)+Substr(Time(),7,2)
If VSDGDIA = "01"
   Then VSDGMESREF = AlinhM(StrVal(Month(Today()-1)),2)
   Else VSDGMESREF = VSDGMES
EndIf

DTFIMREF  = Today()-1
VSDGDTINI = Primeiro_Dia(VSDGMES+VSDGANO)
VSDGDTFIM = DTFIMREF 

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

If Not Verifica_Empresa_OpafECF()
   Then Return
EndIf

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

DATAR=Format("D13",StrVal(DTFIMREF))

While True
 ShowDialog "Exporta‡„o de dados p/ OPAF - VersÆo 6.0" Proc "SD_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "TAB","ReverseTab","ENTER","ESC","F1",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140    
     @ 05,12 Height 17 Width 72

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

    Label  @ 02,00 "Tabela A VISTA"  For "TG_TABELA"
    Accept @ 03,01 Width 08 "A5"  Picture "#*#" Tag "TG_TABELA" To VSDGTABELA
    Accept @ 03,09 Width 25 "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,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMTAB2" To VSDGNOMTAB2

    Label  @ 06,00 "Caminho OPAF"  For "TG_CAMINHO"
    Accept @ 07,01 Width 33 "A37"  Picture "!*!" Tag "TG_CAMINHO" To VSDGCAMINHO
    
    Label  @ 08,00 "Caminho INTEGRADOR"  For "TG_CAMINHOW"
    Accept @ 09,01 Width 33 "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 33 "A20"  Picture "#*#" Tag "TG_NSERIE" To VSDGNSERIE

    Label  @ 01,35 "Op‡oes " For "TG_OPCOES"
    CheckBoxes @2,36 Height 8 Width 26 Tag "TG_OPCOES"
    "Clientes         " to VSDGOPCAO[1],
    "Produtos         " to VSDGOPCAO[2],
    "Tabelas de Pre‡os" to VSDGOPCAO[3],
    "Estoque Atual    " to VSDGOPCAO[8],                       
    "Invent rio "+DATAR to VSDGOPCAO[4],
    "Usu rios         " to VSDGOPCAO[5],
    "Vendedores       " to VSDGOPCAO[6],
    "Cond.Pagtos      " to VSDGOPCAO[7]

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  
  If VSDGOPCAO[1]=True Or VSDGOPCAO[2]=True
     Then If Not Data_Exp()
             Then Loop
          EndIf                    
  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 Not SDCarrega_F1()
     Then MENSAGEM(MSG)
          Loop
  EndIf   
  
  tini=ticks()

  If SubStr(VSDGCAMINHO,Len(VSDGCAMINHO),1)="\\"
     Then VSDGCAMINHO=SubStr(VSDGCAMINHO,1,Len(VSDGCAMINHO)-1)
  EndIf
  
  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

  {Tools} {Net} {AutoRefresh} {60}
  
  Aguarde("Processando dados") 
  Cabecalho()
  
  If VSDGOPCAO[2] Or
     VSDGOPCAO[3] Or
     VSDGOPCAO[4] Or
     VSDGOPCAO[8] 
     Then Gera_Tabela()
  EndIf   
  
  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(1) EndIf
  If VSDGOPCAO[4]=True Then Produtos(3)  EndIf
  If VSDGOPCAO[7]=True Then CondPagtos(2) EndIf
  If VSDGOPCAO[2]=True Then Produtos(4)  EndIf
  If VSDGOPCAO[8]=True Then Produtos(5)  EndIf
  
    
  Rodape()
  ARQRM("Normal")
  ConfOpcoes("Gravar")

  LimpAguarde()   
EndWhile

ClearAll
Release Vars All
Release Procs All
