GeneXus - Una consulta basica

 
Vista:

Una consulta basica

Publicado por Arlex Franco (101 intervenciones) el 08/03/2011 18:27:02
Muy buenas, soy realmente nuevo en Genexus:
Comos hago si digamos yo tngo una tabla de productos: Idproducto, Descripcion, Precio, Stock

y quiero quiero crear un wp para actualizar el stock, con lo que tenia mas lo que yo agregue.
Lo que quiero es listar en un combobox los productos que tengo, aunque no tenga un indice por ese campo.

lo que hice en el evento load de mi wp fue esto:
Event Load

for each
&productoDescripcion.Additem(productoDescripcion)
endfor
for each
where productoDescripcion = &productoDescripcion.Value()
&Stock = productoStock
&ProductoId = productoId
&Cantidad.Setfocus()

endfor

EndEvent // Load


y en el evento ENTER llamo un procedimiento que me actualiza el stock


Event Enter
PUpdateStock.Call(&ProductoId,&Stock)
EndEvent // Enter






el procedimiento es este:
for each
where productoId = &ProductoId
productoStock = productoStock + &NewStock
endfor




Cuando lo ejecuto mi wp me genera una excepcion no controlada que me detalla esto:

El índice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección.
Nombre del parámetro: index




que tengo mal, ayuda por favor
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: 17
Ha mantenido su posición en GeneXus (en relación al último mes)
Gráfica de GeneXus

Una consulta basica

Publicado por Julio (305 intervenciones) el 08/03/2011 21:10:23
En la grilla carga directamente los atributos, es decir, no en variables excepto la cantidad, solamente la cantidad que vas a añadir la mostraras en la grilla en una variable.
Para actualizar el stock hay dos maneras de hacerlo: la primera cada vez que des enter actualizarà solo el artìculo seleccionado con el evento que has hecho y la segunda opcion es primero llenando todos los valores a actualizar y cuando presiones enter irà a un evento que tiene el siguiente còdigo:

Event 'Actualizar'
for each line
if &Stock > 0
PUpdateStock.Call(ProductoId,&Stock)
endif
endfor
EndEvent

Si estas enviando al Proc ProductoId y &Stock este tambièn debe recibir los dos paràmetros en las rules asì:
Param(in:ProductId ,in:&NewStock);
El source del Proc sencillamente quedarìa asì:

for each ProductId
productoStock += &NewStock
endfor

No hace falta poner where porque GX identifica directamente el atributo e identifica la tabla a la que deberà hacer lectura.
El error se origina al añadir valores a un combobox que es innecesario.
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

Una consulta basica

Publicado por Arlex Franco (101 intervenciones) el 08/03/2011 22:05:53
muchisimas gracias Julio ya lo logre como me dijiste, es mejor el grid, mucho mas facil, solo que estoy recibiendo un curso en video que me baje del sitio de GxTech y todavia no he llegado ahi...

pero estuve batallando un rato, se te olvido mencionar que en las propiedades del grid tenia que estar prendida la propiedad de allow selection

ahora, sabes como hago para que me salga el mensaje de 'please confirm data' o sea para confirmar y otro que me diga 'los datos han sido actualizados'
crei que lo podia hacer con la rule message pero no aparece en wp solo en transactions
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: 17
Ha mantenido su posición en GeneXus (en relación al último mes)
Gráfica de GeneXus

Una consulta basica

Publicado por Julio (305 intervenciones) el 08/03/2011 23:27:37
Què bièn que te haya salido, en verdad no me acordè que estabas en ambiente web, respecto al mensaje, en ambiente win suelo poner lo siguiente:

Event 'Actualizar'
&MostrarMensaje = 0
confirm('Està seguro de los datos a actualizar ?...',N)
if confirmed()
for each line
if &Stock > 0
PUpdateStock.Call(ProductoId,&Stock)
endif
endfor
&MostrarMensaje = 1
&mensaje = 'Datos han sido actualizados exitòsamente...'
endif
EndEvent

Y en las reglas tendràs que indicar lo siguiente para que se despliegue el mensaje (para web):
msg(&mensaje) if &MostrarMensaje = 1;

Ahora, en web, una vez que se haya presionado el botòn enter podrìas cambiar el ròtulo de este botòn asì:

Event 'Actualizar
btn_check.Caption = 'Confirm data' // Esta orden cambia el ròtulo del botòn
&MostrarMensaje = 0
confirm('Està seguro de los datos a actualizar ?...',N)
if confirmed()
for each line
if &Stock > 0
PUpdateStock.Call(ProductoId,&Stock)
endif
endfor
&MostrarMensaje = 1
&mensaje = 'Datos han sido actualizados exitòsamente...'
endif
btn_check.Caption = 'Confirm' // Esta orden cambia el ròtulo del botòn
EndEvent

Solo tengo alguna experiencia en web pero no he tratado muy a fondo.
Pruèbalo y me avisas.
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