FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour TXBrowse, edicion directa (SOLUCIONADO)
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
TXBrowse, edicion directa (SOLUCIONADO)
Posted: Fri Apr 25, 2014 09:31 PM
Hola amigos.
Tengo este raro comportamiento en Xbrowse cuando se edita directamente una celda.
Lo tengo definido asi:
Code (fw): Select all Collapse
  XbrNumFormat( 'A', .t. )

  REDEFINE XBROWSE oBrw ID 181 OF oDlg ;
      COLUMNS "Codigo","Nombre","Tipo","Fecha","Td","Docum","Debe","Vence","NumDocPago","FechPago","SaldoAct","Concepto" ;
      FIELDSIZES 80,200,30,70,24,66,80,70,66,70,80,470 ;
      HEADERS "Codigo","Nombre","Tipo","Fecha","Td","Docum No.","Valor","Vence","Doc Pago","Fecha Pago","Saldo Act","Concepto" ;
      ALIAS (cAlias) CELL LINES FOOTERS  // FASTEDIT

  WITH OBJECT oBrw
    :nMarqueeStyle       := MARQSTYLE_HIGHLROW    // HIGHLCELL
    :nColDividerStyle    := LINESTYLE_LIGHTGRAY   //INSET 
    :nRowDividerStyle    := LINESTYLE_LIGHTGRAY   //INSET 
    :lColDividerComplete := .t. 
    :nStretchCol         := STRETCHCOL_LAST    //llenar espacio con ultima columna
    :nRowHeight    := 18  //altura entre lineas

    :nHeaderHeight        := 30   //Altura cabeceras de col
    :lFooter              := .t.  //Que tendrá footer 
    :nFooterLines         := 2    //Lineas del footer 
    :nFooterHeight        := 24   //Altura del  Footer  42
    :lRecordSelector      := .t.  //poner o no, COL de la flechita de la izq

    :bClrHeader     := {|| { nRGB(140,  0,  0), nRGB( 231, 242, 255 ), } } 
    :bClrFooter     := oBrw:bClrHeader
    :bClrStd        := {|| { nRGB(  0,  0,  0), nRGB(255,255,255) } }  // colores para lineas normales
    :bClrSel        := {|| { nRGB(  0,  0,  0), aGradRowSel } }  // para barra de linea selecc cuando el control tiene el foco
    :bClrSelFocus   := { || { CLR_BLACK, aGradBarSel } }     // para barra de linea selecc cuando el control tiene el foco
    :nHeadStrAligns := AL_CENTER
  END 

  WITH OBJECT oBrw:SaldoAct
    :nEditType   := EDIT_GET
    :bEditWhen   := { || MsgInfo("Deberia revisar sus transacciones antes de editar este valor.","Advertencia"), .t. }
   * :bEditValid  := {|oGet| if( len(Alltrim(str(oGet:Value))) > len(Str((cAlias)->SaldoAct)), (MsgInfo("Valor fuera de rango","Alto"),.f.),.t.) }
    :bOnPostEdit := { | oCol, xVal, nKey |  nSdoActAnt:=(cAlias)->SaldoAct, If( nKey == VK_RETURN, if( (cAlias)->(RLock()), ((cAlias)->SaldoAct := xVal, (cAlias)->(DbUnLock()), ActProce(nSdoActAnt,xVal,(cAlias)->nombre,(cAlias)->Docum,(cAlias)->concepto) ),) ,(cAlias)->(DbUnLock())) } 
    *:bOnPreEdit  := { || If(oRsDetail:Fields("Inventory Id"):Value = "  ", , __Keyboard( Chr( VK_HOME ))) }
  END

El campo SaldoAct es numerico, 10,2 (2 decimales)

Cuando introduzco un valor de 1,000,000.00 (con decimales o no) //TODO OK
Cuando introduzco un valor de 10,000,000.00 (con decimales, lo controlo con el bEditValid descrito arriba) //TODO OK
Cuando introduzco un valor de 10,000,000 (sin decimales), me da error de anchura de datos, //TODO MAL
Sucede al darle Enter para grabar el dato.

Algunos ya han pasado por esto? Como lo han corregido? (Mi version es FWH 1204
Saludos.

PD:
Si establezco el picture con :cEditPicture = "9,999,999.99" TODO OK
Pero si establezco el picture con :cEditPicture = "99,999,999.99" TODO MAL (vuelve al comportamiento descrito).

No controla esto XBrowse esto ultimo?
Es decir, si ponemos un picture mayor a longitud del campo correspondiente, XBrowse no corrige automaticamente esto?
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: TXBrowse, edicion directa
Posted: Sat Apr 26, 2014 01:26 AM

Cual es el error que te da..? solo dices TODO MALO, pero cual es el error en si haber que podemos aportar en la ayuda, saludos... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: TXBrowse, edicion directa
Posted: Sat Apr 26, 2014 02:00 AM
Hola José Luis, gracias por contestar.
Cuando introduzco un valor de 10,000,000 (sin decimales), me da error de anchura de datos, //TODO MAL
Data Width Error
Por favor, puedes hacer una prueba en uno de tus xbrowses que editas directamente, y me confirmas?
O sea, teniendo un campo en una dbf de tipo numero de longitud 10 con 2 decimales, introducis en el browse (teniendo el cEditPicture con mayor longitud por ejemplo cEditPicture := "@Z 99,999,999.99"), al tratar de grabarse tira el error. Por eso preguntaba si xbrowse no chequea automaticamente y traduce, convierte, o como quiera llamarse, este picture al tamaño del campo. Estoy revisando la classe a ver que consigo.
Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: TXBrowse, edicion directa
Posted: Sat Apr 26, 2014 02:03 AM
Francisco

hasta donde recuerdo xBrowse no controla eso, pero podrias automatizar el proceso de los picture de forma muy simple, te dejo una funcion que te podria servir, puedes añadirles mas propiedades e incluso extenderla mas si es de tu gusto, pero el concepto inicial, como minimo, es generar el picture de datos tipos numericos

podrias hacer

: cEditPicture = hPicture["NOMBRE_DEL_CAMPO"]

Code (fw): Select all Collapse
#include "dbstruct.ch"

function main()
  local cAlias := "test"
  local hPictures

  DBUseArea( .T., "DBFNTX",  "test", cAlias )

  hPictures = DBFAutoPicture( cAlias )

  ? "Field SALARY AutoPicture = ", hPictures["SALARY"]

  ? AutoPicture( "N", 13, 2 )

  (cAlias)->( DBCloseArea() )

return nil


function DBFAutoPicture( cAlias )

  local hPict := {=>}
  local aStructure
  local field

  aStructure = ( cAlias )->( DBStruct() )

  for each field in aStructure
    hPict[Upper( field[DBS_NAME] )] = AutoPicture( field[ DBS_TYPE ], field[ DBS_LEN ], field[ DBS_DEC ])
  next

return hPict


function AutoPicture( cType, nLen, nDecimales )

  local j, cPicture := ""

  if cType == "N"
    if nLen > 2
      for j = nLen to 1 step - 1
        if j%3 == 0 .and. j != nLen
          cPicture += ","
        endif
        cPicture += "9"
      next
    else
      cPicture = Replicate( "9", nLen )
    endif

    if nDecimales > 0
      cPicture += ( "." + Replicate( "9", nDecimales ) )
    endif
  endif

return cPicture
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: TXBrowse, edicion directa
Posted: Sat Apr 26, 2014 02:12 AM

Daniel, mucho gusto.
Voy a hacer las pruebas y luego te comento.
Muchas gracias.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: TXBrowse, edicion directa
Posted: Sat Apr 26, 2014 04:05 AM
Daniel Garcia-Gil wrote:Francisco

hasta donde recuerdo xBrowse no controla eso, pero podrias automatizar el proceso de los picture de forma muy simple, te dejo una funcion que te podria servir, puedes añadirles mas propiedades e incluso extenderla mas si es de tu gusto, pero el concepto inicial, como minimo, es generar el picture de datos tipos numericos

podrias hacer

: cEditPicture = hPicture["NOMBRE_DEL_CAMPO"]


Daniel.
Excelente...! (como siempre). Funciona de maravilla.
Unicamente le hice un pequeño ajuste, pues me devolvía 3 caracteres demás ( el punto y los 2 decimales)
Muchisimas gracias.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql

Continue the discussion