Conhece o conceito de "array"? É um campo indexado.
Algumas tabelas do HCM usam muito isto. Vou dar um exemplo:
Suponhamos que você tenha um acumulador mensal.
Você poderia criar uma tabela com a estrutura:
- CHAVE (chave para encontrar o registro que quer, depende do seu contexto)
- ANO - INT - >>>9
- JAN - DECIMAL - >>>>>>>>9.99
- FEV - DECIMAL - >>>>>>>>9.99
- MAR - DECIMAL - >>>>>>>>9.99
- ABR - DECIMAL - >>>>>>>>9.99
- MAI - DECIMAL - >>>>>>>>9.99
- JUN - DECIMAL - >>>>>>>>9.99
- JUL - DECIMAL - >>>>>>>>9.99
- AGO - DECIMAL - >>>>>>>>9.99
- SET - DECIMAL - >>>>>>>>9.99
- OUT - DECIMAL - >>>>>>>>9.99
- NOV - DECIMAL - >>>>>>>>9.99
- DEZ - DECIMAL - >>>>>>>>9.99
Ou pode ter uma outra estrutura assim:
- CHAVE (chave para encontrar o registro que quer, depende do seu contexto)
- ANO - INT - >>>9
- MES - INT - >9
- VALOR - DECIMAL - >>>>>>>>9.99
Ou, usando o "extent", que seria assim:
- CHAVE (chave para encontrar o registro que quer, depende do seu contexto)
- ANO - INT - >>>9
- VALOR - EXTENT 12 - DECIMAL - >>>>>>>>9.99
Desta forma o campo "valor" é acessado assim:
VALOR[1]
VALOR[2]
VALOR[3]
VALOR[4]
VALOR[5]
VALOR[6]
VALOR[7]
VALOR[8]
VALOR[9]
VALOR[10]
VALOR[11]
VALOR[12]
É como se houvessem 12 campos "embutidos" em um só.
Como exemplo, veja a tabela "inform_dirf".
Se você buscar a estrutura dela vai ter o seguinte:
Table: inform_dirf
Field Name Data Type Flg Format
--------------------------- ---------- --- --------------------------------
cdn_empresa char im x(3)
cdn_estab char im x(5)
num_ano_refer_inform_dirf inte im 9999
cdn_funcionario inte im zzzzzzz9
idi_tip_inform_dirf inte im 99
qti_depend_irf inte[12] z9
val_deduc_depend_irf deci-2[12] zzz,zz9.99
val_deduc_palim_irf deci-2[12] zzz,zzz,zz9.99
val_deduc_inss_irf deci-2[12] zzz,zzz,zz9.99
val_deduc_previd_privad deci-2[12] >>>,>>>,>>9.99
val_base_brut_calc_irf deci-2[12] zzz,zzz,zz9.99
val_base_liq_irf deci-2[12] zzz,zzz,zz9.99
val_irf_retid deci-2[12] zzz,zzz,zz9.99
cdn_empres_centrdor char x(3)
cdn_estab_centrdor char x(5)
val_resto_previd_privad deci-2[12] >>>,>>>,>>9.99
cod_usuar_ult_atualiz char x(12)
dat_ult_atualiz date 99/99/9999
hra_ult_atualiz char 99:99:99
cod_livre_1 char x(100)
cod_livre_2 char x(100)
dat_livre_1 date 99/99/9999
dat_livre_2 date 99/99/9999
log_livre_1 logi Sim/Não
log_livre_2 logi Sim/Não
num_livre_1 inte >>>>>9
num_livre_2 inte >>>>>9
val_livre_1 deci-4 zzz,zzz,zz9.9999
val_livre_2 deci-4 zzz,zzz,zz9.9999
log_inic_atualiz_irf_ppr logi[12] m Sim/Não
val_irf_depos_judic deci-2[12] zzz,zzz,zz9.99
idi_tip_gerac_dirf inte 9
Veja que alguns campos tem o "[12]", indicando que o campo trata-se de um "extent".
Neste caso específico, é um índice para cada mês.
A chave primária desta tabela são os campos:
cdn_empresa
cdn_estab
cdn_funcionario
num_ano_refer_inform_dirf
idi_tip_inform_dirf
Com isto existe um único registro por ano, sendo que neste registro existem dados para todos os meses do referido ano.
Tem um exemplo no "help" do Progress que eu acho bem interessante para aprender.
EXTENT function
DEFINE VARIABLE int_value AS INTEGER NO-UNDO EXTENT 3 INITIAL [1, 2, 3].
DEFINE VARIABLE ix AS INTEGER NO-UNDO .
DEFINE VARIABLE tot AS INTEGER NO-UNDO LABEL "The total is".
DO ix = 1 TO EXTENT(int_value):
tot = tot + int_value[ix].
END.
DISPLAY tot. |
Precisando de algo mais a respeito, estou a disposição.
Abraço,
Marcelo Torres