应收单或应付单列表“发票号码”字段无法排序,如何解决
1、问题描述
应收单或应付单列表中,对“发票号码”字段进行“排序”操作,但未生效
————
类似问题:应收单或应付单列表“发票代码”字段无法排序
2、原因分析
因应收开票业务中,涉及一张应收单对应多张发票的情况,当对应的发票数量大时,发票代码/发票号码字段需要支持存储较大长度的数据。为存储需要,该字段由最初的varchar修改为clob类型,造成排序失效,clob大文本字段不支持排序。在确认客户开票业务不涉及一张应收单对应大量发票的情况下,可以在客户环境修改“发票代码”/“发票号码”的字段类型。
3、解决方案
本方案以应收单为例,如需要修改应付单发票代码/号码字段,步骤相同,表名需替换为应付单表。
3.1 确认历史数据不超过varchar类型最大长度限制(Oracle:4000,Sqlserver:8000)
————执行以下语句查询
select max(length(FINVOICECODE )) from T_AR_OTHERBILL
select max(length(FInvoiceNo)) from T_AR_OTHERBILL
查看返回值,如果大于(Oracle:4000,Sqlserver:8000),则说明客户环境历史数据中,已存在数据大于限制,不可进行字段类型变更操作,该解决方案不适用。如果小于,可继续按本文档步骤继续操作。
3.2 数据备份
为避免执行过程存在异常,导致数据丢失,请在执行操作前,一定做好数据的备份。
————执行以下语句备份
select * into T_AR_OTHERBILL_bak from T_AR_OTHERBILL
3.3 执行字段类型修改语句
————执行以下语句修改“发票代码”字段类型,以Oracle为例
IF EXISTS(SELECT 1 FROM KSQL_USERCOLUMNS WHERE KSQL_COL_TABNAME = 'T_AR_OTHERBILL' AND KSQL_COL_NAME = 'FInvoiceCode')
alter table T_AR_OTHERBILL add FInvoiceCode_bak VARCHAR(4000);
if exists (select 1 from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceCode_bak')
update T_AR_OTHERBILL set FInvoiceCode_bak = FInvoiceCode;
if exists (select 1 from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceCode_bak')
alter table T_AR_OTHERBILL drop default for FInvoiceCode;
if exists (select 1 from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceCode_bak')
update T_AR_OTHERBILL set FInvoiceCode=null;
if exists (select 1 from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceCode_bak')
alter table T_AR_OTHERBILL drop column FInvoiceCode ;
IF EXISTS(SELECT 1 FROM KSQL_USERCOLUMNS WHERE KSQL_COL_TABNAME = 'T_AR_OTHERBILL' AND KSQL_COL_NAME = 'FInvoiceCode_bak')
alter table T_AR_OTHERBILL add FInvoiceCode VARCHAR(4000);
if exists (select 1 from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceCode_bak')
update T_AR_OTHERBILL set FInvoiceCode = FInvoiceCode_bak;
if exists (select * from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceCode_bak')
alter table T_AR_OTHERBILL drop column FInvoiceCode_bak;
————执行以下语句修改“发票号码”字段类型
IF EXISTS(SELECT 1 FROM KSQL_USERCOLUMNS WHERE KSQL_COL_TABNAME = 'T_AR_OTHERBILL' AND KSQL_COL_NAME = 'FInvoiceNo')
alter table T_AR_OTHERBILL add FInvoiceNo_bak VARCHAR(4000);
if exists (select 1 from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceNo_bak')
update T_AR_OTHERBILL set FInvoiceNo_bak = FInvoiceNo;
if exists (select 1 from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceNo_bak')
alter table T_AR_OTHERBILL drop default for FInvoiceNo;
if exists (select 1 from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceNo_bak')
update T_AR_OTHERBILL set FInvoiceNo=null;
if exists (select * from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceNo_bak')
alter table T_AR_OTHERBILL drop column FInvoiceNo;
IF EXISTS(SELECT 1 FROM KSQL_USERCOLUMNS WHERE KSQL_COL_TABNAME = 'T_AR_OTHERBILL' AND KSQL_COL_NAME = 'FInvoiceNo_bak')
alter table T_AR_OTHERBILL add FInvoiceNo VARCHAR(4000);
if exists (select 1 from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceNo_bak')
update T_AR_OTHERBILL set FInvoiceNo = FInvoiceNo_bak;
if exists (select * from KSQL_USERCOLUMNS where KSQL_COL_TABNAME = 'T_AR_OTHERBILL' and KSQL_COL_Name = 'FInvoiceNo_bak')
alter table T_AR_OTHERBILL drop column FInvoiceNo_bak;
3.4 修改字段“参与排序”的属性
路径:【企业建模】-【业务对象建模】-【动态扩展平台】-【动态扩展平台高级版】step1:在应收单节点(如无需添加应收单扩展方案),找到发票代码(invoiceCode)、发票号码(invoiceNo)字段。
step2:新增扩展属性”是否在通用过滤中参与排序”,并将“值”修改为“true”,启用该扩展方案。
3.5 修改代码排序逻辑
为避免对不可排序的字段操作“排序”时报错,代码对该操作进行了限制,需放开对应代码针对该内容的限制。
修改点:增加二开序时簿, 在getNotOrderColumns()方法中,修改为“return null”——因涉及源代码信息,该步骤如有疑问请联系总部研发二开指导。
应收单或应付单列表“发票号码”字段无法排序,如何解决
本文2024-09-22 19:23:10发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-106859.html