;** IMP_BB   *******************************************************************
;*  Importacao Retorno Banco do Brasil                                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 28/06/2004 por Anivel Augusto Rodrigues
;Ultima Alteracao: 11/11/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Excluir Arquivo retorno
;Ultima Alteracao: 17/04/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VSDGPASTA
;Ultima Alteracao: 07/06/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ShowDialog
;Ultima Alteracao: 15/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Run
;Ultima Alteracao: 04/05/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 09/03/2010 por Cleber Alves
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 27/05/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mesnagem de retorno sem baixas
;Ultima Alteracao: 10/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes recursos
;Ultima Alteracao: 13/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes relat¢rio final conferencia
;Ultima Alteracao: 16/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes de operacoes                 
;Ultima Alteracao: 17/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes de operacoes                 
;Ultima Alteracao: 09/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nova Rotina Converte()
;Ultima Alteracao: 19/10/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Codigo do Representante" RM_1401        
;Ultima Alteracao: 01/12/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo de "ExecVise -> Vexe"
;Ultima Alteracao: 05/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Lupus Codigo de Empresa errada 0002->0001
;Ultima Alteracao: 25/05/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Carrega_Parametros de acordo com a empresa 
;Ultima Alteracao: 09/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Valida‡Æo parametros da empresa           
;Ultima Alteracao: 09/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Valida‡Æo parametros da empresa           
;Ultima Alteracao: 19/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Substitui‡Æo Editor novo arquivo por FileWrite
;Ultima Alteracao: 29/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes valor do desconto na baixa                     
;Ultima Alteracao: 16/12/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado Pl.Conta Debito/Credito
;Ultima Alteracao: 18/12/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes ao gravar data competencia movcont
;Ultima Alteracao: 06/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 17/01/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ copiar tabela de trabalho do BASE -> "RM_1401" 
;Ultima Alteracao: 21/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes indice de arquivo   
;Ultima Alteracao: 23/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes indice arquivo lista
;Ultima Alteracao: 14/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 28/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes drive raiz para privdir()
;Ultima Alteracao: 17/07/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Rateio_Baixa_Automatica() *BIB_RAT
;Ultima Alteracao: 06/08/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado BIB_RAT no inicio do script
;Ultima Alteracao: 14/08/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes variavel NOME_ARQUIVO
;Ultima Alteracao: 16/08/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes dataefetivado e sistema gerador baixa
;Ultima Alteracao: 18/01/2020 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes ao chamar o script, play a partir do script "IMP_RET"

;*******************************************************************************
;* ROTINA Importa                                                              *
;*******************************************************************************
Proc Importa()

If Not Converte()
   Then Return
EndIf

AGUARDES("Aguarde, Atualizando Contas a Receber e Caixa/Banco")

NR=NRecords("Retorno")

TReg =0
NReg =0
NRegT=0
NRegU=0
NRegB=0
CODEMP      = "****"
AUX_EMPRESA = "****"

View   "Duplic"
View   "DupBaixa"
View   "DupRat"
View   "P_Duplic"
View   "\\Sistemas\\Cadastro\\FichaCli"
View   "\\Sistemas\\CtaCor\\MovCont"
View   "\\Sistemas\\CtaCor\\MovRat"
View   "\\Sistemas\\CtaCor\\SaldCont"
View   "RM_1401"
CoEdit "Retorno"                       SetHighLight Current Record 23 Field 31
Scan
   Barra(NR, RecNo())
   Aguarde("Processando baixas "+BARRA_STRING)

   NReg=NReg+1

   Switch
     Case SubStr([Field-1],08,1)="3" And SubStr([Field-1],14,1)="T":
          If SubStr([Field-1],16,2)<>"06"
             Then TIT_OK=False
                  Loop
          EndIf

          NRegT=NRegT+1

          NUMBCO  =RTrim(SubStr([Field-1],038,020))
          NUMDOC  =RTrim(SubStr([Field-1],059,015))
          USOEMP  =RTrim(SubStr([Field-1],106,025))
          SACADO  =""
          
          VRTITULO=NumVal(SubStr([Field-1],082,015))/100
          DTTITULO=DateVal(SubStr([Field-1],074,002)+"."+SubStr([Field-1],076,002)+"."+SubStr([Field-1],078,004))

          CHV_EMPRESA     =SubStr([Field-1],106,004)
          CHV_TPDOCTO     =RTrim(SubStr([Field-1],111,007))
          CHV_NUMERO_ORDEM=RTrim(SubStr([Field-1],119,012))

          If SYS_CODIGO_CLIENTE="0222" And Upper(SubStr(Directory(),1,2))="X:" And CHV_EMPRESA="0002"
             Then CHV_EMPRESA="0001"
          EndIf   

          TIT_OK=False

          If CODEMP<>CHV_EMPRESA
            Then If Not Carrega_Parametros()
                    Then Moveto "RM_1401"
                         End Down
                         [Codigo da Empresa     ]=CHV_EMPRESA
                         [TpDocto               ]=CHV_TPDOCTO
                         [Numero Ordem          ]=CHV_NUMERO_ORDEM
                         [Numero Banco          ]=NUMBCO
                         [Numero Documento Banco]=NUMDOC
                         [Uso Empresa           ]=USOEMP
                         [Sacado                ]=SACADO
                         [Valor                 ]=VRTITULO
                         [Data                  ]=DTTITULO
                         [Operacao              ]="   ERRO EMPRESA SEM PARAMETROS"
                         UnLockRecord 
                         
                         Moveto "Retorno"
                         Loop
                 EndIf
                 CODEMP=CHV_EMPRESA
          EndIf               
          
       ;* Localiza Titulo ***
          Moveto "\\Sistemas\\CtaRec\\Duplic"
          Moveto [Codigo da Empresa]
          Locate IndexOrder by "IndDup1" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO_ORDEM
          If Not RetVal
             Then Moveto "RM_1401"
                  End Down
                  [Codigo da Empresa     ]=CHV_EMPRESA
                  [TpDocto               ]=CHV_TPDOCTO
                  [Numero Ordem          ]=CHV_NUMERO_ORDEM
                  [Numero Banco          ]=NUMBCO
                  [Numero Documento Banco]=NUMDOC
                  [Uso Empresa           ]=USOEMP
                  [Sacado                ]=SACADO
                  [Valor                 ]=VRTITULO
                  [Data                  ]=DTTITULO
                  [Operacao              ]="TITULO NAO ENCONTRADO" 
                  UnLockRecord 
                  
                  Moveto "Retorno"
                  Loop
          EndIf

          If [Saldo do Documento]<=0
             Then Moveto "RM_1401"
                  End Down
                  [Codigo da Empresa      ]=CHV_EMPRESA
                  [TpDocto                ]=CHV_TPDOCTO
                  [Numero Ordem           ]=CHV_NUMERO_ORDEM
                  [Numero Banco           ]=NUMBCO
                  [Numero Documento Banco ]=NUMDOC
                  [Uso Empresa            ]=USOEMP
                  [Sacado                 ]=[\Sistemas\Ctarec\Duplic->Razao Social]
                  [Valor                  ]=VRTITULO
                  [Data                   ]=DTTITULO
                  [Operacao               ]="BAIXADO ANTERIORMENTE" 
                  [Codigo do Representante]=[\Sistemas\Ctarec\Duplic->Codigo do Representante]
                  UnLockRecord 

                  MSG="Titulo j  foi Baixado ! // "+CHV_EMPRESA+" - "+CHV_TPDOCTO+" - "+CHV_NUMERO_ORDEM+"// //"
                  MSG=MSG+"Deseja Continuar ?"
                  ConfGeral(MSG)
                  If OK<>"S"
                     Then QuitLoop
                  EndIf
                  Moveto "Retorno"
                  Loop
          EndIf

          Moveto [Codigo da Conta]
          If Busca_Lookup("Codigo da Conta",[Codigo da Conta],"SM")
             Then UnLockRecord
                  If REG_BUSCA_LOOKUP["Tipo da Conta"]<>"C"
                     Then Moveto "RM_1401"
                          End Down
                          [Codigo da Empresa      ]=CHV_EMPRESA
                          [TpDocto                ]=CHV_TPDOCTO
                          [Numero Ordem           ]=CHV_NUMERO_ORDEM
                          [Numero Banco           ]=NUMBCO
                          [Numero Documento Banco ]=NUMDOC
                          [Uso Empresa            ]=USOEMP
                          [Sacado                 ]=[\Sistemas\Ctarec\Duplic->Razao Social]
                          [Valor                  ]=VRTITULO
                          [Data                   ]=DTTITULO
                          [Operacao               ]="A CONTA DO TITULO NAO Eï BANCO"
                          [Codigo do Representante]=[\Sistemas\Ctarec\Duplic->Codigo do Representante] 
                          UnLockRecord 
        
                          Moveto "Retorno"
                          Loop
                 EndIf   
          EndIf    
          UnLockRecord
          Moveto [Codigo da Empresa]

          If Format("W12.2,EIC",[Saldo do Documento])<>Format("W12.2,EIC",VRTITULO) Or
             Format("D13",[Data de Vencimento])<>Format("D13",DTTITULO)
             Then Moveto "RM_1401"
                  End Down
                  [Codigo da Empresa      ]=CHV_EMPRESA
                  [TpDocto                ]=CHV_TPDOCTO
                  [Numero Ordem           ]=CHV_NUMERO_ORDEM
                  [Numero Banco           ]=NUMBCO
                  [Numero Documento Banco ]=NUMDOC
                  [Uso Empresa            ]=USOEMP
                  [Sacado                 ]=[\Sistemas\Ctarec\Duplic->Razao Social]
                  [Valor                  ]=VRTITULO
                  [Data                   ]=DTTITULO
                  [Operacao               ]="TITULO NAO CONFERE"
                  [Codigo do Representante]=[\Sistemas\Ctarec\Duplic->Codigo do Representante] 
                  UnLockRecord 

                  MSG="O Titulo = "+CHV_EMPRESA+" - "+CHV_TPDOCTO+" - "+CHV_NUMERO_ORDEM+", n„o Confere !// //"
                  MSG=MSG+"Valor: "+LTrim(Format("W12.2,EIC",VRTITULO))+"// //"
                  MSG=MSG+"Vencimento: "+Format("D13",DTTITULO)+"// //"
                  MSG=MSG+"Deseja Continuar ?"
                  ConfGeral(MSG)
                  If OK<>"S"
                     Then QuitLoop
                  EndIf
                  Moveto "Retorno"
                  Loop
          EndIf

          TIT_OK=True
          NLANC=[Numero do Lancamento]

     Case SubStr([Field-1],08,1)="3" And SubStr([Field-1],14,1)="U":
          If SubStr([Field-1],16,2)<>"06"
             Then Loop
          EndIf

          NRegU=NRegU+1
          If TIT_OK
             Then NRegB=NRegB+1

                  VRBAIXA=NumVal(SubStr([Field-1],078,015))/100
                  DTBAIXA=DateVal(SubStr([Field-1],138,002)+"."+SubStr([Field-1],140,002)+"."+SubStr([Field-1],142,004))
                  DTCRED =DateVal(SubStr([Field-1],146,002)+"."+SubStr([Field-1],148,002)+"."+SubStr([Field-1],150,004))

               ;* Gera Baixa ***
                  For I from 1 to 8
                    NITEM=StrVal(I)
                    Moveto "DupBaixa"
                    Moveto [Numero do Lancamento]
                    Locate NLANC,NITEM
                    If Not Retval
                       Then End Down
                            [Numero do Lancamento]=NLANC
                            [Sequencia da Baixa  ]=NITEM
                            QuitLoop
                    EndIf
                  EndFor
                  [Codigo da Conta     ]=[Duplic->Codigo da Conta]
                  [Codigo da Empresa   ]=[Duplic->Codigo da Empresa]
                  [Data do Pagamento   ]=DTBAIXA
                  [Valor do Recebimento]=VRBAIXA
                  [Valor do Desconto   ]=0
                  [Valor do Juros      ]=0
                  [Tipo da Baixa       ]="NORMAL"

                  [DataEfetivadoBanco  ]=DTCRED
                  [Bx Sistema Gerador  ]="IB"

                  Switch
                    Case ([Valor do Recebimento]<[Duplic->Saldo do Documento]):
                         [Valor do Desconto]=[Duplic->Saldo do Documento]-[Valor do Recebimento]
                    Case [Valor do Recebimento]>[Duplic->Saldo do Documento]:
                         [Valor do Juros   ]=[Valor do Recebimento]-[Duplic->Saldo do Documento]

                  EndSwitch
                  TXCOMIS=((([Valor do Recebimento]+[Valor do Desconto])-[Valor do Juros])*100)/[Duplic->Saldo do Documento]
                  [Valor da Comissao]=NDecimal(([Duplic->Saldo da Comissao]*TXCOMIS)/100,2)

                  [Codigo CCusto         ]=[Duplic->Codigo CCusto         ]
                  [Codigo Plano_Conta    ]=[Duplic->Codigo Plano_Conta    ]
                  If IsBlank([Codigo Plano_Conta])
                     Then  Switch
                            Case PARAM_PLANO_CONTA_DEBITO<>""  And [Duplic->Tipo do Pagamento]="CD" :
                                 [Codigo Plano_Conta]=PARAM_PLANO_CONTA_DEBITO
                            Case PARAM_PLANO_CONTA_CREDITO<>"" And [Duplic->Tipo do Pagamento]="CT" :
                                 [Codigo Plano_Conta]=PARAM_PLANO_CONTA_CREDITO 
                            Case PARAM_PLANO_CONTA_CREDITO<>"" And [Duplic->Tipo do Pagamento]="CL" :
                                 [Codigo Plano_Conta]=PARAM_PLANO_CONTA_CREDITO 
                            Case [Data do Pagamento]=[Duplic->Data de Emissao] : If Not IsBlank(PARAM_PLANO_CONTA_AVISTA)
                                                                                    Then [Codigo Plano_Conta]=PARAM_PLANO_CONTA_AVISTA
                                                                                 EndIf
                            OtherWise : If Not IsBlank(PARAM_PLANO_CONTA_APRAZO)
                                           Then [Codigo Plano_Conta]=PARAM_PLANO_CONTA_APRAZO
                                        EndIf
                          EndSwitch
                  EndIf
                  [Codigo do Historico   ]=""
                  [Descricao do Historico]="REC. "+[Duplic->Tipo do Documento]+"/"+[Duplic->Numero do Documento]
                  Controle_Dia()
                  UnLockRecord

                  Moveto "DupBaixa"
                  Moveto [Numero do Lancamento]
                  Locate NLANC,NITEM

               ;* Atualiza Titulo ***
                  Moveto "Duplic"
                  [Saldo do Documento]=Round([Saldo do Documento]-
                                       (([DupBaixa->Valor do Recebimento]-
                                         [DupBaixa->Valor do Juros      ])+
                                         [DupBaixa->Valor do Desconto]),2)
                  [Saldo da Comissao ]=Round([Saldo da Comissao ]-
                                        [DupBaixa->Valor da Comissao   ],2)
                  UnLockRecord

                  If [Duplic->Tipo do Lancamento]<>"A"
                     Then RATEIO_BAIXA_AUTOMATICA="DUP"
                          Rateio_Baixa_Automatica("Seta_Valores")
                          Rateio_Baixa_Automatica("DupRat")
                             
                       ;* Atualiza Conta Corrente ***
                          ANOREF=StrVal(Year(DTCRED))
                          MESREF=StrVal(Month(DTCRED))
                          MESREF=ALINHM(MESREF, 2)

                          Moveto "\\Sistemas\\CtaCor\\SaldCont"
                          Moveto [Codigo da Conta]
                          Locate [Duplic->Codigo da Conta],ANOREF,MESREF
                          If Not RetVal
                            Then End
                                 Down
                                 [Codigo da Conta]=[Duplic->Codigo da Conta]
                                 [Ano Referencia ]=ANOREF
                                 [Mes Referencia ]=MESREF
                          EndIf
                          [Entradas]=[Entradas]+[\Sistemas\CtaRec\DupBaixa->Valor do Recebimento]
                          UnLockRecord

                          Moveto "\\Sistemas\\CtaCor\\MovCont"
                          While True
                            End
                            Moveto [Numero do Lancamento]
                            If Numero_Lancamento("Interno","Locked_Down")
                               Then NLANCMC = PROXLANCTO_NLANC
                                    Release Vars PROXLANCTO_NLANC
                                    quitloop
                            EndIf    
                          EndWhile
                          
                         ;For I from 1 to 8
                         ;  End
                         ;  Moveto [Numero do Lancamento]
                         ;  If Numero_Lancamento("Interno","")
                         ;     Then NLANCMC = PROXLANCTO_NLANC
                         ;          Release Vars PROXLANCTO_NLANC
                         ;  EndIf
                         ;  Down
                         ;  [Numero do Lancamento  ]=NLANCMC
                         ;  [Codigo da Conta       ]=[Duplic->Codigo da Conta]
                         ;  If Not IsLockRecord()
                         ;     Then QuitLoop
                         ;     Else Del
                         ;  EndIf
                         ;EndFor

                          [Codigo da Conta       ]=[Duplic->Codigo da Conta                     ]
                          [Codigo da Empresa     ]=[\Sistemas\CtaRec\DupBaixa->Codigo da Empresa]
                          [Tipo de Operacao      ]="07"
                          [Data                  ]=DTCRED
                          [Data Competencia      ]=[\Sistemas\CtaRec\Duplic->Data de Emissao]
                          [Valor                 ]=[\Sistemas\CtaRec\DupBaixa->Valor do Recebimento]
                          [Valor do Desconto     ]=[DupBaixa->Valor do Desconto]
                          [Valor do Juros        ]=[DupBaixa->Valor do Juros]
                          [Codigo do Documento   ]=[\Sistemas\CtaRec\Duplic->Codigo do Documento]
                          [Numero do Documento   ]=[\Sistemas\CtaRec\Duplic->Numero do Documento]
                          [Sistema Gerador       ]="CR"
                          [Empresa Gerador       ]=[Duplic->Codigo da Empresa]
                          [Lancamento Gerador    ]=[Duplic->Numero do Lancamento]
                          [Sequencia Gerador     ]=NITEM
                          [Codigo do EmitDest    ]=[Duplic->Codigo do Destinatario]
                          [Codigo CCusto         ]=[\Sistemas\CtaRec\DupBaixa->Codigo CCusto         ]
                          [Codigo Plano_Conta    ]=[\Sistemas\CtaRec\DupBaixa->Codigo Plano_Conta    ]
                          [Codigo do Historico   ]=""
                          [Descricao do Historico]=[\Sistemas\CtaRec\DupBaixa->Descricao do Historico]
                          If [DupBaixa->Data do Pagamento]=[Duplic->Data de Emissao]
                             Then [Tipo do Lancamento    ]="I"
                             Else [Tipo do Lancamento    ]="J"
                          EndIf                                                         
                          Controle_Dia()                     
                          UnLockRecord
                          
                          Rateio_Baixa_Automatica("MovRat")

                       ;* Atualiza Baixa com Lancamento do Conta Corrente ***
                          Moveto "DupBaixa"
                          Moveto [Numero do Lancamento]
                          Locate NLANC,NITEM
                          [Lancamento Conta Corrente]=NLANCMC

                  EndIf

               ;* Ficha Financeira ***
                  NDA=[DupBaixa->Data do Pagamento]-[Duplic->Data de Vencimento]
                  If NDA>0
                     Then Moveto "\\Sistemas\\Cadastro\\FichaCli"
                          Moveto [Codigo]
                          Locate [Duplic->Codigo do Destinatario]
                          If RetVal
                             Then [Numero de Atrasos] = [Numero de Atrasos] + 1
                                  If [Maior Atraso] < NDA
                                     Then [Maior Atraso] = NDA
                                          [Data do Maior Atraso ]=[DupBaixa->Data do Pagamento   ]
                                          [Valor do Maior Atraso]=[DupBaixa->Valor do Recebimento]
                                  EndIf
                                  UnLockRecord
                          EndIf
                  EndIf

                  Moveto "RM_1401"
                  End Down
                  [Codigo da Empresa      ]=CHV_EMPRESA
                  [TpDocto                ]=CHV_TPDOCTO
                  [Numero Ordem           ]=CHV_NUMERO_ORDEM
                  [Numero Banco           ]=NUMBCO
                  [Numero Documento Banco ]=NUMDOC
                  [Uso Empresa            ]=USOEMP
                  [Sacado                 ]=[\Sistemas\Ctarec\Duplic->Razao Social]
                  [Valor                  ]=VRTITULO
                  [Data                   ]=DTTITULO
                  [Operacao               ]="BAIXADO" 
                  [Codigo do Representante]=[\Sistemas\Ctarec\Duplic->Codigo do Representante]
                  UnLockRecord 
          EndIf
     Case SubStr([Field-1],08,1)="9":
          TReg=NumVal(SubStr([Field-1],24,6))
   EndSwitch

   Moveto "Retorno"
EndScan
Do_It!
ClearAll

MSG=    Completa("Resumo do Arquivo [ "+ARQUIVO+" ] ",070," ")+"// //"
MSG=MSG+Completa("Total Registros....:"+Format("W7,EIC",TREG) ,070," ")+"//"
MSG=MSG+Completa("Registros Lidos....:"+Format("W7,EIC",NREG) ,070," ")+"// //"
MSG=MSG+Completa("Total de Titulos...:"+Format("W7,EIC",NREGT),070," ")+"//"
MSG=MSG+Completa("Titulos a Baixar...:"+Format("W7,EIC",NREGU),070," ")+"// //"
MSG=MSG+Completa("Titulos Baixados...:"+Format("W7,EIC",NREGB),070," ")
Mensagem(MSG)
EndProc

;*******************************************************************************
;* Exporta p/ DBF                                                              *
;*******************************************************************************
Proc Converte()
Private CNV_OK,cc
Aguardes("Aguarde, Preparando retorno")

If IsTable("Retorno")
   Then Delete "Retorno"
EndIf

ARQTEMP=PrivDir()+"TEMP.TXT"
Deleta_Arquivo(ARQTEMP)
Sleep 1500
Copia_Arquivo(AjustaPasta(VSDGPASTA)+ARQUIVO+" "+ARQTEMP)
Sleep 1500

If Not IsFile(ARQTEMP)
  Then MSG="N„o foi pos¡vel criar arquivo tempor rio para a tarefa" 
       Mensagem(MSG)
       Return False
EndIf

Copy "Retorno2" "Retorno"
Empty("Retorno")


FileRead ARQTEMP to varinner
Edit "Retorno"
pos=1
While True
  posf=searchFrom("\n",varinner,pos)
  if posf=0 then quitLoop endif
  [Field-1]=substr(varinner,pos,(posf-pos))
  Down
  pos=posf+1
EndWhile
Do_It!
ClearAll
If IsAssigned(varinner) Then release vars varinner  EndIf

CNV_OK=False
View "Retorno"
Scan
  If SubStr([Field-1],08,1)="3" And
     (SubStr([Field-1],14,1)="T" Or SubStr([Field-1],14,1)="U") And
     SubStr([Field-1],16,2)="06"
     Then CNV_OK=True
          QuitLoop
  EndIf
EndScan
ClearAll

If Not CNV_OK
   Then MSG="O Arquivo [ "+ARQUIVO+" ] // //"
        MSG=MSG+"N„o contem retorno de baixas de t¡tulos !"
        Mensagem(MSG)
EndIf

Return CNV_OK
EndProc

;*******************************************************************************
;* Rotina Carrega Parametros                                                   *
;*******************************************************************************
Proc Carrega_Parametros()

If IsEmpty("P_Duplic")
   Then Mensagem("N„o esta Configurado os Parametros para Lan‡amentos e Baixas de Titulos !")
        Return False
EndIf

Moveto "P_Duplic"
Moveto [Codigo_Empresa]
Locate CHV_EMPRESA
If Not RetVal
   Then Moveto "Retorno"
        Return False
EndIf

PARAM_RELAT                    =[Impressao_Recibo        ]
PARAM_UTILIZA_JUROS_DEVIDO     =[Utiliza_Juros_Devido    ]
PARAM_UTILIZA_COMISSAO         =[Utiliza_Comissao        ]
PARAM_UTILIZA_NUM_CARREGAMENTO =[Utiliza_Num_Carregamento]
PARAM_UTILIZA_FORMAS_RECEBER   =[Utiliza_Formas_Receber  ]
PARAM_HISTORICO_DEFAULT        =[Historico_Default       ]
PARAM_PLANO_CONTA_DCC          =[Plano_Conta_DCC         ]
PARAM_PLANO_CONTA_AVISTA       =[Plano_Conta_AVista      ]
PARAM_PLANO_CONTA_APRAZO       =[Plano_Conta_APrazo      ]
PARAM_PLANO_CONTA_DEBITO       =[Plano_Conta_Debito      ]
PARAM_PLANO_CONTA_CREDITO      =[Plano_Conta_Credito     ]
PARAM_COMISSAO_JUROS_DESCTO    =[Comissao_Juros_Descto   ]
PARAM_CTA_BAIXA_IGUAL_LANCTO   =[Cta_Baixa_Igual_Lancto  ]
PARAM_CONTA_CAIXA              =[COdigo_Conta_Caixa      ]

Moveto "Retorno"
Return True

EndProc ; (Carrega_Parametros)

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

Switch
  Case Opcao="Ler":
       If IsFile("IR_BB.SC")
           Then Play "IR_BB"
       EndIf
       If Not IsAssigned(VSDGPASTA)    Then VSDGPASTA="C:\\bancob~1\\"    EndIf
  Case Opcao="Gravar":
       FileWrite        "IR_BB.sc" From ";****** Variaveis de Configura‡„o Caminho Vise Informatica"+"\n"
       FileWrite Append "IR_BB.sc" From "VSDGPASTA="+Chr(34)+AjustaPasta(VSDGPASTA)+Chr(34)+"\n"
EndSwitch
EndProc ;

;*******************************************************************************
;* Carregar Lista                                                              *
;*******************************************************************************
Proc PegaNomeArquivo(indice)
Private indice

Return  RTrim(SubStr(Array_Registro[Indice],25,100))
EndProc

;*******************************************************************************
;* Carregar Lista                                                              *
;*******************************************************************************
Proc AjustaPasta(s)
Private s,ns,i

ns=""
For i From 1 to Len(s)
 If SubStr(s,i,1)=Chr(92)
    Then ns=ns+Chr(92)
 EndIf
 ns=ns+SubStr(s,i,1)
EndFor
Return ns
EndProc

;*******************************************************************************
;* Carregar Lista                                                              *
;*******************************************************************************
Proc CarregarLista()

ARQUIVO  =""
DynArray Array_Registro[]

Wcs=0
Lista_DiretorioD(VSDGPASTA,"IEDCBR*.RET","D")

For i from 1 to 7
  If Not IsFile(PrivDir()+"Dir.Txt")
     Then Sleep(1000)
          Loop
     Else Editor Open PrivDir()+"Dir.Txt"
          If ErrorCode()=27
             Then Sleep 1000
                  Loop
          EndIf
          
          While True
            Extrair_Linha()
            If IsBlank(ELinha) Then QuitLoop EndIf
            wcs=wcs+1
            Array_Registro[wcs]=SubStr(ELINHA,1,Len(ELINHA)-1)
          EndWhile
          CancelEdit

          QuitLoop
  EndIf
EndFor

ArrayElement=1

EndProc

;*******************************************************************************
;* Excluir arquivo da Lista                                                    *
;*******************************************************************************
Proc ExcluirArquivoLista()
private i, c, Array_RegistroI

FileWrite        PrivDir()+"funcao1.txt"  From  "DELT|"+VSDGPASTA+ARQUIVO+"\n"
ExecVise(PrivDir()+"funcao1.txt")

Array_Registro[nlinha]=""

DynArray Array_RegistroI[]
c=0
For i From 1 To DynArraySize(Array_Registro)
  If IsBlank(Array_Registro[i]) Then Loop EndIf
  c=c+1
  Array_RegistroI[c]=Array_Registro[i]
EndFor

Release Vars Array_Registro
DynArray Array_Registro[]

For i From 1 To DynArraySize(Array_RegistroI)
  Array_Registro[i]=Array_RegistroI[i]
EndFor
Release Vars Array_RegistroI

if nlinha>DynArraySize(Array_Registro)
   then ArrayElement=DynArraySize(Array_Registro)
   else ArrayElement=nlinha
endif   

EndProc

;*******************************************************************************
;* Rotina ShowDialog para Imprimir em arquivo                                  *
;*******************************************************************************
Proc SD_Arquivo(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento

Temp=True
TECLA    =""
MSG_CAMPO=""

If Disparo="OPEN"
   Then AoCriarShowDialog()
        Campo="TG_ARQUIVOS"

        ArrayElement=nlinha
EndIf

If Disparo="UPDATE"
   Then Switch
          Case Campo="TG_CONFIG" : Play "SETPASTA"
                                   CarregarLista()
                                   Campo="TG_ARQUIVOS"
          OtherWise              : Return Temp
        EndSwitch  
EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Temp=False
   Switch
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_ARQUIVOS"           : Campo="NO"
            Case Campo="TG_CONFIG"             : Campo="TG_ARQUIVOS"
            Case Campo="YES" Or Campo="ARQ_NO" : Campo="TG_ARQUIVOS"
          EndSwitch
     Case Evento["KeyCode"] = -83 And Campo="TG_ARQUIVOS":
              nlinha=ControlValue("TG_ARQUIVOS")
          ARQUIVO=PegaNomeArquivo(nlinha)

          ConfGeral("Confirma a exclus„o do arquivo "+ARQUIVO+" ?")
          If Ok="S"
             Then 
                  ExcluirArquivoLista()
          EndIf
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_ARQUIVOS"    : Campo="YES"
                         ARQUIVO=ControlValue("TG_ARQUIVOS")
                    Case Campo="TG_CONFIG"      : 
                         Play "SETPASTA"
                         CarregarLista()
                         Campo="TG_ARQUIVOS"
                  EndSwitch
          EndIf
   EndSwitch
EndIf
Switch
  Case Campo="TG_ARQUIVOS":
       MSG_CAMPO="Selecione o arquivo se desejado !"
       TECLA=""+"=Selecionar  Del=Excluir  "
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

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

ConfOpcoes("Ler")
CarregarLista()

DynArray Array_Arquivos[]
ARQUIVO  =""
Tipo_Ext =".XXX"

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

NOME_BANCO="BANCO DO BRASIL"

nlinha=1

While True

 ShowDialog "Importar/Atualizar retorno Banco do Brasil [CNAB 240]" Proc "SD_Arquivo"
   Trigger "OPEN","ARRIVE","UPDATE","SELECT"
    Key "ENTER","ESC",-152,-31,-32,-25,-20,-49,-83,
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140    
     @ 03,12   Height 20 Width 78

    @ 01,01 ?? "Caminho padrÆo para arquivos de retorno:"
    @ 02,02 ?? VSDGPASTA
    PaintCanvas Attribute 121 02,01,02,73

    Label  @ 04,00 "~L~ista de arquivos"  For "TG_ARQUIVOS"
    PickDynArray @05,01 Height 10 width 73
     Columns 1
      Array_Registro
       Tag "TG_ARQUIVOS"
        To ArrayElement

    Pushbutton @ 16,25 width 11 "~O~k"         OK     Default Value "Ok" Tag "YES"        To BottonValue
    Pushbutton @ 16,38 width 11 "~C~ancela"    CANCEL                    Tag "NO"         To BottonValue
    Pushbutton @ 16,61 width 14 "Con~f~igurar"                           Tag "TG_CONFIG"  To BottonValue

 EndDialog
 If Not Retval
    Then QuitLoop
 EndIf

 If DynArraySize(Array_Registro)=0
    Then Mensagem("NÆo existe arquivo selecionado !")
         Loop
 EndIf

 ARQUIVO=PegaNomeArquivo(ArrayElement)
 nlinha =ArrayElement
  If IsBlank(ARQUIVO)
    Then Mensagem("Nome do arquivo a ler inv lido !")
         Loop
 EndIf

 If SYS_CONTROLE_DIA="??????"
    Then MSG=    "N„o existe um controle ativo no momento !// //"
         MSG=MSG+"Verificar situa‡„o de controles !"
         Mensagem(MSG)
         Loop
 EndIf

 LimpAguarde()
 LimpAguardes()

 Copy "\\Base\\Sistemas\\Ctarec\\RM_1401" "RM_1401"  
 Empty "RM_1401"
 Importa()

 LimpAguarde()
 LimpAguardes()

 If Not IsEmpty("RM_1401")
   Then NOME_ARQUIVO=ARQUIVO
        MSG=""
        MSG=MSG+"Relat¢rio de ocorrˆncias do retorno !// //"
        MSG=MSG+"Verifique para conferˆncia !//"
        Mensagem(MSG)
        DISPOSITIVO()
        If OK<>""
           Then IMPRIREL("RM_1401","R")
        EndIf
  EndIf

  if nlinha>DynArraySize(Array_Registro)
     then ArrayElement=DynArraySize(Array_Registro)
     else ArrayElement=nlinha
  endif   
 
EndWhile
ClearAll
Release Vars All
Release Procs Importa, Converte, Carrega_Parametros, ConfOpcoes, PegaNomeArquivo, 
              AjustaPasta, CarregarLista, SD_Arquivo,ExcluirArquivoLista