Informaciones sobre la contabilidad de impuestos en el documento de salida

Producto:

Microsiga Protheus®

Entorno:

Facturación (SIGAFAT)

Ocurrencia:

¿Cómo contabilizar los impuestos por medio del documento de salida?

Paso a paso:

Los AE 610 y 620 están destinados a la contabilidad de ítems del documento de salida (SD2) y del encabezado del documento de salida (SF2), luego los indicadores de tablas estarán en estos registros, de esta manera, la indicación de cualquier otra tabla debe realizarse por medio de una sintaxis.

 

Los Asientos estándar pueden ajustarse de acuerdo con la regla necesaria para la contabilidad, pudiendo inclusive utilizarse funciones en sus campos macro ejecutables, luego pueden consultarse registros de otras tablas por medio de funciones como "Posicione", que devuelve el dato deseado, o por medio de una "Función de usuario" que en su devolución traiga la información que será procesada.

 

Apuntando a otras tablas (On Line / Off Line)
Los AE creados con sintaxis apuntadas a las tablas SD2 y SF2 pueden utilizarse tanto en la contabilidad On Line como Off Line.

Para apunte de otras tablas (ej. SF3 y SFT), si la ejecución fuera Off Line, en el momento de la ejecución de la contabilidad On Line, las tablas pueden no estar grabadas aún, impidiendo que la regla del Asiento estándar recolecte las informaciones.

Por lo tanto, para cada uso (on line y off line) puede existir la necesidad de crear sintaxis diferentes.

Un ejemplo utilizando la contabilidad del campo "Crd.Pres." (FT_CRDPRES), que es el campo de Crédito previsto de ICMS grabado en la tabla de ítems fiscales (SFT)


    El AE del ítem de la Factura es 610, que marca la tabla SD2. La tabla equivalente en la parte fiscal es la tabla SFT.

    Considerando que la tabla SFT se crea después de la grabación de la factura, es decir, no existe más indicación en la Contabilidad de la factura, será necesario buscar la información por el cálculo y no por el campo grabado.

    Aún no existiendo el registro SFT, el flujo de MATXFIS se inició en el momento y puede realizarse la misma activación de la función fiscal en el AE para la devolución del valor, en este caso MAFISRET.

    La función MAFISRET() está preparada para recibir dos parámetros en su activación, siendo:

    1. El número de la línea de la factura que se está procesando.

    2. El identificador del campo/impuesto que se estaría procesando, en este caso la referencia del Crédito previsto es LF_CRDPRES

    Ejemplo
    MaFisRet(Val(SD2->D2_ITEM), "LF_CRDPRES")

    Importante

    El campo "Ítem" (D2_ITEM) es un campo carácter de tamaño 2, luego para pedidos con más de 99 ítems el contenido de este se vuelve alfanumérico y la conversión ofrecida por la función VAL() no atenderá. En este caso tendría que realizarse la lógica reversa del proceso de SUMA1() o configurarse el parámetro MV_NUMITEM con el límite de 99 ítems por factura.

    Si hubiera necesidad de lógica reversa en la función SUMA1, es necesario realizar el tratamiento por medio de una User Function, siendo necesaria la actuación de un analista programador.

    En el borrado del documento de salida (LP 620), debemos adoptar otra forma de trabajo, porque en este punto, los tributos no se están calculando y la línea SFT del documento que se está borrando ya existe.

    En este caso, puede utilizarse la función Posicione(), esta ubicará la línea SFT referente al ítem de la factura y devolver el dato del campo FT_CRDPRES.

    El uso del comando Posicione() recibe cuatro parámetros (Documentación), siendo:

    1. Tabla donde se realizará la búsqueda.
    2. Índice (composición de datos de la  la búsqueda) utilizado para ubicar el registro.
    3. Expresión identificadora de la línea deseada.
    4. Campo del dato deseado.

    En este caso, como vamos a buscar un dato de la SFT, un ejemplo de Sintaxis que podemos utilizar es:

    Ejemplo
    Posicione('SFT', 1, xFilial('SFT') + 'S' + SD2->D2_SERIE + SD2->D2_DOC + SD2->D2_CLIENTE + SD2->D2_LOJA + SD2->D2_ITEM + ' ' + SD2->D2_COD, 'FT_CRDPRES')

    Donde, cada parámetro, detallado a continuación, referente a uno de los cuatro que se utilizarán en Posicione (en la sintaxis se separan por coma):

    1. SFT \\ Tabla donde se realizará la búsqueda
    2. 1 \\ Índice utilizado para ubicar el registro
    3. xFilial('SFT') + 'S' + SD2->D2_SERIE + SD2->D2_DOC + SD2->D2_CLIENTE + SD2->D2_LOJA + SD2->D2_ITEM + ' ' + SD2→D2_COD \\ Expresión
    4. FT_CRDPRES \\ Campo del dato deseado

    Importante

    Es importante observar que en la ‘expresión identificadora de la línea deseada’ (parámetro 3) existen dos datos definidos previamente:

    • ‘S’ indicador de que buscamos la información de una factura de salida en SFT, y
    • ‘ ‘, este es la inclusión de dos espacios vacíos en la expresión, los cuales son necesarios, pues el dato anterior (D2_ITEM) por estándar tiene el tamaño 2, mientras que el ítem de la tabla SFT, FT_ITEM tiene el tamaño 4, ya que recibe datos de otras tablas como de SD1, donde D1_ITEM tiene el tamaño 4.


    Sobre el tamaño del campo, es posible utilizar también la siguiente sintaxis (modificada para el tamaño del campo)

    Ejemplo
    Posicione('SFT', 1, xFilial('SFT') + 'S' + SD2->D2_SERIE + SD2->D2_DOC + SD2->D2_CLIENTE + SD2->D2_LOJA + SD2->D2_ITEM + ' ' + ' ' + SD2->D2_COD, 'FT_CRDPRES')

    La activación de MAFISRET solamente funciona en la ejecución online, pues los procesos de cálculo deben estar iniciados, lo cual no ocurre en la contabilidad offline, ya que allá no ocurre el cálculo de impuesto.

    Para el proceso offline puede utilizarse la misma sintaxis del borrado, pues el registro SFT ya se generó y entonces puede consultarse:

    Ejemplo
    Posicione('SFT', 1, xFilial('SFT') + 'S' + SD2->D2_SERIE + SD2->D2_DOC + SD2->D2_CLIENTE + SD2->D2_LOJA + SD2->D2_ITEM + ' ' + ' ' + SD2->D2_COD, 'FT_CRDPRES')


    Si no hubiera tratamiento, se generará error.log, ya que en la Contabilidad On Line no podrá utilizar en la sintaxis la tabla SFT y en la Off line la función MAFISRET porque la factura ya está grabada.

    Existe la función IsInCallStack que verifica en la pila de activación, la existencia de determinada función en la pila de activaciones.
    De esta manera es posible su utilización para identificar si la ejecución se está realizando por el proceso de generación de la factura o por la propia rutina de contabilidad
    :

    Ejemplo
    Iif(IsInCallStack("CTBANFS"),POSICIONE(),MAFISRET())


    En este ejemplo IsInCallStack identifica si la función CTBANFS está en la pila de activaciones, si estuviera ejecuta Posicione(), si no ejecuta MaFisRet().

    En este ejemplo utilizamos solamente las funciones Posicione y MaFisRet sin sus parámetros, solamente para presentar el comportamiento, sin embargo al elaborar la sintaxis para probar, informe la expresión entera.

    Para realizar la contabilidad de Tributos genéricos, basta crear un índice en la tabla  F2D.

    Ejemplo:
    F2D_FILIAL + F2D_IDREL + F2D_TRIB


    Para buscar el dato del campo, puede utilizarse la sintaxis que se utilizará con el AE 610.

    Ejemplo:
    POSICIONE("F2D",7,xfilial("F2D"){+}SD2->D2_IDTRIB{+}"TESTE","F2D_VALOR") 


    Con el nuevo índice, el sistema devolvió a posicione el valor del tributo "PRUEBA" correctamente.

    Este proceso puede ser en el modo on-line y off-line.


    Importante

    • El ejemplo anterior fue para contabilizar solamente el campo FT_CRDPRES. Cada campo de las tablas SFT y SF3 pueden tener tratamientos diferentes, por lo tanto, es necesario consultar el soporte Libros fiscales para entender cómo se realiza el cálculo y qué campos se graban.
    • Verifique si el mismo cálculo fiscal tiene grabación en las tablas SD2 y SF2. Si hubiera el cálculo, basta crear una sintaxis estándar de los AE 610 y 630, ya que estas tablas se ubican en el AE.
    • LP 610: Para traer el valor de ICMS solidario, por ejemplo, es posible utilizar solamente la sintaxis SD2->D2_ICMSRET, tanto para On Line como para Off Line.
    • LP 620: Para traer el valor de ICMS, por ejemplo, es posible utilizar la sintaxis SF2->F2_VALICM, tanto para On Line como para Off Line.
    • El ejemplo que utilizamos del campo de Crédito previsto de ICMS, al inicio de esta documentación, solamente se graba en la tabla SFT, por lo tanto, no es posible utilizar de la forma simple como describimos el uso en las tablas SD2 y SF2.

    Puede ser de su interés: