| ♥ 0 | Tenho uma prigrelha com varias colunas ao fazer F4 em determinada coluna, vamos assumir coluna que chama a lista dos armazens, ao voltar a fazer F4 escolhendo o armazém pretendido, como faço para que a célula do armazém assim que estiver preenchida despolete uma função para preencher eu preencher outra coluna. PSO.AbreLista(1, ConstantesPrimavera100.Categorias.Armazem, “Armazem”, this.ParentForm, priGrelha_GerarComposicao.Grelha, “mnuTabArmazens”, row, col, false, strClausulaWhere); Este método trabalha corretamente preenchendo o armazem pretendido na célula pretendida, no entanto logo de seguida pretendo chamar uma função para por ex colocar o resultado de um select coluna seguinte e não sei como fazer. Se eu escrever na linha abaixo ao “PSO.AbreLista…” algo como “priGrelha_GerarComposicao.SetGRID_SetValorCelula(row, colProxLote, “LT2020″);” O valor é preenchido corretamente no local pretendido, no entanto se colocar uma função o processo já não funciona. private void PreencheLote(int row)
{
string strComponentes = priGrelha_GerarComposicao.GetGRID_GetValorCelula(row, colComponente);
string strArmazem = priGrelha_GerarComposicao.GetGRID_GetValorCelula(row, colArmOrig);
string QuerySQL;
StdBELista ListaQuerySQL;
QuerySQL = PSO.Sql.FormatSQL("Select TOP 1 Lote from V_INV_ArtigoArmazem Where Armazem='@1@' AND Lote = (Select TOP 1 lote from artigolote alote where artigo = '@2@' and activo=1 AND validade = (select min(validade) from artigolote where artigo = alote.artigo))", strArmazem.ToUpper(), strComponentes.ToUpper());
ListaQuerySQL = BSO.Consulta(QuerySQL);
if (!ListaQuerySQL.Vazia())
{
priGrelha_GerarComposicao.SetGRID_SetValorCelula(row, colLoteOrig, ListaQuerySQL.Valor("Lote"));
}
}
Marcado como spam |
| Resposta privada Solução encontrada enquanto o BUG não é resolvido. A solução passa por "procurar" no StackTrace pelo método que devolve valores por F4: "AtribuiValoresF4" combinando com o evento "LeaveCell" da grelha. Aqui fica uma solução possível: private bool? F4FromPLT() private void priGrelha1_LeaveCell(object Sender, PRISDK100.PriGrelha.LeaveCellEventArgs e) if (F4FromPLT() == true) Apenas no caso do método evocador ser o "AtribuiValoresF4" é que o tratamento da coluna é disparado.
Marcado como spam | |
| Resposta privada Olá @pauloalexandremestregonalvesdinis, Podes utilizar o método F4RowFields. Será chamado automaticamente pela plataforma após invocares o PSO.AbreLista através do F4 public void F4RowFields(string Categoria, string NomeCampo, dynamic Valor){
if (Categoria == ConstantesPrimavera100.Categorias.Armazem) {
priGrelha_GerarComposicao.SetGRID_SetValorCelula(priGrelha_GerarComposicao.Grelha.ActiveRow, aTuaColuna, oTeuValor);
}
}
Marcado como spam Comentários Obrigado Nuno pela pronta resposta, no entanto o que explicas eu já tinha encontrado no projecto PRIMAVERASDK que está no GitHub.
Acontece que simplesmente não é chamado, nem mesmo no Projecto PRIMAVERASDK. Já experimentei colocar o método tal como demonstras e o mesmo não é chamado automaticamente, experimentei também criar um associando ao evento F4RowFields da PriGrelha e também não é chamado.
Colocar o método logo abaixo do PSO.AbreLista através do F4 o método é chamado sim mas antes de a célula ser preenchida pelo ultimo F4 (da escolha do registo). O que posso estar a fazer de errado? Paulo isso é um bug que está já registado o F4 não está a chamar o F4RowFields. Vou ver se consigo ajudar. Viva Sérgio,
Sempre é possível ajudar nesta questão?
Obrigado. @pauloalexandremestregonalvesdinis Qual a tua urgencia nisso? @sergiosereno, tenho de entregar o projecto ao cliente próximo dia 23.11 |