Mostrando entradas con la etiqueta abap. Mostrar todas las entradas
Mostrando entradas con la etiqueta abap. Mostrar todas las entradas
domingo, 30 de septiembre de 2012
Bloquear una tabla completa
Para bloquear todos los registros de una tabla utilizar:
CALL FUNCTION'ENQUEUE_E_TABLE'
EXPORTING
MODE_RSTABLE ='E'
TABNAME ='ZNOMBRETABLA'
* VARKEY =
* X_TABNAME = ' '
* X_VARKEY = ' '
* _SCOPE = '2'
* _WAIT = ' '
* _COLLECT = ' '
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3
.
IF sy-subrc = 0.
WRITE: 'Lock table successfully!'.
else.
write: 'Failed'.
ENDIF.
Bloquear un registro de tabla VBAK
* Bloquea un registro de tabla VBAK
CALL FUNCTION 'ENQUEUE_EVVBAKE'
EXPORTING
mode_vbak = 'E'
mandt = sy-mandt
vbeln = p_vbeln
x_vbeln = ' '
_scope = '2'
_wait = ' '
_collect = ' '
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
* Desbloquea un registro de tabla VBAK
CALL FUNCTION 'DEQUEUE_EVVBAKE'
EXPORTING
mode_vbak = 'E'
mandt = sy-mandt
vbeln = p_vbeln
x_vbeln = ' '
_scope = '3'
_synchron = ' '
_collect = ' '.
Llamar a función en background
Para llamar a función en background.
data: w_tid TYPE arfctid,
w_fnum TYPE qretstate-qrfnum.
CALL FUNCTION 'ZNOMBREFUNCION'
IN BACKGROUND TASK
EXPORTING
i_incentivo = w_incentivo
i_inc_act = p_act1
i_archivo = p_file
TABLES
t_vbak = t_vbak_back
t_vbak_agru = t_vbak_agru_back
t_liq = u_liq_back.
CALL FUNCTION 'START_OF_BACKGROUNDTASK'
EXPORTING
startdate = sy-datum
starttime = sy-uzeit.
CALL FUNCTION 'ID_OF_BACKGROUNDTASK'
IMPORTING
tid = w_tid
fnum = w_fnum.
IF sy-subrc EQ 0.
COMMIT WORK.
ENDIF.
Y en los atributos de la función, Módulo de acceso remoto y inicio inmediato
Mensajes de error varios en una pantalla
data:
e_log TYPE bapiret2,
t_log TYPE bapiret2tab,
CLEAR e_log.
e_log-type = 'S'.
e_log-id = 'ZZZZZ'.
e_log-number = 437.
APPEND e_log TO t_log.
CALL FUNCTION 'SUSR_DISPLAY_LOG'
EXPORTING
display_in_popup = abap_true
log_title = text-002
TABLES
it_log_bapiret2 = t_log[]
EXCEPTIONS
parameter_error = 1
OTHERS = 2.
IF NOT sy-subrc IS INITIAL.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
2 checkbox en una misma línea
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 23(22) text-062, POSITION 20.
PARAMETERS: v_cm_mod AS CHECKBOX.
SELECTION-SCREEN: COMMENT 53(24) text-063, POSITION 50.
PARAMETERS: v_cm_sld AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
Caja de texto en dynpro
Crear custom control en dynpro
TYPES: BEGIN OF tp_text,
line TYPE c LENGTH 120,
END OF tp_text.
data:
v_container_104_1 TYPE REF TO cl_gui_custom_container,
v_ccontrol_104_1 TYPE scrfname VALUE 'CCCOMENTARIOS',
v_texto TYPE REF TO cl_gui_textedit,
t_text TYPE tp_ttext,
tp_ttext TYPE STANDARD TABLE OF tp_text.
EN PAI:
FORM f_crea_contenedor_texto .
DATA lw_line_length TYPE i VALUE 120.
* Crea contenedor y lo asocia con la DYNPRO
CREATE OBJECT v_container_104_1
EXPORTING
container_name = v_ccontrol_104_1
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF NOT sy-subrc IS INITIAL.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*$ Crea el Objeto EDITOR
CREATE OBJECT v_texto
EXPORTING
wordwrap_mode = cl_gui_textedit=>wordwrap_at_fixed_position
wordwrap_position = lw_line_length
parent = v_container_104_1
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
gui_type_not_supported = 5
OTHERS = 6.
IF NOT sy-subrc IS INITIAL.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF v_actvt = '03' AND v_edit IS INITIAL.
CALL METHOD v_texto->set_readonly_mode
EXPORTING
readonly_mode = '1'
EXCEPTIONS
error_cntl_call_method = 1
invalid_parameter = 2.
ELSE.
CALL METHOD v_texto->set_readonly_mode
EXPORTING
readonly_mode = '0'
EXCEPTIONS
error_cntl_call_method = 1
invalid_parameter = 2.
ENDIF.
CALL METHOD v_texto->set_toolbar_mode
EXPORTING
toolbar_mode = cl_gui_textedit=>false
EXCEPTIONS
error_cntl_call_method = 1
invalid_parameter = 2
OTHERS = 3.
CALL METHOD v_texto->set_statusbar_mode
EXPORTING
statusbar_mode = cl_gui_textedit=>false
EXCEPTIONS
error_cntl_call_method = 1
invalid_parameter = 2
OTHERS = 3.
ENDFORM. " f_crea_contenedor_texto
EN PBO: fuera de todo
MODULE rescata_comentarios INPUT.
CHECK sy-ucomm NE 'YPR9_NO'.
IF NOT v_texto IS INITIAL.
PERFORM f_rescata_dd_dynpro.
ENDIF.
ENDMODULE. " rescata_comentarios
FORM f_rescata_dd_dynpro .
DATA: u_text TYPE tp_ttext,
w_true TYPE i.
CLEAR u_text[].
w_true = 1.
CALL METHOD v_texto->get_text_as_r3table
IMPORTING
table = u_text
EXCEPTIONS
error_dp = 1
error_cntl_call_method = 2
error_dp_create = 3
potential_data_loss = 4
OTHERS = 5.
.
IF NOT sy-subrc IS INITIAL.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
t_text[] = u_text[].
ENDFORM. " f_rescata_dd_dynpro
-----
FORM f_recupera_comentarios .
TYPES: tp_lines TYPE STANDARD TABLE OF tline.
DATA: w_name TYPE tdobname,
u_line TYPE tp_lines,
x_line TYPE tline,
x_line_txt TYPE tp_text.
w_name = v_vbeln.
* Rescata comentarios
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = c_0002
language = c_s
name = w_name
object = c_vbbk
TABLES
lines = u_line
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 IS INITIAL.
LOOP AT u_line INTO x_line.
x_line_txt-line = x_line-tdline.
APPEND x_line_txt TO t_text.
CLEAR x_line_txt.
ENDLOOP.
ENDIF.
* Mueve el texto al Objeto Editor
IF NOT t_text[] IS INITIAL.
IF v_vehiculo_rasa = abap_true.
CALL METHOD v_texto->set_enable
EXPORTING
enable = abap_false
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF NOT sy-subrc IS INITIAL.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
CALL METHOD v_texto->set_text_as_stream
EXPORTING
text = t_text
EXCEPTIONS
error_dp = 1
error_dp_create = 2
OTHERS = 3.
IF NOT sy-subrc IS INITIAL.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
ENDFORM. " f_recupera_comentarios
Día laboral próximo
CALL FUNCTION 'BKK_GET_NEXT_WORKDAY'
EXPORTING
i_date = p_fecha
i_calendar1 = 'SI'
IMPORTING
e_workday = p_vto
EXCEPTIONS
calendar_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.
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
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).
viernes, 25 de mayo de 2012
ABAP - Sacar el separador decimal
Para eliminar el separador decimal o el de miles.
Hay que directamente ingresar que lo remplace por espacio (realmente lo eliminara).
w_cant = '100.00'.
REPLACE ALL OCCURRENCES OF '.' IN w_cant WITH space.
despues de esta sentencia nos quedara:
w_cant = '10000'. "Todo junto y sin separador
ABAP - Sacar decimales de un número
Si queremos sacar los decimales, primero copiar los datos a una variable tipo char, luego hacer split para separar los datos por el . o la , segun corresponda.
data: w_cant(6) type c,
w_scrap(6) type c.
SPLIT w_cant AT '.' INTO w_cant w_scrap.
sábado, 3 de marzo de 2012
Cantidad de caracteres de un string
Para averiguar la cantidad de caracteres que contiene un string utilizar strlen.
data: x type i,
s(20) type c value 'Hola mundo'.
x = strlen(s).
Vista de actualización que no aparece actualizada
En vista de actualización, si se agrego campo a una tabla con vista y ya existia la vista, el campo nuevo no aparece.
Ir a la vista con la tabla en la transacción se11, actualización de tabla, y borrar la vista (marcar todos los checks),antes tomar nota del grupo de función y datos que pone), crearla de nuevo como si no hubiera existido nunca
Suscribirse a:
Entradas (Atom)