[firebase-br] duvida com select

omar l m rosa omar em conesul.inf.br
Ter Jun 5 12:37:53 -03 2007


HI!
é meio copmplicado, mas a idéia é a seguinte
A tabela TB_Cond_PAGTO conté as condições de pagamento.
            diasN é o numero de dias para o vencimento (se -1 =
apresentação, se 0 = a vista, etc)
            percN é o percentual para calculo do valor da parcela sobre o
valor total.
            ex 3x = 33% + 33% + 34%, ou 10% + 40 % + 50% etc...
            percN = 0 vai pro contas-correntes

f_debugger são funções para salvar os valores durante a execução em um
arquivo texto...

Bai!
omar


CREATE TABLE TB_COND_PAGTO (
    PK_TB_COND_PAGTO  INTEGER NOT NULL,
    DESCRICAO         VARCHAR(50) COLLATE WIN_PTBR,
    PERC1             NUMERIC(2,0),
    PERC2             NUMERIC(2,0),
    PERC3             NUMERIC(2,0),
....
    DIAS1             NUMERIC(2,0),
    DIAS2             NUMERIC(2,0),
   DIAS3             NUMERIC(2,0),
...
);


CREATE PROCEDURE P_INCLUI_DUPLICATAS (
    pk_pedidos integer)
as
declare variable pk_tb_cond_pagto integer;
declare variable dias1 numeric(2,0);
declare variable perc numeric(2,0);
declare variable ret integer;
declare variable soma decimal(15,2);
declare variable total decimal(15,2);
declare variable valor decimal(15,2);
declare variable dias numeric(2,0);
declare variable texto varchar(200);
declare variable nparc integer;
declare variable venc date;
declare variable data date;
declare variable perc1 numeric(2,0);
begin

  ret = F_SETDEBUGGEROUTPUT ('c:\temp\gera_duplicatas.log');

  nparc = 13;
  soma = 0;

  select pk_tb_cond_pagto, total, data
    from pedidos
   where pk_pedidos = :pk_pedidos
   into :pk_tb_cond_pagto, :total, :data;

  if (dias1 = 0 and perc1 = 100) then  /* a vista */
     exit;

  if (pk_tb_cond_pagto is null) then
      pk_tb_cond_pagto = 0;

  select dias1, perc1
    from tb_cond_pagto
   where pk_tb_cond_pagto = :pk_tb_cond_pagto
    into :dias1, :perc1;

   if (dias1 = -1 and perc1 = 100) then  /* apresentacao */
   begin
      insert into ct_receber
           ( data,                     documento,
             pk_pedidos,   pk_pessoas,   pk_saidas,
             pk_tb_ccustos,  pk_tb_tipo_cta, valor, vencimento)
      select cast('NOW' as timestamp), cast(p.pk_pedidos as varchar(10)) ||
' Apres.',
             p.pk_pedidos, p.pk_pessoas, p.pk_saidas,
             1,              4,             :total, cast('NOW' as date)
              from pedidos p
             where p.pk_pedidos = :pk_pedidos;
   end
   else
   if (dias1 = 0 and perc1 = 0) then  /* faturamento c/corrente */
   begin
          insert into ct_correntes
                 ( data,  documento,
                   pk_pedidos,   pk_pessoas,   pk_usuarios,
                   pk_tb_lanc_cc, valor)
            select :data, 'Pedido ' || cast(p.pk_pedidos as varchar(10)),
                   p.pk_pedidos, p.pk_pessoas, pk_usuarios,
                   1,             :total
              from pedidos p
             where p.pk_pedidos = :pk_pedidos;
   end
   else
   while (nparc > 1) do
   begin

   ret = F_DEBUG ('cond pagto =' || cast(:pk_tb_cond_pagto as
varchar(10)) );
   ret = F_DEBUG ('total =' || cast(:total as varchar(10)) );

       nparc = nparc - 1;
       texto = 'select dias' || cast(nparc as varchar(3)) ||
               ', perc' || cast(nparc as varchar(3)) ||
               ' from tb_cond_pagto where pk_tb_cond_pagto = ' ||
               cast (:pk_tb_cond_pagto as varchar(10));
       execute statement texto
          into :dias, :perc;

       ret = F_DEBUG ('nparc =' || cast(:nparc as varchar(10)) );
       ret = F_DEBUG ('dias =' || cast(:dias as varchar(10)) );
       ret = F_DEBUG ('perc =' || cast(:perc as varchar(10)) );

       if (perc > 0) then
       begin
          if (nparc = 1) then
          begin
             valor = total - soma;
          end
          else
          begin
             valor = round(total * perc / 100);
             soma = soma + valor;
          end

          venc = data + dias;

          ret = F_DEBUG ('valor =' || cast(:valor as varchar(10)) );
          ret = F_DEBUG ('soma =' || cast(:soma as varchar(10)) );


          insert into ct_receber
                 ( data,                     documento,
                   pk_pedidos,   pk_pessoas,   pk_saidas,
                   pk_tb_ccustos,  pk_tb_tipo_cta, valor,   vencimento)
            select cast('NOW' as timestamp), cast(p.pk_pedidos as
varchar(10)) ||
                                            '/' || cast(:nparc as
varchar(3)),
                   p.pk_pedidos, p.pk_pessoas, p.pk_saidas,
                   1,              4,              :valor, :venc
              from pedidos p
             where p.pk_pedidos = :pk_pedidos;
       end
   end

   ret = F_CLOSEDEBUGGEROUTPUT();

end
----- Original Message -----
From: "Zottis" <zottissistemas em brturbo.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, June 05, 2007 12:03 PM
Subject: Re: [firebase-br] duvida com select


Olá Turma, alguém teria um exemplo de SP para gerar parcelas de uma venda,
hoje é o meu aplicativo que  faz isso, mas estou tendo problemas, estou
querendo gerar via SP , mas tem o Problema de Arredondamento, então se
alguém tem um exemplo, ajudaria muito

Obrigado

Zottis

PS Uso FB 2.0, MDO e Delphi 7


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


__________ Informação do NOD32 IMON 2309 (20070605) __________

Esta mensagem foi verificada pelo NOD32 sistema antivírus
http://www.eset.com.br






Mais detalhes sobre a lista de discussão lista