lunes, 30 de septiembre de 2013

Añadir nuevos campos a las transacciones QM01/QM02/QM03/QM10

El modulo de QM del sistema Sap, contiene las funcionalidades para grabar y tratar los diferentes problemas de calidad que puedan surgir en la ejecución de servicios o procesos de fabricación. Los avisos de calidad pueden servir de ayudad para tratar problemas tanto internos como externos:
  • Reclamaciones presentadas por clientes
  • Reclamaciones a proveedores
  • Problemas internos
  • Otros problemas propios del usuario
En esta entrada vamos a  explicar como añadir nuevos campos a las transacciones QM01/QM02/QM03/QM10 para la gestión de avisos de calidad.

Creamos un nuevo append a la tabla QMEL con los nuevos campos para los avisos de calidad.

append a la tabla QMEL
El siguiente paso es, añadir una nueva subscreen , que contiene los nuevos campos, a la clase de aviso de calidad correspondiente.

Transacción SPRO -> IMG referencia SAP -> Gestión de calidad -> Aviso de calidad -> Resumen de la clase de aviso


Seleccionamos la clase de aviso que queremos modificar y doble clic en "Formato de imagen p.vista ampliada"


Clases de aviso de calidad
En "Formato de imagen p.vista ampliada" se configuran  todas las pestañas que aparecen a la hora de introducir o visionar datos en las transacciones de QM. Cada pestaña puede contener hasta 5 subscreens.

Doble clic en la pestaña donde queremos incluir la nueva subscreen.

Pestañas asignadas a un aviso de calidad
subcreens asignadas a la pestaña "Ejecución" de la clase de aviso de calidad F2

Antes de  añadir nuestra subscreen, hay que decidir entre el ámbito de imagen 090 y el 091
  • El ámbito de imagen 90:  La subscreen se utilizara en todas las clases de aviso
  • El ámbito de imagen 91:  La subscreen solo se utilizara en la clase de aviso seleccionado
Si utilizamos el ámbito de imagen 90, no tenemos que indicar el número de subscreen. Por defecto, para el ámbito de imagen 90, la subscreen es la número 0090 del grupo de funciones XQQM. Para el ámbito de imagen 91, si que es obligatorio indicar una subcreen,  que debe pertenecer también al grupo de funciones XQQM.

Así que el siguiente paso es crear  una nueva dynpro en el grupo de funciones ZQQM.

 Transacción SE80 -> Grupo de funciones -> XQQM -> Crear -> Dynpro -> nº 0100

Si ya existe una dynpro 0100, pues crearla como 0101 , 102, 103.... a menos que, como hemos dicho, utilicemos el ámbito de imagen 90, que entonces tenemos que crear o modificar la dynpro 0090 del grupo de funciones XQQM.

En la pestaña de atributos, marcar la opción  subscreen para la dynpro y aseguraros de que el número de columnas de la dynpro no excede  de 83.

Grupo de funciones XQQM
Atributos de la dynpro
Añadir los campos de la vista VIQMEL, que contiene los campos de la tabla QMEL  y es la que utilizan las exits como veremos mas adelante,  a la subscreen. Grabar y activar.

editor de dynpros

En este punto, ya es posible ver los campos en las transacciones QM01/QM02/QM03. pero ni guardan , ni muestran ningun dato. necesitamos implementar el código que permita guardar y leer los datos.
    Los nuevos campos ya aparecen en las transacciones pero no funcionan
    Implementar la ampliación QQMA0001 en la transacción CMOD para poder grabar y recuperar los datos.
    Necesitamos implementar las siguientes exits de la ampliación QQMA0001:

    • EXIT_SAPMIWO0_008: Seria el PBO de la subcreen, para transportar los datos desde la base de datos a pantalla.
    • EXIT_SAPMIWO0_009: Seria el PAI de la subcreen, para transportar los datos de la pantalla a la base de datos.
    Si has utilizado los campos de la VIQMEL en la subscreen, no es necesario que implementes la EXIT_SAPMIWO0_008, se traspasan automáticamente. Pero si tendrás que implementar la exit para poder guardar los datos introducidos en las transacciones de QM.

    Doble clic sobre EXIT_SAPMIWO0_009 y aceptamos crear el include ZXQQMU08. Dentro del include, escribimos nuestro código para mover los datos de la base de datos a los campos de la subcreen:

    MOVE: viqmel-ZZCAMPO1 to e_viqmel-ZZCAMPO1,
          viqmel-ZZPERNR  to e_viqmel-ZZPERNR,
          viqmel-ZZCAMPO2 to e_viqmel-ZZCAMPO2.

    Con un breakpoint, se puede ver como mueve los datos antes de guardarlos.
    Y en la transacción SE11 comprobamos que se han guardado los datos en la tabla QMEL

    debugger de la EXIT_SAPMIWO0_009

    Tabla QMEL con los nuevos campos
    Para que veáis como se utilizan las dos exit. vamos a incluir un elemento radio button para ZZCAMPO2 de forma que solo pueda tener 3 valores:  ALTA, MEDIA y BAJA. Modificamos la subscreen y añadimos los radiobuttons con las tres opciones

    Editor de dynpros: radiobuttons
    Las variables globales para el radiobutton las creamos en el include ZXQQMTOP, que se crea haciendo doble clic sobre la instrucción "include ZXQQMTOP" en el include LXQQMTOP del grupo de funciones XQQM.

    include ZXQQMTOP 
    Transacción CMOD, accedemos al proyecto con la ampliación  , si no existe lo creamos y le asignamos la ampliación  saltamos a componentes de la ampliación.


    componentes de la ampliación QQMA0001

    Doble clic sobre EXIT_SAPMIWO0_008 y aceptamos crear el include ZXQQMU07. Dentro del include, escribimos nuestro codigo para mover los datos de la base de datgos a los campos de la subcreen:

    * Radio Button ZZCAMPO2 ( PRIORIDAD)
    CASE viqmel-ZZCAMPO2.
      WHEN 'ALTA'.
        CLEAR: WG_MEDIA, WG_BAJA.
        WG_ALTA = 'X'.
      WHEN 'MEDIA'.
        CLEAR: WG_ALTA, WG_BAJA.
        WG_MEDIA = 'X'.
      WHEN OTHERS.
        CLEAR: WG_MEDIA, WG_ALTA.
        WG_BAJA = 'X'.
    ENDCASE.

    Doble clic sobre EXIT_SAPMIWO0_009 y aceptamos crear el include ZXQQMU07. Dentro del include, escribimos nuestro código para guardar la opción del radiobutton del campo ZZCAMPO2.

    move: viqmel-ZZCAMPO1 to e_viqmel-ZZCAMPO1,
          viqmel-ZZPERNR  to e_viqmel-ZZPERNR.
    
    IF ( WG_ALTA IS NOT INITIAL ).
      MOVE 'ALTA' TO e_viqmel-ZZCAMPO2.
    ELSEIF ( WG_MEDIA IS NOT INITIAL ).
      MOVE 'MEDIA' TO e_viqmel-ZZCAMPO2.
    ELSEIF ( WG_BAJA IS NOT INITIAL ).
      MOVE 'BAJA' TO e_viqmel-ZZCAMPO2.
    ENDIF..

    Y así queda el aviso de calidad:

    aviso de calidad con radiobuttons
    Por ultimo, so queda modificar el listado de avisos de calidad ( transacción QM10 ) para incluir los nuevos campos. Modificamos la estructura RQMQMEL1 y añadimos los nuevos campos.

    append a la estructura RQMQMEL1
    nuevos campos en la QM10

    Referencias:

    3 comentarios:

    1. Buenos días David.

      Gracias por tu articulo esta de lujo man. Te queria preguntar... tienes alguna forma de inahbilitar esos campos en la QM03?.

      Saludos.

      ResponderEliminar
      Respuestas
      1. Muchas gracias!! En la PBO de la subscreen, dentro de un modulo podrías hacer un LOOP AT SCREEN para cambiar los atributos de los campos.

        Eliminar
    2. Buen documento Pregunta hasta cuantos campos es permitido definir para colocar en un nuevo TAB de avisos?

      ResponderEliminar