Archivo

Archive for the ‘ABAP/4’ Category

Crear grupo de autorización para tabla

Caso: se requiere crear un grupo de autorización para asignarlo a una tabla Z, para luego indicarlo al área de Roles & Perfiles para asignación de las autorizaciones correspondientes.

Solución: Se debe ingresar a la transacción SM30, y actualizar la vista V_BRG_54.

Aquí podremos ver los valores del objeto de autorización S_TABU_DIS, creamos un nuevo registro y nos quedará creado el grupo a asignar.

Este cambio solicitará OT de customizing y se podrá utilizar luego en la SE11 (Utilidades-Asignar grupo de autorización) o también cuando seleccionamos Utilidades-Generador actualiz.tab.

Tipos de Popup en SAP – Parte 4 – POPUP ALV GRID

Caso: Encontré un POPUP para visualizar en ALV GRID la información de una tabla interna, adjunto link directo de la fuente ya que fue probado y quedó funcionando.

Fuente: https://blogs.sap.com/2014/05/07/very-simple-alv-in-pop-up-window/

Categorías: ABAP/4 Etiquetas: , , ,

Color en celda de ALV GRID

Caso: Se desea ponerle color a una celda de un ALV.

Solución: Para pintar una celda, podemos utilizar, en el fieldcat del ALV la estructura lvc_t_scol, por ejemplo (sólo pongo lo importante):

TYPES: BEGIN OF ty_alv.
TYPES: name1      TYPE name1,
       cellcolors TYPE lvc_t_scol,
TYPES: END OF ty_alv.
TYPES: tty_alv TYPE STANDARD TABLE OF ty_alv.
DATA: gt_alv TYPE ty_alv OCCURS 0 WITH HEADER LINE,
      gs_alv TYPE LINE OF tty_alv.

FORM layout_alv USING    ls_layout TYPE slis_layout_alv.

  DATA l_color               TYPE lvc_s_scol.

  ls_layout-zebra             = ‘X’.
  ls_layout-colwidth_optimize = ‘X’.

  FIELD-SYMBOLS <fs_report>  LIKE LINE OF gt_alv.
  ls_layout-coltab_fieldname  = ‘CELLCOLORS’.

  UNASSIGN <fs_report>.
  LOOP AT GT_alv ASSIGNING <fs_report>.
    CASE <fs_report>-name1.
      WHEN ‘PEDRO’.
        l_color-fname = ‘NAME1’ .
        l_color-color-col = ‘6’. «ROJO
        l_color-color-int = ‘1’. «INTENSIDAD
        l_color-color-inv = ‘0’. «INVERSO
        APPEND l_color TO <fs_report>-CELLCOLORS.

      WHEN ‘JUAN’.
        l_color-fname = ‘NAME1’ .

        l_color-color-col = ‘3’. «AMARILLO
        l_color-color-int = ‘1’.
        l_color-color-inv = ‘0’.
        APPEND l_color TO <fs_report>-CELLCOLORS.
    ENDCASE.
  ENDLOOP.
ENDFORM.                    » layout_alv

Categorías: ABAP/4 Etiquetas: ,

Cómo obtener las propiedades de los campos

Caso: a veces en la lógica cuando se trabaja con field-symbols o queremos optimizar código necesitamos saber de que tipo es cada campo.

Solución: Si son campos del diccionario de datos podemos utilizar la función DDIF_FIELDINFO_GET, si son de una tabla interna podemos usar el siguiente código:

REPORT obtener_info_campos_itab.

TYPES: BEGIN OF typ_itab,
char20(20) TYPE c,
monto type kbetr,
entero type i,
meins type meins,
cantidad type menge_d,
fecha TYPE sy-datum,
type_p TYPE p LENGTH 12 DECIMALS 3,
END OF typ_itab.

DATA: i_itab TYPE TABLE OF typ_itab,
l_tabledescr_ref TYPE REF TO cl_abap_tabledescr,
l_descr_ref TYPE REF TO cl_abap_structdescr,
wa_table TYPE abap_compdescr.

l_tabledescr_ref ?= cl_abap_typedescr=>describe_by_data( i_itab ).
l_descr_ref ?= l_tabledescr_ref->get_table_line_type( ).

LOOP AT l_descr_ref->components INTO wa_table .
WRITE: / wa_table-name,wa_table-type_kind,
wa_table-length,wa_table-decimals.
ENDLOOP.

BAPI para liberar documentos de venta (VKM1)

Caso: se requería encontrar una BAPI para liberar documentos de venta por bloqueo de facturación (cliente bloqueado por gestión de crédito).

Solución: la función SD_ORDER_CREDIT_RELEASE funciona perfecto, indicándole el documento de venta y si queremos que sea sincrónica la actualización.

CALL FUNCTION 'SD_ORDER_CREDIT_RELEASE'
        EXPORTING
          vbeln       = lv_vbeln
          if_synchron = 'X'.

      

Categorías: ABAP/4, BAPIs Etiquetas: , , , , ,

RS_HDSYS_CALL_TC_VARIANT – Ejecutar transacciones sin tener acceso

Caso: se desea ejecutar una transacción pero no se poseen accesos de ejecución en QAS.

Solución: Existen algunas funciones para saltear la autorización de las transacciones

  • RS_HDSYS_CALL_TC_VARIANT
  • CALL_TRANSACTION_FROM_TABLE

Yo probé la primera, por la SE37  ejecutamos la RS_HDSYS_CALL_TC_VARIANT.
Cargamos el parámetro
TCODE = Transacción a la cual queremos evitar autorización
AUTHORITY_CHECK = » (quitamos la X y dejamos vacío el valor)

Screenshot_1

Ejecutamos….y genial!

Screenshot_2

 

Rangos para fechas Select-options

Caso: un post solo para tener en la bitácora este código para calcular la fecha de inicio-fin de los campos MONAT-GJAHR típicos en libros legales FI.

PERFORM armar_fecha using p_gjahr

s_monat-low

s_monat-high.

FORM armar_fecha USING p_gjahr TYPE gjahr

p_monatl TYPE monat

p_monath TYPE monat.

DATA: w_ifecha TYPE bsid-budat,

w_ffecha TYPE bsid-budat,

w_auxfch TYPE bsid-budat.

CONCATENATE p_gjahr p_monatl ’01’ INTO w_ifecha.

CONCATENATE p_gjahr p_monath ’01’ INTO w_auxfch.

CALL FUNCTION ‘LAST_DAY_OF_MONTHS’

EXPORTING

day_in = w_auxfch

IMPORTING

last_day_of_month = w_ffecha.

IF sy-subrc EQ 0.

r_fecha-low = w_ifecha.

r_fecha-high = w_ffecha.

r_fecha-option = ‘BT’.

r_fecha-sign = ‘I’.

APPEND r_fecha.

ENDIF.

ENDFORM. » ARMAR_FECHA

Categorías: ABAP/4 Etiquetas: , , ,

BAPI_ACC_DOCUMENT_POST – Actualizar campo REBZG

Caso: Al querer modificar los campos REBZG, REBZZ, REBZJ, la BAPI_ACC_DOCUMENT_POST no tiene disponibles los campos.

Solución: Se debe revisar la nota SAP 487722, en la cual indica en la segunda opción (la que utilicé yo) la creación de una BTE por la FIBF.

Pasos:

1. Por lo pronto, se debe hacer la llamada a la BAPI BAPI BAPI_ACC_DOCUMENT_POST con la tabla EXTENSION1 (no agrego todo el código para no aburrir)

DATA:it_bapiacextc TYPE TABLE OF bapiacextc.

DATA lwa_bapiacextc TYPE bapiacextc.

CLEAR lwa_bapiacextc.

lwa_bapiacextc-field1 = lv_posnr.

lwa_bapiacextc-field2 = lwa_out-belnr. » Nro. documento factura

lwa_bapiacextc-field3 = lwa_out-gjahr. » Ejercicio doc.factura

lwa_bapiacextc-field4 = ‘001’. » Posición doc.factura (siempre 001)

APPEND lwa_bapiacextc TO it_bapiacextc.

CALL FUNCTION ‘BAPI_ACC_DOCUMENT_POST’

EXPORTING

documentheader = lwa_header

TABLES

accountgl = lit_accountgl

currencyamount = lit_curr

extension1 = it_bapiacextc » Se habilita esta tabla para enviar el doc.ref.fact

return = lit_return

extension2 = it_bapiparex.

2. Luego por la SE37, copiamos el módulo de función SAMPLE_INTERFACE_RWBAPI01 (en mi caso la copié al módulo ZACT_DOC_REF_FACT_RWBAPI01), en donde vamos a agregar el código para actualizar los campos. Se crea entonces el módulo de funciones: ZACT_DOC_REF_FACT_RWBAPI01.

3. Modificamos la función para modificar los campos

DATA: lw_bapiacextc TYPE bapiacextc.

LOOP AT extension.

MOVE extension TO lw_bapiacextc.

LOOP AT it_accit WHERE posnr = lw_bapiacextc-field1.

it_accit-rebzg = lw_bapiacextc-field2.

it_accit-rebzj = lw_bapiacextc-field3.

it_accit-rebzz = lw_bapiacextc-field4.

modify it_accit.

ENDLOOP.

ENDLOOP.

4. Luego ingresamos a la transacción FIBF para crear una BTE:

5. Finalmente al ejecutar la BAPI, vemos que se actualizan los campos requeridos

DY_GET_CURRENT_TRANSACTION – Diferenciar variantes de transacción

[title DY_GET_CURRENT_TRANSACTION – Diferenciar variantes de transacción]

Caso: se requiere determinar en el código ABAP si estoy en una transacción estándar o en una variante de transacción.

Solución: Creando una variante de transacción para la MB21, me topé con la necesidad de determinar si luego estaba en la estándar o en la variante creada (a la cual la llamé ZMB21). Encontré que podía usar esto:

DATA: lv_tcode TYPE shdtv-tcode.

CALL ‘DY_GET_CURRENT_TRANSACTION’
ID ‘TRANSACTION_NAME’
FIELD lv_tcode.

IF lv_tcode = ‘ZMB21’.
MESSAGE ‘Estoy en la variante de transacción ZMB21’.
ELSEIF lv_tcode = ‘MB21’.
MESSAGE ‘Estoy en la transacción MB21 estándar’.
ENDIF.

3 trucos ABAP para programar menos

Caso: Se enumeran algunos trucos para reducir el tiempo que se tarda programando.

Solución:

Truco 1: Armar estructuras utilizando el botón “MODELO”.

Casi siempre usamos estructuras para nuestros reportes y se pierde mucho tiempo en agregar los campos tipeándolos, veamos este trick usando el “MODELO”, también se pueden ver otras opciones ahí mismo.

Y el resultado final:

2. Copy+Paste de datos en columna

Si nos gusta crear una estructura desde el diccionario y luego completar con el texto TYPE manualmente, aquí un truco:

Seleccionamos los campos para pegarlos en nuestro programa:

He aquí el truco! Usamos ALT+drag and drop del mouse para seleccionar la info y trabajar con ella.

Por ejemplo me traigo los TYPES del punto anterior….o selecciono los tipos de datos y los elimino todos de una vez!

Para eliminar igual, con CTRL+X (cortar) o Suprimir (delete).

3. Uso del TAB para proponer texto personalizado.

Ya sabemos que el TAB nos ayuda a proponernos instrucciones, pero podemos agregar código nuestro? Si, veamos donde: el editor ABAP, en la esquina inferior derecha hay un ícono, lo presionamos.

Ahí en Modelos de códigos podemos ver los actuales y crearnos nuevos, por ejemplo:

Ahora, ya en el código:

Nos aparece el código ingresado

Categorías: ABAP/4 Etiquetas: , , , , , , ,