;* * FT_RAT ********************************************************************
;*  Rateio p/ Caixa/Banco, Contas a Receber e Contas a Pagar                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 20/07/2018 por Bruno Carvalho               
;Ultima Alteracao: 07/08/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes Array_Rateio() 
;Ultima Alteracao: 21/08/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado Atualiza_Rateio() -> Atualiza rateio nas baixas conforme rateio na cabe‡a *Proporcionalmente

;*******************************************************************************
;* Rateio da Baixa                                                             *
;*******************************************************************************
Proc Opcoes_Rateio(PARAM)
Private PARAM

If SubStr(Upper(Table()),1,3) = "MOV" Then NLANC=LANCTO EndIf   

Switch
  Case PARAM = "Tem_Rateio"  :
       Switch  
         Case SubStr(Upper(Table()),1,3) = "TIT" : TEM_RATEIO = [Titulos->Tem Rateio]
         Case SubStr(Upper(Table()),1,3) = "DUP" : TEM_RATEIO = [Duplic->Tem Rateio ]
         Case SubStr(Upper(Table()),1,3) = "MOV" : TEM_RATEIO = [MovCont->Tem Rateio]
         OtherWise                               : Mensagem("Tabela nÆo localizada!")
                                                   Return False 
       EndSwitch
  Case PARAM = "Valor_Documento_Cabeca"  :
       Switch  
         Case SubStr(Upper(Table()),1,3) = "TIT" : RATEIO_VRDOCTO = [Titulos->Valor do Documento]
         Case SubStr(Upper(Table()),1,3) = "DUP" : RATEIO_VRDOCTO = [Duplic->Valor do Documento ]
         Case SubStr(Upper(Table()),1,3) = "MOV" : RATEIO_VRDOCTO = [MovCont->Valor             ]
         OtherWise                               : Mensagem("Tabela nÆo localizada!")
                                                   Return False 
       EndSwitch
  Case PARAM = "Valor_Documento_Baixa"  :
       Switch  
         Case SubStr(Upper(Table()),1,3) = "TIT" : RATEIO_VRDOCTO = VSD_I_Vr_Pagto
         Case SubStr(Upper(Table()),1,3) = "DUP" : RATEIO_VRDOCTO = VSD_I_Vr_Pagto
         Case SubStr(Upper(Table()),1,3) = "MOV" : RATEIO_VRDOCTO = [MovCont->Valor]
         OtherWise                               : Mensagem("Tabela nÆo localizada!")
                                                   Return False 
       EndSwitch       
  Case PARAM = "Titulo"  :
       Switch  
         Case SubStr(Upper(Table()),1,3) = "TIT" : TIT = "Rateio do Lan‡amento -> Valor … ratear "+Ltrim(Format("W12.2,EIC",RATEIO_VRDOCTO))
         Case SubStr(Upper(Table()),1,3) = "DUP" : TIT = "Rateio do Contas a Receber -> Valor … ratear "+Ltrim(Format("W12.2,EIC",RATEIO_VRDOCTO))
         Case SubStr(Upper(Table()),1,3) = "MOV" : TIT = "Rateio Caixa/Banco -> Valor … ratear "+Ltrim(Format("W12.2,EIC",RATEIO_VRDOCTO))
         OtherWise                               : Mensagem("Tabela nÆo localizada!")
                                                   Return False 
       EndSwitch
  Case PARAM="GetRecord" :
       Switch
         Case SubStr(Upper(Table()),1,3) = "TIT" : TABELA_BXRATEIO = "TitRat"
         Case SubStr(Upper(Table()),1,3) = "DUP" : TABELA_BXRATEIO = "DupRat"
         Case SubStr(Upper(Table()),1,3) = "MOV" : TABELA_BXRATEIO = "MovRat"
         OtherWise                               : Mensagem("Tabela nÆo localizada!")
                                                   Return False 
       EndSwitch
  Case PARAM="Tabela_Baixa" : 
       Switch
         Case SubStr(Upper(Table()),1,3) = "TIT" : Moveto "TitBaixa"
         Case SubStr(Upper(Table()),1,3) = "DUP" : Moveto "DupBaixa"
         Case SubStr(Upper(Table()),1,3) = "MOV" : Moveto "Movcont"
         OtherWise                               : Mensagem("Tabela nÆo localizada!")
                                                   Return False 
       EndSwitch
  Case PARAM="Tabela_Cabeca" : 
       Switch
         Case SubStr(Upper(Table()),1,3) = "TIT" : Moveto "Titulos"
         Case SubStr(Upper(Table()),1,3) = "DUP" : Moveto "Duplic"
         Case SubStr(Upper(Table()),1,3) = "MOV" : Moveto "Movcont"
         OtherWise                               : Mensagem("Tabela nÆo localizada!")
                                                   Return False 
       EndSwitch       
  Case PARAM="Sequencia_Baixa" :      
       If TIPO_RATEIO = "Baixa"
          Then Switch
                 Case SubStr(Upper(Table()),1,3) = "TIT" : SEQ = [TitBaixa->Sequencia da Baixa]
                 Case SubStr(Upper(Table()),1,3) = "DUP" : SEQ = [DupBaixa->Sequencia da Baixa]
                 Case SubStr(Upper(Table()),1,3) = "MOV" : SEQ = "0"
                 OtherWise                               : Mensagem("Tabela nÆo localizada!")
                                                           Return False 
               EndSwitch
          Else SEQ = "0"
       EndIf         
  Case PARAM="Tabela_Rateio" : 
       Switch
         Case SubStr(Upper(Table()),1,3) = "TIT" : Moveto "TitRat"
         Case SubStr(Upper(Table()),1,3) = "DUP" : Moveto "DupRat"
         Case SubStr(Upper(Table()),1,3) = "MOV" : Moveto "MovRat"
         OtherWise                               : Mensagem("Tabela nÆo localizada!")
                                                   Return False 
       EndSwitch
EndSwitch

Return True

EndProc ;Opcoes_Rateio()

;*******************************************************************************
;* Rotina Verifica Valor do Rateio                                             *
;*******************************************************************************
Proc Atualiza_Rateio()
Private RATEIO_BAIXA,Conta_Array,ii,SEQ,PLANO_CONTA_COD,PLANO_CONTA_DES,CENTRO_CUSTO_COD,CENTRO_CUSTO_DES,PORC,VALOR,
        VERIFICA_VALOR,TEMP,SEQ_BAIXA

TEMP = False

TIPO_RATEIO = "Baixa"
Opcoes_Rateio("Sequencia_Baixa")
SEQ_BAIXA = StrVal(SEQ)

Opcoes_Rateio("Tabela_Rateio")
Moveto [Numero do Lancamento]
Locate NLANC,SEQ_BAIXA
If Not Retval
   Then Home 
        Locate NLANC,"0"
        If RetVal
           Then Opcoes_Rateio("Valor_Documento_Cabeca")
                RATEIO_CABECA_VRDOCTO = RATEIO_VRDOCTO
                Opcoes_Rateio("Valor_Documento_Baixa")
                DynArray RATEIO_BAIXA[] 
                Conta_Array = 0
                While [Numero do Lancamento] = NLANC And [Sequencia da Baixa  ] = "0"
                  If IsBlank([Porcentagem])
                     Then PORC = [Valor]*100 / RATEIO_CABECA_VRDOCTO
                     Else PORC = [Porcentagem] 
                  EndIf    
                  RATEIO_BAIXA_VRDOCTO = RATEIO_VRDOCTO * PORC /100  
                  
                  Conta_Array = Conta_Array + 1
                  RATEIO_BAIXA[Conta_Array] = Format("W5",[Sequencia do Rateio])+
                                              Format("W13",[Codigo Plano_Conta])+
                                              Format("W45",[Descricao Plano_Conta])+
                                              Format("W7",[Codigo CCusto])+
                                              Format("W25",[Descricao CCusto])+
                                              Format("W10.2",[Porcentagem])+
                                              Format("W13.2",RATEIO_BAIXA_VRDOCTO)
                  Skip
                  If Eot() Then QuitLoop EndIf
                EndWhile
        
                Opcoes_Rateio("Valor_Documento_Baixa")
                Opcoes_Rateio("Tabela_Rateio")
                End 
                VERIFICA_VALOR = 0
                For ii From 1 To DynArraySize(RATEIO_BAIXA)
                  SEQ              = Ltrim(Rtrim(SubStr(RATEIO_BAIXA[ii],001,05)))
                  PLANO_CONTA_COD  = Rtrim(SubStr(RATEIO_BAIXA[ii],006,13))
                  PLANO_CONTA_DES  = Rtrim(SubStr(RATEIO_BAIXA[ii],019,45))
                  CENTRO_CUSTO_COD = Rtrim(SubStr(RATEIO_BAIXA[ii],064,07))
                  CENTRO_CUSTO_DES = Rtrim(SubStr(RATEIO_BAIXA[ii],071,25))
                  PORC             = Ltrim(Rtrim(SubStr(RATEIO_BAIXA[ii],096,10)))
                  VALOR            = Ltrim(Rtrim(SubStr(RATEIO_BAIXA[ii],106,13)))
                  
                  If SEQ<>""   Then SEQ   = NumVal(SEQ)   Else SEQ=0   EndIf
                  If PORC<>""  Then PORC  = NumVal(PORC)  Else PORC=0  EndIf 
                  If VALOR<>"" Then VALOR = NumVal(VALOR) Else VALOR=0 EndIf
                
                  If PORC = 0  Then PORC  = BlankNum() EndIf 
                  If VALOR = 0 Then VALOR = BlankNum() EndIf
                
                  VERIFICA_VALOR   = VERIFICA_VALOR + VALOR
                  If DynArraySize(RATEIO_BAIXA) = ii
                     Then If RATEIO_VRDOCTO - VERIFICA_VALOR < 0
                             Then VALOR = VALOR - (VERIFICA_VALOR - RATEIO_VRDOCTO)
                          EndIf
                  EndIf
                  Down
                  [Numero do Lancamento ]=NLANC
                  [Sequencia da Baixa   ]=SEQ_BAIXA
                  [Sequencia do Rateio  ]=SEQ
                  [Codigo Plano_Conta   ]=PLANO_CONTA_COD
                  [Descricao Plano_Conta]=PLANO_CONTA_DES
                  [Codigo CCusto        ]=CENTRO_CUSTO_COD
                  [Descricao CCusto     ]=CENTRO_CUSTO_DES
                  [Porcentagem          ]=PORC
                  [Valor                ]=VALOR
                  UnLockRecord
                EndFor
                TEMP = True
        EndIf
EndIf
Opcoes_Rateio("Tabela_Baixa")

Return TEMP

EndProc ;Atualiza_Rateio()

;*******************************************************************************
;* Rotina Verifica Valor do Rateio                                             *
;*******************************************************************************
Proc Verifica_Rateio(PARAM)
private PARAM,ntable, pcbranco, ccbranco, rateio, baixa, Msg,MSG_RATEIO,CONTA_ARRAY,ACHOU_RATEIO             

ntable=table()

pcbranco    = 0
ccbranco    = 0
rateio      = 0
baixa       = 0
CONTA_ARRAY = 0

If PARAM <> "Baixa"
   Then Opcoes_Rateio("Valor_Documento_Cabeca")
        If SubStr(Upper(Table()),1,3) = "TIT" Or SubStr(Upper(Table()),1,3) = "DUP" 
           Then Opcoes_Rateio("Tabela_Baixa")
                Scan for Not IsBlank([Sequencia da Baixa])
                   if [Tipo da Baixa]<>"NORMAL"
                      then baixa=baixa+ (([Valor do Pagamento]+[Valor do Desconto])-[Valor do Juros])
                   endif
                EndScan
        EndIf
   Else Opcoes_Rateio("Valor_Documento_Baixa")       
EndIf

ACHOU_RATEIO=False
Opcoes_Rateio("Tabela_Rateio")
Moveto [Numero do Lancamento]
If PARAM = "Baixa"
   Then Locate NLANC,SEQ_BAIXA
   Else SEQ_BAIXA = "0"
        Locate NLANC,SEQ_BAIXA
EndIf

If Retval
   Then While [Numero do Lancamento] = NLANC And 
              [Sequencia da Baixa  ] = SEQ_BAIXA
          If Not ACHOU_RATEIO Then ACHOU_RATEIO = True EndIf
          If IsbLank([Codigo Plano_Conta ]) 
             then pcbranco = pcbranco + 1   
          EndIf 
          If IsbLank([Codigo CCusto ]) 
             then ccbranco = ccbranco + 1
          EndIf
          rateio= rateio+[Valor]
          If [Valor]>0
             Then CONTA_ARRAY = CONTA_ARRAY + 1
          EndIf   
          Skip
          If Eot() Then QuitLoop EndIf
          Locate Next NLANC,SEQ_BAIXA
          If Not RetVal Then QuitLoop EndIf
        EndWhile
EndIf

Msg = ""
If PARAM = "Baixa"
   Then If (DynArraySize(ARRAY_BXRATEIO)>0 And rateio=0) Or (rateio>0 And (Format("W12.2",rateio) <> Format("W12.2",RATEIO_VRDOCTO))) 
           Then MSG = MSG + Completa("Valor do Rateio: "+format("W12.2,EIC",rateio),68," ")+"//"
                MSG = MSG + Completa(" Valor da Baixa: "+format("W12.2,EIC",RATEIO_VRDOCTO),68," ")+"//"
                MSG = MSG + Completa("Valor Diferen‡a: "+format("W12.2,EIC",rateio-RATEIO_VRDOCTO),68," ")+"////"
                MSG = MSG + Completa("Valor da Baixa difere do Valor do Rateio!",68," ")+"////"
                MSG = MSG + Completa("Se a diferen‡a nÆo for ajustada, os rateios deverÆo ser excluidos.",68," ")+"////"    
        EndIf 
   Else If (DynArraySize(ARRAY_BXRATEIO)>0 And rateio=0) Or (rateio>0 And (Format("W12.2",rateio) <> Format("W12.2",RATEIO_VRDOCTO-baixa))) 
           Then MSG = MSG + Completa("Valor do Rateio: "+format("W12.2,EIC",rateio),68," ")+"//"
                MSG = MSG + Completa("Valor do Titulo: "+format("W12.2,EIC",RATEIO_VRDOCTO-baixa),68," ")+"//"
                MSG = MSG + Completa("Valor Diferen‡a: "+format("W12.2,EIC",rateio-(RATEIO_VRDOCTO-baixa)),68," ")+"////"
                If SubStr(Upper(Table()),1,3) = "MOV"
                   Then MSG = MSG + Completa("Valor do Titulo difere do Valor do Rateio!",68," ")+"////"
                   Else MSG = MSG + Completa("Valor do Titulo difere do Valor do Rateio, deduzindo baixa CANCELADA",68," ")+"//"
                        MSG = MSG + Completa("E DEVOLU€¶O.",68," ")+"//"
                EndIf
                MSG = MSG + Completa("Se a diferen‡a nÆo for ajustada, os rateios deverÆo ser excluidos.",68," ")+"////"
        EndIf
EndIf

If pcbranco>0 
  Then Msg = Msg + "Existem rateios sem Plano de contas!//"
EndIf
             
moveto ntable

If CONTA_ARRAY=0 And msg=""
   Then If PARAM = "Baixa"
           Then If VSD_I_Tem_Rateio="S"  
                   Then COR_MENSAGEM="ALERTA" 
                        RATEIO_MSG =              Completa("Foi identificado que a baixa esta com a op‡Æo de utilizar o",63," ")+"//"
                        RATEIO_MSG = RATEIO_MSG + Completa("rateio, no entanto, nÆo h  rateio lan‡ado.",63," ")+"//"
                        RATEIO_MSG = RATEIO_MSG + Completa("Esta baixa utilizar  rateio?",59," ")   
                        If ConfGeral(RATEIO_MSG)
                           Then Release Vars COR_MENSAGEM,RATEIO_MSG
                                Return False
                           Else UTILIZA_RAT_BAIXA   = "N"
                                VSD_I_Tem_Rateio    = "N"
                                Opcoes_Rateio("Tabela_Baixa")
                                [Tem Rateio] = VSD_I_Tem_Rateio
                                UnLockRecord 
                                VSD_I_Tem_Rateio_SN = ""     
                        EndIf   
                EndIf   
           Else Opcoes_Rateio("Tem_Rateio")
                If TEM_RATEIO="S"
                   Then COR_MENSAGEM="ALERTA"
                        RATEIO_MSG =              Completa("Foi identificado que este titulo esta com a op‡Æo de utilizar o",63," ")+"//"
                        RATEIO_MSG = RATEIO_MSG + Completa("rateio, no entanto, nÆo h  rateio lan‡ado.",63," ")+"//"
                        RATEIO_MSG = RATEIO_MSG + Completa("Este t¡tulo utilizar  rateio?",59," ")
                        If ConfGeral(RATEIO_MSG)
                           Then Release Vars COR_MENSAGEM,RATEIO_MSG
                                Return False
                           Else UTILIZA_RAT_CABECA = "N"
                                TEM_RATEIO         = "N"     
                                [Tem Rateio]       = TEM_RATEIO
                        EndIf
                Endif
        EndIf
        Release Vars COR_MENSAGEM,RATEIO_MSG
   Else If PARAM = "Baixa" And msg="" And DynArraySize(ARRAY_BXRATEIO)>0
           Then VSD_I_Tem_Rateio="S"
                VSD_I_Tem_Rateio_SN = "SIM"
           Else If ACHOU_RATEIO And msg="" 
                   Then If PARAM = "Baixa" 
                           Then If VSD_I_Tem_Rateio<>"S"
                                   Then MSG =       Completa("Foi identificado que a baixa NAO esta com a op‡Æo de utilizar",61," ")+"//"
                                        MSG = MSG + Completa("o rateio, no entanto, h  rateio lan‡ado.",61," ")+"////" 
                                EndIf
                           Else Opcoes_Rateio("Tem_Rateio") 
                                If TEM_RATEIO<>"S"
                                   Then MSG =       Completa("Foi identificado que o titulo NAO esta com a op‡Æo de utilizar",61," ")+"//"
                                        MSG = MSG + Completa("o rateio, no entanto, h  rateio lan‡ado.",61," ")+"////" 
                                EndIf
                         EndIf 
                EndIf      
        EndIf      
EndIf                
If msg<>""
   Then Mensagem(Msg+ "Verificar!")
        Release Vars COR_MENSAGEM
        Return False
   Else Return True
EndIf              

EndProc

;*******************************************************************************
;* Atualizacao Conta Corrente                                                  *
;*******************************************************************************
Proc Rateio_MovCont(PARAM)
Private PARAM,Conta_Array_MovRat,Array_Rateio_MovRat,ANT_TAB  

Switch
  Case PARAM = "Adicao" :
       Conta_Array_MovRat = 0
       Dynarray Array_Rateio_MovRat[]
      
       Opcoes_Rateio("Tabela_Rateio")
       Moveto [Numero do Lancamento]
       Locate NLANC,SEQ_BAIXA
       If RetVal
         Then While [Numero do Lancamento] = NLANC And 
                    [Sequencia da Baixa  ] = SEQ_BAIXA
             
              Conta_Array_MovRat = Conta_Array_MovRat + 1
              Array_Rateio_MovRat[Conta_Array_MovRat] = Format("W6",LANCTO_RATEIO)+
                                                        Format("W6","0")+
                                                        Format("W6",[Sequencia do Rateio])+
                                                        Format("W13",[Codigo Plano_Conta])+
                                                        Format("W48",[Descricao Plano_Conta])+
                                                        Format("W7",[Codigo CCusto])+
                                                        Format("W25",[Descricao CCusto])+
                                                        Format("W10.2",[Porcentagem])+
                                                        Format("W12.2",[Valor])
             
                Skip
                If Eot() Then QuitLoop EndIf
                Locate Next NLANC,SEQ_BAIXA
                If Not RetVal Then QuitLoop EndIf    
              EndWhile
       EndIf
       Opcoes_Rateio("Tabela_Baixa")               
      
       If DynArraySize(Array_Rateio_MovRat)>0
         Then ANT_TAB = Table()
              Moveto "\\Sistemas\\CtaCor\\MovRat"
              Moveto [Numero do Lancamento]
              Locate LANCTO_RATEIO
              If RetVal
                 Then While [Numero do Lancamento]=LANCTO_RATEIO
                        Del
                      EndWhile   
              EndIf
              End Down
              For ui From 1 To DynArraySize(Array_Rateio_MovRat)
                [Numero do Lancamento ] = LANCTO_RATEIO
                [Sequencia da Baixa   ] = Ltrim(Rtrim(SubStr(Array_Rateio_MovRat[ui],7,6)))
                [Sequencia do Rateio  ] = NumVal(Ltrim(Rtrim(SubStr(Array_Rateio_MovRat[ui],13,6))))
                [Codigo Plano_Conta   ] = Ltrim(Rtrim(SubStr(Array_Rateio_MovRat[ui],19,13)))
                [Descricao Plano_Conta] = Ltrim(Rtrim(SubStr(Array_Rateio_MovRat[ui],32,48)))
                [Codigo CCusto        ] = Ltrim(Rtrim(SubStr(Array_Rateio_MovRat[ui],80,7)))
                [Descricao CCusto     ] = Ltrim(Rtrim(SubStr(Array_Rateio_MovRat[ui],87,25)))
                If Ltrim(Rtrim(SubStr(Array_Rateio_MovRat[ui],112,10)))<>""
                   Then [Porcentagem] = NumVal(Ltrim(Rtrim(SubStr(Array_Rateio_MovRat[ui],112,10)))) 
                EndIf
                If Ltrim(Rtrim(SubStr(Array_Rateio_MovRat[ui],122,12)))<>""
                   Then [Valor] = NumVal(Ltrim(Rtrim(SubStr(Array_Rateio_MovRat[ui],122,12)))) 
                EndIf
                If ui <> DynArraySize(Array_Rateio_MovRat) Then Down EndIf   
              EndFor
              UnLockRecord
              Moveto ANT_TAB
              Moveto [Sequencia da Baixa]
              Locate SEQ_BAIXA
       EndIf       
       
   Case PARAM = "Exclusao" : 
        Opcoes_Rateio("Tabela_Baixa")
        LANCTO_MOVRAT = [Lancamento Conta Corrente]
        If Not IsBlank(LANCTO_MOVRAT) And TIPO_RATEIO="Baixa"
           Then GetRecord "\\Sistemas\\CtaCor\\MovRat" LANCTO_MOVRAT To REG_MOVRAT
                If RetVal
                   Then ANT_TAB = Table()
                        Moveto "\\Sistemas\\CtaCor\\MovRat"
                        Moveto [Numero do Lancamento]
                        Locate LANCTO_MOVRAT
                        If RetVal
                           Then While [Numero do Lancamento]=LANCTO_MOVRAT
                                  Del
                                EndWhile   
                        EndIf
                        Moveto ANT_TAB
                        Moveto [Sequencia da Baixa]
                        Locate SEQ_BAIXA
                EndIf
        EndIf 
EndSwitch        

Release Vars Conta_Array_MovRat,Array_Rateio_MovRat,ANT_TAB

EndProc ;Rateio_MovCont()

;*******************************************************************************
;* Rateio da Baixa                                                             *
;*******************************************************************************
Proc Rateio(PARAM,REGISTRO)                       
Private PARAM,ANT_TAB,ANT_FIE,AUX_ARRAY_BXRATEIO,CONTAARRAY,REGISTRO,Exclui_Registro

ANT_TAB = Table()
ANT_FIE = Field()

If PARAM = "Exclusao"
   Then If Opcoes_Rateio("Tabela_Rateio")
           Then Moveto [Numero do Lancamento]
                If REGISTRO<>""
                   Then Locate NLANC,StrVal(SEQ_BAIXA),REGISTRO
                        If ReTval Then Del EndIf
                        If SubStr(Upper(Table()),1,3) <> "MOV" Then Rateio_MovCont("Exclusao") EndIf   
                   Else Locate NLANC,StrVal(SEQ_BAIXA)
                        If ReTval 
                           Then While [Numero do Lancamento] = NLANC
                                      [Sequencia da Baixa]   = StrVal(SEQ_BAIXA)
                                  Del
                                  Home
                                  Locate Next NLANC,StrVal(SEQ_BAIXA)
                                  If Not RetVal Then QuitLoop EndIf
                                EndWhile
                        EndIf
                EndIf
        EndIf               
EndIf

Switch 
  Case PARAM = "Exclusao" And REGISTRO>0 :
       Release Vars ARRAY_BXRATEIO
       DynArray ARRAY_BXRATEIO[]
       
       If Opcoes_Rateio("Tabela_Rateio")
          Then CONTA_ARRAY = 0
               VR_ARRAY    = BlankNum()
               Home
               Moveto [Numero do Lancamento]
               Locate NLANC,StrVal(SEQ_BAIXA)
               If Retval
                  Then While [Numero do Lancamento] = NLANC 
                             [Sequencia da Baixa] = StrVal(SEQ_BAIXA)
                       
                       CONTA_ARRAY = CONTA_ARRAY + 1
                       ARRAY_BXRATEIO[CONTA_ARRAY] = Format("W3,AL",StrVal(CONTA_ARRAY))+Spaces(1)+
                                                     Format("W13",[Codigo Plano_Conta])+Spaces(1)+
                                                     Format("W16",Ltrim([Descricao Plano_Conta]))+Spaces(1)+
                                                     Format("W7",[Codigo CCusto])+Spaces(1)+
                                                     Format("W12",Ltrim([Descricao CCusto]))+Spaces(1)+
                                                     Format("W7.2",[Porcentagem])+
                                                     Format("W10.2,EIC",[Valor])
                       VR_ARRAY = VR_ARRAY + [Valor]
                       [Sequencia do Rateio] = CONTA_ARRAY                              
                       Skip
                       If Eot() Then QuitLoop EndIf
                       Locate Next NLANC,StrVal(SEQ_BAIXA)
                       If Not RetVal Then QuitLoop EndIf
                       EndWhile
                       UnLockRecord
               EndIf 
               POSD=0
               If VR_ARRAY=0 
                  Then VR_ARRAY = BlankNum()
                  Else VR_ARRAY = Ltrim(Rtrim(Format("W10.2,EIC",VR_ARRAY)))
                       POSD     = 12-Len(VR_ARRAY)
               EndIf
       EndIf      
  Case PARAM = "Adicao" : 
       VSDGNOMPLCONTAS = ""
       VSDGNOMCUST     = ""
       
       GetRecord "\\Sistemas\\Ctacor\\PlContas" VSDGPLCONTAS To REG_PLCONTAS
       If RetVal Then VSDGNOMPLCONTAS = LTrim(REG_PLCONTAS["Descricao Plano_Conta"]) EndIf
       GetRecord "\\Sistemas\\Ctacor\\CCusto" VSDGCCUSTO To REG_CCUSTO
       If RetVal Then VSDGNOMCUST = LTrim(REG_CCUSTO["Descricao CCusto"]) EndIf
       
       If Opcoes_Rateio("Tabela_Rateio")
          Then Moveto [Numero do Lancamento]
               Locate NLANC,StrVal(SEQ_BAIXA),REGISTRO
               If ReTval
                  Then Del 
               EndIf
               End Down
               [Numero do Lancamento ] = NLANC
               [Sequencia da Baixa   ] = StrVal(SEQ_BAIXA)
               [Sequencia do Rateio  ] = REGISTRO
               [Codigo Plano_Conta   ] = VSDGPLCONTAS
               [Descricao Plano_Conta] = VSDGNOMPLCONTAS
               [Codigo CCusto        ] = VSDGCCUSTO
               [Descricao CCusto     ] = VSDGNOMCUST
               [Porcentagem          ] = VSDG_PORC
               [Valor                ] = VSDG_VALOR
               UnLockRecord
               
               Release Vars ARRAY_BXRATEIO
               DynArray ARRAY_BXRATEIO[]
               CONTA_ARRAY = 0
               VR_ARRAY    = BlankNum() 
               
               Opcoes_Rateio("Tabela_Rateio")
               Moveto [Numero do Lancamento]
               Locate NLANC,StrVal(SEQ_BAIXA)
               If Retval
                   Then While [Numero do Lancamento] = NLANC 
                              [Sequencia da Baixa] = StrVal(SEQ_BAIXA)
                          
                          CONTA_ARRAY = CONTA_ARRAY + 1
                          ARRAY_BXRATEIO[CONTA_ARRAY] = Format("W3,AL",StrVal(CONTA_ARRAY))+Spaces(1)+
                                                        Format("W13",[Codigo Plano_Conta])+Spaces(1)+
                                                        Format("W16",Ltrim([Descricao Plano_Conta]))+Spaces(1)+
                                                        Format("W7",[Codigo CCusto])+Spaces(1)+
                                                        Format("W12",Ltrim([Descricao CCusto]))+Spaces(1)+
                                                        Format("W7.2",[Porcentagem])+
                                                        Format("W10.2,EIC",[Valor])                              
                          VR_ARRAY = VR_ARRAY + [Valor]
                          Skip
                          If Eot() Then QuitLoop EndIf
                          Locate Next NLANC,StrVal(SEQ_BAIXA)
                          If Not RetVal Then QuitLoop EndIf
                        EndWhile
                        UnLockRecord
               EndIf      
               POSD=0
               If VR_ARRAY=0 
                  Then VR_ARRAY = BlankNum()
                  Else VR_ARRAY = Ltrim(Rtrim(Format("W10.2,EIC",VR_ARRAY)))
                       POSD     = 12-Len(VR_ARRAY)
               EndIf
       EndIf
  Case PARAM="Carrega" And Registro>0 : 
       If Opcoes_Rateio("GetRecord")
          Then GetRecord TABELA_BXRATEIO NLANC,StrVal(SEQ_BAIXA),REGISTRO To REG_BXRATEIO
               If Retval
                  Then CHAVEB = 0
                       VSDGPLCONTAS    = REG_BXRATEIO["Codigo Plano_Conta"]
                       VSDGNOMPLCONTAS = Ltrim(REG_BXRATEIO["Descricao Plano_Conta"])
                       VSDGCCUSTO      = REG_BXRATEIO["Codigo CCusto"]
                       VSDGNOMCUST     = Ltrim(REG_BXRATEIO["Descricao CCusto"])
                       VSDG_PORC       = REG_BXRATEIO["Porcentagem"]
                       VSDG_VALOR      = REG_BXRATEIO["Valor"]
                       TEMP = True
                  Else CHAVEB = 1
                       TEMP = False    
               EndIf
          Else CHAVEB = 1
               TEMP = False    
       EndIf        
       Release Vars TABELA_BXRATEIO,REG_BXRATEIO
       Moveto ANT_TAB
       Moveto Field ANT_FIE
       Return TEMP
  Case PARAM = "Carrega" :
       If Opcoes_Rateio("Tabela_Rateio")
          Then Moveto [Numero do Lancamento]
               Locate NLANC,SEQ_BAIXA
               If RetVal
                  Then While [Numero do Lancamento] = NLANC And
                             [Sequencia da Baixa  ] = SEQ_BAIXA
                             CONTA_ARRAY = CONTA_ARRAY + 1
                             ARRAY_BXRATEIO[CONTA_ARRAY] = Format("W3,AL",[Sequencia do Rateio])+Spaces(1)+
                                                           Format("W13",[Codigo Plano_Conta])+Spaces(1)+
                                                           Format("W16",Ltrim([Descricao Plano_Conta]))+Spaces(1)+
                                                           Format("W7",[Codigo CCusto])+Spaces(1)+
                                                           Format("W12",Ltrim([Descricao CCusto]))+Spaces(1)+
                                                           Format("W7.2",[Porcentagem])+
                                                           Format("W10.2,EIC",[Valor])
                             VR_ARRAY = VR_ARRAY + [Valor]
                             Skip
                             If Eot() Then QuitLoop EndIf
                             Locate Next NLANC,StrVal(SEQ_BAIXA)
                             If Not RetVal Then QuitLoop EndIf
                       EndWhile 
                       POSD=0
                       If VR_ARRAY=0 
                          Then VR_ARRAY = BlankNum()
                          Else VR_ARRAY = Ltrim(Rtrim(Format("W10.2,EIC",VR_ARRAY)))
                               POSD     = 12-Len(VR_ARRAY)
                       EndIf
               EndIf
       EndIf
EndSwitch

VSD_SEQ         = BlankNum() 
VSDGPLCONTAS    = ""
VSDGNOMPLCONTAS = ""
VSDGCCUSTO      = ""
VSDGNOMCUST     = ""
VSDG_PORC       = BlankNum()
VSDG_VALOR      = BlankNum()

Moveto ANT_TAB
Moveto Field ANT_FIE

Release Vars PARAM,ANT_TAB,ANT_FIE,AUX_ARRAY_BXRATEIO,CONTAARRAY,REGISTRO,Exclui_Registro
Return True

EndProc

;*******************************************************************************
;* Verifica Utiliza‡Æo do Rateio                                               *
;*******************************************************************************
Proc Verifica_Utilizacao_Rateio(PARAM)   
Private PARAM,COR_MENSAGEM         

If Not IsAssigneD(UTILIZA_RAT_CABECA) And Not IsAssigned(UTILIZA_RAT_BAIXA)
   Then Return
EndIf

Switch
  Case PARAM = "CABECA" :
       If UTILIZA_RAT_CABECA<>"" And UTILIZA_RAT_CABECA<>"N" And [Tem Rateio]<>UTILIZA_RAT_CABECA
          Then COR_MENSAGEM="ALERTA"
               If ConfGeral("Este t¡tulo esta com a op‡Æo de utilizar o rateio.//"+
                            "Deseja realmente alterar este t¡tulo para nÆo utilizar o rateio?")
                  Then SEQ_BAIXA = "0"
                       Rateio("Exclusao","")
                       [Tem Rateio] = "N"
                       UTILIZA_RAT_CABECA = "N"
                  Else [Tem Rateio] = UTILIZA_RAT_CABECA
               EndIf     
               Release Vars COR_MENSAGEM
          Else If UTILIZA_RAT_CABECA="N" And [Tem Rateio]="S" Then UTILIZA_RAT_CABECA="S" EndIf
       EndIf
  Case PARAM = "BAIXA" :
       If UTILIZA_RAT_BAIXA<>"" And UTILIZA_RAT_BAIXA<>"N" And VSD_I_Tem_Rateio<>UTILIZA_RAT_BAIXA
          Then COR_MENSAGEM="ALERTA"
               If ConfGeral("Esta baixa esta com a op‡Æo de utilizar o rateio.//"+
                           "Deseja realmente alterar esta baixa para nÆo utilizar o rateio?")
                  Then SEQ_BAIXA = [Sequencia da Baixa]
                       Rateio("Exclusao","")
                       VSD_I_Tem_Rateio    = "N" 
                       VSD_I_Tem_Rateio_SN = "NAO"
                       UTILIZA_RAT_BAIXA   = VSD_I_Tem_Rateio
                  Else VSD_I_Tem_Rateio    = UTILIZA_RAT_BAIXA
                       Switch
                         Case VSD_I_Tem_Rateio = "S" : VSD_I_Tem_Rateio_SN = "SIM"
                         Case VSD_I_Tem_Rateio = "N" : VSD_I_Tem_Rateio_SN = "NAO"
                         OtherWise                   : VSD_I_Tem_Rateio_SN = ""
                       EndSwitch
                       UTILIZA_RAT_BAIXA   = VSD_I_Tem_Rateio
               EndIf     
               Release Vars COR_MENSAGEM
          Else If UTILIZA_RAT_BAIXA="N" And VSD_I_Tem_Rateio="S" Then UTILIZA_RAT_BAIXA="S" EndIf
       EndIf          
EndSwitch

EndProc ;Verifica_Utilizacao_Rateio()

;*******************************************************************************
;* Cria Array Rateio *Titulos no Contas a Pagar                                *
;*******************************************************************************
Proc Array_Rateio(PARAM,CONT)
Private PARAM,CONT

Switch
  Case PARAM = "Cria_Array" : 
       DynArray ArrayRateio[]
                                         
       Opcoes_Rateio("Tabela_Rateio")
       Moveto [Numero do Lancamento]
       Locate NLANC,"0"
       If Retval
          Then n=0
               While [Numero do Lancamento] = NLANC 
                     [Sequencia da Baixa] = "0"
                  n=n+1
                  ArrayRateio[n]=
                  Format("W5,AL",[Sequencia do Rateio])+" "+
                  Format("W13,AL",([Codigo Plano_Conta]))+" "+
                  Format("W7,AL",([Codigo CCusto]))+" "+
                  Format("W5,AL",[Porcentagem])+" "+
                  Format("W12.2,AL",[Valor])
           
                  Skip
                  If Eot() Then QuitLoop EndIf
                  Locate Next NLANC,"0"
                  If Not RetVal Then QuitLoop EndIf
                EndWhile
       EndIf
  OtherWise : 
       If CONT>1 And n>0
          Then Opcoes_Rateio("Tabela_Rateio")                                        
               For ii From 1 To DynArraySize(ArrayRateio)
                   End Down Down
                   [Numero do Lancamento ]=NLanc
                   [Sequencia da Baixa   ]="0"
                   [Sequencia do Rateio  ]=NumVal(SubStr(ArrayRateio[ii],1,5))
                   [Codigo Plano_Conta   ]=RTrim(SubStr(ArrayRateio[ii],7,13))
                   [Codigo CCusto        ]=RTrim(SubStr(ArrayRateio[ii],21,7))
                   [Porcentagem          ]=NumVal(SubStr(ArrayRateio[ii],29,5))
                   [Valor                ]=NumVal(SubStr(ArrayRateio[ii],35,15))
                   [Descricao Plano_Conta]=LTrim([Descricao Plano_Conta])
                   [Descricao CCusto     ]=LTrim([Descricao CCusto])
               EndFor
       Endif
EndSwitch

EndProc ;Array_Rateio()

;*******************************************************************************
;* Ajusta Valores                                                              *
;*******************************************************************************                          
Proc Ajusta_Valor(param)
private param,ii

If Search(".",param) > 0
   Then For ii From 1 To Len(param)
          if SubStr(param,ii,1)="."
             Then param = SubStr(param,1,ii-1)+SubStr(param,ii+1,Len(param))
                  ii = 1
          EndIf                                  
        Endfor
EndIf

If Search(",",param) > 0
   Then For ii From 1 To Len(param)
          if SubStr(param,ii,1)=","
             Then param = SubStr(param,1,ii-1)+"."+SubStr(param,ii+1,Len(param))
                  ii = 1
          EndIf                                  
        Endfor
EndIf

Return param
                            
EndProc ;Proc Ajusta_Valor()
                           
;*******************************************************************************
;* Controle do ShowDialog                                                      *
;*******************************************************************************
Proc Rateio_SDDialog(Disparo,Campo,Evento,Elemento)         
Private Disparo,Campo,Evento,Elemento,JANELAR,WinArray6,SEQ,FAZ_PROCESSO

Temp      = True
MSG_CAMPO = ""                                               
TECLA     = ""
                
TECLA = "Ctrl+Del=Excluir  PgDn=Finalizar"                
                                     
If INICIO_DIALOG
   Then Campo = "TG_SEQ"
        INICIO_DIALOG=False
EndIf     

If Disparo="OPEN" Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9 : Temp=False
     Case Evento["KeyCode"] = -59 :
            Temp=False
            If Campo="BX_PLCONTAS" Or
               Campo="BX_CCUSTO"
               Then If Opcoes_Rateio("Tabela_Rateio") 
                       Then Opcoes_Rateio("Sequencia_Baixa")
                            
                            Moveto [Sequencia do Rateio]
                            Locate NumVal(VSD_SEQ)
                            If Not RetVal
                               Then End Down
                                    [Numero do Lancamento ] = NLANC
                                    [Sequencia da Baixa   ] = StrVal(SEQ_BAIXA)
                                    [Sequencia do Rateio  ] = NumVal(VSD_SEQ) 
                            EndIf
                            
                            Dynarray WinArray6[]
                            Window Handle Dialog to JANELAR
                            Window GetAttributes JANELAR To WinArray6
                            WinArray6["FLOATING"]=False
                            Window SetAttributes JANELAR From WinArray6
                            
                            If Campo="BX_PLCONTAS"  Then Moveto [Codigo Plano_Conta] EndIf
                            If Campo="BX_CCUSTO"    Then Moveto [Codigo CCusto     ] EndIf
                            
                            If ConsultaF1()       
                               Then FAZ_PROCESSO = True 
                               Else FAZ_PROCESSO = False
                            EndIf                
        
                            Window Select JANELAR
                            WinArray6["FLOATING"]=True
                            Window SetAttributes JANELAR From WinArray6
        
                            Echo Normal
                            Echo Off
        
                            If FAZ_PROCESSO And Campo="BX_PLCONTAS"
                               Then VSDGPLCONTAS    = [Codigo Plano_Conta]
                                    VSDGNOMPLCONTAS = LTrim([Descricao Plano_Conta])
                           EndIf
                           If FAZ_PROCESSO And Campo="BX_CCUSTO"
                               Then VSDGCCUSTO  =[Codigo CCusto   ]
                                    VSDGNOMCUST = LTrim([Descricao CCusto])
                           EndIf
                           
                           Opcoes_Rateio("Tabela_Baixa")
                           If SubStr(Upper(Table()),1,3) <> "MOV"
                              Then Moveto [Sequencia da Baixa]
                                   Locate SEQ
                                   Echo Normal
                                   Echo Off      
                           EndIf        
                           
                           Release Vars SEQ,FAZ_PROCESSO,WinArray6,JANELAR
                   EndIf
           EndIf
     Case Evento["KeyCode"] = "PGDN" Or  Evento["KeyCode"] = -81 : 
          Switch
            Case Campo = "TG_SEQ" And IsBlank(VSD_SEQ) : CancelDialog     
            Case Campo = "TG_BXRATEIO"                 : CancelDialog 
          EndSwitch
     Case Evento["KeyCode"] =  27 :
          Temp=False
          Switch
            Case Campo="TG_SEQ"       : If NumVal(VSD_SEQ)> 0 
                                           Then If ISAssigned(CHAVEB) 
                                                   Then If CHAVEB = 1 
                                                           Then Rateio("Exclusao",NumVal(NumVal(VSD_SEQ))) 
                                                        EndIf
                                                EndIf
                                        EndIf
                                        CancelDialog
            Case Campo="BX_PLCONTAS"  : Campo="TG_SEQ" 
            Case Campo="BX_CCUSTO"    : Campo="BX_PLCONTAS"
            Case Campo="TG_PORC"      : Campo="BX_CCUSTO"
            Case Campo="TG_VALOR"     : Campo="TG_PORC"
            Case Campo="TG_BXRATEIO"  : Campo="TG_SEQ"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or
          Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140    :
          SYS_TECLA_ACIONADA=Evento["KeyCode"]
          Seta_Tecla_Acionada()
          CancelDialog
          
       Case Evento["KeyCode"] =-147:
            Exclui_Registro=False 
            If DynArraySize(ARRAY_BXRATEIO)>0
               Then If Campo<>"TG_BXRATEIO" And (VSDGPLCONTAS <> "" Or VSDGCCUSTO <> "" Or 
                       VSDG_PORC <> BlankNum() Or VSDG_VALOR <> BlankNum()) 
                       Then EXCLUI_SEQ = VSD_SEQ
                            If NumVal(SubStr(ARRAY_BXRATEIO[NumVal(ArrayElement)],1,3)) = NumVal(ArrayElement)
                               Then Exclui_Registro=True
                            EndIf   
                       Else If Campo="TG_BXRATEIO" And DynArraySize(ARRAY_BXRATEIO) > 0
                               Then EXCLUI_SEQ = ArrayElement
                                    Exclui_Registro=True
                            EndIf
                    EndIf  
                    If Exclui_Registro And DynArraySize(ARRAY_BXRATEIO)>0
                       Then If ConfGeral("Deseja excluir o o rateio referente a sequˆncia "+StrVal(EXCLUI_SEQ)+"?")
                               Then Rateio("Exclusao",NumVal(EXCLUI_SEQ)) 
                                    If Campo<>"TG_BXRATEIO" Then Campo = "TG_SEQ" EndIf
                            EndIF   
                    EndIf   
          EndIf           
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_SEQ"       : Campo="BX_PLCONTAS"    
                         VSD_SEQ = ControlValue("TG_SEQ")
                         VSDGPLCONTAS    = ""
                         VSDGNOMPLCONTAS = ""
                         VSDGCCUSTO      = ""
                         VSDGNOMCUST     = ""
                         VSDG_PORC       = BlankNum()
                         VSDG_VALOR      = BlankNum()
                         If IsBlank(VSD_SEQ)
                            Then Campo="TG_BXRATEIO"
                            Else If (NumVal(VSD_SEQ) > DynArraySize(ARRAY_BXRATEIO) + 1) Or NumVal(VSD_SEQ) = 0
                                    Then FastMsg("A proxima sequˆncia deve ser "+StrVal(DynArraySize(ARRAY_BXRATEIO)+1))
                                         Campo="TG_SEQ"
                                    Else Rateio("Carrega",NumVal(VSD_SEQ))     
                                 EnDIf   
                         EndIf                       
                    Case Campo="BX_PLCONTAS"  : Campo="BX_CCUSTO"
                         VSDGPLCONTAS = ControlValue("BX_PLCONTAS")
                         Switch
                           Case VSDGPLCONTAS = "" : VSDGNOMPLCONTAS=""
                                                    FastMsg("Informe o Plano de Conta!")
                                                    Campo="BX_PLCONTAS"
                           OtherWise              : GetRecord "\\Sistemas\\Ctacor\\PlContas" VSDGPLCONTAS To REG_PLCONTAS
                                                    If Not RetVal
                                                       Then Campo="BX_PLCONTAS"
                                                            VSDGNOMPLCONTAS = ""
                                                            FastMsg("Conta do Plano n„o cadastrado !")
                                                       Else VSDGNOMPLCONTAS = LTrim(REG_PLCONTAS["Descricao Plano_Conta"])
                                                            CodPlacon = [Codigo Plano_Conta]
                                                            If REG_PLCONTAS["Tipo de Conta"] <> "A"
                                                               Then VSDGNOMPLCONTAS = ""
                                                                    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)
                                                                    Campo="BX_PLCONTAS"
                                                            EndIf         
                                                    EndIf 
                                                    If SubStr(VSDGPLCONTAS,1,1)="1"
                                                       Then VSDGNOMPLCONTAS = ""
                                                            FastMsg("Conta n„o confere com tipo de movimento !")
                                                            Campo="BX_PLCONTAS"
                                                    EndIf
                         EndSwitch   
                    Case Campo="BX_CCUSTO"    : Campo="TG_PORC"
                         VSDGCCUSTO = ControlValue("BX_CCUSTO")
                         Switch
                           Case VSDGCCUSTO = "" : VSDGNOMCUST=""
                           OtherWise            : GetRecord "\\Sistemas\\Ctacor\\CCusto" VSDGCCUSTO To REG_CCUSTO
                                                  If Not RetVal
                                                     Then Campo="BX_CCUSTO"
                                                          VSDGNOMCUST = ""
                                                          FastMsg("Centro de Custo n„o cadastrado !")
                                                     Else VSDGNOMCUST = LTrim(REG_CCUSTO["Descricao CCusto"])
                                                          If REG_CCUSTO["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)
                                                                  Campo="BX_CCUSTO"
                                                          Endif
                                                  EndIf    
                         EndSwitch
                    Case Campo="TG_PORC"      : Campo="TG_VALOR"
                         VSDG_PORC = ControlValue("TG_PORC")
                         If VSDG_PORC>0
                            Then VSDG_VALOR = Round((RATEIO_VRDOCTO*VSDG_PORC)/100,2)
                         EndIf   
                    Case Campo="TG_VALOR"     : Campo="TG_SEQ"
                         VSDG_VALOR = ControlValue("TG_VALOR")
                         Rateio("Adicao",NumVal(VSD_SEQ))
                         RefreshDialog                          
                                                                   
                    Case Campo="TG_BXRATEIO"  :
                         If DynArraySize(ARRAY_BXRATEIO)>0
                            Then Indice = ControlValue("TG_BXRATEIO")
                                 VSD_SEQ         = Indice
                                 VSDGPLCONTAS    = Ltrim(Rtrim(SubStr(ARRAY_BXRATEIO[Indice],05,13)))
                                 VSDGNOMPLCONTAS = ""
                                 VSDGCCUSTO      = Ltrim(Rtrim(SubStr(ARRAY_BXRATEIO[Indice],36,07)))
                                 VSDGNOMCUST     = ""
                                 VSDG_PORC       = Ltrim(Rtrim(SubStr(ARRAY_BXRATEIO[Indice],57,07)))
                                 VSDG_VALOR      = Ltrim(Rtrim(SubStr(ARRAY_BXRATEIO[Indice],65,10)))
                                 
                                 VSDG_PORC       = NumVal(VSDG_PORC)
                                 VSDG_VALOR      = NumVal(Ajusta_Valor(VSDG_VALOR))
                                 
                                 If Not VSDG_PORC>0  Then VSDG_PORC = BlankNum()  EndIf
                                 If Not VSDG_VALOR>0 Then VSDG_VALOR = BlankNum() EndIf 
                                 
                                 GetRecord "\\Sistemas\\Ctacor\\PlContas" VSDGPLCONTAS To REG_PLCONTAS
                                 If RetVal Then VSDGNOMPLCONTAS = LTrim(REG_PLCONTAS["Descricao Plano_Conta"]) EndIf
                                 GetRecord "\\Sistemas\\Ctacor\\CCusto" VSDGCCUSTO To REG_CCUSTO
                                 If RetVal Then VSDGNOMCUST = LTrim(REG_CCUSTO["Descricao CCusto"]) EndIf
                                 
                                 Campo="BX_PLCONTAS"
                            Else AcceptDialog
                         EndIf                          
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="TG_SEQ"       : MSG_CAMPO = "Sequencia do Rateio"    
  Case Campo="BX_PLCONTAS"  : MSG_CAMPO = "Plano de Conta" 
  Case Campo="BX_CCUSTO"    : MSG_CAMPO = "Centro de Custo"
  Case Campo="TG_PORC"      : MSG_CAMPO = "Porcentagem"
  Case Campo="TG_VALOR"     : MSG_CAMPO = "Valor"
  Case Campo="TG_BXRATEIO"  : MSG_CAMPO = "Lista de Rateio(s)"
EndSwitch  

If Campo="BX_PLCONTAS" Or Campo="BX_CCUSTO"
   Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
EndIf

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;Rateio_SDDialog()

;*******************************************************************************
;* Edi‡Æo do recebimento da Ordem de Compra                                    *
;*******************************************************************************
Proc Digita_Rateio(TIPO_RATEIO)
Private RATEIO_ANT_TAB,RATEIO_ANT_FIE 

INICIO_DIALOG  = True
RATEIO_ANT_TAB = Table()
RATEIO_ANT_FIE = Field()
VR_ARRAY       = BlankNum()
POSD           = 0

DynArray ARRAY_BXRATEIO[]
CONTA_ARRAY = 0

Switch
  Case TIPO_RATEIO = "Baixa" : Opcoes_Rateio("Valor_Documento_Baixa")
                               If RATEIO_VRDOCTO<=0 ;Or CHAVEI=1
                                  Then Return
                               EndIf                                  
                               TIT = "Rateio da Baixa [    ] Valor … ratear "+Ltrim(Format("W12.2,EIC",RATEIO_VRDOCTO))
                               POS_TIT = (5+Len(StrVal(RATEIO_VRDOCTO)))*-1
                               SEQ_BAIXA = [Sequencia da Baixa]
                               Rateio("Carrega","")
                               Dynarray WinArray7[]
                               Window Handle Dialog to JANELAB
                               Window GetAttributes JANELAB To WinArray7
                               WinArray7["FLOATING"]=False
                               Window SetAttributes JANELAB From WinArray7
  OtherWise                  : Opcoes_Rateio("Valor_Documento_Cabeca")
                               If RATEIO_VRDOCTO<=0
                                  Then Return
                               EndIf
                               POS_TIT = 80  
                               Opcoes_Rateio("Titulo")
                               SEQ_BAIXA = "0"
                               Rateio("Carrega","")   
EndSwitch   

While True
  ShowDialog TIT Proc "Rateio_SDDialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","F9",-67,-83,
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140,-147,-81
       @ 07,10   Height 16 Width 79
       
       Accept @ -01,44+POS_TIT Width 4 "A2" Tag "I_Seq" To SEQ_BAIXA
    
       Label  @ 00,00 "Seq" for "TG_SEQ"
       Accept @ 01,01 Width 4 "A7" Picture "#*#" Tag "TG_SEQ" to VSD_SEQ
    
       Label  @ 00,05 "Plano de Conta" for "BX_PLCONTAS"
       Accept @ 01,06 Width 16 "A13" Picture "!*!" Tag "BX_PLCONTAS" to VSDGPLCONTAS
       Accept @ 01,20 Width 32 "A30" Picture "!*!" Tag "BX_NOMPLCONTAS" to VSDGNOMPLCONTAS
  
       Label  @ 02,05 "Centro de Custo" for "BX_CCUSTO"
       Accept @ 03,06 Width 16 "A13" Picture "###.###" Tag "BX_CCUSTO" to VSDGCCUSTO
       Accept @ 03,20 Width 32 "A25" Picture "!*!" Tag "BX_NOMCUST" to VSDGNOMCUST
       
       Label  @ 02,53 "%" for "TG_PORC"
       Accept @ 03,53 Width 8 "N" Picture "#*#.[####]" Tag "TG_PORC" to VSDG_PORC
  
       Label  @ 02,62 "Valor" for "TG_VALOR"
       Accept @ 03,62 Width 13 "$" Picture "#*#.[##]" Tag "TG_VALOR" to VSDG_VALOR
      
       Frame Single From 05,00 to 13,76
       @ 05,01 ?? "Rateios"
       @ 06,01 ?? "Seq  Plano Conta                    Centro Custo             %       Valor"
  
       PickDynArray @07,01 Height 6 width 75
         Columns 1
          ARRAY_BXRATEIO
           Tag "TG_BXRATEIO"
            To ARRAYELEMENT    
            
       @ 13,64 ?? "["+Format("W10,AR",VR_ARRAY)+"]"                 
       EndDialog
       
       If Verifica_Rateio(TIPO_RATEIO)
          Then QuitLoop
          Else INICIO_DIALOG=True     
       EndIf   
EndWhile     

If TIPO_RATEIO = "Baixa"
   Then Window Select JANELAB
        WinArray7["FLOATING"]=True
        Window SetAttributes JANELAB From WinArray7

        Echo Normal
        Echo Off

        Opcoes_Rateio("Tabela_Baixa")
        Moveto [Sequencia da Baixa]
        Locate SEQ_BAIXA
        
        Rateio_MovCont("Exclusao")
        
        LANCTO_RATEIO = [Lancamento Conta Corrente]
        Rateio_MovCont("Adicao")
        
   Else Opcoes_Rateio("Tabela_Cabeca")
        Moveto RATEIO_ANT_TAB
        Moveto Field RATEIO_ANT_FIE 
EndIf

Release Vars TIPO_RATEIO,RATEIO_ANT_TAB,RATEIO_ANT_FIE,ARRAYELEMENT,ARRAY_BXRATEIO,VSDGFLAG,VSDGFLAG2,indice,JANELAB,WinArray7,SEQ_BAIXA             
  
EndProc ;Digita_Rateio()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If Not IsAssigned(TIPO_RATEIO) Then TIPO_RATEIO  = "" EndIf 
Switch
  Case PARAM_FT_RAT = "DIGITA_RATEIO_CABECA"       : Digita_Rateio("Cabeca")
  Case PARAM_FT_RAT = "DIGITA_RATEIO_BAIXA"        : Digita_Rateio("Baixa")
  Case PARAM_FT_RAT = "RATEIO_EXCLUSAO"            : Rateio("Exclusao","")
  Case PARAM_FT_RAT = "VERIFICA_RATEIO_CABECA"     : If Verifica_Rateio("Cabeca")
                                                        Then PARAM_FT_RAT = "1"
                                                        Else PARAM_FT_RAT = "0"
                                                     EndIf
  Case PARAM_FT_RAT = "VERIFICA_RATEIO_BAIXA"      : If Verifica_Rateio("Baixa")
                                                        Then PARAM_FT_RAT = "1"
                                                        Else PARAM_FT_RAT = "0"
                                                     EndIf
  Case PARAM_FT_RAT = "VERIFICA_UTILIZACAO_RATEIO" : Verifica_Utilizacao_Rateio("BAIXA")
  Case PARAM_FT_RAT = "ARRAY_CRIA_RATEIO"          : Array_Rateio("Cria_Array","")
  Case PARAM_FT_RAT = "ARRAY_RATEIO"               : Array_Rateio("",i)
  Case PARAM_FT_RAT = "RATEIO_MOVCONT_EXCLUSAO"    : Rateio_MovCont("Exclusao")
  Case PARAM_FT_RAT = "RATEIO_MOVCONT_ADICAO"      : Rateio_MovCont("Adicao")
  Case PARAM_FT_RAT = "ATUALIZA RATEIO DA BAIXA"   : If Atualiza_Rateio()
                                                        Then PARAM_FT_RAT = "1"
                                                        Else PARAM_FT_RAT = "0"
                                                     EndIf    
EndSwitch

Release Vars TIPO_RATEIO
Release Procs Digita_Rateio, Rateio_SDDialog, Opcoes_Rateio, Verifica_Rateio, Verifica_Utilizacao_Rateio,
              Array_Rateio, Rateio 
