MUNDOSAP

MUNDOSAP (foro/index.php)
-   Administración de Sistemas SAP (foro/forumdisplay.php?f=15)
-   -   Comparación de sistemas (foro/showthread.php?t=260)

ChaloZ 29/03/06 15:46:55

Comparación de sistemas
 
Hola, estoy empezando a aprender SAP y me encomendaron averiguar si existe alguna transacción, programa u opción que permita comparar dos sistemas o mandates. ¿Alguien me puede ayudar? :confused:

tracer 29/03/06 18:26:11


ChaloZ 30/03/06 13:32:06

Gracias por el código. Intente probarlo, pero al momento de activar el programa lanza errores de sintaxis XD.

Saludos

aduro 30/03/06 14:07:11

El error es sobre el INCLUDE zialv ?


tracer 30/03/06 14:29:36

Ups :o fallo muy se olvidaban los includes.

Creo que son estos

************************************************************************
*
* INCLUDE ZICONTADOR
*
* DESCRIPCIÓN: Este include tiene variables y performs utiles para
* mostrar por pantalla un contador de tiempo durante la ejecución de
* los programas
*
* MÓDULO AL QUE PERTENECE: BC
*
* AUTOR: Ignacio Arnaiz Piorno FECHA: 27-10-2004
* CONTACTA CONMIGO :
*
* ----------------------------------------------------------------------
* CONTROL DE MODIFICACIONES
* AUTOR EMPRESA FECHA MOTIVO
* .......... ....... DD/MM/AA ................................
* .......... ....... DD/MM/AA ................................
*-----------------------------------------------------------------------
************************************************************************
INCLUDE ZICONTADOR.

************************************************************************
* INCLUDES
************************************************************************

************************************************************************
* Definición de variables
************************************************************************
DATA d_max TYPE i. " Nº Máximo de llamadas
DATA d_tabix LIKE sy-tabix. " Nº de llamada actual
DATA d_ant LIKE d_max " Porcentaje que se dibujó en la anterior
. " llamada

DATA d_texto_indicador(1000) TYPE c.

************************************************************************
* Definición de macros
************************************************************************
*-- Macro para iniciar un loop
*-- &1 - Nombre de la tabla interna
DEFINE loop_at.
perform indicador_de_progreso_max tables &1.
loop at &1.
if not sy-tabix is initial
and not sy-tabix = 1.
d_tabix = sy-tabix.
else.
d_tabix = sy-index.
endif.
END-OF-DEFINITION.

*-- Macro para finalizar un loop mostrando un indicador de progreso con
* un texto (pueden ser hasta 5 textos que se concatenaran).
*-- &1 - Texto 1 a mostrar
*-- &2 - Texto 2 a mostrar
*-- &3 - Texto 3 a mostrar
*-- &4 - Texto 4 a mostrar
*-- &5 - Texto 5 a mostrar
DEFINE endloop_at.

concatenate &1 &2 &3 &4 &5 into d_texto_indicador
separated by space.

perform indicador_de_progreso_de_loop
using d_texto_indicador.
endloop.

END-OF-DEFINITION.


*&--------------------------------------------------------------------*
*& Form indicador_de_progreso
*&--------------------------------------------------------------------*
* Muestra el indicador de progreso del sapgui en el estado
* P_PERCENT (Porcentaje del proceso) y con el texto P_TEXTO que
* se elija.
*---------------------------------------------------------------------*
FORM indicador_de_progreso USING p_percent
p_texto.

IF sy-batch IS INITIAL.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = p_percent
text = p_texto.

ENDIF.

ENDFORM. " indicador_de_progreso

*&--------------------------------------------------------------------*
*& Form indicador_de_progreso_de_loop
*&--------------------------------------------------------------------*
* Muestra el porcentaje que ocurrencias de una tabla interna que
* ya se han procesado mediante un loop mostrando el texto P_TEXTO
* Este form se utilizará mediante la macro ENDLOOP_AT para mostrar
* un texto y el porcentaje de ocurrencias realizado al final de
* un loop.
*---------------------------------------------------------------------*
FORM indicador_de_progreso_de_loop USING p_texto.

DATA l_porcentaje TYPE i.
DATA l_resto LIKE l_porcentaje.
IF NOT d_max IS INITIAL.

IF d_tabix <> 1.
l_porcentaje = ( d_tabix * 100 ) / d_max.
ENDIF.

IF d_max < 1000.
l_resto = l_porcentaje MOD 10.
ENDIF.

IF l_resto IS INITIAL AND NOT l_porcentaje = d_ant.

PERFORM indicador_de_progreso USING l_porcentaje
p_texto.
d_ant = l_porcentaje.

ENDIF.
ENDIF.
ENDFORM. " indicador_de_progreso_de_loop


*&--------------------------------------------------------------------*
*& Form indicador_de_progreso_max
*&--------------------------------------------------------------------*
* Lee la cantidad de entradas de una tabla y recoge el tamaño
* máximo. Este perform se usa mediante la macro LOOP_AT para
* posteriormente calcular el porcentaje que ocurrencias de una
* tabla interna que ya se han procesado con un loop.
*---------------------------------------------------------------------*
* -->P_TABLE text
*---------------------------------------------------------------------*
FORM indicador_de_progreso_max TABLES p_table.

DESCRIBE TABLE p_table LINES d_max.

ENDFORM. " indicador_de_progreso_max

tracer 30/03/06 14:30:12

y el otro es:

************************************************************************
*
* INCLUDE ZIALV
*
* DESCRIPCIÓN: Tipos, variables, constantes y forms para trabajo
* con ALV's
*
* INSTRUCCIONES: Sera obligatorio para un correcto funcionamiento de la
* libreria añadir al codigo del report un form llamado USER_COMMAND
* creado con la estructura del existente comentado al final de este
* include.
*
* Además será obligatorio tambien añadir al codigo del report un form
* llamado LAYOUT creado con la estructura del existente comentado al
* final de este include.
*
* Si se cumple todo esto, simplemente habra que llamar al form
* ALV_MOSTRAR_INFORME pasandole como parametros la tabla a mostrar y el
* nombre de la estructura de dicha tabla, estructura que debera ser del
* diccionario de datos, no definida en el codigo del listado, ademas se
* le pasará una constante que podrá tener dos valores.
* - C_TIPO_ALV <- Si queremos modo grid
* - C_TIPO_LIST <- Si queremos modo listado
*
* Si se prefiere podrá crearse el catalogo de campos manualmente
* rellenando la estructura GT_FIELDCAT aunque es la opción menos
* recomendada, en este caso el parametro P_STRUCT de
* ALV_MOSTRAR_INFORME se pasará en blanco.
*
* Permite añadir lineas a la cabecera mediante el uso del form
* ALV_RELLENAR_CABECERA pasandole los textos y los tres modos de
* texto en la cabecera, a saber: (SOLO FUNCIONA EN MODO GRID)
* - C_TIPO_GRANDE
* - C_TIPO_MEDIANO
* - C_TIPO_PEQUEÑO
*
* Ademas es posible mostrar un logo por pantalla, para ello es
* necesario usar el form ALV_ASIGNAR_LOGO pasandole el nombre del
* logo que previamente se habrá creado siguiendo lo siguientes pasos:
* (SOLO FUNCIONA EN MODO GRID)
* PASOS PARA SUBIR LOGO:
*
* 1. Ir a la transcción OAER
*
* 2. En el nombre de clase, pon 'PICTURES'
*
* 3. El tipo de clase es 'OT'
*
* 4. En el "object key" introduce el nombre que le quieres dar al
* logo.
*
* 5. Ejecuta
*
* 6. En la siguiente pantalla seleciona documento standard. Pincha
* sobre el incono de pantalla y entonces te preguntará por el
* nombre del fichero que vas a subir.
*
* La librería tambien permite añadir rutinas a los distintos eventos que
* el programador desee asignandole al nombre del evento el nombre de una
* form mediante la funcion ALV_EVENTS.
*
* EJEMPLO DE USO:
*
* END-OF-SELECTION.
*
** Preparamos los eventos:
* PERFORM alv_events.
*
** Excluimos codigos para status
* PERFORM alv_excluir_codigo USING 'CODE'.
** Con esta linea activaremos nuestro status personal, caso de no
** reellenar esta linea o rellenarla con el status en blanco mostraria
** el status standar
* PERFORM alv_aniadir_status USING 'STANDARD_FULLSCREEN'.*
** Se pueden insertar tantas lineas como se deseen en el encabezado.
* PERFORM alv_rellenar_cabecera USING 'TITULO 1'
* 'TITULO 2'
* c_tipo_grande.
*
** Asignamos codigo a los eventos que queramos ejecutar (TOP-OF-PAGE)
* PERFORM alv_rellenar_eventos
* USING
* 'USER_COMMAND' <-Nombre evento
* 'USER_COMMAND'. <-Nombre form para evento
* PERFORM alv_rellenar_eventos
* USING
* 'TOP-OF-PAGE'
* c_form_cabecera.
* PERFORM alv_asignar_logo
* USING
* 'ZLOGOSUBIDO'.
*
** Mostramos el listado
* PERFORM alv_mostrar_informe TABLES i_listado
* USING 'ZSTR_LISTADO'
* c_tipo_alv.
*
* AUTOR: Ignacio Arnaiz Piorno FECHA: 06-03-2005
* CONTACTO:
*
* ----------------------------------------------------------------------
* CONTROL DE MODIFICACIONES
* AUTOR EMPRESA FECHA MOTIVO
* .......... ....... DD/MM/AA ................................
* .......... ....... DD/MM/AA ................................
*-----------------------------------------------------------------------
************************************************************************

************************************************************************
* Definición de tipos
************************************************************************
TYPE-POOLS: slis.

************************************************************************
* Definición de constantes
************************************************************************
CONSTANTS:
c_click LIKE sy-ucomm VALUE '&IC1', " Codigo del doble click
c_struct(50) TYPE c VALUE '',
c_pf_status_set TYPE slis_formname VALUE 'ALV_SET_STATUS',
c_user_command TYPE slis_formname VALUE 'USER_COMMAND',
c_layout TYPE slis_formname VALUE 'LAYOUT',
c_a(1) TYPE c VALUE 'A',
c_xselp(5) TYPE c VALUE 'XSELP',
c_marked TYPE c VALUE 'X',
c_form_cabecera TYPE slis_formname VALUE 'ALV_CABECERA',
c_tipo_grande TYPE c VALUE 'H',
c_tipo_mediano TYPE c VALUE 'S',
c_tipo_pequeno TYPE c VALUE 'A',
c_tipo_alv TYPE c VALUE '1',
c_tipo_list TYPE c VALUE '2'.

************************************************************************
* Definición de variables
************************************************************************

************************************************************************
* Definición de estructuras
************************************************************************
DATA: x_structure LIKE dd02l-tabname. "SAP Table
DATA: x_header LIKE dd02l-tabname. "SAP Table
DATA: x_item LIKE dd02l-tabname. "SAP Table
DATA: gt_layout TYPE slis_layout_alv.
DATA: gt_variant LIKE disvariant.
DATA: gt_list_top_of_page TYPE slis_t_listheader.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv.
DATA: gt_fieldcat_hd LIKE LINE OF gt_fieldcat.
DATA: gt_events TYPE slis_t_event .
DATA: gt_okcodes_a_excluir TYPE slis_extab OCCURS 0 WITH HEADER LINE.
DATA: d_logo(1000) TYPE c.
DATA: d_status LIKE c_pf_status_set.
* Relacion entre los datos de cabecera y posicion
DATA: gt_key TYPE slis_keyinfo_alv.

DATA d_alv_status LIKE c_pf_status_set.


************************************************************************
*
* FORMS ADICIONALES
*
************************************************************************
*---------------------------------------------------------------------*
* FORM alv_excluir_codigo *
*---------------------------------------------------------------------*
* Una vez que se lance el ALV con un STATUS cualquiera definido
* por el usuario (o bien el standar) el codigo P_CODIGO será
* omitido, y por tanto no se dibujará el botón asociado a él.
*---------------------------------------------------------------------*
FORM alv_excluir_codigo USING p_codigo.

DATA lt_okcodes_a_excluir TYPE slis_extab.

lt_okcodes_a_excluir-fcode = p_codigo.
APPEND lt_okcodes_a_excluir TO gt_okcodes_a_excluir.

SORT gt_okcodes_a_excluir.
DELETE ADJACENT DUPLICATES FROM gt_okcodes_a_excluir.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form alv_mostrar_informe
*&---------------------------------------------------------------------*
* Se utilizará en el programa una vez que se haya rellenado todo
* lo necesario para lanzar el listado de la tabla P_OUTPUT.
* P_TIPO será igual a C_TIPO_ALV si se quiere lanzar el ALV en
* modo GRID en caso de preferirlo en modo lista se pasará este
* parametro igual a C_TIPO_LIST.
* P_STRUCT será el nombre de una estructura del diccionario de
* la que tomar la estructura de salida del listado. En caso de
* pasarlo en blanco habrá que haber creado con anterioridad un
* catalogo de campos bien con el perform ALV_CATALOGO o bien
* añadiendo directamente los campos al catalogo gt_fieldcat[].
*----------------------------------------------------------------------*
FORM alv_mostrar_informe TABLES p_output
USING p_struct
p_tipo.

DATA l_struct LIKE c_struct.

l_struct = p_struct.

* Damos forma al informe
PERFORM (c_layout) IN PROGRAM (sy-cprog).

PERFORM alv_show_report TABLES p_output
USING l_struct
p_tipo.

ENDFORM. " alv_mostrar_informe
*

*&--------------------------------------------------------------------*
*& Form alv_mostrar_informe_jerarquico
*&--------------------------------------------------------------------*
* REDEFINIR CUANDO SE USE
*---------------------------------------------------------------------*
FORM alv_mostrar_informe_jerarquico TABLES i_header
i_item
USING p_header
p_item1
p_key1
p_key2
p_key3
p_key4
p_key5.


ENDFORM. " alv_mostrar_informe_jerarquico

*&---------------------------------------------------------------------*
*& Form alv_catalogo
*&---------------------------------------------------------------------*
* Inicializa el catalogo de campos gt_fieldcat[] añadiendole
* todos los campos de la estructura del diccionario P_ESTRUCTURA
*----------------------------------------------------------------------*
* -->P_C_ESTRUCTURA_LISTADO text
*----------------------------------------------------------------------*
FORM alv_catalogo USING p_estructura.

REFRESH gt_fieldcat.

DATA l_estructura LIKE dd02l-tabname.

l_estructura = p_estructura.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = l_estructura
i_client_never_display = 'X'
CHANGING
ct_fieldcat = gt_fieldcat[].

LOOP AT gt_fieldcat INTO gt_fieldcat_hd
WHERE seltext_l IS initial
AND seltext_m IS initial
AND seltext_s IS initial.

SELECT SINGLE ddtext
INTO gt_fieldcat_hd-seltext_l
FROM dd03t
WHERE tabname = l_estructura
AND ddlanguage = sy-langu
AND fieldname = gt_fieldcat_hd-fieldname.

gt_fieldcat_hd-seltext_m = gt_fieldcat_hd-seltext_l.
gt_fieldcat_hd-seltext_s = gt_fieldcat_hd-seltext_l.

MODIFY gt_fieldcat FROM gt_fieldcat_hd.
ENDLOOP.

ENDFORM. " alv_catalogo

*&---------------------------------------------------------------------*
*& Form alv_set_status
*&---------------------------------------------------------------------*
* Inicializa el status
*----------------------------------------------------------------------*
* -->P_C_ESTRUCTURA_LISTADO text
*----------------------------------------------------------------------*
FORM alv_set_status USING p_estructura.

SET PF-STATUS d_alv_status EXCLUDING gt_okcodes_a_excluir.

ENDFORM. " alv_set_status

*&---------------------------------------------------------------------*
*& Form alv_show_report
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_show_report TABLES p_output
USING p_struct LIKE c_struct
p_tipo.

* Define local data
DATA: v_repid LIKE sy-repid.
DATA l_form_cabecera LIKE c_form_cabecera.
v_repid = sy-repid.
x_structure = p_struct.

* Check that our selection retrieves any result
IF p_output[] IS INITIAL.
MESSAGE i038(001) WITH 'No se mostrara la tabla porque esta vacia'.
ELSE.

IF NOT p_struct IS INITIAL.
PERFORM alv_catalogo USING p_struct.
ENDIF.

IF NOT gt_layout-box_fieldname IS INITIAL.
DELETE gt_fieldcat WHERE fieldname = gt_layout-box_fieldname.
ENDIF.

IF NOT d_alv_status IS INITIAL
AND NOT gt_events[] IS INITIAL.
PERFORM alv_rellenar_eventos
USING
'PF_STATUS_SET'
c_pf_status_set.
ENDIF.

IF gt_list_top_of_page[] IS INITIAL.
CLEAR l_form_cabecera.
ELSE.
l_form_cabecera = c_form_cabecera.
ENDIF.

CASE p_tipo.
WHEN c_tipo_alv.
* Visualice the list with a standard function
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = v_repid
* i_callback_pf_status_set = d_alv_status
* i_callback_user_command = c_user_command
i_callback_top_of_page = l_form_cabecera
* i_structure_name = x_structure
is_layout = gt_layout
i_save = c_a
it_events = gt_events
it_fieldcat = gt_fieldcat
TABLES
t_outtab = p_output.
WHEN c_tipo_list.
* Visualice the list with a standard function
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = v_repid
* i_callback_pf_status_set = d_alv_status
* i_callback_user_command = c_user_command
* i_callback_top_of_page = l_form_cabecera
* i_structure_name = x_structure
is_layout = gt_layout
i_save = c_a
it_events = gt_events
it_fieldcat = gt_fieldcat
TABLES
t_outtab = p_output.
ENDCASE.

ENDIF.
ENDFORM. " alv_show_report


*---------------------------------------------------------------------*
* FORM ALV_ANIADIR_STATUS *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_STATUS *
*---------------------------------------------------------------------*
FORM alv_aniadir_status USING p_status.

d_alv_status = p_status.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form alv_cabecera
*&---------------------------------------------------------------------*
* MUESTRA LA CABECERA
*----------------------------------------------------------------------*
FORM alv_cabecera.
IF NOT gt_list_top_of_page IS INITIAL
OR NOT d_logo IS INITIAL.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = gt_list_top_of_page
i_logo = d_logo
i_end_of_list_grid = ''.
ENDIF.
ENDFORM. " alv_cabecera

*&---------------------------------------------------------------------*
*& Form alv_rellenar_eventos
*&---------------------------------------------------------------------*
* ASIGNA UN FORM A UN EVENTO A EJECUTAR
*----------------------------------------------------------------------*
* --> NOMBRE DEL EVENTO
* --> NOMBRE DEL FORM PARA DICHO EVENTO
*----------------------------------------------------------------------*
FORM alv_rellenar_eventos USING p_nombre_evento
p_form_para_evento.

DATA: ls_event TYPE slis_alv_event.

* Rutina que controlará el status GUI
READ TABLE gt_events WITH KEY name = p_nombre_evento
INTO ls_event.
IF sy-subrc = 0.
MOVE p_form_para_evento TO ls_event-form.
MODIFY gt_events FROM ls_event TRANSPORTING form
WHERE name = p_nombre_evento.
ELSE.
MESSAGE e000(01) WITH 'Error en el form alv_rellenar_eventos.'
'No existe el evento'
p_nombre_evento
'.'.
ENDIF.

ENDFORM. " rellenar_eventos

*&---------------------------------------------------------------------*
*& Form ALV_RELLENAR_CABECERA
*&---------------------------------------------------------------------*
* Rellena una linea de la cabecera
*----------------------------------------------------------------------*
* -->P_GT_LIST_TOP_OF_PAGE text
*----------------------------------------------------------------------*
FORM alv_rellenar_cabecera USING p_texto_negrita
p_texto_normal
p_tipo.

DATA: ls_line TYPE slis_listheader.

CLEAR:ls_line.

ls_line-key = p_texto_negrita.
ls_line-typ = p_tipo.
ls_line-info = p_texto_normal.

APPEND ls_line TO gt_list_top_of_page.

ENDFORM. " ALV_RELLENAR_CABECERA


*---------------------------------------------------------------------*
* FORM alv_asignar_logo *
*---------------------------------------------------------------------*
* Rellena el logo que queremos que se muestre por pantalla *
*---------------------------------------------------------------------*
* --> P_LOGO Logo a cargar *
*---------------------------------------------------------------------*
FORM alv_asignar_logo USING p_logo.

d_logo = p_logo.

ENDFORM. " alv_asignar_logo

*&---------------------------------------------------------------------*
*& Form alv_events
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM alv_events.

DATA: le_event TYPE slis_alv_event.
REFRESH gt_events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = gt_events.

ENDFORM. " alv_alv_events

ChaloZ 31/03/06 21:28:35

Gracias por los includes, pero nuevamente hay problemas de sintaxis:

Program ZRCHKSPRO 248
Field "ICON_TREE" is unknown. It is neither in one of the specified
tables nor defined by a "DATA" statement . . . . . . . . . .

Saludos

tracer 01/04/06 10:19:27

Vaya perdona, parece que falla más que una escopeta de feria :D , voy a cargarlo de nuevo en sap y te digo.

Saludos a todo el foro sap :)

aduro 01/04/06 15:39:20

Hola GENTE!
por las dudas ... me permito recordarles que supuestamente este desarrollo esta testeado en SAP 5
Yo lo estuve probando (no a fondo todavia) en un SAP 4.6 y tuve problemas tambien ... pero tal vez sea por un tema de versiones ...
Saludos!


ChaloZ 04/04/06 18:54:27

Estoy utilizando la versión 5. ¿No faltará algún include?

Saludos


Husos Horarios son GMT. La hora en este momento es 05:52:26.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web