Página 1 de 1

Comportamiento extraño de seek en DBFDATA6

Publicado: Lun Abr 21, 2008 9:26 am
por Jose Luis Gonzalez
Estoy usando Xailer 1.92 version demo. (Sin cambiar nada al codigo
original del ejemplo)
Al ejecutar el proyecto incluido en Samples - Datacontrols -DBFDATA6
Son 3 errores :
1) Al acceder a la pantalla donde se despliegan las facturas (presionado el
boton de facturas) , si existe solamente un registro se queda trabada.
2) En la captura de partidas para la factura, al capturar la clave del
articulo por ejemplo "XA"
la deja pasar como si existiera. Y pone la descripcion correspondiente a
XAILER como si hubiesemos
capturado la clave "XAILERPER" (como si hubiese una busqueda suave)
¿por que lo deja pasar si la funcion parece escrita correctamente, en su
ejemplo?
¿Por que la funcion ::Seek() regresa .T. si la clave no existe.?
METHOD ChkArticulo( oGridEdit ) CLASS TFrmFraEdi
If !::oBrwArt:lEditMode
Return NIL
Endif
With Object ::oDbfArt
:OrdSetFocus( "CODIGO" )
If !Empty( oGridEdit:Value ) .and. :Seek( oGridEdit:Value ) <==
Seek regresa TRUE (ponel el valor de found en True)
// If !Empty( oGridEdit:Value ) .and. :ForcedSeek( oGridEdit:Value ) <===
Tambien lo deja pasar sin problema
// a pesar de que no existe el codigo del articulo
::oBrwArt:SetValue( 2, :Nombre )
::oBrwArt:SetValue( 4, :PVP )
::GetDescuento()
::CalculaLinea()
::CalculaTotal( .f. )
Else
oGridEdit:Value := ""
With Object ::oBrwArt
if :nLen > 0
:SetValue( 2, "" )
:SetValue( 4, 0 )
:SetValue( 5, 0 )
:SetValue( 6, 0 )
Endif
End with
Tone( 100, .1 )
Endif
End With
RETURN Nil
3)¿ Por que al momento de Guardar la informacion si detecta que no existe el
codigo del articulo al utilizar un ForceSeek?
Versión Xailer: Xailer 1.9.2 Version 1.9
Compilador: xHarbour build 1.0.0 Intl. (SimpLex) PCode Version: 9
Compilador C/C++: Borland C++ 5.8.0
Plataforma: Windows Windows Vista Professional 6.00.6001 Service Pack
1
----------------------- Información detallada del
error -----------------------
Subsistema: Xailer: TRddDataSource
Código de error: 0
Estado: .F.
Descripción: Error de DbSeek() en ARTICULO
Operación: Valor XA
Argumentos:
Fichero:
Código error SO: 0
Pila de llamadas:
TDBFDATASET:SEEK (1144)
(b)XDBFDATASET:XDBFDATASET (125)
TDBFDATASET:FORCEDSEEK (0)
TFRMFACTURAS:CALCULAR (300)
TFRMFACTURAS:SAVELINES (272)
TFRMFACTURAS:MANTENEDITAR (106)
(b)TFRMFACTURAS:CREATEFORM (125)
TDBBROWSE:ONDBLCLICK (0)
TDBBROWSE:WMLBUTTONDBLCLK (2043)
RUNFORM (0)
TAPPLICATION:RUN (209)
MAIN (16)
Este es la parte de codigo que lo hace
With Object ::oDbfLin
If :Seek( ::oDbfCab:Codigo )
Do While :Factura == ::oDbfCab:Codigo .and. !:Eof()
::oDbfArt:ForcedSeek( :Articulo ) <=====================aqui si
detecta que el codigo del articulo no existe
cTipo := ::oDbfArt:TipIva