Advertisement
erleybru

Untitled

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