前段时间在项目上做一个HTML版的凭证打印,空白行的问题找了不少资料,最后终于在一个同事的帮助下完成了。
比如:一个凭证有4行,此凭证固定行数为8行,如果不做处理,就会出现没有数据的行出现连续空白的情况,最后,定义了
一个常量,可能现在想很简单,但是当时就没有想到这样做。
l_cell_null CONSTANT varchar2(10) := chr(38) || 'nbsp;';
在可能出现空白行的地方,在最后加上如下代码所示的样子:
nvl(substr((Get_Segment_Desc(c2.list_account,
'segment3',
l_sob_id) || ' ' ||
Get_Segment_Desc(c2.segment4,
'segment4',
l_sob_id)),
1,
40),
l_cell_null) || l_cell_null
最后终于解决了此问题,现在项目上对凭证的格式要求很严格,之前用的是PDF版本的,但是空白页有时候不好把握,最终客户提需求开发了这个HTML班的报表。
所有由小潘发布的文章
Form开发复选框应该注意事项
今天就写说一个form开发的时候,大家可能不太注意的地方,前几天,我做完一个开发功能,部署到测试环境中去,测试过几次,完全没有问题,就在第二天准备上生产的时候,问题出现了,数据无缘无故丢失了,事情是这样的:
做财务的可能都会遇到这样的问题,税费计提的功能,大量重复性繁杂的工作量,没有技术性,纯属体力劳动,因此客户提出需求需要用系统帮忙解决此问题,于是,业务顾问谈好需求后,自己作为技术顾问就开始安装功能需求文档做设计,做开发,当然这个本来也不是什么大的开发,就是需要对不同机构,不同产品进行税费计算,然后生成日记账入账即可,于是,form开发,逻辑代码书写都完成了,部署测试环境,内部测试完成,无误,提交客户测试,问题出现了,比如有一个产品A,税率是0.00013,然后需要生成公司间往来,这样,一个税种就会生成总公司本部和分支机构两条日记账,但是结果两条数据都没有出现,由于form界面是开发的,里面的数据是人工维护进去的,如图:
这两者的差别就是:未选中的时候,此ITEM的值,在数据库里面存储可能是空,可能是N,如果选中不允许,结果就只会在数据库中存储为N,提出这点主要是因为,最近在一个form的开发中遇到这样的问题,我根据此字段去作为判断条件的时候,发现有时候数据正确有时候数据错误,数据库,“有时候”这个问题就很麻烦,做技术的就最怕这个了,于是我仔细核对FORM,才发现这个问题,其实如果对于复选框还好,毕竟只有三种结果,Y,N,NULL,这样的话,我可以根据Y和<>'Y'来,但是遇到其他的,就得注意了,且要记得赋初始值,否则FORM编译会报错,记下以此警醒自己。
今天就写这样一个小知识点,谢谢。(此文是本人之前发布在ERP100上的,链接 http://bbs.erp100.com/forum.php?mod=viewthread&tid=266572&extra=)
PO最终关闭失败
之前做最终关闭PO单,释放保留款的时候,出现图所示错误,查了metalink上,方法如下:
1. Go into the responsibility: General Ledger.
2. Navigate to the GL Accounts form:
Nav: Setup -> Accounts -> Combinations.
3. Query the accounts used on the affected PO and ensure that Allow Posting and Allow Budgeting flags are checked.
4. Retest the issue.
5. Migrate the solution as appropriate to other environments.
但是没有效果……
最后发现是更改某标准的功能后,需要重新验证一下应用产品。(错误如图),需运行请求名:验证应用产品会计定义,参数
根据各自的需求选择即可。
获取财务系统设置审批链相关信息SQL
SELECT DISTINCT PS.POSITION_STRUCTURE_ID 审批链ID,
PS.NAME 审批链名称,
PE.POS_STRUCTURE_ELEMENT_ID POS_STRUCTURE_ELEMENT_ID,
HP.POSITION_ID 职位ID,
HP.NAME 职位名,
PPF.PERSON_ID 员工ID,
PPF.LAST_NAME 用户名,
PE.ORDER_FLAG ORDER_FLAG
FROM PER_POS_STRUCTURE_VERSIONS PV,
PER_POSITION_STRUCTURES PS,
(SELECT POS_STRUCTURE_VERSION_ID,
POS_STRUCTURE_ELEMENT_ID,
PARENT_POSITION_ID,
ORDER_FLAG
FROM (SELECT PE.POS_STRUCTURE_VERSION_ID,
PE.POS_STRUCTURE_ELEMENT_ID,
PE.PARENT_POSITION_ID,
'1' ORDER_FLAG
FROM PER_POS_STRUCTURE_ELEMENTS PE
UNION ALL
SELECT PE.POS_STRUCTURE_VERSION_ID,
PE.POS_STRUCTURE_ELEMENT_ID,
PE.SUBORDINATE_POSITION_ID PARENT_POSITION_ID,
'2' ORDER_FLAG
FROM PER_POS_STRUCTURE_ELEMENTS PE
WHERE NOT EXISTS (SELECT 1
FROM PER_POS_STRUCTURE_ELEMENTS PE2
WHERE PE2.POS_STRUCTURE_VERSION_ID =
PE.POS_STRUCTURE_VERSION_ID
AND PE.SUBORDINATE_POSITION_ID =
PE2.PARENT_POSITION_ID))) PE,
PER_PEOPLE_F PPF,
PER_ALL_ASSIGNMENTS_F PAF,
HR_POSITIONS_F HP
WHERE PV.POS_STRUCTURE_VERSION_ID = PE.POS_STRUCTURE_VERSION_ID
AND PV.POSITION_STRUCTURE_ID = PS.POSITION_STRUCTURE_ID
AND PPF.PERSON_ID = PAF.PERSON_ID
AND PE.PARENT_POSITION_ID = HP.POSITION_ID
AND HP.POSITION_ID = PAF.POSITION_ID
AND (PAF.EFFECTIVE_END_DATE IS NULL OR PAF.EFFECTIVE_END_DATE > SYSDATE)
AND (HP.EFFECTIVE_END_DATE IS NULL OR HP.EFFECTIVE_END_DATE > SYSDATE)
AND (PPF.EFFECTIVE_END_DATE IS NULL OR PPF.EFFECTIVE_END_DATE > SYSDATE)
AND PAF.EFFECTIVE_END_DATE >= SYSDATE
–AND PS.NAME = '000100预算申请审批层次'
ORDER BY PS.POSITION_STRUCTURE_ID,
PE.POS_STRUCTURE_ELEMENT_ID,
PE.ORDER_FLAG;
获取采购员相关信息SQL
SELECT FFV.DESCRIPTION 机构描述,
PP.NAME 职位,
FU.DESCRIPTION 描述,
PA.AGENT_ID 采购员ID,
FU.USER_ID 用户ID,
FU.USER_NAME 系统名称,
PPF.FULL_NAME 全名,
PPF.EMPLOYEE_NUMBER 员工编号
FROM PER_PEOPLE_F PPF,
PER_ASSIGNMENTS_F PAF,
PER_POSITIONS PP,
FND_USER FU,
PO_AGENTS PA,
FND_FLEX_VALUES_VL FFV,
FND_FLEX_VALUE_SETS FF
WHERE PPF.PERSON_ID = PAF.PERSON_ID
AND FFV.FLEX_VALUE_SET_ID = FF.FLEX_VALUE_SET_ID
AND FFV.ENABLED_FLAG = 'Y'
AND (FFV.END_DATE_ACTIVE IS NULL OR FFV.END_DATE_ACTIVE > SYSDATE)
AND FFV.FLEX_VALUE = SUBSTR(PP.NAME, 1, INSTR(PP.NAME, '.', 1, 1) – 1)
AND FF.FLEX_VALUE_SET_NAME = '&ORG_COA'
AND FFV.SUMMARY_FLAG = 'N'
AND PA.AGENT_ID = PPF.PERSON_ID
AND FU.EMPLOYEE_ID = PPF.PERSON_ID
AND PP.POSITION_ID = PAF.POSITION_ID
AND PPF.PERSON_ID IN
(SELECT DISTINCT PA.AGENT_ID
FROM PO_AGENTS PA, PER_ALL_PEOPLE_F PAPF, FND_USER FU
WHERE PA.AGENT_ID = PAPF.PERSON_ID
AND FU.EMPLOYEE_ID = PAPF.PERSON_ID
AND (PAPF.EMPLOYEE_NUMBER IS NOT NULL OR
PAPF.NPW_NUMBER IS NOT NULL)
AND TRUNC(SYSDATE) BETWEEN PAPF.EFFECTIVE_START_DATE AND
PAPF.EFFECTIVE_END_DATE)
AND SYSDATE BETWEEN PPF.EFFECTIVE_START_DATE AND PPF.EFFECTIVE_END_DATE
AND SYSDATE BETWEEN PAF.EFFECTIVE_START_DATE AND PAF.EFFECTIVE_END_DATE
AND (FU.END_DATE IS NULL OR FU.END_DATE > SYSDATE)
AND (PP.DATE_END IS NULL OR PP.DATE_END > SYSDATE)
ORDER BY PP.NAME, FU.CREATION_DATE DESC;