视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
NC打印模板中审批流信息个性化配置用友 北分版本
2025-10-03 03:58:24 责编:小OO
文档
NC打印模板中审批流信息个性化配置

创建人:用友软件股份有限公司江苏区GBU业务部 谷雨    njgy@ufida.com.cn

修改人:用友软件股份有限公司北京分公司 建筑行业业务部 朱佞 zhuning@ufida.com.cn

◆需求背景

打印模板中可以附加审批流信息,但是审批流的打印内容、格式均不可调整,打出来比较丑陋。客户要求只需要把审批流中涉及到的审批人姓名打印在单据上即可,其余信息不需要打印。

◆解决思路

审批流的信息记录在pub_workflownote表中,可以根据单据的PK找出对应的审批信息。通常一张单据的审批流会有多行记录,如果在打印模板中用getColValue函数只能取到一条记录,不符合要求,所以需要有个方法可以把多行中的人名都显示出来。

因此,通过建立一个视图,把所需的信息放入到这个视图中,再通过视图来取出对应的信息。

视图如下:(以下内容为谷雨所写,可能有问题)

DROP VIEW NCV502.ZT_VIEWS_CW_SPR;

/* Formatted on 2010/05/31 17:21 (Formatter Plus v4.8.8) */

CREATE OR REPLACE FORCE VIEW ncv502.zt_views_cw_spr (billid, billno, cw_spr)

AS

   SELECT a.billid, a.billno,

          cw_merge

             (CAST

                 (MULTISET (SELECT   sm_user.user_name

                                FROM pub_workflownote, sm_user

                               WHERE pub_workflownote.billid = a.billid

AND pub_workflownote.ischeck <> 'X'

                                 AND sm_user.cuserid =

                                                    pub_workflownote.senderman

                            ORDER BY pub_workflownote.ts

                           ) AS strmarge_tbl

                 )

             ) AS cw_spr

     FROM (SELECT DISTINCT billid, billno

                      FROM pub_workflownote

WHERE pub_workflownote.approveresult <> 'null'

                       AND pub_workflownote.dr = 0) a;

上述视图中涉及到一个自定义的函数cw_merge,函数定义如下:

CREATE OR REPLACE function NCV502.cw_merge(str in strmarge_tbl) return varchar2 is

  rlt varchar2(4000);

begin

  for i in 1 .. str.count loop

    if i != str.count then

       rlt := rlt || str(i)||' , ';

    else

       rlt := rlt || str(i);

    end if;

  end loop;

  return rlt;

end;

/

(以下为经验证无误版本)

CREATE TYPE strmarge_tbl AS TABLE OF varchar2(50)—-创建类型

CREATE OR REPLACE function cmec【请替换为所使用oracle用户名,下同】.cw_merge(str in strmarge_tbl) –-创建视图所用函数函数作用下有描述

return varchar2 is rlt varchar2(4000);

begin

  for i in 1 .. str.count loop

    if i != str.count then

       rlt := rlt||str(i)||' , ';

    else

       rlt := rlt || str(i);

    end if;

  end loop;

  return rlt;

end;

CREATE OR REPLACE FORCE VIEW cmec【替换成所使用oracle用户名】.zt_views_cw_spr (billid, billno, cw_spr)—-创建所需视图

AS

   SELECT a.billid, a.billno,

          cw_merge

             (CAST

                 (MULTISET (SELECT   sm_user.user_name

                                FROM pub_workflownote, sm_user

                               WHERE pub_workflownote.billid = a.billid

                                 AND pub_workflownote.ischeck <> 'N'

                                 AND sm_user.cuserid =

                                                    pub_workflownote.senderman

                            ORDER BY pub_workflownote.ts

                           ) AS strmarge_tbl

                 )

             ) AS cw_spr

     FROM (SELECT DISTINCT billid, billno

                      FROM pub_workflownote

                     WHERE pub_workflownote.approveresult <> 'null'

                       AND pub_workflownote.dr = 0) a;

此函数的作用是把多行记录中的某列值取出后用“,”连接在一起。

审批流中如果有流程驳回制单人重新审批的,视图会自动过滤出最终的审批通过流程,并且人名的排列顺序按审批流的先后处理顺序显示。

视图的最终效果如下:

有了此视图后,在打印模板中可以定义自定义变量。

getColValue(zt_views_cw_spr,cw_spr ,billid , h_pk_payapply),从这个视图中取出审批人姓名。

最终打印的结果如下:

(--实现效果图另一种)

◆引申应用

此方式可以解决由于getColValue函数只能取一行值而无法取多行值的局限性,对于需要取多行值的需求场景,均可以用此思路解决,且不限于打印模板,单据模板、账表模板等均可使用。下载本文

显示全文
专题