CALCODLAN- Lectura de las tablas de la rutina FISA178 y FISA181 con actualización del Array de las Tablas CDA y CDV

Objetivo y alcance

Este fuente concentra las funcionalidades referente al montaje del Array aGrava enfocado en las configuraciones efectuadas por medio de la rutina de la configuración de tributos para una posterior grabación en la tabla CDA y/o CDV



Importante

Los siguientes campos en la CDA y CDV son exclusivos para operaciones con código de ajuste de registros realizado por la configuración de tributos.


Tablas

  1. CDA 
    1. CDA_VLOUTR - Considera valor ICMS otros. 
    2. CDA_TXTDSC - Código referente a la descripción complementaria para el bloque 0460 (Vínculo con la tabla CJA).
    3. CDA_CODCPL - Código referente al mensaje complementario para el bloque C195 y otros similares (Vínculo con la tabla CJA).
    4. CDA_CODMSG - Código referente a la descripción complementaria para el bloque C197 y otros similares (Vínculo con la tabla CJA).
    5. CDA_REGCAL - Referencia del código de regla de cálculo utilizada en la configuración de tributos.
    6. CDA_OPBASE - Opción de selección de la base de cálculo de acuerdo con el vínculo de la tabla CJA.
    7. CDA_OPALIQ - Opción de selección de la alícuota de acuerdo con el vínculo de la tabla CJA.
    8. CDA_IDMSG- Campo de ID generado a través de la rutina FWUID con vínculo de la tabla CJL, en la que se guardan los mensajes convertidos con la fórmula NPI.
    9. CDA_AGRLAN - Campo que identifica la forma de agrupar el registro para generar el archivo del SPED FISCAL.
  2. CDV
    1. CDV_REGCAL - Referencia del código de regla de cálculo utilizada en la configuración de tributos.
    2. CDV_VLOUTR - Considera Valor ICMS Otros.
    3. CDA_TXTDSC - Código referente a la descripción complementaria para el bloque 0460 (Vínculo con la tabla CJA).
    4. CDA_CODCPL - Código referente al mensaje complementario para el bloque C195 y otros similares (Vínculo con la tabla CJA).
    5. CDA_CODMSG - Código referente a la descripción complementaria para el bloque C197 y otros similares (Vínculo con la tabla CJA).
    6. CDA_OPBASE - Opción de selección de la base de cálculo de acuerdo con el vínculo de la tabla CJA.
    7. CDA_OPALIQ - Opción de selección de la alícuota de acuerdo con el vínculo de la tabla CJA.
    8. CDA_IDMSG- Campo de ID generado a través de la rutina FWUID con vínculo de la tabla CJL, en la que se guardan los mensajes convertidos con la fórmula NPI.


Diccionario

Estructura está en el paquete 010120 - $/Protheus_Estándar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de ajuste SPED/Diccionario

Estructura está en el paquete 010650 - $/Protheus_Estándar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de ajuste SPED/Diccionario

Fuentes

Localizados en la branch Innovación: $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED


  1. Función RetCodAp - Creación de una query con Json para leer la tabla CJ9 - Encabezado del registro de la regla de ajuste del registro y CJA - Códigos del registro, valor y mensajes para grabar en el Array
  2. Función BusCodLan - Recibe el Json de la función RETCODAP - oJCodRef , en la que actualiza el array aGrava que en el legado tiene 17 posiciones y recepcionando las informaciones de la configuración de tributos pasa a tener 25 posiciones, a continuación las posiciones modificadas en el Array AGrava: 
    1.             cCodLan    := Alltrim(aCodLan[nI][2])  //CJA_CODLAN 
    2.             nBasCal     := aTribgen[nX][TG_IT_BASE]  //CJA_NFBASE 
    3.             nAlqCal     := aTribgen[nX][TG_IT_ALIQUOTA]    //CJA_NFALIQ
    4.             cTpLanc     := Iif(Alltrim(aCodLan[nI][7]) <> "03","2","1")  //Se efectúo el ajuste para la grabación correcta de los registros de IPI
    5.             cRegCalc   := aCodLan[nI][1]   //cRegCal
    6.             cCodVal     := Left(aCodLan[nI][5],3)   //CJA_VALOR
    7.             cCodValOu := Left(aCodLan[nI][6],3)   //CJA_VLOUTR
    8.             nValor        := 0 //Ajuste condicional de acuerdo con el valor recibido en la variable cCodVal
    9.             nValorOut  := 0 //Ajuste condicional de acuerdo con el valor recibido en la variable cCodValOu
    10.             cOpBase    := aCodLan[nI][3]
    11.             cOpAliq     := aCodLan[nI][4]
    12.             cCFOP        := aNfItem[nZ][IT_CF] 
    13.             cDescod     := aCodLan[nI][12]
    14.             cLivro         := aNFItem[nZ][IT_TS][TS_NRLIVRO]
    15.             cCodDes    := aCodLan[nI][11]   //CJA_TXTDSC
    16.             cCodObs    := aCodLan[nI][10]   //CJA_CODCPL
    17.             cCodOLan  := aCodLan[nI][09]   //CJA_CODMSG
    18.             cGeracum  := aCodLan[nI][12]   //CJA_GERMSG
    19.             cIFCOMP    := "CONFIG"
    20.             cCMPOrig  := Pertenece(1,2,3,4) //Ajuste condicional de acuerdo con el contenido del array aCodLan[nI][7], considerando la dinámica para calcular el IPI. Después de los ajustes mencionados, el array Agrava queda en esta configuración:aAdd(aGrava, {;
                                  cItem,;     //1 - Ítem
                                  cCodLan,;   //2 - Código de registro
                                  "1",;       //3 - Sistema
                                  nBasCal,;   //4 - Base de cálculo
                                  nAlqCal,;   //5 - Alícuota
                                  nValor,;    //6 - Valor calculado
                                  cSeq,;      //7 - Secuencia
                                  cIFCOMP,;   //8 - Informaciones Complementarias
                                  cTpLanc,;   //9 - Tipo de utilidad del registro
                                  "",;        //10- Grabación del valor en ICMS u OTROS
                                  cCmp0460,;  //11-Complemento para registro 0460
                                  cCodRefl,;  //12-Código Reflejo
                                  cGeraGNRE,; //13 - Genera GNRE
                                  cCMPOrig,;  //14 - Campo origen CC7
                                  cCFOP,;     //15 - CFOP
                                  cLivro,;    //16 - LIBRO
                                  cDescod,;   //17 - Descripción DEL CÓDIGO
                                  cCodDes,;   //18 - Descripción Mensaje bloque 0460
                                  cCodObs,;   //19 - Descripción Mensaje Bloque X195
                                  cCodOLan,;  //20 - Descripción Mensaje Bloque X197
                                  nValOut,;   //21 - Valor Otros ICMS
                                  cRegCalc,;  //22 - Código de la regla de cálculo
                                  cOpBase,;   //23 - Opción de selección de la base de cálculo
                                  cOpAliq,;   //24 - Opción de selección de la alícuota
                                  cGerAcum }) //25 - Indica si genera la forma como se agruparán los registros.

Función  ExecCja  - Control de protección de los campos.

---------------------------------------------------------------------------------------------------------------------------

FISA170 - Rutina con la concentración de todos los registros del motor fiscal tributario.

Se agregó una nueva opción en la Tree de la configuración.

  • Regla de ajuste de registro
    • Registro de mensaje
    • Regla de ajuste de registro.

Objetivo y alcance

Concentra Menú de la Tree, rutinas de carga y Browse de las rutinas utilizadas en la configuración fiscal de tributos

Fuentes

Localizados en la branch Innovación: $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED

Función:

GetVerRls - Control de acceso a mejoras por Release.

Se agregó el informe de verificación de la reversión totvs.protheus.backoffice.fiscal.relatorioEstornocredito en la Tree, en la solapa Informes.

Tablas agregadas

CJ8 - Registro de mensajes

CJ9 - Registro Regla de Ajuste

CJA -Códigos de registro de la regla de ajuste


---------------------------------------------------------------------------------------------------------------------------

FISA173- Función de cálculo de tributos genéricos

Para incluir el código de ajuste del registro, se agregaron nuevas funciones: 

Función: 

GravaGNRE - Hace la grabación del formulario de pago en la tabla SF6 de acuerdo con las configuraciones efectuadas en la configuración de tributos.

DelGuia - Realiza la eliminación del formulario de pago de la tabla SF6 generada en la configuración de tributos.

DelTit - Realiza la eliminación del título del financiero de la tabla SE2 generada por la configuración de tributos.

---------------------------------------------------------------------------------------------------------------------------

FISA178 - Registro de Mensaje

Objetivo y alcance

El objetivo de esta rutina es crear un registro de mensaje con la base en las reglas por tributo, tributo genérico, datos de la factura y registros. Al seleccionar una de estas formas de registro, se permite elegir lo que se debe informar en la fórmula del mensaje.

Tablas

CJ8 con las informaciones tanto del encabezado como de los campos y filtros se monta el mensaje.

Diccionario

La estructura está en el paquete 010120 - $/Protheus_Estándar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de ajuste SPED/Diccionario

Fuentes

Localizados en la branch Innovación: $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED

Carga automática

Los campos CJ8_TPREGR (Tipo de regla) al seleccionar Tributos -  se habilitará en el campo CJ8_TRIFIL (Regla por consultar)  las 3 esferas ( Estatal/Prov/Reg, Federal y Municipal), seleccionando una de las opciones el campo CJ8_REGTRA (Tributo) para la consulta se filtrará por tipo de regla.

Si el tipo de regla es igual a Tributos genéricos , se habilitará el campo  CJ8_TBCONF (Tributo genérico) - con la  consulta en la tabla F2B (Reglas de tributos) .

Si el campo CJ8_TPREGR (Tipo de regla) cuando se seleccione Datos de la factura se habilitará en el campo CJ8_TRIFIL (Regla que se consultará) las opciones Encabezado de la factura y Datos de los ítems , al seleccionar una de las opciones el campo  CJ8_CONSUL (Valor que se agregará a la fórmula), mostrará informaciones como por ejemplo (Tipo da factura , Tipo de operación, Número del ítem, Valor de la mercadería, etc.).

Después de seleccionar la información anterior, el contenido seleccionado en el campo CJ8_CONSUL (Valor que se agregará a la fórmula), se puede agregar al campo CJ8_MENSG (Composición del mensaje) haciendo clic en la Opción agregar y después hacer clic en la opción Validar mensaje.

Relación

Este campo CJ8_TBCONF se vinculará a la regla de cálculo del tributo en la tabla F2B rutina FISA160, en el campo F2B_REGRA.

Devolución

Esta rutina almacena el mensaje en un campo MEMO con la fórmula NPI, en la cual se convertirá cuando se procese la factura, por medio de la rutina FISXDESCR y se almacenará en la tabla CJL.

---------------------------------------------------------------------------------------------------------------------------

FISA181 - Inclusión de regla de ajuste del registro

Objetivo y alcance

El objetivo de esta rutina es efectuar un registro de la regla de códigos de ajuste del registro, vinculando a una regla de documentos fiscales que creará el usuario, según su registro, y en el momento de generar el documento mostrará las informaciones de los códigos del registro.

De esta manera, con este registro estamos unificando:

  • Vínculo del código de registro informado en la TES.
  • Vínculo del código de reflejo para reglas de cálculo realizado en el FISA072
  • Vínculo de mensajes, realizados en latabla CCE (Información complementaria) o en el registro del TES (Tabla SF4) campo F4_CODOBSE  (Cód Observ) 
    • C197 
    • C195
    • 0460

Tablas

CJ9  con las informaciones del encabezado del registro de la regla de ajuste del registro, tenemos los campos:

  1. CJ9_CODREG - Código de la regla
  2. CJ9_DESCR - Descripción de la regla de ajuste
  3. CJ9_VIGINI - Fecha inicial de vigencia de la regla
  4. CJ9_VIGFIM - Fecha final de vigencia de la regla.
  5. CJ9_ID - Que vincula con la Tabla CJA - Ítems de la regla de ajuste de registro.

     

CJA -Regla de registro - Ítems, donde vincularemos los códigos de registro, regla de cálculo, vigencia, control de formularios y mensajes que se utilizarán.      

  1. CJA_CODREG - Código regla encabezado  - Vincularemos con la Tabla CJ9
  2. CJA_REGCAL Regla de cálculo - Tendremos una consulta estándar con la Tabla F2B, donde el usuario seleccionará la regla de cálculo que encuadre para la regla de código de ajuste, en este campo, en vez de que este tenga un cálculo en el registro de reflejo, este creará su propio cálculo.      
  3. CJA_CODTAB    Tabla de registro    - En este campo están disponibles 4 tablas de registro 1.1 (CDO) , 5.2 (CDY)5.3(CC6) y 5.3.4(CCK)
  4. CJA_CODLAN*      - Código de registro       - La Tabla seleccionada en el campo CJA_CODLAN , actualiza la consulta estándar y devuelve los códigos de registro de cada tabla.
  5. CJA_VIGINI        Fecha inicial de vigencia del registro    - El usuario informa la fecha inicial de vigencia del código de registro que cuenta en los archivos TXT dados de baja en el sitio de la http://sped.rfb.gov.br/
  6. CJA_VIGFIM       Fecha final de vigencia de registro     - El usuario informa la fecha inicial de vigencia del código de registro que cuenta en los archivos TXT dados de baja en el sitio http://sped.rfb.gov.br/
  7. CJA_NFBASE      Considera Base de ICMS     - En este campo tenemos 3 opciones - Valor / Nulo / Cero, para atender si la regla de cálculo necesitara considerar la Base del ICMS como Cero , Valor o NULO si fuera necesario grabar en el SPED el contenido |EN BLANCO|
  8. CJA_NFALIQ      - Considera alícuota             - En este campo tenemos 3 opciones - Valor / Nulo / Cero, para cumplir si la regla de cálculo necesita considerar la alícuota del ICMS como cero , valor o NULO si es necesario grabar en el SPED el contenido |EN BLANCO|
  9. CJA_VALOR        - Considera Valor ICMS         - En este campo se controla cómo la regla interpretará el contenido del valor del ICMS cuando sea necesario generar los campos 7 del registro C197, se entenderá como Valor. En este campo tenemos una consulta estándar en CIN con filtro de regla de Tributo con el campo CJ9_REGCAL.
  10. CJA_VLOUTR     - Considera Valor ICMS Otr - En este campo se controla cómo la regla interpretará el contenido del valor de ICMS si es necesario generar los campos 8 del registro C197, se entenderá como Otros. En este campo tenemos una consulta estándar en CIN con filtro de regla de Tributo con el campo CJ9_REGCAL.
  11. CJA_CNTRL        Est/Prov/Reg de la operación                   - En este campo tenemos 2 opciones por considerar, el código de registro por el Est/Prov/Reg de origen o por el Est/Prov/Reg de destino. Este campo tiene relación con el campo CJA_OPER
  12. CJA_OPER          Tipo de Operación               - En este campo se define en que tipos de operación debe aparecer el código de registro. Son 3 opciones: Entrada, salida y devolución.
  13. CJA_CODMSG     - Código del mensaje      - En este campo se seleccionará el mensaje registrado previamente en la rutina FISA178 - Registro de mensaje que se utilizará en EFD ICMS IPI Registro C197 campo 3
  14. CJA_GERMSG    Tipo de mensaje            - Tenemos este campo para control de cómo se generará el mensaje para  01 - Cód. de registro por período, donde genero un mensaje para cada código de registro del período, 02 - Cód.  de registro + Factura, si se generara un único mensaje por código de registro agrupado por factura y 03- Cód de registro + Producto en la que se detallará el mensaje por cada producto de la factura.
  15. CJA_ID_CAB       ID del encabezado               - Este campo no aparecerá en el Browser, pero se grabará un ID a través de la función FWUUID("CJA").                                                                                                                   
  16. CJA_CODCPL       - Texto del complemento   - En este campo se seleccionará el mensaje registrado previamente en la rutina FISA178 - Registro de mensaje que se utilizará en EFD ICMS IPI Registro C195 campo 2 y campo 3.    
  17. CJA_TXTDSC       - Texto de descripción           - En este campo se seleccionará el mensaje registrado previamente en la rutina FISA178 - Registro de mensaje que se utilizará en EFD ICMS IPI Registro 0460 en el campo Descripción.
  18. CJA_GUIA          Regla de formulario                   - En este campo tendremos la consulta estándar con la tabla CJ4, donde el usuario seleccionará la regla de formulario que se encuadre en la regla de código de ajuste.
  19. CJA_TITULO          Regla de título                   - En este campo tendremos la consulta estándar con la tabla FKK, donde el usuario seleccionará la regla de título que se encuadre en la regla de código de ajuste.
  20. CJA_TITGUI       Modo de Agrp Formulario/Tit     - En este campo definimos el modo de agrupación del Formulario / Título que se debe generar mediante la rutina. 01- Por documento + Registro + Participante o 02 - Por código de registro agrupado por participante

Diccionario

La estructura está en el paquete 010120 - $/Protheus_Estándar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de ajuste SPED/Diccionario

La estructura está en el paquete 010650 - $/Protheus_Estándar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de ajuste SPED/Diccionario

Fuentes

Localizados en la branch Innovación: $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED

Creación de la pantalla en MVC con estructura de SOLAPAS (FOLDER), se estructuró en 2 modelos - MASTER y GRID.

  1. MASTER - Tabla CJ8
    1. VIEW_CAB
  2. GRID - Tabla CJA
    1. VIEW_LANC
      1. Campos:  CJA_CODTAB|CJA_CODLAN|CJA_VIGINI|CJA_VIGFIM|CJA_REGCAL|CJA_GUIA|CJA_TITULO|CJA_TITGUI|CJA_GERMSG|CJA_OPER|CJA_CNTRL
    2. VIEW_VLR
    3. Campos: CJA_CODLAN|CJA_NFBASE|CJA_NFALIQ|CJA_VALOR|CJA_VLOUTR
    4. VIEW_MSG
      1. Campos: CJA_CODLAN|CJA_CODMSG|CJA_CODCPL|CJA_TXTDSC
  3. Funciones de COMBOBOX y consulta estándar
    1. XTabelaLanc - Campo CJA_CODTAB
    2. X181ChgF3 - Campo CJA_CODLAN
    3. CboxTpMsg - Campo CJA_GERMSG
    4. XTpTITGUI - Campo CJA_TITGUI
    5. CboxOper - Campo CJA_OPER
    6. CboxUF - Campo CJA_CNTRL
  4. Funciones de validaciones:
    1. Función VldCodigodonde tratamos para no repetir  
    2. Función VigIniFIm que verifica si la fecha inicial y fecha final ya existen en el registro de reglas.
    3. Fsa181MCpo , valida que hubo el cambio de la opción del campo CJA_CODTAB, elimina los contenidos de los campos CJA_CODLAN|CJA_VIGINI|CJA_VIGFIM
    4. ChangeLine , esta función actualiza la GRID entre solapas , identificando la línea se sitúa en la SOLAPA y copia la misma posición para las demás solapas, de esta manera el usuario sabrá en qué línea de la solapa anterior está modificando o visualizando.

Relación

  • F2B (F2B_REGRA), con el campo CJA_REGCAL
  • CIN (CIN_CODIGO)  con los campos CJA_VALOR y CJA_VLOUTR  
  • CJ8 (CJ8_CODREF)  con los campos CJA_CODCPL, CJA_CODMSG y CJA_TXTDSC
  • CJ9 (CJ9_ID) con el campo CJA_ID_CAB
  • CJ9 (CJ9_CODREG) con el campo CJA_CODREG

Automatización

  • Case
    • $/Protheus_estandar/Fuentes_Doc/Innovación/V12/Libros Fiscais - Configurador/Código de ajuste SPED/Automatización/Cases/FISCadMensajeTestCase.PRW
    • $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Codigo de ajuste SPED/Automatización/Cases/FISCadRegraAjustTestCase.PRW
    • $/Protheus_Estándar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISCadTributoTestCase.PRW
    • $/Protheus_Estándar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISComRJArqCfgTestCase.PRW
    • $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISComRJCfgMovTestCase.PRW
    • $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISIndSpArqCfgTestCase.PRW
    • $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISIndSpCfgMovTestCase.PRW
  • Group
    • $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISCadTestGroup.PRW
    • $/Protheus_Estándar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISComRJArqCfgTestGroup.PRW
    • $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISIndSPArqCfgTestGroup.PRW
    • $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISIndSpCfgMovTestGroup.PRW
  • Suite
    • $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISCadTestSuite.PRW
    • $/Protheus_Estándar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISComArqCfgTestSuite.PRW
    • $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISIndArqCfgTestSuite.PRW
    • $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED/Automatización/Cases/FISIndCfgMovTestSuite

---------------------------------------------------------------------------------------------------------------------------

FISXAPUR- Funciones fiscales

Objetivo y alcance

Separar en el cálculo los valores provenientes de la configuración de tributos versus registro por TES (Legado).

Modificaciones para cumplir con el cálculo de IPI 

  1. Función AjustIPI - Esta función recibe el array aCDAIPI que contiene los datos de la tabla CDA referente a los registros de ajuste del IPI, en la que se agregó más de una posición en el array, mediante el contenido de la variable cSPCFGLEG.

La variable cSPCFGLEG concatena los campos CDA_CODLAN+CDA_IFCOMP, para crear una "clave" de comparación entre lo que es registro proveniente de la configuración de tributos vs. registro mediante el TES (legado).

También se hace una modificación en la aScan, utilizando la nueva posición del array para comparar los registros, que trae como resultado la separación correcta de los registros de acuerdo con el origen del registro.

2. Función CkApurCDP - Uno de los objetivos de esta función es verificar el cálculo anterior y también verificar registros manuales de un posible reprocesamiento del cálculo, cargando las informaciones en el array aDadIC y posteriormente traer a la pantalla del nuevo cálculo.

Se hizo un cambio para que no se cargue para el array aDadIC los registros provenientes de la configuración de tributos, con la finalidad de evitar la duplicación de registros en el cálculo, una vez que los registros automáticos se rehacen en cada nuevo cálculo. 

3. Función ViewResumo - Función responsable por presentar la grid con el cálculo en la pantalla.

Se hizo un ajuste para presentar en la columna "Tipo de registro" la información "CONFIG", para que los registros provenientes de la configuración de tributos, facilite la visualización de los registros.

4. Función LoadApur - Función que carga los valores en el array aGetApur para poder mostrarlos en la pantalla.

En esta rutina existe una condición que trabaja con el array aCDAIPI en la que se llama a la función RWaGetApur donde se verifican nuevamente los códigos de registro de ajuste. En el escenario inicial, la llamada de esta función agrupa nuevamente el contenido del array aCDAIPI, ocasionando la anulación de las modificaciones anteriores.

Para mantener los cambios fue necesario crear un acuerdo para que el último parámetro solicitado en la función RWaGetApur llevara el código "3" creado especialmente para identificar que el tipo de registro es de la configuración de tributos:

//Incluye ajustes del cálculo cargados de la CDA
    If lUsaSped .And. lCmpPcLanc
        For nX := 1 to len(aCDAIPI)

            If SUBSTR(aCDAIPI[nX][6],4,6) == "CONFIG" //len(aCDAIPI[nX][6]) > 3 
                RWaGetApur(aCDAIPI[nX][2],aCDAIPI[nX][4],.T.,aCDAIPI[nX][3],aCDAIPI[nX][6],'3',"","3") //'1-AUTOMATICO','2-MANUAL', '3- CONFIG'
            else    
                RWaGetApur(aCDAIPI[nX][2],aCDAIPI[nX][4],.T.,aCDAIPI[nX][3],aCDAIPI[nX][6],'3',"","1") //'1-AUTOMATICO','2-MANUAL
            Endif 

        Next nX
    Endif

También en el parámetro 5 cuando se llama la función RWaGetApur se utiliza la nueva posición del array aCDAIPI .

5. Función RWaGetApur -  Función que totaliza los valores en el array aGetApur que aparecerá en la pantalla para el usuario.

Se hizo un ajuste en la variable nPosLinha para que se verifique y compare la variable cTipoAj con la posición correspondiente del array. Con este cambio se pudieron totalizar correctamente los registros.

Como se modificó el contenido del parámetro 5 de la función RWaGetApur que recibe el código de registro de ajuste del IPI, fue necesario un ajuste adicional utilizando la función SUBSTR().

Modificaciones para cumplir con el cálculo de ICMS

  1. Función CkapurCDH - Esta función tiene como uno de los objetivos verificar el cálculo anterior y también verificar registros manuales de un posible reprocesamiento del cálculo, cargando las informaciones para el array aDadIC y posteriormente traer a la pantalla del nuevo cálculo.
    Para la configuración de tributos se agregó la llamada de la función GerGuiTit() para generar los formularios y títulos de la configuración. También se modificaron algunas validaciones para no cargar en el array aDadIC los registros ICMS de la configuración de tributos, con la finalidad de evitar la duplicación de registros en el cálculo, una vez que los registros automáticos se rehacen en cada nuevo cálculo.

  2. Función CkLancCDA - Esta función verifica si existe registros en la tabla CDA y genera los array de acuerdo con cada variación del ICMS, para que al final se muestren correctamente en las columnas de cálculo del ICMS.
    Se creó una protección en la función para los release anteriores y también un ajuste para cuando haya contenido en la columna "Otros".
    En el array aLanc se creó una nueva posición para almacenar la información del campo CDA_REGCAL para poder realizar la distinción de lo que es registro de la configuración versus registro del legado. Con esta información se pudo realizar la segregación de los valores de los códigos de registro en la pantalla de cálculo.
    Los Array que se trataron en el fuente son: aCDADifal , aCDAST, aCDAIC y aCDADE (Débitos especiales).

  3. Función LoadX3Apur - Se agregaron los nuevos campos de la tabla CDA y CJA para proteger la rutina.

---------------------------------------------------------------------------------------------------------------------------

FISXAPURA- Funciones fiscales


El fuente FISXAPURA trata del procesamiento de las informaciones de los cálculos del ICMS e IPI cuando el MultiThread está activo en el escenario del cliente.

Modificaciones para cumplir con el cálculo de IPI

Así como en el fuente FISXAPUR, se agregó una nueva posición en el array aCDAIPI en las llamadas de este, dentro del fuente FISXAPURA.

Modificaciones para cumplir con el cálculo de ICMS

Así como en el fuente FISXAPUR, se agregó una nueva posición en los array aCDADifal , aCDAST, aCDAIC y aCDADE en las llamadas de este, dentro del fuente FISXAPURA.

---------------------------------------------------------------------------------------------------------------------------

FISXDESCR- Conversión de los mensajes con fórmula NPI

Objetivo y alcance

Este fuente tiene el objetivo de convertir referencias de la MATXFIS() y otras funciones en índices para utilizarlos en textos del documento fiscal

Tablas

CJL - Control de mensajes decodificados, donde almacenaremos los mensajes convertidos, de acuerdo con la relación de los códigos del mensaje de la regla del código de ajuste del registro (CJA) .      

    1. CJL_ID               ID del mensaje    - Relacionaremos con la tabla CDA
    2. CJL_INDICE       Índice del mensaje - En la CDA tenemos 3 campos disponibles para configurar un mensaje para los registros C195 , C197 y 0460. Este campo en la CJL sirve para identificar el campo donde se originó el mensaje.
      : CDA_CODCPL (C195) = Índice 01 , CDA_CODMSG (C197) = Índice 02 y CDA_TXTDSC(0460) = índice 03
    3. CJL_CODMSG   Código del mensaje - Campo que almacenará el código del mensaje configurado en la tabla CJA y que también existe en la CJ8.
    4. CJL_MENSG      Mensaje decodificado - Campo MEMO con el mensaje convertido.

Fuentes

Localizados en la branch Innovación: $/Protheus_Estandar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Código de Ajuste SPED


Funciones

  1. Función FISXDAGR - Llamada principal de la rutina, de donde toma las referencias de la factura y ejecuta la grabación en la CJL y también graba el ID en la tabla CDA o CDV, dependiendo del tipo de ajuste.
  2. Función MensagRef - Se llama por medio de la rutina FISXDAGR después del ajuste inicial referente a los mensajes. Esta función carga las referencias, organiza las palabras del mensaje y realiza el procesamiento de la conversión.
  3. Función Procesar - Procesa las referencias de los mensajes de acuerdo con el array aPalavras.
  4. Función Convertir - Ajuste con relación a la conversión de las referencias.
  5. Función AtuMensag - Actualiza el mensaje con el resultado de la conversión.
  6. Función LoadMsghash - Alimenta el objeto Hash con los datos de referencia del impuesto que se procesará.
  7. Función RetConf - Devuelve el valor de los tributos genéricos provenientes de la configuración de tributos.
  8. Función ConvResult - Ajuste de la variable para convertir cualquier valor en carácter.
  9. Función FISXDFIH - Limpia los objetos.


---------------------------------------------------------------------------------------------------------------------------

IMPXFIS- Funciones fiscales


  1. Función GFPMxFis - Se agregaron los campos nuevos de la CJ9, CJA, CDA y CDB, utilizando la variable lCdaCof para control.

    1. Se creó la variable lTribCon si tengo algún cálculo de tributo hecho en la configuración para llamar la función RetCodAp - Carga la tabla de código de registro de la configuración para un Json.

      Y llamó también BusCodLan.
    2. Se agregó la tabla CJM - donde se grabará el contenido de las últimas facturas de entrada que componen el montaje del PA y la factura de salida que utilizó al PA.
    3. Se agregó en la función GFFMxFis la función GETCOMPULTAQ - Busque los datos de MP sus estructuras vs. PA, la Función FisDelCjm, para eliminar la CJM cuando se haga la anulación de la Fact de salida y la Función GETULTAQUI para tratar de la grabación de la CJM para productos que no tienen estructura. 
  2. Función xFisCDA - Graba la tabla CDA de acuerdo con la respuesta del procesamiento del array aGrava. 
    Para la configuración de tributos se agregaron las variables lCpoCDV y lCdaCof con las protecciones de campo para releases anteriores, además de realizar la grabación de los campos nuevos.
  3. Função xFisAtuSF3 - Responsable por actualizar las tablas de libros fiscales con base en una factura de entrada o salida.
    Se agregó la función GETULTAQUI para ajuste de los operandos de última adquisición, relacionados a la reversión de icms para productos que no tienen estructura, en que se hará la grabación en la tabla CJM.
    Se agregó la función GETCOMPULTAQ para ajustar el operando de última adquisición, para productos que tienen estructura para efectuar la grabación de la memoria de cálculo en la tabla CJM, verificando todos los componentes y cualquier nivel que componen la estructura de productos configurada.
    En la llamada de la función se agregaron 2 nuevos parámetros, y se aprovecharán en la función FISXDAGR que se llama al final de esta función.
    Al final de la función se agregó la función FISDELCJM , para realizar la eliminación de los registros de la CJM cuando haya anulación de la factura.
  4. Función xMaFisAjIt - Función responsable por reprocesar la respuesta del array aGrava.
    Se agregaron las llamadas del RetCodAP y BusCodLan cuando hayan registros de la configuración de tributos. 

---------------------------------------------------------------------------------------------------------------------------

MATA017- Registro de las informaciones adicionales del cálculo

  1. Al inicio del fuente se creó la variable lNewCDV para el control de los nuevos campos de la tabla CDV.

    1. Función A017LAICMS - Recepcionar en el montaje del GETDADOS del folder de registros fiscales el campo CDV_VLOUTR
    2. Función MontCols - Reposicionar los campos y agregar el CDV_VLOUTR.
    Función a017AjuICM - Agrega en el objeto dependiendo de la respuesta lógica de la variable lNewCDV los siguientes campos:
    IF lNewCdv
            nRegCalc := aScan( oLancCDV:aHeader, {|aX| aX[2] == "CDV_REGCAL" } )
            nValOut  := aScan( oLancCDV:aHeader, {|aX| aX[2] == "CDV_VLOUTR" } )
            nCodObs  := aScan( oLancCDV:aHeader, {|aX| aX[2] == "CDV_CODMSG" } )
            nCodOLan := aScan( oLancCDV:aHeader, {|aX| aX[2] == "CDV_CODCPL" } )
            nCodDes  := aScan( oLancCDV:aHeader, {|aX| aX[2] == "CDV_TXTDSC" } )
            nOpBase  := aScan( oLancCDV:aHeader, {|aX| aX[2] == "CDV_OPBASE" } )
            nOpAliq  := aScan( oLancCDV:aHeader, {|aX| aX[2] == "CDV_OPALIQ" } )
            nAgrLan  := aScan( oLancCDV:aHeader, {|aX| aX[2] == "CDV_AGRLAN" } )
        Endif
    IF lNewCdv .and. Len(aGrava[nI]) > 17
                            oLancCDV:aCols[nR,nCodDes]  :=  aGrava[nI,18] //
                            oLancCDV:aCols[nR,nCodObs]  :=  aGrava[nI,19] //
                            oLancCDV:aCols[nR,nCodOLan] :=  aGrava[nI,20] //
                            oLancCDV:aCols[nR,nRegCalc] :=  aGrava[nI,22] //
                            oLancCDV:aCols[nR,nValOut]  :=  aGrava[nI,21] //                        
                            oLancCDV:aCols[nR,nOpBase]  :=  aGrava[nI,23] //
                            oLancCDV:aCols[nR,nOpAliq]  :=  aGrava[nI,24] //
                            oLancCDV:aCols[nR,nAgrLan]  :=  aGrava[nI,25] //
    Endif

  2. Función a017GrvCDV - Responsable por la grabación de la tabla CDV.
    También hace le ajuste referente a los nuevos campos de la CDV de acuerdo con la respuesta lógica de la variable lNewCDV

  3. Función a017xLAICMS -  Aba Lançamento Fiscais  adicionar os campos novos se existirem:
    1.     aAdd(aYesFields,"CDV_VLOUTR")
    2.     aAdd(aYesFields,"CDV_TXTDSC")
    3.     aAdd(aYesFields,"CDV_CODCPL")
    4.     aAdd(aYesFields,"CDV_CODMSG")
    5.     aAdd(aYesFields,"CDV_REGCAL")
    6.     aAdd(aYesFields,"CDV_OPBASE")
    7.     aAdd(aYesFields,"CDV_OPALIQ")

    

---------------------------------------------------------------------------------------------------------------------------

MATA103- Facturas de entrada


Importante

En la subida oficial en la Branch Master, será necesario alinear con el Equipo de Compras para poder subir estas modificaciones.


  1. Función a103AjuICM - En esta función actualizamos el folder de la pantalla de código de registro, con los campos:

    1. CDA_VLOUTR
    2. CDA_TXTDSC
    3. CDA_CODCPL
    4. CDA_CODMSG
    5. CDA_REGCAL
    6. CDA_OPALIQ
    7. CDA_OPBASE
    8. CDA_AGRLAN
      Los campos anteriores solo se presentan dependiendo de la respuesta lógica de la variable lNewCDA.

  2. Función a103GrvCDA -  Responsable por eliminar y actualizar las referencias de los registros fiscales.
    Realizamos las protecciones de los nuevos campos para recepcionar y realizar las grabaciones, actualizaciones o eliminaciones.

---------------------------------------------------------------------------------------------------------------------------

MATA103x- Funciones de validación y control de interfaz del documento de entrada


Importante

En la subida oficial en la Branch Master, será necesario alinear con el Equipo de Compras para poder subir estas modificaciones.


  1. Función a103xLAICMS -  Se encapsularon los campos {"CDA_VLOUTR","CDA_TXTDSC","CDA_CODCPL","CDA_CODMSG"} en el array aCmpsCDA y actualice si existen los nuevos campos en el array
    1.     aAdd(aCmpsCDA,"CDA_VLOUTR")
    2.     aAdd(aCmpsCDA,"CDA_TXTDSC")
    3.     aAdd(aCmpsCDA,"CDA_CODCPL")
    4.     aAdd(aCmpsCDA,"CDA_CODMSG");

      En esta función verificamos si el array tiene 25 posiciones y grabamos las nuevas posiciones.

---------------------------------------------------------------------------------------------------------------------------

MATA920- Salida de facturas de venta manual.

  1. Función a920LAICMS - Elaboración del Getdados del folder de registros fiscales.

    Se encapsularon los campos {"CDA_NUMITE","CDA_CODLAN","CDA_BASE","CDA_ALIQ","CDA_VALOR","CDA_IFCOMP"} en el array aCpCDA y actualice si existen los nuevos campos en el array:

If CDA->(FieldPos("CDA_VLOUTR")) > 0 .And. CDA->(FieldPos("CDA_TXTDSC")) > 0 .And. CDA->(FieldPos("CDA_CODCPL")) > 0 .And. CDA->(FieldPos("CDA_CODMSG")) > 0 .And. CDA->(FieldPos("CDA_AGRLAN")) > 0
    aAdd(aCpCDA,"CDA_VLOUTR")
    aAdd(aCpCDA,"CDA_TXTDSC")
    aAdd(aCpCDA,"CDA_CODCPL")
    aAdd(aCpCDA,"CDA_CODMSG")
    aAdd(aCpCDA,"CDA_AGRLAN")
Endif    

---------------------------------------------------------------------------------------------------------------------------

MATA953- Cálculo de ICMS

Objetivo

El fuente MATA953 trata del procesamiento y grabación del cálculo del ICMS como un todo. Para la configuración de tributos se agregaron algunas condiciones para poder traer correctamente las informaciones.

Funciones

  1. Función A953Processa - Para la configuración de tributos se agregaron las declaraciones de las variables que se utilizarán a lo largo del fuente.
  2. Función a953Apura - Esta función distribuye la respuesta de los array aCDAIC, aCDAST, aCDADifal, aCDADE a los folders de la pantalla de cálculo del ICMS.
    Se hizo un ajuste con el array aCont referente a la secuencia de los códigos de registros mostrados en la pantalla.
    También se agregó una condición que compara los tipos de registro de la CDA para hacer la debida segregación en el montaje de la pantalla, de acuerdo con el tipo de cada impuesto del ICMS.
  3. Función DetCodLan - Muestra los detalles de las facturas que graban el código del registro en la tabla CDA.
    Se agregó un ajuste para incluir el campo CDA_VLOUTR en la query.
  4. Función ApurDifal - Se agregó un ajuste cuando el tipo de registro sea igual a "CF", se trata de un registro referente a la configuración de tributos.
  5. Función EstruCLan - Ajuste en el array para agregar el campo CDA_VLOUTR si este existe.
  6. Función a953TpLanc - Se agregó la respuesta para el tipo de registro "CF" referente a la configuración de tributos.
  7. Función a953TotSubApur- totaliza entradas y salidas cuando es necesario generar el bloque 1920 del Sped Fiscal.
    Para la configuración de tributos se agregó el ajuste para el campo CDA_VLOUTR.
  8. Función RetCodCDA - Crea un JSON con todos los códigos de registros registrados en la tabla CJA filtrado por período + sucursal.
  9. Función PosTitDel - Crea un JSON con todos los títulos generados por el cálculo MATA953 para eliminar títulos vinculados en la rutina FISA181.
  10. Función GerGuiTit - Función que genera formulario y título de los códigos de ajuste registrados en la configuración mediante el FISA181

---------------------------------------------------------------------------------------------------------------------------

MATN410B- Función de cálculo de los impuestos contenidos en el pedido de venta


  1. Función A410LAICMS -  
    1. Folder de registros fiscales en el pedido de venta (Planilla financiera)
    2. Valida si el campo CDA_VLOUTR existe antes de agregar al Folder

---------------------------------------------------------------------------------------------------------------------------

MATXDEF.CH - Include utilizado en las rutinas IMPXFIS, MATXFIS, entre otras.

Para la configuración de tributos se agregaron algunas definiciones para FieldPos, tablas, referencia de tributos genéricos y referencia de mensajes.

FieldPos

#DEFINE FP_CFC_FCPBSR     1049
#DEFINE FP_CD2_PSCFST     1050
#DEFINE FP_CD2_VFCPDI     1051
#DEFINE FP_CD2_VFCPEF     1052
#DEFINE FP_CFC_FCPAJT     1053
#DEFINE FP_CD2_FCPAJT     1054
#DEFINE FP_CDA_REGCAL     1055
#DEFINE FP_CDA_VLOUTR     1056
#DEFINE FP_CDA_CODMSG     1057
#DEFINE FP_CDA_CODCPL     1058
#DEFINE FP_CDA_TXTDSC     1059
#DEFINE FP_CDA_OPBASE     1060
#DEFINE FP_CDA_OPALIQ     1061
#DEFINE FP_CDV_REGCAL     1062
#DEFINE FP_CDV_VLOUTR     1063
#DEFINE FP_CDV_CODMSG     1064
#DEFINE FP_CDV_CODCPL     1065
#DEFINE FP_CDV_TXTDSC     1066
#DEFINE FP_CDV_OPBASE     1067
#DEFINE FP_CDV_OPALIQ     1068
#DEFINE FP_CJA_FILIAL     1069
#DEFINE FP_CJA_ID         1070
#DEFINE FP_CJA_CODREG     1071
#DEFINE FP_CJA_ID_CAB     1072
#DEFINE FP_CJA_REGCAL     1073
#DEFINE FP_CJA_CODTAB     1074
#DEFINE FP_CJA_CODTAB     1075
#DEFINE FP_CJA_CODLAN     1076
#DEFINE FP_CJA_VIGINI     1077
#DEFINE FP_CJA_VIGFIM     1078
#DEFINE FP_CJA_NFBASE     1079
#DEFINE FP_CJA_NFALIQ     1080
#DEFINE FP_CJA_VALOR      1081
#DEFINE FP_CJA_VLOUTR     1082
#DEFINE FP_CJA_GRGUIA     1083
#DEFINE FP_CJA_CODCPL     1084
#DEFINE FP_CJA_CODMSG     1085
#DEFINE FP_CJA_TXTDSC     1086
#DEFINE FP_CJA_GERMSG     1087
#DEFINE FP_CJ9_FILIAL     1088
#DEFINE FP_CJ9_ID         1089
#DEFINE FP_CJ9_CODREG     1090
#DEFINE FP_CJ9_DESCR      1091
#DEFINE FP_CJ9_VIGINI     1092
#DEFINE FP_CJ9_VIGFIM     1093
#DEFINE FP_CJA_GUIA       1094  
#DEFINE FP_CJA_TITULO     1095
#DEFINE FP_CJA_TITGUI     1096
#DEFINE FP_CDA_AGRLAN     1097
#DEFINE FP_CDV_AGRLAN     1098

Tablas

#DEFINE AI_CJ3     49
#DEFINE AI_CJA     50
#DEFINE AI_CJL     51

Referencia Tributo Genérico

#DEFINE TG_IT_VL_MAX     34 //Valor manual máximo del tributo
#DEFINE TG_IT_VL_MIN     35 //Valor manual mínimo del tributo
#DEFINE TG_IT_OPR_MAX    36 //Operador de límite de valor máximo del tributo
#DEFINE TG_IT_OPR_MIN    37 //Operador de límite de valor máximo del tributo

Referencia Mensajes

#DEFINE MSG_CHAVE      1    
#DEFINE MSG_INDICADOR  2        
#DEFINE MSG_TIPO       3    
#DEFINE MSG_REFERENCIA 4        
#DEFINE MSG_VAL_REF    5        
#DEFINE MSG_LSOMA      6

---------------------------------------------------------------------------------------------------------------------------

MATXFIS- Funciones fiscales

Programa responsable por el cálculo de impuestos fiscales y financieros.

  1. Función MafisIni - Se agregó la variable cNumNota en la posición 36.
    Variable cNumNota se agregó en la posición 236 del array
  2. Función MaFisAjIT - Se agregó el array aInfNat como parámetro para utilizarlo posteriormente en la rutina FISXADGR.
  3. Función MaFisAtuSF3 - Se agregó el array aFunc y aInfNat como parámetro de la rutina.

---------------------------------------------------------------------------------------------------------------------------

SPEDFISCAL - Rutina de generación del archivo de la EFD ICMS/IPI

Objetivo y alcance


El objetivo es que las configuraciones realizadas en la configuración de tributos sea predominante frente al legado. 

Dentro del fuente del SPEDFISCAL existen muchos puntos que modifican el array aLancCDA y aLancCDA2 para poder cumplir con alguna legislación prevista del legado.

Funciones

Creación de la variable estática: oJRetCda

  1. Función Bloque E - Se agregó el parámetro "@aStructCDA" en la llamada.
  2. Función SPDE520530 - Se agregó el ajuste para el tipo de registro 3- CONFIG para poder traer correctamente los registros principal y secundario de los bloques E530 y E531.
  3. Función RegE531 - Se agregó una condición que verifica los registros de la configuración para montar el bloque E531.
  4. Función C195C197 - Se agregó el ajuste para separar los registros que vienen del Legado vs. Configuración de Tributos.

    If !aLanCDA[nX,24] // Legado
          If aLanCDA[nX,1]$"SP90090104/SP90090278"
                nPos := aScan(aRegC197,{|x| x[1] == nPosC195 .And. x[3]==aLanCDA[nX,1] .And. x[4]==aLanCDA[nX][2] })
            Else
                nPos := aScan(aRegC197,{|x| x[1] == nPosC195 .And. x[5]==cCodItem .And. x[3]==aLanCDA[nX,1] })
            EndIf
    Else
            If aLanCDA[nX,23] == "01"
                nPos := aScan(aRegC197,{|x| x[1] == nPosC195 .And. x[3]==aLanCDA[nX,1] })
            ElseIf aLanCDA[nX,23] == "02"
                nPos := aScan(aRegC197,{|x| x[1] == nPosC195 .And. x[3]==aLanCDA[nX,1] .And. x[4]==aLanCDA[nX][2] })
            Elseif aLanCDA[nX,23] == "03"
                nPos := aScan(aRegC197,{|x| x[1] == nPosC195 .And. x[5]==cCodItem .And. x[3]==aLanCDA[nX,1] })
            Else
                nPos := aScan(aRegC197,{|x| x[1] == nPosC195 .And. x[5]==cCodItem .And. x[3]==aLanCDA[nX,1] })
            Endif    
     Endif

  5. Función RegE115 - Se agregó el ajuste para separar los registros que vienen del Legado vs. Configuración de Tributos.
    Utiliza la variable "lNewCDV" y también utiliza la función "RetQCDV" que está en el fuente SPEDXFUN.
  6. Función SPDAPICMS - Utiliza la función "TempCDA" que está en el fuente SPEDXFUN.
    También hace el ajuste para separar los registros que vienen del Legado vs. Configuración de Tributos.
    Los registros considerados por las modificaciones en esta función son: E111, E113, E220 y E240.
  7. Función Grupo1900 - Se agregó el parámetro "@aStructCDA" en la llamada de la función.
    Se agregó el ajuste para separar los registros que vienen del Legado vs. Configuración de Tributos.
    Utilización de la función RetQCDV para generar el registro

  8. Función AP1900ICM - Se agregó el parámetro "@aStructCDA" en la llamada de la función.
    Se agregó el ajuste para separar los registros que vienen del Legado vs. Configuración de Tributos.
    Los registros considerados por las modificaciones son: 1921, 1923.

  9. Función D195D197 - Se agregó el ajuste para separar los registros que vienen del Legado vs. Configuración de Tributos.


If !aLanCDA[nX][24]
        If aLanCDA[nX,1]$"SP90090104/SP90090278"
            nPos := aScan(aRegD197,{|x| x[1] == nPosD195 .And. x[3]==aLanCDA[nX,1] .And.

x[4]==aLanCDA[nX][2] })
        Else
            nPos := aScan(aRegD197,{|x| x[1] == nPosD195 .And. x[5]==cCodItem .And.

x[3]==aLanCDA[nX,1] })
        EndIf
    Else
        If aLanCDA[nX,23] == "01"
            nPos := aScan(aRegD197,{|x| x[1] == nPosD195 .And. x[3]==aLanCDA[nX,1] })
        ElseIf aLanCDA[nX,23] == "02"
            nPos := aScan(aRegD197,{|x| x[1] == nPosD195 .And. x[3]==aLanCDA[nX,1] .And.

x[4]==aLanCDA[nX][2] })
        Elseif aLanCDA[nX,23] == "03"
            nPos := aScan(aRegD197,{|x| x[1] == nPosD195 .And. x[5]==cCodItem .And.

x[3]==aLanCDA[nX,1] })
        Else
            nPos := aScan(aRegD197,{|x| x[1] == nPosD195 .And. x[5]==cCodItem .And.

x[3]==aLanCDA[nX,1] })
        Endif    
    Endif

---------------------------------------------------------------------------------------------------------------------------

SPEDXDEF.CH - Include utilizado en las rutinas SPEDFISCAL y SPEDXFUN

Para la configuración de tributos se agregaron algunas definiciones para FieldPos, tablas y sucursales

FieldPos

#DEFINE FP_CDA_TXTDSC  243
#DEFINE FP_CDA_CODCPL  244
#DEFINE FP_CDA_CODMSG  245
#DEFINE FP_CDA_VLOUTR  246
#DEFINE FP_CDA_REGCAL  247
#DEFINE FP_CDA_OPBASE  248
#DEFINE FP_CDA_OPALIQ  249
#DEFINE FP_CDA_IDMSG   250
#DEFINE FP_CDV_TXTDSC  251
#DEFINE FP_CDV_CODCPL  252
#DEFINE FP_CDV_CODMSG  253
#DEFINE FP_CDV_VLOUTR  254
#DEFINE FP_CDV_REGCAL  255
#DEFINE FP_CDV_OPBASE  256
#DEFINE FP_CDV_OPALIQ  257
#DEFINE FP_CDV_IDMSG   258                    
#DEFINE FP_CJ8_CODREF  259
#DEFINE FP_CJ8_DESC    260
#DEFINE FP_CJ8_MENSG   261
#DEFINE FP_CJL_ID      262
#DEFINE FP_CJL_INDICE  263
#DEFINE FP_CJL_CODMSG  264
#DEFINE FP_CJL_MENSG   265

#DEFINE FP_CDA_AGRLAN  266


Tablas

#DEFINE AI_CJA 64
#DEFINE AI_CJ8 65
#DEFINE AI_CJ9 66
#DEFINE AI_CJL 67

Sucursales

#DEFINE PFIL_CJA 111
#DEFINE PFIL_CJ8 112
#DEFINE PFIL_CJ9 113
#DEFINE PFIL_CJL 114

---------------------------------------------------------------------------------------------------------------------------

SPEDXFUN - Funciones fiscales para el SPEDFISCAL


Objetivo y alcance


El objetivo es que los mensajes registrados por medio de la rutina de configuración de tributos se refleje en las funciones del fuente SPEDXFUN para que posteriormente se graben en el archivo de la EFD ICMS/IPI.
También haremos el control referente a la forma como el usuario de la configuración de tributos realizó para agrupar los códigos de ajuste.

Funciones


  1. Función SPLancCDA - Se agregaron variables de control de los mensajes de la configuración:

    Local lMsgCjl    := .F.
    Local cMsgCjl     := ""
    Local lProcCDA     := .F.
    Local cAgrup     := ""

    Se agregó un nuevo parámetro en la llamada de la función
    SPEDFFiltro(1,"CDA",@cAliasCDA,aPar,,,@lMsgCjl)

    Después que la query devuelve la función SPEDFFiltro se realiza ajustes con relación al campo de mensajes para los bloques C195, C197, 0460, además de cambiar el montaje como un todo del array aLancIT y aLancCDA2 que se utilizan en el montaje del archivo del SPEDFISCAL para los bloques que utilizan la tabla CDA.
    También hace el tratamiento de cómo quedará agrupado el array aLancIT o aLancCDA2 de acuerdo con el contenido del campo CDA_AGRLAN.

    Se agregan nuevas posiciones en los array aLancIT y aLancCDA2.

    Agrega una nueva posición en el array aInfE531, para tratar el bloque referente al cálculo del IPI.
  2. Función SPEDFFiltro -Responsable para devolver los datos con las informaciones de la tabla CDA vinculada a otras tablas.
    Para la configuración de tributos se agregó junto con una protección de release, los nuevos campos de la CDA y también de la tabla CJL.
    También hace el ajuste con la variable lógica lMsgCjl.

  3. Función RetQCDV - Nueva función para devolver la descripción complementaria para el registro E115 si no viniera cumplimentado.

  4. Función TempCDA - Nueva función que devuelve un objeto con los códigos de registros que están en la CDA por el período del cálculo.

---------------------------------------------------------------------------------------------------------------------------

CONFXFIS - Concentrar todas las funciones y reglas de la configuración de tributos


Objetivo y alcance 

Crear un operando para identificar la última adquisición de las materias primas que se utilizaron en la producción del producto terminado, utilizando el flujo de estructura de producto con niveles → Orden de producción → Reserva de producción → Apunte de producción.

Realizar una venta para organismo público del producto PA con registro CST 40 exenta, donde utilizo un código de registro de reversión de crédito con el objetivo de traer el valor del ICMS de la última factura de adquisición de la MP.

Memoria de cálculo:

PA100 - Cantidad vendida = 5

Estructura de producto para producir:

MP100 - Cantidad 6

MP102 - Cantidad 0,3

MP103 - Cantidad 1


Factura de Compra vs. Cantidad

CompraCantidadICMS TotalIcms Unitario
MP10020012006
MP101503006
MP1024096024

Reversión de crédito ICMS

Materia Prima (ICMS Unitario * Cantidad Venta)*Cantidad Producción Valor Reversión
MP100(6*6)*5180
MP101(6*0,3)*5

9

MP102(24*1)*5120

TOTAL 309


Tabla 

CJM - Contrl Rever icms Revers Prod   

  1. CJM_FILIAL        Sucursal del sistema
  2. CJM_DOCORI    Documento de origen      
  3. CJM_SERORI      Serie Origen             
  4. CJM_PRDORI     Producto Fact Origen        
  5. CJM_DTORIG     Fecha Doc Origen          
  6. CJM_LOTORI      Lote Producto            
  7. CJM_UM            Unidad de medida        
  8. CJM_SEGUM     Segunda unidad de medida
  9. CJM_QTSEGU    Segunda unidad de medida
  10. CJM_DOCSAI     Núm Doc Salida            
  11. CJM_SERSAI      Serie de la factura de salida     
  12. CJM_QTDSAI     Cantidad Ítem Fact Salida
  13. CJM_CLIFOR      Cliente/Proveedor       
  14. CJM_LOJA          Código Tienda Client/Prov  
  15. CJM_ICMEST      Val ICMS Reversión Créd Rev
  16. CJM_PERIOD      Año/Mes del procesamiento
  17. CJM_PRDFIM      Cód Producto Final        
  18. CJM_PRCOMP    Código Producto Componente
  19. CJM_QTESTR     Cantidad Producción      
  20. CJM_FORNEC    Código del Prov/Cliente  
  21. CJM_LOJAEN     Tienda Prov/Client Entrada
  22. CJM_ITEFIM       Código del ítem           
  23. CJM_PRDINT     Producto intermediario
  24. CJM_ICMUNT    ICMS Unitario de la memoria de cálculo

Diccionario

La estructura está en el paquete 010843 - $/Protheus_Estándar/Fuentes_Doc/Innovación/V12/Libros Fiscales - Configurador/Cod_Reg_Estructura_Prod/Diccionario

Funciones

  1. Función Static Function ValOperPri, - Se agregó el nuevo operando: VLR_ICMS_ULT_AQUI_ESTRUTURA  que se responsabilizará en devolver el valor del ICMS calculado por el ítem de la factura de entrada del material utilizado para fabricar el PA que se venderá. Se agregó en la STATIC aPesqEstr  para recibir datos del Producto de la Estructura , Cantidad de la estructura y cantidad vendida.
    Se agregaron referencias lógicas para identificar el uso de los operandos necesarios para componer el valor de reversión, tanto para productos con estructura como para productos de reventa.
  2. Función GetCompUltAq - Con la inteligencia de rastrear el producto PA en el pedido de venta, busque en la SD1 y en la SG1 la estructura de producto que originó la producción del PA, recupere el valor unitario del ICMS de la última adquisición  para componer el valor total de ICMS que se vinculará por código de registro de reversión de crédito.
    La devolución de dicha query, mapeará la última Fact de entrada de adquisición, y grabar en la variable nIcmsEst := (((Valor del ICMS FACT ENTRADA MP / QTD Adquirida MP )* QTD Utilizada en la n) * Cantidad vendida.
    El valor de la nIcmsEst se mostrará en la planilla financiera en la SOLAPA Código de registro, que se configuró debidamente en la rutina FISA181 con una regla tributaria.
    En esta función tenemos también la grabación de la última factura de entrada referente a adquisiciones de MP que se utilizaron en la producción del PA vendido, además de las informaciones de la factura de salida y el valor del ICMA de reversión que se utilizará. Estas informaciones se grabarán en la tabla CJM.
  3. Función GravaCJM - Recibe un array tratado dentro de la función Getcompultaq, para efectuar la grabación de los datos en la tabla CJM utilizando como base el método FWBulk().
  4. Función GetUltAq - Refactorización de la query para TCgenQry2 y también se agregaron nuevos campos para utilizar en la grabación de la CJM.
    También se agregaron ajustes en la función para que efectúe la grabación de la CJM llamando la función
  5. Función FISDELCJM - Esta función se creó para que en el momento de eliminar la factura de salida, el contenido grabado para dicha factura de salida se eliminará.


--------------------------------------------------------------------------------------------------------------------------------------


FISCOMPFOR - Concentrar todas las funciones que crean y manejan el componente de fórmulas de la configuración de tributos.

Objetivo y alcance: 

Agregue una nueva opción de operando para que el cliente recupere el valor del ICMS referente a la compra de materias primas utilizadas en el producto terminado, que se venderá en operaciones exentas con derecho a la reversión de este valor inicial, mediante el código de registro.

Funciones:

  1. Función FormOperPri - Se activó en el array aCarga la nueva opción:
     aadd(aCarga,{"Valor del ICMS (Última adquisición de estructura de producto)"         ,"VLR_ICMS_ULT_AQUI_ESTRUTURA"})

---------------------------------------------------------------------------------------------------------------------------------------

backoffice.fiscal.configurador.relatorioEstornocredito- Informe de verificación Cálculo de Reversión del ICMS de productos con estructura y reventa

Objetivo y alcance: 

Genere un informe de verificación con base en lo que se grabó en la CJM - Control de Reversión de ICMS - Operando de la última adquisición por estructura o PA para reventa.

Al utilizar los siguientes operandos, rastrearemos las facturas de entrada que dieron origen a la compra de productos para reventa, y las materias primas que se utilizaron en la estructura de producto n SG1.

QUANTIDADE_ULT_AQUI 

ICMS_ULT_AQUI

BASE_ICMS_ULT_AQUI

ALQ_ICMS_ULT_AQUI

VLR_ICMS_ULT_AQUI_ESTRUTURA


Después de encontrar las últimas entradas, efectuamos cálculos para generar un valor de ICMS de reversión que se grabará en la CJM

Este informe tiene como objetivo, leer esta tabla y traer datos para verificación.

Funciones:
Este informe se desarrolló en TLPP

  1. relatorioEstornocredito - Monta la estructura de TRCELL para mapear las facturas de salida y su entrada que originó el valor de la reversión.
  2. ReportPrint - Realiza la query con CJM y CDA para relacionar los campos que se utilizarán en la impresión.
  3. seletorFilial - Función responsable por abrir la pantalla de selección de sucursales.