No logro refrescar la edicion de la celda.
Lo que quiero es poder ir editando en celda y que se actualicen los datos, no logro conseguir esto:
FUNCTION Facturacion()
LOCAL aDatos, ;
nI := 0, ;
nLimite := 0
LOCAL oDlg, ;
oBrw, ;
aFuente:= Array( 7 )
DEFINE FONT aFuente[1] name "Arial Black" size 0, -13
DEFINE FONT aFuente[2] name "Square721 BT" size 0, -13
DEFINE FONT aFuente[3] name "MS Sans Serif" size 0, -8
//define font aFuente[4] name "Square721 BT" size 0, -12
DEFINE FONT aFuente[4] name "Monospac821 BT" size 0, -13
DEFINE FONT aFuente[5] name "Eras Bold ITC" size 0, -16
DEFINE FONT aFuente[6] name "Square721 BT" size 0, -12 BOLD
DEFINE FONT aFuente[7] name "Square721 BT" size 0, -18 BOLD
// Array de l铆nea en Factura
IF aSetVars[32] //Terminal Fiscal
nLimite:= 100
ELSE //Terminal No Fiscal
nLimite:= 15
ENDIF
aDatos:= Array( nLimite, 15 )
FOR nItem:= 1 TO nLimite
aDatos[nItem, 1] := space(35) // Descripci贸n
aDatos[nItem, 2] := 0.00 // Cantidad
aDatos[nItem, 3] := 0.00 // Precio Final (siempre para cualquier condici贸n)
aDatos[nItem, 4] := 0.00 // % de Descuento de Linea
aDatos[nItem, 5] := 0.00 // Total de Linea
aDatos[nItem, 6] := 0.00 // Neto Gravado (o exento si no tiene IVA) No est谩 descontado el descuento de linea
aDatos[nItem, 7] := 0.00 // Alicuota IVA
aDatos[nItem, 8] := 0.00 // Imp. Internos ($ x unidad)
aDatos[nItem, 9] := 0.00 // Libre
aDatos[nItem, 10] := 0.00 // Libre
aDatos[nItem, 11] := space(1) // Bienes o Servicios (actualiza o no el stock)
aDatos[nItem, 12] := space(13) // Codigo del Articulo (no visible)
aDatos[nItem, 13] := space(2) // C贸digo de Lista de Precios
aDatos[nItem, 14] := 0.00 // Libre
aDatos[nItem, 15] := space(1) // Libre
NEXT nItem
//----------( Dialogo Factura )----------
DEFINE DIALOG oDlg RESOURCE "FACTURA"
REDEFINE LISTBOX oBrw ;
FIELDS ;
sizes 300, 80, 80, 80, 80 ;
ID 110;
OF oDlg;
FONT aFuente[2];
UPDATE;
colors CLR_BLACK, CLR_2 ;
oBrw:nHeaderHeight := 20
oBrw:nLineHeight := 24
oBrw:lCellStyle := .T.
oBrw:lAutoEdit := .T.
oBrw:ladjlastcol := .T.
oBrw:nLineStyle := 2
oBrw:nHeaderStyle:= 2
oBrw:aHEADERS := { "Descripcion", "Cantidad", "Precio", "% Dto.", "Total" }
oBrw:bLine := {|| { aDatos[obrw:nAt, 1], aDatos[obrw:nAt, 2],;
aDatos[obrw:nAt, 3], aDatos[obrw:nAt, 4],;
aDatos[obrw:nAt, 5] } }
oBrw:SetArray( aDatos )
// nStyle:
// 0 = Celdas normales
// 3 = celda con el foco
// 1 = Cabecera
// 2 = footer
oBrw:bFont := { | nRow, nCol, nStyle | ;
IF ( nStyle == 0 .or. nStyle == 3, afuente[2]:hFont, NIL ) }
oBrw:aHJustify := { 2, 2, 2, 2, 2 }
oBrw:aJustify := { 2, .F. }
obrw:bBkColor := { | nRow, nCol, nStyle | ;
IF ( nStyle = 0, if( nRow % 2==0, CLR_1 , CLR_2 ), ) }
//----------( Estos van juntos )----------
oBrw:bEdit:= { | nCol, cBuffer, lFirstEdit |;
EditaCelda( oBrw, nCol, cBuffer, @aDatos, lFirstEdit ) }
oBrw:bKeyChar := { | nTecla | IF ( nTecla != VK_ESCAPE, oBrw:Edit( oBrw:nColAct, .T. ), ) }
//------------------------------------------
ACTIVATE DIALOG oDlg CENTERED
RETURN ( NIL )
//------------------------------------------------------------------------------
FUNCTION EditaCelda( oBrw, nCol, cBuffer, aDatos, lFirstEdit )
LOCAL ubuffer, ;
bValid, ;
lContinuar, ;
aResultados
// Cantidad Unidades
LOCAL PictuCant := "@EZ 999,999" + if( aSetVars[60] <> 0, substr( ".9999", 1, aSetVars[60] + 1 ), "" )
// Precios Unitarios
LOCAL PictuUnit := "@EZ 99,999" + if( aSetVars[61] <> 0, substr(".9999", 1, aSetVars[61] + 1 ), "" )
// Porcentaje Descuento
LOCAL PictuPorc := "@EZ 999.99"
// Importes en Totales
LOCAL PictuImpo := "@EZ 9,999,999" + if( aSetVars[62] <> 0, substr(".9999", 1, aSetVars[62] + 1 ), "" )
ubuffer:= adatos[ oBrw:nAt, nCol ]
DO CASE
// Para descripcion del producto
CASE nCol = 1
bValid:= {|| aResultados:= Validar( uBuffer ), .T. }
IF lContinuar:= oBrw:lEditCol( nCol, @uBuffer, "@KX", bValid, ,CLR_YELLOW )
aDatos[ oBrw:nAt, 1 ]:= uBuffer
aDatos[ oBrw:nAt, 2 ]:= aResultados[ 1 ]
aDatos[ oBrw:nAt, 3 ]:= aResultados[ 2 ]
ENDIF
// Cantidad
CASE nCol = 2
oBrw:lEditCol( nCol, @uBuffer, "@EZ 999,999",,,CLR_YELLOW )
// Precio
CASE nCol = 3
oBrw:lEditCol( nCol, @uBuffer, PictuUnit,,,CLR_YELLOW )
// Descuento
CASE nCol = 4
oBrw:lEditCol( nCol, @uBuffer, PictuPorc,,,CLR_YELLOW )
END DO
RETURN lContinuar
//------------------------------------------------------------------------------
FUNCTION Validar( uBuffer )
LOCAL aResultados:= Array( 4 )
aResultados[1] := 0.00 // Cantidad
aResultados[2] := 0.00 // Precio Final (siempre para cualquier condici贸n)
aResultados[3] := 0.00 // % de Descuento de Linea
IF Empty( ubuffer )
MsgInfo( "no hay nada aca dentro" )
ENDIF
IF AllTrim( uBuffer ) == "1"
aResultados[1]:= 111
aResultados[2]:= 1.11
aResultados[3]:= 11.1
ENDIF
RETURN ( aResultados )
//------------------------------------------------------------------------------