Estimados amigos, tengo un problema hace mas de 6 meses y peleo por arreglarlo y no me da la cabeza, lo comento, abro una tabla una tabla Mysql usando xbrowse, esta tabla por defecto viene ordenada por un campo codigo y trae otros 4 campos mas, entre ellos el campo nombre, el punto es que cuando ingreso al dialogo, se ve ordenada la tabla, si hago doble click sobre el encabezado me la ordena por otro campo, en este caso, pero si por algun motivo edito una linea y cambio algun contenido de ese registro, al volver a la tabla me la muestra donde quede, pero si se ocurre hacer doble click sobre un encabezado, aunque sea el mismo que estaba inicialmente, me sale esto
Application
===========
Path and name: C:\KPI_WEB\GESTION.Exe (32 bits)
Size: 1,469,952 bytes
Compiler version: xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 9445)
FiveWin Version: FWHX 12.08
Windows version: 6.2, Build 9200
Time from start: 0 hours 0 mins 25 secs
Error occurred at: 16/12/2019, 21:15:37
Error description: Error DBCMD/2001 Workarea not in use: ORDBAGNAME
mi codigo es:
FUNCTION ING_INVENTARIO_GENERAL(cEmpresa, cUsuario)
local oDlg, oBrw, oFont2, oCol, oSay, oBtn2[ 9 ], oBoton1, oBoton2, oBoton3
LOCAL oGet,nIndex,aIdx:={}
LOCAL cBusca:= Space(60)
Local cSeek:=""
Local oCampo, cCampo :=space(50), Mensaje
Mensaje:="Stock Inventario General"
cTab_Art:=XServer:Query("SELECT cod_art, nom_art, in1_art, in2_art, in3_art, in4_art FROM tab_art ORDER BY cod_art,nom_art")
Define Font oFont2 Name "Tahoma" Size 0,-11 Bold
DEFINE DIALOG oDlg ResName "BROW_3BG" TITLE "Stock Inventario General" //COLOR Rgb( 255, 0, 0 ), Rgb(185,220,255)
Redefine BtnBmp oBoton3 Id 103 Resource "BTO_SALIR" Of oDlg;
ACTION oDlg:End() 2007
oBrw:=TxBrowse():New(oDlg)
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW // Con cursor de todo el renglón
oBrw:nColDividerStyle := LINESTYLE_RAISED
oBrw:nRowDividerStyle := LINESTYLE_RAISED
oBrw:bClrSelFocus := {|| { nRGB( 0, 0, 0), nRGB(128,255,128) } } // para barra de linea selecc cuando el control tiene el foco
oBrw:lColDividerComplete := (.t.) // (.T.) Mantiene siempre llena la pantalla
oBrw:nHeaderHeight := 35 // Altura de los encabezados
oBrw:nRowHeight := 25 // Altura del renglón
oBrw:nHeaderLines := 3 // Número de líneas de encabezados
oBrw:nDataLines := 2 // Número de líneas de detalle
oBrw:nFooterHeight := 20 // Altura del footer
oBrw:nFooterLines := 2 // Número de líneas en el footer
oBrw:lFooter := (.T.) // Sí queremos línea de footer
oBrw:lHScroll := (.T.) // Quitamos el scroll horizontal
oBrw:bClrHeader := {|| { nRGB(000,000,000), nRGB(128,255,128) } }
oBrw:bClrStd := {|| If( oBrw:KeyNo() % 2 == 0, { CLR_BLACK, RGB( 224, 236, 255 ) }, { CLR_BLACK, RGB( 189, 211, 253 ) } ) }
oBrw:bClrFooter := {|| { nRGB(000,000,000), nRGB(150,200,200) } }
oBrw:bClrSel := {|| { nRGB(000,000,000), nRGB(128,255,128) } } // para barra de linea selecc cuando el control no tiene el foco
oBrw:l2007:=.T.
oBrw:lAutoSort:=.T.
oBrw:nStretchCol := STRETCHCOL_WIDEST
oBrw:oFont := oFont2
oBrw:bLDblClick := {|| Ing_Inv_Gral(oBrw, cTab_Art, cTab_Art:cod_art , cEmpresa), cTab_Art:Refresh() }
oBrw:SetDolphin(cTab_Art,.T.,.T.)
oBrw:aCols[1]:cHeader := "Código"
oBrw:aCols[1]:bStrData := { || cTab_Art:cod_art }
oBrw:aCols[1]:nHeadStrAlign := AL_CENTER
oBrw:aCols[1]:nDataStrAlign := AL_LEFT //LEFT
oBrw:aCols[1]:nWidth := 100
oBrw:aCols[1]:cToolTip :="Haga doble Click para ordenar por código"
oBrw:aCols[2]:cHeader := "Detalle"
oBrw:aCols[2]:bStrData := { || cTab_Art:nom_art }
oBrw:aCols[2]:nHeadStrAlign := AL_CENTER
oBrw:aCols[2]:nDataStrAlign := AL_LEFT //LEFT
oBrw:aCols[2]:nWidth := 350
oBrw:aCols[2]:cToolTip :="Haga doble Click para ordenar por Detalle"
oBrw:aCols[3]:cHeader := "Stock"+CRLF+cEmpresa[21]
oBrw:aCols[3]:bStrData := { || Transform((cTab_Art:in1_art),"@E 999,999") }
oBrw:aCols[3]:nHeadStrAlign := AL_CENTER
oBrw:aCols[3]:nDataStrAlign := AL_RIGHT //LEFT
oBrw:aCols[3]:nWidth := 80
oBrw:aCols[4]:cHeader := "Stock"+CRLF+cEmpresa[22]
oBrw:aCols[4]:bStrData := { || Transform((cTab_Art:in2_art),"@E 999,999") }
oBrw:aCols[4]:nHeadStrAlign := AL_CENTER
oBrw:aCols[4]:nDataStrAlign := AL_RIGHT //LEFT
oBrw:aCols[4]:nWidth := 80
oBrw:aCols[5]:cHeader := "Stock"+CRLF+cEmpresa[23]
oBrw:aCols[5]:bStrData := { || Transform((cTab_Art:in3_art),"@E 999,999") }
oBrw:aCols[5]:nHeadStrAlign := AL_CENTER
oBrw:aCols[5]:nDataStrAlign := AL_RIGHT //LEFT
oBrw:aCols[5]:nWidth := 80
oBrw:aCols[6]:cHeader := "Stock"+CRLF+cEmpresa[24]
oBrw:aCols[6]:bStrData := { || Transform((cTab_Art:in4_art),"@E 999,999") }
oBrw:aCols[6]:nHeadStrAlign := AL_CENTER
oBrw:aCols[6]:nDataStrAlign := AL_RIGHT //LEFT
oBrw:aCols[6]:nWidth := 80
oBrw:CreateFromResource( 1000 )
Redefine Say oBrw:oSeek Var oBrw:cSeek Id 1001 Of oDlg Picture "@!" Font oFont2 COLOR Rgb( 255, 0, 0 ), Rgb(185,220,255)
ACTIVATE DIALOG oDlg CENTERED
oFont2:End()
RETURN NIL
Function Ing_Inv_Gral(oBrw, cTab_Art, xCod_art, cEmpresa)
LOCAL oGets:= Array( 05 ), aGets:= Array( 05 )
Local oBtns:= Array( 05 )
Local oBmp,oDlg1,oFont1
LOCAL lAceptar := .F.
Local aCampos,aValues,aWhere, lAppend
Local cStock1 :=0, oStock1
Local cStock2 :=0, oStock2
Local cStock3 :=0, oStock3
Local cStock4 :=0, oStock4
cStock1:=cTab_Art:in1_art
cStock2:=cTab_Art:in2_art
cStock3:=cTab_Art:in3_art
cStock4:=cTab_Art:in4_art
aGets[1]:="Stock "+cEmpresa[21]
aGets[2]:="Stock "+cEmpresa[22]
aGets[3]:="Stock "+cEmpresa[23]
aGets[4]:="Stock "+cEmpresa[24]
Define Font oFont1 Name "Tahoma" Size 0,-12 Bold
DEFINE DIALOG oDlg1 RESOURCE "Item_Bodega" TITLE "Ingreso "+Alltrim(cTab_Art:nom_art)
REDEFINE SAY oGets[1] Var aGets[1] ID 4001 OF oDlg1 FONT oFont1
REDEFINE SAY oGets[2] Var aGets[2] ID 4002 OF oDlg1 FONT oFont1
REDEFINE SAY oGets[3] Var aGets[3] ID 4003 OF oDlg1 FONT oFont1
REDEFINE SAY oGets[4] Var aGets[4] ID 4004 OF oDlg1 FONT oFont1
REDEFINE GET cStock1 PICTURE "@E 99,999.99" ID 101 OF oDlg1 FONT oFont1 UPDATE
REDEFINE GET cStock2 PICTURE "@E 99,999.99" ID 102 OF oDlg1 FONT oFont1 UPDATE
REDEFINE GET cStock3 PICTURE "@E 99,999.99" ID 103 OF oDlg1 FONT oFont1 UPDATE
REDEFINE GET cStock4 PICTURE "@E 99,999.99" ID 104 OF oDlg1 FONT oFont1 UPDATE
REDEFINE BUTTONBMP oBtns[1] ID 301 OF oDlg1 PROMPT "&Grabar" ;
ACTION ( lAceptar := .T., oDlg1:End() ) BITMAP "Grabar" TEXTRIGHT
REDEFINE BUTTONBMP oBtns[2] ID 302 OF oDlg1 PROMPT "&Salir";
ACTION ( oDlg1:End() ) BITMAP "Cancelar" TEXTRIGHT cancel
ACTIVATE DIALOG oDlg1 CENTERED
IF lAceptar == .T.
aCampos:={ 'in1_art', 'in2_art', 'in3_art', 'in4_art' }
aValues:={ cStock1, cStock2, cStock3, cStock4 }
aWhere := "cod_art='"+AllTrim(xCod_Art)+"'"
xServer: Update( "tab_art", aCampos, aValues, aWhere )
Endif
MSGRUN( "Procesando...., espere un momento por favor ", "Usuario" , {|| SetDolphin( oBrw, cTab_Art,.f. ) } )
cTab_Art:Refresh()
oBrw:SetFocus()
oBrw:Refresh()
Return Nil
como indico, necesito que si modifico el contenido de los campos in1_art al in4_art, pueda regresar al dialogo original y pueda pinchar sobre el encabezado para cambiar de columna de orden, ahora si esto no se puede, necesito inhabilitar en ese caso el click sobre cada columna y evitar que se me caiga el programa.
Gracias