Advertisement
erleybru

Untitled

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