04.04.2016 Views

Líder SAP ABAP

LSA-CM

LSA-CM

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Líder</strong> <strong>SAP</strong><br />

<strong>ABAP</strong><br />

Controle la calidad de sus desarrollos, vigile que<br />

sus desarrolladores trabajen de manera<br />

homogénea, enfoque su estrategia de desarrollo.<br />

¡Aprenda cómo!<br />

GUPTON BRAZILE<br />

P á g i n a | 1


Todos los derechos reservados. Ninguna parte de este libro se puede<br />

reproducir, almacenar en sistema alguno de recuperación, o transmitir<br />

en ninguna forma, o por ningún medio electrónico, mecánico,<br />

fotocopia, grabación o cualquier otro, sin la autorización escrita del<br />

editor.<br />

© Gupton Brazile<br />

email: Gupton.brazile@hotmail.com<br />

REGISTRO SAFECREATIVE: 1602296717113<br />

P á g i n a | 2


<strong>Líder</strong> <strong>SAP</strong><br />

<strong>ABAP</strong><br />

Por Gupton Brazile<br />

P á g i n a | 3


Deuteronomio 28:8<br />

”Jehová enviará su bendición sobre tus graneros y sobre<br />

todo aquello en que pongas tu mano, y te bendecirá en<br />

la tierra que Jehová, tu Dios, te da.”<br />

Reina-Valera 1960 (RVR1960)<br />

Copyright © 1960 by American Bible Society<br />

P á g i n a | 4


Agradecimientos<br />

A mi Dios, de quien soy y a quien sirvo. Que<br />

todo lo puede, y en quien todo lo puedo.<br />

A mis hijos, que me mueven siempre a ser<br />

mejor, Dami y Ángel.<br />

P á g i n a | 5


CONTENIDO<br />

Agradecimientos ......................................................................................... 5<br />

CONTENIDO ........................................................................................... 6<br />

Introducción................................................................................................ 7<br />

Capítulo 1 Evaluar dónde estamos ............................................................ 9<br />

Capítulo 2 Reporte de Órdenes de Transporte ...................................... 12<br />

Capítulo 3 Analizando el Trabajo de los Desarrolladores ...................... 26<br />

Capítulo 4 Configurando el Code Inspector ............. ¡Error! Marcador no<br />

definido.<br />

Capítulo 5 Analizando los Dumps en el ambiente Productivo ....... ¡Error!<br />

Marcador no definido.<br />

Capítulo 6 Creación de Estándares de Desarrollo en <strong>ABAP</strong> .......... ¡Error!<br />

Marcador no definido.<br />

Capítulo 7 Conclusiones ............................. ¡Error! Marcador no definido.<br />

P á g i n a | 6


Introducción<br />

Cuando uno se dedica mucho tiempo a la programación en<br />

<strong>SAP</strong> <strong>ABAP</strong> (1), suele suceder después de un tiempo que ve<br />

otros proyectos de tecnología, nace el deseo en uno de poder<br />

dirigir proyectos pues considera que ya se tiene suficiente<br />

experiencia para poder liderar empresas de ese estilo.<br />

A veces, lo que uno quiere es ir avanzando en su carrera y<br />

pasar de ser un simple programador, a llegar a ser el líder de<br />

un equipo de programadores y desarrolladores. Para lograr<br />

esto, no solo se necesita conocer bien el lenguaje de<br />

programación <strong>ABAP</strong>, sino que también es necesario conocer<br />

algunas de las otras herramientas que ofrece <strong>SAP</strong> (1), ya sea<br />

transacciones de uso común por funcionales o BASIS, para<br />

poder mejorar, digamos, el rendimiento del sistema o de los<br />

programas. Sabemos que <strong>SAP</strong> es una herramienta basada en<br />

procesos y en las mejores prácticas para llevar a cabo esos<br />

procesos, así que para poder realizar mejor los desarrollos<br />

hechos en <strong>ABAP</strong>, se vuelve necesario conocer un poco al<br />

menos de estos procesos que afectan al sistema ERP.<br />

El objetivo de este libro, es mostrar algunas de estas<br />

transacciones, a fin de poder guiar un área de desarrolladores<br />

de <strong>ABAP</strong> hacia la mejora continua en la entrega de los<br />

programas, a fin de evitar errores en los ambientes de<br />

producción del sistema, homogeneizar la calidad de los<br />

programas, y estandarizar las buenas prácticas de desarrollo<br />

dentro de la misma, para que con el tiempo se liberen<br />

mejores programas, tener un mínimo de errores, poder<br />

P á g i n a | 7


cuantificar la efectividad del equipo de desarrollo, evaluar la<br />

cantidad de trabajo desarrollada por el equipo, conocer los<br />

miembros más productivos del mismo, y detectar áreas de<br />

oportunidad en los desarrollos elaborados en el área, a fin de<br />

siempre mejorar la calidad de los desarrollos y mitigar los<br />

errores que afectan el sistema.<br />

Aclaro: éste NO ES un libro sobre programación en <strong>ABAP</strong>.<br />

Aquí doy por sentado que el lector ya sabe programar mejor<br />

que peor en el lenguaje de programación <strong>ABAP</strong>, y ya ha<br />

tenido algo de experiencia en este campo.<br />

Dicho esto, le invito a que siga leyendo para que aprenda<br />

algunas de las actividades que puede realizar para llevar a cabo<br />

todo lo anterior.<br />

Gupton Brazile<br />

(1) <strong>SAP</strong>, R/3, my<strong>SAP</strong>, my<strong>SAP</strong>.com, xApps, xApp y otros servicios y productos <strong>SAP</strong><br />

mencionados aquí, como también los respectivos logos son marcas registradas de<br />

<strong>SAP</strong> AG en Alemania y en otros países del mundo. Todos los demás productos y<br />

servicios mencionados son marcas registradas de sus respectivas compañías. Datos<br />

contenidos en este documento sirven solo para propósitos de información. Las<br />

especificaciones nacionales de los productos pueden variar en cada país.<br />

P á g i n a | 8


Capítulo 1<br />

Evaluar dónde estamos<br />

El primer paso antes de llevar a cabo cualquier plan, es<br />

saber en dónde estamos parados. Después de esto, definir a<br />

dónde queremos llegar. El siguiente paso, definir nuestra<br />

estrategia para logarlo.<br />

Entonces, la primera actividad que deberíamos evaluar, es<br />

conocer cuántos programas se están desarrollando cada día,<br />

cada semana o cada mes, separar los que están liberados de<br />

los que aún están modificándose (para solo enfocarnos en los<br />

ya liberados), y evaluar los que ya se liberaron para darnos una<br />

idea de la cantidad de trabajo que se está realizando por<br />

nuestros desarrolladores, y conocer la cantidad de errores que<br />

tienen dichos programas, a fin de poder mejorar con el<br />

tiempo.<br />

La segunda actividad, sería definir cuál es la meta de<br />

transportes, y un límite de errores al que queremos llegar,<br />

para que no se pase nunca de dicho límite. Es decir, si por<br />

ejemplo, al recabar la información (ya veremos cómo hacer<br />

esto), nos diera como resultado que se hicieron, no sé, 240<br />

órdenes de transporte, y de todas ellas nos da un total de<br />

1,650 errores, tal vez querríamos que el mes siguiente,<br />

tomando algunas acciones, pudiéramos reducir los errores<br />

para que no pasen de 1,500 y que cada mes pudiéramos irlos<br />

bajando en 100, al cabo de 10 meses la meta sería llegar con<br />

esas mismas 240 órdenes de transporte, pero que no tuvieran<br />

más de 150 errores.<br />

P á g i n a | 9


¿Cómo lograr esto? Bueno, pues hay que definir una<br />

estrategia, que era nuestro tercer paso. Se me ocurre sugerir<br />

que se debe redactar un estándar de mejores prácticas de<br />

desarrollo en <strong>ABAP</strong>, procedimientos para hacer que la gente<br />

lo conozca y lo ponga en práctica, y posteriormente enfocarse<br />

en darle seguimiento.<br />

En los siguientes capítulos vamos a ver un programa que<br />

recaba las órdenes transporte, la fecha de creación, el usuario<br />

creador del mismo, una breve descripción, y si está liberado o<br />

no.<br />

También veremos, un ejemplo de un procedimiento donde se<br />

redactan los pasos que cualquier desarrollador del área debe<br />

conocer, leer, y comprometerse a aplicar.<br />

Posteriormente, veremos cómo crear una hoja de cálculo<br />

donde se agregarán los errores de cada orden de transporte<br />

para poder evaluarlos en una hoja dinámica, y donde<br />

podremos analizar la cantidad de transportes liberados,<br />

modificados, los errores mensuales, los programadores más<br />

apegados al estándar, el que libera más transportes, y el que<br />

menos.<br />

Además de los puntos que se mencionan arriba, otra de las<br />

cosas que deben entrar en el alcance de lo que un buen líder<br />

de <strong>SAP</strong> <strong>ABAP</strong> tiene que hacer, es conocer la cantidad de<br />

DUMPs que suceden en el sistema de producción. Usted<br />

podría preguntar “¿pero qué eso no es tarea de los BASIS?”.<br />

En parte sí, pero también algunos de los DUMPs (no sabemos<br />

ahorita cuáles) pueden ser causa de una mala programación,<br />

no necesariamente debido a la falta de aplicación de alguna<br />

nota de <strong>SAP</strong>. Y esto hace que el problema caiga en nuestra<br />

cancha, y no en la del área de BASIS.<br />

P á g i n a | 10


Viéndolo con este punto de vista, necesitamos bajar los<br />

DUMPs de producción, clasificarlos en una hoja de cálculo<br />

también, de manera que podamos saber cuántos dumps caen<br />

por día, hacer una estratificación semanal, ver cuántos y cuáles<br />

son los programas afectados haciendo un Pareto de los<br />

mismos para siempre enfocarnos en el 80-20 más relevante,<br />

cuáles son los usuarios más afectados y también hacer un<br />

Pareto (de hecho, yo sugiero en todo lo que se va a comentar,<br />

que siempre se trabaje siguiendo la técnica de Pareto, que<br />

consiste en ordenar los problemas por cantidad y tipo de<br />

mayor a menor, y enfocarse en el 20% principal, pues<br />

comúnmente este 20% suele resolver el 80% de los<br />

problemas. Lo veremos más adelante), y también ver la<br />

clasificación de cuáles son los tipos de error más comunes,<br />

con su respectivo Pareto.<br />

Como menciono, trabajar con Paretos nos va a dar la pauta de<br />

siempre enfocarnos en los problemas más serios y atacarlos en<br />

este orden va a hacer que nuestro esfuerzo rinda más frutos<br />

rápidamente.<br />

Por último, con la información que vayamos obteniendo,<br />

iremos definiendo nuestros KPIs (Key Performance<br />

Indicators – Indicadores Clave de Rendimiento) y veremos si<br />

vamos mejorando o no.<br />

Estoy seguro que si comienza a hacer esto, además de la<br />

programación que tanto le encanta, podrá granjearse con su<br />

jefe un puesto de liderazgo en su equipo de <strong>ABAP</strong>.<br />

Comencemos!!<br />

P á g i n a | 11


Capítulo 2<br />

Reporte de Órdenes de<br />

Transporte<br />

A continuación presento un programa que le va a ser útil<br />

para conocer la cantidad de órdenes de transporte que se<br />

realizan día con día en su ambiente de desarrollo. Si copia<br />

usted y pega el código en un reporte de <strong>ABAP</strong>, podrá obtener<br />

la información que comentamos en el capítulo anterior (o al<br />

menos una parte) y veremos después cómo ir agregando la<br />

parte de los errores, que desafortunadamente, es una parte<br />

que hay que hacer manualmente.<br />

Nota: aclaro que tanto el programa como los ejemplos de<br />

reportes en Excel que comento en este libro, están disponibles<br />

como ejemplos para facilitar su uso en una liga que viene al<br />

final de este libro, por si no quiere ir siguiendo paso por paso<br />

la creación del programa o la elaboración de las hojas de<br />

cálculo mencionadas aquí, y se le facilita más copiarlas y solo<br />

vaciar sus datos sobre los ejemplos.<br />

Por favor, copie el programa de abajo y actívelo en su<br />

mandante de desarrollo. No tiene que generarle transporte, así<br />

que lo puede manejar como sólo local.<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& Report ZALV_ORDEN<br />

*&<br />

*&-------------------------------------------------------<br />

--------------*<br />

*&<br />

P á g i n a | 12


*& Nombre del Programa: <br />

*& Paquete<br />

: <br />

*& Transacción : <br />

*& Creado por<br />

: <br />

*& Creado el<br />

: <br />

*& Descripción : <br />

*&<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& Log de Modificaciones<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& Transporte : <br />

*& Modificado por : <br />

*& Modified el : <br />

*& Descripción : <br />

*&-------------------------------------------------------<br />

--------------*<br />

REPORT zalv_orden NO STANDARD PAGE HEADING.<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& START-OF-SELECTION<br />

*&-------------------------------------------------------<br />

--------------*<br />

START-OF-SELECTION.<br />

PERFORM llenar_datos.<br />

PERFORM llenar_alv.<br />

PERFORM llenar_encabezado.<br />

PERFORM crear_alv.<br />

END-OF-SELECTION.<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& Include<br />

ZAFCOGLR011_TOP<br />

*&-------------------------------------------------------<br />

--------------*<br />

* Tablas<br />

TYPE-POOLS: slis.<br />

" ALV<br />

TABLES:<br />

e070.<br />

P á g i n a | 13


*&-------------------------------------------------------<br />

--------------*<br />

*& VARIABLES GLOBALES<br />

*&-------------------------------------------------------<br />

--------------*<br />

DATA:<br />

g_encab(45) TYPE c VALUE 'Reporte de Órdenes de T<br />

ransporte', "Encabezado<br />

g_langu LIKE sy-langu,<br />

g_pspnr(24) TYPE c,<br />

g_lineas TYPE i,<br />

g_aibu TYPE c VALUE ' '.<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& TYPES<br />

*&-------------------------------------------------------<br />

--------------*<br />

TYPES:<br />

ty_e070 LIKE e070,<br />

ty_e07t LIKE e07t.<br />

TYPES:<br />

BEGIN OF t_tabla,<br />

trkorr TYPE e070-trkorr, " TRANSPORTE<br />

tarsystem TYPE e070-tarsystem, " DESTINO DE TRANSPORTE<br />

as4user TYPE e070-as4user, " USUARIO<br />

as4date TYPE e070-as4date, " FECHA<br />

as4text TYPE e07tas4text,<br />

" DESCRIPCION DE LA ORDEN DE TRANSPORTE<br />

statu(11) TYPE c,<br />

" ESTATUS<br />

END OF t_tabla.<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& TABLAS INTERNAS<br />

*&-------------------------------------------------------<br />

--------------*<br />

DATA:<br />

t_orden TYPE SORTED TABLE OF ty_e070 WITH UNIQUE<br />

KEY trkorr WITH HEADER LINE,<br />

t_tarea TYPE STANDARD TABLE OF ty_e070 WITH HEADER<br />

LINE,<br />

t_texto TYPE SORTED TABLE OF ty_e07t WITH UNIQUE<br />

KEY trkorr WITH HEADER LINE, " Idioma<br />

w_texto LIKE LINE OF t_texto,<br />

w_are_e070 TYPE ty_e070,<br />

w_are_e07t TYPE ty_e07t.<br />

P á g i n a | 14


*&-------------------------------------------------------<br />

--------------*<br />

*& CONSTANTES GLOBALES<br />

*&-------------------------------------------------------<br />

--------------*<br />

CONSTANTS: c_program(11) TYPE c VALUE 'ZALV_ORDEN',<br />

c_x TYPE c VALUE 'X',<br />

c_back<br />

TYPE char5 VALUE 'BACK',<br />

c_a TYPE c VALUE 'A',<br />

c_err(64) TYPE c VALUE 'No existen re<br />

gistros!!!'. "#EC NOTEXT<br />

DATA: c_trkorr(6) TYPE c VALUE 'TRKORR',<br />

c_tarsystem(9) TYPE c VALUE 'TARSYSTEM',<br />

c_as4user(7) TYPE c VALUE 'AS4USER',<br />

c_as4date(7) TYPE c VALUE 'AS4DATE',<br />

c_as4text(7) TYPE c VALUE 'AS4TEXT',<br />

c_statu(5) TYPE c VALUE 'STATU'.<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& TABLAS PARA ALV<br />

*&-------------------------------------------------------<br />

--------------*<br />

DATA: t_salida TYPE STANDARD TABLE OF t_tabla WITH HEAD<br />

ER LINE,<br />

t_tabla TYPE STANDARD TABLE OF t_tabla WITH HEAD<br />

ER LINE, "tabla principal<br />

t_title TYPE slis_listheader OCCURS 0.<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& AREAS DE TRABAJO<br />

*&-------------------------------------------------------<br />

--------------*<br />

DATA: w_salida LIKE t_salida,<br />

w_title TYPE slis_listheader, " ListHeader<br />

w_tabla LIKE t_tabla.<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& ALV<br />

*&-------------------------------------------------------<br />

--------------*<br />

DATA: catalcamps TYPE slis_t_fieldcat_alv,<br />

opciosalid TYPE slis_layout_alv,<br />

t_sort TYPE slis_t_sortinfo_alv WITH HEADER L<br />

INE,<br />

P á g i n a | 15


INE.<br />

st_events TYPE slis_t_event WITH HEADER L<br />

DATA: st_t_event TYPE slis_alv_event,<br />

l_estructura LIKE dd02l-tabname.<br />

DATA:<br />

w_top_of_page TYPE slis_formname VALUE 'TOP_O<br />

F_PAGE',<br />

w_user_command TYPE slis_formname VALUE 'USER_<br />

COMMAND',<br />

w_pf_status_set TYPE slis_formname VALUE 'PF_ST<br />

ATUS_SET',<br />

gt_list_top_of_page TYPE slis_t_listheader.<br />

TYPES: BEGIN OF log,<br />

field1(15),<br />

field2(100),<br />

END OF log.<br />

DATA: t_bdcdata TYPE STANDARD TABLE OF bdcdata WITH<br />

HEADER LINE,<br />

t_messages TYPE STANDARD TABLE OF bdcmsgcoll WITH<br />

HEADER LINE,<br />

t_log TYPE STANDARD TABLE OF log WITH<br />

HEADER LINE,<br />

t_class TYPE STANDARD TABLE OF sclass WITH<br />

HEADER LINE,<br />

t_objectdata TYPE STANDARD TABLE OF clobjdat WITH<br />

HEADER LINE.<br />

DATA: ls_line<br />

DATA: c_vbtyp_v<br />

TYPE slis_listheader.<br />

LIKE vbfa-vbtyp_v VALUE 'C'.<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& SELECTION SCREEN, SELECT-OPTIONS & PARAMETERS<br />

*&-------------------------------------------------------<br />

--------------*<br />

SELECTION-<br />

SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE textt01.<br />

" PARAMETROS DE SELECCION<br />

SELECT-OPTIONS:<br />

s_user FOR e070-as4user DEFAULT sy-uname, " USUARIO<br />

s_data FOR e070-as4date DEFAULT sy-datum. " FECHA<br />

SELECTION-SCREEN END OF BLOCK block1.<br />

P á g i n a | 16


*Selection texts<br />

*--------------------------------------------------------<br />

--<br />

* P_USER Usuario<br />

* S_DATA Fecha<br />

*Text elements<br />

*--------------------------------------------------------<br />

--<br />

* 001 Transporte<br />

* 002 Usuario<br />

* 003 Fecha<br />

* 004 Descripción de la orden de transporte<br />

* 005 Estatus<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& Include<br />

ZAFCOGLR011_F001<br />

*&-------------------------------------------------------<br />

--------------*<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& Form VALIDAR_SEGURIDAD<br />

*&-------------------------------------------------------<br />

--------------*<br />

* text<br />

*--------------------------------------------------------<br />

--------------*<br />

* --> p1 text<br />

* p1 text<br />

*


CLEAR catalcamps.<br />

REFRESH catalcamps.<br />

* ACTIVAR OPCIONES DE PRESENTACIÓN O SALIDA<br />

opciosalidcolwidth_optimize<br />

= c_x. "Optimiza ancho de columnas del<br />

ALV<br />

opciosalidzebra<br />

= c_x. "Hace patron de zebra en el ALV<br />

t_sortfieldname<br />

= c_trkorr. " Campo por el que se ordena el ALV<br />

t_sort-up = c_x. " Ordena ascendentemente<br />

APPEND t_sort.<br />

" Anexa a la tabla de orden<br />

amiento<br />

DATA: ls TYPE slis_fieldcat_alv.<br />

REFRESH catalcamps.<br />

CLEAR catalcamps.<br />

CLEAR ls.<br />

ls-fieldname = c_trkorr.<br />

ls-seltext_l = text-001. " TRANSPORTE<br />

ls-key<br />

= c_x.<br />

APPEND ls TO catalcamps.<br />

CLEAR ls.<br />

ls-fieldname = c_tarsystem.<br />

ls-seltext_l = text-006. " DESTINO DE TRANSPORTE<br />

ls-key<br />

= c_x.<br />

APPEND ls TO catalcamps.<br />

CLEAR ls.<br />

ls-fieldname = c_as4user.<br />

ls-seltext_l = text-002. " USUARIO<br />

* ls-key = c_x.<br />

APPEND ls TO catalcamps.<br />

CLEAR ls.<br />

ls-fieldname = c_as4date.<br />

ls-seltext_l = text-003. " FECHA<br />

ls-key<br />

= c_x.<br />

APPEND ls TO catalcamps.<br />

CLEAR ls.<br />

ls-fieldname = c_as4text.<br />

ls-seltext_l = text-<br />

004. " DESCRIPCION DE LA ORDEN DE T.<br />

APPEND ls TO catalcamps.<br />

P á g i n a | 18


CLEAR ls.<br />

ls-fieldname = c_statu.<br />

ls-seltext_l = text-005. " ESTATUS<br />

APPEND ls TO catalcamps.<br />

CLEAR st_events .<br />

st_events-name = 'TOP_OF_PAGE'. "Coloca encabezado<br />

st_eventsform<br />

= 'LLENAR_ENCABEZADO'. "Rutina del encabezado<br />

APPEND st_events .<br />

* Asigna a l_lineas el número de líneas encontradas con e<br />

l criterio de selección<br />

DESCRIBE TABLE t_salida LINES g_lineas.<br />

IF g_lineas EQ 0.<br />

MESSAGE c_err TYPE c_a. " No existen datos para los c<br />

riterios de selección suministrados.<br />

ELSE.<br />

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'<br />

EXPORTING<br />

i_callback_program = 'ZALV_ORDEN' " De aquí toma lo<br />

s encabezados<br />

is_layout<br />

= opciosalid<br />

it_fieldcat = catalcamps<br />

it_events<br />

= st_events[]<br />

it_sort<br />

= t_sort[]<br />

i_save<br />

= 'A'<br />

TABLES<br />

a el ALV<br />

ENDIF.<br />

ENDFORM.<br />

t_outtab<br />

= t_salida. " Tabla interna par<br />

" CREAR_ALV<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& Form LLENAR_DATOS<br />

*&-------------------------------------------------------<br />

--------------*<br />

* text<br />

*--------------------------------------------------------<br />

--------------*<br />

* --> p1 text<br />

*


--------------*<br />

FORM llenar_datos.<br />

CLEAR: t_orden, t_tarea, t_texto.<br />

SELECT *<br />

INTO TABLE t_tarea<br />

FROM e070<br />

WHERE as4user IN s_user<br />

AND as4date IN s_data.<br />

IF sy-subrc 0.<br />

MESSAGE 'No se encontraron datos en la tabla E070.' T<br />

YPE 'I' .<br />

ENDIF.<br />

SORT t_tarea BY strkorr.<br />

DELETE ADJACENT DUPLICATES FROM t_tarea COMPARING strko<br />

rr.<br />

DELETE t_tarea WHERE strkorr IS INITIAL.<br />

IF NOT t_tarea[] IS INITIAL.<br />

SELECT *<br />

INTO TABLE<br />

t_orden<br />

FROM<br />

e070<br />

FOR ALL ENTRIES IN t_tarea<br />

WHERE<br />

trkorr EQ t_tarea-strkorr.<br />

IF sy-subrc EQ 0.<br />

SELECT *<br />

INTO TABLE<br />

t_texto<br />

FROM<br />

e07t<br />

FOR ALL ENTRIES IN t_orden<br />

WHERE<br />

trkorr EQ t_orden-trkorr AND<br />

langu EQ sy-langu OR<br />

langu EQ 'EN'. " RI20090-<br />

20140519 Encuentra la descripción en inglés<br />

DELETE ADJACENT DUPLICATES FROM t_texto COMPARING t<br />

rkorr.<br />

ENDIF.<br />

ENDIF.<br />

* Mueve los registros de tab_orden a la tabla de salida d<br />

el ALV<br />

LOOP AT t_orden.<br />

MOVE-CORRESPONDING t_orden TO t_tabla.<br />

CASE t_orden-trstatus.<br />

WHEN 'A' OR 'D' OR 'L'.<br />

t_tabla-statu = 'Modificable'.<br />

WHEN OTHERS.<br />

P á g i n a | 20


t_tabla-statu = 'Liberada'.<br />

ENDCASE.<br />

APPEND t_tabla.<br />

ENDLOOP.<br />

LOOP AT t_texto.<br />

READ TABLE t_tabla WITH KEY trkorr = t_texto-trkorr.<br />

IF sy-subrc EQ 0.<br />

MOVE t_texto-as4text TO t_tabla-as4text.<br />

MODIFY t_tabla INDEX sy-tabix.<br />

ENDIF.<br />

ENDLOOP.<br />

ENDFORM.<br />

" LLENAR_DATOS<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& Form LLENAR_ENCABEZADO<br />

*&-------------------------------------------------------<br />

--------------*<br />

* text<br />

*--------------------------------------------------------<br />

--------------*<br />

* --> p1 text<br />

*


w_title-typ = c_subtitle. " 'S' Tamaño estándar<br />

w_titleinfo<br />

= l_subtitulo. " Valor del encabezado secundario<br />

APPEND w_title TO t_title.<br />

CLEAR w_title.<br />

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'<br />

EXPORTING<br />

it_list_commentary = t_title[].<br />

ENDFORM.<br />

" LLENAR_ENCABEZADO<br />

*&-------------------------------------------------------<br />

--------------*<br />

*& Form LLENAR_ALV<br />

*&-------------------------------------------------------<br />

--------------*<br />

* text<br />

*--------------------------------------------------------<br />

--------------*<br />

* --> p1 text<br />

*


Figura 1. Reporte de Órdenes de Transporte.<br />

Puede meter como parámetros de entrada, un * (asterisco) en<br />

el usuario, para indicarle al programa que quiere que<br />

despliegue las órdenes de transporte de TODOS los usuarios,<br />

y en la fecha, darle la fecha del mes en curso, por ejemplo, del<br />

01.02.2016 al 29.02.2016. El resultado, sería algo parecido al<br />

de la figura 2, reporte de órdenes de transporte.<br />

Figura 2. Resultado del Reporte de Órdenes de Transporte.<br />

P á g i n a | 23


Para poder trabajar con este reporte, va a ser necesario<br />

descargarlo a una hoja de cálculo, por lo que seguiremos los<br />

siguientes pasos:<br />

1. Hacer clic en el ícono de Fichero local.<br />

2. Seleccionar de la ventana Grabar lista fichero la opción<br />

Texto con tabuladores, y hacer clic en el ícono de<br />

aceptar .<br />

3. Después, hay que seleccionar una carpeta para guardar<br />

nuestro archivo de Excel, digamos, C:\ y darle un nombre,<br />

que bien podría ser ORDENES_201602.xls<br />

P á g i n a | 24


4. Hacemos clic en el botón crear y listo, nuestro archivo ya se<br />

debió haber grabado.<br />

Nuestro archivo deberá ser algo como el que se muestra a<br />

continuación.<br />

Figura 3. Resultado en Excel del Reporte de Órdenes de<br />

Transporte.<br />

Ahora tenemos que procesarlo, como indicaremos en el<br />

próximo capítulo.<br />

P á g i n a | 25


Capítulo 3<br />

Analizando el Trabajo de los<br />

Desarrolladores<br />

Ahora con el archivo resultante del capítulo anterior, hay<br />

que trabajar para irlo transformando y obtener todos los<br />

indicadores que necesitamos referentes a las órdenes liberadas<br />

por el equipo de desarrollo.<br />

Lo primero, es agregar una columna con el nombre del<br />

usuario, a fin de tener este detalle en el reporte. Al final debe<br />

quedar como la figura 4.<br />

Figura 4. Se inserta la columna NOMBRE para agregar el<br />

nombre del usuario que programó dicho transporte.<br />

Solo para no dejar con la duda a nadie, puede usar la<br />

transacción SU01D para que, dado el usuario, conocer el<br />

nombre del mismo. Ver Figura 5 a, b y c.<br />

P á g i n a | 26


Figura 5 a. Se introduce la transacción su01d.<br />

Figura 5 b. Se introduce el usuario y se presiona el ícono de<br />

los lentes .<br />

P á g i n a | 27


Figura 5 c. Se ve el nombre completo de dicho usuario.<br />

P á g i n a | 28


o<br />

<strong>Líder</strong><br />

<strong>SAP</strong><br />

<strong>ABAP</strong><br />

GUPTON BRAZILE<br />

Conocer si sus programadores se están<br />

apegando a los estándares definidos en<br />

la empresa, saber cuántos errores se<br />

liberan cada mes por programador, quién<br />

es el que más transportes libera, o tener<br />

un pareto de los programas más<br />

afectados en su sistema, y los usuarios<br />

más afectados por los errores de<br />

programación y así poder hacer una<br />

estrategia de mejora continua en su área,<br />

son algunas de las cosas que se enseñan<br />

en este libro.<br />

Defina sus estrategias de mejora en <strong>SAP</strong><br />

basado en transacciones comunes,<br />

aunado a un programa que le ayudará a<br />

tener el control y la visibilidad de la<br />

calidad de los transportes liberados en su<br />

empresa.<br />

Gupton Brazile<br />

Nació en Poza Rica, Veracruz el 27 de Septiembre de 1969.<br />

Es Ingeniero en Computación y Consultor de <strong>SAP</strong>,<br />

aficionado a las artes marciales y la lectura ecléctica. Este<br />

es su cuarto libro.<br />

P á g i n a | 29

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!