Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DannyND

[Resolvido] Exibir resultados (com subtotal) por cliente

Recommended Posts

Boa tarde,

 

Preciso agrupar duplicatas com subtotal para cada cliente, mas está aparecendo conforme imagem:

 

agrupa_dcli.gif

 

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.