ZCL_FI_CFDIXMLFE Class Methods Overview
ZCL_FI_CFDIXMLFE Class Methods Overview
public
final
create public .
public section.
methods CREATE_TXT_CANCEL
importing
!I_XBLNR type XBLNR
!I_PAVAL type T001Z-PAVAL
!I_UUID type ZFI_T_PAGOS_CFDI-UUID_PAGO
!I_BELNR type BELNR_D
!I_BUKRS type BUKRS
!I_GJAHR type GJAHR
changing
!T_PARCIAL type ZFI_TT_PAGOS_CFDI .
methods ATTACH_FILE
importing
!I_FILE type STRING
!I_KEY type SWO_TYPEID
!I_TYPE type SWO_OBJTYP
!I_VALUE type XSTRING optional
!I_STRING type STRING optional .
methods CANCEL_PAGO
importing
!I_BKPF type BKPF optional
!T_BSEG type BSEG_T optional
exporting
!E_XML type XSTRING
changing
!T_PARCIAL type ZFI_TT_PAGOS_CFDI optional
!T_PARCIAL_R type ZFI_TT_PAGOS_CFDI optional .
methods CONSTRUCTOR .
methods GET_FILES_GOS
importing
!I_DOCUMENT type SIBFBORIID
exporting
!R_CONTENT_PDF type XSTRING
!R_CONTENT_XML type XSTRING .
methods SAVE_LOG
importing
!I_CREATE type CHAR1 optional
!I_S_LOG type BAL_S_LOG optional
!I_S_MSG type BAL_S_MSG optional
changing
!C_LOG_HANDLE type BALLOGHNDL optional .
methods PARSER_XML_SPEI
importing
!I_XML type STRING
changing
!T_PARSER type ZFI_TT_ABAP_XMLTB .
methods PARSER_XML
importing
!I_XML type STRING
changing
!T_PARSER type ZABAP_XMLTB
exceptions
PARSE_ERROR .
methods POPUP_GET_VALUES
importing
!I_TITLE type CHAR50
!I_TIPO type CHAR1
!I_BUTTONS type CHAR1
exporting
!E_RETURN type CHAR1
changing
!T_FIELDS type KWT_SVAL optional .
methods SAVE_TEXT
importing
!I_KEY type THEAD-TDNAME
!I_ID type THEAD-TDID
!T_TLINE type IDMX_DI_T_TLINE .
methods SUSTITUIR_PAGO
importing
!I_BKPF type BKPF optional
!T_BSEG type BSEG_T optional
changing
!T_PARCIAL type ZFI_TT_PAGOS_CFDI optional .
methods COMPLEMENTO_PAGOS
importing
!I_BKPF type BKPF
!I_KUNNR type KUNNR
!T_BSEG type BSEG_T
!T_AUSZ3 type RE_T_EX_AUSZ3 optional
!I_TIPO type CHAR1
!T_CHEQUE type ZFI_TT_CHEQUE_CFDI optional
!T_SPEI type STRING optional
!T_TRANSFER type ZFI_TT_TRANSFER_CFDI optional
!I_DOC_SUSTITUIR type ZFI_E_DOC_SUST optional
!I_DOCS_SUSTI type ZFI_EDVAL_T optional "<--AGREGADO POR DEML 07.01.201
9 POR F-802
!I_STATUS type ZFI_E_STATUS optional
!I_BANK_V type CHAR3 optional
!I_VBELN type VBELN optional
!T_NUMTARJ type ZFI_TT_TARJETA_CFDI optional
exporting
!E_XML type XSTRING
!E_PDF type XSTRING
!E_MESSAGE type STRING
!E_UUID type ZFI_E_UUID
changing
!T_PARCIAL type ZFI_TT_PAGOS_CFDI
!C_E_MSJ type STRING . "AGREGADO POR DEML 30.10.2018 POR F-799
methods CREATE_PDF
importing
!T_PARCIAL type ZFI_TT_PAGOS_CFDI
!I_PRINT type CHAR1 optional
!T_PAGOS_PDF type ZFIFES_PAGOS_T "ZSDFES_PAGOS_T "<-- MODIFICADO POR DE
ML 10.01.2018 POR F-802
!I_XML type XSTRING
!T_DOCNUM type IDMX_CFDI_STAT_LOG_MX_T optional
!I_VBELN type VBELN_VF optional
!I_KUNNR type KUNNR optional
!I_BUKRS type BUKRS optional
!I_YEAR type GJAHR optional "AGREGADO POR DEML 26.10.2018 POR F-727
changing
!I_PDF type XSTRING
!I_NF type ZFI_T_PAGOS_CFDI-BELNR . "AGREGADO POR DEML 27.10.2018 POR F
-727
methods SPELL_AMOUNT
importing
!I_TOTAL type NETWR
!I_WAERS type WAERS default 'MXN'
exporting
!E_AMOUNT_TEXT type CHAR255 .
methods SEND_MAIL
importing
!I_MAIL type AD_SMTPADR
!I_ATTNAME type SO_OBJ_DES
!I_BUKRS type BUKRS
changing
!T_ATT_XML type SOLIX_TAB optional
!T_ATT_PDF type SOLIX_TAB optional .
methods READ_TVARVC
importing
!I_NAME type RVARI_VNAM
returning
value(R_VALUE) type RSELOPTION .
*** METODO CREADO POR DEML POR F-799 ***
methods ENVIO_COMPLMTO
importing
!LV_PDF_R type XSTRING
!LV_XML_R type XSTRING
!I_SOC type BUKRS
!I_YEAR type GJAHR
!I_NDOC type ZFI_T_PAGOS_CFDI-BELNR
!I_CLIE type KUNNR
changing
!E_MENSAJE type I .
methods GET_NOCERTIFICADO
importing
!I_BUKRS type BUKRS
changing
!I_XML_STRING type STRING
!I_NOCER type STRING
!I_CERTI type STRING
!I_SELLO type STRING .
PROTECTED SECTION.
private section.
types:
BEGIN OF ty_file,
line TYPE string,
END OF ty_file .
types:
BEGIN OF ty_itab,
line TYPE x LENGTH 255,
END OF ty_itab .
methods CREATE_CHAIN
importing
!I_PAGOS type ZFIFES_PAGOS "ZSDFES_PAGOS "<-- MODIFICADO POR DEML 10.01
.2018 POR F-802
exporting
!E_CHAIN type STRING .
methods GET_SIGN
importing
!I_BUKRS type BUKRS
!I_ERDAT type ERDAT
!I_ERZEIT type CPUTM
!I_CHAIN type STRING
exporting
!E_SELLO type STRING
!E_CERTIF type STRING
!E_NOCERTIF type STRING .
methods PROCESS_DATA_CANCEL
importing
!I_BKPF type BKPF
!I_KUNNR type KUNNR
!T_BSEG type BSEG_T
!T_DOCNUM type IDMX_CFDI_STAT_LOG_MX_T optional
!I_TIPO type CHAR1
!T_CHEQUE type ZFI_TT_CHEQUE_CFDI optional
!I_SPEI type STRING optional
!I_DOC_SUSTITUIR type ZFI_E_DOC_SUST optional
!I_STATUS type ZFI_E_STATUS optional
!I_BANK_V type CHAR3 optional
!T_MBANCO type ZFI_S_BANCO_CFDI optional
exporting
!E_XML type XSTRING
!E_MESSAGE type STRING
changing
!T_PARCIAL type ZFI_TT_PAGOS_CFDI optional
!T_DATA_ADIC type ZFI_TT_PAGO_ADIC optional
!T_CREATE_TXT type ZSDFES_PAGO optional .
methods READ_TEXT
importing
!I_ID type THEAD-TDID
!I_NAME type THEAD-TDNAME
!I_OBJECT type THEAD-TDOBJECT
changing
!T_LINES type EFG_TAB_TLINE optional .
methods CREATE_XML
importing
!I_BKPF type BKPF optional
!I_CANCEL type FLAG optional
!E_XML type XSTRING
exporting
!E_XML_R type XSTRING
!E_MESSAGE type STRING
!E_UUID type ZFI_E_UUID
changing
!T_PARCIAL type ZFI_TT_PAGOS_CFDI .
methods DOWNLOAD_XML
importing
!I_FILE type STRING .
methods PROCESS_DATA
importing
!I_BKPF type BKPF
!I_KUNNR type KUNNR
!I_VBELN type VBELN optional
!T_BSEG type BSEG_T
!T_BSEG_N type BSEG_T optional
!T_AUSZ3 type RE_T_EX_AUSZ3 optional
!T_DOCNUM type IDMX_CFDI_STAT_LOG_MX_T optional
!I_TIPO type CHAR1
!T_CHEQUE type ZFI_TT_CHEQUE_CFDI optional
!T_SPEI type STRING optional
!T_TRANSFER type ZFI_TT_TRANSFER_CFDI optional
!I_DOC_SUSTITUIR type ZFI_E_DOC_SUST optional
!I_DOCS_SUSTI type ZFI_EDVAL_T optional "<--AGREGADO POR DEML 07.01.201
9 POR F-802
!I_STATUS type ZFI_E_STATUS optional
!I_BANK_V type CHAR3 optional
!T_NUMTARJ type ZFI_TT_TARJETA_CFDI optional
exporting
!E_XML type XSTRING
!E_MESSAGE type STRING
!E_PAGOS type ZFIFES_PAGOS_T "zsdfes_pagos_t "<-- MODIFICADO POR DEML 1
0.01.2018 POR F-802
changing
!T_PARCIAL type ZFI_TT_PAGOS_CFDI optional
!T_DATA_ADIC type ZFI_TT_PAGO_ADIC optional .
methods GET_EMISOR_DOM
importing
!SOCIEDAD type BUKRS
exporting
!DOMICILIO type ZSDFES_EXPEMISOR .
methods GET_RECEPTOR_DOM
importing
!CLIENTE type KUNNR
exporting
!DOMICILIO type ZSDFES_EXPEMISOR .
methods FORMAT_QRCODE
importing
!I_SENDER_RFC type CHAR20
!I_RECEIVER_RFC type CHAR20
!I_AMOUNT type CHAR20
!I_UUID type CHAR36
!I_SELLO type STRING
exporting
!E_QRCODE type CHAR200 .
methods ARMA_FINANCIERAS
importing
!I_ID type THEAD-TDID
!I_NAME type THEAD-TDNAME
!I_OBJECT type THEAD-TDOBJECT
changing
!T_LINES type EFG_TAB_TLINE optional .
ENDCLASS.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_FI_CFDIXMLFE->ARMA_FINANCIERAS
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_ID TYPE THEAD-TDID
* | [--->] I_NAME TYPE THEAD-TDNAME
* | [--->] I_OBJECT TYPE THEAD-TDOBJECT
* | [<-->] T_LINES TYPE EFG_TAB_TLINE(opti
onal)
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD ARMA_FINANCIERAS.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->ATTACH_FILE
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_FILE TYPE STRING
* | [--->] I_KEY TYPE SWO_TYPEID
* | [--->] I_TYPE TYPE SWO_OBJTYP
* | [--->] I_VALUE TYPE XSTRING(optional)
* | [--->] I_STRING TYPE STRING(optional)
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD attach_file.
* Los documentos serán anexados a la factura.
IF sy-subrc NE 0.
* Regresar código de retorno con error
ENDIF.
lt_objcont_bin = lt_file.
* ls_obj_data-doc_size = lines( lt_objcont_bin ) * '255'.
ls_obj_data-doc_size = lv_doc_size.
ENDIF.
IF i_string IS NOT INITIAL.
lv_string = i_string.
REPLACE ALL OCCURRENCES OF '#' IN lv_string WITH ''.
lt_object_sol = lt_file_string.
ENDIF.
ls_obj_data-obj_langu = sy-langu.
lv_folder_id = ls_folder_id.
IF sy-subrc NE 0.
ENDIF.
ls_rolea-objkey = i_key.
ls_rolea-objtype = i_type.
ls_rel_doc-objkey = ls_instid-doc_id.
ls_rel_doc-objtype = 'MESSAGE'.
IF sy-subrc NE 0.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->CANCEL_PAGO
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_BKPF TYPE BKPF(optional)
* | [--->] T_BSEG TYPE BSEG_T(optional)
* | [<---] E_XML TYPE XSTRING
* | [<-->] T_PARCIAL TYPE ZFI_TT_PAGOS_CFDI(
optional)
* | [<-->] T_PARCIAL_R TYPE ZFI_TT_PAGOS_CFDI(o
ptional)
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD cancel_pago.
t_parcial_r[] = t_parcial[].
* Se debe ir a recuperar los datos de Cheque y SPEI si es que se tienen.
SELECT SINGLE belnr bukrs gjahr xblnr uuid_pago INTO ( lv_belnr, lv_bukrs,
lv_gjahr, lv_xblnr, lv_uuid )
FROM zfi_t_pagos_cfdi
WHERE belnr = i_bkpf-stblg
AND bukrs = i_bkpf-bukrs
AND gjahr = i_bkpf-gjahr.
IF sy-subrc EQ 0.
SELECT SINGLE paval FROM t001z INTO lv_paval
WHERE bukrs = lv_bukrs
AND party = 'MX_RFC'.
ENDIF.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->COMPLEMENTO_PAGOS
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_BKPF TYPE BKPF
* | [--->] I_KUNNR TYPE KUNNR
* | [--->] T_BSEG TYPE BSEG_T
* | [--->] T_AUSZ3 TYPE RE_T_EX_AUSZ3(opti
onal)
* | [--->] I_TIPO TYPE CHAR1
* | [--->] T_CHEQUE TYPE ZFI_TT_CHEQUE_CFDI
(optional)
* | [--->] T_SPEI TYPE STRING(optional)
* | [--->] T_TRANSFER TYPE ZFI_TT_TRANSFER_CFD
I(optional)
* | [--->] I_DOC_SUSTITUIR TYPE ZFI_E_DOC_SUST(opti
onal)
* | [--->] I_DOCS_SUSTI TYPE ZFI_EDVAL_T(optiona
l)
* | [--->] I_STATUS TYPE ZFI_E_STATUS(optio
nal)
* | [--->] I_BANK_V TYPE CHAR3(optional)
* | [--->] I_VBELN TYPE VBELN(optional)
* | [--->] T_NUMTARJ TYPE ZFI_TT_TARJETA_CFD
I(optional)
* | [<---] E_XML TYPE XSTRING
* | [<---] E_PDF TYPE XSTRING
* | [<---] E_MESSAGE TYPE STRING
* | [<---] E_UUID TYPE ZFI_E_UUID
* | [<-->] T_PARCIAL TYPE ZFI_TT_PAGOS_CFDI
* | [<-->] C_E_MSJ TYPE STRING
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD complemento_pagos.
TYPES: BEGIN OF ty_factura,
vbeln TYPE vbeln,
gjahr TYPE gjahr,
END OF ty_factura.
* IF lt_bseg_n[] IS INITIAL.
lt_bseg_n[] = t_bseg[].
DELETE lt_bseg_n[] WHERE bschl NE '08'.
* ENDIF.
* Obtener que facturas se estan pagadando,
LOOP AT t_bseg ASSIGNING <fs_bseg> WHERE rebzg IS NOT INITIAL
AND shkzg EQ 'S'.
IF <fs_bseg>-vbeln IS NOT INITIAL.
ls_factura-vbeln = <fs_bseg>-vbeln.
ls_factura-gjahr = <fs_bseg>-rebzj.
lv_kunnr = <fs_bseg>-kunnr.
APPEND ls_factura TO lt_factura.
ELSE.
SELECT SINGLE awkey
FROM bkpf
INTO z_awkey
WHERE bukrs EQ i_bkpf-bukrs
AND belnr EQ <fs_bseg>-rebzg
AND gjahr EQ <fs_bseg>-rebzj.
IF z_awkey IS NOT INITIAL.
ls_factura-vbeln = z_awkey.
ls_factura-gjahr = <fs_bseg>-rebzj.
lv_kunnr = <fs_bseg>-kunnr.
APPEND ls_factura TO lt_factura.
ELSE.
ls_factura-vbeln = <fs_bseg>-rebzg.
ls_factura-gjahr = <fs_bseg>-rebzj.
lv_kunnr = <fs_bseg>-kunnr.
APPEND ls_factura TO lt_factura.
ENDIF.
ENDIF.
ENDLOOP.
e_message = lv_message.
DATA flag TYPE char2.
IMPORT flag = flag FROM MEMORY ID 'flag'.
IF flag eq 'VR' and i_tipo ne 1.
LOOP AT lt_parciales ASSIGNING <fs_parcial>.
IF <fs_parcial>-status IS INITIAL.
<fs_parcial>-status = 'I'.
ENDIF.
MODIFY zfi_t_pagos_cfdi FROM <fs_parcial>.
ENDLOOP.
else.
IF lv_message IS INITIAL.
me->create_xml( EXPORTING i_bkpf = i_bkpf
e_xml = lv_pagos
IMPORTING e_xml_r = lv_xml
e_uuid = e_uuid
CHANGING t_parcial = lt_parciales ).
t_parcial[] = lt_parciales[].
e_xml = lv_xml. "Regresa el XML timbrado
"Solo estatus que eran R, I o Vacío y ya timbraron
IF ( lv_xml IS NOT INITIAL AND i_status <> 'CR' ).
me->create_pdf( EXPORTING t_parcial = lt_parciales
i_print = lv_print
t_pagos_pdf = lt_pagos
i_xml = lv_xml
t_docnum = lt_docnum
i_vbeln = ls_factura-vbeln
i_kunnr = i_kunnr
i_bukrs = i_bkpf-bukrs
I_YEAR = LS_FACTURA-GJAHR "AGREGADO
POR DEML 26.10.2018 F-727
CHANGING i_pdf = lv_pdf
I_NF = LV_DOC ). "AGREGADO POR DEM
L 27.10.2018 F-799
"MANDA CORREO...
me->ENVIO_COMPLMTO( EXPORTING
LV_XML_R = E_XML
LV_PDF_R = E_PDF
I_CLIE = I_KUNNR
I_NDOC = LV_DOC
I_SOC = I_BKPF-BUKRS
I_YEAR = LS_FACTURA-GJAHR
CHANGING
E_MENSAJE = VMENSAJE ).
CASE VMENSAJE.
WHEN 0.
LOOP AT T_PARCIAL ASSIGNING <FS_PARCIAL>.
<FS_PARCIAL>-STATUSENV = '@08@'.
<FS_PARCIAL>-LOGENV = 'Envio correcto'.
ENDLOOP.
C_E_MSJ = 'Envio REP correcto'.
WHEN 1.
LOOP AT T_PARCIAL ASSIGNING <FS_PARCIAL>.
<FS_PARCIAL>-STATUSENV = '@0A@'.
<FS_PARCIAL>-LOGENV = 'Envio erroneo'.
ENDLOOP.
C_E_MSJ = 'Envio REP erroneo'.
WHEN 2.
LOOP AT T_PARCIAL ASSIGNING <FS_PARCIAL>.
<FS_PARCIAL>-STATUSENV = '@0A@'.
<FS_PARCIAL>-LOGENV = 'Sin correo'.
ENDLOOP.
C_E_MSJ = 'Envio REP erroneo'.
WHEN 3.
LOOP AT T_PARCIAL ASSIGNING <FS_PARCIAL>.
<FS_PARCIAL>-STATUSENV = '@0A@'.
<FS_PARCIAL>-LOGENV = 'Correo erroneo'.
ENDLOOP.
C_E_MSJ = 'Envio REP erroneo'.
ENDCASE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->CONSTRUCTOR
* +--------------------------------------------------------------------------
-----------------------+
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD constructor.
SELECT *
FROM tvarvc
INTO TABLE lt_tvarvc
WHERE name EQ 'ZCL_FI_CFDIXMLFE'.
IF ls_tvarvc-low EQ 'PATH'.
lv_path = ls_tvarvc-high.
ENDIF.
ENDLOOP.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_FI_CFDIXMLFE->CREATE_CHAIN
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_PAGOS TYPE ZFIFES_PAGOS
* | [<---] E_CHAIN TYPE STRING
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD create_chain.
ls_pagos = i_pagos.
CONDENSE ls_pagos-emisor-rfc.
CONCATENATE z_cadena k_pipe ls_pagos-emisor-rfc INTO z_cadena.
CONDENSE z_cadena.
CONCATENATE z_cadena k_pipe ls_pagos-emisor-nombre INTO z_cadena.
CONDENSE ls_pagos-emisor-regimenfiscal.
CONCATENATE z_cadena k_pipe ls_pagos-emisor-regimenfiscal INTO z_cadena.
CONDENSE ls_pagos-receptor-rfc.
CONCATENATE z_cadena k_pipe ls_pagos-receptor-rfc INTO z_cadena.
CONDENSE ls_pagos-receptor-nombre.
CONCATENATE z_cadena k_pipe ls_pagos-receptor-nombre INTO z_cadena.
CONCATENATE z_cadena k_pipe ls_pagos-receptor-domiciliofiscalreceptor INTO
z_cadena.
CONDENSE ls_pagos-receptor-usocfdi.
CONCATENATE z_cadena k_pipe ls_pagos-receptor-regimenfiscalreceptor INTO z
_cadena.
CONCATENATE z_cadena k_pipe ls_pagos-receptor-usocfdi INTO z_cadena.
CONDENSE ls_pagos-versionp.
CONCATENATE z_cadena k_pipe ls_pagos-versionp INTO z_cadena.
EXIT.
ENDLOOP.
"CPB-FIN Campos nuevos.
z_string = <fs_pago>-monto.
CONDENSE z_string.
CONCATENATE z_cadena k_pipe z_string INTO z_cadena.
"***condicion diferente de MX
IF <fs_pago>-rfcemisorctaord IS NOT INITIAL.
CONDENSE <fs_pago>-rfcemisorctaord.
CONCATENATE z_cadena k_pipe <fs_pago>-rfcemisorctaord INTO z_cadena.
ENDIF.
"*********************************************************
"** Documento relacionado **
"*********************************************************
LOOP AT <fs_pago>-doctorelacionado ASSIGNING <fs_doctorelacionado>.
CONDENSE <fs_doctorelacionado>-iddocumento.
CONCATENATE z_cadena k_pipe <fs_doctorelacionado>-iddocumento INTO z_c
adena.
CONDENSE <fs_doctorelacionado>-monedadr.
CONCATENATE z_cadena k_pipe <fs_doctorelacionado>-monedadr INTO z_cade
na.
* CONDENSE <fs_doctorelacionado>-metododepagodr.
* CONCATENATE z_cadena k_pipe <fs_doctorelacionado>-metododepagodr IN
TO z_cadena.
z_string = <fs_doctorelacionado>-numparcialidad.
CONDENSE z_string.
CONCATENATE z_cadena k_pipe z_string INTO z_cadena.
z_string = <fs_doctorelacionado>-impsaldoant.
CONDENSE z_string.
CONCATENATE z_cadena k_pipe z_string INTO z_cadena.
z_string = <fs_doctorelacionado>-imppagado.
CONDENSE z_string.
CONCATENATE z_cadena k_pipe z_string INTO z_cadena.
z_string = <fs_doctorelacionado>-impsaldoinsoluto.
CONDENSE z_string.
CONCATENATE z_cadena k_pipe z_string INTO z_cadena.
"*********************************************************
"** ImpuestosP TrasladosP **
"*********************************************************
LOOP AT <fs_pago>-trasladosp ASSIGNING <fs_trasladop>.
CONDENSE <fs_trasladop>-trasladop-basep.
CONCATENATE z_cadena k_pipe <fs_trasladop>-trasladop-basep INTO z_cade
na.
CONDENSE <fs_trasladop>-trasladop-impuestop.
CONCATENATE z_cadena k_pipe <fs_trasladop>-trasladop-impuestop INTO z_
cadena.
CONDENSE <fs_trasladop>-trasladop-tipofactorp.
CONCATENATE z_cadena k_pipe <fs_trasladop>-trasladop-tipofactorp INTO
z_cadena.
CONDENSE <fs_trasladop>-trasladop-tasaocuotap.
CONCATENATE z_cadena k_pipe <fs_trasladop>-trasladop-tasaocuotap INTO
z_cadena.
CONDENSE <fs_trasladop>-trasladop-importep.
CONCATENATE z_cadena k_pipe <fs_trasladop>-trasladop-importep INTO z_c
adena.
ENDLOOP.
ENDLOOP.
CONCATENATE z_cadena k_pipe k_pipe INTO z_cadena.
e_chain = z_cadena.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->CREATE_PDF
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] T_PARCIAL TYPE ZFI_TT_PAGOS_CFDI
* | [--->] I_PRINT TYPE CHAR1(optional)
* | [--->] T_PAGOS_PDF TYPE ZFIFES_PAGOS_T
* | [--->] I_XML TYPE XSTRING
* | [--->] T_DOCNUM TYPE IDMX_CFDI_STAT_LOG
_MX_T(optional)
* | [--->] I_VBELN TYPE VBELN_VF(optional)
* | [--->] I_KUNNR TYPE KUNNR(optional)
* | [--->] I_BUKRS TYPE BUKRS(optional)
* | [--->] I_YEAR TYPE GJAHR(optional)
* | [<-->] I_PDF TYPE XSTRING
* | [<-->] I_NF TYPE ZFI_T_PAGOS_CFDI-
BELNR
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD create_pdf.
ls_pago-numoperacion = <fs_pago>-numoperacion.
ls_pago-rfcemisorctaord = <fs_pago>-rfcemisorctaord.
ls_pago-nombancoordext = <fs_pago>-nombancoordext.
ls_pago-ctaordenante = <fs_pago>-ctaordenante.
ls_pago-rfcemisorctaben = <fs_pago>-rfcemisorctaben.
ls_pago-ctabeneficiario = <fs_pago>-ctabeneficiario.
ls_pago-tipocadpago = <fs_pago>-tipocadpago.
ls_pago-certpago = <fs_pago>-certpago.
ls_pago-cadpago = <fs_pago>-cadpago.
ls_pago-sellopago = <fs_pago>-sellopago.
lv_formadepagop = <fs_pago>-formadepagop.
LOOP AT <fs_pago>-doctorelacionado ASSIGNING <fs_docr>.
ls_doctorelacionado-iddocumento = <fs_docr>-iddocumento.
TRANSLATE ls_doctorelacionado-iddocumento TO UPPER CASE.
ls_doctorelacionado-serie = <fs_docr>-serie.
ls_doctorelacionado-folio = <fs_docr>-folio.
ls_doctorelacionado-monedadr = <fs_docr>-monedadr.
ls_doctorelacionado-tipocambiodr = <fs_docr>-tipocambiodr.
ls_doctorelacionado-metododepagodr = <fs_docr>-metododepagodr.
ls_doctorelacionado-numparcialidad = <fs_docr>-numparcialidad.
ls_doctorelacionado-impsaldoant = <fs_docr>-impsaldoant.
ls_doctorelacionado-imppagado = <fs_docr>-imppagado.
ls_doctorelacionado-impsaldoinsoluto = <fs_docr>-impsaldoinsoluto.
APPEND ls_doctorelacionado TO ls_pago-doctorelacionado[].
CLEAR ls_doctorelacionado.
*
*** INI FCR Ajustes impresión CFDI 4.0 INI ***
LOOP AT <fs_docr>-impuestosdr ASSIGNING FIELD-
SYMBOL(<fs_trasladosdr>).
ls_tax_comple-folio = <fs_docr>-folio.
ls_tax_comple-basedr = <fs_trasladosdr>-trasladosdr-basedr.
ls_tax_comple-impuestodr = <fs_trasladosdr>-trasladosdr-
impuestodr.
ls_tax_comple-tipofactordr = <fs_trasladosdr>-trasladosdr-
tipofactordr.
ls_tax_comple-tasaocuotadr = <fs_trasladosdr>-trasladosdr-
tasaocuotadr.
ls_tax_comple-importedr = <fs_trasladosdr>-trasladosdr-
importedr.
CONDENSE: ls_tax_comple-basedr,
ls_tax_comple-impuestodr,
ls_tax_comple-tipofactordr,
ls_tax_comple-tasaocuotadr,
ls_tax_comple-importedr.
APPEND ls_tax_comple TO lt_tax_comple.
ENDLOOP.
*** FIN FCR Ajustes impresión CFDI 4.0 FIN ***
*
ENDLOOP.
*
*** INI FCR Ajustes impresión CFDI 4.0 INI ***
LOOP AT <fs_pago>-trasladosp[] ASSIGNING FIELD-
SYMBOL(<fs_trasladosp>).
ls_tax_comple-basedr = <fs_trasladosp>-trasladop-basep.
ls_tax_comple-impuestodr = <fs_trasladosp>-trasladop-impuestop.
ls_tax_comple-tipofactordr = <fs_trasladosp>-trasladop-tipofactorp.
ls_tax_comple-tasaocuotadr = <fs_trasladosp>-trasladop-tasaocuotap.
ls_tax_comple-importedr = <fs_trasladosp>-trasladop-importep.
CONDENSE: ls_tax_comple-basedr,
ls_tax_comple-impuestodr,
ls_tax_comple-tipofactordr,
ls_tax_comple-tasaocuotadr,
ls_tax_comple-importedr.
APPEND ls_tax_comple TO lt_tax_complep.
ENDLOOP.
*** FIN FCR Ajustes impresión CFDI 4.0 FIN ***
*
ENDLOOP.
APPEND ls_pago TO ls_pagos-pago[].
*
*** INI FCR Ajustes impresión CFDI 4.0 INI ***
SELECT SINGLE pstlz
FROM kna1
INTO @DATA(lv_pstlz)
WHERE kunnr EQ @i_kunnr.
*** FIN FCR Ajustes impresión CFDI 4.0 FIN ***
*
**********************************************************************
ls_pagos-relacionados-tiporelacion = <fs_pagos>-relacionados-
tiporelacion.
**********************************************************************
*** SEGMENTO MODIFICADO POR DEML 10.01.2019 POR F-802 ***
*** CÓDIGO PREVIO COMENTADO CON 3 '*' ***
**********************************************************************
*** ls_pagos-relacionados-uuid = <fs_pagos>-relacionados-uuid.
LOOP AT <fs_pagos>-relacionados-uuid ASSIGNING <fs_rela>.
APPEND <fs_rela>-uuid_r TO ls_pagos-relacionados-uuid[].
ENDLOOP.
**********************************************************************
ls_pagos-emisor-rfc = <fs_pagos>-emisor-rfc.
ls_pagos-emisor-nombre = <fs_pagos>-emisor-nombre.
ls_pagos-emisor-regimenfiscal = <fs_pagos>-emisor-regimenfiscal.
ls_pagos-receptor-rfc = <fs_pagos>-receptor-rfc.
ls_pagos-receptor-nombre = <fs_pagos>-receptor-nombre.
ls_pagos-receptor-usocfdi = <fs_pagos>-receptor-usocfdi.
ls_pagos-receptor-numregidtrib = <fs_pagos>-receptor-numregidtrib.
ls_pagos-receptor-residenciafiscal = <fs_pagos>-receptor-
residenciafiscal.
lv_company = ls_pagos-emisor-nombre.
ENDIF.
* Importe en Letra
lv_monto = ls_pago-monto.
lv_moneda = ls_pago-monedap.
spell_amount( EXPORTING i_total = lv_monto
i_waers = lv_moneda
IMPORTING e_amount_text = lv_amount_text ).
lv_iletra = lv_amount_text.
* Inicializar el formulario.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = lc_formname4
IMPORTING
fm_name = lv_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
CLEAR: z_bin.
i_pdf = lv_pdf_file.
lv_ruta_server = '/usr/sap/InterfaceSAP/XML_CFDI/CC_PAGO/Resultado_XML_CC/
'.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->CREATE_TXT_CANCEL
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_XBLNR TYPE XBLNR
* | [--->] I_PAVAL TYPE T001Z-PAVAL
* | [--->] I_UUID TYPE ZFI_T_PAGOS_CFDI-
UUID_PAGO
* | [--->] I_BELNR TYPE BELNR_D
* | [--->] I_BUKRS TYPE BUKRS
* | [--->] I_GJAHR TYPE GJAHR
* | [<-->] T_PARCIAL TYPE ZFI_TT_PAGOS_CFDI
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD create_txt_cancel.
* TYPES: BEGIN OF ty_line,
* line TYPE c LENGTH 3000,
* END OF ty_line.
*
* DATA: lt_line TYPE STANDARD TABLE OF ty_line,
* lv_length TYPE i.
*
* DATA: lv_xstring TYPE xstring,
* lv_string TYPE string,
* lv_serie TYPE string,
* lv_folio TYPE string.
*
* DATA: ls_input TYPE zcfdi_cancelar_documento_soap1,
* ls_output TYPE zcfdi_cancelar_documento_soap,
* lo_salv_msg TYPE REF TO cx_salv_msg,
* lo_msg TYPE REF TO cx_ai_system_fault.
*
* CONSTANTS c_serie TYPE string VALUE 'DZ'.
*
* SPLIT i_xblnr AT '-' INTO lv_serie lv_folio.
*
* CONCATENATE i_paval '|'
* c_serie '|'
* i_belnr '|'
* i_uuid
* INTO lv_string.
*
* APPEND lv_string TO lt_line.
*
**---BAJA EL TXT A RUTA LOCAL
* cl_gui_frontend_services=>gui_download( EXPORTING filename
= 'C:\DocumentosPac\Pago_Cancel.txt'
* filetype
= 'ASC'
* IMPORTING filelength
= lv_length
* CHANGING data_tab
= lt_line
* EXCEPTIONS file_write_error
= 1
* no_batch
= 2
* gui_refuse_fil
etransfer = 3
* invalid_type
= 4
* no_authority
= 5
* unknown_error
= 6
* header_not_all
owed = 7
* separator_not_
allowed = 8
* filesize_not_a
llowed = 9
* header_too_lon
g = 10
* dp_error_creat
e = 11
* dp_error_send
= 12
* dp_error_write
= 13
* unknown_dp_err
or = 14
* access_denied
= 15
* dp_out_of_memo
ry = 16
* disk_full
= 17
* dp_timeout
= 18
* file_not_found
= 19
* dataprovider_e
xception = 20
* control_flush_
error = 21
* not_supported_
by_gui = 22
* error_no_gui
= 23
* OTHERS
= 24 ).
*
*
**Convierte string a Xstring
* CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
* EXPORTING
* text = lv_string
* mimetype = 'SPACE'
* IMPORTING
* buffer = lv_xstring
* EXCEPTIONS
* failed = 1
* OTHERS = 2.
*
* CLEAR lv_string.
**Convierte Xstring a Base64
* CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'
* EXPORTING
* input = lv_xstring
* IMPORTING
* output = lv_string
* EXCEPTIONS
* OTHERS = 1.
*
***********************************************************************Consum
o de WS
* ls_input-no_documento_sap = i_belnr.
* ls_input-sociedad = i_bukrs.
* ls_input-ejercicio = i_gjahr.
* ls_input-tipo_documento = 'P'.
* ls_input-archivo_txt = lv_string.
*
* TRY.
* DATA(lo_proxy) = NEW zcfdi_co_default_soap( 'ZCFDI_PUERTA' ).
*
* CATCH cx_salv_msg INTO lo_salv_msg.
* WRITE lo_salv_msg->get_longtext( ).
* ENDTRY.
*
* TRY.
* lo_proxy->cancelar_documento( EXPORTING input = ls_input
* IMPORTING output = ls_output ).
*
* CATCH cx_ai_system_fault INTO lo_msg.
* WRITE lo_msg->get_longtext( ).
* ENDTRY.
*
* IF ls_output-cancelar_documento_result IS NOT INITIAL. "Si existe una r
espuesta genera el Log de errores y acutualiza la tabla Z con R en Status
*****************************************************************************
*****************************
**** CATCHS
* DATA: zcl_sys_exception TYPE REF TO cx_ai_system_fault,
* zcl_app_exception TYPE REF TO cx_ai_application_fault,
* zcl_cx_root TYPE REF TO cx_root,
* z_mensaje TYPE string.
*
******LOG
* DATA: wa_log TYPE bal_s_log,
* wa_log_handle TYPE balloghndl,
* lt_log_handle TYPE bal_t_logh,
* wa_msg TYPE bal_s_msg,
* z_msgid TYPE sy-msgid VALUE 'SY',
* z_msgno TYPE sy-msgno VALUE '002',
* z_log TYPE char50,
* z_long TYPE i,
* z_char TYPE i,
* z_cont TYPE n LENGTH 1,
* z_campo TYPE c LENGTH 20,
* z_new TYPE string,
* z_message TYPE string.
*
**** Variables
* DATA: lv_doc_type TYPE char1.
*
* FIELD-SYMBOLS: <fs_parcial> TYPE zfi_t_pagos_cfdi.
*
* LOOP AT t_parcial ASSIGNING <fs_parcial>.
* <fs_parcial>-status = 'CR'.
* ENDLOOP.
* IF sy-subrc EQ 0.
** Define el Heaer del Log
* CONCATENATE 'Log CANCEL PAYMENT CDFI:' <fs_parcial>-bukrs <fs_parc
ial>-belnr <fs_parcial>-gjahr
* INTO wa_log-extnumber SEPARATED BY space.
* wa_log-aluser = sy-uname.
* wa_log-alprog = sy-repid.
* wa_log-altcode = sy-tcode.
* wa_log-object = 'Z_IDMX'.
* wa_log-subobject = 'Z_IDMX_SUB'.
* wa_log-aldate = sy-datlo.
* wa_log-altime = sy-timlo.
*
**Crea Log
* CLEAR: wa_log_handle.
*
* me->save_log( EXPORTING i_create = abap_true
* i_s_log = wa_log
* CHANGING c_log_handle = wa_log_handle ).
*
* " ----------------------------------------------------------------
* " Send TXT File to TI Web Service
* " ----------------------------------------------------------------
* TRY.
*
* CATCH cx_ai_system_fault INTO zcl_sys_exception.
* z_mensaje = zcl_sys_exception->get_text( ).
*
**Build Error message
* CLEAR: z_log, wa_msg.
* CONCATENATE 'Error WS Payment Consumer:' <fs_parcial>-bukrs <f
s_parcial>-belnr <fs_parcial>-gjahr
* INTO z_log SEPARATED BY space.
* wa_msg-msgty = 'E'.
* wa_msg-msgid = z_msgid.
* wa_msg-msgno = z_msgno.
* wa_msg-msgv1 = z_log.
* wa_msg-msgv2 = z_mensaje.
* wa_msg-probclass = 2.
* lv_doc_type = 'C'.
*
* me->save_log( EXPORTING i_create = abap_false
* i_s_msg = wa_msg
* CHANGING c_log_handle = wa_log_handle ).
*
* ENDTRY.
* TRY .
********* Exception System Fault
************************************************************
* CATCH cx_ai_system_fault INTO zcl_sys_exception.
* z_mensaje = zcl_sys_exception->get_text( ).
*
**Build Error message
* CLEAR: z_log, wa_msg.
* CONCATENATE 'Error System Payment Fault:' <fs_parcial>-bukrs <
fs_parcial>-belnr <fs_parcial>-gjahr
* INTO z_log SEPARATED BY space.
* wa_msg-msgty = 'E'.
* wa_msg-msgid = z_msgid.
* wa_msg-msgno = z_msgno.
* wa_msg-msgv1 = z_log.
* wa_msg-msgv2 = z_mensaje.
* wa_msg-probclass = 2.
* lv_doc_type = 'C'.
*
* me->save_log( EXPORTING i_create = abap_false
* i_s_msg = wa_msg
* CHANGING c_log_handle = wa_log_handle ).
*
********* Exception Application Fault
************************************************************
* CATCH cx_ai_application_fault INTO zcl_app_exception.
* z_mensaje = zcl_app_exception->get_text( ).
*
**Build Error message
* CLEAR: z_log, wa_msg.
* CONCATENATE 'Error Application Payment Fault:' <fs_parcial>-
bukrs <fs_parcial>-belnr <fs_parcial>-gjahr
* INTO z_log SEPARATED BY space.
* wa_msg-msgty = 'E'.
* wa_msg-msgid = z_msgid.
* wa_msg-msgno = z_msgno.
* wa_msg-msgv1 = z_log.
* wa_msg-msgv2 = z_mensaje.
* wa_msg-probclass = 2.
* lv_doc_type = 'C'.
*
* me->save_log( EXPORTING i_create = abap_false
* i_s_msg = wa_msg
* CHANGING c_log_handle = wa_log_handle ).
********* SOAP FAULT
************************************************************
* CATCH cx_root INTO zcl_cx_root. "cx_ai_so
ap_fault
* z_mensaje = zcl_cx_root->get_text( ).
*
* CLEAR: z_log, wa_msg.
* CONCATENATE 'Error Stamp Payment Document:' <fs_parcial>-bukrs
<fs_parcial>-belnr <fs_parcial>-gjahr
* INTO z_log SEPARATED BY space.
**Build Error message
* wa_msg-msgty = 'E'.
* wa_msg-msgid = z_msgid.
* wa_msg-msgno = z_msgno.
* wa_msg-msgv1 = z_log.
* wa_msg-msgv2 = z_mensaje.
* wa_msg-probclass = 2.
*
* me->save_log( EXPORTING i_create = abap_false
* i_s_msg = wa_msg
* CHANGING c_log_handle = wa_log_handle ).
*
* ENDTRY.
* ENDIF.
* ELSE.
* LOOP AT t_parcial ASSIGNING FIELD-SYMBOL(<fs_parcial_e>).
**Actuliza la tabla t_parcial
* <fs_parcial_e>-status = 'CE'. "Enviado
* ENDLOOP.
* ENDIF.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_FI_CFDIXMLFE->CREATE_XML
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_BKPF TYPE BKPF(optional)
* | [--->] I_CANCEL TYPE FLAG(optional)
* | [--->] E_XML TYPE XSTRING
* | [<---] E_XML_R TYPE XSTRING
* | [<---] E_MESSAGE TYPE STRING
* | [<---] E_UUID TYPE ZFI_E_UUID
* | [<-->] T_PARCIAL TYPE ZFI_TT_PAGOS_CFDI
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD create_xml.
** Se mandara a llamar el WS para timbrar el PAGO
*
*** Proxy
* DATA: zcl_proxy TYPE REF TO ZCFDI_CO_TIMBRADO_SERVICE, " --> WS de Factur
acion
* is_input TYPE ZCFDI_TIMBRADO1, "MOD_ALSA
* is_output TYPE ZCFDI_TIMBRADO_RESPONSE1. "MOD_ALSAZCFDI_TIMBRADO_RE
SPONSE1
*
**** CATCHS
* DATA: zcl_sys_exception TYPE REF TO cx_ai_system_fault,
* zcl_app_exception TYPE REF TO cx_ai_application_fault,
* zcl_cx_root TYPE REF TO cx_root,
* z_mensaje TYPE string.
********
* DATA: ls_user TYPE zcfdicanceluname. "parametros de entrada WS
*
******LOG
DATA: wa_log TYPE bal_s_log,
wa_log_handle TYPE balloghndl,
* lt_log_handle TYPE bal_t_logh,
wa_msg TYPE bal_s_msg,
z_msgid TYPE sy-msgid VALUE 'SY',
z_msgno TYPE sy-msgno VALUE '002',
z_log TYPE char50,
lv_ruta_server TYPE string,
full_rute TYPE string,
lv_timx TYPE char1 VALUE ' '. " SI TIMBRA = x
* z_long TYPE i,
* z_char TYPE i,
* z_cont TYPE n LENGTH 1,
* z_campo TYPE c LENGTH 20,
* z_new TYPE string,
* z_message TYPE string.
*
**** Variables
* DATA: lv_logical_port(60) TYPE c,
* lv_cp TYPE cpcodepage,
* lv_xml_string TYPE string,
* lv_sello_pac TYPE c LENGTH 1,
* lv_rfc_pac TYPE c LENGTH 15,
* lv_rfc_name TYPE c LENGTH 50,
* lv_pac_test TYPE tvarv_val,
* lv_doc_type TYPE char1.
*
DATA: lv_line TYPE string.
*-----------------------------------------------*
DATA: lt_string TYPE STANDARD TABLE OF string,
ls_string TYPE string.
*Crea Log
CLEAR: wa_log_handle.
* lv_line = lv_line+39.
*
DATA: ls_input TYPE zcomp_generar_complemento_tim1,
ls_output TYPE zcomp_generar_complemento_timb,
lv_ruta_port TYPE tvarv_low,
lv_logical_port TYPE prx_logical_port_name,
lv_status TYPE string.
ls_input-xml_timbrar = lv_line.
ENDTRY.
lv_status = ls_output-generar_complemento_timbrado_r.
**** FIN COMENTAR
"DS
DATA: z_xml_response TYPE xstring,
lt_xml_info TYPE TABLE OF smum_xmltb,
it_return TYPE STANDARD TABLE OF bapiret2.
DATA: lv_string TYPE string,
lv_xstring TYPE xstring,
lv_code TYPE abap_encod VALUE 'UTF-8'. "UTF-8
CONSTANTS: c_uuid TYPE char20 VALUE 'UUID'.
ENDIF.
IF sy-subrc = 0.
lv_msg-msgty = 'E'.
lv_msg-msgid = 'ZSAP'.
lv_msg-msgno = 1.
CONCATENATE lv_message1 lv_message3
INTO lv_msg-msgv1 SEPARATED BY space.
IF sy-subrc = 0.
"Do nothing
ENDIF.
IF sy-subrc = 0.
REFRESH lt_log_handle.
ENDIF.
ENDIF.
ENDIF.
ELSE.
* String a Xstring
cl_bcs_convert=>string_to_xstring( EXPORTING iv_string = lv_status
iv_codepage = lv_code
RECEIVING ev_xstring = lv_xstring )
.
z_xml_response = lv_xstring.
ENDLOOP.
* IF sy-subrc = 0.
IF NOT e_uuid IS INITIAL.
LOOP AT t_parcial ASSIGNING <fs_parcial>.
*Actuliza la tabla t_parcial
IF i_cancel EQ abap_true.
<fs_parcial>-status = 'CA'. "Cancelado
lv_ruta_server = '/usr/sap/InterfaceSAP/XML_CFDI/CC_PAGO/XML_CC/'.
ELSE.
<fs_parcial>-status = 'A'. "Enviado
lv_ruta_server = '/usr/sap/InterfaceSAP/XML_CFDI/CC_PAGO/
Resultado_XML_CC/'.
lv_timx = 'X'.
ENDIF.
<fs_parcial>-uuid_pago = e_uuid. "<fs_xml_info>-cvalue.
<fs_parcial>-fecha_timbra = sy-datum.
ENDLOOP.
ENDIF.
*
** me->download_xml( EXPORTING i_file = lv_line ).
*
*
*
* " ----------------------------------------------------------------
* " Send XML File to PAC Web Service
* " ----------------------------------------------------------------
* TRY.
*
* CREATE OBJECT zcl_proxy
* EXPORTING
* logical_port_name = lv_logical_port.
*
* CATCH cx_ai_system_fault INTO zcl_sys_exception.
* z_mensaje = zcl_sys_exception->get_text( ).
*
**Build Error message
* CLEAR: z_log, wa_msg.
* CONCATENATE 'Error WS Payment Consumer:' <fs_parcial>-bukrs <fs_pa
rcial>-belnr <fs_parcial>-gjahr
* INTO z_log SEPARATED BY space.
* wa_msg-msgty = 'E'.
* wa_msg-msgid = z_msgid.
* wa_msg-msgno = z_msgno.
* wa_msg-msgv1 = z_log.
* wa_msg-msgv2 = z_mensaje.
* wa_msg-probclass = 2.
* lv_doc_type = 'C'.
*
* me->save_log( EXPORTING i_create = abap_false
* i_s_msg = wa_msg
* CHANGING c_log_handle = wa_log_handle ).
*
* ENDTRY.
* TRY .
*
* CALL METHOD zcl_proxy->timbrado "emitir_timbrar MOD_ALSA
* EXPORTING
* input = is_input
* IMPORTING
* output = is_output.
*
********* Exception System Fault
************************************************************
* CATCH cx_ai_system_fault INTO zcl_sys_exception.
* z_mensaje = zcl_sys_exception->get_text( ).
*
**Build Error message
* CLEAR: z_log, wa_msg.
* CONCATENATE 'Error System Payment Fault:' <fs_parcial>-bukrs <fs_p
arcial>-belnr <fs_parcial>-gjahr
* INTO z_log SEPARATED BY space.
* wa_msg-msgty = 'E'.
* wa_msg-msgid = z_msgid.
* wa_msg-msgno = z_msgno.
* wa_msg-msgv1 = z_log.
* wa_msg-msgv2 = z_mensaje.
* wa_msg-probclass = 2.
* lv_doc_type = 'C'.
*
* me->save_log( EXPORTING i_create = abap_false
* i_s_msg = wa_msg
* CHANGING c_log_handle = wa_log_handle ).
*
********* Exception Application Fault
************************************************************
* CATCH cx_ai_application_fault INTO zcl_app_exception.
* z_mensaje = zcl_app_exception->get_text( ).
*
**Build Error message
* CLEAR: z_log, wa_msg.
* CONCATENATE 'Error Application Payment Fault:' <fs_parcial>-bukrs
<fs_parcial>-belnr <fs_parcial>-gjahr
* INTO z_log SEPARATED BY space.
* wa_msg-msgty = 'E'.
* wa_msg-msgid = z_msgid.
* wa_msg-msgno = z_msgno.
* wa_msg-msgv1 = z_log.
* wa_msg-msgv2 = z_mensaje.
* wa_msg-probclass = 2.
* lv_doc_type = 'C'.
*
* me->save_log( EXPORTING i_create = abap_false
* i_s_msg = wa_msg
* CHANGING c_log_handle = wa_log_handle ).
********* SOAP FAULT
************************************************************
* CATCH cx_root INTO zcl_cx_root. "cx_ai_soap_fa
ult
* z_mensaje = zcl_cx_root->get_text( ).
*
* CLEAR: z_log, wa_msg.
* CONCATENATE 'Error Stamp Payment Document:' <fs_parcial>-bukrs <fs
_parcial>-belnr <fs_parcial>-gjahr
* INTO z_log SEPARATED BY space.
**Build Error message
* wa_msg-msgty = 'E'.
* wa_msg-msgid = z_msgid.
* wa_msg-msgno = z_msgno.
* wa_msg-msgv1 = z_log.
* wa_msg-msgv2 = z_mensaje.
* wa_msg-probclass = 2.
*
* me->save_log( EXPORTING i_create = abap_false
* i_s_msg = wa_msg
* CHANGING c_log_handle = wa_log_handle ).
*
* ENDTRY.
*
**Check the Result is a CODE Sucessfully
* IF is_output-parameters-return-status IS NOT INITIAL.
* IF is_output-parameters-return-codigo IS NOT INITIAL. "-
folio_uddi MOD_ALSA
** Se debe anexar el XML timbrado al documento financiero.
* e_xml_r = is_output-parameters-return-timbre. " -xml.
* <fs_parcial>-uuid_pago = is_output-parameters-return-codigo. "Iden
tificar donde trae el folio UUID
* <fs_parcial>-fecha_timbra = sy-datum.
* <fs_parcial>-status = 'A'.
*
* ELSE.
* CONCATENATE 'Error Stamp Payment Document:' <fs_parcial>-bukrs <fs
_parcial>-belnr <fs_parcial>-gjahr
* INTO z_log SEPARATED BY space.
* wa_msg-msgv1 = z_log.
* IF is_output-parameters-return-status IS NOT INITIAL.
* e_message = is_output-parameters-return-status. "MOD
_ALSA
* z_new = is_output-parameters-return-codigo. "-message MOD
ALSA
* z_long = strlen( z_new ).
* z_cont = 2.
* z_char = 0.
* DO 3 TIMES.
* IF z_long >= 50.
* CONCATENATE 'wa_msg-msgv' z_cont INTO z_campo.
* ASSIGN (z_campo) TO <fs_campo>.
* <fs_campo> = z_new(50).
* z_char = z_char + 50.
* z_new = is_output-parameters-return-codigo. "-
message+z_char. MOD ALSA
* z_long = strlen( z_new ).
* z_cont = z_cont + 1.
* ELSE.
* CONCATENATE 'wa_msg-msgv' z_cont INTO z_campo.
* ASSIGN (z_campo) TO <fs_campo>.
* <fs_campo> = z_new.
* EXIT.
* ENDIF.
* ENDDO.
* ENDIF.
* wa_msg-msgty = 'E'.
* wa_msg-msgid = z_msgid.
* wa_msg-msgno = z_msgno.
* wa_msg-probclass = 2.
*
* me->save_log( EXPORTING i_create = abap_false
* i_s_msg = wa_msg
* CHANGING c_log_handle = wa_log_handle ).
*
* ENDIF.
* ENDIF.
*-----------------------------------------------*
* Save Local
APPEND lv_line TO lt_string.
* break mperez.
* CONCATENATE '/usr/sap/InterfaceSAP/XML_CFDI/CC_PAGO/XML_CC/' <fs_parcial>-
bukrs <fs_parcial>-belnr c_xml INTO lv_ruta_server.
*DELETE DATASET lv_ruta_server.
* OPEN DATASET lv_ruta_server FOR OUTPUT IN TEXT MODE
* ENCODING DEFAULT.
* TRANSFER lv_line TO lv_ruta_server.
* CLOSE DATASET lv_ruta_server.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_FI_CFDIXMLFE->DOWNLOAD_XML
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_FILE TYPE STRING
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD download_xml.
ls_file-line = i_file.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->ENVIO_COMPLMTO
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] LV_PDF_R TYPE XSTRING
* | [--->] LV_XML_R TYPE XSTRING
* | [--->] I_SOC TYPE BUKRS
* | [--->] I_YEAR TYPE GJAHR
* | [--->] I_NDOC TYPE ZFI_T_PAGOS_CFDI-
BELNR
* | [--->] I_CLIE TYPE KUNNR
* | [<-->] E_MENSAJE TYPE I
* +--------------------------------------------------------------------------
------------</SIGNATURE>
method ENVIO_COMPLMTO.
* Declaracion de variables y tablas
DATA: LIT_BINARY_CONTENT TYPE SOLIX_TAB.
IF SY-SUBRC <> 0.
"NO SE ENCONTRARON CORREOS.
E_MENSAJE = 2.
EXIT.
ENDIF.
ENDIF.
IF SY-SUBRC = 0.
CONCATENATE NOM1 NOM2 INTO NSOC SEPARATED BY SPACE.
ENDIF.
LO_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
i_type = 'RAW'
i_text = lt_message_body "Mensaje del ema
il
i_subject = L_SUB ). "Asunto del ema
il
* Agregar destinatario(s)
LOOP AT DIR_EMAIL ASSIGNING <FS_EMAIL>.
TRY.
LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( <FS_EMAI
L>-SMTP_ADDR ).
CALL METHOD LO_SEND_REQUEST->ADD_RECIPIENT
EXPORTING
i_recipient = LO_RECIPIENT
i_express = 'X'.
CATCH CX_BCS INTO BCS_EXCEPTION.
E_MENSAJE = 3.
EXIT.
ENDTRY.
ENDLOOP.
* Añadimos el remitente del email, en este caso el usuario de sap que lo
crea
LO_SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ).
CALL METHOD LO_SEND_REQUEST->SET_SENDER( I_SENDER = LO_SENDER ).
* Adjuntar archivos
IF LV_XML_R IS NOT INITIAL AND LV_PDF_R IS NOT INITIAL.
CONCATENATE I_SOC I_NDOC I_YEAR '.pdf' INTO LV_NPDF.
CONCATENATE I_SOC I_NDOC I_YEAR '.xml' INTO LV_NXML.
* Get PDF xstring and convert it to BCS format
LV_PDF_SIZE = XSTRLEN( LV_PDF_R ).
LT_PDF = CL_DOCUMENT_BCS=>XSTRING_TO_SOLIX( IP_XSTRING = LV_PDF_R ).
LEN = LV_I.
** Enviar correo
* Se asigna la prioridad para envio inmediato.
CALL METHOD LO_SEND_REQUEST->SET_SEND_IMMEDIATELY
EXPORTING
I_SEND_IMMEDIATELY = 'X'.
* Enviamos el email
LO_SEND_REQUEST->SEND( I_WITH_ERROR_SCREEN = 'X' ).
** Mostrar mensaje con estado del envio
IF SY-SUBRC = 0.
E_MENSAJE = 0.
ELSE.
E_MENSAJE = 1.
ENDIF.
endmethod.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_FI_CFDIXMLFE->FORMAT_QRCODE
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_SENDER_RFC TYPE CHAR20
* | [--->] I_RECEIVER_RFC TYPE CHAR20
* | [--->] I_AMOUNT TYPE CHAR20
* | [--->] I_UUID TYPE CHAR36
* | [--->] I_SELLO TYPE STRING
* | [<---] E_QRCODE TYPE CHAR200
* +--------------------------------------------------------------------------
------------</SIGNATURE>
method FORMAT_QRCODE.
DATA: z_integer TYPE char10,
z_decimal TYPE char6,
z_amount TYPE string,
z_amount_fin TYPE char20,
z_sello TYPE string,
z_len TYPE i,
z_diff TYPE i.
CONDENSE: z_amount.
z_diff = 6 - z_len.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_FI_CFDIXMLFE->GET_EMISOR_DOM
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] SOCIEDAD TYPE BUKRS
* | [<---] DOMICILIO TYPE ZSDFES_EXPEMISOR
* +--------------------------------------------------------------------------
------------</SIGNATURE>
method GET_EMISOR_DOM.
DATA: lt_adrc_bukrs TYPE TABLE OF adrc,
ls_t001 TYPE t001,
ls_adrc TYPE adrc,
wa_t005t TYPE t005t.
IF sy-subrc = 0.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
domicilio-calle = ls_adrc-street.
domicilio-noexterior = ls_adrc-house_num1.
domicilio-colonia = ls_adrc-str_suppl3.
domicilio-municipio = ls_adrc-city2.
domicilio-localidad = ls_adrc-city1.
domicilio-region = ls_adrc-region.
domicilio-codigopostal = ls_adrc-post_code1.
domicilio-tel_number = ls_adrc-tel_number.
*---Descripción de país
SELECT SINGLE * INTO wa_t005t
FROM t005t
WHERE spras = 'S' AND
land1 = ls_adrc-country.
IF sy-subrc EQ 0.
domicilio-pais = wa_t005t-landx.
ENDIF.
endmethod.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->GET_FILES_GOS
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_DOCUMENT TYPE SIBFBORIID
* | [<---] R_CONTENT_PDF TYPE XSTRING
* | [<---] R_CONTENT_XML TYPE XSTRING
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD get_files_gos.
DATA: lt_anexos TYPE STANDARD TABLE OF srgbtbrel,
lt_solix TYPE STANDARD TABLE OF solix,
ls_document TYPE sofolenti1.
lv_size = ls_document-doc_size.
CASE ls_document-obj_type.
WHEN c_pdf_ext.
r_content_pdf = lv_xstring.
WHEN c_xml_ext.
IF ls_document-obj_descr(1) = 'G'.
r_content_xml = lv_xstring.
ENDIF.
ENDCASE.
ENDIF.
ENDLOOP.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->GET_NOCERTIFICADO
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_BUKRS TYPE BUKRS
* | [<-->] I_XML_STRING TYPE STRING
* | [<-->] I_NOCER TYPE STRING
* | [<-->] I_CERTI TYPE STRING
* | [<-->] I_SELLO TYPE STRING
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD get_nocertificado.
DATA:
lo_http_client TYPE REF TO if_http_client,
lo_rest_client TYPE REF TO cl_rest_http_client,
lo_request TYPE REF TO if_rest_entity,
lo_response TYPE REF TO if_rest_entity,
lv_value TYPE string,
lv_str1 TYPE string,
lv_str2 TYPE string,
lv_str3 TYPE string,
lv_str4 TYPE string,
lv_str5 TYPE string,
lv_str6 TYPE string,
lv_token TYPE string,
lv_body TYPE string,
lv_uri TYPE string,
lv_valor TYPE char5,
lv_media_type TYPE string, "Media Type
lt_parameter TYPE tihttpnvp. "List of Content Type Parameters
"-----------------------------------------------------------------
"**********************************
"*** Obtiene Certificado ***
"**********************************
cl_http_client=>create_by_destination(
EXPORTING
destination = 'SELLOCARTAPORTE' " Logical destinatio
n (specified in function call)
IMPORTING
client = lo_http_client
EXCEPTIONS
argument_not_found = 1
destination_not_found = 2
destination_no_authority = 3
plugin_not_active = 4
internal_error = 5
OTHERS = 6
).
lo_http_client->request->set_version( if_http_reques
t=>co_protocol_version_1_1 ).
FREE lt_parameter.
APPEND INITIAL LINE TO lt_parameter ASSIGNING FIELD-
SYMBOL(<lw_parameter>).
<lw_parameter>-name = 'p_sociedad'.
<lw_parameter>-value = i_bukrs.
IF lo_http_client IS BOUND AND lo_rest_client IS BOUND.
* IF sy-sysid EQ 'SEC'.
* CONCATENATE '/api/Certificado_prueba?p_sociedad='
* i_bukrs
* INTO lv_uri.
* ELSEIF sy-sysid EQ 'SEP'.
CONCATENATE '/api/Certificado_cfdi40?p_sociedad='
i_bukrs
INTO lv_uri.
* ENDIF.
cl_http_utility=>set_request_uri(
EXPORTING
request = lo_http_client->request
uri = lv_uri ).
lv_body = i_xml_string.
lv_value = cl_abap_char_utilities=>newline.
CONCATENATE '>' lv_value '<' INTO lv_value.
IF sy-subrc = 0.
REPLACE ALL OCCURRENCES OF lv_value IN lv_body WITH '><' IN
CHARACTER MODE.
ENDIF.
lo_request = lo_rest_client->if_rest_client~create_request_entity( ).
* lo_request->set_header_field( iv_name = 'p_sociedad'
* iv_value = lv_value2
* ).
lo_request->set_content_type(
iv_media_type = if_rest_media_type=>gc_text_plain
it_parameter = lt_parameter
).
" lo_request->set_string_data( lv_body ).
TRY.
* lo_rest_client->if_rest_resource~get( ).
lo_rest_client->if_rest_resource~post( lo_request ).
lo_response = lo_rest_client->if_rest_client~get_response_entity( ).
DATA(http_status) = lo_response->get_header_field( '~status_code'
).
DATA(json_response) = lo_response->get_string_data( ).
DATA objectresult.
"**********************************
"*** Obtiene Sello ***
"**********************************
cl_http_client=>create_by_destination(
EXPORTING
destination = 'SELLOCARTAPORTE' " Logical destinatio
n
IMPORTING
client = lo_http_client " HTTP Client Abstra
ction
EXCEPTIONS
argument_not_found = 1
destination_not_found = 2
destination_no_authority = 3
plugin_not_active = 4
internal_error = 5
OTHERS = 6
).
lo_http_client->request->set_version( if_http_reques
t=>co_protocol_version_1_1 ).
* IF sy-sysid EQ 'SEC'.
* CONCATENATE '/api/Info40_prueba?p_sociedad='
* i_bukrs
* INTO lv_uri.
* ELSEIF sy-sysid EQ 'SEP'.
CONCATENATE '/api/Info_cfdi40?p_sociedad='
i_bukrs
INTO lv_uri.
* ENDIF.
cl_http_utility=>set_request_uri(
EXPORTING request = lo_http_client->request
uri = lv_uri ).
lv_body = i_xml_string.
lv_value = cl_abap_char_utilities=>newline.
CONCATENATE '>' lv_value '<' INTO lv_value.
IF sy-subrc = 0.
REPLACE ALL OCCURRENCES OF lv_value IN lv_body WITH '><' IN
CHARACTER MODE.
ENDIF.
* FREE lt_parameter.
* APPEND INITIAL LINE TO lt_parameter ASSIGNING FIELD-
SYMBOL(<lw_parameter>).
* <lw_parameter>-name = 'p_sociedad'.
* <lw_parameter>-value = i_bukrs.
lo_request = lo_rest_client->if_rest_client~create_request_entity( ).
lo_request->set_content_type(
iv_media_type = if_rest_media_type=>gc_text_plain
it_parameter = lt_parameter
).
lo_request->set_string_data( lv_body ).
TRY.
lo_rest_client->if_rest_resource~post( lo_request ).
lo_response = lo_rest_client->if_rest_client~get_response_entity(
).
http_status = lo_response->get_header_field( '~status_code' ).
i_certi = lv_str6.
REPLACE ALL OCCURRENCES OF '"' IN i_certi WITH space.
CONDENSE i_certi.
i_sello = lv_str4.
REPLACE ALL OCCURRENCES OF '"' IN i_sello WITH space.
CONDENSE i_sello.
ENDIF.
CATCH cx_rest_client_exception INTO lv_cx_log2.
ENDTRY.
ENDIF.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_FI_CFDIXMLFE->GET_RECEPTOR_DOM
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] CLIENTE TYPE KUNNR
* | [<---] DOMICILIO TYPE ZSDFES_EXPEMISOR
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD get_receptor_dom.
DATA: ls_kna1 TYPE kna1,
ls_t001 TYPE t001,
ls_adrc TYPE adrc,
lt_adrc TYPE TABLE OF adrc.
IF sy-subrc = 0.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
domicilio-calle = ls_adrc-street.
domicilio-noexterior = ls_adrc-house_num1.
domicilio-colonia = ls_adrc-str_suppl3.
domicilio-municipio = ls_adrc-city2.
domicilio-localidad = ls_adrc-city1.
domicilio-pais = ls_adrc-country.
domicilio-codigopostal = ls_adrc-post_code1.
domicilio-tel_number = ls_adrc-tel_number.
domicilio-name = ls_kna1-name1.
domicilio-name2 = ls_kna1-name2.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_FI_CFDIXMLFE->GET_SIGN
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_BUKRS TYPE BUKRS
* | [--->] I_ERDAT TYPE ERDAT
* | [--->] I_ERZEIT TYPE CPUTM
* | [--->] I_CHAIN TYPE STRING
* | [<---] E_SELLO TYPE STRING
* | [<---] E_CERTIF TYPE STRING
* | [<---] E_NOCERTIF TYPE STRING
* +--------------------------------------------------------------------------
------------</SIGNATURE>
method GET_SIGN.
DATA: ls_pseprof TYPE idmx_di_pseprof,
z_ssf_parameters_id TYPE idmx_di_profile,
z_pse_filename TYPE idmx_di_pseprof-psefilename,
z_ssf_validity_flag TYPE general_flag,
z_sello_string TYPE string,
z_skip_signature TYPE c.
SELECT SINGLE *
FROM idmx_di_pseprof
INTO ls_pseprof
WHERE ssfprofilename EQ z_ssf_parameters_id.
*------------------------------------------------------
*. CHECK SSF ENVIRONMENT (configured server)
*------------------------------------------------------
IF z_skip_signature IS INITIAL. "2029035
CALL FUNCTION 'IDMX_DI_CHECK_SSF_CONFIG'
EXPORTING
iv_parameters_id = z_ssf_parameters_id
iv_doc_creation_date = i_erdat
iv_doc_creation_time = i_erzeit
IMPORTING
ev_validity_flag = z_ssf_validity_flag
EXCEPTIONS
parameters_id_not_exist = 1
psefile_not_exist = 2
psefile_invalid = 3
unknown_error = 4
OTHERS = 5.
ELSE.
z_ssf_validity_flag = abap_true.
ENDIF.
IF z_skip_signature IS INITIAL.
CALL METHOD cl_cfdi_utility_mx=>get_certificate
EXPORTING
is_pseprof = ls_pseprof
IMPORTING
ev_serial_no = z_sello_string
EXCEPTIONS
ssf_parameter_not_found = 1
psefile_not_exist = 2
unknown_error = 3
sapcryptolib_not_installed = 4
psefile_access_denied = 5
psefile_invalid = 6
conv_error = 7
no_operation = 8
ssf_parameter_wrong = 9
OTHERS = 10.
z_pa_id = ls_pseprof-ssfprofilename.
DATA ls_cvers TYPE cvers.
e_certif = z_certif.
e_sello = z_prn_sign.
e_nocertif = z_sello_string.
ENDIF.
endmethod.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->PARSER_XML
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_XML TYPE STRING
* | [<-->] T_PARSER TYPE ZABAP_XMLTB
* | [EXC!] PARSE_ERROR
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD PARSER_XML.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
RAISING parse_error.
ENDIF.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->PARSER_XML_SPEI
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_XML TYPE STRING
* | [<-->] T_PARSER TYPE ZFI_TT_ABAP_XMLTB
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD parser_xml_spei.
IF sy-subrc EQ 0.
CALL FUNCTION 'ZFI_FM_SMUM_XML_PARSE'
EXPORTING
xml_input = i_buffer
TABLES
xml_table = t_parser
return = return.
ENDIF.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->POPUP_GET_VALUES
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_TITLE TYPE CHAR50
* | [--->] I_TIPO TYPE CHAR1
* | [--->] I_BUTTONS TYPE CHAR1
* | [<---] E_RETURN TYPE CHAR1
* | [<-->] T_FIELDS TYPE KWT_SVAL(optional)
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD popup_get_values.
DATA: lv_text1 TYPE c LENGTH 50,
lv_text2 TYPE c LENGTH 50,
lv_result TYPE c,
ls_fields TYPE sval.
CASE i_tipo.
WHEN 'C'.
WHEN 'T'.
IF i_buttons = 0.
FREE t_fields. CLEAR ls_fields.
* Llenamos la tabla con nuestros campos.
ls_fields-tabname = c_tabfield_b.
ls_fields-fieldname = c_pais_b.
APPEND ls_fields TO t_fields.
ls_fields-fieldname = c_banco_b.
APPEND ls_fields TO t_fields.
ls_fields-fieldname = c_cuenta_b.
APPEND ls_fields TO t_fields.
ls_fields-fieldname = c_referencia.
APPEND ls_fields TO t_fields.
ELSEIF i_buttons = 2.
lv_text1 = 'Mismo Banco'.
lv_text2 = 'SPEI'.
ENDIF.
ENDCASE.
IF i_buttons = 0.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = i_title
start_column = '5'
start_row = '5'
IMPORTING
returncode = e_return
TABLES
fields = t_fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
ELSEIF i_buttons = 2.
ENDIF.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_FI_CFDIXMLFE->PROCESS_DATA
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_BKPF TYPE BKPF
* | [--->] I_KUNNR TYPE KUNNR
* | [--->] I_VBELN TYPE VBELN(optional)
* | [--->] T_BSEG TYPE BSEG_T
* | [--->] T_BSEG_N TYPE BSEG_T(optional)
* | [--->] T_AUSZ3 TYPE RE_T_EX_AUSZ3(opti
onal)
* | [--->] T_DOCNUM TYPE IDMX_CFDI_STAT_LOG
_MX_T(optional)
* | [--->] I_TIPO TYPE CHAR1
* | [--->] T_CHEQUE TYPE ZFI_TT_CHEQUE_CFDI
(optional)
* | [--->] T_SPEI TYPE STRING(optional)
* | [--->] T_TRANSFER TYPE ZFI_TT_TRANSFER_CFD
I(optional)
* | [--->] I_DOC_SUSTITUIR TYPE ZFI_E_DOC_SUST(opti
onal)
* | [--->] I_DOCS_SUSTI TYPE ZFI_EDVAL_T(optiona
l)
* | [--->] I_STATUS TYPE ZFI_E_STATUS(optio
nal)
* | [--->] I_BANK_V TYPE CHAR3(optional)
* | [--->] T_NUMTARJ TYPE ZFI_TT_TARJETA_CFD
I(optional)
* | [<---] E_XML TYPE XSTRING
* | [<---] E_MESSAGE TYPE STRING
* | [<---] E_PAGOS TYPE ZFIFES_PAGOS_T
* | [<-->] T_PARCIAL TYPE ZFI_TT_PAGOS_CFDI(
optional)
* | [<-->] T_DATA_ADIC TYPE ZFI_TT_PAGO_ADIC(op
tional)
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD process_data.
DATA: ls_pagos TYPE zfifes_pagos, "zsdfes_pagos, "<-- MODIFICA
DO POR DEML 10.01.2018 POR F-802
ls_pago TYPE zsdfes_pago,
ls_doctorelacionado TYPE zsdfes_doctorelacionado,
ls_concepto TYPE zsdfes_conceptos,
ls_fi_pagos TYPE zfi_t_pagos_cfdi,
ls_fi_pago_adic TYPE zfi_t_pago_adic,
ls_knb1 TYPE knb1,
lv_pagos TYPE string,
lv_adrnr TYPE ad_addrnum,
lv_pais TYPE banks,
lv_land1 TYPE land1,
lv_stcd1 TYPE stcd1,
lv_paval TYPE paval,
lv_regfis TYPE paval,
lv_pac_test TYPE tvarv_val,
lv_rfc_pac TYPE c LENGTH 15,
lv_name_pac TYPE c LENGTH 50,
lv_sello_pac TYPE c LENGTH 1,
lv_zterm TYPE dzterm,
* lv_xsplt TYPE t052-xsplt,
* lv_zwels_sat TYPE zsd_e_zwels_sat,
lv_string TYPE string,
lv_message TYPE string,
lv_uuid_pag TYPE zfi_e_uuid,
lo_oref TYPE REF TO cx_root,
z_long TYPE i,
z_chain TYPE string,
z_sign TYPE string,
z_certif TYPE string,
z_nocertif TYPE string.
DATA:
lw_objetoimp TYPE c LENGTH 2,
lw_objetoimp01 TYPE c LENGTH 2 VALUE '01',
lw_objetoimp02 TYPE c LENGTH 2 VALUE '02'.
*** Transformacion
DATA: z_xml_file TYPE xstring,
zcl_ixml TYPE REF TO if_ixml,
zcl_streamfactory TYPE REF TO if_ixml_stream_factory,
zcl_encoding TYPE REF TO if_ixml_encoding,
zcl_ixml_ostream TYPE REF TO if_ixml_ostream.
IF <fs_dynpro> IS ASSIGNED.
lt_datos[] = <fs_dynpro>.
SORT lt_datos BY vbeln.
ENDIF.
ls_pagos-version = '4.0'.
ls_pagos-versionp = '2.0'.
ls_pagos-exportacion = '01'.
"* FIN CPB Cambios Complemento de Pago CFDI4.0 ***
********************************************************************
*Recuperacion de tiempo
*--->Recupera Zona Hr Central
SELECT SINGLE tzonedef INTO lv_tzone
FROM ttzcu.
*--->Recupera la Zona horario de la region - Sociedad
SELECT SINGLE adrnr INTO lv_adrnr_d
FROM t001
WHERE bukrs = i_bkpf-bukrs. "'0822'.
IF sy-subrc EQ 0.
SELECT SINGLE time_zone
FROM adrc INTO lv_tzone1
WHERE addrnumber = lv_adrnr_d.
ENDIF.
ls_pagos-serie = i_bkpf-blart.
ls_pagos-folio = i_bkpf-belnr.
ls_pagos-tipodecomprobante = 'P'.
ls_pagos-subtotal = '0'.
ls_pagos-total = '0'.
ls_pagos-moneda = 'XXX'.
* EMISOR
READ TABLE lt_emisor ASSIGNING <fs_emisor> INDEX 1.
IF sy-subrc EQ 0.
IF lv_rfc_pac IS NOT INITIAL.
ls_pagos-emisor-rfc = lv_rfc_pac.
ls_pagos-emisor-nombre = lv_name_pac.
ELSE.
ls_pagos-emisor-rfc = lv_paval.
CONCATENATE <fs_emisor>-name1 <fs_emisor>-name2 INTO
ls_pagos-emisor-nombre SEPARATED BY space.
ENDIF.
ls_pagos-emisor-regimenfiscal = lv_regfis.
ls_pagos-lugarexpedicion = <fs_emisor>-post_code1.
ENDIF.
* RECEPTOR
SELECT SINGLE land1 adrnr stcd1 INTO (lv_land1, lv_adrnr, lv_stcd1)
FROM kna1
WHERE kunnr = i_kunnr.
IF sy-subrc EQ 0.
SELECT * INTO TABLE lt_receptor FROM adrc
WHERE addrnumber = lv_adrnr.
ls_pagos-receptor-rfc = lv_stcd1.
SELECT SINGLE *
FROM kna1
INTO @DATA(ls_kna1)
WHERE kunnr EQ @i_kunnr.
IF sy-subrc EQ 0.
ls_pagos-receptor-regimenfiscalreceptor = ls_kna1-konzs.
ls_pagos-receptor-domiciliofiscalreceptor = ls_kna1-pstlz.
ENDIF.
ls_concepto-claveprodserv = '84111506'.
ls_concepto-cantidad = 1.
ls_concepto-claveunidad = 'ACT'.
ls_concepto-descripcion = 'Pago'.
ls_concepto-valorunitario = '0'.
ls_concepto-importe = '0'.
ls_concepto-objetoimp = '01'. "1 No objeto de impuesto ok 202302
10
CONDENSE ls_concepto-claveprodserv.
CONDENSE ls_concepto-cantidad.
CONDENSE ls_concepto-claveunidad.
CONDENSE ls_concepto-descripcion.
CONDENSE ls_concepto-valorunitario.
CONDENSE ls_concepto-importe.
CONDENSE ls_concepto-objetoimp.
APPEND ls_concepto TO lt_concepto.
ls_pagos-conceptos[] = lt_concepto[].
" FechaPago
*--->Recupera la zona Horario Central
CALL FUNCTION 'IB_CONVERT_INTO_TIMESTAMP'
EXPORTING
i_datlo = i_bkpf-budat
i_timlo = i_bkpf-cputm
i_tzone = lv_tzone
IMPORTING
e_timestamp = lv_conv.
" MonedaP.
ls_pago-monedap = i_bkpf-waers.
" TipoCambioP.
IF i_bkpf-kursf NE 0.
ls_pago-tipocambiop = i_bkpf-kursf.
ELSE.
DATA lv_ukurs TYPE ukurs_curr.
IF sy-subrc EQ 0.
ls_pago-tipocambiop = lv_ukurs.
ENDIF.
ENDIF.
" CtaBeneficiario
DATA: lv_hbkid TYPE hbkid,
lv_bankn TYPE bankn,
lv_clabe TYPE bnkn2,
lv_hkont TYPE hkont,
lv_strlen TYPE i.
IF <fs_bseg_i1> IS ASSIGNED.
" Monto
ls_pago-monto = <fs_bseg_i1>-wrbtr.
" NumOperacion
IF <fs_bseg_i1> IS ASSIGNED.
ls_pago-numoperacion = <fs_bseg_i1>-zuonr.
ls_doctorelacionado-metododepagodr = <fs_bseg_i1>-zterm.
ENDIF.
CLEAR lv_adrnr.
DATA: lv_banka TYPE c LENGTH 300,
ls_adrct TYPE adrct.
IF ( i_tipo = 2 OR i_tipo = 3 ).
IF i_bank_v IS NOT INITIAL.
" RfcEmisorCtaOrd
ls_pago-rfcemisorctaord = ls_adrct-remark.
" NomBancoOrdExt
TRANSLATE lv_banka TO UPPER CASE.
ls_pago-nombancoordext = lv_banka.
ENDIF.
ENDIF.
CASE i_tipo.
WHEN '1'. "Efectivo
ls_pago-formadepagop = '01'.
ls_fi_pago_adic-tipo = '1'.
ls_pago-ctabeneficiario = ''.
ls_pago-rfcemisorctaord = ''.
ls_pago-rfcemisorctaben = ''.
WHEN '2'. "Cheque
ls_pago-formadepagop = '02'.
ls_fi_pago_adic-tipo = '2'.
WHEN '3'. "Transferencia
ls_pago-formadepagop = '03'.
ls_fi_pago_adic-tipo = '3'.
WHEN '4'.
ls_pago-formadepagop = '04'.
ls_fi_pago_adic-formadepago = '04'.
ls_fi_pago_adic-tipo = '4'.
WHEN '5'.
ls_pago-formadepagop = '28'.
ls_fi_pago_adic-formadepago = '28'.
ls_fi_pago_adic-tipo = '5'.
ENDCASE.
IF i_tipo = 2.
LOOP AT t_cheque ASSIGNING <fs_cheque>.
ls_pago-ctaordenante = <fs_cheque>-cuenta_emisor.
ls_pago-numoperacion = <fs_cheque>-numero_cheque.
SELECT SINGLE adrnr INTO lv_adrnr FROM bnka
WHERE banks = <fs_cheque>-pais_banco
AND bankl = <fs_cheque>-banco.
SELECT SINGLE remark INTO lv_remark FROM adrct
WHERE addrnumber = lv_adrnr
AND langu = sy-langu.
IF sy-subrc EQ 0.
ls_pago-rfcemisorctaord = lv_remark.
ENDIF.
ENDLOOP.
ENDIF.
IF ( i_tipo = 4 OR i_tipo = 5 ).
READ TABLE t_numtarj INTO ls_numtarj INDEX 1.
IF sy-subrc = 0.
ls_pago-ctaordenante = ls_numtarj-numtarjeta.
ls_fi_pago_adic-banco = ls_numtarj-bankl.
ls_pago-formadepagop = ls_numtarj-formapagop.
ls_fi_pago_adic-formadepago = ls_numtarj-formapagop.
ls_fi_pago_adic-numoperacion = ls_numtarj-referencia.
ls_pago-numoperacion = ls_numtarj-referencia.
"* Ejecutamos el Parse al XML de SPEI para obtener los datos necesarios
"* o en caso de transfer mismo banco, tomamos los datos de t_transfer
IF i_tipo = 3.
IF t_spei IS NOT INITIAL AND t_transfer[] IS INITIAL.
lv_string = t_spei.
ls_pago-tipocadpago = '01'.
* ELSE.
ELSEIF t_transfer[] IS NOT INITIAL .
LOOP AT t_transfer ASSIGNING <fs_transfer>.
ls_pago-ctaordenante = <fs_transfer>-bankn.
ls_pago-numoperacion = <fs_transfer>-referencia.
SELECT SINGLE adrnr INTO lv_adrnr FROM bnka
WHERE banks = <fs_transfer>-banks
AND bankl = <fs_transfer>-bankl.
SELECT SINGLE remark INTO lv_remark FROM adrct
WHERE addrnumber = lv_adrnr
AND langu = sy-langu.
IF sy-subrc EQ 0.
ls_pago-rfcemisorctaord = lv_remark.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
" *********************************************************************
*
" *** SEGMENTO MODIFICADO POR DEML 10.01.2019 POR F-802
***
"*** CÓDIGO PREVIO COMENTADO CON 3 '*'
***
"**********************************************************************
"* SE LLENA EL TAG DE RELACIONADOS, CON EL UUID DE PAGO DEL DOCTO
"* QUE SE ESTA CANCELANDO
READ TABLE t_parcial ASSIGNING <fs_parcial> INDEX 1.
IF sy-subrc EQ 0.
ls_pagos-relacionados-tiporelacion = '04'.
*** ls_pagos-relacionados-uuid = <fs_parcial>-uuid_pago.
MOVE <fs_parcial>-uuid_pago TO wa_uuidrel-uuid_r.
APPEND wa_uuidrel TO ls_uuidrel[].
CLEAR wa_uuidrel.
ls_pagos-relacionados-uuid[] = ls_uuidrel[].
ENDIF.
ls_pago-monto = 0.
ENDIF.
lt_bseg_nc[] = t_bseg[].
SORT lt_bseg_nc BY rebzg.
ls_doctorelacionado-monedadr = <fs_parcial>-moneda.
IF ls_pago-monedap NE ls_doctorelacionado-monedadr.
ls_doctorelacionado-tipocambiodr = '1'. "<fs_parcial>-
tipocambio'.
ENDIF.
ls_doctorelacionado-metododepagodr = 'PPD'."RRR:Valor marcado como
Fijo PPD
ls_doctorelacionado-impsaldoant = <fs_parcial>-s_insoluto.
ls_doctorelacionado-impsaldoant = ls_doctorelacionado-impsaldoant
- <fs_bseg_n>-dmbtr.
<fs_bseg>-wrbtr = <fs_bseg>-wrbtr - <fs_bseg_n>-wrbtr.
ENDLOOP.
ls_doctorelacionado-imppagado = <fs_bseg>-wrbtr.
ls_doctorelacionado-impsaldoinsoluto = ls_doctorelacionado-
impsaldoant - <fs_bseg>-wrbtr. "CPB 20230331 manda mal el campo, no timbra
ls_doctorelacionado-impsaldoant = <fs_parcial>-s_anterior.
ls_doctorelacionado-imppagado = <fs_parcial>-s_pagado.
ls_doctorelacionado-impsaldoinsoluto = <fs_parcial>-s_insoluto.
"CPB 20230331 manda mal el campo, no timbra
ENDIF.
"**************************
"** Facturas FINANCIERAS. LLena todos los campos mas los nuevos.
"**************************
"* Buscar el IDOC S y A para obtener los datos requeridos
READ TABLE t_docnum ASSIGNING <fs_docnum> WITH KEY status = 'S'
refdoc = <fs_bseg>-
vbeln
gjahr = <fs_bseg>-
rebzj.
IF sy-subrc EQ 0.
"Comentado por issue en PRO, mueve otro UUID.
"ls_doctorelacionado-iddocumento = <fs_docnum>-sellocfd_guid. "
CPB
SELECT * FROM edid4
INTO TABLE lt_edid4
WHERE docnum EQ <fs_docnum>-docnum.
FREE: tl_edidd.
CALL FUNCTION 'IDOC_READ_COMPLETELY'
EXPORTING
document_number = <fs_docnum>-docnum
TABLES
int_edidd = tl_edidd
EXCEPTIONS
document_not_exist = 1
document_number_invalid = 2
OTHERS = 3.
IF sy-subrc EQ 0.
"CPB - INI - Complemento de Pago 2.0
FREE: lt_10_stax, lt_impuestosdr.
CLEAR: ls_impuestosdr.
IF lw_tot_fact GT 0.
lw_porcen = <lw_datos>-s_pagado / lw_tot_fact.
ELSE.
lw_porcen = 100.
ENDIF.
ELSE.
CLEAR lv_dmbtr.
"Obtengo importes de N.C.
LOOP AT t_bseg ASSIGNING FIELD-SYMBOL(<lw_bseg>)
WHERE rebzg EQ <fs_bseg>-vbeln
AND vbeln IS INITIAL.
READ TABLE lt_bseg_nc ASSIGNING FIELD-SYMBOL(<lw_bseg_nc>)
WITH KEY rebzg = <lw_bseg>-belnr.
IF sy-subrc EQ 0.
ADD <lw_bseg_nc>-dmbtr TO lv_dmbtr.
ENDIF.
ENDLOOP.
IF lw_tot_fact GT 0.
lw_porcen = <fs_bseg>-dmbtr / lw_tot_fact .
ELSE.
lw_porcen = 100.
ENDIF.
ENDIF.
ls_10_stax = <sl_edidd>-sdata.
ls_10_stax-stax_base_amount = <sl_edidd>-sdata(17).
CONDENSE:
ls_10_stax-stax_base_amount,
ls_10_stax-stax_type_code,
ls_10_stax-stax_factor_type,
ls_10_stax-stax_rate,
ls_10_stax-stax_amount.
lw_base = ls_10_stax-stax_base_amount.
lw_base2 = lw_base * lw_porcen.
lw_base_2dec = lw_base2.
ls_10_stax-stax_base_amount = lw_base2.
ls_10_stax2-stax_base_amount = ls_10_stax-stax_base_amount.
ls_10_stax2-stax_type_code = ls_10_stax-stax_type_code.
ls_10_stax2-stax_factor_type = ls_10_stax-stax_factor_type.
ls_10_stax2-stax_rate = ls_10_stax-stax_rate.
ls_10_stax2-stax_amount = ls_10_stax-stax_amount.
ls_10_stax2-stax_base_amount = lw_base2.
CONDENSE ls_10_stax2-stax_base_amount.
lw_stax_rate = ls_10_stax2-stax_rate.
IF lw_stax_rate GT 0.
lw_stax_amount = lw_base_2dec * lw_stax_rate.
"lw_base2 * lw_stax_rate.
lw_stax_amount_2dec = lw_stax_amount.
ls_10_stax2-stax_amount = lw_stax_amount_2dec.
CONDENSE ls_10_stax2-stax_amount.
ENDIF.
lw_base = <lw_10_stax_de>-
stax_base_amount.
ADD lw_base TO lw_base2.
lw_stax_amount = <lw_10_stax_de>-
stax_amount.
ADD lw_stax_amount TO lw_stax_amount2.
ENDLOOP.
lw_base_2dec = lw_base2.
<lt_10_stax>-stax_base_amount = lw_base_2dec.
lw_stax_amount_2dec = lw_stax_amount2.
<lt_10_stax>-stax_amount = lw_stax_amount_2dec.
CONDENSE:
<lt_10_stax>-stax_base_amount,
<lt_10_stax>-stax_amount.
ENDLOOP.
lv_montototalpagos = ls_pago-monto.
ls_pago-tipocambiop = '1'.
IF lw_tax NE lw_taxbueno.
<lt_10_stax>-stax_amount = lw_taxbueno.
CONDENSE <lt_10_stax>-stax_amount NO-GAPS.
ENDIF.
ENDLOOP.
CASE <lt_10_stax>-stax_rate.
WHEN '0.000000'.
ADD <lt_10_stax>-stax_base_amount TO lv_tottrasbaseiva0.
ADD <lt_10_stax>-stax_amount TO lv_tottrasimpuestoiva
0.
WHEN '0.080000'.
ADD <lt_10_stax>-stax_base_amount TO lv_tottrasbaseiva8.
ADD <lt_10_stax>-stax_amount TO lv_tottrasimpuestoiva
8.
WHEN '0.160000'.
ADD <lt_10_stax>-stax_base_amount TO lv_tottrasbaseiva16.
ADD <lt_10_stax>-stax_amount TO lv_tottrasimpuestoiva
16.
ENDCASE.
ENDLOOP.
"CPB - FIN - CR Nuevos nodos.
lw_total_impuestosdr = ls_trasladosdr-trasladodr.
APPEND lw_total_impuestosdr TO lt_total_impuestosdr.
MOVE ls_trasladosdr-trasladodr TO ls_impuestosdr-trasladosdr.
ENDLOOP.
ls_pago-impuestosdr[] = lt_impuestosdr[].
ENDIF. "CALL FUNCTION 'IDOC_READ_COMPLETELY'
"CPB - FIN - Complemento de Pago 2.0
IF ls_pago-monedap NE ls_doctorelacionado-monedadr.
ls_doctorelacionado-tipocambiodr = '1'. "ls_vbrk-kurrf.
ENDIF.
ls_doctorelacionado-impsaldoant = ls_bseg_fi-wrbtr.
ls_doctorelacionado-numparcialidad = 1.
SHIFT ls_doctorelacionado-numparcialidad RIGHT DELETING TRAILING '
'.
CONDENSE ls_doctorelacionado-numparcialidad NO-GAPS.
ENDIF.
ENDIF.
ELSE.
"**************************
"** Facturas LOGISTICAS.
"**************************
"* Buscar el IDOC S y A para obtener los datos requeridos
READ TABLE t_docnum ASSIGNING <fs_docnum> WITH KEY status = 'S'
refdoc = <fs_bseg>-
vbeln
gjahr = <fs_bseg>-
rebzj.
IF sy-subrc EQ 0.
ls_doctorelacionado-iddocumento = <fs_docnum>-sellocfd_guid. "CP
B
FREE: tl_edidd.
CALL FUNCTION 'IDOC_READ_COMPLETELY'
EXPORTING
document_number = <fs_docnum>-docnum
TABLES
int_edidd = tl_edidd
EXCEPTIONS
document_not_exist = 1
document_number_invalid = 2
OTHERS = 3.
IF sy-subrc EQ 0.
"CPB - INI - Complemento de Pago 2.0
FREE: lt_10_stax, lt_impuestosdr.
CLEAR: ls_impuestosdr.
IF lw_tot_fact GT 0.
lw_porcen = <lw_datos>-s_pagado / lw_tot_fact.
ELSE.
lw_porcen = 100.
ENDIF.
ELSE.
CLEAR lv_dmbtr.
"Obtengo importes de N.C.
LOOP AT t_bseg ASSIGNING <lw_bseg>
WHERE rebzg EQ <fs_bseg>-vbeln
AND vbeln IS INITIAL.
READ TABLE lt_bseg_nc ASSIGNING <lw_bseg_nc>
WITH KEY rebzg = <lw_bseg>-belnr.
IF sy-subrc EQ 0.
ADD <lw_bseg_nc>-dmbtr TO lv_dmbtr.
ENDIF.
ENDLOOP.
IF lw_tot_fact GT 0.
lw_porcen = <fs_bseg>-dmbtr / lw_tot_fact .
ELSE.
lw_porcen = 100.
ENDIF.
ENDIF.
ls_10_stax = <sl_edidd>-sdata.
ls_10_stax-stax_base_amount = <sl_edidd>-sdata(17).
CONDENSE:
ls_10_stax-stax_base_amount,
ls_10_stax-stax_type_code,
ls_10_stax-stax_factor_type,
ls_10_stax-stax_rate,
ls_10_stax-stax_amount.
lw_base = ls_10_stax-stax_base_amount.
lw_base2 = lw_base * lw_porcen.
lw_base_2dec = lw_base2.
ls_10_stax-stax_base_amount = lw_base2.
* ls_10_stax2 = ls_10_stax.
ls_10_stax2-stax_base_amount = ls_10_stax-stax_base_amount.
ls_10_stax2-stax_type_code = ls_10_stax-stax_type_code.
ls_10_stax2-stax_factor_type = ls_10_stax-stax_factor_type.
ls_10_stax2-stax_rate = ls_10_stax-stax_rate.
ls_10_stax2-stax_amount = ls_10_stax-stax_amount.
ls_10_stax2-stax_base_amount = lw_base2.
CONDENSE ls_10_stax2-stax_base_amount.
lw_stax_rate = ls_10_stax2-stax_rate.
IF lw_stax_rate GT 0.
lw_stax_amount = lw_base_2dec * lw_stax_rate.
lw_stax_amount_2dec = lw_stax_amount.
ls_10_stax2-stax_amount = lw_stax_amount_2dec.
CONDENSE ls_10_stax2-stax_amount.
ENDIF.
lw_base = <lw_10_stax_de>-
stax_base_amount.
ADD lw_base TO lw_base2.
lw_stax_amount = <lw_10_stax_de>-
stax_amount.
ADD lw_stax_amount TO lw_stax_amount2.
ENDLOOP.
lw_base_2dec = lw_base2.
<lt_10_stax>-stax_base_amount = lw_base_2dec.
lw_stax_amount_2dec = lw_stax_amount2.
<lt_10_stax>-stax_amount = lw_stax_amount_2dec.
CONDENSE:
<lt_10_stax>-stax_base_amount,
<lt_10_stax>-stax_amount.
ENDLOOP.
IF lw_tax NE lw_taxbueno.
<lt_10_stax>-stax_amount = lw_taxbueno.
CONDENSE <lt_10_stax>-stax_amount NO-GAPS.
ENDIF.
ENDLOOP.
CASE <lt_10_stax>-stax_rate.
WHEN '0.000000'.
ADD <lt_10_stax>-stax_base_amount TO lv_tottrasbaseiva0.
ADD <lt_10_stax>-stax_amount TO lv_tottrasimpuestoiva
0.
WHEN '0.080000'.
ADD <lt_10_stax>-stax_base_amount TO lv_tottrasbaseiva8.
ADD <lt_10_stax>-stax_amount TO lv_tottrasimpuestoiva
8.
WHEN '0.160000'.
ADD <lt_10_stax>-stax_base_amount TO lv_tottrasbaseiva16.
ADD <lt_10_stax>-stax_amount TO lv_tottrasimpuestoiva
16.
ENDCASE.
ENDLOOP.
"CPB - FIN - CR Nuevos nodos.
lw_total_impuestosdr = ls_trasladosdr-trasladodr.
APPEND lw_total_impuestosdr TO lt_total_impuestosdr.
MOVE ls_trasladosdr-trasladodr TO ls_impuestosdr-trasladosdr.
ENDLOOP.
ls_pago-impuestosdr[] = lt_impuestosdr[].
ENDIF. "CALL FUNCTION 'IDOC_READ_COMPLETELY'
"CPB - FIN - Complemento de Pago 2.0
IF ls_pago-monedap NE ls_doctorelacionado-monedadr.
ls_doctorelacionado-tipocambiodr = '1'. "ls_vbrk-kurrf.
ENDIF.
ls_doctorelacionado-folio = <fs_bseg>-vbeln.
ls_doctorelacionado-impsaldoant = ls_bseg_fi-wrbtr.
ls_doctorelacionado-numparcialidad = 1.
SHIFT ls_doctorelacionado-numparcialidad RIGHT DELETING TRAILING '
'.
CONDENSE ls_doctorelacionado-numparcialidad NO-GAPS.
ENDIF.
ENDIF.
ELSE.
CLEAR: lt_line_rt, ls_thead.
IF lv_fact_fi IS INITIAL.
ls_thead-tdname = <fs_bseg>-vbeln.
me->read_text( EXPORTING i_id = 'ZUUI'
i_name = ls_thead-tdname
i_object = 'VBBK'
CHANGING t_lines = lt_line_rt ).
ELSE.
ls_thead-tdname(4) = i_bkpf-bukrs.
ls_thead-tdname+4(10) = <fs_bseg>-rebzg.
ls_thead-tdname+14(4) = <fs_bseg>-rebzj.
"ls_doctorelacionado-iddocumento = ls_doctorelacionado-folio.
ELSE.
IF ( <fs_bseg_n>-rebzg EQ <fs_bseg>-rebzg OR <fs_bseg_n>-rebzg EQ
lv_awkey OR <fs_bseg_n>-rebzg EQ <fs_bseg>-vbeln ).
ls_doctorelacionado-impsaldoant = ls_doctorelacionado-
impsaldoant - <fs_bseg_n>-dmbtr.
<fs_bseg>-wrbtr = <fs_bseg>-wrbtr - <fs_bseg_n>-wrbtr.
ENDIF.
ENDIF.
ENDLOOP.
ls_doctorelacionado-imppagado = <fs_bseg>-wrbtr.
ls_doctorelacionado-impsaldoinsoluto = ls_doctorelacionado-
impsaldoant - <fs_bseg>-wrbtr. "saldo factura - pago
ls_doctorelacionado-metododepagodr = 'PPD'. "Valor establecido com
o fijo
IF lv_len EQ 32.
CONCATENATE ls_fi_pagos-uuid_fact(8) '-'
ls_fi_pagos-uuid_fact+8(4) '-'
ls_fi_pagos-uuid_fact+12(4) '-'
ls_fi_pagos-uuid_fact+16(4) '-'
ls_fi_pagos-uuid_fact+20(12)
INTO ls_fi_pagos-uuid_fact.
ENDIF.
ls_fi_pagos-metododepagodr = ls_doctorelacionado-metododepagodr.
ls_fi_pagos-parcialidad = ls_doctorelacionado-numparcialidad.
" Ajuste de numparcialidad de 2 A 1 caracteres. 1de
SHIFT ls_fi_pagos-parcialidad RIGHT DELETING TRAILING ' '.
CONDENSE ls_fi_pagos-parcialidad NO-GAPS.
" Ajuste de numparcialidad de 2 A 1 caracteres.
ls_fi_pagos-tipocambio = ls_doctorelacionado-tipocambiodr.
ls_fi_pagos-moneda = ls_doctorelacionado-monedadr.
ls_fi_pagos-s_insoluto = ls_doctorelacionado-impsaldoinsoluto.
ls_fi_pagos-s_pagado = ls_doctorelacionado-imppagado.
ls_fi_pagos-s_anterior = ls_doctorelacionado-impsaldoant.
ls_fi_pago_adic-belnr = i_bkpf-belnr.
ls_fi_pago_adic-bukrs = i_bkpf-bukrs.
ls_fi_pago_adic-gjahr = i_bkpf-gjahr.
ls_fi_pago_adic-kunnr = i_kunnr.
ls_fi_pago_adic-vbeln = <fs_bseg>-vbeln.
ls_fi_pago_adic-gjahrf = <fs_bseg>-rebzj.
ls_fi_pago_adic-certificado = ls_pagos-certificado.
ls_fi_pago_adic-nocertificado = ls_pagos-nocertificado.
ls_fi_pago_adic-sello = ls_pagos-sello.
IF lt_impuestosdr[] IS INITIAL.
ls_doctorelacionado-objetoimp = '02'. "3 No objeto de impuesto
ELSE.
ls_doctorelacionado-objetoimp = '02'. "4 No objeto de impuesto
ENDIF.
ls_doctorelacionado-impuestosdr = lt_impuestosdr[].
IF lv_len EQ 32.
CONCATENATE ls_doctorelacionado-iddocumento(8) '-'
ls_doctorelacionado-iddocumento+8(4) '-'
ls_doctorelacionado-iddocumento+12(4) '-'
ls_doctorelacionado-iddocumento+16(4) '-'
ls_doctorelacionado-iddocumento+20(12)
INTO ls_doctorelacionado-iddocumento.
ENDIF.
APPEND ls_doctorelacionado TO ls_pago-doctorelacionado[].
CLEAR ls_doctorelacionado.
FREE lt_impuestosdr[].
ENDLOOP. "LOOP AT lt_bseg ASSIGNING <fs_bseg> WHERE rebzg IS NOT INIT
IAL
CLEAR ls_pago-trasladosp.
t_parcial[] = lt_parcial[].
CONDENSE: ls_pago-fechapago.
CONDENSE ls_pago-formadepagop.
CONDENSE ls_pago-monedap.
CONDENSE ls_pago-tipocambiop.
CONDENSE ls_pago-monto.
CONDENSE ls_pago-numoperacion.
CONDENSE ls_pago-rfcemisorctaord.
CONDENSE ls_pago-nombancoordext.
CONDENSE ls_pago-ctaordenante.
CONDENSE ls_pago-rfcemisorctaben.
CONDENSE ls_pago-ctabeneficiario.
CONDENSE ls_pago-tipocadpago.
CONDENSE ls_pago-certpago.
CONDENSE ls_pagos-version.
CONDENSE ls_pagos-versionp.
CONDENSE ls_pagos-fecha.
CONDENSE ls_pagos-serie.
CONDENSE ls_pagos-folio.
CONDENSE ls_pagos-sello.
CONDENSE ls_pagos-tipodecomprobante.
CONDENSE ls_pagos-nocertificado.
CONDENSE ls_pagos-certificado.
CONDENSE ls_pagos-subtotal.
CONDENSE ls_pagos-moneda.
CONDENSE ls_pagos-total.
CONDENSE ls_pagos-lugarexpedicion.
CONDENSE ls_pagos-relacionados-tiporelacion.
CONDENSE ls_pagos-emisor-rfc.
CONDENSE ls_pagos-emisor-nombre.
CONDENSE ls_pagos-emisor-regimenfiscal.
CONDENSE ls_pagos-receptor-rfc.
CONDENSE ls_pagos-receptor-nombre.
CONDENSE ls_pagos-receptor-usocfdi.
CONDENSE ls_pagos-receptor-numregidtrib.
CONDENSE ls_pagos-receptor-residenciafiscal.
CONDENSE ls_pago-fechapago.
CONDENSE ls_pago-formadepagop.
CONDENSE ls_pago-monedap.
CONDENSE ls_pago-tipocambiop.
CONDENSE ls_pago-monto.
CONDENSE ls_pago-numoperacion.
CONDENSE ls_pago-rfcemisorctaord.
CONDENSE ls_pago-nombancoordext.
CONDENSE ls_pago-ctaordenante.
CONDENSE ls_pago-rfcemisorctaben.
CONDENSE ls_pago-ctabeneficiario.
CONDENSE ls_pago-tipocadpago.
CONDENSE ls_pago-certpago.
CONDENSE ls_pago-cadpago.
CONDENSE ls_pago-sellopago.
IF lt_total_impuestosdr[] IS INITIAL.
lw_objetoimp = lw_objetoimp01.
ELSE.
lw_objetoimp = lw_objetoimp01.
ENDIF.
IF lv_tottrasbaseiva16 GT 0.
ls_pago-tottrasbaseiva16 = lv_tottrasbaseiva16.
ENDIF.
IF lv_tottrasimpuestoiva16 GT 0.
ls_pago-tottrasimpuestoiva16 = lv_tottrasimpuestoiva16.
ENDIF.
IF lv_tottrasbaseiva8 GT 0.
ls_pago-tottrasbaseiva8 = lv_tottrasbaseiva8.
ENDIF.
IF lv_tottrasimpuestoiva8 GT 0.
ls_pago-tottrasimpuestoiva8 = lv_tottrasimpuestoiva8.
ENDIF.
IF lv_tottrasbaseiva0 GT 0.
ls_pago-tottrasbaseiva0 = lv_tottrasbaseiva0.
ENDIF.
IF lv_tottrasimpuestoiva0 GT 0.
ls_pago-tottrasimpuestoiva0 = lv_tottrasimpuestoiva0.
ENDIF.
IF lv_tottrasbaseivaexento GT 0.
ls_pago-tottrasbaseivaexento = lv_tottrasbaseivaexento.
ENDIF.
IF lv_montototalpagos GT 0.
ls_pago-montototalpagos = lv_montototalpagos.
ENDIF.
IF lv_tottrasbaseiva0 GE 0.
ls_pago-tottrasimpuestoiva0 = '0.00'.
ENDIF.
"Financieras
IF ls_pago-tottrasbaseiva0 EQ ''.
ls_pago-tottrasimpuestoiva0 = ''.
ENDIF.
CONDENSE ls_pago-totreteniva.
CONDENSE ls_pago-totretenisr.
CONDENSE ls_pago-totretenieps.
CONDENSE ls_pago-tottrasbaseiva16.
CONDENSE ls_pago-tottrasimpuestoiva16.
CONDENSE ls_pago-tottrasbaseiva8.
CONDENSE ls_pago-tottrasimpuestoiva8.
CONDENSE ls_pago-tottrasbaseiva0.
CONDENSE ls_pago-tottrasimpuestoiva0.
CONDENSE ls_pago-tottrasbaseivaexento.
CONDENSE ls_pago-montototalpagos.
"CPB - nuevos ajustes 10.01.2023
lw_basedr = <lw_total_impuestosdr>-basedr.
lw_impuestodr = <lw_total_impuestosdr>-impuestodr.
lw_tipofactordr = <lw_total_impuestosdr>-tipofactordr.
lw_tasaocuotadr = <lw_total_impuestosdr>-tasaocuotadr.
lw_importedr = <lw_total_impuestosdr>-importedr.
CONDENSE:
<lw_trasladosp>-trasladop-basep,
<lw_trasladosp>-trasladop-impuestop,
<lw_trasladosp>-trasladop-tipofactorp,
<lw_trasladosp>-trasladop-tasaocuotap,
<lw_trasladosp>-trasladop-importep.
ls_pagos-version = '4.0'.
ls_pagos-versionp = '2.0'.
************************************************************************
* "Crea la Cadena Original
* me->create_chain( EXPORTING i_pagos = ls_pagos
* IMPORTING e_chain = z_chain ).
* "Recupera Sello, Certificado y [Link]
* me->get_sign( EXPORTING i_bukrs = i_bkpf-bukrs
* i_erdat = i_bkpf-budat
* i_erzeit = i_bkpf-cputm
* i_chain = z_chain
* IMPORTING e_sello = z_sign
* e_certif = z_certif
* e_nocertif = z_nocertif ).
*
*************************************************************************
* ls_pagos-nocertificado = z_nocertif.
*
* "Crea la Cadena Original
* me->create_chain( EXPORTING i_pagos = ls_pagos
* IMPORTING e_chain = z_chain ).
* "Recupera Sello, Certificado y [Link]
* me->get_sign( EXPORTING i_bukrs = i_bkpf-bukrs
* i_erdat = i_bkpf-budat
* i_erzeit = i_bkpf-cputm
* i_chain = z_chain
* IMPORTING e_sello = z_sign
* e_certif = z_certif
* e_nocertif = z_nocertif ).
*
* "Actualiza las tablas PAGOS y ADICIONALES con la cadena recuperada
* ls_pagos-nocertificado = z_nocertif.
* ls_pagos-certificado = z_certif.
* ls_pagos-sello = z_sign. "* INI FCR Cambios Complemento
de Pago CFDI4.0 ***
TRY.
CALL TRANSFORMATION zsdtr_fecfdi_pagos
SOURCE cfdi = ls_pagos
RESULT XML zcl_ixml_ostream.
"e_xml = z_xml_file.
ENDTRY.
CLEAR lv_string2.
CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
EXPORTING
im_xstring = z_xml_file
im_encoding = 'UTF-8'
IMPORTING
ex_string = lv_string2.
CLEAR z_xml_file.
CALL FUNCTION 'ECATT_CONV_STRING_TO_XSTRING'
EXPORTING
im_string = lv_string2
im_encoding = 'UTF-8'
IMPORTING
ex_xstring = z_xml_file2.
e_xml = z_xml_file2.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_FI_CFDIXMLFE->PROCESS_DATA_CANCEL
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_BKPF TYPE BKPF
* | [--->] I_KUNNR TYPE KUNNR
* | [--->] T_BSEG TYPE BSEG_T
* | [--->] T_DOCNUM TYPE IDMX_CFDI_STAT_LOG
_MX_T(optional)
* | [--->] I_TIPO TYPE CHAR1
* | [--->] T_CHEQUE TYPE ZFI_TT_CHEQUE_CFDI
(optional)
* | [--->] I_SPEI TYPE STRING(optional)
* | [--->] I_DOC_SUSTITUIR TYPE ZFI_E_DOC_SUST(opti
onal)
* | [--->] I_STATUS TYPE ZFI_E_STATUS(optio
nal)
* | [--->] I_BANK_V TYPE CHAR3(optional)
* | [--->] T_MBANCO TYPE ZFI_S_BANCO_CFDI(o
ptional)
* | [<---] E_XML TYPE XSTRING
* | [<---] E_MESSAGE TYPE STRING
* | [<-->] T_PARCIAL TYPE ZFI_TT_PAGOS_CFDI(
optional)
* | [<-->] T_DATA_ADIC TYPE ZFI_TT_PAGO_ADIC(op
tional)
* | [<-->] T_CREATE_TXT TYPE ZSDFES_PAGO(optiona
l)
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD process_data_cancel.
DATA: ls_pagos TYPE ZFIFES_PAGOS, "zsdfes_pagos, "<-- MODIFICA
DO POR DEML 10.01.2018 POR F-802
ls_pago TYPE zsdfes_pago,
ls_doctorelacionado TYPE zsdfes_doctorelacionado,
ls_concepto TYPE zsdfes_conceptos,
ls_fi_pagos TYPE zfi_t_pagos_cfdi,
ls_fi_pago_adic TYPE zfi_t_pago_adic,
ls_knb1 TYPE knb1,
lv_pagos TYPE string,
lv_adrnr TYPE ad_addrnum,
lv_land1 TYPE land1,
lv_stcd1 TYPE stcd1,
lv_paval TYPE paval,
lv_regfis TYPE paval,
lv_pac_test TYPE tvarv_val,
lv_rfc_pac TYPE c LENGTH 15,
lv_name_pac TYPE c LENGTH 50,
lv_sello_pac TYPE c LENGTH 1,
lv_zterm TYPE dzterm,
lv_xsplt TYPE t052-xsplt,
lv_zwels_sat TYPE char2,
lv_string TYPE string,
lv_message TYPE string,
lv_uuid_pag TYPE zfi_e_uuid,
lo_oref TYPE REF TO cx_root,
z_long TYPE i,
lv_numcert TYPE string.
DATA: z_chain TYPE string,
z_sign TYPE string,
z_certif TYPE string,
z_nocertif TYPE string.
*** Transformacion
DATA: z_xml_file TYPE xstring,
zcl_ixml TYPE REF TO if_ixml,
zcl_streamfactory TYPE REF TO if_ixml_stream_factory,
zcl_encoding TYPE REF TO if_ixml_encoding,
zcl_ixml_ostream TYPE REF TO if_ixml_ostream.
ls_pagos-version = '3.3'.
ls_pagos-versionp = '1.0'.
ls_pagos-serie = i_bkpf-blart.
ls_pagos-folio = i_bkpf-belnr.
ls_pagos-tipodecomprobante = 'P'.
ls_pagos-subtotal = '0'.
ls_pagos-total = '0'.
ls_pagos-moneda = 'XXX'. "i_bkpf-waers.
* EMISOR
READ TABLE lt_emisor ASSIGNING <fs_emisor> INDEX 1.
IF sy-subrc EQ 0.
IF lv_rfc_pac IS NOT INITIAL.
ls_pagos-emisor-rfc = lv_rfc_pac.
ls_pagos-emisor-nombre = lv_name_pac.
ELSE.
ls_pagos-emisor-rfc = lv_paval.
CONCATENATE <fs_emisor>-name1 <fs_emisor>-name2 INTO
ls_pagos-emisor-nombre SEPARATED BY space.
ENDIF.
ls_pagos-emisor-regimenfiscal = lv_regfis.
ls_pagos-lugarexpedicion = <fs_emisor>-post_code1.
ENDIF.
* RECEPTOR
SELECT SINGLE land1 adrnr stcd1 INTO (lv_land1, lv_adrnr, lv_stcd1)
FROM kna1
WHERE kunnr = i_kunnr.
IF sy-subrc EQ 0.
SELECT * INTO TABLE lt_receptor FROM adrc
WHERE addrnumber = lv_adrnr.
ls_pagos-receptor-rfc = lv_stcd1.
ls_concepto-claveprodserv = '84111506'.
ls_concepto-cantidad = 1.
ls_concepto-claveunidad = 'ACT'.
ls_concepto-descripcion = 'Pago'.
ls_concepto-valorunitario = '0'.
ls_concepto-importe = '0'.
ls_concepto-unidad = ''.
APPEND ls_concepto TO lt_concepto.
ls_pagos-conceptos[] = lt_concepto[].
" FechaPago
CONCATENATE i_bkpf-budat(4) '-' i_bkpf-budat+4(2) '-' i_bkpf-budat+6(2) 'T
'
i_bkpf-cputm(2) ':' i_bkpf-cputm+2(2) ':' i_bkpf-cputm+4(2)
INTO ls_pago-fechapago.
" MonedaP
ls_pago-monedap = i_bkpf-waers.
" TipoCambioP
IF i_bkpf-kursf NE 0.
ls_pago-tipocambiop = i_bkpf-kursf.
ELSE.
DATA lv_ukurs TYPE ukurs_curr.
IF sy-subrc EQ 0.
ls_pago-tipocambiop = lv_ukurs.
ENDIF.
ENDIF.
" CtaBeneficiario
DATA: lv_hbkid TYPE hbkid,
lv_bankn TYPE bankn,
lv_clabe TYPE bnkn2,
lv_hkont TYPE hkont,
lv_strlen TYPE i.
IF <fs_bseg_i1> IS ASSIGNED.
" Monto
ls_pago-monto = 1.
" NumOperacion
IF <fs_bseg_i1> IS ASSIGNED.
ls_pago-numoperacion = <fs_bseg_i1>-zuonr.
* ls_doctorelacionado-metododepagodr = 'PPD'."RRR:Valor marcado como Fij
o PPD
ENDIF.
CASE i_tipo.
WHEN '1'.
ls_pago-formadepagop = '01'.
ls_fi_pago_adic-tipo = '1'.
ENDCASE.
ls_pago-monto = 1.
* ls_doctorelacionado-monedadr = <fs_parcial>-moneda.
* IF ls_pago-monedap NE ls_doctorelacionado-monedadr.
* ls_doctorelacionado-tipocambiodr = '1'. "<fs_parcial>-
tipocambio.
* ENDIF.
* ls_doctorelacionado-metododepagodr = 'PPD'."RRR:Valor marcado como
Fijo PPD
* ls_doctorelacionado-numparcialidad = 1. "RRR:Valor marcado como
Fijo PPD
* ls_doctorelacionado-impsaldoant = 1.
* ls_doctorelacionado-imppagado = 1.
* ls_doctorelacionado-impsaldoinsoluto = 0.
* APPEND ls_doctorelacionado TO ls_pago-doctorelacionado[].
CLEAR ls_doctorelacionado.
ENDIF.
ls_pagos-nocertificado = z_nocertif.
ls_pagos-certificado = z_certif.
ls_pagos-sello = z_sign.
ENDTRY.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_FI_CFDIXMLFE->READ_TEXT
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_ID TYPE THEAD-TDID
* | [--->] I_NAME TYPE THEAD-TDNAME
* | [--->] I_OBJECT TYPE THEAD-TDOBJECT
* | [<-->] T_LINES TYPE EFG_TAB_TLINE(opti
onal)
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD read_text.
DATA lt_lines TYPE STANDARD TABLE OF tline.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = i_id
language = sy-langu
name = i_name
object = i_object
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
t_lines[] = lt_lines[].
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->READ_TVARVC
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_NAME TYPE RVARI_VNAM
* | [<-()] R_VALUE TYPE RSELOPTION
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD read_tvarvc.
DATA: lt_tvarvc TYPE STANDARD TABLE OF tvarvc,
ls_tvarvc TYPE tvarvc,
ls_value TYPE rsdsselopt.
SELECT *
FROM tvarvc
INTO TABLE lt_tvarvc[]
WHERE name EQ i_name.
ENDLOOP.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->SAVE_LOG
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_CREATE TYPE CHAR1(optional)
* | [--->] I_S_LOG TYPE BAL_S_LOG(optional
)
* | [--->] I_S_MSG TYPE BAL_S_MSG(optional
)
* | [<-->] C_LOG_HANDLE TYPE BALLOGHNDL(optional
)
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD SAVE_LOG.
IF i_create = abap_true.
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = i_s_log
IMPORTING
e_log_handle = c_log_handle
EXCEPTIONS
OTHERS = 1.
ELSE.
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_s_msg = i_s_msg
i_log_handle = c_log_handle
EXCEPTIONS
log_not_found = 1
msg_inconsistent = 2
log_is_full = 3
OTHERS = 4.
IF sy-subrc = 0.
INSERT c_log_handle INTO TABLE lt_log_handle.
*Guarda el mensaje del log
CALL FUNCTION 'BAL_DB_SAVE'
EXPORTING
i_client = sy-mandt
i_save_all = abap_true
i_t_log_handle = lt_log_handle
EXCEPTIONS
log_not_found = 1
save_not_allowed = 2
numbering_error = 3
OTHERS = 4.
IF sy-subrc EQ 0.
CLEAR lt_log_handle[].
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->SAVE_TEXT
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_KEY TYPE THEAD-TDNAME
* | [--->] I_ID TYPE THEAD-TDID
* | [--->] T_TLINE TYPE IDMX_DI_T_TLINE
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD SAVE_TEXT.
DATA: ls_header TYPE thead.
ls_header-tdobject = 'BELEG'.
ls_header-tdname = i_key.
ls_header-tdid = i_id.
ls_header-tdspras = sy-langu.
ls_header-tdlinesize = '072'.
*#->Llamamos a la función que nos completa el texto
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
header = ls_header
* insert = 'X'
savemode_direct = 'X'
TABLES
lines = t_tline
EXCEPTIONS
id = 1
language = 2
name = 3
object = 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.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->SEND_MAIL
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_MAIL TYPE AD_SMTPADR
* | [--->] I_ATTNAME TYPE SO_OBJ_DES
* | [--->] I_BUKRS TYPE BUKRS
* | [<-->] T_ATT_XML TYPE SOLIX_TAB(optional
)
* | [<-->] T_ATT_PDF TYPE SOLIX_TAB(optional
)
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD send_mail.
TYPES: BEGIN OF ty_body,
name TYPE string,
END OF ty_body.
ls_body-name = lv_name1.
TRY.
lo_send_request = cl_bcs=>create_persistent( ).
"subject
CLEAR: lv_sub,
lt_message_body[].
COMMIT WORK.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->SPELL_AMOUNT
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_TOTAL TYPE NETWR
* | [--->] I_WAERS TYPE WAERS (default ='M
XN')
* | [<---] E_AMOUNT_TEXT TYPE CHAR255
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD spell_amount.
DATA: ls_words TYPE spell,
lv_decimals TYPE char2,
lv_denominacion TYPE char15,
lv_sufix TYPE char5.
IF sy-subrc EQ 0.
CASE i_waers.
WHEN 'MXN'.
lv_denominacion = 'PESOS'.
lv_sufix = 'M.N.'.
WHEN 'USD'.
lv_denominacion = 'DOLARES'.
ENDCASE.
lv_decimals = ls_words-decimal(2).
ENDIF.
ENDMETHOD.
* <SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_FI_CFDIXMLFE->SUSTITUIR_PAGO
* +--------------------------------------------------------------------------
-----------------------+
* | [--->] I_BKPF TYPE BKPF(optional)
* | [--->] T_BSEG TYPE BSEG_T(optional)
* | [<-->] T_PARCIAL TYPE ZFI_TT_PAGOS_CFDI(
optional)
* +--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD sustituir_pago.
DATA: lv_msgv1 TYPE SYMSGV.
FIELD-SYMBOLS: <fs_parcial> TYPE zfi_t_pagos_cfdi.
* Deberá actualizar la tabla ZFI_T_PAGOS_CFDI con status S y mandar
* mensaje de que ya pueden realizar nuevo Cobro
CLEAR lv_msgv1.
LOOP AT t_parcial ASSIGNING <fs_parcial>.
UPDATE zfi_t_pagos_cfdi SET status = 'S'
docto_cancel = i_bkpf-belnr
WHERE belnr = <fs_parcial>-belnr
AND bukrs = <fs_parcial>-bukrs
AND gjahr = <fs_parcial>-gjahr
AND kunnr = <fs_parcial>-kunnr
AND vbeln = <fs_parcial>-vbeln.
ENDLOOP.
lv_msgv1 = <fs_parcial>-belnr.
ENDMETHOD.
ENDCLASS.