Foros del Web » Programando para Internet » ASP Clásico »

Especie de llamada recursiva a funciones.

Estas en el tema de Especie de llamada recursiva a funciones. en el foro de ASP Clásico en Foros del Web. Hola a todos!!! Resulta que con el tema de los pdf he tenido que ampliar los horizontes.... explico bien qué es lo que trato de ...
  #1 (permalink)  
Antiguo 18/05/2005, 08:33
Avatar de verinchi  
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires
Mensajes: 647
Antigüedad: 19 años, 8 meses
Puntos: 2
Especie de llamada recursiva a funciones.

Hola a todos!!!
Resulta que con el tema de los pdf he tenido que ampliar los horizontes.... explico bien qué es lo que trato de hacer, así no queda muy descolgada la pregunta ya que es medio... rara (por así decirlo).
Resulta que tengo un pequeño programita en asp que tiene tres jerarquias de elementos con los que se trabaja. A saber: Macroprocesos, procesos y actividades. Cada macroproceso puede estar relacionado con procesos o actividades. Cada proceso puede estar relacionado con procesos y actividades, y las actividades solo contienen acciones.
La idea principal fue generar un archivo en pdf con todos los datos de cada actividad, proceso y macroproceso. Esto no fue complicado, porque coloqué en cada documento las descripciones principales del elemento y el nombre de cada una de sus relaciones directas.
El tema ahora es que me pidieron que cada pdf contenga los datos de las relaciones directas, con sus detalles, y que además pueda verse en el mismo documento el arbol de relaciones de cada elemento con sus detalles.
Graficamente sería:
Código:
Macroproceso lalalal
descripciones
Relaciones:
1 proceso
   detalles
   relaciones:
   1-1 proceso
	  detalles
	  relaciones
	  1-1-1
		 detalles
		 relaciones: 
			  Si no tiene mensaje
2 Proceso
detalles
relaciones
   2-1 proceso
   detalles
   relaciones
	 2-1-1 proceso
		detalles 
		relaciones
		2-1-1-1.....
y así suscesivamente, hasta que se termine el arbol relacional del macroproceso. Por cada proceso habrá que ver si tiene procesos relacionados, y esos, si tienen a su vez elementos relacionados.... y así suscesivamente hasta que se encuentran procesos sin relaciones o relacionados con actividades que, como solo pueden contener acciones, no tienen arbol hacia abajo.
Ah! El overflow lo plantee pero no me dieron mucha bola. Por ahora no tengo que preocuparme por eso y confiar en que el usuario ingresa y relaciona las cosas coherentemente, mientras preparamos el parche para referencia recursiva de la base de datos.
Así que sé que suena raro que no hay que preocuparse por una llamada infinita, pero suponemos que la base cuida la integridad de los datos.
Mi punto es asi:
Hice una sub rutina que trae los datos de los procesos, que a su vez llama a la subrutina que trae los datos de las actividades, en caso que el proceso esté relacionado con actividades, y para el caso que el proceso esté relacionado con un proceso, espejé la rutina para llamarla de dentro de la principal.
El tema es que como tengo que tabular los datos, no me quedan bien ubicados los margenes... el tabulado se complica a partir del orden 3 de relacion con el macroproceso.
Queda bien el macro,
relacion 1 bien
relacion 1-1 en orden
relacion 1-1-1 queda en el mismo tabulado que la 1-1 .
Además, no pude colocar los indices 1-1-1-1-1-... infinito
no se me ocurre como
si alguien tiene una idea me avisa???
Ya que al menos si no está tabulado por lo menos que pueda identificarse con el número de orden de relacion!!!
Bueno, estoy medio mareada ya de explicarlo no mas, así que ni se imaginan el lio que tengo en la cabeza de codificarlo!!!

Espero que alguien pueda darme una mano, saludos y gracias de antemano a todos por prestarme un poquito de atención.
__________________
Why can't we not be sober?
www.partitorium.com.ar
  #2 (permalink)  
Antiguo 18/05/2005, 10:20
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Lo importante es saber la estructura de tus tablas, que te permitan hacer una busqueda recursiva, generalemte para este proceso deberias tener un campo parent_id para cada uno de los elementos, de esta manera es "sencillo" iterarlos, despues la llamada recursiva se detendra donde el parent_id = 0, y comenzara con el siguiente elemento, de nuevo, esto es demasiado abstracto para explicarlo y entenderlo si no tenemos al menos la minima info para partir de ahi.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 18/05/2005, 10:52
Avatar de verinchi  
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires
Mensajes: 647
Antigüedad: 19 años, 8 meses
Puntos: 2
.

Ok!
Primero gracias por responder!!!!
Veamos.... Nuevamente el problema de "mantener" un desarrollo y no haberlo diseñado yo misma.
Resulta que la estructura de las tablas es la siguiente:

Código:
 procesos(Así se llama la tabla) 
id_proceso		nombre		   descripcion		finalidad		 xxxpavadas 
int				  varchar			  varchar		   varchar			varios
 
actividades (otra tabla)
id_actividad,	nombre		descripcion,	   xxxmas
int					varchar		 varchar			varios
 
acciones (otra tabla)
id_accion		cod_actividad		  contenido
int				   int						   varchar
 
vinculaciones (es la mas problematica)
proceso		  entidad_asociada		   es_macro		tipo_entidad		 orden			 condicionante
int				 int(proc o activ)			  0ó1 segun sea	  activ o proc en letras			  de ejecucion			   un dato mas 
 
 
Macroprocesos (otra mas)
id		   nombre			  descripcion
int		 varchar				   varchar
Tonces en resumen... yo traigo los datos de la tabla que corresponde, busco en vinculaciones si tiene asociado algo, y de ahí es que según lo que tiene empiezo a jugar con las funciones.
Primero si es proceso, duplico la rutina de buscar proceso y la llamo desde el proceso que tiene un proceso vinculado, y así en orden consecutivo hasta que al fin termine, para retomar el bucle principal para mostrar una por una las relaciones directas con todo su arbol dentro.
Sé que la base de datos está pesimamente armada, pero no puedo cambiarla por laburar a las ordenes de un incompetente.
Solo tengo que "Buscar la solución para mostrar los datos" y ahora me acabo de enterar que tengo que tenerlos listos para el lunes
Si me pudieras dar una mano a ver cómo hago... te lo agradecería enormemente
__________________
Why can't we not be sober?
www.partitorium.com.ar

Última edición por verinchi; 18/05/2005 a las 11:06 Razón: mal redactado
  #4 (permalink)  
Antiguo 19/05/2005, 07:41
Avatar de verinchi  
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires
Mensajes: 647
Antigüedad: 19 años, 8 meses
Puntos: 2
Ok, he cambiado de opinión ante observar una cuestión: Si tabulo en 5 procesos se va a ver ordenadamente, en digamos.... 8: ya se ve medio feito, y ni que hablar si lo hago en... no se.... 25 procesos en cadena: El pdf resultante sería una verdadera porquería ilegible.
Ante este nuevo descubrimiento (Comparable obviamente, y en buena ley, con el de América . Bueh! como que me pasé no??? jaja!)
La idea ahora sería la siguiente:
Intento colocar los indices solamente como venían
1-1
1-1-1
1-1-2
1-1-3
1-2
1-2-1 ..... Hasta donde llegue, pero el problema que surge es el siguiente: He tratado, re-tratado y vuelto a intentar imaginar una función que me devuelva en una sola variable todo el resultado de la consulta a la tabla correspondiente, y no he tenido éxito
Supongo, que si puedo llamar solamente a una función que genere un recordset y me lo devuelva como elemento, puedo renombrarlo dentro del bucle que generaría condicionalmente (Si lo que acabo de leer contiene relaciones, entonces genero un bucle para mostrarlas y declaro la variable indice concatenando el número de opción que tiene el indice anterior, algo así como I1, I11, I12, I13... respectivamente y según el caso). Aún no logro probar esto porque no consigo que el recordset llegue como un objeto que pueda renombrar cuando lo tomo (Convengamos que si el recordset se llamara de la misma manera en todos los casos tendría un problema bastante grande no ????)
Bueno, ahora si la pregunta es un poco mas consistente, pido disculpas ya que ayer, al momento de formular la pregunta estaba realmente cansada de mirar y volver a mirar el mismo código sin que se me ocurra una solución
Gracias U_G por tu respuesta, sé que te has esmerado en darme una solución y te he defraudado preguntando ya... puras tonteras
Ahora si tenés una idea de cómo lograr que al fin una función haga lo que quiero, te agradecería tu sugerencia.
Muchísimas gracias de antemano, hasta prontito!!!
__________________
Why can't we not be sober?
www.partitorium.com.ar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:34.