;** EXP_DBF  *******************************************************************
;*  Exportacao Clientes/Fornecedores/Produtos p/ formato DBF                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 11/11/2004 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Alt+?
;Ultima Alteracao: 13/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Deleta_Arquivo
;Ultima Alteracao: 05/10/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Clientes() inclusao email
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Sd_Arquivo()     
;Ultima Alteracao: 01/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.   
;Ultima Alteracao: 03/01/2017 por Rafael Matos
;Motivo Alteracao: Ajustes showdialog MensagemRadioButtons()                 
;Ultima Alteracao: 19/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Clientes, Autorizados
;Ultima Alteracao: 25/03/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog   
;Ultima Alteracao: 02/06/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado Logradouro, Numero e Complemento para Clientes e Fornecedores   
;Ultima Alteracao: 24/03/2021 por Bruno Carvalho
;Motivo Alteracao: Alterado mensagem de confirma‡Æo ao gerar o arquivo p/ MensagemMP() *na Biliot  

;*******************************************************************************
;* ROTINA PARA AJUSTAR ENDERECO                                                *
;*******************************************************************************
Proc Ajustar_Endereco()

CRIAR_TABELA = False
Adiciona_Campo("Answer","End_Logradouro(A40),"+
                        "End_Numero(A40),"+
                        "End_Complemento(A40)")

CoEdit "Answer"                        
Scan
  Barra(NRecords("Answer"), RecNo())
  Aguarde("Aguarde, ajustando endere‡o "+BARRA_STRING)
  
  End_Logradouro =""
  End_Numero     =""
  End_Complemento=""

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

Do_it!
ClearImage  

EndProc ;Ajustar_Endereco()

;*******************************************************************************
;* ROTINA CLIENTES                                                             *
;*******************************************************************************
Proc CLIENTES()
Aguarde("Aguarde, Exportando Dados Clientes")
{Ask} {\\Sistemas\\Cadastro\\Destinat}
Moveto [Tipo                   ] TypeIn "C"
Moveto [Codigo                 ] Check
Moveto [Razao Social           ] Check TypeIn "As Nome"
Moveto [Endereco               ] Check
Moveto [Bairro                 ] Check
Moveto [CEP                    ] Check
Moveto [Cidade                 ] Check
Moveto [UF                     ] Check
Moveto [CGC                    ] Check
Moveto [IE                     ] Check
Moveto [Telefone               ] Check
Moveto [Telex                  ] Check
Moveto [Fax                    ] Check
Moveto [Contato                ] Check
Moveto [Tipo Pessoa            ] Check TypeIn "As TpPessoa"
Moveto [Codigo do Representante] Check TypeIn "As CRepresent"
Moveto [Nome Fantasia Represent] Check TypeIn "As NRepresent"
Moveto [Codigo Atividade       ] Check TypeIn "As CAtividade"
Moveto [Descricao Atividade    ] Check TypeIn "As DAtividade"
Moveto [Situacao do Cliente    ] Check TypeIn "As Situacao"
Moveto [Codigo da Area         ] Check TypeIn "As CArea"
Moveto [Descricao da Area      ] Check TypeIn "As DArea"
Moveto [Tipo Assistencia       ] Check TypeIn "As TpAssisten"
Moveto [Endereco_Eletronico    ] Check TypeIn "As Email"
Do_It!
ClearAll

{Ask} {Answer} check
Moveto [Codigo                 ] typeIn "_c!"
{Ask} {\\Sistemas\\Cadastro\\DestObs}
Moveto [Codigo                 ] typeIn "_c"
Moveto [Observacoes            ] Check
Do_It!
ClearAll

{Ask} {Answer} check
Moveto [Codigo                 ] typeIn "_c!"
{Ask} {\\Sistemas\\Cadastro\\Destmsg}
Moveto [Codigo                 ] typeIn "_c"
Moveto [Observacoes            ] Check TypeIn "As ObsVendas"
Do_It!
ClearAll

{Ask} {Answer} check
Moveto [Codigo                 ] typeIn "_c!"
{Ask} {\\Sistemas\\Cadastro\\End_Cob}
Moveto [Codigo                 ] typeIn "_c"
Moveto [Endereco de Cobranca   ] Check TypeIn "As CobrancaEndereco"
Moveto [Bairro de Cobranca     ] Check TypeIn "As CobrancaBairro"
Moveto [CEP de Cobranca        ] Check TypeIn "As CobrancaCEP"
Moveto [Cidade de Cobranca     ] Check TypeIn "As CobrancaCidade"
Moveto [UF de Cobranca         ] Check TypeIn "As CobrancaUF"
Do_It!
ClearAll

Ajustar_Endereco()
Converte()

EndProc

;*******************************************************************************
;* ROTINA AUTORIZADOS                                                          *
;*******************************************************************************
Proc AUTORIZADOS()
Aguarde("Aguarde, Exportando Dados Autorizados")

{Ask} {\\Sistemas\\Cadastro\\Destinat}
Moveto [Codigo                 ] Check typeIn "_c"
Moveto [Tipo                   ] TypeIn "C"
Moveto [Razao Social           ] Check TypeIn "As Nome"
{Ask} {\\Sistemas\\Cadastro\\DestAut}
Moveto [Codigo                 ] typeIn "_c"
Moveto [Nome                   ] Check TypeIn "As AutNome"
Moveto [CGC/CPF                ] Check TypeIn "As AutCGCCPF"
Moveto [Telefone               ] Check TypeIn "As AutTelefone"
Moveto [Data da Autorizacao    ] Check TypeIn "As AutData"
Do_It!
ClearAll

Converte()
EndProc

;*******************************************************************************
;* ROTINA FORNECEDORES                                                         *
;*******************************************************************************
Proc FORNECEDORES()
Aguarde("Aguarde, Exportando Dados Fornecedores")
{Ask} {\\Sistemas\\Cadastro\\Destinat}
Moveto [Tipo                   ] TypeIn "F"
Moveto [Codigo                 ] Check
Moveto [Razao Social           ] Check TypeIn "As Nome"
Moveto [Endereco               ] Check
Moveto [Bairro                 ] Check
Moveto [CEP                    ] Check
Moveto [Cidade                 ] Check
Moveto [UF                     ] Check
Moveto [CGC                    ] Check
Moveto [IE                     ] Check
Moveto [Telefone               ] Check
Moveto [Telex                  ] Check
Moveto [Fax                    ] Check
Moveto [Contato                ] Check
Moveto [Tipo Pessoa            ] Check TypeIn "As TpPessoa"
Do_It!
ClearAll

Ajustar_Endereco()
Converte()

EndProc

;*******************************************************************************
;* ROTINA PRODUTOS                                                             *
;*******************************************************************************
Proc PRODUTOS()
Aguarde("Aguarde, Exportando Dados Produtos")
{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item         ] Check TypeIn "As Codigo"
Moveto [Descricao do Item      ] Check TypeIn "As Descricao"
Moveto [Unidade Fiscal         ] Check TypeIn "As UFiscal"
Moveto [Tipo do Item           ] Check TypeIn "As TpItem"
Moveto [Descricao Tipo do Item ] Check TypeIn "As DesTpItem"
Moveto [Codigo da Familia      ] Check TypeIn "As CFamilia"
Moveto [Descricao da Familia   ] Check TypeIn "As DecFamilia"
Moveto [Codigo do Grupo        ] Check TypeIn "As CGrupo"
Moveto [Descricao do Grupo     ] Check TypeIn "As DesGrupo"
Moveto [Codigo da Marca        ] Check TypeIn "As CMarca"
Moveto [Descricao da Marca     ] Check TypeIn "As DesMarca"
Moveto [Codigo da Cor_Tecido   ] Check TypeIn "As CcorTec"
Moveto [Descricao da Cor_Tecido] Check TypeIn "As DesCorTec"
Moveto [Descricao Complementar ] Check TypeIn "As DesCompl"
Moveto [Codigo de Barras       ] Check TypeIn "As CBarras"
Moveto [Codigo Fornecedor      ] Check TypeIn "As CFornec"
Moveto [Localizacao            ] Check TypeIn "As Local"
Do_It!
ClearAll

Converte()
EndProc

;*******************************************************************************
;* Exporta p/ DBF                                                              *
;*******************************************************************************
Proc Converte()

DISPOSITIVO_OPCAO="A"
DIREPORT=VSDGPASTA
IMPRIREL("Answer","R")

EndProc

;*******************************************************************************
;* Rotina ShowDialog para Imprimir em arquivo                                  *
;*******************************************************************************
Proc SD_Arquivo(Disparo_Arq,Campo_Arq,Evento_Arq,Elemento_Arq)
Temp=True
TECLA    =""
MSG_CAMPO=""
If Disparo_Arq="OPEN"  
   Then AoCriarShowDialog()
        TiraSombraShowDialog()
        Campo_Arq="NArquivo"
EndIf

If Disparo_Arq="SELECT"
   Then Switch
          Case Campo_Arq="TG_DRIVES"      : Campo_Arq="TG_ARQUIVOS"
               VSDGDRIVE=ControlValue("TG_DRIVES")
               VSDGPASTA=VSDGDRIVE+"\\"
          Case Campo_Arq="TG_ARQUIVOS"    :
               If SearchFrom("..\\",ControlValue("TG_ARQUIVOS"),1)>0
                  Then pospasta=3
                       For ipasta From (Len(VSDGPASTA)-1) to 1 Step -1
                         If SubStr(VSDGPASTA,ipasta,1)="\\"
                            Then pospasta=ipasta
                                 QuitLoop
                         EndIf
                       EndFor
                       VSDGPASTA=SubStr(VSDGPASTA,1,SearchFrom("\\",VSDGPASTA,pospasta))
                  Else If SearchFrom("\\",ControlValue("TG_ARQUIVOS"),1)>0
                          Then VSDGPASTA=VSDGPASTA+ControlValue("TG_ARQUIVOS")
                          Else ARQUIVO=ControlValue("TG_ARQUIVOS")
                       EndIf
               EndIf
        EndSwitch
EndIf
If Disparo_Arq="EVENT" And Evento_Arq["Type"]="KEY" Then
   Temp=False
   Switch
     Case Evento_Arq["KeyCode"] =  27:
          Switch
            Case Campo_Arq="TG_PASTA"       : Campo_Arq="ARQ_NO"
            Case Campo_Arq="TG_DRIVES"      : Campo_Arq="TG_PASTA"
            Case Campo_Arq="TG_ARQUIVOS"    : Campo_Arq="TG_DRIVES"
            Case Campo_Arq="Tipo_Docto"     : Campo_Arq="TG_ARQUIVOS"
            Case Campo_Arq="TG_OPCOES"      : Campo_Arq="Tipo_Docto"
            Case Campo_Arq="NArquivo"       : Campo_Arq="TG_OPCOES"
            Case Campo_Arq="ARQ_YES" Or
                 Campo_Arq="ARQ_NO"         : Campo_Arq="NArquivo"
          EndSwitch
     Case Evento_Arq["KeyCode"] = -152 And Campo_Arq="TG_ARQUIVOS":
          pospasta=3
          For ipasta From (Len(VSDGPASTA)-1) to 1 Step -1
            If SubStr(VSDGPASTA,ipasta,1)="\\"
               Then pospasta=ipasta
                    QuitLoop
            EndIf
          EndFor
          VSDGPASTA=SubStr(VSDGPASTA,1,SearchFrom("\\",VSDGPASTA,pospasta))
     Case (Evento_Arq["KeyCode"] <= -104 And Evento_Arq["KeyCode"] >= -113) Or
           Evento_Arq["KeyCode"]  = -139 Or  Evento_Arq["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento_Arq["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento_Arq["KeyCode"] = 13:
          Switch
            Case Campo_Arq="TG_PASTA"       : Campo_Arq="NArquivo"
                 VSDGPASTA=ControlValue("TG_PASTA")
            Case Campo_Arq="TG_VOLTA"       :
                 pospasta=3
                 For ipasta From (Len(VSDGPASTA)-1) to 1 Step -1
                   If SubStr(VSDGPASTA,ipasta,1)="\\"
                      Then pospasta=ipasta
                           QuitLoop
                   EndIf
                 EndFor
                 VSDGPASTA=SubStr(VSDGPASTA,1,SearchFrom("\\",VSDGPASTA,pospasta))
            Case Campo_Arq="TG_DRIVES"      : Campo_Arq="TG_ARQUIVOS"
                 VSDGDRIVE=ControlValue("TG_DRIVES")
                 VSDGPASTA=VSDGDRIVE+"\\"
            Case Campo_Arq="TG_ARQUIVOS"    :
                 If SearchFrom("..\\",ControlValue("TG_ARQUIVOS"),1)>0
                    Then pospasta=3
                         For ipasta From (Len(VSDGPASTA)-1) to 1 Step -1
                           If SubStr(VSDGPASTA,ipasta,1)="\\"
                              Then pospasta=ipasta
                                   QuitLoop
                           EndIf
                         EndFor
                         VSDGPASTA=SubStr(VSDGPASTA,1,SearchFrom("\\",VSDGPASTA,pospasta))
                    Else If SearchFrom("\\",ControlValue("TG_ARQUIVOS"),1)>0
                            Then VSDGPASTA=VSDGPASTA+ControlValue("TG_ARQUIVOS")
                            Else ARQUIVO=ControlValue("TG_ARQUIVOS")
                                 Campo_Arq="ARQ_YES"
                         EndIf
                 EndIf
            Case Campo_Arq="Tipo_Docto"     : Campo_Arq="NArquivo"
                 Tipo_Docto=ControlValue("Tipo_Docto")
            Case Campo_Arq="TG_OPCOES"      : Campo_Arq="NArquivo"
            Case Campo_Arq="NArquivo"       : Campo_Arq="ARQ_YES"
                 ARQUIVO=ControlValue("NArquivo")
            Case Campo_Arq="ARQ_NO"         : CancelDialog
                 MSG_CAMPO="Cancelando"
            Case Campo_Arq="ARQ_YES"        : AcceptDialog
                 MSG_CAMPO="Executando"
                 ARQUIVO=ControlValue("NArquivo")
          EndSwitch

   EndSwitch
EndIf
RefreshDialog


If SubStr(ControlValue("TG_PASTA"),Len(ControlValue("TG_PASTA")),1)<>"\\"
   Then VSDGPASTA=ControlValue("TG_PASTA")+"\\"
   Else VSDGPASTA=ControlValue("TG_PASTA")
EndIf

If SubStr(VSDGPASTA,2,1)=":"
   Then VSDGDRIVE=SubStr(VSDGPASTA,1,2)
   Else VSDGPASTA=VSDGDRIVE+VSDGPASTA
EndIf

If Tipo_Docto=1 Then Tipo_Ext="*.TXT" EndIf
If Tipo_Docto=2 Then Tipo_Ext="*.WK1" EndIf
If Tipo_Docto=3 Then Tipo_Ext="*.DBF" EndIf

Switch
  Case Campo_Arq="TG_PASTA":
       MSG_CAMPO="Informe o caminho desejado !"
  Case Campo_Arq="TG_VOLTA":
       MSG_CAMPO="Volta um n¡vel acima na pasta !"
  Case Campo_Arq="TG_DRIVES":
       MSG_CAMPO="Selecione o drive desejado !"
       TECLA=Chr(27)+""+Chr(26)+"=Selecionar  "
  Case Campo_Arq="TG_ARQUIVOS":
       MSG_CAMPO="Selecione a pasta ou o arquivo se desejar !"
       TECLA=Chr(27)+""+Chr(26)+"=Selecionar  Alt+=Um n¡vel acima  "
  Case Campo_Arq="Tipo_Docto":
       MensagemRadioButtons()
  Case Campo_Arq="TG_OPCOES":
       MensagemRadioButtons()
  Case Campo_Arq="NArquivo":
       MSG_CAMPO="Informe o nome do arquivo a gravar !"
  Case Campo_Arq="ARQ_YES":
       MSG_CAMPO="Confirmar Dados/Executar !"
  Case Campo_Arq="ARQ_NO":
       MSG_CAMPO="Cancelar/Voltar !"
EndSwitch

SelectControl Campo_Arq

ExibeRodapeSD(MSG_CAMPO)
ExibeRodape(2,"Esc=Retornar  Enter=Avan‡ar  "+TECLA)
RefreshDialog

Return Temp
EndProc

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

DIREXPORT   ="\\Sistemas\\Exporta\\Dados\\"
VSDGPASTA  =SubStr(Directory(),1,2)+DIREXPORT
ARQUIVO    =""
Tipo_Docto =1
VSDGOPCAO  =1
Tipo_Ext   ="*.TXT"

DynArray Array_Drives[]
SysInfo Drives To Array_Drives
VSDGDRIVE=SubStr(Directory(),1,2)

While True
 ShowDialog "Exportar para arquivo" Proc "SD_Arquivo"
   Trigger "OPEN","ARRIVE","SELECT"
    Key "ENTER","ESC",-152,
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140    
    @ 01,00 Height 22 Width 80

    Label  @ 00,00 "~S~alvar em:"  For "TG_PASTA"
    Accept @ 01,01 Width 75 "A65"  Picture "!*!" Tag "TG_PASTA" To VSDGPASTA

    Label  @ 03,00 "~D~rives: " For "TG_DRIVES"
    PickDynArrayIndex @ 04,01 Height 12 width 05
     Columns 1
      Array_Drives
       Tag "TG_DRIVES"
        To VSDGDRIVE

    Label  @ 03,07 "~P~asta/Arquivos"  For "TG_ARQUIVOS"
    PickFile @ 04,08 Height 12 Width 24
     Columns 2
      VSDGPASTA+Tipo_Ext SHOWDIRS NOEXT
       Tag "TG_ARQUIVOS"
        To VSDGARQUIVOS

;   Label  @ 03,35 "Tipo do arquivo: "    For "Tipo_Docto"
;   RadioButtons @ 04,35 Height 3 Width 30
;     "~T~exto MS-DOS       [TXT]",
;     "Planilha ~L~otus 123 [WK1]",
;     "D~B~ase IV           [DBF]"
;     Tag "Tipo_Docto"
;     To Tipo_Docto

    Label  @ 03,35 "~T~ipo do arquivo: "    For "Tipo_Docto"
    RadioButtons @ 04,35 Height 5 Width 40
      "Te~x~to        [CSV] Dados ",
      "MS ~E~xcel     [XLS] Dados ",
      "D~B~ase        [DBF] Dados ",
      "~I~nternet     [XML] Dados ",
      "A~c~cess       [XML] Dados "
      Tag "Tipo_Docto"
      To Tipo_Docto

    Label  @ 10,35 "Op‡oes de Tabelas " For "TG_OPCOES"
    RadioButtons @ 11,35 Height 4 Width 20
     "Cl~i~entes    ",
     "~F~ornecedores",
     "P~r~odutos    ",
     "~A~utorizados "
      Tag "TG_OPCOES"
      To VSDGOPCAO

    Label  @ 18,03 "~N~ome do arquivo:"  For "NArquivo"
    Accept @ 18,21 Width 11 "A8"  Picture "!*!" Tag "NArquivo"    To ARQUIVO

    Pushbutton @ 18,54 width 11 "~O~k"      OK     Default Value "Ok" Tag "ARQ_YES" To BottonValue
    Pushbutton @ 18,66 width 11 "~C~ancela" CANCEL                    Tag "ARQ_NO"  To BottonValue

 EndDialog
 If Not Retval
    Then QuitLoop
 EndIf
 
 If IsBlank(ARQUIVO)
    Then Mensagem("Nome do arquivo a gravar invalido !")
    Else Aguarde("Aguarde, Checando arquivo")
         ARQUIVO_OK=True
         If IsFile(VSDGPASTA+ARQUIVO+SubStr(Tipo_Ext,2,4))
            Then MSG="Na pasta "+VSDGPASTA+" //"
                 MSG=MSG+"j  contem um arquivo chamado '"+ARQUIVO+SubStr(Tipo_Ext,2,4)+"' ! //  //"
                 MSG=MSG+"Deseja substituir o arquivo existente ?"
                 ConfGeral(MSG)
                 If OK="S"
                    Then Deleta_Arquivo(VSDGPASTA+ARQUIVO+SubStr(Tipo_Ext,2,4))
                    Else LimpAguarde()
                         Loop
                 EndIf
         EndIf      
         LimpAguarde()

         If VSDGOPCAO=1 Then CLIENTES()     EndIf
         If VSDGOPCAO=2 Then FORNECEDORES() EndIf
         If VSDGOPCAO=3 Then PRODUTOS()     EndIf
         If VSDGOPCAO=4 Then AUTORIZADOS()  EndIf

         LimpAguarde()
         Mensagem("Fim da Opera‡„o !")
 EndIf    
EndWhile
ClearAll
Release Vars All
Release Procs All
