Sello Digital en el Recibo Nómina CFDI
Si actualmente ya tienes instalado la solución de SAP para facturas electrónicas SD/FI e instalado el Certificado Digital, se puede generar el Sello Digital del Recibo de Nómina directamente desde SAP. Este evita el dar datos confidenciales de la firma electrónica a los PAC.
Para este propósito debemos de usar el BADI HRPAYMX_CFDI liberado por SAP para la solución de Recibos de Nómina CFDI.
El Sello Digital se obtiene a partir de una cadena de caracteres con información definida por el SAT el cual se encripta con algoritmos definidos por el SAT y se genera un string de 172 posiciones denominado “Sello Digital”.
La base para la generación del Sello Digital es la generación de los que se denomina cadena original usando la estructura liberada por SAP HRPAYMX_S_CFDI_ANNEX_20.
Adjunto un programa que permite generar la cadena original.
Módulo de Función ZPYMX_DI_CREATE_ORI_IN_MSG
INCLUDE LZPYMX_DI_SIGNATURETOP |
---|
CONSTANTS gc_pipeline TYPE c VALUE ‘|’. |
FUNCTION ZPYMX_DI_CREATE_ORI_IN_MSG |
---|
FUNCTION zpymx_di_create_ori_in_msg. *”———————————————————————- *”*”Interfase local *” IMPORTING *” REFERENCE(IS_CFDI_ANNEX_20) TYPE HRPAYMX_S_CFDI_ANNEX_20 *” EXPORTING *” REFERENCE(EV_ORI_INPUT_MSG) TYPE STRING *” EXCEPTIONS *” OIM_BLOCK_ERROR *” DATA_BLOCK_ERROR *” BLOCK_CREATION_ERROR *” CUSTOM_ERROR *”———————————————————————- DATA: lo_annex20 TYPE REF TO cl_abap_structdescr, lt_comp_tab TYPE cl_abap_structdescr=>component_table, ls_comp TYPE LINE OF cl_abap_structdescr=>component_table. “built up character string DATA lv_data_pos_chain TYPE string. FIELD-SYMBOLS: <lv_value> TYPE ANY. lo_annex20 ?= cl_abap_typedescr=>describe_by_data( is_cfdi_annex_20 ). lt_comp_tab = lo_annex20->get_components( ). *———————————————————————-* * Procesar Estructura *———————————————————————-* LOOP AT lt_comp_tab INTO ls_comp. ASSIGN COMPONENT ls_comp–name OF STRUCTURE is_cfdi_annex_20 TO <lv_value>. PERFORM f_create_chain USING <lv_value> ls_comp–type->kind CHANGING lv_data_pos_chain. ENDLOOP. CONCATENATE gc_pipeline gc_pipeline lv_data_pos_chain gc_pipeline gc_pipeline INTO ev_ori_input_msg. * Remove direct consecutive blanks, because SAT input message * is created in this way CONDENSE ev_ori_input_msg. ENDFUNCTION. |
INCLUDE LZPYMX_DI_SIGNATUREF01 |
---|
*———————————————————————-* ***INCLUDE LZPYMX_DI_SIGNATUREF01 . *———————————————————————-* *&———————————————————————* *& Form F_CREATE_CHAIN *&———————————————————————* * text *———————————————————————-* * –>P_<LV_VALUE> text * <–P_LV_DATA_POS_CHAIN text *———————————————————————-* FORM f_create_chain USING value(p_elemento) TYPE any p_kind TYPE c CHANGING data_pos_chain TYPE any. DATA: lo_elemento TYPE REF TO cl_abap_structdescr, lt_comp_tab TYPE cl_abap_structdescr=>component_table, ls_comp TYPE LINE OF cl_abap_structdescr=>component_table. FIELD-SYMBOLS: <lv_header> TYPE ANY, <dyn_table> TYPE STANDARD TABLE, <lv_value> TYPE ANY. DATA concatenated_field(255) TYPE c. CASE p_kind. WHEN cl_abap_typedescr=>kind_table. ASSIGN p_elemento TO <dyn_table>. LOOP AT <dyn_table> ASSIGNING <lv_header>. lo_elemento ?= cl_abap_typedescr=>describe_by_data( <lv_header> ). lt_comp_tab = lo_elemento->get_components( ). LOOP AT lt_comp_tab INTO ls_comp. ASSIGN COMPONENT ls_comp–name OF STRUCTURE <lv_header> TO <lv_value>. PERFORM f_create_chain USING <lv_value> ls_comp–type->kind CHANGING data_pos_chain. ENDLOOP. ENDLOOP. WHEN cl_abap_typedescr=>kind_struct. lo_elemento ?= cl_abap_typedescr=>describe_by_data( p_elemento ). lt_comp_tab = lo_elemento->get_components( ). LOOP AT lt_comp_tab INTO ls_comp. ASSIGN COMPONENT ls_comp–name OF STRUCTURE p_elemento TO <lv_value>. PERFORM f_create_chain USING <lv_value> ls_comp–type->kind CHANGING data_pos_chain. ENDLOOP. WHEN cl_abap_typedescr=>kind_elem. IF ( p_elemento IS NOT INITIAL ) AND ( p_elemento <> ” ). concatenated_field = p_elemento. * deleting of unnecessary white spaces “CONDENSE concatenated_field. SHIFT concatenated_field LEFT DELETING LEADING space. IF data_pos_chain <> ”. CONCATENATE data_pos_chain concatenated_field INTO data_pos_chain SEPARATED BY gc_pipeline. ELSE. data_pos_chain = concatenated_field. ENDIF. ENDIF. WHEN OTHERS. IF ( p_elemento IS NOT INITIAL ) AND ( p_elemento <> ” ). concatenated_field = p_elemento. * deleting of unnecessary white spaces “CONDENSE concatenated_field. SHIFT concatenated_field LEFT DELETING LEADING space. IF data_pos_chain <> ”. CONCATENATE data_pos_chain concatenated_field INTO data_pos_chain SEPARATED BY gc_pipeline. ELSE. data_pos_chain = concatenated_field. ENDIF. ENDIF. ENDCASE. ENDFORM. ” F_CREATE_CHAIN |
Con los datos llenos en la estructura SAP HRPAYMX_S_CFDI_ANNEX_20, se genera de forma automática la cadena original.
Una vez que se ha generado la cadena original debemos de aplicar los módulos de función que tiene SAP de forma estándar para generar el Sello Digital tomando los certificados instalados en los servidores de aplicación.
Si necesitan más información estoy a sus órdenes por este medio.
Saludos,
Gracias! voy a implementar esta función y te comento el resultado mas adelante.
De casualidad conoces alguna función en SAP para aplicar los algoritmos HASH y RSA?
Se agradece el post, pero nos puedes orientar con el nombre de los módulos de función usados? Algún consejo para iniciar a buscarlos? Saludos
Disculpen la demora en contestar pero todas las funciones se encuentra en el paquete ID-MX-DI.
En el módulo de función IDMX_DI_SD_SINGLE_SIGN están las rutinas para generar la cadena original y el sello digital en el módulo SD y los podemos tomar como ejemplo..
Saludos,
Que tal, espero alguien me pueda echar la mano, en mi trabajo tenemos únicamente el módulo de RH, me piden genere yo el sello digital para adjuntarlo en el xml de los recibos de nómina. ¿Existen ya los algoritmos programados (HASH, RSA y la conversión a base 64 que pide el CFDI) o alguna nota que deba aplicar el basis para que pueda yo hacer esto desde la BADI? .
Agradeceré mucho su ayuda, buen día.
Hola Elda:
Nosotros ya pudimos generar el sello digital en SAP y Timbra con el PAC.
Para poder generar el Sello Digital tienes que tener instalado las siguientes notas:
El sello lo tienes que generar en el BADI HRPAYMX_CFDI Método IF_HRPAYMX_CFDI~CHANGE_DATA.
La estructura HRPAYMX_S_CFDI_ANNEX_20 es diferente que la estructura de IDMX_DI_ORI_IN_MSG_TYPE que es con la que se genera la cadena original en MF de factura electrónica de SD (Además no tiene la estructura de complemento de Nómina). Lo que realizamos nosotros fue crear una nueva estructura ZHRPAYMX_S_CFDI_CHAIN que usa los campos de HRPAYMX_S_CFDI_ANNEX_20 pero con el orden que requiere el SAT en su definición del CFDI 3.2 y el complemento de Nómina. En un post anterior indico como generar la cadena origina.
Si desean más información con gusto me pueden escribir a pavel.garcia@wiseitgroup.com
Saludos,
Hola.
- En SD, el FM para hacer el sello es: IDMX_DI_SD_SINGLE_SIGN y este contiene el FM: IDMX_DI_SD_DATA_EXTRACT que es el que forma la cadena original.
- En FI, el FM para hacer el sello es: IDMX_DI_FI_SINGLE_SIGN y este contiene el FM: IDMX_DI_FI_DATA_EXTRACT que es el que forma la cadena original.
En ambos co-existen CFD y CFDI
Espero les sea de utilidad. Voy a publicar esto mismo en otro Post por si desean comentamos ahí para no hacer más larga el presente Post.
Saludos!
Hugo.
Gracias por sus respuestas, me quedó claro que debo de generar mi rutina para formar la cadena original pero ahora me surgió una duda más, puesto que nosotros solo tenemos instalado el módulo RH, no tenemos ni FI ni SD, ¿puedo hacer los cifrados HASH y RSA y la base 64 sin problema y el funcional basis puede instalar la nota 1869512 en RH?
Una duda, ya implemente varias funciones y me genera correcta la cadena, sin embargo tengo duda con los certificados en el servidor, como hay que indicarle al programa que certificado debe tomar para tal cadena? Debe ser por división de personal supongo pero no hayo la manera de extraer el certificado que corresponde, espero que alguien me pueda orientar un poco.
Muchas Gracias.
Hola,
Creo que tengo una respuesta para eso, en la SPRO-componentes multiaplicaciones-funciones de aplicación generales-firma digital-parametrizaciones específicas del país-mexico-parametrizacion de firma digital.
Ahí se liga la sociedad con el archivo pse.
Espero te ayude eso.
Lo revisó y te comento gracias!!
hola,
Con el cliente que vi esto si tiene SD y lo del cfdi y me dieron la clave para cada división y de esta manera lo estoy identificando para que haga el cifrado del numero de certificado y del certificado.
Ya vi el modulo de función para el sello pero tengo duda de que mandar en cada campo.
Saludos,
Vero
Que tal!
Sigo teniendo problemas con la generación del sello, ya tengo los archivos PSE en el servidor pero no encuentro como se deben de leer adecuadamente dependiendo de la división, así como convertirlo en la cadena que ira en el XML, alguien tendrá algún ejemplo?
Muchas Gracias!
Hola.
Laconfiguración la mencionaron anteriormente.
Una vez que tienes firmados e instalados los archivos PSE configuras la vista: IDMX_DI_VPSEPROF para que crees un perfir para cada Sociedad y asignas el archivo PSE.
Después asignas el ID del perfil a la Sociedad en la vista IDMX_DI_VPROFDET.
Cabe mensionar que la cadena generada debe estar bien formada en base a los campos obligatorios y definidos en el archivo nómina11.xslt - Secuencia de cadena original que esta publicado en el SAT.
Espero que te sean de utilidad mis comentarios.
Listo ya los cargue a esas vistas y estoy aplicando la función IDMX_DI_SIGN, ya me genero algunas cadenas pero no se si tenga que aplicar algo mas o esas se las paso al XML.
En las vistas (IDMX_DI_VPSEPROF) les asigne el CODE PAGE UTF-8, mas no se si sea correcto, asi como el formato de firma PKCS#1.
Adjunto el código que me genera todos los datos necesarios del sellado usando MF de CFDI 3.2 de SD
FUNCTION zpymx_di_sign.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(IV_BUKRS) TYPE BUKRS
*" REFERENCE(IV_ERDAT) TYPE DATUM
*" REFERENCE(IV_ERZET) TYPE UZEIT
*" REFERENCE(IS_CFDI_CHAIN) TYPE ZHRPAYMX_S_CFDI_CHAIN
*" EXPORTING
*" REFERENCE(EV_CERTIFICATE_NBR) TYPE CHAR20
*" REFERENCE(EV_CERTIFICATE) TYPE STRING
*" REFERENCE(EV_DIGITAL_SEAL) TYPE STRING
*" EXCEPTIONS
*" ERROR
*"----------------------------------------------------------------------
DATA:
lv_ori_input_msg TYPE string,
ls_ssf_parameters TYPE idmx_di_const,
lv_ssf_parameters_id TYPE idmx_di_profile,
lv_ssf_validity_flag TYPE general_flag,
lv_indatalen TYPE ssflen,
lt_in_data_table TYPE TABLE OF ssfbin,
ls_in_data_table TYPE ssfbin,
ls_cvers TYPE cvers,
ls_cer_config TYPE zcfdi_cer_config,
lv_signer_id TYPE ssfid,
lv_cert_valid_from TYPE ssfutc,
lv_cert_valid_to TYPE ssfutc ,
lv_serialno(40) TYPE c,
lv_checked_serial_nr(255) TYPE c,
lv_psefile_path TYPE ssfparms-pab,
lv_string_unchecked_serial_nr TYPE string,
lv_offset TYPE i,
lv_cert_xstring TYPE xstring,
lv_certificate TYPE ssfcert.
CONSTANTS:
lc_sap_basis TYPE dlvunit VALUE 'SAP_BASIS'.
* GET SAP BASIS RELEASE VERSION
SELECT SINGLE * FROM cvers INTO ls_cvers
WHERE component = lc_sap_basis.
*----------------------------------------------------------------------*
* DETERMINE SIGNATURE PARAMETER ID
*----------------------------------------------------------------------*
CALL FUNCTION 'IDMX_DI_GET_PARAM_ID'
EXPORTING
bukrs = iv_bukrs
erdat = iv_erdat
erzeit = iv_erzet
IMPORTING
parameter_id = lv_ssf_parameters_id
EXCEPTIONS
no_valid_parameter_id = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* RAISING error.
ENDIF.
*------------------------------------------------------
*. CHECK SSF ENVIRONMENT (configured server)
*------------------------------------------------------
* CALL FUNCTION 'IDMX_DI_CHECK_SSF_CONFIG'
* EXPORTING
* iv_parameters_id = lv_ssf_parameters_id
* iv_doc_creation_date = lv_fecha_timbrado
* iv_doc_creation_time = lv_hora_timbrado
* IMPORTING
* ev_validity_flag = lv_ssf_validity_flag
* EXCEPTIONS
* parameters_id_not_exist = 1
* psefile_not_exist = 2
* psefile_invalid = 3
* unknown_error = 4
* OTHERS = 5.
*
* IF NOT sy-subrc IS INITIAL.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
** RAISING error.
* ENDIF.
CALL FUNCTION 'IDMX_DI_GET_PARAMS'
EXPORTING
ssf_parameters_id = lv_ssf_parameters_id
IMPORTING
PARAMETERS = ls_ssf_parameters
* pse_password = lv_password
EXCEPTIONS
data_error = 1
incomplete_parameters = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*----------------------------------------------------------------------*
* Generar Cadena Original
*----------------------------------------------------------------------*
CALL FUNCTION 'ZPYMX_DI_CREATE_ORI_IN_MSG'
EXPORTING
is_cfdi_chain = is_cfdi_chain
IMPORTING
ev_ori_input_msg = lv_ori_input_msg
EXCEPTIONS
oim_block_error = 1
data_block_error = 2
block_creation_error = 3
custom_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*-------------------------------------------------------
* CREATION OF DIGITAL SIGNATURE
*--------------------------------------------------------
CALL FUNCTION 'IDMX_DI_SIGN'
EXPORTING
inv_str = lv_ori_input_msg
ssf_parameters_id = lv_ssf_parameters_id
* SSF_PARAMETERS =
iv_release = ls_cvers-release
* IV_PRINT =
iv_get_certificate = 'X'
* IV_DOC_AWKEY =
* IV_DOC_AWTYP =
IMPORTING
prn_sign = ev_digital_seal
* SIGN_BM =
* LEN_SIGN_BM =
prn_cert_sno = lv_checked_serial_nr
* ori_md5 = lv_ori_hashed_md5
cert_base64 = ev_certificate
EXCEPTIONS
ssf_custom_error = 1
ssf_krn_error = 2
ssf_no_memory = 3
ssf_no_ssflib = 4
ssf_no_cert = 5
ssf_parameter_not_found = 6
ssf_parameter_wrong = 7
invalid_filename_password = 8
conv_error = 9
custom_error = 10
no_operation = 11
OTHERS = 12
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* RAISING error.
ENDIF.
* SERIAL NUMBER OF THE CERTIFICATE
* Remove check digits which are inserted every even place
CLEAR lv_offset.
lv_offset = 1.
WHILE NOT lv_checked_serial_nr+lv_offset(1) IS INITIAL.
CONCATENATE lv_string_unchecked_serial_nr lv_checked_serial_nr+lv_offset(1)
INTO lv_string_unchecked_serial_nr.
lv_offset = lv_offset + 2.
ENDWHILE.
ev_certificate_nbr = lv_string_unchecked_serial_nr.
ENDFUNCTION.
Que tal!
Ya probe la función y es correcta.
Lo único es el parámetro CERT_BASE64, no existe en la función IDMX_DI_SIGN, estuve buscando notas pero no encontré ninguna que actualice esta función.
Ese parámetro cual vendría siendo?
Hola José:
Este parámetro se habilita implementando la nota1869512 - CFDI Digital Invoice Mexico).
Saludos,
Muchas Gracias! con esa nota ya di en el clavo! Batalle un poco en encontrar las notas exactas que afectaban esa función (IDMX_DI_SIGN) pero ya las implemente y me genera correctamente el certificado y el sello en base 64.
Las notas son la 1711011 y la 1734373, implemente algunas mas que no teníamos, pero según yo con esas es suficiente.
Hola José:
Si me puedes enviar tus datos personales a pavel.garcia@wiseitgroup.com para contactarte de forma directa.
Saludos,
Hola Jose Angel, estoy interesando en generar todo desde SAP, me podrias apoyar, cuales son las notas de SAP que tengo que aplicar para generar el sello y la firma digital ?
De antemano gracias por tu apoyo
Saludos,
Rogelio
Pues son bastantitas, a parte de todas las nuevas del CFDi-Nomina, tienes que tener las de facturación electrónica o bien tener el ultimo SP de HR, yo implemente la 1711011 y la 1734373 para la generación del sello digital y con eso ya me creo el sello correcto, para la cadena original me sirvió mucho el código que compartió Pavel.
Las notas del CFDi-Nomina, son las sigs:
1944988, 1949006, 1956098, 1953642, 1960932, 1972070, 1975152, 1992828, 2000481.
Para cargas los certificados al servidor lo debe de hacer un basis, es la nota: 1300880.
En las tablas IDMX_DI_VPSEPROF y IDMX_DI_VPROFDET haces la relación certificado-división de personal.
Saludos.
Hola Jose, Gracias, pero creo que tengo problemas con mi BASIS en la aplicación de la nota
Para mis pruebas solicite que importaran los cerificados que proporciona el SAT para pruebas
http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Paginas/certificado_sello_digital.aspx
Pero no se cual es su problema, ellos me estan mandando esto:
Hello Rogelio,
that does not help, since here the missing certificate can not be found and all private certificates refer to 'Hector Ornelas Arciga'. There are several notes in the SAP on the subject. Default response is the following:
In your Private certificate, the Issuer is "Héctor Ornelas Arciga",
but there are no Government certificates that have the Subject with
the name "Héctor Ornelas Arciga", so your Private does not fit with
the other certificates. Actually, the Government certificate that
you sent us has the Subject "Servicio de Administración Tributaria",
it is not the same name of the Issuer of your Private certificate.
In this case, we suggest you to contact SAT or Banco de Mexico. They
can provide you the correct Government and Root certificates that fits
with your Private certificate. Also, probably SAT or Banco de Mexico
can provide you a new Private certificate that fits with the Government
and Root certificates that you already have (the same of the ZIP file).
Ya no se hacer o darles
, podrias ayudarme, como se importan y de donde tomaste los certificados ?
Saludos
Rogelio
Hola, estoy ya generando el sello con esta función pero al momento del envío al PAC me dice que el sello no es correcto, tendrán alguna idea de lo que pueda estar sucediendo?
Que tal Hugo.
Lo que sucede es que la estructura que maneja SAP no es la que pide el SAT, hay que mover algunos campos de posición así como identificar los campos que pide SAT que aunque no traigan valor los mande como |0.0| en la cadena original.
Esto me lo comento Pavel García, solo es de ajustar la función.
Puedes crear una nueva estructura Z y aplicar un "Move corresponding".
Asi queda la estructura (son componentes de la estructura del anexo20):
Yo aun no libero la nueva función ya que aun me marca que el sello es invalido, pero de preferencia guarda la cadena en una tabla Z para que la compares con la cadena que debe de ser en base a la información del XML utilizando otro validador de CFD como el Valida CFD.
Hola Vic.
Estas intentando usar los FMs de FI y SD para sellar el CFDi de PY ¿cierto?
Por lo que he leido en esta cadena de conversación, Pavel García ya lo consiguió.
Nosotros aún no tenemos planes de integrar esto en el estándar (sellado del CFDi para PY).
Hola a todos:
Gracias por la ayuda, el problema es que el cliente nada más tiene contratado el servicio de timbrado, y no tienen intención de adquirir otro de sus métodos que ofrece su PAC para el sellado, pero ya logramos hacer en pruebas un timbrado, lo cual requirió generar un nuevo Trans con la disposición requerida por el SAT, para obtener la cadena original.
Ahora me tope con que al regreso del timbre el preCFDi viene en un string, y requiero incertarlo al XML, supongo que mas adelante lo vuelve a transformar, para mostrar en el container el XML.
Por otro lado en el programa RPCPAYMX_CFDI_LOADER al darle una carpeta en donde grabe algunos archivos XML de prueba, no me levanta los archivos, mandando en el log todos erroneos, es requisito que hayan sido timbrados?
Saludos.
Hola Vic.
los XMLs timbrados pueden ser rechazados si el objeto de Transformación no coincide con la estructura del archivo. Puedes ver en el reporte _LOADER el objeto trans que tenemos por estándar (el timbre debe ir en el complemento de Nómina justo antes del nodo de Nómina). Saludos!
Hola Hugo:
Gracias por la referencia, adjunto mis comentarios respecto a la estrategia a seguir para el sellado y timbrado:
a) Sellado SAP y Timbrado PAC. Como comente en otros post anteriores este requiere conocer bien la funcionalidad de factura electrónica de SAP o en su caso contratar una empresa de consultoría especializada en el tema del Sello Digital. En el caso del timbrado este se puede realizar usando una aplicación propia del PAC o a través de un Web Services lanzado a través de un servidor PI o directamente desde ABAP a traves de las clases PROXYs.
b) Sellado y Timbrado PAC. Este escenario es el más sencillo pero algunos CLIENTES no quieren este escenario por temas de seguridad y políticas corporativas de compartir a un tercero la firma electrónica de la empresa. El sellado y timbrado se puede realizar usando una aplicación propia del PAC o a través de un Web Services lanzado a través de un servidor PI o directamente desde ABAP a traves de las clases PROXYs.
En el primer escenario la parte crítica es el armado de la cadena original que es la base del sello digital, como comenté en un post anterior es conveniente grabar en una tabla Z la cadena generada en la función que compartí para compararlo con el que genera el PAC a partir del XML generado.
Voy a tratar de compartir este fin de semana la solución completa de nuestra versión 1.0 que tiene todavía código duro por la urgencia de terminar este fin de mes. En nuestra versión 2.0 ya disponemos de forma flexible la configuración de la cadena original pero este no puedo publicarlo o en todo caso lo podemos ofrecer como consultoría de implementación.
Saludos,
Buenos días,
Nosotros para evitar todo el tema del sellado, contratamos con el PAC que ellos generaran el CFDI completo, no solo el timbrado, a partir del XML que nos arroja SAP y de esa manera estamos trabajando. Tanto en PY como en SD y FI, escogimos esta opción porque nos hace independientes de cualquier cambio que emita el SAT, y el PAC es el que esta obligado a avisarnos de los cambios (si aplican de nuestro lado) o simplemente el los implementa y nosotros nos mantenemos al margen; solo validamos de manera aleatoria que se esten generando correctamente los CFDI.
Saludos.
Sí, algunos PACs ofrecen ese servicio de sellar los CFDis. Así lo hacen en SAP como usuarios de Nómina Mexicana.
Buenos días:
Nosotros ya tenemos la solución de integración SAP-PAC usando Web Services, funcionando en varios clientes.
Si requieren información de la solución favor de enviarme un correo a cpavel.garcia@gmail.com con sus datos para ponernos en contacto.
Saludos,
Hola
Muchas gracias por la información, me puedes orientar o decirme cuales son los pasos exactos para poder colocar el sello digital bidimensional en la factura? aun no sabemos como colocarla.
Además me puedes ayudar para saber como hacer o modificar la plantilla de la facturación para colocar información pendiente en la factura que nuestros clientes requieren.
Saludos.
Rona Saldaña