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 22/04/09, 09:08:19
kruspex kruspex is offline
Member
 
Fecha de Ingreso: sep 2008
Mensajes: 31
Angry Ayuda informe complejo

Hola a todos!!

Veamos, os explico un poco lo que tengo para ver si alguien puede ayudarme.

Tengo tres tablas internas:
1. t_orden -> con todas las ordenes que necesito para obtener los datos
2. tinf_cuentas_lines -> con las lineas relacionadas por orden y sus importes.
3. tinf_cuentas_reg -> con los registros por orden y sus importes.

Ahora tengo juntar todos los datos para generar un informe y no sé como rellenar la estructura donde guardar los datos combinados.

1. Recorro la t_orden para obtener la orden correspondiente.
2. Con esa orden debo recorrer tanto la tabla de lineas como de registros para tellenas la estructura total de datos:
2.1. comparo el numero de lineas para saber donde tengo más datos por orden.
2.2. debo acceder a la interna de quien tenga más lineas primero y a la otra después.
2.3. voy insertando los datos en la estructura total de datos.
3. muestro la estructura total de datos.

La duda es como acceder a los datos de lineas y registros e ir obteniendo sus datos para pasarlos a la estructura.
Cada tabla, lineas y registros, tiene un estado. He pensado recorrer ambas tablas con loops e ir marcando el estado de las ya vistas. Si para una orden todos los estados están marcados, calculo los totales de importes y salgo de los loops para pasar a la siguiente orden.

¿Alguien tiene una idea más óptima de hacerlo?
¿Se os ocurre alguna sugerencia de cómo hacer el traspaso de datos?

Según voy implementando el programa me surgen más dudas y me vuelvo a estancar.

Gracias por vuestra ayuda!!
Responder Con Cita
  #2  
Viejo 23/04/09, 07:28:14
kruspex kruspex is offline
Member
 
Fecha de Ingreso: sep 2008
Mensajes: 31
LOOP AT tinf_cuentas_linea WHERE orden = t_orden-orden.

READ TABLE tinf_cuentas_reg WITH KEY orden = t_orden estado = '' INTO d_registro.

IF sy-subrc = 0.

t_datos_totales-orden = t_orden-orden.
t_datos_totales-linpr = tinf_cuentas_linea-linpr.
t_datos_totales-netwc = tinf_cuentas_linea-netwc.
t_datos_totales-reg = d_registro-reg.
t_datos_totales-importe = d_registro-importe.

total_linea = total_linea + tinf_cuentas_linea-netwc.
total_reg = total_reg + d_registro-importe.

append t_datos_totales.

d_registro-estado = 'X'.
modify tinf_cuentas_reg from d_registro.

ELSE.

t_datos_totales-orden = t_orden-orden.
t_datos_totales-linpr = tinf_cuentas_linea-linpr.
t_datos_totales-netwc = tinf_cuentas_linea-netwc.

total_linea = total_linea + tinf_cuentas_linea-netwc.

append t_datos_totales.

ENDIF.

ENDLOOP.


Nos da un DUMP en la linea que he remarcado.

Hemos leido en otro foro que al hacer el modify debemos especificar el INDEX.
Responder Con Cita
  #3  
Viejo 23/04/09, 10:01:27
Miky_cer Miky_cer is offline
Junior Member
 
Fecha de Ingreso: dic 2008
Mensajes: 4
Hola kruspex, no se si te servira, hace poco que me inicie en esto del ABAP. Pero la tormenta de ideas a veces es buena.

Las tablas internas cogen datos de tablas BD? porque no creas una vista de las tablas bd que necesites. Es decir una vista con la tabla de ordenes tabla de lineas y tabla de registros. Relacionando el campo orden de cada tabla. Asi tendras una tabla de bd con todos los registros de lineas y registros por orden.

Luego n el select a la tabla interna cribas por el numero de orden que quieras.

No se si te sirve, o he dicho una burreria, pero la intención es lo que cuenta.
Responder Con Cita
  #4  
Viejo 23/04/09, 10:05:57
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
Efectivamente te da dump por que no has especificado el indice entonces puedes hacer dos cosas:

1.- data: lv_tabix type sytabix.

loop at tabla into linea.

lv_tabix = sy-tabix.

linea-campo1 = valor1.
linea-campo2 = valor2.

modify tabla from linea index lv_tabix.

endloop.

2.- field-symbols: <linea> type ... (aqui pondrias el tipo de linea de la tabla)

loop at tabla assigning <linea>.

<linea>-campo1 = valor1.
<linea>-campo2 = valor2.

endloop.

Ya tendrias los valores modificados
Responder Con Cita
  #5  
Viejo 23/04/09, 14:16:13
kruspex kruspex is offline
Member
 
Fecha de Ingreso: sep 2008
Mensajes: 31
¡¡ Muchas gracias a ambos !!

Os pongo el código que hemos puesto por si a alguien le sirve en el futuro:

data: d_registro like tinf_cuentas_reg.

clear t_datos_totales.
refresh t_datos_totales.

clear: total_linea, total_reg, diferencia.

* recorremos la tabla donde estan todas las ordenes t_orden
DATA indice_orden_reg type i value 0.
LOOP AT t_orden.

* recorremos las lineas para cada oden
LOOP AT tinf_cuentas_linea WHERE orden = t_orden-orden.

* leemos los registros
READ TABLE tinf_cuentas_reg WITH KEY orden = t_orden estado = '' INTO d_registro.
indice_orden_reg = indice_orden_reg + 1.

IF sy-subrc = 0.

t_datos_totales-orden = t_orden-orden.
t_datos_totales-linpr = tinf_cuentas_linea-linpr.
t_datos_totales-netwc = tinf_cuentas_linea-netwc.
t_datos_totales-reg = d_registro-reg.
t_datos_totales-importe = d_registro-importe.

total_linea = total_linea + tinf_cuentas_linea-netwc.
total_reg = total_reg + d_registro-importe.

append t_datos_totales.
clear t_datos_totales.

d_registro-estado = 'X'.
modify tinf_cuentas_reg from d_registro index indice_orden_reg.

ELSE.


Y ya sale correcto.

Gracias!!
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 22:42:51.


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