更新gl_ccid字段的时候,会顺带验证是不是存在,即get_gl_ccid这个方法是不是正确的执行,当正确的时候,即更新到里面去,否则,不更新:
FUNCTION get_gl_ccid(p_gl_segments IN VARCHAR2) RETURN VARCHAR2 AS
l_coa_id NUMBER;
l_ccid VARCHAR2(20);
l_msg_data VARCHAR2(300);
l_acc_code VARCHAR2(300);
BEGIN
l_coa_id := cux_gl_utl.g_coa_id;
l_acc_code := p_gl_segments;
--校验
IF fnd_flex_keyval.validate_segs('CHECK_COMBINATION',
'SQLGL',
'GL#',
l_coa_id,
l_acc_code,
'V',
SYSDATE,
'ALL',
NULL,
NULL,
NULL,
NULL,
FALSE,
FALSE,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL) THEN
RETURN 'TRUE';
ELSE
l_msg_data := l_msg_data || ' .组合科目[' || l_acc_code || ']出错:' ||
fnd_flex_keyval.error_message;
cux_conc_utl.log_msg(l_msg_data);
RETURN 'FALSE';
END IF;
END;
上面的fnd_flex_keyval.validate_segs方法,需要注意的是,当时check的时候,不会创建gl_ccid,但是当是create的时候如果不存在,就回创建一个新的gl_ccid,然后在检验分配行费用账户的时候:
fnd_flex_ext.get_ccid(application_short_name => 'SQLGL'
,key_flex_code => 'GL#'
,structure_number => cux_gl_utl.g_coa_id
,validation_date => to_char(sysdate
,fnd_flex_ext.date_format)
,concatenated_segments => t.gl_segment1 || '.' ||
t.gl_segment2 || '.' ||
t.gl_segment3 || '.' ||
t.gl_segment4 || '.' ||
t.gl_segment5 || '.' ||
t.gl_segment6 || '.' ||
t.gl_segment7 || '.' ||
t.gl_segment8 || '.' ||
t.gl_segment9) <= 0;
注意当用这个方法验证的时候,当没有ccid的时候,会自动生成一个,这就是为什么第一次导入的时候没有ccid,但是第二次导入的时候又能导进去了,这时是新建了个ccid,当客户不让自动建的时候就会有问题,因为自动建不好管理。
注意下面这个get_key_id的也是这样:
procedure get_key_id(p_key_flex in varchar2
,p_app_name in varchar2
,p_segment in varchar2
,x_key_id out number
,x_errmsg out varchar2) is
l_id_flex_num number;
v_err_msg_temp varchar2(3000);
begin
if p_key_flex = 'GL#' then
l_id_flex_num := cux_gl_utl.g_coa_id;
else
l_id_flex_num := 101;
end if;
if fnd_flex_keyval.validate_segs(operation => 'CREATE_COMBINATION' --注意,这个地方是create的话是错误的,会自动创建没有的ccid,当客户不让自动创建的时候就会有问题
,appl_short_name => p_app_name
,key_flex_code => p_key_flex
,structure_number => l_id_flex_num --- Pass your chart of accounts id
,concat_segments => p_segment --- Pass your account combination string you want to create
,validation_date => sysdate --- effective date by which you want the combination to be validated
) then
x_key_id := fnd_flex_keyval.combination_id; --获取ccid
else
v_err_msg_temp := fnd_flex_keyval.error_message;
x_errmsg := v_err_msg_temp;
x_key_id := 0;
end if;
end get_key_id;
注意这个地方也是会新增ccid的