22 08 2012

SAPGUI_SET_FUNCTIONCODE – Simulación enter o cualquier comando en browser.

Esta función permite ejecutar comandos en el browser de SAP, el =00 simulará un enter. Pero por ejemplo si ponemos el comando /i se cerrará la ventana.

Nos puede ser útil en alguna situación done hay que obtener algún valor que aparece luego de un enter, para disparar alguna validación o abrir otra tx.

CALL FUNCTION ‘SAPGUI_SET_FUNCTIONCODE’
EXPORTING
functioncode = ‘=00′
EXCEPTIONS
function_not_supported = 1
OTHERS = 2.

IMPORTANTE: si se usa en un module pool cuidado con el loop infinito, porque el enter disparará un PAI, se mostrará el PBO y luego el enter nuevamente disparará el PAI y así sucesivamente.

Y tampoco sirve para programas ejecutados de fondo, ya que usa el GUI.

FIMA_DAYS_AND_MONTHS_AND_YEARS – Diferencia de días, meses años entre dos fechas

Con la función FIMA_DAYS_AND_MONTHS_AND_YEARS podremos ver la diferencia en días, meses y años que tienen dos fechas ingresadas como parámetro.

El ejemplo que sigue saca la diferencia entre el LOW y HIGH de un select option.

DATA: l_dif TYPE VTBBEWE-ATAGE.

CALL FUNCTION ‘FIMA_DAYS_AND_MONTHS_AND_YEARS’

EXPORTING

I_DATE_FROM          = so_AIDAT-LOW

I_DATE_TO            = so_AIDAT-HIGH

IMPORTING

E_DAYS               = l_dif.

BAPI_SALESDOCUMENT_COPY – Creación Pedido con referencia a una factura

Si usamos la BAPI_SALESORDER_CREATEFROMDAT2 el pedido creado sufrirá una redeterminación de precio. Si nosotros necesitamos que el pedido tenga las mismas condiciones que la factura debemos utilizar la bapi BAPI_SALESDOCUMENT_COPY

image

Si bien el parámetro dice salesdocument ahí introducimos el número de factura de referencia y en documenttype pondremos la clase de pedido que deseamos crear.

‘RKE_DELETE_REPORT’ Función que elimina un programa report

Está función sirve para cuando necesitamos ejecutar un programa que se debe correr una sola vez (inicialización de alguna tabla o borrar registros erroneos).

Al final del programa llamamos a la función que tiene un único parámetro que es el nombre del programa.

Por lo cual el programa se ejecuta y luego es borrado, de esta forma se evita que se vuelva a correr o dejar un programa innecesario.

‘GET_JOB_RUNTIME_INFO’ – Función que nos devuelve el nombre del job ejecutándose (runtime)

Si por algún motivo necesitamos saber el nombre del job con el cual un report está siendo ejecutado podemos usar la siguiente función. Útil cuando se necesita usar una lógica particular si el reporte es ejecutado con determinado nombre.

DATA: l_job TYPE ZRPT_HPARAM1-DESCRIPCION.

CALL FUNCTION ‘GET_JOB_RUNTIME_INFO’
IMPORTING
JOBNAME                       = l_jobname
EXCEPTIONS
NO_RUNTIME_INFO               = 1
OTHERS                        = 2 .

LT_DBDATA_READ_FROM_LTDX – Catálogo de una variante de disposición

Con esta función se podrá leer el catálogo de una variante de disposición.

A mi particularmente me fue útil al tener que bajar en .xls un reporte grid que era corrido de fondo.

DATA: l_varkey    TYPE LTDXKEY,
TI_LTDXDATA TYPE TABLE OF LTDXDATA WITH HEADER LINE,
WA_LTDXDATA TYPE LTDXDATA,

l_variante = ‘Nombre_variante’

l_varkey-REPORT = sy-repid.
l_varkey-VARIANT = l_variante.
l_varkey-TYPE = ‘F’.

* Se lee el catálogo de la variante
CALL FUNCTION ‘LT_DBDATA_READ_FROM_LTDX’
EXPORTING
I_TOOL             = ‘LT’
IS_VARKEY          = l_varkey
TABLES
T_DBFIELDCAT       = TI_LTDXDATA
EXCEPTIONS
NOT_FOUND          = 1
WRONG_RELID        = 2
OTHERS             = 3 .
IF SY-SUBRC = 0.

Conversión de unidades (UOM)

EDIT: descubrí que otra opción más sencilla es usar la función: “MD_CONVERT_MATERIAL_UNIT”  a la cual tan solo le tenemos que pasar MATNR, Unidad Origen, Unidad Destina y Cantidad

La función que utilizamos para convertir unidades es la “MATERIAL_UNIT_CONVERSION”

Navegando por inet encontre una subrutina que hizo un chico para que sea más entendible. Simplemente pasamos el material, cantidad y unidad origen y nos devuelve la cantidad y unidad destino que deseemos.

form convert_to_base_uom
  using    pf_matnr     type matnr
           pf_menge_in  type gsmng
           pf_meins_in  type meins
  changing pf_menge_out type gsmng
           pf_meins_out type meins. 

* define internal table to cache the base UOM
  types: begin of lty_meins_rec,
             matnr type matnr,
             meins type meins,
           end of lty_meins_rec. 

  types:
    lty_meins_tab type hashed table of lty_meins_rec
          with unique key matnr.
  data:
    ls_wa type lty_meins_rec. 

  statics:
    lt_meins type lty_meins_tab. 

* first, find the base UOM
  clear pf_meins_out.
  read table lt_meins into ls_wa
    with table key matnr = pf_matnr.
  if sy-subrc = 0.
    pf_meins_out = ls_wa-meins.
  else.
    select single meins
      from mara
      into ls_wa-meins
      where matnr = pf_matnr.
    if sy-subrc  0.  "doesn't exist. try PC
      ls_wa-meins = 'ST'.
    endif.
    ls_wa-matnr = pf_matnr.
    pf_meins_out = ls_wa-meins.
    insert ls_wa into table lt_meins.
  endif. 

* now convert the qty
  if pf_meins_in = pf_meins_out.
    pf_menge_out = pf_menge_in.
  else.
    call function 'MATERIAL_UNIT_CONVERSION'
         exporting
              input                = pf_menge_in
              kzmeinh              = 'X'
              matnr                = pf_matnr
              meinh                = pf_meins_in
              meins                = pf_meins_out
              type_umr             = '3'
         importing
              output               = pf_menge_out
         exceptions
              conversion_not_found = 1
              input_invalid        = 2
              material_not_found   = 3
              meinh_not_found      = 4
              meins_missing        = 5
              no_meinh             = 6
              output_invalid       = 7
              overflow             = 8
              others               = 9. 

  endif. 

endform.

Valores fijos de un dominio – DDIF_DOMA_GET

Si se desea obtener los valores fijos de un dominio podemos usar la función DDIF_DOMA_GET

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    DATA l_name LIKE dcobjdef-name.
    DATA it_dd07v LIKE dd07v OCCURS 0 WITH HEADER LINE.

    REFRESH: it_dd07v.
    l_name = 'STATV'.
    CALL FUNCTION 'DDIF_DOMA_GET'
         EXPORTING
              name          = l_name
              langu         = sy-langu
         TABLES
              dd07v_tab     = it_dd07v
         EXCEPTIONS
              illegal_input = 1
              OTHERS        = 2.
    IF sy-subrc = 0.
       SORT it_dd07v BY domvalue_l.
       READ TABLE it_dd07v WITH KEY  domvalue_l = TI_TABLE-GBSTK.
       IF sy-subrc = 0.
         TI_TABLE-ESTADO = it_dd07v-DDTEXT.
       ENDIF.
    ENDIF.

Leer un set de Datos

Muchas veces en lugar de utilizar una tabla Z para leer datos variables, podemos usar un set de datos (G02, GS02, GS03). El cual se lee de la siguiente forma.

Primero usamos la función G_SET_GET_ID_FROM_NAME para obtener el nombre “interno” del set y luego la función G_SET_FETCH nos devuelve los valores del set.

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
CALL FUNCTION 'G_SET_GET_ID_FROM_NAME'
  EXPORTING
    shortname                      = 'CME_RET_IMP_CUENTAS'
  IMPORTING
    NEW_SETID                      = lv_setid
  EXCEPTIONS
    NO_SET_FOUND                   = 1
    NO_SET_PICKED_FROM_POPUP       = 2
    WRONG_CLASS                    = 3
    WRONG_SUBCLASS                 = 4
    TABLE_FIELD_NOT_FOUND          = 5
    FIELDS_DONT_MATCH              = 6
    SET_IS_EMPTY                   = 7
    FORMULA_IN_SET                 = 8
    SET_IS_DYNAMIC                 = 9
    OTHERS                         = 10.

IF sy-subrc = 0.
  CALL FUNCTION 'G_SET_FETCH'
    EXPORTING
      setnr                     = lv_setid
    TABLES
      SET_LINES_BASIC           = TI_RGSBV
    EXCEPTIONS
      NO_AUTHORITY              = 1
      SET_IS_BROKEN             = 2
      SET_NOT_FOUND             = 3
      OTHERS                    = 4.
ENDIF.

Acciones

Information

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: