Archivo

Posts Tagged ‘ABAP’

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:

http://www.sap123.com/a/47/

http://sap.ittoolbox.com/groups/technical-functional/sap-log-mm/how-to-get-data-from-table-cdpos-cdhdr-4526724

Categorías: ABAP/4 Etiquetas: , ,

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

Screenshot_1

Categorías: ABAP/4 Etiquetas: , ,

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(00WITH ‘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(00WITH ‘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(00WITH ‘Error al cerrar Job’.
ELSE.
MESSAGE i001(00WITH ‘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

Categorías: ABAP/4 Etiquetas: , , , , , ,