Hola!
Estaba trabajando en la version 2.1 de Toba y migré a la 2.3 (actualizada del repositorio).
Como consecuencia dejaron de filtrar los ef_combo_editables.
La dimension está bien definida, y en las pruebas en el editor funciona.
Siguiendo la causa del error, pude “parcharlo” a través de la siguiente modificación en el archivo toba_perfil_datos.php en lib.
if (! empty($where_join)) {
$sql = sql_concatenar_where($sql, $where_join, ‘PERFIL DE DATOS’);
//$sql = sql_concatenar_clausulas_producto_cartesiano($sql, $fuente_datos, $where_join);
}
en la función:
function filtrar_sql($sql, $fuente_datos=null,$dimensiones_desactivar = null)
{
$where = $where_join = array();
$this->operadores_asimetricos = array();
$sql = $this->quitar_comentarios_sql($sql);
//-- 1 -- Busco GATILLOS en el SQL
$tablas_gatillo_encontradas = $this->buscar_tablas_gatillo_en_sql( $sql, $fuente_datos );
//-- 2 -- Busco las dimensiones implicadas
$dimensiones_implicadas = $this->reconocer_dimensiones_implicadas( array_keys($tablas_gatillo_encontradas), $fuente_datos );
//-- 3 -- Obtengo la clausula WHERE correspondiente a cada dimension
foreach( $dimensiones_implicadas as $dimension => $tabla ) {
if(isset($dimensiones_desactivar) && in_array($dimension,$dimensiones_desactivar)) continue;
$alias_tabla = $tablas_gatillo_encontradas[$tabla];
//Genero la clausula para la tabla gatillo
$where_gatillo = $this->get_where_dimension_gatillo($fuente_datos, $dimension, $tabla, $alias_tabla);
if (isset($this->operadores_asimetricos[$tabla]) && ($this->operadores_asimetricos[$tabla] != ',')) { //Si existe un operador opcional para la tabla gatillo
$where_join[$tabla] = $where_gatillo;
} else {
$where[] = $where_gatillo; //Lo incorporo a las clausulas del where
}
}
$sql = $this->quitar_comentarios_sql($sql);
//-- 4 -- Altero el SQL
if(! empty($where)) {
$sql = sql_concatenar_where($sql, $where, 'PERFIL DE DATOS');
}
// -- 5 -- Altero el From cuando hay left/right joins (Esta detras porque sql_concatenar_where no se banca subselects)
if (! empty($where_join)) {
$sql = sql_concatenar_where($sql, $where_join, 'PERFIL DE DATOS');
//$sql = sql_concatenar_clausulas_producto_cartesiano($sql, $fuente_datos, $where_join);
}
return $sql;
}
Está claro que es un parche inmediato que soluciona mi problema “urgente”, y no una solución definitiva que requiere un mayor análisis para poder cerrar correctamente la corrección (o la corrección que yo deberé hacer).
De todas formas, más allá de que pareciera ser necesario revisar esta función, la que no devuelve el aparente resultado deseado es toba_sql::sql_concantenar_clausular_producto_cartesiano (en la carpeta nucleo/lib).
Adjunto la consulta afectada, y la definición de la dimensión.
filtro.doc (31 KB)