FoxPro/Visual FoxPro - Lentitud al arrancar y al cerra pantalla

 
Vista:

Lentitud al arrancar y al cerra pantalla

Publicado por Ale P (92 intervenciones) el 21/09/2016 00:36:51
Hola que tal???

les cuento q tengo un problemilla

solo en una pantalla, la de facturación, me pasa que cuando la abro desde el menu esta todo ok, anda rapidisimo, pero cuando la abro desde otra pantalla (la consulta de comprobantes), tarda como 30 segundos en abrir y cuando la cierro igual, otros 30 segundos

la instruccion es esta... do form facturacion with nComprobante

uso sqlserver, asi que no es problema de red, ni de tablas, ni de cantidad de tablas, ni nada de eso... estoy yo solo en mi compu y me pasa eso... en otro cliente con una sola compu me pasa igual, en redes completamente diferentes, y no hay nada, no hace nada por la red, no hace consultas, ya revise todo, hice set step on y fui paso a paso a ver cual tardaba y nada

la cosa es que tengo una grilla en la consulta de comprobantes y cuando hago doble click sobre un comprobante, se abre la pantalla de facturacion con los datos cargados... la instruccion es la misma

do form facturacion with nComprobante

pero si yo ejecuto esa misma instruccion desde la ventana de comandos, es rapido, abre normal
pero si la abro desde la consulta se pone lenta

que puede ser??

lo unico que comparten todas las pantallas (pero deberia pasarme en todas las pantallas, o en mas de una, y no solo en la de facturacion) es una tabla local suelta, que contiene los settings de el unico usuario que hay
y es lo unico que se comparte, todo lo demas esta en sql server

alguien me puede ayudar??

muchas gracias desde ya
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
sin imagen de perfil
Val: 4
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Lentitud al arrancar y al cerra pantalla

Publicado por KongFan (682 intervenciones) el 21/09/2016 06:39:10
Que tal, sería muy util si incluyeras lo que tienes dentro del INIT y el LOAD, para desestimar que el problema esté en estos métodos.
Otra posibilidad podría ser algún registro o tabla bloqueada dentro de otro procedimiento.
Otra también puede ser que la conexión al sqlserver esté constantemente conectando y desconectando y puede que exista un error entre los handlers.

Saludos Cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lentitud al arrancar y al cerra pantalla

Publicado por Ale P (92 intervenciones) el 21/09/2016 15:01:28
Hola gracias x tu respuesta, pero repito, no tengo tablas locales, todo esto pasa en el init
y la conexion es persistente

si fuera la conexion o algo asi, andaria mal tambien desde la ventana de comandos

y en realidad me quede corto, puse q tarda 30 segundos, pero tarda 2 minutos, anoche lo cronometre, 2 minutos para arrancar y 2 para salir
q bodrio!!

gracias x su ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 59
Ha disminuido 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Lentitud al arrancar y al cerra pantalla

Publicado por Juan R. (114 intervenciones) el 22/09/2016 13:34:32
Buenas Ale P

Como te dice KongFan sería interesante ver que tienes en el INIT y como llamas a ese formulario desde el formulario original. Quizás haya algo extraño o algún método recurrente y no te hayas dado cuenta.

Sauldos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lentitud al arrancar y al cerra pantalla

Publicado por Ale P (92 intervenciones) el 22/09/2016 17:15:06
yo se lo pongo ahora
pero si fuera tema de codigo del init no me andaria bien cuando lo llamo del menu
ya que hace exactamente lomismo
estoy seguro q el tema esta al llamarlo desde la pantalla de consulta, y q la misma me esta bloqueando algo
pero no se q es
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lentitud al arrancar y al cerra pantalla

Publicado por Ale P (92 intervenciones) el 22/09/2016 17:18:53
aca va el init

LPARAMETERS idComprobante, nIdOrdenTrabajo, dFechaRemito, idCliente, nMontoPagado

IF .NOT. DODEFAULT()
RETURN .F.
ENDIF

m.nidordentrabajo = IIF(EMPTY(m.nidordentrabajo), .NULL., m.nidordentrabajo)

thisform.idordentrabajo = m.nidordentrabajo
thisform.grillaprod.recordsource = .NULL.
thisform.grillafp.recordsource = .NULL.

nFP = thisform.idformapago.Value
thisform.idformapago.crearcursor("curFPMoneda")
thisform.idformapago.Value = nFP

ad("exec VerConfiguraciones @Descrip = NULL, @Grupo = 'Facturacion'", "curConfig")

LOCATE FOR LOWER(ALLTRIM(confdescrip))="precioventa"
thisform.TipoVenta.value = INT(VAL(curconfig.confvalor))

IF !EMPTY(m.idcomprobante)
LOCAL bPermiso

thisform.idcomprobante = m.idcomprobante
thisform.menu.imprimir.visible = .T.
thisform.menu.eliminar.visible = .T.

ad("exec GetComprobante "+tostr(m.idcomprobante), "curGetComprobante")

SELECT cdprocodigo AS procodigo, cdprodescrip AS prodescrip, cdcantidad, cdpreciounit, cdiva1, ROUND((cdcantidad * cdpreciounit * ( 1 + (cdIVA1 / 100))) - cdpreciounit, 2) as TotalIVA, ;
cddescuento, ROUND((cdcantidad * cdpreciounit * (1 + (cdIva1 / 100))) * ((100 - cddescuento) / 100), 2) as Total, idproducto, ;
ididentificable, idcomdetalle, cdiva2, idformapago ;
FROM curGetComprobante1 ;
INTO CURSOR curDetalleProd READWRITE

SELECT * ;
FROM curGetComprobante2 ;
INTO CURSOR curDetalleFP READWRITE

bPermiso = thisform.acceder(_SCREEN.idusuario, "Permite ver comprobantes de Otras Sucursales", thisform.idmodulo, .NULL., .NULL., .NULL., .NULL., .NULL.)

IF (curgetcomprobante.idsucursal = _SCREEN.idsucursal OR bPermiso = .T.) AND (curgetcomprobante.tcFactura = .T. OR curgetcomprobante.tcTicketFactura = .T. OR tcNotaCredito = .T.)
thisform.idtipocomprobante.value = curgetcomprobante.idtipocomprobante
thisform.identidad.value = curgetcomprobante.identidad
thisform.comfecha.value = curgetcomprobante.comfecha
thisform.comobservac.value = curgetcomprobante.comobservac
thisform.comnumero.value = TRANSFORM(curgetcomprobante.comnumero)
thisform.comanulado.visible = curgetcomprobante.comanulado
thisform.cerrado.visible = .NOT. ISNULL(curgetcomprobante.idcierrecaja)
thisform.relacionados1.visible = .T.
thisform.relacionados1.idcomprobante = m.idcomprobante
thisform.iddeposito.value = curgetcomprobante.iddeposito

thisform.habilitar(.F.)

thisform.sumarizar()

thisform.agregarctacte.value = IIF(thisform.totaltotalfp.value<>thisform.totaltotal.value, .T., .F.)
thisform.idtipocomprobante.tccantcopias = IIF(EMPTY(thisform.idtipocomprobante.tccantcopias), 1, thisform.idtipocomprobante.tccantcopias)
thisform.grillaprod.recordsource = "curDetalleProd"
thisform.grillafp.recordsource = "curDetalleFP"
thisform.grillafp.click()
thisform.tipoventa.enabled = .F.
thisform.grillafp.column6.enabled = .F.
thisform.grillaprod.enabled = .F.
thisform.agregarctacte.enabled = .F.
thisform.titulo23.enabled = .F.
thisform.titulo24.enabled = .F.
thisform.idproducto.enabled = .F.
thisform.cdcantidad.enabled = .F.
thisform.cdpreciounit.enabled = .F.
thisform.cddescuento.enabled = .F.
thisform.agregarprod.enabled = .F.
thisform.idformapago.enabled = .F.
thisform.agregarfp.enabled = .F.
thisform.fpdmonto.enabled = .F.
thisform.menu.guardar.visible = .F.
thisform.menu.cancelar.visible = .F.

thisform.titulo36.Visible = .T.
thisform.comCAE.Visible = .T.
thisform.titulo20.Visible = .F.
thisform.TipoVenta.Visible = .F.
thisform.titulo37.Visible = .T.
thisform.comFechaVtoCAE.Visible = .T.

thisform.comCAE.Value = curgetcomprobante.comCAE
thisform.comFechaVtoCAE.Value = curgetcomprobante.comFechaVtoCAE
thisform.comCodigoBarrasFAE.Value = curgetcomprobante.comCodigoBarrasFAE

cfechas = ""

SELECT curgetcomprobante3

SCAN
cmonto = TRANSFORM(IIF(EMPTY(ctadebe), ctahaber, ctadebe))
cfechas = cfechas+"$"+cmonto+" - "+DTOC(fecha)+CHR(13)
ENDSCAN

thisform.fpdfinanciacion.value = cfechas
ELSE
msgbox("El comprobante no es de esta Sucursal, o no es un comprobante de facturación", 64, "Comprobante")
RETURN .F.
ENDIF
ELSE
thisform.crearclave()

CREATE CURSOR curDetalleProd (procodigo C (25), prodescrip C (70), cdcantidad N (9, 2), cdpreciounit N (9, 2), cdiva1 N (9, 2), totaliva N (9, 2), ;
cddescuento N (9, 2), total N (9, 2), idproducto I, ididentificable I NULL, cdiva2 N (9, 2), idformapago I NULL)
CREATE CURSOR curDetalleFP (fpdescrip C (50), fpdcupon C (15) NULL, fpdnumcheque C (50) NULL, fpdbco C (50) NULL, fpdfechacobrocheque D NULL, fpdmonto N (9, 2), ;
fpdvalormoneda N (9, 2), total N (9, 2), idformapago I, idrecibi I NULL, idcuentabancaria I NULL, entdescrip C (50) NULL, tcbdescrip C (50) NULL, ;
ctacbu C (50) NULL, ctanrocuenta C (50) NULL, ctasucursal C (50) NULL, fpdnrotransferencia C (50) NULL, idformapagocaja I NULL)

IF .NOT. EMPTY(m.nidordentrabajo) .AND. .NOT. ISNULL(m.nidordentrabajo)
ad("exec GetOrdenTrabajo "+tostr(m.nidordentrabajo), "curOrdTrab")

SELECT curordtrab1
SUM monto TO totmonto

IF .NOT. EMPTY(m.totmonto)
INSERT INTO curDetalleFP (fpdescrip, fpdmonto, fpdvalormoneda, total, idformapago, idrecibi) VALUES ("Pagos en Cuenta Corriente", totmonto, 1.0000 , totmonto, 0, 0)
ENDIF

SELECT curordtrab2

SCAN
a = ad("exec InsertComDetalle " + tostr(curordtrab2.idproducto, .T.) + tostr(.NULL., .T.) + tostr(curordtrab2.pocantidad, .T.) + ;
tostr(curordtrab2.podescuento, .T.) + tostr(thisform.cdclave, .T.) + tostr(curordtrab2.poprecio))

nTotal = ROUND((curordtrab2.pocantidad * curordtrab2.poprecio * (1 + (curordtrab2.poiva1 / 100))) * ((100 - curordtrab2.podescuento) / 100), 2)

INSERT INTO curDetalleProd ;
(procodigo, prodescrip, cdcantidad, cdpreciounit, cddescuento, total, idproducto, ididentificable, procodigo, cdiva1, cdiva2, idformapago) ;
VALUES ;
(curordtrab2.pocodigo, curordtrab2.podescrip, curordtrab2.pocantidad, curordtrab2.poprecio, curordtrab2.podescuento, nTotal, ;
curordtrab2.idproducto, .NULL., curordtrab2.procodigo, curordtrab2.poiva1, curordtrab2.poiva2, curordtrab2.idformapago)
ENDSCAN

thisform.sumarizar()

thisform.identidad.value = curordtrab.idcliente
thisform.fpdmonto.value = EVL(m.nMontoPagado, curordtrab.otmonto - m.totmonto)
thisform.comobservac.value = "Facturación de productos - " + ALLTRIM(curordtrab.otdescrip)
thisform.guardarycerrar = .T.
thisform.agregarprod.enabled = .F.
thisform.identidad.enabled = .F.
thisform.idproducto.enabled = .F.
thisform.cdcantidad.enabled = .F.
thisform.cddescuento.enabled = .F.
ENDIF

IF .NOT. EMPTY(m.dfecharemito)
ad("exec GetFacturacionRemitos "+tostr(m.dfecharemito, .T.)+tostr(m.idcliente), "curFacturacionRemito")

SELECT curfacturacionremito

IF RECCOUNT()=0
msgbox("No hay remitos sin facturar, por favor asegúrese de haber seleccionado correctamente el cliente", 64, "Sin Remitos")
RETURN .F.
ELSE
SELECT DISTINCT .T. AS seleccionar, comnumero, idcomprobante FROM curFacturacionRemito INTO CURSOR curFacturacionRemito1 READWRITE

IF RECCOUNT()>1
DO FORM SeleccionarRemito

SELECT c.* ;
FROM curFacturacionRemito c ;
INNER JOIN curFacturacionRemito1 r ON c.comnumero=r.comnumero ;
WHERE seleccionar=.T. ;
INTO CURSOR curFacturacionRemito READWRITE
ENDIF

IF RECCOUNT()=0
RETURN .F.
ENDIF
ENDIF

SELECT curfacturacionremito

SCAN
a = ad("exec InsertComDetalle " + tostr(curfacturacionremito.idproducto, .T.) + tostr(curfacturacionremito.ididentificable, .T.) + ;
tostr(curfacturacionremito.cdcantidad, .T.) + tostr(curfacturacionremito.cddescuento, .T.) + tostr(thisform.cdclave, .T.) + ;
tostr(curfacturacionremito.cdpreciounit))

INSERT INTO curDetalleProd ;
(procodigo, prodescrip, cdcantidad, cdpreciounit, cddescuento, total, idproducto, ididentificable, procodigo, cdiva1, cdiva2, idformapago) ;
VALUES ;
(curfacturacionremito.procodigo, curfacturacionremito.cdprodescrip, curfacturacionremito.cdcantidad, curfacturacionremito.cdpreciounit, ;
curfacturacionremito.cddescuento, curfacturacionremito.total, curfacturacionremito.idproducto, curfacturacionremito.ididentificable, ;
curfacturacionremito.procodigo, curfacturacionremito.cdiva1, curfacturacionremito.cdiva2, curfacturacionremito.idformapago)
ENDSCAN

thisform.sumarizar()

thisform.fecharemito = m.dfecharemito
thisform.identidad.value = m.idcliente
thisform.guardarycerrar = .T.
thisform.identidad.enabled = .F.
thisform.facturar.enabled = .F.
thisform.tipoventa.enabled = .F.
thisform.habilitar(.F., "Producto")
ENDIF

thisform.grillafp.recordsource = "curDetalleFP"
thisform.grillaprod.recordsource = "curDetalleProd"
thisform.cdpreciounit.enabled = .F.

thisform.tipoventa.setfocus()
ENDIF

thisform.identidad.setfocus()

thisform.Titulo40.Visible = .T.
thisform.Titulo40.FontBold = .T.
thisform.Titulo40.ForeColor = RGB(100, 100, 100)
thisform.Titulo40.FontName = "Arial"

thisform.idTipoComprobante.Visible = .F.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lentitud al arrancar y al cerra pantalla

Publicado por Ale P (92 intervenciones) el 22/09/2016 17:22:59
y aca el codigo del DODEFAULT(), aca es donde me da la lentitud, o sea, haciendo wait wind, veo q el problema esta ahi
pero cuando hago set step no se ve el problema

LPARAMETERS bsilencioso

verprogreso(1, "Iniciando ejecución de la pantalla", 4)

_Screen.Closable = .F.

IF thisform.width>_SCREEN.width
thisform.width = _SCREEN.width-20
ENDIF

IF thisform.height>_SCREEN.height
thisform.height = _SCREEN.height-30
ENDIF

thisform.autocenter = .T.
thisform.borderstyle = 1

IF FILE("fondo.sp")
thisform.picture = "Fondo.sp"
ELSE
thisform.picture = '..\..\recursos\graficos\764889_2.jpg'
ENDIF

IF _Screen.OffLine = .F.
verprogreso(2, "Validando usuario")

IF thisform.validarusuario .AND. _SCREEN.seguridad
thisform.acceder(_SCREEN.idusuario, thisform.caption, .NULL., IIF( .NOT. thisform.menu.pnuevo, .NULL., .T.), IIF( .NOT. thisform.menu.peliminar, .NULL., .T.), IIF( .NOT. thisform.menu.pmodificar, .NULL., .T.), IIF( .NOT. thisform.menu.pconsultar, .NULL., .T.), IIF( .NOT. thisform.menu.pimprimir, .NULL., .T.))

IF USED("curAcceso")
IF curacceso.acceso=.T. .OR. (curacceso.cantusuarios=1)
thisform.idmodulo = curacceso.idmodulo
thisform.menu.permisos("curAcceso")
SELECT curacceso
USE
ELSE
IF .NOT. bsilencioso
MESSAGEBOX("Acceso Denegado."+CHR(13)+CHR(13)+"Nº Módulo: "+TRANSFORM(curacceso.idmodulo)+CHR(13)+"Módulo: "+ALLTRIM(thisform.caption), 48, "Acceso")
ENDIF
verprogreso(, , , .T.)
RETURN .F.
ENDIF
ENDIF
ELSE
thisform.acceder(_SCREEN.idusuario, thisform.caption, .NULL., IIF( .NOT. thisform.menu.pnuevo, .NULL., .T.), IIF( .NOT. thisform.menu.peliminar, .NULL., .T.), IIF( .NOT. thisform.menu.pmodificar, .NULL., .T.), IIF( .NOT. thisform.menu.pconsultar, .NULL., .T.), IIF( .NOT. thisform.menu.pimprimir, .NULL., .T.))

IF USED("curAcceso")
thisform.idmodulo = curacceso.idmodulo
ENDIF
SELECT curacceso

USE
ENDIF

verprogreso(3, "Validando licencias del sistema")

IF !USED("curPartes")
ad("exec VerPartesSistema "+tostr(EVL(thisform.partesistema, "Sistema Básico")), "curPartes")
ENDIF

SELECT curPartes

LOCAL npermitir, i, opantalla, nUsuarioAux

npermitir = 0

FOR i = 1 TO GETWORDCOUNT(EVL(thisform.partesistema, "Sistema Básico"), ",")
SELECT curpartes
GOTO TOP
LOCATE FOR curpartes.pspermitido=.T. .AND. ALLTRIM(curpartes.psnombre)==GETWORDNUM(EVL(thisform.partesistema, "Sistema Básico"), i, ",")
IF FOUND()
npermitir = npermitir+1
ENDIF
ENDFOR

IF npermitir=0
msgbox("No se puede acceder a esta zona del sistema porque no posee las licencias necesarias."+enter+"Si desea obtener estas licencias, por favor contáctese con SoftPlace", 64)
RETURN .F.
ENDIF
ENDIF

VerProgreso(, , , .T.)

thisform.idUsuarioAccion = IIF(EMPTYC(_Screen.idUsuarioAccion), _Screen.idUsuario, _Screen.idUsuarioAccion)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 4
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Lentitud al arrancar y al cerra pantalla

Publicado por Kong (682 intervenciones) el 26/09/2016 09:37:30
Estimad@
Me aventuro a suponer que en algun lugar de tu programa habrias creado el CURACCESO y el CURPARTES, y muy probable que esos dos cursores te este dando problemas.
En uno de los IF que tienes alli, y en su respectivo ELSE, solamente consideras que el cursor esta en uso, pero nunca de lo contrario.

Por favor me excuso por no poder ayudar de mejor manera, porque no tengo suficiente informacion.

Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar