FoxPro/Visual FoxPro - A los expertos de sql y fox

   
Vista:

A los expertos de sql y fox

Publicado por Beatriz (66 intervenciones) el 17/06/2008 16:01:47
Hola programadores¡¡¡¡les tengo una consulta, necesito realizar un sp con tablas de una base de datos ya subidas a sql, la cuestion es cargar el inventario, manejo la tabla de detalle donde se alojan todos los registros de productos y en la tabla movimientos(tiene un indice compuesto codigo_ orden+codigo_ producto),la heuristica es que luego que el usuario guarda el detalle de una orden de compra, seguidamente deberá cargar el detalle de los productos al inventario(PAra eso me sirve la tabla movimientos), entonces este proceso lo debo realizar directamente en sql, ya que la informacion ya la tengo subida, y para ello desde mi aplicacion debo mandar el parametro de la orden de compra a cargar, para saber que registros del detalle son los que tengo que recorrer uno a uno e ir tomando los valores del codigo de orden, codigo producto, para irlos a buscar a la tabla movimientos ...si lo encuentra luego comparo si corresponde a la misma unidad de medida y precio..si es asi...actualizo la existencia(sumando lo que ya tiene con la cantidad nueva), si lo encuentra pero la unidad de medida es diferente o el precio es diferente, en este caso agrego un nuevo registro en la tabla movimientos y asi sucesivamente'''¡¡¡¡¡¡¡¡
Ya programe...el sp de carga¡¡¡pero lo que no puedo hacer es saber como recorrer la consulta con el detalle de los productos que voy a cargar, para irle mandando los valores de registro por registro a los parametros definidos en mi sp de carga del inventario.
Estaré muy agradecida con sus respuestas
Atte beatriz
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

RE:A los expertos de sql y fox

Publicado por DOUGLAS (297 intervenciones) el 18/06/2008 01:10:55
hola que tal beatriz, fijate que yo tengo un sistema similiar en fox claro estoy pasando a vfp con sql actualmente, pero no entiendo tu pregunta.
Creo que esto es mas bien de tecnicas de programacion, claro con conocimiento de sql

Cual es el objetivo hacer esa actualizacion ya que hablas de existencia, y eso lo hace cuando al momento de grabar la factura.

lo otro es que cargas una orde de compra esta lo haces en vace a las ventas o ya existe exa orden de comprar.

Sorry pero no te entendi. y como dije es cuestion de tecnica. y eso si te puedo ayudar a mi manera si me explica mejor.

Saludes chica.

atte

Douglas
Nicaragua
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

RE:A los expertos de sql y fox

Publicado por Beatriz (66 intervenciones) el 18/06/2008 15:32:49
ok¡¡¡gracias Douglas, la cuestion es que estoy armando el sistema para control de inventario de productos, no es de facturacion, lo que se registra son ordenes de compra entonces en su primer momento no se cargan los productos al inventario, es hasta que los productos entran fisicamente al inventario, por eso no los puedo cargar a la hora de grabar mi orden de compra, tiene que ser un proceso aparte según mi analisis, y yo he decidido cargar al inventario los productos de x orden de compra con un sp y a la hora de cargar la aplicacion nada mas capturara el parametro para mandarselo a mi sp de carga de la orden a cargar, ya que los datos estaran en sql¡¡¡y me parece esa idea, ya que el proceso seria mas rapido por tener los datos ya en sql¡¡¡
Entonces lo que yo necesito es saber como recorrer los datos de una consulta en sql¡¡ya me averigue que existen los cursores de sql, pero segun he leido no los recomiendan .... porque no se¡¡¡Y necesito saber como recorrer los registros de una consulta para mandarle esos valores a los parametros que ya tengo definidos para mi sp de carga¡¡¡solo eso es lo que necesito¡¡Muchas gracias
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

RE:A los expertos de sql y fox

Publicado por Marvin Emilson Pineda (75 intervenciones) el 18/06/2008 16:22:13
Hola Bea,

espero que estes bien....

a tu necesidad, no utilizes sp (Store Procedures) utiliza Triggers (Desencadenantes)... me explico mejor

tu tienes dos tablas para las ordenes una de encabezado y otra de detalle... imagino según lo que dices la orden no sube al inventario hasta que está es recibida... esto significa que debes de tener una opción donde te muestra las ordenes de compra pendientes y desde alli seleccionar la que quieres dar por recibida, cierto?, espero que asi sea... bueno, la tabla de encabezado de ordenes debe de tener un campo que indique el estado, lo que podrias haces es crear un Trigger para esta tabla un Trigger Update así cuando este campo cambie de estado a estado recibido procedes a actualizar el inventario segun el detalle de esta orden... como?

SQL crea dos tablas temporales cuando insertas/Actualizas y eliminas registros Inserted y Deleted, el cursor temporal que utilizaremos sera Inserted ya que este contedra la información del registro actualizado

ejemplo:

Begin
-- se declara varibles a utilizar --
Declare @OrdenID VarChar(20)
Declare @OrdenEstado Int

-- se obtiene informacion modificada --
Select @OrdernID = OrdenID, @OrdenEstado = OrdenEstado From Inserted

if @OrdenEstado = 1
-- 1 = orden recibida --
begin
-- Actualiza inventario segun detalle de orden --
Update Inventario Set Existencia = Existencia + DOrden.Cantidad From DOrden Where DOrden.OrdenID = @OrdenID
end

End

....
recorrer las tabla, realmente no he visto si se puede ya que estamos hablando de un Lengua que no es de programación si no para administrar bases de datos pero dejame te averiguo si existe tal combinación de comandos aunque lo dudo

pero bien, lo recomendable seria un Trigger así si cambias el estado de esta campo desde cualquier lenguaje de programación o directamente desde SQL el inventario se actualizara automaticamente.

espero te sirva y oriente y cualkier duda o si tienes problemas problemas... por favor hazlo saber para poder darte continuidad en tu problema o duda...

Saludos,
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

RE:A los expertos de sql y fox

Publicado por Beatriz (66 intervenciones) el 18/06/2008 16:43:57
Muchas gracias Marvin, te admiro por tus respuestas tan fluidas, la verdad no conozco a sql¡¡¡¡he estado acostumbrada a programar con fox y administrar los datos tambien con fox...asiesque cometo el error de seguir la misma logica de fox y sql es tan diferente¡¡¡¡¡pero fijate que ya logre hacer lo que quiero, te copio la rutina para que veas¡¡¡¡pero te pregunto porque me combiene mas un triguer???

Este es mi sp para ir recorriendo los registros de detalle de una orden de compra en especifico, en el aplicativo ejecuto el procediemnto almacenado y nada mas mando el parametro de orden que es la que voy a cargar, y es super rapido ep proceso, ya lo probe:

En este procediemiento almacenado creo un cursor que contendra la consulta de los registros de detalle de x orden, y voy asignado los valores de los registros a los parametros declarados en el cursor, y estos son los valores que tomara mi otro sp al que le llamo carga¡¡¡que ya lo tengo listo

CREATE PROCEDURE Cargarinventario
@Pdetacod_orden char(6)
as

DECLARE
@vcod_orden Char(6),
@vcod_producto char(4),
@vcodigo_unidad char(3),
@vprecio money,
@vcanti money

Declare crDetalle Cursor local read_only For
select cod_orden, codigo_p, cod_unidad, precio_uni, cantidad
from Detalle where cod_orden=@Pdetacod_orden

open crDetalle
Fetch Next From crDetalle
Into @vcod_orden, @vcod_producto, @vcodigo_unidad, @vprecio, @vcanti

While @@Fetch_Status = 0
begin
execute carga @vcod_orden, @vcod_producto, @vcodigo_unidad, @vprecio, @vcanti
Fetch Next From crDetalle
Into @vcod_orden, @vcod_producto, @vcodigo_unidad, @vprecio, @vcanti
end

Close crDetalle
Deallocate crDetalle
GO

Entonces Marvin????No me recomiendas que lo haga asi??
Mil gracias Marvin por tu ayuda¡¡¡¡
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

RE:A los expertos de sql y fox

Publicado por Marvin Emilson Pineda (75 intervenciones) el 18/06/2008 16:58:51
Bien hecho mi pekeña saltamontes... yo recomiendo un Trigger pero si así te funciona Excelente... el criterio de programación se respeta y me parece bien que tu lo hayas resuelto...

Felicidades. y hasta la proxima
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

RE:A los expertos de sql y fox

Publicado por Marvin Emilson Pineda (75 intervenciones) el 18/06/2008 17:18:23
Listo, ya lei la ayuda sobre los comandos que estas utilizando... ahora tambien veo en tu sp que estas invocando otro sp llamado carga que me imagino alli es donde verificas si este existe o no para ser creado o actualizado? es correpto esto o no?

porque si es así no es necesario.... ya que desde ese mismo sp puedes hacer las demas condiciones de actualizar y crear... digo yo!!!.. para que tanto sp cuando uno lo puede hacer todo y con respecto a Trigger se ejecutan solos no necesitas invocarlos tu, se disparan cuando actualizas la tabla así evitas posibles problemas y tu rutina funcionaria bien dentro de un Trigger...

pero bien... keda a tu criterio el cual me parece que es muy bueno...

Saludos,
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

RE:A los expertos de sql y fox

Publicado por Marvin Emilson Pineda (75 intervenciones) el 18/06/2008 16:52:11
Bea... leyendo mas detenidamente tu consulta la actualizacion quedaria asi:

-- Actualiza inventario --
Update Inventarios Set Inventarios.Existencia = Inventarios.Existencia + DOrden.Cantidad From DOrden Where Inventarios.OrdernID = @OrdenID And Inventario.ProductID = DOrden.ProductID And Inventario.Medida = DOrden.Medida And Inventario.Precio = DOrden.Precio

-- Inserta nuevos registros en inventario --
Insert Into Inventarios (ProductID, Existencia, Medida, Precio) Select ProductID, Existencia, Medida, Precio From DOrden Where OrdenID = @OrdenID And !Exist(Select * From Inventarios Where Inventarios.ProductID = DOrden.ProductID And Inventarios.Medida = DOrden.Medida And Inventarios.Precio = DOrden.Precio)

espero te sirva u oriente... jejejeje... cualkier duda no dudes en preguntar...

Saludos,
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

Gracias Maestro

Publicado por Beatriz (66 intervenciones) el 18/06/2008 17:48:41
gracias Marvin.....mis respetos sen sei¡¡¡¡y cualquier consulta te la hago ----
hasta pronto¡¡¡
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