Diferentes totalizações na mesma quebra.

(DanielLN) #1

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á!

(Haroldo) #2

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

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

(DanielLN) #3

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!

(Haroldo) #4

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.

(system) #5

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

(Haroldo) #6

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

(system) #7

entendi, mas queria saber dele.

(DanielLN) #8

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!

(Haroldo) #9

Manda a estrutura de sua tabela que damso um jeito.

(system) #10

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;

(DanielLN) #11

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.

(Haroldo) #12

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

(system) #13

deste jeito eu xconsegui fazer o relatorio do seu jeito

(Agostinho) #14

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?