FoxPro/Visual FoxPro - Como reemplazar un grupo de registros con el valor mayor del grupo

 
Vista:
sin imagen de perfil

Como reemplazar un grupo de registros con el valor mayor del grupo

Publicado por Terry (4 intervenciones) el 24/12/2022 17:32:30
Buen día a todos, quisiera solicitar de su ayuda para una tarea que me han encomendado, hace mucho tiempo programé en foxpro 2.0 para msdos por lo cual tengo conocimientos básicos de este lenguaje pero ya nada que ver con las versiones posteriores, tengo una base de datos dbf en la que estoy trabajando esta en visual foxpro 8 la cual tiene 246000 registros llamada movimientos_inventario en la que tengo los campos:
cod_producto C20
fecha_movimiento F 8
precio_costo N 14,6

Necesito agrupar los registros por mes año y cod_producto obteniendo de este último el registro de mayor valor del campo precio_costo y una vez obtenido reemplazar con dicho registro los registros que tengan menor valor y tengan el mismo codigo por mes año.

He logrado sacar con SELECT ALLTRIM(STR(MONTH(fecha_movimiento))) + "-" + ALLTRIM(STR(YEAR(fecha_movimiento))), cod_producto, MAX(precio_costo) FROM movimientos_inventario WHERE ALLTRIM(STR(MONTH(fecha_movimiento))) + "-" + ALLTRIM(STR(YEAR(fecha_movimiento))) = '1-2009' GROUP BY cod_producto, fecha_movimiento

un listado con el mes año y cod_producto y se supone el maximo del campo precio_costo pero me repite el codigo del producto y veo que tambien pone un precio_costo con algunos valores diferentes, como menciono no conozco mucho sobre este lenguaje de programación y lo que he logrado es debido a investigar en internet en esta página cada parte de lo aqui expuesto.
Por lo cual les pido me den una ayuda corregir y complementar la tarea que me han asignado en el trabajo.
Atentamente,
Terry Ayala


Resultado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 309
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Como reemplazar un grupo de registros con el valor mayor del grupo

Publicado por santiago scheppmann (551 intervenciones) el 26/12/2022 03:12:21
sele 1
use tabla
index on cod_producto+exp_1

do while not eof()
prod1=cod_producto
valo1=max_precio_costo
regi1=recno()
skip
prod2=cod_producto

if prod1=prod2
valo2=max_precio_costo
regi2=recno()

do case
case valo1=valo2
***continuar
case valo1>valo2
repl max_precio_costo with valo1
case valo1<valo2
goto regi1
repl max_precio_costo with valo2
goto regi2
endcase
loop
else
loop
endif
enddo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 309
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Como reemplazar un grupo de registros con el valor mayor del grupo

Publicado por santiago scheppmann (551 intervenciones) el 26/12/2022 03:15:45
correccion:

sele 1
use tabla
index on cod_producto+dtoc(exp_1)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Mauricio Antonio
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Como reemplazar un grupo de registros con el valor mayor del grupo

Publicado por Mauricio Antonio (1541 intervenciones) el 27/12/2022 22:58:32
Buenas tardes Terry, puedes probar esta rutina:
CLOSE TABLES ALL
SET date BRITISH
SET DELETED ON
*
xcod_prod = ''
xcosto = 0
*
USE mov_inventa IN 0 ORDER fec_cod && fec_cod es el nombre del indice que se compone del codigo de producto
USE mov_inventa IN 0 ORDER fec_cod ALIAS copia AGAIN
*
SCAN
xcod_prod = cod_prod
xcosto = 0
*
SCAN WHILE cod_prod = xcod_prod
IF xcosto < costo
xcosto = costo
ENDIF
ENDSCAN
*
*--- proceso de actualizar costo
SELECT copia
IF SEEK(xcod_prod)
SCAN WHILE cod_prod = xcod_prod
REPLACE costo WITH xcosto IN copia
ENDSCAN
ENDIF
*
SELECT mov_inventa
IF !EOF()
SKIP -1
ENDIF
ENDSCAN
*
CLOSE TABLES ALL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Como reemplazar un grupo de registros con el valor mayor del grupo

Publicado por Terry (4 intervenciones) el 29/12/2022 04:08:05
Gracias ahora lo pruebo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar