Relatório com problemas
Moderador: Moderadores
Bem pessoal,
Com relação ao "remendo" no relatório de saldos devedores, descobri meu erro.
Eu estava usando : mSal_ATU = SAL_INI + mvalor + mSAL_ACERTO , sendo que o correto é :
SELECT 1
mSAL_ACERTO = 0.00
mSAL_ATU = SAL_INI + mvalor + SAL_ACERTO
Quanto a impressão dos saldos zerados, ainda continuo tentando..
Com relação ao "remendo" no relatório de saldos devedores, descobri meu erro.
Eu estava usando : mSal_ATU = SAL_INI + mvalor + mSAL_ACERTO , sendo que o correto é :
SELECT 1
mSAL_ACERTO = 0.00
mSAL_ATU = SAL_INI + mvalor + SAL_ACERTO
Quanto a impressão dos saldos zerados, ainda continuo tentando..
Bom dia, pessoal
Ápos resolver a duras penas o problema do relatório anterios, no qual havia a necessidade de um “remendo”
no saldo de uma conta em especifico, continuo na peleja com meu relatório de saldo devedores.
Gostaria de tirar uma dúvida, a única coisa que creio eu possa estar fazendo com que saia valores zerados no meu relatório seja meu indice (incliente.ntx)
no meu relatório uso o banco da dados chamado clientes com a seguinte estrutura:
conta......C
nome......C
endereco.......C
cidade......C
tipo........C
cnpjcpf.......N
folha.........N
Sal_INI......N
Dat_INI......date
Sal_ATU......N
Dat_ATU......date
Sal_ATU2......N
Desativada......C
Sal_Acerto.....N
Uso um indice chamado incliente.ntx com key = nome; e outro arquivo chamado movim.dbf ( os campos : conta,ct,doc,data,dat_lanc,valor) com um indice imovim.ntx com e key = conta + str(year(data),4) + str(month(data),2) + str(day(data),2) é nele que ficam os lançamentos diários dos clientes cadastrados no banco de dados clientes.
Mudei meu indice incliente.ntx para : Key = nome+str(SAL_ATU) e continua sendo impresso os clientes com saldo zerado.
Já li e re-li a apostila que peguei aqui no site, mas não estou conseguindo descobrir onde estou errando.
Este meu indice está correto ?
Estou pedindo para indexar pelo nome e pelo valor do saldo atual e no meu fonte peço p/ que sejam impressos apenas os clientes com saldo > 0.
Ápos resolver a duras penas o problema do relatório anterios, no qual havia a necessidade de um “remendo”
no saldo de uma conta em especifico, continuo na peleja com meu relatório de saldo devedores.
Gostaria de tirar uma dúvida, a única coisa que creio eu possa estar fazendo com que saia valores zerados no meu relatório seja meu indice (incliente.ntx)
no meu relatório uso o banco da dados chamado clientes com a seguinte estrutura:
conta......C
nome......C
endereco.......C
cidade......C
tipo........C
cnpjcpf.......N
folha.........N
Sal_INI......N
Dat_INI......date
Sal_ATU......N
Dat_ATU......date
Sal_ATU2......N
Desativada......C
Sal_Acerto.....N
Uso um indice chamado incliente.ntx com key = nome; e outro arquivo chamado movim.dbf ( os campos : conta,ct,doc,data,dat_lanc,valor) com um indice imovim.ntx com e key = conta + str(year(data),4) + str(month(data),2) + str(day(data),2) é nele que ficam os lançamentos diários dos clientes cadastrados no banco de dados clientes.
Mudei meu indice incliente.ntx para : Key = nome+str(SAL_ATU) e continua sendo impresso os clientes com saldo zerado.
Já li e re-li a apostila que peguei aqui no site, mas não estou conseguindo descobrir onde estou errando.
Este meu indice está correto ?
Estou pedindo para indexar pelo nome e pelo valor do saldo atual e no meu fonte peço p/ que sejam impressos apenas os clientes com saldo > 0.
Código: Selecionar todos
*PROGRAMA : CCOP19
*AUTOR : GVL
*DATA : 01/12/2005
*OBJETIVO : EMITIR RELACAO DE SALDOS DEVEDORES
*
SET DATE BRITI
SET CENTURY ON
SET EPOC TO 1990
CLEAR
mlinha = 66
mfolha = 1
mtotsal = 0.00
mdata = CTOD(' / / ')
mtipo = 0
sele 1
USE CLIENTES INDEX INCLIENT
SELECT 2
USE MOVIM INDEX IMOVIM
do while .t.
@10,01 SAY 'INFORME DATA LIMITE'
@10,21 GET mdata
@11,01 SAY 'INFORME TIPO'
@11,21 GET mtipo PICTURE '9'
@11,23 SAY '1 -> CARRETEIRO, 2 -> CLIENTES, 3 -> FUNCIONARIO'
READ
if lastkey() == 27
exit
endif
m_op := [ ]
@ 24,5 say [Confirma ? ] get m_op pict [!] valid(m_op$"SN")
read
if m_op == [S]
ipr1(mdata,mtipo)
exit
endif
enddo
SET CENTU OFF
CLOSE ALL
return
*----------------------------------------------------
function ipr1(mdta,mtpo)
local filtro := ""
if mtpo == 1
filtro := [CONTA >= "]+"00001"+[" .AND. CONTA <= "]+"19999"+["]
m_texto := "CARRETEIROS"
elseif mtpo == 2
filtro := [CONTA >= "]+"20000"+[" .AND. CONTA <= "]+"29999"+["]
m_texto := "CLIENTES"
else
filtro := [CONTA >= "]+"30000"+[" .AND. CONTA < "]+"99998"+["]
m_texto := "FUNCIONARIOS"
endif
sele 1
set filter to &filtro
goto top
SET CONSOLE OFF
set device to print
SET PRINT ON
?? CHR(27) + CHR(15)
DO WHILE .NOT. EOF()
SELECT 2
mvalor = 0.00
SEEK CLIENTES->CONTA
DO WHILE CLIENTES->CONTA = CONTA .AND. .NOT. EOF()
IF DATA <= mdta
IF CT < 10
mvalor = mvalor - VALOR
ELSE
mvalor = mvalor + VALOR
ENDIF
ENDIF
SKIP
ENDDO
SELECT 1
mSAL_ATU := SAL_INI + mvalor
IF mSAL_ATU > 0
IF mlinha > 50
@1,10 SAY '** RELATORIO ** - CONTA CORRENTE'
@1,65 SAY 'FOLHA'
@1,69 SAY mfolha PICTURE '999'
@2,20 SAY 'RELACAO DE SALDOS DEVEDORES ATE '+DTOC(mdta)
@2,75 SAY m_texto
@4,4 SAY 'CONTA'
@4,14 SAY 'NOME'
@4,50 SAY 'TIPO'
@4,86 SAY 'SALDO'
mfolha++
mlinha = 5
ENDIF
@mlinha,4 SAY CONTA
@mlinha,10 SAY NOME
@mlinha,44 SAY TIPO
@mlinha,82 SAY mSAL_ATU PICTURE '@E 9,999,999,999.99'
mlinha++
mtotsal := mtotsal + mSAL_ATU
ENDIF
SKIP
ENDDO
@mlinha,35 SAY 'T O T A L = >'
@mlinha,82 SAY mtotsal PICTURE '9,999,999,999.99D'
?? CHR(27) + '@'
EJECT
SET DEVICE TO SCREEN
SET PRINT TO
SET PRINT OFF
SET PRINT ON
RETURN
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
Como postado por um colega forense anteriormente voce deve modificar o IF variavel > 0.00 para if variavel > 0.
Se voce realemten deseja tirar da apresentacao os calores zerados e/ou negativos tente usar um SET FILTER apos a abertura do banco de dados.
SET FILTER TO variavel/campo > 0
Ira filtrar todos os valores maiores que zero.
Em suas criticas voce deve usar
If variavel/campo <= > 0
skip
loop
endif
Voce podera também idexar o seu arquivo retirando os valores zerados da amostra.
INDEX ON campo TO indice FOR campo > 0
Nao use 0.00, pois como foi dito 0 não é igual a 0.00.
@braços :?)
Se voce usar o seu comando de critica como
Como postado por um colega forense anteriormente voce deve modificar o IF variavel > 0.00 para if variavel > 0.
Se voce realemten deseja tirar da apresentacao os calores zerados e/ou negativos tente usar um SET FILTER apos a abertura do banco de dados.
SET FILTER TO variavel/campo > 0
Ira filtrar todos os valores maiores que zero.
Em suas criticas voce deve usar
If variavel/campo <= > 0
skip
loop
endif
Voce podera também idexar o seu arquivo retirando os valores zerados da amostra.
INDEX ON campo TO indice FOR campo > 0
Nao use 0.00, pois como foi dito 0 não é igual a 0.00.
@braços :?)
Se voce usar o seu comando de critica como
Bom dia, Rocinha e amigos do forum
Bem desde o dia 08 quando viu sua resposta estou tentado resolver o problema deste relatório. Fiz conforme abaixo,
*** testes com o selt filter ****
SELECT 1 (( banco de dados clientes ))
Usando um indice ntx (( chamado -> incliente)) que é indexado pelo NOME
set filter to mSAL_ATU/SAL_ATU >0
mSAL_ACERTO = 0.00
mSAL_ATU = SAL_INI + mvalor
IF mSAL_ATU/SAL_ATU >0
SKIP
LOOP
ENDIF
IF mlinha > 50
@1,10 SAY '** ** - CONTA CORRENTE'
@1,65 SAY 'FOLHA'
@1,69 SAY mfolha PICTURE '999'
@2,20 SAY 'RELACAO DE SALDOS DEVEDORES ATE'
Foram impressos valores : -160,00, -258,00 e 690,00
Usando :
Set Filter to SAL_ATU >0
..
..
If SAL_ATU > 0
Foi impresso apenas valor : -160,00
Usando :
Set Filter to mSAL_ATU >0
..
..
If mSAL_ATU > 0
Foi impresso : apenas uma conta com valor = 0.00
Usando
Set Filter to SAL_ATU >0
..
..
If SAL_ATU < 0
Foram impressos : 05 contas com valores negativos e uma zerada.
Usando
Set Filter to mSAL_ATU >0
..
..
If mSAL_ATU < 0
Foram impressos 04 contas com valores negativos.
Usando
Set Filter to mSAL_ATU/SAL_ATU >0
..
..
If mSAL_ATU/SAL_ATU < 0
Foram impressos 03 contas, sendo duas com valores negativos e 01 com valor positivo.
Usar o indice seria bem mais fácil, porém uso indices ntx, e pesquisando aqui no site descobri que indices ntx não funcionam com clausulas condicionais. Tenho intenção de mudar meus indices para cdx, mas quando terminar de migrar para o harbour.
A não ser que tenha como usar os dois indices no programa, ai eu poderia criar um indice cdx apenas para liberar este relatório.
Olhando os retornos impressos não vejo nenhuma lógica, pois sendo > ou < saem valores + e -.
Bem desde o dia 08 quando viu sua resposta estou tentado resolver o problema deste relatório. Fiz conforme abaixo,
*** testes com o selt filter ****
SELECT 1 (( banco de dados clientes ))
Usando um indice ntx (( chamado -> incliente)) que é indexado pelo NOME
set filter to mSAL_ATU/SAL_ATU >0
mSAL_ACERTO = 0.00
mSAL_ATU = SAL_INI + mvalor
IF mSAL_ATU/SAL_ATU >0
SKIP
LOOP
ENDIF
IF mlinha > 50
@1,10 SAY '** ** - CONTA CORRENTE'
@1,65 SAY 'FOLHA'
@1,69 SAY mfolha PICTURE '999'
@2,20 SAY 'RELACAO DE SALDOS DEVEDORES ATE'
Foram impressos valores : -160,00, -258,00 e 690,00
Usando :
Set Filter to SAL_ATU >0
..
..
If SAL_ATU > 0
Foi impresso apenas valor : -160,00
Usando :
Set Filter to mSAL_ATU >0
..
..
If mSAL_ATU > 0
Foi impresso : apenas uma conta com valor = 0.00
Usando
Set Filter to SAL_ATU >0
..
..
If SAL_ATU < 0
Foram impressos : 05 contas com valores negativos e uma zerada.
Usando
Set Filter to mSAL_ATU >0
..
..
If mSAL_ATU < 0
Foram impressos 04 contas com valores negativos.
Usando
Set Filter to mSAL_ATU/SAL_ATU >0
..
..
If mSAL_ATU/SAL_ATU < 0
Foram impressos 03 contas, sendo duas com valores negativos e 01 com valor positivo.
Usar o indice seria bem mais fácil, porém uso indices ntx, e pesquisando aqui no site descobri que indices ntx não funcionam com clausulas condicionais. Tenho intenção de mudar meus indices para cdx, mas quando terminar de migrar para o harbour.
A não ser que tenha como usar os dois indices no programa, ai eu poderia criar um indice cdx apenas para liberar este relatório.
Olhando os retornos impressos não vejo nenhuma lógica, pois sendo > ou < saem valores + e -.
Pessoal,
Mudei meus indices para cdx, já que aceitam clausulas condicionais, e tem outras
Vantagens que não vou mencionar aqui para não gerar nenhuma discução.
Todos os indices estão funcionando, sei que vão pensar porque ele não usou sub-indices, bem ainda não estou preparado para isto. mais a frente faço isto. A proveitei o mudei meu executável para 32bits minha compilação com o harbou esta um pouco dramatica devido aos arquivos .rc e .res que pelo que me disseram são arquivos de icones, porém não uso este tipo de aplicação em meu programa, com isto por hora estou usando o mymake,.bem esta é outra questão é vou coloca-la no lugar certo.
A questão é a seguinte:
Quero saber como gerar um indices usando informacões de dois banco de dados. no meu caso clientes.dbf e movim.dbf,
Isto porque meu relatório usa informações destes dois arquivos.
Seria clientes : conta+Sal_ATU+SAl_INI e
Movim : valor
Preciso juntar tudo e criar um indice cdx.
Obrigado a todos pela ajuda até aqui.
Mudei meus indices para cdx, já que aceitam clausulas condicionais, e tem outras
Vantagens que não vou mencionar aqui para não gerar nenhuma discução.
Código: Selecionar todos
FUNCTION CCOP34()
run del c:\contacor\*.CDX
select 1
use movim
if !file ("CONTADAT.CDX")
if !file ("IMOVCON.CDX") .or. !file ("IMOVDOC.CDX")
if !file ("IMOVIM.CDX")
index on CONTA+DTOS(DATA) TAG indice1 TO CONTADAT
index on CONTA+STR(CT,3) TAG indice1 TO IMOVCON
index on STR(YEAR(DAT_LANC),4) + STR(MONTH(DAT_LANC),2) + STR(DAY(DAT_LANC),2) + DOC TAG indice1 TO IMOVDOC
index on CONTA + STR(YEAR(DATA),4) + STR(MONTH(DATA),2) + STR(DAY(DATA),2) TAG indice1 TO IMOVIM
select 2
use clientes
if !file ("ICLIENTE.CDX") .or. !file ("INCLIENT.CDX")
if !file ("INCLIENT_SAL_ATU.CDX")
index on CONTA TAG indice1 TO ICLIENTE
index on NOME TAG indice1 TO INCLIENT
index on CONTA + STR(SAL_ATU,14,2) + STR(SAL_INI,14,2) TAG indice1 TO SAL_ATU FOR SAL_ATU >0index on CONTA + STR(SAL_ATU,14,2) + STR(SAL_INI,14,2) TAG indice1 TO SAL_ATU FOR SAL_ATU >0
select 3
use histor
if !file ("HISTOR.CDX")
index on CT TAG indice1 TO IHISTOR
endif
endif
endif
endif
endif
endif
CLEAR
RETURN NIL
A questão é a seguinte:
Quero saber como gerar um indices usando informacões de dois banco de dados. no meu caso clientes.dbf e movim.dbf,
Isto porque meu relatório usa informações destes dois arquivos.
Seria clientes : conta+Sal_ATU+SAl_INI e
Movim : valor
Preciso juntar tudo e criar um indice cdx.
Obrigado a todos pela ajuda até aqui.
Bom dia, amigos do forum
Tentei criar um indice temporário mas não tive sucesso com isso voltei para meus ntx Se algum puder gostaria de um exemplo de filtragem de dados para uma variável de memória, que é resultado da soma de dois campos pertencentes a bancos diferentes. Quero que seje impresso somente os SAL_ATU maiores que zero.
Select 1 // abre banco clientes que possue o campo Sal_INI
Select 2 // abre o banco movim que possue o campo Valor
MSAL_ATU = 0 // variável de memória
mvalor =0 // encontra-se no banco movim
mSAL_ATU = SAL_INI + valor
..
...
....
SELECT 1
mSAL_ATU = SAL_INI + mvalor
set filter to mSAL_ATU > 0 { Não funciona }
IF mSAL_ATU > 0
SKIP
LOOP
ENDIF
..
...
....
Tentei criar um indice temporário mas não tive sucesso com isso voltei para meus ntx Se algum puder gostaria de um exemplo de filtragem de dados para uma variável de memória, que é resultado da soma de dois campos pertencentes a bancos diferentes. Quero que seje impresso somente os SAL_ATU maiores que zero.
Select 1 // abre banco clientes que possue o campo Sal_INI
Select 2 // abre o banco movim que possue o campo Valor
MSAL_ATU = 0 // variável de memória
mvalor =0 // encontra-se no banco movim
mSAL_ATU = SAL_INI + valor
..
...
....
SELECT 1
mSAL_ATU = SAL_INI + mvalor
set filter to mSAL_ATU > 0 { Não funciona }
IF mSAL_ATU > 0
SKIP
LOOP
ENDIF
..
...
....

