Árvore de páginas


Í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:

RutinasNombre TécnicoFecha
LOCXFUNAFunciones Genéricas para Notas Fiscales27/02/2024
FATXFUMIFunciones genéricas para Facturación - Mercado Internacional13/02/2024
FATSMEX.PRWGeneración de XML para Documentos de Salida
22/02/2024
FATEMEX.PRWGeneración de XML para Documentos de Entrada
22/02/2024

02. CONFIGURACIONES

  1. 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.
  2. Configurar el parámetro MV_FEXML.
    Ejemplo con el valor "S"
  3. Configurar el parámetro MV_CFDDIRS con la ruta donde se encuentran las llaves y certificados.
    Ejemplo con el valor "GetSrvProfString('startpath','')+'\cfd\llaves\'"                                                                                                                                                                                                          
                                                                                                                                                                      
  4. 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"
  5. Configurar los parámetros MV_IVATRAS con los códigos de Impuestos.
    Ejemplo con el valor  "IVA|IEP"      
     
                                                                                                                                                                                                                                                
  6. Configurar el parámetro MV_RETIVAM con los códigos de Retenciones.
    Ejemplo con el valor "RIV"
     

  7. 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 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.


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.

  1. Ingresar al módulo Facturación (SIGAFAT), ir al menú "Actualizaciones | Facturación | Facturaciones (MATA467N)
  2. Indicar los parámetros de la rutina, informando la pregunta ¿Normal/Benef./Anticipo? con la opción Normal.
  3. Incluir una Factura de Venta (NF):
  4. Confirmar el grabado de la Factura de Venta.
  5. 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

PEEMIREC
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

PEXMLDOC
#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

PEDETIMP
#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

LOCXCONCEP
#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



PECOMPCON
#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.


PEXMLADIC
#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


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.

PEXMLCCE
#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

Tipo1 - 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. EspS


06. PREGUNTAS FRECUENTES

  1. ¿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.
  2. ¿Cuándo de puede implementar está nueva funcionalidad?
    • Si se cuenta con una versión vigente del sistema, ya se pude implementar esta funcionalidad.
  3. ¿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.

  4. ¿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.
  5. ¿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.
  6. ¿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.
  7.  ¿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.
  8. 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.