Variables PRIVATE no existen.
Posted: Tue Mar 25, 2014 5:03 pm
Saludos amigos,
Tengo un problema con unas variables private, como podrán ver lineas abajo al inicio del módulo declaro una variable llamada OH_MODO como private, esta variable la uso a lo largo del módulo para realizar las operaciones respectivas. Sin embargo, hay ocasiones, no siempre, en las que al tratar de cerrar el módulo me lanza ese error:
Error BASE/1003 No existe la variable: OH_MODO
Called from ORDENSALIR(315)
Called from (b)ORDENDECOMPRA(51)
He revisado todos los .prg del sistema con el crimson y ya he verificado que esta variable solo existe en este módulo. En realidad me esta ocurriendo lo mismo en otros módulos del sistema con algunas variables, pero entiendo que resolviendo este, resuelvo todos. No sé si a alguno de Ustedes le he pasado y a lo mejor ya lo resolvió, por lo que recurro a su inapreciable ayuda.
* ------------------------------------------------------ *
* SISTEMA : FARMACOM *
* PRG : NOTAS.PRG *
* CREADO : 15-10-2010 *
* ACTUALIZADO : *
* AUTOR : EDUARDO V. FLORES RIVAS *
* COMENTARIOS : MODULO PARA CONFECCION DE PEDIDOS. *
* ------------------------------------------------------ *
PROC OrdenDeCompra
IF IsWindowDefined(Win_Orden)=.T.
MINIMIZE WINDOW Win_Orden
RESTORE WINDOW Win_Orden
RETURN
ENDIF
PRIVATE OH_NUMERO := 0
PRIVATE OH_FECHA := ''
PRIVATE OH_CODPROV := ''
PRIVATE OH_NOMPROV := ''
PRIVATE OH_ARCHIVO := ''
PRIVATE OH_REGISTR := 0
PRIVATE OH_MODO := 'Nada' // <-- OJO CON ESTA VARIABLE
PRIVATE aDetaDatos := {}
PRIVATE aEstaticos := {}
PRIVATE aLineMem := {}
PRIVATE aMesAnualSlots := {}
PRIVATE cTmpOrdenC := 'c:\farmacom\ordenes\ordenc.dbf'
PRIVATE cTmpOrdenD := 'c:\farmacom\ordenes\ordend.dbf'
PRIVATE cBackupC := ''
PRIVATE cBackupD := ''
PRIVATE oPediArti , oPediProv , oPediMark
IF ! ISDIR('c:\Farmacom\Ordenes')
CreateFolder('c:\Farmacom\Ordenes')
ENDIF
PrimosAbrir()
DEFINE WINDOW Win_Orden ;
AT 0 , 0 ;
WIDTH 1020 HEIGHT 730 ;
TITLE "ORDEN DE COMPRA" ;
FONT "Arial" SIZE 9 ;
CHILD ;
NOMAXIMIZE ;
ON INIT OrdenIniciar() ;
ON RELEASE OrdenSalir()
....
*
* GRID DE DETALLES
*
@ 130 , 010 BROWSE BrwPedidos ;
WIDTH 980 ;
HEIGHT 530 ;
HEADERS {'Código','Artículo','Labo','Unids.','VVF','PVF','Dct.T.','Costo','Total','Bonif.','Dct.B','Dct.1','Dct.2','Dct.3','Dct.4'} ;
FIELDS { 'ODTMP->OD_ARTCOD' , 'ODTMP->OD_ARTNOM' , 'ODTMP->OD_LABCOD' , 'ODTMP->OD_UNIDS' , 'ODTMP->OD_VVF' , 'ODTMP->OD_PVF' , 'ODTMP->OD_DCTT' , 'ODTMP->OD_CSTUNI' , 'ODTMP->OD_CSTTTL' , 'ODTMP->OD_TEXTB' , 'ODTMP->OD_DCTB' , 'ODTMP->OD_DCT1' , 'ODTMP->OD_DCT2' , 'ODTMP->OD_DCT3' , 'ODTMP->OD_DCT4' } ;
WORKAREA ODTMP ;
WIDTHS { 60 , 250 , 50 , 60 , 80 , 80 , 70 , 80 , 90 , 50 , 50 , 50 , 50 , 50 , 50 } ;
JUSTIFY { BROWSE_JTFY_LEFT , BROWSE_JTFY_LEFT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT } ;
ON DBLCLICK OrdenEditItem()
...
END WINDOW
ACTIVATE WINDOW Win_Orden
PrimosCerrar()
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC OrdenIniciar
OH_MODO := 'Nada'
...
Win_Orden.BrwPedidos.Refresh
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC OrdenSalir
IF SELECT('ODTMP') > 0 .AND. TYPE(OH_MODO) <> 'U' //<-- EL ERROR SALE EN ESTA LINEA (315)
IF ODTMP->(RECCOUNT()) > 0 .AND. OH_MODO='Crear'
IF MsgYesNo('¿ Desea cancelar la orden de compra actual ?')
OrdenBorrarTemps()
ENDIF
ELSE
OrdenBorrarTemps()
ENDIF
ENDIF
RETURN
De antemano mil gracias por su valioso tiempo.
NOTA : Si necesitan el módulo completo, solo háganmelo saber para enviarselos.
Tengo un problema con unas variables private, como podrán ver lineas abajo al inicio del módulo declaro una variable llamada OH_MODO como private, esta variable la uso a lo largo del módulo para realizar las operaciones respectivas. Sin embargo, hay ocasiones, no siempre, en las que al tratar de cerrar el módulo me lanza ese error:
Error BASE/1003 No existe la variable: OH_MODO
Called from ORDENSALIR(315)
Called from (b)ORDENDECOMPRA(51)
He revisado todos los .prg del sistema con el crimson y ya he verificado que esta variable solo existe en este módulo. En realidad me esta ocurriendo lo mismo en otros módulos del sistema con algunas variables, pero entiendo que resolviendo este, resuelvo todos. No sé si a alguno de Ustedes le he pasado y a lo mejor ya lo resolvió, por lo que recurro a su inapreciable ayuda.
* ------------------------------------------------------ *
* SISTEMA : FARMACOM *
* PRG : NOTAS.PRG *
* CREADO : 15-10-2010 *
* ACTUALIZADO : *
* AUTOR : EDUARDO V. FLORES RIVAS *
* COMENTARIOS : MODULO PARA CONFECCION DE PEDIDOS. *
* ------------------------------------------------------ *
PROC OrdenDeCompra
IF IsWindowDefined(Win_Orden)=.T.
MINIMIZE WINDOW Win_Orden
RESTORE WINDOW Win_Orden
RETURN
ENDIF
PRIVATE OH_NUMERO := 0
PRIVATE OH_FECHA := ''
PRIVATE OH_CODPROV := ''
PRIVATE OH_NOMPROV := ''
PRIVATE OH_ARCHIVO := ''
PRIVATE OH_REGISTR := 0
PRIVATE OH_MODO := 'Nada' // <-- OJO CON ESTA VARIABLE
PRIVATE aDetaDatos := {}
PRIVATE aEstaticos := {}
PRIVATE aLineMem := {}
PRIVATE aMesAnualSlots := {}
PRIVATE cTmpOrdenC := 'c:\farmacom\ordenes\ordenc.dbf'
PRIVATE cTmpOrdenD := 'c:\farmacom\ordenes\ordend.dbf'
PRIVATE cBackupC := ''
PRIVATE cBackupD := ''
PRIVATE oPediArti , oPediProv , oPediMark
IF ! ISDIR('c:\Farmacom\Ordenes')
CreateFolder('c:\Farmacom\Ordenes')
ENDIF
PrimosAbrir()
DEFINE WINDOW Win_Orden ;
AT 0 , 0 ;
WIDTH 1020 HEIGHT 730 ;
TITLE "ORDEN DE COMPRA" ;
FONT "Arial" SIZE 9 ;
CHILD ;
NOMAXIMIZE ;
ON INIT OrdenIniciar() ;
ON RELEASE OrdenSalir()
....
*
* GRID DE DETALLES
*
@ 130 , 010 BROWSE BrwPedidos ;
WIDTH 980 ;
HEIGHT 530 ;
HEADERS {'Código','Artículo','Labo','Unids.','VVF','PVF','Dct.T.','Costo','Total','Bonif.','Dct.B','Dct.1','Dct.2','Dct.3','Dct.4'} ;
FIELDS { 'ODTMP->OD_ARTCOD' , 'ODTMP->OD_ARTNOM' , 'ODTMP->OD_LABCOD' , 'ODTMP->OD_UNIDS' , 'ODTMP->OD_VVF' , 'ODTMP->OD_PVF' , 'ODTMP->OD_DCTT' , 'ODTMP->OD_CSTUNI' , 'ODTMP->OD_CSTTTL' , 'ODTMP->OD_TEXTB' , 'ODTMP->OD_DCTB' , 'ODTMP->OD_DCT1' , 'ODTMP->OD_DCT2' , 'ODTMP->OD_DCT3' , 'ODTMP->OD_DCT4' } ;
WORKAREA ODTMP ;
WIDTHS { 60 , 250 , 50 , 60 , 80 , 80 , 70 , 80 , 90 , 50 , 50 , 50 , 50 , 50 , 50 } ;
JUSTIFY { BROWSE_JTFY_LEFT , BROWSE_JTFY_LEFT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT , BROWSE_JTFY_RIGHT } ;
ON DBLCLICK OrdenEditItem()
...
END WINDOW
ACTIVATE WINDOW Win_Orden
PrimosCerrar()
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC OrdenIniciar
OH_MODO := 'Nada'
...
Win_Orden.BrwPedidos.Refresh
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC OrdenSalir
IF SELECT('ODTMP') > 0 .AND. TYPE(OH_MODO) <> 'U' //<-- EL ERROR SALE EN ESTA LINEA (315)
IF ODTMP->(RECCOUNT()) > 0 .AND. OH_MODO='Crear'
IF MsgYesNo('¿ Desea cancelar la orden de compra actual ?')
OrdenBorrarTemps()
ENDIF
ELSE
OrdenBorrarTemps()
ENDIF
ENDIF
RETURN
De antemano mil gracias por su valioso tiempo.
NOTA : Si necesitan el módulo completo, solo háganmelo saber para enviarselos.