Una pregunta, tal como está diseñado el modelo de datos de vGestión, ¿cómo puedo obtener el porcentaje de impuesto de un determinado artículo como contenido inicial de un campo?
Por ejemplo, tengo una tabla LINEAS_TICKET donde cada registro representa una línea de un ticket. Por cada línea guardo el ticket al que pertenece (maestro), el artículo del que se trata (maestro), las unidades del artículo (numérico) y el precio (indirecto real). Pero este precio es sin IVA, y me gustaría saber cómo crear otro campo que tenga el % de impuesto partiendo de la información de la tabla ART de vGestión.
Lo he intentado con indirecto real también, pero no consigo dar con la resolución. Tampoco sé qué poner en contenido inicial... es que no sé como navegar a través de las tablas para conseguir lo que quiero.
Un segundo, Overall, ¿por qué coges por defecto la fiscalidad del tipo 1? ¿Cómo sabes si no pertenece a la del tipo 2 o 3? Ahí es donde tengo el problema.
Al final pensaba que se podía hacer mediante indirectos u otro tipo de enlaces, vamos, algo más sencillo y no tan enreversao como el "choose". Pero bueno... ahí queda eso.
Sin haber visto vGestión , tan sólo una recomendación.
A mi, personalmente intento evitar poner en un contenido inicial una fórmula con choose. Menos esa tan grande como la tuya. Date cuenta que Velneo te va a evaluar toda la fórmula aunque cumpla la primera de las opciones.
También podrías crearte una función. En esa función comprobar todo lo que necesites y poner esa fórmula de contenido incial del campo.
Y así es cómo lo tenía, pero creo que es mucho más ineficiente realizar un "cargar lista", seleccionar la ficha, después evaluar las condiciones, retornar el dato, y, luego aparte, en el campo de la tabla poner como contenido inicial una llamada a una función creo que también degrada bastante el rendimiento del sistema que poner simplemente una orden "choose" aunque parezca muy compleja.
De todas formas desconozco las implementaciones internas de Velneo, sé que el lenguaje de programación que lleva de trasfondo es C++, y, siendo así, no entiendo por qué la orden "choose" sigue evaluando las demás expresiones aún cuando la primera es cierta. En C/C++, las estructuras selectivas como IF evalúan sus expresiones en lo que se conoce como "evaluación en cortocircuito", esto es, que en el momento en que se detecta que una expresión es verdadera, se deja de mirar el resto de expresiones.
En la tabla Artículos tenemos el campo #VTA_FIS_GR1_TIP, que es el que nos define el tipo de IVA y dar con su porcentaje, éste es el valor que deberemos poner como contenido inicial en la tabla LINEAS_TICKET. La función que defines te servirá para poder sacar el porcentaje.
El planteamiento de la función lo veo correcto. También podrías coger el porcentaje de la cabecera de las LINEAS_TICKET, en este caso actuaría sobre el propio documento.
Sí, gracias Overall. Ya lo tengo funcionando todo O.K. Lo he probado usando tanto la función como la orden "choose" y ambas son válidas, aunque bueno, no estaría de más saber cuál era la más óptima desde el punto de vista del rendimiento. Pero es igual.
Lo que no te he entendido muy bien es en lo último que has puesto:
También podrías coger el porcentaje de la cabecera de las LINEAS_TICKET, en este caso actuaría sobre el propio documento.
En cuanto a lo de la opción mas óptima debería ser, desde el momento en que el choose evalúa toda la función, la opción de llamar a una función que te devuelva el valor.
La tabla LINEAS_TICKET tendrá una cabecera de TICKETS, de la que podremos sacar los porcentajes (FIS_GR1_TP1_POR, FIS_GR1_TP2_POR, etc...) de esta manera y con la función que has creado apuntando a TICKETS te serviría igual, con la particularidad que podríamos personalizar el porcentaje de los tipos de impuestos de la cabecera.