DannyND 1 Denunciar post Postado Agosto 9, 2011 Boa tarde, Preciso agrupar duplicatas com subtotal para cada cliente, mas está aparecendo conforme imagem: Aparece um total encima e o último cliente não soma no final (último cliente não está sendo exibido nessa imagem). Segue código: $dt_ini = date("Y-m-d", mktime(0,0,0, date('m')-6 , date('d'), date('Y'))); ?> <link rel='stylesheet' type='text/css' href='estilos.php'> <title>Limite de Crédito</title> <table width='100%'> <tr> <td align='left' class='fp' colspan='6'>Duplicatas com data de vencimento maior que <?=convData($dt_ini)?></td> </tr> <tr><td> </td></tr> <? //apenas clientes ativos calculam limite $query = "select ti_clientes.cd_cliente,ti_clientes.nm_cliente,ti_clientes.dt_ult_compra,ti_dupl_quinzenal.duplicata,ti_dupl_quinzenal.valor,ti_dupl_quinzenal.dt_venc,ti_dupl_quinzenal.dt_liquido from ti_clientes,ti_dupl_quinzenal where ti_clientes.id_status='' and ti_clientes.nr_documento=ti_dupl_quinzenal.cgc and ti_dupl_quinzenal.dt_venc >='$dt_ini' and ti_dupl_quinzenal.id_situacao='Q' and ti_dupl_quinzenal.dt_liquido!='0000-00-00' order by ti_clientes.cd_cliente"; $resu = mysql_query($query); $numr = mysql_num_rows($resu); while($rrr = mysql_fetch_object($resu)): if($linha != $rrr->cd_cliente):?> <tr class='tt_rel'> <td colspan='5' align='right'>Total </td> <td><?=money($tt_duplis)?></td> <td colspan='2' align='right'>Média Liquidez </td> <td><?=$med_liq?> <i>dias de atraso</td> </tr> <tr class='tt'> <td colspan='5' align='right'>Limite Crédito (<?=$leg?>) </td> <td colspan='4' ><?=money($limite)?></td> </tr> <tr><td height='10'></td></tr> <tr class='tt_rel'> <td width="1%">Cód.Cli</td> <td width="12%">Cliente</td> <td width="03%">Status</td> <td width="05%">Dt.Ult.Compra</td> <td width="04%">Duplicata</td> <td width="03%">Vl Dupl</td> <td width="03%">Dt.Venc</td> <td width="03%">Dt.Liqu</td> <td width="05%">Liquidez</td> <tr> <? $linha = $rrr->cd_cliente; $tt_duplis = 0; $cont = 0; $media_liquidez = 0; $med_liq = 0; endif; $cd_cliente = $rrr->cd_cliente; $nm_cliente = substr($rrr->nm_cliente,0,20); $duplicata = $rrr->duplicata; $vl_dupl = $rrr->valor; $dt_ult_compra = convData($rrr->dt_ult_compra); $dt_venc = convData($rrr->dt_venc); $dt_liqui = convData($rrr->dt_liquido); $liquidez = difdata($rrr->dt_liquido,$rrr->dt_venc); $tt_duplis += $vl_dupl; $cont += count($liquidez); $media_liquidez += $liquidez; $med_liq = round($media_liquidez/$cont,0); if($med_liq <= '0'): $limite = ($tt_duplis * 3); //se paga em dia multiplica por 3 $leg = "Triplica Limite"; elseif($med_liq > '0' and $med_liq < '10'): $limite = ($tt_duplis * 2); //se paga com até 10 dias de atraso multiplica por 2 $leg = "Duplica Limite"; else: $limite = $tt_duplis; $leg = "Limite Normal"; //se paga com mais de 10 dias de atraso estaciona no valor endif; ?> <tr bgcolor='#F3F3F3'> <td class='fpp1'><?=$cd_cliente?></td> <td class='fpp1'><?=$nm_cliente?></td> <td class='fpp1'>Ativo</td> <td class='fpp1'><?=$dt_ult_compra?></td> <td class='fpp1'><?=$duplicata?></td> <td class='fpp1'><?=money($vl_dupl)?></td> <td class='fpp1'><?=$dt_venc?></td> <td class='fpp1'><?=$dt_liqui?></td> <td class='fpp1'><?=$liquidez?></td> </tr> <? endwhile; ?> </table> Se alguém puder ajudar eu agradeço. Compartilhar este post Link para o post Compartilhar em outros sites
Fernando Gyn 0 Denunciar post Postado Agosto 10, 2011 não entendi nada do seu código mas já tentou sum() e group by? @edit posta estruturas das tabelas com alguns dados ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Agosto 10, 2011 O problema não são os valores, mas a apresentação das informações. Tenho o cabeçalho do cliente com Cód. | Nome | Status | ... e no final de cada cliente tem um totalizador. O problema é que está aparecendo um totalizador no início do página, veja na imagem que postei. Compartilhar este post Link para o post Compartilhar em outros sites
Fernando Gyn 0 Denunciar post Postado Agosto 10, 2011 coloca essa linha antes do if $linha = $rrr->cd_cliente; ou passa esse trecho de validação para depois de onde escreve os dados. agora que percebi não pode passar para baixo entendi o porque esta validação esta lá em cima. pensei outra coisa também sem mover a linha que cite acima. você poderia ver se essa variavel linha não esta empty Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Agosto 10, 2011 Olá Fernando Gyn, Não deu certo. Troque o if de lugar e depois tentei com empty. Está listando tudo em separação do cabeçalho e ainda sim a parte do total aparece encima sem nenhum cliente. Compartilhar este post Link para o post Compartilhar em outros sites
Fernando Gyn 0 Denunciar post Postado Agosto 10, 2011 bom isso e por causa da sua validação tipo porque vai ser sempre diferente na primeira vez. bom tenta colocar tipo um contador. tipo antes do while você coloca $contador=0; e depois daquele lugar coloca outro valor tipo $contador++; e naquele if verifica se o valor e zero. porque seria a primeira vez. tipo naquele if verifica se e diferente se e diferente de 0 ou maior que zero e como fez o empty eu quando falei do empty seria para verificar se ele não era empty. tenta ai vamos ver o que dá. Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Agosto 10, 2011 Coloquei o contador e o primeiro cliente ficou sem cabeçalho rs, mas eu forçei o primeiro cabeçalho. Agora não aparece para o último cliente rs. Vou ver o que faço. Obrigada Fernando Gyn Compartilhar este post Link para o post Compartilhar em outros sites
Fernando Gyn 0 Denunciar post Postado Agosto 10, 2011 fala serio. da vontade de mexer nesses códigos seus fazer os meus testes. Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Agosto 10, 2011 Forçei o último total também e funfou :clap: <? conecta(); $dt_ini = date("Y-m-d", mktime(0,0,0, date('m')-6 , date('d'), date('Y'))); ?> <link rel='stylesheet' type='text/css' href='estilos.php'> <title>Limite de Crédito</title> <table width='100%'> <tr> <td align='left' class='fp' colspan='6'>Duplicatas com data de vencimento maior que <?=convData($dt_ini)?></td> </tr> <tr><td> </td></tr> <? $query = "select ti_clientes.cd_cliente,ti_clientes.nm_cliente,ti_clientes.dt_ult_compra,ti_dupl_quinzenal.duplicata,ti_dupl_quinzenal.valor,ti_dupl_quinzenal.dt_venc,ti_dupl_quinzenal.dt_liquido from ti_clientes,ti_dupl_quinzenal where ti_clientes.id_status='' and ti_clientes.nr_documento=ti_dupl_quinzenal.cgc and ti_dupl_quinzenal.dt_venc >='$dt_ini' and ti_dupl_quinzenal.id_situacao='Q' and ti_dupl_quinzenal.dt_liquido!='0000-00-00' order by ti_clientes.cd_cliente"; $resu = mysql_query($query); $numr = mysql_num_rows($resu); $contador = 0; while($rrr = mysql_fetch_object($resu)): if($contador == 0):?> <!-- cabeçalho do primeiro cliente --> <tr class='tt_rel'> <td width="1%">Cód.Cli</td> <td width="12%">Cliente</td> <td width="03%">Status</td> <td width="05%">Dt.Ult.Compra</td> <td width="04%">Duplicata</td> <td width="03%">Vl Dupl</td> <td width="03%">Dt.Venc</td> <td width="03%">Dt.Liqu</td> <td width="05%">Liquidez</td> <tr> <!-- fim do cabeçalho do primeiro cliente --> <? else: if($linha != $rrr->cd_cliente): ?> <tr class='tt_rel'> <td colspan='5' align='right'>Total <?print $linha?></td> <td><?=money($tt_duplis)?></td> <td colspan='2' align='right'>Média Liquidez </td> <td><?=$med_liq?> <i>dias de atraso</td> </tr> <tr class='tt'> <td colspan='5' align='right'>Limite Crédito (<?=$leg?>) </td> <td colspan='4' ><?=money($limite)?></td> </tr> <tr><td height='10'></td></tr> <tr class='tt_rel'> <td width="1%">Cód.Cli</td> <td width="12%">Cliente</td> <td width="03%">Status</td> <td width="05%">Dt.Ult.Compra</td> <td width="04%">Duplicata</td> <td width="03%">Vl Dupl</td> <td width="03%">Dt.Venc</td> <td width="03%">Dt.Liqu</td> <td width="05%">Liquidez</td> <tr> <? $linha = $rrr->cd_cliente; $tt_duplis = 0; $cont = 0; $media_liquidez = 0; $med_liq = 0; endif; endif; $contador++; $cd_cliente = $rrr->cd_cliente; $nm_cliente = substr($rrr->nm_cliente,0,20); $duplicata = $rrr->duplicata; $vl_dupl = $rrr->valor; $dt_ult_compra = convData($rrr->dt_ult_compra); $dt_venc = convData($rrr->dt_venc); $dt_liqui = convData($rrr->dt_liquido); $liquidez = difdata($rrr->dt_liquido,$rrr->dt_venc); $tt_duplis += $vl_dupl; $cont += count($liquidez); $media_liquidez += $liquidez; $med_liq = round($media_liquidez/$cont,0); if($med_liq >= '0' and $med_liq < '10'): $limite = ($tt_duplis * 2); //se paga com até 10 dias de atraso multiplica por 2 $leg = "Duplica Limite"; else: $limite = $tt_duplis; $leg = "Limite Normal"; //se paga com mais de 10 dias de atraso estaciona no valor endif; ?> <tr bgcolor='#F3F3F3'> <td class='fpp1'><?=$cd_cliente?></td> <td class='fpp1'><?=$nm_cliente?></td> <td class='fpp1'>Ativo</td> <td class='fpp1'><?=$dt_ult_compra?></td> <td class='fpp1'><?=$duplicata?></td> <td class='fpp1'><?=money($vl_dupl)?></td> <td class='fpp1'><?=$dt_venc?></td> <td class='fpp1'><?=$dt_liqui?></td> <td class='fpp1'><?=$liquidez?></td> </tr> <? endwhile; ?> <!-- total do último cliente --> <tr class='tt_rel'> <td colspan='5' align='right'>Total <?print $linha?></td> <td><?=money($tt_duplis)?></td> <td colspan='2' align='right'>Média Liquidez </td> <td><?=$med_liq?> <i>dias de atraso</td> </tr> <tr class='tt'> <td colspan='5' align='right'>Limite Crédito (<?=$leg?>) </td> <td colspan='4' ><?=money($limite)?></td> </tr> <!-- fim de total do último cliente --> </table> <?endif;?> Compartilhar este post Link para o post Compartilhar em outros sites
Fernando Gyn 0 Denunciar post Postado Agosto 10, 2011 toma cuidado um dia essas coisas irão te devorar. Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Agosto 10, 2011 toma cuidado um dia essas coisas irão te devorar. Como assim? Não entendi. Compartilhar este post Link para o post Compartilhar em outros sites
Fernando Gyn 0 Denunciar post Postado Agosto 10, 2011 esses códigos monstros e mal estruturados, um dia nem você vai conseguir manter. se bem que quem sou eu para falar algo nem programo mais dois anos parado. Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Agosto 10, 2011 esses códigos monstros e mal estruturados, um dia nem você vai conseguir manter. se bem que quem sou eu para falar algo nem programo mais dois anos parado. De boa.. o problema é o layout, os valores estão ok. Valeu por tudo Fernando ^_^ Compartilhar este post Link para o post Compartilhar em outros sites