Calculo del porcentaje de prorrateo por múltiples modalidades y centro de costo.

 

Producto:

Microsiga Protheus

Versiones:

11.8, 12.1.07 y 12.1.14

Ocurrencia:

Al incluir un título que tiene prorrateo de múltiples modalidades y centro de costo el sistema no está grabando el porcentaje correctamente.

Entorno:

SIGAFIN

Paso a paso:

Para la composición del valor del porcentaje utilizado para la distribución del valor del título entre las Modalidades o Centro de costos utilizamos el cálculo de porcentaje dividiendo el valor del título entre el valor distribuido, de acuerdo con lo siguiente:

Ejemplo:

Incluir título por el valor de R$: 10.000,00

Realizar la distribución entre las modalidades deseadas

Primera modalidad  40 % CC 30% y 70%
Segunda modalidad  60 %


Grabación de los valores en la tabla SEV(Múltiples modalidades por título)

Valor del movimiento dividido entre el valor del título 4.000,00/ 10.000,00

Modalidad 001 EV_PERC = 0,4

Valor del movimiento dividido entre el valor del título 6.000,00/ 10.000,00

Modalidad 002 EV_PERC = 0,6

Grabación de los valores en la tabla SEZ (Distribución de modalidades por Centro de costo)

Modalidad 01 EZ_PERC = 0,3

Modalidad 02 EZ_PERC = 0,7

Observaciones:

Debido a limitaciones técnicas del lenguaje ADVPL, los valores de porcentajes de distribución superiores a nueve decimales tendrán sus valores redondeados.

Ej: Porcentaje de distribución =  87.1756757

Grabación de los valores en la tabla SEV(Múltiples modalidades por título)

  EV_PERC = 0,8717568


Aviso

Al incluir un título por pagar/cobrar con el prorrateo de múltiples modalidades con o sin centro de costo e informar valores que determinen que el campo de porcentaje (%) quede con los 7 decimales informados, el sistema genera valores distintos entre el prorrateo de la inclusión y de la baja del título por pagar para algunos casos.

Cuando se marca el flag "Prorrateo Múlt. Modalidades", la rutina verifica los porcentaje de prorrateo ya definidos y rehacer el prorrateo con base en el valor de la baja. En este momento, si existe un decimal periódico en el porcentaje (%) podrá haber diferencia de centavos, siendo necesario aumentar el tamaño de los decimales de los campos EV_PERC y EZ_PERC para que esto no ocurra.

Importante

El proceso de modificación de títulos por pagar/cobrar mediante la rutina automática no modifica la estructura de prorrateos multimodalidades y/o prorrateos multicentros de costo y no existe un proceso automático para ello.

La única modificación ocurre cuando se modifica el valor del título, si este no se contabilizó, ya que la validación del valor hace recalcular los prorrateos.

Rutina automática

Inclusión de títulos con prorrateos multimodalidades y centros de costos
#Include 'Protheus.ch'
#INCLUDE "TBICONN.CH"
 
USER FUNCTION 050MULT()
LOCAL aCab := {} // array que recibirá el título por cobrar
LOCAL aAuxEv :={} // array auxiliar del prorrateo multimodalidades
LOCAL aRatEvEz:={} //array del prorrateo multimodalidades
LOCAL aAuxEz :={} // Array auxiliar de múltiples centros de costo
LOCAL aRatEz:={} //Array del prorrateo de centro de costo en múltiples modalidades
 
PREPARE ENVIRONMENT EMPRESA '01' FILIAL '0101001'
PRIVATE lMsErroAuto := .F.
 
aadd( aCab ,{"E2_PREFIXO" , 'AUT', Nil })            
aadd( aCab ,{"E2_NUM" ,GetSXeNum("SE2","E2_NUM"), Nil })
aadd( aCab ,{"E2_PARCELA" , '1', Nil })
aadd( aCab ,{"E2_TIPO" , 'NF ', Nil })
aadd( aCab ,{"E2_NATUREZ" , '001', Nil })
aadd( aCab ,{"E2_FORNECE" , '001   ', Nil })
aadd( aCab ,{"E2_LOJA" , '01', Nil })
aadd( aCab ,{"E2_EMISSAO" , dDataBase, Nil })
aadd( aCab ,{"E2_VENCTO" , dDataBase, Nil })
aadd( aCab ,{"E2_VALOR" , 100, Nil })
aadd( aCab ,{"E2_MULTNAT" , '1', Nil })//prorrateo multimodalidades = sí
       //Agregando el vector de la modalidad
       aadd( aAuxEv ,{"EV_NATUREZ" , padr('001',tamsx3("EV_NATUREZ")[1]), Nil })//modalidad que se prorrateará
       aadd( aAuxEv ,{"EV_VALOR" , 100, Nil })//valor del prorrateo en la modalidad
       aadd( aAuxEv ,{"EV_PERC" , "100", Nil })//porcentaje del prorrateo en la modalidad
       aadd( aAuxEv ,{"EV_RATEICC" , "1", Nil })//indicando que existe prorrateo por centro de costo
       //Agregando múltiples centros de costo
       //primer centro de costo
             aAuxEz:={}
             aadd( aAuxEz ,{"EZ_CCUSTO" , '001', Nil })//centro de costo de la modalidad
             aadd( aAuxEz ,{"EZ_VALOR" , 15, Nil })//valor del prorrateo en este centro de costo
             aadd(aRatEz,aAuxEz)
       //segundo centro de costo 
             aAuxEz:={}
             aadd( aAuxEz ,{"EZ_CCUSTO" , '002', Nil })//centro de costo de la modalidad
             aadd( aAuxEz ,{"EZ_VALOR" , 85, Nil })//valor del prorrateo en este centro de costo
             aadd(aRatEz,aAuxEz)
       aadd(aAuxEv,{"AUTRATEICC" , aRatEz, Nil })//recibiendo dentro del array de la modalidad los múltiples centros de costo
       aAdd(aRatEvEz,aAuxEv)//agregando la modalidad al prorrateo de múltiples modalidades
aAdd(aCab,{"AUTRATEEV",ARatEvEz,Nil})//agregando al vector aCab el vector del prorrateo
 
MsExecAuto( { |x,y,z| FINA050(x,y,z)} , aCab, ,3)//inclusión
If lMsErroAuto
    MostraErro()
Else
    Alert("¡Título incluido con éxito!")
Endif
RESET ENVIRONMENT
Return