Hace unos días me formularon esta pregunta. ¿Se podrían añadir un par de campos al listado de órdenes de mantenimiento? Bien, después de darle un par de vueltas e investigar la parametrización me di cuenta que el estándar no lo permitía. Sin embargo, buscando un poco más en google me encontré con este artículo en la wiki de SAP, New field display at IW38 or IW39
Logística / Mantenimiento / Gestión de mantenimiento / Orden
/ Lista de órdenes / IW38 - Modificar
Debía añadir dos campos de una operación de la orden de
mantenimiento en la cabecera del listado. Todo para determinar si la orden
contenía dicha operación sin tener que ir a listar las operaciones de la orden.
Y así evitar tener que consultar también el listado de operaciones en
Logística / Mantenimiento / Gestión de mantenimiento / Orden
/ Lista de operaciones / IW37 - Modificar
Sin embargo, yo no conseguí hacerlo exactamente como se explica
en el artículo. Así que ideé una forma muy parecida en tres pasos.
1. Añadir los campos a la estructura CI_AUFK
-
Vamos al diccionario ABAP.
Herramientas / Workbench ABAP / Desarrollo / SE11 -
Diccionario ABAP
Con estos dos pasos ya hemos añadido nuestros campos a la tabla
de la base de datos que almacenará nuestra información.
2. Hacer visibles los campos en el listado de órdenes
Ahora hay que mostrar los campos que hemos añadido a la tabla
en el listado de órdenes. Para ello buscaremos la estructura sobre la que se
soporta el listado de órdenes, la estructura
RIHAUFK_LIST.
Herramientas / Workbench ABAP / Desarrollo / SE11 -
Diccionario ABAP
-
Vamos a Pasar a / Estructura append.
-
Añadimos los mismos campos que hemos añadido a la estructura CI_AUFK, con la misma definición de datos.
-
Guardamos y activamos.
3. Informar los campos de la tabla AUFK
Finalmente, hay que traspasar la información de la operación en
cuestión a los campos de cabecera de la orden que hemos creado. Este punto fue
el que no conseguí reproducir del artículo de la wiki de SAP. Así que ideé un
pequeño código ABAP que recogiese la información y la actualizase directamente
sobre la tabla AUFK. Como ya sabéis los que me seguís en el blog, no
suelo crear programas y tengo preferencias por las queries que me dan más
flexibilidad y sobre todo rapidez. Los pasos que seguí fueron:
-
Crear una query sobre las tablas AUFK y AFKO (cabecera de la orden).
-
Añadir un pequeño código ABAP adicional sobre esta query a partir de un campo adicional g_ok.
CLEAR g_ok.
IF NOT p_operac IS INITIAL.
* Operación, clave modelo y descripción
SELECT vornr ktsch ltxa1 FROM afvc UP TO 1 ROWS
INTO (afvc-vornr, afvc-ktsch, afvc-ltxa1)
WHERE aufpl = afko-aufpl
ORDER BY vornr.
ENDSELECT.
* Actualización
UPDATE aufk
SET zzktsch = afvc-ktsch
zzltxa1 = afvc-ltxa1
WHERE aufnr = afko-aufnr.
IF sy-subrc = 0.
g_ok = 'X'.
ENDIF.
ENDIF.
De este modo conseguí incorporar los valores de una operación
concreta a los campos que había añadido a la tabla AUFK. Programando el
lanzamiento de la query en un job diario los datos se van
actualizando en la tabla y luego son visibles en el listado. Así podemos mostrar
datos adicionales que no son propios de la cabecera de la orden en el listado de
cabecera de órdenes de mantenimiento.
Imagen inicial | Chrissy Johnson1
Muy buen post. ¿Sabrías cómo se puede añadir un campo a la lista de notificaciones (IW47)?
ResponderEliminarGracias.
Te paso un par de enlaces del foro de la scn
ResponderEliminarhttp://scn.sap.com/thread/1746017
http://scn.sap.com/thread/1746512