En esta ocasión vamos a crear un pequeño proyecto, en el cual solo vamos a implementar la parte principal,el Core del negocio . Este proceso debe permitir ingresar la fecha, el Po Number, seleccionar un supplier code e ingresar un receive number. Ademas de poder seleccionar varios productos para ser agregados a la lista que se encuentra ubicada en la parte inferior. Los datos que la lista debe contener es el producto, la cantidad y el texto ingresado en la caja de texto info.
Al presionar aceptar(guardar), debe insertar un registro en la tabla document y n registros en la tabla document detail, segun la cantidad de productos ingresados en la lista(detalle).
Nota: Los productos y supplier se agregaron manualmente para solo dedicarse a realizar el core.
Para avanzar con el tutorial, vamos a saltarnos los pasos de la creación del proyecto y la creación de la conexión a la base de datos.
Una se llamará w_lista y la otra w_registro.
La ventana w_lista tengra un dw que mostrará los documents registrados. Agregamos tres botones, el nuevo, eliminar y salir. Solo programaremos el botón nuevo y eliminar (a estas alturas ya deberían saber como programar el botón salir).
Seleccionamos New Datawindow del tipo grid.
Click en el boton return, luego siguiente y finalizar.
Agregamos el siguiente código (para obtener los datos desde la base de datos, por ahora no mostrará nada porque esta vacío).
Una vez hecho esto guardamos el dw con el nombre de dwff_document. Debe verse similar a la imagen.
Recuerden que apara el supplier se debe seleccionar de una lista. Estos datos ya deben estar ingresados en la tabla supplier para que aparescan. Para esto debemos crear otro dw y enlazar la columna supplier code del dwff_documento con el nuevo dw que vamos a crear.
El nuevo dw que contendrá la lista de supplier sera del tipo tabular(también podría haber sido del tipo grid).
En el botón nuevo de la ventana w_lista agregamos lo siguiente.Ejecutamos la aplicación y debe verse de esta manera.
Ocultamos el header y debería verse así.
Este dw lo guardamos con el nombre dwtb_supplier.
Regresamos al dwff_document y seleccionamos la columna supplier code. Luegos nos dirigimos a la pestaña Edit y en la propiedad Style type seleccionas dropdowndw
En la parte inferior seleccionamos el dw tabular, la columna que se mostrara y la que se va a guardar.Vamos a crear otro dw para el detalle.
Guardamos el dw con el nombre de dwgr_detalle y asignamos este dwo al dw control llamado dw_detalle.if message.doubleparm>0 then
dw_cabecera.retrieve(message.doubleparm)
dw_detalle.retrieve(message.doubleparm)
else
dw_cabecera.insertrow(1)
end if
Explicacion:
if message.doubleparm>0 then //preguntamos si recibe un message del tipo double, de ser así
recuperamos los datos según el parámetro pasado. Recuerden que asignamos un argumento en los objetos datawindows que habíamos creado. De caso contrario, inserta un registro en blanco en la cabecera.
Para ir viendo como va quedando agregaremos el siguiente script en el evento open de la aplicación.
Poco a poco va tomando forma.
Regresamos a la ventana w_registro y vamos a crear tres funciones.
Aquí creamos una función llamada uf_seleccionar()
int fila
string id_product
fila=dw_1.getrow()
if fila=0 then
return
end if
id_product=dw_1.getitemstring( fila,"product_code")
closewithreturn(this,id_product)
Esta función la llamaremos desde el evento doubleclic del dw control y desde el evento clic del cb_seleccionar.
Agregar además en el evento construct del dw control
Abrimos la ventana w_buscar, si el parámetro es correcto hacemos un select para obtener los datos del producto seleccionado (Esto también se podría haber hecho usando struct, el cual seria el valor devuelto por la ventana w_buscar).
Agregamos otra función llamada uf_agregar().
int id,i
dw_cabecera.accepttext( )
dw_detalle.accepttext( )
if dw_cabecera.update( )= 1 then
id=dw_cabecera.getitemnumber(1,1)
for i=1 to dw_detalle.rowcount( )
dw_detalle.setitem( i, "document_number", id)
next
if dw_detalle.update( )=1 then
commit using sqlca;
closewithreturn(this,1)
else
rollback using sqlca;
messagebox("Error",sqlca.sqlerrtext)
end if
else
rollback using sqlca;
messagebox("Error",sqlca.sqlerrtext)
end if
Ademas en el evento construct del dw_cabecera agregar el objeto de transacción.
y en el dw_detalle
Ejecutamos la aplicación para ir viendo como esta quedando. Le damos clic en nuevo y se abrirá la ventana de registro. Si desplegamos el campo supplier podemos observar que se muestra la lista de supplier que están registradas en la base de datos(ingresadas manualmente).
Agregamos el llamado de las funciones uf_agregar y uf_buscar en los botones cb_agregar y cb_buscar
No nos olvidemos del botón aceptar
Ejecutamos la aplicación para probarla.
Si no se muestra ninguna datos verificar si se ha guardado en la base de datos y en e evento construct del dw_1 de la ventana w_lista verificar que este el siguiente codigo:
this.settransobject( sqlca)
this.retrieve( )