P á g i n a | 1
Líder SAP
ABAP
Controle la calidad de sus desarrollos, vigile que
sus desarrolladores trabajen de manera
homogénea, enfoque su estrategia de desarrollo.
¡Aprenda cómo!
GUPTON BRAZILE
P á g i n a | 2
Todos los derechos reservados. Ninguna parte de este libro se puede
reproducir, almacenar en sistema alguno de recuperación, o transmitir
en ninguna forma, o por ningún medio electrónico, mecánico,
fotocopia, grabación o cualquier otro, sin la autorización escrita del
editor.
© Gupton Brazile
email: [email protected] REGISTRO SAFECREATIVE: 1602296717113
P á g i n a | 4
Deuteronomio 28:8
”Jehová enviará su bendición sobre tus graneros y sobre
todo aquello en que pongas tu mano, y te bendecirá en
la tierra que Jehová, tu Dios, te da.”
Reina-Valera 1960 (RVR1960)
Copyright © 1960 by American Bible Society
P á g i n a | 5
Agradecimientos
A mi Dios, de quien soy y a quien sirvo. Que
todo lo puede, y en quien todo lo puedo.
A mis hijos, que me mueven siempre a ser
mejor, Dami y Ángel.
P á g i n a | 6
CONTENIDO
Deuteronomio 28:8 .................................................................................... 4
Agradecimientos ......................................................................................... 5
CONTENIDO ........................................................................................... 6
Introducción................................................................................................ 7
Capítulo 1 Evaluar dónde estamos ............................................................ 9
Capítulo 2 Reporte de Órdenes de Transporte ...................................... 12
Capítulo 3 Analizando el Trabajo de los Desarrolladores ...................... 26
P á g i n a | 7
Introducción
Cuando uno se dedica mucho tiempo a la programación en
SAP ABAP (1), suele suceder después de un tiempo que ve
otros proyectos de tecnología, nace el deseo en uno de poder
dirigir proyectos pues considera que ya se tiene suficiente
experiencia para poder liderar empresas de ese estilo.
A veces, lo que uno quiere es ir avanzando en su carrera y
pasar de ser un simple programador, a llegar a ser el líder de
un equipo de programadores y desarrolladores. Para lograr
esto, no solo se necesita conocer bien el lenguaje de
programación ABAP, sino que también es necesario conocer
algunas de las otras herramientas que ofrece SAP (1), ya sea
transacciones de uso común por funcionales o BASIS, para
poder mejorar, digamos, el rendimiento del sistema o de los
programas. Sabemos que SAP es una herramienta basada en
procesos y en las mejores prácticas para llevar a cabo esos
procesos, así que para poder realizar mejor los desarrollos
hechos en ABAP, se vuelve necesario conocer un poco al
menos de estos procesos que afectan al sistema ERP.
El objetivo de este libro, es mostrar algunas de estas
transacciones, a fin de poder guiar un área de desarrolladores
de ABAP hacia la mejora continua en la entrega de los
programas, a fin de evitar errores en los ambientes de
producción del sistema, homogeneizar la calidad de los
programas, y estandarizar las buenas prácticas de desarrollo
dentro de la misma, para que con el tiempo se liberen
mejores programas, tener un mínimo de errores, poder
P á g i n a | 8
cuantificar la efectividad del equipo de desarrollo, evaluar la
cantidad de trabajo desarrollada por el equipo, conocer los
miembros más productivos del mismo, y detectar áreas de
oportunidad en los desarrollos elaborados en el área, a fin de
siempre mejorar la calidad de los desarrollos y mitigar los
errores que afectan el sistema.
Aclaro: éste NO ES un libro sobre programación en ABAP.
Aquí doy por sentado que el lector ya sabe programar mejor
que peor en el lenguaje de programación ABAP, y ya ha
tenido algo de experiencia en este campo.
Dicho esto, le invito a que siga leyendo para que aprenda
algunas de las actividades que puede realizar para llevar a cabo
todo lo anterior.
Gupton Brazile
(1) SAP, R/3, mySAP, mySAP.com, xApps, xApp y otros servicios y productos SAP mencionados aquí, como también los respectivos logos son marcas registradas de SAP AG en Alemania y en otros países del mundo. Todos los demás productos y servicios mencionados son marcas registradas de sus respectivas compañías. Datos contenidos en este documento sirven solo para propósitos de información. Las especificaciones nacionales de los productos pueden variar en cada país.
P á g i n a | 9
Capítulo 1
Evaluar dónde estamos
El primer paso antes de llevar a cabo cualquier plan, es
saber en dónde estamos parados. Después de esto, definir a
dónde queremos llegar. El siguiente paso, definir nuestra
estrategia para logarlo.
Entonces, la primera actividad que deberíamos evaluar, es
conocer cuántos programas se están desarrollando cada día,
cada semana o cada mes, separar los que están liberados de
los que aún están modificándose (para solo enfocarnos en los
ya liberados), y evaluar los que ya se liberaron para darnos una
idea de la cantidad de trabajo que se está realizando por
nuestros desarrolladores, y conocer la cantidad de errores que
tienen dichos programas, a fin de poder mejorar con el
tiempo.
La segunda actividad, sería definir cuál es la meta de
transportes, y un límite de errores al que queremos llegar,
para que no se pase nunca de dicho límite. Es decir, si por
ejemplo, al recabar la información (ya veremos cómo hacer
esto), nos diera como resultado que se hicieron, no sé, 240
órdenes de transporte, y de todas ellas nos da un total de
1,650 errores, tal vez querríamos que el mes siguiente,
tomando algunas acciones, pudiéramos reducir los errores
para que no pasen de 1,500 y que cada mes pudiéramos irlos
bajando en 100, al cabo de 10 meses la meta sería llegar con
esas mismas 240 órdenes de transporte, pero que no tuvieran
más de 150 errores.
P á g i n a | 10
¿Cómo lograr esto? Bueno, pues hay que definir una
estrategia, que era nuestro tercer paso. Se me ocurre sugerir
que se debe redactar un estándar de mejores prácticas de
desarrollo en ABAP, procedimientos para hacer que la gente
lo conozca y lo ponga en práctica, y posteriormente enfocarse
en darle seguimiento.
En los siguientes capítulos vamos a ver un programa que
recaba las órdenes transporte, la fecha de creación, el usuario
creador del mismo, una breve descripción, y si está liberado o
no.
También veremos, un ejemplo de un procedimiento donde se
redactan los pasos que cualquier desarrollador del área debe
conocer, leer, y comprometerse a aplicar.
Posteriormente, veremos cómo crear una hoja de cálculo
donde se agregarán los errores de cada orden de transporte
para poder evaluarlos en una hoja dinámica, y donde
podremos analizar la cantidad de transportes liberados,
modificados, los errores mensuales, los programadores más
apegados al estándar, el que libera más transportes, y el que
menos.
Además de los puntos que se mencionan arriba, otra de las
cosas que deben entrar en el alcance de lo que un buen líder
de SAP ABAP tiene que hacer, es conocer la cantidad de
DUMPs que suceden en el sistema de producción. Usted
podría preguntar “¿pero qué eso no es tarea de los BASIS?”.
En parte sí, pero también algunos de los DUMPs (no sabemos
ahorita cuáles) pueden ser causa de una mala programación,
no necesariamente debido a la falta de aplicación de alguna
nota de SAP. Y esto hace que el problema caiga en nuestra
cancha, y no en la del área de BASIS.
P á g i n a | 11
Viéndolo con este punto de vista, necesitamos bajar los
DUMPs de producción, clasificarlos en una hoja de cálculo
también, de manera que podamos saber cuántos dumps caen
por día, hacer una estratificación semanal, ver cuántos y cuáles
son los programas afectados haciendo un Pareto de los
mismos para siempre enfocarnos en el 80-20 más relevante,
cuáles son los usuarios más afectados y también hacer un
Pareto (de hecho, yo sugiero en todo lo que se va a comentar,
que siempre se trabaje siguiendo la técnica de Pareto, que
consiste en ordenar los problemas por cantidad y tipo de
mayor a menor, y enfocarse en el 20% principal, pues
comúnmente este 20% suele resolver el 80% de los
problemas. Lo veremos más adelante), y también ver la
clasificación de cuáles son los tipos de error más comunes,
con su respectivo Pareto.
Como menciono, trabajar con Paretos nos va a dar la pauta de
siempre enfocarnos en los problemas más serios y atacarlos en
este orden va a hacer que nuestro esfuerzo rinda más frutos
rápidamente.
Por último, con la información que vayamos obteniendo,
iremos definiendo nuestros KPIs (Key Performance
Indicators – Indicadores Clave de Rendimiento) y veremos si
vamos mejorando o no.
Estoy seguro que si comienza a hacer esto, además de la
programación que tanto le encanta, podrá granjearse con su
jefe un puesto de liderazgo en su equipo de ABAP.
Comencemos!!
P á g i n a | 12
Capítulo 2
Reporte de Órdenes de
Transporte
A continuación presento un programa que le va a ser útil
para conocer la cantidad de órdenes de transporte que se
realizan día con día en su ambiente de desarrollo. Si copia
usted y pega el código en un reporte de ABAP, podrá obtener
la información que comentamos en el capítulo anterior (o al
menos una parte) y veremos después cómo ir agregando la
parte de los errores, que desafortunadamente, es una parte
que hay que hacer manualmente.
Nota: aclaro que tanto el programa como los ejemplos de
reportes en Excel que comento en este libro, están disponibles
como ejemplos para facilitar su uso en una liga que viene al
final de este libro, por si no quiere ir siguiendo paso por paso
la creación del programa o la elaboración de las hojas de
cálculo mencionadas aquí, y se le facilita más copiarlas y solo
vaciar sus datos sobre los ejemplos.
Por favor, copie el programa de abajo y actívelo en su
mandante de desarrollo. No tiene que generarle transporte, así
que lo puede manejar como sólo local.
*&-------------------------------------------------------
--------------*
*& Report ZALV_ORDEN
*&
*&-------------------------------------------------------
--------------*
*&
P á g i n a | 13
*& Nombre del Programa: <ZALV_ORDEN>
*& Paquete : <$TMP>
*& Transacción : <ZUT_ORDEN>
*& Creado por : <RAUL IBAÑEZ>
*& Creado el : <18-AGO-2009>
*& Descripción : <REPORTE DE ORDENES DE TRANSPORT
E>
*&
*&-------------------------------------------------------
--------------*
*& Log de Modificaciones
*&-------------------------------------------------------
--------------*
*& Transporte : <N/A>
*& Modificado por : <Nombre del programador que hizo cam
bios>
*& Modified el : <Fecha de Cambios>
*& Descripción : <Descripción de la Modificació>
*&-------------------------------------------------------
--------------*
REPORT zalv_orden NO STANDARD PAGE HEADING.
*&-------------------------------------------------------
--------------*
*& START-OF-SELECTION
*&-------------------------------------------------------
--------------*
START-OF-SELECTION.
PERFORM llenar_datos.
PERFORM llenar_alv.
PERFORM llenar_encabezado.
PERFORM crear_alv.
END-OF-SELECTION.
*&-------------------------------------------------------
--------------*
*& Include ZAFCOGLR011_TOP
*&-------------------------------------------------------
--------------*
* Tablas
TYPE-POOLS: slis. " ALV
TABLES:
e070.
P á g i n a | 14
*&-------------------------------------------------------
--------------*
*& VARIABLES GLOBALES
*&-------------------------------------------------------
--------------*
DATA:
g_encab(45) TYPE c VALUE 'Reporte de Órdenes de T
ransporte', "Encabezado
g_langu LIKE sy-langu,
g_pspnr(24) TYPE c,
g_lineas TYPE i,
g_aibu TYPE c VALUE ' '.
*&-------------------------------------------------------
--------------*
*& TYPES
*&-------------------------------------------------------
--------------*
TYPES:
ty_e070 LIKE e070,
ty_e07t LIKE e07t.
TYPES:
BEGIN OF t_tabla,
trkorr TYPE e070-trkorr, " TRANSPORTE
tarsystem TYPE e070-tarsystem, " DESTINO DE TRANSPORTE
as4user TYPE e070-as4user, " USUARIO
as4date TYPE e070-as4date, " FECHA
as4text TYPE e07t-
as4text, " DESCRIPCION DE LA ORDEN DE TRANSPORTE
statu(11) TYPE c, " ESTATUS
END OF t_tabla.
*&-------------------------------------------------------
--------------*
*& TABLAS INTERNAS
*&-------------------------------------------------------
--------------*
DATA:
t_orden TYPE SORTED TABLE OF ty_e070 WITH UNIQUE
KEY trkorr WITH HEADER LINE,
t_tarea TYPE STANDARD TABLE OF ty_e070 WITH HEADER
LINE,
t_texto TYPE SORTED TABLE OF ty_e07t WITH UNIQUE
KEY trkorr WITH HEADER LINE, " Idioma
w_texto LIKE LINE OF t_texto,
w_are_e070 TYPE ty_e070,
w_are_e07t TYPE ty_e07t.
P á g i n a | 15
*&-------------------------------------------------------
--------------*
*& CONSTANTES GLOBALES
*&-------------------------------------------------------
--------------*
CONSTANTS: c_program(11) TYPE c VALUE 'ZALV_ORDEN',
c_x TYPE c VALUE 'X',
c_back TYPE char5 VALUE 'BACK',
c_a TYPE c VALUE 'A',
c_err(64) TYPE c VALUE 'No existen re
gistros!!!'. "#EC NOTEXT
DATA: c_trkorr(6) TYPE c VALUE 'TRKORR',
c_tarsystem(9) TYPE c VALUE 'TARSYSTEM',
c_as4user(7) TYPE c VALUE 'AS4USER',
c_as4date(7) TYPE c VALUE 'AS4DATE',
c_as4text(7) TYPE c VALUE 'AS4TEXT',
c_statu(5) TYPE c VALUE 'STATU'.
*&-------------------------------------------------------
--------------*
*& TABLAS PARA ALV
*&-------------------------------------------------------
--------------*
DATA: t_salida TYPE STANDARD TABLE OF t_tabla WITH HEAD
ER LINE,
t_tabla TYPE STANDARD TABLE OF t_tabla WITH HEAD
ER LINE, "tabla principal
t_title TYPE slis_listheader OCCURS 0.
*&-------------------------------------------------------
--------------*
*& AREAS DE TRABAJO
*&-------------------------------------------------------
--------------*
DATA: w_salida LIKE t_salida,
w_title TYPE slis_listheader, " ListHeader
w_tabla LIKE t_tabla.
*&-------------------------------------------------------
--------------*
*& ALV
*&-------------------------------------------------------
--------------*
DATA: catalcamps TYPE slis_t_fieldcat_alv,
opciosalid TYPE slis_layout_alv,
t_sort TYPE slis_t_sortinfo_alv WITH HEADER L
INE,
P á g i n a | 16
st_events TYPE slis_t_event WITH HEADER L
INE.
DATA: st_t_event TYPE slis_alv_event,
l_estructura LIKE dd02l-tabname.
DATA:
w_top_of_page TYPE slis_formname VALUE 'TOP_O
F_PAGE',
w_user_command TYPE slis_formname VALUE 'USER_
COMMAND',
w_pf_status_set TYPE slis_formname VALUE 'PF_ST
ATUS_SET',
gt_list_top_of_page TYPE slis_t_listheader.
TYPES: BEGIN OF log,
field1(15),
field2(100),
END OF log.
DATA: t_bdcdata TYPE STANDARD TABLE OF bdcdata WITH
HEADER LINE,
t_messages TYPE STANDARD TABLE OF bdcmsgcoll WITH
HEADER LINE,
t_log TYPE STANDARD TABLE OF log WITH
HEADER LINE,
t_class TYPE STANDARD TABLE OF sclass WITH
HEADER LINE,
t_objectdata TYPE STANDARD TABLE OF clobjdat WITH
HEADER LINE.
DATA: ls_line TYPE slis_listheader.
DATA: c_vbtyp_v LIKE vbfa-vbtyp_v VALUE 'C'.
*&-------------------------------------------------------
--------------*
*& SELECTION SCREEN, SELECT-OPTIONS & PARAMETERS
*&-------------------------------------------------------
--------------*
SELECTION-
SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-
t01. " PARAMETROS DE SELECCION
SELECT-OPTIONS:
s_user FOR e070-as4user DEFAULT sy-uname, " USUARIO
s_data FOR e070-as4date DEFAULT sy-datum. " FECHA
SELECTION-SCREEN END OF BLOCK block1.
P á g i n a | 17
*Selection texts
*--------------------------------------------------------
--
* P_USER Usuario
* S_DATA Fecha
*Text elements
*--------------------------------------------------------
--
* 001 Transporte
* 002 Usuario
* 003 Fecha
* 004 Descripción de la orden de transporte
* 005 Estatus
*&-------------------------------------------------------
--------------*
*& Include ZAFCOGLR011_F001
*&-------------------------------------------------------
--------------*
*&-------------------------------------------------------
--------------*
*& Form VALIDAR_SEGURIDAD
*&-------------------------------------------------------
--------------*
* text
*--------------------------------------------------------
--------------*
* --> p1 text
* <-- p2 text
*--------------------------------------------------------
--------------*
*&-------------------------------------------------------
--------------*
*& Form CREAR_ALV
*&-------------------------------------------------------
--------------*
* text
*--------------------------------------------------------
--------------*
* --> p1 text
* <-- p2 text
*--------------------------------------------------------
--------------*
FORM crear_alv .
P á g i n a | 18
CLEAR catalcamps.
REFRESH catalcamps.
* ACTIVAR OPCIONES DE PRESENTACIÓN O SALIDA
opciosalid-
colwidth_optimize = c_x. "Optimiza ancho de columnas del
ALV
opciosalid-
zebra = c_x. "Hace patron de zebra en el ALV
t_sort-
fieldname = c_trkorr. " Campo por el que se ordena el ALV
t_sort-up = c_x. " Ordena ascendentemente
APPEND t_sort. " Anexa a la tabla de orden
amiento
DATA: ls TYPE slis_fieldcat_alv.
REFRESH catalcamps.
CLEAR catalcamps.
CLEAR ls.
ls-fieldname = c_trkorr.
ls-seltext_l = text-001. " TRANSPORTE
ls-key = c_x.
APPEND ls TO catalcamps.
CLEAR ls.
ls-fieldname = c_tarsystem.
ls-seltext_l = text-006. " DESTINO DE TRANSPORTE
ls-key = c_x.
APPEND ls TO catalcamps.
CLEAR ls.
ls-fieldname = c_as4user.
ls-seltext_l = text-002. " USUARIO
* ls-key = c_x.
APPEND ls TO catalcamps.
CLEAR ls.
ls-fieldname = c_as4date.
ls-seltext_l = text-003. " FECHA
ls-key = c_x.
APPEND ls TO catalcamps.
CLEAR ls.
ls-fieldname = c_as4text.
ls-seltext_l = text-
004. " DESCRIPCION DE LA ORDEN DE T.
APPEND ls TO catalcamps.
P á g i n a | 19
CLEAR ls.
ls-fieldname = c_statu.
ls-seltext_l = text-005. " ESTATUS
APPEND ls TO catalcamps.
CLEAR st_events .
st_events-name = 'TOP_OF_PAGE'. "Coloca encabezado
st_events-
form = 'LLENAR_ENCABEZADO'. "Rutina del encabezado
APPEND st_events .
* Asigna a l_lineas el número de líneas encontradas con e
l criterio de selección
DESCRIBE TABLE t_salida LINES g_lineas.
IF g_lineas EQ 0.
MESSAGE c_err TYPE c_a. " No existen datos para los c
riterios de selección suministrados.
ELSE.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = 'ZALV_ORDEN' " De aquí toma lo
s encabezados
is_layout = opciosalid
it_fieldcat = catalcamps
it_events = st_events[]
it_sort = t_sort[]
i_save = 'A'
TABLES
t_outtab = t_salida. " Tabla interna par
a el ALV
ENDIF.
ENDFORM. " CREAR_ALV
*&-------------------------------------------------------
--------------*
*& Form LLENAR_DATOS
*&-------------------------------------------------------
--------------*
* text
*--------------------------------------------------------
--------------*
* --> p1 text
* <-- p2 text
*--------------------------------------------------------
P á g i n a | 20
--------------*
FORM llenar_datos.
CLEAR: t_orden, t_tarea, t_texto.
SELECT *
INTO TABLE t_tarea
FROM e070
WHERE as4user IN s_user
AND as4date IN s_data.
IF sy-subrc <> 0.
MESSAGE 'No se encontraron datos en la tabla E070.' T
YPE 'I' .
ENDIF.
SORT t_tarea BY strkorr.
DELETE ADJACENT DUPLICATES FROM t_tarea COMPARING strko
rr.
DELETE t_tarea WHERE strkorr IS INITIAL.
IF NOT t_tarea[] IS INITIAL.
SELECT *
INTO TABLE t_orden
FROM e070
FOR ALL ENTRIES IN t_tarea
WHERE trkorr EQ t_tarea-strkorr.
IF sy-subrc EQ 0.
SELECT *
INTO TABLE t_texto
FROM e07t
FOR ALL ENTRIES IN t_orden
WHERE trkorr EQ t_orden-trkorr AND
langu EQ sy-langu OR
langu EQ 'EN'. " RI20090-
20140519 Encuentra la descripción en inglés
DELETE ADJACENT DUPLICATES FROM t_texto COMPARING t
rkorr.
ENDIF.
ENDIF.
* Mueve los registros de tab_orden a la tabla de salida d
el ALV
LOOP AT t_orden.
MOVE-CORRESPONDING t_orden TO t_tabla.
CASE t_orden-trstatus.
WHEN 'A' OR 'D' OR 'L'.
t_tabla-statu = 'Modificable'.
WHEN OTHERS.
P á g i n a | 21
t_tabla-statu = 'Liberada'.
ENDCASE.
APPEND t_tabla.
ENDLOOP.
LOOP AT t_texto.
READ TABLE t_tabla WITH KEY trkorr = t_texto-trkorr.
IF sy-subrc EQ 0.
MOVE t_texto-as4text TO t_tabla-as4text.
MODIFY t_tabla INDEX sy-tabix.
ENDIF.
ENDLOOP.
ENDFORM. " LLENAR_DATOS
*&-------------------------------------------------------
--------------*
*& Form LLENAR_ENCABEZADO
*&-------------------------------------------------------
--------------*
* text
*--------------------------------------------------------
--------------*
* --> p1 text
* <-- p2 text
*--------------------------------------------------------
--------------*
FORM llenar_encabezado.
DATA: l_subtitulo(60) TYPE c,
l_char(10) TYPE c.
l_char = g_lineas.
REFRESH t_title.
CONSTANTS c_title TYPE c VALUE 'H'. " H = Header S = St
andard A = Action (italic)
* Primer encabezado del reporte
w_title-typ = c_title. " 'H' Tamaño grande o header
w_title-
info = g_encab. " Valor del encabezado principal
APPEND w_title TO t_title.
CLEAR w_title.
CONSTANTS c_subtitle TYPE c VALUE 'S'. " H = Header S =
Standard A = Action (italic)
CONCATENATE 'Registros encontrados: ' l_char INTO l_sub
titulo.
* Segundo encabezado del reporte
P á g i n a | 22
w_title-typ = c_subtitle. " 'S' Tamaño estándar
w_title-
info = l_subtitulo. " Valor del encabezado secundario
APPEND w_title TO t_title.
CLEAR w_title.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = t_title[].
ENDFORM. " LLENAR_ENCABEZADO
*&-------------------------------------------------------
--------------*
*& Form LLENAR_ALV
*&-------------------------------------------------------
--------------*
* text
*--------------------------------------------------------
--------------*
* --> p1 text
* <-- p2 text
*--------------------------------------------------------
--------------*
FORM llenar_alv .
LOOP AT t_tabla.
CLEAR w_salida.
w_salida-trkorr = t_tabla-trkorr.
w_salida-tarsystem = t_tabla-tarsystem.
w_salida-as4user = t_tabla-as4user.
w_salida-as4date = t_tabla-as4date.
w_salida-as4text = t_tabla-as4text.
w_salida-statu = t_tabla-statu.
APPEND w_salida TO t_salida.
ENDLOOP.
ENDFORM. " LLENAR_ALV
Programa ZALV_ORDEN.
Este programa, solicita como entrada el usuario o usuarios de
los que usted desea conocer los transportes que han liberado,
y la fecha o fechas en las que quiere evaluar dichos
transportes. Vea la figura 1.
P á g i n a | 23
Figura 1. Reporte de Órdenes de Transporte.
Puede meter como parámetros de entrada, un * (asterisco) en
el usuario, para indicarle al programa que quiere que
despliegue las órdenes de transporte de TODOS los usuarios,
y en la fecha, darle la fecha del mes en curso, por ejemplo, del
01.02.2016 al 29.02.2016. El resultado, sería algo parecido al
de la figura 2, reporte de órdenes de transporte.
Figura 2. Resultado del Reporte de Órdenes de Transporte.
P á g i n a | 24
Para poder trabajar con este reporte, va a ser necesario
descargarlo a una hoja de cálculo, por lo que seguiremos los
siguientes pasos:
1. Hacer clic en el ícono de Fichero local.
2. Seleccionar de la ventana Grabar lista fichero la opción
Texto con tabuladores, y hacer clic en el ícono de
aceptar .
3. Después, hay que seleccionar una carpeta para guardar
nuestro archivo de Excel, digamos, C:\ y darle un nombre,
que bien podría ser ORDENES_201602.xls
P á g i n a | 25
4. Hacemos clic en el botón crear y listo, nuestro archivo ya se
debió haber grabado.
Nuestro archivo deberá ser algo como el que se muestra a
continuación.
Figura 3. Resultado en Excel del Reporte de Órdenes de
Transporte.
Ahora tenemos que procesarlo, como indicaremos en el
próximo capítulo.
P á g i n a | 26
Capítulo 3
Analizando el Trabajo de los
Desarrolladores
Ahora con el archivo resultante del capítulo anterior, hay
que trabajar para irlo transformando y obtener todos los
indicadores que necesitamos referentes a las órdenes liberadas
por el equipo de desarrollo.
Lo primero, es agregar una columna con el nombre del
usuario, a fin de tener este detalle en el reporte. Al final debe
quedar como la figura 4.
Figura 4. Se inserta la columna NOMBRE para agregar el
nombre del usuario que programó dicho transporte.
Solo para no dejar con la duda a nadie, puede usar la
transacción SU01D para que, dado el usuario, conocer el
nombre del mismo. Ver Figura 5 a, b y c.
P á g i n a | 27
Figura 5 a. Se introduce la transacción su01d.
Figura 5 b. Se introduce el usuario y se presiona el ícono de
los lentes .
P á g i n a | 29
Otros títulos del autor:
Guía Rápida de SAP Archiving – ¡Aprenda los pasos principales para
hacer un Archiving en SAP!
Cómo Controlar un Pequeño Negocio – ¡Aprenda una forma metódica
de controlar su negocio, con ejemplos y plantillas para aplicarlos a su
negocio!
Más títulos del autor se pueden encontrar en:
http://www.lulu.com/spotlight/gupton_brazile
email: [email protected]
Blog: http://guptonbrazile.bltmexico.com
P á g i n a | 30
o
Gupton Brazile Nació en Poza Rica, Veracruz el 27 de Septiembre de 1969.
Es Ingeniero en Computación y Consultor de SAP,
aficionado a las artes marciales y la lectura ecléctica. Este
es su cuarto libro.
Conocer si sus programadores se están
apegando a los estándares definidos en
la empresa, saber cuántos errores se
liberan cada mes por programador, quién
es el que más transportes libera, o tener
un pareto de los programas más
afectados en su sistema, y los usuarios
más afectados por los errores de
programación y así poder hacer una
estrategia de mejora continua en su área,
son algunas de las cosas que se enseñan
en este libro.
Defina sus estrategias de mejora en SAP
basado en transacciones comunes,
aunado a un programa que le ayudará a
tener el control y la visibilidad de la
calidad de los transportes liberados en su
empresa.
Líder
SAP
ABAP
GUPTON BRAZILE
Top Related