12 de enero de 2011

Cálculo del precio medio a fecha


En este primer post del 2011 os vamos a hacer entrega de una consulta que os permitirá, en caso de tener la empresa de SAP B1 configurada con inventario permanente (stock continuo), obtener el precio medio de coste ponderado a una fecha concreta. El objetivo de esta query no es otro que el de saber qué precio medio tenía un artículo un determinado día.

Para ello es importante saber que SAP B1 guarda los movimientos de entrada y salida en la tabla OINM. A partir de aquí se obtiene la siguiente consulta, que agrupa todos los movimientos generados hasta la fecha indicada, suma valor de stock y lo divide entre el stock total.

SELECT T0.[WhsCode], T2.[WhsName], T0.[ItemCode], T1.[ItemName],
ROUND(SUM(CASE M.InQty WHEN 0 THEN -1*M.CalcPrice*M.OutQty ELSE M.CalcPrice*M.InQty END),2) AS [Valor],
SUM(M.InQty)-SUM(M.OutQty) AS [Stock],
ROUND(ROUND(SUM(CASE M.InQty WHEN 0 THEN -1*M.CalcPrice*M.OutQty ELSE
M.CalcPrice*M.InQty END),2)/(SUM(M.InQty)-SUM(M.OutQty)),2) AS [PMP]
FROM OINM M
INNER JOIN OITW T0 ON M.ItemCode=T0.ItemCode AND M.Warehouse=T0.WhsCode
INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode
INNER JOIN OWHS T2 ON T0.WhsCode = T2.WhsCode
WHERE (M.ItemCode>='[%2]' or '[%2]'='') AND (M.ItemCode<='[%3]' OR '[%3]'='') AND M.DocDate <= '[%1]'
GROUP BY T0.WhsCode, T2.WhsName, T0.ItemCode, T1.ItemName
ORDER BY T0.[WhsCode], T0.[ItemCode]

En este ejemplo se pasa como filtro la fecha en la cual queremos calcular el precio medio y un rango de artículos. Para añadir más filtros simplemente bastaría con añadir los campos en la cláusula WHERE de la consulta.

Desde SEMIC queremos destacar que el comportamiento de esta consulta es muy parecido al del informe estándar Auditoría de inventario, dónde se muestran todos los movimientos de entrada/salida de stock y su valor. En nuestro caso, la query simplifica la visualización agrupando todos los registros y añadiendo la columna de PMP, obtenida de la división del importe total entre la cantidad acumulada.

Esperamos que os sea de utilidad.

9 comentarios:

  1. Buenos Dias Consultores

    Partire con una pregunta.
    SAP calcula el PMP por articulo (no importando en los alamcenes que este) o lo calcula por articulo y segun alamacen
    Me explico, si tengo 100 items A repartidos en 2 alamacenes, el PMP seguira siendo igual para el articulo en ambos almacenes o sera diferente dependiendo de la cantidad y el valor segun almacen? Segun mi experiencia, creo que lo calcula no importando los alamcenes que este.

    Si es asi el PMP que se calcula en la query no seria el correcto, ya que se esta dividiendo la cantidad del almacen por el valor del almacen, si el articulo tiene mas de 1 alamcen el PMP calculado seria diferente para cada almacen.
    Corrijanme si esto equivocado...

    La segunda query que habia generado para este proceso es muy parecida a esta, pero para el calculo del PMP hice una subquery igual al calculo del PMP que aparece ahi omitiendo el INNER JOIN de alamcenes para que el calculo fuera en base al VALOR TOTAL/CANTIDAD TOTAL, pero al hacer de los 12 alamcenes que manejamos, me aparecen solo 2 en el resultado de la query.

    Bueno, agradeciendo su tiempo me despido.

    ResponderEliminar
  2. Respecto a tu primera pregunta. Esta cuestión depende de cómo tengas parametrizado SAP Business One. Está opción está definida en Gestión Inicialización empresa  Detalles empresa. En la pestaña inicialización básica tienes una opción que indica si se desea gestionar los precios de los artículos por almacén. En concreto se llama “Gestionar precios de artículos por almacén”. Si está opción está activada SAP Business One calculara el precio medio por almacén si no lo calculará a nivel general.
    Ten en cuenta que este parámetro se define cuando se crea la empresa y no se puede modificar una vez existan movimientos de stock.
    Si no tienes activada esta opción de cálculo de precio medio por almacén la cosa se complica bastante pues los precios de coste asignados a las salidas no están separados por almacén. Y para el cálculo del precio medio sería necesario un proceso de recalculo movimiento a movimiento. Esta opción la realizamos en su día. Si te interesa te podemos pasar el proceso que utilizamos para el cálculo del precio medio.

    ResponderEliminar
  3. Buenas tardes Roberto

    Muchas gracias por tu pronta respuesta, si ubuiese sabido esto antes, otro gallo nos cantaria jejeje.
    Efectivamente, la casilla de "Gestionar costo de articulo por almacen" esta desactivada, lo cual no nos sirve ya que tenemos mas de 1 bodega en nuestro sistema.
    De todos modos me gusta chequear de que se trata el procedimiento del que hablas, para evaluar los posibles cambios que nos generaria en la contabilidad (que es donde tenemos mayores interrogantes).
    mi correo es chiko.floyola@gmail.com

    Nuevamente agradezco tu orientacion

    Atte.
    FLR

    ResponderEliminar
  4. me podrías proporcionar el procedimiento del que hablas cuando no manejas costo por almacenes te lo agradeceria mucho, mi email es lamr_15@hotmail.com

    ResponderEliminar
  5. Buenas Tardes Roberto, te agradeceria mucho, si me puedes enviar el proceso a utilizar para el calculo del precio promedio cuando esta habilitada la opcion gestionar costo del articulo por almacen, mi correo es cristihan@gmail.com

    muchas gracias de antemano por tu apoyo

    saludos

    CC

    ResponderEliminar
  6. me gustaria tener esta query para la valoracion de inventario.
    podrias enviar el proceso a utilizar para el calculo del precio promedio cuando esta habilitada la opcion gestionar costo del articulo por almacen, a mi correo moisesmercedes@hotmail.com

    ResponderEliminar
  7. Para obtener el valor del stock es mejor usar el campo transvalue de la tabla OINM, para que considere también los gastos que se agregan a las importaciones.

    ResponderEliminar
  8. Por favor alguien que me mande la consulta a niels.baltodano@gmail.com

    ResponderEliminar
  9. Este comentario ha sido eliminado por el autor.

    ResponderEliminar