Cómo desglosar distintos tipos de impuesto en nuestras aplicaciones velneo V7

A raíz de una consulta de Julian en el foro de Velneo V7 sobre cómo poder desglosar distintos tipos de impuesto en nuestras aplicaciones Velneo V7, se me ocurrió ampliar la información que di con este post. De paso repasamos las actualizaciones condicionadas… ¡Comenzamos!

Planteamiento del problema

Tenemos en nuestra base de datos artículos con distintos tipos de impuesto y queremos que al ir introduciendo líneas de venta, se vayan acumulando en la cabecera de los documentos los importes según los impuestos.

Voy a coger como base para realizar el ejemplo, vErp que está adaptado para los tipos impositivos de España (pero puede servir perfectamente para cualquier otro país).

Creando los objetos necesarios

Lo primero es crear una tabla estática (REG_IVA_M) para tener delimitados los distintos tipos de impuestos que vamos a utilizar en nuestra aplicación. En nuestro caso, la tabla tiene los siguientes items:

Tipos de IVA

  • Lo siguiente será crear en la tabla de artículos (ART_M) un campo (o mejor dos) enlazados con la tabla REG_IVA_M.

    Dos campos por si queremos diferenciar el tipo de IVA de ventas (REG_IVA_VTA) del tipo de IVA de compras (REG_IVA_COM)

  • Tabla de empresa: en esta tabla tendremos que crear los campos necesarios para introducir los distintos tipos de IVA. En este caso se ha optado por poner dos campos para cada uno de los impuestos (y retenciones) y un campo “fecha de cambio” por si hay modificaciones en los %. De esta forma se consigue que si en una determinada fecha la ley cambia podamos tener el % del impuesto actual y el anterior:

    IVAS_Empresa

    En los documentos (tanto de compra como de venta) y dependiendo de la empresa, usaremos estos campos para calcular el total IVA de cada una de las bases imponibles.

  • Ahora vamos con las modificaciones necesarias en los documentos de venta (extrapolable a los documentos de compra).

    Desglosar distintos tipos de impuesto en los documentos

    En cada una de las tablas de documentos (presupuestos, pedidos, albaranes, facturas) tanto de compras como de ventas, tendremos que crear los campos necesarios para poder desglosar los distintos tipos de impuesto.

    Estos son los campos necesarios:

    Campos_Tipos_Iva

    Vamos a ir viendo en detalle cada uno de los bloques de campos:

    Bases_Imponibles

    Son campos numéricos. En estos campos se irán acumulando las bases imponibles de las líneas según el tipo de IVA (veremos las actualizaciones mas adelante). El último de ellos tendrá como contenido inicial lo siguiente para hacer el sumatorio de todas las bases imponibles:

  • #BAS_GEN + #BAS_RED + #BAS_SUP + #BAS_EXE
  • Descuentos

    En este caso, los dos primeros campos son para poder introducir en el documento de venta los portes (POT) y un % de descuento general (POR_DTO)

    Si hemos introducido un descuento, en los siguientes campos se calcula el descuento a aplicar en cada una de las bases imponibles con los siguientes contenidos iniciales:

  • round( net( #BAS_GEN, #POR_DTO), #EMP.DEC_IMP) + #POT
  • round( net( #BAS_RED, #POR_DTO), #EMP.DEC_IMP)
  • round( net( #BAS_SUP, #POR_DTO), #EMP.DEC_IMP)
  • round( net( #BAS_ESP, #POR_DTO), #EMP.DEC_IMP)
  • round( net( #BAS_EXE, #POR_DTO), #EMP.DEC_IMP)
  • #BAS_GEN_DTO + #BAS_RED_DTO + #BAS_SUP_DTO + #BAS_ESP_DTO + #BAS_EXE_DTO
  • En el último campo de este bloque, se calcula la base imponible total menos los descuentos:

  • #BAS_TOT – #BAS_TOT_DTO + #POT
  • IVAS

    En este bloque de campos vamos a calcular el importe de IVA según cada uno de los tipos.

    En los 4 primeros campos dependiendo de la fecha del documento, se coge el % de IVA a aplicar con contenidos iniciales (este montaje nos permite diferenciar los periodos por si ha habido camios en los %). Estos son los contenidos iniciales de los campos:

  • choose( #FCH < #EMP.FCH_CHG_IVA, #EMP.POR_IVA_GEN_ANT, #EMP.POR_IVA_GEN )
  • choose( #FCH < #EMP.FCH_CHG_IVA, #EMP.POR_IVA_RED_ANT, #EMP.POR_IVA_RED )
  • choose( #FCH < #EMP.FCH_CHG_IVA, #EMP.POR_IVA_SUP_ANT, #EMP.POR_IVA_SUP )
  • choose( #FCH < #EMP.FCH_CHG_IVA, #EMP.POR_IVA_ESP_ANT, #EMP.POR_IVA_ESP )
  • En los cuatro siguientes campos, dependiendo del % de IVA, se calcula el total IVA de cada base imponible también con contenidos iniciales:

  • round( percentage( #BAS_GEN_DTO, #POR_IVA_GEN), #EMP.DEC_IMP)
  • round( percentage( #BAS_RED_DTO, #POR_IVA_RED), #EMP.DEC_IMP)
  • round( percentage( #BAS_SUP_DTO, #POR_IVA_SUP), #EMP.DEC_IMP)
  • round( percentage( #BAS_ESP_DTO, #POR_IVA_ESP), #EMP.DEC_IMP)
  • Como siempre, el último campo de este bloque es para realizar el sumatorio en este caso del IVA total:

  • #IVA_GEN + #IVA_RED + #IVA_SUP + #IVA_ESP
  • El siguiente bloque de campos es para aplicar retenciones en el documento si si diese el caso. Como os podéis imaginar, los campos tienen la misma estructura que los que acabamos de ver.

    En el ultimo campo TOT_ALB se acumula el total del albarán. El contenido inicial de este campo es:

  • #BAS_TOT_DTO + #IVA_TOT+ #REQ_TOT- #RET_IRP- #RET_ALQ
  • Modificando la tabla de líneas de los documentos

    Si hemos creado en la tabla de artículos dos campos para diferenciar el tipo de impuestos para compras y ventas, en la tabla de líneas habrá que distinguir si estamos en compras o ventas.

    En vERP tenemos una única tabla para los movimientos de almacén (se graban en la misma tabla tanto los movimientos de compra como de venta). La tabla en cuestión es MOV_G.

    Por lo tanto en esta tabla creamos dos campos enlazados a la tabla estática de tipos de impuestos:

    • REG_IVA_COM: cuyo contenido inicial es:

      choose( #PRV.EXE_IVA | #SER_COM.EXE_IVA , “X”, #ART.REG_IVA_COM ): En este caso primero se comprueba si el proveedor o la serie del documento tienen marcado un campo booleano que indica si está exento de IVA. Si lo tiene marcado se asigna el tipo de IVA exento (X); si no, coge el valor que tenga el artículo para el tipo de IVA de compras.

    • REG_IVA_VTA: cuyo contenido inicial es:

      choose( #CLT.EXE_IVA | #SER_VTA.EXE_IVA , “X”, #ART.REG_IVA_VTA ): En este caso primero se comprueba si el cliente o la serie del documento tienen marcado un campo booleano que indica si está exento de IVA. Si lo tiene marcado se asigna el tipo de IVA exento (X); si no, coge el valor que tenga el artículo para el tipo de IVA de ventas.

    Generando las actualizaciones a la cabecera de los documentos

    Una vez visto todo el montaje de los campos en las tablas, lo único que nos quedará será crear las actualizaciones a disparar cada vez que el usuario de un alta o modifique una de las líneas de los documentos.

    Una vez creada la actualización, tendremos que crear los distintos componentes de actualización que vamos a necesitar para asignar correctamente las distintas bases imponibles:

    Componentes de actualización

    Como os podéis imaginar, habrá que condicionar el componente al tipo de iva de la tabla estática de impuestos:

    Base general

    Base general

    Base reducida

    Base reducida

    Base_Super_Reducida

    Base super reducida

    El resto de los componentes de actualización, os lo dejo como práctica para vosotros.

    Esto es todo lo que necesitas para desglosar distintos tipos de impuesto en nuestras aplicaciones velneo V7.

    Si te ha parecido intereante, déjame tu opinión mas abajo en los comentarios.

    Además si te ha parecido interesante este artículo puedes suscribirte al blog y al canal de youtube.

    Francisco José Vila Martín
    ayudavelneo@ayudavelneo.com

    Francisco José Vila es autor del blog Ayudavelneo desde donde ayuda a desarrolladores que se están iniciando en Velneo a acortar su curva de aprendizaje para que obtengan beneficios y sean rentables desde el minuto 1. Además es programador certificado y formador en la plataforma de desarrollo de aplicaciones empresariales Velneo V7. Ampliar información

    No Comments

    Post A Comment

    Información básica sobre Protección de Datos: Responsable: Francisco José Vila Martín. Finalidad: Gestionar y moderar los comentarios. Legitimación: Tu consentimiento. Destinatarios: Tus datos se alojarán en los servidores de Web Empresa S.L. (UE). Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir los datos, así como otros derechos, como se explica en la información adicional. Información adicional: Puedes consultar la información adicional y detallada sobre protección de datos personales en mi Política de Privacidad.

    Pin It on Pinterest