TXBrowse, edicion directa (SOLUCIONADO)

TXBrowse, edicion directa (SOLUCIONADO)

Postby FranciscoA » Fri Apr 25, 2014 9:31 pm

Hola amigos.
Tengo este raro comportamiento en Xbrowse cuando se edita directamente una celda.
Lo tengo definido asi:
Code: Select all  Expand view
 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?
Last edited by FranciscoA on Sat Apr 26, 2014 4:09 am, edited 1 time in total.
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: TXBrowse, edicion directa

Postby joseluisysturiz » Sat Apr 26, 2014 1: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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: TXBrowse, edicion directa

Postby FranciscoA » Sat Apr 26, 2014 2: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.
Last edited by FranciscoA on Sat Apr 26, 2014 2:08 am, edited 1 time in total.
Francisco J. Alegría P.
Chinandega, Nicaragua.

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

Re: TXBrowse, edicion directa

Postby Daniel Garcia-Gil » Sat Apr 26, 2014 2: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: Select all  Expand view

#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


 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: TXBrowse, edicion directa

Postby FranciscoA » Sat Apr 26, 2014 2: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
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: TXBrowse, edicion directa

Postby FranciscoA » Sat Apr 26, 2014 4: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
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 119 guests