Etiquetas

Mostrando entradas con la etiqueta Tips. Mostrar todas las entradas
Mostrando entradas con la etiqueta Tips. Mostrar todas las entradas

20170329

ABAP Tips: Imprimir múltiples HRFORM

Función para obtener múltiples HRFORM de un empleado (o de múltiples si se desea) y que permite imprimir en pantalla y exportar el binario para Web Dynpro. Puede ser mejorado sin duda.

FUNCTION zhr_sgu_liquidaciones.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     VALUE(I_PERNR) TYPE  PERSNO
*"     VALUE(I_MES_INI) TYPE  PABRP OPTIONAL
*"     VALUE(I_ANO_INI) TYPE  PABRJ OPTIONAL
*"     VALUE(I_MES_FIN) TYPE  PABRP OPTIONAL
*"     VALUE(I_ANO_FIN) TYPE  PABRJ OPTIONAL
*"  EXPORTING
*"     VALUE(E_RETURN) TYPE  BAPIRET2
*"     VALUE(E_BIN_FILE) TYPE  XSTRING
*"----------------------------------------------------------------------


20150703

ABAP Tips: ALV vía Submit to Spool

Problema: Al ejecutar un reporte vía SUBMIT TO SPOOL el cual imprime un ALV, éste no se imprime en la salida, por ser ejecutado vía Job de Fondo (Batch). Esto se soluciona con la función GET_PRINT_PARAMETERS, como se ve en el siguiente ejemplo:


IF sy-batch = 'X'.
   CLEAR print_parameters.
   report = sy-repid.

   CALL FUNCTION 'GET_PRINT_PARAMETERS'
     EXPORTING
       report               = report
       archive_mode         = '1'
       mode                 = 'BATCH'
       no_dialog            = 'X'
     IMPORTING
       out_parameters       = print_parameters
       valid                = valid_flag
     EXCEPTIONS
       invalid_print_params = 2
       OTHERS               = 4.

   IF valid_flag = 'X' AND sy-subrc = 0.
     SUBMIT zhr_rpuaud00
*     WITH SELECTION-TABLE gt_rspar
     TO SAP-SPOOL
     SPOOL PARAMETERS print_parameters.
   ENDIF.
 ELSE.
   SUBMIT zhr_rpuaud00
*   WITH SELECTION-TABLE gt_rspar
   AND RETURN.
 ENDIF.

20140423

ABAP Tips: Programa que carga cualquier tabla desde un excel (.csv)

Este programa lo encontré hace mil años en una página en chino, permite cargar cualquier tabla "Z"! desde un excel exportado a .csv con los mismos campos que la estructura de la misma, especificándole el nombre de tabla y archivo con datos.


20130107

ABAP TIPS: Algoritmo para Matchcodes dinámicos

El clásico algoritmo que permite generar un matchcode por pantalla, cuando no se tiene uno definido, y que se puede encontrar en cualquier blog:


PARAMETERS p_subty TYPE p9901-subty OBLIGATORY.

*----------------------------------------------------------------------*
* Eventos de Pantalla                                                  *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_subty.
  DATA: BEGIN OF gt_matchcode OCCURS 0,
                subty TYPE subty,
                stext TYPE t591s-stext,
        END OF gt_matchcode.

  DATA lt_return_tab TYPE TABLE OF ddshretval WITH HEADER LINE.

  IF gt_matchcode[] IS INITIAL.

    SELECT subty stext FROM t591s
      APPENDING CORRESPONDING FIELDS OF TABLE gt_matchcode
      WHERE sprsl = sy-langu
        AND infty = '9901'.

  ENDIF.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'SUBTY'
      window_title    = 'Conceptos'
      value_org       = 'S'
    TABLES
      value_tab       = gt_matchcode
      return_tab      = lt_return_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

  IF sy-subrc = 0.
    READ TABLE lt_return_tab INDEX 1.
    MOVE lt_return_tab-fieldval TO p_subty.
  ENDIF.

20121221

ABAP Tips: Indicador de Progreso

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.

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
*"----------------------------------------------------------------------

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
*"----------------------------------------------------------------------
 

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
*"----------------------------------------------------------------------

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
*"----------------------------------------------------------------------

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

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)

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.

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.

20111229

ABAP HR: Buscar el jefe directo de una persona

Una función que lee mediante vías de evaluación el jefe más cercano de una persona, considerando que su Unidad Organizativa no tiene jefe directo.
*&---------------------------------------------------------------------*
*&      Form  BUSCA_JEFE
*&---------------------------------------------------------------------*
FORM busca_jefe  USING    pernr TYPE persno
                 CHANGING idjefe TYPE persno
                          nombrejefe TYPE pad_cname.

20111212

Cachureos SAP.: Respaldar Programas ABAP de Forma FULL (incluyendo...

Copiado de:
Cachureos SAP.: Respaldar Programas ABAP de Forma FULL (incluyendo Dynpros):

Siempre es recomendable respaldar lo que uno Desarrolla en SAP, ya que nunca se sabe que  puede ocurrir, a mí ya me paso que en un cliente se cayeron las maquinas y fue necesario levantar un backup algo desactualizado,  pero bueno, aquí les dejo una forma de prevenir.
Los amigos de http://www.dalestech.com, tienen una excelente aplicación de uso gratuito en la opción solutions “MASS DOWNLOAD”, aprovecho de dar gracias a dalestech por esta excelente herramienta.


UPDATE: Página oficial del desarrollador: http://www.dalestech.com/products/massdownload.htm



ABAP Tips: Leer Ordenes de Transporte y Status

Función que permite obtener órdenes de transporte y su status según parámetros de selección indicados en las tablas titular, ordenes, con retorno en status_ordenes.

ABAP HR Tips: Liquidación Standard a PDF

Tomar la liquidación obtenida desde el resultado de nómina y pasarlo a PDF.

ABAP Tips: Volver a abrir una Orden de Transporte

Un truco sucio pero necesario a veces (considere las limitaciones del mandante) para devolver una OT a su estado original.


report ztest999.
tables e070.


PARAMETERS s_trkorr LIKE e070-trkorr OBLIGATORY.

update e070
set trstatus = 'D' where trkorr = s_trkorr.

write sy-subrc.