Completar o quitar ceros a la izquierda de una variable

30 08 2012

* Función que saca los ceros a la izquierda de una variable

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT’
EXPORTING
INPUT = VG_VARIABLE
IMPORTING
OUTPUT = VG_VARIABLE.

* Función que completa con ceros a la izquierda de una variable
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
EXPORTING
INPUT = VG_VARIABLE
IMPORTING
OUTPUT = VG_VARIABLE.





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.




21 08 2012

Algunos Consejos sobre SAP.

  • Inicio de sesión sin estar autorizado
    El Cliente 066 normalmente existe en un sistema SAP, debido a los servicios de EarlyWatch. A menudo, este cliente no tiene los master users. Si es cierto, cualquier persona puede registrarse en el sistema utilizando el cliente 066, el usuario SAP*, y la contraseña PASS. Diviértete  .
  • Especiales de copia y pega
    Hacer clic en el área y presione CTRL + Y. Nos permitirá copiar las líneas a la vez y pegarlas después.
  • Mensajes largos a pie de página
    Hacer clic en el mensaje y mantener pulsado el botón del ratón. Después mover el ratón hacia la izquierda.
  • Log de direct input.
    La transacción BMV0 (Gestión de los log de direct input.) muestra todos los registros de entrada directa.
  • Gráficos en SAPscript
    El programa RSTXLDMC puede ser usado para cargar gráficos tipo TIF en SAP como textos estándar.
  • Agregar iconos
    Comprobar el código de un icono usando la transacción ICON. Puedes encontrar una vista técnica en el include llamado «ICON». Las secuencias de caracteres comienzan y terminan con el símbolo @. Incluso textos planos bajo sistemas operativos puede contener estos caracteres.

    Os dejo aquí un programa que lista todos los iconos que hay en sap

    Cita:
    REPORT ZICONS .
    TABLES: ICON.
    INCLUDE .
    FIELD-SYMBOLS: .

    SELECT * FROM ICON.
    ASSIGN (ICON-NAME) TO .
    WRITE: /(5) , 20 ‘@’,21 ICON-ID+1(2),23 ‘@’,ICON-OLENG,
    ICON-BUTTON,ICON-STATUS,ICON-MESSAGE,ICON-FUNCTION,
    ICON-NAME.
    ENDSELECT.

    Esto es sólo para que puedáis ver todos los que existen, pero para utilizarlos en un report, sólo tenéis que usar un include:

    INCLUDE .
    Y poner por ejemplo:

    WRITE: ICON_RED_LIGHT.

  • LLenar un campo de fecha vacío rápidamente
    [b]Pulsa la tecla F4 ( o pulsa en el simbolo de matchcode) y presiona ESCAPE. Se completará automáticamente con la fecha actual.
  • Configuración del módulo FI / CO sin utilizar IMG
    Casi todos los parámetros se puede ajustar mediante las transacciones ORFA (Contabilidad de Activos), ORFB (Contabilidad Financiera), y BRAS (Centro de Coste de Contabilidad).
  • Análisis de la tabla entre dos sistemas
    El contenido de una tabla entre dos sistemas puede verificarse a través de la OY19 transacción.
  • Formatos de comando generales

    /n Ir al siguiente registro si está procesando una sesión de batch input
    /doble Anular el proceso de batch input en primer plano
    /nend Cierre todas las sesiones R/3 y hace un logoff
    /nxxxx Llame a la transacción xxxx transacción en la misma ventana de SAP
    E / S Generara una lista de sesiones
    /oxxxx Llame a la transacción xxxx en una ventana nueva de SAP
    /i Cierra la venta actual
    /h Actuva el modo de Debug
    /$tab Resetea todos los buffers (para administradores de sistemas)
    /$sync Sincroniza los instances buffers (para administradores de sistemas)

  • Comandos de report
    PRI% Imprime el informe actual
    PC% Descarga el informe actual
    SC% Llama a la función Find
    p+ Ir a la página siguiente
    p- Ir a la página anterior
    p++ Ir a la última página
    P– Ir a la primera página
  • Reports Útiles
    RSCLTCOP Copiar tablas entre clientes
    RSAVGL00 Ajuste de tablas entre clientes
    RSINCL00 Listado de programas extendidos
    RSBDCSUB Liberación de juegos de datos de forma automática
    RSORAREL Obtiene la versión de la base de datos ORACLE
    RSPARAM Permite ver todos los parámetros de sistema
    RSUSR003 Comprueba las claves de acceso de los usuarios SAP* y DDIC en todos los mandantes de un sistema
    BDCRECXX Para batch input
    RBSTCHH0 Para header de batch input
    RSBDC_ANALYSE Analiza los Batch input (Revisar para ver cómo se podrían recuperar los datos de batch)
    RSWATCH0 Browser de ficheros unix
    RSMODPRF Report para ejecutar Field_Exits
    RSTXR3TR Transportar SapScript
    RSTXSCRP Upload/download de objetos SAPscript
    RSTXTCRP Transporte de formularios SAPSCRIPT entre sistemas
    RPDTRA00 Lista todas las transacción de HR
    RSEINB00 Sube un fichero de tipo IDOC y lo crea.
    RSNAST00 Ejecutar un IDOC por report
    RSBDCBTC Ejecuta un job después de la finalización de un determinado batch-input.
    RSTXPDFT4 Report para convertir una número Spool a un PDF
    RSAVGL00 Ajusta tablas entre mandantes.
  • Debugeando en modal window 
    Si quieres entrar en modo debug pero estas en una ventana modal de windows y no puedes acceder al cuadro de transacciones de sap para escribir /H aqui hay una solución que puedes usar.

    Abre el Notepad.

    Copia y pega la siguiente línea:

    [FUNCTION]Command=/HTitle=DebuggerType=SystemCommand

    Guarda el documento como debug.txt

    Abre el Windows Explorer y arrastra el archicodebug.txt dentro de la SAP modal window. Voi la, ya estas en modo debug

Bueno hay muchísimos tips más y los encontraréis en esta sección del foro