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
#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