No se graba el nuevo registro


([N4] Ramon Denuc) #1

Hola Foro,

Os comento lo que me sucede ha ver si me podéis ayudar un poquito, pues de lo que quiero hacer me funciona casi, casi todo.

Tengo una rejilla con unos cuentos registros, con un botón para valorar y abrir otra ventana que corresponde a la entrada de datos de otra rejilla que hay en el mismo formulario, lo que hago es abrir con el comando “Crear manejador de objetos…” dicha ventana automáticamente sin que el usuario lo tenga que hacer manualmente, hasta aquí todo correcto, ya que además de abrir dicho formulario, lo abro con datos, como son la fecha y el importe de la valoración, de esta forma el usuario ya no lo tiene que hacer, y solo tiene que seleccionar de una lista a que concepto incluye la valoración que se hace de la primera rejilla.

Hasta aquí todo bien, lo que ya no consigo que funcione es que al pulsar el botón Aceptar de la ventana que sirve para hacer la entrada de una operación contable, no graba el registro que teóricamente se graba al pulsar el botón Aceptar.

Dicho de otra forma el registro que teóricamente se tendría de haber guardado no sale en su correspondiente rejilla.

Os dejo dos imágenes, una con el código que utilizo para hacer todo lo que explico arriba, y la otra con la ventana que se abre automáticamente para que el usuario termine de rellenar los datos.

Espero que me podáis ayudar,
Muchas gracias de verdad.




([N2] AyudaVelneo) #2

Hola Ramón:

La instrucción “Alta de ficha” tiene que ir al mismo nivel que la instrucción “Crear nueva ficha en memoria” y no dentro de ella.

Un saludo


([N4] Ramon Denuc) #3

Hola Vila,

Gracias por contestar.

Ya puse el comando “Alta de ficha” al mismo nivel que el comando “Crear nueva ficha en memoria” pero sigue sin dar de alta el registro, es decir, una vez pulso el botón Aceptar de la ventana de las Ope. Contables, se cierra pero no se graba el registro, por lo menos yo no lo veo en su correspondiente rejilla.

¿Alguna idea?

Gracias.


([N1] wikan) #4

Creo que no lo ves por que toda la operación se produce dentro de la misma transacción, quizas si lo montas por separado en dos eventos, y con un tercero los unes podrías hacerlo.


([N4] Ramon Denuc) #5

Otras Manuel, ahora si que me has matado.

Serias tan amable de poder te explicar un poco mejor.

info: Para vuestra información mientras tanto espero vuestras aportaciones, estoy también buscando la posible solución, gracias.


([N1] wikan) #6

Buenas, creo es lo mismo que me ha pasado a mi.
Piensa que cuando ejecutas el evento, se producen modificaciones en la base de datos, pero a nivel del servidor. Hasta que no termina el evento, la transacción no finaliza y los cambios no pasan a estar en disco.

Que me corrijan, pero haciendo primero lo que comenta @AyudaVelneo, aún asi, estarías pasando al objeto una ficha que “todavía” no está guardada en disco.

Podrías intentar:

  1. Un evento que crea la ficha en disco
  2. Un evento que carga esa ficha y la muestra en el formulario
  3. Un evento que dispara los dos anteriores en dicho orden

Todo es por buscar que primero la ficha esté guardada, y posteriormente ejecutar el manejador.


([N1] wikan) #7

De todas formas…ahora fijandome,
creas el manejador para abrir un formulario…

Podrías usar-> Pedir formulario mientras creas la ficha en memoria


([N3] pacosatu) #8

Hola RamonD.

Primero aclarar que tu código no funciona porque intentas guardar una ficha que no se ha abierto en modo transaccional, es decir, que no está preparada para modificación. Cuando usas el comando Alta de ficha, en el subproceso lo único que puedes hacer es leer el #ID creado, pero nunca modificar con un formulario.

Así que ejecuta el Alta de Ficha, guarda el #ID creado dentro del subproceso. A continuación ejecutas un Cargar Lista (por el #ID), Seleccionar por Posición (1) y Modificar Ficha con Formulario. De esta manera te funcionará correctamente.

Otra forma es la comentada por Manuel, no hagas Alta de Ficha, sino que Crea la Ficha en Memoria y usas el Pedir Formulario. Éste último comando no transacciona, solo modificará los valores de los campos en memoria. Así que después de salir del Pedir Formulario tendrás que ejecutar el Alta de Ficha.

Pruébalo
Saludos
Paco Satué


([N4] Ramon Denuc) #9

Hola chicos,

Siguiendo las instrucciones de Paco e construido el código que podéis ver en la imagen que os adjunto.

1- He podido observar el registro de crea después con “Crear nueva ficha en memoria”, y los campos que necesito que se actualicen, se actualizan.

2- Después de ejecutar el “Alta de Ficha” puedo recuperar y ver que registro se a creado a través del “SET” y que puedo ver a través del “Mensaje”

3- Siguiendo las pautas de Paco, Cargo la Lista y selecciono la ficha por posición (1) y seguidamente ejecuto el comando “Modificar ficha seleccionada con formulario” que carga la ventana con el registro X pues he puesto un visualizador en la barra de la ventana del formulario y puedo ver que el ID esta activo y es el nuevo registro que se a creado en el punto 1.

Veo que todo teóricamente funciona correctamente, pero el nuevo registro no se refleja a posterioridad en la rejilla que debería salir, que me falta que estoy haciendo mal.




([N3] pacosatu) #10

Hola RamonD.

El nuevo registro no aparece por arte de magia en la Rejilla. Tendrás que hacerlo tú añadiendo la nueva Ficha a la Lista asociada de la Rejilla o Recalculando la Vista de Datos correspondiente.

Saludos
Paco Satuė


([N4] Ramon Denuc) #11

Hola,

Sigo mirando de que esto funcione, pues de todos los consejos que me ha veis indicado, todavía no he conseguido que esto funcione.

Desespero!!!

Saludos



([N4] Ramon Denuc) #12

Os adjunto otra forma de hacer lo que quiero que haga el programa, que es que abra una ventana con unos datos a confirmar y uno a insertar por el usuario, y que al pulsar Aceptar aparezca el nuevo registro en una rejilla, y es en este ultimo paso donde no consigo que el programa haga lo que me gustaría que hiciera, es decir, que el nuevo registro después de ser creado aparezca en la rejilla.

La otra imagen que os he puesto en el anterior post hace lo mismo y falla en lo mismo, no aparece el registro en la rejilla

Saludos



([N3] pacosatu) #13

Hola RamonD.

Creo que estás liando algo muy sencillo.

Procedimeinto:

  • Creas una Ficha en Memoria
  • Modificas un par de campos por código
  • Pides Formulario para que el Usuario cambie campos en el Interfaz
  • Das de Alta la ficha para que se guarde en disco
  • Añades la nueva Ficha a la Lista de la Rejilla

Código:


Crear nueva ficha en memoria ( oFicha, FICHAS@0PS_Ejercicios_dat )
Modificar campo ( C1, “Campo inicial C1” )
Modificar campo ( C2, “Campo inicial C2” )
Pedir formulario ( FRM_FICHA1@0PS_Ejercicios_app, LOK)
rem (suponemos LOK siempre a 1, de lo contrario lo tenemos en cuenta)
Alta de ficha ( oFicha )
rem (podemos procesar GRD_LISTA en el subproceso de Alta de Ficha o fuera)
Interfaz: Procesar ( GRD_LISTA, Todas )
Añadir ficha a la lista ( oFicha )

Pruébalo tal como está y respetando los subprocesos.

Saludos
Paco Satué


([N4] Ramon Denuc) #14

Muchísimas gracias de nuevo Paco.

Con tus ultimas instrucciones “muy claras” he podido observar lo muy perdido que estaba sobre este tema.

Ahora funciona tal y como yo tenia pensado, y que no supe hacer, y no quiero hachar la culpa a Velneo, pero la poca información, bueno más que poca, algo mal explicada, quiero decir que los pequeños ejemplos de lo que hace cada comando brilla por su ausencia, en muchísimas partes de la documentación de Velneo, y hay cosas que, o tienes que tirar de pedir ayuda a las personas del Foro, o tienes que coger “Apps” para ver si encuentras algún “Proceso” que te pueda servir.

  • Con lo fácil que seria poner pequeños en cada comando, “Como los manuales de antaño”

De todos modos te agradezco tu estimable y vuestra estimable ayuda, esta claro que si algún día nos vemos en persona, tenéis una ronda pagada.

Dejo una imagen de como queda la solución por si algún otro usuario de Velneo necesita alguna vez resolver este problema.

Saludos



([N4] Ramon Denuc) #15

Lo siento, pero vuelvo a exponer.

Tal y como he dicho en mi anterior entrada, todo perfecto, pero ahora he visto que al volver a cargar el informe donde esta esa rejilla, el nuevo asiento NO ESTA.

¿Donde esta? ese nuevo asiento si yo he visto como se insertaba en la rejilla.

En cambio si hago un asiento manualmente si se queda y se ve la próxima vez que se vuelve a cargar el formulario.

Jope!!!


([N1] wikan) #16

El alta de ficha fuera del Crear ficha
Crear ficha


Alta

Siempre al mismo nivel


([N4] Ramon Denuc) #17

Hola Manuel,

Por lo que acabo de comprobar tanto como si lo tengo tal y como me ha comentado Paco como tu dices hace lo mismo, y actúa correctamente, así que el nuevo fallo no es por la forma en que este estructurada los comandos afectados en este proceso, debe de haber otra cosa, que intento averiguar.

Si alguien tiene una idea de lo que ahora estoy haciendo mal, que no lo dude por favor en decir la suya.

Nota. Tal y como esta la estructura en la imagen que os adjunto funciona igual que como Paco a indicado.

Saludos



([N3] pacosatu) #18

Hola RamonD.

Vamos a ver, que te está saliendo muy cara la hora de programación.

  • El registro se da de alta correctamente porque se ha asignado un nuevo #ID correcto y además aparece en la Rejilla OPERACIONES_CONTABLES.CONTROL.
  • Refrescas la Rejilla y ya no vuelve a aparecer el Registro.
  • Ejecutas un Informe y no aparece el Registro.

Conclusión: el proceso que carga la Vista de Datos de la Rejilla o Informe ignora el nuevo Registro por diversas razones: índice excluyente, filtro o condiciones de la búsqueda, etc …

Haz una comprobación:
En lugar del comando Interfaz: Procesar(…OPERACIONES_CONTABLES.CONTROL, Todas) usa el comando Interfaz: Recalcular (…OPERACIONES_CONTABLES.CONTROL). Si no aparece el Nuevo Registro es que el fallo está en el Proceso de carga de la Vista de Datos de OPERACIONES_CONTABLES.CONTROL.

Saludos
Paco Satué


([N2] AyudaVelneo) #19

Hola Ramón:

¿La tabla de operaciones de qué tipo es? ¿Es un maestro? ¿Es un submaestro?

En caso de que dependa de otra tabla ¿le estás induciendo el código de la tablka maestra?

Un saludo


([N4] Ramon Denuc) #20

Hola Vila,

La tengo como Maestro.

Saludos.