14221 - Mensagem ao utilizar identificador GER-000SELEF01
Problema: Criamos um campo na tabela E120IPD, para que o usuário possa vincular uma conta financeira. Esse campo esta vinculado à tabela E091PLF. Para que o filtro obedeça os relacionamentos por usuário, ativamos o identificador 000SELEF01 e vinculamos uma regra que segue em anexo.
Ao clicar no botão personalizados dos itens do pedido, aparece a mensagem de erro abaixo e que também está no anexo.
Não foi possível finalizar chamado: Assertion failure (C:\Workspace584\pkg\RtBase02\rtsqlcmdparts.pas, line 2489)
Rotina / Tela: Utilização da função SetarFiltroSQL.
Solução: Solução 14221: O problema está na montagem da regra onde está utilizando a função SetarFiltroSQL. Conforme pode ser verificado na regra, a variável XFiltro está sendo utilizada de forma errada. Está sendo aplicado parâmetros SQL em uma variável do tipo Alfa, ao enviar esta variável para a função a variável alfa que é tratada diferente de um cursor não recebe os valores por parâmetro. Desta forma está aplicando o filtro na tabela da seguinte Forma CodEmp=:Xemp, quando acessar o personalizados a tecnologia não entende o parâmetro XEmp ocasionando erro.
Abaixo segue a regra ajustada, onde alteramos a mesma para receber direto a variável em Alfa desta forma é concatenada a informação aplicando o filtro na tabela da seguinte forma CodEmp=X que é o filtro correto.
Quando se utiliza uma variável do tipo alfa, não deve-e utilizar :Parametro, pois alfa não entende isso como parâmetro, somente o cursor.SQL entenderá como parâmetro e irá traduzir o valor.
Regra ajustada abaixo.
@------------------------------------------------------@
DEFINIR NUMERO XEMP;
DEFINIR NUMERO XFIL;
DEFINIR NUMERO XUSU;
DEFINIR ALFA XFILTRO;
DEFINIR ALFA XAEMP;
DEFINIR ALFA XAUSU;
DEFINIR CURSOR CUR_E099UXF;
XEMP=CODEMP;
XFIL=CODFIL;
XUSU=CODUSU;
IntParaAlfa(CODEMP, XAEMP);
IntParaAlfa(CODUSU, XAUSU);
XFILTRO=;
CUR_E099UXF.SQLSELECT CTAFIN FROM E099UXF WHERE CODEMP=:XEMP AND CODUSU=:XUSU AND SITUXF='A';
CUR_E099UXF.AbrirCursor();
SE(CUR_E099UXF.Achou)
{
XFILTRO=SELECT CTAFIN FROM E099UXF WHERE CODEMP=+XAEMP+ AND CODUSU=+XAUSU+ AND SITUXF='A';
SetarFiltroSql(E091PLF, CTAFIN, XFILTRO);
}
CUR_E099UXF.FecharCursor();
@------------------------------------------------------@
Ao clicar no botão personalizados dos itens do pedido, aparece a mensagem de erro abaixo e que também está no anexo.
Não foi possível finalizar chamado: Assertion failure (C:\Workspace584\pkg\RtBase02\rtsqlcmdparts.pas, line 2489)
Rotina / Tela: Utilização da função SetarFiltroSQL.
Solução: Solução 14221: O problema está na montagem da regra onde está utilizando a função SetarFiltroSQL. Conforme pode ser verificado na regra, a variável XFiltro está sendo utilizada de forma errada. Está sendo aplicado parâmetros SQL em uma variável do tipo Alfa, ao enviar esta variável para a função a variável alfa que é tratada diferente de um cursor não recebe os valores por parâmetro. Desta forma está aplicando o filtro na tabela da seguinte Forma CodEmp=:Xemp, quando acessar o personalizados a tecnologia não entende o parâmetro XEmp ocasionando erro.
Abaixo segue a regra ajustada, onde alteramos a mesma para receber direto a variável em Alfa desta forma é concatenada a informação aplicando o filtro na tabela da seguinte forma CodEmp=X que é o filtro correto.
Quando se utiliza uma variável do tipo alfa, não deve-e utilizar :Parametro, pois alfa não entende isso como parâmetro, somente o cursor.SQL entenderá como parâmetro e irá traduzir o valor.
Regra ajustada abaixo.
@------------------------------------------------------@
DEFINIR NUMERO XEMP;
DEFINIR NUMERO XFIL;
DEFINIR NUMERO XUSU;
DEFINIR ALFA XFILTRO;
DEFINIR ALFA XAEMP;
DEFINIR ALFA XAUSU;
DEFINIR CURSOR CUR_E099UXF;
XEMP=CODEMP;
XFIL=CODFIL;
XUSU=CODUSU;
IntParaAlfa(CODEMP, XAEMP);
IntParaAlfa(CODUSU, XAUSU);
XFILTRO=;
CUR_E099UXF.SQLSELECT CTAFIN FROM E099UXF WHERE CODEMP=:XEMP AND CODUSU=:XUSU AND SITUXF='A';
CUR_E099UXF.AbrirCursor();
SE(CUR_E099UXF.Achou)
{
XFILTRO=SELECT CTAFIN FROM E099UXF WHERE CODEMP=+XAEMP+ AND CODUSU=+XAUSU+ AND SITUXF='A';
SetarFiltroSql(E091PLF, CTAFIN, XFILTRO);
}
CUR_E099UXF.FecharCursor();
@------------------------------------------------------@