Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CLASS lcl_aplic_h DEFINITION INHERITING FROM lcl_aplic.
- PUBLIC SECTION.
- METHODS: "carga_textos_botones REDEFINITION,
- devolver_dynpro REDEFINITION,
- "buscar_tabla_de_boton REDEFINITION,
- devolver_tipo_aplicativ REDEFINITION.
- PROTECTED SECTION.
- * CABA IIBB - ARCIBA - Percepciones/Retenciones(TXT)
- TYPES: BEGIN OF gty_data,
- fecha TYPE c LENGTH 8,
- tipodoc TYPE c LENGTH 2,
- documento TYPE c LENGTH 11,
- tipocomp TYPE c LENGTH 2,
- letra TYPE c LENGTH 1,
- cod_lug_em TYPE c LENGTH 4,
- numero TYPE c LENGTH 8,
- base_calc TYPE c LENGTH 15,
- porc_ali TYPE c LENGTH 6,
- monto_pr TYPE c LENGTH 15,
- END OF gty_data.
- TYPES: BEGIN OF gty_retper,
- tipodoc TYPE c LENGTH 2,
- documento TYPE c LENGTH 11,
- nombre TYPE c LENGTH 40,
- domicilio TYPE c LENGTH 40,
- calle_num TYPE c LENGTH 5,
- localidad TYPE c LENGTH 15,
- provincia TYPE c LENGTH 15,
- no_usado TYPE c LENGTH 11,
- c_postal TYPE c LENGTH 8,
- END OF gty_retper.
- TYPES: BEGIN OF gty_ncfact,
- cod_lug_em_nc TYPE c LENGTH 4,
- num_nc TYPE c LENGTH 8,
- cod_lug_em_fac TYPE c LENGTH 4,
- num_fac TYPE c LENGTH 8,
- tipo_fac TYPE c LENGTH 2,
- END OF gty_ncfact.
- * CABA IIBB - ARCIBA - Percepciones (ALV)
- TYPES: BEGIN OF gty_data1_t,
- retper TYPE char3,
- bukrs TYPE bkpf-bukrs,
- belnr TYPE bkpf-belnr,
- gjahr TYPE bkpf-gjahr,
- tipo_nif TYPE j_1atoid,
- nif TYPE stcd1,
- name1 TYPE name1_gp,
- tipo_doc TYPE char2,
- letra TYPE char1,
- cod_lug_em TYPE char4,
- xblnr TYPE bkpf-xblnr,
- bldat TYPE bkpf-bldat,
- hwbas TYPE hwbas_bses,
- qsatz TYPE wt_qsatz,
- wt_qbshh TYPE wt_wt,
- END OF gty_data1_t,
- BEGIN OF gty_data2_t,
- retper TYPE char3,
- bukrs TYPE bkpf-bukrs,
- * belnr TYPE bkpf-belnr,
- * gjahr TYPE bkpf-gjahr,
- tipo_nif TYPE j_1atoid,
- nif TYPE stcd1,
- name1 TYPE name1_gp,
- street TYPE adrc-street,
- str_num TYPE adrc-house_num1,
- ort01 TYPE ort01_gp,
- regio TYPE bezei20,
- pstlz TYPE pstlz,
- END OF gty_data2_t,
- BEGIN OF gty_data3_t,
- retper TYPE char3,
- bukrs TYPE bkpf-bukrs,
- belnr TYPE bkpf-belnr,
- gjahr TYPE bkpf-gjahr,
- tipo_nif TYPE j_1atoid,
- nif TYPE stcd1,
- name1 TYPE name1_gp,
- cod_lug_em_nc TYPE c LENGTH 4,
- letra_nc TYPE c LENGTH 1,
- num_nc TYPE c LENGTH 8,
- doc_sap_fc TYPE bkpf-belnr,
- cod_lug_em_fac TYPE c LENGTH 4,
- letra_fc TYPE c LENGTH 1,
- num_fac TYPE c LENGTH 8,
- tipo_fac TYPE c LENGTH 2,
- END OF gty_data3_t.
- TYPES: BEGIN OF gty_data_t,
- retper TYPE char3,
- bukrs TYPE bkpf-bukrs,
- belnr TYPE bkpf-belnr,
- gjahr TYPE bkpf-gjahr,
- bldat TYPE bkpf-bldat, "Fecha
- stcdt_r TYPE lfa1-stcdt, "Tipo doc retenc.
- stcdt_p TYPE kna1-stcdt, "Tipo doc percep.
- stcd1_r TYPE lfa1-stcd1, "Doc. retenc.
- stcd1_p TYPE kna1-stcd1, "Doc. percerp.
- tipo_doc TYPE char2, "Tipo doc
- letra TYPE char1, "Letra
- cod_lug_em TYPE char4, "Cod.lugar emisión
- xblnr TYPE bkpf-xblnr, "Numero
- hwbas TYPE bset-hwbas, "Base calc.reten
- wt_qsshh TYPE with_item-wt_qsshh, "Base calc.percep.
- kbetr TYPE bset-kbetr, "Porcentaje
- qsatz TYPE t059z-qsatz, "Alicuota
- hwste TYPE bset-hwste, "Monto retenc.
- wt_qbshh TYPE with_item-wt_qbshh, "Monto percep.
- name1_r TYPE lfa1-name1, "Nombre ret
- name1_p TYPE kna1-name1, "Nombre per
- street_r TYPE adrc-street, "Calle
- street_p TYPE adrc-street, "Calle
- str_num_r TYPE adrc-house_num1, "Num.Calle
- str_num_p TYPE adrc-house_num1, "Num.Calle
- ort01_r TYPE lfa1-ort01, "Localidad ret
- ort01_p TYPE kna1-ort01, "Localidad per
- regio_r TYPE t005u-bezei, "Provincia ret
- regio_p TYPE t005u-bezei, "Provincia per
- pstlz_r TYPE lfa1-pstlz, "CP ret
- pstlz_p TYPE kna1-pstlz, "CP per
- cod_lug_em_nc TYPE c LENGTH 4,
- num_nc TYPE c LENGTH 8,
- cod_lug_em_fac TYPE c LENGTH 4,
- num_fac TYPE c LENGTH 8,
- tipo_fac TYPE c LENGTH 2,
- END OF gty_data_t.
- TYPES: BEGIN OF gty_retper_t,
- stcdt_r TYPE lfa1-stcdt, "Tipo doc retenc.
- stcdt_p TYPE kna1-stcdt, "Tipo doc percep.
- stcd1_r TYPE lfa1-stcd1, "Doc. retenc.
- stcd1_p TYPE kna1-stcd1, "Doc. percerp.
- name1_r TYPE lfa1-name1, "Nombre ret
- name1_p TYPE kna1-name1, "Nombre per
- street_r TYPE adrc-street, "Calle
- street_p TYPE adrc-street, "Calle
- str_num_r TYPE adrc-house_num1, "Num.Calle
- str_num_p TYPE adrc-house_num1, "Num.Calle
- ort01_r TYPE lfa1-ort01, "Localidad ret
- ort01_p TYPE kna1-ort01, "Localidad per
- regio_r TYPE t005u-bezei, "Provincia ret
- regio_p TYPE t005u-bezei, "Provincia per
- pstlz_r TYPE lfa1-pstlz, "CP ret
- pstlz_p TYPE kna1-pstlz, "CP per
- END OF gty_retper_t.
- TYPES: BEGIN OF gty_ncfact_t,
- cod_lug_em_nc TYPE c LENGTH 4,
- num_nc TYPE c LENGTH 8,
- cod_lug_em_fac TYPE c LENGTH 4,
- num_fac TYPE c LENGTH 8,
- tipo_fac TYPE c LENGTH 2,
- END OF gty_ncfact_t.
- TYPES: BEGIN OF gty_ncfact_t2,
- cod_lug_em_nc TYPE c LENGTH 4,
- letra_nc TYPE c LENGTH 1,
- num_nc TYPE c LENGTH 8,
- doc_sap_fc TYPE bkpf-belnr,
- cod_lug_em_fac TYPE c LENGTH 4,
- letra_fc TYPE c LENGTH 1,
- num_fac TYPE c LENGTH 8,
- tipo_fac TYPE c LENGTH 2,
- END OF gty_ncfact_t2.
- * Tablas auxiliares
- DATA: gt_zar_fi_cnv_cd2_t TYPE TABLE OF zar_fi_cnv_cd2_t,
- gt_zar_fi_cnv_sib_t TYPE TABLE OF zar_fi_cnv_sib_t,
- gt_zar_fi_cnv_siv_t TYPE TABLE OF zar_fi_cnv_siv_t,
- gt_zfi_tuc_doc_ref TYPE TABLE OF zfi_tuc_doc_ref.
- * Tablas de salida ALV para aplicativo
- DATA: gt_caba_ret TYPE TABLE OF gty_data_t,
- gt_caba TYPE TABLE OF gty_data_t,
- gt_data1 TYPE TABLE OF gty_data1_t,
- gt_data2 TYPE TABLE OF gty_data2_t,
- gt_data3 TYPE TABLE OF gty_data3_t,
- gt_retper TYPE TABLE OF gty_retper_t,
- gt_retper_t TYPE TABLE OF gty_retper_t,
- gt_ncfact TYPE TABLE OF gty_ncfact_t,
- gt_ncfact_t TYPE TABLE OF gty_ncfact_t2.
- METHODS: necesita_zar_fi_cla_doc_t REDEFINITION,
- necesita_zar_fi_cla_ope_t REDEFINITION,
- obtener_tablas_conversion REDEFINITION,
- armar_tabla_aplicativo_per REDEFINITION,
- armar_tabla_aplicativo_ret REDEFINITION,
- armar_archivo_salida REDEFINITION,
- armar_fieldcat REDEFINITION,
- asignar_tabla REDEFINITION,
- tipo_impuesto REDEFINITION.
- ENDCLASS. "lcl_aplic_as DEFINITION
- *----------------------------------------------------------------------*
- * *
- * *
- * IMPLEMENTATIONS *
- * *
- * *
- *----------------------------------------------------------------------*
- *----------------------------------------------------------------------*
- * CLASS lcl_aplic_h IMPLEMENTATION *
- *----------------------------------------------------------------------*
- * *
- *----------------------------------------------------------------------*
- CLASS lcl_aplic_h IMPLEMENTATION.
- *----------------------------------------------------------------------*
- * Method carga_textos_botones *
- *----------------------------------------------------------------------*
- * Carga textos en los botones *
- *----------------------------------------------------------------------*
- * METHOD carga_textos_botones.
- * btn_as1 = 'Tipos de Cbtes'.
- * btn_as2 = 'Tipos de Sit. frente a IIBB'.
- * btn_as3 = 'Tipos de Sit. frente a IVA'.
- * ENDMETHOD. "carga_textos_botones
- *----------------------------------------------------------------------*
- * Method devolver_dynpro *
- *----------------------------------------------------------------------*
- * Devuelve la dynpro determinada por este aplicativo *
- *----------------------------------------------------------------------*
- METHOD devolver_dynpro.
- r_lv_dynpro = '0119'.
- ENDMETHOD. "devolver_pantalla
- *----------------------------------------------------------------------*
- * Method buscar_tabla_de_boton *
- *----------------------------------------------------------------------*
- * Buscar tabla relacionada con el boton *
- *----------------------------------------------------------------------*
- * METHOD buscar_tabla_de_boton.
- * CASE i_lv_ucomm.
- * WHEN 'BTN_AS1'.
- * r_lv_tabla = 'ZAR_FI_CNV_CD2_T'.
- * WHEN 'BTN_AS2'.
- * r_lv_tabla = 'ZAR_FI_CNV_SIB_T'.
- * WHEN 'BTN_AS3'.
- * r_lv_tabla = 'ZAR_FI_CNV_SIV_T'.
- * ENDCASE.
- * ENDMETHOD. "buscar_tabla_de_boton
- *----------------------------------------------------------------------*
- * Method devolver_tipo_aplicativ *
- *----------------------------------------------------------------------*
- * Devuelve el tipo de aplicativo, del objeto en particular *
- *----------------------------------------------------------------------*
- METHOD devolver_tipo_aplicativ.
- r_lv_tipoaplic = 'AS'.
- ENDMETHOD. "devolver_tipo_aplicativ
- *----------------------------------------------------------------------*
- * Method necesita_ZAR_FI_CLA_DOC_T *
- *----------------------------------------------------------------------*
- * ¿Necesita entradas en la tabla ZAR_FI_CLA_DOC_T? *
- *----------------------------------------------------------------------*
- METHOD necesita_zar_fi_cla_doc_t.
- r_lv_necesita = abap_true.
- ENDMETHOD. "necesita_ZAR_FI_CLA_DOC_T
- *----------------------------------------------------------------------*
- * Method necesita_ZAR_FI_CLA_OPE_T *
- *----------------------------------------------------------------------*
- * ¿Necesita entradas en la ZAR_FI_CLA_OPE_T? *
- *----------------------------------------------------------------------*
- METHOD necesita_zar_fi_cla_ope_t.
- r_lv_necesita = abap_true.
- ENDMETHOD. "necesita_ZAR_FI_CLA_OPE_T
- *----------------------------------------------------------------------*
- * Method obtener_tablas_conversion *
- *----------------------------------------------------------------------*
- * Obtener tablas de conversion por aplicativo en particular *
- *----------------------------------------------------------------------*
- METHOD obtener_tablas_conversion.
- r_lv_ok = abap_true.
- * Conversión tipo de comprobante.
- SELECT * FROM zar_fi_cnv_cd2_t INTO TABLE gt_zar_fi_cnv_cd2_t.
- * Conversion tipo de situaciones frente a IIBB
- SELECT * FROM zar_fi_cnv_sib_t INTO TABLE gt_zar_fi_cnv_sib_t.
- * Conversion tipo de situaciones frente a IVA
- SELECT * FROM zar_fi_cnv_siv_t INTO TABLE gt_zar_fi_cnv_siv_t.
- * Clase de documentos FI (BLART) que van a utilizar número de documento en vez de XBLNR
- SELECT * FROM zfi_tuc_doc_ref INTO TABLE gt_zfi_tuc_doc_ref.
- ENDMETHOD. "obtener_tablas_conversion
- *----------------------------------------------------------------------*
- * Method armar_tabla_aplicativo_per *
- *----------------------------------------------------------------------*
- METHOD armar_tabla_aplicativo_per.
- DATA: t_bseg_nc TYPE STANDARD TABLE OF bseg,
- ls_reg_alv TYPE gty_data_t,
- ls_ret_per TYPE gty_retper_t,
- ls_ncfact TYPE gty_ncfact_t2,
- ls_bkpf TYPE bkpf,
- ls_bseg TYPE bseg,
- ls_bseg_nc TYPE bseg,
- ls_bseg_k_d TYPE bseg,
- ls_zar_fi_cnv_cd2_t TYPE zar_fi_cnv_cd2_t,
- ls_zar_fi_cnv_sib_t TYPE zar_fi_cnv_sib_t,
- ls_zar_fi_cnv_siv_t TYPE zar_fi_cnv_siv_t,
- ls_zfi_tuc_doc_ref TYPE zfi_tuc_doc_ref,
- lv_stcd1 TYPE kna1-stcd1,
- lv_stcd2 TYPE kna1-stcd2,
- lv_stcdt TYPE kna1-stcdt,
- lv_name1 TYPE kna1-name1,
- lv_fityp TYPE kna1-fityp,
- lv_regio TYPE kna1-regio,
- lv_stras TYPE kna1-stras,
- lv_telf1 TYPE kna1-telf1,
- lv_pstlz TYPE kna1-pstlz,
- lv_ort01 TYPE kna1-ort01,
- lv_mcod3 TYPE kna1-mcod3,
- lv_adrnr TYPE kna1-adrnr,
- lv_gridt TYPE knb1-gridt,
- lv_len TYPE i,
- lv_xblnr TYPE xblnr.
- TYPES: BEGIN OF lty_bset,
- bukrs TYPE bset-bukrs,
- belnr TYPE bset-belnr,
- gjahr TYPE bset-gjahr,
- ktosl TYPE bset-ktosl,
- hwbas TYPE bset-hwbas,
- hwste TYPE bset-hwste,
- fwbas TYPE bset-fwbas,
- fwste TYPE bset-fwste,
- kbetr TYPE bset-kbetr,
- END OF lty_bset.
- DATA: lt_bset TYPE TABLE OF lty_bset,
- ls_bset TYPE lty_bset,
- ls_gs_bset TYPE bset.
- DATA: lv_nrocomp_aux TYPE string,
- wa_asoc TYPE bkpf,
- lv_ktosl TYPE ktosl.
- " Buscamos la clave de operación correspondiente a percepciones.
- SELECT SINGLE ktosl
- INTO lv_ktosl
- FROM zar_fi_cla_ope_t
- WHERE tapli = 'PR'.
- LOOP AT gt_bset INTO ls_gs_bset.
- MOVE-CORRESPONDING ls_gs_bset TO ls_bset.
- COLLECT ls_bset INTO lt_bset.
- ENDLOOP.
- * Analizo los documentos obtenidos
- LOOP AT gt_bkpf INTO ls_bkpf.
- * Analizo las posiciones del documento
- LOOP AT gt_bseg INTO ls_bseg WHERE bukrs EQ ls_bkpf-bukrs
- AND belnr EQ ls_bkpf-belnr
- AND gjahr EQ ls_bkpf-gjahr.
- CLEAR ls_reg_alv.
- READ TABLE lt_bset INTO ls_bset WITH KEY bukrs = ls_bkpf-bukrs
- belnr = ls_bkpf-belnr
- gjahr = ls_bkpf-gjahr
- ktosl = lv_ktosl.
- "verifico si el doc tiene percepciones
- CHECK sy-subrc EQ 0.
- * Busco el registro de BSEG correspondiente al proveedor/cliente
- READ TABLE gt_bseg_k_d INTO ls_bseg_k_d WITH KEY bukrs = ls_bkpf-bukrs
- belnr = ls_bkpf-belnr
- gjahr = ls_bkpf-gjahr.
- * Obtener correctamente los datos del proveedor o del cliente segun corresponda
- CALL METHOD obtener_datos_prov_clie(
- EXPORTING
- i_lv_bukrs = ls_bkpf-bukrs
- i_lv_belnr = ls_bkpf-belnr
- i_lv_gjahr = ls_bkpf-gjahr
- i_lv_koart = ls_bseg_k_d-koart
- i_lv_lifnr = ls_bseg_k_d-lifnr
- i_lv_kunnr = ls_bseg_k_d-kunnr
- CHANGING
- c_lv_stcd1 = lv_stcd1
- c_lv_stcd2 = lv_stcd2
- c_lv_stcdt = lv_stcdt
- c_lv_name1 = lv_name1
- c_lv_fityp = lv_fityp
- c_lv_regio = lv_regio
- c_lv_stras = lv_stras
- c_lv_telf1 = lv_telf1
- c_lv_pstlz = lv_pstlz
- c_lv_ort01 = lv_ort01
- c_lv_mcod3 = lv_mcod3
- c_lv_adrnr = lv_adrnr
- c_lv_gridt = lv_gridt ).
- * Datos globales:
- vg_retper = 'PER'.
- ls_reg_alv-retper = 'PER'.
- ls_reg_alv-bukrs = ls_bkpf-bukrs.
- ls_reg_alv-belnr = ls_bkpf-belnr.
- ls_reg_alv-gjahr = ls_bkpf-gjahr.
- * Fecha
- ls_reg_alv-bldat = ls_bkpf-bldat.
- * Tipo Doc
- ls_reg_alv-stcdt_p = lv_stcdt.
- * Documento
- ls_reg_alv-stcd1_p = lv_stcd1.
- " Disclaimer:
- " Por definición funcional, los pagos van a tomar el numero de documento interno
- " de SAP y no el XBLNR, también el tipo de documento va a ser de 99 (otros documentos)
- READ TABLE gt_zfi_tuc_doc_ref INTO ls_zfi_tuc_doc_ref WITH KEY blart = ls_bkpf-blart.
- IF sy-subrc EQ 0.
- CONCATENATE ls_bkpf-belnr(2) ls_bkpf-belnr+4 INTO lv_xblnr.
- ls_reg_alv-xblnr = lv_xblnr.
- ls_reg_alv-tipo_doc = 99.
- CLEAR lv_xblnr.
- ELSE.
- IF ls_bkpf-xblnr NE space.
- * Letra de comprobante
- lv_nrocomp_aux = ls_bkpf-xblnr+13(1).
- IF lv_nrocomp_aux IS INITIAL.
- ls_reg_alv-letra = ls_bkpf-xblnr+4(1).
- ELSE.
- ls_reg_alv-letra = ls_bkpf-xblnr+5(1).
- ENDIF.
- * Cod.lugar emisión
- IF lv_nrocomp_aux IS INITIAL.
- ls_reg_alv-cod_lug_em = ls_bkpf-xblnr(4).
- ELSE.
- ls_reg_alv-cod_lug_em = ls_bkpf-xblnr+1(4).
- ENDIF.
- * Número del comprobante
- IF lv_nrocomp_aux IS INITIAL.
- ls_reg_alv-xblnr = ls_bkpf-xblnr+5(8).
- ELSE.
- ls_reg_alv-xblnr = ls_bkpf-xblnr+6(8).
- ENDIF.
- ENDIF.
- ENDIF.
- * Base cálculo
- ls_reg_alv-hwbas = ls_bset-hwbas.
- * Porcentaje
- ls_reg_alv-kbetr = ls_bset-kbetr / 10.
- * Monto
- ls_reg_alv-hwste = ls_bset-hwste.
- * Tipo de Comprobante:
- READ TABLE gt_zar_fi_cnv_cd2_t INTO ls_zar_fi_cnv_cd2_t WITH KEY blart = ls_bkpf-blart
- letra = ls_reg_alv-letra.
- IF sy-subrc = 0.
- lv_len = strlen( ls_zar_fi_cnv_cd2_t-cnvc2 ).
- CASE lv_len. "Por definición funcional, si un tipo de comprobante tiene 3 caracteres, se toman los dos últimos.
- WHEN 2.
- ls_reg_alv-tipo_doc = ls_zar_fi_cnv_cd2_t-cnvc2.
- WHEN 3.
- ls_reg_alv-tipo_doc = ls_zar_fi_cnv_cd2_t-cnvc2+1(2).
- ENDCASE.
- CLEAR lv_len.
- ENDIF.
- COLLECT ls_reg_alv INTO gt_caba.
- * Segundo fichero:
- * Tipo Doc
- ls_ret_per-stcdt_p = lv_stcdt.
- * Documento
- ls_ret_per-stcd1_p = lv_stcd1.
- * Nombre
- ls_ret_per-name1_p = lv_name1.
- * Calle y num
- SELECT SINGLE street house_num1
- FROM adrc
- INTO (ls_ret_per-street_p , ls_ret_per-str_num_p)
- WHERE addrnumber = lv_adrnr.
- * Localidad
- ls_ret_per-ort01_p = lv_ort01.
- * Provincia
- SELECT SINGLE bezei
- FROM t005u
- INTO ls_ret_per-regio_p
- WHERE spras = sy-langu AND
- land1 = 'AR' AND
- bland = lv_regio.
- * Codigo postal
- ls_ret_per-pstlz_p = lv_pstlz.
- COLLECT ls_ret_per INTO gt_retper_t.
- * Tercer Archivo:
- REFRESH t_bseg_nc.
- CLEAR: t_bseg_nc,
- ls_bseg_nc.
- IF ls_bkpf-blart EQ 'DJ' OR
- ls_bkpf-blart EQ 'Z3' OR
- ls_bkpf-blart EQ 'ZC' OR
- ls_bkpf-blart EQ 'ZG'.
- SELECT *
- FROM bseg
- INTO TABLE t_bseg_nc
- WHERE bukrs = ls_bkpf-bukrs AND
- belnr = ls_bkpf-belnr AND
- gjahr = ls_bkpf-gjahr AND
- bschl = '11'.
- ENDIF.
- LOOP AT t_bseg_nc INTO ls_bseg_nc.
- IF ls_bseg_nc-bschl EQ '11' AND ls_bseg_nc-rebzg IS NOT INITIAL.
- SELECT SINGLE *
- FROM bkpf
- INTO wa_asoc
- WHERE belnr = ls_bseg_nc-rebzg
- AND bukrs = ls_bseg_nc-bukrs
- AND gjahr = ls_bseg_nc-rebzj.
- IF sy-subrc EQ 0.
- * Cod.lugar emisión fact.
- lv_nrocomp_aux = wa_asoc-xblnr+13(1).
- IF lv_nrocomp_aux IS INITIAL.
- ls_ncfact-cod_lug_em_fac = wa_asoc-xblnr(4).
- ELSE.
- ls_ncfact-cod_lug_em_fac = wa_asoc-xblnr+1(4).
- ENDIF.
- * Numero fact.
- lv_nrocomp_aux = wa_asoc-xblnr+13(1).
- IF lv_nrocomp_aux IS INITIAL.
- ls_ncfact-num_fac = wa_asoc-xblnr+5(8).
- ELSE.
- ls_ncfact-num_fac = wa_asoc-xblnr+6(8).
- ENDIF.
- ENDIF.
- * Letra fact.
- IF lv_nrocomp_aux IS INITIAL.
- ls_ncfact-letra_fc = wa_asoc-xblnr+4(1).
- ELSE.
- ls_ncfact-letra_fc = wa_asoc-xblnr+5(1).
- ENDIF.
- * Cod.lugar emisión NC
- IF lv_nrocomp_aux IS INITIAL.
- ls_ncfact-cod_lug_em_nc = ls_bkpf-xblnr(4).
- ELSE.
- ls_ncfact-cod_lug_em_nc = ls_bkpf-xblnr+1(4).
- ENDIF.
- * Letra NC
- IF lv_nrocomp_aux IS INITIAL.
- ls_ncfact-letra_nc = ls_bkpf-xblnr+4(1).
- ELSE.
- ls_ncfact-letra_nc = ls_bkpf-xblnr+5(1).
- ENDIF.
- * Número del comprobante NC
- IF lv_nrocomp_aux IS INITIAL.
- ls_ncfact-num_nc = ls_bkpf-xblnr+5(8).
- ELSE.
- ls_ncfact-num_nc = ls_bkpf-xblnr+6(8).
- ENDIF.
- * Documento SAP FC
- ls_ncfact-doc_sap_fc = wa_asoc-belnr.
- * Tipo de Factura:
- READ TABLE gt_zar_fi_cnv_cd2_t INTO ls_zar_fi_cnv_cd2_t WITH KEY blart = wa_asoc-blart
- letra = ls_reg_alv-letra.
- IF sy-subrc = 0.
- lv_len = strlen( ls_zar_fi_cnv_cd2_t-cnvc2 ).
- CASE lv_len. "Por definición funcional, si un tipo de comprobante tiene 3 caracteres, se toman los dos últimos.
- WHEN 2.
- ls_ncfact-tipo_fac = ls_zar_fi_cnv_cd2_t-cnvc2.
- WHEN 3.
- ls_ncfact-tipo_fac = ls_zar_fi_cnv_cd2_t-cnvc2+1(2).
- ENDCASE.
- CLEAR lv_len.
- ENDIF.
- APPEND ls_ncfact TO gt_ncfact_t.
- ENDIF.
- ENDLOOP.
- ENDLOOP.
- ENDLOOP.
- ENDMETHOD. "armar_tabla_aplicativo_per
- *----------------------------------------------------------------------*
- * Method armar_tabla_aplicativo_ret *
- *----------------------------------------------------------------------*
- METHOD armar_tabla_aplicativo_ret.
- TYPES:
- BEGIN OF ty_fact,
- belnr TYPE bseg-belnr,
- buzei TYPE bseg-buzei,
- augbl TYPE bseg-augbl,
- xblnr TYPE bkpf-xblnr,
- del TYPE c LENGTH 1,
- END OF ty_fact,
- ty_t_fact TYPE STANDARD TABLE OF ty_fact,
- BEGIN OF ty_bset_fact,
- belnr TYPE bset-belnr,
- buzei TYPE bset-buzei,
- fwste TYPE bset-fwste,
- END OF ty_bset_fact,
- ty_t_bset_fact TYPE STANDARD TABLE OF ty_bset_fact,
- BEGIN OF ty_bkpf_fact,
- belnr TYPE bkpf-belnr,
- xblnr TYPE bkpf-xblnr,
- END OF ty_bkpf_fact,
- ty_t_bkpf_fact TYPE STANDARD TABLE OF ty_bkpf_fact,
- BEGIN OF ty_iva,
- belnr TYPE bseg-belnr,
- xblnr_fact TYPE bkpf-xblnr,
- fwste TYPE bset-fwste,
- END OF ty_iva,
- ty_t_iva TYPE STANDARD TABLE OF ty_iva.
- DATA:
- ls_reg_alv TYPE gty_data_t,
- ls_reg_txt TYPE gty_data,
- ls_ret_per TYPE gty_retper_t,
- ls_bkpf TYPE bkpf,
- ls_bseg_k_d TYPE bseg,
- ls_with_item TYPE with_item,
- ls_zar_fi_cnv_cd2_t TYPE zar_fi_cnv_cd2_t,
- ls_zar_fi_cnv_sib_t TYPE zar_fi_cnv_sib_t,
- ls_zar_fi_cnv_siv_t TYPE zar_fi_cnv_siv_t,
- ls_zfi_tuc_doc_ref TYPE zfi_tuc_doc_ref,
- lv_stcd1 TYPE kna1-stcd1,
- lv_stcd2 TYPE kna1-stcd2,
- lv_stcdt TYPE kna1-stcdt,
- lv_name1 TYPE kna1-name1,
- lv_fityp TYPE kna1-fityp,
- lv_regio TYPE kna1-regio,
- lv_stras TYPE kna1-stras,
- lv_telf1 TYPE kna1-telf1,
- lv_pstlz TYPE kna1-pstlz,
- lv_ort01 TYPE kna1-ort01,
- lv_mcod3 TYPE kna1-mcod3,
- lv_adrnr TYPE kna1-adrnr,
- lv_gridt TYPE knb1-gridt,
- ls_archivo TYPE gty_archivo,
- wa_asoc TYPE bkpf,
- ls_ncfact LIKE LINE OF gt_ncfact_t,
- lv_len TYPE i,
- lv_xblnr TYPE xblnr,
- lv_exemption TYPE wt_exrt.
- DATA:
- lt_fact TYPE ty_t_fact,
- lt_bset_fact TYPE ty_t_bset_fact,
- lt_iva TYPE ty_t_iva,
- ls_iva TYPE ty_iva,
- lt_bkpf_fact TYPE ty_t_bkpf_fact,
- lt_bkpf_fact_pago TYPE ty_t_bkpf_fact,
- ls_bkpf_fact_pago TYPE ty_bkpf_fact,
- lv_iva TYPE ty_iva-fwste,
- lv_xblnr_fact TYPE ty_iva-xblnr_fact,
- lt_aux_fact LIKE lt_fact,
- lv_nrocomp_aux TYPE c LENGTH 12,
- lt_r_belnr TYPE RANGE OF bseg-belnr,
- ls_r_belnr LIKE LINE OF lt_r_belnr.
- DATA: vl_tabix TYPE sy-tabix.
- DATA: vl_alicu TYPE c.
- DATA lv_aux TYPE /bev3/chumnet.
- DATA lv_aux_2 TYPE /bev3/chumnet.
- DATA lv_dif TYPE /bev3/chumnet.
- FIELD-SYMBOLS:
- <fs_bkpf> TYPE bkpf,
- <fs_fact> TYPE ty_fact,
- <fs_bset_fact> TYPE ty_bset_fact,
- <fs_bkpf_fact> TYPE ty_bkpf_fact,
- <fs_bkpf_fact_pago> TYPE ty_bkpf_fact,
- <fs_iva> TYPE ty_iva.
- * Range documentos pago
- ls_r_belnr-sign = 'I'.
- ls_r_belnr-option = 'EQ'.
- LOOP AT gt_bkpf ASSIGNING <fs_bkpf>.
- ls_r_belnr-low = <fs_bkpf>-belnr.
- APPEND ls_r_belnr TO lt_r_belnr.
- ENDLOOP.
- * Facturas asociadas a los pagos
- SELECT belnr
- buzei
- augbl
- FROM bseg
- INTO TABLE lt_fact
- WHERE bukrs = p_bukrs AND
- gjahr IN so_gjahr AND
- augbl IN lt_r_belnr.
- LOOP AT lt_fact ASSIGNING <fs_fact>.
- IF <fs_fact>-belnr EQ <fs_fact>-augbl.
- <fs_fact>-del = 'X'.
- ENDIF.
- ENDLOOP.
- DELETE lt_fact WHERE del = 'X'.
- SORT lt_fact BY belnr buzei augbl.
- IF lt_fact[] IS NOT INITIAL.
- lt_aux_fact = lt_fact.
- SORT lt_aux_fact BY belnr.
- DELETE ADJACENT DUPLICATES FROM lt_aux_fact COMPARING belnr.
- * Info BKPF facturas
- SELECT belnr
- xblnr
- FROM bkpf
- INTO TABLE lt_bkpf_fact
- FOR ALL ENTRIES IN lt_aux_fact
- WHERE bukrs = p_bukrs AND
- gjahr IN so_gjahr AND
- belnr = lt_aux_fact-belnr.
- * Info BSET facturas
- SELECT belnr
- buzei
- fwste
- FROM bset
- INTO TABLE lt_bset_fact
- FOR ALL ENTRIES IN lt_fact
- WHERE bukrs = p_bukrs AND
- belnr = lt_fact-belnr AND
- gjahr IN so_gjahr AND
- buzei = lt_fact-buzei AND
- ktosl = 'VST'.
- SORT lt_fact BY augbl belnr buzei.
- * IVA para el doc de pago
- LOOP AT lt_fact ASSIGNING <fs_fact>.
- ls_iva-belnr = <fs_fact>-augbl.
- ls_iva-fwste = 0.
- LOOP AT lt_bset_fact ASSIGNING <fs_bset_fact>
- WHERE belnr = <fs_fact>-belnr AND
- buzei = <fs_fact>-buzei.
- ls_iva-fwste = ls_iva-fwste + <fs_bset_fact>-fwste.
- ENDLOOP.
- COLLECT ls_iva INTO lt_iva.
- * XBLNR de la factura
- ls_bkpf_fact_pago-belnr = <fs_fact>-augbl. "Nro Pago
- READ TABLE lt_bkpf_fact
- ASSIGNING <fs_bkpf_fact>
- WITH KEY belnr = <fs_fact>-belnr
- BINARY SEARCH.
- IF sy-subrc EQ 0.
- ls_bkpf_fact_pago-xblnr = <fs_bkpf_fact>-xblnr.
- ENDIF.
- APPEND ls_bkpf_fact_pago TO lt_bkpf_fact_pago.
- ENDLOOP.
- SORT lt_bkpf_fact_pago BY belnr.
- DELETE ADJACENT DUPLICATES FROM lt_bkpf_fact_pago COMPARING belnr.
- ENDIF.
- * Analizo los documentos obtenidos
- LOOP AT gt_bkpf INTO ls_bkpf.
- CLEAR gt_with_item2[].
- LOOP AT gt_with_item INTO ls_with_item WHERE bukrs = ls_bkpf-bukrs
- AND belnr = ls_bkpf-belnr
- AND gjahr = ls_bkpf-gjahr.
- APPEND ls_with_item TO gt_with_item2.
- ENDLOOP.
- CLEAR vl_alicu.
- DESCRIBE TABLE gt_with_item2 LINES vl_tabix.
- LOOP AT gt_with_item INTO ls_with_item WHERE bukrs = ls_bkpf-bukrs
- AND belnr = ls_bkpf-belnr
- AND gjahr = ls_bkpf-gjahr.
- CLEAR ls_reg_alv.
- * Busco el registro de BSEG correspondiente al proveedor/cliente
- READ TABLE gt_bseg_k_d INTO ls_bseg_k_d WITH KEY bukrs = ls_bkpf-bukrs
- belnr = ls_bkpf-belnr
- gjahr = ls_bkpf-gjahr.
- CHECK sy-subrc EQ 0.
- * Obtener correctamente los datos del proveedor o del cliente segun corresponda
- CALL METHOD obtener_datos_prov_clie(
- EXPORTING
- i_lv_bukrs = ls_bkpf-bukrs
- i_lv_belnr = ls_bkpf-belnr
- i_lv_gjahr = ls_bkpf-gjahr
- i_lv_koart = ls_bseg_k_d-koart
- i_lv_lifnr = ls_bseg_k_d-lifnr
- i_lv_kunnr = ls_bseg_k_d-kunnr
- CHANGING
- c_lv_stcd1 = lv_stcd1
- c_lv_stcd2 = lv_stcd2
- c_lv_stcdt = lv_stcdt
- c_lv_name1 = lv_name1
- c_lv_regio = lv_regio
- c_lv_stras = lv_stras
- c_lv_telf1 = lv_telf1
- c_lv_pstlz = lv_pstlz
- c_lv_ort01 = lv_ort01
- c_lv_mcod3 = lv_mcod3
- c_lv_adrnr = lv_adrnr
- c_lv_fityp = lv_fityp
- c_lv_gridt = lv_gridt ).
- * Datos globales:
- vg_retper = 'RET'.
- ls_reg_alv-retper = 'RET'.
- ls_reg_alv-bukrs = ls_bkpf-bukrs.
- ls_reg_alv-belnr = ls_bkpf-belnr.
- ls_reg_alv-gjahr = ls_bkpf-gjahr.
- * Fecha
- ls_reg_alv-bldat = ls_bkpf-bldat.
- * Tipo Doc
- ls_reg_alv-stcdt_r = lv_stcdt.
- * Documento
- ls_reg_alv-stcd1_r = lv_stcd1.
- " Disclaimer:
- " Por definición funcional, los pagos van a tomar el numero de documento interno
- " de SAP y no el XBLNR, también el tipo de documento va a ser de 99 (otros documentos)
- READ TABLE gt_zfi_tuc_doc_ref INTO ls_zfi_tuc_doc_ref WITH KEY blart = ls_bkpf-blart.
- IF sy-subrc EQ 0.
- CONCATENATE ls_bkpf-belnr(2) ls_bkpf-belnr+4 INTO lv_xblnr.
- ls_reg_alv-xblnr = lv_xblnr.
- ls_reg_alv-tipo_doc = 99.
- CLEAR lv_xblnr.
- ELSE.
- IF ls_bkpf-xblnr NE space.
- * Letra de comprobante
- lv_nrocomp_aux = ls_bkpf-xblnr+13(1).
- IF lv_nrocomp_aux IS INITIAL.
- ls_reg_alv-letra = ls_bkpf-xblnr+4(1).
- ELSE.
- ls_reg_alv-letra = ls_bkpf-xblnr+5(1).
- ENDIF.
- * Cod.lugar emisión
- IF lv_nrocomp_aux IS INITIAL.
- ls_reg_alv-cod_lug_em = ls_bkpf-xblnr(4).
- ELSE.
- ls_reg_alv-cod_lug_em = ls_bkpf-xblnr+1(4).
- ENDIF.
- * Número del comprobante
- IF lv_nrocomp_aux IS INITIAL.
- ls_reg_alv-xblnr = ls_bkpf-xblnr+5(8).
- ELSE.
- ls_reg_alv-xblnr = ls_bkpf-xblnr+6(8).
- ENDIF.
- ENDIF.
- ENDIF.
- * Base cálculo
- ls_reg_alv-wt_qsshh = ls_with_item-wt_qsshh.
- * Alicuota
- IF ls_with_item-wt_qszrt IS INITIAL.
- ls_reg_alv-qsatz = ls_with_item-qsatz.
- ELSE.
- lv_exemption = ls_with_item-wt_qszrt / 100. " Aplicamos el porcentaje de exención a la alícuota
- ls_reg_alv-qsatz = ls_with_item-qsatz * ( 1 - lv_exemption ).
- ENDIF.
- * Monto
- ls_reg_alv-wt_qbshh = ls_with_item-wt_qbshh.
- * Tipo de Comprobante:
- READ TABLE gt_zar_fi_cnv_cd2_t INTO ls_zar_fi_cnv_cd2_t WITH KEY blart = ls_bkpf-blart
- letra = ls_reg_alv-letra.
- IF sy-subrc = 0.
- lv_len = strlen( ls_zar_fi_cnv_cd2_t-cnvc2 ).
- CASE lv_len. "Por definición funcional, si un tipo de comprobante tiene 3 caracteres, se toman los dos últimos.
- WHEN 2.
- ls_reg_alv-tipo_doc = ls_zar_fi_cnv_cd2_t-cnvc2.
- WHEN 3.
- ls_reg_alv-tipo_doc = ls_zar_fi_cnv_cd2_t-cnvc2+1(2).
- ENDCASE.
- CLEAR lv_len.
- ENDIF.
- COLLECT ls_reg_alv INTO gt_caba_ret.
- * Segundo fichero:
- * Tipo Doc
- ls_ret_per-stcdt_r = lv_stcdt.
- * Documento
- ls_ret_per-stcd1_r = lv_stcd1.
- * Nombre
- ls_ret_per-name1_r = lv_name1.
- * Calle y num
- SELECT SINGLE street house_num1
- FROM adrc
- INTO (ls_ret_per-street_r , ls_ret_per-str_num_r)
- WHERE addrnumber = lv_adrnr.
- * Localidad
- ls_ret_per-ort01_r = lv_ort01.
- * Provincia
- SELECT SINGLE bezei
- FROM t005u
- INTO ls_ret_per-regio_r
- WHERE spras = sy-langu AND
- land1 = 'AR' AND
- bland = lv_regio.
- * Codigo postal
- ls_ret_per-pstlz_r = lv_pstlz.
- COLLECT ls_ret_per INTO gt_retper_t.
- ENDLOOP.
- ENDLOOP.
- APPEND LINES OF gt_caba_ret TO gt_caba.
- APPEND LINES OF gt_retper_t TO gt_retper.
- APPEND LINES OF gt_ncfact TO gt_ncfact.
- ENDMETHOD. "armar_tabla_aplicativo_ret
- *----------------------------------------------------------------------*
- * Method armar_fieldcat *
- *----------------------------------------------------------------------*
- * Armar fieldcat *
- *----------------------------------------------------------------------*
- METHOD armar_fieldcat.
- DATA: ls_fieldcat TYPE slis_fieldcat_alv. "LVC_S_FCAT.
- load_fieldcat 'RETPER'
- 'Tipo de operación'
- 'Tipo de operación'
- 'Tipo de operación'
- 0 space space.
- load_fieldcat 'BUKRS'
- 'Soc.'(091)
- 'Sociedad'(092)
- 'Sociedad'(092)
- 0 space space.
- IF rb_ar1 IS NOT INITIAL .
- load_fieldcat 'BELNR'
- 'Documento SAP'(093)
- 'Documento SAP'(093)
- 'Documento SAP'(093)
- 0 space space.
- load_fieldcat 'GJAHR'
- 'Ejercicio'(094)
- 'Ejercicio'(094)
- 'Ejercicio'(094)
- 0 space space.
- ENDIF.
- load_fieldcat 'TIPO_NIF'
- 'Tipo NIF'
- 'Tipo NIF'
- 'Tipo NIF'
- 0 space space.
- load_fieldcat 'NIF'
- 'NIF'
- 'NIF'
- 'NIF'
- 0 space space.
- load_fieldcat 'NAME1'
- 'Razon Social'
- 'Razon Social'
- 'Razon Social'
- 0 space space.
- * ENDIF.
- IF rb_ar1 IS NOT INITIAL.
- * IF vg_retper EQ 'RET'.
- load_fieldcat 'TIPO_DOC'
- 'Tipo doc'
- 'Tipo doc'
- 'Tipo doc'
- 0 space space.
- load_fieldcat 'LETRA'
- 'Letra doc'
- 'Letra doc'
- 'Letra doc'
- 0 space space.
- load_fieldcat 'COD_LUG_EM'
- 'Sucursal'
- 'Sucursal'
- 'Sucursal'
- 0 space space.
- load_fieldcat 'XBLNR'
- 'Numero doc'
- 'Numero doc'
- 'Numero doc'
- 0 space space.
- load_fieldcat 'BLDAT'
- 'Fecha del documento'
- 'Fecha del documento'
- 'Fecha del documento'
- 0 space space.
- * IF vg_retper EQ 'PER'.
- * load_fieldcat 'HWBAS'
- * 'Base calc.'
- * 'Base calc.'
- * 'Base calc.'
- * 0 space space.
- *
- * load_fieldcat 'KBETR'
- * 'Porcentaje'
- * 'Porcentaje'
- * 'Porcentaje'
- * 0 space space.
- *
- * load_fieldcat 'HWSTE'
- * 'Monto'
- * 'Monto'
- * 'Monto'
- * 0 space space.
- * ELSE.
- load_fieldcat 'HWBAS'
- 'Base calc.'
- 'Base calc.'
- 'Base calc.'
- 0 space space.
- load_fieldcat 'QSATZ'
- 'Alicuota'
- 'Alicuota'
- 'Alicuota'
- 0 space space.
- load_fieldcat 'WT_QBSHH'
- 'Monto RET/PER'
- 'Monto RET/PER'
- 'Monto RET/PER'
- 0 space space.
- ENDIF.
- IF rb_ar2 IS NOT INITIAL.
- load_fieldcat 'STREET'
- 'Calle'
- 'Calle'
- 'Calle'
- 0 space space.
- load_fieldcat 'STR_NUM'
- 'Numero calle'
- 'Numero calle'
- 'Numero calle'
- 0 space space.
- load_fieldcat 'ORT01'
- 'Localidad'
- 'Localidad'
- 'Localidad'
- 0 space space.
- load_fieldcat 'REGIO'
- 'Provincia'
- 'Provincia'
- 'Provincia'
- 0 space space.
- load_fieldcat 'PSTLZ'
- 'Codigo postal'
- 'Codigo postal'
- 'Codigo postal'
- 0 space space.
- ENDIF.
- IF rb_ar3 IS NOT INITIAL.
- load_fieldcat 'BELNR'
- 'Documento SAP NC'
- 'Documento SAP NC'
- 'Documento SAP NC'
- 0 space space.
- load_fieldcat 'GJAHR'
- 'Ejercicio'
- 'Ejercicio'
- 'Ejercicio'
- 0 space space.
- load_fieldcat 'COD_LUG_EM_NC'
- 'Sucursal NC'
- 'Sucursal NC'
- 'Sucursal NC'
- 0 space space.
- load_fieldcat 'LETRA_NC'
- 'Letra NC'
- 'Letra NC'
- 'Letra NC'
- 0 space space.
- load_fieldcat 'NUM_NC'
- 'Referencia NC'
- 'Referencia NC'
- 'Referencia NC'
- 0 space space.
- load_fieldcat 'DOC_SAP_FC'
- 'Documento SAP FC'
- 'Documento SAP FC'
- 'Documento SAP FC'
- 0 space space.
- load_fieldcat 'COD_LUG_EM_FAC'
- 'Sucursal FC'
- 'Sucursal FC'
- 'Sucursal FC'
- 0 space space.
- load_fieldcat 'LETRA_FC'
- 'Letra FC'
- 'Letra FC'
- 'Letra FC'
- 0 space space.
- load_fieldcat 'NUM_FAC'
- 'Referencia FC'
- 'Referencia FC'
- 'Referencia FC'
- 0 space space.
- load_fieldcat 'TIPO_FAC'
- 'Tipo de Doc.FC'
- 'Tipo de Doc.FC'
- 'Tipo de Doc.FC'
- 0 space space.
- ENDIF.
- * Completa con los campos generales, para todos los aplicativos.
- * super->armar_fieldcat( CHANGING c_lt_fieldcat = c_lt_fieldcat ).
- ENDMETHOD. "armar_fieldcat
- *----------------------------------------------------------------------*
- * Method asignar_tabla *
- *----------------------------------------------------------------------*
- * Asignar tabla *
- *----------------------------------------------------------------------*
- METHOD asignar_tabla.
- DATA: wa_data LIKE LINE OF gt_caba,
- wa_retper LIKE LINE OF gt_retper_t,
- wa_ncfac LIKE LINE OF gt_ncfact_t,
- wa_data1 LIKE LINE OF gt_data1,
- wa_data2 LIKE LINE OF gt_data2,
- wa_data3 LIKE LINE OF gt_data3,
- wa_aux LIKE LINE OF gt_bseg,
- lv_blart TYPE blart.
- LOOP AT gt_caba INTO wa_data.
- MOVE-CORRESPONDING wa_data TO wa_data1.
- IF wa_data-stcdt_r IS NOT INITIAL.
- wa_data1-tipo_nif = wa_data-stcdt_r.
- wa_data1-nif = wa_data-stcd1_r.
- wa_data1-hwbas = wa_data-wt_qsshh.
- wa_data1-qsatz = wa_data-qsatz.
- wa_data1-wt_qbshh = wa_data-wt_qbshh.
- ELSE.
- wa_data1-tipo_nif = wa_data-stcdt_p.
- wa_data1-nif = wa_data-stcd1_p.
- wa_data1-hwbas = wa_data-hwbas.
- wa_data1-qsatz = wa_data-kbetr.
- wa_data1-wt_qbshh = wa_data-hwste.
- ENDIF.
- * LOOP AT gt_retper_t INTO wa_retper.
- IF wa_data-stcdt_r IS NOT INITIAL.
- READ TABLE gt_retper_t INTO wa_retper WITH KEY stcd1_r = wa_data-stcd1_r.
- ELSE.
- READ TABLE gt_retper_t INTO wa_retper WITH KEY stcd1_p = wa_data-stcd1_p.
- ENDIF.
- MOVE-CORRESPONDING wa_retper TO wa_data2.
- IF wa_retper-stcdt_r IS NOT INITIAL.
- MOVE wa_retper-name1_r TO wa_data1-name1.
- MOVE wa_retper-name1_r TO wa_data2-name1.
- MOVE wa_retper-name1_r TO wa_data3-name1.
- ELSE.
- MOVE wa_retper-name1_p TO wa_data1-name1.
- MOVE wa_retper-name1_p TO wa_data2-name1.
- MOVE wa_retper-name1_p TO wa_data3-name1.
- ENDIF.
- * ENDLOOP.
- * IF rb_ar1 IS NOT INITIAL.
- APPEND wa_data1 TO gt_data1.
- * ASSIGN gt_data1 TO <fs_alv>.
- * ELSEIF rb_ar2 IS NOT INITIAL.
- MOVE-CORRESPONDING wa_data1 TO wa_data2.
- * LOOP AT gt_retper_t INTO wa_retper.
- IF wa_data-stcdt_r IS NOT INITIAL.
- READ TABLE gt_retper_t INTO wa_retper WITH KEY stcd1_r = wa_data-stcd1_r.
- ELSE.
- READ TABLE gt_retper_t INTO wa_retper WITH KEY stcd1_p = wa_data-stcd1_p.
- ENDIF.
- MOVE-CORRESPONDING wa_retper TO wa_data2.
- IF wa_retper-stcdt_r IS NOT INITIAL.
- MOVE wa_retper-name1_r TO wa_data2-name1.
- MOVE wa_retper-street_r TO wa_data2-street.
- MOVE wa_retper-str_num_r TO wa_data2-str_num.
- MOVE wa_retper-ort01_r TO wa_data2-ort01.
- MOVE wa_retper-regio_r TO wa_data2-regio.
- MOVE wa_retper-pstlz_r TO wa_data2-pstlz.
- ELSE.
- MOVE wa_retper-name1_p TO wa_data2-name1.
- MOVE wa_retper-street_p TO wa_data2-street.
- MOVE wa_retper-str_num_p TO wa_data2-str_num.
- MOVE wa_retper-ort01_p TO wa_data2-ort01.
- MOVE wa_retper-regio_p TO wa_data2-regio.
- MOVE wa_retper-pstlz_p TO wa_data2-pstlz.
- ENDIF.
- APPEND wa_data2 TO gt_data2.
- * ENDLOOP.
- * ASSIGN gt_data2 TO <fs_alv>.
- * ELSEIF rb_ar3 IS NOT INITIAL.
- IF wa_data-stcdt_r IS NOT INITIAL.
- wa_data3-name1 = wa_retper-name1_r.
- ELSE.
- wa_data3-name1 = wa_retper-name1_p.
- ENDIF.
- MOVE-CORRESPONDING wa_data1 TO wa_data3.
- LOOP AT gt_ncfact_t INTO wa_ncfac.
- IF wa_ncfac-num_nc EQ wa_data-xblnr.
- * READ TABLE gt_ncfact_t INTO wa_ncfac WITH KEY num_nc = wa_data-xblnr.
- IF sy-subrc EQ 0 AND wa_ncfac IS NOT INITIAL.
- MOVE-CORRESPONDING wa_ncfac TO wa_data3.
- * MOVE wa_data-belnr TO wa_data3-belnr.
- IF wa_data3-retper NE 'RET'.
- SELECT SINGLE blart
- FROM bkpf
- INTO lv_blart
- WHERE bukrs = wa_data3-bukrs AND
- belnr = wa_data3-belnr AND
- gjahr = wa_data3-gjahr.
- IF lv_blart EQ 'DJ' OR
- lv_blart EQ 'Z3' OR
- lv_blart EQ 'ZG' OR
- lv_blart EQ 'ZC'.
- APPEND wa_data3 TO gt_data3.
- ENDIF.
- ENDIF.
- ENDIF.
- ENDIF.
- ENDLOOP.
- ASSIGN gt_data3 TO <fs_alv>.
- CLEAR: wa_data,
- wa_data1,
- wa_data2,
- wa_data3.
- ENDLOOP.
- SORT gt_data2 BY nif.
- DELETE ADJACENT DUPLICATES FROM gt_data2 COMPARING nif.
- SORT gt_data3 BY bukrs belnr gjahr.
- DELETE ADJACENT DUPLICATES FROM gt_data3 COMPARING bukrs belnr gjahr.
- IF rb_ar1 IS NOT INITIAL.
- ASSIGN gt_data1 TO <fs_alv>.
- ELSEIF rb_ar2 IS NOT INITIAL.
- ASSIGN gt_data2 TO <fs_alv>.
- ELSEIF rb_ar3 IS NOT INITIAL.
- ASSIGN gt_data3 TO <fs_alv>.
- ENDIF.
- ENDMETHOD. "asignar_tabla
- *----------------------------------------------------------------------*
- * Method tipo_impuesto *
- *----------------------------------------------------------------------*
- * Devuelve el tipo de impuesto, para realizar o no funcionalidades*
- *----------------------------------------------------------------------*
- METHOD tipo_impuesto.
- r_lv_tipo_impuesto = 'P'(c03).
- ENDMETHOD. "tipo_impuesto
- METHOD armar_archivo_salida.
- DATA:
- ls_reg_alv TYPE gty_data_t,
- ls_reg_txt TYPE gty_data,
- ls_retper TYPE gty_retper,
- ls_retper_t TYPE gty_retper_t,
- ls_ncfact_t LIKE LINE OF gt_ncfact_t,
- ls_ncfact TYPE gty_ncfact,
- lv_len TYPE i,
- ls_archivo TYPE gty_archivo,
- lv_num1(12) TYPE c,
- lv_dec1(2) TYPE c,
- lv_num2(2) TYPE c,
- lv_dec2(3) TYPE c,
- lv_aux TYPE string,
- lv_aux2 TYPE string.
- SORT gt_caba BY bldat.
- SORT gt_retper BY stcd1_r stcd1_p.
- DELETE ADJACENT DUPLICATES FROM gt_retper COMPARING stcd1_r stcd1_p.
- LOOP AT gt_caba INTO ls_reg_alv.
- CLEAR lv_aux.
- PERFORM f_format USING ls_reg_alv-bldat ' ' CHANGING lv_aux.
- MOVE lv_aux TO ls_reg_txt-fecha.
- PERFORM f_format USING ls_reg_alv-tipo_doc ' ' CHANGING lv_aux.
- MOVE lv_aux TO ls_reg_txt-tipocomp.
- PERFORM f_format USING ls_reg_alv-letra ' ' CHANGING lv_aux.
- MOVE lv_aux TO ls_reg_txt-letra.
- PERFORM f_format USING ls_reg_alv-cod_lug_em ' ' CHANGING lv_aux.
- MOVE lv_aux TO ls_reg_txt-cod_lug_em.
- PERFORM f_format USING ls_reg_alv-xblnr ' ' CHANGING lv_aux.
- MOVE lv_aux TO ls_reg_txt-numero.
- IF ls_reg_alv-stcdt_p IS NOT INITIAL.
- PERFORM f_format USING ls_reg_alv-stcdt_p ' ' CHANGING lv_aux.
- MOVE lv_aux TO ls_reg_txt-tipodoc.
- PERFORM f_format USING ls_reg_alv-stcd1_p ' ' CHANGING lv_aux.
- MOVE lv_aux TO ls_reg_txt-documento.
- lv_aux = ls_reg_alv-hwbas.
- SPLIT lv_aux AT '.' INTO lv_num1 lv_dec1.
- PERFORM f_format USING lv_num1 'M' CHANGING lv_num1.
- " PERFORM f_format USING lv_dec1 CHANGING lv_dec1.
- CONCATENATE lv_num1 '.' lv_dec1(2) INTO ls_reg_txt-base_calc.
- lv_aux = ls_reg_alv-kbetr.
- SPLIT lv_aux AT '.' INTO lv_num2 lv_dec2.
- PERFORM f_format USING lv_num2 'A' CHANGING lv_num2.
- " PERFORM f_format USING lv_dec2 CHANGING lv_dec2.
- CONCATENATE lv_num2 '.' lv_dec2(3) INTO ls_reg_txt-porc_ali.
- lv_aux = ls_reg_alv-hwste.
- SPLIT lv_aux AT '.' INTO lv_num1 lv_dec1.
- PERFORM f_format USING lv_num1 'M' CHANGING lv_num1.
- " PERFORM f_format USING lv_dec1 CHANGING lv_dec1.
- CONCATENATE lv_num1 '.' lv_dec1(2) INTO ls_reg_txt-monto_pr.
- ELSE.
- PERFORM f_format USING ls_reg_alv-stcdt_r ' ' CHANGING lv_aux.
- MOVE lv_aux TO ls_reg_txt-tipodoc.
- PERFORM f_format USING ls_reg_alv-stcd1_r ' ' CHANGING lv_aux.
- MOVE lv_aux TO ls_reg_txt-documento.
- lv_aux = ls_reg_alv-wt_qsshh.
- SPLIT lv_aux AT '.' INTO lv_num1 lv_dec1.
- PERFORM f_format USING lv_num1 'M' CHANGING lv_num1.
- " PERFORM f_format USING lv_dec1 CHANGING lv_dec1.
- CONCATENATE lv_num1 '.' lv_dec1 INTO ls_reg_txt-base_calc.
- lv_aux = ls_reg_alv-qsatz.
- SPLIT lv_aux AT '.' INTO lv_num2 lv_dec2.
- PERFORM f_format USING lv_num2 'A' CHANGING lv_num2.
- " PERFORM f_format USING lv_dec2 CHANGING lv_dec2.
- CONCATENATE lv_num2 '.' lv_dec2 INTO ls_reg_txt-porc_ali.
- lv_aux = ls_reg_alv-wt_qbshh.
- SPLIT lv_aux AT '.' INTO lv_num1 lv_dec1.
- PERFORM f_format USING lv_num1 'M' CHANGING lv_num1.
- " PERFORM f_format USING lv_dec1 CHANGING lv_dec1.
- CONCATENATE lv_num1 '.' lv_dec1 INTO ls_reg_txt-monto_pr.
- ENDIF.
- * LOOP AT gt_retper_t INTO ls_retper_t.
- IF ls_reg_alv-stcdt_p IS NOT INITIAL.
- READ TABLE gt_retper_t INTO ls_retper_t WITH KEY stcd1_p = ls_reg_alv-stcd1_p.
- ELSE.
- READ TABLE gt_retper_t INTO ls_retper_t WITH KEY stcd1_r = ls_reg_alv-stcd1_r.
- ENDIF.
- IF ls_retper_t-stcdt_r IS NOT INITIAL.
- MOVE ls_retper_t-stcdt_r TO ls_retper-tipodoc.
- MOVE ls_retper_t-stcd1_r TO ls_retper-documento.
- MOVE ls_retper_t-name1_r TO ls_retper-nombre.
- MOVE ls_retper_t-street_r TO ls_retper-domicilio.
- MOVE ls_retper_t-str_num_r TO ls_retper-calle_num.
- MOVE ls_retper_t-ort01_r TO ls_retper-localidad.
- MOVE ls_retper_t-regio_r TO ls_retper-provincia.
- MOVE ls_retper_t-pstlz_r TO ls_retper-c_postal.
- ELSE.
- MOVE ls_retper_t-stcdt_p TO ls_retper-tipodoc.
- MOVE ls_retper_t-stcd1_p TO ls_retper-documento.
- MOVE ls_retper_t-name1_p TO ls_retper-nombre.
- MOVE ls_retper_t-street_p TO ls_retper-domicilio.
- MOVE ls_retper_t-str_num_p TO ls_retper-calle_num.
- MOVE ls_retper_t-ort01_p TO ls_retper-localidad.
- MOVE ls_retper_t-regio_p TO ls_retper-provincia.
- MOVE ls_retper_t-pstlz_p TO ls_retper-c_postal.
- ENDIF.
- * ENDLOOP.
- * READ TABLE gt_ncfact_t INTO ls_ncfact_t WITH KEY num_nc = ls_reg_alv-xblnr.
- ** LOOP AT gt_ncfact_t INTO ls_ncfact_t.
- * IF sy-subrc EQ 0 AND ls_ncfact_t-num_nc IS NOT INITIAL.
- * MOVE-CORRESPONDING ls_ncfact_t TO ls_ncfact.
- * ENDIF.
- ** ENDLOOP.
- * Determino longitud del registro
- DESCRIBE FIELD ls_reg_txt LENGTH lv_len IN CHARACTER MODE.
- IF ls_reg_txt NE ' '.
- * Agrego lineas al archivo de salida
- ls_archivo-linea = ls_reg_txt.
- ls_archivo-inte = lv_len.
- INSERT ls_archivo INTO TABLE gt_archivo1.
- ENDIF.
- DESCRIBE FIELD ls_retper LENGTH lv_len IN CHARACTER MODE.
- IF ls_retper NE ' '.
- * Agrego lineas al archivo de salida
- ls_archivo-linea = ls_retper.
- ls_archivo-inte = lv_len.
- INSERT ls_archivo INTO TABLE gt_archivo2.
- ENDIF.
- ENDLOOP.
- * READ TABLE gt_ncfact_t INTO ls_ncfact_t WITH KEY num_nc = ls_reg_alv-xblnr.
- LOOP AT gt_ncfact_t INTO ls_ncfact_t.
- IF sy-subrc EQ 0 AND ls_ncfact_t-num_nc IS NOT INITIAL.
- * MOVE-CORRESPONDING ls_ncfact_t TO ls_ncfact.
- MOVE ls_ncfact_t-cod_lug_em_nc TO ls_ncfact-cod_lug_em_nc.
- MOVE ls_ncfact_t-num_nc TO ls_ncfact-num_nc.
- MOVE ls_ncfact_t-cod_lug_em_fac TO ls_ncfact-cod_lug_em_fac.
- MOVE ls_ncfact_t-num_fac TO ls_ncfact-num_fac.
- MOVE ls_ncfact_t-tipo_fac TO ls_ncfact-tipo_fac.
- ENDIF.
- DESCRIBE FIELD ls_ncfact LENGTH lv_len IN CHARACTER MODE.
- IF ls_ncfact NE ' '.
- * Agrego lineas al archivo de salida
- ls_archivo-linea = ls_ncfact.
- ls_archivo-inte = lv_len.
- INSERT ls_archivo INTO TABLE gt_archivo3.
- ENDIF.
- ENDLOOP.
- SORT gt_archivo1.
- SORT gt_archivo2.
- SORT gt_archivo3.
- DELETE ADJACENT DUPLICATES FROM gt_archivo1.
- DELETE ADJACENT DUPLICATES FROM gt_archivo2.
- DELETE ADJACENT DUPLICATES FROM gt_archivo3.
- ENDMETHOD. "armar_archivo_salida
- ENDCLASS. "lcl_aplic_as IMPLEMENTATION
- *&---------------------------------------------------------------------*
- *& Form F_FORMAT
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * -->P_LS_REG_ALV_BLDAT text
- * <--P_LS_REG_TXT_FECHA text
- *----------------------------------------------------------------------*
- FORM f_format USING p_input TYPE any
- p_code TYPE char1
- CHANGING p_output TYPE any.
- DATA: lv_input TYPE string,
- lv_output TYPE string,
- lv_out1(12) TYPE c,
- lv_out2(2) TYPE c.
- lv_input = p_input.
- IF p_code EQ 'M'."Monto
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = lv_input
- IMPORTING
- output = lv_out1.
- MOVE lv_out1 TO p_output.
- ELSEIF p_code EQ 'A'."Alicuota o porcentaje
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = lv_input
- IMPORTING
- output = lv_out2.
- MOVE lv_out2 TO p_output.
- ELSE."Otros datos
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = lv_input
- IMPORTING
- output = lv_output.
- MOVE lv_output TO p_output.
- ENDIF.
- ENDFORM. " F_FORMAT
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement