Lo primero de todo hay algo que no queda del todo claro en tu post, hablas de combinaciones pero no te refieres a si el orden importa o no, es decir,
a1+b1+c1 es lo mismo que b1+a1+c1
Es un detalle importante que conviene aclarar, aunque por lo que comentas voy a dar por supuesto que te refieres a combinaciones sin orden, es decir a1+b1+c1 es lo mismo que b1+a1+c1
Partiendo de este supuesto hay muchas maneras de hacer ese algoritmo, teniendo en cuenta las limitaciones de abap y que como has dicho es algo que tendras que hacer de manera dinamica puesto que el numero de familias y valores sera variable te digo de que manera lo haria yo
Lo primero y fundamental es ordenar los datos de tal manera que luego el algoritmo para calcular todas las combinaciones sea sencillo
Supongamos que de una manera magica obtenemos una serie de tablas con dos columnas (familia y valor) cada tabla contendra el valor de la familia y una linea por cada diferente valor, asi con los datos que has puesto quedaria
TABLA 1
FAMILIA VALOR
A 1
A 2
TABLA 2
FAMILIA VALOR
B 1
B 2
B 3
TABLA 3
FAMILIA VALOR
C 1
C 2
No nos preocupemos ni de como obtener dichas tablas ni generarlas ni el formato que tendran ni nada, despues hablaremos de ello, solo lo pongo de ejemplo para ver como seria el algoritmo
Para hacerlo mas sencillo voy a suponer que solo hay 3 familias (A, B, C) y que tienen los valores que tu has puesto, despues hablaremos de como seria para hacerlo dinamicamente para el numero de familias que sea
Si tu hicieras
Con esto irias obteniendo en lv_combinacion cada una de las diferentes combinaciones posibles que serian el resultado del producto cartesiano de todos los valores de todas las familias, podrias ir haciendo el append de lv_combinacion en otra tabla o algo asi para ir almacenando todas las combinaciones posibles y tu algoritmo estaria resuelto
Ahora voy a hablar de lo que es lo mas complicado que es organizar la informacion de manera que podamos obtenerla como te he dicho
Como el numero de familias no lo conocemos habria N tablas, tantas como familias existen pero todas las tablas tendrian la misma estructura que serian dos columnas, una para el nombre de la familia y otra para el valor
Para crear una tabla en tiempo de ejecucion podemos utilizar muchos metodos, utilizar la clase cl_rs_struc, utilizar el metodo CREATE_DYNAMIC_TABLE de la clase CL_ALV_TABLE_CREATE, si buscas en el foro encontraras multiples posts explicando la creacion de tablas dinamicamente en tiempo de ejecucion (ojo porque creo que el metodo CREATE_DYNAMIC_TABLE por motivos tecnicos de sap solo puedes llamarlo 36 veces, es decir si hubiera 37 familias diferentes ya no te serviria porque te daria dump al intentar crear la tabla numero 37)
Una vez que hubieramos creado las tablas y tuvieramos una tabla por cada familia la cuestion seria rellenarlas, para eso harias un loop a tu tabla maestra donde tienes todas las familias y todos los valores y con los AT NEW o ON CHANGE OF irias partiendo para ir creando cada una de las diferentes tablas donde tendras la familia y sus posibles valores
Bueno me ha salido un ladrillo terrible, lo que quieres hacer es complicado y ABAP no es un lenguaje muy orientado a hacer cosas asi ve exponiendo las dudas que te vayan surgiendo
|