ERRO DE ARRAY NO CLIPPER (error base/1132 bound error:AADD)

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

liloots
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 21 Jan 2014 08:52
Localização: Santos

ERRO DE ARRAY NO CLIPPER (error base/1132 bound error:AADD)

Mensagem por liloots »

Primeiramente bom dia a todos,

tenho um programa feito em Clipper que faz uma consulta em várias tabelas diferentes e depois gera um arquivo TXT.. ele funcionava perfeitamente,
só que de uns dias pra cá ele vem dando esse erro "error base/1132 bound error:AADD" eu estou ciente que é ocasionado devido ao "estouro" da matriz,
irei postar o código aqui, será que alguém poderia me ajudar a resolver isso se é que é possível?!

obs: eu não entendo muito da linguagem e o código está meio bagunçado mesmo.

Código: Selecionar todos

// Listar todos os processos do desembaracados no mês
//
//   Processo         Registro  Data         Valor Armaz. Valor Cif   Armazem
//                              Desembaraco      (R$)       (R$)
//   XXXXXXXXXXXXXXX  999999-9   99/99/99    999.999,99  999.999,99   XXXXXXXX 
//
// OUTRAS DESPESAS .: VERIFICA A DATA DO FATURAMENTO    
// (RIREGI->DT_FATURA) e busca no MENSAL (mesmo ANO e MES do DT_FATURA)
// Busca o registro e soma todos os valores com FM001 >= 194 ou
// ( FM001 >= 211 e <= 306) ou FM001 = 360
//
//
#include "inkey.ch"

Function planilha()

local lOK := .t.
Local cREFERENCIA := ""
Local cVISTORIA := ""
Local cAGENTE := ""
Local cNRTG := ""
Local cNFE := ""
Local aVETOR :={}
Local cREG := ""	
Local cCLIENTE := "0586"
Local dDOCSLI := ctod(space(8))
Local dEMISLI := ctod(space(8))
Local cNRLI := ""
Local cGREENL := ""
Local dNFEREC := ctod(space(8))
Local dPROTANV:= ctod(space(8))
Local dCOA := ctod(space(8))
Local dDATATG := ctod(space(8))
Local dPROTG := ctod(space(8))
Local dSOLIC := ctod(space(8))
Local dRECEB := ctod(space(8))
Local dLIBERADO := ctod(space(8))
Local cARMAZ  := ""

Private DIVISAO := 4
Private cANO := ""
Private cMES := ""
//variaveis de tela de GET

Set Date brit
Set epoch to 1980
Set Dele on

cls
@ 01,01 say 'Gerando arquivo, aguarde...'

set cons off
set prin on
set prin to "zp.txt"

Use F:\SISCEX\RIREGI New Shared 
index on IMPORTADOR+REFERENCIA to "tmpy.ntx"

Use f:\siscex\RIREGF new shared 
Set index to f:\siscex\riregf

Use f:\siscex\RIADIC new shared 
Set index to f:\siscex\riadic

Use f:\siscex\RIITEM new shared 
Set index to f:\siscex\riitem

Use f:\siscex\LIREGI new shared
index on left(REFERENCIA,6) to APAGA01

Use f:\siscex\rireg3 alias DOCS new shared
index on REGISTRO to "tmpx.ntx"

if RIREGI->(dbseek(cCLIENTE))

  while ! RIREGI->(eof()) .and.;
    left(RIREGI->IMPORTADOR,4) == "0586"

    dEMISLI := ctod(space(8))

		if LIREGI->(dbseek(RIREGI->(left(REGISTRO,6)) ) )
      dEMISLI := LIREGI->DATA
		  cREG := left(RIREGI->REGISTRO,6)
    endif

		if RIREGI->CANAL == "1"
      cCANAL := "VERDE     "
		elseif RIREGI->CANAL == "2"
      cCANAL := "AMARELO   "
		elseif RIREGI->CANAL == "3"
      cCANAL := "VERMELHO  "
		elseif RIREGI->CANAL == "4"
      cCANAL := "CINZA     "
		else
      cCANAL := "          "
    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))
    
      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "EMBARQUE AUTORIZADO EM " $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      cGREENL := ""

      if left(RIREGF->REGISTRO, 6) == cREG
        cGREENL := substr(RIREGF->FRASE, 22, 8)
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "LI 1" $ RIREGF->FRASE ) 
			  RIREGF->(dbskip())
      enddo

      cNRLI := ""

      if left(RIREGF->REGISTRO, 6) == cREG
        cNRLI := substr(RIREGF->FRASE, 3, 13)
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "MERCADORIA NO" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      cARMAZ := ""

      if left(RIREGF->REGISTRO, 6) == cREG
        cARMAZ := substr(RIREGF->FRASE, 15, 20)
      endif
         
    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "LI DEFERIDA P/DPF EM" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      cGREENL := ""

      if left(RIREGF->REGISTRO, 6) == cREG
        cGREENL := substr(RIREGF->FRASE, 21, 6)
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "NOTA FISCAL ELETRONICA RECEBIDA" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      dNFEREC := ctod(space(8))

      if left(RIREGF->REGISTRO, 6) == cREG
        dNFEREC := RIREGF->DATA
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "PROTOCOLO ANVISA OK" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      dPROTANV := ctod(space(8))

      if left(RIREGF->REGISTRO, 6) == cREG
        dPROTANV := RIREGF->DATA
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "INSPECAO PREVISTA PARA" $ RIREGF->FRASE )
        RIREGF->(dbskip())
      enddo

      cVISTORIA := ""

      if left(RIREGF->REGISTRO, 6) == cREG
        cVISTORIA := substr(RIREGF->FRASE, 23, 7)
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "INSPECAO ANVISA PREVISTA P/" $ RIREGF->FRASE )
        RIREGF->(dbskip())
      enddo

      if left(RIREGF->REGISTRO, 6) == cREG
        cVISTORIA := substr(RIREGF->FRASE, 28, 7)
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "AGENTE DE CARGA:" $ RIREGF->FRASE )
        RIREGF->(dbskip())
      enddo

      cAGENTE := ""

      if left(RIREGF->REGISTRO, 6) == cREG
        cAGENTE := substr(RIREGF->FRASE, 17, 15)
      endif
         
    endif

    cFATCOM = ""

    if DOCS->(dbseek(RIREGI->REGISTRO))
      do while DOCS->REGISTRO == RIREGI->REGISTRO
        if DOCS->TIPO == "01"
          cFATCOM += alltrim(DOCS->NUMERO)
          cFATCOM += " "
        endif
        DOCS->(dbskip())
      enddo
    endif

    cDATAFATURA := ""

    if RIREGF->(dbseek(RIREGI->REGISTRO))
    
      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "DOCS P/BAIXA TG" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      cNRTG := ""

      if left(RIREGF->REGISTRO, 6) == cREG
        cNRTG := substr(RIREGF->FRASE, 17, 3)
      endif
    
    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))
    
      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "CERT.ANALISE ASSINADO RESP.TEC.REC" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      dCOA := ctod(space(8))

      if left(RIREGF->REGISTRO, 6) == cREG
        dCOA := RIREGF->DATA
      endif
    
    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "DOCS P/BAIXA TG" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      dDATATG := ctod(space(8))

      if left(RIREGF->REGISTRO, 6) == cREG
        dDATATG := RIREGF->DATA
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "PROTOCOLO P/BAIXA TG" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      dPROTG := ctod(space(8))

      if left(RIREGF->REGISTRO, 6) == cREG
        dPROTG := RIREGF->DATA
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "TERMO GUARDA ORIG" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      dLIBERADO := ctod(space(8))

      if left(RIREGF->REGISTRO, 6) == cREG
        dLIBERADO := RIREGF->DATA
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "SOLICITADO TERMO DE GUARDA" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      dSOLIC := ctod(space(8))

      if left(RIREGF->REGISTRO, 6) == cREG
        dSOLIC := RIREGF->DATA
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "TERMO DE GUARDA RECEBIDO" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      dRECEB := ctod(space(8))

      if left(RIREGF->REGISTRO, 6) == cREG
        dRECEB := RIREGF->DATA
      endif

    endif

    if RIREGF->(dbseek(RIREGI->REGISTRO))

      while left(RIREGF->REGISTRO, 6) == cREG .and.;
        ! ( "NFE NR.:" $ RIREGF->FRASE ) 
        RIREGF->(dbskip())
      enddo

      cNFE := ""

      if left(RIREGF->REGISTRO, 6) == cREG
        cNFE := substr(RIREGF->FRASE, 9, 5)
      endif

    endif

    RIITEM->(dbseek(RIREGI->REGISTRO))
    RIADIC->(dbseek(RIREGI->REGISTRO))

    if RIREGI->RSIGLA == "SA"
      cTIPO := "MARITIMO"
    else
      cTIPO := "AEREO"
    endif

    aadd(aVETOR,{alltrim(RIREGI->(left(REGISTRO,6)+"-"+substr(REGISTRO,7,1))),;
      alltrim(RIREGI->REFERENCIA),;
                      RIREGI->DATAABERT,;
                      dEMISLI,;
                      alltrim(cGREENL),;
                      RIREGI->DESCARGA,;
                      iif(! empty(alltrim(RIREGI->ARM_NROS)),alltrim(RIREGI->ARM_NROS),cARMAZ),;
                      dPROTANV,;
                      alltrim(cVISTORIA),;
                      RIREGI->DATA_DI,;
                      alltrim(RIREGI->(left(NR_DI,2)+"/"+substr(NR_DI,3,7)+"-"+substr(NR_DI,10,1))),;
                      alltrim(cCANAL),;
                      alltrim(cFATCOM),;
                      cDATAFATURA,;
                      dNFEREC,;
                      RIREGI->DT_DESEMB,;
                      RIREGI->EMISSAO,;
                      RIREGI->CHEGADA,;
			           		  alltrim(cNRTG),;
          					  dCOA,;
                      dDATATG,;
                      dPROTG,;
                      dLIBERADO,;
                      RIREGI->HOUSE,;
                      cTIPO,;
                      cNFE,;
                      dSOLIC,;
                      dRECEB,;
                      RIREGI->DT_CARREG,;
                      alltrim(cNRLI),;
                      cAGENTE } )

    RIREGI->(dbskip())

  enddo

endif

//Fecha a tabela
RIREGI->(dbclosearea())
RIREGF->(dbclosearea())
LIREGI->(dbclosearea())
DOCS->(dbclosearea())
RIITEM->(dbclosearea())
RIADIC->(dbclosearea())

qout("Levantamento Processos Sanofi Aventis")
qout()
qout("Registro;Referencia;Data Abertura;Prot. LI;Green Light;Remocao;Armazem;Prot. Anvisa;Vistoria;Registro;Nr. DI;Canal;Nr. Fatura;Data Fatura;NFE Rec.;Desembaraco;Embarque;Chegada;NRTG;COA;Data Tg;Protocolo Tg;Liberado;BL/HAWB;Marit./Aereo;NFE;Solicitado;Recebido;Carregamento;Numero LI;Agente")

nCONT := 1

Do while nCONT <= len(aVETOR)

      qout(aVETOR[nCONT][1]+";"+;
           aVETOR[nCONT][2]+";"+;
           iif(! empty(aVETOR[nCONT][3]), dtoc(aVETOR[nCONT][3]),"")+";"+;
           iif(! empty(aVETOR[nCONT][4]), dtoc(aVETOR[nCONT][4]),"")+";"+;
           aVETOR[nCONT][5]+";"+;
           iif(! empty(aVETOR[nCONT][6]), dtoc(aVETOR[nCONT][6]),"")+";"+;
           aVETOR[nCONT][7]+";"+;
           iif(! empty(aVETOR[nCONT][8]), dtoc(aVETOR[nCONT][8]),"")+";"+;
           aVETOR[nCONT][9]+";"+;
           iif(! empty(aVETOR[nCONT][10]), dtoc(aVETOR[nCONT][10]),"")+";"+;
           aVETOR[nCONT][11]+";"+;
           aVETOR[nCONT][12]+";"+;
           aVETOR[nCONT][13]+";"+;
           aVETOR[nCONT][14]+";"+;
           iif(! empty(aVETOR[nCONT][15]), dtoc(aVETOR[nCONT][15]),"")+";"+;
           iif(! empty(aVETOR[nCONT][16]), dtoc(aVETOR[nCONT][16]),"")+";"+;
           iif(! empty(aVETOR[nCONT][17]), dtoc(aVETOR[nCONT][17]),"")+";"+;
           iif(! empty(aVETOR[nCONT][18]), dtoc(aVETOR[nCONT][18]),"")+";"+;
		   aVETOR[nCONT][19]+";"+;
		   iif(! empty(aVETOR[nCONT][20]), dtoc(aVETOR[nCONT][20]),"")+";"+;
		   iif(! empty(aVETOR[nCONT][21]), dtoc(aVETOR[nCONT][21]),"")+";"+;
		   iif(! empty(aVETOR[nCONT][22]), dtoc(aVETOR[nCONT][22]),"")+";"+;
		   iif(! empty(aVETOR[nCONT][23]), dtoc(aVETOR[nCONT][23]),"")+";"+;
		   aVETOR[nCONT][24]+";"+;
		   aVETOR[nCONT][25]+";"+;
		   aVETOR[nCONT][26]+";"+;
		   iif(! empty(aVETOR[nCONT][27]), dtoc(aVETOR[nCONT][27]),"")+";"+;
		   iif(! empty(aVETOR[nCONT][28]), dtoc(aVETOR[nCONT][28]),"")+";"+;
		   iif(! empty(aVETOR[nCONT][29]), dtoc(aVETOR[nCONT][29]),"")+";"+;
           aVETOR[nCONT][30]+";"+;
		   aVETOR[nCONT][31] )
 
      nCONT := nCONT +1

      if nCONT > len(aVETOR)
         // Desvia para o Marcador logo abaixo ...
         EXIT
      endif

enddo
set prin to
set prin off
set cons on

Retu(Nil)
//
//

muito obrigado..
tenham um bom dia.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

ERRO DE ARRAY NO CLIPPER (error base/1132 bound error:AADD)

Mensagem por alxsts »

Olá!

Seja bem-vindo ao fórum!

Bem, como você deve saber, em Clipper, um array pode ter no máximo 4096 elementos por dimensão. No caso presente, este limite foi superado.

Você poderá, ao invés de armazenar as informações em um array, colocá-las em um arquivo temporário. Fica até mais fácil para fazer um browse depois...

Outra opção seria compilar o teu aplicativo em Harbour. No Harbour não existe a limitação de 4096 para os arrays.

Se optar pela segunda opção, use a busca do fórum e localize vários tópicos informando como migrar para Harbour.
[]´s
Alexandre Santos (AlxSts)
Responder