Faixa de preços

09/12/2020

0

Boa tarde a todos.
Pessoal preciso implementar uma rotina no Delphi Rio e não estou conseguindo e também não tenho mais a quem recorrer. É o seguinte:
Temos uma tela onde são cadastradas as faixas de preço, por exemplo: Faixa 1: R$ 10,00 - R$ 100,00; Faixa 2: R$ 101,00 - R$200,00, e assim vai...
Dentro da tela de vendas preciso que quando salvar a venda emitida o sistema entre nesta tabela de faixa com o valor da venda fechada pegue a faixa de preço em que a tal venda se encaixa e salve em outra tabela o valor fechado da venda mais a faixa em que ela se enquadra.
Não faço idéia de por onde começo e nem onde termino. Se puderem me dar apenas uma direção de como capturo a faixa de preços em que os valores das vendas se encaixam.
Agradeço desde já a atenção e disposição.
Devnator

Devnator

Responder

Posts

10/12/2020

Emerson Nascimento

para obter a faixa de preços:
SELECT
   *
FROM
   FAIXAS_DE_PRECO
WHERE
   :VALORDESEJADO BETWEEN FAIXA1 AND FAIXA2

se quiser resolver tudo numa instrução:
INSERT INTO OUTRATABELA ([CAMPO1, CAMPO2, CAMPO3, CAMPON, NUMERO_DO_PEDIDO,] FAIXA, VALOR_DA_VENDA)
SELECT
   [:VALORCAMPO1, :VALORCAMPO2, :VALORCAMPO3, :VALORCAMPON, :NUMERO_DO_PEDIDO,] FP.FAIXA, :VALORDESEJADO
FROM
   FAIXAS_DE_PRECO FP
WHERE
   :VALORDESEJADO BETWEEN FP.FAIXA1 AND FP.FAIXA2

Responder

10/12/2020

Emerson Nascimento

só uma observação: geralmente faixas se resumem a limites finais.
por exemplo:
até 10,00
até 100,00
até 200,00

do jeito que você apresentou, um valor de 100.35 não se encaixaria em nenhuma faixa.

Responder

10/12/2020

Devnator

Boa tarde @Emerson. Obrigado pela resposta.
Estou tendo um pequeno problema e não consigo resolver. Segui seu primeiro exemplo e não apresenta erros na IDE, só que não retorna registros.
Segue código SQL e Delphi, respectivamente:
SELECT * FROM TBL_FAIXAS_PRECOS
WHERE :total BETWEEN FAIXA_INI AND FAIXA_FIM


CDSFaixasPrecos.Close;
CDSFaixasPrecos.ParamByName('total').Value:= Edit3.Text;
CDSFaixasPrecos.Open;
 if CDSFaixasPrecos.RecordCount > 0 then
 begin
 Label15.Caption:= CDSFaixasPrecos.FieldByName('FAIXA_INI').Value;
 Label14.Caption:= CDSFaixasPrecos.FieldByName('FAIXA_FIM').Value;
 end;


Se puder me dizer se está correto está solução e também uma saída para o não retorno dos registros corretamente, agradeço.

**Obs: Estou alimentando "Labels" para ver o comportamento da solução antes de gravar na outra tabela, como referido no primeiro post.

E aproveitando para responder seu segundo post. As faixas que postei no primeiro post eram para servir somente como exemplo. Aqui neste sistema temos um Form de manutenção que o Adm altera estes registros de tempos em tempos conforme a necessidade.

Agradeço mais uma vez sua disposição em me auxiliar.
Responder

10/12/2020

Emerson Nascimento

você testou a instrução diretamente no banco pra garantir a eficácia?
SELECT * FROM TBL_FAIXAS_PRECOS
WHERE :total BETWEEN FAIXA_INI AND FAIXA_FIM

não use recordcount(); prefira verificar se a tabela está vazia.
CDSFaixasPrecos.Close;
CDSFaixasPrecos.ParamByName('total').AsFloat := StrToFloat(Edit3.Text);
CDSFaixasPrecos.Open;
if not CDSFaixasPrecos.IsEmpty then
begin
  Label15.Caption := CDSFaixasPrecos.FieldByName('FAIXA_INI').AsString;
  Label14.Caption := CDSFaixasPrecos.FieldByName('FAIXA_FIM').AsString;
end;

estou supondo que o conteúdo dos campos seja numérico
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar