Grabación Batch Input (SHDB) – ABAP


#1

Cuando estuve buscando tutoriales para la transacción SHDB no logre encontrar una que me explicara paso a paso la forma que debía trabajar una grabación, por esa razón quiero compartirles un tutorial que espero les ayude.

Transacción para hacer grabaciones: Se utiliza para grabar una serie de pasos y pantallas que se realizan al ejecutar una transacción

PASOS A PARA REALIZAR UNA GRABACIÓN

• Ir a la transacción SHDB.

• Haga clic en Grabación Nueva.

• Coloque el nombre con el que identificara la grabación e indique la transacción a utilizar, finalice presionando el botón “Iniciar Grabación”

• Ejecute la transacción de forma habitual, para este tutorial utilizare la F-37

Realizaremos una grabación de la transacción F-37 con el objetivo de generar una transacción “Z” que permita reducir la cantidad de tiempo invertido para realizar la actividad y minimizar la cantidad de errores en la operación.

Por ultimo debes guardar

• Al concluir observa que se te mostrara la grabación sobre los pasos que ejecutaste al operar la transacción F-37. Procede a guardar y regresar a la pantalla anterior.

• Selecciona la grabación que realizaste y crea el programa

Nota: el mandate tiene que estar abierto para que te deje crear el programa, de lo contrario deberás exportar e importar tu grabación a un ambiente que este abierto.

• Asigna un nombre al programa y le indicas que lo crearas tomando la grabación realizada.

• Asigna un título a tu programa y presiona ver código fuente

• Indica donde almacenaras tu programa, para aspectos prácticos del tutorial yo dejare el programa local.

Nota: Si le indicas un paquete te solicitara orden de transporte

• Observa que ya tenemos nuestro código fuente el cual modificaremos para poder tener una transacción “Z” de la transacción estándar.

• Antes de modificar el código le colocaremos una transacción a nuestro programa
Ingresa a la transacción SE93, coloca el código de la transacción que quieres crear, esta es la que llamara a tu programa cuando a quien la coloque en el Campo comandos.

Coloca una descripción y selecciona la opción como se muestra en la siguiente imagen.

Coloca el programa que creaste en los pasos anteriores y guarda , listo ya tienes tu transacción.

• Procede a ingresar a la transacción SE38, coloca tu programa. Observa los cambios que yo he agregado para ajustar el comportamiento de mi transacción (parámetros de entrada, variables y validación de permisos a la sociedad).


REPORT ZF_37_TUTORIAL
       NO STANDARD PAGE HEADING LINE-SIZE 255.

*&---------------------------------------------------------------------*
*& PARAMETRO DE ENTRADA - PANTALLA
*&---------------------------------------------------------------------*

PARAMETERS:
P_BUKRS LIKE BKPF-BUKRS OBLIGATORY, " SOCIEDAD FI
P_WAERS LIKE BKPF-WAERS OBLIGATORY, " MONEDA OPERACIÓN
P_KURSF LIKE BKPF-KURSF, " TIPO DE CAMBIO
P_NEWKO LIKE KNA1-KUNNR OBLIGATORY, " CLIENTE
P_SGTXT LIKE BSEG-SGTXT, " TEXTO
P_WRBTR LIKE BSEG-WRBTR OBLIGATORY. " IMPORTE

*&---------------------------------------------------------------------*
*& VARIABLES GENERALES
*&---------------------------------------------------------------------*

DATA:
V_FECHA(10) TYPE C, " FECHA
V_MONAT(2) TYPE C, " PERIODO
V_BLART LIKE BKPF-BLART, " DOC. FI
V_WRBTR(15) TYPE C, " IMPORTE
V_KURSF(15) TYPE C, " TIPO CAMBIO
V_MENSAJE(60) TYPE C. "MENSAJE DE AUTORIZACIÓN

selection-screen comment /10(50) text-002.
selection-screen comment /10(83) text-003.
selection-screen comment /10(83) text-004.

*&---------------------------------------------------------------------*
*& PROGRAMA
*&---------------------------------------------------------------------*

" FUNCION DE CONVERSIÓN DE FECHA - SUBRUTINA
*&---------------------------------------------------------------------*
*&      FORM  FO_CONVERT_INPUT_DATE
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->P_CAMPO    TEXT
*----------------------------------------------------------------------*
FORM FO_CONVERT_INPUT_DATE  CHANGING P_CAMPO TYPE CHAR10.
  DATA: LV_DATE TYPE DATUM.
  MOVE P_CAMPO TO LV_DATE.
  CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
    EXPORTING
      DATE_INTERNAL            = LV_DATE
    IMPORTING
      DATE_EXTERNAL            = P_CAMPO
    EXCEPTIONS
      DATE_INTERNAL_IS_INVALID = 1
      OTHERS                   = 2.
  IF SY-SUBRC <> 0.
* IMPLEMENT SUITABLE ERROR HANDLING HERE
  ENDIF.
ENDFORM.                    "FO_CONVERT_INPUT_DATE

INCLUDE ZBDCRECX2_MP.
" Colocar modlo visual CTUMODE = A
"INCLUDE BDCRECX1.

INITIALIZATION.
  FREE MEMORY.

START-OF-SELECTION.

*&---------------------------------------------------------------------*
*& OBJETO DE AUTORIZACIÓN
*&---------------------------------------------------------------------*
CONCATENATE `Usuario no cuenta con permisos para la sociedad ` P_BUKRS
INTO V_MENSAJE.

  authority-check object 'F_BKPF_BUK'
          id 'ACTVT' field '01'
          id 'BUKRS' field P_BUKRS.
  if sy-subrc ne 0.

    MESSAGE V_MENSAJE  TYPE 'E'.
    exit.

  else.

    PERFORM OPEN_GROUP.

    " ALAMACENAR FECHA DEL DIA EN VARIABLE Y PERIODO
    V_FECHA = SY-DATUM.
    MOVE V_FECHA+4(2) TO V_MONAT.
    V_BLART = 'DN'.
    WRITE P_WRBTR TO V_WRBTR.
    WRITE P_KURSF TO V_KURSF.

    " CONVERSIÓN DE FECHA
    PERFORM FO_CONVERT_INPUT_DATE CHANGING V_FECHA.


    " EJECUCIÓN DE TRANSACCIÓN F-37


    PERFORM BDC_DYNPRO      USING 'SAPMF05A' '0113'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'RF05A-ZUMSK'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '/00'.
    PERFORM BDC_FIELD       USING 'BKPF-BLDAT'
                                   V_FECHA. " FECHA OPERAC.
    PERFORM BDC_FIELD       USING 'BKPF-BLART'
                                   V_BLART. " DOC. FI
    PERFORM BDC_FIELD       USING 'BKPF-BUKRS'
                                   P_BUKRS. " SOCIEDAD FI
    PERFORM BDC_FIELD       USING 'BKPF-BUDAT'
                                   V_FECHA. " FECHA OPERAC.
    PERFORM BDC_FIELD       USING 'BKPF-MONAT'
                                   V_MONAT. " PERIODO
    PERFORM BDC_FIELD       USING 'BKPF-WAERS'
                                   P_WAERS. " MONEDA OPERACIÓN
    PERFORM BDC_FIELD       USING 'BKPF-KURSF'
                                   V_KURSF. " TIPO CAMBIO
    PERFORM BDC_FIELD       USING 'RF05A-NEWKO'
                                   P_NEWKO. " CLIENTE
    PERFORM BDC_FIELD       USING 'RF05A-ZUMSK'
                                  'A'.
    PERFORM BDC_DYNPRO      USING 'SAPMF05A' '0304'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'BSEG-SGTXT'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '/00'.
    PERFORM BDC_FIELD       USING 'BSEG-WRBTR'
                                   V_WRBTR. " IMPORTE
    PERFORM BDC_FIELD       USING 'BSEG-MWSKZ'
                                  'A0'.
    PERFORM BDC_FIELD       USING 'BSEG-ZFBDT'
                                   V_FECHA. " FECHA OPERAC.
    PERFORM BDC_FIELD       USING 'BSEG-SGTXT'
                                   P_SGTXT. " TEXTO
    PERFORM BDC_DYNPRO      USING 'SAPMF05A' '0304'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'BSEG-WRBTR'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=BU'.
    PERFORM BDC_FIELD       USING 'BSEG-WRBTR'
                                   V_WRBTR. " IMPORTE
    PERFORM BDC_FIELD       USING 'BSEG-MWSKZ'
                                  'A0'.
    PERFORM BDC_FIELD       USING 'BSEG-ZFBDT'
                                   V_FECHA. " FECHA OPERAC.
    PERFORM BDC_FIELD       USING 'BSEG-SGTXT'
                                   P_SGTXT. " TEXTO
    PERFORM BDC_TRANSACTION USING 'F-37'.


    PERFORM CLOSE_GROUP.

  endif.

• Ejecuta tu transacción y tendrás algo como esto. Transacción “Z” de la transacción estándar F-37.


Carga Masiva Transaccion Z o desde LSMW
Crear transacción y menú en SAP
Campo que no existe en Dynpro
#2

Qué crack, esto es un mega aporte.
Invaluable saber trabajar con Batch Inputs. :clap: :clap: :clap: :clap: :clap:

:top: Artículo promovido. Lo marco como publicación pendiente, me podré en contacto por privado para hacerte unas consultas sobre cómo quieres salir a la luz en el artículo (más info).


#3

Excelente aporte!

Muchas gracias por compartirlo.


#4

Super bueno el tutorial!! Te pasaste, me ayudo mucho, gracias!!


#5

Que padre aporte y muy bien explicado gracias mpalomo se te agradece.


#6

Muy buen aporte! Gracias por compartirlo! Yo justo estoy trabajando con una grabación a la FK02, en la misma tengo que trabajar con las posiciones de las retenciones, y cuando trato de agregar una nueva línea, al ejecutar el Call Transaction, me dice que esa línea no existe en ese programa-campo. Qué se debe hacer? recuerdo que hay un Ok_Code que hace el agregado en esta transacción. Alguien me puede ayudar? Muchas gracias!


#7

Que tal @Gabriela_S al modificar el código del Batch Input debes considerar las dynpros que el manda a llamar, puedes mostrar el código que has generado.

Saludos.


#8

Clap Clap. Muy buen aporte. Gracias¡¡¡


#9

Gran aporte y de invaluable ayuda, es interesante conocer movimiento por lotes en SAP!