Verificar se há falhas em uma sequencia de números

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Verificar se há falhas em uma sequencia de números

Mensagem por rubens »

Bom dia...

Tenho um arquivo com as notas fiscais emitidas e tenho um campo numero. Daí preciso gerar um relatório que me mostre os números que faltam na sequencia.
Tipo
numero
1
2
3
5
6
7
8
10

Daí preciso de um relatório que me informe que falta o número 4,9 e assim por diante até chegar ao final do arquivo.
Alguém tem alguma sugestão do algoritimo/rotina para esse relatório...

Obrigado

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Verificar se há falhas em uma sequencia de números

Mensagem por Jairo Maia »

Olá Rubens,

Não sei se é a melhor forma, mas funcionou. Veja:

Código: Selecionar todos

/*
  Usar a lib xhb
*/

#include "InKey.Ch"

REQUEST Hb_CodePage_PT850

Function Main()

 Local nInicial := 1, nFinal, nVerifica, aFaltantes:={}, nRecords
 
 Hb_SetCodePage( "PT850" )

 DBCreate( "DBFTeste", { {"codigo", "N", 8, 0} } )
 Use "DBFTeste" Shared New
 
 For x=1 To 20 Step 2
  Append Blank
  Replace codigo With x
 Next
 
 Index On codigo To Index1
 
 Go Bott
 nFinal := codigo
 Go Top
 
 Clear Screen
 
 While .T.

  @ 05, 10 Say "Entre com o Número Inicial:" Get nInicial Picture "99999999" Valid nInicial > 0
  Read
  
  If LastKey() = K_ESC
   Return Nil
  ElseIf !DbSeek( nInicial )
   Alert( "Número Inicial Não Encontrado!" )
   Loop
  EndIf

  nVerifica := nInicial + 1
  Exit
  
 EndDo
  
 While nVerifica < nFinal
  If !DbSeek( nVerifica )
   AaDd( aFaltantes, Hb_NToS( nVerifica ) )
  EndIf
  nVerifica++
 EndDo

 If Len( aFaltantes ) > 0
  Clear Screen
  DispOutAt( 1, 5, "Lacunas Entre as Notas: "+Hb_NToS( nInicial ) + " e " + Hb_NToS( nFinal ) )
  AChoice( 3, 5, 20, 15, aFaltantes, .T., Nil , 0 )
 EndIf

Return Nil
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Verificar se há falhas em uma sequencia de números

Mensagem por Itamar M. Lins Jr. »

Ola!

Código: Selecionar todos


Function lacunas(nComecoNFE,nFimNFE) // Acredito que neste caso o correto é usar data Inicial e final.
LOCAL nProximaNFE
 fVaiPara(nComecoNFE)

Do While ...

 nProximaNFE := field->Numero_NFE + 1
 dbskip()

If nProxima_NFE < field->Numero_NFE

   for n:=nProxima_NFE to field->Numero_NFE
       jogue na array o intervalo faltante, pode ser 1 ou vários.
   next

endif

If nFim == field->Numero_NFE //pode usar final do mês ou data final.
  ? "já fui !!!"
  exit
endif

EndDo
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder