ÍNDICE
01. VISIÓN GENERAL
Con la finalidad de dar una mejora en las actualizaciones y/o modificaciones que se van requiriendo por parte del SAT, o en su defecto necesidades por parte del usuario. Se implementa la nueva versión que realiza la generación del Comprobante Fiscal Digital por Internet (CFDI) para las Factura Normal, Factura de Traslado, Factura con Complemento de Comercio Exterior versión y Factura con Carta Porte, Nota de Crédito y Nota de Débito , sean realizada a través del uso de la rutinas FATSMEX.PRW / FATEMEX.PRW, para evitar el uso de los archivos .INI (fatsmex.ini y fatemex.ini).
Para tener activa esta funcionalidad es necesario tener actualizadas con una fecha mayor o igual las siguientes rutinas:
Rutinas | Nombre Técnico | Fecha |
---|---|---|
LOCXFUNA | Funciones Genéricas para Notas Fiscales | 27/02/2024 |
FATXFUMI | Funciones genéricas para Facturación - Mercado Internacional | 13/02/2024 |
FATSMEX.PRW | Generación de XML para Documentos de Salida | 22/02/2024 |
FATEMEX.PRW | Generación de XML para Documentos de Entrada | 22/02/2024 |
02. CONFIGURACIONES
- Realice las modificaciones al Diccionario de Datos, sugeridas en la sección 05. DICCIONARIO DE DATOS, para activar la funcionalidad de generación del XML a través de la rutina FATSMEX.PRW/FATEMEX.PRW.
- Configurar el parámetro MV_FEXML.
Ejemplo con el valor "S" - Configurar el parámetro MV_CFDDIRS con la ruta donde se encuentran las llaves y certificados.
Ejemplo con el valor "GetSrvProfString('startpath','')+'\cfd\llaves\'"
- Configurar el parámetro MV_CFDI_CP con el nombre y extensión del Archivo de la clave privada (.pem).
Ejemplo con el valor "CSD_XIA190128J61c.pem" - Configurar los parámetros MV_IVATRAS con los códigos de Impuestos.
Ejemplo con el valor "IVA|IEP"
- Configurar el parámetro MV_RETIVAM con los códigos de Retenciones.
Ejemplo con el valor "RIV"
- Ingresar al módulo Libros Fiscales (SIGAFIS), ir al menú Actualizaciones | Archivos | Contr. Formularios (MATA992)
- Configurar los datos para la Serie de la Factura informando los campos No. Inicial, No. Final, Fch Validez y Certificado
IMPORTANTE
En caso de necesitar consultar la cadena original al momento de generar XML de una factura, se aconseja configurar el parámetro MV_COCONSO igual a "S" para imprimir la cadena original en consola y poder consultarla:
Para obtener más información sobre parámetros del módulo Facturación(SIGAFAT), consultar el siguiente Documento Técnico: Parámetros (Configuraciones - SIGAFAT)
IMPORTANTE
En la ruta configurada en el parámetro MV_CFDDIRS debe existir el archivo que se configuró en el parámetro MV_CFDI_CP, ya que con este archivo es generado el atributo Certificado en el XML del CFDI.
IMPORTANTE
En caso de tener instalado y usando WebApp - WebAgent, es importante considerar la configuración de directorios mencionada en el siguiente documento técnico: DT Configuración de directorios para timbrado CFDI MEX
03. EJEMPLO DE UTILIZACIÓN
El proceso de la inclusión y timbrado de cualquier documento "Factura Normal, Factura de Traslado, Factura con Complemento de Comercio Exterior versión y Factura con Carta Porte, Nota de Crédito y Nota de Débito" no tiene algún cambio, este será realizado de la misma manera que se realiza actualmente.
Ejemplo de Factura de Entrada.
- Ingresar al módulo Facturación (SIGAFAT), ir al menú "Actualizaciones | Facturación | Facturaciones (MATA467N)
- Indicar los parámetros de la rutina, informando la pregunta ¿Normal/Benef./Anticipo? con la opción Normal.
- Incluir una Factura de Venta (NF):
- Confirmar el grabado de la Factura de Venta.
- Confirmar la generación y timbrado exitoso del Comprobante Fiscal Digital para Internet (Ésta confirmación puede presentarse o no de acuerdo a la configuración del parámetro MV_CFDUSO).
04. PUNTOS DE ENTRADA
Con esta nueva funcionalidad se habilitaron puntos de Entrada que permitirán al usuario realizar personalizaciones y según el punto de entrada, permitirán las personalizaciones de la generación del CFDI.
IMPORTANTE
Si no cuenta con un departamento de TI o un administrador experto en el sistema, puede solicitar a su agente de Atención y Relación, le cotice horas para realizar la conversión, de las personalizaciones que puedan contener los archivos FATSMEX.INI y FATEMEX.INI.
PEEMIREC
Se activo este Punto de Entrada, que permitan las siguientes acciones:
- En el nodo de cfdi:Emisor, permitir personalizarlos atributos "RFC, Nombre, RegimenFiscal"
- En el nodo de cfdi:Receptor, permitir personalizar los atributos "RFC, Nombre, DomicilioFiscalReceptor, RégimenFiscal,UsoCFDI".
El Punto de Entrada PEEMIREC recibe como parámetro la opción de tipo Caracter, mediante el cual se tienen disponibles las siguientes opciones:
Si opción es "E", se permite la modificación del Nodo de cfdi:Emisor, tomando en cuenta los siguientes atributos que se puede agregar al arreglo:
- [1] - Valor para el atributo Rfc
- [2] - Valor para el atributo Nombre
- [3] - Valor para el atributo RegimenFiscal
Si opción es "R", se permite la modificación del Nodo de cfdi:Receptor, tomando en cuenta los siguientes atributos que puede agregar al arreglo:
- [1] - Valor para el atributo Rfc
- [2] - Valor para el atributo Nombre
- [3] - Valor para el atributo RegimenFiscalReceptor
- [4] - Valor para el atributo DomicilioFiscalReceptor
- [5] - Valor para el atributo UsoCFDI
- [6] - Valor para el atributo ResidenciaFiscal (aplica para complemento de comercio exterior el cual se toma del campo YA_CCESAT usando el código informado en el campo F2_RESIDE)
- [7] - Valor para el atributo NumRegIdTrib (aplica para complemento de comercio exterior el cual se toma del campo AI0_IDFIS)
Ejemplo de uso
User Function PEEMIREC() Local cArea := GetArea() Local cOpcion := PARAMIXB[1] // E - Emisor o R - Receptor Local aEmiRec := {} // Arreglo dinámico que contiene la información del Emisor o Receptor. /* Atributos que se puede agregar para ser modificados en el XML para Emisor y Receptor [1] - RFC [2] - Nombre [3] - RegimenFiscal [4] - DomicilioFiscal Solo Receptor [5] - UsoCFDI Solo Receptor */ If cOpcion =='E' aAdd(aEmiRec, {"RFC", ""} ) aAdd(aEmiRec, {"Nombre", CFDCarEsp(Alltrim(SM0->M0_NOMECOM))} ) aAdd(aEmiRec, {"RegimenFiscal", "601"} ) EndIf If cOpcion =='R' .And. Alltrim(cEspecie) $ "NF" aAdd(aEmiRec, {"RFC", CFDCarEsp(AllTrim(SA1->A1_CGC))} ) EndIf Return aEmiRec
En el Punto de Entrada PEEMIREC, se tienen disponibles los siguientes datos:
La variable cEspecie, la cual puede ser utilizada para personalizar para que la funcionalidad aplique solo para ciertos documentos, ya que contiene la especie del documento (por ejemplo NF para Factura de Venta, NDC para Nota de Débito de Cliente o NCC para Nota de Crédito de Cliente).
Posicionamiento del registro del Documento en la tabla SF1 - Encabezado de Fact. de Entrada para los documento de Entrada.
Posicionamiento del registro del Documento en la tabla SF2 - Encabezado de Fact. de Salida para los documento de Salida.
En el Punto de Entrada PEEMIREC, se debe inicializar la variable de retorno de tipo arreglo, y solo agregar el valor como se muestra en el ejemplo con el nombre y valor del atributo que se desea modificar.
PEXMLDOC
Se activo este Punto de Entrada, que permitan las siguientes acciones:
- En el nodo cfdi:Comprobante, permitir personalizar los atributos:
- Subtotal
- Total
- Descuento Total
- Fecha de Emisión
- Metodo Pago
- Forma Pago
- Moneda
- Tipo Cambio
- Lugar Expedición
- Exportación
- En el nodo cfdi:Conceptos, personalizar todo el nodo.
- En el nodo cfdi:Impuestos, personalizar todo el nodo a los Impuestos Totales del Documentos.
Ejemplo de uso
#include 'protheus.ch' #INCLUDE "FWMVCDEF.CH" #include "FILEIO.CH" User Function PEXMLDOC() Local cOpc := PARAMIXB[1] //Opción para indicar el atributo o el nodo a personalizar Local lCadO := PARAMIXB[2] //Indica si es Cadena Original .T. = Si y .F. = No Local cXMLRet := "" Local cSepa := "|" Local cSubT := "0.01" Local cTot := "0.01" Local cCRLF := (chr(13)+chr(10)) //Datos Impuestos Totales Local cTotIT := "0.00" Local cBasIT := "0.01" Local cImpT := "002" Local cTpFac := "Tasa" Local cTasCuo := "0.000000" Local cValor := "0.00" If Alltrim(cEspecie) $ "NF|NCC" If cOpc == "ST" //SubTotal cXMLRet := cSubT ElseIf cOpc == "T" //Total cXMLRet := cTot ElseIf cOpc == "D" //Descuento cXMLRet := "20.00" ElseIf cOpc == "TC" //TipoCambio cXMLRet := "" ElseIf cOpc == "LE" // LugarExpedición cXMLRet := "" ElseIf cOpc == "MO" // Moneda cXMLRet := "" EndIf If lCadO If cOpc == "CO" cXMLRet := U_GROUPCAD(SF2->F2_DOC) elseIf cOpc == "TI" //Total de Impuestos cXMLRet := cBasIT + cSepa + cImpT + cSepa + cTpFac + cSepa + cTasCuo + cSepa + cValor + cSepa + cTotIT + cSepa EndIf Else If cOpc == "CO" cXMLRet := space(3) + '<cfdi:Conceptos>' + cCRLF cXMLRet += U_GROUPPED(SF2->F2_DOC) cXMLRet += space(3) + '</cfdi:Conceptos>' + cCRLF elseIf cOpc == "TI" ////Total de Impuestos cXMLRet := cCRLF + Space(5) + '<cfdi:Impuestos TotalImpuestosTrasladados="' + cTotIT + '" >' + cCRLF cXMLRet += Space(10) + '<cfdi:Traslados>' + cCRLF cXMLRet += Space(15) + '<cfdi:Traslado Base="' + cBasIT + '" Impuesto="' + cImpT + '" TipoFactor="' + cTpFac + '" TasaOCuota="' + cTasCuo + '" Importe="' + cValor + '"/>' + cCRLF cXMLRet += Space(10) + '</cfdi:Traslados>' + cCRLF cXMLRet += Space(5) + '</cfdi:Impuestos>' + cCRLF EndIf EndIf EndIf Return cXMLRet
El punto de Entrada PEXMLDOC, recibe 2 parámetros, donde:
El primer parámetro es de tipo carácter, con las siguientes opciones:
- ST para personalizar el valor del atributo SubTotal,
- T personalizar el valor del atributo Total
- FE personalizar el valor del atributo Fecha
- D personalizar el valor atributo Descuento
- TC personalizar el valor del atributo TipoCambio
- LE personalizar el valor de atributo LugarExpedicion
- MO personalizar el valor del atributo Moneda
- FP personalizar el valor del atributo FormaPago
- MP personalizar el valor del atributo MetodoPago
- TI para personalizar el nodo cfdi:Impuestos de los impuestos totales del documento.
- CO para personalizar el nodo cfdi:Conceptos
El segundo parámetro recibe el valor lógico .T. o .F., que indica si se va a generar la Cadena Original o el XML (.T. es igual a generar la Cadena Original y .F. es igual a generar el XML, y este parámetro no aplica para las opciones ST - Subtotal y T - Total).
El retorno debe ser un valor de tipo carácter.
La variable cEspecie, la cual puede ser utilizada para personalizar para que la funcionalidad aplique solo para ciertos documentos, ya que contiene la especie del documento (por ejemplo NF para Factura de Venta, NDC para Nota de Débito de Cliente o NCC para Nota de Crédito de Cliente).
Tiene acceso a las tablas SF1 - Encabezado de Fact. de Entrada y SF2 - Encabezado de Fact. de Salida.
PEDETIMP
Se activo este Punto de Entrada, que permitan las siguientes acciones:
- Modificar en el nodo cfdi:Comprobante\cfdi:Conceptos\cfdi:Concepto el nodo cfdi:Impuestos por ítem.
Ejemplo de uso
#include 'protheus.ch' #INCLUDE "FWMVCDEF.CH" #include "FILEIO.CH" User Function PEDETIMP() Local cOpc := PARAMIXB[1] //Opción donde IA - Información Aduanera, CP - Cuenta Predial Local lCadO := PARAMIXB[2] //Indica si es Cadena Original .T. = Si y .F. = No Local cProd := PARAMIXB[3] //Código del Producto Local cItem := PARAMIXB[4] //Número de ítem Local aImpDet := {} Local cRetImp := "" Local cBaseI := "0.01" Local cImpto := "002" Local cTipoF := "Tasa" Local cTsaC := "0.000000" Local cImpI := "0.00" Local cCRLF := (chr(13)+chr(10)) Local cSepa := "|" If Alltrim(cEspecie) $ "NF|NCC" If lCadO If cOpc == "IT" cRetImp := cBaseI + cSepa + cImpto + cSepa + cTipoF + cSepa + cTsaC + cSepa + cImpI + cSepa EndIf Else If cOpc == "IT" cRetImp := Space(20) + '<cfdi:Traslado Base="' + cBaseI + '" Impuesto="' + cImpto + '" TipoFactor="' + cTipoF + '" TasaOCuota="' + cTsaC + '" Importe="' + cImpI + '"/>' + cCRLF EndIf EndIf aAdd(aImpDet, cRetImp) EndIf Return aImpDet
El punto de Entrada PEDETIMP, recibe 4 parámetros, donde:
El primer parámetro es de tipo carácter, con las opciones IT para personalizar el nodo cfdi:Impuestos para Impuestos de Traslados e IR para personalizar el nodo cfdi:Impuestos para Impuestos de Retenciones.
El segundo parámetro recibe el valor lógico .T. o .F., que indica si se va a generar la Cadena Original o el XML (.T. es igual a generar la Cadena Original y .F. es igual a generar el XML).
El tercer parámetro corresponde del código del Producto.
El cuarto parámetro corresponde del número del ítem.
El retorno debe ser un arreglo con valores de tipo carácter.
La variable cEspecie, la cual puede ser utilizada para personalizar para que la funcionalidad aplique solo para ciertos documentos, ya que contiene la especie del documento (por ejemplo NF para Factura de Venta, NDC para Nota de Débito de Cliente o NCC para Nota de Crédito de Cliente).
Tiene acceso a las tablas SF1 - Encabezado de Fact. de Entrada y SF2 - Encabezado de Fact. de Salida.
LOCXCONCEP
Se activo este Punto de Entrada, que permitan las siguientes acciones:
- En el nodo cfdi:Comprobante\cfdi:Conceptos\cfdi:Concepto, personalizar los atributos
- Clave de Producto o Servicio
- No. Identificación
- Cantidad
- Clave de Unidad
- Unidad
- Descripción
- ValorUnitario
- Importe
- Descuento
Ejemplo de uso
#include 'protheus.ch' #INCLUDE "FWMVCDEF.CH" #include "FILEIO.CH" User function LOCXCONCEP() Local cArea := GetArea() Local cCodProd := PARAMIXB[1] // Código del producto. Local cItem := PARAMIXB[2] // Número Item Local aDetFac := {"","",0,"","","","","",""} // Arreglo que contiene la información del producto. /* aDetFac[1] := ClaveProdSer aDetFac[2] := No. Identificación aDetFac[3] := Cantidad aDetFac[4] := ClaveUnidad aDetFac[5] := Unidad aDetFac[6] := Descripcion aDetFac[7] := ValorUnitario aDetFac[8] := Importe aDetFac[9] := Descuento */ If Alltrim(cEspecie) $ "NF|NCC" aDetFac[7] := "0.01" aDetFac[8] := "0.01" aDetFac[9] := "0.00" EndIf RestArea(cArea) Return aDetFac
El punto de Entrada LOCXCONCEP , se realiza la modificación en la posición del arreglo según el atributo:
- aDetFac[1] := ClaveProdSer
- aDetFac[2] := No. Identificación
- aDetFac[3] := Cantidad
- aDetFac[4] := ClaveUnidad
- aDetFac[5] := Unidad
- aDetFac[6] := Descripcion
- aDetFac[7] := ValorUnitario
- aDetFac[8] := Importe
- aDetFac[9] := Descuento
El retorno debe ser un valor de tipo arreglo.
La variable cEspecie, la cual puede ser utilizada para personalizar para que la funcionalidad aplique solo para ciertos documentos, ya que contiene la especie del documento (por ejemplo NF para Factura de Venta, NDC para Nota de Débito de Cliente o NCC para Nota de Crédito de Cliente).
Tiene acceso a las tablas SF1 - Encabezado de Fact. de Entrada y SF2 - Encabezado de Fact. de Salida.
PECOMPCON
Se activo este Punto de Entrada, que permitan las siguientes acciones:
- Personalizar el nodo cfdi:InformacionAduanera.
- Personalizar el nodo cfdi:cfdi:CuentaPredial.
- Personalizar el nodo cfdi:cfdi:Partes
#include 'protheus.ch' #INCLUDE "FWMVCDEF.CH" #include "FILEIO.CH" User Function PECOMPCON() Local cXMLCon := "" Local cCRLF := (chr(13)+chr(10)) Local cOpc := PARAMIXB[1] //Opción donde IA - Información Aduanera, CP - Cuenta Predial Local lCadO := PARAMIXB[2] //Indica si es Cadena Original .T. = Si y .F. = No Local cSepa := "|" Local cNPed := "23 47 3807 8003832" Local cCtaP := "15956011002" Local cSepa := "|" Local cClaveP:= "10101504" Local cNoId := "9642000000000002" Local cCant := "1" Local cUnid := "UN" Local cDesc := "MOUSE" If Alltrim(cEspecie) $ "NF|NDC|NCC" If lCadO If cOpc == "P" //Parte cXMLCon := cClaveP + cSepa + cNoId +cSepa+ cCant + cSepa + cUnid + cSepa +cDesc +cSepa EndIf Else If cOpc == "P" //Parte cXMLCon := Space(12) + ' <cfdi:Parte ClaveProdServ="'+ cClaveP +'" NoIdentificacion="'+ cNoId +'" Cantidad="'+ cCant +'" Unidad="'+cUnid+'" Descripcion="'+cDesc+'"/> '+ cCRLF EndIf EndIf EndIf If Alltrim(cEspecie) $ "NF|NCC" If lCadO If cOpc == "IA" //Información Aduanera cXMLCon := StrTran(cNPed," "," ") + cSepa ElseIf cOpc == "CP" //Cuenta Predial cXMLCon := cCtaP + cSepa EndIf Else If cOpc == "IA" //Información Aduanera cXMLCon := Space(12) + '<cfdi:InformacionAduanera NumeroPedimento="' + cNPed + '"/>' + cCRLF ElseIf cOpc == "CP" //Cuenta Predial cXMLCon := Space(12) + '<cfdi:CuentaPredial Numero="' + cCtaP + '"/>' + cCRLF EndIf EndIf EndIf Return cXMLCon
El punto de Entrada PECOMPCON, recibe 2 parámetros, donde:
El primer parámetro es de tipo carácter, con las opciones IA para personalizar el nodo de Información Aduanera , CP para personalizar el nodo de Cuenta Predial y P para personalizar el nodo de Parte de los Conceptos
El segundo parámetro recibe el valor lógico .T. o .F., que indica si se va a generar la Cadena Original o el XML (.T. es igual a generar la Cadena Original y .F. es igual a generar el XML)
El retorno debe ser un valor de tipo carácter.
La variable cEspecie, la cual puede ser utilizada para personalizar para que la funcionalidad aplique solo para ciertos documentos, ya que contiene la especie del documento (por ejemplo NF para Factura de Venta, NDC para Nota de Débito de Cliente o NCC para Nota de Crédito de Cliente).
Tiene acceso a las tablas SF1 - Encabezado de Fact. de Entrada y SF2 - Encabezado de Fact. de Salida.
PEXMLADIC
Se activó el Punto de Entrada PEXMLADIC, el cual permite:
- Personalizar el final del archivo XML información solo de manera informativa que no afecta a la cadena original.
#include "protheus.ch" User Function PEXMLADIC() Local cCRLF := (chr(13)+chr(10)) Local cXMLPE := "" If Alltrim(cEspecie) $ "NF|NCC" cXMLPE += ' <cfdi:Addenda>' + cCRLF cXMLPE += ' <Addenda xmlns:Addenda="http://www.Addenda/" schemaLocation="http://www.addenda.xsd" version="1.0">' + cCRLF cXMLPE += ' <Addenda:Datos>' + cCRLF cXMLPE += ' <Addenda:Detalle>abc</Addenda:Detalle>' + cCRLF cXMLPE += ' </Addenda:Datos>' + cCRLF cXMLPE += ' </Addenda>' + cCRLF cXMLPE += ' </cfdi:Addenda>' + cCRLF EndIf Return cXMLPE
La variable cEspecie, la cual puede ser utilizada para personalizar para que la funcionalidad aplique solo para ciertos documentos, ya que contiene la especie del documento (por ejemplo NF para Factura de Venta, NDC para Nota de Débito de Cliente o NCC para Nota de Crédito de Cliente).
PEXMLCCE
Se activa el punto de entrada PEXMLCCE para permitir la personalización de los nodos de Complemento de comercio exterior: cce20:Emisor, cce20:Receptor,cce20:Domicilio y cce20:Mercancia.
- En el nodo cce20:Emisor\cce20:Domicilio, permitir personalizar los atributos:
Calle
Colonia
Municipio
Estado
Pais
CodigoPostal
- En el nodo cce20:Receptor\cce20:Domicilio, permitir personalizar los atributos
Calle
NumeroExterior
NumeroInterior
Colonia
Municipio
Estado
Pais
CodigoPostal
- En el nodo cce20:Mercancia, permitir personalizar los atributos
NoIdentificacion
FraccionArancelaria
CantidadAduana
UnidadAduana
ValorUnitarioAduana
ValorDolares
- En el nodo cce20:Emisor\cce20:Domicilio, permitir personalizar los atributos:
Información
El punto de Entrada PEXMLCCE, recibe 2 parámetros, donde:
El primer parámetro es de tipo caracter, con las siguientes opciones:
- EM personalizar datos del Emisor,
- RE personalizar datos del Receptor
- MER personalizar datos de Mercancía
El segundo parámetro recibe es un arreglo de información, el cual cuenta con los datos del Emisor, Receptos o Mercancía dependiendo del valor del primer parámetro:
- Si el primer parámetro contiene "EM", el arreglo contiene datos del Emisor y se compone de los siguientes datos:
- [1] - Contiene el valor del atributo Calle, por estándar se obtiene el valor del campo M0_ENDCOB
- [2] - Contiene el valor del atributo Colonia, por estándar se obtiene el valor del catálogo S015 - Colonias , usando los campos M0_CEPENT - M0_CODZOSE
- [3] - Contiene el valor del atributo Municipio, por estándar se obtiene el valor del campo M0_CODMUN
- [4] - Contiene el valor del atributo Estado, por estándar se obtiene el valor del catálogo S004 - Códigos Postales, usando el campo M0_CEPENT
- [5] - Contiene el valor del atributo Pais, por estándar el valor asignado es "MEX".
- [6] - Contiene el valor del atributo CodigoPostal, por estándar se obtiene el valor del campo M0_CEPENT
- Si el primer parámetro contiene "RE", el arreglo contiene datos del Receptor y se compone de los siguientes datos:
- [1] - Contiene del campo RFC(A1_CGC).
- [2] - Contiene del campo Nombre(A1_NOME).
- [3] - Contiene del campo CP(A1_CEP).
- [4] - Contiene el valor del atributo Calle, por estandar se obtiene el valor del campo Direccion(A1_END).
- [5] - Contiene el valor del atributo NumeroExterior, por estandar se obtiene el valor del campo Numero exter(A1_NR_END).
- [6] - Contiene el valor del atributo NumeroInterior, por estandar se obtiene el valor del campo Numero inter(A1_NROINT).
- [7] - Contiene el valor del atributo Colonia, por estandar se obtiene el valor del campo Barrio(A1_BAIRRO).
- [8] - Contiene el valor del atributo Municipio, por estandar se obtiene el valor del campo Municipio(A1_MUN).
- [9] - Contiene el valor del atributo Estado, por estandar se obtiene el valor de la tabla SX5, usando el campo Est.Cliente(A1_EST).
- [10] - Contiene el valor del atributo Pais, se obtiene de la tabla SYA - Países, del campo País SAT(YA_CCESAT) , usando como búsqueda el campo Pais(A1_PAIS).
- [11] - Contiene el valor del atributo CodigoPostal, por estandar se obtiene el valor del campo CP(A1_CEP).
- [12] - Contiene el valor del atributo NumRegIdTrib, por estandar se obtiene el valor del campo Reg. Fiscal (F2_IDTRIB).
- Si el primer parámetro contiene "MER", el arreglo contiene datos del Receptor y se compone de los siguientes datos:
- [1] - Contiene del campo Item(D2_ITEM).
- [2] - Contiene del campo Producto(D2_COD).
- El valor del atributo NoIdentificacion se compone del valor del campo Item(D2_ITEM y del campo Producto(D2_COD).
- [3] - Contiene del campo Frac. Arance(D2_FRACCA ).
- [4] - Contiene del campo Num.Iden.Com(D2_NICO)
- El valor del atributo FraccionArancelaria, por estandar se obtiene el valor de los campos Frac. Arance(D2_FRACCA ) + Num.Iden.Com(D2_NICO)
- [5] - Contiene el valor del atributo CantidadAduana, por estandar se obtiene el valor del campo Cant. Aduana(D2_CANADU).
- [6] - Contiene el valor del atributo ValorUnitarioAduana, por estandar se obtiene el valor del campo Val. Aduana (D2_VALADU ).
- [7] - Contiene el valor del atributo ValorDolares, por estandar se obtiene el valor del campo Valor USD(D2_USDADU).
- [8] - Contiene el valor del atributo UnidadAduana, por estandar se obtiene el valor catálogo S014 - Fracción Arancelaria, usando el campo Frac. Arance(D2_FRACCA ).
El retorno debe ser el arreglo con las mismas dimensiones y solo de debe personalizar los datos que se requieran, los demás datos se quedarán con el valor estándar.
#include 'protheus.ch' #INCLUDE "FWMVCDEF.CH" #include "FILEIO.CH" User Function PEXMLCCE() Local cOpc := PARAMIXB[1] //Opión donde EM - Información Emisor Complemento de comercio, // RE - Información Receptor Complemento de comercio // ME - Información Mercancia Complemento de comercio Local aData := PARAMIXB[2] //Arreglo con los datos para personalización. //Datos Emisor If cOpc == "EM" Endif //Datos Receptor If cOpc == "RE" //Personalización atributo CodigoPostal aData[11] := Alltrim(SA1->A1_COD_MUN) Endif //Datos Mercancia If cOpc == "MER" Endif Return aData
05. DICCIONARIO DE DATOS
Se debe crear el parámetro MV_FEXML en la tabla SX6 - Parámetros y configurarse con el valor S:
Campo | Valor |
---|---|
Tipo | 1 - Caracteres |
Nombre de Var. | MV_FEXML |
Descripción | Permite activar la funcionalidad para generar XML a través de rutina, evitando el uso de archivos .INI. S - Realizara la creación de archivos XML y no hará uso de los actuales archivo INI. |
Cont. Esp | S |
06. PREGUNTAS FRECUENTES
- ¿Qué se requiere para implementar la nueva funcionalidad sin archivos .INI'
- Tener configurado el parámetro MV_FEXML = S , como se indica en el apartado 05. DICCIONARIO DE DATOS.
- Además de que es necesario tener actualizadas las rutinas LOCXFUNA, FATXFUMI, FATSMEX y FATEMEX con una fecha mayor o igual indicadas en la 01. VISION GENERAL.
- ¿Cuándo de puede implementar está nueva funcionalidad?
- Si se cuenta con una versión vigente del sistema, ya se pude implementar esta funcionalidad.
- ¿Qué ventajas existen con esta nueva funcionalidad?
Cuando el SAT (Servicio de Administración Tributaria) implemente nuevos cambios y/o nuevas versiones en la generación de Comprobante Fiscal Digital por Internet (CFDI) para las Factura Normal, Factura de Traslado, Factura con Complemento de Comercio Exterior versión y Factura con Carta Porte, Nota de Crédito y Nota de Débito , dichos cambios se realizaran por parte de TOTVS y ya no se tendrán que modificar los archivos INI, lo que permitirá que los cambios sean transparentes, con ello facilitar su implementación y evitar problemas que se tenían modificando los archivos INI.
- ¿Qué sucede si tengo personalizaciones en mis archivos .INI actuales?
- Se habilitaron Puntos de Entrada que le permitirán realizar sus personalizaciones según sus necesidades y/o requerimientos en la sección 04.PUNTOS DE ENTRADA encontrará los Puntos de Entrada disponibles y su usabilidad.
- ¿Es obligatoria implementar esta funcionalidad?
- Esta funcionalidad será obligatoria a partir de la versión 12.1.2510. Habrá un periodo de convivencia de ambas versiones hasta la versión 12.1.2410.
- ¿La funcionalidad anterior por medio de INIS se podrá seguir utilizando?
- Se podrá seguir utilizando y tendrá mantenimiento solo hasta la vigencia de la versión 12.1.2410.
- ¿Es necesario tener conocimiento técnico del sistema para pasar las personalizaciones de mis archivos INI para los nuevos puntos de entrada?
- Si, es necesario.
- Si no cuenta con un departamento de TI o un administrador experto en el sistema, puede solicitar a su agente de Atención y Relación, le cotice horas para realizar la conversión, de las personalizaciones que puedan contener los archivos FATSMEX.INI y FATEMEX.INI.
- Estoy en fase de migración para una nueva versión. ¿Recomienda solicitar que se implemente este cambio en la migración?
- Si, es recomendable. De esta forma aprovecha las validaciones de la migración para probar este nuevo proceso.