Campo WAERS generalmente se encuentra en la cabecera
la descripcion de este campo esta en la tabla tCURC
Monday, November 15, 2010
Leer en el servidor
*-------------------------------------------------------------*
PARA LEER EN EL SERVIDOR
*-------------------------------------------------------------*
REPORT zdataset04 MESSAGE-ID zbc420_04.
TYPES: BEGIN OF gty_data,
texto(100) TYPE c,
END OF gty_data.
DATA: gti_data TYPE TABLE OF gty_data WITH HEADER LINE.
DATA: infile2 LIKE epsf-epsdirnam.
DATA: infile1 LIKE epsf-epsdirnam.
infile1 = '/tmp/prueba1.txt'.
infile2 = '/tmp/prueba_04_otra2.txt'.
OPEN DATASET infile1 FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
DO.
READ DATASET infile1 INTO gti_data.
CASE sy-subrc.
WHEN '0'.
APPEND gti_data.
WHEN '4'.
EXIT.
WHEN '8'.
MESSAGE e000 WITH 'No se puede'.
ENDCASE.
ENDDO.
ELSE.
MESSAGE e000 WITH 'No se puede leer archivo ' infile1.
ENDIF.
CLOSE DATASET infile1.
PARA LEER EN EL SERVIDOR
*-------------------------------------------------------------*
REPORT zdataset04 MESSAGE-ID zbc420_04.
TYPES: BEGIN OF gty_data,
texto(100) TYPE c,
END OF gty_data.
DATA: gti_data TYPE TABLE OF gty_data WITH HEADER LINE.
DATA: infile2 LIKE epsf-epsdirnam.
DATA: infile1 LIKE epsf-epsdirnam.
infile1 = '/tmp/prueba1.txt'.
infile2 = '/tmp/prueba_04_otra2.txt'.
OPEN DATASET infile1 FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
DO.
READ DATASET infile1 INTO gti_data.
CASE sy-subrc.
WHEN '0'.
APPEND gti_data.
WHEN '4'.
EXIT.
WHEN '8'.
MESSAGE e000 WITH 'No se puede'.
ENDCASE.
ENDDO.
ELSE.
MESSAGE e000 WITH 'No se puede leer archivo ' infile1.
ENDIF.
CLOSE DATASET infile1.
Escribir en el servidor
FORM write_server .
DATA: ls_root TYPE char100,
ls_dir TYPE char100,
ls_num_file(8) TYPE n,
ls_rango TYPE inri-nrrangenr VALUE '01',
ls_mensaje TYPE char50.
field-symbols: TYPE gty_archivo.
"ls_dir = '/interface/400/pos/salida'.
ls_dir = '/interface/'.
* Obtner numero correlativo de archivo
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = ls_rango
object = 'ZTABDM'
IMPORTING
number = ls_num_file.
CONCATENATE ls_dir 'ZTABDM' ls_num_file '.txt' INTO ls_root.
OPEN DATASET ls_root FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc EQ 0.
CATCH SYSTEM-EXCEPTIONS dataset_read_error = 11
OTHERS = 12.
LOOP AT gtd_archivo ASSIGNING.
TRANSFER-linea TO ls_root.
ENDLOOP.
ls_mensaje = 'Archivo creado'.
CLOSE DATASET ls_root.
ENDCATCH.
ELSE.
ls_mensaje = 'No se pudo crear el archivo'.
ENDIF.
ENDFORM.
DATA: ls_root TYPE char100,
ls_dir TYPE char100,
ls_num_file(8) TYPE n,
ls_rango TYPE inri-nrrangenr VALUE '01',
ls_mensaje TYPE char50.
field-symbols:
"ls_dir = '/interface/400/pos/salida'.
ls_dir = '/interface/'.
* Obtner numero correlativo de archivo
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = ls_rango
object = 'ZTABDM'
IMPORTING
number = ls_num_file.
CONCATENATE ls_dir 'ZTABDM' ls_num_file '.txt' INTO ls_root.
OPEN DATASET ls_root FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc EQ 0.
CATCH SYSTEM-EXCEPTIONS dataset_read_error = 11
OTHERS = 12.
LOOP AT gtd_archivo ASSIGNING
TRANSFER
ENDLOOP.
ls_mensaje = 'Archivo creado'.
CLOSE DATASET ls_root.
ENDCATCH.
ELSE.
ls_mensaje = 'No se pudo crear el archivo'.
ENDIF.
ENDFORM.
programa y crear tx
Con la tx se93 se mira que programa esta ligado a una tx.
Para crear la transacción se crea con la 2da opción delos radio buttons.
Para crear la transacción se crea con la 2da opción delos radio buttons.
Diferencia entre screen exit, field exit user exit badi
http://www.sap-basis-abap.com/abap/difference-between-user-exits-screen-exits-field-exits.html
Difference Between User Exits, Screen Exits and Field Exits
What are the differences between user, screen and field exits?
Let me answer this question for you:
The basic rule in SAP as far as ABAP workbench developments are concerned is "Do not modify the source code of the program"
Since needs and requirements keep on changing from client to client and for various business scenarios, there is a need to customise the programs as per client requirement.
For this purpose, SAP has provided numerous list of user-exits also known as enhancements, which is nothing but a program which will deal with the client additional requirement, without modifying the source code of the program. These exits are already provided by SAP. You can see the list of user-exits provided by using the transaction code SMOD. If you cannot find an user exit which match with client requirements, then you can tell SAP to create a new user exit.
On the other hand, field exit is nothing but where you write a small program, to control the properties of an existing field in a particular screen. Hence creation of a field exit is controlled by Program name, screen no. and the field name.
To give you an example, if you want to prevent a particular payment method to be executed via transaction FBZ5 or F-58, such that if the user enter a particular payment method while executing the transaction FBZ5 or F-58, the system should restrict the user from proceeding further, u can write a field exit for field RZAWE (payment method).
The program which controls the creation of field exit is RSMODORF
As far as screen exit is concerned, as per the client requirement if the user wants a separate screen to appear on execution of a particular task, which deviates from the standard sap provided flow of transactions, you write a screen exit. In such case you first prepare the screen using the screen painter and define it as to after which sap screen you want this screen to appear for processing the transaction further.
Tips by : Rakesh Jain
Difference Between User Exits, Screen Exits and Field Exits
What are the differences between user, screen and field exits?
Let me answer this question for you:
The basic rule in SAP as far as ABAP workbench developments are concerned is "Do not modify the source code of the program"
Since needs and requirements keep on changing from client to client and for various business scenarios, there is a need to customise the programs as per client requirement.
For this purpose, SAP has provided numerous list of user-exits also known as enhancements, which is nothing but a program which will deal with the client additional requirement, without modifying the source code of the program. These exits are already provided by SAP. You can see the list of user-exits provided by using the transaction code SMOD. If you cannot find an user exit which match with client requirements, then you can tell SAP to create a new user exit.
On the other hand, field exit is nothing but where you write a small program, to control the properties of an existing field in a particular screen. Hence creation of a field exit is controlled by Program name, screen no. and the field name.
To give you an example, if you want to prevent a particular payment method to be executed via transaction FBZ5 or F-58, such that if the user enter a particular payment method while executing the transaction FBZ5 or F-58, the system should restrict the user from proceeding further, u can write a field exit for field RZAWE (payment method).
The program which controls the creation of field exit is RSMODORF
As far as screen exit is concerned, as per the client requirement if the user wants a separate screen to appear on execution of a particular task, which deviates from the standard sap provided flow of transactions, you write a screen exit. In such case you first prepare the screen using the screen painter and define it as to after which sap screen you want this screen to appear for processing the transaction further.
Tips by : Rakesh Jain
Encontrar transacciones - User exit
http://www.sap-img.com/ab038.htm
report zuserexit no standard page heading.
tables : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
tables : tstct.
data : jtab like tadir occurs 0 with header line.
data : field1(30).
data : v_devclass like tadir-devclass.
parameters : p_tcode like tstc-tcode obligatory.
select single * from tstc where tcode eq p_tcode.
if sy-subrc eq 0.
select single * from tadir where pgmid = 'R3TR'
and object = 'PROG'
and obj_name = tstc-pgmna.
move : tadir-devclass to v_devclass.
if sy-subrc ne 0.
select single * from trdir where name = tstc-pgmna.
if trdir-subc eq 'F'.
select single * from tfdir where pname = tstc-pgmna.
select single * from enlfdir where funcname =
tfdir-funcname.
select single * from tadir where pgmid = 'R3TR'
and object = 'FUGR'
and obj_name eq enlfdir-area.
move : tadir-devclass to v_devclass.
endif.
endif.
select * from tadir into table jtab
where pgmid = 'R3TR'
and object = 'SMOD'
and devclass = v_devclass.
select single * from tstct where sprsl eq sy-langu and
tcode eq p_tcode.
format color col_positive intensified off.
write:/(19) 'Transaction Code - ',
20(20) p_tcode,
45(50) tstct-ttext.
skip.
if not jtab[] is initial.
write:/(95) sy-uline.
format color col_heading intensified on.
write:/1 sy-vline,
2 'Exit Name',
21 sy-vline ,
22 'Description',
95 sy-vline.
write:/(95) sy-uline.
loop at jtab.
select single * from modsapt
where sprsl = sy-langu and
name = jtab-obj_name.
format color col_normal intensified off.
write:/1 sy-vline,
2 jtab-obj_name hotspot on,
21 sy-vline ,
22 modsapt-modtext,
95 sy-vline.
endloop.
write:/(95) sy-uline.
describe table jtab.
skip.
format color col_total intensified on.
write:/ 'No of Exits:' , sy-tfill.
else.
format color col_negative intensified on.
write:/(95) 'No User Exit exists'.
endif.
else.
format color col_negative intensified on.
write:/(95) 'Transaction Code Does Not Exist'.
endif.
at line-selection.
get cursor field field1.
check field1(4) eq 'JTAB'.
set parameter id 'MON' field sy-lisel+1(10).
call transaction 'SMOD' and skip first screen.
report zuserexit no standard page heading.
tables : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
tables : tstct.
data : jtab like tadir occurs 0 with header line.
data : field1(30).
data : v_devclass like tadir-devclass.
parameters : p_tcode like tstc-tcode obligatory.
select single * from tstc where tcode eq p_tcode.
if sy-subrc eq 0.
select single * from tadir where pgmid = 'R3TR'
and object = 'PROG'
and obj_name = tstc-pgmna.
move : tadir-devclass to v_devclass.
if sy-subrc ne 0.
select single * from trdir where name = tstc-pgmna.
if trdir-subc eq 'F'.
select single * from tfdir where pname = tstc-pgmna.
select single * from enlfdir where funcname =
tfdir-funcname.
select single * from tadir where pgmid = 'R3TR'
and object = 'FUGR'
and obj_name eq enlfdir-area.
move : tadir-devclass to v_devclass.
endif.
endif.
select * from tadir into table jtab
where pgmid = 'R3TR'
and object = 'SMOD'
and devclass = v_devclass.
select single * from tstct where sprsl eq sy-langu and
tcode eq p_tcode.
format color col_positive intensified off.
write:/(19) 'Transaction Code - ',
20(20) p_tcode,
45(50) tstct-ttext.
skip.
if not jtab[] is initial.
write:/(95) sy-uline.
format color col_heading intensified on.
write:/1 sy-vline,
2 'Exit Name',
21 sy-vline ,
22 'Description',
95 sy-vline.
write:/(95) sy-uline.
loop at jtab.
select single * from modsapt
where sprsl = sy-langu and
name = jtab-obj_name.
format color col_normal intensified off.
write:/1 sy-vline,
2 jtab-obj_name hotspot on,
21 sy-vline ,
22 modsapt-modtext,
95 sy-vline.
endloop.
write:/(95) sy-uline.
describe table jtab.
skip.
format color col_total intensified on.
write:/ 'No of Exits:' , sy-tfill.
else.
format color col_negative intensified on.
write:/(95) 'No User Exit exists'.
endif.
else.
format color col_negative intensified on.
write:/(95) 'Transaction Code Does Not Exist'.
endif.
at line-selection.
get cursor field field1.
check field1(4) eq 'JTAB'.
set parameter id 'MON' field sy-lisel+1(10).
call transaction 'SMOD' and skip first screen.
Usuarios auditoria
TYPES: BEGIN OF lty_t001w,
werks TYPE t001w-werks,
bwkey TYPE t001w-bwkey,
END OF lty_t001w.
DATA: lth_t001w TYPE HASHED TABLE OF lty_t001w
WITH UNIQUE KEY werks.
SELECT werks bwkey INTO TABLE lth_t001w
FROM t001w
FOR ALL ENTRIES IN gtd_aufk_afpo
WHERE werks = gtd_aufk_afpo-werks.
LOOP AT gtd_aufk_afpo INTO lwa_aufk_afpo.
* Auditoría
lwa_ztbdatcmvprd-cpuus = sy-uname.
lwa_ztbdatcmvprd-cputm = sy-uzeit.
lwa_ztbdatcmvprd-cpudt = sy-datum.
ENDLOOP.
werks TYPE t001w-werks,
bwkey TYPE t001w-bwkey,
END OF lty_t001w.
DATA: lth_t001w TYPE HASHED TABLE OF lty_t001w
WITH UNIQUE KEY werks.
SELECT werks bwkey INTO TABLE lth_t001w
FROM t001w
FOR ALL ENTRIES IN gtd_aufk_afpo
WHERE werks = gtd_aufk_afpo-werks.
LOOP AT gtd_aufk_afpo INTO lwa_aufk_afpo.
* Auditoría
lwa_ztbdatcmvprd-cpuus = sy-uname.
lwa_ztbdatcmvprd-cputm = sy-uzeit.
lwa_ztbdatcmvprd-cpudt = sy-datum.
ENDLOOP.
Eliminar multiple botones de status GUI
DATA: BEGIN OF TAB OCCURS 10,
FCODE(4),
END OF TAB.
REFRESH TAB.
MOVE '&ACTU' TO TAB-FCODE.
APPEND TAB.
SET PF-STATUS 'STATUS_000' EXCLUDING TAB.
FCODE(4),
END OF TAB.
REFRESH TAB.
MOVE '&ACTU' TO TAB-FCODE.
APPEND TAB.
SET PF-STATUS 'STATUS_000' EXCLUDING TAB.
Rangos en vez de “SELECT ... for all entries”
DATA: lr_objnr TYPE RANGE OF coep-objnr,
lwa_objnr LIKE LINE OF lr_objnr.
LOOP AT gts_aufk_afpo ASSIGNING.
CLEAR lwa_objnr.
lwa_objnr-sign = 'I'.
lwa_objnr-option = 'EQ'.
lwa_objnr-low =-objnr.
append lwa_objnr TO lr_objnr.
ENDLOOP.
IF NOT lr_objnr IS INITIAL.
SELECT objnr beknz SUM( mbgbtr ) AS canti SUM( wtgbtr ) AS monto
FROM coep
INTO TABLE ltd_temp
WHERE kokrs = p_kokrs AND
objnr IN lr_objnr AND
perio = p_perio AND
gjahr = p_gjahr AND
lednr = p_lednr AND
beknz IN ('L','S','H')
GROUP BY OBJNR beknz.
* HAVING canti <> 0 AND monto <> 0.
ENDIF.
lwa_objnr LIKE LINE OF lr_objnr.
LOOP AT gts_aufk_afpo ASSIGNING
CLEAR lwa_objnr.
lwa_objnr-sign = 'I'.
lwa_objnr-option = 'EQ'.
lwa_objnr-low =
append lwa_objnr TO lr_objnr.
ENDLOOP.
IF NOT lr_objnr IS INITIAL.
SELECT objnr beknz SUM( mbgbtr ) AS canti SUM( wtgbtr ) AS monto
FROM coep
INTO TABLE ltd_temp
WHERE kokrs = p_kokrs AND
objnr IN lr_objnr AND
perio = p_perio AND
gjahr = p_gjahr AND
lednr = p_lednr AND
beknz IN ('L','S','H')
GROUP BY OBJNR beknz.
* HAVING canti <> 0 AND monto <> 0.
ENDIF.
Parameters y select options
PARAMETERS: p_perio TYPE coep-perio OBLIGATORY,
p_gjhar TYPE coep-gjahr OBLIGATORY,
p_budat TYPE date OBLIGATORY,
p_kokrs TYPE coas-kokrs default 'GWNG',
p_lednr TYPE coep-lednr default '0'.
SELECT-OPTIONS: s_autyp FOR coas-autyp DEFAULT '05',
s_bukrs FOR coas-bukrs,
s_werks FOR coas-werks OBLIGATORY,
s_auart FOR coas-auart OBLIGATORY default 'RM01',
s_aufnr FOR coas-aufnr,
s_prctr FOR coas-prctr.
p_gjhar TYPE coep-gjahr OBLIGATORY,
p_budat TYPE date OBLIGATORY,
p_kokrs TYPE coas-kokrs default 'GWNG',
p_lednr TYPE coep-lednr default '0'.
SELECT-OPTIONS: s_autyp FOR coas-autyp DEFAULT '05',
s_bukrs FOR coas-bukrs,
s_werks FOR coas-werks OBLIGATORY,
s_auart FOR coas-auart OBLIGATORY default 'RM01',
s_aufnr FOR coas-aufnr,
s_prctr FOR coas-prctr.
Maintenance view with custom F4
1.While executing the maintenance view using the sm30 transaction, go to the menu System, status and get the program name then go to the transaction se38 and edit it, generally this name has SAPL at the beginning an the view's name after that.
2.Add to the screen flow logic .
PROCESS ON VALUE-REQUEST. "F4
FIELD ZVA_ZTASPIRANTE-PNACI MODULE matchcode_estad.
3.Function
MODULE matchcode_estad INPUT.
DATA: BEGIN OF help_item OCCURS 0,
carrid TYPE s_carr_id,
connid TYPE s_conn_id,
END OF help_item.
SELECT carrid connid
INTO TABLE help_item
FROM spfli.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CARRID'
dynprofield = 'CONNID'
dynpprog = sy-cprog
dynpnr = sy-dynnr
value_org = 'S'
TABLES
value_tab = help_item.
ENDMODULE.
4. Whether you need to validate the input, uncheck the field foreign .. in the screen layout for the modified field and go back to the screen flow logic and within the loop add the module
PROCESS AFTER INPUT.
MODULE liste_exit_command AT EXIT-COMMAND.
MODULE liste_before_loop.
LOOP AT extract.
...
FIELD zva_ztaspirante-pnaci MODULE validar_pais ON REQUEST.
ENDLOOP.
MODULE liste_after_loop. .
5.MODULE validar_pais INPUT.
DATA ls_carrid TYPE s_carr_id.
SELECT SINGLE carrid INTO ls_carrid FROM spfli
WHERE carrid = zva_ztaspirante-pnaci.
IF sy-subrc <> 0.
MESSAGE: 'No existe el valor ingresado' TYPE 'E'.
ENDIF.
ENDMODULE.
2.Add to the screen flow logic .
PROCESS ON VALUE-REQUEST. "F4
FIELD ZVA_ZTASPIRANTE-PNACI MODULE matchcode_estad.
3.Function
MODULE matchcode_estad INPUT.
DATA: BEGIN OF help_item OCCURS 0,
carrid TYPE s_carr_id,
connid TYPE s_conn_id,
END OF help_item.
SELECT carrid connid
INTO TABLE help_item
FROM spfli.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CARRID'
dynprofield = 'CONNID'
dynpprog = sy-cprog
dynpnr = sy-dynnr
value_org = 'S'
TABLES
value_tab = help_item.
ENDMODULE.
4. Whether you need to validate the input, uncheck the field foreign .. in the screen layout for the modified field and go back to the screen flow logic and within the loop add the module
PROCESS AFTER INPUT.
MODULE liste_exit_command AT EXIT-COMMAND.
MODULE liste_before_loop.
LOOP AT extract.
...
FIELD zva_ztaspirante-pnaci MODULE validar_pais ON REQUEST.
ENDLOOP.
MODULE liste_after_loop. .
5.MODULE validar_pais INPUT.
DATA ls_carrid TYPE s_carr_id.
SELECT SINGLE carrid INTO ls_carrid FROM spfli
WHERE carrid = zva_ztaspirante-pnaci.
IF sy-subrc <> 0.
MESSAGE: 'No existe el valor ingresado' TYPE 'E'.
ENDIF.
ENDMODULE.
Agregar Botones a ALV OO
TOP
CLASS gcl_alvoo_event_handler DEFINITION.
* toolbar
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object,
* user command
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
CLA
CLASS gcl_alvoo_event_handler IMPLEMENTATION.
*toolbar
METHOD handle_toolbar.
PERFORM handle_toolbar_alvoo CHANGING e_object.
ENDMETHOD.
*User command
METHOD handle_user_command.
CASE e_ucomm.
WHEN 'REG'.
PERFORM registrar_aspirante.
WHEN 'ELI'.
PERFORM eliminar_aspirante.
ENDCASE.
CLEAR e_ucomm.
ENDMETHOD.
ENDCLASS.
F02
FORM handle_toolbar_alvoo CHANGING pe_object TYPE REF TO cl_alv_event_toolbar_set.
DATA is_boton TYPE stb_button.
MOVE : 'SOLEMI' TO is_boton-function,
'@B1@' TO is_boton-icon,
'Solicitar emision' TO is_boton-text,
'Solicitar emision' TO is_boton-quickinfo.
APPEND is_boton TO pe_object->mt_toolbar.
CLEAR is_boton.
ENDFORM. " handle_alv_toolbar
CLASS gcl_alvoo_event_handler DEFINITION.
* toolbar
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object,
* user command
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
CLA
CLASS gcl_alvoo_event_handler IMPLEMENTATION.
*toolbar
METHOD handle_toolbar.
PERFORM handle_toolbar_alvoo CHANGING e_object.
ENDMETHOD.
*User command
METHOD handle_user_command.
CASE e_ucomm.
WHEN 'REG'.
PERFORM registrar_aspirante.
WHEN 'ELI'.
PERFORM eliminar_aspirante.
ENDCASE.
CLEAR e_ucomm.
ENDMETHOD.
ENDCLASS.
F02
FORM handle_toolbar_alvoo CHANGING pe_object TYPE REF TO cl_alv_event_toolbar_set.
DATA is_boton TYPE stb_button.
MOVE : 'SOLEMI' TO is_boton-function,
'@B1@' TO is_boton-icon,
'Solicitar emision' TO is_boton-text,
'Solicitar emision' TO is_boton-quickinfo.
APPEND is_boton TO pe_object->mt_toolbar.
CLEAR is_boton.
ENDFORM. " handle_alv_toolbar
ALV OO
Preliminares
crear screen 0100
crear custom control en el dynpro 0100 nombre CC_0100
crear 'STATUS_100'.
Crear 'TITULO_100'.
TOP
* Tabla global para el manejo al alv.
DATA: gtd_alv TYPE STANDARD TABLE OF gty_alv.
* Variables para construir layout y fieldcat el alvOO.
DATA: gwa_alvoo_layout TYPE lvc_s_layo.
* Tabla con los datos del layout del alvOO.
DATA: gtd_alvoo_fieldcat TYPE lvc_t_fcat.
*Clase usada en el manejo del alv
CLASS gcl_alvoo_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
* Objetos para el ALV
DATA: go_custom_container TYPE REF TO cl_gui_custom_container,
go_alvoo TYPE REF TO cl_gui_alv_grid,
go_alvoo_event_handler TYPE REF TO gcl_alvoo_event_handler.
* Comando de eventos
DATA gs_okcode_0100 TYPE sy-ucomm.
CLA
* Clase usada en el manejo del alv
CLASS gcl_alvoo_event_handler IMPLEMENTATION.
METHOD handle_toolbar.
ENDMETHOD.
METHOD handle_user_command.
ENDMETHOD.
ENDCLASS.
MAI
START-OF-SELECTION.
PERFORM cargar_data.
IF gtd_alv[] IS NOT INITIAL.
PERFORM construir_alvoo.
call screen 100.
ENDIF.
F01
cargar data
F02
FORM construir_layout_alvoo CHANGING pwa_layout_alvoo TYPE lvc_s_layo.
pwa_layout_alvoo-zebra = 'X'.
pwa_layout_alvoo-sel_mode = 'A'.
ENDFORM.
--------------------------------------------
FORM construir_layout_alvoo CHANGING pwa_layout_alvoo type lvc_s_layo.
pwa_layout_alvoo-zebra = 'X'.
pwa_layout_alvoo-sel_mode = 'A'.
ENDFORM. " construir_layout_alvoo
------------------------------------------
FORM contruir_catalogo_alvoo CHANGING ptd_alvoo_fieldcat TYPE lvc_t_fcat.
* Sociedad
PERFORM llenar_fieldcat_alvoo USING 'BUKRS' 'GTD_ALV' '' 'X' ''
text-c01 text-c02 'T001' 'BUKRS'
CHANGING ptd_alvoo_fieldcat.
* Fecha de Emision
PERFORM llenar_fieldcat_alvoo USING 'FEMIS' 'GTD_ALV' '' '' ''
text-c03 text-c04 'T001' 'FMHRDATE'
CHANGING ptd_alvoo_fieldcat.
* Numero de carta fianza
PERFORM llenar_fieldcat_alvoo USING 'NCFIA' 'GTD_ALV' '' '' ''
text-c05 text-c06 '' ''
CHANGING ptd_alvoo_fieldcat.
ENDFORM.
--------------------------------------------
FORM llenar_fieldcat_alvoo USING pi_campo TYPE lvc_fname
pi_tabla TYPE lvc_tname
pi_ccampo TYPE lvc_cfname
pi_key TYPE lvc_key
pi_enfatizar TYPE lvc_emphsz
pi_textl
pi_textm
pi_rtabla TYPE lvc_rtname
pi_rcampo TYPE lvc_rfname
CHANGING ptd_fieldcat_alvoo TYPE lvc_t_fcat.
DATA: lwa_fieldcat TYPE lvc_s_fcat.
lwa_fieldcat-fieldname = pi_campo.
lwa_fieldcat-tabname = pi_tabla.
lwa_fieldcat-key = pi_key.
lwa_fieldcat-cfieldname = pi_ccampo.
lwa_fieldcat-emphasize = pi_enfatizar.
lwa_fieldcat-scrtext_l = pi_textl.
lwa_fieldcat-scrtext_m = pi_textm.
lwa_fieldcat-ref_table = pi_rtabla.
lwa_fieldcat-ref_field = pi_rcampo.
APPEND lwa_fieldcat TO ptd_fieldcat_alvoo.
CLEAR lwa_fieldcat.
ENDFORM. " llenar_fieldcat_alvoo
SCREEN 100
PROCESS BEFORE OUTPUT.
MODULE status_0100.
MODULE contenedor_0100.
PROCESS AFTER INPUT.
MODULE user_command_0100.
MODULE exit_0100 AT EXIT-COMMAND.
I01
MODULE exit_0100 INPUT.
gs_okcode_0100 = sy-ucomm.
CASE gs_okcode_0100.
WHEN 'BACK' OR 'CANCEL'.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'EXIT'.
PERFORM salir_programa.
ENDCASE.
CLEAR gs_okcode_0100.
ENDMODULE.
O01
-----
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'.
SET TITLEBAR 'TITULO_0100'.
ENDMODULE. " status_0100 OUTPUT
-----
MODULE contenedor_0100 OUTPUT.
IF go_custom_container IS INITIAL.
CREATE OBJECT go_custom_container
EXPORTING
container_name = 'CC_0100'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = sy-repid
txt2 = sy-subrc
txt1 = text-001.
ENDIF.
CREATE OBJECT go_alvoo
EXPORTING
i_parent = go_custom_container.
CREATE OBJECT go_alvoo_event_handler.
SET HANDLER go_alvoo_event_handler->handle_toolbar FOR go_alvoo.
CALL METHOD go_alvoo->set_table_for_first_display
EXPORTING
i_structure_name = 'GTD_ALV'
is_layout = gwa_alvoo_layout
i_default = 'A'
CHANGING
it_fieldcatalog = gtd_alvoo_fieldcat
it_outtab = gtd_alv.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = go_alvoo.
ELSE.
CALL METHOD go_alvoo->refresh_table_display.
ENDIF.
ENDMODULE. " contenedor_0100 OUTPUT
crear screen 0100
crear custom control en el dynpro 0100 nombre CC_0100
crear 'STATUS_100'.
Crear 'TITULO_100'.
TOP
* Tabla global para el manejo al alv.
DATA: gtd_alv TYPE STANDARD TABLE OF gty_alv.
* Variables para construir layout y fieldcat el alvOO.
DATA: gwa_alvoo_layout TYPE lvc_s_layo.
* Tabla con los datos del layout del alvOO.
DATA: gtd_alvoo_fieldcat TYPE lvc_t_fcat.
*Clase usada en el manejo del alv
CLASS gcl_alvoo_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
* Objetos para el ALV
DATA: go_custom_container TYPE REF TO cl_gui_custom_container,
go_alvoo TYPE REF TO cl_gui_alv_grid,
go_alvoo_event_handler TYPE REF TO gcl_alvoo_event_handler.
* Comando de eventos
DATA gs_okcode_0100 TYPE sy-ucomm.
CLA
* Clase usada en el manejo del alv
CLASS gcl_alvoo_event_handler IMPLEMENTATION.
METHOD handle_toolbar.
ENDMETHOD.
METHOD handle_user_command.
ENDMETHOD.
ENDCLASS.
MAI
START-OF-SELECTION.
PERFORM cargar_data.
IF gtd_alv[] IS NOT INITIAL.
PERFORM construir_alvoo.
call screen 100.
ENDIF.
F01
cargar data
F02
FORM construir_layout_alvoo CHANGING pwa_layout_alvoo TYPE lvc_s_layo.
pwa_layout_alvoo-zebra = 'X'.
pwa_layout_alvoo-sel_mode = 'A'.
ENDFORM.
--------------------------------------------
FORM construir_layout_alvoo CHANGING pwa_layout_alvoo type lvc_s_layo.
pwa_layout_alvoo-zebra = 'X'.
pwa_layout_alvoo-sel_mode = 'A'.
ENDFORM. " construir_layout_alvoo
------------------------------------------
FORM contruir_catalogo_alvoo CHANGING ptd_alvoo_fieldcat TYPE lvc_t_fcat.
* Sociedad
PERFORM llenar_fieldcat_alvoo USING 'BUKRS' 'GTD_ALV' '' 'X' ''
text-c01 text-c02 'T001' 'BUKRS'
CHANGING ptd_alvoo_fieldcat.
* Fecha de Emision
PERFORM llenar_fieldcat_alvoo USING 'FEMIS' 'GTD_ALV' '' '' ''
text-c03 text-c04 'T001' 'FMHRDATE'
CHANGING ptd_alvoo_fieldcat.
* Numero de carta fianza
PERFORM llenar_fieldcat_alvoo USING 'NCFIA' 'GTD_ALV' '' '' ''
text-c05 text-c06 '' ''
CHANGING ptd_alvoo_fieldcat.
ENDFORM.
--------------------------------------------
FORM llenar_fieldcat_alvoo USING pi_campo TYPE lvc_fname
pi_tabla TYPE lvc_tname
pi_ccampo TYPE lvc_cfname
pi_key TYPE lvc_key
pi_enfatizar TYPE lvc_emphsz
pi_textl
pi_textm
pi_rtabla TYPE lvc_rtname
pi_rcampo TYPE lvc_rfname
CHANGING ptd_fieldcat_alvoo TYPE lvc_t_fcat.
DATA: lwa_fieldcat TYPE lvc_s_fcat.
lwa_fieldcat-fieldname = pi_campo.
lwa_fieldcat-tabname = pi_tabla.
lwa_fieldcat-key = pi_key.
lwa_fieldcat-cfieldname = pi_ccampo.
lwa_fieldcat-emphasize = pi_enfatizar.
lwa_fieldcat-scrtext_l = pi_textl.
lwa_fieldcat-scrtext_m = pi_textm.
lwa_fieldcat-ref_table = pi_rtabla.
lwa_fieldcat-ref_field = pi_rcampo.
APPEND lwa_fieldcat TO ptd_fieldcat_alvoo.
CLEAR lwa_fieldcat.
ENDFORM. " llenar_fieldcat_alvoo
SCREEN 100
PROCESS BEFORE OUTPUT.
MODULE status_0100.
MODULE contenedor_0100.
PROCESS AFTER INPUT.
MODULE user_command_0100.
MODULE exit_0100 AT EXIT-COMMAND.
I01
MODULE exit_0100 INPUT.
gs_okcode_0100 = sy-ucomm.
CASE gs_okcode_0100.
WHEN 'BACK' OR 'CANCEL'.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'EXIT'.
PERFORM salir_programa.
ENDCASE.
CLEAR gs_okcode_0100.
ENDMODULE.
O01
-----
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'.
SET TITLEBAR 'TITULO_0100'.
ENDMODULE. " status_0100 OUTPUT
-----
MODULE contenedor_0100 OUTPUT.
IF go_custom_container IS INITIAL.
CREATE OBJECT go_custom_container
EXPORTING
container_name = 'CC_0100'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = sy-repid
txt2 = sy-subrc
txt1 = text-001.
ENDIF.
CREATE OBJECT go_alvoo
EXPORTING
i_parent = go_custom_container.
CREATE OBJECT go_alvoo_event_handler.
SET HANDLER go_alvoo_event_handler->handle_toolbar FOR go_alvoo.
CALL METHOD go_alvoo->set_table_for_first_display
EXPORTING
i_structure_name = 'GTD_ALV'
is_layout = gwa_alvoo_layout
i_default = 'A'
CHANGING
it_fieldcatalog = gtd_alvoo_fieldcat
it_outtab = gtd_alv.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = go_alvoo.
ELSE.
CALL METHOD go_alvoo->refresh_table_display.
ENDIF.
ENDMODULE. " contenedor_0100 OUTPUT
ALV OO Custom F4
http://blog.chinaunix.net/u1/40813/showart_347924.html
http://sapprograms.blogspot.com/2008/11/how-to-implement-f4-search-help-in-oo.html
http://ddolgey.tistory.com/10
1.TOP
CLASS gcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
on_f4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells
e_display.
ENDCLASS.
2.CLA
CLASS gcl_event_receiver IMPLEMENTATION.
METHOD on_f4.
PERFORM on_f4 USING e_fieldname
es_row_no
er_event_data
et_bad_cells.
ENDMETHOD. "on_f4
ENDCLASS.
3.PBO
SET HANDLER go_event_receiver->on_f4 FOR go_alv.
PERFORM registrar_campos_f4.
4.F01
FORM registrar_campos_f4.
DATA: ltd_f4 TYPE lvc_t_f4 WITH HEADER LINE,
lwa_f4 TYPE lvc_s_f4.
lwa_f4-fieldname = 'TRATA'.
lwa_f4-register = 'X'.
lwa_f4-getbefore = 'X' .
lwa_f4-chngeafter = 'X'.
lwa_f4-internal = ''.
INSERT lwa_f4 INTO TABLE ltd_f4.
CALL METHOD go_alv->register_f4_for_fields
EXPORTING
it_f4 = ltd_f4[].
ENDFORM.
.............................................
FORM on_f4 USING p_e_fieldname TYPE lvc_fname
p_es_row_no TYPE lvc_s_roid
p_er_event_data TYPE REF TO cl_alv_event_data
p_et_bad_cells TYPE lvc_t_modi.
CHECK p_e_fieldname = 'TRATA'.
FIELD-SYMBOLS: LIKE LINE OF gtd_dom_tratamiento.
TYPES: BEGIN OF lty_f4,
domvalue_l TYPE dd07v-domvalue_l,
ddtext TYPE dd07v-ddtext,
END OF lty_f4.
DATA: ltd_f4 TYPE TABLE OF lty_f4,
lwa_f4 TYPE lty_f4,
lwa_dominio TYPE dd07v.
DATA: ltd_return TYPE TABLE OF ddshretval,
lwa_return TYPE ddshretval.
FIELD-SYMBOLS: TYPE lvc_t_modi.
DATA: ls_f4 TYPE lvc_s_modi.
* Cargar dominio en tabla.
LOOP AT gtd_dom_tratamiento ASSIGNING.
MOVE-CORRESPONDING TO lwa_f4.
APPEND lwa_f4 TO ltd_f4.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = p_e_fieldname
value_org = 'S'
TABLES
value_tab = ltd_f4
return_tab = ltd_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
READ TABLE ltd_return INTO lwa_return INDEX 1.
CHECK lwa_return-fieldval <> ''.
ASSIGN p_er_event_data->m_data->* TO.
ls_f4-fieldname = p_e_fieldname.
ls_f4-row_id = p_es_row_no-row_id.
ls_f4-value = lwa_return-fieldval .
APPEND ls_f4 TO.
DATA lwa_aspirante TYPE gty_aspirante_alv.
READ TABLE gtd_aspirante_alv INTO lwa_aspirante INDEX p_es_row_no-row_id.
READ TABLE gtd_dom_tratamiento INTO lwa_dominio
WITH KEY ddtext = lwa_return-fieldval.
IF sy-subrc = 0.
lwa_aspirante-trata = lwa_dominio-domvalue_l.
ELSE.
lwa_aspirante-trata = ''.
ENDIF.
UPDATE ztaspirante_10 SET trata = lwa_aspirante-trata
WHERE numas = lwa_aspirante-numas.
p_er_event_data->m_event_handled = 'X'.
ENDIF.
http://sapprograms.blogspot.com/2008/11/how-to-implement-f4-search-help-in-oo.html
http://ddolgey.tistory.com/10
1.TOP
CLASS gcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
on_f4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells
e_display.
ENDCLASS.
2.CLA
CLASS gcl_event_receiver IMPLEMENTATION.
METHOD on_f4.
PERFORM on_f4 USING e_fieldname
es_row_no
er_event_data
et_bad_cells.
ENDMETHOD. "on_f4
ENDCLASS.
3.PBO
SET HANDLER go_event_receiver->on_f4 FOR go_alv.
PERFORM registrar_campos_f4.
4.F01
FORM registrar_campos_f4.
DATA: ltd_f4 TYPE lvc_t_f4 WITH HEADER LINE,
lwa_f4 TYPE lvc_s_f4.
lwa_f4-fieldname = 'TRATA'.
lwa_f4-register = 'X'.
lwa_f4-getbefore = 'X' .
lwa_f4-chngeafter = 'X'.
lwa_f4-internal = ''.
INSERT lwa_f4 INTO TABLE ltd_f4.
CALL METHOD go_alv->register_f4_for_fields
EXPORTING
it_f4 = ltd_f4[].
ENDFORM.
.............................................
FORM on_f4 USING p_e_fieldname TYPE lvc_fname
p_es_row_no TYPE lvc_s_roid
p_er_event_data TYPE REF TO cl_alv_event_data
p_et_bad_cells TYPE lvc_t_modi.
CHECK p_e_fieldname = 'TRATA'.
FIELD-SYMBOLS:
TYPES: BEGIN OF lty_f4,
domvalue_l TYPE dd07v-domvalue_l,
ddtext TYPE dd07v-ddtext,
END OF lty_f4.
DATA: ltd_f4 TYPE TABLE OF lty_f4,
lwa_f4 TYPE lty_f4,
lwa_dominio TYPE dd07v.
DATA: ltd_return TYPE TABLE OF ddshretval,
lwa_return TYPE ddshretval.
FIELD-SYMBOLS:
DATA: ls_f4 TYPE lvc_s_modi.
* Cargar dominio en tabla.
LOOP AT gtd_dom_tratamiento ASSIGNING
MOVE-CORRESPONDING
APPEND lwa_f4 TO ltd_f4.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = p_e_fieldname
value_org = 'S'
TABLES
value_tab = ltd_f4
return_tab = ltd_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
READ TABLE ltd_return INTO lwa_return INDEX 1.
CHECK lwa_return-fieldval <> ''.
ASSIGN p_er_event_data->m_data->* TO
ls_f4-fieldname = p_e_fieldname.
ls_f4-row_id = p_es_row_no-row_id.
ls_f4-value = lwa_return-fieldval .
APPEND ls_f4 TO
DATA lwa_aspirante TYPE gty_aspirante_alv.
READ TABLE gtd_aspirante_alv INTO lwa_aspirante INDEX p_es_row_no-row_id.
READ TABLE gtd_dom_tratamiento INTO lwa_dominio
WITH KEY ddtext = lwa_return-fieldval.
IF sy-subrc = 0.
lwa_aspirante-trata = lwa_dominio-domvalue_l.
ELSE.
lwa_aspirante-trata = ''.
ENDIF.
UPDATE ztaspirante_10 SET trata = lwa_aspirante-trata
WHERE numas = lwa_aspirante-numas.
p_er_event_data->m_event_handled = 'X'.
ENDIF.
Exportal Excel - XML
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13092
http://wiki.sdn.sap.com/wiki/display/Snippets/XML+TAGS+simplifies+Excel+Download
1.En la transaccin STRANS crear un archivo llamado ZTEST_NP_XLS
- cambiar ExpandedColumnCount= numero de columnas a motrar.
- campos a mostrar
npatel
npatel
2009-01-01T22:27:09Z
11.8132
12660
19980
480
120
False
False
3
4
1
False
False
False
False
False
False
2.En el codigo F01
FORM exportar_excel_xml.
DATA: ls_xml TYPE string,
xml_table TYPE STANDARD TABLE OF string,
ls_path TYPE string,
lc_rpta TYPE c.
CALL TRANSFORMATION ztest_np_xls
SOURCE table = gtd_aspirante_alv
RESULT XML ls_xml.
APPEND ls_xml TO xml_table.
PERFORM obtener_ruta_guardar_archivo USING 'Lista de Aspirantes'
'.xls'
'XLS files (*.XLS)|*.XLS'
CHANGING ls_path
lc_rpta.
CHECK lc_rpta = 'T'.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = ls_path
filetype = 'ASC'
TABLES
data_tab = xml_table
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
http://wiki.sdn.sap.com/wiki/display/Snippets/XML+TAGS+simplifies+Excel+Download
1.En la transaccin STRANS crear un archivo llamado ZTEST_NP_XLS
- cambiar ExpandedColumnCount= numero de columnas a motrar.
- campos a mostrar
2.En el codigo F01
FORM exportar_excel_xml.
DATA: ls_xml TYPE string,
xml_table TYPE STANDARD TABLE OF string,
ls_path TYPE string,
lc_rpta TYPE c.
CALL TRANSFORMATION ztest_np_xls
SOURCE table = gtd_aspirante_alv
RESULT XML ls_xml.
APPEND ls_xml TO xml_table.
PERFORM obtener_ruta_guardar_archivo USING 'Lista de Aspirantes'
'.xls'
'XLS files (*.XLS)|*.XLS'
CHANGING ls_path
lc_rpta.
CHECK lc_rpta = 'T'.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = ls_path
filetype = 'ASC'
TABLES
data_tab = xml_table
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
Exporta excel OLE
http://saplab.org/2009/03/abap-to-excel/
http://saplab.org/wp-content/ZHCM_ABAP_TO_EXCEL.txt
http://www.richardsantos.net/2009/08/28/sap-export-alv-to-excel-file/
1.TOP
TYPE-POOLS ole2.
DATA: v_excel TYPE ole2_object.
2.F01
FORM exportar_xls.
DATA: v_wrkbkl TYPE ole2_object,
v_wrkbk TYPE ole2_object,
v_row TYPE i.
DATA: ls_path TYPE string,
lc_rpta TYPE c.
PERFORM obtener_ruta_guardar_archivo USING 'Lista de Aspirantes'
'xls'
CHANGING ls_path
lc_rpta.
CHECK lc_rpta = 'T'.
DATA lwa_aspirante_alv TYPE gty_aspirante_alv.
CREATE OBJECT v_excel 'EXCEL.APPLICATION'.
PERFORM manejar_error_excel.
SET PROPERTY OF v_excel 'Visible' = 1.
CALL METHOD OF v_excel 'Workbooks' = v_wrkbkl.
PERFORM manejar_error_excel.
CALL METHOD OF v_wrkbkl 'Add' = v_wrkbk.
PERFORM manejar_error_excel .
* Insertar cabecera
PERFORM insertar_datos_excel USING 1 1 1 'Num. Asp.'.
PERFORM insertar_datos_excel USING 1 2 1 'Ape. Paterno'.
PERFORM insertar_datos_excel USING 1 3 1 'Ape. Materno'.
PERFORM insertar_datos_excel USING 1 4 1 'Nombre'.
PERFORM insertar_datos_excel USING 1 5 1 'Estado'.
PERFORM insertar_datos_excel USING 1 6 1 'Fec. Nac.'.
PERFORM insertar_datos_excel USING 1 7 1 'Lugar. Nac.'.
PERFORM insertar_datos_excel USING 1 8 1 'Pais. Nac.'.
PERFORM insertar_datos_excel USING 1 9 1 'Est. Civ.'.
PERFORM insertar_datos_excel USING 1 10 1 'Posicion Per.'.
PERFORM insertar_datos_excel USING 1 11 1 'Division Per.'.
PERFORM insertar_datos_excel USING 1 12 1 'Grupo Per.'.
PERFORM insertar_datos_excel USING 1 13 1 'Fec. Reg'.
* Insertar detalle
LOOP AT gtd_aspirante_alv INTO lwa_aspirante_alv.
v_row = sy-tabix + 1.
PERFORM insertar_datos_excel USING v_row 1 0 lwa_aspirante_alv-numas.
PERFORM insertar_datos_excel USING v_row 2 0 lwa_aspirante_alv-appat.
PERFORM insertar_datos_excel USING v_row 3 0 lwa_aspirante_alv-apmat.
PERFORM insertar_datos_excel USING v_row 4 0 lwa_aspirante_alv-nombr.
PERFORM insertar_datos_excel USING v_row 5 0 lwa_aspirante_alv-estad.
PERFORM insertar_datos_excel USING v_row 6 0 lwa_aspirante_alv-fnaci.
PERFORM insertar_datos_excel USING v_row 7 0 lwa_aspirante_alv-lnaci.
PERFORM insertar_datos_excel USING v_row 8 0 lwa_aspirante_alv-pnaci.
PERFORM insertar_datos_excel USING v_row 9 0 lwa_aspirante_alv-estci.
PERFORM insertar_datos_excel USING v_row 10 0 lwa_aspirante_alv-poper.
PERFORM insertar_datos_excel USING v_row 11 0 lwa_aspirante_alv-diper.
PERFORM insertar_datos_excel USING v_row 12 0 lwa_aspirante_alv-grper.
PERFORM insertar_datos_excel USING v_row 13 0 lwa_aspirante_alv-fereg.
ENDLOOP.
CALL METHOD OF v_wrkbk 'SAVEAS'
EXPORTING
#1 = ls_path.
CALL METHOD OF v_wrkbk 'CLOSE'.
CALL METHOD OF v_excel 'QUIT'.
FREE OBJECT v_excel.
PERFORM manejar_error_excel.
ENDFORM. "exportar_xls
*&---------------------------------------------------------------------*
*& Form insertar_datos_excel
*&---------------------------------------------------------------------*
* PERFORM insertar_datos_excel USING rows columns boldfont valor
*----------------------------------------------------------------------*
* -->X text
* -->Y text
* -->Z text
* -->VAL text
*----------------------------------------------------------------------*
FORM insertar_datos_excel USING x y z val.
DATA: v_cell TYPE ole2_object,
v_font TYPE ole2_object.
CALL METHOD OF v_excel 'Cells' = v_cell
EXPORTING
#1 = x
#2 = y.
PERFORM manejar_error_excel.
SET PROPERTY OF v_cell 'Value' = val.
PERFORM manejar_error_excel .
GET PROPERTY OF v_cell 'Font' = v_font.
PERFORM manejar_error_excel.
SET PROPERTY OF v_font 'Bold' = z .
PERFORM manejar_error_excel.
ENDFORM. "insertar_datos_excel
*&---------------------------------------------------------------------*
*& Form manejar_error_excel
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM manejar_error_excel.
IF sy-subrc <> 0.
CALL METHOD OF v_excel 'QUIT'.
FREE OBJECT v_excel.
v_excel-handle = -1.
MESSAGE: 'No se pudieron exportar los datos.' TYPE 'E'.
EXIT.
ENDIF.
ENDFORM. "manejar_error_excel
http://saplab.org/wp-content/ZHCM_ABAP_TO_EXCEL.txt
http://www.richardsantos.net/2009/08/28/sap-export-alv-to-excel-file/
1.TOP
TYPE-POOLS ole2.
DATA: v_excel TYPE ole2_object.
2.F01
FORM exportar_xls.
DATA: v_wrkbkl TYPE ole2_object,
v_wrkbk TYPE ole2_object,
v_row TYPE i.
DATA: ls_path TYPE string,
lc_rpta TYPE c.
PERFORM obtener_ruta_guardar_archivo USING 'Lista de Aspirantes'
'xls'
CHANGING ls_path
lc_rpta.
CHECK lc_rpta = 'T'.
DATA lwa_aspirante_alv TYPE gty_aspirante_alv.
CREATE OBJECT v_excel 'EXCEL.APPLICATION'.
PERFORM manejar_error_excel.
SET PROPERTY OF v_excel 'Visible' = 1.
CALL METHOD OF v_excel 'Workbooks' = v_wrkbkl.
PERFORM manejar_error_excel.
CALL METHOD OF v_wrkbkl 'Add' = v_wrkbk.
PERFORM manejar_error_excel .
* Insertar cabecera
PERFORM insertar_datos_excel USING 1 1 1 'Num. Asp.'.
PERFORM insertar_datos_excel USING 1 2 1 'Ape. Paterno'.
PERFORM insertar_datos_excel USING 1 3 1 'Ape. Materno'.
PERFORM insertar_datos_excel USING 1 4 1 'Nombre'.
PERFORM insertar_datos_excel USING 1 5 1 'Estado'.
PERFORM insertar_datos_excel USING 1 6 1 'Fec. Nac.'.
PERFORM insertar_datos_excel USING 1 7 1 'Lugar. Nac.'.
PERFORM insertar_datos_excel USING 1 8 1 'Pais. Nac.'.
PERFORM insertar_datos_excel USING 1 9 1 'Est. Civ.'.
PERFORM insertar_datos_excel USING 1 10 1 'Posicion Per.'.
PERFORM insertar_datos_excel USING 1 11 1 'Division Per.'.
PERFORM insertar_datos_excel USING 1 12 1 'Grupo Per.'.
PERFORM insertar_datos_excel USING 1 13 1 'Fec. Reg'.
* Insertar detalle
LOOP AT gtd_aspirante_alv INTO lwa_aspirante_alv.
v_row = sy-tabix + 1.
PERFORM insertar_datos_excel USING v_row 1 0 lwa_aspirante_alv-numas.
PERFORM insertar_datos_excel USING v_row 2 0 lwa_aspirante_alv-appat.
PERFORM insertar_datos_excel USING v_row 3 0 lwa_aspirante_alv-apmat.
PERFORM insertar_datos_excel USING v_row 4 0 lwa_aspirante_alv-nombr.
PERFORM insertar_datos_excel USING v_row 5 0 lwa_aspirante_alv-estad.
PERFORM insertar_datos_excel USING v_row 6 0 lwa_aspirante_alv-fnaci.
PERFORM insertar_datos_excel USING v_row 7 0 lwa_aspirante_alv-lnaci.
PERFORM insertar_datos_excel USING v_row 8 0 lwa_aspirante_alv-pnaci.
PERFORM insertar_datos_excel USING v_row 9 0 lwa_aspirante_alv-estci.
PERFORM insertar_datos_excel USING v_row 10 0 lwa_aspirante_alv-poper.
PERFORM insertar_datos_excel USING v_row 11 0 lwa_aspirante_alv-diper.
PERFORM insertar_datos_excel USING v_row 12 0 lwa_aspirante_alv-grper.
PERFORM insertar_datos_excel USING v_row 13 0 lwa_aspirante_alv-fereg.
ENDLOOP.
CALL METHOD OF v_wrkbk 'SAVEAS'
EXPORTING
#1 = ls_path.
CALL METHOD OF v_wrkbk 'CLOSE'.
CALL METHOD OF v_excel 'QUIT'.
FREE OBJECT v_excel.
PERFORM manejar_error_excel.
ENDFORM. "exportar_xls
*&---------------------------------------------------------------------*
*& Form insertar_datos_excel
*&---------------------------------------------------------------------*
* PERFORM insertar_datos_excel USING rows columns boldfont valor
*----------------------------------------------------------------------*
* -->X text
* -->Y text
* -->Z text
* -->VAL text
*----------------------------------------------------------------------*
FORM insertar_datos_excel USING x y z val.
DATA: v_cell TYPE ole2_object,
v_font TYPE ole2_object.
CALL METHOD OF v_excel 'Cells' = v_cell
EXPORTING
#1 = x
#2 = y.
PERFORM manejar_error_excel.
SET PROPERTY OF v_cell 'Value' = val.
PERFORM manejar_error_excel .
GET PROPERTY OF v_cell 'Font' = v_font.
PERFORM manejar_error_excel.
SET PROPERTY OF v_font 'Bold' = z .
PERFORM manejar_error_excel.
ENDFORM. "insertar_datos_excel
*&---------------------------------------------------------------------*
*& Form manejar_error_excel
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM manejar_error_excel.
IF sy-subrc <> 0.
CALL METHOD OF v_excel 'QUIT'.
FREE OBJECT v_excel.
v_excel-handle = -1.
MESSAGE: 'No se pudieron exportar los datos.' TYPE 'E'.
EXIT.
ENDIF.
ENDFORM. "manejar_error_excel
Agregar icono a ALV
1.TOP
Agregar campo a icon(30), estructura alv.
INCLUDE.
2.construir_catalogo
PERFORM llenar_fieldcat USING 'ICON' 'GTD_ASPIRANTE_ALV' '' 'X'
'' text-r03 text-r04 '' ''
'11' CHANGING po_gtd_fieldcat.
3.Llenar_fieldcat
IF pi_campo = 'ICON'.
lwa_fieldcat-icon = 'X'.
ENDIF.
4.cargar_data
* cargar icono dependiendo del estado del aspirante
CASE-estad.
WHEN 'Registrado'.
-icon = icon_checked.
WHEN 'Aprobado'.
-icon = icon_positive.
WHEN 'Desaprobado'.
-icon = icon_negative.
WHEN 'Cargado'.
-icon = icon_complete.
ENDCASE.
6.actualiazar_tabla_alv
CASE lwa_aspirante_alv-estad.
WHEN 'Registrado'.
lwa_aspirante_alv-icon = icon_checked.
WHEN 'Aprobado'.
lwa_aspirante_alv-icon = icon_positive.
WHEN 'Desaprobado'.
lwa_aspirante_alv-icon = icon_negative.
WHEN 'Cargado'.
lwa_aspirante_alv-icon = icon_complete.
ENDCASE.
Agregar campo a icon(30), estructura alv.
INCLUDE
2.construir_catalogo
PERFORM llenar_fieldcat USING 'ICON' 'GTD_ASPIRANTE_ALV' '' 'X'
'' text-r03 text-r04 '' ''
'11' CHANGING po_gtd_fieldcat.
3.Llenar_fieldcat
IF pi_campo = 'ICON'.
lwa_fieldcat-icon = 'X'.
ENDIF.
4.cargar_data
* cargar icono dependiendo del estado del aspirante
CASE
WHEN 'Registrado'.
WHEN 'Aprobado'.
WHEN 'Desaprobado'.
WHEN 'Cargado'.
ENDCASE.
6.actualiazar_tabla_alv
CASE lwa_aspirante_alv-estad.
WHEN 'Registrado'.
lwa_aspirante_alv-icon = icon_checked.
WHEN 'Aprobado'.
lwa_aspirante_alv-icon = icon_positive.
WHEN 'Desaprobado'.
lwa_aspirante_alv-icon = icon_negative.
WHEN 'Cargado'.
lwa_aspirante_alv-icon = icon_complete.
ENDCASE.
Field symbols assign
PERFORM existe_dominio USING 'gtd_dom_tratamiento'
lwa_aspirante-trata
CHANGING p_lc_rpta.
ls_error = 'No existe el tratamiento ingresado.'.
CHECK p_lc_rpta = 'T'.
FORM existe_dominio USING ps_tabla TYPE c
pa_clave TYPE any
CHANGING pc_rpta TYPE c.
FIELD-SYMBOLS: LIKE gtd_dom_tratamiento.
ASSIGN (ps_tabla) TO.
READ TABLE TRANSPORTING NO FIELDS
WITH KEY domvalue_l = pa_clave.
IF sy-subrc EQ 0.
pc_rpta = 'T'.
ELSE.
pc_rpta = 'F'.
ENDIF.
ENDFORM. "funcion
lwa_aspirante-trata
CHANGING p_lc_rpta.
ls_error = 'No existe el tratamiento ingresado.'.
CHECK p_lc_rpta = 'T'.
FORM existe_dominio USING ps_tabla TYPE c
pa_clave TYPE any
CHANGING pc_rpta TYPE c.
FIELD-SYMBOLS:
ASSIGN (ps_tabla) TO
READ TABLE
WITH KEY domvalue_l = pa_clave.
IF sy-subrc EQ 0.
pc_rpta = 'T'.
ELSE.
pc_rpta = 'F'.
ENDIF.
ENDFORM. "funcion
Convertir fecha en letras
FORM fecha_en_letras CHANGING p_ls_fecha.
DATA: mes LENGTH 2 TYPE c,
anio LENGTH 4 TYPE c,
dia LENGTH 2 TYPE c,
mes_letra LENGTH 50 TYPE c.
anio = gwa_ztaspirante_10-fereg(4).
mes = gwa_ztaspirante_10-fereg+4(2).
dia = gwa_ztaspirante_10-fereg+6(2).
CASE mes.
WHEN '01'.
mes_letra = 'Enero'.
WHEN '02'.
mes_letra = 'Febrero'.
WHEN '03'.
mes_letra = 'Marzo'.
WHEN '04'.
mes_letra = 'Abril'.
WHEN '05'.
mes_letra = 'Mayo'.
WHEN '06'.
mes_letra = 'Junio'.
WHEN '07'.
mes_letra = 'Julio'.
WHEN '08'.
mes_letra = 'Agosto'.
WHEN '09'.
mes_letra = 'Septiembre'.
WHEN '10'.
mes_letra = 'Octubre'.
WHEN '11'.
mes_letra = 'Noviembre'.
WHEN '12'.
mes_letra = 'Diciembre'.
ENDCASE.
CONCATENATE dia 'de' mes_letra 'del' anio INTO p_ls_fecha SEPARATED BY ' '.
ENDFORM. " fecha_en_letras
DATA: mes LENGTH 2 TYPE c,
anio LENGTH 4 TYPE c,
dia LENGTH 2 TYPE c,
mes_letra LENGTH 50 TYPE c.
anio = gwa_ztaspirante_10-fereg(4).
mes = gwa_ztaspirante_10-fereg+4(2).
dia = gwa_ztaspirante_10-fereg+6(2).
CASE mes.
WHEN '01'.
mes_letra = 'Enero'.
WHEN '02'.
mes_letra = 'Febrero'.
WHEN '03'.
mes_letra = 'Marzo'.
WHEN '04'.
mes_letra = 'Abril'.
WHEN '05'.
mes_letra = 'Mayo'.
WHEN '06'.
mes_letra = 'Junio'.
WHEN '07'.
mes_letra = 'Julio'.
WHEN '08'.
mes_letra = 'Agosto'.
WHEN '09'.
mes_letra = 'Septiembre'.
WHEN '10'.
mes_letra = 'Octubre'.
WHEN '11'.
mes_letra = 'Noviembre'.
WHEN '12'.
mes_letra = 'Diciembre'.
ENDCASE.
CONCATENATE dia 'de' mes_letra 'del' anio INTO p_ls_fecha SEPARATED BY ' '.
ENDFORM. " fecha_en_letras
Cargar tabla desde archivo II
FORM cargar_tabla_desde_archivo
USING p_ls_path TYPE string
CHANGING p_ltd_aspirante TYPE STANDARD TABLE
p_lc_rpta TYPE c.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_ls_path
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = p_ltd_aspirante
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
p_lc_rpta = 'F'.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
p_lc_rpta = 'T'.
ENDIF.
ENDFORM.
USING p_ls_path TYPE string
CHANGING p_ltd_aspirante TYPE STANDARD TABLE
p_lc_rpta TYPE c.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_ls_path
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = p_ltd_aspirante
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
p_lc_rpta = 'F'.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
p_lc_rpta = 'T'.
ENDIF.
ENDFORM.
Mostrar ventana archivo
FORM obtener_ruta_abrir_archivo CHANGING p_ls_path TYPE string
p_lc_rpta TYPE c.
DATA: li_subrc LIKE sy-subrc,
ltd_filetable TYPE filetable,
lwa_filetable TYPE file_table,
li_user_action TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Seleccionar archivo de texto'
default_filename = '*.txt'
multiselection = ' '
CHANGING
file_table = ltd_filetable
rc = li_subrc
user_action = li_user_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
p_lc_rpta = 'F'.
ELSE.
IF li_user_action = 0.
READ TABLE ltd_filetable INTO lwa_filetable INDEX 1.
p_ls_path = lwa_filetable-filename.
p_lc_rpta = 'T'.
ELSE.
MESSAGE w184 WITH 'No se selecciono un archivo'.
p_lc_rpta = 'F'.
ENDIF.
ENDIF.
ENDFORM. " obtener_ruta_abrir_archivo
p_lc_rpta TYPE c.
DATA: li_subrc LIKE sy-subrc,
ltd_filetable TYPE filetable,
lwa_filetable TYPE file_table,
li_user_action TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Seleccionar archivo de texto'
default_filename = '*.txt'
multiselection = ' '
CHANGING
file_table = ltd_filetable
rc = li_subrc
user_action = li_user_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
p_lc_rpta = 'F'.
ELSE.
IF li_user_action = 0.
READ TABLE ltd_filetable INTO lwa_filetable INDEX 1.
p_ls_path = lwa_filetable-filename.
p_lc_rpta = 'T'.
ELSE.
MESSAGE w184 WITH 'No se selecciono un archivo'.
p_lc_rpta = 'F'.
ENDIF.
ENDIF.
ENDFORM. " obtener_ruta_abrir_archivo
Mostrar ventana guardar archivo
1.llamda a la funcion
PERFORM obtener_ruta_guardar_archivo USING 'Lista de Aspirantes'
'.xls'
'XLS files (*.XLS)|*.XLS'
CHANGING ls_path
lc_rpta.
CHECK lc_rpta = 'T'.
2.funcion
FORM obtener_ruta_guardar_archivo USING ps_titulo TYPE string
ps_extension TYPE string
ps_filtro TYPE string
CHANGING p_ls_path TYPE string
p_lc_rpta TYPE c.
DATA: ls_filename TYPE string,
ls_path TYPE string,
li_user_action TYPE i.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = ps_titulo
default_extension = ps_extension
file_filter = ps_filtro
* default_file_name = 'hoja_vida'
initial_directory = 'C:'
prompt_on_overwrite = 'X'
CHANGING
filename = ls_filename
path = ls_path
fullpath = p_ls_path
user_action = li_user_action
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
p_lc_rpta = 'F'.
ELSE.
CASE li_user_action.
WHEN 0.
p_lc_rpta = 'T'.
WHEN OTHERS.
MESSAGE w184 WITH 'Usuario cancelo la accion.'.
p_lc_rpta = 'F'.
ENDCASE.
ENDIF.
ENDFORM. " obtener_ruta_guardar_archivo
PERFORM obtener_ruta_guardar_archivo USING 'Lista de Aspirantes'
'.xls'
'XLS files (*.XLS)|*.XLS'
CHANGING ls_path
lc_rpta.
CHECK lc_rpta = 'T'.
2.funcion
FORM obtener_ruta_guardar_archivo USING ps_titulo TYPE string
ps_extension TYPE string
ps_filtro TYPE string
CHANGING p_ls_path TYPE string
p_lc_rpta TYPE c.
DATA: ls_filename TYPE string,
ls_path TYPE string,
li_user_action TYPE i.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = ps_titulo
default_extension = ps_extension
file_filter = ps_filtro
* default_file_name = 'hoja_vida'
initial_directory = 'C:'
prompt_on_overwrite = 'X'
CHANGING
filename = ls_filename
path = ls_path
fullpath = p_ls_path
user_action = li_user_action
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
p_lc_rpta = 'F'.
ELSE.
CASE li_user_action.
WHEN 0.
p_lc_rpta = 'T'.
WHEN OTHERS.
MESSAGE w184 WITH 'Usuario cancelo la accion.'.
p_lc_rpta = 'F'.
ENDCASE.
ENDIF.
ENDFORM. " obtener_ruta_guardar_archivo
Manejar mensajes
REPORT zoperador_10 MESSAGE-ID 00.
REPORT zoperador_10 MESSAGE-ID sabapdocu.
Enviar directamente MESSAGE: 'No se pudieron exportar los datos.' TYPE 'E'.
raise message with,
message e type I.
PARA WONG
REPORT YREPROCESAR_RC message-id zmm.
REPORT zoperador_10 MESSAGE-ID sabapdocu.
Enviar directamente MESSAGE: 'No se pudieron exportar los datos.' TYPE 'E'.
raise message with,
message e type I.
PARA WONG
REPORT YREPROCESAR_RC message-id zmm.
Convertir smartform a pdf
FORM convertir_smartform_pdf .
DATA: lf_fm_name TYPE rs38l_fnam, "Nombre smartforms Generado
lwa_outopt TYPE ssfcompop, "propiedades de visualizac
lwa_ctrlop TYPE ssfctrlop, "Controles
t_otfdata TYPE ssfcrescl,
t_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE,
t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,
li_filesize TYPE i,
ls_path TYPE string,
lc_rpta TYPE c,
li_bin_filesize TYPE i.
DATA: ls_fecha TYPE string,
ls_error TYPE string.
PERFORM fecha_en_letras CHANGING ls_fecha.
* Opciones de control
lwa_ctrlop-no_dialog = 'X'.
lwa_ctrlop-getotf = 'X'.
* Opciones de salida
lwa_outopt-tdnoprev = 'X'.
lwa_outopt-xdf2outdev = 'LP01'.
lwa_outopt-tddest = 'LP01'. "Impresora
lwa_outopt-tdimmed = 'X'. "Imprimir Inmediatamente
lwa_outopt-tddelete = 'X'. "Borrar despues de Impresion
lwa_outopt-tdnewid = 'X'. "Crear una nueva orden spool
* Cargar smartform
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZSF_HOJAVIDA_10'
IMPORTING
fm_name = lf_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Mostrar smatrform
TRY .
ls_error = 'No se pudo cargar la hoja de vida.'.
CALL FUNCTION lf_fm_name
EXPORTING
control_parameters = lwa_ctrlop
output_options = lwa_outopt
user_settings = ' '
ps_user = sy-uname
ps_fecha = ls_fecha
IMPORTING
job_output_info = t_otfdata
TABLES
ptd_ztaspirante_10 = gtd_cabecera_asp
ptd_educacion = gtd_educacion
ptd_titulos = gtd_titulos
ptd_laboral = gtd_laboral
ptd_conocimientos = gtd_conocimientos
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CASE sy-subrc .
WHEN 1.
MESSAGE e888 WITH ls_error 'Error de formato.'.
RETURN.
WHEN 2.
MESSAGE e888 WITH ls_error 'Error interno.'.
RETURN.
WHEN 3.
MESSAGE e888 WITH ls_error 'Error en el envio de datos.'.
RETURN.
WHEN 4.
MESSAGE e888 WITH ls_error 'Usuario cancelo la accion.'.
RETURN.
WHEN 5.
MESSAGE e888 WITH ls_error 'Error no contemplado.'.
RETURN.
ENDCASE.
CATCH cx_sy_dyn_call_illegal_type.
MESSAGE e888 WITH ls_error 'Excepcion lanzada'.
RETURN.
ENDTRY.
t_otf[] = t_otfdata-otfdata[].
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
max_linewidth = 132
IMPORTING
bin_filesize = li_bin_filesize
TABLES
otf = t_otf
lines = t_pdf_tab
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Mostrar dialogo guadar archivo
PERFORM obtener_ruta_guardar_archivo CHANGING ls_path
lc_rpta.
CHECK lc_rpta = 'T'.
* Descargar archivo
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = li_bin_filesize
filename = ls_path
filetype = 'BIN'
IMPORTING
filelength = li_filesize
TABLES
data_tab = t_pdf_tab
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
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
MESSAGE s184 WITH 'Descarga Satisfactoria.'.
ENDIF.
ENDFORM.
DATA: lf_fm_name TYPE rs38l_fnam, "Nombre smartforms Generado
lwa_outopt TYPE ssfcompop, "propiedades de visualizac
lwa_ctrlop TYPE ssfctrlop, "Controles
t_otfdata TYPE ssfcrescl,
t_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE,
t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,
li_filesize TYPE i,
ls_path TYPE string,
lc_rpta TYPE c,
li_bin_filesize TYPE i.
DATA: ls_fecha TYPE string,
ls_error TYPE string.
PERFORM fecha_en_letras CHANGING ls_fecha.
* Opciones de control
lwa_ctrlop-no_dialog = 'X'.
lwa_ctrlop-getotf = 'X'.
* Opciones de salida
lwa_outopt-tdnoprev = 'X'.
lwa_outopt-xdf2outdev = 'LP01'.
lwa_outopt-tddest = 'LP01'. "Impresora
lwa_outopt-tdimmed = 'X'. "Imprimir Inmediatamente
lwa_outopt-tddelete = 'X'. "Borrar despues de Impresion
lwa_outopt-tdnewid = 'X'. "Crear una nueva orden spool
* Cargar smartform
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZSF_HOJAVIDA_10'
IMPORTING
fm_name = lf_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Mostrar smatrform
TRY .
ls_error = 'No se pudo cargar la hoja de vida.'.
CALL FUNCTION lf_fm_name
EXPORTING
control_parameters = lwa_ctrlop
output_options = lwa_outopt
user_settings = ' '
ps_user = sy-uname
ps_fecha = ls_fecha
IMPORTING
job_output_info = t_otfdata
TABLES
ptd_ztaspirante_10 = gtd_cabecera_asp
ptd_educacion = gtd_educacion
ptd_titulos = gtd_titulos
ptd_laboral = gtd_laboral
ptd_conocimientos = gtd_conocimientos
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CASE sy-subrc .
WHEN 1.
MESSAGE e888 WITH ls_error 'Error de formato.'.
RETURN.
WHEN 2.
MESSAGE e888 WITH ls_error 'Error interno.'.
RETURN.
WHEN 3.
MESSAGE e888 WITH ls_error 'Error en el envio de datos.'.
RETURN.
WHEN 4.
MESSAGE e888 WITH ls_error 'Usuario cancelo la accion.'.
RETURN.
WHEN 5.
MESSAGE e888 WITH ls_error 'Error no contemplado.'.
RETURN.
ENDCASE.
CATCH cx_sy_dyn_call_illegal_type.
MESSAGE e888 WITH ls_error 'Excepcion lanzada'.
RETURN.
ENDTRY.
t_otf[] = t_otfdata-otfdata[].
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
max_linewidth = 132
IMPORTING
bin_filesize = li_bin_filesize
TABLES
otf = t_otf
lines = t_pdf_tab
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Mostrar dialogo guadar archivo
PERFORM obtener_ruta_guardar_archivo CHANGING ls_path
lc_rpta.
CHECK lc_rpta = 'T'.
* Descargar archivo
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = li_bin_filesize
filename = ls_path
filetype = 'BIN'
IMPORTING
filelength = li_filesize
TABLES
data_tab = t_pdf_tab
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
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
MESSAGE s184 WITH 'Descarga Satisfactoria.'.
ENDIF.
ENDFORM.
Crear smartform
Crear el smartform
cargar los datos en tablas internas para enviarlas al SF.
form llamar_smartform .
data: lf_formname type tdsfname, "Nombre Smartforms
lf_fm_name type rs38l_fnam, "Nombre smartforms Generado
p_output_options type ssfcompop, "propiedades de visualizac
p_control_parameters type ssfctrlop. "Controles
lf_formname = 'ZSF_HOJAVIDA_10'.
* Propiedades de impresion:
p_output_options-xdf2outdev = 'LP01'.
p_output_options-tddest = 'LP01'. "Impresora
p_output_options-tdimmed = 'X'. "Imprimir Inmediatamente
p_output_options-tddelete = 'X'. "Borrar despues de Impresion
p_output_options-tdnewid = 'X'. "Crear una nueva orden spool
* p_output_options-tdcopies = '12'. "Nro de Copias de impresion
p_control_parameters-preview = 'X'. "Vista de previsualizacion
p_control_parameters-device = 'PRINTER'.
p_control_parameters-no_dialog = 'X'. "Sin Cuadro de dialogo
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = lf_formname
importing
fm_name = lf_fm_name
exceptions
no_form = 1
no_function_module = 2
others = 3.
case sy-subrc .
when 1.
message i398 with 'No se pudo cargar el formulario.'.
return.
when 2.
message i398 with 'No se pudo ejecutar el modulo de funcion.'.
return.
when 3.
message i398 with 'No se pudo cargar la hoja de vida. Error no especificado.'.
return.
endcase.
condense lf_fm_name.
* Obtener fecha en letras
data ls_fecha type string.
perform fecha_en_letras changing ls_fecha.
* Funcion que invoca al smartform
try .
call function lf_fm_name
exporting
control_parameters = p_control_parameters
output_options = p_output_options
user_settings = ' '
ps_user = sy-uname
ps_fecha = ls_fecha
tables
ptd_ztaspirante_10 = gtd_cabecera_asp
ptd_educacion = gtd_educacion
ptd_titulos = gtd_titulos
ptd_laboral = gtd_laboral
ptd_conocimientos = gtd_conocimientos
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
others = 5.
case sy-subrc .
when 1.
message i398 with 'No se pudo cargar la hoja de vida. Error de formato.'.
when 2.
message i398 with 'No se pudo cargar la hoja de vida. Error interno.'.
when 3.
message i398 with 'No se pudo cargar la hoja de vida. Error en el envio de datos.'.
when 4.
message i398 with 'No se pudo cargar la hoja de vida. Usuario cancelo la accion.'.
when 5.
message i398 with 'No se pudo cargar la hoja de vida. Error no contemplado.'.
endcase.
catch cx_sy_dyn_call_illegal_type.
message i398 with 'No se pudo cargar la hoja de vida. Excepcion ejecutada'.
return.
endtry.
endform. " llamar_hoja_vida
cargar los datos en tablas internas para enviarlas al SF.
form llamar_smartform .
data: lf_formname type tdsfname, "Nombre Smartforms
lf_fm_name type rs38l_fnam, "Nombre smartforms Generado
p_output_options type ssfcompop, "propiedades de visualizac
p_control_parameters type ssfctrlop. "Controles
lf_formname = 'ZSF_HOJAVIDA_10'.
* Propiedades de impresion:
p_output_options-xdf2outdev = 'LP01'.
p_output_options-tddest = 'LP01'. "Impresora
p_output_options-tdimmed = 'X'. "Imprimir Inmediatamente
p_output_options-tddelete = 'X'. "Borrar despues de Impresion
p_output_options-tdnewid = 'X'. "Crear una nueva orden spool
* p_output_options-tdcopies = '12'. "Nro de Copias de impresion
p_control_parameters-preview = 'X'. "Vista de previsualizacion
p_control_parameters-device = 'PRINTER'.
p_control_parameters-no_dialog = 'X'. "Sin Cuadro de dialogo
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = lf_formname
importing
fm_name = lf_fm_name
exceptions
no_form = 1
no_function_module = 2
others = 3.
case sy-subrc .
when 1.
message i398 with 'No se pudo cargar el formulario.'.
return.
when 2.
message i398 with 'No se pudo ejecutar el modulo de funcion.'.
return.
when 3.
message i398 with 'No se pudo cargar la hoja de vida. Error no especificado.'.
return.
endcase.
condense lf_fm_name.
* Obtener fecha en letras
data ls_fecha type string.
perform fecha_en_letras changing ls_fecha.
* Funcion que invoca al smartform
try .
call function lf_fm_name
exporting
control_parameters = p_control_parameters
output_options = p_output_options
user_settings = ' '
ps_user = sy-uname
ps_fecha = ls_fecha
tables
ptd_ztaspirante_10 = gtd_cabecera_asp
ptd_educacion = gtd_educacion
ptd_titulos = gtd_titulos
ptd_laboral = gtd_laboral
ptd_conocimientos = gtd_conocimientos
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
others = 5.
case sy-subrc .
when 1.
message i398 with 'No se pudo cargar la hoja de vida. Error de formato.'.
when 2.
message i398 with 'No se pudo cargar la hoja de vida. Error interno.'.
when 3.
message i398 with 'No se pudo cargar la hoja de vida. Error en el envio de datos.'.
when 4.
message i398 with 'No se pudo cargar la hoja de vida. Usuario cancelo la accion.'.
when 5.
message i398 with 'No se pudo cargar la hoja de vida. Error no contemplado.'.
endcase.
catch cx_sy_dyn_call_illegal_type.
message i398 with 'No se pudo cargar la hoja de vida. Excepcion ejecutada'.
return.
endtry.
endform. " llamar_hoja_vida
1.Alv FUNCIONES (TOP_OF_Page) Impresion BATCH
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = ls_repid
i_structure_name = 'GTD_AUFK_AFPO'
i_callback_pf_status_set = 'SET_STATUS'
i_callback_user_command = 'USER_COMMAND_000'
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = gwa_layout
it_fieldcat = gtd_fieldcat[]
TABLES
t_outtab = gtd_aufk_afpo
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*---------------------------------------------------------------------*
* FORM top_of_page *
*---------------------------------------------------------------------*
* Utilizado en el proceso en batch
*---------------------------------------------------------------------*
FORM top_of_page.
DATA: ls_text TYPE string,
ls_date(10) TYPE c,
ls_hora(10) TYPE c,
ls_util TYPE string.
* Titulo y subtitulo
ls_text = text-c01.
WRITE: 30 ls_text.
IF p_test EQ 'X'.
ls_text = text-c02.
ELSE.
ls_text = text-c03.
ENDIF.
WRITE /45 ls_text.
* Fecha
WRITE p_budat TO ls_date.
CONCATENATE text-c04 ls_date INTO ls_text SEPARATED BY space.
WRITE: / ls_text.
* Usuario
ls_util = sy-uname.
CONCATENATE text-c05 ls_util INTO ls_text SEPARATED BY space.
WRITE: 80 ls_text.
* Año y periodo
CONCATENATE p_gjahr '/' p_perio INTO ls_util.
CONCATENATE text-c06 ls_util INTO ls_text SEPARATED BY space.
WRITE / ls_text.
* Hora
WRITE: sy-datum TO ls_date,
sy-uzeit TO ls_hora.
CONCATENATE ls_date '/' ls_hora INTO ls_util.
CONCATENATE text-c07 ls_util INTO ls_text SEPARATED BY space.
WRITE 80 ls_text.
ENDFORM.
EXPORTING
i_callback_program = ls_repid
i_structure_name = 'GTD_AUFK_AFPO'
i_callback_pf_status_set = 'SET_STATUS'
i_callback_user_command = 'USER_COMMAND_000'
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = gwa_layout
it_fieldcat = gtd_fieldcat[]
TABLES
t_outtab = gtd_aufk_afpo
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*---------------------------------------------------------------------*
* FORM top_of_page *
*---------------------------------------------------------------------*
* Utilizado en el proceso en batch
*---------------------------------------------------------------------*
FORM top_of_page.
DATA: ls_text TYPE string,
ls_date(10) TYPE c,
ls_hora(10) TYPE c,
ls_util TYPE string.
* Titulo y subtitulo
ls_text = text-c01.
WRITE: 30 ls_text.
IF p_test EQ 'X'.
ls_text = text-c02.
ELSE.
ls_text = text-c03.
ENDIF.
WRITE /45 ls_text.
* Fecha
WRITE p_budat TO ls_date.
CONCATENATE text-c04 ls_date INTO ls_text SEPARATED BY space.
WRITE: / ls_text.
* Usuario
ls_util = sy-uname.
CONCATENATE text-c05 ls_util INTO ls_text SEPARATED BY space.
WRITE: 80 ls_text.
* Año y periodo
CONCATENATE p_gjahr '/' p_perio INTO ls_util.
CONCATENATE text-c06 ls_util INTO ls_text SEPARATED BY space.
WRITE / ls_text.
* Hora
WRITE: sy-datum TO ls_date,
sy-uzeit TO ls_hora.
CONCATENATE ls_date '/' ls_hora INTO ls_util.
CONCATENATE text-c07 ls_util INTO ls_text SEPARATED BY space.
WRITE 80 ls_text.
ENDFORM.
ALV FUNCIONES (TOP_OF_Page_HTML) Impresion pantalla
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = ls_repid
i_structure_name = 'GTD_AUFK_AFPO'
i_callback_pf_status_set = 'SET_STATUS'
i_callback_user_command = 'USER_COMMAND_000'
i_callback_html_top_of_page = 'TOP_OF_PAGE_HTML'
is_layout = gwa_layout
it_fieldcat = gtd_fieldcat[]
TABLES
t_outtab = gtd_aufk_afpo
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno.
ENDIF.
*---------------------------------------------------------------------*
* FORM top_of_page_HTML *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> R_TOP *
*---------------------------------------------------------------------*
FORM top_of_page_html USING r_top TYPE REF TO cl_dd_document.
DATA: s_tab TYPE sdydo_text_table,
c_area TYPE REF TO cl_dd_area,
ls_text TYPE sdydo_text_element.
CALL METHOD r_top->initialize_document.
* titulo y subtitulo
CALL METHOD r_top->add_gap
EXPORTING
width = 60.
ls_text = text-c01.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>large
sap_emphasis = cl_dd_document=>strong.
CALL METHOD r_top->new_line.
IF p_test EQ 'X'.
ls_text = text-c02.
ELSE.
ls_text = text-c03.
ENDIF.
CALL METHOD r_top->add_gap
EXPORTING
width = 90.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>large
sap_emphasis = cl_dd_document=>strong.
CALL METHOD r_top->new_line.
*Fecha
DATA: ls_date(10) TYPE c,
ls_util TYPE string.
WRITE p_budat TO ls_date.
CONCATENATE text-c04 ls_date INTO ls_text SEPARATED BY space.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>medium.
* Usuario
ls_util = sy-uname.
CALL METHOD r_top->add_gap
EXPORTING
width = 160.
CONCATENATE text-c05 ls_util INTO ls_text SEPARATED BY space.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>medium.
CALL METHOD r_top->new_line.
CONCATENATE p_gjahr '/' p_perio INTO ls_util.
CONCATENATE text-c06 ls_util INTO ls_text SEPARATED BY space.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>medium.
DATA: ls_hora(10) TYPE c.
WRITE: sy-datum TO ls_date,
sy-uzeit TO ls_hora.
CONCATENATE ls_date '/' ls_hora INTO ls_util.
CALL METHOD r_top->add_gap
EXPORTING
width = 157.
CONCATENATE text-c07 ls_util INTO ls_text SEPARATED BY space.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>medium.
ENDFORM.
EXPORTING
i_callback_program = ls_repid
i_structure_name = 'GTD_AUFK_AFPO'
i_callback_pf_status_set = 'SET_STATUS'
i_callback_user_command = 'USER_COMMAND_000'
i_callback_html_top_of_page = 'TOP_OF_PAGE_HTML'
is_layout = gwa_layout
it_fieldcat = gtd_fieldcat[]
TABLES
t_outtab = gtd_aufk_afpo
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno.
ENDIF.
*---------------------------------------------------------------------*
* FORM top_of_page_HTML *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> R_TOP *
*---------------------------------------------------------------------*
FORM top_of_page_html USING r_top TYPE REF TO cl_dd_document.
DATA: s_tab TYPE sdydo_text_table,
c_area TYPE REF TO cl_dd_area,
ls_text TYPE sdydo_text_element.
CALL METHOD r_top->initialize_document.
* titulo y subtitulo
CALL METHOD r_top->add_gap
EXPORTING
width = 60.
ls_text = text-c01.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>large
sap_emphasis = cl_dd_document=>strong.
CALL METHOD r_top->new_line.
IF p_test EQ 'X'.
ls_text = text-c02.
ELSE.
ls_text = text-c03.
ENDIF.
CALL METHOD r_top->add_gap
EXPORTING
width = 90.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>large
sap_emphasis = cl_dd_document=>strong.
CALL METHOD r_top->new_line.
*Fecha
DATA: ls_date(10) TYPE c,
ls_util TYPE string.
WRITE p_budat TO ls_date.
CONCATENATE text-c04 ls_date INTO ls_text SEPARATED BY space.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>medium.
* Usuario
ls_util = sy-uname.
CALL METHOD r_top->add_gap
EXPORTING
width = 160.
CONCATENATE text-c05 ls_util INTO ls_text SEPARATED BY space.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>medium.
CALL METHOD r_top->new_line.
CONCATENATE p_gjahr '/' p_perio INTO ls_util.
CONCATENATE text-c06 ls_util INTO ls_text SEPARATED BY space.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>medium.
DATA: ls_hora(10) TYPE c.
WRITE: sy-datum TO ls_date,
sy-uzeit TO ls_hora.
CONCATENATE ls_date '/' ls_hora INTO ls_util.
CALL METHOD r_top->add_gap
EXPORTING
width = 157.
CONCATENATE text-c07 ls_util INTO ls_text SEPARATED BY space.
CALL METHOD r_top->add_text
EXPORTING
text = ls_text
sap_fontsize = cl_dd_document=>medium.
ENDFORM.
ALV con funciones
Añadir boton
http://www.sap-basis-abap.com/abap/add-button-to-alv-toolbar-with-reuse-alv-list-display.htm
TOP
Añadir campo flag a la estrucdtura definida para el uso de la tabla.
Type-pools: slis.
DATA: gtd_fieldcat TYPE slis_t_fieldcat_alv,
gwa_layout TYPE slis_layout_alv.
MAI
llenar los datos en la tabla interna.
START-OF-SELECTION.
PERFORM cargar_data.
PERFORM construir_alv.
F02
*----------------------------------------------------------------------*
***INCLUDE ZTEMP_CJ_F02 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form construir_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM construir_alv. PERFORM construir_catalogo. PERFORM construir_layout . PERFORM mostrar_alv. ENDFORM. " construir_alv *&---------------------------------------------------------------------* *& Form construir_catalogo *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM construir_catalogo. DATA: li_idx TYPE i VALUE 0. ADD 1 TO li_idx. PERFORM llenar_fieldcat USING li_idx 'GTS_AUFK_AFPO' 'GJAHR' '' 'Año' '7' '' ''. ADD 1 TO li_idx. PERFORM llenar_fieldcat USING li_idx 'GTS_AUFK_AFPO' 'GJAHR1' '' 'Ejercicio Doc. Contable' '7' '' ''. ADD 1 TO li_idx. PERFORM llenar_fieldcat USING li_idx 'GTS_AUFK_AFPO' 'MENSA' '' 'Mensaje' '7' '' ''. ENDFORM. " construir_catalogo *&---------------------------------------------------------------------* *& Form mostrar_alv *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM mostrar_alv. DATA: ls_repid TYPE sy-repid. ls_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = ls_repid i_structure_name = 'GTS_AUFK_AFPO' i_callback_pf_status_set = 'SET_STATUS' i_callback_user_command = 'USER_COMMAND_000' i_callback_html_top_of_page = 'TOP_OF_PAGE_SPLIT' is_layout = gwa_layout it_fieldcat = gtd_fieldcat[] TABLES t_outtab = gts_aufk_afpo EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " mostrar_alv
*&---------------------------------------------------------------------*
*& Form construir_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM construir_layout. CLEAR gwa_layout. gwa_layout-zebra = 'X'. gwa_layout-edit_mode = space. gwa_layout-box_fieldname = 'FLAG'. ENDFORM. " construir_layout *&---------------------------------------------------------------------* *& Form llenar_fieldcat *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_LI_IDX text
* -->P_0028 text
* -->P_0029 text
* -->P_0030 text
* -->P_0031 text
* -->P_0032 text
* -->P_0033 text
* -->P_0034 text
*----------------------------------------------------------------------*
FORM llenar_fieldcat USING pi_pos LIKE sy-cucol
pi_tabla TYPE slis_tabname
pi_campo TYPE slis_fieldname
pi_key TYPE c
pi_text TYPE dd03p-scrtext_l
pi_len TYPE dd03p-outputlen
pi_ctabla TYPE slis_tabname
pi_ccampo TYPE slis_fieldname.
DATA lwa_fieldcat TYPE slis_fieldcat_alv.
lwa_fieldcat-col_pos = pi_pos.
lwa_fieldcat-tabname = pi_tabla.
lwa_fieldcat-fieldname = pi_campo.
lwa_fieldcat-key = pi_key.
lwa_fieldcat-seltext_l = pi_text.
lwa_fieldcat-outputlen = pi_len.
lwa_fieldcat-ctabname = pi_ctabla.
lwa_fieldcat-cfieldname = pi_ccampo.
APPEND lwa_fieldcat TO gtd_fieldcat.
CLEAR lwa_fieldcat.
ENDFORM. " llenar_fieldcat
*---------------------------------------------------------------------*
* FORM pf_status *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_EXTAB *
*---------------------------------------------------------------------*
FORM set_status USING p_extab TYPE slis_t_extab.
SET PF-STATUS 'STATUS_000' EXCLUDING p_extab.
ENDFORM. "PF_STATUS
*
*---------------------------------------------------------------------*
* FORM user_command_own *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> L_UCOMM *
* --> RS_SELFIELD *
*---------------------------------------------------------------------*
FORM user_command_000 USING l_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE l_ucomm.
WHEN '&ACTU'.
ENDCASE.
ENDFORM.
http://www.sap-basis-abap.com/abap/add-button-to-alv-toolbar-with-reuse-alv-list-display.htm
TOP
Añadir campo flag a la estrucdtura definida para el uso de la tabla.
Type-pools: slis.
DATA: gtd_fieldcat TYPE slis_t_fieldcat_alv,
gwa_layout TYPE slis_layout_alv.
MAI
llenar los datos en la tabla interna.
START-OF-SELECTION.
PERFORM cargar_data.
PERFORM construir_alv.
F02
*----------------------------------------------------------------------*
***INCLUDE ZTEMP_CJ_F02 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form construir_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM construir_alv. PERFORM construir_catalogo. PERFORM construir_layout . PERFORM mostrar_alv. ENDFORM. " construir_alv *&---------------------------------------------------------------------* *& Form construir_catalogo *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM construir_catalogo. DATA: li_idx TYPE i VALUE 0. ADD 1 TO li_idx. PERFORM llenar_fieldcat USING li_idx 'GTS_AUFK_AFPO' 'GJAHR' '' 'Año' '7' '' ''. ADD 1 TO li_idx. PERFORM llenar_fieldcat USING li_idx 'GTS_AUFK_AFPO' 'GJAHR1' '' 'Ejercicio Doc. Contable' '7' '' ''. ADD 1 TO li_idx. PERFORM llenar_fieldcat USING li_idx 'GTS_AUFK_AFPO' 'MENSA' '' 'Mensaje' '7' '' ''. ENDFORM. " construir_catalogo *&---------------------------------------------------------------------* *& Form mostrar_alv *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM mostrar_alv. DATA: ls_repid TYPE sy-repid. ls_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = ls_repid i_structure_name = 'GTS_AUFK_AFPO' i_callback_pf_status_set = 'SET_STATUS' i_callback_user_command = 'USER_COMMAND_000' i_callback_html_top_of_page = 'TOP_OF_PAGE_SPLIT' is_layout = gwa_layout it_fieldcat = gtd_fieldcat[] TABLES t_outtab = gts_aufk_afpo EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " mostrar_alv
*&---------------------------------------------------------------------*
*& Form construir_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM construir_layout. CLEAR gwa_layout. gwa_layout-zebra = 'X'. gwa_layout-edit_mode = space. gwa_layout-box_fieldname = 'FLAG'. ENDFORM. " construir_layout *&---------------------------------------------------------------------* *& Form llenar_fieldcat *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_LI_IDX text
* -->P_0028 text
* -->P_0029 text
* -->P_0030 text
* -->P_0031 text
* -->P_0032 text
* -->P_0033 text
* -->P_0034 text
*----------------------------------------------------------------------*
FORM llenar_fieldcat USING pi_pos LIKE sy-cucol
pi_tabla TYPE slis_tabname
pi_campo TYPE slis_fieldname
pi_key TYPE c
pi_text TYPE dd03p-scrtext_l
pi_len TYPE dd03p-outputlen
pi_ctabla TYPE slis_tabname
pi_ccampo TYPE slis_fieldname.
DATA lwa_fieldcat TYPE slis_fieldcat_alv.
lwa_fieldcat-col_pos = pi_pos.
lwa_fieldcat-tabname = pi_tabla.
lwa_fieldcat-fieldname = pi_campo.
lwa_fieldcat-key = pi_key.
lwa_fieldcat-seltext_l = pi_text.
lwa_fieldcat-outputlen = pi_len.
lwa_fieldcat-ctabname = pi_ctabla.
lwa_fieldcat-cfieldname = pi_ccampo.
APPEND lwa_fieldcat TO gtd_fieldcat.
CLEAR lwa_fieldcat.
ENDFORM. " llenar_fieldcat
*---------------------------------------------------------------------*
* FORM pf_status *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_EXTAB *
*---------------------------------------------------------------------*
FORM set_status USING p_extab TYPE slis_t_extab.
SET PF-STATUS 'STATUS_000' EXCLUDING p_extab.
ENDFORM. "PF_STATUS
*
*---------------------------------------------------------------------*
* FORM user_command_own *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> L_UCOMM *
* --> RS_SELFIELD *
*---------------------------------------------------------------------*
FORM user_command_000 USING l_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE l_ucomm.
WHEN '&ACTU'.
ENDCASE.
ENDFORM.
RADIO BUTTON mostrar u ocultar datos al seleccionar radio button
TOP
SELECTION-SCREEN : BEGIN OF BLOCK b_03 WITH FRAME TITLE text-t03.
PARAMETERS : p_rb_fg RADIOBUTTON GROUP RAD2
USER-COMMAND radio2
DEFAULT 'X'
MODIF ID RA,
p_rb_fl RADIOBUTTON GROUP RAD2
MODIF ID RA.
SELECTION-SCREEN : END OF BLOCK b_03.
MAI
AT SELECTION-SCREEN OUTPUT.
IF p_rb_oo = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'RA'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
SELECTION-SCREEN : BEGIN OF BLOCK b_03 WITH FRAME TITLE text-t03.
PARAMETERS : p_rb_fg RADIOBUTTON GROUP RAD2
USER-COMMAND radio2
DEFAULT 'X'
MODIF ID RA,
p_rb_fl RADIOBUTTON GROUP RAD2
MODIF ID RA.
SELECTION-SCREEN : END OF BLOCK b_03.
MAI
AT SELECTION-SCREEN OUTPUT.
IF p_rb_oo = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'RA'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
Radio button simple
TOP
SELECTION-SCREEN : BEGIN OF BLOCK b_02 WITH FRAME TITLE text-t02.
PARAMETERS : p_rb_oo RADIOBUTTON GROUP RAD1
USER-COMMAND radio
DEFAULT 'X',
p_rb_fc RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN : END OF BLOCK b_02.
MAI
AT SELECTION-SCREEN ON RADIOBUTTON GROUP RAD1.
IF p_rb_oo = 'X'.
MESSAGE i398 WITH 'orientado objetos.'.
ELSE.
MESSAGE i398 WITH 'ALV Funciones'.
ENDIF.
SELECTION-SCREEN : BEGIN OF BLOCK b_02 WITH FRAME TITLE text-t02.
PARAMETERS : p_rb_oo RADIOBUTTON GROUP RAD1
USER-COMMAND radio
DEFAULT 'X',
p_rb_fc RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN : END OF BLOCK b_02.
MAI
AT SELECTION-SCREEN ON RADIOBUTTON GROUP RAD1.
IF p_rb_oo = 'X'.
MESSAGE i398 WITH 'orientado objetos.'.
ELSE.
MESSAGE i398 WITH 'ALV Funciones'.
ENDIF.
Añadir 0s a un codigo
* Anadir 0s al codigo de aspirante
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gwa_screen_200-numas
IMPORTING
output = gwa_screen_200-numas.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gwa_screen_200-numas
IMPORTING
output = gwa_screen_200-numas.
Editar campos AVL
Tutoial de arranque
http://www.watto.org/program/abap/download/Z_ALV_TEMPLATE.abap
http://sgstocks.tripod.com/alvgrid_control.htm
http://www.watto.org/program/abap/download/Z_ALV_TEMPLATE.abap
http://www.sapalv.net/2009/08/sap-alv-tutorial-8-handling-data-change/
1. F01
CREATE OBJECT go_event_receiver.
SET HANDLER go_event_receiver->handle_data_changed FOR go_alv.
CALL METHOD go_alv->register_edit_event
EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified.
2.
CLASS gcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS.
3.
method handle_data_changed.
data: lv_changed type lvc_s_modi,
lc_rpta type c,
lwa_aspirante type gty_aspirante_alv.
loop at er_data_changed->mt_good_cells into lv_changed
where fieldname = 'APPAT' or fieldname = 'APMAT'
or fieldname = 'NOMBR'.
case lv_changed-fieldname.
when 'APPT'.
read table gtd_aspirante_alv into lwa_aspirante index lv_changed-row_id.
perform validar_nombres using lwa_aspirante-nombr
lv_changed-value
lwa_aspirante-apmat
'T'
changing lc_rpta.
check lc_rpta = 'T'.
when 'APMAT'.
when 'NOMBR'.
endcase.
* READ TABLE i_alv_data INTO v_alv_data INDEX lv_changed-row_id.
if sy-subrc = 0.
* MOVE lv_changed-value TO v_alv_data-cust_name.
* MODIFY i_alv_data FROM v_alv_data INDEX lv_changed-row_id.
endif.
endloop.
Endmethod.
Mostrar error
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = 'SU'
i_msgno = '000'
i_msgty = 'E'
i_msgv1 = 'Ya existe un registro con los nombres'
i_msgv2 = ' y apellidos ingresados.'
i_fieldname = lv_changed-fieldname
i_row_id = lv_changed-row_id .
http://www.watto.org/program/abap/download/Z_ALV_TEMPLATE.abap
http://sgstocks.tripod.com/alvgrid_control.htm
http://www.watto.org/program/abap/download/Z_ALV_TEMPLATE.abap
http://www.sapalv.net/2009/08/sap-alv-tutorial-8-handling-data-change/
1. F01
CREATE OBJECT go_event_receiver.
SET HANDLER go_event_receiver->handle_data_changed FOR go_alv.
CALL METHOD go_alv->register_edit_event
EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified.
2.
CLASS gcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS.
3.
method handle_data_changed.
data: lv_changed type lvc_s_modi,
lc_rpta type c,
lwa_aspirante type gty_aspirante_alv.
loop at er_data_changed->mt_good_cells into lv_changed
where fieldname = 'APPAT' or fieldname = 'APMAT'
or fieldname = 'NOMBR'.
case lv_changed-fieldname.
when 'APPT'.
read table gtd_aspirante_alv into lwa_aspirante index lv_changed-row_id.
perform validar_nombres using lwa_aspirante-nombr
lv_changed-value
lwa_aspirante-apmat
'T'
changing lc_rpta.
check lc_rpta = 'T'.
when 'APMAT'.
when 'NOMBR'.
endcase.
* READ TABLE i_alv_data INTO v_alv_data INDEX lv_changed-row_id.
if sy-subrc = 0.
* MOVE lv_changed-value TO v_alv_data-cust_name.
* MODIFY i_alv_data FROM v_alv_data INDEX lv_changed-row_id.
endif.
endloop.
Endmethod.
Mostrar error
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = 'SU'
i_msgno = '000'
i_msgty = 'E'
i_msgv1 = 'Ya existe un registro con los nombres'
i_msgv2 = ' y apellidos ingresados.'
i_fieldname = lv_changed-fieldname
i_row_id = lv_changed-row_id .
MEJORAR PERFORMANCE DE BUSQUEDA USANDO FIELD SYMBOLS, BINARY SEARCH Y READ TABLES
FIELD-SYMBOLS: LIKE LINE OF gtd_aspirante_alv.
SORT gtd_dom_tratamiento BY domvalue_l.
LOOP AT gtd_aspirante_alv ASSIGNING.
READ TABLE gtd_dom_tratamiento INTO lwa_dominio WITH KEY
domvalue_l =-trata BINARY SEARCH.
-trata = lwa_dominio-ddtext.
ENDLOOP.
SORT gtd_dom_tratamiento BY domvalue_l.
LOOP AT gtd_aspirante_alv ASSIGNING
READ TABLE gtd_dom_tratamiento INTO lwa_dominio WITH KEY
domvalue_l =
ENDLOOP.
Cargar datos de dominio con función
DATA gtd_dom_tratamiento TYPE STANDARD TABLE OF dd07v.
PERFORM cargar_datos_dominio TABLES gtd_dom_tratamiento
USING 'ZD_TRATAMIENTO_10'
CHANGING lc_rpta.
Check lc_RPTA = ‘T’.
FORM cargar_datos_dominio TABLES p_ltd_dominio LIKE gtd_dom_tratamiento
USING p_ls_dominio
CHANGING p_lc_rpta.
CALL FUNCTION 'DD_DD07V_GET'
EXPORTING
domain_name = p_ls_dominio
langu = sy-langu
withtext = 'X'
TABLES
dd07v_tab = p_ltd_dominio
EXCEPTIONS
access_failure = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
p_lc_rpta = 'F'.
ELSE.
p_lc_rpta = 'T'.
ENDIF.
ENDFORM. " cargar_datos_dominio
PERFORM cargar_datos_dominio TABLES gtd_dom_tratamiento
USING 'ZD_TRATAMIENTO_10'
CHANGING lc_rpta.
Check lc_RPTA = ‘T’.
FORM cargar_datos_dominio TABLES p_ltd_dominio LIKE gtd_dom_tratamiento
USING p_ls_dominio
CHANGING p_lc_rpta.
CALL FUNCTION 'DD_DD07V_GET'
EXPORTING
domain_name = p_ls_dominio
langu = sy-langu
withtext = 'X'
TABLES
dd07v_tab = p_ltd_dominio
EXCEPTIONS
access_failure = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
p_lc_rpta = 'F'.
ELSE.
p_lc_rpta = 'T'.
ENDIF.
ENDFORM. " cargar_datos_dominio
Ventana de diálogo para abrir un archivo
FORM obtener_filepath CHANGING p_ls_path TYPE string.
DATA: li_subrc LIKE sy-subrc,
ltd_filetable TYPE filetable,
lwa_filetable TYPE file_table,
ls_path TYPE string,
user_action TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Seleccionar archivo de texto'
default_filename = '*.txt'
multiselection = ' '
CHANGING
file_table = ltd_filetable
rc = li_subrc
user_action = user_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
CASE user_action.
WHEN 0.
READ TABLE ltd_filetable INTO lwa_filetable INDEX 1.
p_ls_path = lwa_filetable-filename.
WHEN OTHERS.
MESSAGE i398 WITH 'No se selecciono un archivo'.
ENDCASE.
ENDIF.
ENDFORM.
DATA: li_subrc LIKE sy-subrc,
ltd_filetable TYPE filetable,
lwa_filetable TYPE file_table,
ls_path TYPE string,
user_action TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Seleccionar archivo de texto'
default_filename = '*.txt'
multiselection = ' '
CHANGING
file_table = ltd_filetable
rc = li_subrc
user_action = user_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
CASE user_action.
WHEN 0.
READ TABLE ltd_filetable INTO lwa_filetable INDEX 1.
p_ls_path = lwa_filetable-filename.
WHEN OTHERS.
MESSAGE i398 WITH 'No se selecciono un archivo'.
ENDCASE.
ENDIF.
ENDFORM.
Cargar tabla desde archivo
FORM cargar_tabla_desde_archivo
USING p_ls_path TYPE string
CHANGING p_ltd_aspirante TYPE STANDARD TABLE .
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_ls_path
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = p_ltd_aspirante
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17 .
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* RETURN.
ENDIF.
ENDFORM.
USING p_ls_path TYPE string
CHANGING p_ltd_aspirante TYPE STANDARD TABLE .
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_ls_path
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = p_ltd_aspirante
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17 .
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* RETURN.
ENDIF.
ENDFORM.
Obtener datos de dominio
DATA: ltd_dominio TYPE TABLE OF dd07v.
CALL FUNCTION 'DD_DD07V_GET'
EXPORTING
domain_name = 'ZD_TRATAMIENTO_10'
langu = sy-langu
withtext = 'X'
TABLES
dd07v_tab = ltd_dominio
EXCEPTIONS
access_failure = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'DD_DD07V_GET'
EXPORTING
domain_name = 'ZD_TRATAMIENTO_10'
langu = sy-langu
withtext = 'X'
TABLES
dd07v_tab = ltd_dominio
EXCEPTIONS
access_failure = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Mensaje de confirmación
DATA: ls_rpta type c.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Salir Programa'
TEXT_QUESTION = 'Los cambios no han sido grabados. ¿Desea cancelar el proceso?'
IMPORTING
ANSWER = ls_rpta.
CASE ls_rpta.
WHEN '1'. "Yes is clicked
WHEN '2'. "No is clicked
WHEN '3'. "Cancel is clicked
ENDCASE.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Salir Programa'
TEXT_QUESTION = 'Los cambios no han sido grabados. ¿Desea cancelar el proceso?'
IMPORTING
ANSWER = ls_rpta.
CASE ls_rpta.
WHEN '1'. "Yes is clicked
WHEN '2'. "No is clicked
WHEN '3'. "Cancel is clicked
ENDCASE.
Crear rangos
Transacción snro
Creación: Warning 10
Dominio ZD_NUMASP_10
Definir intervalos
1.Numeros definidos o inidcados x el user.
Llamar
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '1'
object = 'ZMMSOLESP'
IMPORTING
number = gwa_ztbespsc-idact
Creación: Warning 10
Dominio ZD_NUMASP_10
Definir intervalos
1.Numeros definidos o inidcados x el user.
Llamar
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '1'
object = 'ZMMSOLESP'
IMPORTING
number = gwa_ztbespsc-idact
Habilitar deshabilitar campos screen
LOOP AT SCREEN.
IF screen-name = 'GWA_SCREEN_200-FEREG'.
screen-input = '0'. "deshabilitar texto
screen-active = '1'. "ocultar texto
MODIFY SCREEN.
ENDIF.
ENDLOOP.
IF screen-name = 'GWA_SCREEN_200-FEREG'.
screen-input = '0'. "deshabilitar texto
screen-active = '1'. "ocultar texto
MODIFY SCREEN.
ENDIF.
ENDLOOP.
Friday, February 12, 2010
MAINTENANCE VIEW WITH CUSTOM F4
1.While executing the maintenance view using the sm30 transaction, go to the menu System, status and fetch the program name then go to the se38 transaction and edit it.
2.Add to the screen flow logic .
PROCESS ON VALUE-REQUEST. "F4
FIELD ZVA_ZTASPIRANTE-PNACI MODULE matchcode_estad.
3.Function
MODULE matchcode_estad INPUT.
DATA: BEGIN OF help_item OCCURS 0,
carrid TYPE s_carr_id,
connid TYPE s_conn_id,
END OF help_item.
SELECT carrid connid
INTO TABLE help_item
FROM spfli.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CARRID'
dynprofield = 'CONNID'
dynpprog = sy-cprog
dynpnr = sy-dynnr
value_org = 'S'
TABLES
value_tab = help_item.
ENDMODULE.
4. Whether you need to validate the input, uncheck the field foreign .. in the screen layout for the modified field and go back to the screen flow logic and within the loop add the module
PROCESS AFTER INPUT.
MODULE liste_exit_command AT EXIT-COMMAND.
MODULE liste_before_loop.
LOOP AT extract.
...
FIELD zva_ztaspirante-pnaci MODULE validar_pais ON REQUEST.
ENDLOOP.
MODULE liste_after_loop. .
5. Function validar_pais
MODULE validar_pais INPUT.
DATA ls_carrid TYPE s_carr_id.
SELECT SINGLE carrid INTO ls_carrid FROM spfli
WHERE carrid = zva_ztaspirante-pnaci.
IF sy-subrc <> 0.
MESSAGE: 'No existe el valor ingresado' TYPE 'E'.
ENDIF.
ENDMODULE.
2.Add to the screen flow logic .
PROCESS ON VALUE-REQUEST. "F4
FIELD ZVA_ZTASPIRANTE-PNACI MODULE matchcode_estad.
3.Function
MODULE matchcode_estad INPUT.
DATA: BEGIN OF help_item OCCURS 0,
carrid TYPE s_carr_id,
connid TYPE s_conn_id,
END OF help_item.
SELECT carrid connid
INTO TABLE help_item
FROM spfli.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CARRID'
dynprofield = 'CONNID'
dynpprog = sy-cprog
dynpnr = sy-dynnr
value_org = 'S'
TABLES
value_tab = help_item.
ENDMODULE.
4. Whether you need to validate the input, uncheck the field foreign .. in the screen layout for the modified field and go back to the screen flow logic and within the loop add the module
PROCESS AFTER INPUT.
MODULE liste_exit_command AT EXIT-COMMAND.
MODULE liste_before_loop.
LOOP AT extract.
...
FIELD zva_ztaspirante-pnaci MODULE validar_pais ON REQUEST.
ENDLOOP.
MODULE liste_after_loop. .
5. Function validar_pais
MODULE validar_pais INPUT.
DATA ls_carrid TYPE s_carr_id.
SELECT SINGLE carrid INTO ls_carrid FROM spfli
WHERE carrid = zva_ztaspirante-pnaci.
IF sy-subrc <> 0.
MESSAGE: 'No existe el valor ingresado' TYPE 'E'.
ENDIF.
ENDMODULE.
Cosas que pasan
- Problemas con el uso de variables de sistema en el llamado de las funciones, pse soluciona usando una variable local previamente dandole el valor que le corresponde.
- AL copiar y pegar pueden existir problemas en los caracteres usados, lo ideal es copiar de un PDF.
- AL copiar y pegar pueden existir problemas en los caracteres usados, lo ideal es copiar de un PDF.
Subscribe to:
Posts (Atom)