Diferentes totalizações na mesma quebra.

Oi Pessoal, tô com um problema pra montar um relatório especificamente. Se alguém puder ajudar, agradeço!

Tenho permissão apenas de consulta aos registros de uma tabela e preciso montar um relatório com quebra. Meu problema é que os valores dessa tabela possuem créditos e débitos diferenciados respectivamente pelas letras “C” e “D”, mas o valor é sempre positivo. Dessa forma, quando tenho que obter o saldo, os valores que deveriam ser subtraídos acabam sendo somados. Por exemplo:

Tabela: Lançamentos

Categoria Tipo Lançamento Valor
A D 10,00
A C 20,00
A C 15,00

O saldo que deve ser de 25,00 aparece como sendo 45,00

Isso acontece na totalização dentro da quebra.
Para a totalização final consegui resolver fazendo um select somando tudo que é crédito e outro somando tudo que é débito.
Tentei inserir o mesmo código lá no onGroupBy, mas não deu certo.

Obrigado desde já!

na onRecord teste se for D multiplique o valor por -1 e devolva no mesmo campo:

If ({Tipolancamento}=“D”) {Valor}={Valor}*-1;

Oi Haroldo, olha só, já tinha feito exatamente isso e funciona numa consulta normal sem quebra. Mas quando uso na quebra, os valores de débitos dos registros ficam negativos, mas o engraçado é que o saldo exibido continua como se todos os valores fossem positivos. Só pra você ver, multiplicando os valores de débito por (-1), o resultado fica assim:

Cartão Produto Tipo Valor
01060-0 ProdutoA D 10,00-
01060-0 ProdutoA D 30,00-
01060-0 ProdutoA D 6,70-
01060-0 ProdutoA D 10,00-
01060-0 ProdutoA C 30,07
01070-7 ProdutoB D 10,00-
01060-0 ProdutoA D 10,00-
01070-7 ProdutoB D 25,00-
01070-7 ProdutoB D 10,00-
141,77

O resultado certo seria: -81,63 e não 141,77.

Estranho… tô continuando a fuçar aqui… mas não estou conseguindo.
Qualquer ajuda é bem vinda!

Obrigado de novo!

Então vamos trabalhar no seu sql, não sei que banco vc usa, mas retorne duas colunas uma para debito e outra para credito, usando a função case ou if (depente do banco), ai vc terá um total de debitos e um total de creditos e o saldo do movimento é a diferença entre os dois.

vc fez isto com as funções do sc, ou via codificação ?

No item SQL da sua aplicação de consulta você altera sua Query SQL para a sugestão que eu dei.

entendi, mas queria saber dele.

Oi Netsoft, então, havia feito via codificação. Praticamente do jeito que o Haroldo havia comentado.
No evento onRecord, tinha colocado:
if({tipolancamento} == ‘D’)
{
$inverte=-1;
{valor} = {valor}*$inverte;
}

Os números do registro ficavam negativos, mas continuavam somando como se fossem positivos…rs.

Haroldo, estou utilizando o MySQL 4.1 e a interface gráfica o SQLyog 6.13.
Estou tentando fazer 2 níveis de quebra, diferenciando os totais de crédito e débito… se não der certo, vou ter que mexer no SQL mesmo… o problema é que não sou nenhum expert nisso.

Mantenho vcs informados!

Obrigado!

Manda a estrutura de sua tabela que damso um jeito.

da um echo {tipolancamento} e ve o valor que sai em cada linha.

o negocio e o seguinte que percebi, quando ele entra a primeira vez todos os valores devem ficar negativos, coloca um else assim.

if({tipolancamento} == ‘D’)
{
$inverte=-1;
} else {
$inverte = 1;
}
{valor} = {valor}*$inverte;

Haroldo / Netsoft e interessados.
Provisoriamente solicitei ao dono da base de dados que gravasse os valores com o sinal de ‘-’ para os lançamentos de débitos.
Dessa forma, o relatório com as quebras saem perfeitos.
Essa solução é temporária… em breve posto como ficou a situação em definitivo.

Obrigado a todos.

Ainda não me conformo, que vc não tenha resolvido adequadamente esse problema. Mas pelo menos resolveu paliativamente…

deste jeito eu xconsegui fazer o relatorio do seu jeito

pessoal, alguma solução para este caso, eu estou desenvolvendo um sistema de caixa e tenho em minha tabela de movimento de caixa um campo valor e outro campo aonde informe se é D ou C, e preciso somar o saldo atual considerando este 2 campos, no SC5 tem como fazer isto, ou AINDA não?