Error al ejecutar una aplicación: Desbordamiento de pila

Base de conocimiento de la plataforma de desarrollo Velneo

Moderador: vCoaches

Responder
vBdC
vGuru
vGuru
Mensajes: 2
Registrado: 11 Oct 2005, 14:22

Error al ejecutar una aplicación: Desbordamiento de pila

Mensaje por vBdC » 11 Dic 2003, 01:00

Error al ejecutar una aplicación: Desbordamiento de pila

Categorías: Mensaje de error, Actualización, Ejecutor

Palabras clave: Error, Estructura, Fórmula histórico, Enlace a hermano contiguo

Enunciado:
Al mostrar una rejilla, lanzar un informe, realizar cierto, proceso, etc., da el error siguiente:

Este programa ha efectuado una operación no admitida y será interrumpido.
Si el problema persiste, consulte al proveedor del programa.

Detalle:
EJECUTOR (vRunner, iRunner) provocó un error de pila en el módulo MSVCRT.DLL de 0187:780013d0.
Registros:
EAX=009df505 CS=0187 EIP=780013d0 EFLGS=00010203
EBX=7800139d SS=018f ESP=007b2000 EBP=007b2000
ECX=009df220 DS=018f ESI=ffffffff FS=7d67
EDX=00000006 ES=018f EDI=0000000c GS=0000
Bytes en CS:EIP:
,02x ,02x ,02x ,02x ,02x ,02x ,02x ,02x ,02x ,02x ,02x ,02x ,02x ,02x ,02x,02x
Volcado de pila:
,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x,08x

Desarrollo:
Esto se debe a tener en la tabla implicada algún campo fórmula en cuyo cálculo intervenga un enlace a Hermano contiguo o algún campo Fórmula histórico.
En ese caso es aconsejable sustituir el campo fórmula por un campo numérico y mantenerlo mediante actualizaciones.
El motivo de que ocurra con campos fórmula basados en enlaces a hermano o campos de tipo fórmula de histórico es que no tienen persistencia en disco sino que son calculados cuando se evalúan: si en una rejilla mostramos el campo, por cada ficha debe calcular todos los hermanos anteriores o todos los históricos, con lo que puede llegar a desbordarse la pila.

Imaginemos que trabajamos con una tabla con un campo SALDO:
Redefinimos el campo SALDO como numérico, no como fórmula numérica.
Creamos otro campo numérico que reste el debe menos el haber y lo llamamos IMPORTE.
Creamos un enlace a Hermano siguiente (duplicamos el que tenemos y, en su resolución, seleccionamos la Dirección "Siguiente").
Añadimos una actualización; como campo enlazado seleccionamos el campo enlazado a hermano siguiente (como campo hermano contrario se seleccionará automáticamente el enlace al hermano anterior).
Añadimos un componente de actualización:
Campo valor acumulable: IMPORTE
Campo a modificar: SALDO
Veremos entonces como contenido inicial del campo SALDO la siguiente fórmula:
%IMPORTE%+%ANTERIOR.SALDO%
De esta forma cada vez que añadamos, modifiquemos o se elimine un movimiento de caja, la actualización será disparada, con lo que los registros permanecerán siempre actualizados.

De igual manera, para el campo tipo fórmula histórico, debemos sustituirlo por un campo numérico actualizado desde los históricos.
Imaginemos que tenemos una factura de la que queremos tener el total en la cabecera, suma de los importes de cada línea:
Añadimos un componente de actualización:
Campo valor acumulable: IMPORTE
Campo a modificar TOTAL
Última edición por vBdC el 11 Dic 2003, 01:00, editado 1 vez en total.

Responder