Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SET TERM ^;
- -- PRECISA DO MÊS DE COMPETENCIA
- CREATE FUNCTION geraarqdebitos ( PCodBanco SMALLINT, PMesRef SMALLINT, PAnoRef SMALLINT )
- RETURNS SMALLINT
- AS
- DECLARE VReg VARCHAR(150);
- DECLARE VCODIGO SMALLINT;
- DECLARE VNOME VARCHAR(60);
- DECLARE VCPF CHAR(11);
- DECLARE VAGENCIA CHAR(4);
- DECLARE VCONTA VARCHAR(14);
- DECLARE VVALOR NUMERIC(9,2);
- DECLARE VVALORTOTAL NUMERIC(10,2);
- DECLARE VDATAVENCTO DATE;
- DECLARE VDTVENCTO CHAR(8);
- DECLARE VQtdRegistros SMALLINT;
- DECLARE C CURSOR FOR ( SELECT ASS.CODIGO, ASS.NOME, ASS.CPF, ASS.AGENCIA, ASS.CONTANUM,
- MOV.VALOR, MOV.DTVENCTO FROM ASSOCIADO ASS
- INNER JOIN MOVIMENTO MOV ON ASS.CODIGO = MOV.CODASSOCIADO
- WHERE ANOREF = :PAnoRef AND MESREF = :PMesRef );
- BEGIN
- VQtdRegistros = 1;
- VValorTotal = 0;
- -- monta registro do cabecalho
- SELECT F_REG_TIPO_A( :PCodBanco ) FROM RDB$DATABASE INTO VReg;
- -- salvar registro na tabela externa
- INSERT INTO debito_automatico (detalhe) VALUES ( :VReg );
- -- Contador de registros gerados. O primeiro é o registro tipo A
- OPEN C;
- WHILE (1 = 1) DO
- BEGIN
- FETCH C INTO :VCODIGO, :VNOME, :VCPF, :VAGENCIA, :VCONTA, :VVALOR, :VDATAVENCTO;
- IF (ROW_COUNT = 0) THEN LEAVE;
- VReg = 'E' || RPAD(TRIM(CAST(VCodigo AS CHAR(6))), 25, ' ') || LPAD(TRIM(CAST(VAgencia AS CHAR(4))), 4, '0');
- VReg = VReg || LPAD(TRIM(CAST(VConta AS CHAR(9))), 9, '0') || ' ';
- -- formata a data no formato AAAAMMDD
- VDTVENCTO = CAST(EXTRACT(YEAR FROM CAST(VDataVencto AS DATE))*10000 +
- EXTRACT(MONTH FROM CAST(VDataVencto AS DATE))*100 +
- EXTRACT(DAY FROM CAST(VDataVencto AS DATE)) AS VARCHAR(8));
- VReg = VReg || VDtVencto;
- VReg = VReg || LPAD(TRIM(CAST(TRUNC(VValor * 100, 0) AS VARCHAR(15))), 15, '0');
- VReg = VReg || '03' || RPAD(VNome, 59, ' ') || ' ';
- VReg = VReg || '2' || LPAD(VCPF, 14, '0') || RPAD('', 4, ' ') || '0';
- -- salvar registro na tabela externa
- INSERT INTO debito_automatico (detalhe) VALUES ( :VReg );
- -- totaliza valor a debitar
- VValorTotal = VValorTotal + VValor;
- -- atualiza quantidade de registros exportados
- VQtdRegistros = VQtdRegistros + 1;
- END
- CLOSE C;
- -- salvar registro tipo Z
- VReg = 'Z' || LPAD(TRIM(CAST(VQtdRegistros AS VARCHAR(6))), 6, '0');
- VReg = VReg || LPAD(TRIM(CAST(TRUNC(VValorTotal * 100, 0) AS VARCHAR(17))), 17, '0');
- VReg = VReg || RPAD('', 126, ' ');
- INSERT INTO debito_automatico (detalhe) VALUES ( :VReg );
- -- atualizar o sequencial do arquivo na tabela BANCO
- UPDATE BANCO SET Sequencia_Envio = Sequencia_Envio + 1 WHERE CODIGO = :PCodBanco;
- RETURN 0;
- END^
- SET TERM ; ^
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement