概述
一、创建form
1、基本步骤
建表——》建序列——》建同义词——》建视图——》建触发器
注:一般情况下,在cux下建表,其余的在apps下建立
建立序列
建立同义词
创建视图
创建触发器
(注:当点击一个属性要弹出另一个窗口时需要建触发器)
触发器名规范:视图名+“_t”
CREATE OR REPLACE TRIGGER 触发器名称
INSTEAD OF INSERT OR UPDATE OR DELETE ON 视图名
FOR EACH ROW
DECLARE
CREATE OF REPLACE TRIGGER YY_YXD_TRX_V_T
INSTEAD OF INSERT OR UPDATE OR DELETE ON YY_YXD_TRX_V
FOR EACH ROW
DECLARE
BEGIN
if inserting then
INSERT INTO YY_YXD_TRX
(TRX_ID,
PERSON_ID,
TRX_DATE,
TRX_TYPE,
TRX_AMOUNT,
CREATION_DATE,
CREATED_BY,
LAST_UPDATE_DATE,
LAST_UPDATED_BY,
LAST_UPDATE_LOGIN)
VALUES
(:NEW.TRX_ID,
:NEW.PERSON_ID,
:NEW.TRX_DATE,
:NEW.TRX_TYPE,
:NEW.TRX_AMOUNT,
:NEW.CREATION_DATE,
:NEW.CREATED_BY,
:NEW.LAST_UPDATE_DATE,
:NEW.LAST_UPDATED_BY,
:NEW.LAST_UPDATE_LOGIN);
end if;
if updating then
UPDATE YY_YXD_TRX
SET TRX_ID = :NEW.TRX_ID,
PERSON_ID = :NEW.PERSON_ID,
TRX_DATE = :NEW.TRX_DATE,
TRX_TYPE = :NEW.TRX_TYPE,
TRX_AMOUNT = :NEW.TRX_AMOUNT,
CREATION_DATE = :NEW.CREATION_DATE,
CREATED_BY = :NEW.CREATED_BY,
LAST_UPDATE_DATE = :NEW.LAST_UPDATE_DATE,
LAST_UPDATED_BY = :NEW.LAST_UPDATED_BY,
LAST_UPDATE_LOGIN = :NEW.LAST_UPDATE_LOGIN
WHERE TRX_ID = :OLD.TRX_ID;
end if;
if deleting then
DELETE FROM YY_YXD_TRX WHERE TRX_ID = :OLD.TRX_ID;
end if;
END;
在Oracle Forms Builder中的操作
二、建立folder
在之前创建的form的主画布上构建一个堆叠画布,然后设置堆叠画布的名称和子类信息(子类信息为 CANVAS_STACKED),将“物理的”栏下的 显示水平滚动条 改为 是
手动创建一个数据块,将之前数据块中要显示的属性复制到当前数据块下,
将当前数据块下的项的子类信息设为FOLDER_PROMPT_MULTIROW,将画布设为堆叠画布,x轴坐标设为0,y轴坐标也设为0 设置各项的初始值(如果有date类型的项,必须取消格式掩码) 复制这五个项:ORDER_BY1~3,FOLDER_OPEN,FOLDER_DUMMY到当前数据块下,更改画布 ORDER_BY1~3为堆叠画布,FOLDER_OPEN,FOLDER_DUMMY为主画布
将原先数据块下要显示的项的画布改为堆叠画布,x轴坐标设为0,y轴坐标设为.25 引入12个数据块级的触发器
加入三个表单级的触发器:FOLDER_ACTION , FOLDER_RETURN_ACTION , WHEN-WINDOW-RESIZED ,
修改名为WHEN-NEW-FORM-INSTANCE的触发器,在GO_BLOCK(‘数据块名’); 前加入如下语句:
app_folder.define_folder_block(
object_name =>' 表单名',
folder_block_name =>'前个数据块名',
prompt_block_name=>'新数据块名',
folder_canvas_name=>'堆叠画布名',
folder_window_name=>'窗口名',
disabled_functions=> 'disabled',
tab_canvas_name => '',
fixed_canvas_name =>'');
在EXECUTE_QUERY;后,另起一行输入:app_folder.event('INSTANTIATE');
三、收入管理
如果不想让用户修改某一项,就打开这项,找到数据库栏下的“允许插入”、“允许更新”两项,并改为否。
CURRENT_RECORD_INDICATOR(名称及子类信息)找到数据库--数据库项 为否
建立LOV
当两张表关联时需要建立LOV
使用LOV向导---->基于查询的新纪录组------->加入另一张表的SQL查询语句,并检查语法-----
----->选择要使用的记录组列添加到LOV列------->设置标题和列宽,然后逐列点中根据“查看返回项”选择返回的值------->设置名称
双击新建的LOV更改名称,子类信息改为LOV,更改与之相对应的记录组名
SELECT a.person_id,
a.person_name,
a.person_level,
a.birthday
FROM yy_yxd_persons a
四、支出管理
declare
lv_where varchar2(2000);
begin
lv_where := '1=1';
if :bloquery.person_name is not null then
lv_where := lv_where || ' and person_name=''' || :bloquery.person_name || '''';
end if;
set_block_property('YY_YXD_TRX_V',default_where,lv_where);
go_block('YY_YXD_TRX_V');
execute_query;
End
找到表单级的触发器 QUERY_FIND,在原先的语句前加-- ,然后在上一行输入go_block('新数据块名');
按条件查询
查询按钮所建的触发器写法
declare
lv_where varchar2(2000);
begin
lv_where:='1=1';
if:bloquery.person_name is not null then
lv_where:=lv_where||'and person_name='''||:bloquery.person_name||'''';
end if;
if:bloquery.pay_type is not null then
lv_where:=lv_where||'and pay_type='''||:bloquery.pay_type||'''';
end if;
if:BLOQUERY.PAY_DATE_FROM is not null then
lv_where:=lv_where||'and PAY_DATE >= to_date(''' || to_char(:BLOQUERY.PAY_DATE_FROM,'yyyymmdd') || ''',''yyyymmdd'')';
end if;
if:bloquery.pay_date_to is not null then
lv_where:=lv_where||'and PAY_DATE <= to_date(''' || to_char(:bloquery.pay_date_to,'yyyymmdd') || ''',''yyyymmdd'')';
end if;
set_block_property('YY_YXD_PAYMENTS_V',default_where,lv_where);
go_block('YY_YXD_PAYMENTS_V');
execute_query;
hide_window('WINQUERY');
end;
and PAY_DATE >= to_date('20180401', 'yyyymmdd')
and PAY_DATE <= to_date('20180430', 'yyyymmdd')
五、订单管理
订单表
订单编号 ORDER_ID NUMBER N
采购员 BUYER VARCHAR2(50) N
供应商 SUPPLIER VARCHAR2(50) N
订单状态 ORDER_STATE VARCHAR2(50) N
审核日期 ORDER_AUDIT_DATE DATE N
订单详情表order_details
行号 ID NUMBER N
订单编号 ORDER_ID NUMBER N
商品编号 GOODS_SNUM VARCHAR2(50) N
商品名称 GOODS_NAME VARCHAR5(50) N
商品类型 GOODS_TYPE VARCHAR5(50) N
商品数量 GOODS_NUM NUMBER N
单价 UNIT_PRICE NUMBER N
金额 money NUMBER N
CREATION_DATE DATE Y
CREATED_BY NUMBER Y
LAST_UPDATE_DATE DATE Y
LAST_UPDATED_BY NUMBER Y
LAST_UPDATE_LOGIN NUMBER Y
点击上图中最左侧的空白按钮时跳转到新的form,如下图所示:
注:一般主键不显示在页面上
方法:先在主form上设置空白按钮,项类型为 按钮,不设子类信息(建议:宽度设为 . 167;高度设为.25),然后设置一个触发器(右击找到便捷触发器下的WHEN-BUTTON-PRESSED,并写入:
fnd_function.EXECUTE(function_name=>功能名,
open_flag=>'C',
session_flag=>'SESSION',
other_params=>'子form中设的参数名='||:当前数据块名 . 主键名,
activate_flag=>'ACTIVATE',
browser_target=>'');
),
在子form中参数一栏下设置一个参数,参数数据类型为number,然后找到表单级别的触发器WHEN-NEW-FORM-INSTANCE,并往其中加入
declare
lv_where varchar2(100):='1=1';
begin
if :parameter.参数名 is not null then
lv_where:=lv_where||'and 所对应的项名='||:parameter.参数名;
end if;
set_block_property('所对应的数据块名',default_where,lv_where);
end;
传过来的是主键,具有唯一性,并且不在页面上显示
先要达到上图效果
六、制作EBS报表
1.分析报表格式;
2.根据分析的结果创建xml文件;
3.用word创建RTF模板;
4. 创建PI/SQL存储过程(包)
create or replace package cux_xml_yxd_persons_rpt_pkg is
PROCEDURE persons_info(errbuf OUT NOCOPY VARCHAR2,
retcode OUT NOCOPY VARCHAR2);
end cux_xml_yxd_persons_rpt_pkg;
create or replace package body cux_xml_yxd_persons_rpt_pkg is
PROCEDURE print(p_content VARCHAR2) IS
BEGIN
dbms_output.put_line(p_content);
fnd_file.put_line(fnd_file.output, p_content);
END print;
PROCEDURE print_xml(p_element_name IN VARCHAR2, p_content VARCHAR2) IS
BEGIN
PRINT('<' || p_element_name || '><![CDATA[' || p_content || ']]></' ||
p_element_name || '>');
END print_xml;
PROCEDURE persons_info(errbuf OUT NOCOPY VARCHAR2,
retcode OUT NOCOPY VARCHAR2) IS
CURSOR personsinfo IS
SELECT yp.person_name,
yp.person_level,
yp.salary,
yp.birthday
FROM yy_yxd_persons yp
ORDER BY yp.person_name
;
lv_person_info personsinfo%rowtype;
BEGIN
print('<?xml version="1.0" encoding="UTF-8"?>');
print('<G_ALL>');
for lv_person_info in personsinfo loop
print('<G_LINE>');
print_xml('person_name',lv_person_info.person_name);
print_xml('person_level',lv_person_info.person_level);
print_xml('salary',lv_person_info.salary);
print_xml('birthday',to_char(lv_person_info.birthday,'yyyy-mm-dd'));
print('</G_LINE>');
end loop;
print('</G_ALL>');
END persons_info;
end cux_xml_yxd_persons_rpt_pkg;
5. 注册可执行
6. 注册请求
当有查询条件时设置参数
设置值集
7. 注册xml publisher数据定义
切换职责为Oracle xml publisher
8. 注册xml publisher模板
数据定义一栏也要填,与名称一致
9.将请求添加到相应的请求组里
9. FORM如何直接打开链接
首先应切换职责为 CUX:客户化开发
点击查看,找到请求,
七、EBS财务管理
1、应付管理
流程:输入供应商-→创建发票-→检验发票-→付款(核销发票)-→创建会计科目-→将信息传入总账
所涉及的表
供应商:po_vendors(是表也是视图)存头信息、po_vendor_site_all(两张表通过vendor_id进行关联)
发票管理(建头、建行、建分配行)验证(点左下的活动,找到验证打钩)
ap_invoices_all
付款
有2种方式,一种是完全支付,另一种是分批支付
管理供应商,银行,发票和付款。应付账款是供应链管理系统的最终环节,它允许企业支付供应商的货物和服务成本。供应链管理的目标是保持低库存,而库存足够满足需求,库存就是资金,因此,应付账款管理系统的目标是尽可能推迟付款,同时确保及时付款。
创建供应商
点击左侧 地址簿
其中付款管理,将支票一栏打钩
创建发票批和发票
2、应收管理
流程:创建客户-→创建发票(事务处理)-→付款-→创建会计科目-→汇入总账
表:
客户
hz_parties、(客户名称:party_name)
hz_cust_accounts(客户编号:Account_number)
发票:
ra_customer_trx_all(主键:customer_trx_id、编号:trx_number)
(发票行)ra_customer_trx_lines_all
(分配行)ra_customer_trx_line_gl_dist_all
一般:一个分配行对应一个发票行
总账:gl_code_combinations
收款:ar_cash_receipts_all ( cash_receipt_id、 )
核销:ar_receivable_applications_all ( status ,display )
根据收款单如何得出收款客户名称
SELECT hsite.cust_account_id, hca.account_number, hp.party_name
FROM hz_cust_site_uses_all huse,
hz_cust_acct_sites_all hsite,
hz_cust_accounts hca,
hz_parties hp
WHERE huse.site_use_id = 1163
AND huse.cust_acct_site_id = hsite.cust_acct_site_id
AND hsite.cust_account_id = hca.cust_account_id
AND hca.party_id = hp.party_id;
创建客户
首先将职责切换为“应收账款经理”
创建收款发票(事务管理)
在“工具”一栏下,找到创建会计科目
创建收款
然后,回到前一图,且图中右上角“余额”模块中原先未核销的金额转为已核销,
之后,再次创建会计科目
接口开发
1、首先获取数据,三种数据传输的方式:dblink、数据文件、web Service
2、将数据传入临时表(客户化表)中
3、进行校验,校验通过以后,将数据放入标准接口表中,然后调用标准API或者标准的接口请求。
4、最后,无论对错都生成log日志文件,如果有错误,文件应写明错误信息
3、总账
总账:gl_sets_of_books(视图)
科目余额表:gl_balances
在此说明一下,本次的笔记不是本人所写,我的笔记写的比较乱,由于我的时间已经不多了,在此,先借用别人的笔记吧,见谅。
最后
以上就是明亮灰狼为你收集整理的ebs学习笔记一、创建form二、建立folder三、收入管理四、支出管理五、订单管理六、制作EBS报表七、EBS财务管理的全部内容,希望文章能够帮你解决ebs学习笔记一、创建form二、建立folder三、收入管理四、支出管理五、订单管理六、制作EBS报表七、EBS财务管理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复