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

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

Postby ACC69 » Fri Oct 30, 2020 7:41 pm

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
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby jbrita » Fri Oct 30, 2020 8:18 pm

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
jbrita
 
Posts: 502
Joined: Mon Jan 16, 2006 3:42 pm

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

Postby ACC69 » Mon Nov 02, 2020 6:35 pm

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.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby ACC69 » Mon Nov 02, 2020 6:39 pm

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  RUN
#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
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby ACC69 » Mon Nov 02, 2020 6:54 pm

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  RUN
#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
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby ACC69 » Mon Nov 02, 2020 9:56 pm

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  RUN
#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
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

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

Postby FranciscoA » Mon Nov 02, 2020 11:23 pm

Adriano, este ejemplo que encontré por ahí, te puede ayudar. Es totalmente funcional.
/
Code: Select all  Expand view  RUN
/------------------------------------------------------------------//
// 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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

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

Postby FranciscoA » Mon Nov 02, 2020 11:31 pm

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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

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

Postby FranciscoA » Mon Nov 02, 2020 11:40 pm

Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

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

Postby ACC69 » Tue Nov 03, 2020 2:32 pm

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.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 36 guests