Mensagem Personalizada conforme condição
Pessoal, estou montando uma mensagem personalizada para impedir a exclusão de fornecedor, caso existam contas PAGAS e A PAGAR em nome do mesmo.
Preciso personalizar o texto obedecendo alguns critérios.
Ao tentar excluir eu executo uma consulta que busca a quantidade de contas a pagar e pagas para este fornecedor e armazeno o resultado em 2 variaveis
Montei o código acima, para exibir a mensagem conforme cada situação, porém se houver 1 conta, gostaria que a mensagem ficasse no singular e não no plural...
exemplo:
Alguém tem uma sugestão melhor, para otimizar esse código?
Preciso personalizar o texto obedecendo alguns critérios.
Ao tentar excluir eu executo uma consulta que busca a quantidade de contas a pagar e pagas para este fornecedor e armazeno o resultado em 2 variaveis
var
Pagar, Pagas : Integer;
begin
Pagar := 2;
Pagas := 0;
if (Pagar > 0) and (Pagas > 0 ) then
Text := Format(''Existem %s contas a pagar e %s contas pagas'', [IntToStr(Pagar), IntToStr(Pagas)]);
if (Pagar >= 1) and (Pagas = 0) then
Text := Format(''Existem %s contas a pagar'', [IntToStr(Pagar)]);
if (Pagar = 0) and (Pagas >= 1) then
Text := Format(''Existem %s contas pagas'', [IntToStr(Pagas)]);
end;Montei o código acima, para exibir a mensagem conforme cada situação, porém se houver 1 conta, gostaria que a mensagem ficasse no singular e não no plural...
exemplo:
Exite 1 conta a pagar e 5 contas pagas Existem 5 contas a pagar e 1 conta paga Existe 1 conta a pagar Existem 10 contas a pagar ...
Alguém tem uma sugestão melhor, para otimizar esse código?
Renan
Curtidas 0
Melhor post
Arthur Heinrich
10/09/2025
var
Pagar, Pagas : Integer;
Texto1, Texto2 : String;
begin
Pagar := 2;
Pagas := 0;
case Pagar of
0: Texto1:='';
1: Texto1:= 'Existe '+IntToStr(Pagar)+' conta a pagar';
else
Texto1:= 'Existem '+IntToStr(Pagar)+' contas a pagar';
end;
case Pagas of
0: Texto2:='';
1: Texto2:= IntToStr(Pagas)+' conta paga';
else
Texto2:= IntToStr(Pagas)+' contas pagas';
end;
Text:=Texto1;
if (Text='') then
if (Texto2<>'') then
if (Pagas=1) then
Text:='Existe '+Texto2
else
Text:='Existem '+Texto2
else
else
if (Texto2<>'') then
Text:=Text+' e '+Texto2;
end;
GOSTEI 1
Mais Respostas
Renan
10/09/2025
Olá, Arthur
Obrigado pela dica. Fiz algo semelhante
Obrigado pela dica. Fiz algo semelhante
case Pagar of
1 : Mensagem := 'conta a pagar';
else Mensagem := 'contas a pagar';
end;
case Pagas of
1 : Mensagem1 := 'pagamento realizado';
else Mensagem1 := 'pagamentos realizados';
end;
if (Pagar > 0) and (Pagas > 0 ) then
Text := Format('Há %d '+Mensagem+' e %d '+Mensagem1, [Pagar, Pagas]);
if (Pagar >= 1) and (Pagas = 0) then
Text := Format('Há %d '+Mensagem, [Pagar]);
if (Pagar = 0) and (Pagas >= 1) then
Text := Format('Há %d '+Mensagem1, [Pagas]);GOSTEI 0
Renan
10/09/2025
Só complementando, não uso o Case 0 pois antes desse código eu já tenho a verificação abaixo
if (Pagar > 0) or (Pagas > 0) then
GOSTEI 0
Renan
10/09/2025
Arthur,
Agora que estava revisando o código, me toquei de uma situação.
Esse projeto que estou atualizando possui uma SP que verifica se existem contas pagas e a pagar
Lá no delphi faço um selec pelo campo OK para informar ao usuario se o registro pode ou não ser deletado.
Você acha que seria possivel modificar essa SP para armazenar a quantidade de contas pagas e a pagar em 2 variaveis, para que depois eu possa exibir uma mensagem, conforme estavamos vendo antes?
Agora que estava revisando o código, me toquei de uma situação.
Esse projeto que estou atualizando possui uma SP que verifica se existem contas pagas e a pagar
BEGIN
IF (TABELA = 'TBCEDENTES') THEN BEGIN
TOTAL = 0;
SELECT COUNT(*) FROM TBDUPLICATAS
WHERE COD_CEDENTE = :CODIGO
INTO QUANT;
TOTAL = :TOTAL + :QUANT;
SELECT COUNT(*) FROM TBVENCIDAS
WHERE COD_CEDENTE = :CODIGO
INTO QUANT;
TOTAL = :TOTAL + :QUANT;
IF (TOTAL > 0) THEN
OK = 'N';
ELSE
OK = 'S';
SUSPEND;
ENDLá no delphi faço um selec pelo campo OK para informar ao usuario se o registro pode ou não ser deletado.
Você acha que seria possivel modificar essa SP para armazenar a quantidade de contas pagas e a pagar em 2 variaveis, para que depois eu possa exibir uma mensagem, conforme estavamos vendo antes?
GOSTEI 0
Arthur Heinrich
10/09/2025
Não vejo o por quê de não ser possível.
Sua procedure já trabalha com uma série de parâmetros e variáveis, como a "TABELA", que aparenta ser um parâmetro de entrada. e "TOTAL" e "OK" que aparentam ser parâmetros de saída.
Você pode ter tantos parâmetros quanto deseje, na sua procedure. Porém, deve levar em conta que a interface da sua procedure (definição dos parâmetros de entrada e saída, bem como sua finalidade, é como um contrato. Alterar os parâmetros é como uma quebra de contrato, que pode afetar as rotinas que já se utilizam desta procedure.
A menos que você saiba exatamente o que está fazendo, talvez seja o caso de criar outra procedure para este propósito, de forma a manter a compatibilidade da procedure original e evitar problemas no código existente.
Sua procedure já trabalha com uma série de parâmetros e variáveis, como a "TABELA", que aparenta ser um parâmetro de entrada. e "TOTAL" e "OK" que aparentam ser parâmetros de saída.
Você pode ter tantos parâmetros quanto deseje, na sua procedure. Porém, deve levar em conta que a interface da sua procedure (definição dos parâmetros de entrada e saída, bem como sua finalidade, é como um contrato. Alterar os parâmetros é como uma quebra de contrato, que pode afetar as rotinas que já se utilizam desta procedure.
A menos que você saiba exatamente o que está fazendo, talvez seja o caso de criar outra procedure para este propósito, de forma a manter a compatibilidade da procedure original e evitar problemas no código existente.
GOSTEI 0
Renan
10/09/2025
Os parametros de entrada são CODIGO, TABELA
de saida OK
as variaveis são TOTAL, QUANT
Uso essa procedure apenas em 3 telas de cadastro e eu faria a alteração para as 3, para poder usar a mensagem parametrizada que estamos vendo neste tópipo.
Então, se eu criar mais 2 parametros de saida para armazenar cada count e recompilar, devo obter o resultado desejado.
Não sei se expliquei direito...
Por outro lado eu poderia deixar de usar essa SP e fazer o select count direto no botão de exclusão
de saida OK
as variaveis são TOTAL, QUANT
Uso essa procedure apenas em 3 telas de cadastro e eu faria a alteração para as 3, para poder usar a mensagem parametrizada que estamos vendo neste tópipo.
Então, se eu criar mais 2 parametros de saida para armazenar cada count e recompilar, devo obter o resultado desejado.
Não sei se expliquei direito...
Por outro lado eu poderia deixar de usar essa SP e fazer o select count direto no botão de exclusão
GOSTEI 0