Uso de sumas en cursores

Hola que tal, me llamo daniel y soy nuevo en el uso de foxpro, tengo un problema y ojala me puedas ayudar:
Tengo 2 tablas una se llama TRABAJOS con los campos FP, FECHA_ULTIMA, TOTAL_CANTIDAD. Y la otra se llama SALIDAS con los campos FP, FECHA, CANTIDAD. Cada una tiene su propia FORM y su propia GRID en donde se muestran los campos
desde la FORM de SALIDAS uso el evento CLICK de un botón, que guarda el contenido de mi GRID en la tabla de salidas. Ahí mismo quiero mandar el contenido de la misma GRID a la tabla de trabajos, para ello tengo en el DATA ENVIROMENT de la FORM de SALIDAS a las 2 tablas.
Pero en la tabla SALIDAS tengo FP´s repetidos, con distintas fechas de entregas, y con distintas cantidades entregadas.
Es por ello que necesito sumar todos los campos de CANTIDAD de la tabla SALIDAS y agruparlos por FP para después mandarlo al campo TOTAL_CANTIDAD de la tabla TRABAJOS siempre y cuando TRABAJOS.fp sea igual a SALIDAS.FP el código que uso para ello es:
LOCAL ARRAY lpar[2]
SELECT fp,SUM(mx) FROM salidas GROUP BY fp ORDER BY fp INTO ARRAY lpar
UPDATE trabajos SET;
trabajos.par = lpar[2];
FROM salidas;
WHERE trabajos.fp == lpar[1]
Pero como veras no funciona, ¿sabes qué estoy haciendo mal?.
¿Me podrías ayudar por favor?

1 respuesta

Respuesta
1
Vamos a analizar este problema para que tu veas que puede estar pasando:
LOCAL ARRAY lpar[2]
* estas deiniendo un vector de dos cposiciones y estas asignando un en el select una matriz de m filas por 2 columnas.
SELECT fp,SUM(mx) FROM salidas GROUP BY fp ORDER BY fp INTO ARRAY lpar
*Este select lo usas para actualizar una tablam considero que nio es necesario ordenarlo, e decir, yo le quiraría el order by pues con el group by ya logras lo que querías, y adicionalmente dale un nombre al sum(mx) así, sum(mx) as total
UPDATE trabajos SET;
trabajos.par = lpar[2];
FROM salidas;
WHERE trabajos.fp == lpar[1]
* aca lo que haces es actualizar todo lo que cumpla con trabajos.fp == lpar[1] y le asignas lpar[2] a par, y par no me lo colocaste como campo en trabajos.
Ahora entiendo que en trabajos lo que quieres es; si tienes un fp con cantidad 10 y hay una salida para ese fp de 5 este debe quedar en trabajos como 15, yo sugeriría algo así
SELECT fp,SUM(mx) as total FROM salidas GROUP BY fp fp INTO cursor rta
select rta
go top
do while !eof()
  UPDATE trabajos SET;
    trabajos.par = trabajos.par + rta.total;
    FROM salidas;
    WHERE trabajos.fp == rta.fp
  select rta
  Skip
Enddo
Esto dar´pia solución a lo subrayado arriba, sino es lo que desea pro favor escríbeme bien detallado lo que quieres hacer.
Éxitos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas