Page 1 of 1

POPUPBROWSE o EDIT_LISTBOX en columna browse

Posted: Fri Nov 20, 2020 3:26 am
by joseluisysturiz
Saludos, para los que me extrañaron, aun ando en este planeta y para los que no, por aca ando de nuevo...
tengo un pequeño problema, y no se que usar, ni como usarlo ya que el sample YuNUS no me aclaro mi duda...
tengo un BROWSE de facturacion con un ARRAY de X columnas, en la columna de NOMBRE DEL PRODUCTO, necesito
colocar o un POPUPBROWSE o un EDIT_LISTBOX, pero no consigo ejemplo claro de como usar el POPUP en browse
ya que en uno que Antonio respondio hacen años, no veo como decirle al browse del popup los valores que
quiero mostrar, he usado POPUPBROWSE en GET y todo perfecto, pero con BROWSE, no he podido, intente hacerlo
con EDIT_LISTBOX y sucede lo siguiente, necesito cuando le de al boton de desplegar los valores a mostrar,
cambiar en linea dichos valores, es decir, resetear el aEditListTxt, cargar y mostrar valores nuevos ya que
los productos a facturar puedes tener diferentes valores a mostrar, son unos productos COMBOS y necesito
mostrar sus componentes en cualquier momento de la facturacion, espero haberme explicado, son mas de un valor a mostrar, es decir un array multi, por eso pense en popupbrowse...desde ya por sus ayudas
y sugerencias...GRACIAS... :shock:

Re: POPUPBROWSE o EDIT_LISTBOX en columna browse

Posted: Sun Nov 22, 2020 1:28 am
by joseluisysturiz
Alguien tiene alguna sugerencia?
Con decir como evaluar cuando se le de al botón que desplega el combo Box creo puedo resolver, intente con onchange y no hizo lo que quería...saludos, gracias... :shock:

Re: POPUPBROWSE o EDIT_LISTBOX en columna browse

Posted: Sun Nov 22, 2020 2:13 am
by cmsoft
Una idea asi tal vez te puede servir

Code: Select all

#include "FiveWin.ch"
#include "xbrowse.ch"
//-----------------------------------------------//
// AGREGAR REGISTROS QUEDANDO AUTOMATICAMENTE SELECCIONADOS
//-----------------------------------------------//
Function MultiSeleTodo()
local oDlg, oBrw, oFont, aTabla := {}
local aGradBarSel := { { 1, RGB(252,232,171), RGB(248,195, 34) } }
local aGradRowSel := { { 1, RGB(118,145,164), RGB(241,222,088) } }

    XbrNumFormat( 'A', .t. )

   USE CUSTOMER NEW ALIAS "CUST" SHARED

   //COPY STRUCT TO ".\CUST2"
   
   AADD(aTabla,{"NOMBRE","C",30,0})
   AADD(aTabla,{"import","N",10,2})
   DBCREATE("CUST2",atabla)
   USE CUST2 NEW ALIAS "CUST2" EXCLUSIVE

   //CUST->(DBGOTO(5))

   DBSELECTAREA("CUST2")

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12
   DEFINE DIALOG oDlg SIZE 700,400 PIXEL FONT oFont TITLE "AGREGAR ITEM Y SELECCIONARLO"

   @ 20,10 XBROWSE oBrw SIZE -10,-40 PIXEL OF oDlg ;
           DATASOURCE "CUST2" ;
           COLUMNS "NOMBRE", "IMPORT" FOOTERS;
           CELL LINES NOBORDER AUTOSORT ON CHANGE oBrw:MakeTotals()

   WITH OBJECT oBrw
      //:nMarqueeStyle   := MARQSTYLE_HIGHLROWMS //Multiselect
      :bClrSel         := {|| { nRGB(  0,  0,  0), aGradRowSel } }  // para barra de linea selecc cuando el control no tiene el foco
      :bClrSelFocus    := { || { CLR_BLACK, aGradBarSel } }     // para barra de linea selecc cuando el control tiene el foco            
      :aCols[ 1 ]:nEditType :=  EDIT_BUTTON
      :aCols[ 1 ]:bEditBlock := { || Buscar() }
      :aCols[ 2 ]:nEditType := EDIT_GET
      :aCols[ 2 ]:nFooterType := AGGR_SUM      
      :MakeTotals()
      :CreateFromCode()
   END

   @ 170, 10 BUTTON "Agregar Item" SIZE 60,20 PIXEL OF oDlg ;
             ACTION ( AgregItem("CUST2") ,;
                      oBrw:SetFocus(), oBrw:Refresh(),oBrw:MakeTotals())
                      //oBrw:Select(1),;  
                      //CUST->(DbSkip()) )

   @ 170, 80 BUTTON "Salir" SIZE 60,20 PIXEL OF oDlg ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED
      RELEASE FONT oFont
      Cust2->(dbclosearea())
      Ferase(".\Cust2.dbf")
return nil

//-----------------------------------------------//
Function AgregItem(cAliasDest)
  (cAliasDest)->(dbappend())  
  (cAliasDest)->( FieldPut( 1,"--- Elija producto ----" ) ) 
  (cAliasDest)->( FieldPut( 2,0 ))

Return nil

Function Buscar()
  DBSELECTAREA("CUST")
  XBROWSE()  
  cust2->( FieldPut( 1,cust->first) )  
  DBSELECTAREA("CUST2")
Return nil
 

Re: POPUPBROWSE o EDIT_LISTBOX en columna browse

Posted: Wed Nov 25, 2020 7:58 am
by JESUS MARIN
joseluisysturiz wrote:Alguien tiene alguna sugerencia?
Con decir como evaluar cuando se le de al botón que desplega el combo Box creo puedo resolver, intente con onchange y no hizo lo que quería...saludos, gracias... :shock:
Buenos días José Luis.
¿porque empeñarse en controlar el evento al desplegar el boton?

No sería mas sencillo ? , por ejemplo :

- Al introducir en la columna 1 el artículo (o seleccionarlo de un combo), en la columna 2 cargar los datos de las opciones. (puedes anidar tantas variaciones como tengas, en las columnas siguientes)

Image

Re: POPUPBROWSE o EDIT_LISTBOX en columna browse

Posted: Wed Nov 25, 2020 1:27 pm
by joseluisysturiz
JESUS MARIN wrote:
joseluisysturiz wrote:Alguien tiene alguna sugerencia?
Con decir como evaluar cuando se le de al botón que desplega el combo Box creo puedo resolver, intente con onchange y no hizo lo que quería...saludos, gracias... :shock:
Buenos días José Luis.
¿porque empeñarse en controlar el evento al desplegar el boton?

No sería mas sencillo ? , por ejemplo :

- Al introducir en la columna 1 el artículo (o seleccionarlo de un combo), en la columna 2 cargar los datos de las opciones. (puedes anidar tantas variaciones como tengas, en las columnas siguientes)

Image
Saludos, es exactamente lo que quiero, cuando cargo código en columna 1, en la 2 coloco la descripción y con el combo Box muestro sus asociados, pero si he cargado varias filas y voy a uba anterior y en la columna 2 desplego el combo Box para ver sus asociadas, me muestra es los del último artículo entrado que haya tenido asociados, alli es donde tengo el problema y no se porque, crei cada fila mantendría sus asociados, por eso pense al hacer click en el boton del combo Box en columna 2, cargar de nuevo el array del combo Box von sus derivados como lo hago en la columna 1...alguna idea, sugerencia y ejemplo? Gracias... :shock:

Re: POPUPBROWSE o EDIT_LISTBOX en columna browse

Posted: Wed Nov 25, 2020 2:42 pm
by JESUS MARIN
Claro, te falta una cosa :

oBrw:bChange

Al cambiar de fila debes refrescar el contenido del array :

Yo lo hago así


en la definición del browse

Code: Select all

oBrw:bChange:={ || aLineas:=Cambia_combo(aLineas,oBrw) }
 
y la función ( esto es solo para el ejemplo, debes montar tu array, buscando en la base de datos o lo que convenga )

Code: Select all

STATIC FUNCTION Cambia_combo(aLineas,oBrw)
// al movernos debemos refrescar el combo 2 u otros
   oBrw:aCols[2]:aEditListTxt:={ "" }
   IF aLineas[oBrw:nArrayAt,1]="COCHE"
      oBrw:aCols[2]:aEditListTxt:={ "Gasolina 95","Gasolina 98","Diesel normal","Diesel Plus" }
   ENDIF
   IF aLineas[oBrw:nArrayAt,1]="MOTO"
      oBrw:aCols[2]:aEditListTxt:={ "Gasolina 95","Gasolina 98" }
   ENDIF
   IF aLineas[oBrw:nArrayAt,1]="BICICLETA"
      oBrw:aCols[2]:aEditListTxt:={ "A pedales","fuerza humana" }
   ENDIF
   oBrw:Refresh()

return(aLineas)