Need help with code block

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Need help with code block

Post 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
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: Need help with code block

Post 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,
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
movilceles
Posts: 20
Joined: Sun Dec 04, 2016 1:43 pm
DBs Used: DBF
Location: Murcia - España

Re: Need help with code block

Post 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
Celes
Saludos / Regards :P - :idea: Cuanto mas simple mejor !! / The simpler the better !!
User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Re: Need help with code block

Post 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 ?
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Re: Need help with code block

Post 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.
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
movilceles
Posts: 20
Joined: Sun Dec 04, 2016 1:43 pm
DBs Used: DBF
Location: Murcia - España

Re: Need help with code block

Post by movilceles »

Claudio prueba asi:

bColor := {|| If (Val(This.CellColIndex,3) < Val(This.CellColIndex,4) , { 255,80,80 } , { 255,255,255 } ) }
Celes
Saludos / Regards :P - :idea: Cuanto mas simple mejor !! / The simpler the better !!
User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Re: Need help with code block

Post 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...
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Re: Need help with code block

Post 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
Screenshot_20201230_014308.png (7.83 KiB) Viewed 1519 times
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: Need help with code block

Post 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.....
Attachments
GRID_11.rar
PINTANDO LA FILA DEL GRID
(1.21 MiB) Downloaded 111 times
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
martingz
Posts: 401
Joined: Wed Nov 18, 2009 11:14 pm
Location: Mexico

Re: Need help with code block

Post 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
Post Reply