RSSCD100 – Ver datos de Tablas CDHDR CDPOS
Caso: Se desea visualizar la fecha y hora de un pedido de compras.
Solución: Utilizamos la transacción RSSCD100, para ver el contenido de las tablas CDHDR y CDPOS
Fuentes:
Listbox en SELECT-OPTION
Caso: Se desea poner un listobox o campo de selección en un SELECT-OPTION.
Solución: Utilizamos el siguiente código.
REPORT zprueba_abap. TYPE-POOLS: vrm . DATA: g_lista TYPE vrm_values, g_name TYPE vrm_id, g_value LIKE LINE OF g_lista. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. PARAMETERS : s_lista TYPE c LENGTH 30 AS LISTBOX VISIBLE LENGTH 30. SELECTION-SCREEN END OF BLOCK b1. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_lista. PERFORM armar_listbox. *&---------------------------------------------------------------------* *& Form armar_listbox *&---------------------------------------------------------------------* FORM armar_listbox. REFRESH g_lista. g_name = 'S_LISTA'. g_value-key = '1'. g_value-text = 'Santiago'. APPEND g_value TO g_lista. g_value-key = '2'. g_value-text = 'Viña del Mar'. APPEND g_value TO g_lista. g_value-key = '3'. g_value-text = 'Valparaíso'. APPEND g_value TO g_lista. g_value-key = '4'. g_value-text = 'San Felipe'. APPEND g_value TO g_lista. g_value-key = '5'. g_value-text = 'Con Con'. APPEND g_value TO g_lista. g_value-key = '6'. g_value-text = 'San Javier'. APPEND g_value TO g_lista. CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = g_name values = g_lista. ENDFORM. "armar_listbox
Color en columna de ALV
Caso: Se desea ponerle color a una columna de un ALV.
Solución: Para pintar una columna, podemos utilizar, en el fieldcat del ALV el campo EMPHASIZE, por ejemplo:
lw_fieldcat-emphasize = ‘C500’.
En el siguiente programa podemos listar las distintas posibilidades de color que hay.
REPORT zprueba_color_alv. TYPE-POOLS: slis. * Tabla interna de prueba (se agrega el campo CELLCOLORS. TYPES: BEGIN OF tty_salida, cod_color TYPE char4, cellcolors TYPE lvc_t_scol, END OF tty_salida. TYPES: ty_salida TYPE STANDARD TABLE OF tty_salida. DATA: t_salida TYPE ty_salida, wa_salida TYPE LINE OF ty_salida, i_fieldcat TYPE slis_t_fieldcat_alv, r_layout TYPE slis_layout_alv, lv_color TYPE numc1, lv_intensidad TYPE numc2, lv_contador TYPE numc3, lv_i TYPE c, lv_j TYPE c, lv_k TYPE c. INITIALIZATION. * Agrego los códigos de color lv_color = '1'. WHILE ( lv_color <= 7 ). lv_intensidad = '00'. WHILE ( lv_intensidad < 20 ). CONCATENATE 'C' lv_color lv_intensidad INTO wa_salida-cod_color. APPEND wa_salida TO t_salida. ADD 1 TO lv_intensidad. ENDWHILE. ADD 1 TO lv_color. ENDWHILE. * CARGO FIELDCAT. REFRESH i_fieldcat. PERFORM f_init_fieldcat TABLES i_fieldcat. * LAYOUT, AGREGO COLORES DEPENDIENDO DE LA CELDA CLEAR r_layout. PERFORM f_init_layout CHANGING r_layout. * ALV GRID CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_user_command = 'F_USER_COMMAND_01' is_layout = r_layout it_fieldcat = i_fieldcat[] TABLES t_outtab = t_salida EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. EXIT. ENDIF. *&---------------------------------------------------------------------* *& Form f_init_fieldcat *&---------------------------------------------------------------------* FORM f_init_fieldcat TABLES ptc_fieldcat TYPE slis_t_fieldcat_alv. DATA: r_fieldcat TYPE slis_fieldcat_alv, l_pos TYPE i VALUE 0. CLEAR r_fieldcat. l_pos = l_pos + 1. r_fieldcat-col_pos = l_pos. r_fieldcat-fieldname = 'COD_COLOR'. r_fieldcat-tabname = 'T_SALIDA'. r_fieldcat-seltext_l = 'Material'. APPEND r_fieldcat TO ptc_fieldcat. ENDFORM. " f_init_fieldcat *&---------------------------------------------------------------------* *& Form f_init_layout *&---------------------------------------------------------------------* FORM f_init_layout CHANGING playout TYPE slis_layout_alv. * Variables DATA l_color TYPE lvc_s_scol. * Field-Symbols FIELD-SYMBOLS <fs_report> LIKE LINE OF t_salida. * ASIGNAMOS EL CAMPO CELLCOLORS AL LAYOUT playout-coltab_fieldname = 'CELLCOLORS'. UNASSIGN <fs_report>. LOOP AT t_salida ASSIGNING <fs_report>. lv_i = <fs_report>-cod_color+1(1). lv_j = <fs_report>-cod_color+2(1). lv_k = <fs_report>-cod_color+3(1). l_color-fname = 'COD_COLOR' . l_color-color-col = lv_i. "COLOR l_color-color-int = lv_j. "INTENSIDAD l_color-color-inv = lv_k. "INVERSO APPEND l_color TO <fs_report>-cellcolors. ENDLOOP. ENDFORM. " f_init_layout
Exportar tabla con columnas a Excel
Caso: Se desea exportar a Excel el contenido de una tabla SAP, incluyendo como cabecera el nombre de cada columna (la descripción de la misma, no el nombre técnico del campo).
Solución: Se solicita el nombre del archivo Excel y luego se extrae de la tabla indicada deseada (en este caso la T001) las cabeceras de columna y luego su contenido.
Como mejora podría hacerse un PARAMETER para solicitar la tabla a extraer y otro para indicar el archivo Excel…
REPORT zprueba_formato. TYPE-POOLS abap. CONSTANTS: c_tabla TYPE tabname VALUE 'T001', " Tabla a listar c_t_salida TYPE tabname VALUE 'LT_SALIDA'. " Tabla de salida DATA: lt_campos TYPE STANDARD TABLE OF dd03l WITH HEADER LINE, lt_rollname TYPE STANDARD TABLE OF dd04t WITH HEADER LINE, lt_cabeceras TYPE STANDARD TABLE OF fieldnames, wa_cabeceras TYPE fieldnames. DATA: lt_salida TYPE TABLE OF t001, " Tabla a listar wa_salida TYPE t001, " Tabla a listar lc_tabname TYPE tabname, lc_tabint TYPE tabname, lv_encoding TYPE abap_encoding, lc_archivo TYPE string, lv_file TYPE string. FIELD-SYMBOLS: <fs_tab> TYPE STANDARD TABLE, <fs_it> TYPE STANDARD TABLE. REFRESH: lt_campos[], lt_rollname[], lt_cabeceras[]. lv_encoding = '4103'. PERFORM seleccionar_archivo CHANGING lv_file. lc_tabname = c_tabla. lc_tabint = c_t_salida. ASSIGN (lc_tabint) TO <fs_it>. REFRESH <fs_it>. SELECT * INTO TABLE <fs_it> FROM (lc_tabname). ********************* * Cabecera SELECT tabname position fieldname rollname FROM dd03l INTO CORRESPONDING FIELDS OF TABLE lt_campos WHERE tabname EQ lc_tabname. SELECT rollname scrtext_s scrtext_m scrtext_l INTO CORRESPONDING FIELDS OF TABLE lt_rollname FROM dd04t FOR ALL ENTRIES IN lt_campos WHERE rollname = lt_campos-rollname AND ddlanguage = sy-langu. SORT lt_campos BY position. DELETE lt_campos WHERE fieldname(1) = '.'. * Obtengo las cabeceras de columna y las agrego en lt_cabeceras para exportarlas CLEAR wa_cabeceras. LOOP AT lt_campos. READ TABLE lt_rollname WITH KEY rollname = lt_campos-rollname. CLEAR wa_cabeceras. wa_cabeceras-fieldname = lt_rollname-scrtext_m. APPEND wa_cabeceras TO lt_cabeceras. ENDLOOP. lc_archivo = lv_file. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = lc_archivo filetype = 'DAT' write_field_separator = 'X' write_bom = 'X' codepage = lv_encoding TABLES data_tab = <fs_it> fieldnames = lt_cabeceras. *&---------------------------------------------------------------------* *& Form seleccionar_archivo *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM seleccionar_archivo CHANGING po_file. DATA: v_usr_action TYPE i, v_path TYPE string, " directorio del archivo v_fullpath TYPE string, " ruta del arhivo completa v_filename TYPE string. " nombre del archivo CLEAR: v_usr_action, v_path, v_fullpath, v_filename. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING initial_directory = 'C:\' file_filter = '*.XLS' default_extension = 'XLS' CHANGING filename = v_filename path = v_path fullpath = v_fullpath user_action = v_usr_action EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF sy-subrc IS INITIAL. IF v_usr_action EQ cl_gui_frontend_services=>action_ok. MOVE v_fullpath TO po_file. ENDIF. ENDIF. ENDFORM. "seleccionar_Archivo
Llamar programa mediante JOB programado
Caso: se busca crear un job de un programa ABAP, programado a una cierta fecha-hora para que sea ejecutado.
*&———————————————————————*
*& Form crear_datos_job
*&———————————————————————*
* Crear datos vía JOB
*———————————————————————-*
FORM crear_datos_job.
DATA: lv_respuesta TYPE c,
lv_error TYPE c,
lv_jobname TYPE tbtcjob-jobname,
lv_jobcount TYPE tbtcjob-jobcount,
lv_jobdate TYPE tbtcjob-sdlstrtdt,
lv_jobtime TYPE tbtcjob-sdlstrttm,
lv_fec_ini TYPE ztmm_ep_secuenc-fecha_ini,
lv_fec_fin TYPE ztmm_ep_secuenc-fecha_fin.
CALL FUNCTION ‘POPUP_TO_CONFIRM’
EXPORTING
titlebar = ‘Creación de Datos vía JOB’
text_question = ‘¿Confirma la creación de datos vía JOB?.’
default_button = ‘2’
display_cancel_button = ‘X’
IMPORTING
answer = lv_respuesta
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF lv_respuesta EQ ‘1’.
* Llamada al JOB
CONCATENATE ‘ZJOB_CREAR’ sy-datum sy-uname INTO lv_jobname SEPARATED BY ‘_’.
CALL FUNCTION ‘JOB_OPEN’
EXPORTING
jobname = lv_jobname
jobclass = ‘B’ » Prioridad media
IMPORTING
jobcount = lv_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE e208(00) WITH ‘Error al crear JOB’.
ENDIF.
SUBMIT zmm_crear_datos WITH p_fecini = ‘20130101’
WITH p_fecfin = ‘20131231
VIA JOB lv_jobname NUMBER lv_jobcount USER sy-uname AND RETURN.
IF sy-subrc <> 0.
MESSAGE e208(00) WITH ‘Error al programar JOB’.
ENDIF.
CALL FUNCTION ‘JOB_CLOSE’
EXPORTING
jobcount = lv_jobcount » Nro. interno del JOB
jobname = lv_jobname » Nombre del JOB
sdlstrtdt = lv_jobdate » Fecha inicio JOB
sdlstrttm = lv_jobtime » Hora inicio JOB
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
IF sy-subrc <> 0.
MESSAGE e208(00) WITH ‘Error al cerrar Job’.
ELSE.
MESSAGE i001(00) WITH ‘JOB creado:’ lv_jobname ‘->’ lv_jobcount.
ENDIF.
ENDIF.
ENDFORM. «crear_datos_job
Link útil:
http://www.mundosap.com/foro/showthread.php?t=27990&highlight=open_job