Advertisement
filhotecmail

Lote

Oct 20th, 2017
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.64 KB | None | 0 0
  1. SET TERM ^ ;
  2.  
  3. CREATE OR ALTER PROCEDURE PEPS_SAIDA (
  4.     CODVENDA INTEGER,
  5.     ITEM INTEGER,
  6.     PRO_CODIGO INTEGER,
  7.     QTDE_A_BAIXAR NUMERICO_15_4)
  8. AS
  9. DECLARE variable QTDE_BAIXA NUMERICO_15_4;
  10. DECLARE variable QTDE NUMERICO_15_4;
  11. DECLARE variable CUSTO NUMERICO_15_4;
  12. DECLARE variable ID_PEPS INTEGER;
  13. DECLARE variable VALIDA_QTDE CHAR(1);
  14. BEGIN
  15.   qtde_baixa = :qtde_a_baixar;
  16.  
  17.   while (qtde_baixa >0) do
  18.   BEGIN
  19.      qtde = 0;
  20.      custo = 0;
  21.      id_peps = 0;
  22.  
  23.      IF (EXISTS(SELECT saldo_qtde_movi, saldo_valor,id_peps FROM prod_estoque_peps
  24.             WHERE saldo_qtde_movi > 0 AND pro_codigo =:pro_codigo)) THEN
  25.      BEGIN
  26.         valida_qtde = 'S';
  27.         SELECT FIRST 1 saldo_qtde_movi, saldo_valor,id_peps FROM prod_estoque_peps
  28.                WHERE saldo_qtde_movi > 0 AND pro_codigo =:pro_codigo
  29.                ORDER BY DATA INTO :qtde, :custo, :id_peps;
  30.      END ELSE IF (EXISTS( SELECT FIRST 1 saldo_qtde_movi, saldo_valor,id_peps
  31.                           FROM prod_estoque_peps
  32.                           WHERE entrada_valor > 0 AND pro_codigo =:pro_codigo)) THEN
  33.      BEGIN
  34.         valida_qtde = 'N';
  35.         SELECT FIRST 1 saldo_qtde_movi, saldo_valor,id_peps
  36.         FROM prod_estoque_peps
  37.             WHERE entrada_valor > 0 AND pro_codigo =:pro_codigo
  38.         ORDER BY id_peps DESC INTO :qtde, :custo, :id_peps;
  39.      END ELSE
  40.      BEGIN
  41.         valida_qtde = 'N';
  42.         SELECT FIRST 1 saldo_qtde_movi, saldo_valor,id_peps
  43.         FROM prod_estoque_peps
  44.             WHERE saldo_valor > 0 AND pro_codigo =:pro_codigo AND id_peps_movi IS NULL
  45.         ORDER BY id_peps DESC INTO :qtde, :custo, :id_peps;
  46.      END
  47.  
  48.      IF ((:qtde < qtde_baixa) AND (valida_qtde = 'S')) THEN
  49.      BEGIN
  50.         INSERT INTO prod_estoque_peps (
  51.               id_peps,
  52.               codvenda,
  53.               codvenda_item,
  54.               pro_codigo,
  55.               DATA,
  56.               saida_qtde,
  57.               saida_valor,
  58.               saida_total,
  59.               id_peps_movi,
  60.               saldo_qtde,
  61.               saldo_valor,
  62.               saldo_total)
  63.         VALUES (
  64.               gen_id(gen_id_peps,1),
  65.               :codvenda,
  66.               :item,
  67.               :pro_codigo,
  68.               CURRENT_DATE,
  69.               :qtde,
  70.               :custo,
  71.               CAST(:qtde * :custo AS NUMERIC(15,2)),
  72.               :id_peps,
  73.               0,
  74.               :custo,
  75.               0
  76.               );
  77.  
  78.         UPDATE prod_estoque_peps SET saldo_qtde_movi= saldo_qtde_movi-:qtde
  79.         WHERE id_peps=:id_peps;
  80.         qtde_baixa = :qtde_baixa - :qtde;
  81.      END ELSE
  82.      BEGIN
  83.  
  84.           INSERT INTO prod_estoque_peps (
  85.               id_peps,
  86.               pro_codigo,
  87.               codvenda,
  88.               codvenda_item,
  89.               DATA,
  90.               saida_qtde,
  91.               saida_valor,
  92.               saida_total,
  93.               saldo_qtde,
  94.               saldo_valor,
  95.               saldo_total,
  96.               id_peps_movi)
  97.           VALUES (
  98.               gen_id(gen_id_peps,1),
  99.               :pro_codigo,
  100.               :codvenda,
  101.               :item,
  102.               CURRENT_DATE,
  103.               :qtde_baixa,
  104.               :custo,
  105.               CAST(:qtde_baixa * :custo AS NUMERIC(15,2)),
  106.               :qtde - :qtde_baixa,
  107.               :custo,
  108.               CAST((:qtde - :qtde_baixa) * :custo AS NUMERIC(15,2)),
  109.               :id_peps
  110.               );
  111.  
  112.          /* if (valida_qtde = 'S') then*/
  113.            UPDATE prod_estoque_peps SET
  114.                 saldo_qtde_movi= saldo_qtde_movi-:qtde_baixa
  115.            WHERE id_peps=:id_peps;
  116.  
  117.         qtde_baixa = 0;
  118.      END
  119.   END
  120. END^
  121.  
  122. SET TERM ; ^
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement