Page 1 of 1

Ejemplo de xbrowse con edicion de registros,altas,bajas...

PostPosted: Fri Oct 30, 2020 7:41 pm
by ACC69
Hola buenas tardes que tal como estan, espero que bien.

Anduve buscando en el foro algun ejemplo tipo factura cargando registros desde dbf con arrays que segun lei en el foro es muy efectivo trabajar con arrays para adaptarlo a mi necesidad con su edicion de registros altas, bajas y modificacion de registros con 3 columnas sencillos y que al llegar a la tercera columna que automaticamente me pase al siguiente renglon de capturar nuevos registros y asi sucesivamente y se vaya grabando en cada registro, espero haberme explicado.

Alguien me puede dar alguna orientacion respecto a mi comentario? ya que siempre lo he hecho con 3 botones de agregar nuevo registro, otro boton de modificar y otro boton de eliminar registros, ahora lo que quiero y necesito es en forma de edicion del browse con su array de registgros y he usado con ordscope().

Espero su pronta ayuda al respecto.

Gracias y saludos.

Atte: Adriano C. C.
acc69@hotmail.com

Re: Ejemplo de xbrowse con edicion de registros,altas,bajas...

PostPosted: Fri Oct 30, 2020 8:18 pm
by jbrita
Te envie un email..
o si quieres algo asi
[img][![imagen001.jpg](https://i.postimg.cc/bvPRFdQZ/imagen001.jpg)](https://postimg.cc/dhWdhsNF)[/img]
Image

Re: Ejemplo de xbrowse con edicion de registros,altas,bajas...

PostPosted: Mon Nov 02, 2020 6:35 pm
by ACC69
jbrita wrote:Te envie un email..
o si quieres algo asi
[img][![imagen001.jpg](https://i.postimg.cc/bvPRFdQZ/imagen001.jpg)](https://postimg.cc/dhWdhsNF)[/img]
Image



Hola Ing. Jose Briceño gracias.

Re: Ejemplo de xbrowse con edicion de registros,altas,bajas...

PostPosted: Mon Nov 02, 2020 6:39 pm
by ACC69
ACC69 wrote:Hola buenas tardes que tal como estan, espero que bien.

Anduve buscando en el foro algun ejemplo tipo factura cargando registros desde dbf con arrays que segun lei en el foro es muy efectivo trabajar con arrays para adaptarlo a mi necesidad con su edicion de registros altas, bajas y modificacion de registros con 3 columnas sencillos y que al llegar a la tercera columna que automaticamente me pase al siguiente renglon de capturar nuevos registros y asi sucesivamente y se vaya grabando en cada registro, espero haberme explicado.

Alguien me puede dar alguna orientacion respecto a mi comentario? ya que siempre lo he hecho con 3 botones de agregar nuevo registro, otro boton de modificar y otro boton de eliminar registros, ahora lo que quiero y necesito es en forma de edicion del browse con su array de registgros y he usado con ordscope().

Espero su pronta ayuda al respecto.

Gracias y saludos.

Atte: Adriano C. C.
acc69@hotmail.com




Hola buenas tardes que tal como estan.

Un favor adjunto mi codigo de prueba.

En primer lugar por que no me deja editar el campo sin tener que darle enter al browse
segundo lugar no le entendi eso de crear como cargar arrays los registros.

Me pueden apoyar??.

Como ya tengo años de fuera de programacion, estoy intentando recordar como crear el browse

Gracias


Aqui el codigo:

Code: Select all  Expand view
#include "FiveWin.ch"
#Include "xBrowse.ch"

REQUEST  DbfCdx, DbfFpt, RPreview
EXTERNAL OrdKeyCount, OrdKeyGoTo, OrdKeyNo

Static oDlg, oGet, oBrw
Static nNumfol, cDescrip, cArchivo, dFecha, nImporte
Static cAlias

*--------------------------------------------------------------------------------
Function Main()
 SET EXCLUSIVE OFF
 SET 3DLOOK ON
 SET DELETED ON
 SET CONFIRM ON
 SET EPOCH TO 1969
 SET DATE BRITISH

 SetHandleCount(64)
 DbSetDriver("DBFCDX")
 RddSetDefault("DBFCDX")

 oGet := ARRAY(1)

 *cAlias := "S01"

 Select 1
 USE MOV Alias "S01"

 Select 2
 USE MOVDET Alias "S02"


 DEFINE DIALOG oDlg RESOURCE "FACT" TITLE "Demo edicion TxBrowse"
  REDEFINE GET oGet[01] VAR nNumFol  ID 101 OF oDlg PICT "99" // VALID V_NUMUSUA()

  REDEFINE XBROWSE oBrw ID 102 OF oDlg ;
           HEADERS "Descripción"    , "Archivo","Fecha" ,"Importe" ;
           COLUMNS "DESCRIPCIO","ARCHIVO","FECHA","IMPORTE"     ;
           SIZES 88,66,24,32 ;
           PICTURES "@!"     ,;
                    "@X"  ,;
                    "@D"    ,;
                    "999.99" ;
           ALIAS S02->( ALIAS() ) // FOOTERS CELL AUTOCOLS

    AEval( oBrw:aCols, { |o| o:nEditType    := 1     ,; // Editables
                             o:nHeadStrAlign:= 2 } )    //texto encab/col centrado

    WITH OBJECT oBrw
      //ESTILOS DE LINEAS
      :lHScroll := .F. // Horizontal
      :lVScroll := .T. // Vertical

      :nMarqueeStyle      := MARQSTYLE_HIGHLROW //barra selectora
      :lColDividerComplete:= .T. //completa pintado hasta el footer cuando lineas no llenan todo el browse
      :nColDividerStyle   := LINESTYLE_BLACK
      :lFastEdit          := .T.
      :bOnPostEdit := { | oCol, xVal, nKey | If( nKey == VK_RETURN,"",) }

    END
 ACTIVATE DIALOG oDlg CENTER // ON INIT Inicia(oBrw)

RETURN NIL



Gracias y saludos
Atte: Adriano C. C.

acc69@hotmail.com

Re: Ejemplo de xbrowse con edicion de registros,altas,bajas...

PostPosted: Mon Nov 02, 2020 6:54 pm
by ACC69
ACC69 wrote:
ACC69 wrote:Hola buenas tardes que tal como estan, espero que bien.

Anduve buscando en el foro algun ejemplo tipo factura cargando registros desde dbf con arrays que segun lei en el foro es muy efectivo trabajar con arrays para adaptarlo a mi necesidad con su edicion de registros altas, bajas y modificacion de registros con 3 columnas sencillos y que al llegar a la tercera columna que automaticamente me pase al siguiente renglon de capturar nuevos registros y asi sucesivamente y se vaya grabando en cada registro, espero haberme explicado.

Alguien me puede dar alguna orientacion respecto a mi comentario? ya que siempre lo he hecho con 3 botones de agregar nuevo registro, otro boton de modificar y otro boton de eliminar registros, ahora lo que quiero y necesito es en forma de edicion del browse con su array de registgros y he usado con ordscope().

Espero su pronta ayuda al respecto.

Gracias y saludos.

Atte: Adriano C. C.
acc69@hotmail.com




Hola buenas tardes que tal como estan.

Un favor adjunto mi codigo de prueba.

En primer lugar por que no me deja editar el campo sin tener que darle enter al browse
segundo lugar no le entendi eso de crear como cargar arrays los registros.

Me pueden apoyar??.

Como ya tengo años de fuera de programacion, estoy intentando recordar como crear el browse.

Otro detalle que me falta para que cuando llegue a la ultima columna me pase al siguiente registro despues de darle enter, pero no veo el efecto ahi se queda sin pasar al siguiente registro de edicion de nuevos registros.


Porfas

Gracias


Aqui el codigo:

Code: Select all  Expand view
#include "FiveWin.ch"
#Include "xBrowse.ch"

REQUEST  DbfCdx, DbfFpt, RPreview
EXTERNAL OrdKeyCount, OrdKeyGoTo, OrdKeyNo

Static oDlg, oGet, oBrw
Static nNumfol, cDescrip, cArchivo, dFecha, nImporte
Static cAlias

*--------------------------------------------------------------------------------
Function Main()
 SET EXCLUSIVE OFF
 SET 3DLOOK ON
 SET DELETED ON
 SET CONFIRM ON
 SET EPOCH TO 1969
 SET DATE BRITISH

 SetHandleCount(64)
 DbSetDriver("DBFCDX")
 RddSetDefault("DBFCDX")

 oGet := ARRAY(1)

 *cAlias := "S01"

 Select 1
 USE MOV Alias "S01"

 Select 2
 USE MOVDET Alias "S02"


 DEFINE DIALOG oDlg RESOURCE "FACT" TITLE "Demo edicion TxBrowse"
  REDEFINE GET oGet[01] VAR nNumFol  ID 101 OF oDlg PICT "99" // VALID V_NUMUSUA()

  REDEFINE XBROWSE oBrw ID 102 OF oDlg ;
           HEADERS "Descripción"    , "Archivo","Fecha" ,"Importe" ;
           COLUMNS "DESCRIPCIO","ARCHIVO","FECHA","IMPORTE"     ;
           SIZES 88,66,24,32 ;
           PICTURES "@!"     ,;
                    "@X"  ,;
                    "@D"    ,;
                    "999.99" ;
           ALIAS S02->( ALIAS() ) // FOOTERS CELL AUTOCOLS

    AEval( oBrw:aCols, { |o| o:nEditType    := 1     ,; // Editables
                             o:nHeadStrAlign:= 2 } )    //texto encab/col centrado

    WITH OBJECT oBrw
      //ESTILOS DE LINEAS
      :lHScroll := .F. // Horizontal
      :lVScroll := .T. // Vertical

      :nMarqueeStyle      := MARQSTYLE_HIGHLROW //barra selectora
      :lColDividerComplete:= .T. //completa pintado hasta el footer cuando lineas no llenan todo el browse
      :nColDividerStyle   := LINESTYLE_BLACK
      :lFastEdit          := .T.
      :bOnPostEdit := { | oCol, xVal, nKey | If( nKey == VK_RETURN,"",) }

    END
 ACTIVATE DIALOG oDlg CENTER // ON INIT Inicia(oBrw)

RETURN NIL



Gracias y saludos
Atte: Adriano C. C.

acc69@hotmail.com

Re: Ejemplo de xbrowse con edicion de registros,altas,bajas...

PostPosted: Mon Nov 02, 2020 9:56 pm
by ACC69
ACC69 wrote:
ACC69 wrote:
ACC69 wrote:Hola buenas tardes que tal como estan, espero que bien.

Anduve buscando en el foro algun ejemplo tipo factura cargando registros desde dbf con arrays que segun lei en el foro es muy efectivo trabajar con arrays para adaptarlo a mi necesidad con su edicion de registros altas, bajas y modificacion de registros con 3 columnas sencillos y que al llegar a la tercera columna que automaticamente me pase al siguiente renglon de capturar nuevos registros y asi sucesivamente y se vaya grabando en cada registro, espero haberme explicado.

Alguien me puede dar alguna orientacion respecto a mi comentario? ya que siempre lo he hecho con 3 botones de agregar nuevo registro, otro boton de modificar y otro boton de eliminar registros, ahora lo que quiero y necesito es en forma de edicion del browse con su array de registgros y he usado con ordscope().

Espero su pronta ayuda al respecto.

Gracias y saludos.

Atte: Adriano C. C.
acc69@hotmail.com




Hola buenas tardes que tal como estan.

Un favor adjunto mi codigo de prueba.

En primer lugar por que no me deja editar el campo sin tener que darle enter al browse
segundo lugar no le entendi eso de crear como cargar arrays los registros.

Me pueden apoyar??.

Como ya tengo años de fuera de programacion, estoy intentando recordar como crear el browse.

Otro detalle que me falta para que cuando llegue a la ultima columna me pase al siguiente registro despues de darle enter, pero no veo el efecto ahi se queda sin pasar al siguiente registro de edicion de nuevos registros.


Porfas

Gracias


Aqui el codigo:

Code: Select all  Expand view
#include "FiveWin.ch"
#Include "xBrowse.ch"

REQUEST  DbfCdx, DbfFpt, RPreview
EXTERNAL OrdKeyCount, OrdKeyGoTo, OrdKeyNo

Static oDlg, oGet, oBrw
Static nNumfol, cDescrip, cArchivo, dFecha, nImporte
Static cAlias

*--------------------------------------------------------------------------------
Function Main()
 SET EXCLUSIVE OFF
 SET 3DLOOK ON
 SET DELETED ON
 SET CONFIRM ON
 SET EPOCH TO 1969
 SET DATE BRITISH

 SetHandleCount(64)
 DbSetDriver("DBFCDX")
 RddSetDefault("DBFCDX")

 oGet := ARRAY(1)

 *cAlias := "S01"

 Select 1
 USE MOV Alias "S01"

 Select 2
 USE MOVDET Alias "S02"


 DEFINE DIALOG oDlg RESOURCE "FACT" TITLE "Demo edicion TxBrowse"
  REDEFINE GET oGet[01] VAR nNumFol  ID 101 OF oDlg PICT "99" // VALID V_NUMUSUA()

  REDEFINE XBROWSE oBrw ID 102 OF oDlg ;
           HEADERS "Descripción"    , "Archivo","Fecha" ,"Importe" ;
           COLUMNS "DESCRIPCIO","ARCHIVO","FECHA","IMPORTE"     ;
           SIZES 88,66,24,32 ;
           PICTURES "@!"     ,;
                    "@X"  ,;
                    "@D"    ,;
                    "999.99" ;
           ALIAS S02->( ALIAS() ) // FOOTERS CELL AUTOCOLS

    AEval( oBrw:aCols, { |o| o:nEditType    := 1     ,; // Editables
                             o:nHeadStrAlign:= 2 } )    //texto encab/col centrado

    WITH OBJECT oBrw
      //ESTILOS DE LINEAS
      :lHScroll := .F. // Horizontal
      :lVScroll := .T. // Vertical

      :nMarqueeStyle      := MARQSTYLE_HIGHLROW //barra selectora
      :lColDividerComplete:= .T. //completa pintado hasta el footer cuando lineas no llenan todo el browse
      :nColDividerStyle   := LINESTYLE_BLACK
      :lFastEdit          := .T.
      :bOnPostEdit := { | oCol, xVal, nKey | If( nKey == VK_RETURN,"",) }

    END
 ACTIVATE DIALOG oDlg CENTER // ON INIT Inicia(oBrw)

RETURN NIL



Gracias y saludos
Atte: Adriano C. C.

acc69@hotmail.com




Hola buenas tardes, pregunta, en donde puedo encontrar documentacion completa de las referencias de TXBrowse para saber cada evento para que sirve y que funcion hace, por ejemplo:

:bPastEof := { || AddRow( oBrw ) }

GoLeftMost()

oBrw:GoDown()

Etc etc.

Gracias.

Saludos

Re: Ejemplo de xbrowse con edicion de registros,altas,bajas...

PostPosted: Mon Nov 02, 2020 11:23 pm
by FranciscoA
Adriano, este ejemplo que encontré por ahí, te puede ayudar. Es totalmente funcional.
/
Code: Select all  Expand view
/------------------------------------------------------------------//
// EJEMPLO XBROWSE PARA FACTURA
//------------------------------------------------------------------//
#include "FiveWin.Ch"
#include "xbrowse.ch"

function Main()
   local oDlg, oFont, oBrw, nPos, bPos, nIVA := 10.00, nMaxItems := 5
   local aInvoice    := { { 0, 0, 0 } }
   local aBlank      := { 0, 0, 0 }
   local aTable := { {1,   "Product Code 1   ",  10},;
                     {2,   "Product Code 2   ",  20},;
                     {3,   "Product Code 3   ",  30},;
                     {4,   "Product Code 4   ",  40},;
                     {5,   "Product Code 5   ",  50},;
                     {6,   "Product Code 6   ",  60},;
                     {900, "Product Code 900 ",9000},;
                     {7,   "Product Code 7   ",  70},;
                     {8,   "Product Code 8   ",  80},;
                     {10,  "Product Code 10  ", 100} }

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 800,450 PIXEL TITLE "INVOICE" FONT oFont   //600,400

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
           DATASOURCE aInvoice ;
           COLUMNS 1, 1, 2, 3 ;
           HEADERS "CODE", "ITEM", "QUANTITY", "PRICE" ;
           PICTURES "9999", nil, "999,999.99", "9,999,999.99" ;
           COLSIZES nil, 120 ;
           CELL LINES FOOTERS NOBORDER FASTEDIT

   bPos := {|| nPos := Ascan( aTable, {|a| a[1] == oBrw:Code:Value} ) }   //Posicion del codigo en la tabla de productos

   oBrw:Item:bEditValue       := { || If( oBrw:Code:Value > 0, (Eval(bPos), if(nPos>0, aTable[ nPos, 2 ], "" )),"") }

   oBrw:AMOUNT                := { || oBrw:Quantity:Value * oBrw:Price:Value }
   oBrw:Amount:cEditPicture   := "999,999,999.99"
   oBrw:IVA                   := { || ( oBrw:AMOUNT:Value * nIVA ) / 100 }
   oBrw:Iva:cEditPicture      := "999,999,999.99"
   oBrw:TOTAL                 := { || oBrw:AMOUNT:Value + oBrw:IVA:Value }
   oBrw:Total:cEditPicture    := "999,999,999.99"

   oBrw:nEditTypes            := { EDIT_GET, EDIT_NONE, EDIT_GET, EDIT_GET, EDIT_NONE, EDIT_NONE, EDIT_NONE }

   WITH OBJECT oBrw:Code
      :bEditValid     := { |oGet| oGet:VarGet() > 0 }
      :bOnChange      := { |oCol| Eval(bPos), if(nPos>0, oBrw:aRow[ 3 ] := aTable[ nPos, 3 ], 0) }
      :bFooter        := { || Ltrim( Str( oBrw:KeyNo() ) ) + " / " + LTrim( Str( oBrw:KeyCount() ) ) }
   END

   WITH OBJECT oBrw:Quantity
      :bEditWhen      := { || ! Empty( oBrw:Code:Value ) }
      :bOnChange      := { || oBrw:MakeTotals(), oBrw:RefreshFooters() }      //oBrw:MakeTotals( oBrw:oCol( "Amount" ) ), oBrw:RefreshFooters() }
      :bEditValid     := { |oGet| oGet:VarGet() > 0 }
      :nFooterType    := AGGR_SUM
   END

   WITH OBJECT oBrw:Price      // oBrw:aRow[ 3 ]
      :bEditWhen      := { || ! Empty( oBrw:Code:Value ) .and. ! Empty( oBrw:Quantity:Value ) }
      :bOnChange      := { || oBrw:MakeTotals(), oBrw:RefreshFooters() }      //oBrw:MakeTotals( oBrw:oCol( "Amount" ) ), oBrw:RefreshFooters() }
      :bEditValid     := { |oGet| oGet:VarGet() > 0 }
   END

   oBrw:Amount:nFooterType := AGGR_SUM
   oBrw:Iva:nFooterType    := AGGR_SUM
   oBrw:Total:nFooterType  := AGGR_SUM

   WITH OBJECT oBrw
      :nStretchCol      := STRETCHCOL_WIDEST

      :bPastEof         := { || If( len(oBrw:aArrayData) = nMaxItems, (MsgStop("Agotado maximo de lineas: "+Str(nMaxItems,3),"Alto"), oBrw:GoUp()) ,) ,;
                                If( Empty( oBrw:Amount:Value ), nil, ;
                                  ( AAdd( oBrw:aArrayData, AClone( aBlank ) ), ;
                                    oBrw:GoDown(), oBrw:GoLeftMost(), oBrw:Refresh() ) ) }

      :bChange          := { || If( oBrw:nArrayAt < Len( oBrw:aArrayData ) .and. ;
                                    ATail( oBrw:aArrayData )[ 2 ] == 0, ;
                                  ( ASize( oBrw:aArrayData, Len( oBrw:aArrayData ) - 1  ), ;
                                    oBrw:Refresh() ), ;
                                  nil ) , oBrw:RefreshFooters() }

      :bKeyDown := {|nKey| Teclas(nKey,oBrw,aInvoice) }

      :nHeadStrAligns := AL_CENTER

      :CreateFromCode()
   END

   ACTIVATE DIALOG oDlg CENTERED ;
            ON INIT ( oBrw:SetFocus(), .f. )

   RELEASE FONT oFont

   if ATail( aInvoice )[ 2 ] == 0
      ASize( aInvoice, Len( aInvoice ) - 1 )
   endif

   xbrowser aInvoice title "Edited Invoice" setup ( oBrw:cHeaders := { "Code", "Qty", "Price" } )

return nil

//------------------------------------------------------------------//
Function Teclas(nKey,oBrw,aInvoice)
if nKey == VK_DELETE
  if MsgNoYes("Esta seguro de borrar este registro?")
     ADel(aInvoice, oBrw:nArrayAt, .t.)
     oBrw:MakeTotals()
     oBrw:Refresh()
  endif
endif
Return nil
 

Saludos.

Re: Ejemplo de xbrowse con edicion de registros,altas,bajas...

PostPosted: Mon Nov 02, 2020 11:31 pm
by FranciscoA
ACC69 wrote:Hola buenas tardes, pregunta, en donde puedo encontrar documentacion completa de las referencias de TXBrowse para saber cada evento para que sirve y que funcion hace, por ejemplo:

:bPastEof := { || AddRow( oBrw ) }

GoLeftMost()

oBrw:GoDown()

Etc etc.

Gracias.

Saludos



:bPastEof := { || AddRow( oBrw ) }
CodeBlock a ejecutar cuando se trata de pasar el fin del fichero. En este ejemplo se agrega una fila al browse.

GoLeftMost()
Ir a la primer columna del browse.

oBrw:GoDown()
Baja un registro en el browse. Es como el SKIP en las dbf.

Información la puedes encontrar en le WIKI.

Saludos.

Re: Ejemplo de xbrowse con edicion de registros,altas,bajas...

PostPosted: Mon Nov 02, 2020 11:40 pm
by FranciscoA

Re: Ejemplo de xbrowse con edicion de registros,altas,bajas...

PostPosted: Tue Nov 03, 2020 2:32 pm
by ACC69
FranciscoA wrote:http://wiki.fivetechsoft.com/doku.php



Hola buenos dias a todos.

Gracias Ing. Francisco Alegria, por el ejemplo y el link, y creo que mejor voy por la carga de registros usando arrays, para que a futuro pueda yo insertar registro en caso que se haya olvidado capturar en orden.

Saludos de nuevo.

Atte: Adriano C. C.