Clarion - Stock

 
Vista:

Stock

Publicado por Edu (13 intervenciones) el 18/05/2006 00:40:52
Hola, tengo un problema cuando quiero descontar el stock de una factura.
El codigo que hice es este y lo ejecuto al momento de aceptar la factura... quisiera saber si esta mal hecho el codigo porque el problema que tengo es que cuando acepto la factura se me planta el pc.


SET(DETALLEPEDIDO)
Loop
Next(DETALLEPEDIDO)
If DET:NumPedido = PED:NumPedido Then
Set (MENUES)
Loop
Next(MENUES)
If (DET:Comida = MEN:CodComida) Then
MEN:Stock -= DET:Cantidad
Put(MENUES)
.
END
.
END


Espero que puedan ayudarme. y si esta mal el codigo me podrian ayudar como hacerlo?
Muchisimas Gracias
Eduardo de Tancacha (Cordoba) Argentina
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:Stock

Publicado por FRANCISCO (CONSTRUDATA) (376 intervenciones) el 18/05/2006 12:16:54
EDUARDO ...

TU CODIGO FUNCIONARA, SIN EMBARGO SERA ABSOLUTAMENTE LENTO, PUES RECORRERA EL ARCHIVO EN CADA ACTUALIZACION.

DE SUGIERO VAYAS DIRECTO AL REGISTRO, ALGO COMO LO SIGUIENTE:

OPEN(PEDIDO,42H)
OPEN(MENUES,42H)

PED:NumPedido = DET:NumPedido
GET(PEDIDO,PED:KEYCTA) DONDE PED:KEYCTA ES LA LLAVE DEL ARCHIVO
MEN:CodComida = DET:Comida
GET(MENUES,MEN:KEYCTA) DONDE MEN:KEYCTA ES LA LLAVE DEL ARCHIVO
MEN:Stock -= DET:Cantidad
Put(MENUES)

Y CON SOLO 2 ACCESOS ACTUALIZAS TU BASE DE DATOS

UN SALUDO DESDE MEXICO ...
FEM
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:Stock

Publicado por Edu (13 intervenciones) el 18/05/2006 16:02:29
FEM: el codigo funciona, te agradezco muchisimo, pero sigue teniendo un problema... cuando en el pedido tengo varios productos del stock solo me descuenta el ultimo producto ingresado, los demas no. Como puedo hacer para que me modifique todos los productos que tiene el pedido?
De todos modos te agradezco muchisimo tu respuesta.
Eduardo de Tancacha (Cordoba), Argentina
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:Stock

Publicado por FRANCISCO (CONSTRUDATA) (376 intervenciones) el 18/05/2006 18:07:27
Entonces te conviene asi:

OPEN(PEDIDO,42H)
OPEN(MENUES,42H)
PED:CTA=(VARIABLE CON EL NUMERO DE PEDIDO A ACTUALIZAR)
SET(PED:KEYCTA,PED:KEYCTA)
LOOP UNTIL EOF(PEDIDO)
PED:NumPedido = DET:NumPedido
GET(PEDIDO,PED:KEYCTA) DONDE PED:KEYCTA ES LA LLAVE DEL ARCHIVO
MEN:CodComida = DET:Comida
GET(MENUES,MEN:KEYCTA) DONDE MEN:KEYCTA ES LA LLAVE DEL ARCHIVO
MEN:Stock -= DET:Cantidad
Put(MENUES)
.

Y TE FUNCIONARA PARA TODOS LOS REGISTROS DEL PEDIDO

UN SALUDO ...

FEM
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:Stock

Publicado por Edu (13 intervenciones) el 18/05/2006 19:15:48
No funciona !! :s ............ Alguna otra idea???

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
sin imagen de perfil
Val: 14
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

RE:Stock

Publicado por CRISTIANCANTEROS (136 intervenciones) el 19/05/2006 03:02:55
YO HICE ESTO PARA DESCONTAR STOCK DE OTRO AARCHIVO, ESPERO TE SIRVA

Para descontar productos de otro archivo al confeccionar una factura yo hago lo siguiente:
Tengo tres archivos: Productos, Factura, Detalle (aqui se guardan los detalles de la factura).
Dentro del formulario de la Factura pongo un browse que contenga los detalles de la factura (el browse corresponde al archivo Detalles). Para registrar los detalles NO USO EL EDITIN PLACE, sino que los registro EN UN FORM.
En el form del archivo de detalle creo una variable local NEW:cantidad (que guarda la cantidad que estas ingresando) y SAV:cantidad (que guarda, en el caso de qe estes modificando el detalle, la cantidad anterior. Esto es muy importante ya que accidentalente puedes ingresar una cantidad erronea, aceptes el cambio y al darte cuenta, ingreses al detalle nuevamente a modificarla, por ello la importancia de estas variables.
Bien, vamos ahora con el FORM Detalle: Generalmente el archivo debe contener el codigo del producto, cantidad, precio, etc.

- Ingresa codigo Embebido en
--- > WindowManager Method Executable Code Section
-----> Init
-------> Byte (priority 6500)
!Inicializando variable
SAV:cantidad = Detalle.Record.Cantidad

- Ingresa codigo Embebido en
--- > WindowManager Method Executable Code Section
-----> TAke Completed
-------> Byte (priority 6300)
!LLamando a la Rutina Modificar archivo de productos
!que ya la vamos a escribir
DO ActualizarProductos

- En en punto Emebido "Procedure Routines" vas a crear la siguiente rutina con Priority 4000
(Donde cantidad Stock es el campo donde se guarda el stock de prodcutos en el archivo de productos)

ActualizarProductos ROUTINE

CASE ThisWindow.Request
OF InsertRecord
Productos.Record.CantidadStock -= Detalles.Record.Cantidad
IF Access:Productos.Update() THEN
STOP(ERROR())
END !end if
OF ChangeRecord
Productos.Record.CantidadStock += SAV:Cantidad
Productos.Record.CantidadStock -= NEW:Cantidad
IF Access:Productos.Update() THEN
STOP(ERROR())
END
OF DeleteRecord
Productos.Record.CodigoProducto = Detalle.Record.CodigoProducto
Products.Record.CantidadStock += Detalle.Record.Cantidad
IF Access:Products.Update() THEN
STOP(ERROR())
END
END !End case

Ahora ingresa codigo emebido en el campo Cantidad del archivo de detalles
----> Contro Event Handling
------> Aceppted (Priority 8800)

NEW:Cantidad = Detalle.Record.Cantidad

Con eso vas a poder actualizar el archivo de productos cuando registres una factura, espero que te sea de 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:Stock

Publicado por Edu (13 intervenciones) el 22/05/2006 19:31:11
Cristian, Te agradezco mucho tu ayuda, pero te comento que cuando compilo me tira muchos errores en la zona del Procedure Routines... por que puede ser?
Muchisimas Gracias de todos modos, Eduardo de Tancacha (Cordoba), Argentina
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
sin imagen de perfil
Val: 14
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

RE:Stock

Publicado por cristiancanteros (136 intervenciones) el 31/05/2006 15:46:01
NO SE PRECISAMENTE CUAL SERA EL PROBLEMA PORQUE NO ESPECIFICAS LOS MENSAJES DE ERROR, PERO INTENTA PONERLO DE ESTA MANERA, QUE EL ENCABEZADO ESTE EN LA PRIMERA COLUMNA, TENE EN CUENTA QE EN ESTE EJEMPLO LOS ARCHIVOS QUE UTILIZO SON PRODUCTOS Y DETALLES, DE UNA RELACION 1 A MUCHOS (UN PRODUCTO A MUCHOS DETALLES) Y LAS VARIABES SAV:CANTIDAD Y NEW:CANTIDAD. ESPERO QUE TE SIRVA DE AYUDA.

ActualizarProductos ROUTINE

CASE ThisWindow.Request
OF InsertRecord
Productos.Record.CantidadStock -= Detalles.Record.Cantidad
IF Access:Productos.Update() THEN
STOP(ERROR())
END !end if

OF ChangeRecord
Productos.Record.CantidadStock += SAV:Cantidad
Productos.Record.CantidadStock -= NEW:Cantidad
IF Access:Productos.Update() THEN
STOP(ERROR())
END

OF DeleteRecord
Productos.Record.CodigoProducto = Detalle.Record.CodigoProducto
Products.Record.CantidadStock += Detalle.Record.Cantidad
IF Access:Products.Update() THEN
STOP(ERROR())
END
END !End case
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:Stock

Publicado por Edu (13 intervenciones) el 31/05/2006 16:05:31
Te agradezco por la ayuda. pero ya habia logrado resolver el problema.
De todos modos muchisimas gracias.
Eduardo de Tancacha (Cordoba). Argentina
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
Imágen de perfil de R pacheco

RE:Stock

Publicado por R pacheco (63 intervenciones) el 08/06/2006 22:55:48
Eduardo
No se si resolviste este problema , pero yo lo hago de la siguiente manera

En en formulario de detalle de factura ahi es que tiene que ir rebajando del
archivo producto o inventario. la cantidad es la que se le rebaja a la
existencia.

en el boton Ok o Grabar en el Acepted Prioridad 2,500 ojo
en la prioridad
yo pongo el siguiente codigo

! VALIDANDO EXISTENCIA
Case ThisWindow.Request
OF InsertRecord
Pro:Existencia-=DET1:Cantidad_sali
IF Access:Producto.UPdate() <>Level:Benign
Stop(Error())
End!if
OF ChangeRecord
Pro:Existencia+=Sav:Cantidad ! Variable de memoria
Pro:Existencia-=DET1:Cantidad_sali
IF Access:Producto.UPdate() <>Level:Benign
Stop(Error())
End!if
OF DeleteRecord
PRO:Existencia+=DET1:Cantidad_sali
IF Access:Producto.UPdate() <>Level:Benign
Stop(Error())
End!if
End !end Case
Put(Producto)
IF errorcode() then stop(errorcode()).

Además te dejo este otros codigo para que valide la entrada
y evite respeticiones de renglones en una factura, en otro codigo
ahi mismo en el aceptar del boto ok pp 2, 500

!Validando Codigo Producto para evitar respeticiones de articulos
IF SELF.Request = InsertRecord
DET1:ClaveSalida=DEFORMAT(DET1:Numero_salida)&'-'&DEFORMAT(DET1:CodigoProducto_sali)
Get(DetalleSalida,DET1:ClaveKey)
IF NOT ERRORCODE()
Message('Este producto fue Digitado','Aviso Error',Icon:hand)
Select(DET1:CodigoProducto_sali)
RETURN(-1)
End
End!if

tambien tengo otro codigo que te validado la existencia, cuando sea cero
notifica con aviso, si lo necesita por favor escribirme a mi correo.

Esrando qye te haya ayudado
Saludo
R. Pacheco
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