clase twbrowse

clase twbrowse

Postby leonorgonz@yahoo.com.ar » Thu Oct 13, 2005 9:22 pm

HOla Amigos: Tengo trabajando la clase twbrowse en un dialog, al abrir otra ventana con dialog y twbrowse en otra area de trabajo veo en la ventana de atras lo mismo que en la ventana nueva al cambiar el area. Como hago para que la ventana de atras siga mostrando los datos del area de trabajo de inicio. Gracias.
Saludos.
Leonor
Rosario - Argentina
leonorgonz@yahoo.com.ar
 

Postby Antonio Linares » Fri Oct 14, 2005 7:23 am

Leonor,

La segunda DBF que usas, lo haces con la claúsula NEW ?

USE ... NEW

Si no, estarias cerrando la DBF anterior y reemplazándola por la nueva.

Por favor, regístrate en estos foros. Son sólo unos minutos. Gracias.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby DanielPuente » Mon Oct 24, 2005 1:53 pm

Leonor:

Agregale la clausula alias a la definicion de cada browse:

WALIAS:='MOVART'
REDEFINE LISTBOX oBrw fields ID 999 OF oDlg ;
COLOR CLR_BLACK, CLR_WHITE ;
FONT oFont ALIAS (WALIAS) UPDATE

wAlias3:="MOVAR2"
REDEFINE LISTBOX oBrw3 fields ID 998 OF oDlg ;
COLOR CLR_BLACK, CLR_WHITE ;
FONT oFont ALIAS (WALIAS3) UPDATE

Y en las definiciones de las columnas del browse inclui siempre el alias de la base, no pongas solo el nombre del campo o fieldblock(). Si la base es la misma en los dos browses, abrilas en dos alias distintas.

Saludos,
Daniel Puente
Mar del Plata, Argentina
danielpuente@speedy.com.ar
puenteda@hotmail.com
DanielPuente
 
Posts: 108
Joined: Sun Oct 09, 2005 6:12 pm
Location: Mar del Plata - Argentina

Postby Leonor Gonzalez » Mon Oct 24, 2005 3:45 pm

DanielPuente wrote:Leonor:

Agregale la clausula alias a la definicion de cada browse:

WALIAS:='MOVART'
REDEFINE LISTBOX oBrw fields ID 999 OF oDlg ;
COLOR CLR_BLACK, CLR_WHITE ;
FONT oFont ALIAS (WALIAS) UPDATE

wAlias3:="MOVAR2"
REDEFINE LISTBOX oBrw3 fields ID 998 OF oDlg ;
COLOR CLR_BLACK, CLR_WHITE ;
FONT oFont ALIAS (WALIAS3) UPDATE

Y en las definiciones de las columnas del browse inclui siempre el alias de la base, no pongas solo el nombre del campo o fieldblock(). Si la base es la misma en los dos browses, abrilas en dos alias distintas.

Saludos,



Gracias por la ayuda:
Tengo una serie de dudas al respecto, cosas que no me quedan muy claras. Para el armado de la ventana con el listbox yo siempre llamo a una subrutina en la que ya cambie el area de trabajo con un dbselectar, o sea que ingreso a la subrutina con el area que necesito activa, la subrutina hace lo siguiente:

// genero la ventana que va a contener el listbox
oForm := TDialog():New( Top, Left, Bottom, Right, cTitle,,,,,,,,, .T.,, oFont )
// armo un array con todas las columnas que va a contener el listbox, porque pueden ser campos directos de la base o algunos relacionados con otras
CantFields := LEN( aDefFields )
FOR i = 1 TO CantFields
VarDef := ACLONE( aDefFields[i] )
M->Ancho := FormParse( VarDef[1] )
M->Etiqueta := ALLTRIM( OemToAnsi( FormParse( VarDef[2] ) ) )
VarDef[3] := SUBSTR( ALLTRIM( VarDef[3] ), 4 )
AADD( cEtiqueta, M->Etiqueta )
AADD( nAncho, M->Ancho )
M->Bloque:= LEFT( VarDef[3], LEN( ALLTRIM( VarDef[3] ) ) - 1 )
bBloque+=ACaracter( M->Bloque, VALTYPE(&(M->Bloque)))+","
NEXT
// en bBloque dejo por ejemplo campo1, campo2, campo3
bBloque= LEFT( bBloque, LEN( ALLTRIM( bBloque ) ) -1 )
bBloque= "{ " + bBloque + " }"

nProxArra := Alias()

@RowLis,1 LISTBOX ObjBrowse FIELDS "" ALIAS nProxArra SIZE X2Window, Y2Window OF oForm FONT oFontMulti

ObjBrowse:aHeaders = cEtiqueta
ObjBrowse:bLine = { || &(bBloque) }
ACTIVATE DIALOG oForm CENTER ON RIGHT CLICK MenuPopup( oForm,, aMenu ) ON INIT ( InitMulti( oForm ), ObjBrowse:Refresh() )

Esto funciona barbaro, dentro de esa ventana hay una accion que seleccionando una linea del listbox llama nuevamente a esa subrutina y trae datos de otra area de trabajo, sucede que cuando cambio el area automaticamente la ventana de atras pasa a tener los mismos datos que la ventana de adelante. Como hago para que en la ventana de atras quede fijo el alias de la otra area de trabajo. No olvidarse que la subrutina es siempre la misma. Por otro lado nunca use el REDEFINE, para que casos lo tendria que utilizar y como hago para saber el ID de un objeto ya creado, porque por lo que veo todos los redefine de todos los comandos necesitan el ID del objeto.
Ademas tengo otro problema, en algunos casos se me va de sistema con este cartel: ERROR BASE/1513 Operation too complex
En bBloque estoy ingresando lo siguiente:
//primer columna
{ IF(Abonos->CodTer==M->CodTer,">"," "),
//segunda columna
Abonos->CodTer,
//tercer columna
Abonos->CodArt,
//cuarta columna
LEFT(Abonos->Nombre,39),
//quinta columna
STR(Abonos->Cantidad,8,2),
//_ columna
TRANSFORM(ROUND(Abonos->Precio*(1+IIF(!TipImpu->Discrimina.AND.TipMov->Calc_Iva=="SI ",(Abonos->PorGravado/100)*(TipImpu->PorIva/100+TipImpu->PorIvaPlus/100),0))+(IIF(!TipImpu->Discrimina,Abonos->PrecVta*Abonos->PorInterno/100,0)),_REDONDEO),"@Z "+REPLICATE("9",10-_REDONDEO-1)+"."+REPLICATE("9",_REDONDEO) ),
//septima columna
TRANSFORM(Abonos->DescuenArt,"@Z 99.99"),TRANSFORM(Abonos->DescuenAr2,"@Z 99.99"),TRANSFORM(Abonos->DescuenAr3,"@Z 99.99"),TRANSFORM(ROUND(Abonos->Precio*(1+IIF(!TipImpu->Discrimina.AND.TipMov->Calc_Iva=="SI ",(Abonos->PorGravado/100)*(TipImpu->PorIva/100+TipImpu->PorIvaPlus/100),0))+(IIF(!TipImpu->Discrimina,Abonos->PrecVta*Abonos->PorInterno/100,0)),_REDONDEO)*(1-Abonos->DescuenArt/100)*(1-Abonos->DescuenAr2/100)*(1-Abonos->DescuenAr3/100)*Abonos->Cantidad ,"@Z "+REPLICATE("9",10-_REDONDEO-1)+"."+REPLICATE("9",_REDONDEO)) }

si yo elimino la _ o septima columna (primero uno y despues vuelvo a colocar esa y elimino la otra) me lo hace bien, pero con las dos columnas juntas no puede, saben si hay algun límite o porque me esta pasando esto.

Desde ya muchas gracias. Saludos a todos
Leonor
Leonor Gonzalez
 
Posts: 22
Joined: Fri Oct 14, 2005 12:18 pm

Postby Antonio Linares » Tue Oct 25, 2005 8:40 am

Leonor,

Procura que tus preguntas sean más cortas y simples de leer, sino se hace pesada su lectura y no consigues ayuda :?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Leonor Gonzalez » Tue Oct 25, 2005 12:17 pm

Antonio Linares wrote:Leonor,

Procura que tus preguntas sean más cortas y simples de leer, sino se hace pesada su lectura y no consigues ayuda :?


Gracias por el consejo Antonio. Vamos con una sola pregunta: en algunos casos cuando arma el listbox con la clase twbrowse si coloco los campos por separado lo arma bien pero cuando pongo todos los campos juntos sale es siguiente mensaje ERROR BASE/1513 Operation Too Complex. Existe algun límite de caracteres o datos a evaluar. Muchas Gracias.
Saludos. Leonor
Leonor Gonzalez
 
Posts: 22
Joined: Fri Oct 14, 2005 12:18 pm

Postby DanielPuente » Tue Oct 25, 2005 2:34 pm

Leonor:

Respecto al error en el bloque, si, el operador & tiene un limite. Tendrias que dividir su contenido o llamar a una funcion que haga el trabajo y devuelva un valor. Tampoco es necesario que todas las definiciones de las columnas del browse las tengas en un codigo de bloque, prodrias usar por ejemplo un codigo de bloque para cada columna en un vector:

Local VEC0_FIELD1 := { { || IF(LLOFACT->PENDIENTE=='X',hBmp,"") },;
{ || DTOC(LLOFACT->FECHA) } ,;
{ || LLOFACT->LFACT+" "+LLOFACT->PNFACT+"-"+LLOFACT->SNFACT } ,;
{ || BUS_DES("LLOCLIEN",1,LLOFACT->CLIENTE,"RAZSOC") },;
{ || TRANS(LLOFACT->TOTAL,"@E 999,999.99") } ,;

Local VEC0_ENC1 := { " " ,;
OEMTOANSI("Fecha"),;
OEMTOANSI("Factura"),;
" Cliente",;
"Total" ,;
VEC0_SIZE1 := {20,62,110,240,80,75,75,75,80,90,90,90},;
VEC0_JUSTIF := {2,2,2,0,2,2,2,2,2,2,2},;

wAlias3:="MOVART"

REDEFINE LISTBOX oBrw fields ID 999 OF oDlg ;
COLOR CLR_BLACK, CLR_WHITE ;
FONT oFont ALIAS (WALIAS) UPDATE

oBrw:SetCols( VEC0_FIELD1, VEC0_ENC1, VEC0_SIZE1 )

Respecto a usar redefines con ids tenes que utilizar algun editor de recursos como el resource workshop de borland. Conseguite un manual. Si queres te mando algun ejemplo con el prg explicado o algo asi.

Saludos,
Daniel Puente
Mar del Plata, Argentina
danielpuente@speedy.com.ar
puenteda@hotmail.com
DanielPuente
 
Posts: 108
Joined: Sun Oct 09, 2005 6:12 pm
Location: Mar del Plata - Argentina

Postby Leonor Gonzalez » Wed Oct 26, 2005 2:51 pm

DanielPuente wrote:Leonor:

Respecto al error en el bloque, si, el operador & tiene un limite. Tendrias que dividir su contenido o llamar a una funcion que haga el trabajo y devuelva un valor. Tampoco es necesario que todas las definiciones de las columnas del browse las tengas en un codigo de bloque, prodrias usar por ejemplo un codigo de bloque para cada columna en un vector:

Local VEC0_FIELD1 := { { || IF(LLOFACT->PENDIENTE=='X',hBmp,"") },;
{ || DTOC(LLOFACT->FECHA) } ,;
{ || LLOFACT->LFACT+" "+LLOFACT->PNFACT+"-"+LLOFACT->SNFACT } ,;
{ || BUS_DES("LLOCLIEN",1,LLOFACT->CLIENTE,"RAZSOC") },;
{ || TRANS(LLOFACT->TOTAL,"@E 999,999.99") } ,;

Local VEC0_ENC1 := { " " ,;
OEMTOANSI("Fecha"),;
OEMTOANSI("Factura"),;
" Cliente",;
"Total" ,;
VEC0_SIZE1 := {20,62,110,240,80,75,75,75,80,90,90,90},;
VEC0_JUSTIF := {2,2,2,0,2,2,2,2,2,2,2},;

wAlias3:="MOVART"

REDEFINE LISTBOX oBrw fields ID 999 OF oDlg ;
COLOR CLR_BLACK, CLR_WHITE ;
FONT oFont ALIAS (WALIAS) UPDATE

oBrw:SetCols( VEC0_FIELD1, VEC0_ENC1, VEC0_SIZE1 )

Respecto a usar redefines con ids tenes que utilizar algun editor de recursos como el resource workshop de borland. Conseguite un manual. Si queres te mando algun ejemplo con el prg explicado o algo asi.

Saludos,



Mil Gracias Master sos un genio, problema solucionado.
Saludos. Leonor
Leonor Gonzalez
 
Posts: 22
Joined: Fri Oct 14, 2005 12:18 pm


Return to FiveWin for CA-Clipper

Who is online

Users browsing this forum: No registered users and 1 guest