PDA

Ver la Versión Completa : Problema con ALV ayuda


ALNICO
01/06/09, 22:03:54
sALUDOS A TODOS ESTOY HACIENDO UN REPORTE CON ALV ,PERO TENGO UN PROBLEMA YA QUE AGREGUE 2 CAMPOS EXTRAS A MI TABLA INTERNA DONDE UNO DEPENDE DEL OTRO , ES DECIR DEL VALOR QUE TENGA UNO EN ESTE CASO (PA9111-ITRIBEN ) VOY A COLOCAR UN TEXTO (EFECITO O CHEQUE ) EN UN CAMPO QUE YO INVENTE EN MI TABLA TPT TYPE C.

AHORA UNA VEZ QUE HAGO MI CONSULTA A LAS TABLAS EL CAMPO TPT ME QUEDA VACIO PORQUE DEBO CONSULTAR PRIMERO A MI CAMPO ITRIBEN PARA SABER QUE VALOR VA , PERO CUANDO TRATO DE HACER UN LOOP PARA RECORRER LA TABLA INTERNA ME DICE QUE NO SE PUEDE QUE DEBE IR ACOMPAÑADO DE UN INTO O DE UN ASSSIGN , ES LA PRIMERA VEZ QUE HAGO UN ALV Y DE VERDAD QUE ME ESTA COSTANDO MUCHO ESA TONTERIA , ESPERO ME PUEDAN AYUDAR.

luis999
01/06/09, 22:23:00
ese mensaje te debe salir porque tu tabla interna no la has declarado con cabecera:

DATA: IT_tabla TYPE STANDARD TABLE OF ...... WITH HEADER LINE.


O en todo caso puede declarar un área de trabajo ó trabajar con field-symbol:)

sALUDOS A TODOS ESTOY HACIENDO UN REPORTE CON ALV ,PERO TENGO UN PROBLEMA YA QUE AGREGUE 2 CAMPOS EXTRAS A MI TABLA INTERNA DONDE UNO DEPENDE DEL OTRO , ES DECIR DEL VALOR QUE TENGA UNO EN ESTE CASO (PA9111-ITRIBEN ) VOY A COLOCAR UN TEXTO (EFECITO O CHEQUE ) EN UN CAMPO QUE YO INVENTE EN MI TABLA TPT TYPE C.

AHORA UNA VEZ QUE HAGO MI CONSULTA A LAS TABLAS EL CAMPO TPT ME QUEDA VACIO PORQUE DEBO CONSULTAR PRIMERO A MI CAMPO ITRIBEN PARA SABER QUE VALOR VA , PERO CUANDO TRATO DE HACER UN LOOP PARA RECORRER LA TABLA INTERNA ME DICE QUE NO SE PUEDE QUE DEBE IR ACOMPAÑADO DE UN INTO O DE UN ASSSIGN , ES LA PRIMERA VEZ QUE HAGO UN ALV Y DE VERDAD QUE ME ESTA COSTANDO MUCHO ESA TONTERIA , ESPERO ME PUEDAN AYUDAR.

ALNICO
01/06/09, 22:38:04
report .

*========================== Global definitions ====================*

**
* Data Types
**

type-pools: slis.

types: begin of tp_data ,
pernr like pa9111-pernr,
perfil like pa9111-perfil,
finimedemb like pa9111-finimedemb,
mtunico like pa9111-mtunico,
porsmn like pa9111-porsmn,
cibenfr like pa9111-cibenfr,
nbbenfr like pa9111-nbbenfr,
tribunal like pa9111-tribunal,
numofic like pa9111-numofic,
fofc like pa9111-fofc,
numofcsup like pa9111-numofcsup,
status like pa9111-status,
bukrs like pa0001-bukrs,
abkrs like pa0001-abkrs,
ename like pa0001-ename,
icnum like pa0185-icnum,
intereses like zint_eval-intereses,
dsmotemb like z9hrmotemb-dsmotemb,
tstatus like z9hrtstemb-tstatus,
itriben LIKE pa9111-itriben,
tpt TYPE c,

end of tp_data,
tp_tbl_data type standard table of tp_data .

**
* Constants
**


**
* Data objects (variable declarations and definitions)
**

* Report data to be shown.
data: it_data type standard table of tp_data .

* Heading of the report.
data: t_heading type slis_t_listheader.

*======================= Selection Screen ==========================*

selection-screen: begin of block b1 with frame title text-t01.

DATA: w_aux_bukrs like pa0001-bukrs.
SELECT-OPTIONS s_bukrs for w_aux_bukrs OBLIGATORY .
DATA: w_aux_abkrs like pa0001-abkrs.
SELECT-OPTIONS s_abkrs for w_aux_abkrs OBLIGATORY .
DATA: w_aux_pernr like pa9111-pernr.
SELECT-OPTIONS s_pernr for w_aux_pernr .
DATA: w_aux_begda like pa9111-begda.
SELECT-OPTIONS s_begda for w_aux_begda .
DATA: w_aux_finimedemb like pa9111-finimedemb.
SELECT-OPTIONS s_fini03 for w_aux_finimedemb .
DATA: w_aux_status like pa9111-status.
SELECT-OPTIONS s_status for w_aux_status .
DATA: w_aux_codmotivo like pa9111-codmotivo.
SELECT-OPTIONS s_codm05 for w_aux_codmotivo .
DATA: w_aux_fofc like pa9111-fofc.
SELECT-OPTIONS s_fofc for w_aux_fofc .
DATA: w_aux_numofic like pa9111-numofic.
SELECT-OPTIONS s_numo07 for w_aux_numofic .
DATA: w_aux_tribunal like pa9111-tribunal.
SELECT-OPTIONS s_trib08 for w_aux_tribunal .

selection-screen: end of block b1.

*======================== Event Blocks =============================*
at selection-screen.

start-of-selection.

perform get_data using it_data .

end-of-selection.

perform build_alv using it_data t_heading.

*======================== Subroutines ==============================*

*&------------------------------------------------------------------*
*& Form get_data
*&------------------------------------------------------------------*
* Gets the information to be shown in the report.
*-------------------------------------------------------------------*
form get_data using t_data TYPE tp_tbl_data .

*DATA:t_data TYPE tp_tbl_data WITH HEADER LINE.

SELECT pa0001~bukrs
pa0001~abkrs
zint_eval~intereses
pa9111~pernr
pa0185~icnum
pa0001~ename
pa9111~perfil
pa9111~finimedemb
pa9111~mtunico
pa9111~porsmn
z9hrmotemb~dsmotemb
z9hrtstemb~tstatus
pa9111~cibenfr
pa9111~nbbenfr
pa9111~tribunal
pa9111~numofic
pa9111~fofc
pa9111~status
pa9111~numofcsup
pa9111~itriben
INTO CORRESPONDING FIELDS OF TABLE t_data
FROM pa9111 as pa9111
inner join pa0001 as pa0001 on pa9111~pernr = pa0001~pernr
inner join pa0185 as pa0185 on pa9111~pernr = pa0185~pernr
inner join zint_eval as zint_eval on pa9111~pernr = zint_eval~empleado
inner join z9hrmotemb as z9hrmotemb on pa9111~codmotivo = z9hrmotemb~codmotivo
inner join z9hrtstemb as z9hrtstemb on pa9111~status = z9hrtstemb~status
WHERE pa9111~pernr in s_pernr
AND pa9111~begda in s_begda
and pa9111~endda in s_begda
AND pa9111~finimedemb in s_fini03
AND pa9111~status in s_status
AND pa9111~codmotivo in s_codm05
AND pa9111~fofc in s_fofc
AND pa9111~numofic in s_numo07
AND pa9111~tribunal in s_trib08
AND pa0001~bukrs in s_bukrs
AND pa0001~abkrs in s_abkrs
.

DELETE ADJACENT DUPLICATES FROM t_data.


* AQUI ES DONDE QUIERO AGREGAR EL LOOP PARA ACTUALIZAR T_DATA

endform. " get_data

jtristan
02/06/09, 07:00:14
Como te comenta Luis999 si quieres hacer un loop para tratar las variables debes de crearte una tabla con un workarea o un workarea a parte o utilizar un fieldsymbol.
Lo más rápido sería que en la declaración de la tabla uses:
* Report data to be shown.
data: it_data type standard table of tp_data WITH HEADER LINE.
También podrías declararte un workarea independiente de esta forma:
data: wa_data LIKE LINE OF it_data.

Un saludo.

ALNICO
02/06/09, 13:47:02
Podrian Explicarme Un Poco Mas Como Deberia Trabajarlo , Les Agradezco Mucho , Lo Que Me Interesa Es Que T_data Quede Con Los Datos Como Me Interesa Para Que El Proceso No Cambien , Osea Usa Wa_data ( Si Es El Caso ) Como Respostorio Para Agregar El Dato Al Campo Que Esta Vacio Y Luego Regresarlo A T_data. Espero Me Entiendan.

luis999
02/06/09, 14:52:18
Para que puedas recorrer tu tabla interna , debes declararla de la siguiente forma:

types: begin of t_tabla,
campo1 like ....
campo2 like.....
end of t_tabla.

DATA: IT_tabla TYPE STANDARD TABLE OF t_tabla WITH HEADER LINE.

Espero que con esto te quede claro:)

Podrian Explicarme Un Poco Mas Como Deberia Trabajarlo , Les Agradezco Mucho , Lo Que Me Interesa Es Que T_data Quede Con Los Datos Como Me Interesa Para Que El Proceso No Cambien , Osea Usa Wa_data ( Si Es El Caso ) Como Respostorio Para Agregar El Dato Al Campo Que Esta Vacio Y Luego Regresarlo A T_data. Espero Me Entiendan.

martin89
02/06/09, 16:51:10
que tal, vos declaraste la tabla que queres recorrer de la siguiente forma (según lo que vi)
data: it_data type standard table of tp_data .

El error que te aparece se da porque tu tabla no tiene cabecera o porque no la estas "loopeando" dentro de una estructura. Cuando vos recorres la tabla los datos deberán pasar a una estructura que tiene que tener exactamente los mismos campos y la misma distribución que la tabla. Para esto tenes que crearte una estructura, primero el tipo de estructura
types: begin of ty_data,
aca ban los campos de la tabla en el mismo orden
(campo type tabla-campo,)
end of ty_data.

Luego debes crear la estructura
data: wa_data type ty_data. (del tipo que creaste recién).

Si todo está bien tenés una estructura que contiene los mismos campos que la tabla, ahora debés realizar el LOOP. Para esto debes hacer el LOOP tutabla into wa_data. (La estructura que creaste).

Cada registro de la tabla pasará a la estructura y si tenes que trabajar con los datos trabajas directamente con la estructura, se entiende?

Salduos :)

negrogho
03/06/09, 17:54:20
Presisamente ANICO antes de hacer el SELECT tienes comentada (*) una linea de como se debe declarar una tabla con linea de cabecera para que te permita hacer un Loop, asi es como se debe declarar la tabla

form get_data using t_data TYPE tp_tbl_data .

*DATA:t_data TYPE tp_tbl_data WITH HEADER LINE.

SELECT pa0001~bukrs ....

saludos