MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 08/03/10, 18:42:46
johava johava is offline
Member
 
Fecha de Ingreso: abr 2007
Mensajes: 75
Cool Modificar registro de una tabla interna

Hola a todos, tengo la siguiente duda sobre como modificar un regsitro de una tabla interna:

la tabla interna es

data: begin of t_resimp occurs 0,
KEYCTO(6),
TEXTCTO(50),
IMPUESTO like ZPSCD_VLRSATRIB-VALOR,
RESTAIMP like ZPSCD_VLRSATRIB-VALOR,
INDCTO(1),
end of t_resimp.


luego tengo un rutina que lee la tabla, si el registro no existe lo adiciona, en caso contrario lo modifica


*---------------------------------------------------------------------*
* Calcula valores a mostrar en resumen
*---------------------------------------------------------------------*
FORM CALCULA-VALORES.
READ TABLE t_resimp WITH KEY KEYCTO = TOPERA.
IF sy-subrc = 0.
if SUMRES = '+'.
WVALOR = t_resimp-IMPUESTO + t_detimp-VALOR.
t_resimp-IMPUESTO = WVALOR.
MODIFY t_resimp TRANSPORTING IMPUESTO WHERE KEYCTO = TOPERA.

else.
WVALOR = t_resimp-RESTAIMP + t_detimp-VALOR.
t_resimp-RESTAIMP = WVALOR.
MODIFY t_resimp TRANSPORTING RESTAIMP WHERE KEYCTO = TOPERA.
endif.

else.
t_resimp-KEYCTO = TOPERA.
t_resimp-TEXTCTO = DOPERA.
t_resimp-INDCTO = SUMRES.
CLEAR t_resimp-IMPUESTO.
CLEAR t_resimp-RESTAIMP.

if SUMRES = '+'.
t_resimp-IMPUESTO = t_detimp-VALOR.
else.
t_resimp-RESTAIMP = t_detimp-VALOR.
endif.
APPEND t_resimp.
endif.
ENDFORM.


el tema es que la modificacion no me funciona ¿que puede ser? ¿ alguien sabe un metodo mejor?

gracias por la ayuda
Responder Con Cita
  #2  
Viejo 08/03/10, 18:53:37
drmezzetta drmezzetta is offline
Junior Member
 
Fecha de Ingreso: jun 2007
Mensajes: 16
Prueba sacarle el WHERE al comando MODIFY.

saludos.
Responder Con Cita
  #3  
Viejo 08/03/10, 19:14:26
johava johava is offline
Member
 
Fecha de Ingreso: abr 2007
Mensajes: 75
modificar tabla interna



Hola drmezzetta, hice lo que propusiste pero igual no funciona, es mas saca error en la instruccion MODIFY

Err.tmpo.ejec. TABLE_ILLEGAL_STATEMENT

al parece el modify tiene queir asociado a un index

Gracias por responder, y sigo buscando la solución
Responder Con Cita
  #4  
Viejo 09/03/10, 09:03:18
Neo_25 Neo_25 is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 51
Utilizas tabla con cabecera,
es obligatorio?

Esto es un ejemplo de tabla sin cabecera.

* Tipo línea para crear estructuras
TYPES: BEGIN OF ty_tyl_resimp,
keycto TYPE char6,
textcto TYPE char50,
impuesto TYPE char50, "LIKE ZPSCD_VLRSATRIB-VALOR,
restaimp TYPE char50, "LIKE ZPSCD_VLRSATRIB-VALOR,
indcto TYPE char1,
END OF ty_tyl_resimp.
* Tipo línea para crear tablas
TYPES: ty_tab_resimp TYPE STANDARD TABLE OF ty_tyl_resimp.

* Tabla
DATA: t_resimp TYPE ty_tab_resimp.
* Estructura
DATA: w_resimp TYPE ty_tyl_resimp.
* Field-Symbols
FIELD-SYMBOLS: <fs_resimp> TYPE ty_tyl_resimp.

CLEAR: w_resimp.
w_resimp-keycto = '111111'.
w_resimp-textcto = 'uno'.
APPEND w_resimp TO t_resimp.

READ TABLE t_resimp ASSIGNING <fs_resimp> WITH KEY keycto = '111111'.
IF sy-subrc = 0.
<fs_resimp>-textcto = 'dos'.
ENDIF.

READ TABLE t_resimp ASSIGNING <fs_resimp> WITH KEY keycto = '111111'.
IF sy-subrc = 0.
<fs_resimp>-textcto = 'tres'.
ENDIF.
Responder Con Cita
  #5  
Viejo 09/03/10, 09:04:46
Neo_25 Neo_25 is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 51
Lo tuyo kedaría:

no lo puedo probar porque hay cosas q no tengo.

* Tipo línea para crear estructuras
TYPES: BEGIN OF ty_tyl_resimp,
keycto TYPE char6,
textcto TYPE char50,
impuesto LIKE ZPSCD_VLRSATRIB-VALOR,
restaimp LIKE ZPSCD_VLRSATRIB-VALOR,
indcto TYPE char1,
END OF ty_tyl_resimp.
* Tipo línea para crear tablas
TYPES: ty_tab_resimp TYPE STANDARD TABLE OF ty_tyl_resimp.

* Tabla
DATA: t_resimp TYPE ty_tab_resimp.
* Estructura
DATA: w_resimp TYPE ty_tyl_resimp.
* Field-Symbols
FIELD-SYMBOLS: <fs_resimp> TYPE ty_tyl_resimp.

*---------------------------------------------------------------------*
* Calcula valores a mostrar en resumen
*---------------------------------------------------------------------*
FORM calcula-valores.
READ TABLE t_resimp ASSIGNING <fs_resimp> WITH KEY keycto = topera.
IF sy-subrc = 0.
IF sumres = '+'.
wvalor = t_resimp-impuesto + t_detimp-valor.
<fs_resimp>-impuesto = wvalor.
* Ya no hace falta el modify
* porque el field-symbol lo modifuca solo
* MODIFY t_resimp TRANSPORTING IMPUESTO WHERE KEYCTO = TOPERA.

ELSE.
wvalor = t_resimp-restaimp + t_detimp-valor.
<fs_resimp>-restaimp = wvalor.
* MODIFY t_resimp TRANSPORTING RESTAIMP WHERE KEYCTO = TOPERA.
ENDIF.

ELSE.
<fs_resimp>-keycto = topera.
<fs_resimp>-textcto = dopera.
<fs_resimp>-indcto = sumres.
CLEAR <fs_resimp>-impuesto.
CLEAR <fs_resimp>-restaimp.

IF sumres = '+'.
<fs_resimp>-impuesto = t_detimp-valor.
ELSE.
<fs_resimp>-restaimp = t_detimp-valor.
ENDIF.
APPEND <fs_resimp> TO t_resimp.
ENDIF.
ENDFORM. "CALCULA-VALORES
Responder Con Cita
  #6  
Viejo 09/03/10, 20:08:25
johava johava is offline
Member
 
Fecha de Ingreso: abr 2007
Mensajes: 75
modificar tabla interna

Garcais por responder NEO,

lo solucione asi:
READ TABLE t_resimp WITH KEY KEYCTO = TOPERA.
IF sy-subrc = 0.
if SUMRES = '+'.
WVALOR = t_resimp-IMPUESTO + t_detimp-VALOR.
t_resimp-IMPUESTO = WVALOR.
else.
WVALOR = t_resimp-RESTAIMP + t_detimp-VALOR.
t_resimp-RESTAIMP = WVALOR.
endif.
modify t_resimp INDEX sy-tabix.
else.
xxxx
endif.



Tambien aplique tu solución y funciona bien, cual de las 2 es mas eficiente?
Responder Con Cita
  #7  
Viejo 09/03/10, 22:36:24
hrosas hrosas is offline
Member
 
Fecha de Ingreso: jun 2008
Mensajes: 31
segun tengo entendido es el with key mas eficiente de hecho si declaras en tu tabla algun campo key sera mas eficiente

para las modificaciones por importancia y eficiencia son:
index "sy-tabix"
with table key (cuando tiene nuestra tabla interna una llave)
with key (ponemos los campos)

Saludos espero te sirva
Responder Con Cita
  #8  
Viejo 10/03/10, 09:29:05
Neo_25 Neo_25 is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 51
Nosotros hacemos todas las tablas sin cabecera, nos obligan.

Así que cuando keremos hacer lo q tu kieres, lo hacemos como te dije y así no usamos el modify. Y tampoco usamos una estructura.
El field-symbol apunta a una dirección y es más rápido.

Si te funcionaron las dos cosas, la q te sea más cómoda o rápida
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 20:07:53.


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