Ir para o conteúdo principal

PEX - Grade com campo de auto incremento

Hoje nativamente a ferramenta DOX ainda não tem o recurso de contador de linhas de uma grade, para isso foi realizado uma forma de se resolver temporariamente esta questão, pois para alguns essa informação visualmente pode fazer diferença.

Para isso utilizaremos apenas 4 formulários:

  • 1 Grade de dados 
  • 1 Botão "Adicionar": com evento PEX ao sair para adicionar linhas na grade acima
  • 1 Formulário dissertativo: para o usuário informar o sequencial que será incrementado
  • 1 Botão "Remover": com evento PEX ao sair para remover as linhas adicionadas na grade.

Conforme imagem do portal: 

image-1648835988844.png

 

No formulário de grade de dados desmarque a opção "Permite incluir registros" e "Permite excluir registros". Estas opções é o que permite ao usuário fazer as ações no portal, porém como os botões nativos da grade não executam PEX ao sair, iremos retirar e criarmos os nossos de forma manual.

image-1648836436618.png

Na aba "Campos": 

image-1648836469659.png

Agora, depois de criado o formulário de grade, crie os outros formulários de botão e dissertativa.

image-1648836266579.png

Botão "Adicionar". PEX ao sair: 

const 
  cs_grade = '1';
var
  liIdRegistro: Integer;
  loRegistro: TJSONObject;
  loNovoRegistro : TJSONObject;
  liSequencia : Integer;
begin
  //incrementa sequencial
  liSequencia := 1;
  for liIdRegistro := 0 to Pred(aoFormularios.GetJSON('1').GetArrayJSON('DADOS').Count) do
    begin
      loRegistro := aoFormularios.GetJSON('1').GetArrayJSON('DADOS').GetItemAsJson(liIdRegistro);
      if loRegistro.GetInt('REGISTROS') >= liSequencia then
        begin
          liSequencia := loRegistro.GetInt('REGISTROS')+1;
        end;
    end;
  //insere informações na grade
  loNovoRegistro := TJSONObject.Create;
  loNovoRegistro.AddPair('REGISTROS', IntToStr(liSequencia));
  aoFormularios.GetJSON(cs_grade).GetArrayJSON('DADOS').Add(loNovoRegistro);
end;

Botão "Remover". PEX ao sair: 

const 
  cs_grade = '1';
var 
  liIdRegistro: Integer;
  loRegistro: TJSONObject;
  loNovoRegistro : TJSONObject;

begin
  //Percorre a grade
  for liIdRegistro := 0 to Pred(aoFormularios.GetJSON('1').GetArrayJSON('DADOS').Count) do
    begin
      loRegistro := aoFormularios.GetJSON('1').GetArrayJSON('DADOS').GetItemAsJson(liIdRegistro);
      //Verifica o valor digita se for correspondente ao Registro que contém na grade e remove.
      if loRegistro.GetInt('REGISTROS') = aoFormularios.GetJSON('3').GetInt('TEXTO') then
        begin
          aoFormularios.GetJSON('1').GetArrayJSON('DADOS').Remove(liIdRegistro);
        end;
    end;
end;

No portal:

image-1649076492249.gif

Lembrando que neste exemplo, fizemos apenas uma demonstração da utilização de PEX em grade, pode-se ser utilizado de várias validações e personalizações. Faça à vontade.

Versão homologada: 12.3.5