DUDA CON TSAY

DUDA CON TSAY

Postby LuisPonce » Mon Oct 20, 2008 4:30 pm

Hola:

Aun no puedo compilar a 32, pero debo seguir avanzando asi que tengo una consulta en fw24,Blinker7:

Hago una ventana, luego inserto un dialogo donde declaro objetos y sus variables, mediante un Listbox activo un proceso, PieVta2(….) el mismo que cambia de valor a las variables, pero al momento de regresar al dialogo el valor de la variable se esfuma

Aquí publico parte del codigo, es muy extenso

FUNCTION EmiFac(oWnd) // Emision de Facturas
LOCAL oWndFPC,oDlgFPC,oLbxVenta,oTitDet,oMoneda,oTotal,oCodClt,oCmbDoc,oBtnImp,oNumero,oCodDes,oBusca,oFecha,oSerDoc,oPedido,oBttPed,oDscto,oCmbVen,oCmbZon,oCmbSer,oCmbLst,oPorDes
LOCAL oFntArial,oFntArial01,oConCre,oCmbPgo,oRucClt,oDataDoc,oBmpLoguito,oButPgo,oCursor,oButPago,oCmbMon,oTotBse,oTotIgv,oTotDes,oSayPeso,oSayPiezas,oSayLineas,oSayMaxDoc
LOCAL oCiuClt,oDepClt,oButAdd,oButMenos,oPreItm,oCanItm,oNroCmptes,oBtn143,oBtn144
LOCAL cFilVta:=cImpLoc+'WC'+SUBSTR(TIME(),1,2)+SUBSTR(TIME(),4,2)+SUBSTR(TIME(),7,2)+".DBF"
LOCAL aStrVta:={ {'ORDEN','C',4,0},{'ARTICULO','C',IMPNCD,0},{'PEDIDO','C',7,0},{'FRACC','L',1,0},{'CANTIDAD','N',10,IMPDUM},{'UNIDAD','C',3,0},{'ITEM','C',50,0},{'PREBSE','N',8,3},{'PRECIO','N',8,3},{'BSEIMP','N',9,3},{'IGV','N',9,3},{'TURNO','C',1,0},{'TOTAL','N',10,2},{'PDESCTO','N',8,2},{'DESCTO','N',8,3},{'FAMILIA','C',8,0},{'COMISION','N',7,3},{'PESO','N',7,2} }
LOCAL cPedido:=SPACE(7)
LOCAL cBcaItm:=SPACE(30)
LOCAL nDcrClt:=0
LOCAL nPorDes:=0
LOCAL nDescuento:=0
LOCAL cBusca :=SPACE(45)
LOCAL cBusPed:=SPACE(45)
LOCAL cCodPed:=""
LOCAL cDesDoc:=""
LOCAL cNumero:=""
LOCAL cTitDet
LOCAL AliasVta
LOCAL aCodDoc :={}
LOCAL aNomDoc :={}
LOCAL aMaxDoc :={}
LOCAL aLptDoc :={}
LOCAL aArrClt :=Array(14)
LOCAL aCodPgo :={}
LOCAL aNomPgo :={}
LOCAL aBmpPgo :={}
LOCAL aCodLst :={}
LOCAL aNomLst :={}
LOCAL aCodVen :={}
LOCAL aNomVen :={}
LOCAL aCodZon :={}
LOCAL nTotal := 0.00

******

Las variables hay que declararlas independientemente??, cuando hago esto no funciona

LOCAL nDcrClt:= nPorDes:= nDescuento:=0 (por eso empleo mas lineas separandolas)

Es decir, me da error de Variable no Existe refiriendose a nPorDes y nDescuento, esto SI funciona cuando solo se trata de un Dialogo.


******

DEFINE WINDOW oWndFPC MDICHILD OF oWnd TITLE "FACTURACION"

DEFINE CURSOR oCursorMano RESOURCE "Hand"

DEFINE DIALOG oDlgFPC NAME "DLG_FACT" OF oWndFPC


…….codigo…….

REDEFINE LISTBOX oLbxVenta FIELDS (AliasVta)->ARTICULO,TRANS((AliasVta)->CANTIDAD,IMPMUM),(AliasVta)->UNIDAD,(AliasVta)->ITEM,TRANS((AliasVta)->PRECIO,IMPMPV),TRANS((AliasVta)->TOTAL,MA72C) ;
ALIAS (AliasVta) ;
HEADERS "Codigo","Cantidad","Und","Descripcion","Precio","Total" ;
ON LEFT DBLCLICK ( ModItmVta((AliasVta),oLbxVenta,(AliasVta)->ARTICULO,(AliasVta)->CANTIDAD,(AliasVta)->PRECIO,(AliasVta)->TOTAL),;
PieVta2((AliasVta)->(Alias()),oTotBse,oTotIgv,oTotal,oTotDes,oSayPiezas,oSayPeso,oSayLineas,oNroCmptes,nMaxDoc) ) ;
ON RIGHT CLICK (IIF((AliasVta)->TOTAL>0.00,(ShowPopPed(nRow,nCol,oLbxVenta,(AliasVta)->ARTICULO+" "+(AliasVta)->ITEM,(AliasVta)->ARTICULO,(AliasVta)->(Alias()),oDlgFPC,oTotal,nOrden),PieVta2((AliasVta)->(Alias()),oTotBse,oTotIgv,oTotal,oTotDes,oSayPiezas,oSayPeso,oSayLineas,oNroCmptes,nMaxDoc)),) ) ;
FONT oFntArial03 ;
FIELDSIZES IMPNCD*11, 70, 35, 280, 70, 110 ;
ID 300 OF oDlgFPC

oLbxVenta:aJustify := {.F.,.T.,.F.,.F.,.T.,.T.}

REDEFINE SAY oSayLineas ID 1001 PROMPT nLineas PICTURE MA40 OF oDlgFPC FONT oFntArial02
REDEFINE SAY oSayMaxDoc ID 1013 PROMPT nMaxDoc PICTURE MA40 OF oDlgFPC FONT oFntArial02
REDEFINE SAY oNroCmptes ID 182 PROMPT TRANS(INT(nLineas/nMaxDoc)+1,MA20)+"c" OF oDlgFPC FONT oFntArial02

REDEFINE CHECKBOX lEntregado ID 177 OF oDlgFPC UPDATE COLORS nRgb(255,0,0)
REDEFINE SAY oSayPiezas ID 164 PROMPT nPiezas PICTURE MA72C OF oDlgFPC FONT oFntArial02 COLORS nRgb(0,0,134)
REDEFINE SAY oSayPeso ID 178 PROMPT nPesoTotal PICTURE MA64 OF oDlgFPC FONT oFntArial02
REDEFINE SAY oTotBse PROMPT nTotBse READONLY ID 179 PICTURE MA72C OF oDlgFPC FONT oFntArial COLORS nRgb(0,0,200)
REDEFINE SAY oTotIgv PROMPT nTotIgv READONLY ID 180 PICTURE MA72C OF oDlgFPC FONT oFntArial COLORS nRgb(0,0,200)
REDEFINE SAY oTotDes PROMPT nTotDes READONLY ID 181 PICTURE MA72C OF oDlgFPC FONT oFntArial COLORS nRgb(200,0,0)
REDEFINE SAY oMoneda PROMPT aSimMon[nMoneda] ID 138 OF oDlgFPC FONT oFntArial COLORS nRgb(255,255,0),nRgb(0,0,0) READONLY
REDEFINE SAY oTotal PROMPT nTotal ID 99 PICTURE MA72C OF oDlgFPC FONT oFntArial COLORS nRgb(255,255,0),nRgb(0,0,0) READONLY

REDEFINE BTNBMP oBtnImp ID 135 OF oDlgFPC RESOURCE "BMP_ACEPTAR" TOOLTIP "Envia a la Impresora"+CRLF+"Comprobante de pago" UPDATE ;
ACTION (aArrClt[2]:=cNomClt,aArrClt[4]:=cDirClt,aArrClt[8]:=cDisClt,aArrClt[5]:=cCiuClt,aArrClt[6]:=cDepClt,aArrClt[7]:=cRucClt,;
nLineas:=VAL(oSayLineas:cCaption),nTotal:=VAL(oTotal:cCaption),MsgInfo(nLineas,"nLineas"),Msginfo(nTotal,"nTotal"),;
AceptaVenta(aCodDoc[oCmbDoc:nAt],cSerDoc,dFecha,aArrClt,cPedido,oCmbMon:nAt,aCodVen[oCmbVen:nAt],aCodZon[oCmbZon:nAt],dFecha+nDcrClt,oCmbPgo:nAt,cCodPgo,nTotal,lEntregado,nPesoTotal,oLbxVenta,nLineas),SysRefresh(),;
IIF(lActClte,ActClte(cCodClt,cNomClt,cDirClt,cDisClt,cCiuClt,cDepClt),),lActClte:=.F.,;
PieVta2((AliasVta)->(Alias()),oTotBse,oTotIgv,oTotal,oTotDes,oSayPiezas,oSayPeso,oSayLineas,oNroCmptes,nMaxDoc),;
aPedidos:={})

REDEFINE BTNBMP ID 137 OF oDlgFPC NAME "BSALIR" TOOLTIP "Salir sin grabar.." ACTION (oDlgFPC:End(),oWndFPC:End()) CANCEL

ACTIVATE DIALOG oDlgFPC NOWAIT ON INIT (oDlgFPC:Move(0,0))

ACTIVATE WINDOW oWndFPC MAXIMIZED ;
ON INIT oWndFPC:SetSize( oDlgFPC:nWidth+40, oDlgFPC:nHeight+40) ;
VALID (oWndFPC := Nil, .T. )

oFntArial:End()
oFntArial01:End()
oFntArial02:End()
oFntArial03:End()

Como no retorna el valor requerido, me veo forzado a hacer lo siguiente para obtener sus valores:
nLineas:=VAL(oSayLineas:cCaption),nTotal:=VAL(oTotal:cCaption)


nLineas me indica cuantos reglones tiene mi factura, y nTotal el total a cobrar , quien alimenta estas Variables/Objetos es PieVta2 :

FUNCTION PieVta2(cAliasVta,oObjBim,oObjIgv,oObjTot,oObjDct,oObjCan,oObjPes,oObjLin,oNDocs,nMax)
LOCAL nRecno:=Max(1,(cAliasVta)->(Recno()))

Select((cAliasVta))
(cAliasVta)->(DbGoTop())
COUNT TO nLineas FOR !(cAliasVta)->(Delete())
(cAliasVta)->(DbGoTop())
SUM (cAliasVta)->BSEIMP,(cAliasVta)->IGV,(cAliasVta)->TOTAL,(cAliasVta)->DESCTO*(cAliasVta)->CANTIDAD,(cAliasVta)->CANTIDAD,(cAliasVta)->PESO TO nVVta,nIIgv,nIPagar,nIDsc,nPiezas,nPesoTotal
(cAliasVta)->(DbGoTop())

oObjBim:SetText(nVVta)
oObjIgv:SetText(nIIgv)
oObjTot:SetText(nIPagar)
oObjDct:SetText(nIDsc)
oObjCan:SetText(nPiezas)
oObjPes:SetText(nPesoTotal)
oObjLin:SetText(nLineas)
oNDocs:SetText(TRANS(INT(nLineas/nMax)+1,MA20)+"c")

(cAliasVta)->(DbGoTo(nRecno))

RETURN nil




Otra consulta, es cuando estando en la misma ventana y dialogo presiono la tecla ESC solo sale del dialogo y se queda en la ventana en blanco, debo presionar una vez mas ESC para salir definitivamente, sin la seguridad de haber hecho bien el cierre y de las dbf’s.

Maestro espero no haberme excedido
Luis Ponce
User avatar
LuisPonce
 
Posts: 195
Joined: Tue Jul 01, 2008 6:34 pm
Location: PERU

Re: DUDA CON TSAY

Postby LuisPonce » Tue Oct 21, 2008 3:56 pm

LuisPonce wrote:Hola Rene:

Aun no puedo compilar a 32, pero debo seguir avanzando asi que tengo una consulta en fw24,Blinker7:

Hago una ventana, luego inserto un dialogo donde declaro objetos y sus variables, mediante un Listbox activo un proceso, PieVta2(….) el mismo que cambia de valor a las variables, pero al momento de regresar al dialogo el valor de la variable se esfuma, es decir se pone a CERO 0.00

Aquí publico parte del codigo, es muy extenso

FUNCTION EmiFac(oWnd) // Emision de Facturas
LOCAL oWndFPC,oDlgFPC,oLbxVenta,oTitDet,oMoneda,oTotal,oCodClt,oCmbDoc,oBtnImp,oNumero,oCodDes,oBusca,oFecha,oSerDoc,oPedido,oBttPed,oDscto,oCmbVen,oCmbZon,oCmbSer,oCmbLst,oPorDes
LOCAL oFntArial,oFntArial01,oConCre,oCmbPgo,oRucClt,oDataDoc,oBmpLoguito,oButPgo,oCursor,oButPago,oCmbMon,oTotBse,oTotIgv,oTotDes,oSayPeso,oSayPiezas,oSayLineas,oSayMaxDoc
LOCAL oCiuClt,oDepClt,oButAdd,oButMenos,oPreItm,oCanItm,oNroCmptes,oBtn143,oBtn144
LOCAL cFilVta:=cImpLoc+'WC'+SUBSTR(TIME(),1,2)+SUBSTR(TIME(),4,2)+SUBSTR(TIME(),7,2)+".DBF"
LOCAL aStrVta:={ {'ORDEN','C',4,0},{'ARTICULO','C',IMPNCD,0},{'PEDIDO','C',7,0},{'FRACC','L',1,0},{'CANTIDAD','N',10,IMPDUM},{'UNIDAD','C',3,0},{'ITEM','C',50,0},{'PREBSE','N',8,3},{'PRECIO','N',8,3},{'BSEIMP','N',9,3},{'IGV','N',9,3},{'TURNO','C',1,0},{'TOTAL','N',10,2},{'PDESCTO','N',8,2},{'DESCTO','N',8,3},{'FAMILIA','C',8,0},{'COMISION','N',7,3},{'PESO','N',7,2} }
LOCAL cPedido:=SPACE(7)
LOCAL cBcaItm:=SPACE(30)
LOCAL nDcrClt:=0
LOCAL nPorDes:=0
LOCAL nDescuento:=0
LOCAL cBusca :=SPACE(45)
LOCAL cBusPed:=SPACE(45)
LOCAL cCodPed:=""
LOCAL cDesDoc:=""
LOCAL cNumero:=""
LOCAL cTitDet
LOCAL AliasVta
LOCAL aCodDoc :={}
LOCAL aNomDoc :={}
LOCAL aMaxDoc :={}
LOCAL aLptDoc :={}
LOCAL aArrClt :=Array(14)
LOCAL aCodPgo :={}
LOCAL aNomPgo :={}
LOCAL aBmpPgo :={}
LOCAL aCodLst :={}
LOCAL aNomLst :={}
LOCAL aCodVen :={}
LOCAL aNomVen :={}
LOCAL aCodZon :={}
LOCAL nTotal := 0.00

******

Las variables hay que declararlas independientemente??, cuando hago esto no funciona

LOCAL nDcrClt:= nPorDes:= nDescuento:=0 (por eso empleo mas lineas separandolas)

Es decir, me da error de Variable no Existe refiriendose a nPorDes y nDescuento, esto SI funciona cuando solo se trata de un Dialogo.


******

DEFINE WINDOW oWndFPC MDICHILD OF oWnd TITLE "FACTURACION"

DEFINE CURSOR oCursorMano RESOURCE "Hand"

DEFINE DIALOG oDlgFPC NAME "DLG_FACT" OF oWndFPC


…….codigo…….

REDEFINE LISTBOX oLbxVenta FIELDS (AliasVta)->ARTICULO,TRANS((AliasVta)->CANTIDAD,IMPMUM),(AliasVta)->UNIDAD,(AliasVta)->ITEM,TRANS((AliasVta)->PRECIO,IMPMPV),TRANS((AliasVta)->TOTAL,MA72C) ;
ALIAS (AliasVta) ;
HEADERS "Codigo","Cantidad","Und","Descripcion","Precio","Total" ;
ON LEFT DBLCLICK ( ModItmVta((AliasVta),oLbxVenta,(AliasVta)->ARTICULO,(AliasVta)->CANTIDAD,(AliasVta)->PRECIO,(AliasVta)->TOTAL),;
PieVta2((AliasVta)->(Alias()),oTotBse,oTotIgv,oTotal,oTotDes,oSayPiezas,oSayPeso,oSayLineas,oNroCmptes,nMaxDoc) ) ;
ON RIGHT CLICK (IIF((AliasVta)->TOTAL>0.00,(ShowPopPed(nRow,nCol,oLbxVenta,(AliasVta)->ARTICULO+" "+(AliasVta)->ITEM,(AliasVta)->ARTICULO,(AliasVta)->(Alias()),oDlgFPC,oTotal,nOrden),PieVta2((AliasVta)->(Alias()),oTotBse,oTotIgv,oTotal,oTotDes,oSayPiezas,oSayPeso,oSayLineas,oNroCmptes,nMaxDoc)),) ) ;
FONT oFntArial03 ;
FIELDSIZES IMPNCD*11, 70, 35, 280, 70, 110 ;
ID 300 OF oDlgFPC

oLbxVenta:aJustify := {.F.,.T.,.F.,.F.,.T.,.T.}

REDEFINE SAY oSayLineas ID 1001 PROMPT nLineas PICTURE MA40 OF oDlgFPC FONT oFntArial02
REDEFINE SAY oSayMaxDoc ID 1013 PROMPT nMaxDoc PICTURE MA40 OF oDlgFPC FONT oFntArial02
REDEFINE SAY oNroCmptes ID 182 PROMPT TRANS(INT(nLineas/nMaxDoc)+1,MA20)+"c" OF oDlgFPC FONT oFntArial02

REDEFINE CHECKBOX lEntregado ID 177 OF oDlgFPC UPDATE COLORS nRgb(255,0,0)
REDEFINE SAY oSayPiezas ID 164 PROMPT nPiezas PICTURE MA72C OF oDlgFPC FONT oFntArial02 COLORS nRgb(0,0,134)
REDEFINE SAY oSayPeso ID 178 PROMPT nPesoTotal PICTURE MA64 OF oDlgFPC FONT oFntArial02
REDEFINE SAY oTotBse PROMPT nTotBse READONLY ID 179 PICTURE MA72C OF oDlgFPC FONT oFntArial COLORS nRgb(0,0,200)
REDEFINE SAY oTotIgv PROMPT nTotIgv READONLY ID 180 PICTURE MA72C OF oDlgFPC FONT oFntArial COLORS nRgb(0,0,200)
REDEFINE SAY oTotDes PROMPT nTotDes READONLY ID 181 PICTURE MA72C OF oDlgFPC FONT oFntArial COLORS nRgb(200,0,0)
REDEFINE SAY oMoneda PROMPT aSimMon[nMoneda] ID 138 OF oDlgFPC FONT oFntArial COLORS nRgb(255,255,0),nRgb(0,0,0) READONLY
REDEFINE SAY oTotal PROMPT nTotal ID 99 PICTURE MA72C OF oDlgFPC FONT oFntArial COLORS nRgb(255,255,0),nRgb(0,0,0) READONLY

REDEFINE BTNBMP oBtnImp ID 135 OF oDlgFPC RESOURCE "BMP_ACEPTAR" TOOLTIP "Envia a la Impresora"+CRLF+"Comprobante de pago" UPDATE ;
ACTION (aArrClt[2]:=cNomClt,aArrClt[4]:=cDirClt,aArrClt[8]:=cDisClt,aArrClt[5]:=cCiuClt,aArrClt[6]:=cDepClt,aArrClt[7]:=cRucClt,;
nLineas:=VAL(oSayLineas:cCaption),nTotal:=VAL(oTotal:cCaption),MsgInfo(nLineas,"nLineas"),Msginfo(nTotal,"nTotal"),;
AceptaVenta(aCodDoc[oCmbDoc:nAt],cSerDoc,dFecha,aArrClt,cPedido,oCmbMon:nAt,aCodVen[oCmbVen:nAt],aCodZon[oCmbZon:nAt],dFecha+nDcrClt,oCmbPgo:nAt,cCodPgo,nTotal,lEntregado,nPesoTotal,oLbxVenta,nLineas),SysRefresh(),;
IIF(lActClte,ActClte(cCodClt,cNomClt,cDirClt,cDisClt,cCiuClt,cDepClt),),lActClte:=.F.,;
PieVta2((AliasVta)->(Alias()),oTotBse,oTotIgv,oTotal,oTotDes,oSayPiezas,oSayPeso,oSayLineas,oNroCmptes,nMaxDoc),;
aPedidos:={})

REDEFINE BTNBMP ID 137 OF oDlgFPC NAME "BSALIR" TOOLTIP "Salir sin grabar.." ACTION (oDlgFPC:End(),oWndFPC:End()) CANCEL

ACTIVATE DIALOG oDlgFPC NOWAIT ON INIT (oDlgFPC:Move(0,0))

ACTIVATE WINDOW oWndFPC MAXIMIZED ;
ON INIT oWndFPC:SetSize( oDlgFPC:nWidth+40, oDlgFPC:nHeight+40) ;
VALID (oWndFPC := Nil, .T. )

oFntArial:End()
oFntArial01:End()
oFntArial02:End()
oFntArial03:End()

Como no retorna el valor requerido, me veo forzado a hacer lo siguiente para obtener sus valores:
nLineas:=VAL(oSayLineas:cCaption),nTotal:=VAL(oTotal:cCaption)


nLineas me indica cuantos reglones tiene mi factura, y nTotal el total a cobrar , quien alimenta estas Variables/Objetos es PieVta2 :

FUNCTION PieVta2(cAliasVta,oObjBim,oObjIgv,oObjTot,oObjDct,oObjCan,oObjPes,oObjLin,oNDocs,nMax)
LOCAL nRecno:=Max(1,(cAliasVta)->(Recno()))

Select((cAliasVta))
(cAliasVta)->(DbGoTop())
COUNT TO nLineas FOR !(cAliasVta)->(Delete())
(cAliasVta)->(DbGoTop())
SUM (cAliasVta)->BSEIMP,(cAliasVta)->IGV,(cAliasVta)->TOTAL,(cAliasVta)->DESCTO*(cAliasVta)->CANTIDAD,(cAliasVta)->CANTIDAD,(cAliasVta)->PESO TO nVVta,nIIgv,nIPagar,nIDsc,nPiezas,nPesoTotal
(cAliasVta)->(DbGoTop())

oObjBim:SetText(nVVta)
oObjIgv:SetText(nIIgv)
oObjTot:SetText(nIPagar)
oObjDct:SetText(nIDsc)
oObjCan:SetText(nPiezas)
oObjPes:SetText(nPesoTotal)
oObjLin:SetText(nLineas)
oNDocs:SetText(TRANS(INT(nLineas/nMax)+1,MA20)+"c")

(cAliasVta)->(DbGoTo(nRecno))

RETURN nil




Otra consulta, es cuando estando en la misma ventana y dialogo presiono la tecla ESC solo sale del dialogo y se queda en la ventana en blanco, debo presionar una vez mas ESC para salir definitivamente, sin la seguridad de haber hecho bien el cierre y de las dbf’s.

Maestro espero no haberme excedido
Luis Ponce
User avatar
LuisPonce
 
Posts: 195
Joined: Tue Jul 01, 2008 6:34 pm
Location: PERU

Postby Armando Picon » Thu Oct 23, 2008 5:36 pm

"nLineas" tiene que ser enviado a la función por referencia y retornar el nuevo valor. En tu codigo actual, nLineas no puede ser actualizado con tu función "PieVta2 " y por tanto no lo retorna.
FWH + BCC582 + WorkShop 4.5 + Resource Hacker + Mingw
Mis nuevas herramientas
Comunicacion via WhatsApp (+51) 957549 665
Comunicación via Correo: apic1002002 at yahoo dot es; apic1002002@gmail.com
User avatar
Armando Picon
 
Posts: 446
Joined: Mon Dec 26, 2005 9:11 pm
Location: Lima, Peru


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 2 guests