You are on page 1of 1

Sintaxe RDMAKE para acesso ao conteúdo de variáveis no GETDADOS (itens

)

GETDADOS é o nome do objeto usado pelo sistema SIGA Advanced para o cadastro de itens, como por exemplo os itens no cadastro de pedidos de venda. O objeto GETDADOS se utiliza de dois arrays para manter as informações: aHeader e aCols. O array aHeader contem informações sobre as colunas, tais como descrição, nome do campo, validação, etc, sendo que as rotinas que se utilizam do GETDADOS são as responsáveis pela montagem deste array. No caso de gatilhos, que são executados dentro de um ambiente aonde estes arrays já foram construídos, basta referenciar-se a eles para ter-se o acesso ao conteúdo de todos os campos, de acordo com as definições do Configurador. A estrutura do array aHeader é a seguinte: aHeader := { {“Título”, “Campo”, “Picture”, Tamanho, Decimal, “Validação”,; “Usado”, “Tipo”, “Alias”, “Contexto” }, {...}, ... } Este array é construído segundo a ordem estabelecida no Configurador. Portanto, para obterse a posição (ou seja, a coluna) de determinado campo no grid de dados, pode-se utilizar a seguinte sintaxe: nPosCod := aScan(aHeader,{ |x| Upper(AllTrim(x[2])) == “C6_PRODUTO” }) Esta sintaxe se utiliza da função aScan do Clipper para buscar no array aHeader a posição do campo C6_PRODUTO. Esta posição será atribuída à variável nPosCod. Note que basta substituir a variável e o nome do campo para obter outras variáveis com colunas de todos os campos desejados. Se o campo não estiver em uso, ou não existir, o conteúdo retornado pela função aScan será 0 (zero). Por fim, após ter-se as colunas dos campos desejados, pode-se obter ou mesmo alterar o conteúdo de qualquer campo no grid através do array aCols. Este é um array do tipo Linha x Coluna, que contem todas as linhas de dados. Pode-se acessar um campo através da sintaxe: uConteudo := aCols[nLinha,nColuna] Pode-se acessar qualquer linha de dados ou a linha corrente, que é indicada pela variável chamada n. Por exemplo, as seguintes linhas de programa demonstram um como usar estas técnicas em um gatilho para obter o código do produto do item corrente (este exemplo referese aos itens do pedido de venda) e, após pesquisar no SB1 (cadastro de produtos), sugerir a quantidade vendida a partir de um campo específico: // Colunas... nPosCod := aScan(aHeader,{ |x| Upper(AllTrim(x[2])) == “C6_PRODUTO” }) nPosQtd := aScan(aHeader,{ |x| Upper(AllTrim(x[2])) == “C6_QTDVEN” }) // Obtém o código do produto cCodigo := aCols[n,nPosCod] // Pesquisa dbSelectArea(“SB1”) dbSetOrder(1) dbSeek(xFilial(“SB1”)+cCod) // Altera a quantidade no grid aCols[n,nPosQtd] := SB1->B1_QTSUGER // Campo específico com a quantidade padrão __Return(SB1->B1_QTSUGER) Para uma melhor compreensão, você pode analisar os programas chamados RDMOD2.PRX e/ou RDMOD3.PRX que acompanham o Siga. Eles se encontram no diretório principal do sistema (geralmente \SIGAADV\) e demonstram rotinas usadas para cadastros semelhantes ao Pedido de Vendas e que trabalham com os arrrays mencionados.