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
Por ejemplo C500 mostrará un verde claro.
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.
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:
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.
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:
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)
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.
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.
Saltear falta de autorización para una transacción
Existe una función llamada: RS_HDSYS_CALL_TC_VARIANT
Ir a la SE37, ejecutar la función, en el parámetro TCODE ponemos la transacción deseada y le sacamos la X al parámetro AUTHORITY-CHECK.
NOTA: No es infalible, puede ser que igualmente no podamos usarlo y ojo porque queda en log el acceso.
Programa para la regeneración de fórmulas
Luego de Crear alguna formula o de algún cambio a nivel de activación. Necesitaremos correr el siguiente reporte
RV80HGEN
Este regenera las fórmulas, al no hacer esto seguramente nos aparezcan Dump al momento de usar fórmulas nuevas. Como buena práctica siempre que se agregan fórmulas debería de correrse.
Fórmulas de SD - VOFM - Agrupación y separación
En la transacción VOFM encontramos varios menues donde entrar esto sirve para el uso de rutinas, que sirven para agrupaciones, calculo de condiciones, etc.
La agrupación y separación sirve para que al momento de facturar pedidos o entregas por ejemplo tenga un cierto criterio de agrupación. Por ejemplo se desea que si varias entregas tienen mismo destinatario (cliente) se agrupen en una sola factura para no hacer una por por cada entrega.
Se va a la sección
La rutina que elegimos tiene que estar seteada en el customizing por el funcional SD
FORM DATEN_KOPIEREN_901.
*Criterio de Agrupamiento
DATA: BEGIN OF ZUK,
KUNNR TYPE LIKP-KUNNR,
END OF ZUK.ZUK-KUNNR = LIKP-KUNNR.
VBRK-ZUKRI = ZUK.
ENDFORM.
Con esta subrutina se va a agrupar las entregas por cliente (KUNNR). Todos los campos que se agreguen a la estrutura ZUK (ZUKRI) van a ser criterios de agrupación. Si dos entregas no coinciden en alguno de los campos especificados se hace una separación.