domingo, 30 de septiembre de 2012
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(<)&
&variable(<)&
Cantidad de caracteres de un string
Para obtener la cantidad de caracteres de un string utilizar:
data: v_cantidad type i,
v_texto(50) type c.
v_texto = 'Hola mundo'.
v_cantidad = STRLEN( v_texto ).
data: v_cantidad type i,
v_texto(50) type c.
v_texto = 'Hola mundo'.
v_cantidad = STRLEN( v_texto ).
SAVE_TEXT y CREATE_TEXT
Ejemplo de utilización de grabación de texto standard, si ya existe el texto utiliza la función save_text para modificarlo, si no existe utiliza la función create_text para crearlo.
FORM f_guarda_comentarios.
DATA: u_line TYPE STANDARD TABLE OF tline,
u_line_aux TYPE STANDARD TABLE OF tline,
x_line TYPE tline,
x_text TYPE tp_text,
x_header TYPE thead,
w_name TYPE tdobname.
CHECK NOT t_text[] IS INITIAL.
REFRESH u_line.
LOOP AT t_text INTO x_text.
CLEAR x_line.
x_line-tdline = x_text-line.
APPEND x_line TO u_line.
ENDLOOP.
CHECK NOT u_line[] IS INITIAL.
CHECK NOT v_vbeln IS INITIAL.
* Busca si ya existe el texto
w_name = v_vbeln.
* Rescata comentarios
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = '0002'
language = 'S'
name = w_name
object = 'VBBK'
TABLES
lines = u_line_aux
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc NE 0.
* Crea texto
CALL FUNCTION 'CREATE_TEXT'
EXPORTING
fid = '0002'
flanguage = sy-langu
fname = w_name
fobject = 'VBBK'
TABLES
flines = u_line
EXCEPTIONS
no_init = 1
no_save = 2
OTHERS = 3.
IF sy-subrc NE 0.
EXIT.
ENDIF.
ELSE.
CLEAR x_header.
x_header-tdname = w_name.
x_header-tdid = '0002'.
x_header-tdspras = sy-langu.
x_header-tdobject = 'VBBK'.
x_header-mandt = sy-mandt.
* Guarda texto
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
client = sy-mandt
header = x_header
savemode_direct = 'X'
TABLES
lines = u_line
EXCEPTIONS
id = 1
language = 2
name = 3
object = 4
OTHERS = 5.
IF sy-subrc <> 0.
EXIT.
ENDIF.
ENDIF.
CALL FUNCTION 'COMMIT_TEXT'.
ENDFORM. " F_GUARDA_COMENTARIOS
Obtener el nombre de los meses
Para obtener el listado de nombres de los meses utilizar la función:
CALL FUNCTION 'MONTH_NAMES_GET'
EXPORTING
language = sy-langu
* IMPORTING
* RETURN_CODE =
TABLES
month_names = t_month
* EXCEPTIONS
* MONTH_NAMES_NOT_FOUND = 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.
en la tabla interna t_month obtendremos el listado completo de los meses en el idioma sy-langu.
Signo menos a la izquierda
Para mover el signo menos de un número a la izquierda (ya que SAP utiliza por defecto el signo a la derecha). Utilizar la función:
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = p_amount.
(donde p_amount es la variable que contiene el número con el signo que queremos modificar).
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = p_amount.
(donde p_amount es la variable que contiene el número con el signo que queremos modificar).
Suscribirse a:
Entradas (Atom)