Fórum SP para fazer esses calculos #48564
23/12/2004
0
Pessoal ando meio aperriado com uma questão q está me tirando do sério, quero escrever uma SP q me clacule os eventos de uma folha de pagamento, por exemplo, com 100¬ código Delphi, já consegui fazer funcionar, e fica como se segue:
[img:18d31c58bc]http://www.galeria.mastersfusion.com.br/galeria/albums/userpics/10055/lan¬E7amento.jpg[/img:18d31c58bc]
Tela de lançamento de eventos manualmente, nada de INSS/IRRF/FGTS, pois esse serão calculados pelo sistema de forma interna, com base em uma tabela de indices para essas contribuições.
[img:18d31c58bc]http://www.galeria.mastersfusion.com.br/galeria/albums/userpics/10055/normal_Tela1.jpg[/img:18d31c58bc]
Os funcionários com seus eventos mauais lançados e um evento automático (INSS) calculado pelo botão processar.
[img:18d31c58bc]http://www.galeria.mastersfusion.com.br/galeria/albums/userpics/10055/normal_compr_pag.jpg[/img:18d31c58bc]
Comprovante de pagamento com todos os eventos devidamente calculados.
Quero algo assim, mas fazendo uma SP, se for possível alguém me dar uma ajuda fico muito grato.
Obrigado a todos por terem ao menos visualizado!
[b:18d31c58bc]Martins[/b:18d31c58bc]
Martins
Curtir tópico
+ 0Posts
23/12/2004
Fsflorencio
Gostei + 0
23/12/2004
Martins
Tenho q inserir (lançar) os dados CODFUNCIONARIO, CODEVENTO, DESCRICAO, TIPO, VALOR, em outra tablea, no caso DIGITAPDR, e depois calcular esses eventos mais o TOTALPROVENTO, TOTALDESCONTOS, LIQUIDO.
Vou lançando os eventos pros funcionários, eventos manuais (salario, gratificação, complemento, faltas, etc), deverá ficar mais ou menos assim.
CODF CODEVENT DESC REF VALOR
001 00001 SALARIO BASE 260,00
001 00030 FALTAS 3 0,00
-------------------------------------------------------------------------------
002 00001 SALARIO BASE 260,00
ficá mais ou menos assim, visto por um grid, listando todos os funcionários, pois bem pretendo transferir todos esses dados para TBDIGITAPDR, só q calculando os eventos automáticos (INSS/IRRF/FGTS/TOTALPROVENTOS/TOTALDESCONTOS/LIQUIDO),
então se tiver como ficar mais ou menos assim:
CODF CODEVENT DESC REF VALOR
001 00001 SALARIO BASE 260,00
001 00030 FALTAS 3 26,00
001 99991 I.N.S.S. 7,65 19,89
001 99992 TOTPROV 260,00
001 99993 TOTDESC 45,89
001 99994 LIQUIDO 214,11
-------------------------------------------------------------------------------
002 00001 SALARIO BASE 260,00
002 99991 I.N.S.S. 7,65 19,89
002 99992 TOTPROV 260,00
002 99993 TOTDESC 19,89
002 99994 LIQUIDO 240,11
Com códigos em Pascal (Delphi), fis funcionar ok!, mas gostaria de fazer isso via SP/Trigger se for o caso, acho q não é, mas gostaria de montar algo assim com recursos do Banco (Interbase/Firebird).
Se alguém puder ajudar.
Valew
Martins
Gostei + 0
23/12/2004
Fsflorencio
Acho que a tabela deveria ser alimentada anteriormente com (INSS/IRRF/FGTS) pela procedure abaixo.
CREATE PROCEDURE SP_ALIMENTA_EVENTOS (
CODF INTEGER) )
AS
DECLARE VARIABLE PROXIMO_CODIGO INTEGER;
DECLARE VARIABLE CODEVENT INTEGER;
DECLARE VARIABLE VALOR NUMERIC(15,2);
BEGIN
/*PEGANDO O PRÓXIMO CÓDIGO*/
SELECT MAX(CODEVENT) + 1
FROM EVENTOS
WHERE CODF = :CODF
INTO :PROXIMO_CODIGO;
/*pegando o valor do salário base desta folha para calcular o inss*/
SELECT CODF CODEVENT VALOR
FROM EVENTOS
WHERE DESC = ´SALARIO BASE´
INTO :CODF :CODEVENT :VALOR
DO
BEGIN
INSERT INTO EVENTOS(CODF CODEVENT DESC REF VALOR)
VALUES (:CODF, :PROXIMO_CODIGO, ´INSS´, ´6´, VALOR * 6 / 100); /*VAMOS SUPOR QUE O VALOR DA ALIQUOTA SEJA 6¬ APENAS SOBRE O SALARIO BASE*/
END
/*pegando o valor do salário base desta folha para calcular o FGTS*/
SELECT CODF CODEVENT VALOR
FROM EVENTOS
WHERE DESC = ´SALARIO BASE´
INTO :CODF :CODEVENT :VALOR
DO
BEGIN
INSERT INTO EVENTOS(CODF CODEVENT DESC REF VALOR)
VALUES (:CODF, :PROXIMO_CODIGO, ´FGTS´, ´9´, VALOR * 9 / 100); /*VAMOS SUPOR QUE O VALOR DA ALIQUOTA SEJA 9¬ SOBRE O SALARIO BASE*/
END
END
//vc pode declarar variáveis locais depois do ´AS´ e trabalhar como preferir
//esta procedure é apenas um caminho aberto para vc começar a trabalhar
//não me ative em minúcias, pois os cálculos são bastante complexos e também não pude testar, fiz direto no bloco de notas
//executando a procedure
EXECUTE PROCEDURE SP_ALIMENTA_EVENTOS( 1 );
CREATE PROCEDURE SP_LISTA_EVENTOS (
CODF INTEGER)
RETURNS (
CODF INTEGER,
CODEVENT INTEGER,
DESC VARCHAR(40),
REF VARCHAR(10),
VALOR NUMERIC(15,2) )
AS
DECLARE VARIABLE INSS NUMERIC(15,2);
BEGIN
FOR SELECT CODF CODEVENT DESC REF VALOR
FROM EVENTOS
INTO :CODF :CODEVENT :DESC :REF :VALOR
DO
BEGIN
SUSPEND;/*ESTE COMANDO FAZ A EXIBIÇÃO DOS PARÂMETROS DE SAÍDA*/
END
END
//EXECUTANDO A PROCEDURE
SELECT * FROM SP_LISTA_EVENTOS( 1 ); //esta é uma procedure selecionável, pois tem parâmetros de saída
Espero ter ajudado.
Gostei + 0
23/12/2004
Martins
Valew!
Se alguém tiver mais alguma idéia, por favor!
Martins
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)