Gracias por las recomendaciones, quedó en está forma: subquery = (reporte_linea .join(reporte, condition=reporte.id == reporte_linea.reporte) .select( Max(reporte_linea.id * 1005).as_('id'), Max(reporte_linea.create_uid).as_('create_uid'), Max(reporte_linea.create_date).as_('create_date'), Max(reporte_linea.write_uid).as_('write_uid'), Max(reporte_linea.write_date).as_('write_date'), (reporte_linea.gp).as_('gp'), (reporte.distrito).as_('distrito'), where = where, group_by=(reporte_linea.gp, reporte.distrito), order_by=(reporte.distrito), ) ) query = (gp .join(subquery,'LEFT', condition=gp.id == subquery.gp) .select( Max(gp.id * 1005).as_('id'), Max(gp.create_uid).as_('create_uid'), Max(gp.create_date).as_('create_date'), Max(gp.write_uid).as_('write_uid'), Max(gp.write_date).as_('write_date'), (gp.id).as_('gp'), (subquery.distrito).as_('distrito'), where= subquery.gp == None, group_by=(gp.id, subquery.distrito,), order_by=(subquery.distrito) ) )
El problema es que ahora no puedo indexar dicha tabla en el método .search() Reporte = Pool().get('disc.reporte.lider.cero.table') reports = Reporte.search( [('distrito','=',distrito)] ) También en los reportes no puedo utilizar, como por ejemplo: gp.distrito.zona (en otros reportes funciona bien, pero no después de la doble consulta). Hay alguna recomendación para trabajar con este tipo de datos? El jueves, 1 de febrero de 2018, 6:29:02 (UTC-6), Sergi Almacellas Abellana escribió: > > El 01/02/18 a les 04:57, Josias Pérez ha escrit: > > Hola, > > > > Tengo el siguiente método de table_query y las siguientes tablas: > > > > class Gp: > > name > > > > class Reporte > > fecha_inicio > > fecha_fin > > distrito > > > > class ReporteLine > > reporte many2one Reporte > > gp many2one Gp > > cantidad > > > > Deseo encontrar los grupos que no generan reportes, es decir sean NULL o > > cero. Si existe un registro en la clase ReporteLine se puede sumar > > (aunque sea 0), pero si no existe un registro no sé como obtener el > > nombre del grupo (Gp) que no está registrado en ReporteLine. > > > > Tengo el siguiente table_query pero devuelve un valor de error al > > realizar la consulta y devuelve el siguiente error > > ProgrammingError: syntax error at or near ")" > > Por el error parece que te falta/sobra algun parentesis. > > De todos modos, si nos pones la traza completa mejor. > > > > Cualquier comentario será de mucha ayuda. > > > > def table_query(): > > pool = Pool() > > context = Transaction().context > > Gp = pool.get('disc.gp') > > gp = Gp.__table__() > > Reporte = pool.get('disc.reporte') > > reporte = Reporte.__table__() > > ReporteLinea = pool.get('disc.reporte.linea') > > reporte_linea = ReporteLinea.__table__() > > > > where = Literal(True) > > if Transaction().context.get('fecha_inicio'): > > where &= reporte.fecha_inicio >= > > Transaction().context['fecha_inicio'] > > if Transaction().context.get('fecha_fin'): > > where &= reporte.fecha_fin <= Transaction().context['fecha_fin'] > > > > where &= gp.id == None > > Una sugerencia: En vez de instanciar el context varias veces es mejor > hacer: > > context = Transaction().context > > y a partir d'aqui context.get('fecha_inicio') > > Queda más limpio. > > > > > query1 = reporte.join(reporte_linea, > > condition=reporte_linea.reporte == reporte.id).select( > > Max(reporte_linea.id * 1000).as_('id'), > > Max(reporte.create_uid).as_('create_uid'), > > Max(reporte.create_date).as_('create_date'), > > Max(reporte.write_uid).as_('write_uid'), > > Max(reporte.write_date).as_('write_date'), > > Max(reporte.distrito).as_('distrito'), > > (reporte_linea.gp).as_('gp'), > > Sum(reporte_linea.cantidad).as_('total'), > > group_by=(reporte_linea.gp), > > ) > > > > query2 = gp.join(query1,'LEFT').select( > > Max(gp.id * 1001).as_('id'), > > Max(gp.create_uid).as_('create_uid'), > > Max(gp.create_date).as_('create_date'), > > Max(gp.write_uid).as_('write_uid'), > > Max(gp.write_date).as_('write_date'), > > Max(query1.distrito).as_('distrito'), > > (reporte_linea.gp).as_('gp'), > > where = where, > > group_by=(query1.gp), > > ) > > > -- > Sergi Almacellas Abellana > www.koolpi.com > Twitter: @pokoli_srk >