Oracle EBS Report开发输出报表并下载请求结果

最近客户要求凭证打印出txt格式,且需要通过下载(非网页或者复制另存)方式实现。具体方案如下:

1.由于前台快码无法更新“CP_OUTPUT_FILE_TYPE”,于是采用后台更新需要展示的文件格式(注意插入中英文两条数据),RTZ/RTZ格式下载输出,如下图所示:

 

2.系统管理员浏览器选型
文件格式:RTZ
MIME类型:application/apps-rtz
说明:RTZ

3.并发请求定义中输出格式选择RTZ

4.结果如下图所示:

Oracle EBS查找帐套本位币及币种间汇率转换的方法

(1)获取帐套本位币

--取得当前帐套本位币
SELECT gsob.currency_code
  FROM gl_sets_of_books   gsob,
       hr_operating_units hou
 WHERE gsob.set_of_books_id = hou.set_of_books_id
   AND hou.organization_id = fnd_profile.value('ORG_ID');

(2)币种间转换

--取得指定币种(例如:HKD)当天转向当前帐套本位币(例如:CNY)的汇率
SELECT gdr.conversion_rate
  FROM gl_daily_rates_v gdr
 WHERE gdr.from_currency = 'HKD'
   AND gdr.to_currency IN (SELECT gsob.currency_code
                             FROM gl_sets_of_books   gsob,
                                  hr_operating_units hou
                            WHERE gsob.set_of_books_id = hou.set_of_books_id
                              AND hou.organization_id = fnd_profile.value('ORG_ID'))
   AND gdr.conversion_type = 'Corporate'
   AND gdr.conversion_date = trunc(SYSDATE);

(3)调用EBS的API来转换

SELECT gl_currency_api.get_rate(x_from_currency   => 'HKD',
                                x_to_currency     => 'CNY',
                                x_conversion_date => trunc(SYSDATE),
                                x_conversion_type => 'Corporate') from dual;

Oracle EBS如何启用说明性弹性域

        相信大家在做Oracle EBS的时候,都会遇到需要开启弹性域(说明性弹性域)的时候,这里我就将整个过程做一个描述性记录:

前提:需要开启的弹性域对应的表已经在弹性域定义界面进行注册(如果未注册,需要单独进行注册,此处不再描述注册过程)

主要分以下两种类型:

1.Form界面开启说明性弹性域

    a.打开需要设置弹性域的界面,找到该界面对应的表或试图,这里以开启物料批次弹性域为例,如下图所示:

      

    b.找到对应的基表,MTL_LOT_NUMBERS_ALL_V,一般都是以基表注册,因此找到基表MTL_LOT_NUMBERS,如下图所示:

      

    c.定位至弹性域注册界面,通过基表去模糊匹配,查出开启弹性域对应的标题(标题也可从最终需启用界面去看),找到标题“维护批号”,如下图所示:

    

    d.在说明性弹性域–段下,在标题栏输入“维护批号”,随即进入定义弹性域最终界面,如图所示:

    

    e.正常情况下,弹性域定义界面是冻结状态,如果需要编辑,需去掉冻结前的勾,点击段,进入编辑状态,如图所示:

    

    f.具体定义界面,输入编号,名称,窗口提示,弹性域对应基表的列,值集(值集与LOV值集同样意义),已显示和已启用,如下图,

   

    g.对值集进行编译,主要可选择必输和非必输项,如下图所示:

   

    h.保存,勾上冻结选项,系统会自动进行编译,编译完成即可生效,具体生效截图,如文档第一幅图所示。

2.web界面开启弹性域(待续)

可参考以下链接:

http://blog.csdn.net/rfb0204421/article/details/7641831

http://www.cnblogs.com/benio/archive/2009/12/07/1618725.html

Oracle PLSQL 将数字转为对应的英文单词

用途
    将数字转为对应的英文单词,技术写代码可引用这一段
使用场景
    发票、对账单等处输出金额

命令如下,可点击sql查看,下面的内容直接贴出来似乎不能直接编译。
/*  FUNCTION money_format_us(p_money_amount IN NUMBER) RETURN VARCHAR2 IS*/
DECLARE
  p_money_amount NUMBER := -2.04;
  TYPE lt_array_type IS VARRAY(50) OF VARCHAR2(20);
   /*一维数组,字符串类型 */
  l_array        lt_array_type := lt_array_type('ONE ',
                                                'TWO ',
                                                'THREE ',
                                                'FOUR ',
                                                'FIVE ',
                                                'SIX ',
                                                'SEVEN ',
                                                'EIGHT ',
                                                'NINE ',
                                                'TEN ',
                                                'ELEVEN ',
                                                'TWELVE ',
                                                'THIRTEEN ',
                                                'FOURTEEN ',
                                                'FIFTEEN ',
                                                'SIXTEEN ',
                                                'SEVENTEEN ',
                                                'EIGHTEEN ',
                                                'NINETEEN ',
                                                'TWENTY ',
                                                'THIRTY ',
                                                'FORTY ',
                                                'FIFTY ',
                                                'SIXTY ',
                                                'SEVENTY ',
                                                'EIGHTY ',
                                                'NINETY ',
                                                'HUNDRED ',
                                                'THOUSAND ',
                                                'MILLION ',
                                                'BILLION ');
  c_money_amount VARCHAR2(14);
  l_string       VARCHAR2(600);
  n              CHAR;
  l_pre_n        CHAR;
  l_length       NUMBER;
  i              NUMBER;
  tmp            NUMBER;
  l_decimal_flag VARCHAR2(1);
  l_money_amount NUMBER;
  l_sign         VARCHAR2(10);
BEGIN
  l_money_amount := round(abs(p_money_amount), 2);
  IF p_money_amount < 0 THEN
    l_sign := 'NEGATIVE ';
  ELSE
    l_sign := '';
  END IF;
  tmp            := l_money_amount * 100;
  c_money_amount := rtrim(ltrim(to_char(tmp, '999999999999999999')));
  l_length       := length(c_money_amount);
  i              := 0;
  WHILE i < l_length – 2 LOOP
    i := i + 1;
    IF MOD(l_length – 2 – i, 3) = 2 THEN
      n := substr(c_money_amount, i, 1);
      IF n <> '0' THEN
        l_string := l_string || l_array(to_number(n));
        l_string := l_string || l_array(to_number(28));
      END IF;
    END IF;
    IF MOD(l_length – 2 – i, 3) = 1 THEN
      n := substr(c_money_amount, i, 1);
      IF n = '1' THEN
        l_pre_n := n;
      END IF;
      IF n NOT IN ('0', '1') THEN
        l_string := l_string || l_array(to_number(n) + 18);
      END IF;
    END IF;
    IF MOD(l_length – 2 – i, 3) = 0 THEN
      IF nvl(l_pre_n, 'X') = '1' THEN
        n        := substr(c_money_amount, i, 1);
        l_string := l_string || l_array(to_number(l_pre_n || n));
        l_pre_n  := NULL;
      ELSE
        n := substr(c_money_amount, i, 1);
        IF n <> '0' THEN
          l_string := l_string || l_array(to_number(n));
        END IF;
      END IF;
    END IF;
    IF l_length – i = 5 AND substr(c_money_amount, i – 2, 3) <> '000' THEN
      l_string := l_string || l_array(to_number(29));
    END IF;
    IF l_length – i = 8 AND substr(c_money_amount, i – 2, 3) <> '000' THEN
      l_string := l_string || l_array(to_number(30));
    END IF;
    IF l_length – i = 11 THEN
      l_string := l_string || l_array(to_number(31));
    END IF;
  END LOOP;
  n := substr(c_money_amount, l_length – 1, 1);
  IF n NOT IN ('0', '1') THEN
    l_decimal_flag := 'Y';
    l_string       := l_string || 'AND ';
    l_string       := l_string || l_array(to_number(n) + 18);
  END IF;
  IF n = '1' THEN
    l_decimal_flag := 'Y';
    l_string       := l_string || 'AND ';
    l_pre_n        := n;
    n              := substr(c_money_amount, l_length, 1);
    l_string       := l_string || l_array(to_number(l_pre_n || n));
  ELSE
    n := substr(c_money_amount, l_length, 1);
    IF n <> '0' THEN
      IF nvl(l_decimal_flag, 'N') = 'N' THEN
        l_string := l_string || 'AND ';
      END IF;
      l_decimal_flag := 'Y';
      l_string       := l_string || l_array(to_number(n));
    END IF;
  END IF;
  IF l_decimal_flag = 'Y' THEN
    l_string := l_string || 'CENTS ';
  ELSE
    l_string := l_string;
  END IF;
  l_string := l_sign || l_string; /*RETURN l_string;*/
  dbms_output.put_line(l_string); /* EXCEPTION  WHEN OTHERS THEN    RETURN(SQLERRM);*/
END;

–此段引用自:http://catonisland.cn/post/138.html 

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