Algoritmo de ejemplo para crear correctamente un indicador de progreso en ABAP.
Primero se debe obtener el total de registros o procesos (lv_total), y dentro de un LOOP a los registros a procesar, realizar el algoritmo siguiendo el ejemplo a continuacion :
DATA:
lv_total(7) TYPE n,
lv_actua(7) TYPE n,
lv_porce TYPE i,
lv_resto TYPE i,
lv_texto(40) TYPE c.
lv_total = <cantidad de registros>
lv_actua = 0.
LOOP AT <registros>...
* Progress Indicator
lv_actua = lv_actua + 1.
lv_resto = lv_actua MOD 8.
CONCATENATE 'Procesando partida' lv_actua 'de' lv_total
INTO lv_texto SEPARATED BY space.
IF lv_resto IS INITIAL. "Para no perder tanto performance con el mje
lv_porce = ( lv_actua * 100 ) / lv_total.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = lv_porce
text = lv_texto.
ENDIF.
ENDLOOP.
(Esos pequeños tips que no quiero volver a buscar) By Daniel F. Ruiz, Santiago, Chile.
20121221
20121107
ABAP HR Tips: Inscribir Persona a Tipo de Evento
Esta función permite realizar la inscripción de una Persona a un Tipo de Evento de HR
Transacción: PV00 / PV07
FUNCTION Z_HR_UC35_INSCRIPCIONES.
*"----------------------------------------------------------------------
*"*"Interfase local
*" TABLES
*" T_INSCRIPCIONES STRUCTURE ZXTV_INSCRIPCIONES
*"----------------------------------------------------------------------
Transacción: PV00 / PV07
FUNCTION Z_HR_UC35_INSCRIPCIONES.
*"----------------------------------------------------------------------
*"*"Interfase local
*" TABLES
*" T_INSCRIPCIONES STRUCTURE ZXTV_INSCRIPCIONES
*"----------------------------------------------------------------------
ABAP HR Tips: Función para crear Tipo de Evento
Esta función permite crear una Instancia o Tipo de Evento de HR
Transacción: PSV2
FUNCTION z_hr_uc34_secciones.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(OBJETO_PADRE) TYPE HROBJID
*" VALUE(DATUM) TYPE DATUM
*" EXPORTING
*" VALUE(OBJETO_CREADO) TYPE OBJID
*" VALUE(E_RETURN) TYPE BAPIRET2
*"----------------------------------------------------------------------
Transacción: PSV2
FUNCTION z_hr_uc34_secciones.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(OBJETO_PADRE) TYPE HROBJID
*" VALUE(DATUM) TYPE DATUM
*" EXPORTING
*" VALUE(OBJETO_CREADO) TYPE OBJID
*" VALUE(E_RETURN) TYPE BAPIRET2
*"----------------------------------------------------------------------
ABAP HR Tips: Función para crear Maestro de Evento
Esta función permite crear una Evento de HR
Transacción: S_AHR_61011887
FUNCTION z_hr_uc33_curso_sap.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(BEGDA) TYPE BEGDA OPTIONAL
*" VALUE(ENDDA) TYPE ENDDA OPTIONAL
*" VALUE(OBJETO_PADRE) TYPE HROBJID OPTIONAL
*" VALUE(DES_BREVE) TYPE SHORT_D OPTIONAL
*" VALUE(DES_LARGA) TYPE STEXT OPTIONAL
*" VALUE(DIAS) TYPE DAYCT
*" VALUE(HORAS) TYPE HRSCT
*" VALUE(CAP_MIN) TYPE KAPZ1 DEFAULT '1'
*" VALUE(CAP_OPT) TYPE KAPZ2
*" VALUE(CAP_MAX) TYPE KAPZ3
*" VALUE(PRECIO_INTERNO) TYPE IKOST
*" VALUE(PRECIO_EXTERNO) TYPE EXKOS
*" VALUE(SENCE) TYPE TEXT10
*" EXPORTING
*" VALUE(OBJETO_CREADO) TYPE OBJID
*" VALUE(E_RETURN) TYPE BAPIRET2
*" TABLES
*" PTXT1002 STRUCTURE PT1002
*"----------------------------------------------------------------------
Transacción: S_AHR_61011887
FUNCTION z_hr_uc33_curso_sap.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(BEGDA) TYPE BEGDA OPTIONAL
*" VALUE(ENDDA) TYPE ENDDA OPTIONAL
*" VALUE(OBJETO_PADRE) TYPE HROBJID OPTIONAL
*" VALUE(DES_BREVE) TYPE SHORT_D OPTIONAL
*" VALUE(DES_LARGA) TYPE STEXT OPTIONAL
*" VALUE(DIAS) TYPE DAYCT
*" VALUE(HORAS) TYPE HRSCT
*" VALUE(CAP_MIN) TYPE KAPZ1 DEFAULT '1'
*" VALUE(CAP_OPT) TYPE KAPZ2
*" VALUE(CAP_MAX) TYPE KAPZ3
*" VALUE(PRECIO_INTERNO) TYPE IKOST
*" VALUE(PRECIO_EXTERNO) TYPE EXKOS
*" VALUE(SENCE) TYPE TEXT10
*" EXPORTING
*" VALUE(OBJETO_CREADO) TYPE OBJID
*" VALUE(E_RETURN) TYPE BAPIRET2
*" TABLES
*" PTXT1002 STRUCTURE PT1002
*"----------------------------------------------------------------------
ABAP Tips: Calcular días hábiles entre dos fechas
Esta es una función bastante interesante que permite obtener la cantidad de días hábiles y no hábiles entre dos fechas, donde se contabilizan aparte los sábados, domingos y festivos según el calendario SAP (transacción SCAL).
Cortesía de @AleMadriaza
FUNCTION z_tv_08_dias_habiles.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(I_FECHA_INI) TYPE BEGDA
*" VALUE(I_FECHA_FIN) TYPE ENDDA
*" EXPORTING
*" VALUE(E_DIAS_HABILES) TYPE I
*" VALUE(E_DIAS_NO_HABILES) TYPE I
*" VALUE(E_RETURN) TYPE BAPIRET2
*"----------------------------------------------------------------------
Cortesía de @AleMadriaza
FUNCTION z_tv_08_dias_habiles.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(I_FECHA_INI) TYPE BEGDA
*" VALUE(I_FECHA_FIN) TYPE ENDDA
*" EXPORTING
*" VALUE(E_DIAS_HABILES) TYPE I
*" VALUE(E_DIAS_NO_HABILES) TYPE I
*" VALUE(E_RETURN) TYPE BAPIRET2
*"----------------------------------------------------------------------
20120921
ABAP Tips: Mensaje de Error de una RFC a Bapiret2
Un método útil para esa parte del CALL FUNCTION, cuando el SY-SUBRC es distinto de 0, pasarla directamente a una estructura de tipo BAPIRET2.
En este ejemplo se utiliza para la llamada una Función de OM que permite obtener el siguiente número disponible para la creación de objetos, que también es bastante útil.
CALL FUNCTION 'RH_GET_NEXT_NUMBER'
EXPORTING
action = 'GIVE'
ext_number = l_objid
otype = 'D'
plvar = '01'
IMPORTING
number = l_objid
EXCEPTIONS
invalid_action = 1
number_must_be_zero = 2
invalid_object = 3
no_external_interval_found = 4
no_internal_interval_found = 5
invalid_number = 6
no_more_numbers_available = 7
OTHERS = 8.
IF sy-subrc <> 0.
PERFORM get_message USING sy-msgty sy-msgid sy-msgno
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
CHANGING e_return.
ENDIF.
*&---------------------------------------------------------------------*
*& Form get_message
*&---------------------------------------------------------------------*
FORM get_message USING type id num m1 m2 m3 m4
CHANGING e_ret STRUCTURE bapiret2.
CALL FUNCTION 'BALW_BAPIRETURN_GET2'
EXPORTING
type = type
cl = id
number = num
par1 = m1
par2 = m2
par3 = m3
par4 = m4
IMPORTING
return = e_ret.
ENDFORM. " get_message
En este ejemplo se utiliza para la llamada una Función de OM que permite obtener el siguiente número disponible para la creación de objetos, que también es bastante útil.
CALL FUNCTION 'RH_GET_NEXT_NUMBER'
EXPORTING
action = 'GIVE'
ext_number = l_objid
otype = 'D'
plvar = '01'
IMPORTING
number = l_objid
EXCEPTIONS
invalid_action = 1
number_must_be_zero = 2
invalid_object = 3
no_external_interval_found = 4
no_internal_interval_found = 5
invalid_number = 6
no_more_numbers_available = 7
OTHERS = 8.
IF sy-subrc <> 0.
PERFORM get_message USING sy-msgty sy-msgid sy-msgno
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
CHANGING e_return.
ENDIF.
*&---------------------------------------------------------------------*
*& Form get_message
*&---------------------------------------------------------------------*
FORM get_message USING type id num m1 m2 m3 m4
CHANGING e_ret STRUCTURE bapiret2.
CALL FUNCTION 'BALW_BAPIRETURN_GET2'
EXPORTING
type = type
cl = id
number = num
par1 = m1
par2 = m2
par3 = m3
par4 = m4
IMPORTING
return = e_ret.
ENDFORM. " get_message
20120503
ABAP FI Tips: Liberar Solped y Modificar extensiones "Z"
Este es un pequeño ejemplo de una función realizada, la cual marca la liberación de la solped para el liberador actual, y además, modifica un campo de la extensión "Z", más conocida como ExtensionIn, en este caso, para agregar el nombre del usuario liberador, con la ayuda de la función BAPI_PR_CHANGE.
20120502
TIP: Cómo Hacer un Sort y Subtotal en un LVC
En pocas líneas:
1. Declarar tabla sort
DATA gs_sort TYPE LVC_T_SORT.
2. Llenar tabla sort para los mismos campos del Fieldcat
DATA ls_sort TYPE lvc_s_sort.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'PERNR'.
ls_fieldcat-ref_table = 'PA0001'.
ls_fieldcat-key = 'X'.
APPEND ls_fieldcat TO gs_fieldcat.
CLEAR ls_sort.
ls_sort-spos = '01'.
ls_sort-fieldname = 'PERNR'.
ls_sort-up = 'X'. "sort hacia arriba
ls_sort-subtot = 'X'. "subtotal sobre el campo sumado
APPEND ls_sort TO gs_sort.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'BETRG'.
ls_fieldcat-ref_table = 'PA9092'.
ls_fieldcat-cfieldname = 'WAERS'.
ls_fieldcat-do_sum = 'X'.
APPEND ls_fieldcat TO gs_fieldcat.
3. Agregar tabla a función de generación de LVC.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_buffer_active = 'X'
i_callback_program = g_repid
it_fieldcat_lvc = gs_fieldcat[]
is_layout_lvc = gs_layout
it_sort_lvc = gs_sort "<-- ahi
(... etc)
1. Declarar tabla sort
DATA gs_sort TYPE LVC_T_SORT.
2. Llenar tabla sort para los mismos campos del Fieldcat
DATA ls_sort TYPE lvc_s_sort.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'PERNR'.
ls_fieldcat-ref_table = 'PA0001'.
ls_fieldcat-key = 'X'.
APPEND ls_fieldcat TO gs_fieldcat.
CLEAR ls_sort.
ls_sort-spos = '01'.
ls_sort-fieldname = 'PERNR'.
ls_sort-up = 'X'. "sort hacia arriba
ls_sort-subtot = 'X'. "subtotal sobre el campo sumado
APPEND ls_sort TO gs_sort.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'BETRG'.
ls_fieldcat-ref_table = 'PA9092'.
ls_fieldcat-cfieldname = 'WAERS'.
ls_fieldcat-do_sum = 'X'.
APPEND ls_fieldcat TO gs_fieldcat.
3. Agregar tabla a función de generación de LVC.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_buffer_active = 'X'
i_callback_program = g_repid
it_fieldcat_lvc = gs_fieldcat[]
is_layout_lvc = gs_layout
it_sort_lvc = gs_sort "<-- ahi
(... etc)
20120223
ABAP Tips: Calcular RUT (Chile)
Este es el mi algoritmo definitivo para calcular el RUT de una persona, separado en distintos forms según se necesite (valida RUT, calcula DV y formatea RUT) e integrado en un solo programa validador.
20120130
ABAP: Calcular edad
Para no tener que pensarlo dos veces ...
DATA begda TYPE begda.
DATA endda TYPE endda.
DATA handler TYPE REF TO if_hrpa_message_handler.
DATA i_edad TYPE num2.
DATA endda TYPE endda.
DATA handler TYPE REF TO if_hrpa_message_handler.
DATA i_edad TYPE num2.
endda = sy-datum.
CALL FUNCTION 'HR_ECM_GET_PERIOD_BETW_DATES'
EXPORTING
begda = begda
endda = endda
message_handler = handler
IMPORTING
num_years = i_edad.
20120120
ABAP: Rutina para llamar Smartform
Este es un ejemplo extendido del método para llamar a un Smartform, con la variante de exportar a PDF o a Xstring (comentado porque la función no me trae la tabla llena, hay que cambiar de método dependiendo del requerimiento) y con la variante de HTML, pero aun no he experimentado con esa salida.
20120111
ABAP: Smartform en PDF a XString
Un viejo algoritmo que tuve que implementar en un servidor 4.6C. Antiguamente, la función que convierte a PDF no tenía la opción de exportar el mismo a XString, por lo que tuve que buscar en internet cómo hacer la transformación.
20120110
TIPS: Cómo cambiar el estilo de una celda en ALV
Un buen ejemplo de las características más comunes a la hora de cambiar el formato de una celda en LVC / ALV OO.
ABAP-Changing Cell characteristics in ALV (OOPS)
ABAP-Changing Cell characteristics in ALV (OOPS)
ABAP: Plantilla Base
Curiosamente, lo que más lata da es inicializar un reporte, independiente del módulo. Esta es una plantilla básica que tiene la declaración de todas las secciones necesarias para empezar un reporte.
ABAP HR: Macro para leer Infotipos de OM
Es increible cuántas veces hice SELECT a las tablas de OM por no investigar un poco. Supongo que existe una macro estándar para leer los Infotipos de OM así como existe para HR, pero mientras no la encuentre, ocuparé esta pequeña macro de ejemplo para leer esos registros.
*&---------------------------------------------------------------------*
*& Define RH_READ_INFTY
*&---------------------------------------------------------------------*
*& Define RH_READ_INFTY
*&---------------------------------------------------------------------*
DEFINE rh_read_infty.
*&1 otype
*&2 objid
*&3 infty
*&4 innnn
*&5 begda
*&6 endda
refresh &4.
call function 'RH_READ_INFTY'
exporting
plvar = '01'
otype = &1
objid = &2
infty = '&3'
istat = '1'
* SUBTY = ' '
begda = &5
endda = &6
tables
innnn = &4
* OBJECTS =
exceptions
all_infty_with_subty = 1
nothing_found = 2
no_objects = 3
wrong_condition = 4
wrong_parameters = 5
others = 6
.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
END-OF-DEFINITION.
*&1 otype
*&2 objid
*&3 infty
*&4 innnn
*&5 begda
*&6 endda
refresh &4.
call function 'RH_READ_INFTY'
exporting
plvar = '01'
otype = &1
objid = &2
infty = '&3'
istat = '1'
* SUBTY = ' '
begda = &5
endda = &6
tables
innnn = &4
* OBJECTS =
exceptions
all_infty_with_subty = 1
nothing_found = 2
no_objects = 3
wrong_condition = 4
wrong_parameters = 5
others = 6
.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
END-OF-DEFINITION.
* proceso de ejemplo
DATA p1001 TYPE TABLE OF p1001 WITH HEADER LINE.
rh_read_infty 'O' <objid> 1001 p1001 sy-datum sy-datum.
20120105
ABAP Tips: Texto dinámico en correo
Un resumen con los tips necesarios para construir el texto dinámico en un correo y procesarlo para ser enviado en un e-mail. Se complementa con la entrada ABAP: Enviar correo HTML con adjunto, en la parte que uno construye el String HTML.
20120104
ABAP: Enviar correo HTML con adjunto
Un form que utilicé para enviar correo en formato HTML y que además adjuntaba el mismo mensaje como archivo en Excel.
ABAP HR Tips: Funciones / Macros Interesantes / SPRO
- Funciones
HR_READ_INFOTYPE_AUTHC_DISABLE: deshabilitar autorizaciones para leer infotipo.
- Macros
RP-SEL-EIN-AUS-INIT: Exclir empleados inactivos (Status Ocupación < > 0)
RP_SET_DATA_INTERVAL <Infotipo> <begda> <endda>: Cambiar período de selección de un Infotipo
- SPRO: Enlaces Temporales de Infotipos
Adaptación de procesos de trabajo
Infotipos
(X) Infotipos
Doble click en Infotipo
Doble click en Infotipo Deseado
Enlaces Temporales: Tabla T528A - ZEITB
1: El infotipo debe existir continuamente, sin espacios en blanco y sólo una vez por vez.
Ej: 0002.
T: El enlace temporal depende del subtipo y se ha de extraer de la tabla de subtipos. (Sólo puede existir 1 por vez, con espacio en blanco)
Ej: 0014, 0015.
Z: Se trata en este caso de los infotipos de la Gestión de tiempos. Su enlace temporal se determina (entre otros) mediante la vista Absentismo: Control general (V_T554S_I) y la verificación de colisión de la vista Reacción de enlace temporal para infotipos de la Gestión de tiempos (V_T554Y).
(Pueden existir multiples simultaneamente, saltados)
Ej: 2012, 2001.
20120102
Reporte Estandar PNPCE con Lectura de Cluster
Un buen ejemplo de uso de las macros para leer el cluster de Chile (CL), mezclado con la base de datos PNPCE usado de manera correcta. Llegar y usar.
También permite encontrar todos los usuarios que tienen cluster en algún período.
Reporte estándar HR PNPCE tipo PNP
Ejemplo similar al reporte estándar PNP pero adaptado a los pequeños cambios que trae la PNPCE, con comportamiento clásico (tipo PNP). Llegar y usar. Una vez que entienda la nueva funcionalidad de la PNPCE en lo que respecta a empleados concurrentes, lo iré agregando.
Suscribirse a:
Entradas (Atom)