Fórum
Ver pergunta

Numa PRIGRELHA como preencher uma nova coluna após um F4   

284 visualizações
1
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"));
}
}

 

Faça login para poder traduzir
Integração
V10
Marcado como spam
Criado há 5 anos e 5 meses paulodinis
p
paulodinis Responsiveness Member
2 respostas
4
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()
{
return new StackTrace()?.GetFrames().Any(r => r.GetMethod().Name.Contains("AtribuiValoresF4"));
}

private void priGrelha1_LeaveCell(object Sender, PRISDK100.PriGrelha.LeaveCellEventArgs e)
{
if (e.Col == e.NewCol)
return;

if (F4FromPLT() == true)
{
if (e.Col == priGrelha1.Cols.GetEdita(colArtigo).Number)
{
TrataColuna_Artigo(e.Row);
}
else if(e.Col == priGrelha1.Cols.GetEdita(colEntidade).Number)
{
TrataColuna_Entidade(e.Row);
}
}
}

Apenas no caso do método evocador ser o "AtribuiValoresF4" é que o tratamento da coluna é disparado.

 

Faça login para poder traduzir
Marcado como spam
Criado há 5 anos e 4 meses paulodinis
p
paulodinis Responsiveness Member
    2
    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); 
        } 
    }

     

     

     

    Faça login para poder traduzir
    Marcado como spam
    Criado há 5 anos e 5 meses nunogonalves
    nunogonalves Responsiveness Member
      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?
      5 anos e 5 meses
      paulodinis
        Paulo isso é um bug que está já registado o F4 não está a chamar o F4RowFields. Vou ver se consigo ajudar.
        5 anos e 5 meses
        sergiosereno
          Viva Sérgio, Sempre é possível ajudar nesta questão? Obrigado.
          5 anos e 5 meses
          paulodinis
            @pauloalexandremestregonalvesdinis Qual a tua urgencia nisso?
            5 anos e 5 meses
            sergiosereno
              @sergiosereno, tenho de entregar o projecto ao cliente próximo dia 23.11
              5 anos e 5 meses
              paulodinis