Prueba esta opcion a ver si te sirve:
Es creando una tabla en memoria con la query con los condicionales que desees
#include "FiveWin.ch"
#include "xbrowse.ch"
FUNCTION Main()
local oChild, oBrw, oCol, oTimer, oServer, oQry, cSql
local cServer := 'localhost', cUser := 'root', cPassword := 'miclave', cDBName := 'test', nPort := "3306"
FWCONNECT oServer HOST cServer USER cUser PASSWORD cPassword DB cDBName PORT VAL(nPort)
DEFINE WINDOW oChild TITLE "Auto edit browse"
cSql:="CREATE TABLE tempor ENGINE=MEMORY "+;
" SELECT codigo as codigo,nombre as nombre, if(codigo > 3,true,false) as logico " +;
" FROM articu"
oServer:Execute( cSql )
oQry := oServer:Query("SELECT * FROM tempor")
@ 0,0 XBROWSE oBrw DATASOURCE oQry ;
COLUMNS "codigo","nombre","logico";
HEADERS "Cod.","Descripcion Articulo","?";
SIZES 100,250,50 OF oChild FASTEDIT
WITH OBJECT oBrw
:aCols[3]:SetCheck()
:aCols[3]:bEditValue := {|| IF( oQry:logico == 1, .t., .f. ) }
:aCols[3]:bLDClickData := {|| CambiaChek(oBrw, oQry)}
:CreateFromCode()
END
oChild:oClient := oBrw
ACTIVATE WINDOW oChild
RETURN NIL
STATIC FUNCTION CambiaChek(oBrw,oQry)
oQry:logico := IF(oQry:logico==1,0,1)
oQry:Save()
oQry:Refresh()
oBrw:Refresh()
RETURN nil