Page 1 of 1

xBrowse - SetCheck() (SOLUCIONADO)

PostPosted: Fri Jun 28, 2013 2:06 am
by MarioG
Estimados;
Tengo el siguiente xBrowse donde muestro en la columna última un ícono segun se cumpla una condición, y se ve así:
Image
Como se ve, en la cabecera, dice: "Para Facturar" (salida por impresora). Entonces, luego de este proceso pretendo que el SetCheck adopte esta visual:
Image
Quizas las imágenes son un poco reducidas (al menos en la vista previa).
Espero se entienda la idea... se puede?, como?

desde ya muchas gracias

Re: xBrowse - SetCheck()

PostPosted: Fri Jun 28, 2013 3:07 am
by MarioG
repito las imágenes:
Image
Image
agrego:
Lo intenté así (sin exito):
Code: Select all  Expand view
  WITH OBJECT ::oBrwCab:FCabFa14
      :cHeader:= "Para"+CRLF+"Facturar"
      :nHeadStrAlign:= :nDataStrAlign:= AL_CENTER
      :nHeadStrAlign:= :nDataBmpAlign:= AL_CENTER
      :SetCheck( { if( (h0["CabFacVta"]:cAlias)->FCabFa14 .and. !(h0["CabFacVta"]:cAlias)->FCabFa15, "bmp_Listo", ;
                   if( (h0["CabFacVta"]:cAlias)->FCabFa14 .and.  (h0["CabFacVta"]:cAlias)->FCabFa15, "bmp_PrntOk", "")), "" }, EDIT_GET )
         END

Para manejar tal condición dispongo de dos campos lógicos: Para Facturar, (h0["CabFacVta"]:cAlias)->FCabFa14, y Facturado (h0["CabFacVta"]:cAlias)->FCabFa15
Por ahora, una vez dada la condición de Facturado, estoy colorizando la fila.
Y para hacerlo mas difícil, en esta última condición, ya no se debería poder revertir al hacer doble click en el campo

nuevamente, gracias

Re: xBrowse - SetCheck()

PostPosted: Mon Jul 01, 2013 7:15 am
by nageswaragunupudi
Code: Select all  Expand view
WITH OBJECT ::oBrwCab:FCabFa14
   :cHeader    := "Para"+CRLF+"Facturar"
   :nHeadStrAlign := :nDataStrAlign:= AL_CENTER
   :nHeadStrAlign := :nDataBmpAlign:= AL_CENTER
   //
   :bEditValie := { || If( (h0["CabFacVta"]:cAlias)->FCabFa14 .and. !(h0["CabFacVta"]:cAlias)->FCabFa15, .t., ;
                       If( (h0["CabFacVta"]:cAlias)->FCabFa14 .and.  (h0["CabFacVta"]:cAlias)->FCabFa15, .f., ;
                       nil ) ) }

   :SetCheck( { "bmp_Listo", "bmp_PrntOk" }, .t. )
END
 

Re: xBrowse - SetCheck()

PostPosted: Mon Jul 01, 2013 1:24 pm
by MarioG
Mr. Rao
many thanks!; but now, i can't do dobleclic :cry:
The first time, I doubleclick to show "ready to print" status. In the second time, i pretend show the other icon.
But I think that not the object of SetCheck().
I'll use a diferent color for this line

sorry for my english
Regards

Re: xBrowse - SetCheck()

PostPosted: Sun Jul 07, 2013 12:23 am
by MarioG
Estimados;
Vuelvo sobre este tema a ver si alguien me puede ayudar.
Explico lo que pretendo hacer:
Tengo, en un xBrowse, una lista de (a la que llamo) cabeceras de facturas. O sea, alguien en Administración prepara un pedido para Facturar.
En Depósito ese Pedido se prepara. Una vez preparado, se hace doble clic en la columna "Para Facturar" mostrando el icono respectivo.
Finalmente en Administración se lo Factura. Luego de facturado, el SetCheck() se pone en .f. (no muestra nada) y la fila se pinta de un color distinto del resto (gris) para indicar que ya esta facturado.
Ahora bien, la incongruencia es que si, en este último estado, hago nuevamente dobleclic, el SetCheck(), obviamente, devuelve verdadero y muestra el icono.
Como hago para controlar, para que antes de ejecutar SetCheck(), me Alerte o no, sobre la condición de la fila
Tengo dos campos lógicos: Campo1 (FCabFa14), "Para Facturar" y Campo2 (FCabFa15), "Facturado"

O si hay otra opción, bienvenida!
muchas gracias

Re: xBrowse - SetCheck()

PostPosted: Sun Jul 07, 2013 4:39 pm
by joseluisysturiz
Creo que tu solucion esta en el methodo on dobleclick de columna, yo hago algo parecido, si esta tildado(check) o no, dependiendo tambien de otra condicion en una VAR, permito que se haga el cambio o switcheo en el check, no se si eso te da una idea de que hacer o te deja igual o peor que antes, saludos... :shock:

Re: xBrowse - SetCheck()

PostPosted: Thu Jul 11, 2013 11:27 pm
by MarioG
José, gracias por responder
Podría poner el código de como lo haces?

Re: xBrowse - SetCheck()

PostPosted: Fri Jul 12, 2013 2:20 am
by joseluisysturiz
Disculpa la tardanza, andaba un pòco ful, haber si esto te ayuda o da una idea sobre lo que quieres hacer, nose si habra una manera mas facil, pero a mi me funciona a la perfeccion para lo que necesito, esto es con MYSQL, saludos... :shock:

EN EL xBROWSE uso una VAR que controla el setcheck y en la funcion act_check() hago el cambio dependiendo de lo que quiera o valide, por lo menos si el cliente ya esta adjudicado, y tratan de volverlo adjudicar en el mismo momento, el sistema advierte y no lo permite, aunque tengo varias condiciones en mis validaciones...

// ACT./DES. STATUS SELECCIONADO PARA ADJUDICAR CON D-CLICK
:bLDblClick := {|nRow|IIF( oQryADJ:adj_adjudicar = 0 ,;
( oQryADJ:adj_adjudicar := 1 ) ,;
( oQryADJ:adj_adjudicar := 0 ) ) ,;
act_check( oQryAdj ) ,;
oQryADJ:REFRESH(), oBrw:REFRESH() }

// ACT./DES. STATUS SELECCIONADO PARA ADJUDICAR CON SPACE
:bKeyDown= {|nKey| IF ( nKey == VK_SPACE ,;
IIF( oQryADJ:adj_adjudicar = 0 ,;
( oQryADJ:adj_adjudicar := 1 ) ,;
( oQryADJ:adj_adjudicar := 0 ) ), ) }


PROCEDURE act_check( oQryAdj ) // ACTUALIZA CHECK PARA adjudicar

LOCAL cSql, oError

oQryAdj:REFRESH()

cSql := "UPDATE cronograma SET "
cSql += "adj_adjudicar=" + ClipValue2SQL( IF( oQryAdj:adj_adjudicar == 0, 1, 0 ) )
cSql += " WHERE adj_insc = '" + ClipValue2SQL( oQryAdj:adj_insc ) + "' "

TRY
oDatos:oConex:Execute( cSql )

CATCH oError
MSGALERT( oError:Description + CRLF + ;
"Error Grabando en Tabla (cronograma), Sentencia" + CRLF + CRLF + ;
cSql, oDatos:cTitMsg )
END

RETURN

Re: xBrowse - SetCheck()

PostPosted: Sat Jul 13, 2013 8:28 pm
by MarioG
José Luis;
gracias por responder, es lo que necesito.
Aunque no "veo", como afecta a la columna en la que tengo definido el SetCheck().
Entiendo lo que hacen bLDblclick y bKeyDown, pero no entiendo como afectan a la columna con el Setcheck

gracias

Re: xBrowse - SetCheck()

PostPosted: Sun Jul 14, 2013 12:32 am
by joseluisysturiz
MarioG wrote:José Luis;
gracias por responder, es lo que necesito.
Aunque no "veo", como afecta a la columna en la que tengo definido el SetCheck().
Entiendo lo que hacen bLDblclick y bKeyDown, pero no entiendo como afectan a la columna con el Setcheck

gracias


Mario, como es bLDblclick aplica sobre la fila, afectando automaticamente sobre la columna que tenga SetCheck(), te mando una imagen para que veas lo que te digo, la columna ADJ es la que usa el SetCheck, saludos... :shock:

Image

Uploaded with ImageShack.us

Re: xBrowse - SetCheck()

PostPosted: Mon Jul 15, 2013 10:58 am
by Antonio Linares
Jose Luis,

Se ve muy bien, enhorabuena :-)

como haces para definir los dias para cada persona ? Desde una caja de diálogo ?

Re: xBrowse - SetCheck()

PostPosted: Mon Jul 15, 2013 1:54 pm
by joseluisysturiz
Antonio Linares wrote:Jose Luis,

Se ve muy bien, enhorabuena :-)

como haces para definir los dias para cada persona ? Desde una caja de diálogo ?


Muchas gracias Antonio, ese cronograma es un xbrowse de solo lectura que se alimenta de una tabla que contiene el cronograma de pago individual con varias informaciones sobre el pago y son mensuales, esto se procesa en un sistema de facturacion de forma automatica sin introducir datos, solo la cantidad de cuotas mensuales a pagar, previamente determinado en un contrato, aca una vista de la facturacion, saludos... :shock:

Image

Uploaded with ImageShack.us

Re: xBrowse - SetCheck()

PostPosted: Tue Jul 16, 2013 3:03 pm
by MarioG
Estimados;
gracias a Rao y José Luis por sus respuestas.
Finalmente, y eso es lo bueno de cuando no nos "sirven la respuesta en bandeja", solucioné de la manera que me deja satisfecho. Por lo que obviamente supongo que habrá, otras mejores soluciones.
Para solucionar lo planteado, que consiste, en representar en una columna 3 estados, a traves de 2 campos lógicos, quise acudir a SetCheck(), pero como obviamente, SetCheck(), esta diseñado para presentar 2 posibles estados, la cosa se puso muuuuy dificl (o mejor dicho "tercamente" dificil).
La solución, en código, fue la siguiente:
Code: Select all  Expand view
  WITH OBJECT ::oBrwCab:aCols[8]
      :cHeader:= "Estado"
      :nHeadStrAlign:= AL_CENTER
      :nDataBmpAlign:= AL_LEFT
      :nDataStrAlign:= AL_RIGHT
      :SetCheck( { "bmp_Listo", "" }, {|o,v| h0["CabFacVta"]:Load(), ;
                                             if( !h0["CabFacVta"]:FCabFa14 .and. !h0["CabFacVta"]:FCabFa15, ;
                                                 ( h0["CabFacVta"]:FCabFa14:= v, h0["CabFacVta"]:Save() ), ;
                                             if( h0["CabFacVta"]:FCabFa14 .and. !h0["CabFacVta"]:FCabFa15, ;
                                                 ( h0["CabFacVta"]:FCabFa14:= v, h0["CabFacVta"]:Save() ), ;
                                             if( h0["CabFacVta"]:FCabFa14 .and. h0["CabFacVta"]:FCabFa15, ;
                                                 ( if( MsgNoYes( "Este Documento ya fue Facturado"+CRLF+"Desea visualizarlo/re imprimirlo?", "Atención!" ), ;
                                                       ::SetCab2Print( FALSE ), ), .f. ), nil ))) } )
      :bStrData:= {|| h0["CabFacVta"]:Load(), ;
                      if( !h0["CabFacVta"]:FCabFa14 .and. !h0["CabFacVta"]:FCabFa15, ;
                          ( "P/Preparar" ), ;
                      if( h0["CabFacVta"]:FCabFa14 .and. !h0["CabFacVta"]:FCabFa15, ;
                          ( "P/Facturar" ), ;
                      if( h0["CabFacVta"]:FCabFa14 .and. h0["CabFacVta"]:FCabFa15, ;
                          ( "FACTURADO"  ), nil ))) }

      :bClrStd := {|| {if( !h0["CabFacVta"]:FCabFa14 .and. !h0["CabFacVta"]:FCabFa15, ;
                           CLR_BLACK, ;
                       if( h0["CabFacVta"]:FCabFa14 .and. !h0["CabFacVta"]:FCabFa15, ;
                           CLR_HBLUE, ;
                       if( h0["CabFacVta"]:FCabFa14 .and. h0["CabFacVta"]:FCabFa15, ;
                           CLR_HRED, CLR_BLACK ))), CLR_BACKBLUE2} }
   END
 

Entonces esto queda así (segun la asignación .T. o .F. de los dos campos que involucran el analisis)
En el estado de que solo esta preparado un pedido la columna "Estado" muestra "P/Preparar", en color estandar.
Pasado este estado el operador hace doble clic y se muestra el ícono y el texto cambia a "P/Facturar", en color azul fuerte.
Una vez emitido, se mantiene el ícono y el texto cambia a FACTURADO y en color rojo fuerte.
Image
En el estado FACTURADO. Si el operador hace dobleclic; entonces emerge un alerta opcional de si quiere previsualizar y/o re imprimir el documento.

José Luis:
Si observás el SetCheck(), el segundo parámetro también puede ser un codeblock (no lo sabia y lo encontré en uno de los samples de xBrowse). De manera que con este CB prescindí del uso de :bLDblClick

Saludos

Re: xBrowse - SetCheck() (SOLUCIONADO)

PostPosted: Wed Jul 17, 2013 12:59 am
by joseluisysturiz
Mario que bueno resolvistes, es la idea del foro, reza un dicho...NO LES DES PESCADO, ENSEÑALOS A PESCAR, y asi es que aprendemos cada dia mas, esta muy buena tu solucion planteada y lo del setcheck lo habia visto en el foro, pero como ya tenia esto hecho, lo deje asi, igual gracias por el detalle, seguimos a la orden hasta que Dios quiera, saludos... :shock: