Usuários mais ativos no mês 12/2019
  1. henrique.muller

    843 Pontos

  2. paulo.silva

    842 Pontos

  3. maicon.pereira

    582 Pontos

  4. juliano.pezzini

    464 Pontos

  5. leandro.piscke

    428 Pontos

  6. diuari.molinari

    391 Pontos

  7. dirceu.schlickmann

    347 Pontos

  8. Camila

    288 Pontos

  9. bruno.cardoso

    272 Pontos

  10. Rafael Leonhardt

    253 Pontos

Procedure doAssumir não funcionando corretamente

–5 votos
99 visitas
Durante o Insert chamado por um objeto de tabela (ex: prestadores.insert), o método doAssumir é executado e deveria preencher os valores padrões dos campos de uma determinada tabela.

Porém isso não está acontecendo e valores de campos Lógicos e do tipo radio estão vindo sempre nulos.

 

O que pode estar acontecendo e o que posso fazer para corrigir o problema?

Runner versão: 13.1.8.1
fechada com o comentário: Direcionado para tratar o problema via email.
perguntou Jun 2, 2014 por gilmar.souza (31 pontos)
fechada Jun 4, 2014 por Rafael Leonhardt
Olá Gilmar. Poderia dar um exemplo real do código de como está procedendo para fazer o DoAssumir?

Exemplo de DoAssumir na Wiki: http://wiki.benner.com.br/wiki/index.php?title=BSistema.DoAssumir

1 Resposta

–2 votos

Olá Rafael.

Esse problema está acontecendo no Delphi. 

O Código utiliza um objeto "Prestador" da classe USamPrestador. Segue a forma que o objeto é inicializado.

Prestador := TSamPrestador.Create(sys,nil);

 

Na hora que é necessário criar um registro, o procedimento utilizado é chamar o método insert desse objeto.

Prestador.insert.

 

Esse método Insert foi escrito da seguinte maneira (Classe UTabela).

procedure TTabela.Insert;
begin
  if (not query.Active) then
    Abrir(-1);

  if Query.Active and (Query.State in [dsBrowse]) then
  begin
    Query.Insert;
    Campo['HANDLE'].AsInteger := Sys.NewHandle(Tabela);
    try
      sys.doAssumir(integer(pointer(Query)), Self.Tabela);
    except
    end;
  end;
end;

 

Na teoria esse trecho "sys.doAssumir(integer(pointer(Query)), Self.Tabela);" iria varrer todas os campos do registro recém-criado, colocando o valor padrão de todos os campos configurados no builder, porém isso não está acontecendo mais, fazendo com que o programador precise declarar o valor de cada um desses campos manualmente no código.

Exs:

          Prestador.Cassipfparapj                 := false;
          Prestador.Certificadofatelet            := false;

 

Eu encontrei na wiki algo semelhante que explica a função doAssumir para o Delphi.

http://wiki.benner.com.br/wiki/index.php?title=Objeto_de_baixa_de_parcelas_(Corporativo)

 

"Quando o procedimento é executado, o TDContainerDB recebe um Insert, é executado o DoAssumir e é atribuído 0(zero) para os campos VALOR."

Apesar de estar especificando campos VALOR, esse método funcionava para demais tipos de campos, como Booleano e Radio, só que não funciona mais (pelo menos para esse caso).

respondida Jun 4, 2014 por gilmar.souza (31 pontos)
editado Jun 6, 2014 por henrique.muller
Gilmar.
Nesse código tem um try except "mudo" que poderia estar escondendo uma exceção ocorrida no momento do doAssumir. Remova o try except ou registre algo caso ocorra exceção. Me informe o resultado.
Tirei o try exception e apareceu o seguinte erro ao criar o registro

10:59:18: Out Application.OnError
10:59:18: In  Application.OnError
10:59:18: [uErrMsg] Error : "Falha catastrófica"
10:59:18: TMemoryFields.IndexOfName: Tabela de índice 0 não encontrada em MemoryTables.
10:59:18: TMemoryTables.IndexOfName: Tentativa de ler o índice da tabela  retornou 0 (Zero).
10:59:18: DoAssumir()
10:59:18: TBQuery.Close
10:59:18: TBQuery.Open
10:59:18: .Insert
10:59:18: RequestLive para "SAM_PRESTADOR"
10:59:18: TBQuery.Open
10:59:18: TBQuery.Close
Pelo log do método "DoAssumir()" o valor da variável Self.Tabela está nulo, era esperado vir "DoAssumir(SAM_PRESTADOR)". Aparentemente o valor da variavel "Tabela" não está nulo pois não deu erro no NewHandle, o que pode indicar que Self.Tabela e Tabela não são a mesma variável, podendo haver uma variavel Global. Verifique os valores das variáveis e me informe.

Vou fechar o post pois não está muito alinhado com o que se propõe o AccessViolation que é mais "perguntas e respostas" do que um canal de suporte de problemas. Eu e o Carlos estamos no suporte da tecnologia essa semana, nos reporte diretamente por email.

Perguntas relacionadas

+2 votos
1 resposta 23 visitas
23 visitas perguntou Out 29 por bruno.reis (38 pontos)
0 votos
1 resposta 11 visitas
+5 votos
1 resposta 63 visitas
0 votos
1 resposta 24 visitas
...