Duvida Indice NTX

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Duvida Indice NTX

Mensagem por Taciane »

Boa tarde,

A muito tempo uso um sistema feito em clipper e tem atendido muito bem minhas necessidades, tem um relatório que preciso que seja impresso em ordem alfabética.

Tabela Clientes tenho os campos ( Conta | Nome | )
Tabela Movim tenho os campos ( Conta | CT | Doc |Data | Dat_Lanc | Valor )

O problema que quando indexo pelo campo NOME, tem uma instrução
Select 1
SEEK MOVIM->Conta // que retorna erro.

Pelo que puder ver ele abre a tabela clientes que esta indexada pelo campo conta e varre a tabela movim para ver se a conta existe, então se indexo a tabela clientes pelo nome o seek retorna erro pois não acha as contas. Seria isto ?

Então tenho :
CLIENTES indexando campo CONTA
MOVIM indexando ( str(year(dat_lan)4) + str (month(dat_lan),2) + str(day(dat_lanc),2) + doc

Acrescentei 3 linhas para gerar o arquivo em TXT, enquanto tento alterar a forma de impressão.

Neste caso tem como eu criar pegar SELECT 2 que chama a tabela MOVIM e juntar o indice para ficar NOME+( str(year(dat_lan)4) + str (month(dat_lan),2) + str(day(dat_lanc),2) + doc ?

Lembrando que o campo NOME esta na tela CLIENTES. :%

Código: Selecionar todos

CLEAR
mlinha = 66
mfolha = 1
mtotcre = 0.00
mtotdeb = 0.00
mtotvap = 0.00
mtotvales = 0.00
mtotodeb  = 0.00
mtotrest  = 0.00
mdata   = CTOD('  /  /  ')
mtotven = 0.00



 USE CLIENTES INDEX  CLIENTE
SELECT 2
  USE MOVIM    INDEX IMOVDOC
 SELECT 3
USE HISTOR   INDEX IHISTOR


            SET PRINTER TO TESTE.TXT

            SET DEVICE TO PRINT

            ?? CHR(27) + CHR(15)


 SET CONSOLE OFF
 SET PRINT ON
 ?? CHR(27) + CHR(15)
 SET PRINT OFF
 SET CONSOLE ON
DO WHILE .T.
 @10,10 SAY 'INFORME DATA DO MOVIMENTO'
 @10,36 GET mdata PICTURE '  /  /  '
 READ
 IF mdata = CTOD('  /  /  ')
  @20,1 SAY 'DATA EM BRANCO'
  WAIT ', ENTER'
  LOOP
 ELSE
  EXIT
 ENDIF
ENDDO 
SELECT 2
SEEK STR(YEAR(mdata),4) + STR(MONTH(mdata),2) + STR(DAY(mdata),2)
SET DEVICE TO PRINT    
DO WHILE .NOT. EOF()
 IF DAT_LANC < mdata
  SKIP
  LOOP
 ENDIF
 IF DAT_LANC > mdata
  EXIT
 ENDIF 
 SELECT 1
 SEEK MOVIM->CONTA
 IF EOF()
  SET DEVICE TO SCREEN
  @22,1 SAY 'CONTA NAO CADASTRADA,'
  @22,22 SAY MOVIM->CONTA
  WAIT ', ENTER'
  SET DEVICE TO PRINT
  SELECT 2
  SKIP
  LOOP
 ENDIF


 IF mlinha > 58
  DO CCCABP20 WITH mfolha, mdata, mlinha
 ENDIF


 @mlinha,4   SAY CONTA
 @mlinha,10  SAY NOME
 @mlinha,44  SAY TIPO
 SELECT 3
 SEEK MOVIM->CT
 IF EOF()
  @mlinha,66  SAY '*******'
 ELSE
  @mlinha,66  SAY HISTORICO
 ENDIF 
 SELECT 2
 @mlinha,78 SAY DOC
 IF CT < 10
  mtotdeb = mtotdeb + VALOR
  DO CASE
   CASE CT = 01
    mtotvap = mtotvap + VALOR
   CASE CT = 02
    mtotvales = mtotvales + VALOR
   CASE CT = 06
    mtotrest  = mtotrest  + VALOR
   OTHERWISE 
    mtotodeb  = mtotodeb  + VALOR
  ENDCASE
    
  @mlinha,94 SAY VALOR PICTURE '9,999,999,999.99'
 ELSE
  mtotcre = mtotcre + VALOR
  @mlinha,111 SAY VALOR PICTURE '9,999,999,999.99'
 ENDIF
 mlinha = mlinha + 1
 SKIP
ENDDO
IF mlinha > 55
 DO CCCABP20 WITH mfolha, mdata, mlinha
ENDIF
mlinha = mlinha + 1
@mlinha,10 SAY 'TOTAL DE VENDAS A PRAZO = >'
@mlinha,94 SAY mtotvap PICTURE '9,999,999,999.99'
mlinha = mlinha + 1
@mlinha,10 SAY 'TOTAL DE VALES .......  = >'
@mlinha,94 SAY mtotvales PICTURE '9,999,999,999.99'
mlinha = mlinha + 1
@mlinha,10 SAY 'TOTAL DE RESTAURANTE    = >'
@mlinha,94 SAY mtotrest  PICTURE '9,999,999,999.99'
mlinha = mlinha + 1
@mlinha,10 SAY 'TOTAL DE OUTROS DEBITOS = >'
@mlinha,94 SAY mtotodeb PICTURE '9,999,999,999.99'
mlinha = mlinha + 1
@mlinha,35 SAY 'T O T A L    = >'
@mlinha,94 SAY mtotdeb PICTURE '9,999,999,999.99'
@mlinha,111 SAY mtotcre PICTURE '9,999,999,999.99'

EJECT

?? CHR(27) + CHR(15)

SET DEVICE TO SCREEN
SET PRINTER TO


 EJECT
 SET CONSOLE OFF
 SET PRINT ON
 ?? CHR(27) + '@'
 SET PRINT OFF
 SET CONSOLE ON
 SET DEVICE TO SCREEN
 CLOSE ALL
 EJECT
 CLEAR
RETURN
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Duvida Indice NTX

Mensagem por Jairo Maia »

Olá Taciane,

Seja bem vinda ao fórum.

Primeiro uma dica: Troque esta linha:

Código: Selecionar todos

SEEK STR(YEAR(mdata),4) + STR(MONTH(mdata),2) + STR(DAY(mdata),2)
Por esta:

Código: Selecionar todos

SEEK DToS( mdata )  // retorna a data no formato YYYYMMDD
Taciane, como nenhum colega ainda respondeu, creio que a dificuldade em entender seu problema não foi só meu, então vou perguntar algumas coisas:

Quando você encontra a data desejada no arquivo MOVIM, imediatamente (como você já disse), você retorna o arquivo CLIENTES, e para pegar a conta você faz:

Código: Selecionar todos

SEEK MOVIM->CONTA
Qual o motivo disso? seria você pegar o conteúdo do campo conta do arquivo movim daquele registro que foi encontrado a data? Sem sim, como o pointer em MOVIM já está posicionado, então basta usar:

Código: Selecionar todos

cNumeoConta := MOVIM->conta
Quanto a criar um índice com campos de dois arquivos não sei se é possível, talvez seria o caso de usar o SET RELATION pelo campo conta. Mas precisamos entender melhor o que acontece.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Duvida Indice NTX

Mensagem por Nascimento »

Taciane » 14 Nov 2015 16:37
tem um relatório que preciso que seja impresso em ordem alfabética.
justo jairo , ontem eu ia pedir para ela postar os dbf´s mais faltou energia rsrs
esta um pouco confuso este fonte dela
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Duvida Indice NTX

Mensagem por Taciane »

Olá,

Obrigada pela dica Jairo,

Realmente esta meio sem sentido voltar ao Select 1 na Tabela clientes apenas para confirmar a existência da conta, se houve o lançamento é porque a conta existe.

Vou postar a tabela CLIENTES e a tabela MOVIM, talvez assim fique mais prático.
Anexos
MOVIM.rar
Arquivo Clientes e Movim
(4.67 MiB) Baixado 303 vezes
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Duvida Indice NTX

Mensagem por JoséQuintas »

Sinceramente, achei confusa a pergunta, e o fonte só complicou mais.

Usar select 1, select 2, isso é ruim demais de se entender e usar.

Se a questão é apenas colocar em ordem, há diversas opções:

1) Criar arquivo temporário com os campos que deseja, pra indexar depois

2) Usar SET RELATION e criar índice

Código: Selecionar todos

SELECT 0
USE clientes INDEX código
SELECT 0
USE movimento
SET RELATION TO CodCliente INTO clientes
INDEX ON clientes->Nome + Dtos( movimento->Data) TO temp
3) Indexar por uma função

Código: Selecionar todos

SELECT 0
USE MOVIMENTO
INDEX ON MeuIndice() TO TEMP
...

FUNCTION MeuIndice()
   SELECT clientes
   SEEK movimento->CodCliente
   SELECT movimento
   RETURN clientes->Nome + Dtos( movimento->Data ) 
Qualquer que seja a opção, melhor deixar de usar SELECT 1, SELECT 2, porque só vai complicar mais ainda o fonte.
E lógico... o SEEK tem que ser de acordo com a chave do índice senão não funciona.

Lembrando que se tiver data inicial, a data do SEEK precisa existir.
A opção é usar softseek, mas dependendo do índice precisa algo mais.

Código: Selecionar todos

SET SOFTSEEK ON
SEEK cNome + Dtos( dData )
SET SOFTSEEK OFF
IF cNome != nome .OR. Eof()
   ? "Não achou nome"
ENDIF
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Duvida Indice NTX

Mensagem por alxsts »

Olá!

Realmente, este código pode e deve ser bem melhorado! A Exemplo do Simões, vi o post na data da publicação mas não deu tempo mexer.

Não olhei os arquivos de dados que foram anexados. O que me chamou a atenção na abertura dos arquivos foi:

Código: Selecionar todos

mdata   = CTOD('  /  /  ')
mtotven = 0.00

 USE CLIENTES INDEX  CLIENTE
SELECT 2
  USE MOVIM    INDEX IMOVDOC
 SELECT 3
USE HISTOR   INDEX IHISTOR
Antes de abrir a tabela clientes, não é executado SELECT 0 e nem existe a cláusula NEW no comando USE. Assim, certamente o arquivo foi aberto na primeira área livre encontrada, que pode não ser a área 1. Desta forma, ao se fazer SELECT 1, corre-se o risco de não haver nenhum arquivo aberto naquela área ou de se estar com outro arquivo aberto. Em ambos os casos, o erro é certo...
Taciane escreveu:O problema que quando indexo pelo campo NOME, tem uma instrução
Select 1
SEEK MOVIM->Conta // que retorna erro.
. Qual é a mensagem de erro?
[]´s
Alexandre Santos (AlxSts)
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Duvida Indice NTX

Mensagem por Taciane »

Olá, Alxsts

Código: Selecionar todos

mdata   = CTOD('  /  /  ')
	mtotven = 0.00
	 USE CLIENTES INDEX  CLIENTE
	SELECT 2
	  USE MOVIM    INDEX IMOVDOC
	 SELECT 3
	USE HISTOR   INDEX IHISTOR
No fonte acima a tabela clientes esta indexada pela conta ( indice-> CLIENTE )

Então quando esta parte do fonte é executada.

Código: Selecionar todos

SELECT 1
	 SEEK MOVIM->CONTA
	 IF EOF()
	  SET DEVICE TO SCREEN
	  @22,1 SAY 'CONTA NAO CADASTRADA,'
	  @22,22 SAY MOVIM->CONTA
	  WAIT ', ENTER'
Não dá erro, mas se altero a chave do indexador para o campo NOME. vai dar erro de conta não encontrada

Pensei que como o segundo select era o 2, pela lógica o anterior seria considerado como 1.


Jairo Maia, obrigada pela dica.

Já atualizei a linha

Código: Selecionar todos

SEEK DToS( mdata )

Achei legal a ideia do JoseQuintas do índice usando SET RELATION, mas ainda não tive êxito em gerar o relatório por ordem alfabética.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Duvida Indice NTX

Mensagem por Jairo Maia »

Olá Taciane,

Por favor, responda o seguinte: O que você quer é que se existir movimento para a data desejada, então emitir um relatório em ordem alfabética por clientes que tiveram movimento em suas contas naquela data? Se for isso clareou bastante.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Duvida Indice NTX

Mensagem por JoséQuintas »

Esqueci de outra opção, usando os dois arquivos de uma vez.
Depende da situação, mas não deixa de ser uma opção:

Código: Selecionar todos

SELECT 0
USE clientes
INDEX ON Nome TO temp1
SELECT 0
USE movimento
INDEX ON Dtos( Data) TO temp2
SELECT clientes
GOTO TOP
DO WHILE .NOT. Eof()
   SELECT movimento
   SEEK Dtos( dDataInicial )
   DO WHILE movimento->Cliente == clientes->Código .AND. .NOT. Eof()
       SKIP
   ENDDO
   SELECT clientes
   SKIP
ENDDO
Alexsts, se confundiu, talvez por já não fazer parte do dia a dia:

Código: Selecionar todos

SELECT 1
USE CLIENTES
SELECT 2
USE MOVIMENTO

SELECT A
USE CLIENTES
SELECT B
USE MOVIMENTO

SELECT 0
USE CLIENTES
SELECT 0
USE MOVIMENTO

USE CLIENTES NEW
USE MOVIMENTO NEW
As três formas acima são equivalentes.
Só que as duas primeiras definem uma área específica.


Eu quis dizer no restante do fonte.
Só comparar as duas formas abaixo.
Em qual delas o programador vai entender/conferir o fonte sem precisar ficar vasculhando o fonte inteiro?

Código: Selecionar todos

SELECT clientes
SELECT movimento
clientes->Codigo
Movimento->Cliente

SELECT 1
SELECT 2
1->Código
2->Cliente
Não é questão do compilador aceitar ou não, é questão de facilitar entender o fonte sem ter que ficar vasculhando pra saber qual arquivo está aberto em qual área.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Duvida Indice NTX

Mensagem por JoséQuintas »

Vamos simplificar a questão:

Tem o arquivo clientes, que entre outras coisas, tem o código e o nome.

Tem o arquivo de movimento, que entre outras coisas, tem a data e o código do cliente (que chamou de conta)

Quer listar o movimento em ordem do que, e filtrando o que?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Duvida Indice NTX

Mensagem por Taciane »

Olá
Por favor, responda o seguinte: O que você quer é que se existir movimento para a data desejada, então emitir um relatório em ordem alfabética por clientes que tiveram movimento em suas contas naquela data? Se for isso clareou bastante.
É isto mesmo Jairo.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Duvida Indice NTX

Mensagem por Jairo Maia »

Olá Taciane,

Faça um teste com esse exemplo e poste se funcionou ou não, e claro, se nao funcionar informe o que ainda está faltando:

Código: Selecionar todos

CLEAR
mlinha = 66
mfolha = 1
mtotcre = 0.00
mtotdeb = 0.00
mtotvap = 0.00
mtotvales = 0.00
mtotodeb  = 0.00
mtotrest  = 0.00
mdata   = CTOD("")
mtotven = 0.00

Set Century On   // ano com 4 digitos
Set Date Brit    // data no formato dd/mm/yyyy

x:=Nil           // será usada no laço For/Next
nRegistros:=0    // guardará o tamanho da matriz no laço CLIENTES
aMovTmp:={}      // inicia matriz de dados temporarios
aMovimento:={}   // inicia a matriz dos dados em MOVIM

 SELECT 1  // previne o erro levantado pelo Alexandre (alxsts)
 USE CLIENTES INDEX  CLIENTE

 SELECT 2
 USE MOVIM INDEX IMOVDOC

 SELECT 3
 USE HISTOR INDEX IHISTOR

 SET PRINTER TO TESTE.TXT

 SET DEVICE TO PRINT

 ?? CHR(27) + CHR(15)

 SET CONSOLE OFF
 SET PRINT ON
 ?? CHR(27) + CHR(15)
 SET PRINT OFF
 SET CONSOLE ON
DO WHILE .T.
 @10,10 SAY 'INFORME DATA DO MOVIMENTO'
 @10,36 GET mdata PICTURE "@D"
 READ
 If Lastkey() = 27  // se pressionar ESC sai do exemplo...
  Return
 ElseIF Empty( mdata )  // data em branco ou invalida
  @20,1 SAY 'DATA INVALIDA'
  WAIT ', ENTER'
  LOOP
 ELSE
  EXIT
 ENDIF
ENDDO 

SELECT 2
SEEK DToS( mdata )

If !Found()
 Alert( "Nenhum movimento em => " + DToC( mdata ) )
 Return
Else
 
 /*
   Vamos iniciar um laço e pegar todos os dados do relatorio em
   MOVIN e colocar numa matriz bidimensional...
 */
 While mdata = dat_lanc
  AaDd( aMovTmp, { conta, ct, RecN() } )
  Skip
 EndDo
 
 nRegistros:=Len( aMovTmp )  // total de registros com movimento na data
 Select 1  // vamos trazer o arquivo CLIENTES para pegar os nomes
 For x=1 To nRegistros       // para cada resgistro
  Seek aMovTmp[ x, 1 ]       // procura a conta
  If Found()                 // se encontrou adiciona como valida em aMovimento
    /*
      vamos inserir em aMovimento nome, tipo, conta, controle e posicao do registro em MOVIM
    */
    AaDd( aMovimento, { nome, tipo, aMovTmp[ x, 1 ], aMovTmp[ x, 2 ], aMovTmp[ x, 3 ] } )
  EndIf
 Next
 
 Release aMovTmp  // desocupa a memoria, nao precisamos mais dela
 
 /*
   agora vamos ordenar a matriz aMovimento pelo nome
 */
 ASort( aMovimento, Nil, Nil, { |x,y| x[1] < y[1] } )
 
 SELECT 2  // vamos deixar MOVIM como arquivo corrente
 
EndIf

SET DEVICE TO PRINT    

nRegistros:=Len( aMovimento )  // pega total de registros validos
For x=1 To nRegistros          // inicia a pesquisa para cada registro

 IF mlinha > 58
  DO CCCABP20 WITH mfolha, mdata, mlinha
 ENDIF
 
 /*
   vamos diretamente para o registro em MOVIM
 */
 GO aMovimento[ x, 5 ]  // vai para o registro na tabela MOVIM

 @ mlinha,  4  SAY aMovimento[ x, 3 ]  // CONTA
 @ mlinha, 10  SAY aMovimento[ x, 1 ]  // NOME
 @ mlinha, 44  SAY aMovimento[ x, 2 ]  // TIPO

 SELECT 3
 SEEK aMovimento[ x, 4 ]  // procura CT em HISTOR
 IF !Found()  // se nao achou...
  @ mlinha, 66 SAY '*******'
 ELSE
  @ mlinha, 66  SAY HISTORICO
 ENDIF 

 SELECT 2  // volta MOVIM
 @ mlinha,78 SAY DOC
 IF CT < 10
  mtotdeb = mtotdeb + VALOR
  DO CASE
   CASE CT = 01
    mtotvap = mtotvap + VALOR
   CASE CT = 02
    mtotvales = mtotvales + VALOR
   CASE CT = 06
    mtotrest  = mtotrest  + VALOR
   OTHERWISE 
    mtotodeb  = mtotodeb  + VALOR
  ENDCASE
  @ mlinha,94 SAY VALOR PICTURE '9,999,999,999.99'
 ELSE
  mtotcre = mtotcre + VALOR
  @mlinha,111 SAY VALOR PICTURE '9,999,999,999.99'
 ENDIF
 mlinha = mlinha + 1

Next

IF mlinha > 55
 DO CCCABP20 WITH mfolha, mdata, mlinha
ENDIF

mlinha = mlinha + 1
@ mlinha,10 SAY 'TOTAL DE VENDAS A PRAZO = >'
@ mlinha,94 SAY mtotvap PICTURE '9,999,999,999.99'
mlinha = mlinha + 1
@ mlinha,10 SAY 'TOTAL DE VALES .......  = >'
@ mlinha,94 SAY mtotvales PICTURE '9,999,999,999.99'
mlinha = mlinha + 1
@ mlinha,10 SAY 'TOTAL DE RESTAURANTE    = >'
@ mlinha,94 SAY mtotrest  PICTURE '9,999,999,999.99'
mlinha = mlinha + 1
@ mlinha,10 SAY 'TOTAL DE OUTROS DEBITOS = >'
@ mlinha,94 SAY mtotodeb PICTURE '9,999,999,999.99'
mlinha = mlinha + 1
@ mlinha,35 SAY 'T O T A L    = >'
@ mlinha,94 SAY mtotdeb PICTURE '9,999,999,999.99'
@ mlinha,111 SAY mtotcre PICTURE '9,999,999,999.99'

EJECT

?? CHR(27) + CHR(15)

SET DEVICE TO SCREEN
SET PRINTER TO

 EJECT
 SET CONSOLE OFF
 SET PRINT ON
 ?? CHR(27) + '@'
 SET PRINT OFF
 SET CONSOLE ON
 SET DEVICE TO SCREEN
 CLOSE ALL
 EJECT
 CLEAR
RETURN
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Duvida Indice NTX

Mensagem por JoséQuintas »

Uma observação:

O índice e SEEK anteriores usam Str(), o que pode causar espaço em branco no resultado.
Caso seja trocado por Dtos(), terá que trocar tanto no índice quanto no SEEK.

Considerando 01/01/2015

No anterior usando Str: "2015 1 1"
Com Dtos(): "20150101"
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Duvida Indice NTX

Mensagem por Taciane »

Olá,

Fiquei sem internet a maior parte do dia, somente agora tive como acessar para ver o tópico.

No cabeçalho e no final de cada página pelo menos no TXT esta aparecendo a palavra NIL.



Mudei o índice conforme mencionado pelo JoséQuintas, pois não estava achando nada no relatório.

Nem sei como agradecer o apoio.

JoséQuintas apesar que ainda não tive êxito usando o Set Relation reparei que o índice ficou muito grande mais de 30mb, apenas a título de curiosidade e aprendizado neste caso seria viável e possível criar o indice somente com data do período informada para geração do relatório ?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Duvida Indice NTX

Mensagem por JoséQuintas »

A palavra NIL se refere a variável sem conteúdo. Confirme as variáveis nessa posição de impressão.

Sobre indexar parcial, depende da RDD utilizada.
Quando eu usava Clipper, usava a SIXCDX e ela permitia isso.

INDEX ON <expressão da chave> TO <arquivo> FOR <expressão do filtro>

Vai ter que confirmar com a RDD que usa.

Ou, na falta de outra opção, criar um arquivo temporário só com o que interessa.

Ou a outra opção: dependendo do cadastro de produtos, usar ele durante o relatório como principal.
Vou postar um exemplo em seguida.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder