Function funciona mas nao atualiza o banco

01/12/2005

0

Bem, criei esta função no EMS e ela executa sem erros, esstou programando em delphi com acesso via Zeus.

De dentro do programa ela é executa normalmente e na própria tela do meu eu constato atraves de grids q ela esta functionado (os valores do grid mudam apos o refresh). Muito bem, o problema é que se eu fechar e abrir o sistema ele volta o banco ao que estava antes... o que pode estar acontecendo ?


CREATE OR REPLACE FUNCTION "planejamento"."sp_atualiza_horas_timesheet" 
(p_tipooperacao integer, p_crachafunc integer, p_hrsnormal numeric, 
p_hrs75 numeric, p_hrs100 numeric, p_datalcto varchar, p_jobcard varchar) RETURNS boolean AS
$body$

DECLARE
  TP_ATUALIZA_HORAS INTEGER;
  TP_EXCLUI_LCTO_TS INTEGER;
  nIDFunc INTEGER;
  lRETORNO BOOLEAN;
  nHORAS_DIMINUIR NUMERIC;
  nHORAS_ADICIONAR NUMERIC;
  nHORAS_DISPONIVEIS NUMERIC;
  recPONTO RECORD;
BEGIN
  TP_ATUALIZA_HORAS := 0;
  TP_EXCLUI_LCTO_TS := 1;
  lRETORNO := FALSE;
  nIDFunc := 0;
  nHORAS_DIMINUIR := 0;
  nHORAS_ADICIONAR := 0;
  nHORAS_DISPONIVEIS := 0;

  -- Procura o ID do funcionario para atualizar do dados no ponto
  SELECT INTO nIDFunc f.id
         FROM pessoal.funcionario f
         WHERE f.cb = p_crachafunc;

  IF NOT FOUND THEN
    RAISE EXCEPTION ´Funcionário ¬ não cadastrado.´, nIDFunc;
  END IF;

  -- Recupera Horas Antigas Cadastradas
  SELECT INTO recPonto p.hrstotal, p.hrsusadas
         FROM pessoal.ponto p
         WHERE ( (id = nIDFunc) AND
                 (dia = to_date(p_datalcto, ´dd/mm/yyyy´))
               );

  -- Descobre o total de horas a diminuir
  nHORAS_DIMINUIR := (recPonto.hrstotal) - (p_hrsnormal + p_hrs75 +
p_hrs100);
  nHORAS_ADICIONAR := (p_hrsnormal + p_hrs75 + p_hrs100);
  nHORAS_DISPONIVEIS := (recPonto.hrstotal - recPonto.hrsusadas) -
nHORAS_DIMINUIR;

  -- Verifica se o funcionário tem horas disponíveis para alocar no TS
  IF (p_hrsnormal + p_hrs75 + p_hrs100) > recPonto.hrstotal THEN
    RAISE EXCEPTION ´Horas a serem cadastradas no TimeSeet (¬) estouraram o número de horas que o funcionário tem disponíveis (¬) para serem alocadas na Jobcard ¬.´, nHORAS_ADICIONAR,  nHORAS_DISPONIVEIS, p_jobcard;
  END IF;

  -- Verifica se ele tentou diminuir e foi além do número de horas
  IF nHORAS_DIMINUIR < 0 THEN
    RAISE EXCEPTION ´Horas aplicadas ao sistema excedem o valor mínimo de horas cadastradas ou trabalhadas pelo funcionario no dia (¬)
e por isso passaram a ser negativas (¬)´, p_datalcto, nHORAS_DIMINUIR;
  END IF;

  -- Atualiza cadastro de ponto com as horas do TS
  UPDATE pessoal.ponto SET 
  hrsusadas = hrsusadas - nHORAS_DIMINUIR 
  WHERE ( (id = nIDFunc) AND 
          (dia = to_date(p_datalcto, ´dd/mm/yyyy´))
        );

  -- Atualiza a Jobcard em referencia com o numero de horas tambem
  UPDATE planejamento.jc SET
  hhatingida = hhatingida - nHORAS_DIMINUIR 
  WHERE jc = p_jobcard;

  -- Operacao de Alteracao de horas no TS
  IF TP_ATUALIZA_HORAS = p_tipooperacao THEN
    UPDATE planejamento.lancamentos SET
    hhnormal  = p_hrsnormal,
    hhextra50 = p_hrs75,
    hhextra75 = p_hrs100
    WHERE ( (data = to_date(p_datalcto, ´dd/mm/yyyy´)) AND
            (funcionario = p_crachafunc) AND
            (jc = p_jobcard)
          );
  END IF;

  -- Operacao de Exclusao do lancamento
  IF TP_EXCLUI_LCTO_TS = p_tipooperacao THEN
    DELETE FROM planejamento.lancamentos
    WHERE ( (data = to_date(p_datalcto, ´dd/mm/yyyy´)) AND
            (funcionario = p_crachafunc) AND
            (jc = p_jobcard)
          );
  END IF;

  IF nIDFunc > 0 THEN
    lRETORNO := TRUE;
  ELSE
    RAISE EXCEPTION ´Funcionário ¬ não cadastrado.´, nIDFunc;
  END IF;

  RETURN lRETORNO;
END;
$body$
LANGUAGE ´plpgsql´ VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;



Tuskinhu

Tuskinhu

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar