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
Tablas
- CDA
- CDA_VLOUTR - Considera valor ICMS otros.
- CDA_TXTDSC - Código referente a la descripción complementaria para el bloque 0460 (Vínculo con la tabla CJA).
- CDA_CODCPL - Código referente al mensaje complementario para el bloque C195 y otros similares (Vínculo con la tabla CJA).
- CDA_CODMSG - Código referente a la descripción complementaria para el bloque C197 y otros similares (Vínculo con la tabla CJA).
- CDA_REGCAL - Referencia del código de regla de cálculo utilizada en la configuración de tributos.
- CDA_OPBASE - Opción de selección de la base de cálculo de acuerdo con el vínculo de la tabla CJA.
- CDA_OPALIQ - Opción de selección de la alícuota de acuerdo con el vínculo de la tabla CJA.
- 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.
- CDA_AGRLAN - Campo que identifica la forma de agrupar el registro para generar el archivo del SPED FISCAL.
- CDV
- CDV_REGCAL - Referencia del código de regla de cálculo utilizada en la configuración de tributos.
- CDV_VLOUTR - Considera Valor ICMS Otros.
- CDA_TXTDSC - Código referente a la descripción complementaria para el bloque 0460 (Vínculo con la tabla CJA).
- CDA_CODCPL - Código referente al mensaje complementario para el bloque C195 y otros similares (Vínculo con la tabla CJA).
- CDA_CODMSG - Código referente a la descripción complementaria para el bloque C197 y otros similares (Vínculo con la tabla CJA).
- CDA_OPBASE - Opción de selección de la base de cálculo de acuerdo con el vínculo de la tabla CJA.
- CDA_OPALIQ - Opción de selección de la alícuota de acuerdo con el vínculo de la tabla CJA.
- 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
- 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
- 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:
- cCodLan := Alltrim(aCodLan[nI][2]) //CJA_CODLAN
- nBasCal := aTribgen[nX][TG_IT_BASE] //CJA_NFBASE
- nAlqCal := aTribgen[nX][TG_IT_ALIQUOTA] //CJA_NFALIQ
- cTpLanc := Iif(Alltrim(aCodLan[nI][7]) <> "03","2","1") //Se efectúo el ajuste para la grabación correcta de los registros de IPI
- cRegCalc := aCodLan[nI][1] //cRegCal
- cCodVal := Left(aCodLan[nI][5],3) //CJA_VALOR
- cCodValOu := Left(aCodLan[nI][6],3) //CJA_VLOUTR
- nValor := 0 //Ajuste condicional de acuerdo con el valor recibido en la variable cCodVal
- nValorOut := 0 //Ajuste condicional de acuerdo con el valor recibido en la variable cCodValOu
- cOpBase := aCodLan[nI][3]
- cOpAliq := aCodLan[nI][4]
- cCFOP := aNfItem[nZ][IT_CF]
- cDescod := aCodLan[nI][12]
- cLivro := aNFItem[nZ][IT_TS][TS_NRLIVRO]
- cCodDes := aCodLan[nI][11] //CJA_TXTDSC
- cCodObs := aCodLan[nI][10] //CJA_CODCPL
- cCodOLan := aCodLan[nI][09] //CJA_CODMSG
- cGeracum := aCodLan[nI][12] //CJA_GERMSG
- cIFCOMP := "CONFIG"
- 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)
Tablas
CJ9 con las informaciones del encabezado del registro de la regla de ajuste del registro, tenemos los campos:
- CJ9_CODREG - Código de la regla
- CJ9_DESCR - Descripción de la regla de ajuste
- CJ9_VIGINI - Fecha inicial de vigencia de la regla
- CJ9_VIGFIM - Fecha final de vigencia de la regla.
- 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.
- CJA_CODREG - Código regla encabezado - Vincularemos con la Tabla CJ9
- 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.
- 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)
- 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.
- 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/
- 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/
- 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|
- 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|
- 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.
- 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.
- 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
- 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.
- 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.
- 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.
- 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").
- 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.
- 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.
- 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.
- 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.
- 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.
- MASTER - Tabla CJ8
- VIEW_CAB
- GRID - Tabla CJA
- VIEW_LANC
- Campos: CJA_CODTAB|CJA_CODLAN|CJA_VIGINI|CJA_VIGFIM|CJA_REGCAL|CJA_GUIA|CJA_TITULO|CJA_TITGUI|CJA_GERMSG|CJA_OPER|CJA_CNTRL
- VIEW_VLR
- Campos: CJA_CODLAN|CJA_NFBASE|CJA_NFALIQ|CJA_VALOR|CJA_VLOUTR
- VIEW_MSG
- Campos: CJA_CODLAN|CJA_CODMSG|CJA_CODCPL|CJA_TXTDSC
- Funciones de COMBOBOX y consulta estándar
- XTabelaLanc - Campo CJA_CODTAB
- X181ChgF3 - Campo CJA_CODLAN
- CboxTpMsg - Campo CJA_GERMSG
- XTpTITGUI - Campo CJA_TITGUI
- CboxOper - Campo CJA_OPER
- CboxUF - Campo CJA_CNTRL
- Funciones de validaciones:
- Función VldCodigodonde tratamos para no repetir
- Función VigIniFIm que verifica si la fecha inicial y fecha final ya existen en el registro de reglas.
- 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
- 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
- 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
- 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.
- 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).
- 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) .
- CJL_ID ID del mensaje - Relacionaremos con la tabla CDA
- 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 - 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.
- 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
- 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.
- 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.
- Función Procesar - Procesa las referencias de los mensajes de acuerdo con el array aPalavras.
- Función Convertir - Ajuste con relación a la conversión de las referencias.
- Función AtuMensag - Actualiza el mensaje con el resultado de la conversión.
- Función LoadMsghash - Alimenta el objeto Hash con los datos de referencia del impuesto que se procesará.
- Función RetConf - Devuelve el valor de los tributos genéricos provenientes de la configuración de tributos.
- Función ConvResult - Ajuste de la variable para convertir cualquier valor en carácter.
- Función FISXDFIH - Limpia los objetos.
---------------------------------------------------------------------------------------------------------------------------
IMPXFIS- Funciones fiscales
Función GFPMxFis - Se agregaron los campos nuevos de la CJ9, CJA, CDA y CDB, utilizando la variable lCdaCof para control.
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.
- 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.
- 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.
- 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. - 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. - 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.
---------------------------------------------------------------------------------------------------------------------------
Al inicio del fuente se creó la variable lNewCDV para el control de los nuevos campos de la tabla CDV.
- Función A017LAICMS - Recepcionar en el montaje del GETDADOS del folder de registros fiscales el campo CDV_VLOUTR
- 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
- 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
- Función a017xLAICMS - Aba Lançamento Fiscais adicionar os campos novos se existirem:
- aAdd(aYesFields,"CDV_VLOUTR")
- aAdd(aYesFields,"CDV_TXTDSC")
- aAdd(aYesFields,"CDV_CODCPL")
- aAdd(aYesFields,"CDV_CODMSG")
- aAdd(aYesFields,"CDV_REGCAL")
- aAdd(aYesFields,"CDV_OPBASE")
- aAdd(aYesFields,"CDV_OPALIQ")
---------------------------------------------------------------------------------------------------------------------------
MATA103- Facturas de entrada
- Función a103AjuICM - En esta función actualizamos el folder de la pantalla de código de registro, con los campos:
- CDA_VLOUTR
- CDA_TXTDSC
- CDA_CODCPL
- CDA_CODMSG
- CDA_REGCAL
- CDA_OPALIQ
- CDA_OPBASE
- CDA_AGRLAN
Los campos anteriores solo se presentan dependiendo de la respuesta lógica de la variable lNewCDA.
- 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
- 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
- aAdd(aCmpsCDA,"CDA_VLOUTR")
- aAdd(aCmpsCDA,"CDA_TXTDSC")
- aAdd(aCmpsCDA,"CDA_CODCPL")
- 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.
- 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
- 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.
- 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. - 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. - 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.
- Función EstruCLan - Ajuste en el array para agregar el campo CDA_VLOUTR si este existe.
- Función a953TpLanc - Se agregó la respuesta para el tipo de registro "CF" referente a la configuración de tributos.
- 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. - Función RetCodCDA - Crea un JSON con todos los códigos de registros registrados en la tabla CJA filtrado por período + sucursal.
- 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.
- 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
- Función A410LAICMS -
- Folder de registros fiscales en el pedido de venta (Planilla financiera)
- 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.
- Función MafisIni - Se agregó la variable cNumNota en la posición 36.
Variable cNumNota se agregó en la posición 236 del array - Función MaFisAjIT - Se agregó el array aInfNat como parámetro para utilizarlo posteriormente en la rutina FISXADGR.
- 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
- Función Bloque E - Se agregó el parámetro "@aStructCDA" en la llamada.
- 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.
- Función RegE531 - Se agregó una condición que verifica los registros de la configuración para montar el bloque E531.
- 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
- 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. - 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. - 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
- 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.
- 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
- 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. - 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.
- Función RetQCDV - Nueva función para devolver la descripción complementaria para el registro E115 si no viniera cumplimentado.
- 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
Compra | Cantidad | ICMS Total | Icms Unitario |
---|
MP100 | 200 | 1200 | 6 |
MP101 | 50 | 300 | 6 |
MP102 | 40 | 960 | 24 |
Reversión de crédito ICMS
Materia Prima | (ICMS Unitario * Cantidad Venta)*Cantidad Producción | Valor Reversión |
---|
MP100 | (6*6)*5 | 180 |
MP101 | (6*0,3)*5 | 9 |
MP102 | (24*1)*5 | 120 |
| TOTAL | 309 |
Tabla
CJM - Contrl Rever icms Revers Prod
- CJM_FILIAL Sucursal del sistema
- CJM_DOCORI Documento de origen
- CJM_SERORI Serie Origen
- CJM_PRDORI Producto Fact Origen
- CJM_DTORIG Fecha Doc Origen
- CJM_LOTORI Lote Producto
- CJM_UM Unidad de medida
- CJM_SEGUM Segunda unidad de medida
- CJM_QTSEGU Segunda unidad de medida
- CJM_DOCSAI Núm Doc Salida
- CJM_SERSAI Serie de la factura de salida
- CJM_QTDSAI Cantidad Ítem Fact Salida
- CJM_CLIFOR Cliente/Proveedor
- CJM_LOJA Código Tienda Client/Prov
- CJM_ICMEST Val ICMS Reversión Créd Rev
- CJM_PERIOD Año/Mes del procesamiento
- CJM_PRDFIM Cód Producto Final
- CJM_PRCOMP Código Producto Componente
- CJM_QTESTR Cantidad Producción
- CJM_FORNEC Código del Prov/Cliente
- CJM_LOJAEN Tienda Prov/Client Entrada
- CJM_ITEFIM Código del ítem
- CJM_PRDINT Producto intermediario
- 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
- 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. - 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. - 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().
- 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 - 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:
- 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"})
---------------------------------------------------------------------------------------------------------------------------------------
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.
- relatorioEstornocredito - Monta la estructura de TRCELL para mapear las facturas de salida y su entrada que originó el valor de la reversión.
- ReportPrint - Realiza la query con CJM y CDA para relacionar los campos que se utilizarán en la impresión.
- seletorFilial - Función responsable por abrir la pantalla de selección de sucursales.