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
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
&variable(<)&
Cantidad de caracteres de un string
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
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.
domingo, 13 de mayo de 2012
MMPV - Desplazar periodo MM
Con la transacción MMPV es posible desplazar el período MM.
Apareceran para ingresar los datos de:
from company: A041 (ingresar la sociedad que corrresponda)
to company: A041 (ingresar la sociedad que corrresponda)
periodo: 08 (número que se desea abrir)
fiscal year: 2011 (año del periodo)
X check and close period
x Allow neg. qties in prev. per.
x Allow neg. vals in prev. per.
sábado, 3 de marzo de 2012
Vista de actualización crearle una transacción
trx: SM30
X Omitor imagen inicial
X Heredar propiedades GUI
nombre campo:
VIEWNAME poner nombre vista
UPDATE X
Transacciones de un circuito de compras comun
Transacción VKM1: aprueba credito
Transacción VL01N: crea delivery / VL10A: creación delivery masivo
Transacción VF01: crea factura
MMAM - Modificar tipo de material
En la pantalla te pedirá que ingreses el material y el nuevo tipo de material que quieres que tenga.
MM01 - Para crear un material
MB03 - Ver un movimiento de material
SM35 - Grabación de juegos de datos - batch-inputs
Con la transaccion SM35 se pueden crear o visualizar grabaciones de juegos de datos para utilizarlas por ejemplo para crear batch-inputs.
grabacion:
- grabacion nueva:
juevo de datos:
poner que no lo borre
- grabacion: poner el nombre
- codigo de transaccion: nombre de la transaccion
-- marco
--- programa
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).
Averiguar nombre y apellido de un usuario por medio de tablas
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
Write máscara para mostrar un CUIT
Varios radio button en el mismo renglon
selection-screen: begin of line,
comment 1(16) 'Radio1'.
parameters: p_ambos radiobutton group rad.
selection-screen: comment 22(16) 'Radio2'.
parameters: p_ener radiobutton group rad.
selection-screen: comment 44(27) 'Radio3'.
parameters: p_telco radiobutton group rad.
selection-screen end of line.
SELECTION-SCREEN END OF BLOCK bl4.
SU53 - Para ver que permisos nos faltan
Hacer un beep desde ABAP
REPORT BEEP.
TYPE-POOLS: ole2.
DATA: return TYPE i,
sapinfo TYPE ole2_object.
DATA: BEGIN OF command,
command(12) TYPE c VALUE 'cmd /c echo ',
hex07(1) TYPE x VALUE '07',
END OF command.
*------------------------------------------------------*
START-OF-SELECTION.
CREATE OBJECT sapinfo 'SAPINFO' NO FLUSH.
CALL METHOD OF sapinfo 'EXEC' = return
EXPORTING
#1 = command
#2 = 0.
FREE sapinfo.