;** MovCont ********************************************************************
;*  Manutencao Movimento de Conta Corrente - Entradas/Saidas                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 25/08/2005 por Anivel Augusto Rodrigues
;Motivo Alteracao: SaveTables
;Ultima Alteracao: 02/08/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CONSULTAF1P
;Ultima Alteracao: 05/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Historioc->Plano de Contas
;Ultima Alteracao: 07/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 13/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 14/OUTROS DEBITOS
;Ultima Alteracao: 05/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 28/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 21/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes transf. conta aplicacao
;Ultima Alteracao: 13/05/2010 por Cleber Alves
;Motivo Alteracao: Comentada a linha 650
;Ultima Alteracao: 10/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ConsultaF1() padrao !! 
;Ultima Alteracao: 14/02/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas 
;Ultima Alteracao: 17/11/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Sistema Gerador="FL" - EmissÆo Folha de Cheque 
;Ultima Alteracao: 21/11/2011 por Karina Andrade
;Motivo Alteracao: InclusÆo EmissÆo de Cheques Tipo de Opera‡Æo 08 - N e 05
;Ultima Alteracao: 10/01/2012 por Bruno Carvalho
;Ultima Alteracao: Ajustes na rotina de impressÆo de cheques
;Ultima Alteracao: 28/02/2012 por Bruno Carvalho
;Ultima Alteracao: InclusÆo da op‡Æo de visualiza‡Æo para Lojas "LJ"
;Ultima Alteracao: 18/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Outros debitos conta aplica‡Æo
;Ultima Alteracao: 10/09/2013 por Karina Andrade
;Motivo Alteracao: Adicionar centro de custo para Tipo de Opera‡Æo=08
;Ultima Alteracao: 27/09/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes nas rotinas do Monta_Opcoes "BIB_SHOW" 
;Ultima Alteracao: 11/10/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Monta_Opcoes 
;Ultima Alteracao: 09/12/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado Cliente_Inativo()
;Ultima Alteracao: 08/04/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado Verifica_NLancto() 
;Ultima Alteracao: 10/04/2014 por Bruno Carvalho
;Motivo Alteracao: Add Verifica_NRegistros() onde ir  informar limite de registros
;Ultima Alteracao: 23/04/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao informar o numero do lancamento
;Ultima Alteracao: 24/04/2014 por Bruno Carvalho
;Motivo Alteracao: Comentado o novo procedimento de numero de lan‡amento at‚ finaliza‡Æo de testes
;Ultima Alteracao: 02/05/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes quando der enter ir direto para o Form sem passar pela conta
;Ultima Alteracao: 27/06/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes SALDO() variavel CONTA nÆo havia sido setada
;Ultima Alteracao: 16/08/2014 por Andrey Fillipe
;Motivo Alteracao: Adicionado campo [Data Competencia] 
;Ultima Alteracao: 16/10/2014 por Bruno Carvalho
;Motivo Alteracao: Removido o processo Verifica_NLancto(), devido a erro em acesso simultaneo e ajustado nova rotina para verifica‡Æo do Lancto
;Ultima Alteracao: 15/11/2014 por Andrey Fillipe
;Motivo Alteracao: Adicionado MODOFILTRAR, MODOFILTRARINCLUI e MODOFILTRARATIVO
;Ultima Alteracao: 30/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes sistema gerador MA nÆo estava gravando
;Ultima Alteracao: 30/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Form MSGCAMPO display no FORM            
;Ultima Alteracao: 05/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes getp_titulo() em Carrega_Parametros()
;Ultima Alteracao: 03/02/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes preenchimento [Data Cheque Descontado] opera‡Æo 08 e 09
;Ultima Alteracao: 22/02/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Sistema gerador CF-e
;Ultima Alteracao: 30/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado novo processo para gera‡Æo/verifica‡Æo do [Numero do Lancamento]
;Ultima Alteracao: 14/11/2016 por Bruno Carvalho 
;Motivo Alteracao: Ajsutes p/ [Sistema Gerador]="DC"
;Ultima Alteracao: 18/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PegaNomeSistemaGerador() poder altearr plano de conta AF
;Ultima Alteracao: 05/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado Grava_LogEx("MovCont") ao exlcuir lan‡amentos
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 03/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes echo normal echo off PegaNomeSistemaGerador() 
;Ultima Alteracao: 20/07/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo de RATEIO em ShowDialog "F7" -> Em Lan‡amentos
;Ultima Alteracao: 09/10/2018 por Kamila Gomes
;Motivo Alteracao: Adicionado IX - Importador de XML na mensagem de Sistema Gerador
;Ultima Alteracao: 20/05/2019 por Kamila Gomes
;Motivo Alteracao: Adicionado VB - Vise Boletos na mensagem de Sistema Gerador
;Ultima Alteracao: 26/06/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes no plano de contas "SAIDA" ou "ENTRADA" -> Fun‡Æo PlContas() p/ verificar o plano de conta informado
;Ultima Alteracao: 11/07/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes no processo de plano de conta  
;Ultima Alteracao: 08/08/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Lancamento Gerador
;Ultima Alteracao: 05/11/2019 por Bruno/Anivel
;Motivo Alteracao: Ajustes p/ quando sistema gerador = "AF" e [Tipo de Operacao] = "08" ou "09" *bloquear edi‡Æo 
;Ultima Alteracao: 19/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PegaNomeSistemaGerador() "AC"
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 03/01/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes Cliente_Inativo(), controle adicionado na "BIB_PROC"
;Ultima Alteracao: 12/05/2020 por Bruno Carvalho
;Motivo Alteracao: Movido proc Complemento() p/ "Bib_Proc"
;Ultima Alteracao: 14/05/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_CCUSTO            
;Ultima Alteracao: 06/07/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes transferencia entre contas de aplica‡Æo
;Ultima Alteracao: 17/09/2020 por Bruno Carvalho
;Motivo Alteracao: Movido da Bibliot IncluiRegistroControle()
;Ultima Alteracao: 09/10/2020 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes para avisar a execu‡Æo do FechaMes
;Ultima Alteracao: 11/11/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ exibir mensagem com informativo de desempenho somente quando quantidade de registros for maior que zero
;Ultima Alteracao: 11/11/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc Filtrar()
;Ultima Alteracao: 21/12/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes saldo()
;Ultima Alteracao: 07/01/2020 por Bruno/Anivel
;Motivo Alteracao: Ajustes para AtualizaRegistroControle() ao editar ou excluir o registro
;Ultima Alteracao: 15/01/2020 por Bruno/Anivel
;Motivo Alteracao: Ajustes p/ nÆo deixar excluir lan‡amento ao alterar o registro no MODOFILTRAR
;Ultima Alteracao: 21/01/2021 por Bruno/Anivel
;Motivo Alteracao: Ajustes LimpaFiltro()
;Ultima Alteracao: 05/02/2021 por Bruno/Anivel
;Motivo Alteracao: Ajustes no filtro, para ficar conforme filtro que ‚ aplicado nas rotinas de lan‡amento
;Ultima Alteracao: 08/02/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao filtrar os lan‡amentos para melhorar o desempenho do sistema, De 547 dias p/ 730 dias
;Ultima Alteracao: 29/03/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes regra data descontado cheque
;Ultima Alteracao: 16/04/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado biblioteca "Bib_Bloq" 

;*******************************************************************************
;* Rotina para Verificar o Tipo do Controle Dia                                *
;*******************************************************************************
Proc Tipo_Controle()
Private Tipo_OK

Tipo_Ok=True
If SYS_TIPO_CONTRDIA="I"
   Then If SYS_CHAPA_USUARIO<>[Codigo_Usuario]
           Then Mensagem("Lan‡amento de Usu rio diferente !")
                If Not Checa_Supervisor()
                   Then Tipo_Ok=False
                EndIf
        EndIf
EndIf
Return Tipo_OK

EndProc

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()

While True
   Moveto TabelaControle ; FILTRO
   Moveto [Numero do Lancamento]
   End
   LANCTO=[Numero do Lancamento]
   If OPCAO_FORM="4"
      Then Down
      Else PgDn
   EndIf
   Moveto [Numero do Lancamento]

   SetaCorRegistro("Editar")
   While true

      TECLA=""

      AguardaTeclasPadraoCF()
      MSGCAMPO=Field()

      If RetVal="F5"
         Then RetVal = MenuFiltrar()
      EndIf                                                         

   Switch
      ; ---- FILTRO ------------------------------------------------------------
      Case RetVal="MENUFILTRAR" :
           CHAVE=99
           Del
           Return
      Case RetVal="MENUFILTROPADRAO" :
           Del
           
           LimpaFiltro()
           If Not SetaFiltro()
              Then CHAVE=9
              Else SelecionaFiltro()
                   Carrega_Tabelas()
           EndIf   
           QuitLoop
      Case RetVal="MENUFILTROTODOS" :
           MODOFILTRAR=False
           CHAVE=98
           Del
           Return
      ;-------------------------------------------------------------------------     
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F3":
           If OPCAO_FORM="4"
              Then OPCAO_FORM="F"
              Else OPCAO_FORM="4"
           EndIf
           Del
           CHAVE=5
           Return
      Case RetVal="F1":
           If Field()="Codigo da Conta"
              Then Seleciona_Opcoes("Codigo da Conta","CR")
           EndIf
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           MODOPAGINA = True
           Del 
           While True
             If OPCAO_FORM="4"
                Then PAGINA(TabelaControle,"MR") ;FILTRO
                Else PAGINA(TabelaControle,"MT") ;FILTRO
             EndIf
             LANCTO=[Numero do Lancamento]
             CONTA =[Codigo da Conta]
             GetRecord "MovCont" LANCTO To REG_MOVCONT
             Switch
               Case EDITAR="S":    
                    If PegaRegistroControle("Numero do Lancamento",LANCTO)
                     Then If MODOFILTRAR_EMPRESA<>"" And MODOFILTRAR_EMPRESA<>REG_MOVCONT["Codigo da Empresa"] 
                             Then Mensagem("Empresa informada difere da empresa cadastrada para esse usu rio!")
                                  AtualizaRegistroControle("Numero do Lancamento",LANCTO,MODOPAGINA)
                             Else PickForm "F"
                                  Echo Normal
                                  Echo Off
                                  Switch
                                    Case ([Sistema Gerador]="AF" And ([Tipo de Operacao]="08" Or [Tipo de Operacao]="09")) Or 
                                         ([Sistema Gerador]<>"MA" And [Sistema Gerador]<>"FL" and [Sistema Gerador]<>"AF")  :  
                                         Mensagem(PegaNomeSistemaGerador())                               
                                         UnLockRecord
                                         AtualizaRegistroControle("Numero do Lancamento",LANCTO,MODOPAGINA)
                                    OtherWise : 
                                         If [Sistema Gerador]="FL" or [Sistema Gerador]="AF" Then Mensagem(PegaNomeSistemaGerador()) EndIf
                                         If Tipo_Controle() and Checa_Controle([Numero_Controle_Dia])
                                             Then CHAVE=0
                                                  Controla_EdicaoC()
                                             Else UnLockRecord
                                                  AtualizaRegistroControle("Numero do Lancamento",LANCTO,MODOPAGINA)
                                          EndIf
                                  EndSwitch
                          EndIF        
                    EndIf        
               Case EXCLUIR="S": 
                    If PegaRegistroControle("Numero do Lancamento",LANCTO) 
                       Then If MODOFILTRAR_EMPRESA<>"" And MODOFILTRAR_EMPRESA<>REG_MOVCONT["Codigo da Empresa"] 
                               Then Mensagem("Empresa informada difere da empresa cadastrada para esse usu rio!")
                                    AtualizaRegistroControle("Numero do Lancamento",LANCTO,MODOPAGINA)
                               Else PickForm "F"
                                    Echo Normal
                                    Echo Off
                                    If Checa_Supervisor()
                                       Then If Tipo_Controle() and Checa_Controle([Numero_Controle_Dia])
                                               Then If [Sistema Gerador]<>"MA" And [Sistema Gerador]<>"FL"
                                                       Then MSG=PegaNomeSistemaGerador()                               
                                                            MSG=MSG+"//Excluir este lan‡amento em caso de erro no Sistema !//"
                                                            MSG=MSG+"Caso contrario corriga o lan‡amento no Sistema Origem !//"
                                                            MSG=MSG+"Confirma a Exclus„o do Lan‡amento ?"
                                                            CONFGERAL(MSG)
                                                       Else If [Sistema Gerador]="FL" Then Mensagem(PegaNomeSistemaGerador()) EndIf
                                                            If QuerExcluir("")
                                                               Then OK="S"
                                                               Else OK="N"
                                                            EndIf
                                                    EndIf
                                               Else If QuerExcluir("")
                                                       Then OK="S"
                                                       Else OK="N"
                                                    EndIf
                                            EndIf
                                            If OK="S"
                                               Then VALORANT=[Valor]
                                                    CHAVE=8
                                                    NLANC        = LANCTO
                                                    SEQ_BAIXA    = "0"
                                                    RateioPC("RATEIO_EXCLUSAO")
                                                    
                                                    Moveto "MovCont"
                                                    SALDO()
                                               Else UnLockRecord
                                            EndIf
                                      Else UnLockRecord
                                    EndIf
                            EndIf   
                            AtualizaRegistroControle("Numero do Lancamento",LANCTO,MODOPAGINA)
                    EndIf
               OtherWise: QuitLoop
             EndSwitch
             If OPCAO_FORM="4"
                Then PickForm "4"
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="ESC":
           Switch
           Case Field()="Numero do Lancamento":
                Del
                CHAVE=9
                Return
           Case Field()="Codigo da Conta": 
                Moveto [Numero do Lancamento]
           EndSwitch
      Case Retval="ENTER":     
           If MODOFILTRAR   
              Then If TabelaControle<>TabelaPrincipal
                      Then LANCTO = [Numero do Lancamento]
                           Del
                           End Down
                           FormKey                         
                           Moveto TabelaPrincipal
                           End Down FormKey
                           [Numero do Lancamento] = LANCTO 
                           SetaCorRegistro("Editar")                
                   EndIf
           EndIf
           MODOPAGINA = False
           If Numero_Lancamento("",OPCAO_FORM)
              Then NLANC = PROXLANCTO_NLANC
                   Release Vars PROXLANCTO_NLANC
              Else If MODOFILTRAR Then FormKey Moveto TabelaControle FormKey EndIf        
                   QuitLoop
           EndIf
           PickForm "F"                 
           Moveto [Numero do Lancamento]
           If PROXIMO_LANCTO_REG_ACHOU    
              Then CHAVE=0
                   Echo Normal
                   Echo Off
                   If MODOFILTRAR
                      Then If MODOFILTRAR_EMPRESA<>""
                              Then If [Codigo da Empresa]<>MODOFILTRAR_EMPRESA
                                      Then Mensagem("Empresa informada difere da empresa cadastrada para esse usu rio!")
                                           FormKey Moveto TabelaControle FormKey
                                           QuitLoop
                                      EndIf
                           EndIf
                           STATUSFILTRO = "UPDATE"
                   EndIf
                   
                   Switch
                      Case ([Sistema Gerador]="AF" And ([Tipo de Operacao]="08" Or [Tipo de Operacao]="09")) Or 
                           ([Sistema Gerador]<>"MA" And [Sistema Gerador]<>"FL" and [Sistema Gerador]<>"AF")  :  
                           Mensagem(PegaNomeSistemaGerador())                               
                           If MODOFILTRAR Then FormKey Moveto TabelaControle FormKey EndIf        
                           QuitLoop
                      OtherWise : 
                           If [Sistema Gerador]="FL" And [Sistema Gerador]="AF" Then Mensagem(PegaNomeSistemaGerador()) EndIf     
                   EndSwitch
                          
                   If Checa_Controle([Numero_Controle_Dia])
                      Then Return
                   EndIf
              Else CHAVE=1   
                   If MODOFILTRAR Then STATUSFILTRO = "INSERT" EndIf
                   If MODOFILTRAR_EMPRESA<>""
                      Then [Codigo da Empresa]=MODOFILTRAR_EMPRESA
                      Else [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
                   EndIf
                   [Sistema Gerador   ] = "MA"
                   [Lancamento Gerador] = LANCTO
                   If Checa_Controle(SYS_CONTROLE_DIA)
                      Then Return  
                   EndIf
           EndIf
           If TabelaControle<>TabelaPrincipal
               Then FormKey
                    Moveto TabelaControle
                    FormKey
           EndIf
           QuitLoop
   EndSwitch
  EndWhile
EndWhile

EndProc  ; (CHAVE)

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITA()

DATA    =[Data                  ]
CDDOCTO =[Codigo do Documento   ]
TPLACTO =[Tipo do Lancamento    ]
NRDOCTO =[Numero do Documento   ]
CODEMDE =[Codigo do EmitDest    ]
NUMCHEQ =[Numero do Cheque      ]
DTCHEQD =[Data Cheque Descontado]
VALOR   =[Valor                 ]
VALORANT=[Valor                 ]
VRDESC  =[Valor do Desconto     ]
VRJURO  =[Valor do Juros        ]
CONTTRF =[Codigo da Conta Trf   ]
CCSUTO  =[Codigo CCusto         ]

If CHAVE=1
   Then UTILIZA_RAT_CABECA = ""
        Moveto [Codigo da Conta]
        If MODOFILTRAR_EMPRESA<>""
           Then [Codigo da Empresa]=MODOFILTRAR_EMPRESA
        EndIf        
   Else UTILIZA_RAT_CABECA = [Tem Rateio]
        Moveto [Tipo do Lancamento]
EndIf
TPLANCTO2=[Tipo do Lancamento]

If [Sistema Gerador]="AF" then moveto [Codigo Plano_Conta] endif
While True

      TECLA=" Esc=Retornar  "
      
      If Field()="Codigo da Empresa"      
         Then Monta_Opcoes("Empresas","")     
      EndIf        
      
      If Field()="Tipo de Operacao"
         Then Monta_Opcoes("Tipo de Opera‡„o","")
      EndIf				 
      
      If Field()="Tipo do Lancamento"
         Then Monta_Opcoes("Tipo do Lan‡amento","")
      EndIf
      
      If Field()="Tipo de Lan‡amento"
         Then Monta_Opcoes("Tipo de Lan‡amento","")
      EndIf        
      
      If Field()="Codigo da Conta Trf" Or Field()="Codigo da Conta"
         Then Monta_Opcoes("Codigo da Conta","")
      EndIf
          
      If Field()="Codigo do Documento"
         Then Monta_Opcoes("Codigo do Documento","")
      EndIf
     
      TECLA = TECLA + "F7=Rateio  Del=Excluir  "
      Prompt TECLA

      Switch
        Case Field()="Data":
             MSGCAMPO="Data do Lan‡amento"
        Case Field()="Codigo do EmitDest":
             MSGCAMPO="Codigo do Emitente ou Destinatario"
        Case Field()="Cheque Pre-Datado":
             MSGCAMPO="Cheque Pre-Datado? Sim/N„o"
        Case Field()="Codigo da Conta Trf":
             MSGCAMPO="Conta para Transferˆncia"
        Case Field()="Valor":
             MSGCAMPO="Valor do Lan‡amento"
        Case Field()="Numero do Cheque":
             Switch
               Case [Tipo de Operacao]="14": MSGCAMPO="Informe o N£mero do Documento da Transa‡„o"
               Case [Tipo de Operacao]="05": MSGCAMPO="Informe o N£mero do Cheque Emitido"
             EndSwitch
        OtherWise:
           MSGCAMPO=Field()
      EndSwitch

      If Field()="Codigo do EmitDest"  Or Field()="Tipo do Lancamento"  Or
         Field()="Codigo do Documento" Or Field()="Tipo de Operacao"    Or
         Field()="Codigo da Conta Trf" Or Field()="Codigo do Historico" Or
         Field()="Codigo CCusto"       Or Field()="Codigo Plano_Conta"  Or
         Field()="Codigo da Conta"     Or Field()="Codigo da Empresa"
         Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
      EndIf
      
      Wait Field
;;;;;;;;;;;Message MSGCAMPO
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","F7",-65

      Switch
      Case RetVal="F1":
           If Field()="Codigo do EmitDest" Or
              Field()="Codigo do Historico" Or
              Field()="Codigo CCusto"       Or
              Field()="Codigo Plano_Conta"
              Then ConsultaF1()
           EndIf
           
           If Field()="Tipo de Operacao"
              Then Seleciona_Opcoes("Tipo de Opera‡„o","CR")
           EndIf
					 
           If Field()="Tipo do Lancamento"
							Then Seleciona_Opcoes("Tipo do Lan‡amento","CR")
           EndIf
           
           If Field()="Codigo da Conta Trf"
              Then Seleciona_Opcoes("Codigo da Conta","CR")
           EndIf
           
           If Field()="Codigo da Conta"
              Then Seleciona_Opcoes("Codigo da Conta","CR")
           EndIf 
  
           If Field()="Codigo do Documento"
              Then Seleciona_Opcoes("Codigo do Documento","CR")
           EndIf 
          
           If Field()="Codigo da Empresa"         
              Then Seleciona_Opcoes("Empresas","CR")
           Endif     
      
      Case Retval = -65 :
           If IsBlank([Codigo Plano_Conta])
              Then Mensagem("NÆo foi informado um plano de conta principal para o lan‡amento!")
                   Moveto [Codigo Plano_Conta]
              Else If [Tem Rateio]="S"
                      Then RateioPC("DIGITA_RATEIO_CABECA")
                      Else If ConfGeral("Deseja utilizar rateio neste t¡tulo?")
                              Then [Tem Rateio]="S"
                                   
                                   If [Valor do Juros]>0 Or [Valor do Desconto]>0
                                      Then GetRecord "MovRat" LANCTO To REG_MOVRAT 
                                           If Not RetVal
                                              Then RateioPC("ADICIONA_RATEIO_CABECA")
                                           EndIf
                                   EndIf   
                                   RateioPC("DIGITA_RATEIO_CABECA")
                           EndIf    
                   EndIf
           EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVE=0
              Then If MODOFILTRAR 
                      Then FastMsg("Modo [FILTRO] fun‡Æo nÆo permitida !")
                           Loop
                      Else If Checa_Supervisor()
                              Then If QuerExcluir("")
                                      Then CHAVE=8
                                           
                                           NLANC        = LANCTO 
                                           SEQ_BAIXA    = "0"
                                           RateioPC("RATEIO_EXCLUSAO")
                                           
                                           Moveto "MovCont"
                                           QuitLoop
                                   EndIf
                           EndIf
                   EndIf
           EndIf
      Case Retval="ESC":     
           Switch
           Case Field()="Codigo da Conta":
                If QuerDesfazer("")
                   Then If CHAVE=1
                           Then STATUSFILTRO=""
                                
                                NLANC        = LANCTO 
                                SEQ_BAIXA    = "0"
                                RateioPC("RATEIO_EXCLUSAO")
                                
                                Moveto "MovCont"
                                Del                          
                           Else Undo
                                If [Tem Rateio]="S"
                                   Then RateioPC("VERIFICA_RATEIO_CABECA")
                                        If PARAM_FT_RAT="0"
                                           Then RateioPC("DIGITA_RATEIO_CABECA")
                                        EndIf
                                EndIf        
                        EndIf
                        CHAVE=9
                        QuitLoop
                Endif
           Case Field()="Codigo da Empresa":
                Moveto [Codigo da Conta]
           Case Field()="Data Competencia" : Moveto [Codigo da Empresa]
           Case Field()="Data"             : Moveto [Data Competencia]
           Case Field()="Tipo do Lancamento":
                If CHAVE=0
                   Then If QuerDesfazer("")
                           Then Undo
                                If [Tem Rateio]="S"
                                   Then RateioPC("VERIFICA_RATEIO_CABECA")
                                        If PARAM_FT_RAT="0"
                                           Then RateioPC("DIGITA_RATEIO_CABECA")
                                        EndIf
                                EndIf
                                CHAVE=9
                                QuitLoop
                        EndIf
                   Else []=""
                        [Descricao do Lancamento]=""
                        Moveto [Tipo de Operacao]
                EndIf
           Case Field()="Codigo do Documento":
                Moveto [Tipo do Lancamento]
           Case Field()="Numero do Documento":
                Moveto [Codigo do Documento]
           Case Field()="Codigo do EmitDest":
                If [Tipo de Operacao]="14"
                   Then If [Tipo do Lancamento]="H" Or
                           [Tipo do Lancamento]="P"
                           Then Moveto [Tipo do Lancamento ]
                           Else Moveto [Codigo do Documento]
                        EndIf
                   Else Left
                EndIf
           Case Field()="Numero do Cheque":
                If [Tipo de Operacao]="08" Or
                   [Tipo de Operacao]="09"
                   Then Moveto [Tipo do Lancamento]
                   Else Moveto [Codigo do EmitDest]
                EndIf
           Case Field()="Data Cheque Descontado":
								If [Cheque Pre-Datado]="S"
									 Then Moveto [Data Cheque Pre-Datado]
									 Else Moveto [Serie do Cheque]
								EndIf
           Case Field()="Valor":
                Switch
                Case [Tipo de Operacao]="08" Or [Tipo de Operacao]="09":
                     If CHAVE=1 
                        Then Moveto [Codigo da Conta Trf]
                        Else
                             ; Ajustado em 19/08/2002
                             If [Tipo do Lancamento]="O"
                                Then Moveto [Tipo do Lancamento    ]
                                Else Moveto [Data Cheque Descontado]
                             EndIf
                     EndIf
                Case [Tipo de Operacao]="01" Or [Tipo de Operacao]="02":
                     If CHAVE=1
                        Then Moveto [Codigo da Conta Trf]
                        Else Moveto [Tipo do Lancamento]
                     EndIf
                Case [Tipo de Operacao]="03" Or [Tipo de Operacao]="04" or
                     [Tipo de Operacao]="13" Or [Tipo de Operacao]="12":
                     Moveto [Tipo do Lancamento]
                Case [Tipo de Operacao]="05":
                     Moveto [Data Cheque Descontado]
                Case [Tipo de Operacao]="06" Or [Tipo de Operacao]="07":
                     Moveto [Codigo do EmitDest]
                Case [Tipo de Operacao]="14":
                     If [Tipo da Conta]="A"
                        Then Moveto [Tipo do Lancamento    ]
                        Else Moveto [Codigo do EmitDest    ]
                     EndIf
                EndSwitch
           Case Field()="Codigo da Conta Trf":
                If [Tipo de Operacao]="08" Or [Tipo de Operacao]="09"
                   Then If [Tipo da Conta]="C"
                           Then
                                ; Ajustado em 19/08/2002
                                If [Tipo do Lancamento]="O" Or
                                   [Tipo do Lancamento]="P"
                                   Then Moveto [Tipo do Lancamento]
                                   Else ;Moveto [Data Cheque Descontado]
                                        Moveto [Numero do Cheque] 
                                EndIf

                           Else Moveto [Tipo do Lancamento]
                        EndIf
                   Else Moveto [Tipo do Lancamento]
                EndIf
           Case Field()="Codigo Plano_Conta":
                If [Sistema Gerador]="AF" 
                   Then If QuerDesfazer("")
                           Then Undo
                                CHAVE=9
                                QuitLoop
                        EndIf
                   Else Moveto [Valor do Desconto]
                endif   

           Case Field()="Codigo CCusto":
                Moveto [Codigo Plano_Conta]
           Case Field()="Codigo do Historico":
                Moveto [Codigo CCusto]
           OtherWise:
                Left
           EndSwitch
           
      Case Retval="ENTER":  
           Switch
            Case Field()="Codigo da Conta":  
                 If Not IsBlank([])
                    Then Switch
                            Case REGRAFILTRO="CONTA/DATA":
                              If [Codigo da Conta]<>FVSDGCONTA2
                                 Then Mensagem("Lan‡amento permitido somente para a Conta ["+FVSDGCONTA2+"] !")
                                      Loop 
                              EndIf
                          EndSwitch
                          Moveto [Codigo da Empresa]
                 EndIf
            Case Field()="Codigo da Empresa": 
                If Not Checa_Opcoes("Empresas",[])
                   Then Mensagem("Empresa inv lida !")
                        Loop     
                   Else If Not Isblank([Codigo da Empresa]) And MODOFILTRAR_EMPRESA<>""
                           Then If [Codigo da Empresa]<>MODOFILTRAR_EMPRESA
                                   Then Mensagem("Empresa informada difere da empresa cadastrada para esse usu rio!")
                                        Loop
                                EndIf
                        EndIf
                        If Not Isblank([Codigo da Empresa]) And Carrega_Parametros()
                           Then Moveto [Data Competencia]
                        EndIf                        
                EndIf
           Case Field()="Data Competencia":
				Moveto [Data]
           Case Field()="Data": 
                If IsBlank([])
                   Then []=Today()
                EndIf

                Switch
                 Case REGRAFILTRO="CONTA/DATA":
                   If []<>FVSDGDTINI
                      Then Mensagem("Lan‡amento permitido somente para o Per¡odo//["+StrVal(VSDGDTINI)+"] at‚ ["+StrVal(VSDGDTFIM)+"] !")
                           Loop 
                   EndIf
                EndSwitch
        
                If Not IntervaloData([Data])
                   Then Loop
                EndIf

                ALINHM(StrVal(Month([Data])),2)
                MES = NVR
                ALINHM(StrVal(Year([Data])),4)
                ANO = NVR
                Moveto "MovCont"
                Moveto "SaldCont"
                Moveto [Codigo da Conta]
                Locate [MovCont->Codigo da Conta],ANO,MES
                If Not RetVal
                   Then ;;If CHAVE=0
                        ;;   Then MENSAGEM("Saldo da Conta N„o Cadastrado")
                        ;;        Loop
                        ;;EndIf
                        ;;CONFGERAL("Per¡odo do Lan‡amento "+MES+"/"+ANO+" n„o Existe, Deseja Cri -lo ?")
                        ;;If OK="N"
                        ;;   Then Moveto "MovCont"
                        ;;        Loop
                        ;;EndIf
                                  
                        CONTAREF=[MovCont->Codigo da Conta]
                        GERACONT()
                EndIf
                Moveto "MovCont"
                If [Tipo da Conta]="A" And IsBlank([Tipo de Operacao])
                   Then [Tipo de Operacao]="03"
                EndIf
                
                If IsBlank([Data Competencia])
                   Then [Data Competencia]=[Data]
                EndIf
                
                If CHAVE=1
                   Then Moveto [Tipo de Operacao]
                   Else Moveto [Tipo do Lancamento]
                EndIf
           Case Field()="Tipo de Operacao":  
                If IsBlank([]) Then Loop EndIf
                If Not Checa_Opcoes("Tipo de Opera‡„o",[])
                   Then Mensagem("Opera‡„o inv lida !")
                        Loop
                EndIf         
                Switch
                Case [Tipo da Conta]="C":
                     If []="10" or []="11" or []="06" or
                        []="03" or []="09"
                        Then Mensagem("Opera‡„o Inv lida para esta Conta")
                             Loop
                        EndIf
                Case [Tipo da Conta]="X":
                     If []="10" or []="11" or []="05" or []="03" or []="13" or
                        []="09" or []="04" or []="14"
                        Then Mensagem("Opera‡„o Inv lida para esta Conta")
                             Loop
                        EndIf
                Case [Tipo da Conta]="A":
                     If []<>"03" and []<>"13" and []<>"14" and []<>"08"
                        Then Mensagem("Opera‡„o Inv lida para esta Conta")
                             Loop
                        EndIf
                EndSwitch
                If []="01" Then [Tipo do Lancamento]="F" EndIf
                If []="02" Then [Tipo do Lancamento]="F" EndIf
                If []="03" Then [Tipo do Lancamento]="F" EndIf
                If []="13" Then [Tipo do Lancamento]="H" EndIf
                If []="12" Then [Tipo do Lancamento]="L" EndIf
                Moveto  [Tipo do Lancamento]
           Case Field()="Tipo do Lancamento":
                If IsBlank([]) Then Loop EndIf
                If Not Checa_Opcoes("Tipo de Lan‡amento",[])
                   Then Mensagem("Tipo de La‡amento inv lido !")
                        Loop
                EndIf 
                TPLANCTO2=[Tipo do Lancamento]
                Switch
                Case [Tipo de Operacao]="01" Or [Tipo de Operacao]="02" Or
                     [Tipo de Operacao]="10" Or [Tipo de Operacao]="11":
                     If CHAVE=1
                        Then Moveto [Codigo da Conta Trf]
                        Else Moveto [Valor]
                     EndIf
                Case [Tipo de Operacao]="08" Or [Tipo de Operacao]="09":
                     If [Tipo da Conta]="C"
                        Then
                             ; Ajustado em 19/08/2002
                             If [Tipo do Lancamento]="O" Or
                                [Tipo do Lancamento]="P"
                                Then If CHAVE=1
                                        Then Moveto [Codigo da Conta Trf]
                                        Else Moveto [Valor]
                                     EndIf
                                Else Moveto [Numero do Cheque]
                             EndIf

                        Else Moveto [Codigo da Conta Trf]
                     EndIf
                Case [Tipo de Operacao]="03" Or [Tipo de Operacao]="04" or
                     [Tipo de Operacao]="13" or [Tipo de Operacao]="12":
                     Moveto [Valor]
                Case [Tipo de Operacao]="14":
                     If [Tipo da Conta]="A"
                        Then Moveto [Valor]
                        Else If [Tipo do Lancamento]="H" Or
                                [Tipo do Lancamento]="P"
                                Then Moveto [Codigo do EmitDest ]
                                     [Codigo do Documento ]=""
                                     [Tipo do Documento   ]=""
                                     [Serie do Documento  ]=""
                                     [Numero do Documento ]=""
                                Else Moveto [Codigo do Documento]
                             EndIf
                     EndIf

                OtherWise:
                     Moveto [Codigo do Documento]
                EndSwitch
           Case Field()="Codigo do Documento":
                If IsBlank([]) Then Loop EndIf
                Moveto [Numero do Documento]
           Case Field()="Numero do Documento":
                If IsBlank([]) Then Loop EndIf
                Moveto [Codigo do EmitDest]
           Case Field()="Codigo do EmitDest":
                If Chave=1
                   Then If Cliente_Inativo([Codigo do EmitDest])
                           Then Loop
                        EndIf   
                EndIf    
                If IsBlank([]) Then Loop EndIf
                CODPLANO=[Codigo Plano_Conta]
                If CHAVE=1
                   Then [Codigo Plano_Conta]=""              
                        [Codigo Plano_Conta]=CODPLANO
                EndIf   
                                 
                [Tipo do Lancamento]=TPLANCTO2
                If [Tipo de Operacao]="05" Or
                   [Tipo de Operacao]="14"
                   Then Moveto [Numero do Cheque]
                   Else Moveto [Valor]
                EndIf
           Case Field()="Numero do Cheque":
                If IsBlank([]) Then Loop EndIf
                Switch
                  Case [Tipo de Operacao]="14" :
                       Moveto [Valor]
                       [Serie do Cheque       ]=""
                       [Cheque Pre-Datado     ]=""
                       [Data Cheque Pre-Datado]=BlankDate()
                       [Data Cheque Descontado]=[Data]
                       
                  Case [Tipo de Operacao]="08" Or 
                       [Tipo de Operacao]="09"  :
                        Moveto [Codigo da Conta Trf]
                       [Serie do Cheque       ]=""
                       [Cheque Pre-Datado     ]="N"
                       [Data Cheque Pre-Datado]=BlankDate()
                       [Data Cheque Descontado]=[Data]
                       
                  OtherWise   : Moveto [Serie do Cheque]
                EndSwitch
              ;  If [Tipo de Operacao]="14"
              ;     Then Moveto [Valor]
              ;          [Serie do Cheque       ]=""
              ;          [Cheque Pre-Datado     ]=""
              ;          [Data Cheque Pre-Datado]=BlankDate()
              ;          [Data Cheque Descontado]=[Data]
              ;     Else Moveto [Serie do Cheque]
              ;  EndIf
           Case Field()="Cheque Pre-Datado":
                If []="N" Or IsBlank([])
                   Then [Data Cheque Pre-Datado]=BlankDate()
                        []="N"
                        Moveto [Data Cheque Descontado]
                   Else Moveto [Data Cheque Pre-Datado]
                EndIf
           Case Field()="Data Cheque Pre-Datado":
                If Not IsBlank([])
                   Then If []<[Data]
                           Then Mensagem("Data menor que Data do Lan‡amento !")
                                Loop
                        EndIf
                        Right
                EndIf
           Case Field()="Data Cheque Descontado":  
                If Not IsBlank([])
                   Then If []<[Data]
                           Then Mensagem("Data de compensa‡Æo menor que data do lan‡amento !")
                                Loop
                        EndIf
                        if [Cheque Pre-Datado]="S" and []<[Data Cheque Pre-Datado]
                           Then Mensagem("Data de compensa‡Æo menor que data pr‚-datado !")
                                Loop
                        EndIf
                EndIf

                If [Tipo de Operacao]="08" Or [Tipo de Operacao]="09"
                   Then If CHAVE=0
                           Then Moveto [Valor]
                           Else Moveto [Codigo da Conta Trf]
                        EndIf
                   Else If [Tipo de Operacao]="05" and []=""
                           Then Loop
                        EndIf
                        Moveto [Valor]
                EndIf
           Case Field()="Codigo da Conta Trf":
                If IsBlank([]) Then Loop EndIf
                If Not Checa_Opcoes("Codigo da Conta",[])
                   Then Mensagem("Conta inv lida !")
                        Loop     
                EndIf              
                Switch
                Case [Tipo de Operacao]="01" or [Tipo de Operacao]="02":
                     If [Tipo da Conta Trf]<>"A"
                        Then Mensagem("Conta Invalida p/ esta Operacao")
                             Loop
                        EndIf
;;                Case [Tipo de Operacao]="08" or [Tipo de Operacao]="09":
;;                     If [Tipo da Conta Trf]="A"
;;                        Then Mensagem("Conta Invalida p/ esta Operacao")
;;                             Loop
;;                        EndIf
                EndSwitch
                ALINHM(StrVal(Month([Data])),2)
                MES = NVR
                ALINHM(StrVal(Year([Data])),4)
                ANO = NVR
                Moveto "SaldCont"
                Moveto [Codigo da Conta]
                Locate [MovCont->Codigo da Conta],ANO,MES
                If Not RetVal
                   Then MENSAGEM("Per¡odo do Lan‡amento "+MES+"/"+ANO+" n„o foi Inicializado !")
                        Moveto "MovCont"
                        Loop
                EndIf
                Moveto "MovCont"
                Moveto [Valor]
           Case Field()="Valor":
                If []<=0 Then Loop EndIf
                Switch
                Case [Tipo de Operacao]="01" Or [Tipo de Operacao]="02" Or
                     [Tipo de Operacao]="08" Or [Tipo de Operacao]="09" Or
                     [Tipo de Operacao]="10" Or [Tipo de Operacao]="11" Or
                     [Tipo de Operacao]="04" Or [Tipo de Operacao]="03" or
                     [Tipo de Operacao]="12" Or [Tipo de Operacao]="13" or
                     [Tipo de Operacao]="14":
                     Right
                Case [Tipo de Operacao]="05" Or [Tipo de Operacao]="06" Or
                     [Tipo de Operacao]="07":
                     Moveto [Valor do Juros]
                EndSwitch
           Case Field()="Valor do Juros":
                If Not IsBlank([])
                   Then If [] < 0 Then Loop EndIf
                EndIF
                Moveto [Valor do Desconto]
           Case Field()="Valor do Desconto":
                If Not IsBlank([])
                   Then If [] < 0 Then Loop EndIf
                EndIf
                Moveto [Codigo Plano_Conta]                
           Case Field()="Codigo Plano_Conta": 
                CodPlacon  = [Codigo Plano_Conta]
                DescPlacon = ""
                If Not IsBlank(CodPlacon)
                   Then If PlContas(CodPlacon,[Tipo Movimento])
                           Then DescPlacon = REG_PLCONTAS["Descricao Plano_Conta"]
                           Else Loop
                        EndIf 
                Endif
                [Descricao Plano_Conta]= DescPlacon
                If [Sistema Gerador]="AF" then quitloop endif
                Moveto [Codigo CCusto]
           Case Field()="Codigo CCusto":
                CodCCusto = [Codigo CCusto]
                If Not IsBlank(CodCCusto)
                   Then Ativa_Lookup()
                        Moveto [Codigo CCusto]
                        Locate CodCCusto
                        If RetVal
                           Then If [Tipo de Conta] <> "A"
                                   Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                        Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                        Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                        Msg = Msg + "Analitica. Verifique no Cadastro Centros de Custos a classificacao //"
                                        Msg = Msg + "do Tipo de Conta."
                                        Mensagem(Msg)
                                        KeyPress "Esc"
                                        DescCCusto = ""
                                        Loop
                                   Else
                                        DescCCusto = [Descricao CCusto]
                                Endif
                           Else Mensagem("Centro de Custo n„o Cadastrado !")
                                KeyPress "Esc"
                                Loop
                        EndIf
                        KeyPress "Esc"
                   Else
                        DescCCusto = ""
                EndIf
                [Descricao CCusto] = DescCCusto

                Moveto [Codigo do Historico]
                If Not IsBlank([Codigo do Historico]) And
                       IsBlank([Descricao do Historico])
                       Then VRHIST=[]
                            []=""
                            []=VRHIST
                EndIf
           Case Field()="Codigo do Historico":
                If Not IsBlank([])
                   Then HISTORICO()
                EndIf
                Moveto [Descricao do Historico]
           Case Field()="Descricao do Historico":
                If Chave=1
                   Then If Cliente_Inativo([Codigo do EmitDest])
                           Then Loop            
                        EndIf  
                EndIf   
                 
                If CHAVE=1 And PARAM_CRIA_RATEIO_AUTOMATICO And [Tem Rateio]<>"S" And [Codigo Plano_Conta]<>"" And ([Valor do Juros]>0 Or [Valor do Desconto]>0)
                   Then ;Gera plano de conta automatico se encontrado juros ou desconto e localizado plano de conta principal
                        GetRecord "MovRat" LANCTO To REG_MOVRAT
                        If Not RetVal
                           Then RateioPC("ADICIONA_RATEIO_CABECA")
                                [Tem Rateio]="S"
                        EndIf   
                EndIf
                If [Tem Rateio]="S"
                   Then RateioPC("VERIFICA_RATEIO_CABECA")
                        If PARAM_FT_RAT="0"
                           Then RateioPC("DIGITA_RATEIO_CABECA")
                        EndIf
                EndIf           
                QuitLoop
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc   ; (DIGITA)

;***********************************************************
;** Rotina para elaboracao de historico lancamento        **
;***********************************************************
Proc HISTORICO()
HISTORICO = [Descricao do Historico]
POS       = Search("*",HISTORICO)
NOVOHIST  = SubStr(HISTORICO,1,POS-1)
While True
      POSN = SearchFrom("*",HISTORICO,POS+1)
      If POSN = 0
         Then NOVOHIST = NOVOHIST + SubStr(HISTORICO,POS+1,70)
              QuitLoop
      EndIf

      COMP = SubStr(HISTORICO,POS,(POSN-POS)+1)

      Switch
      Case COMP = "*CHEQUE*":
           NOVOHIST = NOVOHIST + [MovCont->Numero do Cheque]
      Case COMP = "*CONTDEST*":
           NOVOHIST = NOVOHIST + [MovCont->Descricao da Conta Trf]
      Case COMP = "*CONTORIG*":
           NOVOHIST = NOVOHIST + [MovCont->Descricao da Conta]
      Case COMP = "*DATALCTO*":
           NOVOHIST = NOVOHIST + StrVal([MovCont->Data])
      Case COMP = "*MESANO*":
           NOVOHIST = NOVOHIST + ALINHM(StrVal(Month([MovCont->Data])),2)+"/"+SubStr(StrVal(Year([MovCont->Data])),3,2)
;;;;;;Case COMP = "*DESTEMIT*":
;;;;;;     NOVOHIST = NOVOHIST + [MovCont->Nome Fantasia EmitDest]
      Case COMP = "*TPDOCTO*":
           NOVOHIST = NOVOHIST + [MovCont->Tipo do Documento] +"/"+ [MovCont->Serie do Documento]
      Case COMP = "*LIVRE*":
           Complemento()
      Case COMP = "*DOCTO*":
           NOVOHIST = NOVOHIST + [MovCont->Numero do Documento]
      OtherWise:
           NOVOHIST = NOVOHIST + SubStr(COMP,2,SearchFrom("*",COMP,2)-2)
      EndSwitch
      POS = POSN
EndWhile
[Descricao do Historico] = NOVOHIST
EndProc ; (HISTORICO)


;***********************************************************
;** Rotina para Calcular e Atualizar Saldo Conta Corrente **
;***********************************************************
Proc SALDO()
CONTA    =[Codigo da Conta       ]
DATA     =[Data                  ]
CDDOCTO  =[Codigo do Documento   ]
TPLACTO  =[Tipo do Lancamento    ]
NRDOCTO  =[Numero do Documento   ]
CODEMDE  =[Codigo do EmitDest    ]
NUMCHEQ  =[Numero do Cheque      ]
DTCHEQD  =[Data Cheque Descontado]
VALOR    =[Valor                 ]
VRDESC   =[Valor do Desconto     ]
VRJURO   =[Valor do Juros        ]
CONTTRF  =[Codigo da Conta       ]
CCUSTO   =[Codigo CCusto         ]
CODHISTOR=[Codigo do Historico   ]
HISTORICO=[Descricao do Historico]

If Not IsBlank([Data])
   Then ALINHM(StrVal(Month([Data])),2)
        MES = NVR
        ALINHM(StrVal(Year([Data])),4)
        ANO = NVR
   Else MES = "00"
        ANO = "0000"
EndIF

Moveto "SaldCont"
Moveto [Codigo da Conta]
Locate CONTA,ANO,MES
If Retval
   Then 
        while islockrecord() endwhile

        If [MovCont->Tipo Movimento]="E"
           Then If CHAVE = 8
                   Then [Entradas] = [Entradas] - VALORANT
                   Else [Entradas] = [Entradas] - VALORANT + VALOR
                EndIf
           Else If CHAVE = 8
                   Then [Saidas] = [Saidas] - VALORANT
                   Else [Saidas] = [Saidas] - VALORANT + VALOR
                EndIf
        EndIf
        unlockrecord
EndIf

If [MovCont->Tipo de Operacao]="01" Or
   [MovCont->Tipo de Operacao]="02" Or
   [MovCont->Tipo de Operacao]="08" Or
   [MovCont->Tipo de Operacao]="09" Or
   [MovCont->Tipo de Operacao]="10" Or
   [MovCont->Tipo de Operacao]="11"
   Then Locate [MovCont->Codigo da Conta Trf],ANO,MES
        If RetVal
           Then 
                while islockrecord() endwhile

                If [MovCont->Tipo Movimento]="S"
                   Then If CHAVE = 8
                           Then [Entradas] = [Entradas] - VALORANT
                           Else [Entradas] = [Entradas] - VALORANT + VALOR
                        EndIf
                   Else If CHAVE = 8
                           Then [Saidas] = [Saidas] - VALORANT
                           Else [Saidas] = [Saidas] - VALORANT + VALOR
                        EndIf
                EndIf
                Unlockrecord
           Else 
                CONTAREF=[MovCont->Codigo da Conta Trf]
                GERACONT()
                while islockrecord() endwhile

                If [MovCont->Tipo Movimento]="S"
                   Then If CHAVE = 8
                           Then [Entradas] = [Entradas] - VALORANT
                           Else [Entradas] = [Entradas] - VALORANT + VALOR
                        EndIf
                   Else If CHAVE = 8
                           Then [Saidas] = [Saidas] - VALORANT
                           Else [Saidas] = [Saidas] - VALORANT + VALOR
                        EndIf
                EndIf
                Unlockrecord
        EndIf

        Moveto "MovCont"
        LANCTORIG=[Numero do Lancamento]
        CONTAG   =[Codigo da Conta Trf]
        TPOPERACG=[Tipo de Operacao]
        Moveto [Numero do Lancamento]
        If CHAVE=8
           Then Locate LANCTORIG,CONTAG
                If RetVal
                   Then Grava_LogEx("MovCont")
                        Del
                EndIf
                Locate LANCTO,CONTA
                If RetVal
                   Then Grava_LogEx("MovCont")
                        Del
                EndIf 
                STATUSFILTRO = "DEL"
           Else Locate LANCTORIG,CONTAG
                If RetVal
                   Then [Data                  ]=DATA
                        [Codigo do Documento   ]=CDDOCTO
                        [Numero do Documento   ]=NRDOCTO
                        [Codigo do EmitDest    ]=CODEMDE
                        [Tipo do Lancamento    ]=TPLACTO
                        [Numero do Cheque      ]=NUMCHEQ
                        [Data Cheque Descontado]=DTCHEQD
                        [Valor                 ]=VALOR
                        [Valor do Desconto     ]=VRDESC
                        [Valor do Juros        ]=VRJURO
                        [Codigo da Conta Trf   ]=CONTTRF
                        [Codigo CCusto         ]=CCUSTO
                        Switch
                        Case TPOPERACG="01":
                             [Tipo de Operacao]="10"
                        Case TPOPERACG="02":
                             [Tipo de Operacao]="11"
                        Case TPOPERACG="10":
                             [Tipo de Operacao]="01"
                        Case TPOPERACG="11":
                             [Tipo de Operacao]="02"
                        Case TPOPERACG="08":
                             [Tipo de Operacao]="09"
                             If [Tipo da Conta]="C"
                                Then [Tipo do Lancamento]="F"
                                Else If TPLACTO="O"
                                      ;;Then [Tipo do Lancamento]="L"
                                        Then [Tipo do Lancamento]="O"
                                     EndIf
                             EndIf
                        Case TPOPERACG="09":
                             [Tipo de Operacao]="08"
                             If [Tipo da Conta]="C"
                                Then [Tipo do Lancamento]="H"
                             EndIf
                        EndSwitCh
                        [Codigo do Historico   ]=CODHISTOR
                        [Descricao do Historico]=HISTORICO
                        [Sistema Gerador       ]="MA"
                        [Lancamento Gerador    ]=[Numero do Lancamento]
                   Else End PgDn
                        [Numero do Lancamento]=LANCTORIG
                        [Codigo da Conta     ]=CONTAG
                        [Data                ]=DATA
                        [Codigo do Documento ]=CDDOCTO
                        [Numero do Documento ]=NRDOCTO
                        [Codigo do EmitDest  ]=CODEMDE
                        [Tipo do Lancamento  ]=TPLACTO
                        [Numero do Cheque    ]=NUMCHEQ
                        [Data Cheque Descontado]=DTCHEQD
                        [Valor               ]=VALOR
                        [Valor do Desconto   ]=VRDESC
                        [Valor do Juros      ]=VRJURO
                        [Codigo da Conta Trf ]=CONTTRF
                        [Codigo CCusto       ]=CCUSTO
                        Switch
                        Case TPOPERACG="01":
                             [Tipo de Operacao]="10"
                        Case TPOPERACG="02":
                             [Tipo de Operacao]="11"
                        Case TPOPERACG="10":
                             [Tipo de Operacao]="01"
                        Case TPOPERACG="11":
                             [Tipo de Operacao]="02"
                        Case TPOPERACG="08":
                             [Tipo de Operacao]="09"
                             If [Tipo da Conta]="C"
                                Then [Tipo do Lancamento]="F"
                                Else If TPLACTO="O"
                                      ;;Then [Tipo do Lancamento]="L"
                                        Then [Tipo do Lancamento]="O"
                                     EndIf
                             EndIf
                        Case TPOPERACG="09":
                             [Tipo de Operacao]="08"
                             If [Tipo da Conta]="C"
                                Then [Tipo do Lancamento]="H"
                             EndIf
                        EndSwitCh
                        [Codigo do Historico   ]=CODHISTOR
                        [Descricao do Historico]=HISTORICO
                        [Sistema Gerador       ]="MA"
                        [Lancamento Gerador    ]=[Numero do Lancamento]
                        Controle_Dia()
                EndIf
                Locate LANCTO,CONTA
        EndIf
   Else 
        UnlockRecord
        Moveto "MovCont"
        If CHAVE=8
           Then Grava_LogEx("MovCont")
                Del
                STATUSFILTRO = "DEL"
        EndIf
EndIf
;UnlockRecord
Moveto "MovCont"
EndProc  ; (SALDO)

;*******************************************************************************
;* Atualizacao Conta Corrente (Novo Periodo)                                   *
;*******************************************************************************
Proc GERACONT()
End Down
[Codigo da Conta]=CONTAREF
[Ano Referencia ]=ANO
[Mes Referencia ]=MES
[Saldo Inicial  ]=0
[Entradas       ]=0
[Saidas         ]=0
If IsLockRecord()
   then del
   else UnlockRecord
endif    

EndProc ; (GERACONT)

;*******************************************************************************
;* Imprimir Cheque                                                            *
;*******************************************************************************
Proc IMPRIME_CHEQUE()
Private CH_Valor, CH_Numero, CH_Historico, CH_CEmitente, CH_DtE, CH_DtV, CH_Data,
CH_Juros, CH_Desconto, CH_Custo, CH_Conta, CH_Lanc, CH_Cidade, CH_DESC, Continuar, BANCO,
CH_Observacoes, CH_Ndocto, CH_Nominal
UnLockRecord

MSGCAMPO     = ""
VSDGNOMINAL=[MovCont->Razao Social]

CONFGERAL("Deseja Imprimir o Cheque?")
If OK="N"
   Then Return False
Endif

Play "\\Sistemas\\Ctapag\\Nominal"
If BANCO=0
   Then Return False
EndIf
FormKey

CH_DESC       = [Data Cheque Descontado  ]
CH_Valor      = [Valor                   ]
CH_Desconto   = [Valor do Desconto       ]
CH_Data       = [Data                    ]
CH_Numero     = [Numero do Cheque        ]
CH_Serie      = [Serie do Cheque         ]
Ch_PreDat     = [Data Cheque Pre-Datado  ]
Ch_NumConta   = [Codigo da Conta         ] 
Ch_DesConta   = [Descricao da Conta      ] 
CH_Juros      = [Valor do Juros          ]
CH_Destino    = [Razao Social            ]
Ch_Rotina     = "CAIXA/BANCO"
CH_CodPlConta = [Codigo Plano_Conta      ]
CH_PlConta    = [Descricao Plano_Conta   ]
CH_CodCusto   = [Codigo CCusto           ]
CH_Custo      = [Descricao CCusto        ]
                                  
Moveto [Codigo da Empresa]
If BUSCA_LOOKUP("Codigo da Empresa",[Codigo da Empresa],"")
  Then CH_Titular=Reg_Busca_Lookup["Razao Social Empresa"]
       CH_Cidade =Reg_Busca_Lookup["Cidade Empresa"      ]
EndIf

Moveto [Codigo da Conta]
If BUSCA_LOOKUP("Codigo da Conta",[Codigo da Conta],"")
   Then CH_CBanco=Reg_Busca_Lookup["Numero do Banco"]
        CH_NBanco=Reg_Busca_Lookup["Nome do Banco"  ]
        CH_NConta=Reg_Busca_Lookup["Numero da Conta"]
EndIf

Continuar=False

While True
  AGUARDE("Imprimindo Cheque")

  CH_Lanc        = [Numero do Lancamento  ]
  CH_CEmitente   = [Codigo do EmitDest    ]
  CH_DtE         = [Data                  ]

  If [Data Cheque Pre-Datado]=BlankDate()
     Then CH_DtV  = [Data                  ]
     Else CH_DtV  = [Data Cheque Pre-Datado]
  EndIf       

  CH_Ndocto      = [Tipo do Documento]+"/"+[Numero do Documento]
  CH_Historico   = [Descricao do Historico]
  CH_Observacoes = ""

  {TableAdd} {\\Sistemas\\CTAPAG\\P_Cheque}
  Moveto [Numero do Banco]
  Locate CH_CBanco
  If RetVal
     Then If BANCO=1
             Then SCRIPT="\\Sistemas\\Ctapag\\"+[Script_Avulso]
             Else SCRIPT="\\Sistemas\\Ctapag\\"+[Script_Continuo]
          EndIf
     Else Mensagem("Banco n„o cadastrado nos parametros do Cheque! // //Verificar com o Suporte!")
          Moveto "MovCont"
          QuitLoop              
  EndIf
  ClearImage
  Moveto "MovCont"

  If Search("CH",SCRIPT)=0
   Then Mensagem("Falha ao imprimir o cheque! // Script n„o encontrado! // //Verificar com o Suporte!")
        Moveto "MovCont"
        QuitLoop
  EndIf
  
  Seta_Printer = PARAM_PORTA_CHEQ
    
  If Seta_Printer=""
      Then MSGDISPOSITIVO="Impress„o de Cheque"
           DispositivoI("CHQ")
           If OK=""
              Then QuitLoop
              Else Play SCRIPT
           EndIf
      Else CONFGERAL("Coloque o cheque na impressora e clique em SIM para prosseguir!")
            If OK="N"
               Then QuitLoop
               Else Play SCRIPT
            Endif
  EndIf
  
  LIMPAGUARDE()
  CONFGERAL("Deseja realizar a Impress„o do Historico? // //"+
            "Coloque Apenas a Copia de Cheque p/ a impress„o !")
  If OK="N"
     Then QuitLoop
     Else AGUARDE("Imprimindo o Hist¢rico")
          If Seta_Printer=""
             Then MSGDISPOSITIVO="Impress„o de Cheque"
                  DispositivoI("CHQ")
                  If OK=""
                     Then QuitLoop
                     Else Play "\\Sistemas\\Ctapag\\C_Ch"
                  EndIf
             Else Play "\\Sistemas\\Ctapag\\C_Ch"
         EndIf
  EndIf
  
  If PARAM_CONTROLA_TALAO = "S"
    Then Moveto "\\Sistemas\\CtaCor\\TalaoChq"
         Moveto [Codigo da Conta]
         Locate CH_CONTA,NumVal(CH_NUMERO)
         If RetVal
            Then If CH_DESC = BlankDate()
                    Then [Situacao]="A DESCONTAR"
                    Else [Situacao]="DESCONTADO"
                         [Data Descontado]=CH_DESC
                 Endif
                 [Valor do Pagamento       ] = CH_VALOR
                 [Data do Pagamento        ] = CH_DATA
                 [Valor do Juros           ] = CH_JUROS
                 [Valor do Desconto        ] = CH_DESCONTO
                 [Numero do Lancamento     ] = CH_LANC
                 [Codigo do Emitente       ] = CH_CEMITENTE
                 [Data de Emissao          ] = CH_DTE
                 [Data de Vencimento       ] = CH_DTV
                 [Codigo CCusto            ] = Substr(CH_CUSTO,1,(SEARCHFROM ("-",CH_CUSTO,1) -2))
                 [Descricao CCusto         ] = Substr(CH_CUSTO,(SEARCHFROM ("-",CH_CUSTO,1) +2),Len(CH_CUSTO)-(SEARCHFROM ("-",CH_CUSTO,1) +2))
                 [Razao Social Destinatario] = CH_DESTINO
                 [Tipo do Documento        ] = Substr(CH_HISTORICO, 1, (SEARCHFROM("/", CH_HISTORICO, 1) - 1 ))
                 [Numero do Documento      ] = Substr(CH_HISTORICO, (SEARCHFROM("/", CH_HISTORICO, 1) + 1 ),(LEN(CH_HISTORICO)-SEARCHFROM("/",CH_HISTORICO, 1)))
         Endif
         Moveto "MovCont"
  Endif

  LIMPAGUARDE()
  Continuar=True
  QuitLoop
EndWhile

Moveto "MovCont"
FormKey
PickForm "4"

Release Vars CH_Observacoes, CH_Historico
Return Continuar

EndProc  ; (Imprimi_Cheque)


;*******************************************************************************
;* Checagem de dados da pagina                                                 *
;*******************************************************************************
Proc PegaNomeSistemaGerador()
private s

s=""
Switch
  Case [Sistema Gerador]="CP" : s="Baixa Contas a Pagar"
  Case [Sistema Gerador]="CR" : s="Baixa Contas a Receber"

  Case [Sistema Gerador]="NE" : s="Notas de Entrada"

  Case [Sistema Gerador]="NF" : s="Notas de Saida"
  Case [Sistema Gerador]="DI" : s="Digita‡Æo de Notas de Sa¡da"
  Case [Sistema Gerador]="FT" : s="EmissÆo Nota Fiscal/Romaneio"
  Case [Sistema Gerador]="CF" : s="EmissÆo Cupom Fiscal"
  Case [Sistema Gerador]="BA" : s="EmissÆo Romaneio p/ BalcÆo"
  Case [Sistema Gerador]="TR" : s="EmissÆo Romaneio p/ Troca"
  Case [Sistema Gerador]="LJ" : s="Sistema Vendas - Loja"

  Case [Sistema Gerador]="BO" : s="Bordero de Cheques/Terceiros"

  Case [Sistema Gerador]="AF" : s="Acerto Financeiro"
  Case [Sistema Gerador]="AC" : s="Altera‡Æo de Conta/Carteira contas a receber"

  case [Sistema Gerador]="FL" : s="EmissÆo Folha de Cheque"

  Case [Sistema Gerador]="DC" : s="Programa‡„o de Fundi‡„o"
  Case [Sistema Gerador]="IX" : s="Importador de XML"
  Case [Sistema Gerador]="VB" : s="Vise Boletos"
EndSwitch
return "//Sistema gerador: "+s+"//"
EndProc   ;  (Checagem_Pagina)

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc SelecionaFiltro()
Do_It!
ClearAll

AGUARDE("Filtrando dados")

{Ask} TypeIn "\\Sistemas\\CtaCor\\MovCont" Enter Check
If MODOFILTRAR_EMPRESA<>""
   Then Moveto [Codigo da Empresa] TypeIn "~FILTRAREMPRESA.."
   Else Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.." 
EndIf
Moveto [Codigo da Conta   ] TypeIn "~VSDGCONTA2.."
Moveto [Codigo do EmitDest] TypeIn "~VSDGDESTINAT.."
Moveto [Tipo do Lancamento] TypeIn "~VSDGTPLANC2.."
Moveto [Tipo de Operacao  ] TypeIn "~VSDGTPOPER2.."
Moveto [Codigo Plano_Conta] TypeIn "~VSDGPLCONTAS.."
Moveto [Codigo CCusto     ] TypeIn "~VSDGCCUSTO.."
Switch
  Case VSDGOPDTEMISCOMP="2" :
       Moveto [Data Competencia] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
  Case VSDGOPDTEMISCOMP="3" :
       Moveto [Data_Inclusao   ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
  OtherWise                        :
       Moveto [Data            ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"  
EndSwitch

Do_It!
ClearAll

CriaTabelaControle()

EndProc  ; (Seleciona)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_DialogF(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento, Temp, MSG_CAMPO, TECLA
 
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"        : Campo="NO"
            Case Campo="TG_CONTA2"         : Campo="TG_EMPRESA"
            Case Campo="TG_DESTINAT"       : Campo="TG_CONTA2"
            Case Campo="TG_TPLANC2"        : Campo="TG_DESTINAT"
            Case Campo="TG_TPOPER2"        : Campo="TG_TPLANC2"
            Case Campo="TG_PLCONTAS"       : Campo="TG_TPOPER2"
            Case Campo="TG_CCUSTO"         : Campo="TG_PLCONTAS"
            Case Campo="TG_OPDTEMISCOMP"   : Campo="TG_CCUSTO"
            Case Campo="TG_DTINI"          : Campo="TG_OPDTEMISCOMP"
            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_CONTA2"
                         If Not IsBlank(VSDGEMPRESA) And MODOFILTRAR_EMPRESA<>"" And MODOFILTRAR_EMPRESA<>VSDGEMPRESA
                           Then Mensagem("Empresa informada difere da empresa cadastrada para esse usu rio!")
                                Campo="TG_EMPRESA"
                         EndIf               
                    Case Campo="TG_CONTA2"    : Campo="TG_DESTINAT"
                    Case Campo="TG_DESTINAT"  : Campo="TG_TPLANC2"
                    Case Campo="TG_TPLANC2"   : Campo="TG_TPOPER2"
                    Case Campo="TG_TPOPER2"   : Campo="TG_PLCONTAS"
                    Case Campo="TG_PLCONTAS"  : Campo="TG_CCUSTO"
                    Case Campo="TG_CCUSTO"    : Campo="TG_OPDTEMISCOMP"
                    Case Campo="TG_OPDTEMISCOMP" : Campo="TG_DTINI"
                         VSDGOPDTEMISCOMP=ControlValue("TG_OPDTEMISCOMP")
                         switch
                           case VSDGOPDTEMISCOMP="2" : VSDGNOMOPDTEMISCOMP="COMPETÒNCIA"
                           case VSDGOPDTEMISCOMP="3" : VSDGNOMOPDTEMISCOMP="INCLUSÇO"
                           otherwise                 : VSDGOPDTEMISCOMP   ="1"
                                                       VSDGNOMOPDTEMISCOMP="LAN€AMENTO/EMISS¶O"
                         endswitch
                    Case Campo="TG_DTINI"     : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"     : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

If Campo="TG_OPDTEMISCOMP"
   Then MSG_CAMPO="Op‡”es: 1=LAN€AMENTO/EMISSÇO  2=COMPETÒNCIA  3=INCLUSAO"
EndIf   

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Filtrar()
Private Result
MSGCAMPO     = ""
                       
If MODOFILTRAR_EMPRESA<>"" Then VSDGEMPRESA=MODOFILTRAR_EMPRESA EndIf
                       
LimpAguarde()
Do_It!
ClearAll

VSDGDTINI = BlankDate()
VSDGDTFIM = BlankDate() 

Echo Normal
Echo Off

CONSULTAF1     = False
SDFILTRO_ATIVO = True
While True
  Result=False
  
  ShowDialog "Crit‚rio para filtro ?" Proc "SD_DialogF"
  Trigger "OPEN","ARRIVE","SELECT"  
  Mouse "UP"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
    @ 05,00   Height 19 Width 80

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

    Label  @ 02,00 "Conta"  For "TG_CONTA2"
    Accept @ 03,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA2"    To VSDGCONTA2
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCONTA" To VSDGNOMCONTA2

    Label  @ 04,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 05,01 Width 07 "A04" Picture "[&,#][#*#]" Tag "TG_DESTINAT"   To VSDGDESTINAT
    Accept @ 05,09 Width 25 "A24" Picture "!*!" Tag "TG_NOMDEST"    To VSDGNOMDEST

    Label  @ 06,00 "Tipo de Lan‡amento"  For "TG_TPLANC2"
    Accept @ 07,04 Width 04 "A1"  Picture "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,X,Z" Tag "TG_TPLANC2" To VSDGTPLANC2
    Accept @ 07,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMLANC"  To VSDGNOMLANC2

    Label  @ 08,00 "Tipo de Opera‡„o"  For "TG_TPOPER2"
    Accept @ 09,03 Width 05 "A2"  Picture "!*!" Tag "TG_TPOPER2" To VSDGTPOPER2
    Accept @ 09,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMOPER"  To VSDGNOMOPER2

    Label  @ 10,00 "Plano de Contas" For "TG_PLCONTAS"
    Accept @ 11,01 Width 16 "A13"  Picture "!*!" Tag "TG_PLCONTAS" To VSDGPLCONTAS
    Accept @ 11,18 Width 35 "A40" Picture "!*!" Tag "TG_NOMPLCONTAS"  To VSDGNOMPLCONTAS
    
    Label  @ 12,00 "CentroDeCusto" For "TG_CCUSTO"
    Accept @ 13,07 Width 10 "A7"  Picture "###.###" Tag "TG_CCUSTO" To VSDGCCUSTO
    Accept @ 13,18 Width 35 "A20" Picture "!*!" Tag "TG_NOMCUST"  To VSDGNOMCUST

    Label  @ 00,35 "Op‡äes de Datas" For "TG_OPDTEMISCOMP"
    Accept @ 01,39 Width 04 "A1"  Picture "1,2,3" Tag "TG_OPDTEMISCOMP" To VSDGOPDTEMISCOMP
    Accept @ 01,44 Width 26 "A20"  Picture "!*!" Tag "TG_NOMOPDTEMISCOMP" To VSDGNOMOPDTEMISCOMP

    Label  @ 02,35 "Per¡odo Referente" For "TG_DTINI"
    Label  @ 03,35 "de" For "TG_DTINI"
    Accept @ 03,39 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,52 "at‚" For "TG_DTFIM"
    Accept @ 03,57 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
    
    @ 16,52 ?? "[NÆo filtra mˆs fechado!]"
    
    Pushbutton @ 15,19 width 11 "~O~k"      OK     Default Value "Ok"  Tag "YES" To BottonValue
    Pushbutton @ 15,33 width 11 "~C~ancela" CANCEL                     Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  
  If MODOFILTRAR_EMPRESA<>"" And MODOFILTRAR_EMPRESA<>VSDGEMPRESA
     Then Mensagem("O usu rio deve informar a empresa "+MODOFILTRAR_EMPRESA+"!")
          Loop
  EnDIf      

  Switch
    Case REGRAFILTRO="CONTA/DATA":
         If VSDGCONTA2<>FVSDGCONTA2 
            Then Mensagem("Conta ["+VSDGCONTA2+"] diferente do acesso permitido !")
                 VSDGCONTA2    = FVSDGCONTA2
                 VSDGNOMCONTA2 = FVSDGNOMCONTA2
                 Loop
         EndIf        
         If VSDGDTINI<>FVSDGDTINI Or 
            VSDGDTFIM<>FVSDGDTFIM    
            Then Mensagem("Per¡odo ["+StrVal(VSDGDTINI)+"] at‚ ["+StrVal(VSDGDTFIM)+"] diferente do acesso permitido !")
                 VSDGDTINI = FVSDGDTINI  
                 VSDGDTFIM = FVSDGDTFIM    
                 Loop
         EndIf
         If VSDGNOMDATAMF<>FVSDGNOMDATAMF 
            Then Mensagem("Op‡Æo Data de ["+VSDGNOMDATAMF+"] diferente do acesso permitido !")
                 VSDGNOMDATAMF = FVSDGNOMDATAMF
                 Loop
         EndIf        
  EndSwitch

  SelecionaFiltro()

  Result=True

  QuitLoop
EndWhile

SDFILTRO_ATIVO=False

Return Result
EndProc

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Carrega_Tabelas()                      
ClearAll
MSGCAMPO     = ""

View NoWindow "CCusto"

If Not CoEditaTabelaControle() ; Substitui Coedit da tabela principal
   Then Return False
EndIf

PickForm "F"
Moveto "SaldCont" SetHighLight Current Record 119 Field 119
Moveto "ContaTrf" SetHighLight Current Record 119 Field 119
Moveto "MovRat"   SetaCorRegistro("Invisivel")
Moveto TabelaControle
PickForm "4"

If NRecords(TabelaControle)>1
   Then Home
        If IsBlank([Numero do Lancamento])
           Then Echo Normal
                Echo Off
                MSG="Existe registro com Erro !// //"
                MSG=MSG+"Verificar numero lan‡amento em branco !// //"
                MSG=MSG+"Excluir o lan‡amento e verificar a origem do mesmo !"
                Mensagem(MSG)
        EndIf
EndIf

If Verifica_NRegistros(TabelaControle)
   Then COR_MENSAGEM="1"
        Mensagem(MSG_TABELA)
        Release Vars COR_MENSAGEM,MSG_TABELA
   Else Release Vars MSG_TABELA     
EndIf

LimpAguarde()

Return True
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Proc Carrega_Parametros()
Seta_Tipo_Impressora("Matricial")

if not getp_titulo([Movcont->Codigo da Empresa])
   then return false
endif   

RateioPC("PLANO_CONTA_AUTOMATICO")
If PARAM_FT_RAT = "1"
   Then PARAM_CRIA_RATEIO_AUTOMATICO = True
   Else PARAM_CRIA_RATEIO_AUTOMATICO = False 
EndIf

return true
EndProc ;Carrega_Parametros()

;*******************************************************************************
;* Rotina Limpa Variaveis do Filtro                                            *
;*******************************************************************************
Proc LimpaFiltro()

VSDGEMPRESA     = ""
VSDGNOMEMP      = ""
VSDGCONTA2      = ""
VSDGNOMCONTA2   = ""
VSDGDESTINAT    = ""
VSDGNOMDEST     = ""
VSDGTPLANC2     = ""
VSDGNOMLANC2    = ""
VSDGTPOPER2     = ""
VSDGNOMOPER2    = ""
VSDGPLCONTAS    = ""
VSDGNOMPLCONTAS = ""
VSDGCCUSTO      = ""
VSDGNOMCUST     = "" 
VSDGNOMDATAMF   = ""
VSDGDTINI       = BlankDate()
VSDGDTFIM       = Today()

VSDGOPDTEMISCOMP="1"
REGRAFILTRO     = ""
SD_ICODATAMF    = "3,EMISSAO,COMPETENCIA,INCLUSAO"

EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
private DIGITAC
 
If Not IsAssigned(STATUSFILTRO) then STATUSFILTRO="" Endif
DIGITAC      =true 
If CHAVE=0
   Then If Not Carrega_Parametros()
           Then DIGITAC =False
        EndIf           
EndIf  

SetaCorRegistro("Editar") 
while DIGITAC
  MSGCAMPO     = ""
  DIGITA()
  MSGCAMPO     = ""
  
  If CHAVE<>9
     Then If CHAVE=1
             Then 
                  [Sistema Gerador     ]="MA"
                  Controle_Dia()
          EndIf
          
          SALDO()
          If PARAM_IMPRIME_CHEQUE="S"   And
             ([Tipo de Operacao  ]="08" And 
              [Tipo do Lancamento]="N"  Or  
              [Tipo de Operacao  ]="05") 
              Then IMPRIME_CHEQUE()
          EndIf
  EndIf
  quitloop
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf         

AtualizaRegistroControle("Numero do Lancamento",LANCTO,MODOPAGINA)
If OPCAO_FORM="4" Then PickForm "4" EndIf
SaveTables

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Proc,"+
        "\\Sistemas\\Cadastro\\Bib_Parm,"+ 
        "\\Sistemas\\Cadastro\\Bib_Bloq,"+
        "\\Sistemas\\Ctacor\\Bib_Rat" 

SYS_VALOR()

If Not IsAssigned(SYS_TIPO_CONTRDIA)   Then SYS_TIPO_CONTRDIA=""   EndIf
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA  =""  EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO ="S" EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO  ="S" EndIf
If Not IsAssigned(APLIC_ORIGEM)        Then APLIC_ORIGEM      =""  EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO =""  EndIf
If Not IsAssigned(SYS_NCONEXAO)        Then SYS_NCONEXAO      =""  EndIf
If Not IsAssigned(SYS_ESTACAO)         Then SYS_ESTACAO       =""  EndIf

MSG=""
COR_MENSAGEM="PRETO"

{Ask} {MovCont} Check
Moveto [Data] Typein "<(today-730)"
do_it!
clearall
if not IsEmpty("Answer")
   then {Ask} {Answer} TypeIn "Fast Delete"
        Moveto [Tipo da Conta         ] TypeIn "C"
        Moveto [Tipo de Operacao      ] TypeIn "05"
        Moveto [Data Cheque Descontado] TypeIn "Blank"
        Do_It!
        ClearAll
                
        {Ask} {Answer} TypeIn "Fast Delete"
        Moveto [Tipo de Operacao      ] TypeIn "08"
        Moveto [Tipo do Lancamento    ] TypeIn "M or N"
        Moveto [Data Cheque Descontado] TypeIn "Blank"
        Do_It!
        ClearAll     
        
        {Ask} {Answer}
        Moveto [Numero do Lancamento] Typein "Calc Count as Qtde"
        do_it!
        if not IsEmpty("Answer")
           Then If [Qtde]>0
                   Then MSG=MSG+"Existe(m) "+strval([Qtde])+" Movimento de Caixa lan‡ados !   // //"
                        MSG=MSG+"Para melhor seguran‡a e desempenho do Sistema,//"
                        MSG=MSG+"recomendamos que fa‡a o fechamento mensal  das//"
                        MSG=MSG+"mais antigas. Recomendamos manter apenas 1 ano//"
                        MSG=MSG+"em aberto!                                    // //"
                        MSG=MSG+"Verificar com o supervisor fechamento mensal !"
                EndIf
        EndIf         
endif   
ClearAll
if MSG<>"" then Mensagem(MSG) endif
Release Vars COR_MENSAGEM,MSG 

LimpaFiltro()

TabelaTemp              =""             
OPCAO_FORM             = "4"
CONTA                  = ""
SAIDA                  = 1
MSGCAMPO               = ""
TabelaPrincipal        = "MovCont"
TabelaControle         = TabelaPrincipal
MODOFILTRAR            = True
MODOFILTRARATIVO       = True
MODOFILTRAR_EMPRESA    = ""        
MODOFILTRATODOS        = False      

If IsAssigned(MODOFILTRAR) And MODOFILTRAR 
   Then FILTRAREMPRESA = ""
        GetRecord "\\Sistemas\\Cadastro\\Usuarios" SYS_CHAPA_USUARIO To REG_USUARIO
        If RetVal
            Then If Not isblank(REG_USUARIO["Cod_Empresa"])
                    Then FILTRAREMPRESA = REG_USUARIO["Cod_Empresa"]
                 EndIf 
        EndIf
        
        If FILTRAREMPRESA<>""
           Then MODOFILTRAR_EMPRESA = FILTRAREMPRESA
                SelecionaFiltro()      
        EndIf   
EndIf

If MODOFILTRAR_EMPRESA=""
   Then TabelaControle    = TabelaPrincipal
        MODOFILTRAR       = False
        MODOFILTRARATIVO  = True
        MODOFILTRARINCLUI = False
        MODOFILTRATODOS   = True
EndIf

If Not Carrega_Tabelas() 
   Then Return 
EndIf

While True
  CHAVE()
  ;--- FILTRO ------------------------------------------------------------------
  If CHAVE=99 
     Then If Filtrar()
             Then MODOFILTRAR=True
          EndIf
          Carrega_Tabelas()
          Loop
  EndIf
  If CHAVE=98 
     Then AGUARDE("Visualizando todos registros")
          MODOFILTRAR=False
          Do_It!
          
          TabelaControle=TabelaPrincipal
          Carrega_Tabelas()
          Loop
  EndIf
  ;-----------------------------------------------------------------------------   
  If CHAVE=9 or CHAVE=8
     Then QuitLoop
  EndIf
  If CHAVE=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "4"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
DeletaTabelaControle() ; FILTRO
Release Vars All
Release Procs All