Estoy atorado con este problema.
Tengo una función que muestra información de movimientos en un xbrowse y hago un join para traer diferentes datos de unos clientes.
Esta funcion es para que elija que movimiento anular.
Este es el codigo:
- Code: Select all Expand view RUN
- function AnulMov2
local cSql, hvcoti, rere
rere:= .f.
hvnum = hb_hash()
modelo:=oodbc:query('SELECT fecha, hora, caja, b.razon razon, moneda, tipo, vcotiza cotiza, vmoneda monto, vpesos pesos, a.orden orden FROM mv_cambio AS a LEFT JOIN m_cliente AS b ON a.cliente = b.codigo WHERE fecha >= date_sub(CURRENT_DATE(), INTERVAL 1 MONTH) order by a.orden DESC' )
DEFINE FONT oBold NAME 'TAHOMA' SIZE 0,-25
DEFINE dialog ownd2 TITLE "Anulación de Operaciones del ultimo mes" ICON "#8001"
saxx = .t.
@ 0,0 XBROWSE oBrw OF ownd2 DATASOURCE MODELO AUTOSORT CELL update FONT oFuentbd ;
columns 'fecha','hora','caja','razon','tipix','moneda','cotiza','monto','pesos';
headers 'FECHA','HORA','CAJA','CLIENTE','TIPO','MONEDA','COTIZACION', 'MONTO', 'PESOS'
oBrw:TIPO := { || saberElTipo2( modelo:tipo ) }
oBrw:MONTO:cEditPicture := '@e 999,999,999.99'
oBrw:PESOS:cEditPicture := '@e 999,999,999.99'
oBrw:COTIZACION:cEditPicture := '@e 999,999,999.99'
oBrw:lFastEdit := .f.
oBrw:nMoveType := 5
obrw:nHeaderHeight := 40
oBrw:bClrHeader := { || {CLR_BLACK, METRO_GRIS7b, METRO_GRIS7b } }
oBrw:bClrFooter := oBrw:bClrHeader
oBrw:nRowHeight := 32
oBrw:bClrRowFocus := { || { CLR_BLACK, RGB( 185,220,255 ) } }
oBrw:bClrSelFocus := {|| { CLR_WHITE,CLR_7}}
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLCELL
oBrw:nColorPen := METRO_GRIS7A
oBrw:lFullGrid := .f.
oBrw:l2007 := .f.
oBrw:lmultiselect := .f.
oBrw:lExcelCellWise := .t.
oBrw:lFlatStyle := .t.
oBrw:lRecordSelector := .f.
oBrw:lSeekWild := .t.
oBrw:bClrStd := { || If( Eval( oBrw:bKeyNo,,oBrw) % 2 == 0, { METRO_GRIS5, RGB( 253, 254, 254 ) }, { METRO_GRIS5, RGB( 244, 246, 246 ) } ) }
oBrw:lColDividerComplete := .t.
oBrw:SetDolphin(modelo)
oBrw:bKeyChar := { |n| If( n == VK_RETURN, 0, nil ) }
/* Aqui esta el problema */
oBrw:bKeyChar := { |n| If( n == 13,( DelMovi2(modelo:orden,2), modelo:refresh(), oBrw:SetFocus(), obrw:refresh(), ) ,)}
oBrw:bLDblClick := { || DelMovi2(modelo:orden,2), modelo:Refresh(), oBrw:SetFocus(), oBrw:Refresh() }
/* HASTA AQUI */
AEval( oBrw:aCols, { |o| o:oHeaderFont := aFont1[2] } )
sysrefresh()
oBrw:CreateFromCode()
oWnd2:oClient := oBrw
ACTIVATE dialog oWnd2 on init( BtnBaranu05( oWnd2, obrw,oBold, 'Anular operaciones' ), oWnd2:Maximize(), oWnd2:Resize() )
modelo:end()
return .t.
Como veran, las dos lineas de codigo que me generan problemas son estas:
- Code: Select all Expand view RUN
- oBrw:bKeyChar := { |n| If( n == 13,( DelMovi2(modelo:orden,2), modelo:refresh(), oBrw:SetFocus(), obrw:refresh(), ) ,)}
oBrw:bLDblClick := { || DelMovi2(modelo:orden,2), modelo:Refresh(), oBrw:SetFocus(), oBrw:Refresh() }
Si el usuario hace doble click o hace enter ejecuta un pop-up que le pregunta si desea eliminar o no el registro. Luego deberia actualizar la pantalla del xbrowse.
El problema radica en que si, yo en la query NO incluyo un JOIN, se genera todo perfectamente. Pero al poner un JOIN, al ejecutar modelo:Refresh(), el resultado me arroja como si en el SELECT hubiese puesto "*", ya que al abrir el objeto e inspeccionarlo, devuelve todos los datos de ambas tablas.
El xBrowse se actualiza y funciona bien, pero al devolver TODOS los datos de ambas tablas, dejan de funcionar los valores que comparten el mismo nombre en ambas tablas (ejemplo: campo orden (ID unico) ) y a su vez, pierden el alias todas las columnas.
Hay alguna manera de que el Refresh() no actue de esa manera? u otro procedimiento?
Muchas gracias.