理解Oracle EBS中设置并发程序的不兼容

        前几天天同事在群里问到这个问题的时候,说实话,当然还真不是理解很深刻,后来经过一番讨论,终于理解了。
这里举个例子,比如我们的客户化程序“CUX:三栏账打印”,里面的逻辑就是要往头和行的表中插入数据,然后从这两个表中取数展示数据,但是如果是有多个机构的公司,比如北京总部、浙江分公司两个机构(当然这两个机构都是用的一套EBS系统)。北京总部在跑“CUX:三栏账打印”这个请求的时候,恰巧浙江分公司也要跑“CUX:三栏账打印”这个请求,这无疑会造成数据的紊乱,因此Oracle提供了这样的解决方式,并发程序的不兼容性设置(对自身的不兼容),如果在不兼容性里面的名称栏设为“CUX:三栏账打印”,那么,当北京总部在跑这个程序的时候,浙江分公司只能处于等待状态,这样就能避免数据紊乱。

如何设置通过任务栏文字及颜色区分Oracle EBS环境

    一个公司在实施Oracle EBS系统的时候,往往会有几套环境同时存在,像我现在所在的项目上就有四套环境同时存在,环境太多,有时候很容易出现识别环境的错误,导致不可能挽回的错误。为了规避此失误操作,减少出错的概率,我们可以通过以下两个设置预配置文件的方式来区分:

1. 设置预配置“地点名称”来区分,比如,将其内容地点置为“XX公司EBS开发环境”,则一进入Form界面就会看到在任务栏上“XX公司EBS 测试环境”的字样,如下图所示:

TEST

2. 设置预配置“Java 色彩设计”来区分,比如将内容地点置为“灰色”,则一进入Form界面就会看到整个界面变为灰色,如下图所示:

java

Oracle EBS XML报表中数字的处理(Excel输出)

    不知大家是否遇到这样一个情况,报表中输出数字过大或者以“0”字符开头的时候(仅指在Excel输出中),会以科学计数法的形式显示或者省略0的形式显示,显然这样的效果不是客户想要的结果。相信大家的第一想法就是将数字转化为字符的格式,的确我们可以有不同的方法做这样的处理,自己对项目上出现此类的情况提供一些两种处理方式,均在rtf模板中处理(一般建议第一种方式):

1. 在对应的XML标签中的窗体域中写如下代码(此方法对金额格式财务化也有借鉴作用)

  <fo:bidi-override direction="ltr" unicode-bidi="bidi-override"><?AMOUNT?> </fo:bidi-override>

2. 对有比较大数字的列,在单元格中加上Excel的T()函数,比如,=T("AMOUNT"),窗体域与T函数之间不能有空格

3. 在程序里面控制,类似:select '''' || '0000' from dual;(针对数字型)

4. html版本的类似处理:  

 .context td{
      border:1px solid black;
      padding:0.2mm 0.2mm 0.2mm 0.2mm;
      white-space:nowrap;
      font-size: 9.5pt;
      mso-number-format:"\@";
    }

 同时需<TD nowrap align="left"> 变为 <TD nowrap align="left" x:str>

5. 当然如果查看报表的人员愿意自己格式化来查看,那也不失为一种解决方法,不过从对甲方人员的了解来看,他们不太会愿意去多点击一下鼠标

说明:
    上面1、2、3、4种方式都会有一个明显的弊端,即无法对单元格数据进行计算。因此如果需要对单元格进行计算,则不能选择以上两种方式;如果能够确定数据的量级大小,则可选择直接数字输出,不作任何处理。
    同时,对于应用方式1出的excel报表,仔细观察你会发现,字符的首尾都多出一个空字符,如下图标记处所示:

        空字符

延伸思考1:Excel内自带有货币形式的显示,看能不能将此方式在rtf模板里面函数化,以此达到想要的效果。

附上金额财务化函数:

–转换金额输出格式-字符
  Function Get_Amount_Format(p_amount in number) return varchar2 is
    l_amout_value varchar2(9999);
  Begin
    if p_amount <> 0 then
      select trim(to_char(p_amount, '999,999,999,999,999,999.99'))
        into l_amout_value
        from dual;
      return l_amout_value;
    else
      l_amout_value := '0.00';
      return l_amout_value;
    end if;
  Exception
    When others Then
      Log_Msg('p_amount change format error:' || p_amount || '=' ||
              sqlerrm);
      return null;
  End Get_Amount_Format;

  以下是效果图(数据均为测试数据):

      结果

延伸思考2:通过html标签强制转化为excel输出的报表,如果控制非文本项,比如0120,如果不做处理,将会输出120;2017-07将会输出JUL-17。

只需要在td标签中加入以下属性即可:

<td style="vnd.ms-excel.numberformat:@">

查询目前EBS系统GL开启的期间SQL

SELECT (P.PERIOD_NAME) PERIOD_NAME,
       TO_CHAR(P.START_DATE, 'YYYY-MM-DD') PERIOD_START,
       TO_CHAR(P.END_DATE, 'YYYY-MM-DD') PERIOD_END
  FROM GL_PERIODS P, GL_LEDGERS B, GL_PERIOD_STATUSES S
 WHERE P.PERIOD_SET_NAME = B.PERIOD_SET_NAME
   AND B.LEDGER_ID = S.LEDGER_ID
   AND S.CLOSING_STATUS = 'O'
   AND S.APPLICATION_ID = 101
   AND S.PERIOD_NAME = P.PERIOD_NAME
 ORDER BY PERIOD_END DESC;

技术笔记(小潘的技术记录博客)