Page 1 of 1

xBrowse MergeVert

PostPosted: Tue Nov 08, 2016 4:20 pm
by Biel EA6DD
Me disponia a usar la propiedad de fusión de celdas (combinación quizas mejor traducido), en definitiva Merge Vertical de xBrowse.
Y la idea era en un browse visualizar diferentes albranes de ventas, y fusionar las filas número, fecha y total si correspondian aun mismo albarán, y visualizar el detalle de lineas de artículos.

Busque y encontre un ejemplo de Mr.Rao, crei entender como funcionaba, y lo probe.
http://forums.fivetechsupport.com/viewtopic.php?f=3&t=28543&p=159813&hilit=lmergevert#p159813
A primera vista funcionaba perfecto, pero cuando dos albaranes correlativos eran de la misma fecha, o del mismo importe, tambien me fusionaba las filas.
Image
Image

Despues de volver a revisar el ejemplo, me doy cuenta que la columna total no se fusiona , y se comporta como yo desearia.
Image
Tras mirar nuevamente el código, veo donde esta el truco.
Se define el xBrowse usando dos veces el campo "INVOICE", y en el segundo le pone el titulo "TOTAL"
Code: Select all  Expand view
@ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg DATASOURCE "TEST" ;
      COLUMNS "INVOICE", "INVOICE", "DATEPAY", "PAYMENT" ;
      HEADERS "INVOICE", "TOTAL",   "DATEPAY", "PAYMENT" ;
      CELL LINES NOBORDER

A continuación se modifica el codeblcok bStrData de la segunda columna para que visualice el total.
Code: Select all  Expand view
WITH OBJECT :Total
         :lMergeVert          := .t.
         :bStrData            := { || TRANSFORM( TEST->TOTAL, NumPict( 10, 2 ) ) }
         :nDataStrAlign       := AL_RIGHT
         :nHeadStrAlign       := AL_RIGHT
         :cSortOrder          := ""
      END

De esta forma entiendo que la segunda columna (total) tiene un codeblock que devuelve invoice (se usa para el merge) y otro que devuelve el total que es el que se visualiza.
Si bien esto funciona, creo que es algo enrevesado.

Revisando el código fuente de la clase propongo el siguiente cambio (que mantiene compatiblidad con versiones anteriores):
-Añadir un CodeBlock a la clase TXBrwColumn, bMerge. Que contendrá el codeblock a evaluar para merge.
-Modificar el método WorkMergeData(), si bMerge no está definido funcionará como ahora, y si esta definido lo evaluzara para determnar las filas a fusionar.
Línea 13910 xBrowse.prg
Code: Select all  Expand view

      IF ::bMerge==NIL
         uVal  := ::Value()
      ELSE
         uVal  := Eval( ::bMerge )
      ENDIF

Con esta modificación el código que uso en mi programa es:
Code: Select all  Expand view

...
   WITH OBJECT oBrw
      :SetDolphin( oDet, .F., .F.)  
      :SetColFromMySql("SerNum","Serie"+CRLF+"Nº.Albarán", .T.)
      WITH OBJECT ATail(:aCols)
         :lMergeVert  :=.T.   //Merge para SerNum
      END
      :SetColFromMySql("Fecha","Fecha", .T.)
      WITH OBJECT ATail(:aCols)
         :lMergeVert  :=.T.
         :bMerge      := {||oDet:SerNum } //Merge Fecha, tomando como referencia SerNum
      END
      :SetColFromMySql("ArtCod","Cod", .T.)
      :SetColFromMySql("ArtDes","Artículo",.T.)
      :SetColFromMySql("kgs","Kilos", .T.)
      :SetColFromMySql("Pvp","Precio", .T.)
      :SetColFromMySql("Importe","Importe",.t.)
      :SetColFromMySql("Lote","Lote",.t.)
      :SetColFromMySql("Total","Total",.T.)
      WITH OBJECT ATail(:aCols)
         :lMergeVert  :=.T.
         :bMerge      := {|| oDet:SerNum }  //Merge Total, tomando como referencia SerNum
      END

...

Que creo que para futuras modificaciones es más claro y legible que el ir asignando columnas que no son la que queremos visualizar, para después variar el bStrData y así obtener el resultado deseado.

Image
Perdon ha quedado un post un poco tocho, esto de viva voz se explica mucho más rápido, pero espero que se haya entendido, y que se pueda añadir si Antonio lo considera oportuno en venideras versiones.

Re: xBrowse MergeVert

PostPosted: Thu Nov 10, 2016 8:46 am
by Antonio Linares
Biel,

Muchas gracias

Lo voy a comentar con Rao a ver cual es su opinión. A mi me parece excelente tu propuesta.

Re: xBrowse MergeVert

PostPosted: Thu Nov 10, 2016 6:46 pm
by Antonio Linares
Biel,

Incluido para la próxima versión de FWH

gracias! :-)