Clipper/FiveWin - HELP !!! CON MDI

 
Vista:

HELP !!! CON MDI

Publicado por Luis Ponce (119 intervenciones) el 18/02/2008 17:42:10
Amigos del foro

Toco que casi enloquezca con los las ventanas MDI, sucede que tengo un sistema que trabaja en red y de los terminales genera pedidos de mercaderia que son recuperados en el server que es la caja (ya que con la TDOSPRN, no se puede imprimir desde los terminales en impresoras remotas....) es ese equipo donde tengo dos puertos de impresión LPT1 y LTP2 donde imprimo facturas y Boletas y un COM2 donde va la TM300 para tikets... ah esa es otra historia que luego contare.

Es el hecho que lo hacia con un dialogo que daba el ultimo clic para emitir un comprobante de pago, tambien adicione un timer que me haga un refresh al dialogo para saber de pedidos nuevos recien generados desde algun terminal (que dicho sea de paso tampoco funciona), en este dialogo declaro unas variables como LOCALES de la forma usual (me refiero a LOCAL cCodDoc:=cSerDoc:=cCodVen:=cCodZon:=cObserva:="") y al parecer no funciona, me da error ERROR BASE/1003 Variable Does Not Exist cSerDoc.. al momento de hacer el ON DBLCLICK en el Listbox, (y me pregunto x que esa variable da error si al invocar a la funcion que ejecuta el mouse ImpCmp(..) llama a otras variables y la primera es cCodDoc) ¿?? ya me arranque los pelos probando de todo un poco y oh sorpresa si funciona cuando declaro por separado las variables en mecion :

LOCAL cCodDoc
LOCAL cSerDoc
LOCAL cCodVen
LOCAL cCodZon
LOCAL cObserva

Ahí comparto mi codigo a lo mejor algo estoy haciendo mal.

Y no es todo, cuando en teoria debo cerar la base de datos al final con (AliasPed)->(DbCloseArea()) al parecer lo cierra cuando aun no cerre el dialogo y cuando retorna de refcaja(..) me da el error de ERROR BASE/1002 Alias Does Not Exist PEDIDOS01 por eso la puse como comentario, al igual que las dos lineas siguientes a esa que tambien provocan un error.

Function FacCajaX()
LOCAL oWndCaja,oDlgCaja,oLbxPedidos,oFntArial,oFntArial2,oTimer,oTotal,oTitulo,oObserva,oMeter
LOCAL cCodClt,cNomClt,nTotPed,nLineas
LOCAL cCodDoc:=cSerDoc:=cCodVen:=cCodZon:=cObserva:=""
LOCAL nMoneda:=ASCAN(aMon,IMPMFA)
LOCAL nTotal :=0.00
LOCAL nActual:=nTotalPro:=0
LOCAL AliasPed

USE &FIL46 NEW SHARED Alias (AliasPed := GetNewAlias( "PEDIDOS" ) )
(AliasPed)->(OrdSetFocus(1))

DbEval( { || nTotal += (AliasPed)->IMPORTE } )

(AliasPed)->(DbGoTop())

DEFINE FONT oFntArial NAME "Arial" SIZE 0, -13
DEFINE FONT oFntArial2 NAME "Arial" SIZE 0, -16 BOLD
DEFINE FONT oFntArial3 NAME "Arial" SIZE 0, -24 BOLD

DEFINE WINDOW oWndCaja MDICHILD FROM 0.5,0.5 TO 26,70;
TITLE "Movimiento de Caja"

DEFINE DIALOG oDlgCaja NAME "DLG_CAJA" OF oWndCaja

// DEFINE TIMER oTimer INTERVAL 10000 ACTION nTotal:=refcaja(oLbxPedido,oDlgCaja,oTotal,oMeter,(AliasPed)) OF oDlgCaja *** esta es la instrucción inicial hice otra mas sencilla a continuación para probar
DEFINE TIMER oTimer INTERVAL 10000 ACTION msgalert("Funciono el Timer !!") OF oDlgCaja

// ACTIVATE TIMER oTimer ***** y no funciona

REDEFINE SAY oTitulo PROMPT "Pendientes de Facturar" ID 118 OF oDlgCaja FONT oFntArial2 COLORS nRgb(200,0,0)
REDEFINE METER oMeter VAR nActual TOTAL nTotalPro ID 119 OF oDlgCaja UPDATE
REDEFINE LISTBOX oLbxPedido ;
FIELDS (AliasPed)->NUMERO, (AliasPed)->NOMBRE, TRANS((AliasPed)->IMPORTE,MA72C) ;
ALIAS (AliasPed) ;
HEAD "Pedido", "A Nombre de", "Total" ;
ON CHANGE (cCodClt:=(AliasPed)->CODCLT,cNomClt :=(AliasPed)->NOMBRE, ;
nTotPed:=(AliasPed)->IMPORTE,nLineas:=(AliasPed)->LINEAS, ;
cCodVen:=(AliasPed)->VENDEDOR,cCodZon:=(AliasPed)->ZONA, ;
cCodDoc:=(AliasPed)->COMPROBANT,cSerDoc:=(AliasPed)->SERIE,cObserva:=TRIM((AliasPed)->OBSERVA),oDlgCaja:Update()) ;
ON DBLCLICK IIF(!EMPTY((AliasPed)->IMPORTE),(aImpCmp:=ImpCmp(cCodDoc,cSerDoc,UltDoc(cCodDoc,cSerDoc),DATE(),1,'01',cCodClt,cNomClt,nMoneda,nTotPed,nLineas,(AliasPed)->NUMERO,cCodVen,cCodZon),nTotal:=refcaja(oLbxPedido,oDlgCaja,oTotal,oMeter,(AliasPed)),oDlgCaja:Update()),) ;
ON RIGHT CLICK ( ShowPopCaja( nRow, nCol, oLbxPedido, oDlgCaja,(AliasPed)->IMPORTE,(AliasPed)),nTotal:=refcaja(oLbxPedido,oDlgCaja,oTotal,oMeter,(AliasPed)), oDlgCaja:Update() ) ;
FIELDSIZES 60, 330, 80 ;
FONT oFntArial ;
ID 114 OF oDlgCaja

oLbxPedido:aJustify := {.F.,.F.,.T.}
oLbxPedido:nClrPane := { || IIF( (AliasPed)->(RECNO())%2=0, nRGB( 153, 204, 255 ), nRGB( 230, 230, 230 ) )}

REDEFINE SAY oObserva VAR cObserva ID 187 OF oDlgCaja FONT oFntArial3 COLORS nRgb(255,255,0),nRgb(255,0,0)
REDEFINE SAY oMoneda VAR aSimMon[nMoneda] ID 117 OF oDlgCaja FONT oFntArial3 COLORS nRgb(255,255,0),nRgb(0,0,0)
REDEFINE SAY oTotal VAR nTotal ID 120 PICTURE MA72C OF oDlgCaja FONT oFntArial3 COLORS nRgb(255,255,0),nRgb(0,0,0)

REDEFINE BUTTON ID 115 OF oDlgCaja ACTION (nTotal:=refcaja(oLbxPedido,oDlgCaja,oTotal,oMeter,(AliasPed)),oLbxPedido:SetFocus())
REDEFINE BUTTON ID 116 OF oDlgCaja ACTION (oDlgCaja:End(),oWndCaja:End())

ACTIVATE DIALOG oDlgCaja NOWAIT ON INIT (oDlgCaja:Move(0,0),oTimer:Activate()) **** el timer deberia activarse

ACTIVATE WINDOW oWndCaja VALID oLbxPedido:lCloseArea()

// (AliasPed)->(DbCloseArea()) **** estas lineas van como comentario si no ERROR

// oTimer:DeActivate() ***** esto debiera de funcionar
// oTimer:Release()

oFntArial:End()
oFntArial2:End()

Return Nil

*** en esta funcion en mi desesperación puse algunos indicadores ?, Browse() para saber en donde eme encuentro

FUNCTION RefCaja(oLbxPedido,oDlgCaja,oTotal,oMeter,cAliasPed)
LOCAL nTotal:=nTotPed:=nTotLin:=0.00
LOCAL LPedido

oMeter:SetTotal((cAliasPed)->(LastRec()))

* verifica coherencia

USE &FIL47 NEW SHARED Alias ( LPedido := GetNewAlias( "Lineas" ) )
(LPedido)->(OrdSetFocus(1))

(cAliasPed)->(DbGoTop())
? cAliasPed
browse()
WHILE !(cAliasPed)->(EOF())
cPedido:=(cAliasPed)->NUMERO
nRecno :=(cAliasPed)->(Recno())
oMeter:Set((cAliasPed)->(Recno()))

IF ((LPedido)->( DbSeek(TRIM(cPedido)))) // si existen lineas, refresco el total y nro de lineas
WHILE (LPedido)->PEDIDO=cPedido // refresco total en lineas, y sumo total y cuento lineas
IF (LPedido)->(Rlock())
(LPedido)->TOTAL :=((LPedido)->PRECIO*(LPedido)->CANTIDAD)
nTotPed+=((LPedido)->PRECIO*(LPedido)->CANTIDAD)
nTotLin+=1
ENDIF
(LPedido)->(DbUnLock())
(LPedido)->(DbSkip())
END

SysRefresh()

IF ((cAliasPed)->( DbSeek(TRIM(cPedido)))) // en cabecera si existe, refresco lineas e importe
IF (cAliasPed)->(Rlock())
(cAliasPed)->LINEAS :=nTotLin
(cAliasPed)->IMPORTE :=nTotPed
ENDIF
(cAliasPed)->(DbUnLock())
nTotLin:=nTotPed:=0

ELSE // si no existe en cabecera, elimino lineas
IF ((LPedido)->( DbSeek(TRIM(cPedido))))
WHILE (LPedido)->PEDIDO=cPedido
IF (LPedido)->(Rlock())
(LPedido)->(DbDelete())
ENDIF
(LPedido)->(DbSkip())
END

SysRefresh()

ENDIF
ENDIF

ELSE // si ni existen lineas, elimino la cabecera
IF (cAliasPed)->(Rlock())
(cAliasPed)->(DbDelete())
ENDIF
ENDIF

Select((cAliasPed))
(cAliasPed)->(DbGoTo(nRecno))
(cAliasPed)->(DbSkip())

END

(LPedido)->(DbCloseArea())

SysRefresh()

// Refresca (cAliasPed)

? cAliasPed

Select((cAliasPed))
(cAliasPed)->(DbGoTop())

DbEval( { || nTotal += (cAliasPed)->IMPORTE } )

(cAliasPed)->(DbGoTop())

oTotal:SetText(nTotal)
oLbxPedido:Refresh()
oLbxPedido:GoTop()
oDlgCaja:Refresh()

RETURN Nil

He tratado de ser lo mas explicito posible, ayudando a que me ayuden...Tengo las joyas de mi familia hinchadas de tanto tiempo que vengo invirtiendo en esto, si alguien me da una mano mucho lo agradecere.

Ya me pase a los indices CDX’s con algun exito

Trabajo con el Clip 5.3b, FiveWin 2.4 y Blinker 7.0 con el Borland 4.5

Att.
Luis Ponce
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder