un Campo en un Listbox pero FIELDS

Post Reply
felipe
Posts: 11
Joined: Thu Dec 08, 2005 7:56 pm

un Campo en un Listbox pero FIELDS

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Felipe,

Usa FIELD->bodegas

te refieres a eso ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
felipe
Posts: 11
Joined: Thu Dec 08, 2005 7:56 pm

La Idea del Listbox es esta

Post 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
User avatar
cmsoft
Posts: 653
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Post 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...
felipe
Posts: 11
Joined: Thu Dec 08, 2005 7:56 pm

PERO QUE MUESTRE EL STOCK POR BODEGA

Post 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
DanielPuente
Posts: 108
Joined: Sun Oct 09, 2005 6:12 pm
Location: Mar del Plata - Argentina
Contact:

Post 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,
Daniel Puente
Mar del Plata, Argentina
danielpuente@speedy.com.ar
puenteda@hotmail.com
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Post 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?
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
felipe
Posts: 11
Joined: Thu Dec 08, 2005 7:56 pm

Post 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
DanielPuente
Posts: 108
Joined: Sun Oct 09, 2005 6:12 pm
Location: Mar del Plata - Argentina
Contact:

Post 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,
Daniel Puente
Mar del Plata, Argentina
danielpuente@speedy.com.ar
puenteda@hotmail.com
Post Reply