< Creación de nueva pantalla para mantenimiento de grupos de firmas
Planteamiento inicial
Volvemos a la pantalla de pedidos para añadir la funcionalidad necesaria a la botones que creamos tanto en el grid como en la botonera principal.
Formulario de Pedidos
Firmar línea (botón en grid)
En el punto anterior hemos creado un botón en el grid "grdLineas", accesible mediante su menú contextual, para firmar líneas de forma individual.
Firmar una única línea podríamos hacerlo mediante codificación SQL dentro de la llamada del propio botón, no obstante, como nuestra finalidad es crear un proceso que pueda firmar una o todas las líneas. llamaremos a un procedimiento almacenado que previamente hemos creado y, en función de nuestras necesidades, le pasaremos uno u otro parámetro. El ejemplo del procedimiento almacenado que usaremos se puede encontrar en el fichero adjunto pPers_FirmaPedidos.sql. Dicho procedimiento valida una línea, si se le pasa ésta como parámetro, o el pedido completo en caso contrario. Si las líneas están validadas elimina dicha validación y comprueba si están todas las líneas validadas para realizar una completa de todo el pedido.
IMPORTANTE: Es aconsejable que la ejecución de los procesos de actualización en base de datos se realice siempre por procedimiento almacenado
Como hemos creado el menú sólo tendremos que capturar el evento del grid MenuAfterExecute, más información aquí, y pasarle los parámetros correspondientes.
If aGrid.name = "grdLineas" Then ' Si estamos situados en una línea... If CLng(aGrid.getValue("IdLinea")) >= 1 Then If aMenuItem.Name = "Pers_mnuFirmar" Then Set Params = gCn.DameNewCollection Params.Add CLng(gcn.IdEmpleado) Params.Add CLng(gForm.Controls("IdPedido").Text) Params.Add CLng(aGrid.getValue("IdLinea")) retVal = gcn.EjecutaStoreCol("pPers_FirmaPedidos", params) If Not retVal Then MsgBox "Error firmando la línea de pedido",vbCritical,"Error Firma" Else aGrid.Refrescar gForm.Controls("Pers_GrdHcoFirmas").Refrescar gForm.Controls("EObjeto").Refresh If gForm.Controls("EObjeto").ObjGlobal.Propiedades("Pers_Validado") Then gForm.Controls("mnuMain").Tools("mnuAlbaran").visible = True Else gForm.Controls("mnuMain").Tools("mnuAlbaran").visible = False End If End If End If End If End If
Firmar línea (botón en formulario)
Puesto que hemos codificado la lógica necesaria para firmar pedidos en nuestro procedimiento haremos lo mismo para el botón principal desde el evento AfterExecute de la Botonera, omitiendo el parámetro "IdLinea" al que hemos dado un valor por defecto de "0" que determina el pedido completo, más información sobre el evento en el siguiente documento.
If aBoton.name = "Pers_ValidarPedido" Then Set Params = gCn.DameNewCollection Params.Add CLng(gcn.IdEmpleado) Params.Add CLng(gForm.Controls("IdPedido").Text) retVal = gcn.EjecutaStoreCol("pPers_FirmaPedidos", params) If Not retVal Then MsgBox "Error firmando el pedido",vbCritical,"Error Firma" Else gForm.Controls("grdLineas").Refrescar gForm.Controls("Pers_GrdHcoFirmas").Refrescar gForm.Controls("EObjeto").Refresh If gForm.Controls("EObjeto").ObjGlobal.Propiedades("Pers_Validado") Then gForm.Controls("mnuMain").Tools("mnuAlbaran").visible = True Else gForm.Controls("mnuMain").Tools("mnuAlbaran").visible = False End If End If End If
Con esto tenemos el formulario de Pedidos casi listo. No obstante podemos comprobar como el grid del histórico no está cargando nada porque no tenemos aún la lógica de grabación codificada; para ello crearemos un trigger personalizado en la tabla Conf_Pedidos_Cli_Linea que traspasará los valores al histórico. Más información de los mismos en el siguiente documento. El ejemplo de creación del trigger lo podemos encontrar en el fichero adjunto Pers_Conf_Pedidos_Lineas_UDTrig.sql.
El código con el ejemplo completo hasta el momento del formulario lo podemos ver en el fichero frmPedidos_3.txt.