;** TituloBx *******************************************************************
;*  Baixa de Titulos do Contas a Pagar                                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 19/10/2004 por Anivel Augusto Rodrigues
;Ultima Alteracao: 30/11/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes padronizar com script Titulos usando apenas paramentro
;                  diferenciador assim este script nunca muda !!

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************

TITULOS_SOBAIXAS=True    
Play "Titulos"

;*******************************************************************************
;* Rotina para Localizar Registro Carteira                                     *
;*******************************************************************************
Proc CHAVEC()
COPIOU_REGISTRO=False
While True
  Moveto [Numero do Lancamento]
  End
  NLANC=[Numero do Lancamento]
  Moveto [Numero do Lancamento]

  If OPCAO_FORM="6"
     Then Down
     Else PgDn PgDn PgDn PgDn
  EndIf
  Moveto [Numero do Lancamento]

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()

  Switch
    Case RetVal=-33 : SemFuncoes()
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F3":
         If OPCAO_FORM="6"
            Then OPCAO_FORM="4"
            Else OPCAO_FORM="6"
         EndIf
         Del
         CHAVEC=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           If OPCAO_FORM="6"
              Then PAGINA("Titulos","MR")
              Else PAGINA("Titulos","MT")
           EndIf
           NLANC=[Numero do Lancamento]
           Switch
             Case EDITAR="S":
                  PickForm "4"
                  CHAVEC=0
                  Controla_EdicaoC()
             Case EXCLUIR="S":
                  UnLockRecord
                  Mensagem("Fun‡„o Inv lida !")
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM="4"
              Then PickForm "4"
              Else PickForm "6"
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case Retval="ENTER":
         If IsBlank([])
            Then If IsBlank(NLANC)
                    Then []="1"
                    Else []=StrVal(NumVal(NLANC)+1)
                 EndIf
         EndIf
         []=Alinh()
         NLANC=[]
         Del
         PickForm "4"
         Moveto [Numero do Lancamento]
         Locate NLANC
         If Retval
            Then CHAVEC=0
                 If Not IsLockRecord()
                    Then Return
                 EndIf
            Else CHAVEC=1
                 Mensagem("Lan‡amento n„o encontrado !")
         EndIf
         If OPCAO_FORM="6"
            Then PickForm "6"
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc  ; (ChaveC)

;*******************************************************************************
;* Atualizacao do Titulo                                                       *
;*******************************************************************************
Proc TIT()
Moveto "Titulos"
Switch
Case CHAVEI=0 or CHAVEI=1:
     [Saldo do Documento]=Round([Saldo do Documento]+((VROLD-JSOLD)+DSOLD),2)
     [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)
Case CHAVEI=8:
     [Saldo do Documento]=Round([Saldo do Documento]+((VROLD-JSOLD)+DSOLD),2)
EndSwitch

Moveto "TitBaixa"
EndProc  ; (Tit)




;+-----------------------------------------------------------------------------+
;   [ INICIO ]     Rotinas comuns Titulos, Bxforn, Titulobx               

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento

TECLA=""
MSG_CAMPO=""
Temp=True

If INICIO_DIALOG
   Then INICIO_DIALOG=False
        Switch
          Case SD=1: Campo="TG_VENCIMENTOS"
          Case SD=2: Campo="TG_DOCTO"
          Case SD=3: Campo="TG_OPDOCTO"
        EndSwitch
EndIf

If Disparo="OPEN" Then AoCriarShowDialog() EndIf

If Disparo="CLOSE"
   Then Switch
          Case Campo="YES": AcceptDialog
          Case Campo="NO" : CancelDialog
        EndSwitch
        Return Temp
EndIf

If Disparo="SELECT" And Campo="TG_VENCIMENTOS" And
   DynArraySize(Array_Vencimentos)>0 
   Then Temp=True
        CHAMA=True
        Vencimento()
EndIf

If Disparo="UPDATE"
   Then Switch
          Case Campo="TG_ADICIONA":
            Temp=True
            CHAMA=False
            Vencimento()
          Case Campo="TG_MULTIPLA":
            Temp=True
            Quant()
            Campo="TG_VENCIMENTOS"
          Case Campo="YES": AcceptDialog
          Case Campo="NO" : CancelDialog
          OtherWise       : Return Temp
        EndSwitch
EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False

     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case SD=1:
              Switch 
						    Case Campo="TG_ADICIONA"       : Campo="TG_VENCIMENTOS"
						    Case Campo="TG_MULTIPLA"       : Campo="TG_VENCIMENTOS"
						    Case Campo="TG_VENCIMENTOS"    : Campo="NO"
                Case Campo="YES" Or Campo="NO" : Campo="TG_VENCIMENTOS"
              EndSwitch
            Case SD=2: 
              Switch 
                Case Campo="TG_DOCTO"          : CancelDialog
                Case Campo="TG_DTEMID"         : Campo="TG_DOCTO"
                Case Campo="TG_DTREFE"         : Campo="TG_DTEMID"
						    Case Campo="TG_DTCOMP"         : Campo="TG_DTREFE"
				        Case Campo="TG_VALOR"          : Campo="TG_DTCOMP"
              EndSwitch
            Case SD=3: 
              Switch 
                Case Campo="TG_OPDOCTO"        : Campo="NO"
						    Case Campo="TG_PARCELA"        : Campo="TG_OPDOCTO"
                Case Campo="TG_OPDTEM"         : Campo="TG_PARCELA"
                Case Campo="YES" Or Campo="NO" : Campo="TG_OPDOCTO"
              EndSwitch
          EndSwitch

       Case Evento["KeyCode"]=-60 And DynArraySize(Array_Vencimentos)>0:
            Campo="TG_VENCIMENTOS"

       Case Evento["KeyCode"] = -83 And Campo="TG_VENCIMENTOS":
            If DynArraySize(Array_Vencimentos)>0 And NumVal(ArrayElement)>1
               Then If QuerExcluir("este vencimento")
                       Then Array_vencimentos[ArrayElement]=""

                            DynArray Array_VencimentosI[]
                            c=0
                            For i From 1 To DynArraySize(Array_Vencimentos)
                              If IsBlank(Array_Vencimentos[i]) Then Loop EndIf
                              c=c+1
                              Array_VencimentosI[c]=AlinhM(StrVal(c),2)+SubStr(Array_Vencimentos[i],3,70)
                            EndFor

                            Release Vars Array_Vencimentos
                            DynArray Array_Vencimentos[]
                            For i From 1 To DynArraySize(Array_VencimentosI)
                              Array_Vencimentos[i]=Array_VencimentosI[i]
                            EndFor
                            Release Vars Array_VencimentosI
                            
                    EndIf
            EndIf
       Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_OPDOCTO"   : Campo="TG_PARCELA"
                         VSDGOPDOCTO=ControlValue("TG_OPDOCTO")
                    Case Campo="TG_PARCELA"   : Campo="TG_OPDTEM"
                         VSDGPARCELA=ControlValue("TG_PARCELA")
                    Case Campo="TG_OPDTEM"   : Campo="YES"

                    Case Campo="TG_DOCTO"          : Campo="TG_DTEMID"
                         VSDGDOCTO=ControlValue("TG_DOCTO")
                    Case Campo="TG_DTEMID"         : Campo="TG_DTREFE"
                         VSDGDTEMID=ControlValue("TG_DTEMID")
                    Case Campo="TG_DTREFE"         : Campo="TG_DTCOMP"
                         VSDGDTREFE=ControlValue("TG_DTREFE")
                    Case Campo="TG_DTCOMP"         : Campo="TG_VALOR"
                         VSDGDTCOMP=ControlValue("TG_DTCOMP")
                    Case Campo="TG_VALOR"          :
                         VSDGVALOR=ControlValue("TG_VALOR")
                         AcceptDialog

                    Case Campo="TG_VENCIMENTOS" And
                         DynArraySize(Array_Vencimentos)>0:
                         CHAMA=True
                         Vencimento()
                    Case Campo="TG_ADICIONA":
                         CHAMA=False
                         Vencimento()
                    Case Campo="TG_MULTIPLA":  Campo="TG_VENCIMENTOS"
                         Quant()

                  EndSwitch
          EndIf
   EndSwitch
EndIf

RefreshDialog
SelectControl Campo
TECLA=" Esc=Retornar  "

Switch
  Case Campo="TG_OPDTEM"       : MSGCAMPO="Defina a op‡„o"
                                 TECLA="Barra de Espa‡o=Marca/Desmarca  "
  Case Campo="TG_PARCELA"      : MSGCAMPO="Informe a quantidade de desdobramentos a mais que deseja gerar"
  Case Campo="TG_DOCTO"        : MSGCAMPO="Informe o documento "
  Case Campo="TG_DTEMID"       : MSGCAMPO="Informe a emissäo "
  Case Campo="TG_DTREFE"       : MSGCAMPO="Informe o vencimento "
  Case Campo="TG_DTCOMP"       : MSGCAMPO="Informe a Competencia"
  Case Campo="TG_VALOR"        : MSGCAMPO="Informe o valor "

  Case Campo="TG_ADICIONA"     : MSGCAMPO="Adicionar novo desdobramento [Enter]"
  Case Campo="TG_MULTIPLA"     : MSGCAMPO="Gera multiplos desdobramentos [Enter]"

  Case Campo="TG_OPDOCTO"      : MSGCAMPO="Exemplos: 999999/A, 999999/9, MM/AAAA ou 9/9"
                                 TECLA=TECLA+Chr(27)+Chr(26)+"=Selecionar  "
  Case Campo="TG_VENCIMENTOS"  : MSGCAMPO="Vencimentos "
       If DynArraySize(Array_Vencimentos)>0
          Then TECLA=TECLA+"Del=Excluir  Enter=Editar  "+Chr(27)+""+Chr(26)+"=Selecionar  "
       EndIf

  Case Campo="YES"             : MSGCAMPO="Confirma Dados [Enter]"
  Case Campo="NO"              : MSGCAMPO="Cancelar [Enter]"
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)

RefreshDialog
Return TEMP
EndProc  ; (Sd_Dialog)

;*******************************************************************************
;*  Rotina para a Tela Principal                                                *
;*******************************************************************************
Proc Inicial()
Message("")
Echo Normal
Echo Off
Mouse Show

If IsAssigned(Array_Vencimentos)
   Then Release Vars Array_Vencimentos
EndIf
DynArray Array_Vencimentos[]

VSDGOPDOCTO=1
VSD_I_SEQ=1

;1234567890123456789012345678901234567
;01 1234567890 99/99/9999 9.999.999,99
  Array_Vencimentos[1]="01 "+
                       Format("W10,AL",[Titulos->Numero do Documento])+" "+
                       Format("D13",DateVal([Titulos->Data de Emissao]))+" "+
                       Format("D13",DateVal([Titulos->Data de Vencimento]))+" "+
                       Format("D13",DateVal([Titulos->Data Competencia]))+" "+
                       Format("W12.2,EIC",[Titulos->Valor do Documento])+" "+
                       Format("W12.2",[Titulos->Valor do Documento])

SD=1
INICIO_DIALOG=True

ShowDialog "Relacao de Desdobramentos" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE","UPDATE","CLOSE","SELECT"
     Key "ENTER","ESC","F2","DEL"
   @ 02,03 Height 19 Width 66

    Frame Single From 00,00 to 14,63

    PickDynArray @ 02,01 Height 12 width 62
     Columns 1
      Array_Vencimentos
       Tag "TG_VENCIMENTOS"
        To ArrayElement
    Label @ 00,01 "~D~esdobramentos"  For "TG_VENCIMENTOS"
    Label @ 01,01 "N§   Docto     DtEmiss„o  DtVencto   DtCompet         Valor"  For "TG_VENCIMENTOS"
                  ;1234567890123456789012345678901234567890123456789012345678901234567890123456
                  ;01 1234567890 99/99/9999 99/99/9999 99/99/9999 9.999.999,99 9.999.999,99
    Pushbutton @ 15,04 width 13 "~N~ovo"                               Tag "TG_ADICIONA"  To BottonValue
    Pushbutton @ 15,22 width 13 "~M~ultiplas"                          Tag "TG_MULTIPLA"  To BottonValue
    
    Pushbutton @ 15,38 width 11 "~O~k"       OK     Default Value "Ok" Tag "YES"          To BottonValue
    Pushbutton @ 15,49 width 11 "~C~ancela"  CANCEL                    Tag "NO"           To BottonValue

  EndDialog
  Mouse Show
  If Not RetVal
     Then Return False
     Else Return True
  EndIf

EndProc  ;(Inicial)

;*******************************************************************************
;*  Rotina para a Tela de Vencimentos                                         *
;*******************************************************************************
Proc Vencimento()
;12345678901234567890123456789012345670123456789012345678901
;01 1234567890 99/99/9999 99/99/9999 99/99/9999 9.999.999,99

If CHAMA
   Then VSD_I_SEQ =SubStr(Array_Vencimentos[ArrayElement],1,2)
        VSDGDOCTO  =RTrim(SubStr(Array_Vencimentos[ArrayElement],4,10))
        VSDGDTEMID=DateVal(LTrim(SubStr(Array_Vencimentos[ArrayElement],15,2))+"."+
                                 SubStr(Array_Vencimentos[ArrayElement],18,2)+"."+
                                 SubStr(Array_Vencimentos[ArrayElement],21,4))
        VSDGDTREFE=DateVal(LTrim(SubStr(Array_Vencimentos[ArrayElement],26,2))+"."+
                                 SubStr(Array_Vencimentos[ArrayElement],29,2)+"."+
                                 SubStr(Array_Vencimentos[ArrayElement],32,4))
        VSDGDTCOMP=DateVal(LTrim(SubStr(Array_Vencimentos[ArrayElement],37,2))+"."+
                                 SubStr(Array_Vencimentos[ArrayElement],40,2)+"."+
                                 SubStr(Array_Vencimentos[ArrayElement],43,4))                         
        VSDGVALOR =NumVal(SubStr(Array_Vencimentos[ArrayElement],61,12))
   Else Array_Vencimentos[1]="01 "+
             Format("W10,AL",[Titulos->Numero do Documento])+" "+
             Format("D13",DateVal([Titulos->Data de Emissao]))+" "+
             Format("D13",DateVal([Titulos->Data de Vencimento]))+" "+
             Format("D13",DateVal([Titulos->Data Competencia]))+" "+
             Format("W12.2,EIC",[Titulos->Valor do Documento])+" "+
             Format("W12.2",[Titulos->Valor do Documento])
            
             VSD_I_SEQ =AlinhM(StrVal(DynArraySize(Array_Vencimentos)+1),2)
             VSDGDOCTO =""
             VSDGVALOR =BlankNum()
             VSDGDTEMID=BlankDate()
             VSDGDTREFE=BlankDate()
             VSDGDTCOMP=BlankDate()
EndIf

While True
  SD=2
  INICIO_DIALOG=True
  ShowDialog "Desdobramento [    ]" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "ENTER","ESC"
   @ 03,19   Height 04 Width 72

    Accept @ -01,41 Width 4 "A2" Tag "I_Seq" To VSD_I_SEQ

    Label  @ 00,00 "Docto"  For "TG_DOCTO"
    Accept @ 01,01 Width 13 "A10"  Picture "!*!" Tag "TG_DOCTO" To VSDGDOCTO

    Label  @ 00,16 "DtEmiss„o"  For "TG_DTEMID"
    Accept @ 01,15 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTEMID" To VSDGDTEMID

    Label  @ 00,30 "DtVencto"  For "TG_DTREFE"
    Accept @ 01,29 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREFE" To VSDGDTREFE
    
    Label  @ 00,44 "DtCompet"  For "TG_DTCOMP"
    Accept @ 01,43 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTCOMP" To VSDGDTCOMP
    
    Label  @ 00,56 "Valor" For "TG_VALOR"
    Accept @ 01,57 Width 12 "$" picture "#*#.[##]" Tag "TG_VALOR" To VSDGVALOR

  EndDialog
  Mouse Show
  If Not RetVal
		 Then QuitLoop
  EndIf

  If IsBlank(VSDGDOCTO)
    Then Mensagem("Documento Invalido !")
         Loop
  EndIf
;;If Ver_Data(VSDGDOCTO,VSDGDTREFE)
;;   Then Mensagem("Documento ou Data J  existe nos vencimentos !//Verificar !")
;;        Loop
;;EndIf
  If IsBlank(VSDGVALOR) Or IsBlank(VSDGDTREFE) Or IsBlank(VSDGDTEMID) Or IsBlank(VSDGDTCOMP)
    Then Mensagem("Data ou Valor Invalido !")
         Loop
  EndIf

;01 1234567890 99;99;9999 99/99/9999 9.999.999,99 123456789012
  Array_Vencimentos[NumVal(VSD_I_SEQ)]= VSD_I_SEQ+" "+
                                Format("W10,AL",VSDGDOCTO)+" "+
                                Format("D13",VSDGDTEMID)+" "+
                                Format("D13",VSDGDTREFE)+" "+
                                Format("D13",VSDGDTCOMP)+" "+
                                Format("W12.2,EIC",VSDGVALOR)+" "+
                                Format("W12.2",VSDGVALOR)
  Return
EndWhile

SD=1
EndProc    ; (Vencimento)

;*******************************************************************************
;*  Rotina para a Digitacao da Quantidade de Parcelas                          *
;*******************************************************************************
Proc Quant()
VSDGPARCELA=BlankNum()

SD=3
INICIO_DIALOG=True

Array TG_OPDTEM[1]
TG_OPDTEM[1]="Gerar Data de Emiss„o diferentes"

Array CheckTG_OPDTEM[ArraySize(TG_OPDTEM)]
CheckTG_OPDTEM[1]=False

ShowDialog " +Desdobramento(s) " Proc "SD_Dialog"
Trigger "OPEN","ARRIVE"
Key "ENTER","ESC"
 @ 03,20   Height 09 Width 57

  Label @ 00,00 "Desdobramento do Documento por" For "TG_OPDOCTO"
   RadioButtons @ 01,01 Height 1 Width 50
     "~L~etra",
     "~N~umero",
     "~M~es/Ano",
     "~P~arcela"
     Tag "TG_OPDOCTO"
     To VSDGOPDOCTO

  Label  @ 02,00 "Quantidade"  For "TG_PARCELA"
  Accept @ 03,03  Width 05 "A4"  Picture "#*#" Tag "TG_PARCELA" To VSDGPARCELA
  
  CheckBoxes @ 03,12 Height 1 Width 40 Tag "TG_OPDTEM"
  TG_OPDTEM[1] to CheckTG_OPDTEM[1]

  Pushbutton @ 05,30 width 11 "~O~k"       OK     Default Value "Ok" Tag "YES"          To BottonValue
  Pushbutton @ 05,43 width 11 "~C~ancela"  CANCEL                    Tag "NO"           To BottonValue
  
EndDialog
Mouse Show
If RetVal
   Then If Not IsBlank(VSDGPARCELA)
           Then Datas(VSDGPARCELA)
        EndIf
EndIf

SD=1
EndProc  ;(Quant)

;*******************************************************************************
;* Calcula as Datas das Parcelas                                               *
;*******************************************************************************
Proc Datas(PARCELAS)

Private PARCELAS,DOCTO,VALOR,
        DATA,DIA,MES,ANO,CONT,pos,
        DATAEM,DIAEM,MESEM,ANOEM,CONT,pos,
        NMES, NANO, NPARC, TPARC, DATAP, DATAE, DATACOM

If DynArraySize(Array_Vencimentos)>0
  Then DOCTO  =RTrim(SubStr(Array_Vencimentos[1],4,10))
       DATAEM =DateVal(LTrim(SubStr(Array_Vencimentos[1],15,2))+"."+
               SubStr(Array_Vencimentos[1],18,2)+"."+
               SubStr(Array_Vencimentos[1],21,4))
       DATA   =DateVal(LTrim(SubStr(Array_Vencimentos[1],26,2))+"."+
               SubStr(Array_Vencimentos[1],29,2)+"."+
               SubStr(Array_Vencimentos[1],32,4))
       DATACOM=DateVal(LTrim(SubStr(Array_Vencimentos[1],37,2))+"."+
               SubStr(Array_Vencimentos[1],40,2)+"."+
               SubStr(Array_Vencimentos[1],43,4))             
       VALOR  = NumVal(SubStr(Array_Vencimentos[1],61,12))
  Else DOCTO  = RTrim([Titulos->Numero do Documento])
       DATAEM = DateVal(LTrim([Titulos->Data de Emissao]))
       DATA   = DateVal(LTrim([Titulos->Data de Vencimento]))
       DATACOM= DateVal(LTrim([Titulos->Data Competencia]))
       VALOR  = NumVal([Titulos->Valor do Documento])
EndIf

Release Vars Array_Vencimentos
DynArray Array_Vencimentos[]

If DynArraySize(Array_Vencimentos)<=0
   Then  Array_Vencimentos[1]="01 "+
                 Format("W10,AL",[Titulos->Numero do Documento])+" "+
                 Format("D13",DateVal([Titulos->Data de Emissao]))+" "+
                 Format("D13",DateVal([Titulos->Data de Vencimento]))+" "+
                 Format("D13",DateVal([Titulos->Data Competencia]))+" "+
                 Format("W12.2,EIC",[Titulos->Valor do Documento])+" "+
                 Format("W12.2",[Titulos->Valor do Documento])
   Else Array_Vencimentos[1]= AlinhM(StrVal(1),2)+" "+
                  Format("W10,AL",DOCTO)+" "+
                  Format("D13",DATAEM)+" "+
                  Format("D13",DATA)+" "+
                  Format("D13",DATACOM)+" "+
                  Format("W12.2,EIC",VALOR)+" "+
                  Format("W12.2",VALOR)
EndIf

DIA  =NumVal(Day(DATA))
MES  =NumVal(Month(DATA))
ANO  =NumVal(Year(DATA))

DIAEM=NumVal(Day(DATAEM))
MESEM=NumVal(Month(DATAEM))
ANOEM=NumVal(Year(DATAEM))

DIACOM=NumVal(Day(DATACOM))
MESCOM=NumVal(Month(DATACOM))
ANOCOM=numVal(Year(DATACOM))

CONT =2

While CONT<=NumVal(PARCELAS)+1
   If MES<12
      Then MES=MES+1
      Else ANO=ANO+1
           MES=1
   EndIf
   If Day(Ultimo_dia(AlinhM(StrVal(MES),2)+StrVal(ANO)))<DIA
      Then DIA=Day(Ultimo_dia(AlinhM(StrVal(MES),2)+StrVal(ANO)))
   EndIf

   DATAP=DateVal(AlinhM(StrVal(MES),2)+"/"+AlinhM(StrVal(DIA),2)+"/"+StrVal(ANO))
   ;*******************************
   If Not  CheckTG_OPDTEM[1]
      Then DATAC=DATACOM
      Else If MESCOM<12
              Then MESCOM=MESCOM+1
              Else ANOCOM=ANOCOM+1
                   MESCOM=1
           EndIf
           If Day(Ultimo_dia(AlinhM(StrVal(MESCOM),2)+StrVal(ANOCOM)))<DIACOM
              Then DIACOM=Day(Ultimo_dia(AlinhM(StrVal(MESCOM),2)+StrVal(ANOCOM)))
           EndIf
           DATAC=DateVal(AlinhM(StrVal(MESCOM),2)+"/"+AlinhM(StrVal(DIACOM),2)+"/"+StrVal(ANOCOM))
   EndIf

   ;******************************
   If Not  CheckTG_OPDTEM[1]
      Then DATAE=DATAEM
      Else If MESEM<12
              Then MESEM=MESEM+1
              Else ANOEM=ANOEM+1
                   MESEM=1
           EndIf
           If Day(Ultimo_dia(AlinhM(StrVal(MESEM),2)+StrVal(ANOEM)))<DIAEM
              Then DIAEM=Day(Ultimo_dia(AlinhM(StrVal(MESEM),2)+StrVal(ANOEM)))
           EndIf
           DATAE=DateVal(AlinhM(StrVal(MESEM),2)+"/"+AlinhM(StrVal(DIAEM),2)+"/"+StrVal(ANOEM))
   EndIf

   Switch
     Case VSDGOPDOCTO=1:
           pos=SearchFrom("/",DOCTO,1)
           pos=pos-1
           If pos<=1
              Then Pos=Len(Docto)
           EndIf
           DOCTO=SubStr(DOCTO,1,pos)+"/"+Chr(64+Cont)
      Case VSDGOPDOCTO=2:
           pos=SearchFrom("/",DOCTO,1)
           pos=pos-1
           If pos<=1
              Then Pos=Len(Docto)
           EndIf
           DOCTO=SubStr(DOCTO,1,pos)+"/"+StrVal(Cont)
      Case VSDGOPDOCTO=3:
           NVDOCTO="?"
           pos=SearchFrom("/",DOCTO,1)
           pos=pos-1
           If pos>0
              Then NMES=SubStr(DOCTO,1,pos)
                   NANO=RTrim(SubStr(DOCTO,pos+2,4))
                   If ConteudoNumerico(NMES) And
                      ConteudoNumerico(NANO)
                      Then NMES=NumVAl(NMES)
                           NANO=NumVAl(NANO)
                           If NMES>=1 And NMES<=12
                              Then If NMES<12
                                      Then NMES=NMES+1
                                      Else NANO=NANO+1
                                           NMES=1
                                   EndIf
                                   NVDOCTO=AlinhM(StrVal(NMES),2)+"/"+StrVal(NANO)
                           EndIf
                   EndIf
           EndIf
           DOCTO=NVDOCTO
           If CONT=2 And NVDOCTO="?"
              Then Mensagem("Documento formato invalido !// //Informe MM/AAAA.")
           EndIf
      Case VSDGOPDOCTO=4:
           NVDOCTO="?"
           pos=SearchFrom("/",DOCTO,1)
           pos=pos-1
           If pos>0
              Then NPARC=SubStr(DOCTO,1,pos)
                   TPARC=RTrim(SubStr(DOCTO,pos+2,4))
                   If ConteudoNumerico(NPARC) And
                      ConteudoNumerico(TPARC)
                      Then NPARC=NumVal(NPARC)+1
                           NVDOCTO=StrVal(NPARC)+"/"+TPARC
                   EndIf
           EndIf
           DOCTO=NVDOCTO
           If CONT=2 And NVDOCTO="?"
              Then Mensagem("Documento formato invalido !// //Informe 9/9.")
           EndIf
   EndSwitch

   Array_Vencimentos[CONT]= AlinhM(StrVal(CONT),2)+" "+
                      Format("W10,AL",DOCTO)+" "+
                      Format("D13",DATAE)+" "+
                      Format("D13",DATAP)+" "+
                      Format("D13",DATAC)+" "+
                      Format("W12.2,EIC",VALOR)+" "+
                      Format("W12.2",VALOR)

   CONT=CONT+1
 EndWhile

EndProc  ;(Datas)

;*******************************************************************************
;* Rotina para Verificar se a Data Digitada e o Documento ja existem           *
;*******************************************************************************
Proc Ver_Data(DOCTO,DATA)
Private Ok,DOCTO,DATA,I

Ok=False

If DynArraySize(Array_Vencimentos)<=0
   Then Return Ok
EndIf

For i From 1 To DynArraySize(Array_Vencimentos)
  If i=NumVal(VSD_I_SEQ) Then Loop EndIf
  If DATA=DateVal(LTrim(SubStr(Array_Vencimentos[i],15,2))+"."+
                  SubStr(Array_Vencimentos[i],18,2)+"."+
                  SubStr(Array_Vencimentos[i],21,4))
     Then Ok=True
          QuitLoop
  EndIf
  If DOCTO=RTrim(SubStr(Array_Vencimentos[i],4,10))
     Then Ok=True
          QuitLoop
  EndIf
EndFor

Return Ok
EndProc  ;(Ver_Data)

;*******************************************************************************
;* Rotina Recalcular Saldos conforme as baixas                                 *
;*******************************************************************************
Proc Calc_Baixas()
Moveto "\\Sistemas\\CtaPag\\TitBaixa"
Moveto [Valor do Pagamento]
TOTREC=Round(ImageCSum(),2)
Moveto [Valor do Juros]
TOTJUR=Round(ImageCSum(),2)
Moveto [Valor do Desconto]
TOTDES=Round(ImageCSum(),2)

Moveto "\\Sistemas\\CtaPag\\Titulos"

[Saldo do Documento]=([Valor do Documento]-
                     (TOTREC-TOTJUR+TOTDES))

EndProc

;*******************************************************************************
;* Rotina para Localizar Registro Notinhas                                     *
;*******************************************************************************
Proc CHAVEN()

Exclusao_Cabeca=False
While True
  Moveto [Sequencia da Nota]
  End
  NITEM_N = [Sequencia da Nota]
  Down

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

  SetaCorRegistro("Editar")
  While true
    Moveto [Valor do Documento]
    TOTVALOR = ImageCSum()
    If TOTVALOR>0 Or Saldo_Atualizado
       Then Moveto "Titulos"
            [Valor do Documento]=TOTVALOR
            Calc_Baixas()
            Moveto "TitNota"
            Saldo_Atualizado=True
    EndIf
    Moveto [Sequencia da Nota]

    Prompt " Esc=Retornar  Alt+F=Fun‡”es  PgDn=Finalizar "

    Wait Field
         Until "ESC","ENTER","F7","HOME","UP","PGUP","PGDN","F6","F10",
               "F8",-33,-115,-116,-75,-77

    If RetVal=-75  Or RetVal=-77 Or
       RetVal=-115 Or RetVal=-116
       Then Tecla_Funcao=Retval
            CHAVEN=9
            Del
            Return
    EndIf

    If Retval=-33
       Then
         ShowPopup " Fun‡”es " CENTERED
          "C~h~eques    [F6]" : " Relaciona Cheques/Terceiros       " : "F6",
          "~B~aixas     [F8]" : " Baixa do T¡tulo"                    : "F8",
          "R~a~teio     [F10]" : " Rateio Pl.Contas/Ct.Custo"         : "F10",
          "~C~ancelar"        : " Cancelar a Opera‡„o"                : "CANCELAR"
         EndMenu
          To MenuVar
         echo off

         If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Loop
             Else RetVal=MenuVar
         EndIf
    EndIf

    Switch
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True

           Moveto [Valor do Documento]
           TOTVALOR = ImageCSum()
           If TOTVALOR>0 Or Saldo_Atualizado
              Then Moveto "Titulos"
                   [Valor do Documento]=TOTVALOR
                   Calc_Baixas()
                   Moveto "TitNota"
                   Saldo_Atualizado=True
           EndIf
           Moveto [Sequencia da Nota]

           PAGINA("TitNota","MR")
           If EDITAR="S"
              Then CHAVEN=0
                   NLANC  =[Numero do Lancamento]
                   NITEM_N  =[Sequencia da Nota]
                   Controla_EdicaoN()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")And Checa_Supervisor()
                              Then Del
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           Endif
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="F6":
         CHAVEN=9
         DIGITENS=2
         Del
         Return
    Case Retval="F8":
         CHAVEN=9
         DIGITENS=1
         Del
         Return
    Case RetVal="F10":
         CHAVEN=9
         DIGITENS=4
         Del
         Return      
    Case Retval="ESC":
         CHAVEN=9
         DIGITENS=0
         DIGITAC =False
         Del
         Return
    Case Retval="PGDN":
         CHAVEN=9
         DIGITENS=0
         DIGITAC =False
         Del
         Return
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM_N,True)
            Then Del
                 QuitLoop
         EndIf
         NITEM_N=[]
         Del
         Locate NLANC,NITEM_N
         If Retval
            Then CHAVEN=0
            Else CHAVEN=1
                 End Down
                 [Numero do Lancamento]=NLANC
                 [Sequencia da Nota   ]=NITEM_N
                 UnLockRecord
                 Locate NLANC,NITEM_N
         EndIf
         Resynckey
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc
;*******************************************************************************
;* Rotina para Digitacao do Rateio                                             *
;*******************************************************************************
Proc DIGITAR()

If CHAVER=0
   Then Moveto [Codigo Plano_Conta]
   Else 
        Moveto [Codigo Plano_Conta]
EndIf

While True

      TECLA=" Esc=Retornar  "

      If Field()="Codigo do Documento"
         Then TECLA=TECLA+"F1=Tabelas  "
      EndIf
      If CHAVER=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf
      MSG=Field()

      Prompt TECLA

      Wait Field
           Message MSG
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35"

      Switch
      Case RetVal="F1":
           If Field()="Codigo Plano_Conta"
              Then CONSULTAF1()
           EndIf
           If Field()="Codigo CCusto"
              Then CONSULTAF1()
           EndIf          
      Case Retval="ESC":
           Switch
           Case Field()="Codigo Plano_Conta":
                If QuerDesfazer("")
                   Then If CHAVER=1
                           Then Del
                           Else Undo
                        EndIf
                        QuitLoop
                EndIf
           Case Field()="Porcentagem":
                Moveto [Codigo CCusto]
           Case Field()="Codigo CCusto":
                Moveto [Codigo Plano_Conta]     
           OtherWise:
                Left
           EndSwitch
      Case Retval="ENTER":
           Switch
          Case Field()="Codigo Plano_Conta":
            CodPlacon = [Codigo Plano_Conta]
            If Not IsBlank(CodPlacon)
               Then Ativa_Lookup()
                    Moveto [Codigo Plano_Conta]
                    Locate CodPlacon
                    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 Plano de Contas a classificacao //"
                                    Msg = Msg + "do Tipo de Conta."
                                    Mensagem(Msg)
                                    KeyPress "Esc"
                                    Loop
                               Else DescPlacon = LTrim([Descricao Plano_Conta])
                                    KeyPress "Esc"
                            Endif
                       Else Mensagem("Conta n„o Cadastrada !")
                            KeyPress "Esc"
                            DescPlacon = ""
                            Loop
                    EndIf
                    If SubStr([],1,1)="1"
                       Then Mensagem("Conta n„o confere com tipo de movimento !")
                            Loop
                    EndIf
               Else DescPlacon = ""
            Endif
            [Descricao Plano_Conta]= DescPlacon
            KeyPress "Esc"                       
            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 = LTrim([Descricao CCusto])
                                    KeyPress "Esc"
                            Endif
                       Else Mensagem("Centro de Custo n„o Cadastrado !")
                            KeyPress "Esc"
                            Loop
                    EndIf
               Else DescCCusto = ""
            EndIf
            [Descricao CCusto] = DescCCusto
            If IsBlank ([Codigo Plano_Conta])and IsBlank ([Codigo CCusto])
               Then Loop
            else             
            moveto [Porcentagem] 
            EndIf            
      Case Field()="Porcentagem":           
           [Valor]= Round(([Titulos->Valor do Documento]*[Porcentagem])/100,2)
           moveto [Valor]
      
      Case Field()="Valor":
           QuitLoop                    
           OtherWise:
           Right
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVER=0
              Then If QuerExcluir("") 
                      Then Del
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile
EndProc
;*******************************************************************************
;* Rotina para Digitacao das Notinhas                                          *
;*******************************************************************************
Proc DIGITAN()

If CHAVEN=0
   Then Moveto [Valor do Documento]
   Else [Data de Emissao   ]=Today()
        Moveto [Codigo do Documento]
EndIf

While True

      TECLA=" Esc=Retornar  "

      If Field()="Codigo do Documento"
         Then TECLA=TECLA+"F1=Tabelas  "
      EndIf
      If CHAVEN=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf
      MSG=Field()

      Prompt TECLA

      Wait Field
           Message MSG
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35"

      Switch
      Case RetVal="F1":
           If Field()="Codigo do Documento"
              Then CONSULTAF1()
           EndIf
      Case Retval="ESC":
           Switch
           Case Field()="Codigo do Documento":
                If QuerDesfazer("")
                   Then If CHAVEN=1
                           Then Del
                           Else Undo
                        EndIf
                        QuitLoop
                EndIf
           Case Field()="Data de Emissao":
                Moveto [Codigo do Documento]
           OtherWise:
                Left
           EndSwitch
      Case Retval="ENTER":
           Switch
           Case Field()="Codigo do Documento":
                If IsBlank([]) Then Loop EndIf
                Moveto [Numero do Documento]
           Case Field()="Numero do Documento":
                If IsBlank([]) Then Loop EndIf
                Right
           Case Field()="Data de Emissao":
                If IsBlank([])
                   Then []=Today()
                EndIf
                Right
           Case Field()="Valor do Documento":
                QuitLoop
           OtherWise:
                Right
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEN=0
              Then If QuerExcluir("") And Checa_Supervisor()
                      Then Del
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile
EndProc



;*******************************************************************************
;* Rotina para Localizar Registro Baixa                                        *
;*******************************************************************************
Proc CHAVEI()
Exclusao_Cabeca=False
While True
  Moveto [Sequencia da Baixa]
  End
  NITEM = [Sequencia da Baixa]
  Down
  Moveto [Sequencia da Baixa]

  Opcao_Ver=False

  SetaCorRegistro("Editar")
  While true
    TEXTO=" Esc=Retornar  Alt+F=Fun‡”es  PgDn=Finalizar  "

    Prompt TEXTO

    Wait Field
         Until "ESC","ENTER","F7","HOME","UP","PGUP","F6","F10","PGDN",
               "F4","F9","F3","F5",-33,-115,-116,-75,-77

    If RetVal=-75  Or RetVal=-77  Or
       RetVal=-115 Or RetVal=-116
       Then Tecla_Funcao=Retval
            CHAVEI=9
            Del
            Return
    EndIf

    If Retval=-33
       Then
         ShowPopup " Fun‡”es " CENTERED
          "~V~er Ficha       [F3]" : " Ver modo Ficha                    " : "F3",
          "Copiar ~P~arcelas [F4]" : " Copiar Parcelas                   " : "F4",
          "~I~mprimir        [F5]" : " Imprimir Controle de Pagamento    " : "F5",
          "C~h~eques         [F6]" : " Relaciona Cheques/Terceiros       " : "F6",
          "~N~otas           [F9]" : " Relacionar Notinhas p/ este T¡tulo" : "F9",
          "R~a~teio          [F10]" : " Rateio Pl.Contas/Ct.Custo"         : "F10",
          "~C~ancelar"             : " Cancelar a Opera‡„o"                : "CANCELAR"
         EndMenu
          To MenuVar
         echo off

         If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Loop
             Else RetVal=MenuVar
         EndIf
    EndIf

    Switch
    Case RetVal="F6":
         CHAVEI=9
         DIGITENS=2
         Del
         Return
     Case RetVal="F10":
         CHAVEI=9
         DIGITENS=4
         Del
         Return
    Case RetVal="F9":
         CHAVEI=9
         DIGITENS=3
         Del
         Return
    Case Retval="F5":
         Del
         Play "Rp_0000"

         CHAVEI=9
         DIGITENS=0
         DIGITAC =False
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           PAGINA("TitBaixa","MR")
           NLANC=[Numero do Lancamento]
           NITEM=[Sequencia da Baixa  ]
           Switch
             Case EDITAR="S":
                  If [Tipo da Baixa]="CANCELADO"
                     Then Mensagem("Baixa por Cancelamento!")
                          UnLockRecord
                     Else If Checa_Controle([Numero_Controle_Dia])
                             Then CHAVEI=0
                                  Controla_EdicaoI()
                             Else UnLockRecord
                          EndIf
                  EndIf
             Case EXCLUIR="S":
                  If QuerExcluir("") And Checa_Supervisor()
                     Then VROLD=[Valor do Pagamento  ]
                          JSOLD=[Valor do Juros      ]
                          DSOLD=[Valor do Desconto   ]
                          CHAVEI=8
                          If CONTA()
                             Then TIT()
                                  Del
                          EndIf
                     Else UnLockRecord
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           SetaPosForm()
         EndWhile
         QuitLoop
    Case RetVal="F3":
         Del
         Moveto [Sequencia da Baixa]
         If RecordStatus("New")
            Then MENSAGEM("Sem Baixa p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         NITEM=[Sequencia da Baixa]
         Inicia_Registro()
         Digita_Baixa()
         QuitLoop
    Case RetVal="F4" And Field()="Sequencia da Baixa" :
         If CHAVEC=1 Or
           (CHAVEC=0 And [Titulos->Saldo do Documento]>0)
          Then If Inicial() Then
                If DynArraySize(Array_Vencimentos)>0
                 Then  Moveto "Titulos"
                       CopyToArray REG_VENC
                       
                       DynArray Array_Rateio[]
                         moveto "TitRat"
                         n=0
                         Scan
                           If not isblank([Sequencia]) Then
                            n=n+1
                            Array_Rateio[n]=
                            Format("W5,AL",[TitRat->Sequencia])+" "+
                            Format("W13,AL",([TitRat->Codigo Plano_Conta]))+" "+
                            Format("W7,AL",([TitRat->Codigo CCusto]))+" "+
                            Format("W5,AL",[TitRat->Porcentagem])+" "+
                            Format("W12.2,AL",[TitRat->Valor])
                           EndIf
                         EndScan
                                              
                       Moveto "Titulos"
                       For i From 1 To DynArraySize(Array_Vencimentos)
                         If i>1
                            Then While True
                                   Moveto [Numero do Lancamento]
                                   End
                                   NLANC=AlinhM(StrVal(NumVal([Numero do Lancamento])+1),6)
                                   Pgdn PgDn PgDn PgDn
                                   Moveto [Numero do Lancamento]
                                   [Numero do Lancamento]=NLANC

                                   LockRecord
                                   If RetVal
                                      Then REG_VENC["Numero do Lancamento"]=NLANC
                                           REG_VENC["Saldo do Documento"  ]=REG_VENC["Valor do Documento"]
                                           CopyFromArray REG_VENC
                                           QuitLoop
                                      Else Del
                                   EndIf
                               EndWhile
                         EndIf
                         [Numero do Documento]=RTrim(SubStr(Array_Vencimentos[i],4,10))
                         [Data de Emissao    ]=DateVal(LTrim(SubStr(Array_Vencimentos[i],15,2))+"."+
                                                             SubStr(Array_Vencimentos[i],18,2)+"."+
                                                             SubStr(Array_Vencimentos[i],21,4))
                         [Data de Vencimento ]=DateVal(LTrim(SubStr(Array_Vencimentos[i],26,2))+"."+
                                                             SubStr(Array_Vencimentos[i],29,2)+"."+
                                                             SubStr(Array_Vencimentos[i],32,4))
                         [Data Competencia   ]=DateVal(LTrim(SubStr(Array_Vencimentos[i],37,2))+"."+
                                                             SubStr(Array_Vencimentos[i],40,2)+"."+
                                                             SubStr(Array_Vencimentos[i],43,4))
                         [Valor do Documento ]=NumVal(SubStr(Array_Vencimentos[i],61,12))

                         If i>1
                            Then [Saldo do Documento ]=[Valor do Documento]
                         EndIf
                         [Data a Pagar       ]=[Data de Vencimento]
                         lc=[Tipo do Lancamento]
                         [Tipo do Lancamento]=""
                         [Tipo do Lancamento]=lc

                         While True
                               NDIAS=0
                               If Dow([Data a Pagar])="Sat"
                                  Then NDIAS=2
                                  Else If Dow([Data a Pagar])="Sun"
                                          Then NDIAS=1
                                       EndIf
                               EndIf
                               DIA = [Data a Pagar]
                               Moveto "\\Sistemas\\Cadastro\\Feriados"
                               Locate DIA
                               If Retval
                                  Then NDIAS=[Dias a Pagar]
                               EndIf
                               Moveto "Titulos"
                               [Data a Pagar]=[Data a Pagar]+NDIAS
                               If NDIAS=0 or Isblank(NDIAS)
                                  Then QuitLoop
                               EndIf
                         EndWhile
                         UnLockRecord
                           ;99999 9999999999999 9999999 99999 999999999999.99
                           ;12345678901234567890123456789012345678901234567890123456
                       
                       
                       
                       If i>1
                              Then If n>0
                                      Then moveto "TitRat"
                                           For ii From 1 To DynArraySize(Array_Rateio)
                                               end down down
                                               [Numero do Lancamento ]=NLanc
                                               [Sequencia            ]=NumVal(SubStr(Array_Rateio[ii],1,5))
                                               [Codigo Plano_Conta   ]=RTrim(SubStr(Array_Rateio[ii],7,13))
                                               [Codigo CCusto        ]=RTrim(SubStr(Array_Rateio[ii],21,7))
                                               [Porcentagem          ]=NumVal(SubStr(Array_Rateio[ii],29,5))
                                               [Valor                ]=NumVal(SubStr(Array_Rateio[ii],35,15))
                                               [Descricao Plano_Conta]=LTrim([Descricao Plano_Conta])
                                               [Descricao CCusto     ]=LTrim([Descricao CCusto])
                                           EndFor
                                           moveto "Titulos"
                                    Endif
                           Endif  
                       EndFor
                       DIGITENS=0
                       DIGITAC =False
                       CHAVEI=9
                       Return
                EndIf
               EndIf
         EndIf
    Case Retval="ESC":
         CHAVEI=9
         DIGITENS=0
         DIGITAC =False
         Del
         Return
    Case Retval="PGDN":
         CHAVEI=9
         DIGITENS=0
         DIGITAC =False
         Del
         Return
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         NITEM=[]
         Del
         Locate NLANC,NITEM
         If Retval
            Then CHAVEI=0
            Else CHAVEI=1
                 End Down
                 [Numero do Lancamento]=NLANC
                 [Sequencia da Baixa  ]=NITEM
                 UnLockRecord
                 Locate NLANC,NITEM
         EndIf
         If Not IsLockRecord()
            Then If (CHAVEI=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                    (CHAVEI=0 And Checa_Controle([Numero_Controle_Dia]))
                    Then Return
                 EndIf
         EndIf
         If CHAVEI=1
            Then Del
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc ; (ChaveI)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Sequencia da Baixa]
Locate NLANC,NITEM
CopyToArray RegItem

If CHAVEI=1
   Then [Data do Pagamento  ]=Today()
        [Codigo da Conta    ]=[Titulos->Codigo da Conta]
        [Codigo CCusto      ]=[Titulos->Codigo CCusto     ]
        [Codigo Plano_Conta ]=[Titulos->Codigo Plano_Conta]
        [Tipo de Lancamento ]=[Titulos->Tipo do Lancamento]

        Switch
          Case [Tipo da Conta]="C":
            If [Titulos->Tipo do Pagamento]="DA" Or
               [Titulos->Tipo do Pagamento]="PE" Or
               [Titulos->Tipo do Pagamento]="TE"
               Then [Tipo de Operacao]="14"
            EndIf
            If [Titulos->Tipo do Pagamento]="CH" Or
               [Titulos->Tipo do Pagamento]="CP"
               Then [Tipo de Operacao]="05"
            EndIf
          Case [Tipo da Conta]="X":
            [Tipo de Operacao]="06"
        EndSwitch

        HIOLD=[Codigo do Historico]
        [Codigo do Historico]=""
        [Codigo do Historico]=HIOLD
        HIOLD=""

        If IsBlank([Codigo do Historico])
           Then [Descricao do Historico]="PAG. "+[Titulos->Tipo do Documento]+"/"+[Titulos->Numero do Documento]
        EndIf

   Else HIOLD =[Codigo do Historico  ]
EndIf

DTOLD =[Data do Pagamento        ]
VROLD =[Valor do Pagamento       ]
JSOLD =[Valor do Juros           ]
DSOLD =[Valor do Desconto        ]
CCOLD =[Codigo da Conta          ]
NCHOLD=[Numero do Cheque         ]
DCHOLD=[Data Cheque Descontado   ]
LCOLD =[Lancamento Conta Corrente]

Registro_Baixa("Ler")
EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Lancamento a Vista                                              *
;*******************************************************************************
Proc Digita_Baixa()

If CHAVEI=1
   Then NC_CDTDESC=42
   Else NC_CDTDESC=80
EndIf

Showdialog "Dados da Baixa [    ]" Proc "Baixa_Dialog"
  Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","HOME","END","PGDN","PGUP"
    @ 06,3 height 17 width 73

  Accept @ -01,41 Width 4 "A2" Tag "I_Seq" To VSD_I_SEQ

  Label  @ 00,00 "Dt Pagto" For "I_DtPagto"
  Accept @ 01,01 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_DtPagto" to VSD_I_DtPagto

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

  Label  @ 00,28 "Vr Pago" For "I_Vr_Pagto"
  Accept @ 01,29 Width 13 "$" picture "#*#.[##]" Tag "I_Vr_Pagto" to VSD_I_Vr_Pagto

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

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

  Label  @ 02,00 "Conta" For "I_Conta"
  Accept @ 03,01 Width 07 "A4" picture "#*#" Tag "I_Conta" to VSD_I_Conta
  Accept @ 03,08 Width 34 "A30" picture "!*!" Tag "I_Descricao_Conta" to VSD_I_Descricao_Conta

  Label  @ 02,60 "NDA" For "I_NDA"
  Accept @ 03,61 Width 09 "N" picture "#*#" Tag "I_NDA" to VSD_I_NDA

  Label  @ 04,00 "Tp Opera‡„o" For "I_Tpoper"
  Accept @ 05,01 Width 05 "A2" picture "#*#" Tag "I_Tpoper" to VSD_I_Tpoper
  Accept @ 05,06 Width 22 "A20" picture "!*!" Tag "I_Descricao_Tpoper" to VSD_I_Descricao_Tpoper

  Label  @ 04,28 "Tp Lan‡amento" For "I_Tplanc"
  Accept @ 05,29 Width 04 "A1" picture "&" Tag "I_Tplanc" to VSD_I_Tplanc
  Accept @ 05,33 Width 23 "A20" picture "!*!" Tag "I_Descricao_Tplanc" to VSD_I_Descricao_Tplanc

  Label  @ 06,00 "N§ CH/Docto" For "I_NoCheque"
  Accept @ 07,01 Width 13 "A11" picture "!*!" Tag "I_NoCheque" to VSD_I_NoCheque

  Label  @ 06,14 "Serie" For "I_SrCheq"
  Accept @ 07,15 Width 09 "A6" picture "!*!" Tag "I_SrCheq" to VSD_I_SrCheq

  Label  @ 06,24 "Dt Pre-Datado" For "I_DtCPrDat"
  Accept @ 07,25 Width 04 "A1" picture "S,N" Tag "I_ChPreDat" to VSD_I_ChPreDat
  Accept @ 07,29 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_DtCPrDat" to VSD_I_DtCPrDat

  Label  @ 06,NC_CDTDESC "Dt Descontado" For "I_DtDesc"
  Accept @ 07,NC_CDTDESC+1 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_DtDesc" to VSD_I_DtDesc

  Label  @ 08,00 "Plano Contas" For "I_PlContas"
  Accept @ 09,01 Width 16 "A13" picture "!*!" Tag "I_PlContas" to VSD_I_PlContas
  Accept @ 09,17 Width 53 "A40" picture "!*!" Tag "I_Descricao_PlContas" to VSD_I_Descricao_PlContas

  Label  @ 10,00 "Centro Custo" For "I_CCusto"
  Accept @ 11,01 Width 10 "A7" picture "###.###" Tag "I_CCusto" to VSD_I_CCusto
  Accept @ 11,11 Width 31 "A25" picture "!*!" Tag "I_Descricao_CCusto" to VSD_I_Descricao_CCusto

  Label  @ 10,55 "Lan‡to Cxa/Bco" For "I_LCXBC"
  Accept @ 11,61 Width 09 "A6" picture "#*#" Tag "I_LCXBC" to VSD_I_LCXBC

  Label  @ 12,00 "Historico" For "I_Codigo_Hist"
  Accept @ 13,01 Width 07 "A4" picture "#*#" Tag "I_Codigo_Hist" to VSD_I_Codigo_Hist
  Accept @ 13,08 Width 62 "A70" picture "!*!" Tag "I_Descri_Hist" to VSD_I_Descri_Hist

  @ 14,00 ?? "[Usu rio: "+VSDGU_USUARIO+" "+Format("D13",VSDGU_DATA)+" "+VSDGU_HORA+" "+VSDGU_CONTROLE
  @ 14,70 ?? "]"
  PaintCanvas Attribute 10 14, 01, 14, 69

Enddialog
Mouse Show
EndProc  ; (Digita_Baixa)

;*******************************************************************************
;* Rotina para Gravacao/Leitura Pagto a Vista                                  *
;*******************************************************************************
Proc Registro_Baixa(Funcao_Registro)
Private Funcao_Registro

Switch
  Case Funcao_Registro="Gravar":
       [Data do Pagamento     ] = VSD_I_DtPagto
       [Valor do Pagamento    ] = VSD_I_Vr_Pagto
       [Tipo da Baixa         ] = VSD_I_TpBaixa
       [Valor do Desconto     ] = VSD_I_Vr_Descto
       [Valor do Juros        ] = VSD_I_Vr_Juros
       [Codigo da Conta       ] = VSD_I_Conta
       [Codigo da Empresa     ] = [Titulos->Codigo da Empresa]
       [Numero do Cheque      ] = VSD_I_NoCheque
       [Serie do Cheque       ] = VSD_I_SrCheq
       [Cheque Pre-Datado     ] = VSD_I_ChPreDat
       [Data Cheque Pre-Datado] = VSD_I_DtCPrDat
       If CHAVEI=1
          Then [Data Cheque Descontado] = VSD_I_DtDesc
       EndIf
       [Codigo Plano_Conta    ] = VSD_I_PlContas
;;;;;;;[Descricao Plano_Conta ] = VSD_I_Descricao_PlContas
       [Codigo CCusto         ] = VSD_I_CCusto
;;;;;;;[Descricao CCusto      ] = VSD_I_Descricao_CCusto
       [Codigo do Historico   ] = VSD_I_Codigo_Hist
       [Descricao do Historico] = VSD_I_Descri_Hist
       [Tipo de Operacao      ] = VSD_I_Tpoper
       [Tipo de Lancamento    ] = VSD_I_Tplanc
       VSD_I_NDA                = BlankNum()

       If CHAVEI=1
          Then Controle_Dia()
       EndIf
  Case Funcao_Registro="Ler":
       VSD_I_SEQ                = [Sequencia da Baixa    ]
       VSD_I_LCXBC              = [Lancamento Conta Corrente]
       VSD_I_DtPagto            = [Data do Pagamento     ]
       VSD_I_TpBaixa            = [Tipo da Baixa         ]
       VSD_I_Vr_Pagto           = [Valor do Pagamento    ]
       VSD_I_Vr_Juros           = [Valor do Juros        ]
       VSD_I_Vr_Descto          = [Valor do Desconto     ]
       VSD_I_Conta              = [Codigo da Conta       ]
       VSD_I_Descricao_Conta    = [Descricao da Conta    ]
       VSD_I_NoCheque           = [Numero do Cheque      ]
       VSD_I_SrCheq             = [Serie do Cheque       ]
       VSD_I_ChPreDat           = [Cheque Pre-Datado     ]
       VSD_I_DtCPrDat           = [Data Cheque Pre-Datado]
       If CHAVEI=1
          Then VSD_I_DtDesc     = [Data Cheque Descontado]
          Else VSD_I_DtDesc     = BlankDate()
       EndIf
       VSD_I_PlContas           = [Codigo Plano_Conta    ]
       VSD_I_Descricao_PlContas = LTrim([Descricao Plano_Conta ])
       VSD_I_CCusto             = [Codigo CCusto         ]
       VSD_I_Descricao_CCusto   = LTrim([Descricao CCusto      ])
       VSD_I_Codigo_Hist        = [Codigo do Historico   ]
       VSD_I_Descri_Hist        = [Descricao do Historico]

       VSD_I_Tpoper             = [Tipo de Operacao      ]
       VSD_I_Descricao_Tpoper   = [Descricao Operacao    ]
       VSD_I_Tplanc             = [Tipo de Lancamento    ]
       VSD_I_Descricao_Tplanc   = [Descricao do Lancamento]
       VSD_I_NDA                = VSD_I_DtPagto-[Titulos->Data de Vencimento]
       If VSD_I_NDA<=0 Then  VSD_I_NDA=BlankNum() EndIf

       VSDGU_USUARIO = [Codigo_Usuario     ]
       VSDGU_DATA    = [Data_Inclusao      ]
       VSDGU_HORA    = [Hora_Inclusao      ]
       VSDGU_CONTROLE= [Numero_Controle_Dia]


EndSwitch
EndProc  ; (Registro_Baixa)

;*******************************************************************************
;* Rotina de Digitacao Dados a Vista                                           *
;*******************************************************************************
Proc Baixa_Dialog(Disparo,Campo,Evento,Elemento)

Private JANELA, WinArray5
Temp=True
TECLA    =" Esc=Retornar  "
MSG_CAMPO=""

If INICIO_DIALOG
   Then If CHAVEI=0
           Then Campo="I_Vr_Pagto"
           Else Campo="I_DtPagto"
        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 NITEM=[Sequencia da Baixa]
                        Inicia_Registro()
                EndIf
            EndSwitch
       Case Evento["KeyCode"] = 9:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEI=0
               Then If QuerExcluir("") And Checa_Supervisor()
                       Then CopyFromArray RegItem
                            CHAVEI=8
                            If CONTA()
                               Then TIT()
                                    Del
                            EndIf
                            CancelDialog
                    Endif
            EndIf
       Case Evento["KeyCode"] = -63:
            Edita_Memo("Observacoes",16,03,07,73,"Observa‡”es")            
       Case Evento["KeyCode"] = -59:
            Temp=False
            If Campo="I_PlContas" Or
               Campo="I_CCusto" Or
               Campo="I_Codigo_Hist"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="I_Conta"       Then Moveto [Codigo da Conta    ] EndIf
                    If Campo="I_CCusto"      Then Moveto [Codigo CCusto      ] EndIf
                    If Campo="I_PlContas"    Then Moveto [Codigo Plano_Conta ] EndIf
                    If Campo="I_Codigo_Hist" Then Moveto [Codigo do Historico] EndIf
                    ConsultaF1()

                    Window Select JANELA
                    WinArray5["FLOATING"]=True
                    Window SetAttributes JANELA From WinArray5

                    echo Normal
                    echo off

                    If Campo="I_Conta"
                       Then VSD_I_Conta          =[Codigo da Conta   ]
                            VSD_I_Descricao_Conta=[Descricao da Conta]
                            Campo="I_Conta"
                    EndIf
                    If Campo="I_PlContas"
                       Then VSD_I_PlContas          =[Codigo Plano_Conta   ]
                            VSD_I_Descricao_PlContas=LTrim([Descricao Plano_Conta])
                            VSD_I_Codigo_Hist        = [Codigo do Historico   ]
                            Campo="I_PlContas"
                   EndIf
                   If Campo="I_CCusto"
                       Then VSD_I_CCusto          =[Codigo CCusto   ]
                            VSD_I_Descricao_CCusto=LTrim([Descricao CCusto])
                            Campo="I_CCusto"
                   EndIf
                   If Campo="I_Codigo_Hist"
                      Then VSD_I_Codigo_Hist     =[Codigo do Historico]
                           VSD_I_Descri_Hist     =[Descricao do Historico]
                           Campo="I_Codigo_Hist"
                   EndIf
                   Moveto "TitBaixa"
           EndIf

           If Campo="I_Conta"
              Then If Seleciona_Opcoes("Codigo da Conta","CR",11,4)
                      Then VSD_I_Conta          =[Codigo da Conta   ]
                           VSD_I_Descricao_Conta=[Descricao da Conta]
                   EndIf
                   Campo="I_Conta"
           Endif

           If Campo="I_Tpoper"
              Then If Seleciona_Opcoes("Tipo de Opera‡„o","CR",13,4)
                      Then VSD_I_Tpoper          =[Tipo de Operacao]
                           VSD_I_Descricao_Tpoper=[Descricao Operacao]
                   EndIf
                   Campo="I_Tpoper"
           Endif

           If Campo="I_Tplanc"
              Then If Seleciona_Opcoes("Tipo de Lan‡amento","CR",13,33)
                      Then VSD_I_Tplanc          =[Tipo de Lancamento]
                           VSD_I_Descricao_Tplanc=[Descricao do Lancamento]
                   EndIf
                   Campo="I_Tplanc"
           Endif

      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="I_DtPagto"            :
                  If QuerDesfazer("")
                     Then Del
                          CancelDialog
                  EndIf
             Case Campo="I_TpBaixa"           : Campo="I_DtPagto"
             Case Campo="I_Vr_Pagto"          :
                  If CHAVEI=0
                     Then If QuerDesfazer("")
                             Then CopyFromArray RegItem
                                  CancelDialog
                          EndIf
                     Else Campo="I_TpBaixa"
                  EndIf
             Case Campo="I_Vr_Juros"           : Campo="I_Vr_Pagto"
             Case Campo="I_Vr_Descto"          : Campo="I_Vr_Juros"
             Case Campo="I_Conta"              : Campo="I_Vr_Descto"

             Case Campo="I_Tpoper"             :
                  If CHAVEI=0
                     Then Campo="I_Vr_Descto"
                     Else Campo="I_Conta"
                          Monta_Opcoes("Codigo da Conta","")
                  EndIf
             Case Campo="I_Tplanc"             : Campo="I_Tpoper"
                  Monta_Opcoes("Tipo de Opera‡„o",VSD_I_Conta)
             Case Campo="I_NoCheque"           : Campo="I_Tplanc"
                  Monta_Opcoes("Tipo de Lan‡amento",VSD_I_Tpoper)

             Case Campo="I_SrCheq"             : Campo="I_NoCheque"
             Case Campo="I_ChPreDat"           : Campo="I_SrCheq"
             Case Campo="I_DtCPrDat"           : Campo="I_ChPreDat"
             Case Campo="I_DtDesc"             :
                  If VSD_I_ChPreDat="S"
                     Then Campo="I_DtCPrDat"
                     Else Campo="I_ChPreDat"
                  EndIf
             Case Campo="I_PlContas"           :
                  If [Tipo da Conta]<>"C"
                     Then Campo="I_Tplanc"
                     Else Campo="I_NoCheque"
                  EndIf
             Case Campo="I_CCusto"             : Campo="I_PlContas"
             Case Campo="I_Codigo_Hist"        : Campo="I_CCusto"
             Case Campo="I_Descri_Hist"        : Campo="I_Codigo_Hist"
           EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="I_DtPagto"            : Campo="I_TpBaixa"
									VSD_I_DtPagto=ControlValue("I_DtPagto")

                  If Not IntervaloData(VSD_I_DtPagto)
                     Then Campo="I_DtPagto"
                  EndIf

                  If VSD_I_DtPagto < [Titulos->Data de Emissao]
                     Then MENSAGEM("Data de pagamento menor que a data de emiss„o")
                          Campo="I_DtPagto"
                  EndIf
                  If CHAVEI=1
                     Then
                          If VSD_I_DtPagto>[Titulos->Data de Vencimento]
                             Then NDA=VSD_I_DtPagto-[Titulos->Data de Vencimento]
                                  TXM=[Titulos->Multa]
                             Else NDA=0
                                  TXM=0
                          EndIf

                          VSD_I_NDA=NDA
                          If VSD_I_NDA<=0 Then  VSD_I_NDA=BlankNum() EndIf
                          If [Titulos->Taxa de Juros]>0
                             Then TXJ=([Titulos->Taxa de Juros]/[Titulos->NDias Taxa de Juros])*NDA
                                  VRJUROS=(([Titulos->Saldo do Documento]*TXJ)/100)+([Titulos->Saldo do Documento]*TXM/100)
                             Else VRJUROS=(([Titulos->Valor de Juros]/[Titulos->NDias Taxa de Juros])*NDA)
                                  VRJUROS=VRJUROS+(([Titulos->Saldo do Documento]*TXM)/100)
                          EndIf

                          If VSD_I_DtPagto<=[Titulos->Data Limite Desconto]
                             Then VSD_I_Vr_Pagto =[Titulos->Saldo do Documento]-
                                                  [Titulos->Valor do Desconto ]
                                  VSD_I_Vr_Descto=[Titulos->Valor do Desconto ]
                             Else VSD_I_Vr_Pagto =[Titulos->Saldo do Documento]
                                  VSD_I_Vr_Descto=BlankNum()
                          EndIf
                          If VRJUROS>0
                             Then VSD_I_VR_Juros =VRJUROS
                             Else VSD_I_VR_Juros =BlankNum()
                          EndIf
                          VSD_I_Vr_Pagto  =Round(VSD_I_Vr_Pagto+VSD_I_VR_Juros,2)
                  EndIf
             Case Campo="I_TpBaixa"           : Campo="I_Vr_Pagto"
                  VSD_I_TpBaixa=ControlValue("I_TpBaixa")
                  If IsBlank(VSD_I_TpBaixa)
                     Then VSD_I_TpBaixa="N"
                  EndIf
                  Switch
                    Case VSD_I_TpBaixa="N": VSD_I_TpBaixa="NORMAL"
                    Case VSD_I_TpBaixa="D": VSD_I_TpBaixa="DEVOLUCAO"
                    Case VSD_I_TpBaixa="C": VSD_I_TpBaixa="CANCELADO"
                  EndSwitch
                  If VSD_I_TpBaixa<>"NORMAL"
                     Then If Edita_Memo("Observacoes",16,03,07,73,"Observa‡”es")
                             Then Campo="I_TpBaixa"
                             Else If VSD_I_TpBaixa="CANCELADO"
                                     Then VSD_I_Codigo_Hist=""
                                          VSD_I_Descri_Hist="CANCELADO "+[Titulos->Tipo do Documento]+"/"+[Titulos->Numero do Documento]
                                          Registro_Baixa("Gravar")
                                          If CONTA()
                                             Then TIT()
                                                  AcceptDialog
                                          EndIf
                                     Else VSD_I_Codigo_Hist=""
                                          VSD_I_Descri_Hist="PAG. "+[Titulos->Tipo do Documento]+"/"+[Titulos->Numero do Documento]
                                  EndIf
                          EndIf  
                  EndIf
             Case Campo="I_Vr_Pagto"           : Campo="I_Vr_Juros"
                  VSD_I_Vr_Pagto=ControlValue("I_Vr_Pagto")
                  If VSD_I_Vr_Pagto<=0
                     Then Campo="I_Vr_Pagto"
                  EndIf
             Case Campo="I_Vr_Juros"           : Campo="I_Vr_Descto"
                  VSD_I_Vr_Juros=ControlValue("I_Vr_Juros")
                  If VSD_I_Vr_Juros<0 And
                     Not IsBlank(VSD_I_Vr_Juros)
                     Then Campo="I_Vr_Juros"
                  EndIf

             Case Campo="I_Vr_Descto"          :
                  VSD_I_Vr_Descto=ControlValue("I_Vr_Descto")
                  If VSD_I_Vr_Descto<0 And
                     Not IsBlank(VSD_I_Vr_Descto)
                     Then Campo="I_Vr_Descto"
                     Else If CHAVEI=0
                             Then Campo="I_Tpoper"
                                  Monta_Opcoes("Tipo de Opera‡„o",VSD_I_Conta)
                             Else Campo="I_Conta"
                                  Monta_Opcoes("Codigo da Conta","")
                          EndIf
                  EndIf
             Case Campo="I_Conta"              :
                  VSD_I_Conta=AlinhM(ControlValue("I_Conta"),4)
                  If Checa_Opcoes("Codigo da Conta",VSD_I_Conta)
                     Then Campo="I_Tpoper"
                          VSD_I_Conta          =Registro_F1["Codigo da Conta"]
                          VSD_I_Descricao_Conta=Registro_F1["Descricao da Conta"]
                          [Codigo da Conta     ]=VSD_I_Conta
                          If [Tipo da Conta]<>"C"
                             Then VSD_I_NoCheque=""
                                  VSD_I_SrCheq  =""
                                  VSD_I_ChPreDat=""
                                  VSD_I_DtCPrDat=BlankDate()
                                  VSD_I_DtDesc  =BlankDate()
                          EndIf
                          Monta_Opcoes("Tipo de Opera‡„o",VSD_I_Conta)
                     Else Mensagem("Conta n„o cadastrada !")
                          VSD_I_Descricao_Conta=""
									EndIf
             Case Campo="I_Tpoper"             :
                  VSD_I_Tpoper=AlinhM(ControlValue("I_Tpoper"),2)
                  If Checa_Opcoes("Tipo de Opera‡„o",VSD_I_Tpoper)
                     Then Campo="I_Tplanc"
                          VSD_I_Tpoper          =Registro_F1["Tipo de Operacao"]
                          VSD_I_Descricao_Tpoper=Registro_F1["Descricao Operacao"]
                          [Tipo de Operacao    ]=VSD_I_Tpoper

                          Monta_Opcoes("Tipo de Lan‡amento",VSD_I_Tpoper)
                     Else Mensagem("Tipo Opera‡„o n„o cadastrada !")
                          VSD_I_Descricao_Tpoper=""
                  EndIf
             Case Campo="I_Tplanc"             :
                  VSD_I_Tplanc=ControlValue("I_Tplanc")
                  If Checa_Opcoes("Tipo de Lan‡amento",VSD_I_Tplanc)
                     Then Campo="I_NoCheque"
                          VSD_I_Tplanc          =Registro_F1["Tipo de Lancamento"]
                          VSD_I_Descricao_Tplanc=Registro_F1["Descricao do Lancamento"]
                          [Tipo de Lancamento  ]=VSD_I_Tplanc
                          If [Tipo da Conta]<>"C"
                             Then Campo="I_PlContas"
                             Else Campo="I_NoCheque"
                          EndIf
                     Else Mensagem("Tipo Lan‡amento n„o cadastrado !")
                          VSD_I_Descricao_Tplanc=""
                  EndIf
             Case Campo="I_NoCheque"           :
                  VSD_I_NoCheque=ControlValue("I_NoCheque")
                  If Not IsBlank(VSD_I_NoCheque)
                     Then If [Tipo de Operacao]="14"
                             Then VSD_I_SrCheq  =""
                                  VSD_I_ChPreDat=""
                                  VSD_I_DtCPrDat=BlankDate()
                                  VSD_I_DtDesc  =VSD_I_DtPagto
                                  Campo="I_PlContas"
                             Else Campo="I_SrCheq"
                          EndIf
                  EndIf
             Case Campo="I_SrCheq"             : Campo="I_ChPreDat"
                  VSD_I_SrCheq=ControlValue("I_SrCheq")
             Case Campo="I_ChPreDat"           :
                  VSD_I_ChPreDat=ControlValue("I_ChPreDat")
                  Switch
                    Case VSD_I_ChPreDat="S"    : Campo="I_DtCPrDat"
                    OtherWise                  :
                         VSD_I_ChPreDat="N"
                         VSD_I_DtCPrDat=BlankDate()
                         If CHAVEI=1
                            Then Campo="I_DtDesc"
                            Else Campo="I_PlContas"
                         EndIf
                  EndSwitch
             Case Campo="I_DtCPrDat"           :
									VSD_I_DtCPrDat=ControlValue("I_DtCPrDat")
                  If Not IsBlank(VSD_I_DtCPrDat)
                     Then If VSD_I_DtCPrDat<VSD_I_DtPagto
                             Then Mensagem("Data menor que Data do Pagamento !")
                             Else If CHAVEI=1
                                     Then Campo="I_DtDesc"
                                     Else Campo="I_PlContas"
                                  EndIf
                          EndIf
                  EndIf
             Case Campo="I_DtDesc"             :
									VSD_I_DtDesc=ControlValue("I_DtDesc")

                  If Not IsBlank(VSD_I_DtDesc) and
                     VSD_I_DtDesc<VSD_I_DtPagto
                     Then Mensagem("Data de desconto do cheque menor que data do pagamento !")
                     Else Campo="I_PlContas"
                  EndIf

             Case Campo="I_PlContas"           :
                  VSD_I_PlContas=ControlValue("I_PlContas")
                  If Not IsBlank(VSD_I_PlContas)
                     Then Moveto [Codigo Plano_Conta]
                          Ativa_Lookup()
                          Moveto [Codigo Plano_Conta]
                          Locate VSD_I_PlContas
                          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 Plano de Contas a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_I_PlContas          =""
                                          VSD_I_Descricao_PlContas=""
                                          Campo="I_PlContas"
                                          KeyPress "ESC"
                                     Else
                                          VSD_I_PlContas          =[Codigo Plano_Conta]
                                          VSD_I_Descricao_PlContas=LTrim([Descricao Plano_Conta])
                                          VSD_I_Codigo_Hist        = [Codigo do Historico   ]
                                          KeyPress "ESC"
                                          [Codigo Plano_Conta]       =VSD_I_PlContas
                                          Campo="I_CCusto"
                                  Endif
                             Else Mensagem("Conta nao Cadastrada !")
                                  VSD_I_PlContas          =""
                                  VSD_I_Descricao_PlContas=""
                                  Campo="I_PlContas"
                                  KeyPress "ESC"
                          EndIf
                          If SubStr(VSD_I_PlContas,1,1)="1"
                             Then Mensagem("Conta n„o confere com tipo de movimento !")
                                  Campo="I_PlContas"
                          EndIf
                          Echo Off
                     Else VSD_I_Descricao_PlContas=""
                          Campo="I_CCusto"
                  EndIf
             Case Campo="I_CCusto"             :
                  VSD_I_CCusto=ControlValue("I_CCusto")
                  If Not IsBlank(VSD_I_CCusto)
                     Then Moveto [Codigo CCusto]
                          Ativa_Lookup()
                          Moveto [Codigo CCusto]
                          Locate VSD_I_CCusto
                          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)
                                          VSD_I_CCusto          =""
                                          VSD_I_Descricao_CCusto=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_I_CCusto          =[Codigo CCusto]
                                          VSD_I_Descricao_CCusto=LTrim([Descricao CCusto])
                                          KeyPress "ESC"
                                          [Codigo CCusto]       =VSD_I_CCusto
                                          Campo="I_Codigo_Hist"
                                  Endif
                             Else Mensagem("Centro de Custo nao Cadastrado !")
                                  VSD_I_CCusto          =""
                                  VSD_I_Descricao_CCusto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_I_Descricao_CCusto=""
                          Campo="I_Codigo_Hist"
                  EndIf

             Case Campo="I_Codigo_Hist"        : Campo="I_Descri_Hist"
									VSD_I_Codigo_Hist=ControlValue("I_Codigo_Hist")
									If Not IsBlank(VSD_I_Codigo_Hist)
                     Then VSD_I_Codigo_Hist=AlinhM(VSD_I_Codigo_Hist,4)
                          Moveto [Codigo do Historico]
                          Ativa_Lookup()
													Moveto [Codigo do Historico]
													Locate VSD_I_Codigo_Hist
                          If RetVal
                             Then If HIOLD<>VSD_I_Codigo_Hist
                                     Then VSD_I_Descri_Hist  =[Descricao do Historico]
                                  EndIf
                                  KeyPress "ESC"
                                  If HIOLD<>VSD_I_Codigo_Hist
                                     Then HISTORICO()
                                  EndIf
                                  HIOLD =VSD_I_Codigo_Hist
														 Else Mensagem("Historico n„o Cadastrado !")
                                  VSD_I_Codigo_Hist=""
                                  VSD_I_Descri_Hist=""
                                  KeyPress "ESC"
                                  Campo="I_Codigo_Hist"
                          EndIf
                          Echo Off
                     Else HIOLD =VSD_I_Codigo_Hist
                  EndIf
             Case Campo="I_Descri_Hist"     :
                  VSD_I_Descri_Hist=ControlValue("I_Descri_Hist")
                  Registro_Baixa("Gravar")

                  If CONTA()
                     Then TIT()

                          If PARAM_IMPRIME_CHEQUE="S" And CHAVEI=1 And VSD_I_Tpoper="05" 
                             Then IMPRIME_CHEQUE()
                          EndIf

                          If Not IsBlank(PARAM_RELAT)
                             Then Recbok=False
                                  Switch
                                    Case CHAVEI=1: RecbOk=True
                                    Case CHAVEI=0: RecbOk=ConfGeral("Deseja imprimir a 2¦ Via do Recibo?")
                                  EndSwitch
                                  If RecbOk Then Imprime_Recibo() EndIf
                          EndIf   

                          AcceptDialog   
                  EndIf

           EndSwitch
   EndSwitch
EndIf
RefreshDialog

SelectControl Campo
Switch
  Case Campo="I_Conta"      : TECLA=TECLA+"F1=Tabelas  "
  Case Campo="I_Tpoper"     : TECLA=TECLA+"F1=Tabelas  "
  Case Campo="I_Tplanc"     : TECLA=TECLA+"F1=Tabelas  "
  Case Campo="I_TpBaixa"    : MSG_CAMPO="N=NORMAL  D=DEVOLUCAO  C=CANCELADO"
  Case Campo="I_NoCheque"   : Switch
                                Case [Tipo de Operacao]="14": MSG_CAMPO="Informe o N£mero do Documento da Transa‡„o"
                                Case [Tipo de Operacao]="05": MSG_CAMPO="Informe o N£mero do Cheque Emitido"
                              EndSwitch
  Case Campo="I_SrCheq"     : MSG_CAMPO="Serie do Cheque"
  Case Campo="I_ChPreDat"   : MSG_CAMPO="Cheque Pre-Datado (Sim/N„o)"
  Case Campo="I_DtCPrDat"   : MSG_CAMPO="Data do Cheque Pre-Datado"
  Case Campo="I_DtDesc"     : MSG_CAMPO="Data do Cheque Descontado"
  Case Campo="I_PlContas"   : TECLA=TECLA+"F1=Tabelas  "
  Case Campo="I_CCusto"     : TECLA=TECLA+"F1=Tabelas  "
  Case Campo="I_Codigo_Hist": MSG_CAMPO="C¢digo do Hist¢rico"
                              TECLA=TECLA+"F1=Tabelas  "
  Case Campo="I_Descri_Hist": MSG_CAMPO="Descreva o Hist¢rico"
EndSwitch

If CHAVEI=0 And Not Opcao_Ver
   Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
EndIf

@24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSG_CAMPO)
Mouse Hide
Return TEMP
EndProc  ; (Baixa_Dialog)

;*******************************************************************************
;** Rotina para elaboracao de historico lancamento                             *
;*******************************************************************************
Proc HISTORICO()
HISTORICO = VSD_I_Descri_Hist
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 + VSD_I_NoCheque
      Case COMP = "*CONTDEST*":
           NOVOHIST = NOVOHIST + VSD_I_Descricao_Conta
      Case COMP = "*CONTORIG*":
           NOVOHIST = NOVOHIST + VSD_I_Descricao_Conta
      Case COMP = "*DATALCTO*":
           NOVOHIST = NOVOHIST + StrVal(VSD_I_DtPagto)
      Case COMP = "*MESANO*":
           NOVOHIST = NOVOHIST + ALINHM(StrVal(Month(VSD_I_DtPagto)),2)+"/"+SubStr(StrVal(Year(VSD_I_DtPagto)),3,2)
;;;;;;Case COMP = "*DESTEMIT*":
;;;;;;     NOVOHIST = NOVOHIST + [Titulos->Nome Fantasia EmitDest]
      Case COMP = "*TPDOCTO*":
           NOVOHIST = NOVOHIST + [Titulos->Tipo do Documento] +"/"+ [Titulos->Serie do Documento]
      Case COMP = "*LIVRE*":
           COMPLEMENTO()
      Case COMP = "*DOCTO*":
           NOVOHIST = NOVOHIST + [Titulos->Numero do Documento]
      OtherWise:
           NOVOHIST = NOVOHIST + SubStr(COMP,2,SearchFrom("*",COMP,2)-2)
      EndSwitch
      POS = POSN
EndWhile
VSD_I_Descri_Hist = NOVOHIST
EndProc ; (HISTORICO)

;***********************************************************
;** Rotina para Digitacao de Complemento                  **
;***********************************************************
Proc COMPLEMENTO()
LIVRE=""
ShowDialog "[ Complemento ]" @ 13,12 height 06 width 53
  @ 0,1 ?? "Texto:"

  Accept @ 00,07 width 43 "A60" Picture "!*!" tag "LIVRE" to LIVRE

  Pushbutton @ 02,20 width 11 "OK"        OK default Value "Say Yes" Tag "YES" to BottonValue
  Pushbutton @ 07,20 width 11 "~C~ancela" CANCEL                     Tag "NO"  to BottonValue

Enddialog
Mouse Show
NOVOHIST = NOVOHIST + LIVRE
EndProc ; (COMPLEMENTO)

;*******************************************************************************
;* Atualizacao Conta Corrente                                                  *
;*******************************************************************************
Proc CONTA()
Private WB
If [\Sistemas\CtaPag\TitBaixa->Tipo da Baixa]<>"NORMAL"
   Then Return True
EndIf

While True
  If Not IsBlank([TitBaixa->Data do Pagamento])
     Then ANOREF=StrVal(Year([TitBaixa->Data do Pagamento]))
          MESREF=AlinhM(StrVal(Month([TitBaixa->Data do Pagamento])),2)

          Moveto "\\Sistemas\\CtaCor\\SaldCont"
          Moveto [Codigo da Conta]
          Locate [TitBaixa->Codigo da Conta],ANOREF,MESREF
          If Not RetVal
             Then ;;If CHAVEI<>1
                  ;;   Then MENSAGEM("Saldo da conta em "+MESREF+"/"+ANOREF+" n„o cadastrada !")
                  ;;        WB=1
                  ;;        QuitLoop
                  ;;EndIf
                  ;;CONFGERAL("Data da baixa fora do per¡odo em aberto !//Deseja criar novo per¡odo ?")
                  ;;If OK="N"
                  ;;   Then WB=1
                  ;;        QuitLoop
                  ;;   Else CONTAREF=[TitBaixa->Codigo da Conta]
                  ;;        GERCONT()
                  ;;        Loop
                  ;;EndIf
                  CONTAREF=[TitBaixa->Codigo da Conta]
                  GERCONT()
                  Loop
          EndIf
  EndIf

  Switch
    Case CHAVEI=0:
         Moveto "\\Sistemas\\CtaCor\\MovCont"
         Moveto [Numero do Lancamento]
         Locate [TitBaixa->Lancamento Conta Corrente],
                [TitBaixa->Codigo da Conta]
         If Not RetVal
            Then MSG=    "Lan‡amento no Caixa/Banco n„o encontrado p/ esta Baixa !//"
                 MSG=MSG+"Verificar no Caixa/Banco se o Mˆs n„o foi fechado !//"
                 MSG=MSG+"Neste caso o estorno no Caixa/Banco n„o sera efefuado !//"
                 MSG=MSG+"Talvez algum outro erro gerou este problema !//"
                 MSG=MSG+"Se necess rio exclua esta Baixa e fa‡a-a novamente !"
                 Mensagem(MSG)
                 WB=1
                 QuitLoop
            Else If [Sistema Gerador       ]<>"CP" Or
                    [Empresa Gerador       ]<>[TitBaixa->Codigo da Empresa] Or
                    [Lancamento Gerador    ]<>[TitBaixa->Numero do Lancamento] Or
                    [Sequencia Gerador     ]<>[TitBaixa->Sequencia da Baixa] Or
                    [Codigo do Documento   ]<>[Titulos->Codigo do Documento] Or
                    [Numero do Documento   ]<>[Titulos->Numero do Documento]
                    Then MSG=    "Movimento no Caixa/Banco n„o corresponde a esta Baixa !//"
                         MSG=MSG+"Verificar no Caixa/Banco se o Mˆs n„o foi fechado !//"
                         MSG=MSG+"Neste caso o estorno no Caixa/Banco n„o sera efefuado !//"
                         MSG=MSG+"Talvez algum outro erro gerou este problema !//"
                         MSG=MSG+"Se necess rio exclua esta Baixa e fa‡a-a novamente !"
                         Mensagem(MSG)
                         WB=1
                         QuitLoop
                 EndIf

                 WB=0
                 [Valor                 ]=[TitBaixa->Valor do Pagamento]
                 [Valor do Desconto     ]=[TitBaixa->Valor do Desconto ]
                 [Valor do Juros        ]=[TitBaixa->Valor do Juros    ]
                 [Codigo do Documento   ]=[Titulos->Codigo do Documento]
                 [Numero do Documento   ]=[Titulos->Numero do Documento]
                 [Numero do Cheque      ]=[TitBaixa->Numero do Cheque  ]
                 [Serie do Cheque       ]=[TitBaixa->Serie do Cheque   ]
                 [Cheque Pre-Datado     ]=[TitBaixa->Cheque Pre-Datado ]
                 [Data Cheque Pre-Datado]=[TitBaixa->Data Cheque Pre-Datado]
                 [Tipo de Operacao      ]=[TitBaixa->Tipo de Operacao   ]
                 [Codigo do EmitDest    ]=[Titulos->Codigo do Emitente  ]
                 [Tipo do Lancamento    ]=[TitBaixa->Tipo de Lancamento ]

                 [Codigo Plano_Conta    ]=[TitBaixa->Codigo Plano_Conta    ]
                 [Codigo CCusto         ]=[TitBaixa->Codigo CCusto         ]
                 [Codigo do Historico   ]=[TitBaixa->Codigo do Historico   ]
                 [Descricao do Historico]=[TitBaixa->Descricao do Historico]

                 UnLockRecord

                 Moveto "\\Sistemas\\CtaCor\\SaldCont"
                 [Saidas]=[Saidas]-VROLD+[TitBaixa->Valor do Pagamento]
                 UnLockRecord

                 Moveto "TitBaixa"
                 [Lancamento Conta Corrente]=[\Sistemas\CtaCor\MovCont->Numero do Lancamento]
         EndIf
    Case CHAVEI=1:
         WB=0
         Moveto "\\Sistemas\\CtaCor\\MovCont"
         Moveto [Numero do Lancamento]
         While True
           End
           If [Numero do Lancamento]=""
              Then NLANCMC="000001"
              Else NLANCMC=ALINHM(StrVal(NumVal([Numero do Lancamento])+1),6)
           EndIf
           Down
           [Numero do Lancamento]=NLANCMC
           [Codigo da Conta     ]=[TitBaixa->Codigo da Conta   ]
           If Not IsLockRecord()
              Then QuitLoop
              Else Del
           EndIf
         EndWhile
         [Codigo da Empresa     ]=[TitBaixa->Codigo da Empresa     ]
         [Tipo de Operacao      ]=[TitBaixa->Tipo de Operacao      ]
         [Data                  ]=[TitBaixa->Data do Pagamento     ]
         [Data Cheque Descontado]=[TitBaixa->Data Cheque Descontado]
         [Valor                 ]=[TitBaixa->Valor do Pagamento    ]
         [Valor do Desconto     ]=[TitBaixa->Valor do Desconto     ]
         [Valor do Juros        ]=[TitBaixa->Valor do Juros        ]
         [Numero do Cheque      ]=[TitBaixa->Numero do Cheque      ]
         [Serie do Cheque       ]=[TitBaixa->Serie do Cheque       ]
         [Cheque Pre-Datado     ]=[TitBaixa->Cheque Pre-Datado     ]
         [Data Cheque Pre-Datado]=[TitBaixa->Data Cheque Pre-Datado]
         [Codigo do Documento   ]=[Titulos->Codigo do Documento    ]
         [Numero do Documento   ]=[Titulos->Numero do Documento    ]
         [Codigo Plano_Conta    ]=[TitBaixa->Codigo Plano_Conta    ]
         [Codigo CCusto         ]=[TitBaixa->Codigo CCusto         ]
         [Codigo do Historico   ]=[TitBaixa->Codigo do Historico   ]
         [Descricao do Historico]=[TitBaixa->Descricao do Historico]

         [Sistema Gerador       ]="CP"
         [Empresa Gerador       ]=[TitBaixa->Codigo da Empresa     ]
         [Lancamento Gerador    ]=[TitBaixa->Numero do Lancamento  ]
         [Sequencia Gerador     ]=[TitBaixa->Sequencia da Baixa    ]
         [Codigo do EmitDest    ]=[Titulos->Codigo do Emitente     ]
         [Tipo do Lancamento    ]=[Titbaixa->Tipo de Lancamento    ]

         [Codigo Plano_Conta    ]=[TitBaixa->Codigo Plano_Conta    ]
         [Codigo CCusto         ]=[TitBaixa->Codigo CCusto         ]
         [Codigo do Historico   ]=[TitBaixa->Codigo do Historico   ]
         [Descricao do Historico]=[TitBaixa->Descricao do Historico]
         Controle_Dia()
         UnLockRecord

         Moveto "\\Sistemas\\CtaCor\\SaldCont"
         [Saidas]=[Saidas]+[TitBaixa->Valor do Pagamento]
         UnLockRecord

         Moveto "TitBaixa"
         [Lancamento Conta Corrente]=[\Sistemas\CtaCor\MovCont->Numero do Lancamento]
    Case CHAVEI=8:
         Moveto "\\Sistemas\\CtaCor\\MovCont"
         Moveto [Numero do Lancamento]
         Locate [TitBaixa->Lancamento Conta Corrente],
                [TitBaixa->Codigo da Conta]
         If Not RetVal
            Then If Not Exclusao_Cabeca
                    Then MSG=    "Lan‡amento no Caixa/Banco n„o encontrado p/ esta Baixa !//"
                         MSG=MSG+"Verificar no Caixa/Banco se o Mˆs n„o foi fechado !//"
                         MSG=MSG+"Neste caso o estorno no Caixa/Banco n„o sera efefuado !//"
                         MSG=MSG+"Talvez algum outro erro gerou este problema !//"
                         MSG=MSG+"Deseja Excluir esta Baixa assim mesmo ?"
                         ConfGeral(MSG)
                         If OK="S"
                            Then WB=0
                            Else WB=1
                         EndIf
                    Else WB=0
                 EndIf
            Else If [Sistema Gerador       ]<>"CP" Or
                    [Empresa Gerador       ]<>[TitBaixa->Codigo da Empresa] Or
                    [Lancamento Gerador    ]<>[TitBaixa->Numero do Lancamento] Or
                    [Sequencia Gerador     ]<>[TitBaixa->Sequencia da Baixa] Or
                    [Codigo do Documento   ]<>[Titulos->Codigo do Documento] Or
                    [Numero do Documento   ]<>[Titulos->Numero do Documento]
                    Then MSG=    "Lan‡amento no Caixa/Banco n„o corresponde a esta Baixa !//"
                         MSG=MSG+"Verificar no Caixa/Banco se o Mˆs n„o foi fechado !//"
                         MSG=MSG+"Neste caso o estorno no Caixa/Banco n„o sera efefuado !//"
                         MSG=MSG+"Talvez algum outro erro gerou este problema !//"
                         MSG=MSG+"Deseja Excluir esta Baixa assim mesmo ?"
                         ConfGeral(MSG)
                         If OK="S"
                            Then WB=0
                            Else WB=1
                         EndIf
                    Else WB=0
                         Del
                         Moveto "\\Sistemas\\CtaCor\\SaldCont"
                         [Saidas]=[Saidas]-VROLD
                         UnLockRecord
                 EndIf
         EndIf
  EndSwitch
  QuitLoop
EndWhile

Moveto "TitBaixa"
If WB=0
   Then Return True
   Else Return False
EndIf
EndProc  ; (Conta)

;*******************************************************************************
;* Gera Saldo de Conta                                                         *
;*******************************************************************************
Proc GERCONT()
End Down
[Codigo da Conta]=CONTAREF
[Ano Referencia ]=ANOREF
[Mes Referencia ]=MesREF
[Saldo Inicial  ]=0
[Entradas       ]=0
[Saidas         ]=0
UnLockRecord
EndProc  ; (GerCont)


;*******************************************************************************
;* 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

VSDGNOMINAL=[Titulos->Razao Social]

Play "Nominal"
If BANCO=0
   Then Return False
EndIf

CH_DESC    =[TitBaixa->Data Cheque Descontado]
CH_Valor   =[TitBaixa->Valor do Pagamento    ]
CH_Desconto=[TitBaixa->Valor do Desconto     ]
CH_Data    =[TitBaixa->Data do Pagamento     ]
CH_Numero  =[TitBaixa->Numero do Cheque      ]
CH_Serie   =[TitBaixa->Serie do Cheque       ]
CH_Conta   =[TitBaixa->Codigo da Conta       ]
CH_Juros   =[TitBaixa->Valor do Juros        ]
UnLockRecord

Moveto "Titulos"
UnLockRecord
FormKey

Moveto "\\Sistemas\\Cadastro\\Empresas"
Moveto [Codigo da Empresa]
Locate [Titulos->Codigo da Empresa]
If RetVal
   Then CH_Titular=[\Sistemas\Cadastro\Empresas->Razao Social Empresa]
        CH_Cidade =[\Sistemas\Cadastro\Empresas->Cidade Empresa]
EndIf

Moveto "\\Sistemas\\CtaCor\\Conta"
Moveto [Codigo da Conta]
Locate CH_Conta
If RetVal
   Then CH_CBanco=[\Sistemas\CtaCor\Conta->Numero do Banco]
        CH_NBanco=[\Sistemas\CtaCor\Conta->Nome do Banco  ]
        CH_NConta=[\Sistemas\CtaCor\Conta->Numero da Conta]
EndIf

Continuar=False

While True

 Continuar=True
 CONFGERAL("Deseja Imprimir o Cheque?")
 If OK="N"
    Then QuitLoop
 Endif

 AGUARDE("Imprimindo Cheque")

 Moveto "Titulos"
 CH_Lanc     =[Numero do Lancamento]
 CH_CEmitente=[Codigo do Emitente]
 CH_DtE      =[Data de Emissao]
 CH_DtV      =[Data de Vencimento]
 CH_Custo    =[Codigo CCusto]+" - "+[Descricao CCusto]

 CH_Historico=[Titulos->Tipo do Documento]+
               "/"+[Titulos->Numero do Documento]

Moveto "P_Cheque"
Moveto [Numero do Banco]
Locate CH_CBanco
If RetVal
   Then If BANCO=1
           Then SCRIPT=[Script_Avulso]
           Else SCRIPT=[Script_Continuo]
        EndIf
   Else Mensagem("Banco n„o cadastrado nos parametros do Cheque! // //Verificar com o Suporte!")
        QuitLoop             
EndIf

If SCRIPT=""
   Then Mensagem("Falha ao imprimir o cheque! // Script n„o encontrado! // //Verificar com o Suporte!")
        QuitLoop
EndIf


CONFGERAL("Coloque o cheque na impressora e clique em SIM para prosseguir!")
If OK="N"
   Then QuitLoop
   Else Play SCRIPT
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
Endif

AGUARDE("Imprimindo o Hist¢rico")
Play "C_Ch"

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
 Endif
    LIMPAGUARDE()
    Continuar=True
    QuitLoop
EndWhile

Moveto "Titulos"
FormKey

Moveto "TitBaixa"
Moveto [Sequencia da Baixa]
Locate NLANC,NITEM

Return Continuar
EndProc  ; (Imprimi_Cheque)

;*******************************************************************************
;* Rotina Imprime Recibo                                                       *
;*******************************************************************************
Proc Imprime_Recibo()
SaveTables

MSGDISPOSITIVO="Recibo"
DispositivoI("RCB")

If OK="" 
   Then Return
EndIf

forant="****"
ULTIMA_BAIXA=True

ENDERECO=""
BAIRRO  =""
CIDADE  =""
TELEFONE=""
RG      =""

Moveto "Titulos"
Moveto [Codigo do Emitente]
Ativa_Lookup()
Moveto [Codigo]
Locate [Titulos->Codigo do Emitente]
If RetVal
  Then ENDERECO = [Endereco ]                
       BAIRRO   = [Bairro   ]
       CIDADE   = [Cidade   ]
       TELEFONE = [Telefone ]
       RG       = [RG       ]
EndIf
KeyPress "ESC"
UnLockRecord

Moveto "TitBaixa"
Moveto [Sequencia da Baixa]

Locate NLANC,NITEM
  If Retval 
     Then ArqImp="Recibo.txt"
          Deleta_Arquivo(Arqimp)
          Sleep 700
         
          Play PARAM_RELAT
          ImpriArq(ArqImp)
  EndIf

EndProc

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()

View NoWindow "P_Titulo"
PARAM_IMPRIME_CHEQUE=[Emite_Cheque]
PARAM_CONTROLA_TALAO=[Controla_Talao]

If [Emite_Cheque]="S"
   Then If [Porta_Impressora]="COM1" Or
           [Porta_Impressora]="COM2" Or
           [Porta_Impressora]="COM3" Or
           [Porta_Impressora]="COM4" Or
           [Porta_Impressora]="LPT1"
           Then Seta_Printer = [Porta_Impressora]
           Else MENSAGEM ("Porta n„o configurada")
                PARAM_IMPRIME_CHEQUE="N"
        Endif
        View NoWindow   "\\Sistemas\\Ctacor\\TalaoChq"
        View NoWindow   "\\Sistemas\\Cadastro\\Empresas"
        View NoWindow   "\\Sistemas\\Cadastro\\Destinat"
        Moveto "P_Titulo"
EndIf
ClearImage

EndProc  ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina Carrega Parametros                                                   *
;*******************************************************************************
Proc Carrega_Parametros2()
If Not IsEmpty("\\Sistemas\\Cheqrec\\P_Cheq")
   Then View "\\Sistemas\\Cheqrec\\P_Cheq"

        PARAM_UTILIZA_CHLIVRE          =[Utiliza_Inserir_CHLivre]
        PARAM_UTILIZA_GERACXBC         =[Utiliza_Gera_CaixaBanco]
        PARAM_UTILIZA_GERAREC          =[Utiliza_Gera_CtaReceber]
        PARAM_PLANO_CONTA_ARECEBER     =[Plano_Conta_CtaReceber ]

        ClearAll
   Else PARAM_UTILIZA_CHLIVRE          ="N"
        PARAM_UTILIZA_GERACXBC         ="N"
        PARAM_UTILIZA_GERAREC          ="N"
        PARAM_PLANO_CONTA_ARECEBER     =""

        Mensagem("N„o est„o configurados os parƒmetros para Lan‡amentos de Cheques Livres.// //Verificar !")
EndIf
EndProc ; (Carrega_Parametros2)

;*******************************************************************************
;* Rotina Carrega Parametros                                                   *
;*******************************************************************************
Proc Carrega_Parametros3()
If Not IsEmpty("P_Titulo")
   Then View "P_Titulo"
        PARAM_RELAT = [Impressao_Recibo]
        ClearAll
   Else PARAM_RELAT = ""
        Mensagem("N„o est„o configurados os parƒmetros para Lan‡amentos e Baixas de T¡tulos.// //Verificar !")
EndIf
EndProc ; (Carrega_Parametros3)

;*******************************************************************************
;* Rotina p/ Montar Opcoes p/ Grade                                            *
;*******************************************************************************
Proc Monta_Opcoes(OPCAODIVERSAS, ITEMDESEJADO)
Private OPCAODIVERSAS, ITEMDESEJADO, wcg, icg, icgt, tnovo, nomecampo,opconta,okct
nomecampo=Field()
If IsAssigned(Opcoes)
   Then Release Vars Opcoes
EndIf

DynArray Opcoes[]
Switch
  Case OPCAODIVERSAS="Tipo de Opera‡„o"  : Moveto [Tipo de Operacao  ]
  Case OPCAODIVERSAS="Tipo de Lan‡amento": Moveto [Tipo de Lancamento]
  Case OPCAODIVERSAS="Codigo da Conta"   : Moveto [Codigo da Conta   ]
EndSwitch
Ativa_Lookup()
wcg=0

While Not EOT()
  Switch
    Case OPCAODIVERSAS="Tipo de Opera‡„o":
         okct=false
         If Search([Titbaixa->Tipo da Conta],[OpConta])>0 And [Tipo Movimento]="S"
            Then If [Titbaixa->Tipo da Conta]="C"
                    Then If [Tipo de Operacao]="05" Or [Tipo de Operacao]="14"
                            Then okct=True
                         EndIf
                    Else If [Tipo de Operacao]="06"
                            Then okct=True
                         EndIf
                 Endif
         EndIf
         If okct
            Then wcg=wcg+1
                 Opcoes[wcg]=Completa([Descricao Operacao],26," ")+[Tipo de Operacao]
         EndIf
    Case OPCAODIVERSAS="Tipo de Lan‡amento":
         If [Titbaixa->Tipo da Conta]="C" Then opconta=[OpTpOper_Bco] EndIf
         If [Titbaixa->Tipo da Conta]="X" Then opconta=[OpTpOper_Cxa] EndIf
         If [Titbaixa->Tipo da Conta]="A" Then opconta=[OpTpOper_Apl] EndIf
         If Search([Titbaixa->Tipo de Operacao],OpConta)>0
            Then wcg=wcg+1
                 Opcoes[wcg]=Completa([Descricao do Lancamento],28," ")+[Tipo de Lancamento]
         EndIf
    Case OPCAODIVERSAS="Codigo da Conta":
         wcg=wcg+1
         Opcoes[wcg]=Completa([Descricao da Conta],31," ")+[Codigo da Conta]
  EndSwitch
  Skip
EndWhile
KeyPress "ESC"
Moveto Field nomecampo
EndProc    ; (Monta_Opcoes)

;*******************************************************************************
;* Rotina p/ Checagem Opcoes p/ Grade                                          *
;*******************************************************************************
Proc Checa_Opcoes(OPCAODIVERSAS, VALORDESEJADO)
Private OPCAODIVERSAS, VALORDESEJADO, icg, resultado

If DynArraySize(Opcoes)=0
   Then Return False
EndIf

resultado=false
For icg From 1 To DynArraySize(Opcoes)
  Switch
    Case OPCAODIVERSAS="Tipo de Opera‡„o":
         If RTrim(SubStr(Opcoes[icg],27,2))=VALORDESEJADO
            Then resultado=true
         EndIf
    Case OPCAODIVERSAS="Tipo de Lan‡amento":
         If RTrim(SubStr(Opcoes[icg],29,1))=VALORDESEJADO
            Then resultado=true
         EndIf
    Case OPCAODIVERSAS="Codigo da Conta":
         If RTrim(SubStr(Opcoes[icg],32,4))=VALORDESEJADO
            Then resultado=true
         EndIf
  EndSwitch
  If resultado
     then MontaRegistro_F1(OPCAODIVERSAS,icg)
          QuitLoop
  EndIf
EndFor
return resultado
EndProc         ;  (Checa_Opcoes)

;*******************************************************************************
;* Rotina Montar Registro_F1 p/ Grade                                          *
;*******************************************************************************
Proc MontaRegistro_F1(OPCAODIVERSAS, indice)
private OPCAODIVERSAS, indice

If IsAssigned(Registro_F1)
   Then Release Vars Registro_F1
EndIf
DynArray Registro_F1[]
Switch
  Case OPCAODIVERSAS="Tipo de Opera‡„o"    :
       Registro_F1["Tipo de Operacao"]   =RTrim(SubStr(Opcoes[indice],27,2))
       Registro_F1["Descricao Operacao"] =RTrim(SubStr(Opcoes[indice],1,20))
  Case OPCAODIVERSAS="Tipo de Lan‡amento"    :
       Registro_F1["Tipo de Lancamento"]      =RTrim(SubStr(Opcoes[indice],29,1))
       Registro_F1["Descricao do Lancamento"] =RTrim(SubStr(Opcoes[indice],1,20))
  Case OPCAODIVERSAS="Codigo da Conta"       :
       Registro_F1["Codigo da Conta"]         =RTrim(SubStr(Opcoes[indice],32,4))
       Registro_F1["Descricao da Conta"]      =RTrim(SubStr(Opcoes[indice],1,30))
EndSwitch
EndProc    ;  (Monta_RegistroF1)

;*******************************************************************************
;* Rotina de Selecionar Grade                                                  *
;*******************************************************************************
Proc Seleciona_Opcoes(OPCAODIVERSAS,SEMRETORNO,NL,NC)
Private OPCAODIVERSAS, LJ, AJ, ncp, SEMRETORNO

If DynArraySize(Opcoes)=0
   Then Mensagem("Tabela sem Registros !")
        Return False
EndIf

AJ=DynArraySize(Opcoes)
If AJ>15
   Then AJ=15
   Else If AJ<3 Then AJ=3 EndIf
EndIf

Switch
  Case OPCAODIVERSAS="Tipo de Opera‡„o"  : ncp=1 LJ=31
  Case OPCAODIVERSAS="Tipo de Lan‡amento": ncp=1 LJ=32
  Case OPCAODIVERSAS="Codigo da Conta"   : ncp=1 LJ=37
EndSwitch

ArrayElement=0
Showdialog "Consulta "+OPCAODIVERSAS Proc "Opcoes_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "TAB","ReverseTab","ENTER","ESC"
     @ NL,NC height AJ+2 width LJ+5

   PickDynArray @0,01 Height AJ width LJ
   Columns ncp
   Opcoes
   Tag "TG_OPCAO"
   To ArrayElement
EndDialog
If RetVal
   Then If SEMRETORNO<>"SR"
           Then Switch
                  Case OPCAODIVERSAS="Tipo de Opera‡„o"        : [Tipo de Operacao  ]=Registro_F1["Tipo de Operacao"  ]
                  Case OPCAODIVERSAS="Tipo de Lan‡amento"      : [Tipo de Lancamento]=Registro_F1["Tipo de Lancamento"]
                  Case OPCAODIVERSAS="Codigo da Conta"         : [Codigo da Conta   ]=Registro_F1["Codigo da Conta"   ]
                EndSwitch
                Return True
        EndIf
   Else Return False
EndIf
EndProc   ; (Seleciona_Opcoes)

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog Grade                                      *
;*******************************************************************************
Proc Opcoes_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA=" Esc=Retornar  Enter=Selecionar  =Mover  "
If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9 Or Evento["KeyCode"] = -15: Temp=False
      Case Evento["KeyCode"] = 27:
           Resultado_F1=False
           CancelDialog
      Case Evento["KeyCode"] = 13:
           Temp=False
           MontaRegistro_F1(OPCAODIVERSAS,ArrayElement)
           Resultado_F1=True
           AcceptDialog
   EndSwitch
EndIf

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Return Temp
EndProc      ; (Opcoes_Dialog)


;*******************************************************************************
;* Rotina para Localizar Registro Item                                         *
;*******************************************************************************
Proc CHAVECH()
While True
  Moveto [Sequencia]
  End
  ITEM = [Sequencia]
  Down

  Moveto [Valor]   VSVRCHEQUES=ImageCSum()

  Moveto [Sequencia]

  Opcao_Ver=False
  Opcao_Ler_Cheque=False

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

  SetaCorRegistro("Editar")
  While True

      Prompt " Esc=Retornar  Alt+F=Fun‡”es  PgDn=Finalizar "

      Wait Field
           Until "ESC","ENTER","F7","HOME","UP","PGUP","PGDN","F3","F10",
                 "F4","F5","F9","F8",-33,-115,-116,-75,-77

      If RetVal=-75  Or RetVal=-77 Or
         RetVal=-115 Or RetVal=-116
         Then Tecla_Funcao=Retval
              CHAVECH=9
              Del
              Return
      EndIf

      If Retval=-33
         Then
           ShowPopup " Fun‡”es " CENTERED
            "~V~er Ficha  [F3]" : " Ver modo Ficha                    " : "F3",
            "~L~er Cheque [F4]" : " Ativar leitura de cheque"           : "F4",
            "~I~mprimir   [F5]" : " Imprimir Controle de Pagamento    " : "F5",
            "~B~aixas     [F8]" : " Baixa do T¡tulo"                    : "F8",
            "~N~otas      [F9]" : " Relacionar Notinhas p/ este T¡tulo" : "F9",
            "R~a~teio     [F10]" : " Rateio Pl.Contas/Ct.Custo"         : "F10",
            "~C~ancelar"        : " Cancelar a Opera‡„o"                : "CANCELAR"
           EndMenu
            To MenuVar
           echo off

           If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
               Else RetVal=MenuVar
           EndIf
      EndIf

      Switch
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           Del
           While True
             Moveto [Valor]   VSVRCHEQUES=ImageCSum()
             Moveto [Sequencia]

             PAGINA("Titcheq","MR")
             If EDITAR="S"
                Then If IsBlank([Numero Lancamento Cheque])
                        Then CHAVECH = 0
                             ITEM   = [Sequencia]
                             Controla_EdicaoCH()
                        Else Mensagem("Cheque cadastrado edi‡„o n„o permitida !")
                             UnLockRecord
                     EndIf
                Else If EXCLUIR="S"
                        Then If QuerExcluir("") And Checa_Supervisor()
                                Then If Not IsBlank([Numero Lancamento Cheque]) Then

                                        NLANCCH=[Numero Lancamento Cheque]
                                        SITEMCH=[Sequencia do Cheque     ]

                                        Moveto "\\Sistemas\\CheqRec\\ChequeI"
                                        Moveto [Numero do Lancamento]
                                        Locate NLANCCH,SITEMCH
                                        If RetVal
                                           Then [Situacao          ]="EM ABERTO"
                                                [Sistema Destino   ]=""
                                                [Lancamento Destino]=""
                                                [Tipo de Destino   ]=""
                                                [Data_Liquidado    ]=BlankDate()
                                                UnLockRecord
                                        EndIf
                                     EndIf
                                     Moveto "TitCheq"
                                     Del
                                Else UnLockRecord
                             EndIf
                        Else QuitLoop
                     EndIf
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case RetVal="F4":
           Del
           Ler_Cheque()
           QuitLoop
      Case Retval="F5":
           Del
           Play "Rp_0000"

           CHAVECH =9
           DIGITENS=0
           DIGITAC =False
           Return
      Case RetVal="F8":
           Del
           CHAVECH=9
           DIGITENS=1
           Return
      Case RetVal="F9":
           Del
           CHAVECH=9
           DIGITENS=3
      Case RetVal="F10":
           Del
           CHAVECH=9
           DIGITENS=4     
           Return
      Case Retval="ESC":
           Del
           CHAVECH =9
           DIGITENS=0
           DIGITAC =False
           Return
      Case Retval="PGDN":
           Del
           CHAVECH =9
           DIGITENS=0
           DIGITAC =False
           Return
      Case RetVal="F3":
           Del
           Moveto [Sequencia]
           If RecordStatus("New")
              Then MENSAGEM("Sem Item p/ ver !")
                   QuitLoop
           EndIf
           Opcao_Ver=True
           CHAVECH=0
           Home
           ITEM=[Sequencia]
           Controla_EdicaoCh()
           QuitLoop

      Case Retval="ENTER":
           If Not Seta_Sequencia(ITEM,True)
              Then Del
                   QuitLoop
           EndIf
           ITEM=[]
           Del
           Locate NLANC,ITEM
           If Retval
              Then CHAVECH=0
                   If Not IsBlank([Numero Lancamento Cheque])
                      Then Mensagem("Cheque cadastrado edi‡„o n„o permitida !")
                           QuitLoop
                   EndIf
              Else CHAVECH=1
                   End Down
                   [Numero do Lancamento]=NLANC
                   [Sequencia           ]=ITEM
                   UnLockRecord
                   Locate NLANC,ITEM
           EndIf
           Return
      EndSwitch
  EndWhile
EndWhile
EndProc  ; (CHAVECH)

;*******************************************************************************
;* Rotina para Pesquisa Cheque                                                 *
;*******************************************************************************
Proc DIGITACH1()

Moveto [Codigo_Banco]

While True

     Prompt " Esc=Retornar  F1=Tabelas  Insert=CH NAO CADASTRADO "
     MSGCAMPO=""

     Wait Field
          Message MSGCAMPO
          Until "ESC","ENTER","HOME","UP","PGUP","F1","PGDN","INS"
     Switch

     Case RetVal="ESC":
          Switch
             Case Field()="Codigo_Banco":
                  Del
                  CHAVECH=9
                  QuitLoop
             Case Field()="Numero_Cheque":
                  Moveto [Codigo_Banco]
          EndSwitch
     Case RetVal="ENTER":
          Switch
            Case Field()="Codigo_Banco":
              If Not IsBlank([Codigo_Banco])
                 Then Moveto [Numero_Cheque]
              EndIf
            Case Field()="Numero_Cheque":
              If IsBlank([Numero_Cheque]) Then Loop EndIf

              Moveto "\\Sistemas\\Cheqrec\\ChequeI"
              Moveto [Codigo_Banco]
              Locate IndexOrder By "Indchi00" [Titcheq->Codigo_Banco],[Titcheq->Numero_Cheque]
              If Retval
                 Then CopyToArray Reg_ConsultaF1
                      If CHECACHEQ()
                         Then Return
                      EndIf
                 Else Mensagem("Cheque n„o encontrado !")
              Endif
              Moveto "Titcheq"
              Moveto [Sequencia]
              Locate NLANC,ITEM

              Moveto [Numero_Cheque]

          EndSwitch
     Case RetVal="INS":
          If PARAM_UTILIZA_CHLIVRE="S"
             Then Controla_EdicaoCh()
                  CHAVECH=9
                  QuitLoop
             Else Mensagem("Fun‡„o n„o permitida, Verificar com Supervisor !")
          EndIf
     Case RetVal="F1":
          vrcampo=Field()
          Moveto [Numero Lancamento Cheque]
          If ConsultaF1()
             Then Moveto "\\Sistemas\\Cheqrec\\ChequeI"
                  Moveto [Numero do Lancamento]
                  Locate Reg_ConsultaF1["Numero do Lancamento"],
                         Reg_ConsultaF1["Sequencia do Cheque"]
                  If Retval
                     Then CopyToArray Reg_ConsultaF1
                          If CHECACHEQ()
                             Then Return
                          EndIf
                  EndIf
          EndIf
          Moveto "Titcheq"
          Moveto Field vrcampo
     EndSwitch
EndWhile
EndProc   ; (DigitaI)

;*******************************************************************************
;* Rotina para Pesquisa Rateio                                                 *
;*******************************************************************************
Proc ChaveR()
Var = false
Exclusao_Cabeca=False
While True
  Moveto [Valor]   VRRATEIO=ImageCSum()      

  Moveto [Sequencia]
  End
  NITEM_R = [Sequencia]
  Down Down 
  Moveto [Sequencia]
  Seta_Sequencia(NITEM_R,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  SetaCorRegistro("Editar")
  While true
    Moveto [Sequencia]

    Prompt " Esc=Retornar  Alt+F=Fun‡”es  PgDn=Finalizar "

    Wait Field
         Until "ESC","ENTER","F7","HOME","UP","PGUP","PGDN","F6",
               "F8",-33,-115,-116,-75,-77

    If RetVal=-75  Or RetVal=-77 Or
       RetVal=-115 Or RetVal=-116
       Then Tecla_Funcao=Retval
            CHAVER=9
            Del
            Return
    EndIf

    If Retval=-33
       Then
         ShowPopup " Fun‡”es " CENTERED
          "C~h~eques    [F6]" : " Relaciona Cheques/Terceiros       " : "F6",
          "~B~aixas     [F8]" : " Baixa do T¡tulo"                    : "F8",
          "~N~otas      [F9]" : " Relacionar Notinhas p/ este T¡tulo" : "F9",            
          "~C~ancelar"        : " Cancelar a Opera‡„o"                : "CANCELAR"
         EndMenu
          To MenuVar
         echo off

         If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Loop
             Else RetVal=MenuVar
         EndIf
    EndIf

    Switch
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           Moveto [Valor]   VRRATEIO=ImageCSum()
           Moveto [Sequencia]
           PAGINA("TitRat","MR")
           If EDITAR="S"
              Then CHAVER=0
                  ; NLANC  =[Numero do Lancamento]
                   NITEM_R  =[Sequencia]
                   Controla_EdicaoR()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")
                              Then Del
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           Endif
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="F6":
         Del
         If Not VerificaRaT()
            Then QuitLoop
         EndIf
         CHAVER=9
         DIGITENS=2
         Return
    Case Retval="F9":
         Del
         If Not VerificaRaT()
            Then QuitLoop
         EndIf
         CHAVER=9
         DIGITENS=3
         Return
    Case Retval="F8":
         Del
         If Not VerificaRaT()
            Then QuitLoop
         EndIf
         CHAVER=9
         DIGITENS=1
         Return     
    Case Retval="ESC":
         Del
         If Not VerificaRaT()
            Then QuitLoop
         EndIf    
         CHAVER=9
         DIGITENS=0
         Return
    Case Retval="PGDN":
         Del
         If Not VerificaRaT()
            Then QuitLoop
         EndIf             
         CHAVER=9
         DIGITENS=0
         DIGITAR =False 
         Return
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM_R,True)
            Then Del
                 QuitLoop
         EndIf
         NITEM_R=[]
         Del
         Locate NLANC,NITEM_R
         If Retval
            Then CHAVER=0
            Else CHAVER=1
                 End Down Down
;                 [Numero do Lancamento]=NLANC
                 [Sequencia           ]=NITEM_R
                 UnLockRecord
                 Locate NLANC,NITEM_R
         EndIf
         Resynckey
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc
;*******************************************************************************
;* Rotina Verifica Valor do Rateio                                             *
;*******************************************************************************
Proc VerificaRaT()
pcbranco = 0
ccbranco = 0
total    = 0      

Scan for Not IsBlank([Sequencia])
   If IsbLank([Codigo Plano_Conta ]) 
      then pcbranco = pcbranco + 1   
   EndIf 
   If IsbLank([Codigo CCusto ]) 
      then ccbranco = ccbranco + 1
   EndIf
   total= total+1
EndScan

Msg = ""
If (VRRATEIO <> 0) And (VRRATEIO <> [Titulos->Valor do Documento]) 
   Then Msg = Msg + "Valor do rateio difere com valor do titulo!//"
EndIf 

If ccbranco <> 0 And ccbranco <> total 
  Then Msg = Msg + "Existem rateios com e sem Centro de Custo! //"
EndIf  

If pcbranco <> 0 And pcbranco <> total 
  Then Msg = Msg + "Existem rateios com e sem Plano de contas! //"
EndIf

if msg<>""
   then Mensagem(Msg+ "Verificar!")
        return false
   else return true
EndIf             

EndProc

;*******************************************************************************
;* Rotina para Leitura do Cheque                                               *
;*******************************************************************************
Proc Ler_Cheque()
Private ChOk, wii

While True

  Moveto [Sequencia]
  ITEM=[]
  If IsBlank(ITEM)
     Then ITEM=1
     Else ITEM=ITEM+1
  EndIf
  End Down
  CHAVECH=1

  Moveto [Valor]   VSVRCHEQUES=ImageCSum()
  Moveto [Sequencia]

  [Numero do Lancamento]=NLANC
  [Sequencia           ]=ITEM
    
  If Not Leitura_Cheque(7,0)
     Then Del
          Return False
  EndIf

  ChOk=False
  Moveto "\\Sistemas\\Cheqrec\\ChequeI"
  For wii From 1 To 2
    Moveto [Codigo CMC7]
    Locate IndexOrder By "Indchi02" Dados_Cheque
    If Retval
       Then ChOk=True
            QuitLoop      
       Else If wii=1
               Then Switch
                      Case SubStr(Dados_Cheque,1,1)="<":
                        Dados_Cheque=","+SubStr(Dados_Cheque,02,08)+
                                     ","+SubStr(Dados_Cheque,11,10)+
                                     "."+SubStr(Dados_Cheque,22,12)+
                                     "/" 
                        Loop             
                      Case SubStr(Dados_Cheque,1,1)=",":
                        Dados_Cheque="<"+SubStr(Dados_Cheque,02,08)+
                                     "<"+SubStr(Dados_Cheque,11,10)+
                                     ">"+SubStr(Dados_Cheque,22,12)+
                                     ":" 
                        Loop             
                    EndSwitch  
            EndIf
            Moveto [Codigo_Banco]
            Locate IndexOrder By "Indchi00" CODIGO_BANCO,NUMERO_CHEQUE
            If Retval
               Then ChOk=True
            EndIf
            QuitLoop
    EndIf
  EndFor
  If ChOk
     Then CopyToArray Reg_ConsultaF1
          If Not CHECACHEQ()
             Then Moveto "Titcheq"
                  Del
          EndIf
          Loop
     Else Mensagem("Cheque n„o encontrado !")
  Endif

  Moveto "Titcheq"
  Moveto [Sequencia]
  Locate NLANC,ITEM

  Moveto [Codigo_Banco]
  Ativa_Lookup()
  Moveto [Codigo_Banco]
  Locate CODIGO_BANCO
  If RetVal
     Then NOME_BANCO=[Nome_banco]
  EndIf
  KeyPress "Esc"

  [Numero_cheque]=NUMERO_CHEQUE
  [Agencia      ]=AGENCIA_CHEQUE
  [Numero_Conta ]=CONTA_CHEQUE
  [Nome_Banco   ]=NOME_BANCO
  [Codigo CMC7  ]=Dados_Cheque
  
  VSD_CBanco     =CODIGO_BANCO
  If IsBlank(NOME_BANCO)
     Then Opcao_Ler_Cheque=False
          Mensagem("Banco "+CODIGO_BANCO+" nÆo cadastrado !")
     Else Opcao_Ler_Cheque=True
          [Codigo_Banco ]=CODIGO_BANCO
  EndIf

  AchouPessoa=False
  Moveto "\\Sistemas\\CheqRec\\CDPessoa"
  Moveto [Codigo_Banco]
  Locate CODIGO_BANCO, AGENCIA_CHEQUE, CONTA_CHEQUE
  If RetVal
     Then VSD_CPF   =[\Sistemas\CheqRec\CDPessoa->CPF]
          VSD_Nome  =[\Sistemas\CheqRec\CDPessoa->Titular_Cheque]
          VSD_Cidade=[\Sistemas\CheqRec\CDPessoa->Cidade]
          VSD_UF    =[\Sistemas\CheqRec\CDPessoa->UF]
          VSD_TipoEmit="TERCEIRO"
          AchouPessoa=True
  EndIf                       

  Moveto "Titcheq"
  If AChouPessoa
     Then [Tipo_Emitente       ]=VSD_TipoEmit
          [Titular_Cheque      ]=VSD_Nome
          [Cidade              ]=VSD_Cidade
          [UF                  ]=VSD_UF
          [CPF                 ]=VSD_CPF
  EndIf

  Controla_EdicaoCH()

EndWhile
EndProc

;*******************************************************************************
;* Checagem de Cheques                                                         *
;*******************************************************************************
Proc CHECACHEQ()
If [Situacao]="LIQUIDADO"   Or
   [Situacao]="SEM FUNDO"   Or
   [Situacao]="EM COBRANCA" Or
   Search("TROCADO",[Situacao])>0
   Then MSG=    Completa("Cheque.: "+[Numero_Cheque],50," ")+"//"
        MSG=MSG+Completa("Banco..: "+[Codigo_Banco ]+" "+[Nome_Banco],50," ")+"//"
        MSG=MSG+Completa("Agencia: "+[Agencia],50," ")+"//"
        MSG=MSG+Completa("Titular: "+[Titular_Cheque],50," ")+"//"
        MSG=MSG+Completa("Vencto.: "+Format("D13",[Data Vencimento]),50," ")+"//"
        MSG=MSG+Completa("Valor..: "+Format("W10.2,EIC",[Valor]),50," ")+"// //"
        MSG=MSG+"Situa‡„o: [ "+[Situacao]+" ] em "+Format("D13",[Data_Liquidado])
        Mensagem(MSG)
        Return False
EndIf

[Situacao           ]="LIQUIDADO"
[Sistema Destino    ]="CP"
[Numero do Documento]=[Titulos->Numero do Documento ]
[Lancamento Destino ]=[Titulos->Numero do Lancamento]
[Tipo de Destino    ]="PAGAMENTO"
[Data_Liquidado     ]=Today()
UnLockRecord

Moveto "TitCheq"
[Numero Lancamento Cheque]=Reg_ConsultaF1["Numero do Lancamento"]
[Sequencia do Cheque     ]=Reg_ConsultaF1["Sequencia do Cheque"]
[Codigo_Banco            ]=Reg_ConsultaF1["Codigo_Banco"]
[Nome_Banco              ]=Reg_ConsultaF1["Nome_Banco"]
[Agencia                 ]=Reg_ConsultaF1["Agencia"]
[Numero_Conta            ]=Reg_ConsultaF1["Numero_Conta"]
[Numero_Cheque           ]=Reg_ConsultaF1["Numero_Cheque"]
[CPF                     ]=Reg_ConsultaF1["CPF"]
[Tipo_Emitente           ]=Reg_ConsultaF1["Tipo_Emitente"]
[Titular_Cheque          ]=Reg_ConsultaF1["Titular_Cheque"]
[Cidade                  ]=Reg_ConsultaF1["Cidade"]
[UF                      ]=Reg_ConsultaF1["UF"]
[Data Vencimento         ]=Reg_ConsultaF1["Data Vencimento"]
[Valor                   ]=Reg_ConsultaF1["Valor"]
[Observacao do Cheque    ]=Reg_ConsultaF1["Observacao do Cheque"]
[Data_Liquidado          ]=Today()
Controle_Dia()
UnLockRecord

Moveto "Titcheq"

Return True
EndProc ; (ChecaCHEQ)


;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Item_DialogCH(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5
TECLA=" Esc=Retornar  "
MSG_CAMPO=""
Temp=True
If INICIO_DIALOG
   Then INICIO_DIALOG=False
        If Opcao_Ler_Cheque = True
           Then If AchouPessoa
                   Then Campo ="DataV"
                   Else Campo ="CPF"
                Endif   
           Else Campo ="CBanco"
        EndIf
EndIf      
      
If Opcao_Ver        =True  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_RegistroCH()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9:
          Temp=False
     Case Evento["KeyCode"] = -46:
          If COPIOU_REGISTRO And CHAVECH=1
             Then CopyFromArray REGISTRO
                  [Numero do Lancamento]=NLANC
                  [Sequencia           ]=ITEM
                  [Codigo_Banco        ]=VSD_CBanco
                  [Numero_Cheque       ]=VSD_NCheque
                  [Data Vencimento     ]=BlankDate()
                  Registro_ItemCH("Ler")
          EndIf
     Case Evento["KeyCode"] = -59:
          If Campo="CBanco" Or
             Campo="Cidade" Or
             Campo="UF"
             Then
                  Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

                  If Campo="CBanco" Then Moveto [Codigo_Banco] EndIf
                  If Campo="Cidade" Then Moveto [Cidade      ] EndIf
                  If Campo="UF"     Then Moveto [UF          ] EndIf
                  If ConsultaF1()
                      Then If Campo="Cidade"
                              Then [UF]=Reg_ConsultaF1["UF"]
                                   VSD_UF=[UF]
                           EndIf
                  EndIf

                  Window Select JANELA
                  WinArray5["FLOATING"]=True
                  Window SetAttributes JANELA From WinArray5

                  echo Normal
                  echo off

                  If Campo="CBanco"
                     Then VSD_CBanco=[Codigo_Banco]
                          VSD_NBanco=[Nome_Banco  ]
                  EndIf
                  If Campo="Cidade"
                     Then VSD_Cidade=[Cidade]
                  EndIf
                  If Campo="UF"
                     Then VSD_UF=[UF]
                  EndIf
                  Moveto "Titcheq"
          EndIf

     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVECH=0
             Then If QuerExcluir("")
                     Then CHAVECH=8
                          CancelDialog
                  EndIf
          EndIf
     Case Evento["KeyCode"] = -81:
            VSD_CBanco   =ControlValue("CBanco")
            VSD_NCheque  =ControlValue("NCheque")
            VSD_Nome     =ControlValue("Nome")
            VSD_Agencia  =ControlValue("Agencia")
            VSD_CCorrente=ControlValue("CCorrente")
            VSD_TipoEmit ="TERCEIRO"
            VSD_Cidade   =ControlValue("Cidade")
            VSD_UF       =ControlValue("UF")
            VSD_DataV    =ControlValue("DataV")
            VSD_Valor    =ControlValue("Valor")
            VSD_Obs      =ControlValue("Obs")
            VSD_CPF      =ControlValue("CPF")

            Pode_Gravar=True
            If IsBlank(VSD_DataV)
               Then Mensagem("Data Vencimento Invalida !")
                    Pode_Gravar=False
            EndIf
            If IsBlank(VSD_Valor)
               Then Mensagem("Valor Invalido !")
                    Pode_Gravar=False
            EndIf

            If Pode_Gravar
               Then AcceptDialog
            EndIf
     Case Evento["KeyCode"] = 27:
          Switch
            Case Campo="CBanco"   :
                 If QuerDesfazer("")
                    Then If CHAVECH=1
                            Then Del
                            Else CopyFromArray RegItem
                         EndIf
                         CHAVECH=9
                         CancelDialog
                 EndIf
            Case Campo="Agencia"  : Campo="CBanco"
            Case Campo="CCorrente": Campo="Agencia"
            Case Campo="NCheque"  : Campo="CCorrente"
            Case Campo="CPF"      : Campo="NCheque"
            Case Campo="Nome"     : Campo="CPF"
            Case Campo="Cidade"   : Campo="Nome"
            Case Campo="UF"       : Campo="Cidade"
            Case Campo="DataV"    : Campo="UF"
            Case Campo="Valor"    : Campo="DataV"
            Case Campo="Obs"      : Campo="Valor"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Switch
            Case Campo="CBanco":
                 VSD_CBanco=ControlValue("CBanco")
                 If Not IsBlank(VSD_CBanco)
                    Then Moveto [Codigo_Banco]
                         Ativa_Lookup()
                         Moveto [Codigo_Banco]
                         Locate VSD_CBanco
                         If RetVal
                            Then VSD_CBanco=[Codigo_Banco      ]
                                 VSD_NBanco=[Nome_Banco        ]
                                 KeyPress "ESC"
                                 Moveto "TitCheq"
                                 [Codigo_Banco]=VSD_CBanco
                                 Campo="Agencia"
                            Else Mensagem("Banco n„o Cadastrado !")
                                 VSD_CBanco=""
                                 VSD_NBanco=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="Agencia":
                 VSD_Agencia=ControlValue("Agencia")
                 Campo="CCorrente"
             Case Campo="CCorrente": Campo="NCheque"
                  VSD_CCorrente=ControlValue("CCorrente")

                  AchouPessoa=False
                  If CHAVECH=1 And
                     Not IsBlank(VSD_AGENCIA) And
                     Not IsBlank(VSD_CCORRENTE)
                     Then Moveto "\\Sistemas\\CheqRec\\CDPessoa"
                          Moveto [Codigo_Banco]
                          Locate VSD_CBANCO, VSD_AGENCIA, VSD_CCORRENTE
                          If RetVal
                             Then VSD_CPF   =[\Sistemas\CheqRec\CDPessoa->CPF]
                                  VSD_Nome  =[\Sistemas\CheqRec\CDPessoa->Titular_Cheque]
                                  VSD_Cidade=[\Sistemas\CheqRec\CDPessoa->Cidade]
                                  VSD_UF    =[\Sistemas\CheqRec\CDPessoa->UF]
                                  VSD_TIPOEmit="TERCEIRO"
                                  AchouPessoa=True
                          EndIf                       

                          Moveto "Titcheq"
                          If AchouPessoa
                             Then [Tipo_Emitente       ]=VSD_TipoEmit
                                  [Titular_Cheque      ]=VSD_Nome
                                  [Cidade              ]=VSD_Cidade
                                  [UF                  ]=VSD_UF
                                  [CPF                 ]=VSD_CPF
                          EndIf
                  EndIf   
            Case Campo="NCheque":
                 VSD_NCheque=ControlValue("NCheque")
                 VSD_TipoEmit="TERCEIRO"
                 Campo="CPF"
             Case Campo="CPF":
                  VSD_CPF=ControlValue("CPF")
                  wok=true
                  If Not IsBlank(VSD_CPF)
                     Then If Tipo_CGC_CPF(VSD_CPF)<>"CGC" And
                             Tipo_CGC_CPF(VSD_CPF)<>"CPF"
                             Then Mensagem("CPF/CGC Invalido !")
                                  wok=false
                          EndIf
                  EndIf
                  If wok
                     Then Campo="Nome"
                          If CHAVECH=1 And
                             Not AchouPessoa And
                             Not IsBlank(VSD_CPF)
                             Then AchouPessoa=False
                                  Moveto "\\Sistemas\\CheqRec\\CDPessoa"
                                  Moveto [CPF]
                                  Locate IndexOrder by "Ind_CPF1" VSD_CPF
                                  If RetVal
                                     Then VSD_Nome  =[\Sistemas\CheqRec\CDPessoa->Titular_Cheque]
                                          VSD_Cidade=[\Sistemas\CheqRec\CDPessoa->Cidade]
                                          VSD_UF    =[\Sistemas\CheqRec\CDPessoa->UF]
                                          AchouPessoa=True
                                          Campo="DataV"
                                  EndIf                       

                                  Moveto "Titcheq"
                                  If AchouPessoa
                                     Then [Titular_Cheque      ]=VSD_Nome
                                          [Cidade              ]=VSD_Cidade
                                          [UF                  ]=VSD_UF
                                  EndIf
                          EndIf   
                  EndIf

            Case Campo="Nome":
                 VSD_Nome=ControlValue("Nome")
                 Campo="Cidade"
            Case Campo="Cidade":
                 VSD_Cidade=ControlValue("Cidade")                             
                 If IsBlank(VSD_Cidade) 
                    Then Campo="Cidade"                     
                    Else Campo="UF"     
                 EndIf              
            Case Campo="UF":
                 VSD_UF=ControlValue("UF")
                 If IsBlank(VSD_UF) 
                    Then Campo="UF"                     
                    Else Campo="DataV"     
                 EndIf                  
                 If Not IsBlank(VSD_Cidade)
                    Then Moveto [Cidade]
                         Ativa_Lookup()
                         Moveto [Cidade]
                         Locate VSD_Cidade,VSD_UF
                         If RetVal
                            Then VSD_Cidade=[Cidade ]
                                 VSD_UF=[UF]
                                 KeyPress "ESC"
                                 Moveto "Titcheq"
                                 [Cidade]=VSD_Cidade
                                 [UF]=VSD_UF                                
                            Else Mensagem("Cidade n„o Cadastrada !")
                                 VSD_Cidade=""
                                 Campo="Cidade"
                                 KeyPress "ESC"
                         EndIf
                         Echo Off                  
                 Else 
                 If Not IsBlank(VSD_UF)
                    Then Moveto [UF]
                         Ativa_Lookup()
                         Moveto [UF]
                         Locate VSD_UF
                         If RetVal
                            Then VSD_UF=[UF]
                                 KeyPress "ESC"
                                 Moveto "Titcheq"
                                 [UF]=VSD_UF
                                 Campo="DataV"
                            Else Mensagem("UF n„o Cadastrada !")
                                 VSD_UF=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
                 EndIf
            Case Campo="DataV":
                 VSD_DataV=ControlValue("DataV")
                 If Not IsBlank(VSD_DataV)
                    Then Campo="Valor"
                 EndIf
            Case Campo="Valor":
                 VSD_Valor=ControlValue("Valor")
                 If Not IsBlank(VSD_Valor)
                    Then Campo="Obs"
                 EndIf
            Case Campo="Obs":
                 VSD_Obs=ControlValue("Obs")
                 AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="CBanco"      Or
   Campo="Cidade"      Or
   Campo="UF"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
If CHAVECH=0
   Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
EndIf

If CHAVECH=1 And COPIOU_REGISTRO
   Then TECLA=TECLA+"Alt+C=Copiar  PgDn=Finalizar  "
EndIf

Switch
  Case Campo="CCorrente":
       MSGCAMPO="Conta Corrente"
  Case Campo="DataV":
       MSGCAMPO="Data do Vencimento"
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog
Return TEMP
EndProc   ; (Item_Dialog)

;*******************************************************************************
;* Ler ou Gravar Dados do Cheque                                               *
;*******************************************************************************
Proc Registro_ItemCH(Opcao)
Private Opcao
Switch
  Case Opcao="Ler":
       VSD_I_SEQ    =[Sequencia           ]
       If IsBlank([Numero Lancamento Cheque])
          Then VSD_Lanctoch ="CH NAO CADASTRADO"
          Else VSD_Lanctoch =StrVal([Numero Lancamento Cheque])+"/"+StrVal([Sequencia do Cheque])
       EndIf
       VSD_DataV    =[Data Vencimento     ]
       VSD_CBanco   =[Codigo_Banco        ]
       VSD_NBanco   =[Nome_Banco          ]
       VSD_Agencia  =[Agencia             ]
       VSD_CCorrente=[Numero_Conta        ]
       VSD_NCheque  =[Numero_Cheque       ]
       VSD_TipoEmit =[Tipo_Emitente       ]
       VSD_Nome     =[Titular_Cheque      ]
       VSD_Cidade   =[Cidade              ]
       VSD_UF       =[UF                  ]
       VSD_Valor    =[Valor               ]
       VSD_Obs      =[Observacao do Cheque]
       VSD_CPF      =[CPF                 ]

       VSDGU_USUARIO = [Codigo_Usuario     ]
       VSDGU_DATA    = [Data_Inclusao      ]
       VSDGU_HORA    = [Hora_Inclusao      ]
       VSDGU_CONTROLE= [Numero_Controle_Dia]

  Case Opcao="Gravar":
       [Data Vencimento     ]=VSD_DataV
       [Codigo_Banco        ]=VSD_CBanco
       [Nome_Banco          ]=VSD_NBanco
       [Agencia             ]=VSD_Agencia
       [Numero_Conta        ]=VSD_CCorrente
       [Numero_Cheque       ]=VSD_NCheque
       [Tipo_Emitente       ]=VSD_TipoEmit
       [Titular_Cheque      ]=VSD_Nome
       [Cidade              ]=VSD_Cidade
       [UF                  ]=VSD_UF
       [Observacao do Cheque]=VSD_Obs
       [Valor               ]=VSD_Valor
       [CPF                 ]=VSD_CPF
       [Data_Liquidado      ]=Today()
       If CHAVECH=1 Then Controle_Dia() EndIf

       CopyToArray REGISTRO
       COPIOU_REGISTRO=True
       UnLockRecord

       If Not IsBlank(VSD_Agencia) And
          Not IsBlank(VSD_CCorrente) And
          Not IsBlank(VSD_CPF) Then
          For wi From 1 To 5
            CDPessoaNova=False
            Moveto "\\Sistemas\\CheqRec\\CDPessoa"
            Moveto [Codigo_Banco]
            Locate VSD_CBANCO, VSD_AGENCIA, VSD_CCORRENTE
            If Not RetVal
               Then CDPessoaNova=True
                    End
                    Down
                    [Codigo_Banco        ]=VSD_CBanco
                    [Agencia             ]=VSD_Agencia
                    [Numero_Conta        ]=VSD_CCorrente
            EndIf                       
            If IsLockRecord()
               Then If CDPessoaNova
                       Then Del
                    EndIf
                    If wi=5 
                       Then QuitLoop
                       Else Loop 
                    EndIf
            EndIF   
            [CPF                 ]=VSD_CPF
            [Titular_Cheque      ]=VSD_Nome
            [Cidade              ]=VSD_Cidade
            [UF                  ]=VSD_UF
            [Numero_Cheque       ]=VSD_NCheque
            [Data Vencimento     ]=VSD_DataV
            UnLockRecord
            QuitLoop
          EndFor
       EndIf
       Moveto "Titcheq"

EndSwitch
EndProc  ; (Registro_ItemCH)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_RegistroCH()
INICIO_DIALOG=True
Moveto [Sequencia]
Locate NLANC,ITEM
CopyToArray RegItem
Registro_ItemCH("Ler")
EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Digitacao de Cheques                                                        *
;*******************************************************************************
Proc DigitaCH()

Showdialog "Dados do Cheque sem Controle CH/Terceiros [    ]" Proc "Item_DialogCH"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","HOME","END","PGDN","PGUP",-46
     @ 10,4 height 13 width 71

   Accept @ -01,53 Width 4 "A2" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 0,00 "Lan‡to CH" for "Lanctoch"
   Accept @ 1,01  Width 15 "A12" picture "!*!" Tag "LanctoCH" to VSD_Lanctoch

   Label  @ 0,24 "N§ Banco  Nome Banco" for "CBanco"
   Accept @ 1,25  Width 8 "A4" picture "!*!" Tag "CBanco" to VSD_CBanco
   Accept @ 1,34  Width 23 "A20" picture "!*!" Tag "NBanco" to VSD_NBanco

   Label  @ 0,58 "Agencia" for "Agencia"
   Accept @ 1,59  Width 9 "A6" picture "!*!" Tag "Agencia" to VSD_Agencia

   Label  @ 2,00 "C/C" for "CCorrente"
   Accept @ 3,01  Width 13 "A10" picture "!*!" Tag "CCorrente" to VSD_CCorrente

   Label  @ 2,16 "N§ Cheque" for "NCheque"
   Accept @ 3,17  Width 13 "A10" picture "!*!" Tag "NCheque" to VSD_NCheque

   Label  @ 4,00 "CPF/CGC" for "CPF"
   Accept @ 5,01  Width 21 "A18" picture "##[.]###.###/####-##,###.###.###-##" Tag "CPF" to VSD_CPF

   Label  @ 4,24 "Nome do Titular" for "Nome"
   Accept @ 5,25  Width 43 "A40" picture "!*!" Tag "Nome" to VSD_Nome

   Label  @ 6,00 "Cidade" for "Cidade"
   Accept @ 7,01  Width 23 "A20" picture "!*!" Tag "Cidade" to VSD_Cidade

   Label  @ 6,24 "UF" for "UF"
   Accept @ 7,25  Width 5  "A2" picture "!*!" Tag "UF" to VSD_UF

   Label  @ 6,37 "Data Vencto " for "DataV"
   Accept @ 7,37  Width 13 "D" picture "#[#];.##;.##[##]" Tag "DataV" to VSD_DataV

   Label  @ 6,51 "Valor do Cheque" for "Valor"
   Accept @ 7,52  Width 16 "$" picture "#*#.[##]" Tag "Valor" to VSD_Valor

   Label  @ 08,00 "Observa‡„o do Cheque" for "Obs"
   Accept @ 09,01  Width 67 "A70" picture "!*!" Tag "Obs" to VSD_Obs

   @ 10,00 ?? "[Usu rio: "+VSDGU_USUARIO+" "+Format("D13",VSDGU_DATA)+" "+VSDGU_HORA+" "+VSDGU_CONTROLE
   @ 10,68 ?? "]"
   PaintCanvas Attribute 10 10, 01, 10, 67
   
Enddialog
Mouse Show
If RetVal
   Then Finaliza_RegistroCH(True)
   Else Finaliza_RegistroCH(False)
EndIf
EndProc ; (DigitaCH)

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_RegistroCH(ok)
Private ok
If Ok
   Then Registro_ItemCH("Gravar")
   Else If CHAVECH=8
           Then If Not IsBlank([Numero Lancamento Cheque]) Then

                   NLANCCH=[Titcheq->Numero Lancamento Cheque]
                   SITEMCH=[Sequencia do Cheque]

                   Moveto "\\Sistemas\\CheqRec\\ChequeI"
                   Moveto [Numero do Lancamento]
                   Locate NLANCCH,SITEMCH
                   If RetVal
                      Then [Situacao          ]="EM ABERTO"
                           [Sistema Destino   ]=""
                           [Lancamento Destino]=""
                           [Tipo de Destino   ]=""
                           [Data_Liquidado    ]=BlankDate()
                           UnLockRecord
                   EndIf
                EndIf
                Moveto "TitCheq"
                Del
        EndIf
EndIf
EndProc   ; (Finaliza_RegistroCH)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoCH()
Inicia_RegistroCH()
DigitaCH()
Moveto "Titcheq"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
Inicia_Registro()
Digita_Baixa()
Moveto "TitBaixa"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoN()
DIGITAN()
Moveto "TitNota"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;+-----------------------------------------------------------------------------+
;*******************************************************************************
;* Rotina para controlar Edicao do registro (Rateio)                           *
;*******************************************************************************
Proc Controla_EdicaoR()
DIGITAR()
Moveto "TitRat"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;   [ FIM ]        Rotinas comuns Titulos, Bxforn, Titulobx               
;+-----------------------------------------------------------------------------+
;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
DIGITAC=True
DIGITENS=1
Tecla_Funcao=""
While DIGITENS<>0
  Switch
     Case DIGITENS=1:
          Moveto "Titulos"
          Moveto [Pag_1]

          Moveto "TitBaixa"
          While True
            Tecla_Funcao=""
            CHAVEI()
            If CHAVEI=9
               Then QuitLoop
            EndIf
            Controla_EdicaoI()
          EndWhile
     Case DIGITENS=2:
          Moveto "Titulos"
          Moveto [Pag_2]

          Moveto "TitCheq"
          While True
            Tecla_Funcao=""
            CHAVECH()
            If CHAVECH=9
               Then QuitLoop
            EndIf
            If CHAVECH=1
               Then DigitaCH1()
               Else Controla_EdicaoCH()
            EndIf
          EndWhile
     Case DIGITENS=3:
          Moveto "Titulos"
          Moveto [Pag_3]

          Moveto "TitNota"
          Saldo_Atualizado=False
          While True
            Tecla_Funcao=""
            CHAVEN()
            If CHAVEN=9
               Then QuitLoop
            EndIf
            Controla_EdicaoN()
          EndWhile
     Case DIGITENS=4:        
          Moveto "Titulos"
          Moveto [Tipo]
          
          Moveto "TitRat"            
          While True
            Tecla_Funcao=""
            CHAVER()
            If CHAVER=9
               Then QuitLoop
            EndIf
            Controla_EdicaoR()
          EndWhile  
  EndSwitch

    Switch
      Case Tecla_Funcao=-116 or Tecla_Funcao=-77:
           Switch
             Case Table()="TitRat"  : DIGITENS=4
             Case Table()="Titbaixa": DIGITENS=2
             Case Table()="Titcheq" : DIGITENS=3
             Case Table()="Titnota" : DIGITENS=1
           EndSwitch
      Case Tecla_Funcao=-115 or Tecla_Funcao=-75:
           Switch
             Case Table()="TitRat"  : DIGITENS=4
             Case Table()="Titnota" : DIGITENS=2
             Case Table()="Titcheq" : DIGITENS=1
             Case Table()="Titbaixa": DIGITENS=3
           EndSwitch
    EndSwitch

EndWhile
Moveto "Titulos"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="6"
   Then PickForm "6"
EndIf

SaveTables
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"

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
If Not IsAssigned(SYS_VERSAO_SO)       Then SYS_VERSAO_SO="Windows"  EndIf

Ler_Captura("")

Carrega_Parametros3()
Carrega_Parametros2()
Carrega_Parametros()

View NoWindow "\\Sistemas\\CtaCor\\Conta"
View "\\Sistemas\\CheqRec\\ChequeI"
View "\\Sistemas\\CheqRec\\Cdpessoa"
View NoWindow "TitNota"
View NoWindow "TitCheq"
View NoWindow "TitBaixa"
View NoWindow "TitRat"
View NoWindow "P_Cheque"
CoEdit "Titulos"
;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return
EndIf
PickForm "4"

;*** Forms UnLinked *****
Moveto "\\Sistemas\\Cadastro\\Feriados"   SetHighLight Current Record 51 Field 51
Moveto "\\Sistemas\\CtaCor\\SaldCont"     SetHighLight Current Record 51 Field 51
Moveto "\\Sistemas\\CtaCor\\MovCont"      SetHighLight Current Record 51 Field 51
Moveto "\\Sistemas\\CheqRec\\ChequeI"     SetHighLight Current Record 51 Field 51
Moveto "\\Sistemas\\CheqRec\\Cdpessoa"    SetHighLight Current Record 51 Field 51

Moveto "Titulos"
PickForm "6"

If NRecords("Titulos")>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

CONTA=""
NLANC=""
NLANCC=0
OPCAO_FORM="6"
While True
  CHAVEC()
  If CHAVEC=9
     Then QuitLoop
  EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="6"
             Then PickForm "6"
             Else PickForm "4"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
