Foros del Web » Programando para Internet » PHP »

Ayuda con reporte ....

Estas en el tema de Ayuda con reporte .... en el foro de PHP en Foros del Web. hola gente, resulta que estoy ahceidno un reporte de ventas y me estoy estancando en la parte de los subtotales. aca dejo una imagen de ...
  #1 (permalink)  
Antiguo 02/07/2009, 09:43
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 20 años
Puntos: 6
Pregunta Ayuda con reporte ....

hola gente, resulta que estoy ahceidno un reporte de ventas y me estoy estancando en la parte de los subtotales. aca dejo una imagen de la tabla mysql correspondiente

Ver Tabla Compras

y aca abajo lo que tendria que ser el reporte con subtotales

Ver Reporte


salu2 y gracias por su ayuda
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #2 (permalink)  
Antiguo 02/07/2009, 10:00
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 7 meses
Puntos: 839
Respuesta: Ayuda con reporte ....

¿Cuál es exactamente la duda? Lo que tienes que hacer es recorrer los datos e ir formando una tabla con los datos. Llevar un control del proveedor que se está mostrando y cuando este cambie, crear una nueva fila.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 02/07/2009, 10:05
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 20 años
Puntos: 6
Respuesta: Ayuda con reporte ....

Cita:
Iniciado por David Ver Mensaje
¿Cuál es exactamente la duda? Lo que tienes que hacer es recorrer los datos e ir formando una tabla con los datos. Llevar un control del proveedor que se está mostrando y cuando este cambie, crear una nueva fila.
hola David, bien el tema es que Arme algo pero demora muchisimo la consulta y estoy tratando de optimizarla.

como detectarias ese cambio del proveedor ?
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #4 (permalink)  
Antiguo 02/07/2009, 10:09
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 7 meses
Puntos: 839
Respuesta: Ayuda con reporte ....

Con una variable :
Código php:
Ver original
  1. if (proveedor != proveedor_actual) {
  2.     proveedor = proveedor_actual;
  3.     subtotal();
  4. }
Muestra lo que has hecho y podemos ver dónde está fallo.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 02/07/2009, 10:13
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 20 años
Puntos: 6
Respuesta: Ayuda con reporte ....

bien, aca pongo lo que hice (aclaro que las tablas estan relacionadas y puse una query armado en la tabla de la imagen que puse en el priemr post)

aca va mi code

Código PHP:

<!-- detalles -->
<table width="100%" border="0" cellpadding="0" cellspacing="0">  
    <?
  $sql 
"
    SELECT
    subdiario_compras1.`id_compra`, subdiario_compras1.`fecha`, subdiario_compras1.`Cte_codigo`, subdiario_compras1.`tipo_fac`, subdiario_compras1.`Suc_factura`, subdiario_compras1.`nro_factura`, subdiario_compras1.`id_proveedor`, subdiario_compras1.`proveedor`, subdiario_compras1.`Emp_cta_proveedores`, subdiario_compras1.`Importe`,
    cuentas1.`Cta_detalle`
FROM
    `db_tacuar`.`subdiario_compras` subdiario_compras1 INNER JOIN `db_tacuar`.`cuentas` cuentas1 ON subdiario_compras1.`Emp_cta_proveedores` = cuentas1.`Cta_codigo`
WHERE subdiario_compras1.`fecha` BETWEEN  '"
cambia_fecha_a_mysql2($_GET[f1])."' AND '"cambia_fecha_a_mysql2($_GET[f2])."'
#where fecha = '2007-01-03' and id_proveedor = 59                
ORDER BY
    subdiario_compras1.`fecha` ASC, subdiario_compras1.`tipo_fac` ASC, subdiario_compras1.`Suc_factura` ASC, subdiario_compras1.`nro_factura` ASC, subdiario_compras1.`id_compra` ASC        
    #limit 25
    "
;
    
    
$result mysql_query($sql);    
    while(
$row mysql_fetch_array($result)) {    
        
        
$id_compra_ante $id_compra;        
        
$id_compra $row['id_compra'];
        
        
$fecha $row['fecha'];
        
$Cte_codigo $row['Cte_codigo'];
        
$tipo_fac $row['tipo_fac'];
        
$nro_factura $row['nro_factura'];
        
$id_proveedor $row['id_proveedor']; 
        
$Emp_cta_proveedores $row['Emp_cta_proveedores'];
        
        
        if (
$row[Importe]>0) { // DEBE
            #$debe =  number_format(abs($row[Importe]),2,",",".");
            
$haber "";            
            
$debe =  $row[Importe];        
            
$subtotal_debe $subtotal_debe $debe;
            
$total_debe_cpras $total_debe_cpras $debe;
            
        }
        if (
$row[Importe]<0) { // HABER
            
$debe "";
            
$haber abs($row[Importe]); //number_format($row[Importe],2,",",".");        
            
$subtotal_haber $subtotal_haber $haber;
            
$total_haber_cpras $total_haber_cpras $haber;
        }
        
        
        
?>
            
    <?
        
// $tipo_fac_ante <> $tipo_fac or $nro_factura_ante <> $nro_factura or   $Id_cliente_ante <> $Id_cliente or  $Cte_codigo_ante <> $Cte_codigo
        
if ($id_compra_ante != $id_compra) {
            
?>
        <tr >
        <td width="11%" valign="top"  > <div class="encabezado_subdiario"><?=cambia_fecha_a_normal($row['fecha'])?></div></td>
        <!--<td width="19%" valign="top"   class="borde_izquierda"> <div class="encabezado_subdiario" align="left" ><?=$row['Cte_codigo']?> <?=$row[tipo_fac]?> <?=$row[nro_factura]?></div></td> -->
        <td width="11%" valign="top"   class="borde_izquierda"> <div class="encabezado_subdiario"><?=$row[id_proveedor//."  ".$nro_factura_ante ?></div></td>
        <td width="29%" valign="top"   class="borde_izquierda"> <div class="encabezado_subdiario" align="left" ><?=$row[proveedor]?></div></td>
        <td width="9%" valign="top"   class="borde_izquierda"> <div class="encabezado_subdiario">&nbsp;</div></td>
        <td width="13%" valign="top"   class="borde_izquierda"> <div class="encabezado_subdiario">&nbsp;</div></td>
  </tr>      
        <?
            $a 
0;
        }
        
$a=$a+1;
        
?>    
        <tr>
      <td width="11%" valign="top"  ><div class="Estilo2">&nbsp;</div></td>
      <!--<td width="19%" valign="top"   class="borde_izquierda"><div class="Estilo2" align="left" >&nbsp;</div></td>-->
      <td width="11%" valign="top"   class="borde_izquierda"><div class="Estilo2"><?=$row[Emp_cta_proveedores//."  ".$nro_factura_ante?></div></td>
      <td width="29%" valign="top"   class="borde_izquierda"><div class="Estilo2" align="left" ><?=$row[Cta_detalle]?></div></td> 
      <td width="9%" valign="top"   class="borde_izquierda">
          <div class="Estilo2">
                <? if ($row[Importe]>0) {
                        echo 
number_format($debe,2,",",".");
                    }
                
?>
        </div>
      </td>
      
      <td width="13%" valign="top"   class="borde_izquierda">
          <div class="Estilo2">
                <?                    
                    
if ($row[Importe]<0) {
                        echo 
number_format($haber,2,",",".");
                    }                
                
?>
          </div>
      </td>
  </tr>      
        <?        
        
// esto me genera muchisima lentitud .. si lo saco anda rapidisimamente RAPIDO
        
$sql_maxGrupos "SELECT  
                                                subdiario_compras1.`id_compra`, subdiario_compras1.`fecha`, subdiario_compras1.`Cte_codigo`, subdiario_compras1.`tipo_fac`, subdiario_compras1.`Suc_factura`, subdiario_compras1.`nro_factura`, subdiario_compras1.`id_proveedor`, subdiario_compras1.`proveedor`, subdiario_compras1.`Emp_cta_proveedores`, subdiario_compras1.`Importe`,
                                                cuentas1.`Cta_detalle`
                                        FROM
                                            `subdiario_compras` subdiario_compras1 INNER JOIN `cuentas` cuentas1 ON subdiario_compras1.`Emp_cta_proveedores` = cuentas1.`Cta_codigo`
                                        WHERE
                                            #fecha = '"
.$fecha."' AND
                                            #Cte_codigo = '"
.$Cte_codigo."' AND
                                            #tipo_fac = '"
.$tipo_fac."' AND
                                            #nro_factura = '"
.$nro_factura."' 
                                            subdiario_compras1.`id_compra`  = "
.$id_compra."
                                            #Emp_cta_proveedores = "
.$Emp_cta_proveedores."
                                        
                                             
                                "
;    
    
$result_maxGrupos mysql_query($sql_maxGrupos);
    
$maximo_grupos mysql_num_rows($result_maxGrupos);    
        
$c=$c+1;
            if (
$c == $maximo_grupos) {
                echo 

                    <tr>    
                         <td width="11%" valign="top"   > <div class="Estilo1">&nbsp;</div></td>
                        <!--<td width="19%" valign="top"   class="borde_izquierda"> <div class="Estilo1" align="left" >&nbsp;</div></td>-->
                        <td width="10%" valign="top"   class="borde_izquierda"> <div class="Estilo1">&nbsp;</div></td>
                        <td width="36%" valign="top"   class="borde_izquierda"> <div class="Estilo1" align="left" >&nbsp;</div></td> 
                        <td width="12%" valign="middle"   class="borde_izquierda"><div class="subtotales">$'
.number_format($subtotal_debe,2,",",".").'</div></td>
                        <td width="12%" valign="middle"   class="borde_izquierda"><div class="subtotales">$'
.number_format($subtotal_haber,2,",",".").'</div></td>
                    </tr>
                    '
;
                    
                
$c=0;
                
$subtotal_haber 0;
                
$subtotal_debe 0;     
            }
        
        
?>
    
        <?        
    
// FIN ... while($row = mysql_fetch_array($result)) {
    
    
?>
  <!-- TOTAL GENERAL 
  <tr>    
    <td width="76%" id="totales" valign="middle" align="center" colspan="4"  ><div class="totales" align="center" >&nbsp; Totales (Compras)</div></td>
    <td width="12%" id="totales" valign="middle"   class="borde_izquierda"><div><?=number_format($total_debe_cpras,2,",",".")?></div></td>
    <td width="12%" id="totales" valign="middle"   class="borde_izquierda"><div><?=number_format($total_haber_cpras,2,",",".")?></div></td> 
  </tr>-->
</table>
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #6 (permalink)  
Antiguo 02/07/2009, 10:39
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 20 años
Puntos: 6
Respuesta: Ayuda con reporte ....

se entiende lo que hice ? cualq cosa preguntam,e je
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #7 (permalink)  
Antiguo 02/07/2009, 10:58
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 20 años
Puntos: 6
Respuesta: Ayuda con reporte ....

buenas de nuevo, me podrias decir bien para ahcer como detectar el cambio de proveeedor ?

lo hago como dijiste pero me meustra cualquier cosa, la idea seria

1111
1111
1111
mostrar renglon de subtotal --->
1112
1112
1112
mostrar renglon de subtotal --->
1113
1113
1113
mostrar renglon de subtotal --->


si me podrias decir como ahcer con una consullta mysql desde php como la siguiente, te agradezco


aca el ejemplo de la consulta php

Código PHP:
$sql "SELECT  * FROM compras";    
$result mysql_query($sql);
while(
$row mysql_fetch_array($result)) {



__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #8 (permalink)  
Antiguo 02/07/2009, 11:03
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 7 meses
Puntos: 839
Respuesta: Ayuda con reporte ....

A la consulta le agregas un ORDER BY para que aparezcan agrupados todos los proveedores. Entonces la lógica para hacerlo sería:
Código php:
Ver original
  1. $proveedor = '';
  2. while ($fila = mysql_fetch_array($result)) {
  3.     if ($proveedor != $fila['proveedor']) {
  4.         mostrar_subtotal();
  5.         nueva_fila();
  6.         $proveedor = $fila['proveedor'];
  7.     }
  8.     /* Mostrar datos */
  9. }
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 02/07/2009, 11:28
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 20 años
Puntos: 6
Respuesta: Ayuda con reporte ....

Cita:
Iniciado por David Ver Mensaje
A la consulta le agregas un ORDER BY para que aparezcan agrupados todos los proveedores. Entonces la lógica para hacerlo sería:
Código php:
Ver original
  1. $proveedor = '';
  2. while ($fila = mysql_fetch_array($result)) {
  3.     if ($proveedor != $fila['proveedor']) {
  4.         mostrar_subtotal();
  5.         nueva_fila();
  6.         $proveedor = $fila['proveedor'];
  7.     }
  8.     /* Mostrar datos */
  9. }
no me funciona :(

m lo muestra asi ...

1
renglon subtotal
1
1
2
renglon subtotal
2
2
3
renglon subtotal
3
3

cabe aclarar que yo en el primer renglon meustro como haces vos pero el Cliente

por lo cual tendria asi mi codigo

Código PHP:

while ($fila mysql_fetch_array($result)) {

    if (
$proveedor != $fila['proveedor']) {
        
mostrar_renglon_cliente();        
        
$proveedor $fila['proveedor'];
    }
    
// mostrar los demas renglones

   // aca iria para mostrar el subtotal

nueva_fila(); <--- que seria esa funcion que pones ?
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #10 (permalink)  
Antiguo 02/07/2009, 12:16
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 20 años
Puntos: 6
Respuesta: Ayuda con reporte ....

bue no se si em explico, espero que si :) je
__________________
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.
Respuesta




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