domingo, 30 de septiembre de 2012

Averiguar en que transacción estamos


DATA w_dynpro TYPE sy-tcode.

  CALL METHOD cl_dynpro=>get_current_transaction
    RECEIVING
      transaction_name = w_dynpro.

  LEAVE TO TRANSACTION w_dynpro.

Crear un List box en pantalla


Para crear un list box en selection screen:

PARAMETERS: p_day TYPE char4 AS LISTBOX VISIBLE LENGTH 6 OBLIGATORY.

TYPE-POOLS: vrm.
DATA: l_sid TYPE  vrm_id,
      l_i_val TYPE vrm_values,
      l_val LIKE LINE OF l_i_val.

INITIALIZATION.
  l_sid = 'p_day'.
  l_val-key = '0'.
  l_val-text = 'SUN'.
  APPEND l_val TO l_i_val.

  l_val-key = '1'.
  l_val-text = 'MON'.
  APPEND l_val TO l_i_val.

  l_val-key = '2'.
  l_val-text = 'TUE'.
  APPEND l_val TO l_i_val.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              = l_sid
      values          = l_i_val
    EXCEPTIONS
      id_illegal_name = 1
      OTHERS          = 2.
  IF sy-subrc = 0.

  ENDIF.


-----------------------------------------------------------------
Para crear un list box en una dynpro:

THE TOP INCLUDE:


TYPES: begin of stru_t161t,
               BSTYP type t161t-BSTYP,
               BSART type t161t-BSART,
               BATXT type BATXT,
            end of stru_t161t.

types : BEGIN OF STRU_TEXT,                "STRUCTURE FOR FUNCTION MODULE
             KEY(40) TYPE C,                       " FOR DROPDOWN BOX
             TEXT(80) TYPE C,
          END OF STRU_TEXT.

data : it_t161t type TABLE OF stru_t161t,
         wa_t161t type stru_t161t,
        it_text type  TABLE OF STRU_TEXT,
        wa_text type STRU_TEXT.

IN THE PBO:
MODULE STATUS_1000 OUTPUT.
SELECT
   BSTYP
   BSART
   BATXT
  into table it_t161t
  from t161t
  where bstyp = 'B'
    and SPRAS = 'E'.

clear wa_text.
refresh it_text.

  loop at it_t161t into wa_t161t.
     move wa_t161t-bsart to wa_text-key.
     move wa_t161t-batxt to wa_text-text.
    append wa_text to it_text.
  endloop.


  CALL FUNCTION 'VRM_SET_VALUES'
  EXPORTING
    ID                    = 'V_DRPDWN'  "'V_DRPDWN' is the screen name of the dropdown field
    VALUES                = it_text
EXCEPTIONS
  ID_ILLEGAL_NAME       = 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.
ENDMODULE.                 " STATUS_1000  OUTPUT

Modificaciones en un documento buscarlas por tablas


    SELECT SINGLE changenr
      INTO w_changenr
      FROM cdhdr
      WHERE objectclas = 'VERKBELEG'
        AND objectid   = v_salesdocu "Numero de documento
        AND udate      = v_zfech_reg. "Fecha

    SELECT SINGLE value_old
      INTO w_contract_header_in-ord_reason
      FROM cdpos
      WHERE objectclas = 'VERKBELEG'
        AND objectid   = v_salesdocu
        AND changenr   = w_changenr
        AND fname      = 'AUGRU'. "Campo a buscar

Interlocutores de un documento


Para obtener el interlocutor de un documento, acceder a la tabla VBPA.
Ejemplo:
  SELECT SINGLE kunnr
    INTO w_kunnr
    FROM vbpa
   WHERE vbeln EQ v_doc_number
     AND parvw EQ 'AG'.

Crear un ENTER en tiempo de ejecución


  CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
    EXPORTING
      functioncode           = '=/00'
    EXCEPTIONS
      function_not_supported = 0
      OTHERS                 = 0.

Radiobuttons en un ALV


Para utilizar radiobuttons en un alv, se puede mostrar en una celda de ALV el dibujo de un radiobutton como icono y capturar cuando se presiona sobre el para cambiarlo por el icono del radiobutton presionado.
Ejemplo:


INCLUDE <icons>.

DATA: BEGIN OF it_alv_flight OCCURS 0,
       carrid TYPE sflight-carrid,
       connid TYPE sflight-connid,
       radio1(4),                            "Radio button
       radio2(4),
      END OF it_alv_flight.


En fieldcat:
wa_fcat-fieldname = 'RADIO2'.
wa_fcat-tabname = 'IT_ALV_FLIGHT'.
wa_fcat-seltext_l = 'RADIO2'.
  x_fieldcat-edit      = c_x.
  x_fieldcat-icon      = c_x.
  x_fieldcat-hotspot   = c_x.


A la celda asignarle de valor inicial:
x_alv-pedidos = icon_wd_radio_button_empty. "Radio no seleccionado


en creación de alv definir el evento:
  SET HANDLER lcl_event_receiver=>hotspot_click
              FOR og_grid1.


CLASS lcl_eventhandler DEFINITION.

  PUBLIC SECTION.

    CLASS-DATA:
      md_cnt    TYPE i.

    CLASS-METHODS:
      handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
        IMPORTING
          e_row_id
          e_column_id
          es_row_no
          sender.

ENDCLASS.    


CLASS lcl_eventhandler IMPLEMENTATION.

  METHOD handle_hotspot_click.
* define local data
    FIELD-SYMBOLS:
      <ls_entry>    TYPE ty_s_sflight,
      <ld_fld>      TYPE ANY.

    READ TABLE gt_sflight ASSIGNING <ls_entry> INDEX es_row_no-row_id.
    CHECK ( <ls_entry> IS ASSIGNED ).

*   Set all radio buttons "unselected"
    <ls_entry>-button1 =  icon_wd_radio_button_empty.
    <ls_entry>-button2 =  icon_wd_radio_button_empty.
    <ls_entry>-button3 =  icon_wd_radio_button_empty.
    <ls_entry>-button4 =  icon_wd_radio_button_empty.

    ASSIGN COMPONENT e_column_id-fieldname OF STRUCTURE <ls_entry>
                                              TO <ld_fld>.
    IF ( <ld_fld> IS ASSIGNED ).
*     Set selected radio button "selected".
      <ld_fld> = icon_wd_radio_button.
    ENDIF.

*   Force PAI followed by refresh of table display in PBO
    CALL METHOD cl_gui_cfw=>set_new_ok_code
      EXPORTING
        new_code = 'DUMMY'
*      IMPORTING
*        RC       =
        .


  ENDMETHOD.                    "handle_hotspot_click

ENDCLASS.                    "lcl_eventhandler IMPLEMENTATION

Smartform signo de número a izquierda

Dentro de un smartform si queremos mostrar el signo de un número a la izquierda, en la ventana al momento de mostrar una variable utilizar:
&variable(<)&