PDA

Ver la Versión Completa : Problema Con Alv Jerarquico


daniel_daniel1
15/07/08, 17:12:21
BUENAS TARDE, TENGO UN PROBLEMA CON UN ALV JERARQUICO SIN OBJETOS,
MI PROBLEMA ES EL SIGUIENTE, QUISE HACER UNA PRUEBA MUY SENCILLA EN EL CUAL EL ALV JERARQUICO RESPONDA AL DOBLE CLICK, YO LO HICE UNA VES Y LO HICE TAL CUAL ESTA ECHO ESTE CODIGO (OBVIAMENTE EL OTRO NO ERA TAN SENCILLO) Y FUNCIONO PERFECTO, PERO AHORA LO HICE MUCHISIMO MAS SIMPLE Y NO PUEDO HACER QUE POR EJEMPLO CUANDO SE HAGA DOBLE CLICK EN EL ALV ME SALGA UN CARTEL DE HOLA DEL TIPO I, SI ALGUIEN SABE EL PORQUE SE LO AGRADECERIA MUCHISIMO, DESDE YA MUCHAS GRACIAS A TODOS.

LES DEJO EL CODIGO PARA QUE ME PUEDAN DECIR DONDE ES QUE ME EQUIVOQUE.

MUCHAS GRACIAS POR TODO.

*&---------------------------------------------------------------------*
*& Report Z____ALV_JERAQUICO
*&
*&---------------------------------------------------------------------*

REPORT z____alv_jeraquico.

TYPE-POOLS: slis.

DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
ga_key TYPE slis_keyinfo_alv,
ga_layout TYPE slis_layout_alv,
g_repid TYPE sy-repid,
g_tabname_header TYPE slis_tabname,
g_tabname_item TYPE slis_tabname,
g_consulta TYPE c.

DATA: gt_header TYPE STANDARD TABLE OF SFLIGHT,
gt_item TYPE STANDARD TABLE OF SFLIGHT,
ga_header TYPE sflight.

PARAMETERS: p_carrid TYPE sflight-carrid,
p_connid TYPE sflight-connid.

START-OF-SELECTION.

g_tabname_header = 'GT_HEADER'.
g_tabname_item = 'GT_ITEM'.
g_repid = 'Z____ALV_JERARQUICO'.

SELECT SINGLE carrid connid FROM sflight
INTO CORRESPONDING FIELDS OF ga_header
WHERE carrid = p_carrid
AND connid = p_connid.

APPEND ga_header TO gt_header.

SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_item.

PERFORM f_key.
PERFORM f_fieldcat USING gt_fieldcat.
PERFORM f_layout.
PERFORM f_llamar_alv.

*&---------------------------------------------------------------------*
*& Form f_fieldcat
*&---------------------------------------------------------------------*

FORM f_fieldcat CHANGING rt_fieldcat TYPE slis_t_fieldcat_alv.

DATA ls_fieldcat TYPE slis_fieldcat_alv.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'CARRID'.
ls_fieldcat-reptext_ddic = 'AEROLINEA'.
ls_fieldcat-just = 'C'.
ls_fieldcat-tabname = 'GT_ITEM'.
APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'CONNID'.
ls_fieldcat-reptext_ddic = 'NUMERO DE VUELO'.
ls_fieldcat-just = 'C'.
ls_fieldcat-tabname = 'GT_ITEM'.
APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'FLDATE'.
ls_fieldcat-reptext_ddic = 'FECHA DE VUELO'.
ls_fieldcat-just = 'C'.
ls_fieldcat-tabname = 'GT_ITEM'.
APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'CARRID'.
ls_fieldcat-just = 'R'.
ls_fieldcat-reptext_ddic = 'AEROLINEA'.
ls_fieldcat-tabname = 'GT_HEADER'.
APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'CONNID'.
ls_fieldcat-just = 'R'.
ls_fieldcat-seltext_m = 'NUMERO DE VUELO'.
ls_fieldcat-tabname = 'GT_HEADER'.
APPEND ls_fieldcat TO rt_fieldcat.

ENDFORM. " p_fc_cabecera


*&---------------------------------------------------------------------*
*& Form f_key
*&---------------------------------------------------------------------*

FORM f_key .

CLEAR ga_key.
ga_key-header01 = 'CARRID'.
ga_key-item01 = 'CARRID'.
ga_key-header02 = 'CONNID'.
ga_key-item02 = 'CONNID'.

ENDFORM. " P_KEY

*&---------------------------------------------------------------------*
*& Form f_layout
*&---------------------------------------------------------------------*

FORM f_layout .

ga_layout-zebra = 'X'.

ENDFORM. " layout

*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*

FORM user_command USING r_ucomm TYPE sy-ucomm
ra_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'.
MESSAGE 'HOLA' TYPE 'I'.
ENDCASE.

ENDFORM. "USER_COMMAND

*&---------------------------------------------------------------------*
*& Form f_llamar_alv
*&---------------------------------------------------------------------*

FORM f_llamar_alv .
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_callback_user_command = 'USER_COMMAND'
is_layout = ga_layout
it_fieldcat = gt_fieldcat
i_tabname_header = g_tabname_header
i_tabname_item = g_tabname_item
is_keyinfo = ga_key
TABLES
t_outtab_header = gt_header
t_outtab_item = gt_item
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " f_llamar_alv

ibecerra
15/07/08, 22:32:00
Te falta el status.
SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}I_CALLBACK_PF_STATUS_SET = 'ZMENU' --> ejemplo

crealo con la tx.SE41. y te va funcionar yo ya lo hice.
saludos

daniel_daniel1
16/07/08, 16:45:06
Muchas Gracias Por Tu Ayuda, Voy A Probar Como Funciona Y Te Aviso.

Gracias Por Tu Tiempo.

daniel_daniel1
16/07/08, 18:31:45
DISCULPA, NI HICE LO QUE ME RECOMENDASTES PORQUE NO ENTENDI LO QUE ME DIJISTES:

SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}

ESO NO ENTENDI DONDE LO HAGO??

TX.SE41 TE REFERIS A LA TRANSACCION SE41?

Y AHUNQUE MODIFICARA LO QUE ME DIJISTES QUE HAGA, LO QUE ME QUEDA LA DUDA ES PORQUE EN OTRO PROGRAMA QUE HICE SIN PONER EL STATUS EN I_CALLBACK_PF_STATUS_SET EL EVENTO DOBLE CLICK QUE DECLARE EN EL USER COMMAN ME FUNCIONO PERFECTAMENTE Y AHORA NO.

MUCHAS GRACIAS Y DESDE YA PERDON POR VOLVER A MOLESTARTE PERO LA VERDAD ES QUE ESTOY INTRIGADO POR ESTE PROBLEMA EN PARTICULAR.

ibecerra
16/07/08, 18:34:29
sorry pero esta cojudes lo ha puesto ("SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}") el editor q tengo
si es la TRANSACCION SE41 create un status para ese programa

daniel_daniel1
16/07/08, 18:40:37
En El Status Debo Incluir Algun Boton O Algun Function Code En Especial?

ibecerra
16/07/08, 18:58:59
Ya se cual es el problema

SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S31 {font-style: italic;color: #808080;}.L1S32 {color: #3399FF;}.L1S33 {color: #4DA619;}.L1S52 {color: #0000FF;} CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = 'ZALVGE'
i_callback_user_command = 'USER_COMMAND' --> debe ser mayuscula
* I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
is_layout = ga_layout
it_fieldcat = gt_fieldcat
i_tabname_header = g_tabname_header
i_tabname_item = g_tabname_item
is_keyinfo = ga_key
TABLES
t_outtab_header = gt_header
t_outtab_item = gt_item
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

daniel_daniel1
16/07/08, 19:08:58
Lamentablemente Esta En Mayuscula.

La Verdad Que Estoy Desconsertado, Porque Creo Que Los Conocimientos Estan Bien Aplicados Pero No Se Porque No Puedo Hacer Que Haga Algo En El Doble Click.

Gracias Igual Por Tu Contestacion.

ibecerra
16/07/08, 19:17:29
ok, no desepereis si con esto no te sale.. ya seria fatal
1. ejecuta tu progama que salga el reporte...
2.vas al menu sistemas-->status
veras q por defecto sab te pone un menu status
Programa(GUI) SAPLKKBL
tatus interfase STANDARD
3. vas a la se41 menu interfase de usuario --> copiar -- status
de
Programa SAPLKKBL
Status STANDARD

A ..
Programa ZALVGE --> tu programa..
Status STANDARD
4. vas a la se38 ZALVGE
y has lo siguiente fijate.
si con esto no sale...... me vuelvo BIOLOGO
SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S31 {font-style: italic;color: #808080;}.L1S32 {color: #3399FF;}.L1S33 {color: #4DA619;}.L1S52 {color: #0000FF;}FORM f_llamar_alv .
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = 'ZALVGE'
i_callback_user_command = 'USER_COMMAND'
I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
is_layout = ga_layout
it_fieldcat = gt_fieldcat
i_tabname_header = g_tabname_header
i_tabname_item = g_tabname_item
is_keyinfo = ga_key
TABLES
t_outtab_header = gt_header
t_outtab_item = gt_item
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " f_llamar_alv

*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RA_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND USING r_ucomm TYPE sy-ucomm
ra_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'.
MESSAGE 'HOLA' TYPE 'I'.
ENDCASE.

ENDFORM. "USER_COMMAND

FORM set_status USING rt_extab TYPE slis_t_extab.

SET PF-STATUS 'STANDARD'.
ENDFORM. "set_status

daniel_daniel1
16/07/08, 19:49:26
PARECE MENTIRA PERO SI HAY DOS LUGARES NOS HACEMOS BIOLOGOS AMBOS!!!!!

NO, NO FUNCIONO, LO QUE SI NOTO ES QUE LA BARRA DE STATUS CUANDO MUESTRO EL ALV NO ME LA MUESTRA ALGUNOS BOTONES, LOS QUE DEFINE LA BARRA STANDARD EN "APLICATION TOOLBARS". OSEA NO SE SI ME ESTA LEVANTANDO BIEN LA BARRA STANDARD. TE PASO EL CODIGO COMO LO DEJE AHORA:

*&---------------------------------------------------------------------*
*& Report Z____ALV_JERAQUICO
*&
*&---------------------------------------------------------------------*

REPORT z____alv_jeraquico.

TYPE-POOLS: slis.

DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
ga_key TYPE slis_keyinfo_alv,
ga_layout TYPE slis_layout_alv,
g_repid TYPE sy-repid,
g_tabname_header TYPE slis_tabname,
g_tabname_item TYPE slis_tabname,
g_consulta TYPE c,
g_status TYPE slis_formname.

DATA: gt_header TYPE STANDARD TABLE OF sflight,
gt_item TYPE STANDARD TABLE OF sflight,
ga_header TYPE sflight.

PARAMETERS: p_carrid TYPE sflight-carrid DEFAULT 'AA',
p_connid TYPE sflight-connid DEFAULT '017'.

START-OF-SELECTION.

g_tabname_header = 'GT_HEADER'.
g_tabname_item = 'GT_ITEM'.
g_repid = 'Z____ALV_JERARQUICO'.

SELECT SINGLE carrid connid FROM sflight
INTO CORRESPONDING FIELDS OF ga_header
WHERE carrid = p_carrid
AND connid = p_connid.

APPEND ga_header TO gt_header.

SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_item.

PERFORM f_key.
PERFORM f_fieldcat USING gt_fieldcat.
PERFORM f_layout.
PERFORM f_llamar_alv.

*&---------------------------------------------------------------------*
*& Form f_fieldcat
*&---------------------------------------------------------------------*

FORM f_fieldcat CHANGING rt_fieldcat TYPE slis_t_fieldcat_alv.

DATA ls_fieldcat TYPE slis_fieldcat_alv.

CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'CARRID'.
ls_fieldcat-reptext_ddic = 'AEROLINEA'.
ls_fieldcat-just = 'C'.
ls_fieldcat-tabname = 'GT_ITEM'.
APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'CONNID'.
ls_fieldcat-reptext_ddic = 'NUMERO DE VUELO'.
ls_fieldcat-just = 'C'.
ls_fieldcat-tabname = 'GT_ITEM'.
APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'FLDATE'.
ls_fieldcat-reptext_ddic = 'FECHA DE VUELO'.
ls_fieldcat-just = 'C'.
ls_fieldcat-tabname = 'GT_ITEM'.
APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'CARRID'.
ls_fieldcat-just = 'R'.
ls_fieldcat-reptext_ddic = 'AEROLINEA'.
ls_fieldcat-tabname = 'GT_HEADER'.
APPEND ls_fieldcat TO rt_fieldcat.

CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'CONNID'.
ls_fieldcat-just = 'R'.
ls_fieldcat-reptext_ddic = 'NUMERO DE VUELO'.
ls_fieldcat-tabname = 'GT_HEADER'.
APPEND ls_fieldcat TO rt_fieldcat.

ENDFORM. " p_fc_cabecera


*&---------------------------------------------------------------------*
*& Form f_key
*&---------------------------------------------------------------------*

FORM f_key .

CLEAR ga_key.
ga_key-header01 = 'CARRID'.
ga_key-item01 = 'CARRID'.
ga_key-header02 = 'CONNID'.
ga_key-item02 = 'CONNID'.

ENDFORM. " P_KEY

*&---------------------------------------------------------------------*
*& Form f_layout
*&---------------------------------------------------------------------*

FORM f_layout .

ga_layout-zebra = 'X'.

ENDFORM. " layout

*&---------------------------------------------------------------------*
*& Form f_llamar_alv
*&---------------------------------------------------------------------*

FORM f_llamar_alv .
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
I_CALLBACK_PROGRAM = G_REPID
I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = GA_LAYOUT
IT_FIELDCAT = GT_FIELDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
i_tabname_header = G_TABNAME_HEADER
i_tabname_item = G_TABNAME_ITEM
* I_STRUCTURE_NAME_HEADER =
* I_STRUCTURE_NAME_ITEM =
is_keyinfo = GA_KEY
* IS_PRINT =
* IS_REPREP_ID =
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
* IR_SALV_HIERSEQ_ADAPTER =
* IT_EXCEPT_QINFO =
* I_SUPPRESS_EMPTY_DATA = ABAP_FALSE
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
tables
t_outtab_header = GT_HEADER
t_outtab_item = GT_ITEM
exceptions
program_error = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. " f_llamar_alv

*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*

FORM user_command USING r_ucomm TYPE sy-ucomm
ra_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'.
MESSAGE i001(z_daniel).
ENDCASE.

ENDFORM. "USER_COMMAND

*&---------------------------------------------------------------------*
*& Form set_status
*&---------------------------------------------------------------------*

FORM set_status USING rt_extab TYPE slis_t_extab.

SET PF-STATUS 'STANDARD'.

ENDFORM. "set_status

FIJATE QUE ESTA ACTIVA LA GUI QUE COPIE Y ES LA QUE ME DIJISTES
LA VERDAD ES QUE NO SE QUE HACER, ES INCREIBLE, PERO ES VERDAD.

ibecerra
16/07/08, 19:55:07
increible a mi si me funciona. extraño no!

daniel_daniel1
16/07/08, 20:02:45
Si, La Verdad Que Si, Es Muy Extraño!!! Porque Es Mas, Lo Tengo Casi Igual En Otro Lado Y Me Funciona Perfecto, Este Programita Se Lo Pase A Una Amiga Mia Para Que Le Enseñe A Unos Chicos Que Estaban Recien Empesando Un Alv Jerarquico Y Como Los Del Standard Son Mucho Mas Jodidos Me Dijo Si No Le Podia Hacer Uno Facil, Tarde 10 Min En Hacerlo, Pero No Me Punciona El Evento Doble Click, Lo Deje, No Me Calente En Buscar Mucho Porque No Funciono Pero Ahora Me Da Rabia Porque Se Que Esta Bien Echo, Y No Sale!!! Es Muy Pero Muy Raro!!!! Igual Agradezco Tu Ayuda Y Te Doy Las Gracias Por Molestarte!!!! Y Si Encuentro Cual Es El Problema Lo Posteo!!!!

daniel_daniel1
16/07/08, 20:23:04
No Te Hagas Biologo, Encontre La Solucion!!!!!

Lo Unico Que Hice Fue Copiar Todo El Programa Tal Cual Estaba En Otro Programa Nuevo Con Otro Nombre, Le Cambie El Nombre A La Variable Del Tipo Sy-repid Y Listo, Funciono Perfecto!!!!

Asi Que Todo Lo Que Me Dijistes Estaba Bien.

Muchas Gracias Por Todo.

daniel_daniel1
17/07/08, 12:30:50
que tal me voy a auto contestar, por si alguien necesitaba saber tambien el porque del mal funcionamiento de mi programa, yo en una variable del tipo sy-repid no le asigne sy-repid sino que le harcodie el nombre del reporte, y si le ponia el sy-repid funcionaba perfectamente; asi que era eso solamente, gracias por todo, todo lo demas estaba bien tambien.