;** BxCxAuto *******************************************************************
;*  Baixa Automatica e Acerto Financeiro                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 06/01/2016 por Anivel Augusto Rodrigues
;Ultima Alteracao: 26/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao cheques recebidos
;Ultima Alteracao: 28/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo juros pralum                               
;Ultima Alteracao: 02/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes inclusao cheques                                   
;Ultima Alteracao: 11/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo gera bordchc e chequec sem movimento           
;Ultima Alteracao: 12/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes             
;Ultima Alteracao: 17/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes lancamento cxa/bco juros/desctos cheques recebidos
;Ultima Alteracao: 17/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes lancamento cxa/bco credito/promissoria               
;Ultima Alteracao: 18/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes LeiaINI cheque        
;Ultima Alteracao: 24/02/2016 por Bruno Carvalho
;Motivo Alteracao: Verificado se h  registros para entÆo ser utilizado a rotina TIPOBAIXA()
;Ultima Alteracao: 24/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes data vencimento tc e promissoria               
;Ultima Alteracao: 29/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PARAM_UTILIZA_FERIADO="S", PARAM_SABDOM_VENCTO="S" Pralu
;Ultima Alteracao: 03/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Podeatualizar() travar se saldoacerto<>0, pendente
;Ultima Alteracao: 08/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TC Data Vencimento = Data Vencimento do Titulo e nÆo data base
;Ultima Alteracao: 21/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TC Calcular Juros                                                 
;Ultima Alteracao: 24/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TC Utilizado a Pagar sair do caixa                                
;Ultima Alteracao: 31/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CHT utilizados baixa                                              
;Ultima Alteracao: 27/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Recalcular()                                              
;Ultima Alteracao: 08/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cheques emitidos + Cobrador                                          
;Ultima Alteracao: 14/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Digitace()                                          
;Ultima Alteracao: 14/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Credito_Promissoria()   
;Ultima Alteracao: 16/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Alterado NUM_LANCTO = PROXLANCTO_NLANC -> Padroniza‡Æo da rotina de Numero_Lancamento()                                      
;Ultima Alteracao: 28/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Recalcular()                                              
;Ultima Alteracao: 11/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ignorar titulos a receber DESCONTADA                      
;Ultima Alteracao: 11/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusao de observacoes por titulo
;Ultima Alteracao: 18/07/2016 por Bruno Carvalho
;Motivo Alteracao: Erro na var siDTMEDIA ao tentar somar com um blankdate (VSDGDTBASE) -> SomaItens()      
;Ultima Alteracao: 12/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Recalcular(), liberar TC                                  
;Ultima Alteracao: 18/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes controle de teclas                                        
;Ultima Alteracao: 18/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes aceitar juros=0 e calcular                                 
;Ultima Alteracao: 23/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes campo valor do juros que naä tem nos cheques                                 
;Ultima Alteracao: 14/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo calcular juros/desconto em TC, altera‡Æo de dados para recalcular
;Ultima Alteracao: 26/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Taxa de Juros por Aba                              
;Ultima Alteracao: 19/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes historico com acerto                               
;Ultima Alteracao: 03/11/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Recalcular(), data base                                   
;Ultima Alteracao: 11/11/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Juros(), data base                                   
;Ultima Alteracao: 30/11/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Baixa_Dialog()                                  
;Ultima Alteracao: 06/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao TipoAplicacaoDeJuros                  
;Ultima Alteracao: 15/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 30/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo totalizar no acerto baixas de CANCELADO, DEVOLUCAO contas a pagar/receber
;Ultima Alteracao: 30/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes getp_cxbco() parametros, taxa de juros, fastmsg
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 18/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pagtos s¢ com 1 cheque
;Ultima Alteracao: 19/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes teclas (F10)= -68
;Ultima Alteracao: 12/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes aplica‡Æo juros diferenciado
;Ultima Alteracao: 15/09/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado taxa de juros na digita‡Æo do cheque na aba [Cheques Recebidos] e [Cheques Utilizados]
;Ultima Alteracao: 12/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes baixa parcial para devolu‡Æo/cancelado
;Ultima Alteracao: 15/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes justificativa cancelado/devolucao
;Ultima Alteracao: 11/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes acerto gerando so TC         
;Ultima Alteracao: 11/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes fazaer checagem inconsistencia antes de atualizar
;Ultima Alteracao: 24/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes conta corrente cheque            
;Ultima Alteracao: 02/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes baixa valor comissao 0380
;Ultima Alteracao: 09/10/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao fazer calculos com o campo [Saldo do Documento] na duplic -> BAIXATR() 
;Ultima Alteracao: 17/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes vrcomissao na baixa %comissao direto
;Ultima Alteracao: 24/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes estorno cheques emitidos sobre pagamentos

;*******************************************************************************
;* Rotina para Localizar Registro Cabeca                                       *
;*******************************************************************************
Proc CHAVEC()

While True
  Moveto [Numero do Lote]
  End
  NLANC=[Numero do Lote]
  If OPCAO_FORM="1"
     Then Down
     Else CtrlPgDn
  EndIf

  SetaCorRegistro("Editar")
  While true
    LimpaVariaveis()
      
    TECLA=""
    MSGCAMPO=""
    AguardaTeclasPadrao()
  
    Switch
      Case RetVal=-33 : SemFuncoes()                                          
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           While True
             LimpaVariaveis()
              
             If OPCAO_FORM="1"
                Then PAGINA("Bxautc","MR")
                Else PAGINA("Bxautc","MT")
             EndIf
             NLANC  =[Numero do Lote]
             If EDITAR="S"
                Then PickForm "F"
                     Echo Normal
                     Echo Off
                     If Checa_Controle([Numero_Controle_Dia])
                        Then CHAVEC=0
                             Controla_EdicaoC()
                        Else UnLockRecord
                     EndIf
                Else If EXCLUIR="S"
                         Then PickForm "F"
                              Echo Normal
                              Echo Off
                              If Checa_Controle([Numero_Controle_Dia])
                                 Then If QuerExcluir("") And Checa_Supervisor()
                                         Then CopytoArray REG_BXAUTC
                                              EXCLUSAO()
                                         Else UnLockRecord
                                      EndIf
                              EndIf
                         Else QuitLoop
                     EndIf
             EndIf
             If OPCAO_FORM="1"
                Then PickForm "1"
                Else PickForm "F"
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case RetVal="F3":
           If OPCAO_FORM="F"
              Then OPCAO_FORM="1"
              Else OPCAO_FORM="F"
           EndIf
           Del
           CHAVEC=6
           Return
      Case Retval="ESC":
           CHAVEC=9
           Del
           Return
      Case Retval="ENTER": 
           If Numero_Lancamento("","1")
              Then NLANC = PROXLANCTO_NLANC
                   Release Vars PROXLANCTO_NLANC
              Else QuitLoop
           EndIf
           Release Vars NUM_LANCTO
           If REG_ENTER
              Then PickForm "F"
                   Moveto [Numero do Lote]
                   Locate NLANC
                   CHAVEC=1
                   If Checa_Controle(SYS_CONTROLE_DIA)
                      Then Return
                      Else OPCAO_FORM="1"       
                   EndIf
              Else PickForm "F"
                   Locate NLANC
                   If Retval
                      Then CHAVEC=0
                      Else CHAVEC=1
                           End CtrlPgDn
                           [Numero do Lote   ]=NLANC
                   EndIf
                   If IsLockRecord()
                      Then If CHAVEC=1 Then Del EndIf
                           If OPCAO_FORM="1"
                              Then PickForm "1"
                                   QuitLoop
                           EndIf
                      Else Echo Normal
                           Echo Off
                           If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                              (CHAVEC=0 And Checa_Controle([Numero_Controle_Dia]))
                              Then Return
                           EndIf
                   EndIf
                   Return
           EndIf 
    EndSwitch          
    QuitLoop
  EndWhile
EndWhile
EndProc ;ChaveC()

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()

Moveto "BxautC"

DIGITAC=True

if [Situacao]="ATUALIZADO"
   then
        Mensagem("Este lote j  foi atualizado !")

        if checaparametros()
           then IMPRIME()
        endif   
        
        Tecla_Funcao=""
        DIGITAC =False
        CHAVEC =9

        Return
   else
        If CHAVEC=0
           then 
                moveto "Bxautip"
                somaitens()
                
                moveto "Bxautir"
                somaitens()
                
                moveto "Bxautie"
                somaitens()
        
                moveto "Bxautis"
                somaitens()
        
                moveto "Bxautice"
                somaitens()
        
        endif   
   
        Moveto "BxautC"
        Moveto [Data da Baixa]
endif

SetaCorRegistro("Editar")

While True
  TECLA=" Esc=Retornar  "

  If CHAVEC=0
     Then TECLA=TECLA+"Del=Excluir  "
  EndIf

  MSGCAMPO=Field()
  
  Switch
    Case Field()=""                     : MSGCAMPO=""
    Case Field()="Codigo da Conta"      : MSGCAMPO="Informe a Conta para baixa dos t¡tulos !"
    Case Field()="Data da Baixa"        : MSGCAMPO="Informe a Data para baixa dos t¡tulos !"
    Case Field()="Data Base"            : MSGCAMPO="Informe a Data Base para calculo de juros/desconto !"

    Case Field()="Taxa de Juros"        : MSGCAMPO="Informe a Taxa de Juros"
    Case Field()="Tipo Taxa de Juros"   : MSGCAMPO="Tipo de Juros: Diario/Mensal/Anual"
    Case Field()="Codigo"               : MSGCAMPO="Codigo da Pessoa"
    Case Field()="TipoAplicacaoDeJuros" : MSGCAMPO="Aplica‡Æo de juros: I=Igual para todas as Abas D=Diferenciado por Aba"
  EndSwitch

  If Field()="Codigo da Conta" Or
     Field()="Codigo"          Or
     Field()="Codigo do Cobrador"  
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf

  If Field()="Codigo da Conta"
     Then Monta_Opcoes("Codigo da Conta","")
  EndIf

  Prompt TECLA
  
  Wait Field
       Until "F1","ESC","ENTER","F8","DEL","FIELDVIEW","F35","DOWN"

  Switch
  Case RetVal="F1":
       If Field()="Codigo" or
          Field()="Codigo do Cobrador"  
          Then CONSULTAF1()
       EndIf
       If Field()="Codigo da Conta"
          Then Seleciona_Opcoes("Codigo da Conta","CR")
       EndIf 

  Case RetVal="F8" or RetVal="DOWN":
       If CHAVEC = 0
          Then QuitLoop
          Else Loop
       EndIf
  Case Retval="ESC":
       Switch
       Case Field()="Data da Baixa":
            If QuerDesfazer("")
               Then If CHAVEC=1
                       Then Exclusao()
                       Else Undo
                    EndIf
                    CHAVEC=9
                    QuitLoop
            EndIf
       Case Field()="Codigo"               : Moveto [Codigo da Conta   ]
       Case Field()="Codigo do Cobrador"   : Moveto [Codigo            ]
       Case Field()="TipoAplicacaoDeJuros" : Moveto [Codigo do Cobrador]
       Case Field()="Taxa de Juros"        : Moveto [TipoAplicacaoDeJuros]
       Case Field()="Tipo Taxa de Juros"   : Moveto [Taxa de Juros     ]
       Otherwise:
            Left
       EndSwitch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEC=0
          Then If QuerExcluir("deste lan‡amento") And Checa_Supervisor()
                  Then EXCLUSAO()
                       CHAVEC=9
                       QuitLoop
               EndIf
       EndIf
  Case Retval="ENTER":
       Switch
       Case Field()="Data da Baixa":
            If IsBlank([])
               Then [Data da Baixa]=Today()
            EndIf
            If Not IntervaloData([Data da Baixa])
               Then Loop
            EndIf
            moveto [Data Base]
       Case Field()="Data Base":
            If IsBlank([])
               Then [Data Base]=[Data da Baixa]
            EndIf
            Moveto [Codigo da Conta]
       Case Field()="Codigo da Conta":
            If Not Checa_Opcoes("Codigo da Conta",[]) or IsBlank([])
               Then fastmsg("Conta inv lida !")
                    Loop
            EndIf
            Moveto [Codigo]
            
       Case Field()="Codigo":
            If IsBlank([])
               Then fastmsg("Pessoa inv lida !")
                    Loop
            EndIf
            moveto [Codigo do Cobrador]
                        
       Case Field()="Codigo do Cobrador":
            If IsBlank([])
               Then [Descricao do Cobrador]=""
            EndIf
            moveto [TipoAplicacaoDeJuros]
            
       Case Field()="TipoAplicacaoDeJuros":
            If IsBlank([])
               Then []="I"
            EndIf
            moveto [Taxa de Juros]
                          
       Case Field()="Taxa de Juros":
            If IsBlank([])
               Then fastmsg("Valor inv lido !")
                    Loop
            EndIf
            
            if []=0
               then [Tipo Taxa de Juros ]="D"
            endif
            moveto [Tipo Taxa de Juros]
                          
       Case Field()="Tipo Taxa de Juros":
            If []<>"D" and []<>"M" and []<>"A"
               Then Loop
            EndIf
            Switch
              Case []="D" : [NDias Taxa de Juros]=1
              Case []="M" : [NDias Taxa de Juros]=30
              Case []="A" : [NDias Taxa de Juros]=365
            EndSwitch 

            VerificarAlteracoes()
            QuitLoop
            
       Otherwise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ; (DigitaC)


;*******************************************************************************
;* Rotina para                                                                 *
;*******************************************************************************
Proc VerificarAlteracoes()

If IsAssigned(regbxautc_temp) 
   Then if [Data da Baixa       ]<>regbxautc_temp["Data da Baixa"       ] or                 
           [Data Base           ]<>regbxautc_temp["Data Base"           ] or                 
           [Taxa de Juros       ]<>regbxautc_temp["Taxa de Juros"       ] or                 
           [Tipo Taxa de Juros  ]<>regbxautc_temp["Tipo Taxa de Juros"  ] or
           [TipoAplicacaoDeJUros]<>regbxautc_temp["TipoAplicacaoDeJUros"]
           then                  
                Mensagem("Altera‡Æo de dados, recalculo automatico !")
                Recalcular()
                
                Moveto "BxautC"
        endif        
endif        
CopytoArray regbxautc_temp

endproc

;*******************************************************************************
;* Rotina para Digitacao da Cabeca Totais                                      *
;*******************************************************************************
Proc DIGITAT()

Moveto "BxautC"

AtualizaValoresAcerto()
AtualizaSaldoAcerto()

Moveto [OutrosValores_Recebido]

SetaCorRegistro("Editar")

While True
  MSGCAMPO=""

  SpeedBar "["+Chr(17)+"]"  :"ESC",
           "~Excluir~"      :"DEL",
           "~Fun‡”es~"      :-33,
           Chr(060)+Chr(17) :-115,
           Chr(16)+Chr(062) :-116,
           "~?~"            :-94,
           "["+Chr(16)+"]"  :"PGDN"
  
  MSGCAMPO=Field()
  
  Switch
    Case Field()=""      : MSGCAMPO=""
  EndSwitch

  Wait Field
       Until "ESC","ENTER","PGUP","PGDN","DEL","F7","F5",
             "F4","F8",-33, -115,-116,-133,-94

 If RetVal=-33
 Then Echo Normal
      Echo Off
      ShowPopup " Fun‡”es " CENTERED
       "~I~mprimir                [F4]": " Imprimir                        " : "F4",
       "~O~bserva‡äes             [F5]": " Observa‡äes                     " : "F5",
       "~G~erar T¡tulo de Crˆdito [F7]": " Gerar T¡tulo de Crˆdito         " : "F7",
       "~A~tualizar               [F8]": " Atualizar baixa destes titulos  " : "F8",
       "~C~ancelar        " : " Cancelar a Opera‡„o             " : "CANCELAR"
      EndMenu
       To MenuVar

      Echo Off
      If MenuVar="CANCELAR" or MenuVar="Esc"
          Then Loop
      EndIf

      RetVal=MenuVar
  endif

  Switch
  Case RetVal=-94 : MsgTeclasPadraoIt2()
  Case RetVal=-115 Or RetVal=-116 Or
       RetVal=-133:
       Tecla_Funcao=RetVal
       Return   
      
  Case RetVal="F1":

  Case RetVal="F4":
       If IMPRIME()
          Then 
               DIGITAC     =False 
               Tecla_Funcao=""
               Return
       endif

  Case Retval="F5":
       CampoAnt=Field()
       Edita_Memo("Observacoes",08,01,15,76,"Observa‡”es")
       Moveto Field CampoAnt

  Case RetVal="F7":
       VrTCCredito_Digita()
       AtualizaSaldoAcerto()

  Case RetVal="F8": 
  
       if PodeAtualizar()
          then
               If CONFGERAL("Confirma baixa e atualiza‡„o deste acerto ?")
                  Then BAIXA()
                       DIGITAC     =False 
                       Tecla_Funcao=""
                       Return
               EndIf   
       EndIf   
          
  Case Retval="ESC":
       Switch
       Case Field()="OutrosValores_Recebido"  : Tecla_Funcao="EMITCH"
                                                Return   
       Case Field()="Valor_Troco"             : Moveto [OutrosValores_Pago]

       Case Field()="xxxxxxxxxxxxxxx"         : Moveto [xxxxxxxxxxxxx]
       Otherwise:
            Left
       EndSwitch
       AtualizaSaldoAcerto()
       
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEC=0
          Then If QuerExcluir("deste lan‡amento") And Checa_Supervisor()
                  Then EXCLUSAO()
                       CHAVEC=9
                       
                       DIGITAC     =False 
                       Tecla_Funcao=""
                       QuitLoop
               EndIf
       EndIf
  Case Retval="PGUP":
       Tecla_Funcao="EMITCH"
       Return   
  
  Case Retval="PGDN":
       DIGITAC     =False 
       Tecla_Funcao=""
       QuitLoop

  Case Retval="ENTER":
       Switch
       Case Field()="OutrosValores_Recebido":
            if not isblank([]) and []<0 
               then fastmsg("Valor inv lido !") 
                    loop
            endif
            Moveto [OutrosValores_Pago    ]
            
       Case Field()="OutrosValores_Pago"    : 
            if not isblank([]) and []<0 
               then fastmsg("Valor inv lido !") 
                    loop
            endif
            Moveto [Valor_Troco           ]
            
       Case Field()="Valor_Troco"           : 
            if not isblank([]) and []<0 
               then fastmsg("Valor inv lido !") 
                    loop
            endif
            Moveto [OutrosValores_Recebido]
       
       Case Field()="xxxx":

       Otherwise:
            Right
       EndSwitch
       
       AtualizaSaldoAcerto()

  EndSwitch
EndWhile
EndProc  ; (DigitaC)

;*******************************************************************************
;* Rotina para Localizar Registro Item titulos a receber/pagar                 *
;*******************************************************************************
Proc chavei()
private ntable

ntable=table()

While True
  Moveto ntable
  SomaItens() 
  
  Moveto [Sequencia]
  End
  ITEM = [Sequencia]
  Down

  Opcao_Ver=False

  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  SetaCorRegistro("Editar")
  While True

    MSGCAMPO=""
    
    Switch
      Case Field()=""      : MSGCAMPO=""
    EndSwitch
    
    Tecla=""
    AguardaTeclasPadraoIt2()

     If RetVal=-33
     Then Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
           "~J~uros      [F2] " : " Porcentagem Taxa de Juros       " : "F2",
           "~D~esconto   [F5] " : " Porcentagem/Valor de Desconto   " : "F5",
           "~S~ele‡„o    [F6] " : " Selecionar de T¡tulos           " : "F6",
           "~L~impa      [F9] " : " Limpa todos t¡tulos relacionados" : "F9",
           "Tipo ~B~aixa [F10]" : " Alterar Tipo de Baixa           " : "F10",
           "~C~ancelar        " : " Cancelar a Opera‡„o             " : "CANCELAR"
          EndMenu
           To MenuVar

          Echo Off
          If MenuVar="CANCELAR" or MenuVar="Esc"
              Then Loop
          EndIf

          RetVal=MenuVar
      endif

      Switch
      Case RetVal=-94 : MsgTeclasPadraoIt2()
      
      Case RetVal=-115 Or RetVal=-116 Or
           RetVal=-133:
           Tecla_Funcao=RetVal
           chavei=9
           Del
           Return   
      
      Case Retval="PGDN":
           Tecla_Funcao=-116      
           chavei=9
           del
           Return   
           
      Case Retval="PGUP":
           Tecla_Funcao=-115      
           chavei=9
           del
           Return   
           
      Case Retval="ESC":
           switch
             case table()="Bxautir" : Tecla_Funcao=""

             case table()="Bxautip" : Tecla_Funcao=-115
              
           endswitch
           chavei=9
           del
           Return   
           
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           Del
           While True
             PAGINA(ntable,"MR")
             If EDITAR="S"
                Then        
                     chavei = 0
                     ITEM   = [Sequencia]
                     Controla_EdicaoI()
                Else If EXCLUIR="S"
                        Then If QuerExcluir("")
                                Then del
                                Else UnLockRecord
                             EndIf
                        Else QuitLoop
                     EndIf
             EndIf

             SomaItens() 

             SetaPosForm()
           EndWhile
           QuitLoop
           
      Case RetVal="F10" or RetVal=-68:
           Del
           TIPOBAIXA()
           
           QuitLoop
      Case RetVal="F2" :
           Del
           JUROS()
           quitloop
           
      Case RetVal="F5" :
           Del
           DESCONTO()
           quitloop
           
      Case RetVal="F9": 
           Del                       
  
           If CONFGERAL("Confirma limpar todos estes t¡tulos ?")
              Then
                   while recordstatus("New")=False
                     del
                   endwhile    
            EndIf   
            QuitLoop
            
      Case RetVal="F6":
           Del
           Selecao()           
           QuitLoop
           
      Case RetVal="F3":
           Del
           Moveto [Sequencia]
           If RecordStatus("New")
              Then MENSAGEM("Sem Item p/ ver !")
                   QuitLoop
           EndIf
           Opcao_Ver=True
           chavei=0
           Home
           ITEM=[Sequencia]
           Controla_EdicaoI()
           QuitLoop
      Case Retval="ENTER":
           If Not Seta_Sequencia(ITEM,True)
              Then Del
                   QuitLoop
           EndIf
           ITEM=[]
           Del
           Locate NLANC,ITEM
           If Retval
              Then CHAVEI=0
              Else quitloop
           EndIf
           If Not IsLockRecord()
              Then Return
           EndIf
           
           quitloop
           
      EndSwitch
  EndWhile
EndWhile
EndProc  ; (chavei)
                                 
;*******************************************************************************
;* Rotina para Localizar Registro cheques emitidos                             *
;*******************************************************************************
Proc chaveice()
private ntable

ntable=table()

While True
  Moveto ntable
  SomaItens() 
  
  Moveto [Sequencia]
  End
  ITEM = [Sequencia]
  Down

  Opcao_Ver=False

  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  SetaCorRegistro("Editar")
  While True

    MSGCAMPO=""
    
    Switch
      Case Field()=""      : MSGCAMPO=""
    EndSwitch
    
    Tecla=""
    AguardaTeclasPadraoIt2()

     If RetVal=-33 
        Then fastmsg("Sem fun‡äes !") 
     endif

      Switch
      Case RetVal=-94 : MsgTeclasPadraoIt2()
      
      Case RetVal=-115 Or RetVal=-116 Or
           RetVal=-133:
           Tecla_Funcao=RetVal
           chavei=9
           Del
           Return   
      
      Case Retval="PGDN":
           Tecla_Funcao=-116      
           chavei=9
           del
           Return   
           
      Case Retval="PGUP":
           Tecla_Funcao=-115      
           chavei=9
           del
           Return   
           
      Case Retval="ESC":
           Tecla_Funcao=-115      
           chavei=9
           del
           Return
              
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           Del
           While True
             PAGINA(ntable,"MR")
             If EDITAR="S"
                Then        
                     chavei = 0
                     ITEM   = [Sequencia]
                     Digitace()
                Else If EXCLUIR="S"
                        Then If QuerExcluir("")
                                Then del
                                Else UnLockRecord
                             EndIf
                        Else QuitLoop
                     EndIf
             EndIf

             SomaItens() 

             SetaPosForm()
           EndWhile
           QuitLoop
           
      Case Retval="ENTER":
           If Not Seta_Sequencia(ITEM,True)
              Then Del
                   QuitLoop
           EndIf
           ITEM=[]
           Del
           Locate NLANC,ITEM
           If Retval
              Then CHAVEI=0
              Else CHAVEI=1
                   End Down
                   [Numero do Lote      ]=NLANC
                   [Sequencia           ]=ITEM
                   UnLockRecord
                   Locate NLANC,ITEM
           EndIf
           If Not IsLockRecord()
              Then Return
           EndIf
           If CHAVEI=1
              Then Del
           EndIf
           
           quitloop
           
      EndSwitch
  EndWhile
EndWhile
EndProc  ; (chaveice)
                                 
;*******************************************************************************
;* Rotina para Digitacao dados cheques emitidos                                *
;*******************************************************************************
Proc DIGITACE()

Moveto [Codigo da Conta]

While True
  TECLA=" Esc=Retornar  "

  If CHAVEI=0
     Then TECLA=TECLA+"Del=Excluir  "
  EndIf

  MSGCAMPO=Field()
  
  Switch
    Case Field()=""                   : MSGCAMPO=""
    Case Field()="Codigo da Conta"    : MSGCAMPO="Informe a Conta do Banco !"
    Case Field()="Cheque Pre-Datado"  : MSGCAMPO=MSGCAMPO+" (Sim/NÆo) !"
  EndSwitch

  If Field()="Codigo da Conta"
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf

  If Field()="Codigo da Conta"
     Then Monta_Opcoes("Codigo da Conta","")
  EndIf

  Prompt TECLA
  
  Wait Field
       Until "F1","ESC","ENTER","F8","DEL","FIELDVIEW","F35","DOWN"

  Switch
  Case RetVal="F1":
       If Field()="Codigo da Conta"
          Then Seleciona_Opcoes("Codigo da Conta","CR")
       EndIf 

  Case Retval="ESC":
       Switch
       Case Field()="Codigo da Conta":
            If QuerDesfazer("")
               Then If CHAVEI=1
                       Then Del
                       Else Undo
                    EndIf
                    CHAVEI=9
                    QuitLoop
            EndIf
       Case Field()="Numero do Cheque"   : Moveto [Codigo da Conta  ]
       Case Field()="Valor"              : Moveto [Cheque Pre-Datado]
       Otherwise:
            Left
       EndSwitch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEI=0
          Then If QuerExcluir("deste lan‡amento") And Checa_Supervisor()
                  Then Del
                       CHAVEI=9
                       QuitLoop
               EndIf
       EndIf
  Case Retval="ENTER":
       Switch
       Case Field()="Codigo da Conta":
            If Not Checa_Opcoes("Codigo da Conta",[]) or IsBlank([])
               Then fastmsg("Conta inv lida !")
                    Loop
            EndIf
            
            getrecord "\\sistemas\\ctacor\\conta" [] to regcontatemp
            If retval
               Then if regcontatemp["Tipo da Conta"]<>"C"
                       then fastmsg("Conta inv lida !")
                            Loop
                    endif        
            EndIf
            release vars regcontatemp
            
            Moveto [Numero do Cheque]
            
       Case Field()="Numero do Cheque":
            If IsBlank([])
               Then fastmsg("Valor inv lido !")
                    Loop
            EndIf
            moveto [Serie do Cheque]
                          
       Case Field()="Cheque Pre-Datado":
            If IsBlank([])
               Then []="N"
            EndIf

            If []="N" 
               Then [Data Cheque Pre-Datado]=blankdate()
                    moveto [Valor]
               else moveto [Data Cheque Pre-Datado]
            EndIf

       Case Field()="Data Cheque Pre-Datado":
            If IsBlank([]) or []<[bxautc->Data da Baixa]
               Then fastmsg("Data inv lida !")
                    loop
            EndIf
            moveto [Valor]

       Case Field()="Valor":
            If IsBlank([]) or []=0
               Then fastmsg("Valor inv lido !")
                    Loop
            EndIf
            QuitLoop
            
       Otherwise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ; (DigitaCE)

;*******************************************************************************
;* Rotina Dialog Desconto                                                      *
;*******************************************************************************
Proc SD_DialogDesconto(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 27:
          Temp=False
          Switch
             Case Campo="A_Descto"      : CancelDialog
             Case Campo="Descto"        : Campo="A_Descto"
             
             Case Campo="A_Juros"       : CancelDialog
             
          EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="A_Descto":
                  VSD_A_Descto=ControlValue("A_Descto")
                  If VSD_A_Descto>0
                     Then VSD_Descto=BlankNum()
                          AcceptDialog
                     Else VSD_A_Descto=BlankNum()
                          Campo="Descto"
                  EndIf
             Case Campo="Descto":
                  VSD_Descto=ControlValue("Descto")
                  AcceptDialog
                  
             Case Campo="A_Juros":
                  VSD_A_Juros=ControlValue("A_Juros")
                  AcceptDialog
                  
           EndSwitch
   EndSwitch
EndIf
Switch
 Case Campo="A_Descto"        : 
      MSG_CAMPO="Digite a porcentagem de desconto"
 Case Campo="Descto"        : 
      MSG_CAMPO="Digite o valor de desconto sobre o total"
      
 Case Campo="A_Juros"        : 
      MSG_CAMPO="Digite a porcentagem de juros"
           
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)

Return Temp
EndProc

;*******************************************************************************
;* Digitacao dos Dados do Desconto                                             *
;*******************************************************************************
Proc DESCONTO()
private vrdesconto, vrtotdesconto, vrdifdesconto, VRTOTREC_R, PORCEN

VSD_A_Descto = blanknum()
VSD_Descto   = blanknum()                                                
                                                                                    
Showdialog "Calculo do Desconto" Proc "SD_DialogDesconto"                                   
   Trigger "OPEN","ARRIVE"                                                          
    Key "ENTER","ESC"                                                               
     @ 09,23 height 04 width 32                                                        
                                                                                    
   Label  @ 00,01 "%Desconto" For "A_Descto"                                        
   Accept @ 01,02 Width 10 "N" picture "#*#.[###]" Tag "A_Descto" to VSD_A_Descto    
                                                                                     
   Label  @ 00,18 "Valor" For "Descto"                                               
   Accept @ 01,15 Width 13 "$" picture "#*#.[##]" Tag "Descto" to VSD_Descto        

Enddialog                                                                            
Mouse Show
If Not RetVal
   Then Return
EndIf
 
Switch
  Case VSD_A_Descto > 0 : 
       PORCEN = VSD_A_Descto/100
       
  Case VSD_Descto > 0   : 
       VRTOTREC_R=0
       scan for [Tipo do Pagamento]<>"TC" 
         VRTOTREC_R=VRTOTREC_R+[Bx Valor do Recebimento]
       endscan
   
       PORCEN = VSD_Descto/VRTOTREC_R
       
  OtherWise             : 
       PORCEN = 0
       
EndSwitch

if PORCEN>0
   then 
        vrtotdesconto=0
        Scan
          if [Bx Tipo da Baixa]="NORMAL" and [Tipo do Pagamento]<>"TC"
             then vrdesconto=Round([Bx Valor do Recebimento]*PORCEN,2)
             else vrdesconto=0
          endif 
          [Bx Valor do Recebimento]=[Bx Valor do Recebimento]-vrdesconto
          [Bx Valor do Desconto   ]=[Bx Valor do Desconto   ]+Vrdesconto
          [Bx Valor Juros_Desconto]=[Bx Valor Juros_Desconto]+(vrdesconto*-1)
                  
          vrtotdesconto=vrtotdesconto+vrdesconto
          AtualizaFormaBaixa()
        EndScan
        
        if VSD_Descto>0
           then  vrdifdesconto=VSD_Descto-vrtotdesconto
                 if vrdifdesconto<>0
                    then
                         scan
                            If [Bx Tipo da Baixa]="NORMAL" and [Tipo do Pagamento]<>"TC" and [Bx Valor do Recebimento]>=vrdifdesconto
                               Then [Bx Valor do Recebimento]=[Bx Valor do Recebimento]-vrdifdesconto
                                    [Bx Valor do Desconto   ]=[Bx Valor do Desconto   ]+vrdifdesconto
                                    [Bx Valor Juros_Desconto]=[Bx Valor Juros_Desconto]-(vrdifdesconto*-1)
                                    quitloop
                            EndIf
                         endscan
           
                 endif
        endif   
endif
        
EndProc

;*******************************************************************************
;* Digitacao dos Dados do JUROS                                                *
;*******************************************************************************
Proc JUROS()
private VSD_Juros, ntable


If [Bxautc->TipoAplicacaoDeJuros]="I"
   then
        Mensagem("Fun‡Æo nÆo permitida para aplica‡Æo de juros//igual para todas as abas !")
   
        return
endif        

ntable=table()

VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]
VSD_A_Juros= blanknum()                                                
                                                                                    
Showdialog "Taxa de Juros" Proc "SD_DialogDesconto"                                   
   Trigger "OPEN","ARRIVE"                                                          
    Key "ENTER","ESC"                                                               
     @ 09,23 height 04 width 28                                                        
                                                                                    
   Label  @ 00,01 "%Juros" For "A_Juros"                                        
   Accept @ 01,02 Width 10 "N" picture "#*#.[###]" Tag "A_Juros" to VSD_A_Juros    

   @ 01,07 ?? substr(MSGJUROS,7,30)
                                                                                     
Enddialog                                                                            
Mouse Show
If Not RetVal
   Then Return
EndIf
 
Scan

  switch
    case ntable="Bxautir" Or ntable="Bxautip":  
      if [Bx Tipo da Baixa]="NORMAL" and [Tipo do Pagamento]<>"TC"
         then [Taxa de Juros]=VSD_A_Juros
              AtualizaValores()
      endif
      
    case ntable="Bxautie" Or ntable="Bxautis":  
              [Taxa de Juros]=VSD_A_Juros
              AtualizaValores()
  
  endswitch
   
EndScan
        
EndProc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc PodeAtualizar()

if NumVal([Bxautc->SaldoAcerto])<>0
   then Mensagem("Acerto nÆo ser  atualizado, verifique o saldo pendente !")
        return false
endif        
return true

endproc

;*******************************************************************************
;*Realiza Baixa Automatica                                                     *
;*******************************************************************************
Proc BAIXA()
private wiche,wii, vrche, ctche

NLOTE      =[BxautC->Numero do Lote ]
VSDGDTBAIXA=[Bxautc->Data da Baixa  ]
VSDGDTBASE =[Bxautc->Data Base      ]

ENCONTRADO_INCONSISTENCIA=false
ARQ_ERRO= Privdir()+"ATUALIZ.ERR"
Deleta_Arquivo(ARQ_ERRO)

;-- Verificando se s¢ tem pagtos com 1 cheque emitido --------------------------
pagtocom1cheque=false
if [BxautC->Total_Receber         ]<=0 and
   [BxautC->Total_Cheque_Recebido ]<=0 and
   [BxautC->Total_Cheque_Utilizado]<=0 and
   [BxautC->Valor_TCGerado        ]<=0 and    
   [BxautC->Total_Pagar           ]>0  and
   [BxautC->Total_Cheque_Emitido  ]>0  
   then 
        wiche=0
        vrche=0
        ctche=true
        moveto "Bxautice"
        scan
          wiche=wiche+1
          
          if wiche=1 
             then 
                  vrche=[Valor          ]
          endif
          
          if [Codigo da Conta]<>[BxautC->Codigo da Conta]
             then ctche=false
          endif
          
          copytoarray reg_pagtocom1cheque
        endscan
        if wiche=1                      and 
           ctche                        and 
           vrche>=[BxautC->Total_Pagar] 
           then pagtocom1cheque=true 
        endif

        moveto "Bxautc"
endif
;-------------------------------------------------------------------------------

Do_It!                              
ClearAll
Savetables

View "Bxautc"
View "Bxautir"
View "Bxautip"
View "Bxautie"
View "Bxautis"
View "Bxautice"
View "\\Sistemas\\CtaRec\\Duplic"
View "\\Sistemas\\CtaRec\\DupBaixa"
View "\\Sistemas\\Cadastro\\FichaCli"
View "\\Sistemas\\CtaPag\\Titulos"
View "\\Sistemas\\CtaPag\\TitBaixa"
View "\\Sistemas\\CtaCor\\MovCont"
View "\\Sistemas\\CtaCor\\SaldCont"

View "\\Sistemas\\Cheqrec\\Chequec"
View "\\Sistemas\\Cheqrec\\Chequei"
View "\\Sistemas\\Cheqrec\\Bordchc"
View "\\Sistemas\\Cheqrec\\Bordchi"

moveto "bxautc"
CoeditKey

Moveto [Numero do Lote]
Locate nlote
if RetVal
   Then islockrecord()

        for wii from 1 to 2

          if wii=1 then fastmsg("Efetuando checagens !") endif
          if wii=2 then fastmsg("Atualizando dados !" )  endif
           
          BaixaTR(wii)
          BaixaTP(wii)
  
          EntraCH(wii)
          BaixaCH(wii)
          
          if wii=1 and ENCONTRADO_INCONSISTENCIA
             then quitloop
          endif
               
        endfor

        if not ENCONTRADO_INCONSISTENCIA
           then
                Credito_Promissoria()
                ChequesEmitido()
            
                moveto "bxautc"
                [Situacao]="ATUALIZADO"
                unlockrecord
        endif   
endif
Do_It!                              
ClearAll
Savetables

if ENCONTRADO_INCONSISTENCIA
   then
        msg=    "Foi detectado erro na atualiza‡Æo !// //"
        msg=msg+"Este lote nÆo foi totalmente atualizado,//"
        msg=msg+"verificar   o   relat¢rio   de   erro  e//"
        msg=msg+"corrigi-los e depois atualizar novamente."
        mensagem(msg)

        DISPOSITIVO_OPCAO="V"
        PDFZEBRA = False
        
        ImpriArq(ARQ_ERRO)
        
   else MENSAGEM("Baixa/Atualiza‡Æo concluida!")
endif

Carrega_Tabelas()
Moveto "bxautc"
PickForm "F"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   Then islockrecord()
endif

LIMPAGUARDE()

if ENCONTRADO_INCONSISTENCIA
   then return false
   else return true
endif

endproc

;*******************************************************************************
;*Realiza Baixa Automatica Contas a Receberr/ Conta Corrente                   *
;*******************************************************************************
Proc BAIXATR(ordem)
private i, bxok, sm, ordem

switch
  case ordem=1 : AGUARDE("Aguarde, checando dados contas a receber")
  case ordem=2 : AGUARDE("Aguarde, atualizando contas a receber e Caixa/Banco")
endswitch

moveto "bxautir"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   then while [Numero do Lote]=[Bxautc->numero do Lote] 

           NLANC=[Numero do Lancamento]

           sm=   "Contas a Receber, lan‡amento "+NLANC+ " - "
           sm=sm+"Docto "+Format("W04,AL",[Codigo da Empresa  ])+"/"+
                          Format("W04,AL",[Codigo do Documento])+"/"+
                          Format("W10,AL",[Numero do Documento])+", "

        
           ;* Localiza Titulo ***
           Moveto "\\Sistemas\\CtaRec\\Duplic"
           Moveto [Numero do Lancamento]
           Locate NLANC
           if not retval
              then 
                   Grava_Erro(sm+"t¡tulo nÆo encontado !")
              
              else
                   while true

                     if [Codigo da Empresa  ]<>[Bxautir->Codigo da Empresa  ]  or
                        [Codigo do Documento]<>[Bxautir->Codigo do Documento]  or
                        [Numero do Documento]<>[Bxautir->Numero do Documento]  
                        then 
                             Grava_Erro(sm+"t¡tulo nÆo confere dados !")
                             quitloop
                     endif
                     
                     if [Saldo do Documento]<=0.01
                        then 
                             Grava_Erro(sm+"baixa n„o efetuada, t¡tulo j  liquidado !")
                             quitloop
                     endif

                     if ordem=1                        
                        then quitloop
                     endif

                     ;* Gera Baixa ***
                     bxok=true
                     For I from 1 to 8
                       NITEM=StrVal(I)
                       
                       Moveto "\\Sistemas\\CtaRec\\DupBaixa"
                       Moveto [Numero do Lancamento]
                       Locate NLANC,NITEM
                       If Not Retval
                          Then End Down
                               [Numero do Lancamento]=NLANC
                               [Sequencia da Baixa  ]=NITEM
                               if not islockrecord()
                                  then quitloop
                               endif
                               del
                          else 
                               if [Bx Sistema Gerador     ]="BX"   and
                                  [Bx Tipo Docto Gerador  ]="ACF"  and
                                  [Bx Numero Docto Gerador]=[Bxautc->Numero do Lote]
                                  then bxok=false
                                       Grava_Erro(sm+"baixa j  existe !")
                                       quitloop
                               endif  
                          
                          
                               if i=8
                                  then bxok=false
                                       Grava_Erro(sm+"baixa n„o efetuada, mais de 9 baixas !")
                                       quitloop
                               endif     
                       EndIf
                     EndFor
                     if not bxok
                        then quitloop
                     endif
                     
                     [Codigo da Conta     ]=[Bxautc->Codigo da Conta        ]
                     [Codigo da Empresa   ]=[\Sistemas\CtaRec\Duplic->Codigo da Empresa]
                     [Data do Pagamento   ]=[Bxautc->Data da Baixa          ]
                     [Valor do Recebimento]=[Bxautir->Bx Valor do Recebimento]
                     [Valor do Desconto   ]=[Bxautir->Bx Valor do Desconto   ]
                     [Valor do Juros      ]=[Bxautir->Bx Valor do Juros      ]
                     [Tipo da Baixa       ]=[Bxautir->Bx Tipo da Baixa       ]
                  
                     switch
                       case sys_codigo_cliente="0380":
                         [Valor da Comissao]=NDecimal((([Valor do Recebimento]-[Valor do Juros])*[\Sistemas\CtaRec\Duplic->TaxaComissao])/100,2)
                       
                       otherwise                     :
                         TXCOMIS=((([Valor do Recebimento]+[Valor do Desconto])-[Valor do Juros])*100)/[\Sistemas\CtaRec\Duplic->Saldo do Documento]
                         [Valor da Comissao]=NDecimal(([\Sistemas\CtaRec\Duplic->Saldo da Comissao]*TXCOMIS)/100,2)
              
                     endswitch
                  
                     If regp_duplic["Comissao_Juros_Descto"]="S"
                        Then If [Valor do Juros] > 0
                                Then TXJUROS=([Valor do Juros]*100)/([Valor do Recebimento]+[Valor do Desconto]-[Valor do Juros])
                                     [Valor da Comissao]=[Valor da Comissao]+NDecimal(([Valor da Comissao]*TXJUROS)/100,2)
                                Else If [Valor do Desconto]> 0
                                        Then TXDESCTO=([Valor do Desconto]*100)/([Valor do Recebimento]+[Valor do Desconto]-[Valor do Juros])
                                             [Valor da Comissao]=[Valor da Comissao]-NDecimal(([Valor da Comissao]*TXDESCTO)/100,2)
                                     EndIf
                             EndIf
                     EndIf         
                  
                     [Codigo CCusto         ]=[\Sistemas\CtaRec\Duplic->Codigo CCusto         ]
                     [Codigo Plano_Conta    ]=[\Sistemas\CtaRec\Duplic->Codigo Plano_Conta    ]
                     
                     If IsBlank([Codigo Plano_Conta])
                        Then Switch
                               Case regp_duplic["Plano_Conta_Debito"      ]<>""  And [\Sistemas\CtaRec\Duplic->Tipo do Pagamento]="CD" :
                                    [Codigo Plano_Conta]=regp_duplic["Plano_Conta_Debito"      ]
                               Case regp_duplic["Plano_Conta_Credito"     ]<>"" And  [\Sistemas\CtaRec\Duplic->Tipo do Pagamento]="CT" :
                                    [Codigo Plano_Conta]=regp_duplic["Plano_Conta_Credito"     ]
                               Case regp_duplic["Plano_Conta_Credito"     ]<>"" And  [\Sistemas\CtaRec\Duplic->Tipo do Pagamento]="CL" :
                                    [Codigo Plano_Conta]=regp_duplic["Plano_Conta_Credito"     ]
                               Case [Data do Pagamento]=[\Sistemas\CtaRec\Duplic->Data de Emissao] : 
                                    If Not IsBlank(regp_duplic["Plano_Conta_AVista"      ])
                                       Then [Codigo Plano_Conta]=regp_duplic["Plano_Conta_AVista"      ]
                                    EndIf     
                               OtherWise :  
                                    If Not IsBlank(regp_duplic["Plano_Conta_APrazo"      ])
                                       Then [Codigo Plano_Conta]=regp_duplic["Plano_Conta_APrazo"      ]
                                    EndIf
                             EndSwitch
                     EndIf
                     
                     [Codigo do Historico   ]=""
                     [Descricao do Historico]="ACFIN "+[Bxautc->Numero do Lote]+", "+
                                              Format("W22,AL","REC. "+[\Sistemas\CtaRec\Duplic->Tipo do Documento]+"/"+
                                              [\Sistemas\CtaRec\Duplic->Numero do Documento])
                  
                     [Numero_Carregamento   ]=[\Sistemas\CtaRec\Duplic->Numero_Carregamento_Orig]
          
                     [Bx Sistema Gerador     ]="BX"
                     [Bx Tipo Docto Gerador  ]="ACF"
                     [Bx Numero Docto Gerador]=[Bxautc->Numero do Lote]
                     
                     if [Bxautir->Bx Tipo da Baixa       ]<>"NORMAL"
                        then [Observacoes           ]=[Bxautir->Bx Tipo da Baixa]+" por Baixa Automatica."
                             [Descricao do Historico]="BAIXA "+[Bxautir->Bx Tipo da Baixa]+", "+
                                                               [\Sistemas\CtaRec\Duplic->Tipo do Documento]+"/"+
                                                               [\Sistemas\CtaRec\Duplic->Numero do Documento]   
                     endif   

                     if not isblank([Bxautir->Observacoes])
                        then if not isblank([Observacoes])
                                then [Observacoes           ]=[Observacoes           ]+" - "
                             endif
                             [Observacoes           ]=[Observacoes           ]+[Bxautir->Observacoes]
                     endif   
          
                     Controle_Dia()
                     UnLockRecord
                  
                  ;* Atualiza Titulo ***
                     Moveto "\\Sistemas\\CtaRec\\Duplic"
                     [Saldo do Documento]=Round([Saldo do Documento]-
                                          (([\Sistemas\CtaRec\DupBaixa->Valor do Recebimento]-
                                            [\Sistemas\CtaRec\DupBaixa->Valor do Juros      ])+
                                            [\Sistemas\CtaRec\DupBaixa->Valor do Desconto]),2)
                     [Saldo da Comissao ]=Round([Saldo da Comissao ]-
                                           [\Sistemas\CtaRec\DupBaixa->Valor da Comissao   ],2)
                     UnLockRecord
                  
                     if [Bxautir->Bx Tipo da Baixa       ]="NORMAL"
                        then
                             ;* Atualiza Conta Corrente ***
                             ANOREF=StrVal(Year([\Sistemas\CtaRec\DupBaixa->Data do Pagamento]))
                             MESREF=StrVal(Month([\Sistemas\CtaRec\DupBaixa->Data do Pagamento]))
                             MESREF=ALINHM(MESREF, 2)
                          
                             Moveto "\\Sistemas\\CtaCor\\SaldCont"
                             While True
                               Moveto [Codigo da Conta]
                               Locate [\Sistemas\CtaRec\DupBaixa->Codigo da Conta],ANOREF,MESREF
                               If Not RetVal
                                  Then End
                                       Down
                                       [Codigo da Conta]=[\Sistemas\CtaRec\DupBaixa->Codigo da Conta]
                                       [Ano Referencia ]=ANOREF
                                       [Mes Referencia ]=MESREF
                                       [Saldo Inicial  ]=0
                                       [Entradas       ]=0
                                       [Saidas         ]=0
                                       If IsLockRecord()
                                          Then Del
                                       EndIf
                                  Else If Not IsLockRecord()
                                          Then QuitLoop
                                       EndIf
                               EndIf
                             EndWhile
                             [Entradas]=[Entradas]+[\Sistemas\CtaRec\DupBaixa->Valor do Recebimento]
                             UnLockRecord
                          
                             Moveto "\\Sistemas\\CtaCor\\MovCont"
                             While True          
                               End
                               NLANCMC=[Numero do Lancamento]
                               If IsBlank(NLANCMC)
                                  Then NLANCMC="0"
                               EndIf
                               Down
                               NLANCMC=ALINHM(StrVal(NumVal(NLANCMC)+1),6)
                               [Numero do Lancamento  ]=NLANCMC
                               [Codigo da Conta       ]=[\Sistemas\CtaRec\DupBaixa->Codigo da Conta]
                               If Not IsLockRecord()
                                  Then QuitLoop
                                  Else Del
                               EndIf
                             EndWhile
                             [Codigo da Empresa     ]=[\Sistemas\CtaRec\Duplic->Codigo da Empresa     ]
                             [Tipo de Operacao      ]="07"
                             [Data                  ]=[\Sistemas\CtaRec\DupBaixa->Data do Pagamento   ]
                             [Valor                 ]=[\Sistemas\CtaRec\DupBaixa->Valor do Recebimento]
                             [Valor do Desconto     ]=[\Sistemas\CtaRec\DupBaixa->Valor do Desconto   ]
                             [Valor do Juros        ]=[\Sistemas\CtaRec\DupBaixa->Valor do Juros      ]
                             [Codigo do Documento   ]=[\Sistemas\CtaRec\Duplic->Codigo do Documento   ]
                             [Numero do Documento   ]=[\Sistemas\CtaRec\Duplic->Numero do Documento   ]
                             [Codigo do EmitDest    ]=[\Sistemas\CtaRec\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 [\Sistemas\CtaRec\DupBaixa->Data do Pagamento]=[\Sistemas\CtaRec\Duplic->Data de Emissao]
                                Then [Tipo do Lancamento    ]="I"
                                Else [Tipo do Lancamento    ]="J"
                             EndIf
                             [Data Competencia      ]=[\Sistemas\CtaRec\Duplic->Data de Emissao       ]
  
                             [Sistema Gerador       ]="CR"
                             [Empresa Gerador       ]=[\Sistemas\CtaRec\Duplic->Codigo da Empresa     ] 
                             [Lancamento Gerador    ]=[\Sistemas\CtaRec\Duplic->Numero do Lancamento  ]
                             [Sequencia Gerador     ]=[\Sistemas\CtaRec\DupBaixa->Sequencia da Baixa  ]
                  
                             Controle_Dia()
                             UnLockRecord
                          
                          ;* Atualiza Baixa com Lancamento do Conta Corrente ***
                             Moveto "\\Sistemas\\CtaRec\\DupBaixa"
                             [Lancamento Conta Corrente]=NLANCMC
                             unlockrecord
                          
                          ;* Ficha Financeira ***
                             NDA=[\Sistemas\CtaRec\DupBaixa->Data do Pagamento]-[\Sistemas\CtaRec\Duplic->Data de Vencimento]
                             If NDA>0
                                Then Moveto "\\Sistemas\\Cadastro\\FichaCli"
                                     Moveto [Codigo]
                                     Locate [\Sistemas\CtaRec\Duplic->Codigo do Destinatario]
                                     If RetVal
                                        Then While IsLockRecord() EndWhile
                                             [Numero de Atrasos] = [Numero de Atrasos] + 1
                                             If [Maior Atraso] < NDA
                                                Then [Maior Atraso] = NDA
                                                     [Data do Maior Atraso ]=[\Sistemas\CtaRec\DupBaixa->Data do Pagamento   ]
                                                     [Valor do Maior Atraso]=[\Sistemas\CtaRec\DupBaixa->Valor do Recebimento]
                                             EndIf
                                             UnLockRecord
                                     EndIf
                             EndIf
                     EndIf

                     Moveto "Bxautir"
                     [Bx Sequencia da Baixa]=NITEM
                     unlockrecord
                     
                     quitloop
                   endwhile
                   
           endif
           
           Moveto "Bxautir"
           skip
           if eot() then quitloop endif
        endwhile
endif  

Moveto "Bxautc"
if ordem=2 and [Bxautc->Tipo_TCGerado]="R" and [Bxautc->Valor_TCGerado]>0
   then Play("FT_GTCE") 
endif

LIMPAGUARDE()

return true
EndProc

;*******************************************************************************
;*Realiza Baixa Automatica Contas a pagar/ Conta Corrente                      *
;*******************************************************************************
Proc BAIXATP(ordem)
private i, bxok, sm,ordem

switch
  case ordem=1 : AGUARDE("Aguarde, checando dados contas a pagar")
  case ordem=2 : AGUARDE("Aguarde, atualizando contas a pagar e Caixa/Banco")
endswitch

moveto "bxautip"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   then while [Numero do Lote]=[Bxautc->numero do Lote] 

           NLANC=[Numero do Lancamento]

           sm=   "Contas a Pagar  , lan‡amento "+NLANC+ " - "
           sm=sm+"Docto "+Format("W04,AL",[Codigo da Empresa  ])+"/"+
                          Format("W04,AL",[Codigo do Documento])+"/"+
                          Format("W10,AL",[Numero do Documento])+", "

        
           ;* Localiza Titulo ***
           Moveto "\\Sistemas\\CtaPag\\Titulos"
           Moveto [Numero do Lancamento]
           Locate NLANC
           if not retval
              then
                   Grava_Erro(sm+"t¡tulo nÆo encontado !")
              
              else
                   while true

                     if [Codigo da Empresa  ]<>[Bxautip->Codigo da Empresa  ]  or
                        [Codigo do Documento]<>[Bxautip->Codigo do Documento]  or
                        [Numero do Documento]<>[Bxautip->Numero do Documento]  
                        then 
                             Grava_Erro(sm+"t¡tulo nÆo confere dados !")
                             quitloop
                     endif
                     
                     if [Saldo do Documento]<=0.01
                        then 
                             Grava_Erro(sm+"baixa n„o efetuada, t¡tulo j  liquidado !")
                             quitloop
                     endif

                     if ordem=1
                        then quitloop
                     endif   

                     ;* Gera Baixa ***
                     bxok=true
                     For I from 1 to 8
                       NITEM=StrVal(I)
                       
                       Moveto "\\Sistemas\\CtaPag\\TitBaixa"
                       Moveto [Numero do Lancamento]
                       Locate NLANC,NITEM
                       If Not Retval
                          Then End Down
                               [Numero do Lancamento]=NLANC
                               [Sequencia da Baixa  ]=NITEM
                               if not islockrecord()
                                  then quitloop
                               endif
                               del
                          else 
                               if [Bx Sistema Gerador     ]="BX"   and
                                  [Bx Tipo Docto Gerador  ]="ACF"  and
                                  [Bx Numero Docto Gerador]=[Bxautc->Numero do Lote]
                                  then bxok=false
                                       Grava_Erro(sm+"baixa j  existe !")
                                       quitloop
                               endif  
                          
                          
                               if i=8
                                  then bxok=false
                                       Grava_Erro(sm+"baixa n„o efetuada, mais de 9 baixas !")
                                       quitloop
                               endif     
                       EndIf
                     EndFor
                     if not bxok
                        then quitloop
                     endif
                     
                     [Codigo da Conta     ]=[Bxautc->Codigo da Conta        ]
                     [Codigo da Empresa   ]=[\Sistemas\CtaPag\Titulos->Codigo da Empresa]
                     [Data do Pagamento   ]=[Bxautc->Data da Baixa          ]
                     [Valor do Pagamento  ]=[Bxautip->Bx Valor do Recebimento]
                     [Valor do Desconto   ]=[Bxautip->Bx Valor do Desconto   ]
                     [Valor do Juros      ]=[Bxautip->Bx Valor do Juros      ]
                     [Tipo da Baixa       ]=[Bxautip->Bx Tipo da Baixa       ]
                     [Tipo de Operacao    ]="06"
                     [Tipo de Lancamento  ]=[\Sistemas\CtaPag\Titulos->Tipo do Lancamento]
                  
                     [Codigo CCusto       ]=[\Sistemas\CtaPag\Titulos->Codigo CCusto         ]
                     [Codigo Plano_Conta  ]=[\Sistemas\CtaPag\Titulos->Codigo Plano_Conta    ]
                     
                     If IsBlank([Codigo Plano_Conta])
                        Then Switch
                               Case [Data do Pagamento]=[\Sistemas\CtaPag\Titulos->Data de Emissao] : 
                                    If Not IsBlank(regp_titulo["Plano_Conta_AVista"      ])
                                       Then [Codigo Plano_Conta]=regp_titulo["Plano_Conta_AVista"      ]
                                    EndIf     
                               OtherWise :  
                                    If Not IsBlank(regp_titulo["Plano_Conta_APrazo"      ])
                                       Then [Codigo Plano_Conta]=regp_titulo["Plano_Conta_APrazo"      ]
                                    EndIf
                             EndSwitch
                     EndIf
                     
                     [Codigo do Historico   ]=""
                     [Descricao do Historico]="ACFIN "+[Bxautc->Numero do Lote]+", "+
                                              Format("W22,AL","PAG. "+[\Sistemas\CtaPag\Titulos->Tipo do Documento]+"/"+[\Sistemas\CtaPag\Titulos->Numero do Documento])
                  
                     [Bx Sistema Gerador     ]="BX"
                     [Bx Tipo Docto Gerador  ]="ACF"
                     [Bx Numero Docto Gerador]=[Bxautc->Numero do Lote]
                     
                     if [Bxautip->Bx Tipo da Baixa       ]<>"NORMAL"
                        then [Observacoes           ]=[Bxautip->Bx Tipo da Baixa]+" por Baixa Automatica."
                             [Descricao do Historico]="BAIXA "+[Bxautip->Bx Tipo da Baixa]+", "+
                                                               [\Sistemas\CtaPag\Titulos->Tipo do Documento]+"/"+
                                                               [\Sistemas\CtaPag\Titulos->Numero do Documento]   
                     endif   
          
                     if not isblank([Bxautip->Observacoes])
                        then if not isblank([Observacoes])
                                then [Observacoes           ]=[Observacoes           ]+" - "
                             endif
                             [Observacoes           ]=[Observacoes           ]+[Bxautip->Observacoes]
                     endif   

                     if pagtocom1cheque and [Bxautip->Bx Tipo da Baixa]="NORMAL"
                        then
                             [Tipo de Operacao      ]="05"
                             [Cheque Pre-Datado     ]=reg_pagtocom1cheque["Cheque Pre-Datado"     ]
                             [Data Cheque Pre-Datado]=reg_pagtocom1cheque["Data Cheque Pre-Datado"]
                             [Numero do Cheque      ]=reg_pagtocom1cheque["Numero do Cheque"      ]
                             [Serie do Cheque       ]=reg_pagtocom1cheque["Serie do Cheque"       ]
                     endif   

                     Controle_Dia()
                     UnLockRecord
                  
                  ;* Atualiza Titulo ***
                     Moveto "\\Sistemas\\CtaPag\\Titulos"
                     [Saldo do Documento]=Round([Saldo do Documento]-
                                          (([\Sistemas\CtaPag\TitBaixa->Valor do Pagamento  ]-
                                            [\Sistemas\CtaPag\TitBaixa->Valor do Juros      ])+
                                            [\Sistemas\CtaPag\TitBaixa->Valor do Desconto]),2)
                     UnLockRecord
                  
                     if [Bxautip->Bx Tipo da Baixa       ]="NORMAL"
                        then
                             ;* Atualiza Conta Corrente ***
                             ANOREF=StrVal(Year([\Sistemas\CtaPag\TitBaixa->Data do Pagamento]))
                             MESREF=StrVal(Month([\Sistemas\CtaPag\TitBaixa->Data do Pagamento]))
                             MESREF=ALINHM(MESREF, 2)
                          
                             Moveto "\\Sistemas\\CtaCor\\SaldCont"
                             While True
                               Moveto [Codigo da Conta]
                               Locate [\Sistemas\CtaPag\TitBaixa->Codigo da Conta],ANOREF,MESREF
                               If Not RetVal
                                  Then End
                                       Down
                                       [Codigo da Conta]=[\Sistemas\CtaPag\TitBaixa->Codigo da Conta]
                                       [Ano Referencia ]=ANOREF
                                       [Mes Referencia ]=MESREF
                                       [Saldo Inicial  ]=0
                                       [Entradas       ]=0
                                       [Saidas         ]=0
                                       If IsLockRecord()
                                          Then Del
                                       EndIf
                                  Else If Not IsLockRecord()
                                          Then QuitLoop
                                       EndIf
                               EndIf
                             EndWhile
                             [Saidas]=[Saidas]+[\Sistemas\CtaPag\TitBaixa->Valor do Pagamento]
                             UnLockRecord
                          
                             Moveto "\\Sistemas\\CtaCor\\MovCont"
                             While True          
                               End
                               NLANCMC=[Numero do Lancamento]
                               If IsBlank(NLANCMC)
                                  Then NLANCMC="0"
                               EndIf
                               Down
                               NLANCMC=ALINHM(StrVal(NumVal(NLANCMC)+1),6)
                               [Numero do Lancamento  ]=NLANCMC
                               [Codigo da Conta       ]=[\Sistemas\CtaPag\TitBaixa->Codigo da Conta]
                               If Not IsLockRecord()
                                  Then QuitLoop
                                  Else Del
                               EndIf
                             EndWhile
                             [Codigo da Empresa     ]=[\Sistemas\CtaPag\Titulos->Codigo da Empresa    ]
                             [Data                  ]=[\Sistemas\CtaPag\TitBaixa->Data do Pagamento   ]
                             [Valor                 ]=[\Sistemas\CtaPag\TitBaixa->Valor do Pagamento  ]
                             [Valor do Desconto     ]=[\Sistemas\CtaPag\TitBaixa->Valor do Desconto   ]
                             [Valor do Juros        ]=[\Sistemas\CtaPag\TitBaixa->Valor do Juros      ]
                             [Codigo do Documento   ]=[\Sistemas\CtaPag\Titulos->Codigo do Documento  ]
                             [Numero do Documento   ]=[\Sistemas\CtaPag\Titulos->Numero do Documento  ]
                             [Codigo do EmitDest    ]=[\Sistemas\CtaPag\Titulos->Codigo do Emitente   ]
                             [Codigo CCusto         ]=[\Sistemas\CtaPag\TitBaixa->Codigo CCusto       ]
                             [Codigo Plano_Conta    ]=[\Sistemas\CtaPag\TitBaixa->Codigo Plano_Conta  ]
                             [Codigo do Historico   ]=""
                             [Descricao do Historico]=[\Sistemas\CtaPag\TitBaixa->Descricao do Historico]
          
                             [Data Competencia      ]=[\Sistemas\CtaPag\Titulos->Data Competencia     ]
                             [Tipo de Operacao      ]=[\Sistemas\CtaPag\TitBaixa->Tipo de Operacao    ]
                             [Tipo do Lancamento    ]=[\Sistemas\CtaPag\TitBaixa->Tipo de Lancamento  ]
                  
                             [Sistema Gerador       ]="CP"
                             [Empresa Gerador       ]=[\Sistemas\CtaPag\Titulos->Codigo da Empresa    ]
                             [Lancamento Gerador    ]=[\Sistemas\CtaPag\Titulos->Numero do Lancamento ]
                             [Sequencia Gerador     ]=[\Sistemas\CtaPag\TitBaixa->Sequencia da Baixa  ]

                             [Cheque Pre-Datado     ]=[\Sistemas\CtaPag\TitBaixa->Cheque Pre-Datado      ]
                             [Data Cheque Pre-Datado]=[\Sistemas\CtaPag\TitBaixa->Data Cheque Pre-Datado ]
                             [Numero do Cheque      ]=[\Sistemas\CtaPag\TitBaixa->Numero do Cheque       ]
                             [Serie do Cheque       ]=[\Sistemas\CtaPag\TitBaixa->Serie do Cheque        ]
                  
                             Controle_Dia()
                             UnLockRecord
                          
                          ;* Atualiza Baixa com Lancamento do Conta Corrente ***
                             Moveto "\\Sistemas\\CtaPag\\TitBaixa"
                             [Lancamento Conta Corrente]=NLANCMC
                             unlockrecord
                          
                     EndIf
             
                     Moveto "Bxautip"
                     [Bx Sequencia da Baixa]=NITEM
                     unlockrecord
                     quitloop
                   
                   endwhile
           endif
           
           Moveto "Bxautip"
           skip
           if eot() then quitloop endif
        endwhile
endif  

Moveto "Bxautc"
if ordem=2 and [Bxautc->Tipo_TCGerado]="P" and [Bxautc->Valor_TCGerado]>0
   then Play("FT_GTCS") 
endif

LIMPAGUARDE()

return true
EndProc


;*******************************************************************************
;*Realiza entradas de cheques de terceiros                                     *
;*******************************************************************************
Proc ENTRACH(ordem)
private i, sm,
        NUMEROL, SEQ,
        EXISTE_LOTE_CHEQUE, NLANCTO_CHEQUE,
        vrchdescto, vrchjuros,ordem

switch
  case ordem=1 : AGUARDE("Aguarde, checando dados entrada cheque terceiros")
  case ordem=2 : AGUARDE("Aguarde, atualizando entrada cheque terceiros")
endswitch

EXISTE_LOTE_CHEQUE=False
NLANCTO_CHEQUE    =[Bxautc->Cheques_Numero_Lancamento]

for i from 1 to 2

  switch
    case i=1:
      If not IsBlank(NLANCTO_CHEQUE)
       Then
            Moveto "\\Sistemas\\CheqRec\\ChequeC"
            Moveto [Numero do Lancamento]
            Locate NLANCTO_CHEQUE
            if retval
               then EXISTE_LOTE_CHEQUE=true
            endif
      endif
      
    case i=2:
       Moveto "\\Sistemas\\CheqRec\\ChequeC"
       Moveto [Codigo da Empresa]
       Locate IndexOrder by "Indchc01" regconta["Codigo da Empresa"], "REC", [Bxautc->Numero do Lote] 
       if retval
          then EXISTE_LOTE_CHEQUE=true
               NLANCTO_CHEQUE    =[Numero do Lancamento]
       endif

  endswitch

  If EXISTE_LOTE_CHEQUE
     Then 
          sm=   "Cheque Terceiro , lan‡amento "+strval(NLANCTO_CHEQUE)+ " - "
          Grava_Erro(sm+"lote cheque j  existe !")
          
          if [Codigo              ]<>[Bxautc->Codigo       ] or
             [Data de Entrada     ]<>[Bxautc->Data da Baixa] or
             [Sistema Gerador     ]<>"AF"                    or
             [Tipo Docto Gerador  ]<>"REC"                   or
             [Numero Docto Gerador]=[Bxautc->Numero do Lote]
             then
                  Grava_Erro(sm+"lote cheque nÆo confere dados !")
          endif        

          Moveto "\\Sistemas\\CheqRec\\ChequeI"
          Moveto [Numero do Lancamento]
          Locate NLANCTO_CHEQUE
          If RetVal
             Then 
                  Grava_Erro(sm+"lote cheque j  tem cheques !")
                  
                  While [Numero do Lancamento]=NumVal(NLANCTO_CHEQUE)

                    If [Situacao]="LIQUIDADO"          Or
                       [Situacao]="SEM FUNDO"          Or
                       [Situacao]="EM COBRANCA"        Or
                       [Situacao]="EM COBRANCAPGTO"    Or
                       Search("TROCADO",[Situacao])>0  Or   
                       [Situacao]="PRORROGADO"
                       Then
                            sm=sm+"Cheque "+Format("W04,AL",[Codigo_Banco       ])+"/"+
                                            Format("W10,AL",[Numero_Cheque      ])+", "+
                                            [Situacao]
                            Grava_Erro(sm+"cheque j  utilizado !")
                    EndIf
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf
          
          return
  EndIf

endfor

if VRTOTTIT_ECH<=0 or ordem=1
   then return
endif   


Moveto "\\Sistemas\\CheqRec\\ChequeC"
while true
  Moveto [Numero do Lancamento]
  End
  If IsBlank([])
     Then NUMEROL=1
     Else NUMEROL=[]+1
  EndIf
  Down
  [Numero do Lancamento]=NUMEROL
  PostRecord KeyViol LeaveLocked
  If RetVal     
     Then quitloop
     Else Del
  EndIf    
Endwhile

[Codigo da Empresa       ]=regconta["Codigo da Empresa"]
[Data de Entrada         ]=[Bxautc->Data da Baixa      ]
[Codigo                  ]=[Bxautc->Codigo             ]
[Codigo do Representante ]=regdestinat["Codigo do Representante"]
[Observacao do Lancamento]="REF. ACFIN "+[Bxautc->Numero do Lote]
[Valor Total             ]=VRTOTTIT_ECH
[Sistema Gerador         ]="AF"
[Tipo Docto Gerador      ]="REC"
[Numero Docto Gerador    ]=[Bxautc->Numero do Lote     ]
Controle_dia()
UnLockRecord

vrchdescto=0 ; totalizador descontos
vrchjuros =0 ; totalizador juros            

seq=0
moveto "bxautie"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   then while [Numero do Lote]=[Bxautc->numero do Lote] 

          seq=seq+1
           
          Moveto "\\Sistemas\\CheqRec\\ChequeI"
          Moveto [Numero do Lancamento]
          Locate NUMEROL,seq
          If Not RetVal
             Then End
                  Down
                  [Numero do Lancamento]=NUMEROL
                  [Sequencia do Cheque ]=seq
                  [Codigo_Banco        ]=[Bxautie->Codigo_Banco]
                  [Nome_Banco          ]=[Bxautie->Nome_Banco]
                  [Agencia             ]=[Bxautie->Agencia        ]
                  [Numero_Conta        ]=[Bxautie->Numero_Conta   ]
                  [Numero_Cheque       ]=[Bxautie->Numero_Cheque]
                  [CPF                 ]=[Bxautie->CPF           ]
                  [Tipo_Emitente       ]=[Bxautie->Tipo_Emitente  ]
                  [Titular_Cheque      ]=[Bxautie->Titular_Cheque]
                  [Cidade              ]=[Bxautie->Cidade        ]
                  [UF                  ]=[Bxautie->UF            ]
                  [Data Vencimento     ]=[Bxautie->Data Vencimento]
                  [Valor               ]=[Bxautie->Valor]
                  [Observacao do Cheque]=[Bxautie->Observacao do Cheque]
                  [Sistema Origem      ]="AF"
                  [Lancamento Origem   ]=[Bxautc->Numero do Lote]
                  [Situacao            ]="EM ABERTO"
                  [Codigo_Cliente      ]=[Bxautie->Codigo_Cliente]
                  [Data_Entrada        ]=[Bxautie->Data_Entrada]
                  [Codigo da Empresa   ]=[\Sistemas\Cheqrec\Chequec->Codigo da Empresa]
                  [Codigo da Conta     ]=[Bxautc->Codigo da Conta]
                  [Codigo CMC7         ]=[Bxautie->Codigo CMC7]   
                  Controle_Dia()
                  UnLockRecord
             else
              

          EndIf

          vrchjuros =vrchjuros +[Bxautie->Bx Valor do Juros   ]
          vrchdescto=vrchdescto+[Bxautie->Bx Valor do Desconto]
          
          Moveto "Bxautie"
          [Bx Sequencia da Baixa]=seq   
          unlockrecord
           
          skip
          if eot() then quitloop endif
        endwhile
endif  

Moveto "Bxautc"
[Cheques_Numero_Lancamento]=NUMEROL
UnLockRecord


;-- movimento cxa/bco ----------------------------------------------------------
if vrchjuros>0 or vrchdescto>0
  then

       ;* Atualiza Conta Corrente ***
       ANOREF=StrVal(Year([Bxautc->Data da Baixa]))
       MESREF=StrVal(Month([Bxautc->Data da Baixa]))
       MESREF=ALINHM(MESREF, 2)
    
       Moveto "\\Sistemas\\CtaCor\\SaldCont"
       While True
         Moveto [Codigo da Conta]
         Locate [Bxautc->Codigo da Conta],ANOREF,MESREF
         If Not RetVal
            Then End
                 Down
                 [Codigo da Conta]=[Bxautc->Codigo da Conta]
                 [Ano Referencia ]=ANOREF
                 [Mes Referencia ]=MESREF
                 [Saldo Inicial  ]=0
                 [Entradas       ]=0
                 [Saidas         ]=0
                 If IsLockRecord()
                    Then Del
                 EndIf
            Else If Not IsLockRecord()
                    Then QuitLoop
                 EndIf
         EndIf
       EndWhile

       for i from 1 to 2

         switch
           case i=1 and vrchjuros =0 : loop
           case i=2 and vrchdescto=0 : loop
         endswitch 

         Moveto "\\Sistemas\\CtaCor\\SaldCont"
         switch
           case i=1: [Saidas  ]=[Saidas  ]+vrchjuros 
           case i=2: [Entradas]=[Entradas]+vrchdescto 
         endswitch 
      
         Moveto "\\Sistemas\\CtaCor\\MovCont"
         While True          
           End
           NLANCMC=[Numero do Lancamento]
           If IsBlank(NLANCMC)
              Then NLANCMC="0"
           EndIf
           Down
           NLANCMC=ALINHM(StrVal(NumVal(NLANCMC)+1),6)
           [Numero do Lancamento  ]=NLANCMC
           [Codigo da Conta       ]=[Bxautc->Codigo da Conta]
           If Not IsLockRecord()
              Then QuitLoop
              Else Del
           EndIf
         EndWhile
         [Codigo da Empresa     ]=regconta["Codigo da Empresa"]
         [Data                  ]=[Bxautc->Data da Baixa]
         [Codigo do Documento   ]="REC"
         [Numero do Documento   ]=[Bxautc->Numero do Lote]
         [Codigo do EmitDest    ]=[Bxautc->Codigo        ]
         [Codigo do Historico   ]=""
         [Data Competencia      ]=[Bxautc->Data da Baixa]
  
         [Sistema Gerador       ]="AF"
         [Empresa Gerador       ]=regconta["Codigo da Empresa"] 
         [Lancamento Gerador    ]=[Bxautc->Numero do Lote]

         switch
           case i=1:  
             [Valor                 ]=vrchjuros
             [Tipo de Operacao      ]="14"
             [Tipo do Lancamento    ]="E"
             [Descricao do Historico]="ACFIN "+[Bxautc->Numero do Lote]+", "+
                                      "PAGAMENTO DE JUROS"

             switch
               case sys_Codigo_Cliente="0377" : [Codigo Plano_Conta    ]="2.6.01.01.004"
               otherwise                      : [Codigo Plano_Conta    ]=""
             endswitch

           case i=2: 
             [Valor                 ]=vrchdescto
             [Tipo de Operacao      ]="07"
             [Tipo do Lancamento    ]="L"
             [Descricao do Historico]="ACFIN "+[Bxautc->Numero do Lote]+", "+
                                      "RECEBIMENTO DE JUROS"

             switch
               case sys_Codigo_Cliente="0377" : [Codigo Plano_Conta    ]="1.2.01.01.001"
               otherwise                      : [Codigo Plano_Conta    ]=""
             endswitch

         endswitch 
         Controle_Dia()
         UnLockRecord

         Moveto "\\Sistemas\\CtaCor\\SaldCont"
         UnLockRecord
       
       endfor
    
endif

LIMPAGUARDE()

return true
EndProc

;*******************************************************************************
;*Realiza Baixa de cheques de terceiros                                        *
;*******************************************************************************
Proc BAIXACH(ordem)
private i, bxok, sm,
        NUMEROL, SEQ,
        EXISTE_LOTE_CHEQUE, NLANCTO_CHEQUE,ordem

switch
  case ordem=1 : AGUARDE("Aguarde, checando dados baixa cheque terceiros")
  case ordem=2 : AGUARDE("Aguarde, atualizando baixa cheque terceiros")
endswitch

EXISTE_LOTE_CHEQUE=False
NLANCTO_CHEQUE    =[Bxautc->Bordero_Numero_Lote]

for i from 1 to 2

  switch
    case i=1:
      If not IsBlank(NLANCTO_CHEQUE)
       Then
            Moveto "\\Sistemas\\CheqRec\\Bordchc"
            Moveto [Numero do Lote]
            Locate NLANCTO_CHEQUE
            if retval
               then EXISTE_LOTE_CHEQUE=true
            endif
      endif
      
    case i=2:
      Moveto "\\Sistemas\\CheqRec\\bordchc"
      Moveto [Codigo da Empresa]
      Locate IndexOrder by "Indbrc01" regconta["Codigo da Empresa"], "REC", [Bxautc->Numero do Lote] 
      if retval
         then EXISTE_LOTE_CHEQUE=true
              NLANCTO_CHEQUE    =[Numero do Lote]
      endif

  endswitch

  If EXISTE_LOTE_CHEQUE
     Then 
          sm=   "Bordero Cheque  , lan‡amento "+strval(NLANCTO_CHEQUE)+ " - "
          Grava_Erro(sm+"lote bordero j  existe !")
          
          if [Codigo              ]<>[Bxautc->Codigo       ] or
             [Data do Lote        ]<>[Bxautc->Data da Baixa] or
             [Sistema Gerador     ]<>"AF"                    or
             [Tipo Docto Gerador  ]<>"REC"                   or
             [Numero Docto Gerador]=[Bxautc->Numero do Lote]
             then
                  Grava_Erro(sm+"lote bordero nÆo confere dados !")
          endif        

          Moveto "\\Sistemas\\CheqRec\\Bordchi"
          Moveto [Numero do Lote]
          Locate NLANCTO_CHEQUE
          If RetVal
             Then 
                  Grava_Erro(sm+"lote bordero j  tem cheques !")
                  
                  While [Numero do Lote]=NLANCTO_CHEQUE

                    sm=sm+"Cheque "+Format("W04,AL",[Codigo_Banco       ])+"/"+
                                    Format("W10,AL",[Numero_Cheque      ])
                    Grava_Erro(sm+"cheque j  utilizado !")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf
          
          return
  EndIf

endfor

if VRTOTTIT_SCH<=0 or ordem=1
   then return
endif   

Moveto "\\Sistemas\\CheqRec\\BordchC"
while true
  Moveto [Numero do Lote]
  End
  If IsBlank([])
     Then NUMEROL=1
     Else NUMEROL=[]+1
  EndIf
  Down
  [Numero do Lote      ]=NUMEROL
  PostRecord KeyViol LeaveLocked
  If RetVal     
     Then quitloop
     Else Del
  EndIf    
Endwhile

[Codigo da Empresa       ]=regconta["Codigo da Empresa"]
[Data do Lote            ]=[Bxautc->Data da Baixa      ]
[Codigo da Conta         ]=[Bxautc->Codigo da Conta    ]
[Codigo                  ]=[Bxautc->Codigo             ]
[Tipo de Destino         ]="PAGAMENTO"
[Total Lote              ]=VRTOTTIT_SCH
[Observacao do Lote      ]="REF. ACFIN "+[Bxautc->Numero do Lote]
[Sistema Gerador         ]="AF"
[Tipo Docto Gerador      ]="REC"
[Numero Docto Gerador    ]=[Bxautc->Numero do Lote     ]
Controle_dia()
UnLockRecord

seq=0
moveto "bxautis"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   then while [Numero do Lote]=[Bxautc->numero do Lote] 

          seq=seq+1
           
          Moveto "\\Sistemas\\CheqRec\\bordchI"
          Moveto [Numero do Lote]
          Locate NUMEROL,seq
          If Not RetVal
             Then End
                  Down
                  [Numero do Lote      ]=NUMEROL
                  [Sequencia do Lote   ]=seq
                  [Numero do Lancamento]=[Bxautis->Numero do Lancamento]
                  [Sequencia do Cheque ]=[Bxautis->Sequencia do Cheque ]
                  [Codigo_Banco        ]=[Bxautis->Codigo_Banco]
                  [Nome_Banco          ]=[Bxautis->Nome_Banco]
                  [Agencia             ]=[Bxautis->Agencia        ]
                  [Numero_Conta        ]=[Bxautis->Numero_Conta   ]
                  [Numero_Cheque       ]=[Bxautis->Numero_Cheque]
                  [CPF                 ]=[Bxautis->CPF           ]
                  [Tipo_Emitente       ]=[Bxautis->Tipo_Emitente  ]
                  [Titular_Cheque      ]=[Bxautis->Titular_Cheque]
                  [Cidade              ]=[Bxautis->Cidade        ]
                  [UF                  ]=[Bxautis->UF            ]
                  [Data Vencimento     ]=[Bxautis->Data Vencimento ]
                  [Valor               ]=[Bxautis->Valor]
                  [Observacao do Cheque]=[Bxautis->Observacao do Cheque]
                  [Codigo_Cliente      ]=[Bxautis->Codigo_Cliente]
                  [Codigo CMC7         ]=[Bxautis->Codigo CMC7         ]
                  Controle_Dia()
                  UnLockRecord
                  
                  Moveto "\\Sistemas\\CheqRec\\ChequeI"
                  Moveto [Numero do Lancamento]
                  Locate [Bxautis->Numero do Lancamento],[Bxautis->Sequencia do Cheque ]
                  If RetVal
                     Then [Situacao                ]="LIQUIDADO"
                          [Numero do Lote Bordero  ]=[\Sistemas\Cheqrec\BordChc->Numero do Lote ]
                          [Data_Liquidado          ]=[\Sistemas\Cheqrec\BordChc->Data do Lote   ]
                          [Tipo de Destino         ]=[\Sistemas\Cheqrec\BordChc->Tipo de Destino]
                          [Sistema Destino         ]="BO"
                          UnLockRecord
                  endif   
                  
             else
              

          EndIf
          
          Moveto "Bxautis"
          [Bx Sequencia da Baixa]=seq    
          unlockrecord
           
          skip
          if eot() then quitloop endif
        endwhile
endif  

Moveto "Bxautc"
[Bordero_Numero_Lote]=NUMEROL
UnLockRecord

LIMPAGUARDE()

return true
EndProc

;*******************************************************************************
;*Realiza Credito/Debito cxa/bco                                               *
;*******************************************************************************
Proc Credito_Promissoria()  

if [Bxautc->Valor_TCGerado]<=0
   then return 
endif

if [Bxautc->Total_Receber]=0 and [Bxautc->Total_Pagar]=0
   then return 
endif

If [Bxautc->Tipo_TCGerado]=""
   then 
        Play("FT_GTCS") 
        return 
endif

AGUARDE("Aguarde, atualizando caixa")

;* Atualiza Conta Corrente ***
ANOREF=StrVal(Year([Bxautc->Data da Baixa]))
MESREF=StrVal(Month([Bxautc->Data da Baixa]))
MESREF=ALINHM(MESREF, 2)

Moveto "\\Sistemas\\CtaCor\\SaldCont"
While True
 Moveto [Codigo da Conta]
 Locate [Bxautc->Codigo da Conta],ANOREF,MESREF
 If Not RetVal
    Then End
         Down
         [Codigo da Conta]=[Bxautc->Codigo da Conta]
         [Ano Referencia ]=ANOREF
         [Mes Referencia ]=MESREF
         [Saldo Inicial  ]=0
         [Entradas       ]=0
         [Saidas         ]=0
         If IsLockRecord()
            Then Del
         EndIf
    Else If Not IsLockRecord()
            Then QuitLoop
         EndIf
 EndIf
EndWhile

switch
 case [Bxautc->Tipo_TCGerado]="P" : [Entradas]=[Entradas]+[Bxautc->Valor_TCGerado]
 case [Bxautc->Tipo_TCGerado]="R" : [Saidas  ]=[Saidas  ]+[Bxautc->Valor_TCGerado]
endswitch 
unlockrecord

Moveto "\\Sistemas\\CtaCor\\MovCont"
While True          
 End
 NLANCMC=[Numero do Lancamento]
 If IsBlank(NLANCMC)
    Then NLANCMC="0"
 EndIf
 Down
 NLANCMC=ALINHM(StrVal(NumVal(NLANCMC)+1),6)
 [Numero do Lancamento  ]=NLANCMC
 [Codigo da Conta       ]=[Bxautc->Codigo da Conta]
 If Not IsLockRecord()
    Then QuitLoop
    Else Del
 EndIf
EndWhile
[Codigo da Empresa     ]=regconta["Codigo da Empresa"]
[Data                  ]=[Bxautc->Data da Baixa]
[Codigo do Documento   ]="REC"
[Numero do Documento   ]=[Bxautc->Numero do Lote]
[Codigo do EmitDest    ]=[Bxautc->Codigo        ]
[Codigo do Historico   ]=""
[Data Competencia      ]=[Bxautc->Data da Baixa]

[Sistema Gerador       ]="AF"
[Empresa Gerador       ]=regconta["Codigo da Empresa"] 
[Lancamento Gerador    ]=[Bxautc->Numero do Lote]

switch
 case [Bxautc->Tipo_TCGerado]="R":  
   [Valor                 ]=[Bxautc->Valor_TCGerado]
   [Tipo de Operacao      ]="14"
   [Tipo do Lancamento    ]="E"
   [Descricao do Historico]="ACFIN "+[Bxautc->Numero do Lote]+", "+
                            "SAIDA PROMISSORIA GERADA"

   switch
     case sys_Codigo_Cliente="0377" : [Codigo Plano_Conta    ]=""
     otherwise                      : [Codigo Plano_Conta    ]=""
   endswitch

 case [Bxautc->Tipo_TCGerado]="P": 
   [Valor                 ]=[Bxautc->Valor_TCGerado]
   [Tipo de Operacao      ]="07"
   [Tipo do Lancamento    ]="L"
   [Descricao do Historico]="ACFIN "+[Bxautc->Numero do Lote]+", "+
                            "ENTRADA TITULO CREDITO GERADO"           

   switch
     case sys_Codigo_Cliente="0377" : [Codigo Plano_Conta    ]=""
     otherwise                      : [Codigo Plano_Conta    ]=""
   endswitch

endswitch 
Controle_Dia()
UnLockRecord

LIMPAGUARDE()

return true
EndProc

;*******************************************************************************
;*Realiza Cheque Emitido cxa/bco                                               *
;*******************************************************************************
Proc ChequesEmitido()
private i,arraycta, arrayvlr

if pagtocom1cheque
  then return true
endif  

AGUARDE("Aguarde, atualizando banco")

Array arraycta[10]
Array arrayvlr[10]

for i from 1 to 10
  arraycta[i]=""
  arrayvlr[i]=0
endfor


;* Atualiza Conta Corrente ***
ANOREF=StrVal(Year([Bxautc->Data da Baixa]))
MESREF=StrVal(Month([Bxautc->Data da Baixa]))
MESREF=ALINHM(MESREF, 2)

Moveto "Bxautice"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   then while [Numero do Lote]=[Bxautc->numero do Lote]

          for i from 1 to 10
            if [Bxautice->Codigo da Conta]=arraycta[i]
               then arrayvlr[i]=arrayvlr[i]+[Bxautice->Valor]
                    quitloop
               else if arraycta[i]=""
                       then arraycta[i]=[Bxautice->Codigo da Conta]
                            arrayvlr[i]=[Bxautice->Valor          ] 
                            quitloop
                    endif
            endif                
          endfor

          Moveto "\\Sistemas\\CtaCor\\SaldCont"
          While True
           Moveto [Codigo da Conta]
           Locate [Bxautice->Codigo da Conta],ANOREF,MESREF
           If Not RetVal
              Then End
                   Down
                   [Codigo da Conta]=[Bxautice->Codigo da Conta]
                   [Ano Referencia ]=ANOREF
                   [Mes Referencia ]=MESREF
                   [Saldo Inicial  ]=0
                   [Entradas       ]=0
                   [Saidas         ]=0
                   If IsLockRecord()
                      Then Del
                   EndIf
              Else If Not IsLockRecord()
                      Then QuitLoop
                   EndIf
           EndIf
          EndWhile
          
          [Saidas  ]=[Saidas  ]+[Bxautice->Valor]
          unlockrecord
          
          Moveto "\\Sistemas\\CtaCor\\MovCont"
          While True          
           End
           NLANCMC=[Numero do Lancamento]
           If IsBlank(NLANCMC)
              Then NLANCMC="0"
           EndIf
           Down
           NLANCMC=ALINHM(StrVal(NumVal(NLANCMC)+1),6)
           [Numero do Lancamento  ]=NLANCMC
           [Codigo da Conta       ]=[Bxautice->Codigo da Conta]
           If Not IsLockRecord()
              Then QuitLoop
              Else Del
           EndIf
          EndWhile
          [Codigo da Empresa     ]=regconta["Codigo da Empresa"]
          [Data                  ]=[Bxautc->Data da Baixa]
          [Codigo do Documento   ]="REC"
          [Numero do Documento   ]=[Bxautc->Numero do Lote]+"/"+strval([Bxautice->Sequencia])
          [Codigo do EmitDest    ]=[Bxautc->Codigo        ]
          [Codigo do Historico   ]=""
          [Data Competencia      ]=[Bxautc->Data da Baixa]
          
          [Sistema Gerador       ]="AF"
          [Empresa Gerador       ]=regconta["Codigo da Empresa"] 
          [Lancamento Gerador    ]=[Bxautc->Numero do Lote]
          
          [Valor                 ]=[Bxautice->Valor]
          [Tipo de Operacao      ]="05"
          [Tipo do Lancamento    ]="E"
          [Descricao do Historico]="ACFIN "+[Bxautc->Numero do Lote]+", "+
                                   "PAGTO EFETUADO CH "+[Bxautice->Numero do Cheque      ]
          
          [Numero do Cheque      ]=[Bxautice->Numero do Cheque      ]
          [Serie do Cheque       ]=[Bxautice->Serie do Cheque       ]
          [Cheque Pre-Datado     ]=[Bxautice->Cheque Pre-Datado     ]
          [Data Cheque Pre-Datado]=[Bxautice->Data Cheque Pre-Datado]
          
          switch
           case sys_Codigo_Cliente="0377" : [Codigo Plano_Conta    ]=""
           otherwise                      : [Codigo Plano_Conta    ]=""
          endswitch
          
          Controle_Dia()
          UnLockRecord

          Moveto "Bxautice"
          [Lancamento Conta Corrente]=NLANCMC  
          unlockrecord
           
          skip
          if eot() then quitloop endif
        endwhile
        
        
        if [BxautC->Total_Receber         ]<=0 and
           [BxautC->Total_Cheque_Recebido ]<=0 and
           [BxautC->Total_Cheque_Utilizado]<=0 and
           [BxautC->Valor_TCGerado        ]<=0 and    
           [BxautC->Total_Pagar           ]>0  and
           [BxautC->Total_Cheque_Emitido  ]>0  
           then 

                for i from 1 to 10
                  if arraycta[i]=""
                     then quitloop
                  endif

                  Moveto "\\Sistemas\\CtaCor\\SaldCont"
                  While True
                   Moveto [Codigo da Conta]
                   Locate arraycta[i],ANOREF,MESREF
                   If Not RetVal
                      Then End
                           Down
                           [Codigo da Conta]=arraycta[i]
                           [Ano Referencia ]=ANOREF
                           [Mes Referencia ]=MESREF
                           [Saldo Inicial  ]=0
                           [Entradas       ]=0
                           [Saidas         ]=0
                           If IsLockRecord()
                              Then Del
                           EndIf
                      Else If Not IsLockRecord()
                              Then QuitLoop
                           EndIf
                   EndIf
                  EndWhile
                  [Entradas  ]=[Entradas  ]+arrayvlr[i]
                  unlockrecord
                  
                  Moveto "\\Sistemas\\CtaCor\\MovCont"
                  While True          
                   End
                   NLANCMC=[Numero do Lancamento]
                   If IsBlank(NLANCMC)
                      Then NLANCMC="0"
                   EndIf
                   Down
                   NLANCMC=ALINHM(StrVal(NumVal(NLANCMC)+1),6)
                   [Numero do Lancamento  ]=NLANCMC
                   [Codigo da Conta       ]=arraycta[i]
                   Controle_Dia()

                   If Not IsLockRecord()
                      Then QuitLoop
                      Else Del
                   EndIf
                  EndWhile
                  
                  [Codigo da Empresa     ]=regconta["Codigo da Empresa"]
                  [Data                  ]=[Bxautc->Data da Baixa]
                  [Codigo do Documento   ]="REC"
                  [Numero do Documento   ]=[Bxautc->Numero do Lote]+"/"+strval([Bxautice->Sequencia])
                  [Codigo do EmitDest    ]=[Bxautc->Codigo        ]
                  [Codigo do Historico   ]=""
                  [Data Competencia      ]=[Bxautc->Data da Baixa]
                  
                  [Sistema Gerador       ]="AF"
                  [Empresa Gerador       ]=regconta["Codigo da Empresa"] 
                  [Lancamento Gerador    ]=[Bxautc->Numero do Lote]
                  
                  [Valor                 ]=arrayvlr[i]
                  
                  [Tipo de Operacao      ]="07"
                  [Tipo do Lancamento    ]="L"
                  [Descricao do Historico]="ACFIN "+[Bxautc->Numero do Lote]+", "+
                                           "ESTORNO DE CH EMITIDOS SOBRE PAGAMENTOS"
                  
                  switch
                   case sys_Codigo_Cliente="0377" : [Codigo Plano_Conta    ]=""
                   otherwise                      : [Codigo Plano_Conta    ]=""
                  endswitch
                  UnLockRecord
                endfor
                
        endif
endif    

LIMPAGUARDE()

release vars arraycta,arrayvlr,i

return true
EndProc

;*******************************************************************************
;* Rotina De Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()

ShowPopup " Fun‡”es " CENTERED
 "~P~adrÆo      " : " Imprimir Rela‡Æo de t¡tulos do Lote         " : "Padrao",
 "~R~ecibo Acerto": " Imprimir Comprovante Acerto e Atualiza Baixa" : "Comprovante",
 "~C~ancelar    " : " Cancelar a Opera‡„o                         " : "CANCELAR"
EndMenu
 To MenuVar

echo off
If MenuVar="CANCELAR" or MenuVar="Esc"
    Then Return false
EndIf

NLOTE      =[BxautC->Numero do Lote ]
VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]

switch
  case MenuVar="Padrao":
    If IsBlank(regp_cxbco["Impressao_Relacao"])
       Then
            msg=    "Empresa: "+regconta["Codigo da Empresa"]+", sem modelo padrÆo !// //"
            msg=msg+" - Utilit rios / Parƒmetros / Caixa/Banco// //"
            msg=msg+"Verificar com Suporte da Vise !"
            Mensagem(msg)
            return false     
    endif   

   	DISPOSITIVO()
		If OK=""
		   Then
		        return false
    endif        
        
    Do_It!
    ClearAll
    
    Play(regp_cxbco["Impressao_Relacao"])

  case MenuVar="Comprovante":
    If IsBlank(regp_cxbco["Impressao_Recibo"])
       Then
            msg=    "Empresa: "+regconta["Codigo da Empresa"]+", sem modelo comprovante !// //"
            msg=msg+" - Utilit rios / Parƒmetros / Caixa/Banco// //"
            msg=msg+"Verificar com Suporte da Vise !"
            Mensagem(msg)
            return false     
    endif   

    if [Bxautc->Situacao]="EM ABERTO" and not PodeAtualizar()
       then
            return false
    endif   

    MSGDISPOSITIVO="Recibo Acerto"
		DispositivoI("RAF")
		If OK=""
		   Then
		        return false
    endif        

    if [Bxautc->Situacao]="EM ABERTO"
       then  
            if not Baixa()
               then return true
            endif   
    endif
            
    Do_It!
    ClearAll

    Play(regp_cxbco["Impressao_Recibo"])


    View "bxautc"
    Moveto [Numero do Lote]
    Locate nlote
    if RetVal
       Then 
            if [Valor_TCGerado]>0 and ([Tipo_TCGerado]="P" or [Tipo_TCGerado]="") 
               then
                    vl_docto    ="REC"
                    vl_numero   =[Numero do Lote]
                    vl_empresa  =regconta["Codigo da Empresa"]
                    vl_data     =[Data da Baixa]
                    Vl_Usuario  =[Codigo_Usuario] 
                    vl_referente="????"
                    
                    vl_referente="TENHO A RECEBER CREDITO CONCEDIDO REF. LOTE "+[Bxautc->Numero do Lote]+" * "+"ACERTO FINANCEIRO"
                    if [Tipo_TCGerado]=""
                        then vl_referente=vl_referente+", "+[Bxautc->Observacoes]
                    endif            
                        
                    vl_pessoa   =[Codigo]       
                    vl_valor    =[Valor_TCGerado]

                    vl_Origem   ="ACERTO"
                    vl_reimpressao=false
                    if [Situacao]="ATUALIZADO"
                       then vl_reimpressao=true
                    endif
                    
                    Play("RV_0000")
            endif
            
            if [Valor_TCGerado]>0 and [Tipo_TCGerado]="R" 
               then
                    vl_docto    ="PROM"
                    vl_numero   =[Numero do Lote]
                    vl_empresa  =regconta["Codigo da Empresa"]
                    vl_data     =[Data da Baixa]
                    vl_database =[Data Base   ]
                    Vl_Usuario  =[Codigo_Usuario] 
                    vl_referente=""
                    vl_pessoa   =[Codigo]       
                    vl_valor    =[Valor_TCGerado]

                    vl_Origem   ="ACERTO"
                    vl_reimpressao=false
                    if [Situacao]="ATUALIZADO"
                       then vl_reimpressao=true
                    endif
                    
                    Play("NP_0377")
            endif
            
    endif
    ClearAll
    
endswitch

Do_it!
ClearAll
LIMPAGUARDE()

Carrega_Tabelas()

return true
EndProc


;*******************************************************************************
;* Rotina para Gravacao/Leitura Pagto a Vista                                  *
;*******************************************************************************
Proc SincronizaDados_Baixa(Funcao_Registro)
Private Funcao_Registro, vrtit

Switch
  Case Funcao_Registro="Gravar":
       [Bx Valor do Recebimento   ] =  VSD_I_Vr_Pagto
       [Bx Valor do Desconto      ] =  VSD_I_Vr_Descto
       [Bx Valor do Juros         ] =  VSD_I_Vr_Juros
       [Bx Tipo da Baixa          ] =  VSD_I_TpBaixa
       AtualizaFormaBaixa()
       VSD_I_FmBaixa            =  [Bx Forma da Baixa         ]
       
  Case Funcao_Registro="Ler":
       VSD_I_SEQ                =  [Sequencia                 ]
       VSD_I_Vr_Pagto           =  [Bx Valor do Recebimento   ]
       VSD_I_Vr_Descto          =  [Bx Valor do Desconto      ]
       VSD_I_Vr_Juros           =  [Bx Valor do Juros         ]
       VSD_I_TpBaixa            =  [Bx Tipo da Baixa          ]
       VSD_I_FmBaixa            =  [Bx Forma da Baixa         ]
              
       VSD_I_Docto              =  [Codigo da Empresa]+" "+[Tipo do Documento]+"/"+[Numero do Documento]
       VSD_I_Emissao            =  [Data de Emissao           ]
       VSD_I_Vencto             =  [Data de Vencimento        ]
       VSD_I_TPG                =  [Tipo do Pagamento         ]
       VSD_I_NDias              =  [Bx NDias                  ]
       VSD_I_Pessoa             =  [Codigo]+" "+[Razao Social]
       VSD_I_Vr_Original        =  [Valor do Documento        ]
       VSD_I_Vr_Saldo           =  [Saldo do Documento        ]
       VSD_I_ObsBaixa           =  [Observacoes]
           
EndSwitch

EndProc  ; (SincronizaDados_Baixa)

;*******************************************************************************
;* Rotina de Digitacao Dados Titulos                                           *
;*******************************************************************************
Proc Baixa_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5

Temp      = True
TECLA     =""
MSG_CAMPO =""

If INICIO_DIALOG
   Then       
        If chavei=0
           Then Campo="I_TpBaixa"
        EndIf
        
        INICIO_DIALOG=False
EndIf
            
If Opcao_Ver Then Campo="I_Seq" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
       Case Opcao_Ver=True:
            Temp=False
            Switch
              Case Evento["KeyCode"] =  27:
                   CancelDialog
              OtherWise:

                Mover_Reg=True
                Switch
                  Case Evento["KeyCode"] = -71:
                       If AtFirst()
                          Then Mover_Reg=False Beep
                          Else Home
                       EndIf
                  Case Evento["KeyCode"] = -79:
                       If AtLast()
                          Then Mover_Reg=False Beep
                          Else End
                       EndIf
                  Case Evento["KeyCode"] = -73:
                       If AtFirst()
                          Then Mover_Reg=False Beep
                          Else Up
                       EndIf
                  Case Evento["KeyCode"] = -81:
                       If AtLast()
                          Then Mover_Reg=False Beep
                          Else Down
                       EndIf
                EndSwitch
                If Mover_Reg=True
                   Then ITEM=[Sequencia]
                        Inicia_Registro()
                EndIf
            EndSwitch
      Case Evento["KeyCode"] = 9:
           Temp=False
       Case Evento["KeyCode"] = -63:
            Temp=False
            Edita_Memo("Observacoes",16,02,07,74,"Observa‡”es")
            VSD_I_ObsBaixa           =  [Observacoes]
      Case Evento["KeyCode"] = 27: 
           Temp=False
           Switch
             Case Campo="I_TpBaixa"           : 
                  If QuerDesfazer("")
                     Then ;-- tem que desfazer ------
                          CopyFromArray Reg_Bxauti
                          SincronizaDados_Baixa("Ler")
                          CancelDialog
                          ;--------------------------
                  EndIf
             Case Campo="I_Vr_Pagto"           : Campo="I_TpBaixa"
             Case Campo="I_Vr_Juros"           : Campo="I_Vr_Pagto"
             Case Campo="I_Vr_Descto"          : Campo="I_Vr_Juros"
             Case Campo="I_Flag"               : Campo="I_TpBaixa"
           EndSwitch
      Case Evento["KeyCode"] = 13:  
           Temp=False
           If Checa_TAG()
              then
                   Switch
                     Case Campo="I_TpBaixa"           : Campo="I_Vr_Pagto"
                          VSD_I_TpBaixa=ControlValue("I_TpBaixa")
                          If IsBlank(VSD_I_TpBaixa)
                             Then VSD_I_TpBaixa="NORMAL"
                          EndIf
                          Switch
                            Case VSD_I_TpBaixa="DEVOLUCAO" Or
                                 VSD_I_TpBaixa="CANCELADO":
                              VSD_I_Vr_Juros =blanknum()
                              VSD_I_Vr_Descto=blanknum()
                                                    
                          EndSwitch            
                     Case Campo="I_Vr_Pagto"           : 
                          VSD_I_Vr_Pagto=ControlValue("I_Vr_Pagto")
                          If VSD_I_Vr_Pagto >0
                             Then 
                                  Switch
                                    Case VSD_I_TpBaixa="DEVOLUCAO" Or
                                         VSD_I_TpBaixa="CANCELADO":
                                    
                                      if VSD_I_Vr_Pagto<=[Saldo do Documento]
                                         then VSD_I_Vr_Juros =blanknum()
                                              VSD_I_Vr_Descto=blanknum()

                                              CalcDigita_Baixa()
                                              Campo="I_Flag"
                                         else 
                                              fastmsg("Valor inv lido, maior que o saldo !")
                                      endif
                                    
                                    otherwise             : Campo="I_Vr_Juros"
                                    
                                  EndSwitch 
                             else fastmsg("Valor inv lido !")
                          EndIf
                     Case Campo="I_Vr_Juros"           : 
                          VSD_I_Vr_Juros=ControlValue("I_Vr_Juros")
                          If IsBlank(VSD_I_Vr_Juros) or 
                             VSD_I_Vr_Juros>=0
                             Then 
                                  CalcDigita_Baixa()
                                  Campo="I_Vr_Descto"
                             else fastmsg("Valor inv lido !")
                          EndIf   
                     Case Campo="I_Vr_Descto"          :
                          VSD_I_Vr_Descto=ControlValue("I_Vr_Descto")
                          If isBlank(VSD_I_Vr_Descto) or VSD_I_Vr_Descto>=0
                             then 
                                  CalcDigita_Baixa()
                                  Campo="I_Flag"
                             else fastmsg("Valor inv lido !")
                          EndIf
        
                     Case Campo="I_Flag"          :
                          AcceptDialog
        
                   EndSwitch
           endif
   EndSwitch
EndIf

;-- sempre sincronizar ----------
SincronizaDados_Baixa("Gravar")
;--------------------------------

Switch
  Case Campo="I_TpBaixa"    : MSG_CAMPO="N=NORMAL  D=DEVOLUCAO  C=CANCELADO"
EndSwitch

If Opcao_Ver=True
   Then TECLA="Home/End/PgDn/PgUp=Paginar  "
EndIf
TECLA=TECLA+"F5=Obs  "

Monta_Prompt(MSG_CAMPO,TECLA)

Mouse Hide
Return TEMP
EndProc  ; (Baixa_Dialog)


;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc CalcDigita_Baixa()

[BX Saldo Residual         ]=[Saldo do Documento]-((VSD_I_Vr_Pagto-VSD_I_Vr_Juros)+VSD_I_Vr_Descto)

if [BX Saldo Residual     ]>0
  then [Bx Forma da Baixa ]="PARCIAL"
  else [Bx Forma da Baixa ]="TOTAL"
       [Bx Saldo Residual ]=0
endif
VSD_I_FmBaixa            =  [Bx Forma da Baixa         ]

endproc

;*******************************************************************************
;* Rotina para Lancamento Titulos                                              *
;*******************************************************************************
Proc Digita_Baixa()
private ntable, tit

ntable=table()

tit=""
if ntable="Bxautir" then tit="VrRecebimento" endif
if ntable="Bxautip" then tit="VrPagamento"   endif

VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]

Showdialog "Dados da Baixa [      ]" Proc "Baixa_Dialog"
  Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea",
        "HOME","END","PGDN","PGUP","F5","F4"
    @ 7,3 height 13 width 73
                                                                  
  Accept @ -01,40 Width 6 "A3" Tag "I_Seq" To VSD_I_SEQ

  Label  @ 00,00 "Tipo da Baixa" For "I_TpBaixa"
  Accept @ 01,01 Width 13 "A12" picture "NORMAL,DEVOLUCAO,CANCELADO" Tag "I_TpBaixa" to VSD_I_TpBaixa

  Label  @ 00,14 "VrRecebimento" For "I_Vr_Pagto"
  Accept @ 01,15 Width 13 "$" picture "#*#.[##]" Tag "I_Vr_Pagto" to VSD_I_Vr_Pagto

  Label  @ 00,28 "VrJuros/Multa" For "I_Vr_Juros"
  Accept @ 01,29 Width 13 "$" picture "#*#.[##]" Tag "I_Vr_Juros" to VSD_I_Vr_Juros

  Label  @ 00,42 "Vr Descto" For "I_Vr_Descto"
  Accept @ 01,43 Width 13 "$" picture "#*#.[##]" Tag "I_Vr_Descto" to VSD_I_Vr_Descto

  Label  @ 00,56 "Forma da Baixa" For "I_FmBaixa"
  Accept @ 01,57 Width 11 "A8" picture "!*!" Tag "I_FmBaixa" to VSD_I_FmBaixa

  Accept @ 01,67 Width 1 "A1" picture "!" Tag "I_Flag" to VSD_I_Flag


  Label  @ 03,00 "Documento" For "I_Docto"
  Accept @ 04,01 Width 27 "A20" picture "!*!" Tag "I_Docto" to VSD_I_Docto

  Label  @ 03,28 "EmissÆo" For "I_Emissao"
  Accept @ 04,29 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_Emissao" to VSD_I_Emissao

  Label  @ 03,42 "Vencto" For "I_Vencto"
  Accept @ 04,43 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_Vencto" to VSD_I_Vencto 

  Label  @ 03,56 "TPG" For "I_TPG"
  Accept @ 04,57 Width 04 "A2" picture "!*!" Tag "I_TPG" to VSD_I_TPG

  Label  @ 03,61 "N§ Dias" For "I_NDias"
  Accept @ 04,62 Width 08 "N" picture "#*#" Tag "I_NDias" to VSD_I_NDias

  Label  @ 05,00 "Pessoa" For "I_Pessoa"
  Accept @ 06,01 Width 41 "A50" picture "!*!" Tag "I_Pessoa" to VSD_I_Pessoa

  Label  @ 05,42 "Vr Original" For "I_Vr_Original"
  Accept @ 06,43 Width 13 "$" picture "#*#.[##]" Tag "I_Vr_Original" to VSD_I_Vr_Original

  Label  @ 05,56 "Saldo T¡tulo" For "I_Vr_Saldo"
  Accept @ 06,57 Width 13 "$" picture "#*#.[##]" Tag "I_Vr_Saldo" to VSD_I_Vr_Saldo

  @ 07,57 ?? "Saldo Residual"
  @ 08,57 ?? Format("W12.2,EIC",[BX Saldo Residual]) 

  PaintCanvas Attribute  47 08, 57, 08, 69

  Label  @ 09,00 "Observa‡äes.." For "I_ObsBaixa"
  Accept @ 10,01 Width 69 "A70" picture "!*!" Tag "I_ObsBaixa" to VSD_I_ObsBaixa

Enddialog
if retval
   then SincronizaDados_Baixa("Gravar")
        UnLockRecord
endif

moveto ntable

Mouse Show
EndProc  ; (Digita_Baixa)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()

INICIO_DIALOG=True
Moveto [Sequencia]
Locate NLANC,ITEM
CopyToArray Reg_Bxauti 

SincronizaDados_Baixa("Ler")
EndProc ; (Inicia_Registro)


;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()

if [Tipo do Pagamento]="TC"       
   then mensagem("T¡tulo de Credito nÆo pode ser alterado !")
        unlockrecord
        return
endif   

Inicia_Registro()
Digita_Baixa()  
If RecordStatus("Locked") Then UnLockRecord EndIf
EndProc

;*******************************************************************************
;* Rotina p/ Selecionar e Ordenar Registros                                    *
;*******************************************************************************
Proc SELECIONA(tipo)
private seq

switch
  case tipo="TR": {Ask} {\\Sistemas\\Ctarec\\Duplic}  Check
  case tipo="TP": {Ask} {\\Sistemas\\Ctapag\\Titulos} Check
endswitch

Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo da Conta        ] TypeIn "~VSDGCONTA.."
switch
  case tipo="TR": Moveto [Codigo do Destinatario ] TypeIn "~VSDGDESTINAT.., as Codigo"
                  Moveto [Tipo do Lancamento     ] TypeIn "Not A"
  
  case tipo="TP": Moveto [Codigo do Emitente     ] TypeIn "~VSDGDESTINAT.., as Codigo"

endswitch
Moveto [Tipo do Pagamento      ] TypeIn "~VSDGTPPAGTO.."    
If VSDGTPDATA="1"
   Then Moveto [Data de Emissao       ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
   Else Moveto [Data de Vencimento    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
EndIf                                             
Moveto [Saldo do Documento     ] TypeIn "> 0.01 "
Do_It!
ClearAll

If IsEmpty("Answer")=False
   Then 
        If VSDGTPDATA="1"
           Then Sort "Answer" On "Codigo","Data de Emissao","Tipo do Documento","Numero do Documento"
           Else Sort "Answer" On "Codigo","Data de Vencimento","Tipo do Documento","Numero do Documento"
        EndIf

        seq=0
        View "bxautc"
        View "bxautt"
        View "Answer"
        CoeditKey
        
        Moveto "bxautc"
        Moveto [Numero do Lote]
        Locate nlote
        if RetVal
           Then islockrecord()

                moveto "answer"
                scan
                  seq=seq+1
                
                  moveto "bxautt"
                  End
                  Down
                  [Numero do Lote        ]=NLANC
                  [Sequencia             ]=seq
                  [Numero do Lancamento  ]=[Answer->Numero do Lancamento  ]
                  [Codigo da Empresa     ]=[Answer->Codigo da Empresa     ]
                  [Codigo do Documento   ]=[Answer->Codigo do Documento   ]
                  [Tipo do Documento     ]=[Answer->Tipo do Documento     ]
                  [Numero do Documento   ]=[Answer->Numero do Documento   ]
                  [Data de Emissao       ]=[Answer->Data de Emissao       ]
                  [Data de Vencimento    ]=[Answer->Data de Vencimento    ]
                  [Codigo                ]=[Answer->Codigo                ]
                  [Razao Social          ]=[Answer->Razao Social          ]
                  [Tipo do Pagamento     ]=[Answer->Tipo do Pagamento     ]
        
                  [Valor do Documento    ]=[Answer->Valor do Documento    ]
                  [Saldo do Documento    ]=[Answer->Saldo do Documento    ]
                  
                  [Data Limite Desconto  ]=[Answer->Data Limite Desconto  ]
                  [Valor do Desconto     ]=[Answer->Valor do Desconto     ]
                 
                  [Multa                 ]=[Answer->Multa                 ]
                  
                  [Taxa de Juros         ]=[bxautc->Taxa de Juros         ]
                  [Tipo Taxa de Juros    ]=[bxautc->Tipo Taxa de Juros    ]
                  [NDias Taxa de Juros   ]=[bxautc->NDias Taxa de Juros   ]
                  [Valor de Juros        ]=blanknum()
                  
                  [Bx Tipo da Baixa      ]="NORMAL"

                  if [Tipo do Pagamento]="TC"
                     then [Data Limite Desconto  ]=blankdate()
                          [Valor do Desconto     ]=blanknum()
                          
                          [Multa                 ]=blanknum()
                          
                          [Tipo Taxa de Juros    ]=""
                          [Taxa de Juros         ]=blanknum()
                          [NDias Taxa de Juros   ]=blanknum()
                          [Valor de Juros        ]=blanknum()
                  endif          
        
                  UnLockRecord
                   
                  moveto "answer"
                endscan

        endif
EndIf
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_CONTA"         : Campo="TG_EMPRESA"
            Case Campo="TG_TPPAGTO"       : Campo="TG_CONTA"
            Case Campo="TG_TPDATA"        : Campo="TG_TPPAGTO"
            Case Campo="TG_DTINI"         : Campo="TG_TPDATA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="YES" Or        
                 Campo="NO"               : Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"    : Campo="TG_CONTA"
                    Case Campo="TG_CONTA"      : Campo="TG_TPPAGTO"
                    Case Campo="TG_TPPAGTO"    : Campo="TG_TPDATA"
                    Case Campo="TG_TPDATA"     :
                      VSDGTPDATA=ControlValue("TG_TPDATA")
                      If IsBlank(VSDGTPDATA)
                         Then VSDGTPDATA="1"
                      EndIf
                      If VSDGTPDATA="1"
                         Then VSDGNOMTPDATA="EMISSAO"
                         Else VSDGNOMTPDATA="VENCIMENTO"
                      EndIf
                      Campo="TG_DTINI"
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf     
                                                
Switch
  Case Campo="TG_TPDATA"  : MSG_CAMPO="1 = EMISSAO  2=VENCIMENTO"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)

Return Temp
EndProc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc Selecao()
private ntable, titexiste, reg_bxautt, listavazia

Echo Off

ntable      =table()

nlote       =[Bxautc->Numero do Lote]
VSDGDESTINAT=[Bxautc->Codigo        ]
VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]

;-- deleta answer linked e temporaria, bxautt ‚ uma tabela linked temporaria nÆo fica dados gravados
Moveto "bxautt"
While RecordStatus("New")=False
  del
EndWhile
Do_It!

Moveto ntable

While True
  ShowDialog "Filtrar T¡tutos" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 15 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 "Conta"  For "TG_CONTA"
    Accept @ 03,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA" To VSDGCONTA
    Accept @ 03,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMCONT" To VSDGNOMCONTA

    Label  @ 04,00 "Tipo de Pagamento"  For "TG_TPPAGTO"
    Accept @ 05,03 Width 05 "A2"  Picture "!*!" Tag "TG_TPPAGTO"    To VSDGTPPAGTO
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPPG"    To VSDGNOMTPPAGTO

    Label  @ 06,00 "Op‡äes de Datas" For "TG_TPDATA"
    Accept @ 07,04 Width 04 "A1"  Picture "1,2"  Tag "TG_TPDATA"     To VSDGTPDATA
    Accept @ 07,09 Width 25 "A18" Picture "!*!"  Tag "TG_NOMOTPDATA" To VSDGNOMTPDATA

    Label  @ 08,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 09,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 09,16 "at‚" For "TG_DTFIM"
    Accept @ 09,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If VSDGDTFIM=BlankDate()
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf

  AGUARDE("Aguarde, selecionando t¡tulos")
  switch
    case ntable="Bxautir": SELECIONA("TR") 
    case ntable="Bxautip": SELECIONA("TP") 
  endswitch
  
  Echo Off

  quitloop
EndWhile

ClearAll

Carrega_Tabelas()
Moveto "bxautc"
PickForm "F"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   Then islockrecord()

endif

Moveto ntable
listavazia=recordstatus("New")

Moveto "bxautt"
if recordstatus("New")=false
   then 
        scan
          copytoarray reg_bxautt
        
          titexiste=false
          moveto ntable

          if not listavazia
             then 
                  scan
                    if [numero do lancamento]=reg_bxautt["numero do lancamento"]
                       then titexiste=true
                            quitloop
                    endif        
                  endscan
          endif
          
          if not titexiste
             then
                  end
                  down
        
                  ITEM=ITEM+1
                  copyfromarray reg_bxautt
                  [Sequencia]=ITEM
                  AtualizaValores()           
                  unlockrecord
          endif
        
          Moveto "bxautt"
        endscan
   
        Moveto "bxautt"
        While RecordStatus("New")=False
          del
        EndWhile
        
endif
Moveto ntable   

LimpAguarde()
EndProc ; 

;------- Justificativa Baixa ---------------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc JB_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, temp  
Temp      = True
TECLA     = ""
MSG_CAMPO = ""

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_JUST"          : CancelDialog
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_JUST"        : 
                         VSDGJUST=ControlValue("TG_JUST")
                         AcceptDialog
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Switch
  Case Campo="TG_JUST" :  MSG_CAMPO="Informe a Justificativa"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc     ;  (JC_Dialog)

;*******************************************************************************
;* Show Dialog JC_Digita                                                       *
;*******************************************************************************
Proc JB_Digita(Tipo)
Private TabAnt, CampoAnt, Tipo

LimpAguarde()
MSGCAMPO=""
VSDGJUST=""

ShowDialog "Justificativa "+Tipo Proc "JB_Dialog"
Trigger "OPEN","ARRIVE"
Key "ENTER","ESC"
@ 10,08   Height 04 Width 75

  Label  @ 00,00 "Observa‡Æo " For "TG_JUST"
  Accept @ 01,01 Width 71 "A255"  Picture "!*!" Tag "TG_JUST" To VSDGJUST  
  
EndDialog
If Retval 
   Then Return True
   else Return False
EndIf 

EndProc    ;  (JB_Digita)

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc TIPOBAIXA()

If RecordStatus("New")
  Then Mensagem("N„o h  lan‡amentos a serem processados !")
       Return 
EndIf

Echo Normal
Echo Off
ShowPopup " Tipo da Baixa " CENTERED
 "~N~ORMAL      ": " Baixa Normal                     " :"NORMAL",
 "~D~EVOLU€¶O   ": " Baixa por Devolu‡Æo              " :"DEVOLUCAO",
 "~C~ANCELADO   ": " Baixa por Cancelamento           " :"CANCELADO"
EndMenu
To MenuVar
Echo Off

If MenuVar="Esc"
   Then return
EndIf

if MenuVar="DEVOLUCAO" or
   MenuVar="CANCELADO"
   then
        If not JB_Digita(MenuVar)
           then return
        endif   
endif   

VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]

scan

  if [Tipo do Pagamento]="TC"       
     then loop
  endif   

  [Bx Tipo da Baixa]=MenuVar
  
  if [Bx Tipo da Baixa ]="DEVOLUCAO" or
     [Bx Tipo da Baixa ]="CANCELADO"
     then [Observacoes     ]=VSDGJUST
  endif   
  
  AtualizaValores()
  unlockrecord

endscan
                                         
EndProc ;TIPOBAIXA()

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc AtualizaValores()
private VRJUROS, VRDESCT, TXM, TXJ, NDA, vrtit,
        INDICE, AUX_VALOR, AUX_NDIAS, ntable, 
        VENCTO, NDIAS

ntable=table()

;-- calculando novos valores ----------------------------------------
VRJUROS=blanknum() 
VRDESCT=blanknum()
NDA    =0

switch
  case ntable="Bxautir" Or ntable="Bxautip":  
    if [BX Tipo da Baixa]="NORMAL" And [Tipo do Pagamento]<>"TC"
       then 
            Switch
              Case sys_Codigo_Cliente="0377" : ;Pralum
    
                NDA      =VSDGDTBASE-[Data de Vencimento]
                AUX_NDIAS=NDA
    
                if AUX_NDIAS>0
                   then TXM=[Multa]
    
                        INDICE    = ndecimal( ( 100 -  ( AUX_NDIAS * [Taxa de Juros] ) /[NDias Taxa de Juros]  ) , 3 ) /100
                        AUX_VALOR = ndecimal(([Saldo do Documento] / INDICE),2) - [Saldo do Documento]
                        VRJUROS   = AUX_VALOR
                endif   
    
                if AUX_NDIAS<0
                   then TXM=0        
                        AUX_NDIAS=NDA*-1 
    
                        INDICE    = ndecimal( ( 100 -  ( AUX_NDIAS * [Taxa de Juros] ) /[NDias Taxa de Juros]  ) , 3 ) /100
                        AUX_VALOR = ndecimal(([Saldo do Documento] * INDICE),2) - [Saldo do Documento]
                        VRDESCT   = AUX_VALOR *-1
    
                endif   
            
              OtherWise: ;PadrÆo
                If [Data de Vencimento]<VSDGDTBASE
                  Then NDA=VSDGDTBASE-[Data de Vencimento]
                       TXM=[Multa]
                  Else NDA=0
                       TXM=0
                EndIf
                
                If [Data Limite Desconto]>=VSDGDTBASE
                  Then VRDESCT=[Valor do Desconto]
                EndIf
                
                If [Taxa de Juros]>0
                  Then TXJ=([Taxa de Juros]/[NDias Taxa de Juros])*NDA
                       VRJUROS=Round((([Saldo do Documento]*TXJ)/100)+([Saldo do Documento]*TXM/100),2)
                  Else VRJUROS=Round((([Valor de Juros]/[NDias Taxa de Juros])*NDA),2)
                       VRJUROS=VRJUROS+Round((([Saldo do Documento]*TXM)/100),2)
                EndIf
              
            endSwitch
    EndIf
    
    [Bx NDias               ]=NDA
    [Bx Valor do Recebimento]=([Saldo do Documento]+VRJUROS)-VRDESCT
    [Bx Valor do Juros      ]=VRJUROS
    [Bx Valor do Desconto   ]=VRDESCT
    [Bx Valor Juros_Desconto]=VRJUROS+(VRDESCT*-1)
    AtualizaFormaBaixa()

  case ntable="Bxautie" Or ntable="Bxautis":  

    Switch
      Case sys_Codigo_Cliente="0377" : ;Pralum
     
        VENCTO=[Data Vencimento]

        NDIAS = 0 
        If PARAM_UTILIZA_FERIADO="S" And PARAM_SABDOM_VENCTO="S" 
           Then GetRecord "\\Sistemas\\Cadastro\\Feriados" VENCTO To REG_FERIADO
                If Retval
                   Then If REG_FERIADO["Dias a Receber"] > 0
                           Then NDIAS = REG_FERIADO["Dias a Receber"]
                                VENCTO = VENCTO + NDIAS
                        EndIf   
                EndIf
        endif
        If NDIAS = 0
           Then If PARAM_SABDOM_VENCTO="S" 
                   Then If Dow(VENCTO)="Sat"
                           Then NDIAS = NDIAS + 2
                           Else If Dow(VENCTO)="Sun"
                                   Then NDIAS = NDIAS + 1
                                EndIf
                        EndIf         
                        VENCTO = VENCTO + NDIAS
                EndIf
        EndIf
        
        NDA      =VSDGDTBASE-VENCTO           
        AUX_NDIAS=NDA

        if AUX_NDIAS>0
           then TXM=0      

                INDICE    = ndecimal( ( 100 -  ( AUX_NDIAS * [Taxa de Juros] ) /[NDias Taxa de Juros]  ) , 3 ) /100
                AUX_VALOR = ndecimal(([Valor             ] / INDICE),2) - [Valor             ]
                VRJUROS   = AUX_VALOR
        endif   

        if AUX_NDIAS<0
           then TXM=0        
                AUX_NDIAS=NDA*-1 

                INDICE    = ndecimal( ( 100 -  ( AUX_NDIAS * [Taxa de Juros] ) /[NDias Taxa de Juros]  ) , 3 ) /100
                AUX_VALOR = ndecimal(([Valor             ] * INDICE),2) - [Valor             ]
                VRDESCT   = AUX_VALOR *-1

        endif   
    
      OtherWise: ;PadrÆo
        If [Data Vencimento]<VSDGDTBASE
          Then NDA=VSDGDTBASE-[Data Vencimento]
               TXM=0
          Else NDA=0
               TXM=0
        EndIf
        
        If [Taxa de Juros]>0
          Then TXJ=([Taxa de Juros]/[NDias Taxa de Juros])*NDA
               VRJUROS=Round((([Valor             ]*TXJ)/100)+([Valor             ]*TXM/100),2)
        EndIf
      
    endSwitch
    
    [Bx NDias               ]=NDA
    [Bx Valor do Recebimento]=([Valor             ]+VRJUROS)-VRDESCT
    [Bx Valor do Juros      ]=VRJUROS
    [Bx Valor do Desconto   ]=VRDESCT
    [Bx Valor Juros_Desconto]=VRJUROS+(VRDESCT*-1)

endswitch

moveto ntable
EndProc ;AtualizaValores()

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc AtualizaFormaBaixa()
private vrtit

switch
 case [BX Tipo da Baixa]="NORMAL"   :
   [BX Valor Juros_Desconto]=[Bx Valor do Juros]+([Bx Valor do Desconto]*-1)
   
 case [BX Tipo da Baixa]="CANCELADO" or
      [BX Tipo da Baixa]="DEVOLUCAO":
   [Bx Valor do Juros      ]=blanknum()
   [Bx Valor do Desconto   ]=blanknum()
   [BX Valor Juros_Desconto]=blanknum()
  
endswitch

[BX Saldo Residual         ]=[Saldo do Documento]-(([BX Valor do Recebimento]-[Bx Valor do Juros])+[Bx Valor do Desconto])

if [BX Saldo Residual     ]>0
  then [Bx Forma da Baixa ]="PARCIAL"
  else [Bx Forma da Baixa ]="TOTAL"
       [Bx Saldo Residual ]=0
endif

if [Bx Valor do Juros      ]=0 then [Bx Valor do Juros      ]=blanknum() endif
if [Bx Valor do Desconto   ]=0 then [Bx Valor do Desconto   ]=blanknum() endif
if [Bx Valor Juros_Desconto]=0 then [Bx Valor Juros_Desconto]=blanknum() endif

EndProc ;AtualizaFormaBaixa()

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc SomaItens()
private vrsoma1, vrsoma2, ndias, vr1, 
        M_DIAREF,M_DIAREFI, M_DIAREFD,
        siVRTOTREC, siVRTOTTIT, siVRTOTJD, siDTMEDIA, siVCITENS,
        ntable

Aguarde("Somando itens")
echo off

ntable=table()

VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]

vrsoma1=0 
vrsoma2=0

siVRTOTREC =blanknum()
siVRTOTTIT =blanknum()
siVRTOTJD  =blanknum()
siDTMEDIA  =blankdate() 
siVCITENS  =0

scan

  switch
    case table()="Bxautir" or table()="Bxautip":
      if not isblank([Data de Vencimento])
         then
              siVRTOTTIT =siVRTOTTIT +[Saldo do Documento     ]
              if [Bx Tipo da Baixa]="NORMAL"
                 then siVRTOTREC =siVRTOTREC +[Bx Valor do Recebimento]
              endif   
              siVRTOTJD  =siVRTOTJD  +[Bx Valor Juros_Desconto]
            
              if not isblank([Data de Vencimento])
                 then siVCITENS  =siVCITENS  +1
              endif   
            
              ndias=[Data de Vencimento]-VSDGDTBASE
              If ndias=0
                 Then vr1=[Saldo do Documento]        
                 Else vr1=[Saldo do Documento]*ndias 
              EndIf
            
              vrsoma1=vrsoma1+vr1
              vrsoma2=vrsoma2+[Saldo do Documento]
      endif

    case table()="Bxautie" or table()="Bxautis":
      if not isblank([Data Vencimento])
         then
              siVRTOTTIT =siVRTOTTIT +[Valor                  ]
              siVRTOTREC =siVRTOTREC +[Bx Valor do Recebimento]
              siVRTOTJD  =siVRTOTJD  +[Bx Valor Juros_Desconto]
            
              if not isblank([Data Vencimento])
                 then siVCITENS  =siVCITENS  +1
              endif   
            
              ndias=[Data Vencimento]-VSDGDTBASE
              If ndias=0
                 Then vr1=[Valor             ]        
                 Else vr1=[Valor             ]*ndias 
              EndIf
            
              vrsoma1=vrsoma1+vr1
              vrsoma2=vrsoma2+[Valor             ]
      endif

    case table()="Bxautice":
      if not isblank([Codigo da Conta])
         then
              siVRTOTTIT =siVRTOTTIT +[Valor                  ]
              siVCITENS  =siVCITENS  +1
      endif      
  endswitch
  
endscan

M_DIAREF     = Round( ( vrsoma1 / vrsoma2 ), 3 )
M_DIAREFI    = Int( M_DIAREF )
M_DIAREFD    = M_DIAREF - M_DIAREFI
If M_DIAREFD > 0.51
   Then M_DIAREFI = M_DIAREFI + 1
EndIf

If VSDGDTBAIXA<>BlankDate()
   Then siDTMEDIA=VSDGDTBASE+M_DIAREFI
   Else siDTMEDIA=M_DIAREFI
EndIf   

Switch
  Case table()="Bxautir":  
    VRTOTREC_R = siVRTOTREC    
    VRTOTTIT_R = siVRTOTTIT    
    VRTOTJD_R  = siVRTOTJD     
    DTMEDIA_R  = siDTMEDIA      
    VCITENS_R  = siVCITENS     

  Case table()="Bxautip":
    VRTOTREC_P = siVRTOTREC    
    VRTOTTIT_P = siVRTOTTIT    
    VRTOTJD_P  = siVRTOTJD     
    DTMEDIA_P  = siDTMEDIA      
    VCITENS_P  = siVCITENS     
    
  case table()="Bxautie":
    VRTOTREC_ECH = siVRTOTREC    
    VRTOTTIT_ECH = siVRTOTTIT    
    VRTOTJD_ECH  = siVRTOTJD     
    DTMEDIA_ECH  = siDTMEDIA      
    VCITENS_ECH  = siVCITENS     
    
  case table()="Bxautis":
    VRTOTREC_SCH = siVRTOTREC    
    VRTOTTIT_SCH = siVRTOTTIT    
    VRTOTJD_SCH  = siVRTOTJD     
    DTMEDIA_SCH  = siDTMEDIA      
    VCITENS_SCH  = siVCITENS     
    
  case table()="Bxautice":
    VRTOT_CE     = siVRTOTTIT    
    VCITENS_CE   = siVCITENS     
    
endswitch

Moveto "Bxautt"  SetaCorRegistro("Invisivel") 
Moveto "Bxautts" SetaCorRegistro("Invisivel") 

moveto ntable

echo Normal
echo off

LimpAguarde()
EndProc ;SomaItens()


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc AtualizaValoresAcerto()

[Total_Receber         ]=VRTOTREC_R
[Total_Pagar           ]=VRTOTREC_P
[Valor_Diferenca1      ]=[Total_Receber]-[Total_Pagar  ]

[Data_Media_Receber    ]=DTMEDIA_R
[Data_Media_Pagar      ]=DTMEDIA_P

[NDias_Receber         ]=DTMEDIA_R-[Bxautc->Data da Baixa]
[NDias_Pagar           ]=DTMEDIA_P-[Bxautc->Data da Baixa]

[Total_Cheque_Recebido ]=VRTOTREC_ECH
[Total_Cheque_Utilizado]=VRTOTREC_SCH
[Total_Cheque_Emitido  ]=VRTOT_CE            

[Data_Media_CHRecebido ]=DTMEDIA_ECH
[Data_Media_CHUtilizado]=DTMEDIA_SCH

[NDias_CHRecebido      ]=DTMEDIA_ECH-[Bxautc->Data da Baixa]
[NDias_CHUtilizado     ]=DTMEDIA_sch-[Bxautc->Data da Baixa]

EndProc ;AtualizaValoresAcerto()

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc AtualizaSaldoAcerto()
private vrdf1, vrdf2, vrsdac
                     
[Valor_Diferenca2]=( [Valor_Diferenca1]-
                    ([Total_Cheque_Recebido]+[OutrosValores_Recebido]) )+
                    ([Total_Cheque_Utilizado]+[Total_Cheque_Emitido]+[OutrosValores_Pago])
vr=[Valor_Diferenca2]+[Valor_Troco]

if vr>0
   then [Tipo_TCGerado]="R" 
   else
        if vr<0
           then [Tipo_TCGerado]="P"
           else [Tipo_TCGerado]=""
                [Valor_Diferenca2]=0     
        endif
endif
switch
  case [Tipo_TCGerado]="R" : MSGFORM_TCGERADO="<= · RECEBER"
  case [Tipo_TCGerado]="P" : MSGFORM_TCGERADO="<= · PAGAR"
  
  case [Tipo_TCGerado]="" and
       [Valor_TCGerado]>0  : MSGFORM_TCGERADO="<= · PAGAR"

  otherwise                : MSGFORM_TCGERADO=""
endswitch

[SaldoAcerto]=[Valor_Diferenca2]+[Valor_Troco]

switch
  case [Tipo_TCGerado]="R" : [SaldoAcerto]=[SaldoAcerto]-[Valor_TCGerado]
  case [Tipo_TCGerado]="P" : [SaldoAcerto]=[SaldoAcerto]+[Valor_TCGerado] 
endswitch

if [SaldoAcerto]>0
   then MSGFORM_SALDOACERTO="<= · RECEBER" 
   else
        if [SaldoAcerto]<0
           then MSGFORM_SALDOACERTO="<= · PAGAR"
           else MSGFORM_SALDOACERTO="Ok !"
                [SaldoAcerto]=0     
        endif
endif



if [Valor_Troco]=0  then [Valor_Troco]=blanknum() endif   

MSGFORM_DIF1=".........."
if [Valor_Diferenca1]>0 then MSGFORM_DIF1="A RECEBER." endif
if [Valor_Diferenca1]<0 then MSGFORM_DIF1="A PAGAR..." endif

MSGFORM_DIF2=".........."
if [Valor_Diferenca2]>0 then MSGFORM_DIF2="A RECEBER." endif
if [Valor_Diferenca2]<0 then MSGFORM_DIF2="A PAGAR..." endif


EndProc ;AtualizaSaldoAcerto()


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc Recalcular()

Aguarde("Recalculando Acerto")

VSDGDTBASE =[Bxautc->Data Base      ]

Moveto "Bxautir"
scan for not isblank([Data de Vencimento])

  if [Bx Tipo da Baixa      ]<>"NORMAL" or [Tipo do Pagamento]="TC"
     then 
          [Tipo Taxa de Juros    ]=""
          [Taxa de Juros         ]=blanknum()
          [NDias Taxa de Juros   ]=blanknum()
          [Valor de Juros        ]=blanknum()
  endif

  if [Bx Tipo da Baixa      ]="NORMAL" and [Tipo do Pagamento]<>"TC" and
     [bxautc->TipoAplicacaoDeJuros]="I"
     then [Taxa de Juros         ]=[bxautc->Taxa de Juros         ]
          [Tipo Taxa de Juros    ]=[bxautc->Tipo Taxa de Juros    ]
          [NDias Taxa de Juros   ]=[bxautc->NDias Taxa de Juros   ]
  endif    

  AtualizaValores()
endscan
SomaItens()

Moveto "Bxautip"
scan for not isblank([Data de Vencimento])
  if [Bx Tipo da Baixa      ]<>"NORMAL" or [Tipo do Pagamento]="TC"
     then 
          [Tipo Taxa de Juros    ]=""
          [Taxa de Juros         ]=blanknum()
          [NDias Taxa de Juros   ]=blanknum()
          [Valor de Juros        ]=blanknum()
  endif

  if [Bx Tipo da Baixa      ]="NORMAL" and [Tipo do Pagamento]<>"TC" and
     [bxautc->TipoAplicacaoDeJuros]="I"
     then [Taxa de Juros         ]=[bxautc->Taxa de Juros         ]
          [Tipo Taxa de Juros    ]=[bxautc->Tipo Taxa de Juros    ]
          [NDias Taxa de Juros   ]=[bxautc->NDias Taxa de Juros   ]
  endif    

  AtualizaValores()
endscan
SomaItens()

Moveto "Bxautie"
scan for not isblank([Data Vencimento])

  if [bxautc->TipoAplicacaoDeJuros]="I"
     then
          [Taxa de Juros         ]=[bxautc->Taxa de Juros         ]
          [Tipo Taxa de Juros    ]=[bxautc->Tipo Taxa de Juros    ]
          [NDias Taxa de Juros   ]=[bxautc->NDias Taxa de Juros   ]
  endif

  AtualizaValores()
endscan
SomaItens()

Moveto "Bxautis" 
scan for not isblank([Data Vencimento])

  if [bxautc->TipoAplicacaoDeJuros]="I"
     then
          [Taxa de Juros         ]=[bxautc->Taxa de Juros         ]
          [Tipo Taxa de Juros    ]=[bxautc->Tipo Taxa de Juros    ]
          [NDias Taxa de Juros   ]=[bxautc->NDias Taxa de Juros   ]
  endif

  AtualizaValores()
endscan
SomaItens()

Moveto "Bxautice" 
SomaItens()

Moveto "BXautC"
AtualizaValoresAcerto()
AtualizaSaldoAcerto()

Mensagem("Recalculo do acerto efetuado automaticamente !")
endproc

;*******************************************************************************
;* Exclusao dos itens                                                          *
;*******************************************************************************
Proc EXCLUSAO()

Moveto "BXautC"
if [Situacao]="ATUALIZADO"
   then
        Mensagem("Este lote j  foi atualizado !")
        return
endif

Moveto "Bxautt"
While RecordStatus("New")=False
  del
EndWhile

Moveto "Bxautir"
While RecordStatus("New")=False
  del
EndWhile

Moveto "Bxautip"
While RecordStatus("New")=False
  del
EndWhile

Moveto "Bxautie"
While RecordStatus("New")=False
  del
EndWhile

Moveto "Bxautis"
While RecordStatus("New")=False
  del
EndWhile

Moveto "Bxautice"
While RecordStatus("New")=False
  del
EndWhile

Moveto "BXautC"
If RecordStatus("Locked") Then UnLockRecord EndIf
Del
EndProc  ; (Exclusao)


;*******************************************************************************
;* Rotina para zerar variaveis somatorias do form                              *
;*******************************************************************************
Proc LimpaVariaveis()
private tipo

;-- Variaveis usadas para totalizar no form ------------------------------------

VRTOTREC_R =blanknum()
VRTOTTIT_R =blanknum()
VRTOTJD_R  =blanknum()
DTMEDIA_R  =blankdate() 
VCITENS_R  =blanknum()

VRTOTREC_P =blanknum()
VRTOTTIT_P =blanknum()
VRTOTJD_P  =blanknum()
DTMEDIA_P  =blankdate() 
VCITENS_P  =blanknum()

VRTOTREC_ECH =blanknum()
VRTOTTIT_ECH =blanknum()
VRTOTJD_ECH  =blanknum()
DTMEDIA_ECH  =blankdate() 
VCITENS_ECH  =blanknum()

VRTOTREC_SCH =blanknum()
VRTOTTIT_SCH =blanknum()
VRTOTJD_SCH  =blanknum()
DTMEDIA_SCH  =blankdate() 
VCITENS_SCH  =blanknum()

VRTOT_CE     =blanknum()
VCITENS_CE   =blanknum()

MSGFORM_SALDOACERTO=""
MSGFORM_TCGERADO   =""

;-------------------------------------------------------------------------------

EndProc  ; (LimpaVariaveis)


;*******************************************************************************
;* Rotina para controlar Edicao do registro cabeca                             *
;*******************************************************************************
Proc Controla_EdicaoC()

VSDGEMPRESA   ="" VSDGNOMEMP     =""
VSDGCONTA     ="" VSDGNOMCONTA   =""
VSDGTPPAGTO   ="" VSDGNOMTPPAGTO =""
VSDGTPDATA    ="" VSDGNOMTPDATA  =""
VSDGDTINI     =BlankDate()
VSDGDTFIM     =BlankDate()


CopytoArray regbxautc
If CHAVEC=0
   then CopytoArray regbxautc_temp  ; variavel pra controla altera‡Æo de dados, recalcular()
   else Release vars regbxautc_temp ; variavel pra controla altera‡Æo do dados, recalcular()
endif   

DIGITAC=True
COPIOU_REGISTRO=False
While DIGITAC
  Tecla_Funcao=BlankNum()
  MSGCAMPO   =""
  MSGJUROS   =""

  DIGITAC()
  If CHAVEC=9
     Then QuitLoop
  EndIf
  If CHAVEC=1
     Then Controle_Dia()
          [Situacao]="EM ABERTO"
  EndIf
  SetaCorRegistro("Padrao")

  if not checaparametros()
     then if CHAVEC=1
             then loop
             else quitloop
          endif   
  endif
  
  Tecla_Funcao=-116
  While Not IsBlank(Tecla_Funcao)

    Switch
      Case Tecla_Funcao=-116:
           Switch
             Case Table()="Bxautc"                       : Tecla_Funcao="TITR"
						 Case Table()="Bxautir"                      : Tecla_Funcao="TITP"
             Case Table()="Bxautip"                      : Tecla_Funcao="CHENTR"
             Case Table()="Bxautie"                      : Tecla_Funcao="CHUTIL"
             Case Table()="Bxautis"                      : Tecla_Funcao="EMITCH"
             Case Table()="Bxautice"                     : Tecla_Funcao="TOT"
             OtherWise                                   : Tecla_Funcao=""
           EndSwitch
			Case Tecla_Funcao=-115:
           Switch
						 Case Table()="Bxautir"                      : Tecla_Funcao="TOT"
             Case Table()="Bxautip"                      : Tecla_Funcao="TITR"
             Case Table()="Bxautie"                      : Tecla_Funcao="TITP"
             Case Table()="Bxautis"                      : Tecla_Funcao="CHENTR"
             Case Table()="Bxautice"                     : Tecla_Funcao="CHUTIL" 
             Case Table()="Bxautc"                       : Tecla_Funcao="EMITCH" 
             OtherWise                                   : Tecla_Funcao=""
           EndSwitch  
    EndSwitch
    
    Switch
      Case Tecla_Funcao="TOT"  :
           DIGITAT()

      Case Tecla_Funcao="TITR" :  
           Moveto "Bxautc"
           
           Moveto "Bxautir"
           While True
             chavei()
             If chavei=9 Or chavei=99
                Then QuitLoop
             EndIf
           EndWhile
           
      Case Tecla_Funcao="TITP" :  
           Moveto "Bxautc"
           Moveto [Pag2]
           
           Moveto "BxautiP"
           While True
             chavei()
             If chavei=9 Or chavei=99
                Then QuitLoop
             EndIf
           EndWhile
           
      Case Tecla_Funcao="EMITCH" :  
           Moveto "Bxautc"
           Moveto [Pag5]
           
           Moveto "Bxautice"
           While True
             chaveice()
             If chavei=9 Or chavei=99
                Then QuitLoop
             EndIf
             digitace()
           EndWhile
           
      Case Tecla_Funcao="CHUTIL" :  
           Play "BX_SCH"
           
      Case Tecla_Funcao="CHENTR" :  
           Play "BX_ECH"
           
      OtherWise             : QuitLoop
    EndSwitch

    SetaCorRegistro("Padrao")

  EndWhile
EndWhile

Moveto "BxautC"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="1"
   Then PickForm "1"
EndIf

EndProc

;*******************************************************************************
;* Checa parametros                                                            *
;*******************************************************************************
Proc checaparametros()

If SYS_CODIGO_CLIENTE = "0377"
   Then 
        PARAM_UTILIZA_FERIADO = "S"
        PARAM_SABDOM_VENCTO   = "S"          ;Sabados e Domingos p/ a Data de Vencimento
   Else 
        PARAM_UTILIZA_FERIADO = "N"
        PARAM_SABDOM_VENCTO   = "S"          ;Sabados e Domingos p/ a Data de Vencimento
EndIf   

MSGCAMPO   =""
MSGJUROS=Format("W6.2",[Taxa de Juros])+"   "+[Tipo Taxa de Juros]+"  " 
Switch
  Case [Tipo Taxa de Juros]=""  : MSGJUROS=MSGJUROS+"   " 
  Case [Tipo Taxa de Juros]="D" : MSGJUROS=MSGJUROS+"Dia" 
  Case [Tipo Taxa de Juros]="M" : MSGJUROS=MSGJUROS+"Mˆs"
  Case [Tipo Taxa de Juros]="A" : MSGJUROS=MSGJUROS+"Ano" 
EndSwitch 
MSGJUROS=MSGJUROS+"/"+Format("W3,AR",[NDias Taxa de JUros])+" Dias"

if not getconta([Bxautc->Codigo da Conta],"")
   then return false
   else if not getp_fatura(regconta["Codigo da Empresa"]) or
           not getp_duplic(regconta["Codigo da Empresa"]) or
           not getp_titulo(regconta["Codigo da Empresa"]) or
           not  getp_cxbco(regconta["Codigo da Empresa"]) or
           not getdestinat([Bxautc->Codigo],"")
           then return false 
        endif   
endif

return True
EndProc ; (checaparametros)

;*******************************************************************************
;* Carrega Parametros P_Duplic                                                 *
;*******************************************************************************
Proc getp_duplic(empresa)
private empresa, msg

getrecord "\\sistemas\\ctarec\\p_duplic" empresa to regp_duplic
if not retval                                                   
   Then
        msg=    "// Empresa ["+empresa+"] sem configura‡Æo de parƒmetros !// //"
        msg=msg+" - Utilit rios / Parƒmetros / Contas a Receber//"
        msg=msg+" - Lan‡amentos e Baixas de T¡tulos            // //"
        msg=msg+"Verificar com Suporte da Vise !"
        Mensagem(msg)

        release vars empresa, regp_duplic, msg
        Return False
endif

release vars empresa, msg
Return True
EndProc ; (getp_duplic)

;*******************************************************************************
;* Carrega Parametros P_Fatura                                                 *
;*******************************************************************************
Proc getp_fatura(empresa)
private empresa, msg

getrecord "\\sistemas\\vendas\\p_fatura" empresa to regp_fatura
if not retval                                                   
   Then
        msg=    "// Empresa ["+empresa+"] sem configura‡Æo de parƒmetros !// //"
        msg=msg+" - Utilit rios / Parƒmetros / Faturamento //"
        msg=msg+" - EmissÆo Nota Fiscal/Romaneio           // //"
        msg=msg+"Verificar com Suporte da Vise !"
        Mensagem(msg)

        release vars empresa, regp_fatura, msg
        Return False
endif

release vars empresa, msg
Return True
EndProc ; (getp_fatura)

;*******************************************************************************
;* Carrega Parametros P_cxbco                                                  *
;*******************************************************************************
Proc getp_cxbco(empresa)
private empresa, msg

getrecord "\\sistemas\\ctacor\\p_cxbco" empresa to regp_cxbco
if not retval                                                   
   Then
        msg=    "// Empresa ["+empresa+"] sem configura‡Æo de parƒmetros !// //"
        msg=msg+" - Utilit rios / Parƒmetros / Caixa/Banco// //"
        msg=msg+"Verificar com Suporte da Vise !"
        Mensagem(msg)

        release vars empresa, regp_cxbco, msg
        Return False
   else PARAM_TITCRED                  =regp_cxbco["Utiliza_Titulo_Credito"   ] 
        if PARAM_TITCRED="S" then PARAM_TITCRED="T" endif 
endif

release vars empresa, msg
Return True
EndProc ; (getp_cxbco)

;*******************************************************************************
;* GetConta                                                                    *
;*******************************************************************************
Proc getconta(conta, msg)
private conta, msg

getrecord "\\sistemas\\ctacor\\conta" conta to regconta
if not retval                                                   
   Then
        if msg<>"SM"
           then if msg=""
                   then msg=    "Conta ["+conta+"] nÆo cadastrada !// //"
                        msg=msg+"Verificar o Cadastro !"
                endif
                Mensagem(msg)
        endif                

        release vars conta, regconta, msg
        Return False
endif

release vars conta, msg
Return True
EndProc ; (getconta)

;*******************************************************************************
;* GetDestinat                                                                 *
;*******************************************************************************
Proc getDestinat(pessoa, msg)
private pessoa, msg

getrecord "\\sistemas\\cadastro\\destinat" pessoa to regdestinat
if not retval                                                   
   Then
        if msg<>"SM"
           then if msg=""
                   then msg=    "Pessoa ["+pessoa+"] nÆo cadastrada !// //"
                        msg=msg+"Cliente/Fornecedor/Outros..// //"
                        msg=msg+"Verificar o Cadastro !"
                endif
                Mensagem(msg)
        endif                

        release vars pessoa, regdestinat, msg
        Return False
endif

release vars pessoa, msg
Return True
EndProc ; (getDestinat)

;*******************************************************************************
;* Rotina grava erros                                                          *
;*******************************************************************************
Proc Grava_Erro(erro)
Private erro

If Not ENCONTRADO_INCONSISTENCIA
   Then FileWrite        ARQ_ERRO From  "\027x0\015"+
                                        "** Relatorio de erro - Atualiza‡Æo Acerto Financeiro Lote "+
                                        nlote+" **\n\n"
EndIf   
FileWrite Append ARQ_ERRO From  erro+"\n"

ENCONTRADO_INCONSISTENCIA=True
EndProc

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Carrega_Tabelas()

View NoWindow "\\Sistemas\\Cheqrec\\chequei"
View NoWindow "\\Sistemas\\Cheqrec\\cdpessoa"
View NoWindow "Bxautt"
View NoWindow "Bxautts"
View NoWindow "Bxautice"
View NoWindow "Bxautir"
View NoWindow "Bxautip"
View NoWindow "Bxautie"
View NoWindow "Bxautis"
CoEdit "BxautC"

PickForm "F"

Moveto "\\Sistemas\\Cheqrec\\chequei"  SetaCorRegistro("Invisivel")
Moveto "\\Sistemas\\Cheqrec\\cdpessoa" SetaCorRegistro("Invisivel")

Moveto "Bxautt"   SetaCorRegistro("Invisivel")
Moveto "Bxautts"  SetaCorRegistro("Invisivel")
Moveto "Bxautice" SetaCorRegistro("Padrao")
Moveto "Bxautir"  SetaCorRegistro("Padrao")
Moveto "Bxautip"  SetaCorRegistro("Padrao")
Moveto "Bxautie"  SetaCorRegistro("Padrao")
Moveto "Bxautis"  SetaCorRegistro("Padrao")
Moveto "BxautC"   SetaCorRegistro("Padrao")

;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        return False
EndIf

Return True
EndProc   ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Parm,"+
        "\\Sistemas\\Vendas\\Bib_Vend"
        
SYS_VALOR()

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CONTROLE_DIA) Then SYS_CONTROLE_DIA="" EndIf

; tabela bxautt tem que ter a estrutura igual a tabela Bxautir
; tabela bxautt temporaria e com linked com bxautc so campo usando campo sequencia no form

LeiaINI(PrivDir()+"LER_CHQ.ini","VSD_LEITORCHQ.S.1")

LimpaVariaveis()

If Carrega_Tabelas()
   Then 
        If Verifica_NRegistros("Bxautir") or
           Verifica_NRegistros("Bxautip") or
           Verifica_NRegistros("Bxautie") or
           Verifica_NRegistros("Bxautis") or
           Verifica_NRegistros("Bxautice")
           Then COR_MENSAGEM="1"
                Mensagem(MSG_TABELA)
                Release Vars COR_MENSAGEM,MSG_TABELA
           Else Release Vars MSG_TABELA     
        EndIf    
   
        PickForm "1"
        OPCAO_FORM="1"
        While True
          CHAVEC()
          If CHAVEC=9
             Then QuitLoop
          EndIf
          If CHAVEC=6
             Then If OPCAO_FORM="F"
                     Then PickForm "F"
                     Else PickForm "1"
                  EndIf
                  Loop
          EndIf
          Controla_EdicaoC()
        EndWhile
EndIf
Do_It!
ClearAll
Release Vars All
Release Procs All
