xbrowse y array

xbrowse y array

Postby surGom » Sat May 03, 2014 5:13 pm

Hola compañeros, estoy tratando de hace un xbrowse para facturas, y no logro hacer que funcione bien, para facilitar mi consulta les muestro parte del código en cuestion

Code: Select all  Expand view  RUN
  REDEFINE  xbrowse oBrw id 108 of oDlg ARRAY adet;
      headers  "Código","Medida","Marca","Modelo","Cant","Precio","Total" ;
      columns 1, 2, 3, 4, 5, 6, 7 ;
      colsizes 100,95,95,90,70,80,80 ;
      lines cell fastedit

   WITH OBJECT oBrw
     :nMarqueeStyle := MARQSTYLE_HIGHLCELL
     :nColDividerStyle := LINESTYLE_BLACK
     :nStretchCol := STRETCHCOL_LAST
     :lColDividerComplete := .t.
     :l2007 := .t.
     :lRecordSelector := .t.
     :lAllowColHiding := .f.
     :lAllowColSwapping := .f.

   END WITH


     oBrw:aArrayData := adet
 //  AEval( oBrw:aCols, { |o| o:nEditType := EDIT_GET } )



      WITH OBJECT oBrw:aCols[ 1 ]
     :beditvalue := {|| adet[oBrw:nArrayAt, 1]  }
     :nFootStrAlign := AL_RIGHT
     :nEditType := EDIT_GET
     :bEditValid := { | oGet, oCol | valido(oBrw,oMysql,oQdetalle)   }  
     :bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,oCol:value := xVal, ) }
     END WITH


     WITH OBJECT oBrw:aCols[ 2 ]
       :beditvalue := {||aDet[ oBrw:nArrayAt, 2 ] }
       :nFootStrAlign := AL_LEFT
       :nEditType := EDIT_GET
       :bOnPostEdit := {| oCol, xVal, nKey | If( nKey <> VK_ESCAPE,oCol:value := xVal, ) }
     END WITH
///////

    oBrw:bPastEof  := { || AddRow( oBrw ) }
    oBrw:bKeyDown := {| nKey | If( nKey == VK_DELETE, DelRow( oBrw ), ) }


 


la función valido es la siguiente

STATIC FUNCTION valido(,oBrw,oMysql,oQdetalle)
local oQry:= bprodu(,oQdetalle,oMysql)

adet[oBrw:nArrayAt, 1] := oQry:codigo
adet[oBrw:nArrayAt, 2] := oQry:producto
adet[oBrw:nArrayAt, 3] := oQry:marca
adet[oBrw:nArrayAt, 4] := oQry:modelo
oQry:end()
oBrw:refresh()
return .t.


Lo que me muestra en las respectivas columnas es 1, 1, 1, 1

Hice varias pruebas pero no puedo hacer que muestre los valores que en valido realmente carga.
Indudablemente ó falta algo ó el código esta mal

Gracias
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: xbrowse y array

Postby joseluisysturiz » Sun May 04, 2014 4:06 am

Que intentas hacer en la funcion VALIDO.? tengo una facturacion ful funcionando con array y tdolphin sin problema y que hace bprodu(,oQdetalle,oMysql) ya que se la pasas al oQry, por lo mens explica que intentas hacer en esas funciones para ayudarte mejor, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: xbrowse y array

Postby surGom » Sun May 04, 2014 8:07 am

Hola José Luis bvalido la función que cumple es cargar en el array los valores de los productos, bprodu es la que me muestra un listbox con los códigos de los productos y me devuelve los datos que necesito.

Esto con wbrowse funciona perfectamente.

La imagen que muestra el enlace es con la prueba de xbrowse, selecciono el código y cuando acepto en las 4 primeras celdas aparece un 1, cuando debiera ser código, producto marca y modelo

https://drive.google.com/file/d/0B8UT409V4x1mTWs2TXp3eTUyaU0/edit?usp=sharing

Gracias Jose Luis por tu interes
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: xbrowse y array

Postby joseluisysturiz » Sun May 04, 2014 3:02 pm

Por favor revisa bien los valores que envias a la funcion valida, fijate que en la que la llama esta asi....

valido(oBrw,oMysql,oQdetalle)

pero en la que la recibe esta asi...

valido(,oBrw,oMysql,oQdetalle)

tienes una COMA de primero, repara eso haber si ese es el problema sino, informalo, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: xbrowse y array

Postby surGom » Mon May 05, 2014 2:13 pm

José Luis probé pero seguía igual hasta que me fijé en una diferencia que había entre los dos programas

el de wbrowse tenía definido el array

oCta:adet := array(0)
aadd(oCta:adet,{ space(24),space(20),space(20),space(20),0,0,0,0,.t.})


y en el prg con xbrowse

oCta:adet := { space(24),space(20),space(20),space(20),0,0,0,0,.t.}

al modificarlo me muestra correctamente las celdas

Ahora el problema que me surge es que elige me los muestra, pero al dar enter para pasar a la celda 5 se sale del foco y vuelve al primer foco que es el de inicio del programa y una vez de pasar otra vez por todos los get vuelve el foco a la columa 2 del xbrowse
ademas en las celdas 6 y 7 me da error al compilar (no sé cual es por que el verce no funciona bien en los detalles de errores), como hay que hacer para que de la columna 1 pase directamente a la 5 , y como se hace para una vez terminada la fila pase al siguiente item,

Te muestro el código del xbrowse para ver si me puedes dar una ayuda

Code: Select all  Expand view  RUN

   REDEFINE  xbrowse oBrw id 108 of oDlg ARRAY oCta:adet;
      headers  "Código","Medida","Marca","Modelo","Cant","Precio","Total" ;
      columns 1, 2, 3, 4, 5, 6, 7 ;
      colsizes 100,95,95,90,70,80,80 ;
      lines cell fastedit

   WITH OBJECT oBrw
     :nMarqueeStyle := MARQSTYLE_HIGHLCELL
     :nColDividerStyle := LINESTYLE_BLACK
     :nStretchCol := STRETCHCOL_LAST
     :lColDividerComplete := .t.
     :l2007 := .t.
     :lRecordSelector := .t.
     :lAllowColHiding := .f.
     :lAllowColSwapping := .f.

   END WITH


     oBrw:aArrayData := oCta:adet
     AEval( oBrw:aCols, { |o| o:nEditType := EDIT_GET } )



      WITH OBJECT oBrw:aCols[ 1 ]
     :beditvalue := {|| oCta:adet[oBrw:nArrayAt, 1]  }
     :nFootStrAlign := AL_RIGHT
     :nEditType := EDIT_GET
     :bEditValid := { | oGet, oCol | valido(oBrw,oBrw:nArrayAt,oMysql,oQdetalle)   }  
     :bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,oCol:value := xVal, ) }
     END WITH


     WITH OBJECT oBrw:aCols[5 ]
       :beditvalue := {|| oCta:aDet[ oBrw:nArrayAt, 5 ] }
       :nFootStrAlign := AL_LEFT
       :nEditType := EDIT_GET
       :bOnPostEdit := {| oCol, xVal, nKey | If( nKey <> VK_ESCAPE,oCol:value := xVal, ) }
     END WITH
 
/*
     WITH OBJECT oBrw:aCols[6 ]
       :beditvalue := {|| oCta:aDet[ oBrw:nArrayAt, 6 ] }
       :nFootStrAlign := AL_LEFT
       :nEditType := EDIT_GET
       :bOnPostEdit := {| oCol, xVal, nKey | If( nKey <> VK_ESCAPE,oCol:value := xVal,(oCta;adet[oBrw:nArrayAt7] := multi(oCta:aDet[ oBrw:nArrayAt, 5 ],oCta:aDet[ oBrw:nArrayAt, 6 ] ) ) }
     END WITH*/


/*      WITH OBJECT oBrw:aCols[ 7 ]
     :beditvalue := {|| oCta:adet[oBrw:nArrayAt, 7]  }
     :nFootStrAlign := AL_RIGHT
     :nEditType := EDIT_GET
     :bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,oCol:value := xVal, oCol:value := xVal,AddRow( oBrw ) ) }
     END WITH   */


 
    oBrw:bKeyDown := {| nKey | If( nKey == VK_DELETE, DelRow( oBrw ), ) }



  ACTIVATE DIALOG oDlg
 


Disculpa pero son demasiadas consultas en una
Gracias
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: xbrowse y array

Postby joseluisysturiz » Mon May 05, 2014 5:25 pm

Te muestro mi codigo completo de edicion de celda con array tipo factura, espero te ayude, sino entiendes algo, avisa, saludos... :shock:

asi se salta a una columna determinada, tambien con que no sea editable creo que la salta

oBrw:SelectCol( 3 )

Code: Select all  Expand view  RUN
  REDEFINE xBrowse oBrw ID 100 of oDlg ;
      COLUMNS 1, 2, 3, 4, 5 ;
      ARRAY aItems FASTEDIT LINES

   WITH OBJECT oBrw
      :nMarqueeStyle    := MARQSTYLE_HIGHLCELL
      :nColDividerStyle := LINESTYLE_BLACK
      :nStretchCol      := STRETCHCOL_LAST
      :lColDividerComplete := .t.
      :nHeaderHeight := 30
      :l2007 := .t.
      :lFooter := .t.
      :lAllowColHiding := .f.
      :lAllowColSwapping := .f.
      :bClrStd := {|| IF( oBrw:nArrayAt % 2 == 0, {CLR_BLACK, CLR_WHITE} ,;
         {0, RGB(203, 226, 254)} ) }
   END WITH

   WITH OBJECT oBrw:aCols[1]
      :cHeader := "Código"
      :cEditPicture := "99999"
      :nWidth := 100
      :nDataStrAlign := AL_LEFT
      :bStrData := {|| IIF( LEN( aItems ) = 0, SPACE(10) ,;
                        aItems[oBrw:nArrayAt, 1] ) }
      :nEditType := EDIT_GET_BUTTON
      :bEditBlock := {|| leecodigo( oQryPro, , {"productos_id", "productos_nombre"} ,;
                                    {"Código", "Nombre"}, oBrw, aItems, 1 ) }
      :bEditValid := { | oGet | buscacodigo( oGet:value(), oBrw, aItems ,;
                                    oQryPro, "productos_id" ,;
                                    {"productos_id", "productos_nombre"} ,;
                                    {"Código", "Nombre"}, 1 ) }
        :bOnPostEdit := { | oCol, xVal, nKey | IF( nKey <> VK_ESCAPE .and. !EMPTY( xVal ) ,;
                                               ( oCol:value := xVal ,;
                                               oBrw:SelectCol( 3 ) ),  ) }
   END WITH

   WITH OBJECT oBrw:aCols[2]
      :cHeader := "Descripción"
      :nWidth  := 350
      :nDataStrAlign := AL_LEFT
      :bStrData := {|| IIF( LEN( aItems ) = 0, SPACE(10) ,;
                        aItems[oBrw:nArrayAt, 2] ) }
   END WITH

   WITH OBJECT oBrw:aCols[3]
      :cHeader := "Cantidad"
      :nWidth  := 70
      :cDataType := "N"
      :nDataStrAlign := AL_RIGHT
      :bStrData := {|| IIF( LEN( aItems ) = 0, SPACE(10) ,;
                        TRANS( aItems[oBrw:nArrayAt, 3],"@E 999,999.99" ) ) }
      :cEditPicture  := "@E 999,999.99"
      :nFootStrAlign := AL_RIGHT
        :nEditType     := EDIT_GET
      :bEditValid    := { | oGet, oCol | mayorqcero( oGet:value() ) }
        :bOnPostEdit   := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,;
                                                 ( oCol:value := xVal ), ) }
      :bEditWhen   := {|| !EMPTY( aItems[oBrw:nArrayAt, 2] ) }
   END WITH

   WITH OBJECT oBrw:aCols[4]
      :cHeader := "Precio"
      :cEditPicture := "@E 999,999.99"
      :nWidth  := 70
      :cDataType := "N"
      :nDataStrAlign := AL_RIGHT
      :bStrData := {|| IIF( LEN( aItems ) = 0, SPACE(10) ,;
                        TRANS( aItems[oBrw:nArrayAt, 4], "@E 999,999.99" ) ) }
      :nFootStrAlign := AL_RIGHT
      :cFooter       := "Total Pagar ->"
      :nEditType := EDIT_GET
      :bEditValid    := { | oGet, oCol | mayorqcero( oGet:value() ) }
        :bOnPostEdit   := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,;
                                                 ( oCol:value := xVal ,;
                                                   totalinea( oBrw, aVar, aGet ) ,;
                                                   addrow( oBrw, aVar, aGet ) ), ) }
      :bEditWhen := {|| !EMPTY( aItems[oBrw:nArrayAt, 1] ) }
   END WITH

   WITH OBJECT oBrw:aCols[5]
      :cHeader := "Total"
      :nWidth  := 70
      :cDataType := "N"
      :nDataStrAlign := AL_RIGHT
      :bStrData := {|| IIF( LEN( aItems ) = 0, SPACE(10) ,;
                        TRANSFORM( aItems[oBrw:nArrayAt, 5] ,;
                        "@E 9,999,999.99" ) ) }
      :cEditPicture  := "@E 9,999,999.99"
      :nFooterType   := AGGR_SUM
      :nFootStrAlign := AL_RIGHT
   END WITH

   oBrw:MakeTotals()
   oBrw:RefreshFooters()
   oBrw:Refresh()
 
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: xbrowse y array

Postby surGom » Tue May 06, 2014 11:54 am

Jose Luis ahora funciona un poco mejor digo así ya que luego de seleccionar el producto (ahora se posiciona en la 5º columna) pero sigue yendose del foco xbrowse al primer get y al pasar por todos los objetos y entrar al xbrowse se posiciona en la 5ta columna y sigue como si nada hubiera pasado

te muestro el prg completo

Code: Select all  Expand view  RUN
#include "fivewin.ch"
#include "tarray.ch"
#include "splitter.ch"
#include "xbrowse.ch"

#define HA_LEFT  0
#define HA_RIGHT 1
#define HA_CENTER 2

static aGet := array(14)
static oQfac
static oCta
static nsaldo := 0
static oDlg
static oQdetalle

function factura(oMysql, lnueva, lcliente)


local aItem := {"Contado","30 días","45 días","90 días","120 días"}
local aBut := array(3)
local oBrw
local oSpli
local cEva1 := {|| oBrw:setfocus() }
local nBut := array(3)
local cTitulo := iif(lcliente,"Factura Clientes","Factura proveedor")


 LOCAL   cQuery := "SELECT * FROM producto ORDER by codigo"


// Este no va, porque maeclien puede ser una tabla y aqui en
// SQL no se pone en uso cada tabla sino solo el contenedor (base de datos)
//  oMysql:Selectdb("maeclie")

// Aqui te aplica una especie d ZAP a la tabla maeclien
//  oMysql:execute( "TRUNCATE TABLE maeclie" )

  oQdetalle := oMysql:Query( cQuery )

  oQdetalle:gotop()

  xbrNumFormat( "E", .T. )

oCta := oCtac()

 aadd(oCta:adet,{ space(24),space(20),space(20),space(20),0,0,0,0,.t.})

DEFINE DIALOG oDlg resource "dia_factura"
oDlg:cCaption := "Factura clientes"

   REDEFINE GET aGet[1] VAR oCta:ncli picture "99999" ID 101 UPDATE  of odlg  ;
                                VALID cargocli(oBrw,oMysql)

   REDEFINE GET aGet[2] VAR oCta:nape  ID 102 of odlg UPDATE

   REDEFINE GET aGet[3] VAR oCta:domi  ID 103 of odlg UPDATE
   REDEFINE GET aGet[5] VAR oCta:cuit   ID 104 of odlg UPDATE
   REDEFINE GET aGet[4] VAR oCta:iva  ID 105 of odlg UPDATE
   REDEFINE COMBOBOX aGet[8] VAR oCta:condicion  ITEMS aItem ID 113 of odlg UPDATE  // VALID ( Eval( cEva1 ), .T. )
   REDEFINE GET aGet[6] VAR oCta:fecha picture "@d"  ID 106 of odlg UPDATE
   REDEFINE GET aGet[14] VAR oCta:pventa picture "9999"  ID 115 of odlg UPDATE valid( oCta:pventa:=RIGHT("0000"+AllTrim( oCta:pventa),4),aGet[14]:refresh(),.t.)
   REDEFINE GET aGet[8] VAR oCta:factura  ID 107 of odlg UPDATE valid ( oCta:factura:=RIGHT("0000"+AllTrim( oCta:factura),8),aGet[8]:refresh(),.t.)
   REDEFINE GET aGet[9] VAR oCta:subtotal picture "@e 9,999,999.99"  ID 109 of odlg UPDATE
   REDEFINE GET aGet[10] VAR oCta:total picture "@e 9,999,999.99"  ID 112 of odlg UPDATE
   REDEFINE GET aGet[11] VAR oCta:niva picture "@e 999,999.99"  ID 110 of odlg UPDATE
   REDEFINE GET aGet[12] VAR oCta:ib picture "@e 999,999.99"  ID 111 of odlg UPDATE

   REDEFINE SPLITTER aGet[13] ID 116 COLOR rgb(234,234,234) ADJUST of odlg _3DLOOK


   REDEFINE BUTTON nbut[ 1 ] id 200 of odlg;
         ACTION ACEPTO(oMysql, lnueva, lcliente)

   REDEFINE BUTTON nbut[ 2 ] id 201 of odlg;
         ACTION nil

   REDEFINE BUTTON nbut[ 3 ] id 202 of odlg;
         ACTION nil



   REDEFINE  xbrowse oBrw id 108 of oDlg ARRAY oCta:adet;
      headers  "Código","Medida","Marca","Modelo","Cant","Precio","Total" ;
      columns 1, 2, 3, 4, 5, 6, 7 ;
      colsizes 100,95,95,90,70,80,80 ;
      lines cell  fastedit



     oBrw:aArrayData := oCta:adet

   WITH OBJECT oBrw:aCols[ 1 ]
     :beditvalue := {|| oCta:adet[oBrw:nArrayAt, 1]  }
     :nFootStrAlign := AL_RIGHT
     :nEditType := EDIT_GET
     :bEditvalid := { | oGet, oCol | valido(oBrw,oBrw:nArrayAt,oMysql,oQdetalle),.t.   }  
     :bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,(oCol:value := xVal,;
                                                           oBrw:SelectCol( 5 )), ) }
     END WITH


      WITH OBJECT oBrw:aCols[ 2 ]
     :beditvalue := {|| oCta:adet[oBrw:nArrayAt, 2]  }
     :nFootStrAlign := AL_RIGHT
     :nEditType := EDIT_GET
     :bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,oCol:value := xVal, ) }
     END WITH


      WITH OBJECT oBrw:aCols[ 3 ]
     :beditvalue := {|| oCta:adet[oBrw:nArrayAt, 3]  }
     :nFootStrAlign := AL_RIGHT
     :nEditType := EDIT_GET
     :bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,oCol:value := xVal, ) }
     END WITH

      WITH OBJECT oBrw:aCols[ 4 ]
     :beditvalue := {|| oCta:adet[oBrw:nArrayAt, 4]  }
     :nFootStrAlign := AL_RIGHT
     :nEditType := EDIT_GET
     :bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,oCol:value := xVal, ) }
     END WITH

     WITH OBJECT oBrw:aCols[5 ]
       :beditvalue := {|| oCta:aDet[ oBrw:nArrayAt, 5 ] }
       :cEditPicture := "@e 99,999"
       :nFootStrAlign := AL_LEFT
       :nEditType := EDIT_GET
       :bOnPostEdit := {| oCol, xVal, nKey | If( nKey <> VK_ESCAPE,oCol:value := xVal, ) }
     END WITH

     WITH OBJECT oBrw:aCols[6 ]
       :beditvalue := {|| oCta:aDet[ oBrw:nArrayAt, 6 ] }
       :cEditPicture := "@e 999,999.99"
       :nFootStrAlign := AL_LEFT
       :nEditType := EDIT_GET
       :bOnPostEdit := {| oCol, xVal, nKey | If( nKey <> VK_ESCAPE,(oCol:value := xVal,totales(obrw)), ) }
                                                     
     END WITH

      WITH OBJECT oBrw:aCols[ 7 ]
     :beditvalue := {|| oCta:adet[oBrw:nArrayAt, 7]  }
     :cEditPicture := "@e 999,999.99"
     :nFootStrAlign := AL_RIGHT
     :nEditType := EDIT_GET
     :bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,(oCol:value := xVal, AddRow( oBrw )), ) }
     END WITH                                                        

   WITH OBJECT oBrw
     :nMarqueeStyle := MARQSTYLE_HIGHLCELL
     :nColDividerStyle := LINESTYLE_BLACK
     :nStretchCol := STRETCHCOL_LAST
     :lColDividerComplete := .t.
     :l2007 := .t.
     :lRecordSelector := .f.
     :lAllowColHiding := .f.
     :lAllowColSwapping := .f.
   END WITH



    oBrw:bKeyDown := {| nKey | If( nKey == VK_DELETE, DelRow( oBrw ), ) }



  ACTIVATE DIALOG oDlg



  return nil


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static function cargocli(oBrw,oMysql)
local oQmae  := oMysql:Query( "SELECT * FROM maeclie")
local oQry1
local z := 1
local lTipo := .f.
local nImporte


oQry1 :=busnap(,oQmae,oCta:ncli,oMysql)
 
if empty(oQry1 )
    return .f.
endif

oCta:ncli := oQry1:ncli
oCta:nape := oQry1:nape
oCta:domi := alltrim(oQry1:domi) +" - " + oQry1:loca
oCta:cuit := oQry1:cuit
oCta:iva := oQry1:iva
oDlg:update()
oQmae:end()

return .t.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

static function AddRow( oBrw )

   aadd(oCta:adet,{ space(24),space(20),space(20),space(20),0,0,0,0,.t.})
   oBrw:GoBottom()
   oBrw:Refresh()
   oBrw:SetFocus()

return nil
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static function DelRow( oBrw )

   if oBrw:nLen > 0
      ADel( oBrw:aArrayData, oBrw:nArrayAt )
      ASize( oBrw:aArrayData, oBrw:nLen - 1 )
      oBrw:Refresh()
   endif
   oBrw:SetFocus()
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
STATIC FUNCTION oCtac( )
local oCta
      DEFINE STRUCT oCta
     STRUCT FIELD "ncli" INIT 0
         STRUCT FIELD "nape" INIT ""
     STRUCT FIELD "domi" INIT ""
     STRUCT FIELD  "fecha" INIT date()
     STRUCT FIELD  "cuit" INIT ""
     STRUCT FIELD  "iva" INIT ""
     STRUCT FIELD  "condicion" INIT "Contado"
     STRUCT FIELD  "subtotal" INIT 0
     STRUCT FIELD  "total" INIT 0
     STRUCT FIELD  "niva" INIT 0
     STRUCT FIELD  "ib" INIT 0
     STRUCT FIELD  "pventa" INIT space(4)
     STRUCT FIELD  "factura" INIT space(8)
     STRUCT FIELD  "adet" INIT array(0)
     END STRUCT

return oCta
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 STATIC FUNCTION valido(oBrw,nAt,oMysql,oQdetalle)


 local oQry


// oQry2 := ocheque:seek("codigo =" +  alltrim(str(adet[nAt,1])) ,, {"*"})

oQry :=  bprodu(,oQdetalle,oMysql)
if empty(oQry)
   msgstop("No esta cargado ese producto","Aviso del sistema")
   return nil
endif



 oCta:adet[nAt, 1] := oQry:codigo
 oCta:adet[nAt, 2] := oQry:producto
 oCta:adet[nAt, 3] := oQry:marca
 oCta:adet[nAt, 4] := oQry:modelo


 oQry:end()
 oBrw:refresh()
return .t.


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
STATIC FUNCTION ACEPTO(oMysql, lnueva, lcliente)
LOCAL cQuery
LOCAL cQueryfac
LOCAL oQrycta
LOCAL oQryfac
LOCAL cQuerysto := "SELECT * FROM detapro"
LOCAL oQrysto := oMysql:Query(cQuerysto)

if empty(oCta:ntotal)
   msgstop("No hay datos para grabar","Ingrese datos")
   return nil
endif

if  lcliente
  cQuery:=   "SELECT * FROM ctacte ORDER by ncli"
  cQueryfac :=  "SELECT * FROM factura ORDER by nrofac"
else
  cQuery:=   "SELECT * FROM ctacp ORDER by ncli"
  cQueryfac :=  "SELECT * FROM facpro ORDER by nrofac"
endif

  oQrycta :=  oMysql:Query(cQuery)

  oQrycta:blank()
  oQrycta:ncli := oCta:ncli
  oQrycta:comprobante := oCta:pventa + "-"+ oCta:factura
  oQrycta:fecha := oCta:fecha
  oQrycta:descripcion :=  oCta:tipocom
  oQrycta:importe := oCta:ntotal
  oQrycta:tipo := "1"
  oQrycta:pventa := oCta:pventa
  oQrycta:numero := oCta:factura
  oQrycta:save()
  oQrycta:end()




   oQryfac :=   oMysql:Query(cQueryfac)
   oQryfac:blank()  
   oQryfac:ncli := oCta:ncli
   oQryfac:nrofac := oCta:pventa + "-"+ oCta:factura
   oQryfac:fecha := oCta:fecha
   oQryfac:importe := oCta:ntotal
   oQryfac:plazo := oCta:condicion
   oQryfac:baseimpo := oCta:subtotal
   oQryfac:iva := oCta:niva
   oQryfac:ingbruto := oCta:ib
   oQryfac:tipo := oCta:tipocom
   oQryfac:save()
   oQryfac:end()



   oQrysto :=   oMysql:Query(cQueryfac)
   for z = 1 to len(oCta:adet)
       oQrySto:blank()
        iif(lcliente,oQrysto:ncli := oCta:ncli, oQrysto:npro := oCta:ncli)
       oQrysto:codigo := oCta:adet[z,1]
       oQrysto:comprobante := oCta:pventa + "-"+ oCta:factura
       oQrysto:costo := oCta:adet[z,6]
       oQrysto:fecha := oCta:fecha
       oQrysto:cantidad := oCta:adet[z,5]
       oQrysto:save()
   next
   oQrysto:end()

RETURN NIL
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static function totales(oBrw)

oCta:adet[oBrw:nArrayAt,7] := multi(oCta:aDet[ oBrw:nArrayAt, 5 ],oCta:aDet[ oBrw:nArrayAt, 6 ] )
obrw:refresh()
return .t.
 


De tu código la parte que no entiendo y que creo que hace lo que yo quiero implementar es

Code: Select all  Expand view  RUN
     :bEditBlock := {|| leecodigo( oQryPro, , {"productos_id", "productos_nombre"} ,;
                                    {"Código", "Nombre"}, oBrw, aItems, 1 ) }
      :bEditValid := { | oGet | buscacodigo( oGet:value(), oBrw, aItems ,;
                                    oQryPro, "productos_id" ,;
                                    {"productos_id", "productos_nombre"} ,;
                                    {"Código", "Nombre"}, 1 ) }



Un abrazo

Luis
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: xbrowse y array

Postby surGom » Sat May 10, 2014 4:24 pm

Hola lamentablemente no pude hacerlo funcionar así que momentaneamente hice el proyecto con wbrowse (para los casos como factura,remitos ,etc) en los casos que tengo que editar una celda y seleccionar un item.

Les envío una imagen de lo que sucede con el prg que envié anteriormente para que sea mas fácil captar el problema que acontece cuando hago el valid en la celda 1, como pueden ver se posiciona en el código de cliente


Image


Después de volver a navegar desde el código de cliente y al llegar a la condición dónde existe un valid oBrw:setfocus(), se posiciona en la celda 5 y se continua normalmente hasta que llegas al 2º fila y otra vez sopa.

Si quito el bvalid de la 1º celda navega correctamente

Gracias por vuestra atención

Luis

Me ayudarían a resolver este problema?

Gracias
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: xbrowse y array

Postby joseluisysturiz » Sat May 10, 2014 6:52 pm

Probastes el que te envie.? ese trabaja sin problemas y esta con array, revisare tu codigo mas detenidamente haber que detalle le consigo, estaba un poco ful y no habia podido revisar lo que pusistes de tu codigo, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: xbrowse y array

Postby surGom » Sat May 10, 2014 8:50 pm

Jose no lo pude probar ya que no sé que función cumple
Code: Select all  Expand view  RUN
     :bEditBlock := {|| leecodigo( oQryPro, , {"productos_id", "productos_nombre"} ,;
                                    {"Código", "Nombre"}, oBrw, aItems, 1 ) }
     


todo lo que necesito es lo que hago en bedivalid es abrir otra función en la que elijo el código del producto y cargo los elementos necesarios del array, y como se puede ver cargar los carga, pero el problema está en que sale del foco del xbrowse y vuelve al primer get de la función


Luis
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: xbrowse y array

Postby surGom » Sat May 10, 2014 10:31 pm

Cambie la declaración de la primera celda, en vez de hacer
Code: Select all  Expand view  RUN

    :nEditType := EDIT_GET
    :bEditValid := { | oGet, oCol | valido(oBrw,oMysql,oQdetalle)   }  


hice lo siguiente:

Code: Select all  Expand view  RUN
       
         :nEdittype := EDIT_BUTTON
         :bEditBlock := { || valido(oBrw,oBrw:nArrayAt,oMysql,oQdetalle)  }
         :bOnPostEdit := { | oCol, xVal, nKey | If( nKey <> VK_ESCAPE ,(oCol:value := xVal,;
                                                           oBrw:SelectCol( 5 )), )


Y ahora hace lo que necesito, pero la idea era mantener la misma forma que hago con wbrowse , es decir al hacer enter que se abra la ventana con los productos , y seleccionarlo.

Igualmente me gustaría saber el porque del comportamiento del primer código.

Luis
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 40 guests