Extensión de ficha


([N2] gustavosandoval) #1

Hola, me estoy peleando con las extensiones de fichas. Todavía no logro entender los flags de Alta, baja y mod., por mas que estudie todo lo que encuentro al respecto.
Estoy extendiendo la tabla ART (Artículos) de vERP en una tabla extendida ART_EXT.
Necesito dar valor a un campo de dicha tabla ext. en el momento del alta de ART.

Primero he probado lo mas lógico:
dar alta automática de la extensión antes que la ficha ppal. usando la combinación 11-5-11, para luego leer el maestro ART_EXT y darle valor al campo mencionado, pero me sale un “Error al dar alta de ficha de : Artículos (ext)” y no se porque. He revisado minuciosamente todo y no encuentro el fallo.

Segundo (primera imagen)
hacer lo mismo pero con la combinación 10-5-11.
Esto funciona bien pero me surge otro problema: según veo, no se produce el alta automática de la tabla ext. si ésta tiene todos sus campos vacíos.
En ejecución, seguramente casi todos los registros tendrán algún campo con valor, pero puede ser que alguno no y necesito que siempre se produzca el alta para así poder dar valor a ese campo antes mencionado.

Tercera (segunda imagen)
forzar el alta por proceso y la combinación 8-5-11
Esto me trae el problema inverso: no puedo ingresar valores de la tabla extendida antes de su alta.
Ya se que puedo al final del proceso pedir el formulario ART y llenar los campos, pero eso me parece un poco sucio, ademas que se abriría en nueva ventana modal.

El segundo es el método que mas me gusta, por eso mi pregunta: alguien sabe si se puede de alguna manera hacer el alta automática de una tabla extendida con sus campos vacíos?

Gracias


([N2] gustavosandoval) #2

Primera imagen



([N2] gustavosandoval) #3

Seguna imagen



([N4] sat) #4

Hola Gustavo:

Hace unos meses nos enfrentamos al mismo problema. En su momento lo consultamos con soporte, y efectivamente “Velneo no permite grabar fichas vacías”.
Así que la solución pasa por simular el alta mediante código (básicamente lo que estás haciendo) en algún evento asociado al interfaz, que se dispare siempre que das de alta en el maestro principal (tendrás que pensar cuál es el evento adecuado).
Aunque en su momento se pasó a “nivel 2” y se consultó con desarrollo, desconozco si finalmente abordarán el problema en alguna de las versiones venideras. Se nos indicaba que lo propusiéramos como “idea”, aunque no lo hicimos porque entiendo que ésto no es una idea, sino una funcionalidad básica que debería contemplarse al trabajar con fichas extendidas.

Asimismo, a fecha de hoy existe otra incidencia abierta en el bugman al eliminar un maestro con plurales y que también tenga campos en alguna tabla extendida. También se puede solucionar, pero también a base de “ensuciar” la programación.

Un saludo.


([N2] gustavosandoval) #5

Hola Luis, tenía la esperanza de que ésto no fuera una incidencia importante si no simplemente una falta de conocimiento por mi parte. Lastima.
Bueno, lo último que estoy pensando es, en lugar de usar la extensión de ficha, crear una variable local por cada campo de la tabla extendida y luego usando el proceso de la “Segunda imagen” pasar el valor, si lo hubiera, en el momento de la creación del registro de extensión. Aunque no se que hacer con dos campos que están enlazados a tablas estáticas, pues no les puedo pasar valor con variables.
Bueno, lo seguiré pensando.
Yo también pasé a soporte dos incidencias relativas a las extensiones. Una es la imposibilidad de usar los indices complejos en subindexaciones, que me dijeron que en próximas versiones estaría resuelto, y otra la regeneración de estos indices, que aunque hay una proceso javascript, a mi no me funciona bien pues tengo que lanzarlo cada alta o mod. Esto lo comento por si a alguien le sirve.
Bueno, como también comenté en soporte, creo, con la humildad de un aprendiz a la programación, que a las extensiones les falta todavía una vueltita de rosca para que podamos decir completamente: Life is soft! ja

Gracias por contestar Luis, un saludo


([N4] Infortic) #6

Yo tengo esos problemas con todas las fichas de extensión, no hay forma de que se creen automáticamente por más que pruebo de todas las formas posibles.

Pensaba que era yo que no lo hacía bien, pero por lo visto le pasa a más gente.

No lo entiendo, creo que la única forma es ponerlo en una ficha de un separador de formularios, con botón de alta y baja “manual”.

De cualquier otra forma que pruebo hacerlo no funciona y toca crear código asociado a la interfaz que dé de alta en la tabla de extensión, con la consiguiente pérdida de claridad en el código.


([N2] gustavosandoval) #7

Pues creo que he descubierto otro fallo. Había pensado que a lo mejor poniendo un campo auxiliar con contenido inicial y sin ningún uso mas que forzar el alta de la ficha extendida, se me solucionaría el problema. Pero resulta que, si no me equivoco, tampoco se puede poner contenido inicial de campo en las tablas extendidas porque directamente lo ignora. Lo voy a consultar a soporte para ver si no estoy errado.


([N1] lsmsusvilla) #8

Hola no tengo claro lo que hablais, tabla extendida o maestro de extension que creo que es lo mismo. Pues yo tengo una tabla de servicios con un monton de campos y entre ellos un maestro tabla de extension de dirección, y cuando doy de alta un registro (servicio), automaticamente me da de alta la ficha direccion, luego si quiero rellenar algun campo lo hago y si no lo dejo vacio. Asi con servicios-direcciones, contactos-direcciones etc tengo varias y todas funcionan bien. es eso de lo que habláis


([N2] gustavosandoval) #9

Lo que estamos diciendo es que si no das valor a por lo menos un campo de la tabla extendida, ésta no se da de alta de forma automática, y si, como en mi caso, necesitas dar valor por proceso a un campo, no lo puedes hacer. Esto lo puedes comprobar poniendo, por ejemplo, en una pestaña del formulario principal una lista de datos de la tabla extendida. Veras que si das de alta a la ficha principal sin valores en los campos extendidos, ésta no tendrá registro de la tabla extendida (mismo código). Que en la ficha de extensión se muestren los campos de edición vacíos no quiere decir que la extensión exista. No se si me explico bien, pero eso es lo que a mi me pasa.


([N3] pacosatu) #10

¿Cómo has solucionado al final el problema?

Yo entiendo que en los casos de “Tabla Padre/Maestro de Extensión” los valores que deben tomar las propiedades del subobjeo “Extensión de ficha” dependerá de quién haga de Tabla principal o quién de Extensión de Ficha.

Siempre se cunple lo siguiente:

  • El alta del registro Padre (tabla ART) debe producirse siempre antes que el registro del Maestro de Extensión (tabla ART_EXT). El padre ART siempre debe existir antes que el hijo ART_EXT.
  • Nunca se creará un registro del “Maestro de extensión” en blanco porque NO TIENE SENTIDO una extensión vacía, así que esto es por diseño, no es un fallo de VELNEO. No pueden existir Hijos o extensiones vacías.
  • Nunca existirán fichas del Maestro de extensión huérfanas, es decir con un ID que no existe en la tabla Padre (fuerte relación 1-1). No puede haber Hijos sin Padre.

Por lo tanto, el valor de “Alta de Ficha Principal: Previo a la operación principal” estará marcado cuando la Extensión de Ficha sea la tabla padre (ART) y estará desmarcado cuando la Extensión de Ficha sea el Maestro de Extensiçon (ART_EXT).

En tu caso:
ART_EXT es el origen del formulario -> Ficha Principal
ART es el subobjeto “Extensión de Ficha” del formulario
Así que el valor 11-5-11 tiene que funcionar bien y efectivamente, siempre tendrá que haber un campo del Maestro de extensión con Valor para que el registro de ART_EXT se genere correctamente. Usa el Valor inicial en algún campo de ART_EXT. Probado y funciona.

Saludos
Paco Satué


([N2] gustavosandoval) #11

Hola Paco, he seguido algunos comentarios tuyos y he visto que sabes de lo que hablas, pero en este caso no alcanzo a entenderte completamente.

vale, si te entiendo, esto se y lo tengo en cuenta

entendido y de acuerdo.

entiendo que no tiene sentido en la mayoría de los casos porque el registro ocuparía lugar para nada, pero en casos como el que yo explico (dar un valor fijo o condicionado a un campo de la tabla de extensión en el momento del alta) ¿como se puede hacer si no tenemos el registro?. Creo que debería haber una opción “Crear registro vacío” o mejor como opción condicionada, o algo así.

Esto es así, pero no me funciona y no se porqué, como puse al principio de este hilo. Algo estaré haciendo mal.

[quote quote=33565]En tu caso:
ART_EXT es el origen del formulario -> Ficha Principal
ART es el subobjeto “Extensión de Ficha” del formulario
Así que el valor 11-5-11 tiene que funcionar bien y efectivamente, siempre tendrá que haber un campo del Maestro de extensión con Valor para que el registro de ART_EXT se genere correctamente. Usa el Valor inicial en algún campo de ART_EXT. Probado y funciona.[/quote]
¿Tu dices que de esta manera sí permite contenidos iniciales en los campos de la tabla de ext.?
yo lo he hecho al revés porque, así como tu lo dices, tengo que poner los botones de alta y/o baja, y no es lo que quiero. De todos modos lo he probado y cuando doy al botón de alta me sale también el mensaje de error “Error al dar alta de ficha de: Artículos (ext)” y no da el alta. Aquí debe estar el error básico. He revisado toda la estructura de la tabla de extensión y está bien. No se, tendré que borrar y empezar de nuevo.

gracias Paco y perdona si te he enredado un poco
un saludo


([N3] pacosatu) #12

Hola Gustavo.

No enredas nada. Que conste que yo en muchos aspectos de Velneo solo conozco la teoría, ya que llevo poco tiempo con la plataforma. Nos viene muy bien a todos estos casos reales, para resolver los problemas, conocer los bugs y encontrar la mejor solución.

Me pones en el último párrafo que tu lo haces al revés de lo que yo había entendido, es deciR:

  • ART es el origen deñl formulario
  • ART_EXT es el subobjeto “Extensión de Ficha” del formulario
    En este caso entonces el valor correcto es 10-5-10 para que el Artículo principal ART se dé de Alta antes que la Extensión ART_EXT.

Efectivamente el Valor inicial de los campos de ART_EXT no se tienen en cuenta en este caso, aunque en el otro caso (que ART_EXT sea el origen del formulario) sí que funcionan correctamente. Este es un “Error grave” porque afecta a la lógica de la base de datos y ésta debe funcionar a prueba de bombas.

De momento puedes solucionar lo del valor inicial con un Trigger antes del Alta que modifique el campo con el Valor inicial, siempre que esté vacío claro.

Pero lo del Valor inicial no soluciona el requerimiento de “Poder crear Fichas de Extensión vacías” porque Velneo no genera “transacción de Alta de ficha de Extensión” cuando ésta está vacía. No tienes más remedio que rellenar algún campo del subobjeto “Extensión de Ficha”. Usa como ya han comentado un campo auxiliar que no muestras al público.

Saludos
Paco Satué


([N2] gustavosandoval) #13

Si, solo me queda hacer esto, pero eso es precisamente lo que no puedo de ninguna manera. Cada solución que encuentro me trae otro problema, y así estamos. Me extraña mucho que Velneo no haya pensado en esta posibilidad, pues en algún lado leí que a las extensiones se las puede tratar de la misma manera que si fueran campos de la tabla principal, y eso hasta ahora no es tan así. Bueno, no quería molestar a soporte pero voy a tener que hacerlo, a ver que solución me/nos dan. Cuando lo tenga lo comparto.
Gracias
Un saludo


([N3] pacosatu) #14

Hola Gustavo.

Si el problema es que necesitas tener la Ficha de extensión creada siempre, pues la creas manualmente en el Post-Init del formulario.


If ( #ID= 0 )
Modificar campo ( NAME, “introduzca el nombre del artículo” )
// Guardamos la nueva ficha de ART para obtener el ID
Interfaz: Guardar la ficha en alta o modificación
Set ( ID, #ID )
// Mensaje ( "Nuevo ID: " + ID, Información, , )
Crear nueva ficha en memoria (art_ext, ART_EXT@0PS_Ejercicios_dat)
Modificar campo (ID,ID)
// Creamos la Ficha de extensión. Los valores iniciales SÍ funcionan aquí
Alta de ficha (art_ext)
Libre

Una vez mostrado el formulario, ya dispones de Ficha principal ART y Ficha de extensión ART_EXT con campos editables.

Saludos
paco Satué


([N2] gustavosandoval) #15

Esta claro, y eso es una de las cosas que he probado (segunda imagen). Pero me estaba empeñando en ponerlo en el mismo proceso que acepta la ficha principal, porque si lo pongo en el pos-init tengo otro problema, que una vez abierta la ficha ppal. no puedo cancelarla porque ya ha dado el alta. Y para solucionar esto último tengo que empezar a ensuciar mucho el código o peor aún quitar el botón cancelar y por tanto funcionalidad al formulario. Un lío. Igual lo he probado y es como te digo.
creo que voy a dejar la consulta a soporte para dentro de unos días, porque viajo y no se cuando tendré tiempo e internet para seguir.
una gran saludo!


([N2] gustavosandoval) #16

Bueno, ya lo he resuelto y sin consultar a soporte!
He creado en el formulario principal una variable por cada campo de la tabla de ext. En el manejador de evento que da el alta de la ficha principal, guardo en las variables los valores que se ingresan en el form., doy al alta del la extensión y paso los valores de cada campo. Y listo. En la ficha de ext. 8-5-8
Gracias por las ayudas
Saludos a todos