Oct 27

O uso de fórmulas é bastante usado pelos aplicativos do GAS.

Nosso problema aqui é que normalmente as fórmulas são resultados de alguma busca de informações no banco de dados.

Imagine a seguinte situação:

Você tem um grid e nele você coloca o código do produto , descrição ,quantidade e valor, você deseja que ao digitar o código a descrição e o valor aparecam automaticamente,

bem isto é normal numa aplicação windows, porém na WEB este simples processo pode ser muito custoso. Veja que a cada código digitado precisamos ir no servidor, localizar o produto,

pega as informações e atualizar novamente na tela.

Esta sem dúvida seria a pior maneira de fazer isso, então como fazer fórmulas na web com o GAS?

Nós pensamos , vamos deixar uma tabela em memória , que seria a  tabela auxiliar de produtos. Mas você já pensou se tivesse 1 milhão de registros ?, inviável né?

Então nossa única solução era tentar ir no servidor o mínimo possível e de forma assyncrona e manter estes dados no cliente, para que  através de javascript nós pudessemos

capturar os valores necessários.

A forma que criamos isso foi a seguinte:

1-Criamos uma espécie de tabela auxiliar com as informações que são necessárias para a fórmula, no nosso exempo teria a descrição ,valor e código(para fazer a busca)

2-Disparamos um Evento toda vez que o código é digitado no GRID, desta forma atualizamos a informação desta tabela auxiliar

3-Quando a coluna que recebe a fórmula entra em foco nós pegamos no javascript os valores e motramos nela.

Código abaixo atualiza a tabela auxiliar das formulas

function HandleExitEditMode(sender,cell)

{

var row = gGrid_getRowById(cell);

if (row.IsFilterRow) return;

var selectedcol = gGrid_getGridById(sender).oActiveCell.Column.Key;if (selectedcol == "Codigo")

{

var textFind = row.getCellFromKey("Codigo").getValue();

TableAux(textFind); //aqui vamos atualizar a tabela auxiliar

}

else

{

ShowFormula(
null, null, null, "gGridItens");

}

 

Abaixo a função que dispara o código do servidor trazendo os dados do produto

function TableAux(text){ vgTbAux.RequestItems(text, false);

}

 

Código que mostra os valores de fórmulas no grid.

function ShowFormula(first, second, third, sender)

{

var gridID = sender;

var grid = gGrid_getGridById(gridID)

var cell = grid.ActiveCell;var row = gGrid_getRowById(cell);

 

if (row.IsFilterRow) return;

var rowTotal = row.getCellFromKey("Valor").getValue() * row.getCellFromKey("Quantidade_Entrada").getValue();if (typeof(vgTbAux.Items[0]) != "undefined" && (row.getCellFromKey("Valor").getValue() == null || row.getCellFromKey("Valor").getValue() == 0))

{

row.getCellFromKey(
"Valor").setValue(vgTbAux.Items[0].Value);

}

row.getCellFromKey("Total").setValue(rowTotal.toString());

//atualiza o summary

var rows = grid.Rows;

var vgcell = gGrid_getCellById(row.getCellFromKey("Total").Id);

var column = vgcell.Column;

var colTotal = 0;if (rows.length >= 1)

{

for (var i = 0; i < rows.length; i++)

{

colTotal += rows.getRow(i).getCellByColumn(column).getValue();

}

var vgcell = gGrid_getElementById(row.getCellFromKey("Total").Id);if (vgcell.parentNode.parentNode.nextSibling)

{

var footer = vgcell.parentNode.parentNode.nextSibling.childNodes[0].childNodes[vgcell.cellIndex+1];footer.innerText = gGrid_Mask(gridID, colTotal.toString(), 14,

"$###,###,##0.00");

}

}

}

 

 

Tags:

Add comment




biuquote
Loading