esofitec. CoreDocs

esofitec. CoreDocs

Addons estándar / Módulo de cambio de tarifas desde compras / Cálculo de tarifas

Funcionamiento y eventos

El módulo es reactivo: la DLL escuchadora actúa en los eventos de guardado de a3ERP y decide qué hacer según SIT_VIVT_CONFIGURACION. A esto se suman dos acciones que el usuario lanza explícitamente (el botón del rayo del albarán de compra y la opción de menú de recálculo masivo), atendidas por el ejecutable Sit.Viv.Tar.exe.

Esta página documenta, para cada disparo, qué evento lo provoca, qué tablas y campos toca y qué pieza lo ejecuta.

Todo el bloque de tarifas depende del campo SIT_VIVT_CALCULO_PRECIO_VENTA: con SinCalculo no hace nada.

Los eventos de guardado reaccionan al alta y a la modificación; el borrado no dispara ninguna lógica del módulo (no hay manejador de eliminación).

Al guardar un albarán de compra#

Al dar de alta o modificar un albarán de compra (evento del escuchador OnDespuesDeGuardarDocumento), el módulo ejecuta el procedimiento almacenado, pasándole el identificador del albarán:

EXEC dbo.SIT_VIVT_CALCULA_PRC_RECOMENDADO @IdAlbC;

El procedimiento recorre cada artículo distinto de las líneas del albarán y, para cada uno, primero resuelve su modo efectivo de actualización de tarifas (ARTICULO.SIT_VIVT_MODO_TARIFAS; con SegunFamilia o vacío, el de la fila de su familia en SIT_VIVT_MODO_FAMILIAS; si tampoco, Manual) e informa el resultado en SIT_VIVT_MODO_APLICADO de cada línea (etiqueta "Modo act. tarifas (solo lectura)", puramente informativo). Siempre refresca el coste total (SIT_VIVT_COSTE_TOTAL, media ponderada a las unidades del precio neto más los costes adicionales) y el PVP actual (SIT_VIVT_PRC_ACTUAL, precio de venta vigente en la ficha); ambos son informativos. Después, según el modo efectivo:

  • Manual (comportamiento histórico, es el valor por defecto): si alguna línea del artículo está marcada con SIT_VIVT_ACTUALIZA_TARIFA = 'T', no recalcula los precios recomendados (respeta lo marcado o editado a mano); si ninguna está marcada, los calcula.
  • Auto (margen fijo): recalcula siempre los precios recomendados, sin mirar la marca, y marca SIT_VIVT_ACTUALIZA_TARIFA = 'T' en todas las líneas del artículo — es la señal que luego lee tanto el rayo como la aplicación automática (ver más abajo).
  • PrcFijo (precio fijo): pone a NULL todos los precios recomendados y fuerza SIT_VIVT_ACTUALIZA_TARIFA = 'F', aunque el usuario hubiera marcado la línea a mano.

Cuando toca calcular los recomendados (Manual sin marca, o Auto), se hace igual que antes: coste total × coeficiente, tomando el coeficiente de SIT_VIVT_COEFICIENTES para la familia estadística del artículo y cada tarifa configurada en SIT_VIVT_CONFIGURACION, redondeado a los decimales de precio de DATOSCONFIG.NUMDECPRC.

El cálculo es por artículo: basta con que una línea de un artículo Manual esté marcada para que sus recomendados no se recalculen; en Auto/PrcFijo la marca es una salida del cálculo, no una entrada.

La operativa de usuario está en Cambio de tarifas desde compras.

Al aplicar tarifas desde el albarán (botón del rayo)#

El botón del rayo del albarán de compra ofrece la opción Actualizar tarifas, que ejecuta Sit.Viv.Tar.exe sobre los datos ya guardados del albarán y actúa sobre las líneas con SIT_VIVT_ACTUALIZA_TARIFA = 'T', excluyendo las de artículos cuyo modo efectivo sea PrcFijo (defensa en profundidad frente a marcas heredadas de antes de pasar el artículo a precio fijo); si excluye alguna, lo indica en el mensaje final. Según el modo de cálculo:

  • En PrcCompra, escribe ARTICULO.PRCVENTA y los tramos de TARIFAVE con los recomendados de la línea, solo para las tarifas informadas en la configuración. Si un tramo no existe, lo crea (moneda EURO, 0 unidades, fechas 01/01/1900–31/12/9999). Este bucle de aplicación (ActualizadorTarifasBLL.AplicarTarifasLineas) es el mismo que usa la aplicación automática, ver más abajo.
  • En PrcVenta, escribe ARTICULO.PRCVENTA y guarda la ficha, lo que encadena el recálculo del resto de tarifas (ver el evento de guardado de artículo).

La operativa de usuario está en Cambio de tarifas desde compras y, para el modo PrcVenta, en Tarifas según el precio de venta.

Aplicación automática de tarifas (modo Auto)#

Con el modo de cálculo PrcCompra y el interruptor global SIT_VIVT_APLICACION_AUTOMATICA = 'T' (por defecto F), el escuchador da un paso más tras ejecutar el procedimiento en OnDespuesDeGuardarDocumento: aplica directamente, con el mismo bucle que usa el rayo (ActualizadorTarifasBLL.AplicarTarifasLineas), las líneas marcadas de artículos en modo efectivo Auto. No hay que pulsar el botón del rayo. La aplicación es silenciosa: no muestra ningún aviso al operario; el rastro queda en la propia línea (marca y SIT_VIVT_MODO_APLICADO) y, si SIT_VIVT_REGISTRA_HISTORICO = 'T', en SIT_VIVT_HISTORICO_TARIFAS con origen ALBARAN_COMPRA — el mismo contenido que si lo hubiera aplicado el rayo.

Si el interruptor está en F (o a NULL en una empresa recién actualizada, que se comporta como F), no cambia nada: las líneas de artículos Auto quedan marcadas y con recomendados, a la espera del botón del rayo. El interruptor solo gobierna esta aplicación automática; el comportamiento del procedimiento (marcar, recalcular, limpiar) depende únicamente de los modos por familia/artículo.

Guarda de reentrada. Aplicar precios desde el hook escribe en ARTICULO y TARIFAVE, lo que vuelve a disparar OnDespuesDeGuardarMaestro del propio escuchador. No forma un bucle: ese evento solo recalcula tarifas en modo PrcVenta (aquí se está en PrcCompra) y la generación de EAN13 no repite trabajo si el código ya existe; tampoco se guarda ningún documento desde dentro del hook, así que OnDespuesDeGuardarDocumento no se reentra. No hace falta ninguna guarda explícita — sería necesaria solo si un después-de-guardar volviera a editar su mismo tipo de entidad (un documento desde el hook de documentos, un maestro desde el de maestros), y aquí el hook de documento solo edita maestros.

La operativa de usuario está en Cambio de tarifas desde compras.

Al guardar un artículo#

Al dar de alta o modificar un artículo (evento del escuchador OnDespuesDeGuardarMaestro), el módulo puede actuar de dos formas independientes:

  • En modo PrcVenta, si el artículo tiene familia estadística (CODFAMEST), recalcula los tramos de TARIFAVE del artículo a partir de ARTICULO.PRCVENTA, aplicando los coeficientes de SIT_VIVT_COEFICIENTES y la marca TARIFAS.SIT_VIVT_IVA_INCLUIDO (para quitar o añadir IVA). Crea los tramos que no existan.
  • Si está activada la generación de EAN13 y el artículo es de venta, genera el código (ver más abajo).

El recálculo de tarifas en este evento tiene una limitación conocida con las modificaciones masivas (ver Errores conocidos y diagnóstico). La operativa de usuario está en Tarifas según el precio de venta.

Recálculo masivo de artículos (menú)#

La opción de menú Actualización de tarifas (Esofitec | Actualización Tarifas > Tarifas > Actualización de tarifas, ejecutada por Sit.Viv.Tar.exe) recorre todos los artículos con familia estadística aplicando el mismo cálculo que el guardado de artículo. Solo funciona en modo PrcVenta.

La operativa de usuario está en Tarifas según el precio de venta.

Registro del histórico de auditoría de tarifas#

Con SIT_VIVT_REGISTRA_HISTORICO = 'T' (por defecto F), el módulo registra en SIT_VIVT_HISTORICO_TARIFAS cada tramo de tarifa cuyo precio cambia realmente (fuera de la tolerancia de DATOSCONFIG.NUMDECPRC), en los tres puntos anteriores:

  • Botón del rayo y aplicación automática (modo PrcCompra): una fila por cada tramo actualizado o creado, con origen ALBARAN_COMPRA, el coste de la línea (SIT_VIVT_COSTE_TOTAL) y la referencia del albarán de compra (IDALBC y su número de documento legible). Ambas vías comparten el mismo bucle de aplicación, así que registran igual; solo cambia qué líneas le pasan (todas las marcadas salvo precio fijo, o solo las de artículos Auto).
  • Guardado de artículo (modo PrcVenta): una fila por cada tramo recalculado, con origen FICHA_ARTICULO y sin documento.
  • Recálculo masivo (menú): igual que el guardado de artículo, con origen RECALCULO_MASIVO.

En modo PrcVenta, el rayo pierde el documento origen

Cuando la configuración es PrcVenta, el botón del rayo solo escribe ARTICULO.PRCVENTA; el recálculo real de los tramos ocurre después, en el evento de guardado del artículo, donde ya no se conoce el albarán de compra. Esos registros salen con origen FICHA_ARTICULO y sin documento, aunque el cambio se haya originado desde el rayo.

El registro del histórico nunca bloquea la aplicación de precios: si la inserción falla (por ejemplo, la tabla no está desplegada en esa empresa), el error se registra en el log del addon y el precio queda aplicado igualmente; el usuario no ve ningún aviso ni bloqueo.

La operativa de usuario está en Histórico de tarifas.

Al guardar un cliente#

Al dar de alta o modificar una ficha de cliente (evento del escuchador OnAntesDeGuardarMaestro), el módulo fuerza CLIENTES.IVAINCLUIDO según el valor de TARIFAS.SIT_VIVT_IVA_INCLUIDO de la tarifa informada en el cliente.

La operativa de usuario está en El IVA incluido en las tarifas.

Al guardar un documento de venta#

Al dar de alta o modificar ofertas, pedidos, albaranes y facturas de venta (evento del escuchador OnAntesDeGuardarDocumento), el módulo compara el IVA incluido del documento con TARIFAS.SIT_VIVT_IVA_INCLUIDO. Si difieren, muestra un aviso; no bloquea el guardado.

La operativa de usuario está en El IVA incluido en las tarifas.

Generación de EAN13#

También al dar de alta o modificar un artículo (evento del escuchador OnDespuesDeGuardarMaestro), si SIT_VIVT_GENERA_EAN13 = 'T', hay prefijo configurado y el artículo es de venta (ESVENTA = 'T'), el módulo registra en ALTERNA un EAN13 con la forma prefijo + correlativo + dígito de control. El correlativo se obtiene del mayor código existente con ese prefijo, de modo que no se repiten; si el artículo ya tiene un código con el prefijo, no genera otro.

La operativa de usuario está en Generación de códigos de barras EAN13.