Crear un AUTHORITY-CHECK

1 -Creamos en la SU20 un ámbito de autorización (elemento de dato) que luego usaremos en el objeto. image

Nombre del campo Z____ y ponemos el elemento de Dato correspondiente a ese campo.

image

y luego image

2 –Creamos la clase de autorización en la SU21

image

image

y luego posicionandonoss en la clase recién creada

image

Elegimos el nombre del objeto y ponemos el campo creado en el punto 1.

image

Grabamos y salimos.

3- Definimos los valores posibles de nuestro campo definido y el BASIS asignará a los roles de los usuarios el objeto de autorización creado y pondrá los valores de cada usuario.

4- En el código fuente

  AUTHORITY-CHECK OBJECT ‘ZBOTONES’    “Objeto creado
      ID ‘ZUCOMM’ FIELD ‘SAVE’.                  “sy-ucomm que tengo que verificar.
  IF sy-subrc EQ 0.
      “El usuario tiene el valor SAVE para dicho campo en su rol
  ELSE.
      “El usuario no tiene el valor SAVE para dicho campo en su rol
  ENDIF.

0 comentarios

Redondeo y decimales en ABAP

Muchas veces tenesmo problemas con el redondeo, acá hay algunas instrucciones útiles para el manejo de los mismos.

 

DATA N TYPE P DECIMALS 2.
DATA M TYPE P DECIMALS 2 VALUE '-5.55'.
N = ABS( M ). WRITE: 'ABS: ', N.
N = SIGN( M ). WRITE: / 'SIGN: ', N.
N = CEIL( M ). WRITE: / 'CEIL: ', N.
N = FLOOR( M ). WRITE: / 'FLOOR:', N.
N = TRUNC( M ). WRITE: / 'TRUNC:', N.
N = FRAC( M ). WRITE: / 'FRAC: ', N.
* The output appears as follows:
*
* ABS: 5.55 (nro absoluto)
*
* SIGN: 1.00-
*
* CEIL: 5.00- (redondea hacia arriba)
*
* FLOOR: 6.00- (redondea hacia abajo)
*
* TRUNC: 5.00- (parte entera)
*
* FRAC: 0.55- (parte decimal)

0 comentarios

Salvar datos en ALV editable con un status bar Z

El otro día me cruce con un error muy bizarro. Yo tenía un ALV editable al cual tuve que agregarle un status bar Z por agregar un botón nuevo.

Copie la status bar standard a mi programa y lo modifique. La status bar STANDARD que esta en el grupo de funciones SALV, no tiene definido el Function Code del boton Grabar (SAVE). entonces le setee el nombre &SAVE.

Que paso ? Si yo cambiaba el valor de algun campo editable del ALV al llegar al USER_COMMAND no veía el nuevo valor ingresado sino que veía el antiguo. Y eso andaba bien por lo cual el error debía estar en la status bar. Y efectivamente así fue.

Para que los datos de un ALV editable sea visibles en el FORM USER_COMMAND, el function code de la status bar tiene que ser &DATA_SAVE. De tener otro nombre la información no es pasada al USER_COMMAND.

0 comentarios

Colores en ALV

Si corremos el reporte DEMO_LIST_FORMAT_COLOR_1, podemos ver los números que podemos usar para los determinados colores en el ALV

 

CODIFICACION DE COLORES: El color del ALV sigue el siguiente formato CXYZ donde...
C-> indica que es un color
X-> indica el numero de color, que debe ser del 1 al 9
Y-> indica la intensidad: ('0'=off / '1'=on).
X-> indica si el color es inverso ('0'=off / '1'=on).

Ejemplo para ver facilmente

image

 

Por ejemplo C500 mostrará un verde claro.

1 comentarios

MD_STOCK_REQUIREMENTS_LIST_API - MD04 - listado de doc. por Material/Centro

Esta función nos permite ver la información de la tx MD04.

 

Mi req. era realizar un reporte con las cantidades disponibles en Ordenes de compra, Ordenes previsionales, Ordenes de producción y Solped. Pero la función trae muchos más doc. se pueden ver todos en el dominio DELKZ.

 

A la función ingresamos con Material y centro y en la tabla MDEZX estará la información necesaria.

0 comentarios

Separar un texto largo cada X cantidad de char o por un símbolo de retorno de carro a una tabla

Esta función RKD_WORD_WRAP , nos permitirá partir un texto largo en X cantidad de caracteres y además podremos tener otro corte de control por un CHAR que le pasemos.

 

Ejemplo:

image

El resultado de esta corrida será una tabla de 7 registros, notese que si no existe el char de retorno de carro nos separará cada 5 chars, si encuentra el simbolo cortará en ese simbolo y comenzará otro renglón.

image

0 comentarios

Pasar el signo negativo de la derecha a la izq

Esto puede resultar tonto, pero hay veces en que los clientes quieren que los números negativos tengan el signo a la izquierda y no a la der. Si bien esto podemos hacerlo trabajando con la cadena de caracteres hay una función que nos simplifica la vida.

CLOI_PUT_SIGN_IN_FRONT

Ejemplo:

image

1 comentarios

Función para ver características y clasificaciones de un Material - Lote

La función QC01_BATCH_VALUES_READ nos permite ver facilmente las características de un Material-Lote

Le pasamos Material, Centro (opcional) y Lote. Además del idioma y fecha del día.

CALL FUNCTION 'QC01_BATCH_VALUES_READ'
EXPORTING
            I_VAL_MATNR    = I_DOCUMENT_DATA-MATNR
            I_VAL_WERKS    = I_DOCUMENT_DATA-WERKS
            I_VAL_CHARGE   = I_DOCUMENT_DATA-CHARG
            I_LANGUAGE     = I_LANGUAGE
            I_DATE             = I_DATE
IMPORTING
            E_CLASS             = L_CLASS
            E_CLASS_TYPE   = L_CLASS_TYPE
TABLES
            T_VAL_TAB        = L_VAL_TAB
            T_CHAR_TAB     = L_CHAR_TAB
            T_ATT_TAB       = L_ATT_TAB
EXCEPTIONS
            NO_CLASS              = 01
            INTERNAL_ERROR = 02
            NO_VALUES           = 03
            NO_CHARS             = 04.

Nos devuelve 3 tablas:

1- Tiene todas las características con valor ese Material-Lote

2- La siguiente nos pasa todas las características posibles que posee ese Material - Lote marcándonos cuales son las que están cargadas

3- La última posee los atributos técnicos de las características (si es numérico, char, etc)

0 comentarios

Lista de materiales de un material en particular

Dejo esta lógica para obtener la lista de materiales de un material. Se que hay funciones para lograr lo mismo porque las he usado pero hoy en día no las tengo a mano.

* Funcion para traer el num de material en el formato del sistema
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
        EXPORTING
          input  = wa_archivo-material
        IMPORTING
          output = l_material.

SELECT SINGLE stlal stlnr
       INTO (wa_stlal, wa_stlnr)
       FROM mast
       WHERE matnr EQ l_material.

SELECT stlkn
       FROM stas
       INTO CORRESPONDING FIELDS OF TABLE it_stas
       WHERE stlnr EQ wa_stlnr AND
                   stlal EQ wa_stlal.
IF it_stas[] IS NOT INITIAL.
   SELECT idnrk posnr
        FROM stpo
        INTO CORRESPONDING FIELDS OF TABLE it_stpo
        FOR ALL ENTRIES IN it_stas
        WHERE stlnr EQ wa_stlnr AND
                   stlkn EQ it_stas-stlkn.
ENDIF.

En la tabla it_stpo el campo IDNRK es el número de material.

0 comentarios

Radio Buttons dinámicos y ocultar/mostrar grupos de parámetros de selección

Una vez necesite hacer una pantalla de selección dinámica, es decir que si elegía un radio button debía mostrar X cantidad de parámetros y ocultar otros, y viceversa sin la necesidad de que tengamos que apretar un ENTER para que se dispare el evento AT-SELECTION-SCREEN.

El siguiente código lo arme como modo ejemplo para que se den cuenta de como usarlo

 

REPORT ZRADIO_BUTTONS.
PARAMETERS: p_1(10) MODIF ID A,
                       p_2(2)   MODIF ID B,
                       p_3(5).
PARAMETERS: p_A RADIOBUTTON GROUP rad1 USER-COMMAND ACT DEFAULT 'X',
                       p_B RADIOBUTTON GROUP rad1.

AT SELECTION-SCREEN OUTPUT.
LOOP AT screen.
  IF p_A = 'X'.
     IF screen-group1 = 'B'.
     screen-active = 0.
     ENDIF.
  ELSEIF p_B = 'X'.
    IF screen-group1 = 'A'.
    screen-active = 0.
    ENDIF.
  ENDIF.

  MODIFY screen.
ENDLOOP.

 

El MODIF ID lo que hace es darle un identificador a cada parámetro por lo cual no es necesario ocultar cada uno de los parámetros, sino que es más práctico ocultar directamente todos los elementos de un grupo.

La adición USER-COMMAND es la que permite que la selección sea dinámica y que no haya que apretar un enter para ejecutar un PAI.

NOTA: Al usar este método es muy molesto tener parámetros de selección OBLIGATORIOS, porque de no estar completos nos va a saltar la validación y los radio button no funcionarán de la forma deseada. Así que de usar Radio buttons dinámicos la validaciones las deberemos hacer manualmente nosotros mismos.

0 comentarios