PDA

Ver la Versión Completa : borrar registros de tabla interna, urgente


ALNICO
26/05/09, 15:25:19
saludos a todos amigos , tengo un problema que no he podido resolver por mi propia cuenta , tengo una tabla interna ZTEP luego de la lleno , quiero filtrarla , lei que puedo usar la sentencia delete from where , pero cada vez que la trato de compilar me aparece este error

The dictionary structure or table ZTEP does not exist or is not active , alguien me puede ayudar o decirme que pasa .


esta es la tabla y como la declaro:

DATA: BEGIN OF REG,


fili type PA0001-bukrs,
anom type PA0001-abkrs,
nper1 type PA9111-pernr,
ced type Pa0185-icnum,
nom type PA0001-ename,
perf type PA9111-perfil,
freg1 type PA9111-finimedemb,
mtot type PA9111-mtunico,
ptot type PA9111-porsmn,
int type ZINT_EVAL-intereses,
mot type Z9HRMOTEMB-dsmotemb,
stat type Z9HRTSTEMB-tstatus,
cedb type PA9111-nbbenfr,
nomb type PA9111-cibenfr,
trib1 type PA9111-tribunal,
nofic1 type PA9111-numofic,
fofc type PA9111-fofc,
numfs type PA9111-numofcsup,
statu type PA9111-status,
FC TYPE PA9111-begda,
FF TYPE PA9111-ENDDA,
CM TYPE PA9111-CODMOTIVO,

END OF REG.



DATA: BEGIN OF ZTEP OCCURS 0.
INCLUDE STRUCTURE REG.
DATA END OF ZTEP.

luis999
26/05/09, 15:36:03
Hola, lo puedes declarar asi:

TYPES: BEGIN OF REG,

fili like PA0001-bukrs,
anom like PA0001-abkrs,
nper1 like PA9111-pernr,
ced like Pa0185-icnum,
nom like PA0001-ename,
perf like PA9111-perfil,
freg1 like PA9111-finimedemb,
mtot like PA9111-mtunico,
ptot like PA9111-porsmn,
int like ZINT_EVAL-intereses,
mot like Z9HRMOTEMB-dsmotemb,
stat like Z9HRTSTEMB-tstatus,
cedb like PA9111-nbbenfr,
nomb like PA9111-cibenfr,
trib1 like PA9111-tribunal,
nofic1 like PA9111-numofic,
fofc like PA9111-fofc,
numfs like PA9111-numofcsup,
statu like PA9111-status,
FC like PA9111-begda,
FF like PA9111-ENDDA,
CM like PA9111-CODMOTIVO,

END OF REG.

DATA: ZTEP TYPE STANDARD TABLE OF REG WITH HEADER LINE.

ALNICO
26/05/09, 17:00:05
sigue igual , cambie la forma de declaracion pero el mismo error , es como si no existiera

luis999
26/05/09, 17:07:49
Has declarado las tablas que usas:

tables: PA0001, Pa0185.

Estas seguro que existe la PA9111?

ALNICO
26/05/09, 17:14:46
si de eso estoy seguro , ya lo verifique , lo que no entiendo es porque no hace el delete de la tabla interna pero si hace el

DELETE ADJACENT DUPLICATES FROM ZTEP. de la misma tabla

zonanet
26/05/09, 17:20:37
Hola ALNICO:

Lo que pasa es que la instrucción Delete FROM WHERE es sólo para tablas transparentes, osea tablas del diccionario y base de datos, no así para las tablas internas, lo que puedes hacer es recorrer tu tabla con un loop y mediante una condición borrar el registro.

Loop at IT.
If...
delete IT.
endif.
endloop.

Saludos

luis999
26/05/09, 17:23:35
Ah ya entiendo tu problema, lo que sucede es que el DELETE FROM WHERE se usa para tablas de base de datos y no para tablas internas.

Si quieres borrar las filas de un tabla interna tienes que usar:

DELETE <TABLA> INDEX <INDICE>

Ahora el DELETE ADJACENT DUPLICATES FROM ZTEP que mencionas tambien se aplica para tablas internas.

Espero que te sirva

si de eso estoy seguro , ya lo verifique , lo que no entiendo es porque no hace el delete de la tabla interna pero si hace el

DELETE ADJACENT DUPLICATES FROM ZTEP. de la misma tabla

camaron
26/05/09, 20:14:10
Hola ALNICO:

declara tu tabla interna asi:

TYPES: BEGIN OF REG,

fili like PA0001-bukrs,
anom like PA0001-abkrs,
nper1 like PA9111-pernr,
ced like Pa0185-icnum,
nom like PA0001-ename,
perf like PA9111-perfil,
freg1 like PA9111-finimedemb,
mtot like PA9111-mtunico,
ptot like PA9111-porsmn,
int like ZINT_EVAL-intereses,
mot like Z9HRMOTEMB-dsmotemb,
stat like Z9HRTSTEMB-tstatus,
cedb like PA9111-nbbenfr,
nomb like PA9111-cibenfr,
trib1 like PA9111-tribunal,
nofic1 like PA9111-numofic,
fofc like PA9111-fofc,
numfs like PA9111-numofcsup,
statu like PA9111-status,
FC like PA9111-begda,
FF like PA9111-ENDDA,
CM like PA9111-CODMOTIVO,

END OF REG.

****declara otra con la estructura de la anterior asi, en esta tabla guardas tus datos:

DATA: ZTEP TYPE TABLE OF REG .


***hace la logica para llenar tu tabla interna

***elimina los registros que quieras sin utilizar la palabra from

DELETE ZTEP WHERE (condición).

****o si quieres eliminar los duplicados


DELETE ADJACENT DUPLICATES FROM ZTEP COMPARING nom.


espero te sirva,

Saludos,

ALNICO
26/05/09, 20:18:13
ya resolvi , gracias por la ayuda a todos.

uo4396
26/05/09, 20:35:09
Delete from where se utiliza para tablas de diccioario. Por eso te dice que no existe esa tabla en el diccionario.
Tú deberías utilizar DELETE TU_TABLA_INTERNA WHERE condicion.

Saludos