Árvore de páginas

01. DADOS GERAIS

Produto:

TOTVS RH

Linha de Produto:

Linha Protheus

Segmento:

RH

Módulo:GESTÃO DE PESSOAS (SIGAGPE)
Função:TRMA020
Ticket:14315231
Requisito/Story/Issue (informe o requisito relacionado) :DRHROTPRT-5634


02. 
SITUAÇÃO/REQUISITO

Inconsistência no uso de consulta padrão para tabela SQ3 - Cargos quando utilizada em campo de usuário cadastrado para a mesma tabela, referenciando outro registro no Cadastro de Cargos do módulo CSA.

03. SOLUÇÃO

O comportamento esperado de uma consulta padrão com retorno tipo campo é posicionar no registro selecionado da tabela consultada.
Sendo assim, neste cenário recomenda-se a criação de consulta específica (RE), utilizando funções de expressão e retorno via User Function, onde seja efetuado o reposicionamento no registro original da tabela após obtenção do retorno.

Abaixo segue modelo de utilização para o cenário exemplificado da tabela SQ3:

  1. No programa SIGACFG, acessar Base de Dados > Dicionário > Base de Dados
  2. Na coluna à esquerda, abrir o menu da Empresa, selecionar o item 'Consultas Padrão' e nos ícones superiores clicar em 'Incluir'
  3. Informar: primeira tela - Tipo de Consulta: Consulta Específica, Nome da consulta (a ser cadastrada no X3_F3 do campo de usuário) e Descrição;
                   segunda tela - Funções de Expressão e Retorno, a serem criadas via RDMake, informadas no formato u_NomeFunção(), e finalizar.
  4. Incluir nova consulta com as informações desejadas em tela como índices, colunas, etc. da tabela consultada e informar o mesmo retorno da consulta anterior *(Verificar item 04. Demais Informações)
  5. Exemplo de RDMake a ser compilado no ambiente com as User Functions informadas:

    customprog.prw
    /*/Função de Expressão da consulta específica
    Deve ser cadastrada na SXB no formato "u_NomeDaFunção()"
    /*/
    User Function f3Custom()
    	Local aArea		:= GetArea()
    	Local aAreaSQ3	:= SQ3->(GetArea())	//Guarda a posição atual da tabela
    	Local uContent
    	Local lRet		:= ConPad1( ,,, "SQ3PAD",,,,,, @uContent)	//Cria tela de consulta conforme o nome passado por parâmetro e cadastro da SXB
    									//Nome da consulta padrão criada no passo anterior
    		If lRet
    			VAR_IXB := SQ3->Q3_CARGO	//registro selecionado na consulta
    		Else
    			VAR_IXB := uContent			//Conteúdo anterior do campo
    	    EndIf
    
    	RestArea(aAreaSQ3)	//Reposiciona no registro aberto da tabela em manutenção
    	RestArea(aArea)
    
    Return lRet //Retorno deve ser lógico, conforme uso da tela de consulta (.T. ao confirmar, .F. ao cancelar)
    
    /*/Função de Retorno da consulta - formato "u_NomeDaFunção()"
    /*/
    User Function F3RetCustom()
    Return VAR_IXB	//definido conforme tipo do campo e conteúdo especificado no retorno da consulta

04. DEMAIS INFORMAÇÕES

Neste exemplo, a expressão f3Custom() da consulta específica CUSTOM faz chamada à função ConPad1() para criação de tela no formato de consulta.

Em rotinas estruturadas em MVC é possível utilizar a função ConPad1() dentro de uma consulta específica (como utilizado na consulta CUSTOM), passando por parâmetro qualquer outra consulta existente no dicionário (SXB).

ConPad1( ,,, "SQ3PAD",,,,,, @uContent) =>  Informada no 4º parâmetro.

Já em outros padrões de enchoice, como é o caso da rotina especificada no cenário (TRMA020), para compatibilidade com o uso da ConPad1(), a consulta passada por parâmetro também foi criada manualmente (consulta SQ3PAD) para conter retorno do tipo expressão.*

Como alternativa à criação da segunda consulta, é possível criar manualmente uma tela de consulta para exibição dos registros desejados, ao invés do uso da ConPad1(), na função de expressão da consulta específica.

05. ASSUNTOS RELACIONADOS