Foros del Web » Programando para Internet » PHP »

Reporte por grupos en php mysql

Estas en el tema de Reporte por grupos en php mysql en el foro de PHP en Foros del Web. mmm... Creo que la lógica debería ser más o menos así: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código php: Ver original do {     if ( new_group ( ...

  #31 (permalink)  
Antiguo 01/04/2009, 20:15
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 10 meses
Puntos: 839
Respuesta: Reporte por grupos en php mysql

mmm... Creo que la lógica debería ser más o menos así:
Código php:
Ver original
  1. do {
  2.     if (new_group()) {
  3.         imprimir_subtotal();
  4.         reiniciar_variables_subtotal();
  5.         imprimir_encabezados();
  6.     }
  7.     imprimir_contenido($fila);
  8.     incrementar_subtotal();
  9. } while ($fila = mysql_fetch_row())
  10. imprimir_total();
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #32 (permalink)  
Antiguo 01/04/2009, 20:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 9 meses
Puntos: 2135
Respuesta: Reporte por grupos en php mysql

Exacto en el código que expusiste vidalsoft, no estas sumando antes tienes que hacerlo antes de empezar a imprimir las filas para que tengas los valores correctos.

Saludos.
  #33 (permalink)  
Antiguo 02/04/2009, 09:10
Avatar de vidalsoft  
Fecha de Ingreso: julio-2008
Ubicación: /www/...
Mensajes: 339
Antigüedad: 16 años, 7 meses
Puntos: 1
reporte php por grupos y subtotales

Hola amigos de foros del web.
quiero hacer un reporte quebrados por grupo y por cada grupo el subtotal (que es la suma de los montos por grupo)

la tabla es:

Código PHP:
CREATE TABLE  `economia`.`tabla` (
  `
codint(10unsigned NOT NULL auto_increment,
  `
nombrevarchar(45NOT NULL default '',
  `
grupovarchar(45NOT NULL default '',
  `
montodecimal(9,2NOT NULL default '0.00',
  
PRIMARY KEY  (`cod`)
ENGINE=InnoDB DEFAULT CHARSET=latin1
y mi codigo es:
Código PHP:
<table class="Grid" cellspacing="0" cellpadding="0">
        <tr class="Row">
          <td colspan="4"><strong>Fecha: </strong><strong><?php echo strftime ("%d/%m/%Y"); ?></td>
        </tr>
        <tr class="Caption">
          <th>Id</th> 
          <th>Nombre</th>
          <th>Grupo</th>
          <th>Monto</th>
           </tr>      
        
        <?php
         
do{ ?>
<?php 
$grupoant
=$grupo;
$grupo=$row['grupo'];
?>
<?php
if($grupoant != $grupo){
?>         
<tr class="Row">
<td colspan="4"><strong>Dependencia: <?php echo $row["grupo"]; ?></strong></td>
</tr>        
<?php }        
?>
<tr class="Row">
          <td>
            <p align="center"><?php echo $row["cod"]; ?></p></td> 
          <td>
            <p align="center"><?php echo $row["nombre"]; ?></p></td> 
          <td>
            <p align="center"><?php echo $row["grupo"]; ?></p></td> 
          <td>
            <p align="center"><?php echo $row["monto"]; ?></p></td> 
        </tr>
          <?php 
        
if($grupoant !=$grupo){

 
?>
<tr class="SubTotal">      
          <td>&nbsp;</td> 
          <td>&nbsp;</td>   
          <td><strong>Subtotal:</strong></td> 
          <td style="TEXT-ALIGN: right" valign="baseline"><?php printf("%.2f",array_sum($sub_total_monto)); ?></td> 
        </tr>
        <?php 
             $sub_total_monto
=array();
                } 
            
$sub_total_monto[]= $row['monto'];
            
$total_monto[] = $row['monto'];        
         
?>
    <?php        } while ($row=mysql_fetch_assoc($result)); ?>

       <tr class="Total">
          <td colspan="4" align="right"><?php  printf("%.2f",array_sum($total_monto)); ?></td> 
        </tr>
</table>
estoy usando para las sumas de subtotales y para el total general la funcion array_sum()

pero me imprime asi:


cuando deberia imprimir los subtotales al cambiar de grupo osea debe imprimir la fila de subtotales al finalizar cada grupo.

espero su ayuda compañeros
gracias de antemano
__________________
Anthony Vidal Contreras | @AnthonyVidalC | Skype: vidalsystem | [email protected]
  #34 (permalink)  
Antiguo 02/04/2009, 09:20
 
Fecha de Ingreso: abril-2009
Mensajes: 21
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: reporte php por grupos y subtotales

deberias probar phpreports, te resuelve eso que quieres de una forma genial, y tiene un manual bastante explicativo, ademas puedes usar css para darle el estilo que quieras a tu reporte, al final te genera tablas html como las quieras....no te paso el link pq el foro no me deja subir links todavia :( pero pon phpreports en google y lo encontraras muy rapido, si te decides y tienes dudas solo pregunta :)
  #35 (permalink)  
Antiguo 02/04/2009, 09:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 9 meses
Puntos: 2135
Respuesta: Reporte por grupos en php mysql

Temas unidos porfavor NO dupliques temas.

Como nota adicional, en mi mensaje 32 te deje la solucion de porque pasa eso.

Saludos.
  #36 (permalink)  
Antiguo 08/04/2009, 10:12
Avatar de vidalsoft  
Fecha de Ingreso: julio-2008
Ubicación: /www/...
Mensajes: 339
Antigüedad: 16 años, 7 meses
Puntos: 1
MUCHAS GRACIAS GATORV, segui tus consejos y al fin logre solucionar mi problema !!!

Gracias de nuevo... saludos

Hola amigos de forosdelweb...
gracias a GatorV y los que participaron en este foro logré realizar el reporte agrupado, pero
se me presento otro problema a dicho reporte yo lo pagino, de 15 en 15 registros y cuando
paso a otra pagina a travez de la paginacion oviamente los array_sum vuelve a ejecutarse y hacen la suma de los subtotales por pagina cosa que es errada deberia ser por grupo y el grupo puede tener mas de 15 registros y deberia mantener la suma, que tecnica o de que forma podria obtener lo correcto.?
como podria solucionar este problema ?

gracias de antemano.

Hola amigos de forosdelweb...

alguien tendra un ejemplo de un reporte de php hacia una tabla mysql
que maneja como campo grupo y monto (o algo parecido)
, donde el reporte sea quebrado por grupo y subtotales por cada grupo..



gracias de antemano.

una ayuda porfavor... solo tengo problemas al imprimir los subtotales por cada grupo

el quiebre por grupo ya lo tengo... solo me falta los subtotales.

estructura:
DROP TABLE IF EXISTS `economia`.`tabla`;
CREATE TABLE `economia`.`tabla` (
`cod` int(10) unsigned NOT NULL auto_increment,
`nombre` varchar(45) NOT NULL default '',
`grupo` varchar(45) NOT NULL default '',
`monto` decimal(9,2) NOT NULL default '0.00',
PRIMARY KEY (`cod`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
__________________
Anthony Vidal Contreras | @AnthonyVidalC | Skype: vidalsystem | [email protected]

Última edición por GatorV; 05/05/2009 a las 08:28
  #37 (permalink)  
Antiguo 04/05/2009, 19:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 9 meses
Puntos: 2135
Respuesta: reporte php agrupado y con subtotales

Pues ya lo tienes tu mismo en tu post: http://www.forosdelweb.com/f18/repor...-mysql-684987/ no entiendo tu pregunta.
  #38 (permalink)  
Antiguo 04/05/2009, 19:29
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 7 meses
Puntos: 416
Respuesta: reporte php agrupado y con subtotales

Viendo algo que pusiste en tu otro tema:
Cita:
esto imprime todo normal, lo qu quiero es la idea como imprimir por grupo como esta tabla:
Te puedo decir que puedes agrupar directamente desde tu consulta usando la clausula GROUP BY de MySQL.

SELECT * FROM datos GROUP BY grupo ORDER BY grupo ASC
  #39 (permalink)  
Antiguo 05/05/2009, 07:50
Avatar de vidalsoft  
Fecha de Ingreso: julio-2008
Ubicación: /www/...
Mensajes: 339
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: reporte php agrupado y con subtotales

Hola.
tengo hasta el momento este resultado:


como pueden apreciar logro el quiebre por grupo y total general, pero hasta ahora no he podido obtener los subtotales que deberian imprimirse al final de cada detalle de cada grupo, por ejemplo del primer grupo ("A") seria:

Grupo: A
1-------anthony------A-------20.00
2-------rosa-----------A-------50.00
Subtotal:----------------------70.00
Grupo: B
.............................
Grupo:C
.............................

con ese aspecto deberia ser el reporte, no estoy usando array_sum() , y tampoco me serviria por que mis reportes los estoy paginando.

mi codigo es:
Código PHP:
<?php
session_start
();
include(
"conexion.php");
$link=Conectarse();
$_pagi_sql="SELECT * from tabla order by grupo";
$_pagi_cuantos=10;
include(
"paginator.inc.php");
$SqlSumSubTotal=mysql_query($_pagi_sql,$link); 

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>Reporte</title>
<link href="Styles/OCEF/Style.css" type="text/css" rel="stylesheet">
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0">
  <tr>
    <td valign="top">
      <table class="Header" cellspacing="0" cellpadding="0" border="0">
        <tr>
          <td class="HeaderLeft"></td> 
          <th>Listado de Verificación de Ordenes</th>
 
          <td class="HeaderRight"></td>
        </tr>
      </table>
 
      <table class="Grid" cellspacing="0" cellpadding="0">
        <tr class="Row">
          <td colspan="4"><strong>Fecha: </strong><strong><?php echo strftime ("%d/%m/%Y"); ?></td>
        </tr>
        <tr class="Caption">
          <th>Id</th> 
          <th>Nombre</th>
          <th>Grupo</th>
          <th>Monto</th>
           </tr>      
        <?php 

?>
        <?php

         
while($row=mysql_fetch_assoc($_pagi_result)) {
         
$grupoant=$grupo;        
$grupo=$row['grupo'];
$tot+=$row["monto"];
 
?>

<?php
if($grupoant != $grupo){

?>         
<tr class="Row">
<td colspan="4"><strong>Grupo: <?php echo $row["grupo"]; ?></strong></td>
</tr>        
<?php 

}        
?>
<tr class="Row">
          <td>
            <p align="center"><?php echo $row["cod"]; ?></p></td> 
          <td>
            <p align="center"><?php echo $row["nombre"]; ?></p></td> 
          <td>
            <p align="center"><?php echo $row["grupo"]; ?></p></td> 
          <td>
            <p align="center"><?php echo $row["monto"]; ?></p></td> 
        </tr>


<!--<tr class="SubTotal">      
          <td>&nbsp;</td> 
          <td>&nbsp;</td>   
          <td><strong>Subtotal:</strong></td> 
          <td style="TEXT-ALIGN: right" valign="baseline"><?php 
         
// echo number_format($sub,2); ?></td> 
          
        </tr>-->
        <?php 
                
}
         
?>


       <tr class="Total">
          <td colspan="4" align="right">TOTAL GENERAL: <?php  
 
echo number_format($tot,2); ?></td> 
        </tr>
        <tr class="Footer">
          <td style="TEXT-ALIGN: right" colspan="4"><?php printf("<p>Página ".$_pagi_navegacion."</p>"); ?></td>
        </tr>
 </table>
       <p style="PAGE-BREAK-AFTER: always"></p>
 
      <table class="Grid" cellspacing="0" cellpadding="0">
       </table>
    </td>
  </tr>
</table>
</body>
</html>
Espero su pronta ayuda gracias.
__________________
Anthony Vidal Contreras | @AnthonyVidalC | Skype: vidalsystem | [email protected]
  #40 (permalink)  
Antiguo 05/05/2009, 08:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 9 meses
Puntos: 2135
Respuesta: reporte php agrupado y con subtotales

Temas unidos porfavor continua sobre el mismo hilo, si estas trabajando con el mismo codigo.
  #41 (permalink)  
Antiguo 09/06/2009, 23:42
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 20 años, 3 meses
Puntos: 6
De acuerdo Respuesta: Reporte por grupos en php mysql

mira esto man.

http://www.hkvstore.com/phpreportmak.../tcrosstab.htm

saludos
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #42 (permalink)  
Antiguo 11/06/2009, 16:44
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 20 años, 3 meses
Puntos: 6
De acuerdo Respuesta: Reporte por grupos en php mysql

me paso lomismo... aca te dejo la solucion

Salu2 ...

Código PHP:
<?php
session_start
();
include(
"conexion.php");
$link=Conectarse();

$sql_maxGrupos "SELECT * from tabla GROUP BY  campo_grupo ";
    
    
$result_maxGrupos mysql_query($sql_maxGrupos);
    
$maximo_grupos mysql_num_rows($result_maxGrupos);

$_pagi_sql="SELECT * from tabla order by grupo";
$_pagi_cuantos=10;
include(
"paginator.inc.php");
$SqlSumSubTotal=mysql_query($_pagi_sql,$link); 

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>Reporte</title>
<link href="Styles/OCEF/Style.css" type="text/css" rel="stylesheet">
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0">
  <tr>
    <td valign="top">
      <table class="Header" cellspacing="0" cellpadding="0" border="0">
        <tr>
          <td class="HeaderLeft"></td> 
          <th>Listado de Verificación de Ordenes</th>
 
          <td class="HeaderRight"></td>
        </tr>
      </table>
 
      <table class="Grid" cellspacing="0" cellpadding="0">
        <tr class="Row">
          <td colspan="4"><strong>Fecha: </strong><strong><?php echo strftime ("%d/%m/%Y"); ?></td>
        </tr>
        <tr class="Caption">
          <th>Id</th> 
          <th>Nombre</th>
          <th>Grupo</th>
          <th>Monto</th>
           </tr>      
        <?php 

?>
        <?php

         
while($row=mysql_fetch_assoc($_pagi_result)) {
         
$grupoant=$grupo;        
$grupo=$row['grupo'];
$tot+=$row["monto"];
 
?>

<?php
if($grupoant != $grupo){

?>         
<tr class="Row">
<td colspan="4"><strong>Grupo: <?php echo $row["grupo"]; ?></strong></td>
</tr>        
<?php 

}        
?>
<tr class="Row">
          <td>
            <p align="center"><?php echo $row["cod"]; ?></p></td> 
          <td>
            <p align="center"><?php echo $row["nombre"]; ?></p></td> 
          <td>
            <p align="center"><?php echo $row["grupo"]; ?></p></td> 
          <td>
            <p align="center"><?php echo $row["monto"]; ?></p></td> 
        </tr>

        <?
        
//echo $nro_factura_ante;
        //$c=0;
        
$c=$c+1;
        
//while ($c >= 3 ) {
            
if ($c == $maximo_grupos) {    
            
?>
       <tr class="SubTotal">      
          <td>&nbsp;</td> 
          <td>&nbsp;</td>   
          <td><strong>Subtotal:</strong></td> 
          <td style="TEXT-ALIGN: right" valign="baseline"><?php 
         
// echo number_format($sub,2); ?></td> 
          
        </tr>
        <?
                $c
=0;            
        
//}    
            
}        
        
?>
              
        
        <?php 
                
}
         
?>


       <tr class="Total">
          <td colspan="4" align="right">TOTAL GENERAL: <?php  
 
echo number_format($tot,2); ?></td> 
        </tr>
        <tr class="Footer">
          <td style="TEXT-ALIGN: right" colspan="4"><?php printf("<p>Página ".$_pagi_navegacion."</p>"); ?></td>
        </tr>
 </table>
       <p style="PAGE-BREAK-AFTER: always"></p>
 
      <table class="Grid" cellspacing="0" cellpadding="0">
       </table>
    </td>
  </tr>
</table>
</body>
</html>
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #43 (permalink)  
Antiguo 12/06/2009, 14:23
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 20 años, 3 meses
Puntos: 6
Respuesta: reporte php agrupado y con subtotales

Cita:
Iniciado por GatorV Ver Mensaje
Temas unidos porfavor continua sobre el mismo hilo, si estas trabajando con el mismo codigo.
si, posteo mil veces lo mismo ja
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 09:14.