Sunteți pe pagina 1din 57

Ejemplo de un Reporte Abap para PDT (Per)

************************************************************************

* INFORMACIN GENERAL

************************************************************************

REPORT zfir_pdt001.

INCLUDE zfir_pdt001_pantalla_seleccion.

INCLUDE zfir_pdt001_procesos.

START-OF-SELECTION.

PERFORM building_report.

*&---------------------------------------------------------------------*

*& Include ZFIR_PDT001_PANTALLA_SELECCION

*&---------------------------------------------------------------------*

TABLES: bkpf, bseg, kna1, lfa1, with_item, t001.

SELECTION-SCREEN: BEGIN OF BLOCK a1 WITH FRAME TITLE text-a01.

PARAMETERS: p_bukrs TYPE t001-bukrs OBLIGATORY DEFAULT '1101',

p_postm TYPE t059p-wt_postm DEFAULT 1,

p_monat TYPE monat OBLIGATORY DEFAULT sy-datum+4(2),

p_gjahr TYPE gjahr OBLIGATORY DEFAULT sy-datum(4).

SELECT-OPTIONS: r_budat FOR bkpf-budat NO-DISPLAY,

r_augdt FOR bseg-augdt NO-DISPLAY,

r_lifnr FOR lfa1-lifnr MODIF ID md1,

r_kunnr FOR kna1-kunnr MODIF ID md2,

r_witht FOR with_item-witht MATCHCODE OBJECT zsh_t059p_pe,

r_withcd FOR with_item-wt_withcd.

SELECTION-SCREEN: END OF BLOCK a1.


SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-a02.

PARAMETERS: p_pdt697 RADIOBUTTON GROUP rad1 DEFAULT 'X' USER-COMMAND uc,

p_pdt633 RADIOBUTTON GROUP rad1,

p_pdt626 RADIOBUTTON GROUP rad1,

p_pdt621 RADIOBUTTON GROUP rad1,

p_pdt617 RADIOBUTTON GROUP rad1,

p_pdt601 RADIOBUTTON GROUP rad1.

SELECTION-SCREEN: END OF BLOCK b1.

INITIALIZATION.

r_kunnr-sign = 'I'.

r_kunnr-option = 'CP'.

r_kunnr-low = '*'. APPEND r_kunnr.

r_witht-sign = 'I'.

r_witht-option = 'EQ'.

r_witht-low = 'PE'.APPEND r_witht.

r_withcd-sign = 'I'.

r_withcd-option = 'EQ'.

r_withcd-low = 'P2'.APPEND r_withcd.

r_withcd-low = 'P4'.APPEND r_withcd.

AT SELECTION-SCREEN OUTPUT.

IF p_pdt697 EQ 'X' OR p_pdt633 EQ 'X'.

LOOP AT SCREEN.

IF screen-group1 = 'MD1'.

screen-active = 0.

MODIFY SCREEN.

ENDIF.
IF screen-group1 = 'MD2'.

screen-active = 1.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

ELSEIF p_pdt626 EQ 'X' OR p_pdt621 EQ 'X'

OR p_pdt617 EQ 'X' OR p_pdt601 EQ 'X'.

LOOP AT SCREEN.

IF screen-group1 = 'MD1'.

screen-active = 1.

MODIFY SCREEN.

ENDIF.

IF screen-group1 = 'MD2'.

screen-active = 0.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

ENDIF.

AT SELECTION-SCREEN ON RADIOBUTTON GROUP rad1.

IF sy-ucomm EQ 'UC'.

IF p_pdt626 EQ 'X' OR p_pdt621 EQ 'X'

OR p_pdt617 EQ 'X' OR p_pdt601 EQ 'X'.

CLEAR: r_lifnr, r_kunnr.

REFRESH: r_lifnr, r_kunnr.

r_lifnr-sign = 'I'.

r_lifnr-option = 'CP'.

r_lifnr-low = '*'. APPEND r_lifnr.

ENDIF.
IF p_pdt697 EQ 'X' OR p_pdt633 EQ 'X'.

CLEAR: r_kunnr, r_lifnr.

REFRESH: r_kunnr, r_lifnr.

r_kunnr-sign = 'I'.

r_kunnr-option = 'CP'.

r_kunnr-low = '*'. APPEND r_kunnr.

ENDIF.

CLEAR: r_witht.

REFRESH: r_witht.

IF p_pdt697 EQ 'X' OR p_pdt633 EQ 'X'

OR p_pdt621 EQ 'X'.

r_witht-sign = 'I'.

r_witht-option = 'EQ'.

r_witht-low = 'PE'.APPEND r_witht.

ELSEIF p_pdt626 EQ 'X'.

r_witht-sign = 'I'.

r_witht-option = 'EQ'.

r_witht-low = 'RT'.APPEND r_witht.

ELSEIF p_pdt617 EQ 'X'.

r_witht-sign = 'I'.

r_witht-option = 'EQ'.

r_witht-low = 'RN'.APPEND r_witht.

ELSEIF p_pdt601 EQ 'X'.

r_witht-sign = 'I'.

r_witht-option = 'EQ'.

r_witht-low = 'R4'.APPEND r_witht.

ENDIF.
CLEAR: r_withcd.

REFRESH: r_withcd.

IF p_pdt697 EQ 'X'.

r_withcd-sign = 'I'.

r_withcd-option = 'EQ'.

r_withcd-low = 'P2'.APPEND r_withcd.

r_withcd-low = 'P4'.APPEND r_withcd.

ELSEIF p_pdt633 EQ 'X'.

r_withcd-sign = 'I'.

r_withcd-option = 'EQ'.

r_withcd-low = 'P3'.APPEND r_withcd.

ELSEIF p_pdt626 EQ 'X'.

r_withcd-sign = 'I'.

r_withcd-option = 'EQ'.

r_withcd-low = 'T1'.APPEND r_withcd.

r_withcd-low = 'T2'.APPEND r_withcd.

ELSEIF p_pdt621 EQ 'X'.

r_withcd-sign = 'I'.

r_withcd-option = 'EQ'.

r_withcd-low = 'P2'.APPEND r_withcd.

r_withcd-low = 'P3'.APPEND r_withcd.

r_withcd-low = 'P4'.APPEND r_withcd.

ELSEIF p_pdt617 EQ 'X'.

r_withcd-sign = 'I'.

r_withcd-option = 'NE'.

r_withcd-low = '00'.APPEND r_withcd.

ENDIF.

ENDIF.
*&---------------------------------------------------------------------*

*& Include ZFIR_PDT001_PROCESOS

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*& Form BUILDING_REPORT

*&---------------------------------------------------------------------*

FORM building_report.

DATA(lw_layout) = VALUE slis_layout_alv( ).

DATA(lt_fieldcat) = VALUE slis_t_fieldcat_alv( ).

DATA(lt_events) = VALUE slis_t_event( ).

DATA(lt_sort) = VALUE slis_t_sortinfo_alv( ).

DATA(lt_rfpos_wt) = VALUE ztt_wrfpos_wt( ).

PERFORM obtener_datos CHANGING lt_rfpos_wt.

IF p_pdt697 EQ abap_true.

DATA(lt_struc_pdt697) = VALUE ztt_wstruc_pdt697( ).

PERFORM ejecutar_alv CHANGING lw_layout lt_events lt_sort lt_fieldcat lt_rfpos_wt


lt_struc_pdt697.

ELSEIF p_pdt633 EQ abap_true.

DATA(lt_struc_pdt633) = VALUE ztt_wstruc_pdt633( ).

PERFORM ejecutar_alv CHANGING lw_layout lt_events lt_sort lt_fieldcat lt_rfpos_wt


lt_struc_pdt633.

ELSEIF p_pdt626 EQ abap_true.

DATA(lt_struc_pdt626) = VALUE ztt_wstruc_pdt626( ).

PERFORM ejecutar_alv CHANGING lw_layout lt_events lt_sort lt_fieldcat lt_rfpos_wt


lt_struc_pdt626.

ELSEIF p_pdt621 EQ abap_true.

DATA(lt_struc_pdt621) = VALUE ztt_wstruc_pdt621( ).


PERFORM ejecutar_alv CHANGING lw_layout lt_events lt_sort lt_fieldcat lt_rfpos_wt
lt_struc_pdt621.

ELSEIF p_pdt617 EQ abap_true.

DATA(lt_struc_pdt617) = VALUE ztt_wstruc_pdt617( ).

PERFORM ejecutar_alv CHANGING lw_layout lt_events lt_sort lt_fieldcat lt_rfpos_wt


lt_struc_pdt617.

ELSEIF p_pdt601 EQ abap_true.

DATA(lt_struc_pdt601) = VALUE ztt_wstruc_pdt601( ).

PERFORM ejecutar_alv CHANGING lw_layout lt_events lt_sort lt_fieldcat lt_rfpos_wt


lt_struc_pdt601.

ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form OBTENER_DATOS

*&---------------------------------------------------------------------*

FORM obtener_datos CHANGING pt_rfpos_wt TYPE STANDARD TABLE.

IF p_pdt626 EQ abap_true.

r_augdt-sign = 'I'.

r_augdt-option = 'BT'.

r_augdt-low = p_gjahr && p_monat && '01'.

CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'

EXPORTING

day_in = r_augdt-low

IMPORTING

last_day_of_month = r_augdt-high

EXCEPTIONS

day_in_no_date = 1

others = 2.
IF sy-subrc EQ 0.

APPEND r_augdt.

ENDIF.

ELSE.

r_budat-sign = 'I'.

r_budat-option = 'BT'.

r_budat-low = p_gjahr && p_monat && '01'.

CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'

EXPORTING

day_in = r_budat-low

IMPORTING

last_day_of_month = r_budat-high

EXCEPTIONS

day_in_no_date = 1

others = 2.

IF sy-subrc EQ 0.

APPEND r_budat.

ENDIF.

ENDIF.

CALL FUNCTION 'ZFIRFC_RETENCIONES'

EXPORTING

p_sociedad = p_bukrs

wt_inst_contab = p_postm

TABLES

r_budat = r_budat

r_augdt = r_augdt

r_lifnr = r_lifnr

r_kunnr = r_kunnr

r_witht = r_witht
r_withcd = r_withcd

gt_rfpos_wt = pt_rfpos_wt.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form EJECUTAR_ALV

*&---------------------------------------------------------------------*

FORM ejecutar_alv CHANGING pw_layout TYPE slis_layout_alv

pt_events TYPE ANY TABLE

pt_sort TYPE ANY TABLE

pt_fieldcat TYPE ANY TABLE

pt_rfpos_wt TYPE STANDARD TABLE

pt_struc_pdt TYPE STANDARD TABLE.

IF p_pdt697 EQ abap_true.

PERFORM generar_fieldcat_697 CHANGING pt_fieldcat pt_struc_pdt.

ELSEIF p_pdt633 EQ abap_true.

PERFORM generar_fieldcat_633 CHANGING pt_fieldcat pt_struc_pdt.

ELSEIF p_pdt626 EQ abap_true.

PERFORM generar_fieldcat_626 CHANGING pt_fieldcat pt_struc_pdt.

ELSEIF p_pdt621 EQ abap_true.

PERFORM generar_fieldcat_621 CHANGING pt_fieldcat pt_struc_pdt.

ELSEIF p_pdt617 EQ abap_true.

PERFORM generar_fieldcat_617 CHANGING pt_fieldcat pt_struc_pdt.

ELSEIF p_pdt601 EQ abap_true.

PERFORM generar_fieldcat_601 CHANGING pt_fieldcat pt_struc_pdt.

ENDIF.

PERFORM generar_layout CHANGING pw_layout.

PERFORM generar_sort CHANGING pt_sort pt_struc_pdt.


PERFORM generar_eventos CHANGING pt_events.

PERFORM llenar_tabla_pdt CHANGING pt_rfpos_wt pt_struc_pdt.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = sy-repid

i_callback_pf_status_set = 'PF_STATUS_SET'

i_callback_user_command = 'USER_COMMAND'

is_layout = pw_layout

it_fieldcat = pt_fieldcat[]

i_default = 'X'

it_sort = pt_sort[]

it_events = pt_events[]

TABLES

t_outtab = pt_struc_pdt[]

EXCEPTIONS

program_error =1

OTHERS = 2.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form LLENAR_TABLA_PDT

*&---------------------------------------------------------------------*

FORM llenar_tabla_pdt CHANGING pt_rfpos_wt TYPE STANDARD TABLE

pt_struc_pdt TYPE STANDARD TABLE.

IF p_pdt697 EQ abap_true.

PERFORM tabla_pdt697 USING pt_rfpos_wt CHANGING pt_struc_pdt.

ELSEIF p_pdt633 EQ abap_true.

PERFORM tabla_pdt633 USING pt_rfpos_wt CHANGING pt_struc_pdt.

ELSEIF p_pdt626 EQ abap_true.


PERFORM tabla_pdt626 USING pt_rfpos_wt CHANGING pt_struc_pdt.

ELSEIF p_pdt621 EQ abap_true.

PERFORM tabla_pdt621 USING pt_rfpos_wt CHANGING pt_struc_pdt.

ELSEIF p_pdt617 EQ abap_true.

PERFORM tabla_pdt617 USING pt_rfpos_wt CHANGING pt_struc_pdt.

ELSEIF p_pdt601 EQ abap_true.

PERFORM tabla_pdt601 USING pt_rfpos_wt CHANGING pt_struc_pdt.

ENDIF.

EXPORT pt_struc_pdt FROM pt_struc_pdt TO SHARED MEMORY indx(aa) ID 'LM'.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form TABLA_PDT697

*&---------------------------------------------------------------------*

FORM tabla_pdt697 USING pt_rfpos_wt TYPE STANDARD TABLE

CHANGING pt_struc_pdt TYPE STANDARD TABLE.

DATA(lw_rfpos_wt) = VALUE zwrfpos_wt( ).

DATA(lw_struc_pdt697) = VALUE zwstruc_pdt697( ).

DATA(lv_fecha) = VALUE char10( ).

*DATA(lv_appat) = VALUE char20( ).DATA(lv_apmat) = VALUE char20( ).

*DATA(lv_nom1) = VALUE char20( ).

DATA(lv_rsoc) = VALUE char40( ).

LOOP AT pt_rfpos_wt INTO lw_rfpos_wt.

CLEAR: lw_struc_pdt697, lv_rsoc. "lv_appat, lv_apmat, lv_nom1,

* Tipo de documento.

lw_struc_pdt697-tipo_documento = lw_rfpos_wt-wt_acco_stcdt.
* Nmero documento o RUC del cliente.

lw_struc_pdt697-num_doc_ruc = lw_rfpos_wt-wt_acco_stcd1.

**

CASE lw_rfpos_wt-wt_acco_stcd1+0(1).

WHEN '1'.

* SPLIT lw_rfpos_wt-wt_acco_name1 AT ' '

* INTO lv_appat lv_apmat lv_nom1.

* CONDENSE: lv_appat, lv_apmat, lv_nom1.

* Apellido paterno.

lw_struc_pdt697-ap_paterno = lw_rfpos_wt-wt_acco_name1.

* Apellido materno.

lw_struc_pdt697-ap_materno = lw_rfpos_wt-wt_acco_name2.

* Nombres.

lw_struc_pdt697-nombres = lw_rfpos_wt-wt_acco_name3.

WHEN '2'.

CONCATENATE lw_rfpos_wt-wt_acco_name1

lw_rfpos_wt-wt_acco_name2 INTO lv_rsoc SEPARATED BY space.

* lw_rfpos_wt-wt_acco_name3

* lw_rfpos_wt-wt_acco_name4

CONDENSE lv_rsoc.

* Razn social.

lw_struc_pdt697-razon_social = lv_rsoc.

ENDCASE.

**

* Serie de comprobante de percepcin.

lw_struc_pdt697-ser_com_perc = lw_rfpos_wt-xblnr+4(4).

* Nmero de comprobante de percepcin.


lw_struc_pdt697-num_com_perc = lw_rfpos_wt-xblnr+9(7).

* Fecha de emisin de comprobante de percepcin.

CLEAR lv_fecha.

CONCATENATE lw_rfpos_wt-bldat+6(2) '/'

lw_rfpos_wt-bldat+4(2) '/'

lw_rfpos_wt-bldat+0(4) INTO lv_fecha.

lw_struc_pdt697-fch_emi_com_perc = lv_fecha.

* Comprobante genera derecho a crdito fiscal?

lw_struc_pdt697-der_cre_fiscal = '1'.

* Operacin vinculada con terremoto del 2007?

lw_struc_pdt697-ope_terrem_2007 = '0'.

* Cliente sujeto al procentaje del 0.5%.

DATA(lv_porc) = SWITCH char1( lw_rfpos_wt-wt_withcd WHEN 'P3' THEN '1' ELSE '0' ).

lw_struc_pdt697-suje_porcen = lv_porc.

* Monto de pago de comprobante de percepcin.

lw_struc_pdt697-monto_com_perc = ( lw_rfpos_wt-wt_qsshh + lw_rfpos_wt-wt_qbshh ).

* Tipo de comprobante de pago involucrado.

lw_struc_pdt697-tipo_com_pag_inv = lw_rfpos_wt-blart.

* Serie de comprobante de pago involucrado.

lw_struc_pdt697-ser_com_pag_inv = lw_rfpos_wt-xblnr+3(2).

* Nmero de comprobante de pago involucrado.

lw_struc_pdt697-num_com_pag_inv = lw_rfpos_wt-xblnr+6.

* Fecha de emisin de comprobante de pago involucrado.

CLEAR lv_fecha.

CONCATENATE lw_rfpos_wt-budat+6(2) '/'

lw_rfpos_wt-budat+4(2) '/'

lw_rfpos_wt-budat+0(4) INTO lv_fecha.

lw_struc_pdt697-fch_emi_com_pag_inv = lv_fecha.

* Monto total de comprobante de pago involucrado.


lw_struc_pdt697-mon_tot_com_pag_inv = ( lw_rfpos_wt-wt_qsshh ).

APPEND lw_struc_pdt697 TO pt_struc_pdt.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form TABLA_PDT633

*&---------------------------------------------------------------------*

FORM tabla_pdt633 USING pt_rfpos_wt TYPE STANDARD TABLE

CHANGING pt_struc_pdt TYPE STANDARD TABLE.

DATA(lw_rfpos_wt) = VALUE zwrfpos_wt( ).

DATA(lw_struc_pdt633) = VALUE zwstruc_pdt633( ).

DATA(lv_fecha) = VALUE char10( ).

*DATA(lv_appat) = VALUE char20( ).DATA(lv_apmat) = VALUE char20( ).

*DATA(lv_nom1) = VALUE char20( ).

DATA(lv_rsoc) = VALUE char40( ).

SELECT land1, blart, doccls FROM t003_i

INTO TABLE @DATA(lt_t003i)

WHERE land1 EQ 'PE'.

LOOP AT pt_rfpos_wt INTO lw_rfpos_wt.

CLEAR: lw_struc_pdt633, lv_rsoc. "lv_appat, lv_apmat, lv_nom1,

* Nmero documento o RUC del cliente.

lw_struc_pdt633-num_doc_ruc = lw_rfpos_wt-wt_acco_stcd1.

**
CASE lw_rfpos_wt-wt_acco_stcd1+0(1).

WHEN '1'.

* SPLIT lw_rfpos_wt-wt_acco_name1 AT ' '

* INTO lv_appat lv_apmat lv_nom1.

* CONDENSE: lv_appat, lv_apmat, lv_nom1.

* Apellido paterno.

lw_struc_pdt633-ap_paterno = lw_rfpos_wt-wt_acco_name1.

* Apellido materno.

lw_struc_pdt633-ap_materno = lw_rfpos_wt-wt_acco_name2.

* Nombres.

lw_struc_pdt633-nombres = lw_rfpos_wt-wt_acco_name3.

WHEN '2'.

CONCATENATE lw_rfpos_wt-wt_acco_name1

lw_rfpos_wt-wt_acco_name2 INTO lv_rsoc SEPARATED BY space.

* lw_rfpos_wt-wt_acco_name3

* lw_rfpos_wt-wt_acco_name4

CONDENSE lv_rsoc.

* Razn social.

lw_struc_pdt633-razon_social = lv_rsoc.

ENDCASE.

**

* Serie de comprobante de percepcin.

lw_struc_pdt633-ser_com_perc = lw_rfpos_wt-xblnr+4(4).

* Nmero de comprobante de percepcin.

lw_struc_pdt633-num_com_perc = lw_rfpos_wt-xblnr+9(7).

* Fecha de emisin de comprobante de percepcin.

CLEAR lv_fecha.

CONCATENATE lw_rfpos_wt-bldat+6(2) '/'


lw_rfpos_wt-bldat+4(2) '/'

lw_rfpos_wt-bldat+0(4) INTO lv_fecha.

lw_struc_pdt633-fch_emi_com_perc = lv_fecha.

* Monto de pago de comprobante de percepcin.

lw_struc_pdt633-monto_com_perc = ( lw_rfpos_wt-wt_qsshh + lw_rfpos_wt-wt_qbshh ).

* Tipo de comprobante de pago involucrado.

READ TABLE lt_t003i ASSIGNING FIELD-SYMBOL(<lfs_t003i>)

WITH KEY blart = lw_rfpos_wt-blart.

IF <lfs_t003i> IS ASSIGNED.

lw_struc_pdt633-tipo_com_pag_inv = <lfs_t003i>-doccls.

ENDIF.

* Serie de comprobante de pago involucrado.

lw_struc_pdt633-ser_com_pag_inv = lw_rfpos_wt-xblnr+3(2).

* Nmero de comprobante de pago involucrado.

lw_struc_pdt633-num_com_pag_inv = lw_rfpos_wt-xblnr+6.

* Fecha de emisin de comprobante de pago involucrado.

CLEAR lv_fecha.

CONCATENATE lw_rfpos_wt-budat+6(2) '/'

lw_rfpos_wt-budat+4(2) '/'

lw_rfpos_wt-budat+0(4) INTO lv_fecha.

lw_struc_pdt633-fch_emi_com_pag_inv = lv_fecha.

* Monto total de comprobante de pago involucrado.

lw_struc_pdt633-mon_tot_com_pag_inv = ( lw_rfpos_wt-wt_qsshh ).

APPEND lw_struc_pdt633 TO pt_struc_pdt.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form TABLA_PDT626


*&---------------------------------------------------------------------*

FORM tabla_pdt626 USING pt_rfpos_wt TYPE STANDARD TABLE

CHANGING pt_struc_pdt TYPE STANDARD TABLE.

DATA(lw_rfpos_wt) = VALUE zwrfpos_wt( ).

DATA(lw_struc_pdt626) = VALUE zwstruc_pdt626( ).

DATA(lv_fecha) = VALUE char10( ).

DATA(lv_appat) = VALUE char20( ).DATA(lv_apmat) = VALUE char20( ).

DATA(lv_nom1) = VALUE char20( ).DATA(lv_rsoc) = VALUE char40( ).

DATA: rl_lifnr TYPE RANGE OF lfa1-lifnr,

rw_lifnr LIKE LINE OF rl_lifnr.

rw_lifnr-sign = 'I'.rw_lifnr-option = 'EQ'.

LOOP AT pt_rfpos_wt INTO lw_rfpos_wt.

rw_lifnr-low = lw_rfpos_wt-wt_acco.APPEND rw_lifnr TO rl_lifnr.

ENDLOOP.

SORT rl_lifnr BY low ASCENDING.

DELETE ADJACENT DUPLICATES FROM rl_lifnr COMPARING low.

SELECT lifnr, fityp, stcd1 INTO TABLE @DATA(lt_lfa1)

FROM lfa1 WHERE lifnr IN @rl_lifnr.

LOOP AT pt_rfpos_wt INTO lw_rfpos_wt.

CLEAR: lw_struc_pdt626, lv_appat, lv_apmat,

lv_nom1, lv_rsoc.

* Datos Adicionales de Proveedor

READ TABLE lt_lfa1 INTO DATA(lw_lfa1) WITH KEY lifnr = lw_rfpos_wt-wt_acco.

* Ruc del proveedor.


lw_struc_pdt626-ruc_proveedor = lw_lfa1-stcd1.

*** Apellidos y Nombres, razn social

**

CASE lw_rfpos_wt-wt_acco_stcd1+0(1).

WHEN '1'.

SPLIT lw_rfpos_wt-wt_acco_name1 AT ' '

INTO lv_appat lv_apmat lv_nom1.

CONDENSE: lv_appat, lv_apmat, lv_nom1.

* Apellido paterno.

lw_struc_pdt626-ape_paterno = lv_appat.

* Apellido materno.

lw_struc_pdt626-ape_materno = lv_apmat.

* Nombres.

lw_struc_pdt626-nombres = lv_nom1.

WHEN '2'.

CONCATENATE lw_rfpos_wt-wt_acco_name1

lw_rfpos_wt-wt_acco_name2

lw_rfpos_wt-wt_acco_name3

lw_rfpos_wt-wt_acco_name4 INTO lv_rsoc SEPARATED BY space.

CONDENSE lv_rsoc.

* Razn social.

lw_struc_pdt626-razon_social = lv_rsoc.

ENDCASE.

**

* Serie comprobante de retencin.

lw_struc_pdt626-serie_comp_ret = lw_rfpos_wt-ctnumber+0(4).

* Nmero comprobante de retencin.


lw_struc_pdt626-num_comp_ret = lw_rfpos_wt-ctnumber+4(6).

* Fecha de emisin de comprobante de retencin.

CLEAR lv_fecha.

CONCATENATE lw_rfpos_wt-bldat+6(2) '/'

lw_rfpos_wt-bldat+4(2) '/'

lw_rfpos_wt-bldat+0(4) INTO lv_fecha.

lw_struc_pdt626-fch_emi_comp_ret = lv_fecha.

* Importe total de la base imponible para el clculo de la rt.

lw_struc_pdt626-mnt_tot_base_imp = ( lw_rfpos_wt-wt_qsshh ) * -1.

* Tipo de comprobante de documento pagado.

lw_struc_pdt626-tip_comp_doc_pag = lw_rfpos_wt-xblnr+0(2).

* Serie del documento pagado.

lw_struc_pdt626-ser_doc_pagado = lw_rfpos_wt-xblnr+3(4).

* Nmero del documento pagado.

lw_struc_pdt626-num_doc_pagado = lw_rfpos_wt-xblnr+8(8).

* Fecha de emisin del documento pagado.

CLEAR lv_fecha.

CONCATENATE lw_rfpos_wt-augdt+6(2) '/'

lw_rfpos_wt-augdt+4(2) '/'

lw_rfpos_wt-augdt+0(4) INTO lv_fecha.

lw_struc_pdt626-fch_emi_doc_pag = lv_fecha.

* Importe total del documento pagado.

lw_struc_pdt626-mnt_tot_doc_pag = ( lw_rfpos_wt-wt_dmbtr ) * -1.

APPEND lw_struc_pdt626 TO pt_struc_pdt.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form TABLA_PDT621

*&---------------------------------------------------------------------*
FORM tabla_pdt621 USING pt_rfpos_wt TYPE STANDARD TABLE

CHANGING pt_struc_pdt TYPE STANDARD TABLE.

DATA(lw_rfpos_wt) = VALUE zwrfpos_wt( ).

DATA(lw_struc_pdt621) = VALUE zwstruc_pdt621( ).

DATA(lv_fecha) = VALUE char10( ).

SELECT land1, blart, doccls FROM t003_i

INTO TABLE @DATA(lt_t003i)

WHERE land1 EQ 'PE'.

LOOP AT pt_rfpos_wt INTO lw_rfpos_wt.

IF lw_rfpos_wt-awtyp EQ 'RMRP'.

CLEAR: lw_struc_pdt621.

* Nmero documento o RUC del cliente.

lw_struc_pdt621-num_doc_ruc = lw_rfpos_wt-wt_acco_stcd1.

* Tipo de comprobante de pago involucrado.

READ TABLE lt_t003i ASSIGNING FIELD-SYMBOL(<lfs_t003i>)

WITH KEY blart = lw_rfpos_wt-blart.

IF <lfs_t003i> IS ASSIGNED.

lw_struc_pdt621-tipo_com_pag_inv = <lfs_t003i>-doccls.

ENDIF.

* Serie de comprobante de pago involucrado.

lw_struc_pdt621-ser_com_pag_inv = lw_rfpos_wt-xblnr+3(4).

* Nmero de comprobante de pago involucrado.

lw_struc_pdt621-num_com_pag_inv = lw_rfpos_wt-xblnr+9.

* Fecha de emisin de comprobante de pago involucrado.

CLEAR lv_fecha.
CONCATENATE lw_rfpos_wt-budat+6(2) '/'

lw_rfpos_wt-budat+4(2) '/'

lw_rfpos_wt-budat+0(4) INTO lv_fecha.

lw_struc_pdt621-fch_emi_com_pag_inv = lv_fecha.

* Monto total de comprobante de pago involucrado.

lw_struc_pdt621-mon_tot_com_pag_inv = ( lw_rfpos_wt-wt_qsshh ) * -1.

APPEND lw_struc_pdt621 TO pt_struc_pdt.

ENDIF.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form TABLA_PDT617

*&---------------------------------------------------------------------*

FORM tabla_pdt617 USING pt_rfpos_wt TYPE STANDARD TABLE

CHANGING pt_struc_pdt TYPE STANDARD TABLE.

DATA(lw_rfpos_wt) = VALUE zwrfpos_wt( ).

DATA(lw_struc_pdt617) = VALUE zwstruc_pdt617( ).

DATA(lv_fecha) = VALUE char10( ).

DATA(lv_appat) = VALUE char20( ).DATA(lv_apmat) = VALUE char20( ).

DATA(lv_nom1) = VALUE char20( ).DATA(lv_rsoc) = VALUE char40( ).

DATA: rl_lifnr TYPE RANGE OF lfa1-lifnr,

rw_lifnr LIKE LINE OF rl_lifnr.

rw_lifnr-sign = 'I'.rw_lifnr-option = 'EQ'.

LOOP AT pt_rfpos_wt INTO lw_rfpos_wt.

rw_lifnr-low = lw_rfpos_wt-wt_acco.APPEND rw_lifnr TO rl_lifnr.

ENDLOOP.CLEAR: lw_rfpos_wt.

SORT rl_lifnr BY low ASCENDING.


DELETE ADJACENT DUPLICATES FROM rl_lifnr COMPARING low.

SELECT lifnr, land1, stras, gbdat, stcd1 INTO TABLE @DATA(lt_lfa1)

FROM lfa1 WHERE lifnr IN @rl_lifnr.

SELECT land1, cod_pais INTO TABLE @DATA(lt_codp) FROM j_1befd_country

FOR ALL ENTRIES IN @lt_lfa1 WHERE land1 EQ @lt_lfa1-land1.

SELECT land1, qekar, witht, wt_withcd INTO TABLE @DATA(lt_t059z) FROM t059z

FOR ALL ENTRIES IN @lt_codp WHERE land1 EQ @lt_codp-land1.

SELECT withcd2, accperiod INTO TABLE @DATA(lt_porcen) FROM j_1ar_butype WHERE land1 EQ
'PE'.

LOOP AT pt_rfpos_wt INTO lw_rfpos_wt.

CLEAR: lw_struc_pdt617, lv_appat, lv_apmat,

lv_nom1, lv_rsoc.

* Tipo de persona.

DATA(lv_tper) = SWITCH char1( lw_rfpos_wt-wt_withcd+0(1) WHEN 'N' THEN '1' ELSE '2' ).

lw_struc_pdt617-tipo_persona = lv_tper.

* Tipo de descripcin de la persona.

lw_struc_pdt617-tipo_descripcion =

SWITCH char1( lv_tper WHEN '1' THEN '1' ELSE '2' ).

*** Apellidos y Nombres, razn social

**

CASE lw_rfpos_wt-wt_acco_stcd1+0(1).

WHEN '1'.
SPLIT lw_rfpos_wt-wt_acco_name1 AT ' '

INTO lv_appat lv_apmat lv_nom1.

CONDENSE: lv_appat, lv_apmat, lv_nom1.

* Apellido paterno.

lw_struc_pdt617-ap_paterno = lv_appat.

* Apellido materno.

lw_struc_pdt617-ap_materno = lv_apmat.

* Nombres.

lw_struc_pdt617-nombres = lv_nom1.

WHEN '2'.

CONCATENATE lw_rfpos_wt-wt_acco_name1

lw_rfpos_wt-wt_acco_name2

lw_rfpos_wt-wt_acco_name3

lw_rfpos_wt-wt_acco_name4 INTO lv_rsoc SEPARATED BY space.

CONDENSE lv_rsoc.

* Razn social.

lw_struc_pdt617-razon_social = lv_rsoc.

ENDCASE.

**

* [[[ Procesos para servicios y Porcentaje.]]] Se ejecuta el cdigo antes a debido a

* que los datos se utilizan en el clculo de renta neta.

DATA(lv_withcd2) = VALUE withcd2( ).

READ TABLE lt_t059z INTO DATA(lw_t059z) WITH KEY witht = lw_rfpos_wt-witht

wt_withcd = lw_rfpos_wt-wt_withcd.

IF sy-subrc EQ 0.

lv_withcd2 = lw_t059z-qekar.

READ TABLE lt_porcen INTO DATA(lw_porcen) WITH KEY withcd2 = lv_withcd2.

ENDIF.
* Renta neta.

lw_struc_pdt617-renta_neta = ( ( ( lw_rfpos_wt-wt_qsshh * -1 ) * lw_porcen-accperiod ) / 100 ).

* Retencin.

lw_struc_pdt617-retencion = ( lw_rfpos_wt-wt_qbshh ) * -1.

* Datos Adicionales de Proveedor

READ TABLE lt_lfa1 INTO DATA(lw_lfa1) WITH KEY lifnr = lw_rfpos_wt-wt_acco.

* Cdigo del pas.

READ TABLE lt_codp INTO DATA(lw_codp) WITH KEY land1 = lw_lfa1-land1.

IF sy-subrc EQ 0.

lw_struc_pdt617-pais = lw_codp-cod_pais+1(4).

ENDIF.

* Direccin.

lw_struc_pdt617-direccion = lw_lfa1-stras.

* Cdigo de servicio.

lw_struc_pdt617-servicio = lw_t059z-qekar.

* Gasto / Costo.

lw_struc_pdt617-gasto_costo = ( lw_rfpos_wt-wt_qsshh ) * -1.

** Porcentaje entre 1 y 100.

lw_struc_pdt617-porcentaje = lw_porcen-accperiod.

* Tributo.
lw_struc_pdt617-tributo = ( lw_rfpos_wt-wt_qbshh ) * -1.

* Tipo de documento.

lw_struc_pdt617-tipo_documento =

SWITCH char2( lv_tper WHEN '1' THEN '01' ELSE '02' ).

* Nmero de documento no domiciliado.

lw_struc_pdt617-num_doc_no_dom = lw_lfa1-stcd1.

* Fecha de nacimiento.

IF lv_tper EQ '01'.

CLEAR lv_fecha.

CONCATENATE lw_lfa1-gbdat+6(2) '/'

lw_lfa1-gbdat+4(2) '/'

lw_lfa1-gbdat+0(4) INTO lv_fecha.

lw_struc_pdt617-fch_nac = lv_fecha.

ENDIF.

* Tipo de direccin legal.

lw_struc_pdt617-tip_direc_legal = '04'.

APPEND lw_struc_pdt617 TO pt_struc_pdt.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form TABLA_PDT601

*&---------------------------------------------------------------------*

FORM tabla_pdt601 USING pt_rfpos_wt TYPE STANDARD TABLE

CHANGING pt_struc_pdt TYPE STANDARD TABLE.


DATA(lw_rfpos_wt) = VALUE zwrfpos_wt( ).

DATA(lw_struc_pdt601) = VALUE zwstruc_pdt601( ).

DATA: rl_lifnr TYPE RANGE OF lfa1-lifnr,

rw_lifnr LIKE LINE OF rl_lifnr.

rw_lifnr-sign = 'I'.rw_lifnr-option = 'EQ'.

LOOP AT pt_rfpos_wt INTO lw_rfpos_wt.

rw_lifnr-low = lw_rfpos_wt-wt_acco.APPEND rw_lifnr TO rl_lifnr.

ENDLOOP.

SORT rl_lifnr BY low ASCENDING.

DELETE ADJACENT DUPLICATES FROM rl_lifnr COMPARING low.

SELECT lifnr, land1, stras, gbdat, stcd1 INTO TABLE @DATA(lt_lfa1)

FROM lfa1 WHERE lifnr IN @rl_lifnr.

SELECT land1, cod_pais INTO TABLE @DATA(lt_codp) FROM j_1befd_country

FOR ALL ENTRIES IN @lt_lfa1 WHERE land1 EQ @lt_lfa1-land1.

SELECT land1, qekar, witht, wt_withcd INTO TABLE @DATA(lt_t059z) FROM t059z

FOR ALL ENTRIES IN @lt_codp WHERE land1 EQ @lt_codp-land1.

SELECT withcd2, accperiod INTO TABLE @DATA(lt_porcen) FROM j_1ar_butype WHERE land1 EQ
'PE'.

LOOP AT pt_rfpos_wt INTO lw_rfpos_wt.

* Datos de Proveedor

READ TABLE lt_lfa1 INTO DATA(lw_lfa1) WITH KEY lifnr = lw_rfpos_wt-wt_acco.


*** Apellidos y Nombres, razn social

DATA(lv_appat) = VALUE char20( ).DATA(lv_apmat) = VALUE char20( ).

SPLIT lw_rfpos_wt-wt_acco_name3 AT '/'

INTO lv_appat lv_apmat.

DATA(lv_nom1) = VALUE char20( ).DATA(lv_nom2) = VALUE char20( ).DATA(lv_nomt) = VALUE


char20( ).

SPLIT lw_rfpos_wt-wt_acco_name4 AT '/'

INTO lv_nom1 lv_nom2.

CONCATENATE lv_nom1 lv_nom2 INTO lv_nomt SEPARATED BY space.

DATA(lv_rsoc) = VALUE char40( ).

CONCATENATE lw_rfpos_wt-wt_acco_name1 lw_rfpos_wt-wt_acco_name2 INTO lv_rsoc


SEPARATED BY space.

********************************************

*** DATOS COMPARTIDOS POR AMBAS ESTRUCTURAS:

********************************************

* Tipo de documento del prestador de servicios - 4ta categor.

lw_struc_pdt601-tip_documento = lw_rfpos_wt-wt_acco_stcdt.

* Nmero de documento del prestador de servicios - 4ta categ.

lw_struc_pdt601-num_documento = lw_rfpos_wt-wt_acco_stcd1.

***********************************

*** DATOS DE LA PRIMERA ESTRUCTURA:

***********************************

* Apellido paterno.

lw_struc_pdt601-ape_paterno = lv_appat.

* Apellido materno.

lw_struc_pdt601-ape_materno = lv_apmat.
* Nombres.

lw_struc_pdt601-nombres = lv_nomt.

* Domiciliados.

lw_struc_pdt601-domiciliado =

SWITCH char1( lw_lfa1-land1 WHEN 'PE' THEN '1' ELSE '2' ).

* Convenio para evitar la doble tributacin.

lw_struc_pdt601-convenio =

SWITCH char1( lw_lfa1-land1 WHEN 'CA' THEN '1' WHEN 'CL' THEN '2'

WHEN 'BR' THEN '4' WHEN 'CZ' THEN '5'

WHEN 'PT' THEN '8' ELSE '0').

***********************************

*** DATOS DE LA SEGUNDA ESTRUCTURA:

***********************************

* Tipo del comprobante emitido.

lw_struc_pdt601-tip_comprobante = 'R'.

* Serie del comprobante emitido.

lw_struc_pdt601-ser_comprobante = lw_rfpos_wt-xblnr+3(4).

* Nmero del comprobante emitido.

lw_struc_pdt601-num_comprobante = lw_rfpos_wt-xblnr+8(8).

* Monto total del servicio.

lw_struc_pdt601-mnt_tot_servicio = ( lw_rfpos_wt-wt_dmbtr + lw_rfpos_wt-wt_qbshh ) * -1.


* Fecha de emisin.

lw_struc_pdt601-fch_emision = lw_rfpos_wt-bldat.

* Fecha de pago.

lw_struc_pdt601-fch_pago = lw_rfpos_wt-augdt.

* Retencin de Cuarta Categora.

lw_struc_pdt601-ret_cta_cat =

SWITCH char1( lw_rfpos_wt-wt_withcd WHEN '00' THEN '0' ELSE '1' ).

* Indicador de Retencin a Rgimen Pensionario.

lw_struc_pdt601-ind_ret_reg_pen = space.

APPEND lw_struc_pdt601 TO pt_struc_pdt.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_FIELDCAT_697

*&---------------------------------------------------------------------*

FORM generar_fieldcat_697 CHANGING pt_fieldcat TYPE ANY TABLE

pt_struc_pdt TYPE STANDARD TABLE.

pt_fieldcat = VALUE slis_t_fieldcat_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'TIPO_DOCUMENTO' seltext_l = 'Tipo de documento'


outputlen = '2' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_DOC_RUC' seltext_l = 'Nmero documento o


RUC del cliente' outputlen = '12' )

( tabname = 'LT_STRUC_PDT' fieldname = 'RAZON_SOCIAL' seltext_l = 'Razn social' outputlen =


'40' )

( tabname = 'LT_STRUC_PDT' fieldname = 'AP_PATERNO' seltext_l = 'Apellido paterno'


outputlen = '20' )
( tabname = 'LT_STRUC_PDT' fieldname = 'AP_MATERNO' seltext_l = 'Apellido materno'
outputlen = '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NOMBRES' seltext_l = 'Nombres' outputlen = '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'SER_COM_PERC' seltext_l = 'Serie de comprobante de


percepcin' outputlen = '4' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_COM_PERC' seltext_l = 'Nmero de


comprobante de percepcin' outputlen = '8' )

( tabname = 'LT_STRUC_PDT' fieldname = 'FCH_EMI_COM_PERC' seltext_l = 'Fecha de emisin


de comprobante de percepcin' outputlen = '10' )

( tabname = 'LT_STRUC_PDT' fieldname = 'DER_CRE_FISCAL' seltext_l = 'Comprobante genera


derecho a crdito fiscal?' outputlen = '1' )

( tabname = 'LT_STRUC_PDT' fieldname = 'OPE_TERREM_2007' seltext_l = 'Operacin vinculada


con terremoto del 2007?' outputlen = '1' )

( tabname = 'LT_STRUC_PDT' fieldname = 'SUJE_PORCEN' seltext_l = 'Cliente sujeto al procentaje


del 0.5%' outputlen = '1' )

( tabname = 'LT_STRUC_PDT' fieldname = 'MONTO_COM_PERC' seltext_l = 'Monto de pago de


comprobante de percepcin' outputlen = '15' )

( tabname = 'LT_STRUC_PDT' fieldname = 'TIPO_COM_PAG_INV' seltext_l = 'Tipo de


comprobante de pago involucrado' outputlen = '2' )

( tabname = 'LT_STRUC_PDT' fieldname = 'SER_COM_PAG_INV' seltext_l = 'Serie de


comprobante de pago involucrado' outputlen = '4' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_COM_PAG_INV' seltext_l = 'Nmero de


comprobante de pago involucrado' outputlen = '15' )

( tabname = 'LT_STRUC_PDT' fieldname = 'FCH_EMI_COM_PAG_INV' seltext_l = 'Fecha de


emisin de comprobante de pago involucrado' outputlen = '10' )

( tabname = 'LT_STRUC_PDT' fieldname = 'MON_TOT_COM_PAG_INV' seltext_l = 'Monto total


de comprobante de pago involucrado' outputlen = '15' )

).

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_FIELDCAT_633

*&---------------------------------------------------------------------*

FORM generar_fieldcat_633 CHANGING pt_fieldcat TYPE ANY TABLE


pt_struc_pdt TYPE STANDARD TABLE.

pt_fieldcat = VALUE slis_t_fieldcat_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_DOC_RUC' seltext_l = 'Nmero documento o


RUC del cliente' outputlen = '12' )

( tabname = 'LT_STRUC_PDT' fieldname = 'RAZON_SOCIAL' seltext_l = 'Razn social' outputlen =


'40' )

( tabname = 'LT_STRUC_PDT' fieldname = 'AP_PATERNO' seltext_l = 'Apellido paterno'


outputlen = '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'AP_MATERNO' seltext_l = 'Apellido materno'


outputlen = '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NOMBRES' seltext_l = 'Nombres' outputlen = '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'SER_COM_PERC' seltext_l = 'Serie de comprobante de


percepcin' outputlen = '4' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_COM_PERC' seltext_l = 'Nmero de


comprobante de percepcin' outputlen = '8' )

( tabname = 'LT_STRUC_PDT' fieldname = 'FCH_EMI_COM_PERC' seltext_l = 'Fecha de emisin


de comprobante de percepcin' outputlen = '10' )

( tabname = 'LT_STRUC_PDT' fieldname = 'MONTO_COM_PERC' seltext_l = 'Monto de pago de


comprobante de percepcin' outputlen = '15' )

( tabname = 'LT_STRUC_PDT' fieldname = 'TIPO_COM_PAG_INV' seltext_l = 'Tipo de


comprobante de pago involucrado' outputlen = '2' )

( tabname = 'LT_STRUC_PDT' fieldname = 'SER_COM_PAG_INV' seltext_l = 'Serie de


comprobante de pago involucrado' outputlen = '4' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_COM_PAG_INV' seltext_l = 'Nmero de


comprobante de pago involucrado' outputlen = '15' )

( tabname = 'LT_STRUC_PDT' fieldname = 'FCH_EMI_COM_PAG_INV' seltext_l = 'Fecha de


emisin de comprobante de pago involucrado' outputlen = '10' )

( tabname = 'LT_STRUC_PDT' fieldname = 'MON_TOT_COM_PAG_INV' seltext_l = 'Monto total


de comprobante de pago involucrado' outputlen = '15' )

).

ENDFORM.
*&---------------------------------------------------------------------*

*& Form GENERAR_FIELDCAT_626

*&---------------------------------------------------------------------*

FORM generar_fieldcat_626 CHANGING pt_fieldcat TYPE ANY TABLE

pt_struc_pdt TYPE STANDARD TABLE.

pt_fieldcat = VALUE slis_t_fieldcat_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'RUC_PROVEEDOR' seltext_l = 'Ruc del proveedor'


outputlen = '11' )

( tabname = 'LT_STRUC_PDT' fieldname = 'RAZON_SOCIAL' seltext_l = 'Razn social' outputlen =


'40' )

( tabname = 'LT_STRUC_PDT' fieldname = 'APE_PATERNO' seltext_l = 'Apellido paterno'


outputlen = '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'APE_MATERNO' seltext_l = 'Apellido materno'


outputlen = '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NOMBRES' seltext_l = 'Nombres' outputlen = '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'SERIE_COMP_RET' seltext_l = 'Serie comprobante de


retencin' outputlen = '4' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_COMP_RET' seltext_l = 'Nmero comprobante


de retencin' outputlen = '8' )

( tabname = 'LT_STRUC_PDT' fieldname = 'FCH_EMI_COMP_RET' seltext_l = 'Fecha de emisin


de comprobante de retencin' outputlen = '10' )

( tabname = 'LT_STRUC_PDT' fieldname = 'MNT_TOT_BASE_IMP' seltext_l = 'Importe total de la


base imponible para el clculo de la rt' outputlen = '15' )

( tabname = 'LT_STRUC_PDT' fieldname = 'TIP_COMP_DOC_PAG' seltext_l = 'Tipo de


comprobante de documento pagado' outputlen = '2' )

( tabname = 'LT_STRUC_PDT' fieldname = 'SER_DOC_PAGADO' seltext_l = 'Serie del documento


pagado' outputlen = '4' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_DOC_PAGADO' seltext_l = 'Nmero del


documento pagado' outputlen = '15' )

( tabname = 'LT_STRUC_PDT' fieldname = 'FCH_EMI_DOC_PAG' seltext_l = 'Fecha de emisin del


documento pagado' outputlen = '10' )
( tabname = 'LT_STRUC_PDT' fieldname = 'MNT_TOT_DOC_PAG' seltext_l = 'Importe total del
documento pagado' outputlen = '15' )

).

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_FIELDCAT_621

*&---------------------------------------------------------------------*

FORM generar_fieldcat_621 CHANGING pt_fieldcat TYPE ANY TABLE

pt_struc_pdt TYPE STANDARD TABLE.

pt_fieldcat = VALUE slis_t_fieldcat_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_DOC_RUC' seltext_l = 'Nmero documento o


RUC del cliente' outputlen = '12' )

( tabname = 'LT_STRUC_PDT' fieldname = 'TIPO_COM_PAG_INV' seltext_l = 'Tipo de


comprobante de pago involucrado' outputlen = '2' )

( tabname = 'LT_STRUC_PDT' fieldname = 'SER_COM_PAG_INV' seltext_l = 'Serie de


comprobante de pago involucrado' outputlen = '4' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_COM_PAG_INV' seltext_l = 'Nmero de


comprobante de pago involucrado' outputlen = '15' )

( tabname = 'LT_STRUC_PDT' fieldname = 'FCH_EMI_COM_PAG_INV' seltext_l = 'Fecha de


emisin de comprobante de pago involucrado' outputlen = '10' )

( tabname = 'LT_STRUC_PDT' fieldname = 'MON_TOT_COM_PAG_INV' seltext_l = 'Monto total


de comprobante de pago involucrado' outputlen = '15' )

).

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_FIELDCAT_617

*&---------------------------------------------------------------------*

FORM generar_fieldcat_617 CHANGING pt_fieldcat TYPE ANY TABLE


pt_struc_pdt TYPE STANDARD TABLE.

pt_fieldcat = VALUE slis_t_fieldcat_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'TIPO_PERSONA' seltext_l = 'Tipo de persona'


outputlen = '1' )

( tabname = 'LT_STRUC_PDT' fieldname = 'TIPO_DESCRIPCION' seltext_l = 'Tipo de descripcin


de la persona' outputlen = '1' )

( tabname = 'LT_STRUC_PDT' fieldname = 'AP_PATERNO' seltext_l = 'Apellido paterno' outputlen


= '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'AP_MATERNO' seltext_l = 'Apellido materno'


outputlen = '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NOMBRES' seltext_l = 'Nombres' outputlen = '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'RAZON_SOCIAL' seltext_l = 'Razn social' outputlen =


'40' )

( tabname = 'LT_STRUC_PDT' fieldname = 'RENTA_NETA' seltext_l = 'Renta neta' outputlen = '15'


)

( tabname = 'LT_STRUC_PDT' fieldname = 'RETENCION' seltext_l = 'Retencin' outputlen = '15' )

( tabname = 'LT_STRUC_PDT' fieldname = 'PAIS' seltext_l = 'Cdigo del pas' outputlen = '4' )

( tabname = 'LT_STRUC_PDT' fieldname = 'DIRECCION' seltext_l = 'Direccin' outputlen = '30' )

( tabname = 'LT_STRUC_PDT' fieldname = 'SERVICIO' seltext_l = 'Cdigo de servicio' outputlen =


'2' )

( tabname = 'LT_STRUC_PDT' fieldname = 'GASTO_COSTO' seltext_l = 'Gasto / Costo' outputlen =


'15' )

( tabname = 'LT_STRUC_PDT' fieldname = 'PORCENTAJE' seltext_l = 'Porcentaje entre 1 y 100'


outputlen = '3' )

( tabname = 'LT_STRUC_PDT' fieldname = 'TRIBUTO' seltext_l = 'Tributo' outputlen = '15' )

( tabname = 'LT_STRUC_PDT' fieldname = 'TIPO_DOCUMENTO' seltext_l = 'Tipo de documento'


outputlen = '2' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_DOC_NO_DOM' seltext_l = 'Nmero de


documento no domiciliado' outputlen = '20' )

( tabname = 'LT_STRUC_PDT' fieldname = 'FCH_NAC' seltext_l = 'Fecha de nacimiento' outputlen


= '10' )
( tabname = 'LT_STRUC_PDT' fieldname = 'TIP_DIREC_LEGAL' seltext_l = 'Tipo de direccin legal'
outputlen = '2' )

).

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_FIELDCAT_601

*&---------------------------------------------------------------------*

FORM generar_fieldcat_601 CHANGING pt_fieldcat TYPE ANY TABLE

pt_struc_pdt TYPE STANDARD TABLE.

pt_fieldcat = VALUE slis_t_fieldcat_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'TIP_DOCUMENTO' seltext_l = 'Tipo de documento del


prestador de servicios - 4ta categor' outputlen = '2' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_DOCUMENTO' seltext_l = 'Nmero de


documento del prestador de servicios - 4ta categ' outputlen = '15' )

( tabname = 'LT_STRUC_PDT' fieldname = 'APE_PATERNO' seltext_l = 'Apellido paterno'


outputlen = '40' )

( tabname = 'LT_STRUC_PDT' fieldname = 'APE_MATERNO' seltext_l = 'Apellido materno'


outputlen = '40' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NOMBRES' seltext_l = 'Nombres' outputlen = '40' )

( tabname = 'LT_STRUC_PDT' fieldname = 'DOMICILIADO' seltext_l = 'Domiciliado' outputlen = '


1' )

( tabname = 'LT_STRUC_PDT' fieldname = 'CONVENIO' seltext_l = 'Convenio para evitar la doble


tributacin' outputlen = '1' )

( tabname = 'LT_STRUC_PDT' fieldname = 'TIP_COMPROBANTE' seltext_l = 'Tipo del


comprobante emitido' outputlen = '1' )

( tabname = 'LT_STRUC_PDT' fieldname = 'SER_COMPROBANTE' seltext_l = 'Serie del


comprobante emitido' outputlen = '4' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_COMPROBANTE' seltext_l = 'Nmero del


comprobante emitido' outputlen = '8' )

( tabname = 'LT_STRUC_PDT' fieldname = 'MNT_TOT_SERVICIO' seltext_l = 'Monto total del


servicio' outputlen = '15' )
( tabname = 'LT_STRUC_PDT' fieldname = 'FCH_EMISION' seltext_l = 'Fecha de emisin'
outputlen = '10' )

( tabname = 'LT_STRUC_PDT' fieldname = 'FCH_PAGO' seltext_l = 'Fecha de pago' outputlen =


'10' )

( tabname = 'LT_STRUC_PDT' fieldname = 'RET_CTA_CAT' seltext_l = 'Retencin de Cuarta


Categora' outputlen = '1' )

( tabname = 'LT_STRUC_PDT' fieldname = 'IND_RET_REG_PEN' seltext_l = 'Indicador de


Retencin a Rgimen Pensionario' outputlen = '1' )

).

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_LAYOUT

*&---------------------------------------------------------------------*

FORM generar_layout CHANGING pw_layout.

pw_layout = VALUE slis_layout_alv( zebra = abap_true colwidth_optimize = abap_true ).

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_SORT

*&---------------------------------------------------------------------*

FORM generar_sort CHANGING pt_sort TYPE ANY TABLE

pt_struc_pdt TYPE STANDARD TABLE.

IF p_pdt697 EQ abap_true.

pt_sort = VALUE slis_t_sortinfo_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'TIPO_DOCUMENTO' up = 'X' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_DOC_RUC' up = 'X' )

( tabname = 'LT_STRUC_PDT' fieldname = 'RAZON_SOCIAL' up = 'X' )

).

ELSEIF p_pdt633 EQ abap_true.


pt_sort = VALUE slis_t_sortinfo_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_DOC_RUC' up = 'X' )

( tabname = 'LT_STRUC_PDT' fieldname = 'RAZON_SOCIAL' up = 'X' )

).

ELSEIF p_pdt626 EQ abap_true.

pt_sort = VALUE slis_t_sortinfo_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'RUC_PROVEEDOR' up = 'X' )

( tabname = 'LT_STRUC_PDT' fieldname = 'RAZON_SOCIAL' up = 'X' )

).

ELSEIF p_pdt621 EQ abap_true.

pt_sort = VALUE slis_t_sortinfo_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_DOC_RUC' up = 'X' )

( tabname = 'LT_STRUC_PDT' fieldname = 'TIPO_COM_PAG_INV'up = 'X' )

( tabname = 'LT_STRUC_PDT' fieldname = 'SER_COM_PAG_INV' up = 'X' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_COM_PAG_INV' up = 'X' )

).

ELSEIF p_pdt617 EQ abap_true.

pt_sort = VALUE slis_t_sortinfo_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'TIPO_PERSONA' up = 'X' )

( tabname = 'LT_STRUC_PDT' fieldname = 'TIPO_DESCRIPCION'up = 'X' )

).

ELSEIF p_pdt601 EQ abap_true.

pt_sort = VALUE slis_t_sortinfo_alv(

( tabname = 'LT_STRUC_PDT' fieldname = 'TIP_DOCUMENTO' up = 'X' )

( tabname = 'LT_STRUC_PDT' fieldname = 'NUM_DOCUMENTO' up = 'X' )

).

ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*

*& Form GENERAR_EVENTOS

*&---------------------------------------------------------------------*

FORM generar_eventos CHANGING pt_events TYPE slis_t_event.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTING

i_list_type = 0

IMPORTING

et_events = pt_events[].

READ TABLE pt_events WITH KEY name = slis_ev_top_of_page

INTO DATA(lw_events).

IF sy-subrc EQ 0.

MOVE 'GENERAR_CABECERA' TO lw_events-form.

APPEND lw_events TO pt_events.

ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_CABECERA

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* --> p1 text

* <-- p2 text

*----------------------------------------------------------------------*

FORM generar_cabecera .

DATA(lv_tit) = VALUE slis_listheader-info( ).

DATA(lv_emp) = VALUE slis_listheader-info( ).


SELECT SINGLE adrnr INTO @DATA(lv_adrnr) FROM t001 WHERE bukrs EQ @p_bukrs.

IF sy-subrc EQ 0.

SELECT SINGLE name1, name2, name3, name4 INTO @DATA(lw_names) FROM adrc WHERE
addrnumber EQ @lv_adrnr.

IF sy-subrc EQ 0.

CONCATENATE lw_names-name1 lw_names-name2 lw_names-name3 lw_names-name4 INTO


lv_emp SEPARATED BY space.

CONDENSE lv_emp.

ENDIF.

ENDIF.

IF p_pdt697 EQ abap_true.

lv_tit = 'PDT697 - Venta Interna'.

ELSEIF p_pdt633 EQ abap_true.

lv_tit = 'PDT633 - Combustible Lquido'.

ELSEIF p_pdt626 EQ abap_true.

lv_tit = 'PDT626 - IGV Retenciones'.

ELSEIF p_pdt621 EQ abap_true.

lv_tit = 'PDT621 - IGV Renta'.

ELSEIF p_pdt617 EQ abap_true.

lv_tit = 'PDT617 - Retenciones de Rentas No Domiciliados'.

ELSEIF p_pdt601 EQ abap_true.

lv_tit = 'PDT601 Renta de Cuarta Categora'.

ENDIF.

DATA(lt_header) = VALUE slis_t_listheader(

( typ = 'H' info = lv_tit )

( typ = 'S' key = space info = space )

( typ = 'S' key = 'Sociedad: ' info = p_bukrs )


( typ = 'S' key = 'Empresa: ' info = lv_emp )

( typ = 'S' key = 'Perodo Contable: ' info = p_monat )

( typ = 'S' key = 'Ejercicio: ' info = p_gjahr )

).

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

it_list_commentary = lt_header[].

ENDFORM.

*&---------------------------------------------------------------------*

*& Form PF_STATUS_SET

*&---------------------------------------------------------------------*

FORM pf_status_set USING rt_extab TYPE slis_t_extab.

SET PF-STATUS 'STANDARD'.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form USER_COMMAND

*&---------------------------------------------------------------------*

FORM user_command USING r_ucomm LIKE sy-ucomm

rs_selfield TYPE slis_selfield.

CASE r_ucomm.

WHEN '&DESCARGA'.

PERFORM generar_descarga_pdt.

ENDCASE.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_DESCARGA_PDT

*&---------------------------------------------------------------------*

FORM generar_descarga_pdt .
DATA(lv_resp) = VALUE char1( ).

CALL FUNCTION 'POPUP_TO_CONFIRM'

EXPORTING

titlebar = 'Descarga de PDT'

text_question = 'Desea descargar el archivo PDT?'

text_button_1 = 'Si'

text_button_2 = 'No'

display_cancel_button = 'X'

IMPORTING

answer = lv_resp.

IF lv_resp EQ '1'.

IF p_pdt697 EQ abap_true.DATA(lt_struc_pdt697) = VALUE ztt_wstruc_pdt697( ).

IMPORT pt_struc_pdt TO lt_struc_pdt697 FROM SHARED MEMORY indx(aa) ID 'LM'.

PERFORM generar_archivo_pdt CHANGING lt_struc_pdt697.

ELSEIF p_pdt633 EQ abap_true.DATA(lt_struc_pdt633) = VALUE ztt_wstruc_pdt633( ).

IMPORT pt_struc_pdt TO lt_struc_pdt633 FROM SHARED MEMORY indx(aa) ID 'LM'.

PERFORM generar_archivo_pdt CHANGING lt_struc_pdt633.

ELSEIF p_pdt626 EQ abap_true.DATA(lt_struc_pdt626) = VALUE ztt_wstruc_pdt626( ).

IMPORT pt_struc_pdt TO lt_struc_pdt626 FROM SHARED MEMORY indx(aa) ID 'LM'.

PERFORM generar_archivo_pdt CHANGING lt_struc_pdt626.

ELSEIF p_pdt621 EQ abap_true.DATA(lt_struc_pdt621) = VALUE ztt_wstruc_pdt621( ).

IMPORT pt_struc_pdt TO lt_struc_pdt621 FROM SHARED MEMORY indx(aa) ID 'LM'.

PERFORM generar_archivo_pdt CHANGING lt_struc_pdt621.

ELSEIF p_pdt601 EQ abap_true.DATA(lt_struc_pdt601) = VALUE ztt_wstruc_pdt601( ).

IMPORT pt_struc_pdt TO lt_struc_pdt601 FROM SHARED MEMORY indx(aa) ID 'LM'.

PERFORM generar_archivo_pdt CHANGING lt_struc_pdt601.


ENDIF.

FREE MEMORY ID 'LM'.

ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_ARCHIVO_PDT

*&---------------------------------------------------------------------*

FORM generar_archivo_pdt CHANGING pt_struc_pdt TYPE STANDARD TABLE.

DATA(lv_filename) = VALUE string( ).

DATA(lv_path) = VALUE string( ).

DATA(lv_fullpath) = VALUE string( ).

DATA(lv_nomtxt) = VALUE string( ).

DATA(lv_nomtxt2) = VALUE string( ).

DATA(lv_gi) = VALUE i( ).

DATA(lt_txt_pdt) = VALUE ztt_wtxt_pdt( ).

DATA(lt_ext) = VALUE string( ).

DATA(lt_ext2) = VALUE string( ).

CLEAR r_budat.

READ TABLE r_budat INDEX 1.

SELECT SINGLE paval INTO @DATA(lv_ruc) FROM t001z

WHERE bukrs EQ @p_bukrs AND party EQ 'PE_RUC'.

IF sy-subrc EQ 0.

IF p_pdt697 EQ abap_true.
CONCATENATE '0697' lv_ruc r_budat-low(4) r_budat-low+4(2) 'VC' '.TXT' INTO lv_nomtxt.lt_ext
= 'TXT'.

ELSEIF p_pdt633 EQ abap_true.

CONCATENATE '0633' lv_ruc r_budat-low(4) r_budat-low+4(2) 'VC' '.TXT' INTO lv_nomtxt.lt_ext


= 'TXT'.

ELSEIF p_pdt626 EQ abap_true.

CONCATENATE '0626' lv_ruc r_budat-low(4) r_budat-low+4(2) '.TXT' INTO lv_nomtxt.lt_ext =


'TXT'.

ELSEIF p_pdt621 EQ abap_true.

CONCATENATE '0621' lv_ruc r_budat-low(4) r_budat-low+4(2) 'PI' '.TXT' INTO lv_nomtxt.lt_ext


= 'TXT'.

ELSEIF p_pdt617 EQ abap_true.

CONCATENATE '0617' r_budat-low(4) r_budat-low+4(2) lv_ruc '.NDO' INTO lv_nomtxt.lt_ext =


'NDO'.

ELSEIF p_pdt601 EQ abap_true.

CONCATENATE '0601' r_budat-low(4) r_budat-low+4(2) lv_ruc '.PS4' INTO lv_nomtxt.lt_ext =


'PS4'.

CONCATENATE '0601' r_budat-low(4) r_budat-low+4(2) lv_ruc '.4TA' INTO lv_nomtxt2.lt_ext2 =


'4TA'.

ENDIF.

ENDIF.

CALL METHOD cl_gui_frontend_services=>file_save_dialog

EXPORTING

window_title = 'Descargar Archivo'

default_extension = lt_ext

default_file_name = lv_nomtxt

CHANGING

filename = lv_filename

path = lv_path

fullpath = lv_fullpath.
IF lv_fullpath IS NOT INITIAL.

IF lv_nomtxt NE lv_filename.

CONCATENATE lv_path lv_nomtxt INTO lv_fullpath.

ENDIF.

PERFORM building_pdt_txt USING abap_false CHANGING pt_struc_pdt lt_txt_pdt.

CALL METHOD cl_gui_frontend_services=>gui_download

EXPORTING

filename = lv_fullpath

filetype = 'ASC'

IMPORTING

filelength = lv_gi

CHANGING

data_tab = lt_txt_pdt

EXCEPTIONS

file_write_error =1

no_batch =2

gui_refuse_filetransfer = 3

invalid_type =4

no_authority =5

unknown_error =6

header_not_allowed =7

separator_not_allowed = 8

filesize_not_allowed = 9

header_too_long = 10

dp_error_create = 11

dp_error_send = 12
dp_error_write = 13

unknown_dp_error = 14

access_denied = 15

dp_out_of_memory = 16

disk_full = 17

dp_timeout = 18

file_not_found = 19

dataprovider_exception = 20

control_flush_error = 21

not_supported_by_gui = 22

error_no_gui = 23

OTHERS = 24.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

IF p_pdt601 EQ abap_true.

CLEAR: lv_filename, lv_path, lv_fullpath, lt_txt_pdt[].

CALL METHOD cl_gui_frontend_services=>file_save_dialog

EXPORTING

window_title = 'Descargar Archivo'

default_extension = lt_ext2

default_file_name = lv_nomtxt2

CHANGING

filename = lv_filename

path = lv_path

fullpath = lv_fullpath.
IF lv_fullpath IS NOT INITIAL.

IF lv_nomtxt2 NE lv_filename.

CONCATENATE lv_path lv_nomtxt2 INTO lv_fullpath.

ENDIF.

PERFORM building_pdt_txt USING abap_true CHANGING pt_struc_pdt lt_txt_pdt.

CALL METHOD cl_gui_frontend_services=>gui_download

EXPORTING

filename = lv_fullpath

filetype = 'ASC'

IMPORTING

filelength = lv_gi

CHANGING

data_tab = lt_txt_pdt

EXCEPTIONS

file_write_error =1

no_batch =2

gui_refuse_filetransfer = 3

invalid_type =4

no_authority =5

unknown_error =6

header_not_allowed =7

separator_not_allowed = 8

filesize_not_allowed = 9

header_too_long = 10

dp_error_create = 11

dp_error_send = 12
dp_error_write = 13

unknown_dp_error = 14

access_denied = 15

dp_out_of_memory = 16

disk_full = 17

dp_timeout = 18

file_not_found = 19

dataprovider_exception = 20

control_flush_error = 21

not_supported_by_gui = 22

error_no_gui = 23

OTHERS = 24.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form BUILDING_PDT_TXT

*&---------------------------------------------------------------------*

FORM building_pdt_txt USING p_secondtxt TYPE c

CHANGING pt_struc_pdt TYPE STANDARD TABLE


pt_txt_pdt TYPE STANDARD TABLE.

IF p_pdt697 EQ abap_true.

PERFORM generar_txt_pdt697 USING pt_struc_pdt CHANGING pt_txt_pdt.

ELSEIF p_pdt633 EQ abap_true.

PERFORM generar_txt_pdt633 USING pt_struc_pdt CHANGING pt_txt_pdt.

ELSEIF p_pdt626 EQ abap_true.

PERFORM generar_txt_pdt626 USING pt_struc_pdt CHANGING pt_txt_pdt.

ELSEIF p_pdt621 EQ abap_true.

PERFORM generar_txt_pdt621 USING pt_struc_pdt CHANGING pt_txt_pdt.

ELSEIF p_pdt617 EQ abap_true.

PERFORM generar_txt_pdt617 USING pt_struc_pdt CHANGING pt_txt_pdt.

ELSEIF p_pdt601 EQ abap_true.

IF p_secondtxt EQ abap_false.

PERFORM generar_txt_pdt601a USING pt_struc_pdt CHANGING pt_txt_pdt.

ELSE.

PERFORM generar_txt_pdt601b USING pt_struc_pdt CHANGING pt_txt_pdt.

ENDIF.

ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_TXT_PDT697

*&---------------------------------------------------------------------*

FORM generar_txt_pdt697 USING pt_struc_pdt TYPE STANDARD TABLE

CHANGING pt_txt_pdt TYPE STANDARD TABLE.

DATA(lw_txt_pdt) = VALUE zwtxt_pdt( ).

DATA(lw_struc_pdt697) = VALUE zwstruc_pdt697( ).


DATA(lv_monto) = VALUE char16( ).

LOOP AT pt_struc_pdt INTO lw_struc_pdt697.

CLEAR lv_monto.

lv_monto = lw_struc_pdt697-mon_tot_com_pag_inv.

CONCATENATE

lw_struc_pdt697-tipo_documento '|'

lw_struc_pdt697-num_doc_ruc '|'

lw_struc_pdt697-razon_social '|'

lw_struc_pdt697-ap_paterno '|'

lw_struc_pdt697-ap_materno '|'

lw_struc_pdt697-nombres '|'

lw_struc_pdt697-ser_com_perc '|'

lw_struc_pdt697-num_com_perc '|'

lw_struc_pdt697-fch_emi_com_perc '|'

lw_struc_pdt697-der_cre_fiscal '|'

lw_struc_pdt697-ope_terrem_2007 '|'

lw_struc_pdt697-suje_porcen '|'

*{ //No van en el archivo a cargar.

* lw_struc_pdt697-monto_com_perc '|'

* lw_struc_pdt697-tipo_com_pag_inv '|'

* lw_struc_pdt697-ser_com_pag_inv '|'

* lw_struc_pdt697-num_com_pag_inv '|'

* lw_struc_pdt697-fch_emi_com_pag_inv '|'

*}

lv_monto '|'

'01|'

INTO lw_txt_pdt.
APPEND lw_txt_pdt TO pt_txt_pdt.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_TXT_PDT633

*&---------------------------------------------------------------------*

FORM generar_txt_pdt633 USING pt_struc_pdt TYPE STANDARD TABLE

CHANGING pt_txt_pdt TYPE STANDARD TABLE.

DATA(lw_txt_pdt) = VALUE zwtxt_pdt( ).

DATA(lw_struc_pdt633) = VALUE zwstruc_pdt633( ).

DATA(lv_monto) = VALUE char16( ).

DATA(lv_monto2) = VALUE char16( ).

LOOP AT pt_struc_pdt INTO lw_struc_pdt633.

CLEAR: lv_monto, lv_monto2.

lv_monto = lw_struc_pdt633-monto_com_perc.

lv_monto2 = lw_struc_pdt633-mon_tot_com_pag_inv.

CONCATENATE

lw_struc_pdt633-num_doc_ruc '|'

lw_struc_pdt633-razon_social '|'

lw_struc_pdt633-ap_paterno '|'

lw_struc_pdt633-ap_materno '|'

lw_struc_pdt633-nombres '|'

lw_struc_pdt633-ser_com_perc '|'"

lw_struc_pdt633-num_com_perc '|'"

lw_struc_pdt633-fch_emi_com_perc '|'

lv_monto '|'

lw_struc_pdt633-tipo_com_pag_inv '|'
* lw_struc_pdt633-ser_com_pag_inv '|'

lw_struc_pdt633-ser_com_perc '|'"

* lw_struc_pdt633-num_com_pag_inv '|'

lw_struc_pdt633-num_com_perc '|'"

lw_struc_pdt633-fch_emi_com_pag_inv '|'

lv_monto2 '|'

INTO lw_txt_pdt.

APPEND lw_txt_pdt TO pt_txt_pdt.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_TXT_PDT626

*&---------------------------------------------------------------------*

FORM generar_txt_pdt626 USING pt_struc_pdt TYPE STANDARD TABLE

CHANGING pt_txt_pdt TYPE STANDARD TABLE.

TYPES: BEGIN OF lty_pdt626,

serie_comp_ret TYPE char4,

num_comp_ret TYPE char8,

mnt_tot_base_imp TYPE wt_bs1,

END OF lty_pdt626.

DATA: lt_struct TYPE STANDARD TABLE OF zwstruc_pdt626,

lt_pdt626 TYPE STANDARD TABLE OF lty_pdt626,

lw_pdt626 TYPE lty_pdt626.

DATA(lw_txt_pdt) = VALUE zwtxt_pdt( ).

DATA(lw_struc_pdt626) = VALUE zwstruc_pdt626( ).

DATA(lv_monto) = VALUE char16( ).

DATA(lv_monto2) = VALUE char16( ).

lt_struct[] = pt_struc_pdt[].
SORT lt_struct BY serie_comp_ret num_comp_ret ASCENDING.

LOOP AT lt_struct INTO DATA(lw_struct).

MOVE-CORRESPONDING lw_struct TO lw_pdt626.

COLLECT lw_pdt626 INTO lt_pdt626.

ENDLOOP.

FREE: lt_struct[], lw_struct.

LOOP AT pt_struc_pdt INTO lw_struc_pdt626.

CLEAR: lv_monto, lv_monto2, lw_pdt626.

READ TABLE lt_pdt626 INTO lw_pdt626

WITH KEY serie_comp_ret = lw_struc_pdt626-serie_comp_ret

num_comp_ret = lw_struc_pdt626-num_comp_ret.

IF sy-subrc EQ 0.

lv_monto = lw_pdt626-mnt_tot_base_imp.

ENDIF.

lv_monto2 = lw_struc_pdt626-mnt_tot_doc_pag.

CONDENSE: lv_monto, lv_monto2 NO-GAPS.

CONCATENATE

lw_struc_pdt626-ruc_proveedor '|'

lw_struc_pdt626-razon_social '|'

lw_struc_pdt626-ape_paterno '|'

lw_struc_pdt626-ape_materno '|'

lw_struc_pdt626-nombres '|'

lw_struc_pdt626-serie_comp_ret '|'

lw_struc_pdt626-num_comp_ret '|'

lw_struc_pdt626-fch_emi_comp_ret '|'

lv_monto '|'

lw_struc_pdt626-tip_comp_doc_pag '|'

lw_struc_pdt626-ser_doc_pagado '|'

lw_struc_pdt626-num_doc_pagado '|'
lw_struc_pdt626-fch_emi_doc_pag '|'

lv_monto2 '|'

INTO lw_txt_pdt.

APPEND lw_txt_pdt TO pt_txt_pdt.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_TXT_PDT621

*&---------------------------------------------------------------------*

FORM generar_txt_pdt621 USING pt_struc_pdt TYPE STANDARD TABLE

CHANGING pt_txt_pdt TYPE STANDARD TABLE.

DATA(lw_txt_pdt) = VALUE zwtxt_pdt( ).

DATA(lw_struc_pdt621) = VALUE zwstruc_pdt621( ).

DATA(lv_monto) = VALUE char16( ).

LOOP AT pt_struc_pdt INTO lw_struc_pdt621.

CLEAR lv_monto.

lv_monto = lw_struc_pdt621-mon_tot_com_pag_inv.

CONDENSE lv_monto NO-GAPS.

CONCATENATE

lw_struc_pdt621-num_doc_ruc '|'

lw_struc_pdt621-tipo_com_pag_inv '|'

lw_struc_pdt621-ser_com_pag_inv '|'

lw_struc_pdt621-num_com_pag_inv '|'

lw_struc_pdt621-fch_emi_com_pag_inv '|'

lv_monto '|'

INTO lw_txt_pdt.

APPEND lw_txt_pdt TO pt_txt_pdt.


ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_TXT_PDT617

*&---------------------------------------------------------------------*

FORM generar_txt_pdt617 USING pt_struc_pdt TYPE STANDARD TABLE

CHANGING pt_txt_pdt TYPE STANDARD TABLE.

DATA(lw_txt_pdt) = VALUE zwtxt_pdt( ).

DATA(lw_struc_pdt617) = VALUE zwstruc_pdt617( ).

DATA(lv_monto) = VALUE char16( ).

DATA(lv_monto2) = VALUE char16( ).

DATA(lv_monto3) = VALUE char16( ).

DATA(lv_monto4) = VALUE char16( ).

LOOP AT pt_struc_pdt INTO lw_struc_pdt617.

CLEAR: lv_monto, lv_monto2, lv_monto3, lv_monto4 .

lv_monto = lw_struc_pdt617-renta_neta.

lv_monto2 = lw_struc_pdt617-retencion.

lv_monto3 = lw_struc_pdt617-gasto_costo.

lv_monto4 = lw_struc_pdt617-tributo.

CONDENSE: lv_monto, lv_monto2, lv_monto3, lv_monto4 NO-GAPS.

CONCATENATE

lw_struc_pdt617-tipo_persona '|'

lw_struc_pdt617-tipo_descripcion '|'

lw_struc_pdt617-ap_paterno '|'

lw_struc_pdt617-ap_materno '|'

lw_struc_pdt617-nombres '|'

lw_struc_pdt617-razon_social '|'
lv_monto '|'

lv_monto2 '|'

lw_struc_pdt617-pais '|'

lw_struc_pdt617-direccion '|'

lw_struc_pdt617-servicio '|'

lv_monto3 '|'

lw_struc_pdt617-porcentaje '|'

lv_monto4 '|'

lw_struc_pdt617-tipo_documento '|'

lw_struc_pdt617-num_doc_no_dom '|'

lw_struc_pdt617-fch_nac '|'

lw_struc_pdt617-tip_direc_legal '|'

INTO lw_txt_pdt.

APPEND lw_txt_pdt TO pt_txt_pdt.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_TXT_PDT601A

*&---------------------------------------------------------------------*

FORM generar_txt_pdt601A USING pt_struc_pdt TYPE STANDARD TABLE

CHANGING pt_txt_pdt TYPE STANDARD TABLE.

DATA(lw_txt_pdt) = VALUE zwtxt_pdt( ).

DATA(lw_struc_pdt601) = VALUE zwstruc_pdt601( ).

LOOP AT pt_struc_pdt INTO lw_struc_pdt601.

CONCATENATE '|' '|'

lw_struc_pdt601-tip_documento '|'

lw_struc_pdt601-num_documento '|'
lw_struc_pdt601-ape_paterno '|'

lw_struc_pdt601-ape_materno '|'

lw_struc_pdt601-nombres '|'

lw_struc_pdt601-domiciliado '|'

lw_struc_pdt601-convenio '|'

INTO lw_txt_pdt.

APPEND lw_txt_pdt TO pt_txt_pdt.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form GENERAR_TXT_PDT601B

*&---------------------------------------------------------------------*

FORM generar_txt_pdt601B USING pt_struc_pdt TYPE STANDARD TABLE

CHANGING pt_txt_pdt TYPE STANDARD TABLE.

DATA(lw_txt_pdt) = VALUE zwtxt_pdt( ).

DATA(lw_struc_pdt601) = VALUE zwstruc_pdt601( ).

DATA(lv_monto) = VALUE char16( ).

LOOP AT pt_struc_pdt INTO lw_struc_pdt601.

CLEAR lv_monto.

lv_monto = lw_struc_pdt601-mnt_tot_servicio.

CONDENSE: lv_monto NO-GAPS.

CONCATENATE '|' '|'

lw_struc_pdt601-tip_documento '|'

lw_struc_pdt601-num_documento '|'

lw_struc_pdt601-tip_comprobante '|'

lw_struc_pdt601-ser_comprobante '|'

lw_struc_pdt601-num_comprobante '|'
lv_monto '|'

lw_struc_pdt601-fch_emision '|'

lw_struc_pdt601-fch_pago '|'

lw_struc_pdt601-ret_cta_cat '|'

lw_struc_pdt601-ind_ret_reg_pen '|'

INTO lw_txt_pdt.

APPEND lw_txt_pdt TO pt_txt_pdt.

ENDLOOP.

ENDFORM.

S-ar putea să vă placă și