

nÆo utilizar mais !!



;** VC_GC **********************************************************************
;*  Gera Valor de ComissÆo no Contas a Pagar                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 09/06/2017 por Bruno Carvalho                 
;Ultima Alteracao: 28/11/2017 por Bruno Carvalho                         
;Motivo Alteracao: PARAM_PLANO_CONTA_GC="2.4.01.01.001" independente do sys_codigo_cliente      
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
 
;*******************************************************************************
;* Exportacao p/ Contas a Pagar - Gera titulo de Credito                       *
;*******************************************************************************
Proc Atualiza_CPTC(PARAM)

;"Notas de Saida   -> RELDOCTO_SAIDA
;"Notas de Retorno -> RELDOCTO_RETOR
;"Notas de Venda   -> RELDOCTO_VENDA
;"Notas de Troca   -> RELDOCTO_TROCA
     
If PARAM="RM_0068"
   Then COMISSAOLIQ = REG_TABELA_COMISSAO["Valor da Comissao"]
        VSDGEMPRESA = REG_TABELA_COMISSAO["Codigo da Empresa"]
        REPRESEN    = REG_TABELA_COMISSAO["Codigo do Representante"]
                
        If AUX_EMPRESA<>VSDGEMPRESA
           Then AUX_EMPRESA = VSDGEMPRESA
                VSDGNOMEMP  = ""
                GetRecord "\\Sistemas\\Cadastro\\Empresas" VSDGEMPRESA To REG_EMPRESA
                If RetVal
                   Then VSDGNOMEMP = REG_EMPRESA["Nome Fantasia Empresa"]
                EndIf
                ;---- Codigo da Conta ------------------------------------------
                GetRecord "\\Sistemas\\Vendas\\P_Fatura" VSDGEMPRESA To REG_CONTA
                If RetVal
                   Then CX_CONTA_CAIXA = REG_CONTA["Codigo_Conta_Caixa"]
                   Else CX_CONTA_CAIXA = ""
                EndIf
        EndIf
        
        If AUX_REPRESEN<>REPRESEN
           Then AUX_REPRESEN = REPRESEN 
                VSDGDESTINAT = ""
                VSDGNOMDEST  = ""
                GetRecord "\\Sistemas\\Cadastro\\Represen" REPRESEN To REG_REPRESEN
                If RetVal
                   Then CODIGO_PESSOA=REG_REPRESEN["Codigo_Pessoa"]
                        GetRecord "\\Sistemas\\Cadastro\\Destinat" AlinhM(CODIGO_PESSOA,4) To REG_DESTINAT
                        If RetVal
                           Then VSDGDESTINAT = REG_DESTINAT["Codigo"]
                                VSDGNOMDEST  = REG_DESTINAT["Nome Fantasia EmitDest"]
                        EndIf
                EndIf
                Release Vars REG_REPRESEN,REG_DESTINAT    
        EndIf
        
        If VSDGDESTINAT = "" Or COMISSAOLIQ=BlankNum() 
           Then Return False 
        EndIf 
        
   Else If PARAM="COMISSAO" And COMISSAOLIQ <=0
           Then Return False
        EndIf

        If PARAM="OUTROS RETORNOS" And TOT_RETOU <=0
           Then Return False
        EndIf
EndIf

;---- Parƒmetros ---------------------------------------------------------------
If PARAM="COMISSAO" Or PARAM="RM_0068"
    Then 
         PARAM_PLANO_CONTA_GC = "2.4.01.01.001"
         PAGTO_TIPO           = "CO"
         PAGTO_DESCRICAO      = "COBRANCA"
         DOCTO_REFERENTE      = "COMISSAO "
    Else 
         PARAM_PLANO_CONTA_GC = "1.9.99.99.999"
         PAGTO_TIPO           = "TC"
         PAGTO_DESCRICAO      = "TITULO DE CREDITO"
         DOCTO_REFERENTE      = "TIT CRED "
EndIf    
                  
If PARAM="RM_0068"
   Then AUX_DOCTO       = AlinhM(Strval(Month(Today())),2)+"."+SubStr(Strval(Year(Today())),3,2)  
        DOCTO_NUM       = "COM "+AUX_DOCTO
        DOCTO_COD       = "FAT"
        DOCTO_TIPO      = "FAT"
        DOCTO_SER       = ""
        OBS             = "COMISSAO LIQUIDA A PAGAR GERADO PELO ACERTO POR REPRESENTANTE EM "+StrVal(Today())+"."
        DOCTO_REFERENTE = "COM "+AUX_DOCTO
        
        ;If PARAM="RM_0068"
        ;   Then View "\\Sistemas\\CtaPag\\Titulos"
        ;        Moveto [Codigo da Empresa]
        ;        Locate IndexOrder by "Indtit1" VSDGEMPRESA,DOCTO_TIPO,DOCTO_NUM 
        ;        If Retval
        ;           Then Mensagem(Completa("Documento "+DOCTO_NUM+" j  foi gerado no contas a pagar!",60," ")+"//"+
        ;                         Completa("Lan‡amento : "+Format("W12,AR",[Numero do Lancamento]),60," ")+"//"+
        ;                         Completa("VrDocumento: "+Format("W12.2,EIC",[Valor do Documento]),60," "))
        ;                ClearImage
        ;                Release Vars TAB_ANT
        ;                Return False
        ;        EndIf   
        ;EndIf
        ;ClearImage
        
        DATA_PAGAR           = VSDGDDTACERTO
        DATA_VENCIMENTO      = VSDGDDTACERTO
        DATA_EMISSAO         = Today()
        DATA_COMPETENCIA     = VSDGDTFIM
        
   Else DOCTO_NUM    = "ACERTO"   
        DOCTO_COD    = "ROM"
        DOCTO_TIPO   = "ROM"
        DOCTO_SER    = "RO"
        
        DATA_PAGAR           = Today()
        DATA_VENCIMENTO      = Today()
        DATA_EMISSAO         = Today()
        DATA_COMPETENCIA     = Today()
EndIf
LANCTO_GERADOR       = ""
SISTEMA_GERADOR      = "FT"        
                                       
;---- Codigo da Conta ----------------------------------------------------------
If PARAM<>"RM_0068"
   Then GetRecord "\\Sistemas\\Vendas\\P_Fatura" VSDGEMPRESA To REG_CONTA
        If RetVal
           Then CX_CONTA_CAIXA = REG_CONTA["Codigo_Conta_Caixa"]
           Else CX_CONTA_CAIXA = ""
        EndIf
EndIf    

;----- Notas de Vendas SEM OS ZEROS INICIAIS -----------------------------------
If PARAM="COMISSAO"
   Then CONTADOR = 0
        DynArray NOTAS_VENDAS[]
        
        COMISSAO = RELDOCTO_VENDA
        AUX_NOTA = ""
        For i From 1 To Len(COMISSAO)
         INCLUI_NOTA=False
         If Type(NumVal(SubStr(COMISSAO,i,1)))="N"
            Then AUX_NOTA = AUX_NOTA + SubStr(COMISSAO,i,1)
            Else INCLUI_NOTA=True       
         EndIf
         If AUX_NOTA<>"" And i<>1 And (i=Len(COMISSAO) Or INCLUI_NOTA)
            Then CONTADOR = CONTADOR + 1
                 NOTAS_VENDAS[CONTADOR]=AUX_NOTA
                 AUX_NOTA=""
          EndIf 
        EndFor 
        
        DOCTO_NUM = ""
        NOTAS     = ""
        For i From 1 To DynArraySize(NOTAS_VENDAS)
          If i=1 And DynArraySize(NOTAS_VENDAS)=1 
             Then DOCTO_NUM       = NOTAS_VENDAS[i]
                  NOTAS           = NOTAS_VENDAS[i]
                  DOCTO_REFERENTE = "COMISSAO "+NOTAS_VENDAS[i]
             Else If i=1
                    Then DOCTO_REFERENTE = "COM "
                  EndIf    
          EndIf
          AUX_NOTA = NOTAS_VENDAS[i]
          For ii From 1 To Len(NOTAS_VENDAS[i])
            If SubStr(NOTAS_VENDAS[i],ii,1)="0"
               Then AUX_NOTA = SubStr(NOTAS_VENDAS[i],ii+1,Len(NOTAS_VENDAS[i]))
               Else If SubStr(AUX_NOTA,i,1)<>"0"
                       Then QuitLoop
                    EndIf   
            EndIf
          Endfor
          NOTAS_VENDAS[i] = AUX_NOTA
          If DynArraySize(NOTAS_VENDAS)>1
             Then If i>1
                     Then NOTAS     = NOTAS +","+ AUX_NOTA
                          DOCTO_NUM = DOCTO_NUM +","+ AUX_NOTA   
                     Else NOTAS     = NOTAS + AUX_NOTA
                          DOCTO_NUM = DOCTO_NUM + AUX_NOTA
                  EndIf           
          EndIf   
        Endfor
        
        OBS = "COMISSAO LIQUIDA A PAGAR GERADO PELO ACERTO EM "+StrVal(Today())
        If NOTAS<>""
           Then OBS = OBS + "\n"
                If DynArraySize(NOTAS_VENDAS)>1
                   Then OBS = OBS + "NOTAS DE VENDAS: "+NOTAS
                   Else OBS = OBS + "NOTA DE VENDA: "+NOTAS
                 EndIf  
        EndIf   
EndIf

;----- Notas de Retorno SEM OS ZEROS INICIAIS ----------------------------------
If PARAM="OUTROS RETORNOS"
   Then CONTADOR = 0
        DynArray NOTAS_RETORNO[]
        
        RETORNO = RELDOCTO_RETOR
        AUX_NOTA = ""
        For i From 1 To Len(RETORNO)
         INCLUI_NOTA=False
         If Type(NumVal(SubStr(RETORNO,i,1)))="N"
            Then AUX_NOTA = AUX_NOTA + SubStr(RETORNO,i,1)
            Else INCLUI_NOTA=True       
         EndIf
         If AUX_NOTA<>"" And i<>1 And (i=Len(RETORNO) Or INCLUI_NOTA)
            Then CONTADOR = CONTADOR + 1
                 NOTAS_RETORNO[CONTADOR]=AUX_NOTA
                 AUX_NOTA=""
          EndIf 
        EndFor 
                 
        DOCTO_NUM = ""         
        RETORNO   = ""
        For i From 1 To DynArraySize(NOTAS_RETORNO)
          AUX_NOTA = NOTAS_RETORNO[i]
          If i=1 And DynArraySize(NOTAS_RETORNO)=1 
             Then DOCTO_NUM       = NOTAS_RETORNO[i]
                  RETORNO         = NOTAS_RETORNO[i]
                  DOCTO_REFERENTE = "TIT CRED "+NOTAS_RETORNO[i]
             Else If i=1
                    Then DOCTO_REFERENTE = "RET "
                  EndIf    
          EndIf
                    
          For ii From 1 To Len(NOTAS_RETORNO[i])
            If SubStr(NOTAS_RETORNO[i],ii,1)="0"
               Then AUX_NOTA = SubStr(NOTAS_RETORNO[i],ii+1,Len(NOTAS_RETORNO[i]))
               Else If SubStr(AUX_NOTA,i,1)<>"0"
                       Then QuitLoop
                    EndIf   
            EndIf
          Endfor
          NOTAS_RETORNO[i] = AUX_NOTA
          
          If DynArraySize(NOTAS_RETORNO)>1
             Then If i>1
                     Then RETORNO   = RETORNO +","+ AUX_NOTA
                          DOCTO_NUM = DOCTO_NUM +","+ AUX_NOTA   
                     Else RETORNO   = RETORNO + AUX_NOTA
                          DOCTO_NUM = DOCTO_NUM + AUX_NOTA
                  EndIf     
          EndIf                  
        Endfor
        
        OBS = "OUTROS RETORNOS GERADO PELO ACERTO EM "+StrVal(Today())
        If RETORNO<>""
           Then OBS = OBS + "\n"
                OBS = OBS + "OUTRO(S) RETORNO(S): "+RETORNO  
        EndIf 
EndIf
;-------------------------------------------------------------------------------
Release Vars CP_LANC       
CleaRall       

View "\\Sistemas\\CtaCor\\PlContas"
Coedit "\\Sistemas\\CtaPag\\Titulos"    
While True
  End
  Moveto [Numero do Lancamento]
  If Numero_Lancamento("Interno","Locked_Down")
     Then CP_LANC = PROXLANCTO_NLANC
          Release Vars PROXLANCTO_NLANC
          quitloop
  EndIf    
EndWhile
                     
[Codigo da Conta         ]=CX_CONTA_CAIXA
[Codigo da Empresa       ]=VSDGEMPRESA
[Nome Fantasia Empresa   ]=VSDGNOMEMP
[Codigo do Documento     ]=DOCTO_COD
[Tipo do Documento       ]=DOCTO_TIPO
[Serie do Documento      ]=DOCTO_SER
[Numero do Documento     ]=DOCTO_NUM
[Codigo do Emitente      ]=VSDGDESTINAT
[Nome Fantasia EmitDest  ]=VSDGNOMDEST
[Data de Emissao         ]=DATA_EMISSAO
[Data de Vencimento      ]=DATA_VENCIMENTO
[Data a Pagar            ]=DATA_PAGAR
[Data Competencia        ]=DATA_COMPETENCIA
[Data de Entrada         ]=DATA_EMISSAO

If PARAM="COMISSAO" Or PARAM="RM_0068" 
   Then [Valor do Documento      ]=COMISSAOLIQ
        [Saldo do Documento      ]=COMISSAOLIQ
   Else [Valor do Documento      ]=TOT_RETOU
        [Saldo do Documento      ]=TOT_RETOU       
EndIf
[Observacoes             ]=OBS
[Tipo do Lancamento      ]="B"     
[Descricao do Lancamento ]="DESPESA OPERACIONAL"
[Tipo do Pagamento       ]=PAGTO_TIPO
[Descricao Tipo Pagamento]=PAGTO_DESCRICAO
[Codigo Plano_Conta      ]=PARAM_PLANO_CONTA_GC  
[Sistema Gerador         ]=SISTEMA_GERADOR
[Lancamento Gerador      ]=LANCTO_GERADOR
[Sequencia Gerador       ]=Blanknum()
[Documento Referente     ]=DOCTO_REFERENTE
Controle_Dia()
UnLockRecord
Do_It!
Clearall

If PARAM="COMISSAO" Or PARAM="RM_0068"
   Then GEROU_CTAPAG    = True
        LANCTO_COMISSAO = CP_LANC
   Else LANCTO_OUTROS   = CP_LANC
EndIf

Retorno_ok=True
Return Retorno_ok

EndProc

;*******************************************************************************
;* Atualiza TC utilizado                                                       *
;*******************************************************************************
Proc Atualiza_CPTCBX(nlancto)
Private nlancto   
                         
Moveto "\\Sistemas\\CtaPag\\Titulos"
Moveto [Numero do Lancamento]
Locate nlancto
If Retval
   Then if [Tipo do Pagamento]="TC" and 
           strval([Valor do Documento])=strval([NotaV->Valor])
           then
                while true
                
                  If IsLockRecord()
                     Then Loop
                  EndIf
                  
                  [Saldo do Documento]=0
                  Unlockrecord
                
                  Moveto "\\Sistemas\\CtaPag\\Titbaixa"
                  Moveto [Numero do Lancamento]
                  locate nlancto
                  if retval
                     then while [Numero do Lancamento]=nlancto
                            if not islockrecord()
                               then del
                            endif
                            
                            if eot() then quitloop endif
                          endwhile
                  endif       
                          
                  While True
                    Moveto [Numero do Lancamento]
                    End
                    Down
                    [Numero do Lancamento ]=nlancto
                    [Sequencia da Baixa   ]="1"       
                    If Not IsLockRecord()
                       Then QuitLoop
                       Else Del
                    EndIf
                  EndWhile
                  
                  [Data do Pagamento      ]=[NotaC->Data de Emissao]
                  [Valor do Pagamento     ]=[NotaV->Valor          ]
                  [Codigo da Conta        ]=CX_CONTA_CAIXA
                  [Tipo de Operacao       ]="14"
                  [Tipo de Lancamento     ]=[\Sistemas\Ctapag\Titulos->Tipo do Lancamento]
                  [Codigo da Empresa      ]=[\Sistemas\Ctapag\Titulos->Codigo da Empresa ]
                  [Tipo da Baixa          ]="DEVOLUCAO"
                  [Codigo CCusto          ]=[\Sistemas\Ctapag\Titulos->Codigo CCusto     ]
                  [Codigo Plano_Conta     ]=[\Sistemas\Ctapag\Titulos->Codigo Plano_Conta]
                  [Descricao do Historico ]="LIQUIDACAO TC "+[\Sistemas\CtaPag\Titulos->Tipo do Documento]+
                                               "/"+[\Sistemas\CtaPag\Titulos->Numero do Documento]
                  Switch
                     Case APLIC_ORIGEM="FATURA": [BX Sistema Gerador]="FT"
                     Case APLIC_ORIGEM="BALCAO": [BX Sistema Gerador]="BA"
                     Case APLIC_ORIGEM="TROCA" : [BX Sistema Gerador]="TR"
                     Case APLIC_ORIGEM="NOTA"  : [BX Sistema Gerador]="DI"
                  EndSwitch
                  [Bx Tipo Docto Gerador  ]=[NotaC->Codigo do Documento]
                  [Bx Numero Docto Gerador]=[NotaC->Numero do Documento]
                  [Bx Sequencia Gerador   ]=[NotaV->Sequencia]
                  
                  Controle_Dia()
                  UnLockRecord
                  
                  quitloop
                endwhile
        endif
EndIf

EndProc

;*******************************************************************************
;* Estorna TC Gerados                                                          *
;*******************************************************************************
Proc Estorna_CPTC()
Private CHV_EMPRESA, CHV_TPDOCTO, CHV_NUMERO, ci

CHV_EMPRESA =[NotaC->Codigo da Empresa  ]
CHV_TPDOCTO =[NotaC->Codigo do Documento]
CHV_NUMERO  =[NotaC->Numero do Documento]
  
For ci From 1 to 2

  Moveto "\\Sistemas\\CtaPag\\Titulos"
  Moveto [Codigo da Empresa]
  Locate IndexOrder by "Indtit30" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO
  If RetVal
     Then While [Codigo da Empresa  ]=CHV_EMPRESA and
                [Codigo do Documento]=CHV_TPDOCTO and
                [Lancamento Gerador ]=CHV_NUMERO  
     
            if [Tipo do Pagamento  ]="TC" and
               [Numero do Documento]=CHV_NUMERO+"-TC"
               then          
                    If ( Format("W11.2,EIC",[Saldo do Documento])<>Format("W11.2,EIC",[Valor do Documento]) ) Or
                       ( [Codigo do Emitente ]<>[NotaC->Codigo ] )
                       Then MSG="O estorno ou atualiza‡„o do TC no Contas a Pagar,//"
                            MSG=MSG+"referente a este documento: "+
                                CHV_EMPRESA+" / "+
                                CHV_TPDOCTO+" / "+
                                CHV_NUMERO +"//"
                            MSG=MSG+"n„o foi efetuado, pois j  foi utilizado ou nÆo confere dados ! //"
                            MSG=MSG+"Verificar o documento "+[Codigo da Empresa]+" / "+[Codigo do Documento]+" / "+[Numero do Documento]+" no Contas a Pagar!"
                            Mensagem(MSG)
                            Return False
                    EndIf
                    
                    if ci=2  
                       then while true
                              if not islockrecord()
                                 then unlockrecord
                                      del
                                      quitloop
                               endif        
                            endwhile
                       else Skip
                    endif
            endif
            
            If EOT() Then QuitLoop EndIf
            
            Moveto [Codigo da Empresa]
            Locate Next IndexOrder by "Indtit30" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO
            
          EndWhile
  EndIf
EndFor

Return True
EndProc


;*******************************************************************************
;* Estorna TC utilizados                                                       *
;*******************************************************************************
Proc Estorna_CPTCBX()
Private CHV_EMPRESA, CHV_TPDOCTO, CHV_NUMERO, nlancto

CHV_EMPRESA =[NotaC->Codigo da Empresa  ]
CHV_TPDOCTO =[NotaC->Codigo do Documento]
CHV_NUMERO  =[NotaC->Numero do Documento]
  
Moveto "\\Sistemas\\CtaPag\\Titbaixa"
Moveto [Codigo da Empresa]
Locate IndexOrder by "Indbxa1" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO
If RetVal
   Then While [Codigo da Empresa      ]=CHV_EMPRESA and
              [Bx Tipo Docto Gerador  ]=CHV_TPDOCTO and
              [Bx Numero Docto Gerador]=CHV_NUMERO 

          nlancto=[Numero do Lancamento]
   
          Moveto "\\Sistemas\\CtaPag\\Titulos"
          Moveto [NUmero do Lancamento]
          locate nlancto
          if retval
             then while true
                    if not islockrecord()
                       then 
                            [Saldo do Documento]=[Valor do Documento]
                            Unlockrecord
                            quitloop
                    endif
                  endwhile
          endif             
          
          Moveto "\\Sistemas\\CtaPag\\Titbaixa"
          while true
             if not islockrecord()
                then 
                    unlockrecord
                    del
                    quitloop
              endif        
          endwhile

          If EOT() Then QuitLoop EndIf
          
          Moveto [Codigo da Empresa]
          Locate Next IndexOrder by "Indbxa1" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO
          
        EndWhile
EndIf

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If Not IsAssigned(Opcaoc)  Then Opcaoc=""     EndIf
If Not IsAssigned(RM_0068) Then RM_0068=False EndIf

LANCTO_COMISSAO = ""
LANCTO_OUTROS   = ""

If RM_0068
   Then If Not IsAssigned(Tabela_Comissao) Or Not Istable(Tabela_Comissao)
           Then Mensagem("Tabela de Comissionamento n„o foi gerada!")
                Return
           Else GEROU_CTAPAG = False
                AUX_REPRESEN = "***"
                AUX_EMPRESA  = "***"
                NUMERO_COMISSOES = NRecords(Tabela_Comissao)
                For ai From 1 To NUMERO_COMISSOES
                  View Tabela_Comissao
                  For aii From 1 To ai
                    If aii>1
                       Then Down
                    EndIf   
                  EndFor
                  CopyToArray REG_TABELA_COMISSAO
                  Clearall
                  Atualiza_CPTC("RM_0068")
                EndFor
        EndIf
   Else Atualiza_CPTC("COMISSAO")
        Atualiza_CPTC("OUTROS RETORNOS")
EndIf
Release Vars PARAM_PLANO_CONTA_GC
             
Release Procs Atualiza_CPTC, Estorna_CPTC, Atualiza_CPTCBX, Estorna_CPTCBX
