2024年6月11日发(作者:)

U8知识库文档

U8快速开发工具-凭证生成

摘要

在U8 的客户化开发中经常会遇到客户化的单需要生成凭证,标准单据生成凭证,本文

即介绍如何使用U8 快速开发工具完成两种参照生单的开发。

目标

本文主要介绍基于快速开发工具,通过脚本预置+插件开发的方式完成生成凭证功能。

客户化开发单据生成凭证

1. 添加自定义按钮

操作步骤详见《U8产业链_快速开发工具_基础介绍.docx》中的“增加自定义按钮”章

节。

本文接续之前的介绍

UA_Menu

表加记录

ufsystem..ua_idt

表加记录

sa_menuconfig

表加记录

sa_toolbarconfig

表加记录

--BEGIN 创建菜单脚本

delete UA_Menu where cmenu_name = '发货单制单' and csub_id ='AR'

GO

insert into UA_Menu

([cMenu_Id],[cMenu_Name],[cMenu_Eng],[cSub_Id],[IGrade],[cSupMenu

_Id],[bEndGrade],[cAuth_Id],

[iOrder],[iImgIndex],[Paramters],[Depends],[Flag],[IsWebFlag])

values('AR109','发货单制单

',Null,'AR',1,'AR','0',Null,900,2,Null,Null,Null,Null)

delete UA_Menu where cmenu_name = '发货单制单处理' and csub_id ='AR'

GO

insert into UA_Menu

([cMenu_Id],[cMenu_Name],[cMenu_Eng],[cSub_Id],[IGrade],[cSupMenu

U8知识库文档

_Id],[bEndGrade],[cAuth_Id],

[iOrder],[iImgIndex],[Paramters],[Depends],[Flag],[IsWebFlag])

values('AR10901','发货单制单处理

',Null,'AR',2,'AR109','1','AR10901',910,4,Null,Null,Null,Null)

--------------------------------当前工具版本V4.00.0011 脚本创建时

间:2012-09-18 9:34:52-----

-- 创建菜单脚本

GO

--END

delete from ufsystem..ua_idt where id ='AR10901'

GO

insert into ufsystem..ua_idt

([id],[assembly],[catalogtype],[type],[class],[entrypoint],[param

eter],[reserved])

values('AR10901','ductFacade',0,0,Null,Null,Null,Nul

l)

--

delete from sa_menuconfig where parameters='AR10901'

GO

insert into sa_menuconfig

([menuid],[helpid],[functionid],[parameters],[toolbarname],[authi

d],[defaultstr],[condition])

values('AR10901',Null,'voucherlist','AR10901','AR10901_list',Null

,Null,Null)

--

delete from sa_toolbarconfig where tblkey='AR10901_list'

GO

insert into sa_toolbarconfig

([tblkey],[imageid],[keydownapplytask],[keyupfreetask],[buttonkey

],[buttoncaptionresid],[tooltiptextresid],[buttonstyle],[inivisib

le],[inienable],[buttonindex],[subindex],[hotshift],[hotkeycode],

[hotkeystate],[editenable],[buttonparas],[downstatus],[upstatus],

[errstatus],[buttontag],[grouptype])

values('AR10901_list','16',Null,Null,'refresh','l.01.

frmbillvouch.00290','lvouch.00291','0',1,1

,22,Null,2,'82','Ctrl+R','0',Null,'0',Null,Null,'Refresh','iAssis

tant')

insert into sa_toolbarconfig

([tblkey],[imageid],[keydownapplytask],[keyupfreetask],[buttonkey

U8知识库文档

],[buttoncaptionresid],[tooltiptextresid],[buttonstyle],[inivisib

le],[inienable],[buttonindex],[subindex],[hotshift],[hotkeycode],

[hotkeystate],[editenable],[buttonparas],[downstatus],[upstatus],

[errstatus],[buttontag],[grouptype])

values('AR10901_list','36',Null,Null,'help','

billvouch.00293','lvouch.00294','0',1,1,23

,Null,0,'112',Null,'0',Null,'0',Null,Null,'Help','iAssistant')

--

--生成凭证

insert into sa_toolbarconfig

([tblkey],[imageid],[keydownapplytask],[keyupfreetask],[buttonkey

],[buttoncaptionresid],[tooltiptextresid],[buttonstyle],[inivisib

le],[inienable],[buttonindex],[subindex],[hotshift],[hotkeycode],

[hotkeystate],[editenable],[buttonparas],[downstatus],[upstatus],

[errstatus],[buttontag],[grouptype])

values('AR10901_list','13',Null,Null,'SendCreatePZ','生成凭证','生

成凭证

','0',1,1,13,Null,0,'112',Null,'0',Null,'0',Null,Null,'incomplete

_tsk','iAssistant')

--

参考附件:参照生单按钮.sql

2. 创建发货单制单列表

创建只有单据列表的操作参考《U8产业链_快速开发工具_基础介绍.docx》中的“创建

单据列表”章节。

本文以“发货单制单列表”为例。

领料申请单参照列表

---删除栏目缓存信息begin --

U8知识库文档

delete AA_ColumnDicCache_Main where ckey ='AR10901'

GO

delete AA_ColumnDicCache_Detail where ckey ='AR10901'

GO

delete aa_columnset_base where ckey ='AR10901'

GO

---删除栏目缓存信息end –

delete sa_voucherlistconfig where ckey ='AR10901'

GO

insert into sa_voucherlistconfig

([ckey],[listfrom],[defaultfilter],[filtername],[subsysid],[colum

nkey],[menuid],[maintbl],[detailtbl],[mainkey],[detailkey],[shows

umoption],[canmodify])

values('AR10901','Sales_FHDPZ_T inner join Sales_FHDPZ_W on

Sales_FHDPZ_=Sales_FHDPZ_',Null,'SA[AddPZ]01','','AR1

0901',Null,'Sales_FHDPZ_T','Sales_FHDPZ_W',NULL,NULL,'1','0')

--Insert into the Table aa_busobject_base

delete aa_busobject_base where cbusobid='AR10901'

GO

insert into aa_busobject_base

([cBusObId],[cBusObName],[iAuthType],[bAuthControl],[cSub_Id],[cM

ark],[iFuncType],[langid],[iOrder],[bLocked],[cLockedBy],[bNoAuth

])

values('AR10901','list of delivery

document',1,'0','SA',Null,2,'en-US',1,'0',Null,'0')

insert into aa_busobject_base

([cBusObId],[cBusObName],[iAuthType],[bAuthControl],[cSub_Id],[cM

ark],[iFuncType],[langid],[iOrder],[bLocked],[cLockedBy],[bNoAuth

])

values('AR10901','发货单制单处理

',1,'0','SA',Null,2,'zh-CN',1,'0',Null,'0')

insert into aa_busobject_base

([cBusObId],[cBusObName],[iAuthType],[bAuthControl],[cSub_Id],[cM

ark],[iFuncType],[langid],[iOrder],[bLocked],[cLockedBy],[bNoAuth

])

values('AR10901','發貨單制單处理

',1,'0','SA',Null,2,'zh-TW',1,'0',Null,'0')

--Insert into the Table aa_columndic_base

U8知识库文档

delete aa_columndic_base where ckey ='AR10901'

GO

insert into aa_columndic_base

([cKey],[cFld],[cQryField],[iColPos],[cCaption],[cCaptionPar],[bF

ixed],[bDisp],[iColWidth],[iAlign],[cOrder],[bLock],[iMergeCols],

[bMustSel],[bNeedSum],[LocaleID],[IsEnum],[EnumType],[EnumTypeStr

ing],[bFilter],[bMerge],[CanModify],[ReferType],[bHideInColSet],[

cSumType])

values('AR10901','selcol','selcol',1,'选择

',Null,'1','1',800,4,Null,'1',0,'1','0','zh-CN','0',Null,Null,'0'

,'0','0',Null,'0',Null)

insert into aa_columndic_base

([cKey],[cFld],[cQryField],[iColPos],[cCaption],[cCaptionPar],[bF

ixed],[bDisp],[iColWidth],[iAlign],[cOrder],[bLock],[iMergeCols],

[bMustSel],[bNeedSum],[LocaleID],[IsEnum],[EnumType],[EnumTypeStr

ing],[bFilter],[bMerge],[CanModify],[ReferType],[bHideInColSet],[

cSumType],[iFieldType],[bExtended])

values('AR10901','ccusabbname','',310,'客户简称

','','0','1',1200,1,'','0',0,'0','0','zh-CN','0',Null,Null,'0','0

','0',Null,'0',Null,Null,'0')

insert into aa_columndic_base

([cKey],[cFld],[cQryField],[iColPos],[cCaption],[cCaptionPar],[bF

ixed],[bDisp],[iColWidth],[iAlign],[cOrder],[bLock],[iMergeCols],

[bMustSel],[bNeedSum],[LocaleID],[IsEnum],[EnumType],[EnumTypeStr

ing],[bFilter],[bMerge],[CanModify],[ReferType],[bHideInColSet],[

cSumType],[iFieldType],[bExtended])

values('AR10901','ccuscode','',300,'客户编码

','','0','0',1200,1,'','0',0,'0','0','zh-CN','0',Null,Null,'0','0

','0',Null,'0',Null,Null,'0')

参考附件:Data_Voucherlist_EFKPZY_DispatchList_AR10901_

3. 配置参照信息

配置“发货单制单处理”列表的过虑条件“领料申请单”

参考附件:参照生单配置脚本.sql

其中:'

AR10901

' :发货单制单处理的单据号;

'

SA[AddPZ]01

'为发货单制单处理列表界面的过滤条件key值;

'

Sales_FHDPZ_T

Sales_FHDPZ_W

' 为客户化的发货单列表主子表视图。

U8知识库文档

获取菜单id如下图所示:

获取过滤界面的key值如下图所示:

4. 创建发货单列表视图

Sales_FHDPZ_T、Sales_FHDPZ_W

’为发货单列表界面对应的视图,在此视图

中需要将数据源字段 as 到目标单据字段,如下图所示:

-----

----创建发货单生成凭证视图

/****** Object: View [dbo].[Sales_FHDPZ_T] Script Date: 09/25/2012

15:56:01 ******/

IF EXISTS (SELECT * FROM WHERE object_id =

OBJECT_ID(N'[dbo].[Sales_FHDPZ_T]'))

DROP VIEW [dbo].[Sales_FHDPZ_T]

GO

/****** Object: View [dbo].[Sales_FHDPZ_T] Script Date: 09/25/2012

15:56:02 ******/

U8知识库文档

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE VIEW [dbo].[Sales_FHDPZ_T]

AS

GO

/****** Object: View [dbo].[Sales_FHDPZ_W] Script Date: 09/25/2012

15:56:39 ******/

IF EXISTS (SELECT * FROM WHERE object_id =

OBJECT_ID(N'[dbo].[Sales_FHDPZ_W]'))

DROP VIEW [dbo].[Sales_FHDPZ_W]

GO

/****** Object: View [dbo].[Sales_FHDPZ_W] Script Date: 09/25/2012

15:56:39 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE VIEW [dbo].[Sales_FHDPZ_W]

AS

select

,sum(itax) as itax --税额

,sum(isum) as isum --价税合计

from [Sales_FHD_W] w inner join [Sales_FHD_T] t on =

where isnull(ier,'')<>'' and isnull(e22,'')=''

group by

GO

/****** Object: View [dbo].[Sales_FHDPZ_W2] Script Date: 09/25/2012

15:56:39 ******/

IF EXISTS (SELECT * FROM WHERE object_id =

select * from [Sales_FHD_T] --where isnull(cCloser,'')=''

U8知识库文档

OBJECT_ID(N'[dbo].[Sales_FHDPZ_W2]'))

DROP VIEW [dbo].[Sales_FHDPZ_W2]

GO

/****** Object: View [dbo].[Sales_FHDPZ_W2] Script Date: 09/25/2012

15:56:39 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE VIEW [dbo].[Sales_FHDPZ_W2]

AS

select

,sum(itax) as itax --税额

,sum(isum) as isum --价税合计

,cdefine22 --凭证线索号

,cdefine23 --凭证号

,cdefine36 --制单日期

from [Sales_FHD_W] w inner join [Sales_FHD_T] t on =

where isnull(ier,'')<>'' and isnull(e22,'')<>''

group by ,cdefine22,cdefine23,cdefine36

GO

参考附件:Data_View_EFKPZY_DispatchList_AR109_

5. 生成凭证按钮插件功能开发

在接口方法中补充生成凭证功能逻辑

U8知识库文档

参照按钮逻辑

Private WithEvents m_objPz As clsPZ

'首先需要实现凭证控件的保存事件

'rstCurrentVouch 当前凭证数据记录集

' IsSuccess 只有返回true的时候凭证才可以保存

Private Sub m_objPz_Save(rstCurrentVouch As set,

IsSuccess As Boolean)

Dim objCon As tion

Set objCon = Connection '当前数据库连接

Dim coutno_id As String '线索号

Dim csignino_id As String '凭证号

Dim dbill_date As String '制单日期

Dim ccode As String '销售收入科目

csignino_id = "记-"

ccode = kzkm

If Trim(("ino_id")) <> "" Then

coutno_id = Trim(("coutno_id").Value)

csignino_id

dbill_date

Trim(("dbill_date").Value)

''凭证保存回写发货单信息 cDefine22[表体自定义项1]为凭证线索号

coutno_id,cDefine23[表体自定义项2]为凭证号,cDefine24[表体自定义项3]为收

入科目,就是应收单位款的会计科目,cDefine36[表体自定义项15]制单日期

e "update DispatchLists set cDefine22='" &

coutno_id & "',cDefine23='" & csignino_id & "',cDefine24='" & ccode

= csignino_id & Right("0000" &

=

Trim(("ino_id").Value), 4)

U8知识库文档

& "',cDefine36='" & dbill_date & "' where dlid in (" & dlids & ")"

End If

IsSuccess = True

Exit Sub

End Sub

'Voucher 当前单据对象

'ButtonKey 按扭关键字

'strUserErr 错误信息

'bSuc =true 表示成功并终止系统流程 =false表示失败并继续系统流程

Public Sub Before_ButtonClick(Voucher As Object, ButtonKey As String,

strUserErr As String, bSuc As Boolean)

Select Case LCase(StrCardNum)

Case LCase("AR10901")

''凭证

Dim UfDb As New base

Dim sql As String

Dim dbc As New tion

tabase m_me

'总账公用函数实例化

Set m_ZwPub = New clsPub

' m_bs m_emDb, m_me,

m__Id, m_, m_d, m_e,

m_sword

Set m_ = m_login

' Set m_ZwPub.g_business = g_busines1 ''这个注释了会弹出模

态对话框

m_bs2

m__Id,

"AR", m_emDb, UfDb,

m_, m_ame,

m_e, m_sword

'调用凭证对象

Set m_objPz = New clsPZ

Set m_n = m_login

Set m_ = m_ZwPub

If <> 0 Then

m_me

e "delete " & m_eName

U8知识库文档

sqlstr = "insert into " & m_eName &

"([csign],[ino_id],[inid],[cbill],[doutbilldate],[ccashier],[idoc

],[ctext1],[ctext2],[cexch_name],[cdigest],[ccode],[md],[mc],[md_

f],[mc_f],[nfrat],[nd_s],[nc_s],[csettle],[cn_id],[dt_date],[cdep

t_id],[cperson_id],[ccus_id],[csup_id],[citem_id],[citem_class],[

cname],[ccode_equal],[bvouchedit],[bvouchaddordele],[bvouchmoneyh

old],[bvalueedit],[bcodeedit],[ccodecontrol],[bPCSedit],[bDeptedi

t],[bItemedit],[bCusSupInput],[coutaccset],[ioutyear],[coutsysnam

e],[coutsysver],[ioutperiod],[coutsign],[coutno_id],[doutdate],[c

outbillsign],[coutid],[iflag],[cDefine1],[cDefine2],[cDefine3],[c

Define4],[cDefine5],[cDefine6],[cDefine7],[cDefine8],[cDefine9],[

cDefine10],[cDefine11],[cDefine12],[cDefine13],[cDefine14],[cDefi

ne15],[cDefine16],[iBG_ControlResult],[daudit_date])" & _

" values('记',Null," & calcI & ",'" & m_ame &

"','" & m_e & "',Null," & idoc & ",Null,Null,Null,'" &

cdigest & "','" & kzkm & "'," & iSum & ",0,0,0,0," & iQuantity &

",0,Null,Null,Null,'" & cdepCode & "','" & cPersonCode & "','" &

cCusCode & "',Null,Null,Null,'" & cPersonName &

& "',Null,'1','1','0','0','1','AR','0','1','1','0','"

m__Id & "'," & m_ & ",'AR',Null," &

m_ & ",'AR','" & guid & "','" & m_e &

"','05','" & cDLCode & spaceStr & calcI &

"',Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Nu

ll,Null,Null,Null,Null,0,Null);"

e sqlstr

Case Else

bSuc = False

End Select

'自定义逻辑结束

bSuc = False

End Sub

特别提示:以上代码在调试状态下保存凭证“会提示外部系统错误!”这时一般直接把工

程编译后直接运行就可以了。

参考附件:Interface_kangpu工程

注册插件XML文件

U8知识库文档

运行代码,启动U8

标准产品单据参照客户化开发单据

以下以材料出库单参照“DEMO业务单1”生单为例进行讲解。

1. 增加自定义按钮

增加自定义按钮

and

-----------材料出库单上增加客户化按钮"DEMO业务单1"

delete [aa_customerbutton] where [cvoucherkey]='0412'

[cButtonKey]='EF_0201'

GO

insert into [aa_customerbutton]

([cButtonID],[cButtonKey],[cButtonType],[cProjectNO],[cFormKey],[

cVoucherKey],[cKeyBefore],[iOrder],[cGroup],[cCustomerObjectName]

,[cCaption],[cLocaleID],[cImage],[cToolTip],[cHotKey],[bInneralCo

mmand],[cVariant],[cVisibleAsKey],[cEnableAsKey],[cSubID],[Depend

enceSubIdList])

values(newid(),'EF_0201','PortalToolbar','U870','0412','0412','tl

bAdd','12','ST_Voucher_P_2','Interface__aa_customerbutt

on','参照DEMO1','ZH-CN','','参照

DEMO1','tlbAdd','tlbAdd','ST','ST')

DEMO1','Ctrl+N',1,'参照

参考附件:材料出库单参照生单按钮.sql

U8知识库文档

在材料出库单上出现“参照DEMO1”按钮,如下图所示

2. 创建参照DEMO1的列表

DEMO业务单1 的参照列表

略。

参考附件:DEMO1参照列表.sql

3. 配置参照列表过滤界面

U8知识库文档

DEMO1参照列表过滤界面

--------DEMO1 参照列表界面过滤

delete from flt_definemeta_base where filterid='EF0306'

delete from flt_definemeta_lang where filterid='EF0306'

delete from flt_definemeta_cache where filterid='EF0306'

------基础过滤SQL语句!------

insert

into ..flt_definemeta_base(FilterID,ProjectNO,XMLExpression,SubNO

,FilterName,FilterDesc,IsUpgrade,bLocked,cLockedBy)

values(N'EF0306',N'U8CUSTDEF',N'

title=""

caption="ccode" reftype="0" refid="" commonlogic="eq" pointbit="-1"

fieldname="ccode"

rangeinput="0"

orlogic="0"

fieldclass=""

multselect="0"

iscommon="1" mustinput="0"

allowupdatecomparelogic="1"

displayinportalview="0"

isfacilitycondition="0"

behaviorclass=""

cancelseconddev="0">

canceladvanceitemlist=""

hasadvance="0" hasgroupby="0"

showstyle="0" ispara="0"

autodisplaytext="0"

isjoinfulltextquery="0" descvalue="[####]"/>

据编码" reftype="0" refid="" commonlogic="eq" pointbit="-1"

fieldname="ccode" fieldclass="" iscommon="1" mustinput="0"

rangeinput="0"

orlogic="0"

multselect="0" allowupdatecomparelogic="1"

displayinportalview="0"

isfacilitycondition="0"

showstyle="0" ispara="0"

autodisplaytext="0"

isjoinfulltextquery="0" descvalue="[####]"/>

单日期" reftype="2" refid="" commonlogic="inc" pointbit="-1"

fieldname="ddate" fieldclass="" iscommon="1" mustinput="0"

rangeinput="0"

orlogic="0"

multselect="0" allowupdatecomparelogic="1"

displayinportalview="0"

isfacilitycondition="0"

showstyle="0" ispara="0"

autodisplaytext="0"

',N'',null,null,0,null,null)

isjoinfulltextquery="0" format=""/>

参考附件:DEMO1 参照列表界面过滤.sql

4. 配置参照信息

材料出库单参照DEMO1 脚本

---材料出库单参照DEMO1列表

delete sa_refervoucherconfig where cardnum ='0412'

U8知识库文档

insert into sa_refervoucherconfig

([cardnum],[referkey],[maincolumnkey],[detailcolumnkey],[toolbark

ey],[subsysid],[filtername],[maindatasource],[detaildatasource],[

selecttype],[fillkey],[mainuniquekey],[pagesize],[defaultfilter],

[filltype],[captionresid],[detailuniquekey],[buttonspara],[unique

flds],[condition],[setdetailvalues])

values('0412','EF0306','EF0306',Null,Null,'1Z','EF0306','V_List_E

F_TABLE_MO',Null,Null,Null,Null,50,'

',Null,Null,Null,Null,Null,Null,Null)

GO

cvouchtype =''EF0201''

参考附件:参照生单配置脚本.sql

5. 创建列表视图

DEMO业务单1参照列表视图

参考附件:DEMO1参照列表视图.sql

6. 参照生单按钮功能开发

插件代码

略。

U8知识库文档

参考附件:Interface_EFMO工程

执行上述脚本,运行vb,启动U8

U8知识库文档

相关知识

参见有关数据库脚本。