Afinal, o que é aHeader e aCols?

No artigo de hoje, vou falar um pouco sobre duas variáveis famosas em grids no Protheus, o aHeader e o aCols.

Se você já desenvolveu pontos de entrada, ou já trabalhou com grids no Protheus no modelo tradicional (sem ser em MVC), já deve ter se deparado com essa dupla dinâmica, aHeader e aCols.

Sem essas duas variáveis, a grid não irá funcionar corretamente, sendo que as duas são fundamentais para a montagem da estrutura do objeto.

Então abaixo iremos ver um pouco mais sobre essas variáveis.

aHeader:

O aHeader é um array multidimensional, que armazena as definições e configurações das colunas, vinculando ou não a campos do dicionário.

Dessa forma, cada linha desse array, possui configurações como:

  • Título da Coluna
  • Tamanho da coluna em caracteres (e se for numérico, tamanho de decimais)
  • Máscara da coluna (por exemplo: @!, !E 999.99, etc)
  • Validação da coluna
  • Entre outros

Existem algumas funções de apoio, como GDFieldPos, que procura a posição da coluna no aHeader. Uma outra forma de buscar também, é utilizar um aScan da posição 2 que é o nome do campo, por exemplo:

nPosUM := aScan(aHeader, {|x| AllTrim(Upper(x[2])) == "D1_UM" })

Na linha acima, estamos percorrendo o aHeader, e quando a posição 2 for igual a D1_UM, irá armazenar na variável nPosUM.

aCols:

Já o aCols, é o array com o conteúdo que foi inserido pelo usuário ou que já foi gravado no Banco de Dados.

A composição dele é de linhas e colunas. Sendo que as linhas são quando o usuário aperta para baixo e preenche as informações (ai será criado uma linha no aCols).

E as colunas são feitas conforme o tamanho do aHeader. Por exemplo, se o aHeader tem 2 campos parametrizados, como código e nome. Cada linha no aCols terá essas duas colunas de código e nome, e uma coluna que fica invisível na tela, que define se a linha está excluída ou não (com .T. ou com .F.).

Resumindo e Exemplos:

aHeader -> é um array com as definições dos campos que serão usadas na grid, por exemplo, o campo de produto será o C7_PRODUTO do tipo caractere, o item será o C7_ITEM do tipo caractere, o valor total será o C7_TOTAL do tipo numérico com a máscara @E 999,999.99.

aCols -> são as linhas da grid, sendo que cada coluna é referente a um campo que foi criado no aHeader.

Então supondo que, o aHeader[2] for referente ao C7_PRODUTO, se você pegar o aCols[7][2], você está pegando a linha 7 da grid, na coluna 2 que é o campo de produto.


Esse tema foi uma sugestão do internauta Marcelo Silva.

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

4 Responses

  1. WiLL Sposito disse:

    ahhh…se tivesse um post desse quando comecei com o protheus lá em 2010, precisei fazer um ponto de entrada na tela de pedido de venda, para preencher a grid de itens do pedido de venda, até entender esse aheader e acols, foi uma luta..varias noites sem dormir, muito boa a explicação dan.

  2. Edson Novaes disse:

    Muito bom parabéns pelo conhecimento, caso eu for imprimir o conteúdo dentro do aheader e acols você iria inserir mais uma linha de código ali ?

Deixe uma resposta para WiLL SpositoCancelar resposta

Terminal de Informação