Page 1 of 2
Need help with code block
Posted: Tue Dec 29, 2020 10:32 pm
by Claudio Ricardo
Hi All...
In Browse with DBF work fine:
PRIVATE bColor := { || If ( Articulos->Stock < Articulos->Stk_Min , { 255,80,80 } , { 255,255,255 } ) }
Now i need some but in Grid control, add data from array
i need: if col number 3 (Stock) < col number 4 (Stock Min) show row in red... othercase normal white
Any can help me please.
Code: Select all
#include "hmg.ch"
Declare Window Stock
Function Stock_button_suc10_action
LOCAL aTable := {}
LOCAL aTotal := {}
LOCAL cQuery := ""
LOCAL tQuery := ""
PRIVATE bColor := {|| If ((This.CellColIndex,3) < (This.CellColIndex,4) , { 255,80,80 } , { 255,255,255 } ) } // Don't work
Load Window Stock_Sucursales
SetProperty ("Stock_Sucursales" , "Title" , "Stock Sucursal 10")
Stock_Sucursales. Center
cQuery := " SELECT * FROM Stock_10;"
tQuery := " SELECT COALESCE(SUM(Stock_Kg),0) AS T1, COALESCE(SUM(Stock_Un),0) AS T2 FROM Stock_10;"
If MySQL_Connect ()
If MySQL_Database_Connect ()
aTable := MySQL_ExecQuery (oServer,cQuery)
aTotal := MySQL_ExecQuery (oServer,tQuery)
DoMethod ("Stock_Sucursales" , "Grid_Stock" , "DeleteAllItems")
If Len (aTable) > 0
For n := 1 TO Len (aTable)
DoMethod("Stock_Sucursales","Grid_Stock","AddItem", aTable[n] )
Next
EndIf
DoMethod (Stock_Sucursales.StatusBar.Item (1) := " Stock de Sucursal: 10 ")
DoMethod (Stock_Sucursales.StatusBar.Item (2) := " Total Peso: " + AllTrim (Str (aTotal[1,1])))
DoMethod (Stock_Sucursales.StatusBar.Item (3) := " Total Cantidades: " + AllTrim (Str (aTotal[1,2])))
EndIf
EndIf
Stock_Sucursales. Activate
Return Nil
Re: Need help with code block
Posted: Tue Dec 29, 2020 11:18 pm
by SALINETAS24
Hola Claudio,
Aquí tienes varios ejemplos ya publicados en el foro.
Espero que te sirvan.
viewtopic.php?f=5&t=6248&p=60424&hilit= ... mna#p60424
Un saludo,
Re: Need help with code block
Posted: Tue Dec 29, 2020 11:31 pm
by movilceles
Hola Claudio,
No se si te servira algo asi:
FUNCTION ON_INIT_Stock_Sucursales
bColor := {|| If ((This.CellColIndex,3) < (This.CellColIndex,4) , { 255,80,80 } , { 255,255,255 } ) }
SETPROPERTY("Stock_Sucursales","Grid_Stock","ColumnDYNAMICFORECOLOR",3,bColor)
RETURN
Re: Need help with code block
Posted: Tue Dec 29, 2020 11:46 pm
by Claudio Ricardo
Muchas Gracias Salinetas pero no encontre nada ahi igual que en los mas de 40 ejemplos de grid que hay en samples.
Sera que no se podra hacer como en el Browse ?
Re: Need help with code block
Posted: Tue Dec 29, 2020 11:56 pm
by Claudio Ricardo
Muchas Gracias Movilceles... yo ya habia puesto en el FMG:
DYNAMICBACKCOLOR { bColor , bColor , bColor , bColor , bColor , bColor , bColor , bColor , bColor , bColor }
lo reemplace por Nil y probe tu funcion pero pone en rojo TODA la tercer columna.
Lo que necesito es destacar los registros en los que el campo (Stock en este caso) sea menor que
el campo (Stock Minimo) para que el cliente lo vea en otro color.
En el control Browse funciona perfecto el code block que muestro arriba.
pero aqui necesito usar grid porque el contenido viene de un array.
Re: Need help with code block
Posted: Wed Dec 30, 2020 12:15 am
by movilceles
Claudio prueba asi:
bColor := {|| If (Val(This.CellColIndex,3) < Val(This.CellColIndex,4) , { 255,80,80 } , { 255,255,255 } ) }
Re: Need help with code block
Posted: Wed Dec 30, 2020 12:25 am
by Claudio Ricardo
movilceles wrote: ↑Wed Dec 30, 2020 12:15 am
Claudio prueba asi:
bColor := {|| If (Val(This.CellColIndex,3) < Val(This.CellColIndex,4) , { 255,80,80 } , { 255,255,255 } ) }
Da error al compilar...
Mi error esta en como tomo el dato de cada celda para compararlo...
Intentare evaluar el array y no el grid, tal vez asi funcione...
Re: Need help with code block
Posted: Wed Dec 30, 2020 4:41 am
by Claudio Ricardo
Al no poder armar el condicional en el codeblock para grid opte por lo seguro:
Cree una DBF temporal, la cargo desde el array y reemplace el grid por browse...
Funciona perfecto aunque un poquito mas lento... Paso el codigo terminado y captura.
Code: Select all
#include "hmg.ch"
Declare Window Stock
Function Stock_button_suc10_action
LOCAL aTable := {}
LOCAL aTotal := {}
LOCAL cQuery := ""
LOCAL tQuery := ""
PRIVATE bColor := { || If ( TmpStk->Stock_Kg < TmpStk->Min_Kg .OR. TmpStk->Stock_Un < TmpStk->Min_Un ,{255,80,80} , {255,255,255} ) }
cQuery := " SELECT * FROM Stock_10;"
tQuery := " SELECT COALESCE(SUM(Stock_Kg),0) AS T1, COALESCE(SUM(Stock_Un),0) AS T2 FROM Stock_10;"
If MySQL_Connect ()
If MySQL_Database_Connect ()
aTable := MySQL_ExecQuery (oServer,cQuery)
aTotal := MySQL_ExecQuery (oServer,tQuery)
Use TmpStk New
Zap
If Len (aTable) > 0
For n := 1 TO Len (aTable)
Append Blank
Replace Codigo With aTable[n,1]
Replace Descrip With aTable[n,2]
Replace Stock_Kg With aTable[n,3]
Replace Min_Kg With aTable[n,4]
Replace Ult_Ing_Kg With aTable[n,5]
Replace Stock_Un With aTable[n,6]
Replace Min_Un With aTable[n,7]
Replace Ult_Ing_Un With aTable[n,8]
Replace Fecha With aTable[n,9]
Replace Hora With aTable[n,10]
Next
Commit
Go Top
EndIf
Else
MsgStop ("Error conectando a la base de datos !" , "SQL Error !")
Return Nil
EndIf
Else
MsgStop ("Error al intentar conectar con el Hosting !" , "Internet Error !")
Return Nil
EndIf
If IsWindowActive (Stock_Sucursales)
DoMethod ("Stock_Sucursales" , " SetFocus ")
Else
Load Window Stock_Sucursales
SetProperty ("Stock_Sucursales" , "Title" , "Stock Sucursal 10")
Stock_Sucursales. Center
DoMethod (Stock_Sucursales.StatusBar.Item (1) := " Stock de Sucursal: 10 ")
DoMethod (Stock_Sucursales.StatusBar.Item (2) := " Total Peso: " + AllTrim (Str (aTotal[1,1])))
DoMethod (Stock_Sucursales.StatusBar.Item (3) := " Total Cantidades: " + AllTrim (Str (aTotal[1,2])))
Stock_Sucursales. Activate
EndIf
Return Nil
//--------------------------------------------------------------------------------------------------------//
Function Stock_Sucursales_Form_OnRelease
Use
Return Nil

- Screenshot_20201230_014308.png (7.83 KiB) Viewed 1523 times
Re: Need help with code block
Posted: Wed Dec 30, 2020 11:40 am
by SALINETAS24
by Claudio Ricardo » Wed Dec 30, 2020 4:41 am
Al no poder armar el condicional en el codeblock para grid opte por lo seguro:
Hola Claudio Ricardo.
La pequeña "tara" que tiene el GRID es que en tiempo de CREACIÓN solo da acceso al valor de la CELDA (This.CellValue) que se está en ese momento procesando, lo cual nos genera un problema cuando lo que queremos es comparar su valor con el valor de otra celda para pintar.
Te paso una solución al mismo, que he venido utilizando. No es muy ortodoxa pero es "resultona". y visualmente hace lo que quieres. Se trata de crear una primera Celda, no visible, (de longitud 1) y que tiene el resultado de la operación (en tu caso del Stock Actual menos el stock Mínimo) y según su valor pintamos toda la fila de un color o de otro.
Un saludo y vamos con esa cervecita.....
Re: Need help with code block
Posted: Wed Dec 30, 2020 3:02 pm
by martingz
Claudio Ricardo mil disculpas por contestar tan tarde yo uso esto en el grid para poner en rojo los cancelados, el que esta en la celda 12 si es 0 esta activo si es uno esta cancelado, creo que te serviria.
aColCan:={ ||if( ordencompra.grid_1.Cell(This.CellRowIndex,12) == '1',{244,0,0},{0,0,0})}
saludos