30
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

Líder SAP ABAPbltmexico.com/ebook/LSA-CM.pdf · 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

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

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 | 3

LLííddeerr SSAAPP

AABBAAPP

Por Gupton Brazile

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 | 28

Figura 5 c. Se ve el nombre completo de dicho usuario.

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