Page 1 of 1
un Campo en un Listbox pero FIELDS
Posted: Thu Dec 08, 2005 8:01 pm
by felipe
Hola amigos del foro quiero poder poner en FIELD un campo q' cambie por ejemplo:
en una bodega si tengo el FIELD q' detecte o si hay 2 o 3 o nn bodegas
desde ya gracias
Posted: Fri Dec 09, 2005 12:45 am
by Antonio Linares
Felipe,
Usa FIELD->bodegas
te refieres a eso ?
La Idea del Listbox es esta
Posted: Fri Dec 09, 2005 2:07 am
by felipe
Bueno la idea que quiero es la siguiente:
Tengo una Tabla : Bodegas (3Bodegas)
Tabla : Stock
Tabla : Articulos
en el Listbox deberia quedar asi
REDEFINE LISTBOX oLbx FELDS;
(cArticulos)->Detalle,CargaStock((cArticulo)->Codigo,Bodega1),;
CargaStock((cArticulo)->Codigo,Bodega2),;
CargaStock((cArticulo)->Codigo,Bodega3);
Esto si hay 3 no Hay problema pero si hay 20 tendria que poner 20 veces pero la idea no esa, la idea es carga todo en uana variable y que pueda servir para una como para n bodegas
dbGoTop()
DO WHILE !Eof()
//Los N ombres de Bodega
cTitulo :=cTitulo + '"'+Alltrim((cBodega)->Ma_Corta)+'",'
bodega :=(cBodega)->Ma_Codi //capturo el codigo
cCampo :=cCampo + "CargaStock((cArticulo)->Codigo,bodega,"
bodega)," // La Funcion
cSize :=cSize + "50," //aqui le asigno el Size
DBSKIP()
EndDo
oLbx:aheaders := &cTitulo
oLbx:acolsizes := &cSize
Los aheaders y acolsizes funcionan bien pero Field no
REDEFINE LISTBOX oLbx fIELDS cCampo
PERO DE ESTA FORMA me funciona Bien:
cCampo :={ || { (cArticulo)->Detalle,CargaStock((cArticulo)->Codigo,"1 ") } }
REDEFINE LISTBOX oLbx fIELDS ""
oLbx:bLine := (cCampo)
PERO SI TENGO 2 0 3 O NNN BODEGAS
bueno espero que entienda
Saludos
Posted: Fri Dec 09, 2005 11:42 am
by cmsoft
Y si cambias esta funcion
cCampo :={ || { (cArticulo)->Detalle,CargaStock((cArticulo)->Codigo) } }
REDEFINE LISTBOX oLbx fIELDS ""
oLbx:bLine := (cCampo)
y en la funcion CargaStock(nCodArt) le haces que recorra toda la base en busca de las N bodegas y te devuelva una cadena con el texto de todas las existencias en la bodegas??
Espero te sirva...
PERO QUE MUESTRE EL STOCK POR BODEGA
Posted: Fri Dec 09, 2005 6:02 pm
by felipe
Bueno lo quero es que me muestre el Stock por bodega como este ejemplo:
Detalle Bodega 1 Bodega 2 Bodega 3 Bodega 4 nnnnnn Bodegas
Posted: Sun Dec 11, 2005 5:02 am
by DanielPuente
Felipe:
Usa vectores para la definicion del browse:
Local VEC_FIELD1 := { {|| ART->COD} ,;
{ || ART->CLAVE } ,;
VEC_ENC1 := { OEMTOANSI("C¢d."),;
" Clave",;
VEC_SIZE1 := {70,109,226,77,77,64,109,73,40,110,52,52,52,90,90},;
VEC_JUSTIF := {2,2,0,2,2,2,0,0,0,0,0,2,2,0,0},;
Solo que en tu caso haces las evaluaciones necesarias y vas añadiendo posiciones a los vectores segun las bodegas que necesites, y despues en la definicion del browse usas esos vectores:
REDEFINE LISTBOX oBrw fields ID 999 OF oDlg ;
oBrw:SetCols( vec_field1, vec_enc1, vec_size1 )
oBrw:aJustify :=vec_justif
Saludos,
Posted: Tue Dec 13, 2005 12:26 pm
by MarioG
Me uno al hilo para exponer mi caso. El que Daniel hace un tiempo me orientó y, en su propuesta me sugería la siguiente alternativa (tambien intento generar un browse de campos dinámicos):
Code: Select all
DO CASE
CASE oPJA:nLenAlter == 2
aO[_LstAlt]:bLine:= {|nAt| nAt:= aO[_LstAlt]:nAt, ;
{ oPJA:aAlternativas[nAt,1], ;
Trans( oPJA:aAlternativas[nAt,2], PIC_SEIS ), ;
Trans( oPJA:aAlternativas[nAt,3], PIC_SEIS ) ;
} }
CASE oPJA:nLenAlter == 3
aO[_LstAlt]:bLine:= {|nAt| nAt:= aO[_LstAlt]:nAt, ;
{ oPJA:aAlternativas[nAt,1], ;
Trans( oPJA:aAlternativas[nAt,2], PIC_SEIS ), ;
Trans( oPJA:aAlternativas[nAt,3], PIC_SEIS ), ;
Trans( oPJA:aAlternativas[nAt,2], PIC_SEIS ) ;
} }
Esto funciona correctamente, aunque, leyendo la propuesa de cmsfot, me percato que me ahorraría mucho código a la par de que puedo elever el límite superior de campos. Por lo que lo implementé así:
Code: Select all
for each arr in oPJA:aAlternativas
if HB_EnumIndex()==1
cBLine:= "{|nAt| nAt:= aO[_LstAlt]:nAt, { oPJA:aAlternativas[nAt,1], "
else
cBLine+= "Trans( oPJA:aAlternativas[nAt,2], PIC_SEIS ), "
end
next
? cBLine:= Left( cBLine, Len( cBLine ) -2) +" } }"
aO[_LstAlt]:bLine:= ( cBLine )
aO[_LstAlt]:SetArray( oPJA:aAlternativas )
Ahora bien, al ejecutar la app me arroja el siguiente error:
Application
===========
Path and name: D:\FUEN32\PRU32\MGPJA.EXE (32 bits)
Size: 1,362,944 bytes
Time from start: 0 hours 2 mins 37 secs
Error occurred at: 13/12/2005, 09:05:40
Error description: Error BASE/1005 Class: 'CHARACTER' has no property: _EVAL
Args:
Stack Calls
===========
Called from __EVAL(0)
Called from WBRWPANE(0)
Called from TWBROWSE:PAINT(1103)
Called from TWBROWSE:DISPLAY(2892)
Called from TWBROWSE:HANDLEEVENT(0)
Called from _FWH(0)
Called from WINRUN(0)
Called from TMDIFRAME:ACTIVATE(0)
Called from MAIN(46)
Que es lo que no puede resolver?, cual es el problema?
Posted: Wed Dec 14, 2005 1:08 am
by felipe
Antonio gracias por ayudarme, mira el LIstbox lo tengo asi:
REDEFINE LISTBOX oLbx fIELDS GenColumns(); ID 102 OF oDlg;
oLbx:aheaders := {"Descripcion","Stock"}
oLbx:acolsizes := {400,100}
STATIC function GenColumns()
local bLine:=""
bLine:={ || { (cExi_Suc)->Ma_Des1,cExi_Suc)->Bod_001i } }
return(bLine)
Lo tengo asi y igual no me muestra nada pero igual como te desia me puedo mover para arriba y abajo
desde ya gracias
Posted: Wed Dec 14, 2005 1:30 am
by DanielPuente
Felipe:
Enviame el pedazo de codigo en un prg que yo pueda compilar y probar aca con las dbf involucradas a
danielpuente@speedy.com.ar y te lo miro. Despues publicamos aca la solucion definitiva si queres.
Saludos,