erleybru

Untitled

Jun 23rd, 2020
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.67 KB | None | 0 0
  1.  
  2. SET TERM ^;
  3. -- PRECISA DO MÊS DE COMPETENCIA
  4. reCREATE FUNCTION geraarqdebitos ( PCodBanco SMALLINT, PMesRef SMALLINT, PAnoRef SMALLINT )
  5. RETURNS SMALLINT
  6. AS
  7.   DECLARE VReg VARCHAR(150);
  8.   DECLARE VCODIGO SMALLINT;
  9.   DECLARE VNOME VARCHAR(60);
  10.   DECLARE VCPF CHAR(11);
  11.   DECLARE VAGENCIA CHAR(4);
  12.   DECLARE VCONTA VARCHAR(14);
  13.   DECLARE VVALOR NUMERIC(9,2);
  14.   DECLARE VVALORTOTAL NUMERIC(10,2);
  15.   DECLARE VDATAVENCTO DATE;
  16.   DECLARE VDTVENCTO CHAR(8);
  17.   DECLARE VQtdRegistros SMALLINT;
  18.   DECLARE C CURSOR FOR (
  19.     SELECT
  20.       ASS.CODIGO, ASS.NOME, ASS.CPF, ASS.AGENCIA, ASS.CONTANUM,
  21.       MOV.VALOR, MOV.DTVENCTO
  22.     FROM ASSOCIADO ASS
  23.     INNER JOIN MOVIMENTO MOV ON ASS.CODIGO = MOV.CODASSOCIADO
  24.     WHERE
  25.         ANOREF = :PAnoRef AND
  26.         MESREF = :PMesRef
  27.   );
  28. BEGIN
  29.   VQtdRegistros = 1;
  30.   VValorTotal = 0;
  31.   -- monta registro do cabecalho
  32.   SELECT F_REG_TIPO_A( :PCodBanco ) FROM RDB$DATABASE INTO VReg;
  33.   -- salvar registro na tabela externa
  34.   INSERT INTO debito_automatico (detalhe) VALUES ( :VReg );  
  35.   -- Contador de registros gerados. O primeiro Γ© o registro tipo A
  36.   OPEN C;
  37.   WHILE (1 = 1) DO
  38.   BEGIN
  39.     FETCH C INTO :VCODIGO, :VNOME, :VCPF, :VAGENCIA, :VCONTA, :VVALOR, :VDATAVENCTO;
  40.     IF (ROW_COUNT = 0) THEN
  41.       LEAVE;
  42.     VReg = 'E' || RPAD(TRIM(CAST(VCodigo AS CHAR(6))), 25, ' ') || LPAD(TRIM(CAST(VAgencia AS CHAR(4))), 4, '0');
  43.     VReg = VReg || LPAD(TRIM(CAST(VConta AS CHAR(9))), 9, '0') || '     ';
  44.     -- formata a data no formato AAAAMMDD
  45.     VDTVENCTO = CAST(EXTRACT(YEAR FROM CAST(VDataVencto AS DATE))*10000 +
  46.          EXTRACT(MONTH FROM CAST(VDataVencto AS DATE))*100 +
  47.          EXTRACT(DAY  FROM CAST(VDataVencto AS DATE)) AS VARCHAR(8));
  48.     VReg = VReg || VDtVencto;
  49.     VReg = VReg || LPAD(TRIM(CAST(TRUNC(VValor * 100, 0) AS VARCHAR(15))), 15, '0');
  50.     VReg = VReg || '03' || RPAD(VNome, 59, ' ') || ' ';
  51.     VReg = VReg || '2' || LPAD(VCPF, 14, '0') || RPAD('', 4, ' ') || '0';
  52.     -- salvar registro na tabela externa
  53.     INSERT INTO debito_automatico (detalhe) VALUES ( :VReg );
  54.     -- totaliza valor a debitar
  55.     VValorTotal = VValorTotal + VValor;
  56.     -- atualiza quantidade de registros exportados
  57.     VQtdRegistros = VQtdRegistros + 1;
  58.   END
  59.   CLOSE C;
  60.   -- salvar registro tipo Z
  61.   VReg = 'Z' || LPAD(TRIM(CAST(VQtdRegistros AS VARCHAR(6))), 6, '0');
  62.   VReg = VReg || LPAD(TRIM(CAST(TRUNC(VValorTotal * 100, 0) AS VARCHAR(17))), 17, '0');
  63.   VReg = VReg || RPAD('', 126, ' ');
  64.   INSERT INTO debito_automatico (detalhe) VALUES ( :VReg );
  65.   -- atualizar o sequencial do arquivo na tabela BANCO
  66.   UPDATE BANCO SET Sequencia_Envio = Sequencia_Envio + 1 WHERE CODIGO = :PCodBanco;
  67.   RETURN 0;
  68. END^
  69. SET TERM ; ^
Advertisement
Add Comment
Please, Sign In to add comment