会计期间

获取会计期间状态

 /*=======================================================
  *  FUNCTION / PROCEDURE
  *       get_period_status
  *   DESCRIPTION:
  *      得到当前日期所在期间的状态
  *   ARGUMENT:
  *   RETURN:  
  *       N/A
  *   HISTORY:
  *     1.00 2013-10-31 cxy
  =========================================================*/
  FUNCTION get_period_status(p_org_id IN NUMBER, p_gl_date IN DATE)
    RETURN VARCHAR2 IS
    l_closing_status VARCHAR2(1); --O:打开 C:关闭 N:未打开,F:将来期间
  BEGIN
    SELECT gps.closing_status
      INTO l_closing_status
      FROM gl_period_statuses gps,
           gl_periods         gp,
           hr_operating_units hou,
           gl_sets_of_books   gsob
     WHERE gps.application_id = 101 --GL  /*模块的id*/
       AND gps.adjustment_period_flag = 'N'--排除调整期
       AND gps.set_of_books_id = hou.set_of_books_id
       AND hou.set_of_books_id = gsob.set_of_books_id
       AND gp.period_set_name = gsob.period_set_name
       AND gps.period_name = gp.period_name
       AND (trunc(p_gl_date) BETWEEN gp.start_date AND gp.end_date)--时间
       AND hou.organization_id = p_org_id;--OU
    RETURN l_closing_status;
  EXCEPTION
    WHEN no_data_found THEN
      cux_conc_utl.log_msg('FUNCTION get_period_status ERROR:' ||
                           'NO_DATA_FOUND');
      RAISE fnd_api.g_exc_error;
    WHEN too_many_rows THEN
      cux_conc_utl.log_msg('FUNCTION get_period_status ERROR:' ||
                           'TOO_MANY_ROWS');
      RAISE fnd_api.g_exc_error;
    WHEN OTHERS THEN
      cux_conc_utl.log_msg('FUNCTION get_period_status ERROR:' || SQLERRM);
      RAISE fnd_api.g_exc_error;
  END get_period_status;


注意

取会计期间的时候处理不好会有 too_many_rows 的异常  应为会计期间有一个调整期,例如下图

12月31日这天就会有两个符合的,这时候我们就需要把2013-12-31到2013-12-31这个排除掉,应为这天是调整期

处理办法就是加上条件


获取会计期间名称

FUNCTION get_period_name(p_org_id IN NUMBER, p_gl_date IN DATE)
    RETURN VARCHAR2 IS
    l_period_name VARCHAR2(15); --期间名称
  BEGIN
    SELECT gp.period_name
      INTO l_period_name
      FROM gl_periods gp, hr_operating_units hou, gl_sets_of_books gsob
     WHERE hou.set_of_books_id = gsob.set_of_books_id
       AND gp.period_set_name = gsob.period_set_name
       AND (trunc(p_gl_date) BETWEEN gp.start_date AND gp.end_date)
       AND hou.organization_id = p_org_id
       AND gp.adjustment_period_flag = 'N'; --有调整期的把调整期排除
    RETURN l_period_name;
  EXCEPTION
    WHEN no_data_found THEN
      cux_conc_utl.log_msg('FUNCTION get_period_name ERROR:' ||
                           'NO_DATA_FOUND');
      RAISE fnd_api.g_exc_error;
    WHEN too_many_rows THEN
      cux_conc_utl.log_msg('FUNCTION get_period_name ERROR:' ||
                           'TOO_MANY_ROWS');
      RAISE fnd_api.g_exc_error;
    WHEN OTHERS THEN
      cux_conc_utl.log_msg('FUNCTION get_period_name ERROR:' || SQLERRM);
      RAISE fnd_api.g_exc_error;
  END get_period_name;



原文地址:https://www.cnblogs.com/wanghang/p/6299373.html