Buen día, estoy tratando de eliminar registros según sus fechas. En caso de que su antigüedad sea mayor a tres meses quiero eliminarlo. El problema es que no se qué instrucción usar, traté con “eliminar ficha seleccionada” pero requiere que el origen sea una lista y yo quiero recorrer los registros uno por uno y verificar si se cumple la condición para ver si los elimino o los dejo. Gracias.
Hola Juan, podés eliminar sin necesidad de ingresar a cada una de las fichas sino sobre la lista…
Pasos:
Primero definis en una variable (llamemosla Months) cual sería la fecha de 3 meses hacia atras, usas la función AddMonths para ello, pero con el nro de meses en negativo y en fecha le pones CurrentDate().
asi
set Months, addMonths (CurrentDate(), -3)
el resultado de ella será 19/5/21
Luego
Cargar Lista…
Filtrar Lista ( donde fecha del registro (tu campo fecha del registro) sea menor a Months)
Recorrer lista eliminando fichas
y así te eliminara todos los registros cuya antiguedad sea mayor a 3 meses a partir de la fecha actual que en este caso sería 19/08/21
Yo aquí estoy escribiendo sin plasmarlo en vDevelop asi que probalo bien y me comentas…
Saludos
Matias de Rimatcom | Desarrollador Certificado 2021 | Consultoría Velneo
Buenas
Es mucho más rápido una búsqueda entre fechas, siempre y cuando tengas el índice fecha.
Un saludo
Se ve largo porque me esforcé en explicarlo lo más detalladamente posible, ya que yo también fui novato y me encantaba cuando alguien se esforzaba en explicarmelo detalladamente para entender todo… Incluso a algunas de esas personas que me ayudaron de esa forma todavía les devuelvo favores sin que me los pidan.
No hubiera servido de mucho decirle;
Create un manejador, resta 3 meses a la fecha actual y luego haz la busqueda…
No estaría aquí preguntandonos al resto de la comunidad si supiera programarlo.
Pero volviendo al código, haciendolo todo dentro del manejador de la forma en que lo explique lo haces hasta más rapido porque te ahorras de crear los indices, el objeto busqueda y además si sabes programar con teclas rápidas lo haces en un pestañear dentro de un manejador de eventos sin siquiera salir de allí para crear otros objetos o configurarlos.
4 Lineas
Gracias por la ayuda, ahora voy a ponerme a entender tu solución.
Hola Matías.
Aquí se han expresado dos maneras de resolver el mismo problema, la primera ahorrando tiempo de diseño y la segunda optimizando el tiempo de ejecución.
Yo personalmente y conociendo Velneo prefiero la segunda, es decir, hacer un buen diseño de la Base de datos adaptando y creando objetos en la aplicación que optimizen lo máximo posible la ejecución.
Por eso en este caso y pensando en futuras ampliaciones, es conveniente tener preparado un Objeto Búsqueda con varios Componentes sobre los Índices de la tabla. Uno de ellos será el Índice Fecha y el Componente entre límites.
Por supuesto diseñar esto requiere un esfuerzo, pero solo una vez. El resultado final es un tiempo de ejecución instantáneo comparado con el comando Filtrar lista, el cual requiere recorrer la Lista y comprobar uno por uno el resultado de la fórmula, que podrá ser más o menos compleja.
En resumen, para seleccionar un conjunto de registros de una tabla siempre es muchísimo más rápido acudir a los comandos Cargar lista o Búsqueda con sus Índices que usar comandos que necesitan recorrer todos los registros de manera secuencial como el Filtrar lista.
Aunque esto no quiere decir que el comando Filtrar lista no sea util en numerosos casos en la programación con pequeñas Listas, de hecho Velneo añadió una novedad en la 25 de la herramienta visual para aplicar Filtros en las rejillas del usuario. Lástima que este esfuerzo del departamente de desarrollo no se reflejara en forma de comandos nativos de Filtrar lista con “opciones”.
Saludos
Paco Satué
Buen día,
Leí el comentario y traté de realizar el mismo proceso utilizando una búsqueda como sugirió, sin embargo, luego de dispararla, el mensaje me avisa que no encontró ninguna línea. Es decir, no encontró ningún registro cuya antigüedad sea mayor a 3 meses de la fecha actual, lo cual no es cierto porque estoy dando de alta registros más antiguos. No encuentro el error.
Gracias,
Grandinetti Juan Ignacio.
Hola juanigrandinetti1.
Revisa el Componente “Entre límites” del objeto Búsqueda BUS_LOG.
Saludos
Paco Satué
Hola, tengo entendido que es así. Con la mezcla “cruzar” debería de devolver sólo los que se encuentren entre los límites.
Hola juanigrandinetti1.
En este caso el orden de los límites en el modo “Entre límites” sí que altera el resultado.
Revisa que la fecha “desde” FCH_DSD sea siempre inferior a la fecha “hasta” FCH_HST, es decir, que el Límite inicial sea inferior al Límite final.
Saludos
Paco Satué
Hola,
Estoy revisando un objeto Búsqueda que tengo implementado y la diferencia que encuentro es que solo tiene un componente de búsqueda “FCH” relacionado con el indice FECHA.
¿Necesitas el otro componente ID? Porque podrías probar quitándolo.
Puedes también agregarle un formulario a la búsqueda donde ingreses las fechas limite de forma manual, para probar si funciona.
Un saludo.
Ahí lo corregí y funciona bien. Muchas gracias por la ayuda.
Saludos,
Grandinetti Juan Ignacio.