Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Bloco de código
titleFórmula - Valor Reduzido para descontar do Pagamento Mensal - Funcionário Mensalista
/* Cálculo utilizado para o layout do BEM versão 3 */ 
/* Data Atualização : 29/06/2020 */ 
/* Data Atualização : 10/08/2020 */ 


/* Essa fórmula irá calcular o valor a reduzir de jornada e deverá ser associado a um evento de desconto no pagamento do funcionário.
1 - Será considerado mais de um período de adesão do histórico do BEM dentro da competência
exemplo,  uma adesão com percentual de 25% finalizando no mês e uma nova adesão de 50% iniciando no mês 
2 - Será considerado os novos campos do Layout do BEM 3 - Adesões com a mesma data de acordo, considerando Dias prorrogação, Data antecipação e Data Cancelamento */


AntesA fórmula deabaixo criarconsidera acenários fórmula,de deverácriação atualizarde ahistóricos consultacom SQL2 BEMacordos incluídoe os2 novosantecipações. campos


select 1 - Antes de criar a fórmula, deverá atualizar a consulta SQL BEM incluído os novos campos

SELECT 
DTACORDOBEM,DURACAOBEM,VALORREDUZIDOBEM,DTCANCELAMENTOBEM,DTANTECIPACAOBEM,DIASPRORROGACAOBEM
fromFROM PFHSTBEM
where codcoligada =:FRM_COLIGADA and chapa =:FRM_CHAPA
and TIPOADESAOBEM = '1'
ORDER 
BY DTMUDANCA DESC


DECL DiasDuracao;
DECL DataFimAcordo;
DECL 2 - Colar o conteúdo da fórmula abaixo: 


DECL DiasDuracao;
DECL DataFimAcordo;
DECL DataInicioReducao;
DECL DataFimReducao;
DECL ValorReduzido;
DECL DiasReducaoMes;
DECL Valor;
DECL DiasProrrog;
DECL DataCancelamento;
DECL DataAntecipacao;
DECL DataInicioAcordoAnt;
DECL DataInicioAcordo;
DECL ConsideraAcordo;

SETVAR (DataInicioAcordoAnt,DATANULA);
 
SE (EXECSQL ('BEM') = Verdade)
ENTAO
  REPITA

     SETVAR (ValorReduzido,resultsql('BEM','VALORREDUZIDOBEM'));
     
SETVAR (DataInicioAcordo,resultsql('BEM','DTACORDOBEM'));
     SETVAR (DiasDuracao,resultsql('BEM','DURACAOBEM'));
     SETVAR (DiasProrrog,resultsql('BEM','DIASPRORROGACAOBEM'));
 
    SETVAR (DataCancelamento,resultsql('BEM','DTCANCELAMENTOBEM'));
  
   SETVAR (DataAntecipacao,resultsql('BEM','DTANTECIPACAOBEM'));
 
    SETVAR (DataFimAcordo,(DataInicioAcordo + DiasDuracao)-1) ;
     SETVAR (ConsideraAcordo,1);
 
 
/* Verifica se tem aantecipação, mesmaprorrogação dataou de Acordocancelamento */
SE (DataInicioAcordo = DataInicioAcordoAnt)
ENTAO
  SE (DiasProrrog > 0)
  ENTAO 
  ENTAO
   SETVAR (DataInicioAcordo,(DataFimAcordo +1));
     SETVAR (DataFimAcordo,((DataFimAcordo + 1) + DiasProrrog));
     SENAO
 
      SE (DataCancelamento <> DATANULA)  
  
     ENTAO
         SETVAR (DataInicioAcordo,(DataFimAcordo +1))DataFimAcordo,DataCancelamento);
        SETVAR (DataFimAcordo,DataCancelamento)
  SENAO
   SENAO 
        SE (DataAntecipacao <> DATANULA)  
  
        ENTAO
            SETVAR (DataInicioAcordoDataFimAcordo,(DataFimAcordoDataAntecipacao + 1));
          SETVAR (DataFimAcordo,DataAntecipacao)FIMSE;
        FIMSE;
     FIMSE;
  FIMSE
FIMSE
SETVAR (DataInicioAcordoAnt,DataInicioAcordo);

SE (DataInicioAcordo <= ULTDIAMES(MTDATA(1,MES,ANO)) E DataFimAcordo >=    
     
     /*Verifica se é o mesmo acordo e teve antecipação, prorrogação ou cancelamento no seguinte */
     SE ((DataInicioAcordo = DataInicioAcordoAnt) E ((DataAntecipacao = DATANULA) OU (DiasProrrog = 0) OU (DataCancelamento = DATANULA)))
     ENTAO
       SETVAR(ConsideraAcordo,0)
     FIMSE;

/*Considera acordo no cálculo */
SE (ConsideraAcordo = 1)
ENTAO
   SE (DataInicioAcordo <= ULTDIAMES(MTDATA(1,MES,ANO)) E DataFimAcordo >= MTDATA(1,MES,ANO) )
   ENTAO
      SETVAR(DatainicioReducao,DataInicioAcordo);
      SETVAR(DataFimReducao,DataFimAcordo);

      /*Atribui início redução */
      SE (DataInicioAcordo <= MTDATA(1,MES,ANO))
     ) ENTAO
        SETVAR(DatainicioReducao,DataInicioAcordo)MTDATA(01,MES,ANO))
      FIMSE;
     SETVAR(DataFimReducao,DataFimAcordo);
    SE (DataInicioAcordo <= MTDATA(1,MES,ANO)) ENTAO
   /*Atribui fim redução */      SETVAR(DatainicioReducao,MTDATA(01,MES,ANO))
    FIMSE;
    SE (DataFimAcordo > ULTDIAMES(MTDATA(1,MES,ANO)))
      ENTAO
        SETVAR(DataFimReducao,ULTDIAMES(MTDATA(1,MES,ANO)))
      FIMSE;
 
    /* calcula dias redução no mes*/
     SETVAR(DiasReducaoMes, SUBTRAIDATAS(DataFimReducao,DatainicioReducao));
      
    SETVAR(ValorReduzido,(ValorReduzido / 30) * MIN(DiasReducaoMes,30));
 
 /* calcula dias redução no mês desconsiderando férias*/
     SETVAR(DiasReducaoMes,(DiasReducaoMes  -  DIAFERPER(DatainicioReducao,DataFimReducao)));
   
     /* calcula dias redução no mês desconsiderando afastamento*/
     SETVAR(DiasReducaoMes,(DiasReducaoMes  -  DIASAFT(DatainicioReducao,DataFimReducao,'PTO')));
  
     SETVAR(ValorReduzido,(ValorReduzido / 30) * MIN(DiasReducaoMes,30));
 
     /* Soma dois períodos de redução no mês */
      SETVAR(Valor,Valor + ValorReduzido);
   SENAO 0
   FIMSE;
FIMSE;
SETVAR (DataInicioAcordoAnt,DataInicioAcordo);
ATE ProxRegSQL('BEM' ) = Falso
FIMSE;
Valor;





/* Cálculo utilizado para o Layout do BEM versão 2 */

/* Data Atualização : 15/06/2020 */ 
/* Essa fórmula irá calcular o valor a reduzir de jornada é deverá ser associado a um evento de desconto no pagamento do funcionário.
Será considerado mais de um período de adesão do histórico do BEM dentro da competência
exemplo,  uma adesão com percentual de 25% finalizando no mês e uma nova adesão de 50% iniciando no mês */

DECL DataInicioAcordo;
DECL DataFimAcordo;
DECL DataInicioReducao;
DECL DataFimReducao;
DECL DiasReducao;
DECL ValorReduzido;
DECL DiasReducaoMes;
DECL Valor;
 
SE (EXECSQL ('BEM') = Verdade)
ENTAO
REPITA

SETVAR (DataInicioAcordo,resultsql('BEM','DTACORDOBEM'));
SETVAR (DataFimAcordo,((resultsql('BEM','DTACORDOBEM')) + (resultsql('BEM','DURACAOBEM'))));
SETVAR (ValorReduzido,resultsql('BEM','VALORREDUZIDOBEM')); 

SE (DataInicioAcordo < ULTDIAMES(MTDATA(1,MES,ANO)) E DataFimAcordo >= MTDATA(1,MES,ANO) ) ENTAO
     SETVAR(DatainicioReducao,DataInicioAcordo);
     SETVAR(DataFimReducao,DataFimAcordo);
    SE (DataInicioAcordo < MTDATA(1,MES,ANO)) ENTAO
       SETVAR(DatainicioReducao,MTDATA(01,MES,ANO))
    FIMSE;
    SE (DataFimAcordo > ULTDIAMES(MTDATA(1,MES,ANO))) ENTAO
       SETVAR(DataFimReducao,ULTDIAMES(MTDATA(1,MES,ANO)))
    FIMSE;
     /* calcula dias redução no mes*/
     SETVAR(DiasReducaoMes, SUBTRAIDATAS(DataFimReducao,DatainicioReducao));
  
     /* calcula dias redução no mês desconsiderando férias*/
     SETVAR(DiasReducaoMes,(DiasReducaoMes  -  DIAFERPER(DatainicioReducao,DataFimReducao)));
  
     /* calcula dias redução no mês desconsiderando afastamento*/
     SETVAR(DiasReducaoMes,(DiasReducaoMes  -  DIASAFT(DatainicioReducao,DataFimReducao,'PTO')));
  
     SETVAR(ValorReduzido,(ValorReduzido / 30) * MIN(DiasReducaoMes,30));
 
     /* Soma dois períodos de redução no mês */
     SETVAR(Valor,Valor + ValorReduzido);
SENAO 0
FIMSE;
ATE ProxRegSQL('BEM' ) = Falso
FIMSE;
Valor;


Antes da criação da fórmula acima deverá criar a consulta SQL código da Consulta = "BEM".

select DTACORDOBEM,DURACAOBEM,VALORREDUZIDOBEM
from PFHSTBEM
where codcoligada =:FRM_COLIGADA and chapa =:FRM_CHAPA
and TIPOADESAOBEM = '1' 

...