单据列表插件示例代码.docx

合集下载

通用单据模块设计

通用单据模块设计

通用单据模块设计表现形式:提供了三种形式1)独立程序(SRE.exe)2)集成在FIT中(FIT.exe)3)插件形式在MIS系统中运行(SRE.dll)使用说明:一、加载通用单据模块配置把配置从tStdReceiptsConfig表中读取出来,解释并体现在设计器中,供进一步进行设计。

在模块树中选择一个[通用单据]类型的模块进行加载,此类型的模块已经用特殊颜色显示,区分标准是在tModule表的sExeName 为[StdReceipts.dll]。

工具记录了最近加载的8个模块,以便更快速地加载配置脚本。

在此工具中,提供简单的[创建新模块]和[修改模块信息]功能,注意的是,限定只能对[通用单据]类型的模块进行操作。

二、设计1)标准查询(StdQuery)设置在[字段编辑器]页的[标准查询]页设置模块的标准查询,对应于配置脚本的[StdQuery]QueryName=Settles选择了一个标准查询(StdQuery)后,会先从FRMDB..t_frm_VclFieldsDefs表查找这个StdQuery的字段定义,如果找到,据定义的内容填充[字段列表];如果没有找到,则会分析StdQuery中的SQL语句,重新生成字段定义填充[字段列表]。

列表中[是否可见]是据StdQuery的[隐藏字段列表]来呈现的;[情景]是据配置脚本中的[DicContext_0=]内容来呈现;[显示名称]是据[字段名称]和[情景]在数据字典中查询而来;[参数列表]页列出了StdQuery的参数内容;在[预览]页可以直接预览这个StdQuery工具提供建模时的设定,暂时未开放使用。

2)商业对象(DataObject)设置在[字段编辑器]页的[商业对象]页设置模块的商业对象。

界面如下两图所示:当加载了一个商业对象后,工具会据DataObject的项数,来创建相应数量的页面,分开管理。

对于DataObject的每一项,会先从FRMDB..t_frm_VclFieldsDefs表查找这项的字段定义,如果找到,据定义的内容填充[字段列表];如果没有找到,则会分析这项中的SQL语句,重新生成字段定义填充[字段列表]。

订单页面源代码

订单页面源代码

<!--#include file="Inc/Const.asp"--><table width="485"height="400"border="0"cellpadding="0"cellspacing="0"><tr><td width="12">&nbsp;</td><td width="459"vali gn="top"><br><%Dim Action,Action1Action=Request("Action")Select Case ActionCase"Reg"Call Reg()Case"SaveReg"Call SaveReg()Case"Login"Call Login()Case"ChkLogin"Call ChkLogin()Case"A ddOrder"Call AddOrder()Case"SaveOrder"Call SaveOrder()Case"Success"Call Success()Case"ModyOrder"Call ModyOrder()Case"SaveMody"Call SaveMody()Case"DelOrder"Call DelOrder()Case"LoginOut"Call LoginO ut()Case"ShowOrder"Call ShowOrder()Case ElseCall Main()End Select'++++++++++++++++++++++++++++主函数开始Sub Main()%><%'++++++++++++++++++++++主函数开始%><table width="400"b order="1"align="center"cellpadding="5"cellspacing="0"bo rdercolor="f5f5f5"style="border-collapse:collapse"><tr class="table_row_1"><td height="30"><font color="FF6633">所有订单如下:</font></td></tr><%sql="select top8OrderComName,OrderClass,OrderId From[Order]order by Ord erid desc"Set rs=Server.CreateObject("ADODB.Recordset")rs.open sql,conn,1,1if rs.eof and rs.bof thenresponse.write"<p align='center'><font color=red>对不起,没有找到任何订单</font></p>"elsedo while not rs.eof%><tr class="table_row_1"><td height="30"><a href="Order.asp?OrderId=<%=Rs("OrderId")%>&Ac tion=ShowOrder"><%=rs("OrderComName")&"-----"&rs("OrderClass")%></a></td></tr><%Rs.movenextlooprs.closeset rs=nothingend If%></table><p>&nbsp;</p><table width="400"border="0"align="center"cellpadding="0"cellspacing="0"><tr><td width="20%"><form name="Main1"method="post"action="?"><div align="center"><input type="submit"name="Main1"value="管理我的订单"class="butt on"><input type="hidden"name="Action"value="Login"></div></form></td><td><form name="Main2"method="post"action="?"><div align="center"><input type="submit"name="Main2"value="新用户注册"class="button"><input type="hidden"name="Action"value="Reg"></div></form></td></tr></table><br><%End Sub'++++++++++++++++++++++++++++主函数结束'++++++++++++++++++++++++++++用户注册函数开始Sub Reg()%><form name="reg"method="post"action="?"><table width="400"border="0"align="center"cellpadding="5"cellsp acing="0"><tr class="table_row_1"><td colspan="2"><div align="center"><strong><font color="#FF6633">用户注册</font></strong></div></td></tr><tr class="table_row_1"><td width="200"><div align="right">用户名:&nbsp;&nbsp;</div></td><td><input name="UserName"type="text"class="editbox"id="UserName"size="16"></td></tr><tr class="table_row_1"><td><div align="right">密&nbsp;&nbsp;码:&nbsp;&nbsp;</div></td><td><input name="Password"type="password"class="editbox"id="Pa ssword"size="16"></td></tr><tr class="table_row_1"><td colspan="2"><div align="center"><input type="hidden"name="Action"value="SaveReg"><input type="submit"name="SubmitReg"value="提交"class="button">&nbsp;&nbsp;&nbsp;&nbsp;<input type="Reset"name="ResetReg"value="取消"class="button"></div></td></tr></table></form><%End Sub'++++++++++++++++++++++++++++用户注册函数结束'++++++++++++++++++++++++++保存注册信息开始Sub SaveReg()UserName=Trim(Request.Form("UserName"))Password=Trim(Request.Form("Password"))If UserName=""Or Len(UserName)=0or Len(UserName)>16or UserName="Admin"o r UserName="admin"ThenErrorMsg1=trueElseErrorMsg1=FalseEnd IfIf Password=""Or Len(Password)=0or Len(Password)<6Or Len(Password)>16th enErrorMs g2=trueElseErrorMsg2=FalseEnd IfIf ErrorMsg1=True or ErrorMsg2=True thenResponse.Write("<li>用户名长度必须大于0,小于20</li>")Response.Wr ite("<li>密码不能为空,长度必须大于6,小于16</li>")Response.Write("<p align='center'><a href='#'OnClick='vbscript:history.back()' >【返回】</a></p>")End IfIf(ErrorMag1=false and ErrorMsg2=false)ThenSet RsReg=Server.CreateObject("Adodb.Recordset")SqlReg="Select*From[User]Where Username='"&UserName&"'"RsReg.Open sqlReg,Conn,1,3If Not(RsReg.Eof or RsReg.Bof)ThenResponse.Write("对不起,你的用户名已经被他人使用!")Response.Write("<p align='center'><a href='#'OnClick='vbscript:history.back()' >【返回】</a></p>")Response.End()ElseRsReg.AddNewRsReg("UserName")=UserNameRsReg("Password")=PasswordRsReg.UpdateEnd IfRsReg.CloseSet RsReg=NothingSession("UserName")=UserNameCall Succes s()End IfEnd Sub'++++++++++++++++++++++++++保存注册信息完毕'++++++++++++++++++++++++++登陆开始Sub Login()%><form name="Login"method="post"action="?"><table width="400"border="0"align="center"cellpadding="5"cellspacing="0"><tr class="table_row_1"><td colspan="2"><div align="center"><strong><font color="#FF6633">用户等陆</font></strong></div></td></tr><tr class="tabl e_row_1"><td width="200"><div align="right">用户名:&nbsp;&nbsp;</div></td><td><input name="UserName"type="text"class="editbox"id="UserNa me"size="16"></td></tr><tr class="table_row_1"><td><d iv align="right">密码:&nbsp;&nbsp;</div></td><td><input name="Password"type="password"class="editbox"id="Pa ssword"size="16"></td></tr><tr class="table_row_1"><td colspan="2"><div align="center"><input name="Action"type="hidden"id="Action"value="ChkLogi n"><input name="SubmitLogin"type="submit"class="button"id="Sub mitLogin"value="提交">&nbsp;&nbsp;&nbsp;&nbsp;<input name="Resetlogin"type="Reset"class="button"id="Resetlogin"value="取消"></div></td></tr></table></form><%End Sub'++++++++++++++++++++++++++登陆结束'++++++++++++++++++++++++++检查登陆开始Sub ChkLogin()UserName=Request.Form("UserName")PassWord=Request.Form("PassWord")Set RsChk=Se rver.CreateObject("Adodb.RecordSet")SqlChk="Select UserName,PassWord From[User]Where UserName='"&UserName&"'And Pas sword='"&PassWord&"'"RsChk.Open SqlChk,Conn,1,1If RsChk.Eof Or Bof ThenResponse.Write("<li>用户名不存在</li>")Response.Write("<li>用户名与密码不一致,拥护密码错误</li>")Response.Write("<p align='center'><a href='#'OnClick='vbscript:history.back()'>【返回】</a></p>")Response.End()ElseSession("UserName")=UserNameCall Success()End IfEnd Sub'++++++++++++++++++++++++++检查登陆结束'++++++++++++++++++++++++++++用户注册成功或登陆成功函数开始Sub Success()If Session("UserName")=""ThenCall LoginElse%><table width="480"border="0"cellspacing="0"cellpadding="0"><tr><td valign="top"><table width="400"border="2"align="center"ce llpadding="5"cellspacing="0"bordercolor="#F5F5F5"styl e="border-collapse:collapse "><tr class="table_row_1"><td height="30"><div align="center"><strong><font color="# FF6633">用户面板:欢迎您<%=Session("UserName")%></font></strong></div></td><td><div align="center"><a href="Order.asp?Action=AddOrder" >增加订单</a></div></td><td><div align="center"><a href="Order.asp?Action=LoginOut ">注销登陆</a></div></td></tr></table></td></tr><tr><td valign="top"><%Call UserMain()%></td></tr></table><%End IfEnd Sub'++++++++++++++++++++++++++++用户注册或登陆成功函数结束'++++++++++++++++++++++用户主函数开始Sub UserMain()If Session("UserName")=""ThenCall LoginElse%><br><table width="400"border="1"align="center"cellpadding="5"cellspac ing="0"bordercolor="#F5F5F5"style="Border-Collapse:Collapse"><tr class="table_row_1"><td height="30"colspan="3"><font color="FF6633">您的订单如下</font></td></tr><%sql="select top8OrderId,OrderComName,OrderClass,IsCheck From[O rder]Where OrderUserName='"&Session("UserName")&"'order by Orderid desc"Set rs=Server.CreateObject("ADODB.Recordset")rs.open sql,conn,1,1if rs.eof and rs.bof thenresponse.write"<div align='center'><font colo r=red>对不起<strong>"&Session("UserName")&"</strong>,没有找到您的任何订单</font></div>"elsedo while not rs.eof%><tr class="table_row_1"><td height="30">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;<a Href="Order.asp?OrderId=<%=rs("OrderId")%>&Action=ShowOrder"><%=rs("Order ComName")&"-----"&rs("OrderClass")%></a></td><td width="40"><%tmpIsChk=Cint(rs("IsCheck"))If tmpIsChk=1thenResponse.Write("<font color='#FF6633'><strong>已审核</strong></font>")ElseIf tmpIsChk=0ThenResponse.Write("<font color='#FF6633'><strong>未审核</strong></font>")End If%></td><td width="60"><a href="Order.asp?Action=ModyOrder&OrderId=<%=rs( "OrderId")%>">修改</a><a href="Order.asp?Action=DelOrder&OrderId=<%=rs("OrderId")% >">删除</a></td></tr><%Rs.movenextlooprs.closeset rs=nothingend If%></table><%End IfEnd Sub'++++++++++++++++++++++用户主函数结束'++++++++++++++++++++++++++++增加订单函数开始Sub AddOrder()If Session("UserName")=""ThenCall LoginElse%><table width="400"border="0"align="center"cellpadding="5"cellspac ing="1"bgcolor="#f7f7f7"><form name="AddOrder"action="?"method="post"><tr bgcolor="#FFFFFF"><td colspan="2">网站类型:<select name="OrderClass"><option value="自己定制"selec ted>自己定制</option><option value="企业入门型"onMouseOver="">企业入门型</option><option value="企业宣传型">企业宣传型</option><option value="企业产品展示型">企业产品展示型</option><option value="企业电子商务型">企业电子商务型</option><option value="企业门户">企业门户</option></select><br><br>公司名称:<input name="OrderComName"type="text"class="editbox"si ze="30"><br><br>网站建设目的:<br><textarea name="OrderAim"cols="60"rows="4"></textarea><br><br>设计要求:<br><textarea name="OrderRequest"cols="60"rows="4"></textarea><br><br>网站内容简要介绍:<br><textarea name="OrderIntro"cols="60"rows="6"></textarea><br><br>网站需要的功能模块:<br>(需要特殊功能的也请在这里写下功能的描述)<textarea name="OrderModule"cols="60"rows="5"></textarea>< /td></tr><tr bgcolor="#FFFFFF"><td width="40">&nbsp;</td><td><input type="hidden"name="Action"value="SaveOrder"><input type="submit"name="Submit"value="提交"class="button">&nbsp;&nbsp;&nbsp;&nbsp;<input type="Reset"name="Submit2"value="取消"class="button"></td></tr></form></table><%End IFEnd Sub'++++++++++++++++++++++++++++增加订单函数结束'++++++++++++++++++++++++++++保存订单函数开始Sub SaveOrder()If Session("User Name")=""ThenCall LoginElseDim OrderClass,OrderBillNo,OrderUserName,OrderComName,OrderAim,OrderRequest,OrderI ntro,OrderModuleOrderBillNo="DW-"&Year(Date)&Right("00"&Month(Date),2)&Right("00"&Day(Date), 2)&Right("00"&Hour(Time),2)&Right("00"&Minute(Time),2)&Right("00"&Second(Time ),2)OrderClass=Trim(Request.form("OrderClass"))OrderComName=Trim(Request.form("OrderComName"))OrderAim=Trim(Request.form("OrderAim"))OrderRequest=Trim(Request.form("OrderRequest"))OrderIntro=Trim(Request.form("OrderIntro"))OrderModule=Trim(Request.form("OrderModule"))Set RsSvOrder=Server.CreateObject("Adodb.RecordSet")SqlSvOrder="Select*From[Order]"RsSvOrder.Open SqlSvOrder,C onn,1,3RsSvOrder.AddNewRsSvOrder("OrderClass")=OrderClassRsSvOrder("OrderComName")=OrderComNameRsSvOrder("OrderBillNo")=OrderBillNoRsSvOrder("OrderUserName")=Session("UserName")RsSvOrder("OrderAim")=OrderAimRsSvOrder("OrderRequest")=OrderRequestRsSvOrder("OrderIntro")=OrderIntroRsSvOrder("OrderModule")=OrderModuleRsSvOrder.UpdateRsSvOrder.CloseSet RsSvOrder=NothingCall Success()End IfEnd Sub'++++++++++++++++++++++++++++保存订单函数结束'++++++++++++++++++++++++++++修改订单函数开始Sub ModyOrder()If Session("UserName")=""ThenCall LoginElseSet RsM=Server.CreateObject("Adodb.Recordset")SqlM="Select*From[Order]Where OrderId="&Request("OrderId")RsM.Open SqlM,Conn,1,1%><table width="400"border="0"align="center"cellpadding="5"cellspac ing="1"bgcolor="#f7f7f7"><form name="AddOrder"action="?"method="post"><tr bgcolor="#FFFFFF"><td colspan="2">网站类型:<select name="OrderClass"><option value="自己定制"selected>自己定制</option><option value="企业入门型"onMouseOver="">企业入门型</option><option value="企业宣传型">企业宣传型</option><option value="企业产品展示型">企业产品展示型</option><option value="企业电子商务型">企业电子商务型</option><option value="企业门户">企业门户</option></select><br><br>公司名称:<input name="OrderComName"type="text"class="editbox"size=" 30"value="<%=RsM("OrderComName")%>"><br><br>网站建设目的:<br><textarea name="OrderAim"cols="60"rows="4"><%=RsM("OrderAim ")%></textarea><br><br>设计要求:<br><textarea name="OrderRequest"cols="60"rows="4"><%=RsM("Order Request")%></textarea><br><br>网站内容简要介绍:<br><textarea name="OrderIntro"cols="60"rows="6"><%=RsM("OrderIntro")%></textar ea><br><br>网站需要的功能模块:<br>(需要特殊功能的也请在这里写下功能的描述)<textarea name="OrderModule"cols="60"rows="5"><%=RsM("Order Module")%></textarea></td></tr><tr bgcolor="#FFFFFF"><td width="40">&nbsp;</td><td><input type="hidden"name="Action"value="SaveMody"><input type="hidden"name="OrderId"value="<%=RsM("OrderId")%>"><input type="submit"name="Submit"value="提交"class="button">&nbsp;&nbsp;&nbsp;&nbsp;<inp ut type="Reset"name="Submit2"value="取消"class="button"></td></tr></form></table><%RsM.CloseSet RsM=NothingEnd IfEnd Sub'++++++++++++++++++++++++++++修改订单函数结束'++++++++++++++++++++++++++++保存订单修改函数开始Sub SaveMody()If Session("UserName")=""ThenCall LoginElseDim OrderClass,OrderBillNo,OrderUserName,OrderComName,OrderAim,OrderRequest,OrderI ntro,OrderModuleOrderClass=Trim(Request.form("OrderClass"))OrderComName=Trim(Request.form("OrderComName"))OrderAim=Trim(Request.form("OrderAim"))OrderRequest=Trim(Request.form("OrderRequest"))OrderIntro=Trim(Request.form("OrderIntro"))OrderModule=Trim(Request.form("OrderModule"))Set RsSvOrder=Serve r.CreateObject("Adodb.RecordSet")SqlSvOrder="Select*From[Order]Where OrderId="&Request.Form("OrderId")RsSvOrder.Open SqlSvOrder,Conn,1,3RsSvOrder("OrderClass")=OrderClassRsSvOrder("OrderComName")=OrderComNameRsSvOrder("OrderAim")=OrderAimRsSvOrder("OrderRequest")=OrderRequestRsSvOrder("OrderIntro")=OrderIntroRsSvOrder("OrderModule")=OrderModuleRsSvOrder.UpdateRsSvOrder.CloseSet RsSvOrder=NothingCall Success()End IfEnd Sub'++++++++++++++++++++++++++++保存订单修改函数结束'++++++++++++++++++++++++++++删除订单函数开始Sub DelOrderIf Session("User Name")=""ThenCall LoginElseSet RsDel=Conn.Execute("Delete*From[Order]Where OrderId="&Request("OrderId" ))Call SuccessEnd IfEnd Sub'++++++++++++++++++++++++++++删除订单函数结束'++++++++++++++++++++++++++++显示订单函数开始Sub ShowOrder()Set Rs=Server.CreateObject("Adodb.Recordset")Sql="Select*From[Order]Where OrderId="&Request("OrderId")Rs.Open Sql,Conn,1,1%><table width="90%"border="1"align="center"cellpadding="5"cellspacing="0"borde rcolor="F5F5F5"style="Border-Collapse:Collapse"><tr class="table_row_1"><td height="30"colspan="2"bgcolor="#cccccc"><div align="center "><strong><font color="#ff6633">显示项目</font></strong></div></td></tr><tr class="table_row_1"><td width="20%"height="24"align="center">公司名称</td><td><%=rs("OrderComname")%></td></tr><tr class="table_row_1"><td height="24"align="center">添加人</td><td><%=rs("OrderUserName")%></td></tr><tr class="table_row_1"><td height="24"align="center">项目类型</td><td><%=rs("OrderClass")%></td></tr><tr class="table_row_1"><td height="24"align="center">建站目的</td><td><%=rs("OrderAim")%></td></tr><tr class="table_row_1"><td height="24"align="center">建站要求</td><td><%=rs("OrderRequest")%></td></tr><tr class="table_row_1"><td height="24"align="center">项目简介</td><td><%=rs("OrderIntro")%></td></tr><tr class="table_row_1"><td height="24"align="center">项目模块</td><td><%=rs("OrderModule")%></td></tr><%If Session("UserName")<>""Then%><tr class="table_row_1"><td height="24"align="center">备注</td><td>如果你想确认订单,请记住你订单的唯一<br>账单号码为:<font color="#ff0000"><%=Rs("OrderBillNo")%></font><br><br>帐单号码的作用:1确认客户的利益不受到侵犯;<br>2确认订单的重要依据:我们将根据你提供的订单<br>项目内容与帐单号码进行确认,只有在两者一致<br>的情况下我们才能最后确认。

最新U8开发之单据列表控件

最新U8开发之单据列表控件

U8单据列表控件摘要单据列表控件是供业务单据展示列表数据以及编辑处理的,并且集成了部分单据列表公共按钮、快捷过滤、翻页功能。

同时也支持直接通过单据列表编辑录入数据。

概念说明公共按钮是指单据列表固有的一些操作,如:查询、条件格式设置、布局等等;快捷过滤是一种更加直接快速的常用查询项目过滤,主要区别在于可以直接在列表主界面录入常用过滤项目内容进行查询;翻页功能集成则是指列表控件自带了翻页处理,业务模块使用时可以不用专门处理翻页的逻辑。

目标本文主要介绍单据列表控件的业务应用及相关注意事项,方便各类U8产品开发人员更好的使用高效开发产品。

文档内容一、列表控件(V11.0)增加的特性:1.集成【快捷过滤】功能;类似原来各列表界面里toolbar上的查询\刷新\[滤设]功能。

查询按钮下拉查询方案:默认操作兼容原有功能。

查询支持方案和快捷条件详细设置:【快捷过滤】相关的业务组代码调整:调整过滤对象的查询方法(UFGeneralFilter.FilterSrv.OpenFilter)调用,修改为调用过滤对象初始化方法(UFGeneralFilter.FilterSrv. InitBaseVarValue),参数传递与过滤对象查询原来的方法(UFGeneralFilter.FilterSrv.OpenFilter)兼容。

然后调用新单据列表控件的快捷过滤初始化方法(VouchList.InitFlt),把初始化好的过滤对象传入(如果没有过滤对象,也可以直接传入过滤对象ID或过滤对象名称+子系统号)。

代码修改前后对比示例如下(灰色字体部分是已经被注释的修改前的代码,下同):…(引用的是服务协议列表代码修改模型)Set m_opub = CreateObject("UFGeneralFilter.FilterSrv")' bSuccess = m_opub.OpenFilter(g_Login,"6729D410-233A-4674-A48A-2C34C17B82F6", "", "", ErrInfo)'lliang_2011-11-22_[单据列表]:快捷过滤bSuccess = m_opub.InitBaseVarValue(g_Login,"6729D410-233A-4674-A48A-2C34C17B82F6", "", "", ErrInfo)…Call VouchList.InitFlt (g_Login, m_opub, "", "", "", "", Err)参数1:Login对象参数2:过滤对象参数3:条件的Key参数4:过滤的名称参数5:子产品号参数6:返回的错误信息返回值:如果返回为False表明出现失败说明:你可以用参数2,忽略参数3、4、5或用参数3而忽略参数2和4、5或用参数4、5而忽略2和3.注意事项:调用此初始化方法的时机要求在Form_Load事件里,目前大部分产品的过滤对象调用(m_opub.OpenFilter)都是在相应的类模块或其他非窗体模块处理,所以需要各模块根据实际情况把过滤对象变量有效传递到窗体然后在Form_Load事件里调用。

NC单据模板_单据控件

NC单据模板_单据控件

软 件 推 动 管 理 进 步
主要方法
初始化 public void loadTemplet(String billType,String busiType, String operatorID,String pkCorp) //加载单据模板 单据功能控制(控制单据的整体显示) public void setRowNOShow(String tablecode, boolean newValue) //设置编码为tablecode的表体是否显示合计行 public void setRowNOShow(String tablecode, boolean newValue) //设置编码为tablecode的表体是否显示行号 单据元素控制 public BillItem getXXXXItem (String key)//获得元素(XXXX为Head、 Body、Tail) public BillItem getBodyItem (String tablecode, String key)//获得 tablecode子表元素 public BillItem[] getXXXXItems() //获得元素数组(XXXX为Head、 Body、Tail) public BillItem[] getBodyItems(String tablecode) //获得tablecode子 表元素数组
列表
软 件 推 动 管 理 进 步
列表模板结构
软 件 推 动 管 理 进 步
主要类关系
软l.BillCardPanel
卡片界面分为3部分:表头、表体和表尾; 表头、表体和表尾都支持多页签(和多张单 据不是一回事); 表头、表尾显示为多个独立的编辑控件,对 应业务主表的内容; 表体显示为表格样式,每个页签对应一个业 务子表的内容; 卡片的数据结构 BillData 。

L5--U8-11.1客开培训文档--单据列表

L5--U8-11.1客开培训文档--单据列表

U8单据列表控件开发培训部门:U8平台及公共开发部 U8版本号:讲师:李亮定稿时间:2013-11-11 0.变更记录1.单据列表介绍1.1单据列表发展历程单据列表发展经历了如下几个重大里程碑:1、1)单据列表控件引用的因代码超出VB工程“容量”,同时避免打破兼容性,更换为。

2)同时单据列表支持的编辑功能,具体如下:(单据列表对合并显示功能的支持:要使单据列表支持合并显示的功能,主要要对栏目设置功能的进行设置,单据列表对参照输入的支持1、增加对事件BrowUser,FillList的支持,其用法与SuperGrid中的用法相同2、要使单据列表具有参照输入的功能,须在栏目设置中进行如下设置:及AA_ColumnSet两个视图,如果为NULL或为0,则单据列表状态保持原样,其它类型同SuperGrid中的类型定义,其定义如下:'列参照类型—Enum BrowTypeBrowNull = 0UserBrowButtonDblBrowButtonDateBrowButtonBrowComEnd Enum其值按1递增。

^增加对超字段选择范围的支持,也就条件的字节数可以超过8k限制增加对UAP结构下分页组件的调用方式,用法如下:其大体调用方式与CS方式下的调用没有太大区别,与CS不同的地方在于要UAP 的调用方式要声明一个算法变量,以支持UIP调用后结果集的导入,具体用法详见示例工程的Form2代码增加对枚举类型的支持在U8VouchList中增加分页的功能,用法如下:1、请按原有使用VouchList的方式使用单据列表2、将分页的按钮放在所使用的窗体中3、在数据库中执行脚本,创建分页引擎的存储过程SPPagediv2、单据列表整合了翻页和快捷过滤功能,同时增强了交互和易用性。

如:着色、布局等20多个功能,具体参考1.2单据列表示例代码及常用功能说明具体代码示例工程参见:1.扩展:Private WithEvents m_pagediv As Pagediv '分页引擎,配合实现单据列表自身的翻页功能。

NC单据模板_单据控件

NC单据模板_单据控件
单据控件
华效儒 2003-09-18
软 件 推 动 管 理 进 步
概述
单据模板是用来完成各种商业票据,凭证的 模板。根据设定的模板显示单据界面,可供 用户进行数据浏览和编辑。 表现形式 卡片式:单张单据的显示和维护。 列表式:单据组(多张单据,表头是单据列 表,表体是某一单据的内容列表)的显示。
软 件 推 动 管 理 进 步
表模型类nc.ui.pub.bill.BillModel
单据表体表模式,带有默认合计行表模式、 行号表模式。 主要属性: protected BillItem[] m_biBodyItems = null; //表体元素数组 protected DefaultTableModel m_tmlTotal = null; //合计行表模式 protected DefaultTableModel m_tmlRowNO = null; //行号表模式
软 件 推 动 管 理 进 步
主要方法
public void loadTemplet(String billType,String busiType,String operatorID,String pkCorp) /加载单据模板 public BillListData getBillListData() //返回单据列表数 据控制 public BillScrollPane getParentListPanel() //返回表头的 BillScrollPane public BillScrollPane getBodyScrollPane(String tableCode) //返回编码为tablecode的子表的BillScrollPane public AggregatedValueObject getBillValueVO(int row,String billVOName,String headVOName,String bodyVOName) //由类名获得选择行的单据VO public AggregatedValueObject[] getMultiSelectedVOs(String billVOName, String headVOName, String bodyVOName) //由类名获得选择单据数组 public void setHeaderValueVO(CircularlyAccessibleValueObject[] headVOs) //设置表头数据 public void setBodyValueVO(CircularlyAccessibleValueObject[] bodyVOs) //设置表体数据(获取、设置数据) 软 件 推 动 管 理 进 步

U8_开发单据和单据列表总结_871

U8_开发单据和单据列表总结_871

1、单据页面初始化:点击“部门费用拆分表”执行后台代码块:先定义变量icbc_deptfy,在类模块clsVoucher_CO (clsVoucher_co.cls)中Enum V oucherTypeSAicbc_deptfy ' ================jiang============== End Enum定义变量部门预算,在类模块clsVoucherLoad_BO(clsVoucherLoad_BO.cls)中Public Enum enuSA VType部门费用拆分表= "100016" '================jiang============== End Enum调用clsproductfacade模块中下面的callFunction方法Public Function CallFunction(ByV al cMenuId As String, ByV al cMenuName As String, ByV al cAuthId As String, ByV al cCmdLine As String) As ObjectSelect Case cMenuIdCase "MT0101", "MT0102", "MT0103", "MT0201", "MT0202"gd_frmMain.m_oMenu_OnCommand cMenuId, cMenuName, cAuthId, cCmdLineEnd Select调用frmMain(主窗体.frm)中下面的m_oMenu_OnCommand方法Public Sub m_oMenu_OnCommand(ByV al cMenuId As String, ByV al cMenuName As String, ByV al cAuthId As String, ByV al cCmdLine As String)添加代码:Select Case cMenuIdCase "MT0201" '部门费用拆分表miBJD_Click icbc_deptfy, cAuthId, , strV ouchID调用方法miBJD_ClickPublic Sub miBJD_Click(strV ouType As V oucherTypeSA, strTaskId As String, Optional iMode As Integer, Optional SBVID As String, Optional cSBVCode As String, Optional mDom As DOMDocument)添加代码:Select Case strV ouTypeCase icbc_deptfy '================jiang==============strFrmCaption = MLRsSvr.GetString("U8.ICBC.Mt.0299") '"部门费用拆分表"tmpTaskID = "MT020101" '权限IDsType = "100016" '模板编号调用frmVouchNew(单据模板.frm)中ShowVoucher方法Public Function ShowV oucher(V oucherType As V oucherTypeSA, Optional vV oucherId As V ariant, Optional iMode As Integer)添加代码:Select Case V oucherTypeCase icbc_deptfy '部门费用拆分表strV ouchType = "100016"strCardNum = "KM01"Me.caption = MLRsSvr.GetString("U8.ICBC.Mt.0299") '"部门费用拆分表"调用clsVoucher_CO (clsVoucher_CO.cls)中的GetVouchInf方法Public Function GetV ouchInf(m_enmV oucherType As V oucherTypeSA, _Select Case m_enmV oucherTypeCase icbc_deptfy '部门费用拆分表sV ouchType = "100016"sCardNum = "KM01"bV ouchFirst = FalsestrTable = "icbc_acv"调用frmVouchNew(单据模板.frm)中SetButtonStatus方法Private Sub SetButtonStatus(ButtonKey As String)Select Case LCase(ButtonKey)Case "modify"Select Case LCase(strVouchT ype)Case "100016"tbrvoucher.buttons("Modify").Enabled = Falsetbrvoucher.buttons("Cancel").Enabled = T ruetbrvoucher.buttons("AddRow").Enabled = T ruetbrvoucher.buttons("DelRow").Enabled = T ruetbrvoucher.buttons("Erase").Enabled = Falsetbrvoucher.buttons("Add").Enabled = Falsetbrvoucher.buttons("UnSure").Enabled = Falsetbrvoucher.buttons("Sure").Enabled = Falsetbrvoucher.buttons("T oFirst").Enabled = Falsetbrvoucher.buttons("T oPrevious").Enabled = Falsetbrvoucher.buttons("T oNext").Enabled = Falsetbrvoucher.buttons("T oLast").Enabled = FalseEnd SelectCase "add"Select Case LCase(strVouchT ype)Case "100016"tbrvoucher.buttons("Add").Enabled = Falsetbrvoucher.buttons("Save").Enabled = T ruetbrvoucher.buttons("Cancel").Enabled = T ruetbrvoucher.buttons("AddRow").Enabled = T ruetbrvoucher.buttons("DelRow").Enabled = T ruetbrvoucher.buttons("Modify").Enabled = Falsetbrvoucher.buttons("Erase").Enabled = Falsetbrvoucher.buttons("UnSure").Enabled = Falsetbrvoucher.buttons("Sure").Enabled = Falsetbrvoucher.buttons("T oFirst").Enabled = Falsetbrvoucher.buttons("T oPrevious").Enabled = Falsetbrvoucher.buttons("T oNext").Enabled = Falsetbrvoucher.buttons("T oLast").Enabled = FalseEnd SelectCase "cancel", "save"Select Case LCase(strVouchT ype)Case "100016"ComboVTID.Visible = T rueComboDJMB.Visible = T rueLabeldjmb.caption = MLRsSvr.GetString("U8.ICBC.Mt.0302") '"打印模版:"tbrvoucher.buttons("T oFirst").Visible = T ruetbrvoucher.buttons("T oPrevious").Visible = T ruetbrvoucher.buttons("T oNext").Visible = T ruetbrvoucher.buttons("T oLast").Visible = T ruetbrvoucher.buttons("Save").Visible = T ruetbrvoucher.buttons("Cancel").Visible = T ruetbrvoucher.buttons("DelRow").Visible = T ruetbrvoucher.buttons("Output").Visible = T rue '输出tbrvoucher.buttons("Modify").Visible = T rue '修改tbrvoucher.buttons("Save").Enabled = Falsetbrvoucher.buttons("Cancel").Enabled = Falsetbrvoucher.buttons("AddRow").Enabled = Falsetbrvoucher.buttons("DelRow").Enabled = Falsetbrvoucher.buttons("Modify").Enabled = T ruetbrvoucher.buttons("Erase").Enabled = T ruetbrvoucher.buttons("Add").Enabled = T ruetbrvoucher.buttons("Ordercode").Visible = Falsetbrvoucher.buttons("ImportPur").Visible = Falsetbrvoucher.buttons("ImportExcel").Visible = Falsetbrvoucher.buttons("MakeFACardNumber").Visible = Falsetbrvoucher.buttons("MakeFACard").Visible = Falsetbrvoucher.buttons("UnSure").Enabled = T ruetbrvoucher.buttons("Sure").Enabled = T ruetbrvoucher.buttons("T oFirst").Enabled = T ruetbrvoucher.buttons("T oPrevious").Enabled = T ruetbrvoucher.buttons("T oNext").Enabled = T ruetbrvoucher.buttons("T oLast").Enabled = T rueEnd Select调用ClsVoucher_CO (clsVoucher_ CO.cls)中的GetVoucherData方法Public Function GetV oucherData(DomHead As DOMDocument, DomBody As DOMDocument, Optional V ouchID As V ariant) As String添加代码:Select Case m_enmV oucherTypeCase icbc_deptfy '部门费用拆分表clsV ouchDMO.GetV oucherDataWEB domhead, dombody, m_Conn, 部门费用拆分表, False, strErrMsg, V ouchID调用clsVouchDMO(clsVouchDMO.cls)中的getkey方法Private Function getkey(ByV al uvdV ouchType As enuSA VType, ByV al bReturn As Boolean, CN As ADODB.Connection) As Boolean添加代码:Select Case uvdV ouchType'================jiang==============Case 部门费用拆分表strV ouchType = "100016"sKeyHead = "id"sKeyBody = "id"sMView Head = "icbc_acv"sMView Body = "icbc_acvs"sViewHead = "v_icbc_acv"sViewBody = "v_icbc_acvs"sBodyID = "autoid"调用ModVoucher(ModVoucher.bas)中的G etVouchInfo方法Public Function GetV ouchInfo(strV ouchType As String, strMainIDName As String, _ strSubIDName As String, Optional errMsg As String, Optional cMainTable As String, _ Optional cSubTable As String) As Boolean添加代码:Select Case strV ouchType'================jiang==============Case "100016" '部门费用拆分表strMainIDName = "id"strSubIDName = "id"cMainTable = "icbc_acv"cSubTable = "icbc_acvs"调用frmVouchNew(单据模板.frm)中ChangeButtonsState方法注:根据单据的要求,设置工具栏按钮的初始化时的状态''改变button的状态Private Sub ChangeButtonsState()添加代码:Select Case strV ouchType'================jiang==============Case "100016", "300016", "100018"'已审核If .headerText("auditinguser") <> "" ThenMe.tbrvoucher.buttons("UnSure").Visible = TrueMe.tbrvoucher.buttons("Sure").V isible = FalseMe.tbrvoucher.buttons("Modify").Enabled = FalseMe.tbrvoucher.buttons("Erase").Enabled = False'未审核ElseMe.tbrvoucher.buttons("Sure").V isible = TrueMe.tbrvoucher.buttons("UnSure").Visible = FalseMe.tbrvoucher.buttons("Modify").Enabled = TrueMe.tbrvoucher.buttons("Erase").Enabled = TrueEnd IfSelect Case strV ouchTypeCase "100016", "300016"If voucher.headerText("archiveno") = "" ThenMe.tbrvoucher.buttons("Modify").Enabled = FalseMe.tbrvoucher.buttons("Erase").Enabled = FalseMe.tbrvoucher.buttons("MakeFACard").Enabled = FalseEnd IfEnd Select调用ModVoucher(ModVoucher.bas)中的G etstrCardNum方法Public Function GetstrCardNum(strV ouchType As String, Optional bRed As Boolean = False, Optional bGetTrue As Boolean = False) As String添加代码:Select Case strV ouchType'================jiang==============Case "100016" '部门费用拆分表GetstrCardNum = "KM01"End Select2、点击“新增”按钮调用frmVouchNew(单据模板.frm)中的VoucherT ask方法Private Function VoucherT ask(sKey As String) As BooleanSelect Case strVouchT ype'部门费用拆分表Case "100016"Select Case sKeyCase MLRsSvr.GetString("U8.ICBC.Mt.0013")strID = "MT020102"Case MLRsSvr.GetString("U8.ICBC.Mt.0014")strID = "MT020103"Case MLRsSvr.GetString("U8.ICBC.Mt.0018")strID = "MT020104"Case MLRsSvr.GetString("U8.ICBC.Mt.0026"), MLRsSvr.GetS tring("U8.ICBC.Mt.0027")strID = "MT020105"End SelectEnd Select调用clsSystem(clsSystem.cls)中的G etVoucherT askID方法Public Function GetV oucherTaskID(sKey As String, sV ouchType As String, Optional bRed As Boolean) As String添加代码:Select Case sV ouchType'================jiang==============start'20061230'部门费用拆分表Case "100016"Select Case sKeyCase GetResString("U8.ICBC.Mt.0013")strID = "MT020102"Case GetResString("U8.ICBC.Mt.0014")strID = "MT020103"Case GetResString("U8.ICBC.Mt.0018")strID = "MT020104"Case GetResString("U8.ICBC.Mt.0026"),GetResString("U8.ICBC.Mt.0027")strID = "MT020105"End Select调用frmVouchNew(单据模板.frm)中getVoucherCodeName方法Private Function getV oucherCodeName() As String添加代码:Select Case strV ouchTypeCase "100016", "300016"KeyCode = "archiveno"3、录入数据,点击“保存”按钮,保存单据调用ClsVoucher_CO (clsVoucher_CO.cls)中的Save方法Public Function Save(ByV al DomHead As DOMDocument, ByV al DomBody As DOMDocument, ByV al V oucherState As Integer, Optional vNewID As V ariant, Optional DomConfig As DOMDocument) As String添加代码:‘================jiang==============验证单据表体记录是否为0Select Case m_enmV oucherTypeCase icbc_deptfyclsV ouchLoad.V ouchSave m_Conn, 部门费用拆分表, domhead, dombody, V oucherState, strError, vNewID, DomConfigEnd Select调用ClsVouchLoad_BO(clsVouchLoad_BO.cls)中VouchSave的方法Public Function V ouchSave(m_Conn As Connection, ByV al uvdV ouchType As enuSA VType, _ByV al DomHead As DOMDocument, ByV al domBody As DOMDocument, _ByV al V oucherState As Integer, sErrMsg As String, Optional vNewID As V ariant, Optional DomConfig As DOMDocument) As Boolean添加代码:Select Case uvdV ouchType'================jiang==============Case "100016"bSuccess = TruestrMTblName = "icbc_acv"strSTblName = "icbc_acvs"4、单据的删除功能点击“删除”按钮调用clsVouchload_bo(clsVouchload_bo.cls)中的VouchDelete方法Public Function V ouchDelete(strV ouchType As String, ByV al DBConn As ADODB.Connection, sTableName As String, DomHead As DOMDocument) As String 添加代码:Select Case strV ouchType'================jiang==============Case "100016" '部门费用拆分表sTableName = "icbc_acvs"V ouchDelete = clsCommSave.DeleteV oucher(strV ouchType, DBConn, sTableName, DomHead)5、单据的修改功能点击“修该”按钮,录入数据,点击“保存”按钮,保存单据调用frmVouchNew(单据模板.frm)中ButtonClick方法Case "save" '保存Screen.MousePointer = vbHourglassvoucher.ProtectUnload2bClickCancel = FalsebClickSave = True'删除空白行Select Case strV ouchTypeCase "100016"'部门和所占比例为空For i = voucher.BodyRows To 1 Step -1If (voucher.bodyText(i, "cdepcode") = "" And voucher.bodyText(i, "rate") = "") Or _voucher.bodyText(i, "rate") = 0 ThenMe.voucher.DelLine iEnd IfNextEnd Select6单据的审核功能调用clsVouchload_bo(clsVouchload_bo.cls)中的VouchVerify方法Public Function VouchV erify(CN As ADODB.Connection, sflag As Boolean, sT ype As String, DomHead As DOMDocument, T otalMsg As S tring) As BooleanSelect Case strVouchT ypeCase "100016"sqltemp = "select isnull(auditinguser,'') as auditinguser from icbc_acv where id = " & tmpId二、单据列表总结打开“单据列表工具”填写sheet:Rpt_GlbDEF_BASE,AA_ColumnDic_BASE,aa_busobject 对应单据列表的内容,具体字段意思可以参考数据字典。

关于一些插件开发的参考代码

关于一些插件开发的参考代码

K/3 BOS开发百问百答应用集成部客户化管理部2005年12月目录一,插件开发篇【问题1】在插件中以新增,修改和查看方式打开另一单据【解答】使用代码调用序时簿'********************************************'功能:显示BOS单据,显示的方式为新增,修改和浏览'参数:lClassTypeID—显示BOS单据的ID'********************************************Private Sub ShowBill(ByVal lClassTypeID As Long)Dim oDataSrv As ObjectDim oBill As ObjectOn Error GoTo err_ctrSet oDataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv") oDataSrv.ClassTypeID = lClassTypeIDSet oBill = CreateObject("K3SingleClassBill.ClassInfoManager")With oBill.DataSrv = oDataSrv.ISNetControl = True.ISCheckRight = True.Show'**********************'Show 参数类型'第一个参数 Optional ByVal lID As Long = 0 ;描述修改或查看的单据ID如是基础资料时,是否显示分组 '第二个参数 Optional ByVal bShowGroup As Boolean = False ;As Long = Enu_BillStatus_New ;显示方式 0—查'第三个参数 Optional B yVal BillStatus看;1—新增;2—修改单据初始值'第四个参数 Optional ByVal dctData As KFO.Dictionary ''**********************End WithSet oDataSrv = NothingSet oBill = NothingExit Suberr_ctr:Set oDataSrv = NothingSet oBill = NothingEnd Sub【问题2】我想在投料变更单的菜单上加入一个菜单项,需要插入一个插件,但投料变更单上已经有一个插件了,我想了解一下怎样才可以再插入一个插件呢【解答】点插件管理中的按钮,可以通过浏览来选择自定义插件,并选择多个插件对象,BOS允许多个插件同时存在.【问题3】如何通过插件代码动态设置基础资料或业务单据序时薄过滤条件【解答】业务场景:在开发BOS单据时,经常需要根据前面录入的字段值来过滤选择的基础资料.例如录入客户后,在选择客户对应客户地址基础资料时,在基础资料F7查询界面只显示当前单据上客户对应地址.根据当前物料,在选择物料对应批次.我们下面就以批次为例说明实现方法:需求:在选择批次前要求必须录入物料,批次查询界面只显示物料对应的批次开发步骤:假设:物料对应FKey="FItemID",批次对应FKey="FBatchNo"单据类型 200000001只需更新对应元数据即可实现:where update ICClassTableinfo set FFilter='(FItemID=GetFldValue(FItemID,1))' FKey="FBatchNo" and FClassTypeID=200000001如果不要求先录入物料where update ICClassTableinfo set FFilter='(FItemID=GetFldValue(FItemID,0))' FKey="FBatchNo" and FClassTypeID=200000001再举个例子根据工艺路线过滤工序名称假设:工艺路线FKey="FNewRoutingID",工序名称FKey="FOperID"单据类型 200000001whereIn (Select FOperID from t_routingoper update ICClassTableinfo set FFilter='FInterIDFinterID=GetFldValue(FNewRoutingID,1))' where FKey='FOperID' and FClassTypeID=200000001其中GetFldValue为BOS内部函数,取单据上指定字段值,第一个参数为字段对应FKey,第二个参数为是否要求该字段先录入,1 要求 0 不要求此方法虽能实现,但不是最好方法.希望能在插件接口中提供在函数.【问题4】在插件中调用序时簿并返回选中的数据【回答】请参考下面代码'********************************************'功能:显示BOS序时簿并返回选中的值'参数:lClassTypeID—显示BOS单据的ID'********************************************Private Function ShowListByReturn(ByVal lClassTypeID As Long) As ObjectDim oDataSrv As ObjectDim objLookup As ObjectOn Error GoTo err_ctrSet oDataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv")oDataSrv.ClassTypeID = lClassTypeIDIf oDataSrv.showfilter ThenSet objLookup = CreateObject("K3ClassLookUp.BillLookUp")objLookup.ClassTypeID = lClassTypeIDSet objLookup.DataSrv = oDataSrvobjLookup.LookupSet ShowListByReturn = objLookup.VectReturnEnd IfSet oDataSrv = NothingSet objLookup = NothingExit Functionerr_ctr:Set oDataSrv = NothingSet objLookup = NothingEnd Function【问题5】在自定义的BOS单据上,通过插件作生成凭证的功能,但是在调用凭证的组件时,需要一个二次登录后才能使用相应的模块.请问:如何处理隐身的二次登录,或者其他的变通处理.【解答】凭证组件的调用是不需要二次登录的,可能你是在VB调试状态下运行,编译后就没事了.请参考下面代码Private Sub m_BillInterface_MenuBarClick(ByVal BOSTool As K3ClassEvents.BOSTool, Cancel As Boolean)Dim glvch As Object '中间层凭证对象待保存凭证头Dim mvch As KFO.Dictionary '待保存凭证分录集Dim mvchentry As KFO.Vector 'Dim entry As KFO.Dictionary '待保存凭证分录核算项目明细集Dim mvchdetail As KFO.Vector '核算项目明细Dim detail As KFO.Dictionary 'Dim i, iCount As LongDim vValue As Variant'TODO: 请在此处添加代码响应事件 MenuBarClickSelect Case BOSTool.ToolNameCase "生成凭证"vValue = m_BillInterface.GetFieldValue("FUser1")If Not (CStr(vValue) = "" Or CLng(vValue = 0)) Then金蝶提示" MsgBox "当前合同已经生成凭证!", vbExclamation, "Exit SubEnd If'此处添加处理 生成凭证 菜单对象的 Click 事件Set mvch = New KFO.Dictionarymvch("FDate") = Nowmvch("FGroup") = "金华泰项目"mvch("FReference") = m_BillInterface.GetFieldValue("FID")Set mvchentry = New KFO.Vector合同金额vValue = m_BillInterface.GetFieldValue("FInteger") ''创建凭证分录Set entry = New KFO.Dictionaryentry("FExplanation") = m_BillInterface.GetFieldValue("FNote") entry("FAccountID") = m_BillInterface.GetFieldValue("FBase") entry("FDC") = 1entry("FAmount") = vValue'数量&单价entry("FQuantity") = 0entry("FUnitPrice") = 0entry("FMeasureUnitID") = 0'创建核算项目明细Set mvchdetail = New KFO.VectorSet detail = New KFO.Dictionarydetail("FItemClassNumber") = "002"detail("FItemNumber") = "02"mvchdetail.Add detailSet entry("_Details") = mvchdetailmvchentry.Add entrySet mvch("_Entries") = mvchentrySet entry = New KFO.Dictionaryentry("FExplanation") = m_BillInterface.GetFieldValue("FNote") entry("FAccountID") = m_BillInterface.GetFieldValue("FBase1") entry("FDC") = 0entry("FAmount") = vValue'数量&单价entry("FQuantity") = 0entry("FUnitPrice") = 0entry("FMeasureUnitID") = 0'创建核算项目明细Set mvchdetail = New KFO.VectorSet detail = New KFO.Dictionarydetail("FItemClassNumber") = "002"detail("FItemNumber") = "02"mvchdetail.Add detailSet entry("_Details") = mvchdetailmvchentry.Add entrySet mvch("_Entries") = mvchentryDim s As Strings = "ConnectString={Provider=SQLOLEDB.1;User ID=sa;Password=ahyj;DataSource=JAMES;Initial Catalog=xt_3};UserName=administrator;UserID=16394;DBMSName=Microsoft SQL Server;DBMSVersion=2000;SubID=GL;AcctType=gy;Setuptype=Industry;Language=chs;IP=192.168.1.92;Mac hineName=JAMES;UUID=800A878D-F574-4877-B79C-D88AB721ECA0"oucher.V o ucherUpdate")Set glvch = CreateObject("EBSGLVglvch.Create s, mvchs = "Update t_BOS_ht set fUser1=" & m_erID & " where fid=" & m_BillInterface.GetFieldValue("FID")m_BillInterface.K3Lib.UpdateData sm_BillInterface.RefreshBill金蝶提示"MsgBox "凭证生成成功!", vbInformation, "Case "变更"End SelectEnd Sub【问题6】在设计BOS单据的过程中,经常会有关联的下拉列表框操作,如我在客户上选择"建设银行",那么在客户相对应的地址的下拉列表框中应动态显示"建设银行所对应的地址".也就是说客户地址是随着客户的变化而变化的.【解答】BOS不支持运行时动态修改下拉列表框的列表值,否则序时簿显示有问题.建议通过其它变通方法实现.客户改变时把相关地址取回到字典包中,用户录入后,自动匹配地址并自动回写.保存时判断地址是否正确.可以首先定义一个基础资料(客户地址对应表),将下拉框字段改为基础资料字段,关联到客户地址对应表上,并设置动态过滤条件,条件设置方法为:K/3 BOS 开发秘籍之单据录入时动态改变基础资料过滤条件( id=37977)通过插件的Change事件更新ICClassTableInfo 的FLookUpList字段值,运行正常,但是下拉列表框的数据没有变化,据推测好像是新增BOS单据时将所有的元数据规则加载到单据上,即使在单据操作过程中更改元数据规则单据也不能马上更新.不知道将下拉列表框类型替换为基础资料类型,在Change事件时更新基础资料的过滤条件,是否可行,仅供参考.Private Sub m_BillInterface_Change(ByVal dct As KFO.IDictionary, B yVal dctFld AsKFO.IDictionary, ByVal Col As Long, ByVal Row As Long, Cancel As Boolean)Dim iDeptID As IntegerDim rs As ADODB.RecordsetDim sSql As String'TODO: 请在此处添加代码响应事件 ChangeIf dct("FKey") = "FDept" TheniDeptID = m_BillInterface.BillHeads(1).BOSFields("FDept").ValuesSql = "Update ICClassTableInfo set FLookUpList='SQL{ SELECT fItemID,fname FROM t_emp where fdepartmentID=" & iDeptID & "}' where (FClassTypeID = '200000003') and FID='7265'"Set rs = m_BillInterface.K3Lib.GetData(sSql)End IfEnd Sub【问题7】如何可以物料多选【解答】'/* 判断物料是否为为多选If TypeOf ReturnItem.ReturnObject Is KFO.Vector Then'/*如物料是多选,返回值是vectorFor lCount = 1 To ReturnItem.ReturnObject.UBoundIf ReturnItem.ReturnObject.Item(lCount).ItemID 0 ThenSet dicItem = New KFO.DictionarydicItem("Value") = ReturnItem.ReturnObject.Item(lCount).ItemIDdicItem("Number") = ReturnItem.ReturnObject.Item(lCount).Numberend ifnextEnd If注意目前只有物料能多选,其他核算项目不支持多选.【问题8】在表单分录里需要在第一列中使用F7键或点击菜单调出某一窗体(在插件中自定义Form,上有Spread表单),在Form中选中数据(多条或一条),返回到源单,请问在插件中用什么事件可以完成 在单据中添加一菜单,用MenuBarClick事件,F7不易实现.返回的数据需用赋值方法填写到表体中.是什么样的需求不能用BOS单据或基础资料完成"Spread表单"【解答】Private Sub m_BillInterface_MenuBarClick(ByVal BOSTool As K3ClassEvents.BOSTool, Cancel As Boolean)Dim dct As KFO.DictionaryDim row As LongDim col As Long'TODO: 请在此处添加代码响应事件 MenuBarClickIf BOSTool.ToolName = "mnuDataLookUp" Thenm_BillInterface.GetActiveField dct, col, row要处理字段FKey" ThenIf dct("FKey") = "frm.Show 1'通过frm返回 值If ok Then值, rowm_BillInterface.UpdateNormalFld dct,End IfCancel = TrueEnd IfEnd IfEnd Sub还需要处理下面事件dct As KFO.IDictionary, ByVal Col As Long,Private Sub m_BillInterface_BeginEdit(ByValByVal Row As Long)要处理字段FKey" ThenIf dct("FKey") = "m_BillInterface.MenuBar.BOSTools("mnuDataLookUp").Enabled = TrueEnd IfEnd Sub【问题9】插件中字定义系统中如何获取当前系统字符连接串 有个项目中,需要作一个年结功能,进行土地数据结转,在vb中定义了年结功能窗口,要在主控台子系统中调用,怎样或得当前数据库连接信息,亦无法通过k3lib获得,因为我没必要去调用 bos表单或序时簿.另外,一些复杂报表,我也是通过vb中单独实现,这些报表也需要获的连接字符串才能调用【解答】连接串获取方式:(注意不支持调试,调试的话可以用实际连接串代替)Private Declare Function GetCurrentProcessId Lib "kernel32" Alias "GetCurrentProcessID" () As Long'获取连接串Public Function GetPropsString() As StringDim lProc As LongDim spmMgr As ObjectlProc = GetCurrentProcessIdSet spmMgr = CreateObject("PropsMgr.ShareProps")GetPropsString = spmMgr.GetProperty(lProc, "PropsString") End Function需要申请MMTS.bas的源代码,还需要申请ICKDListener的接口.另外,如果需要调试程序,就还需要申请KDMain的源代码.组件无法使用问题【问题10】关于K3Billtransfer.dll【解答】K3BillTransfer是工业单据里的接口组件,不是K/3BOS的接口组件,K/3 BOS的接口组件是K3ClassEvents. K/3 BOS插件中不能调用K3BillTransfer.【问题11】BOS单据插件里的取分录的合计值该怎么做【解答】工业单据自定义里面有个GetSumGridText方法取得分录某一列的合计值,现在BOS单据里面需要取某一列的合计,请问有什么方法可以调用.我注意到有个sum方法,但不知道该怎么用 里面带BRow和ERow两个参数,应该是起始行和结束行吧,但分录的行是可以改变的,这两个值怎么取得我也有个客户使用Sum时有问题,在用bos做开发的时候,想计算一个表体中某一个字段的和,我们不明白如何使用函数中Object.Sum (dct As Dictionary, [BRow As Long], [ERow As Long])另外,从单据体下推单据头能通过插件来实现吗,因为我看你给我们的资料上写的是单据体不能下推单据头.Object.Sum (dct As Dictionary, [BRow As Long], [ERow As Long])参数说明:dct-字段的模板字典BRow-合计开始行,可选参数,默认值是1ERow-合计结束行,可选参数,默认值是最大行举例(要求税额合计值):"", 0) dblTaxSum = Set dct = m_BillInterface.GetFieldInfoByKey("FTaxFor",m_BillInterface.Sum(dct)参考(表体行数的取值方法):BillEntry.MaxRows【问题12】隐藏选单时序时簿不要的菜单和工具栏.K/3单据查看和选单使用的是同一个序时簿,在插件中用MenuBarInitialize添加的菜单和工具栏在选单时也显示出来.【解答】在MenuBarInitialize事件中使用m_ListInterface.List.ShowMode判断(查看和选单)1—查rface.List.ShowMode = 1 Then ……end.看;2—选单.如:If m_ListInte如需隐藏其他的菜单和工具栏,参考以下代码:Dim oTool As K3ClassEvents.BOSToolDim oBand As K3ClassEvents.BOSBand'*************** 开始设置 BOS 原有菜单 ***************'获得 mnuEdit 菜单对象,并设置属性Set oBand = oMenuBar.BOSBands("menu")Set oTool = oBand.BOSTools("mnuEdit")With oTool.Visible = False.Enabled = FalseEnd With【问题13】标体行高设置和值更新事件表单的表体的行高的属性在哪里,我找不到,如果发布后到主控台里去调,表体的标题行会同比例变化,非常不美观.在值更新事件里怎么能调用sql呢对于已携带辅助属性的字段再定义值更新事件,如果值更新事件里包含该辅助属性,计算公司无效.也就是值更新事件公式里调用的辅助属性是更新前的.事件函数描述中,tkeyword参数应该是fkeyword的笔误,能否改正.【解答】标体的行高目前不能调整.插件中调用SQL的方法有:m_BillInterface.K3Lib.GetData 和 m_BillInterface.K3Lib.UpdateData.在插件中使用更新后事件.谢谢提醒,在下一版本中改之.【问题14】事务处理BOS的插件开发中,事务怎样处理啊 又不能直接操作数据库.有什么好方法吗 否则数据可能就乱掉了.在事务完整性处理上,目前的BOS插件还有很多需要改进.说个简单例子:BOS是支持多插件的,那么多插件之间如何保证事务完整性呢同样是审核事件,有2个插件响应了这个事件,如果第一个插件通过了审核,但是第二个插件却不能通过,那么第一个插件处理了的数据又如何回滚【解答】如在插件中编写大量的更新SQL请使用中间层插件,中间层插件能保证事务的完整性.如果在客户端希望执行SQL时保证事务一致性,建议使用 K3Lib.UpdateData 方法,将希望在同一事物中处理的SQL语句通过它一次性提交,BOS会自动启用事务处理来保证;如果像多个插件中的审核等操作的一致性问题,解决的方法是制定一个中间层的审核前插肩来判断处理;这类的问题都可以在中间层的相关事件中处理,来保证一致性.【问题15】如何在新的BOS单据中通过代码逐行添加分录数据在BOS单据中新增菜单,功能为向当前新单据(单据为BOS创建)中添加物料等数据,因需加入的数据来自多张表,所以不适用于BOS的单据流程下推功能生成,而采用插件的方式实现.但在用 SetFieldValue 方法向分录中添加数据时发现第一行总是顺利通过,但写下一行(即第二行)时就写不下去了,错误提示:没有找到给定字段名的字段的值Err.Description :Err.Number : -2147221403Err.Source : K3ClassEvents.BillEvent请问是什么原因附部分代码:With rsItemlngRow = 1.MoveFirstDo Until .EOFm_BillInterface.SetFieldValue "FItemID", !FNumber, lngRowm_BillInterface.SetFieldValue "FQty", lngRow, lngRowlngRow = lngRow + 1.MoveNextLoopEnd With【解答】参考下列代码With rsItemlngRow = 1MoveFirstDo Until EOFm_BillInterface.InsertNewRowAndFill 2,lngRow,"FItemID", !FNumber,"FQty", lngRowlngRow = lngRow + 1MoveNextLoopEnd With【问题16】在单据体中有没有办法让下一条分录自动携带上一条分录的数据(只是部分字段).【解答】用插件可以实现.示例代码:'物料录入后,第二行的值自动默认第一行的值If dct("FKey") = "FItemID" And row > 1 Thenm_BillInterface.SetFieldValue "FBase_TH", m_BillInterface.GetFieldValue("FBase_TH", row - 1, Enu_ValueType_FFND), row '提货地点endif【问题17】否有办法完成单据体中的行点击事件 现在有需要在点击BOS单据中单据体的某一行时,在另一个表体中显示与该行有关的信息,请问各位有什么好的实现方法,特别是怎么获取点击事件和所点击的行数据信息.【解答】【问题18】多分录序时簿浏览,字段权限.在多表体单据中,用序事簿预览时,不出现第二个表体的内容.怎么实现查询第二个表体的内容.在使用单据的序事簿查询时,想看单据的全部内容,但在选单时想看一少部分内容,现在不能实现. 可用字段授权对不同的人进行授权解决(给选单人字段权限少一些字段)【解答】目前序时薄只能实现单据头+一个单据体的预览方式,但单据体在过滤界面是可选择的.如果问题的要求是实现多单据体的同时展现,则为需求,目前暂不能实现,待后续版本规划.此问题要求选单与单据序时薄有不同的展现设置,字段授权的方式解决不了这个问题,请确定这个需求的通用性.如不通用建议通过序时薄插件开发来实现.FillRow时,不可见字段内容作屏蔽.【问题19】怎么样可以用代码调出单据的序时薄窗口.【解答】调用序时簿不返回选中值——BOS单据ID'lClassTypeIDPrivate Function ShowList(ByVal lClassTypeID As Long) As BooleanDim oDataSrv As ObjectDim objLookup As ObjectOn Error GoTo err_ctrSet oDataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv")oDataSrv.ClassTypeID = lClassTypeIDIf oDataSrv.showfilter ThenSet objLookup = CreateObject("K3ClassLookUp.BillLookUp")objLookup.ClassTypeID = lClassTypeID 'oDataSrv.ClassTypeIDSet objLookup.DataSrv = oDataSrvobjLookup.ShowEnd IfSet oDataSrv = NothingSet objLookup = NothingExit Functionerr_ctr:Set oDataSrv = NothingSet objLookup = NothingEnd Function调用序时簿返回选中值Private Function ShowListByReturn(ByVal lClassTypeID As Long) As ObjectDim oDataSrv As ObjectDim objLookup As ObjectOn Error GoTo err_ctrSet oDataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv") oDataSrv.ClassTypeID = lClassTypeIDIf oDataSrv.showfilter ThenSet objLookup = CreateObject("K3ClassLookUp.BillLookUp")objLookup.ClassTypeID = lClassTypeIDSet objLookup.DataSrv = oDataSrvobjLookup.LookupSet ShowListByReturn = objLookup.VectReturnEnd IfSet oDataSrv = NothingSet objLookup = NothingExit Functionerr_ctr:Set oDataSrv = NothingSet objLookup = NothingEnd Function组件)嵌入K/3系统,数据库端按装后【问题20】K/3 BOS SDK 二次开发组件(k3Billtransfer.dll,并注册,最后进入K/3,没有效果!是后),再在..../system32/ls_DV(update i ctransactiontype...组件不是K3 V10.2不支持二次组件开发 还是不支持K/3 BOS SDK中的K3billtransfer【解答】为了支持多二次开发的结构,单据二次开发记录现在在t_ThirdPartyComponent表里维护.FTypeID,INT,4,用于区分事件类型(0,表示单据,1,表示序时簿,2,表示其它通用业务); FTypeDetailID,INT,4,对应单据,序时簿上的具体ID,在单据上使用时,该事件ID对应单据的TranType,在序时簿上使用时,对应序时簿的FID,对于FTypeID=2的类型,FTypeDetailID表示只有中间层的二次开发类型,比如审核;FIndex,INT,4,对于一个FTypeDetailID,可以有多个二次开发操作,中间用FIndex来决定执行顺中记录的二次开发之前执行,ictransactiontype中的序,(标记为负数的会在ictransactiontypeFIndex默认为0),非空; FComponentName,V ARCHAR,200,二次开发组件名称(ComName.clsName);FCompenentSrv,VARCHAR,200,中间层二次开发组件;FDescription,NV ARCHAR,255,二次开发组件说明;【问题21】如何在单据插件代码中通过条件判断来启动多级审核.【解答】在保存后事件(AfterSave)中添加下列代码:'条件判断If m_BillInterface.MultiCheckMgr.MultiCheckBill(m_BillInterface.BillCtl.CurBillID) Then m_BillInterface.RefreshBillEnd If【问题22】在插件开发中,如何获得当前登陆的用户ID 比如administrator登陆,如何得到ID另外,如何得到选中多行单据时的集合 一个表体中,有职员编码和职员名称,想通过输入编码后,直接关联出名称来.名称这个字段用职员类型,还是文本值更新事件好象不管用.【解答】获得当前登陆的用户ID:erID.选中多行的函数GetSelectedBillInfo(),此函数返回一个KFO.Vector数据包,Vector的Size和选中的行数一致.每行包含一个KFO.Dictionary数据包,此数据包包含FClassTypeID,FID,FEntryID.FClassTypeID表示单据类型;FID表示当前行所属单据的内码;FEntryID表示单据分录ID.示例获取选中的第一行所属单据的分录ID:Dim I As LongDim dct as KFO.DictionaryDim vct As KFO.VectorSet vct = m_ListInterface.GetSelectedBillInfoSet dct = vct(1)I = dct("FEntryID")职员名称用"基础资料属性",不要用文本.【问题23】在销售系统中增加了一张BOS开发的单据. 单据上也指定了相应的插件.(插件是依据BOS 开发向导生成的. 插件的功能只是增加一个自定的菜单项).组件中也引用了:但在单据测试时,却总是提示错误: "单据接口无效" 的错误. 请问BOS新K3ClassEvents.dll,开发的单据是不是不能调用自定义的插件 如果有调用是不是要做其它处理【解答】插件调试时要编译或运行起来.BOS单据可以调用插件,也可以在插件中调用其他组件.请把改为和组件名一致.你的Project Properties->Project Name【问题24】Bos 开发的单据还能不能调用 k3billtransfer.dll这个组件 BOS插件中如何取得) 我想把连接字符串做为参数传递给其它语言开连接字符串 (以前 m_nstring发的程序.【解答】只有在工业单据里能调用.目前BOS插件不能获BOS 开发的单据不能调用 k3billtransfer.dll,取连接字符串.【问题25】需要通过工具栏上的按钮,实现单据体分录的上移和下移功能,请问BOS插件的如何实现【解答】事件实现"上移","下移"按钮的添加,通过在可通过m_BillInterface_MenuBarInitializem_BillInterface_MenuBarClick事件中重写单据体和数据包,实现该功能.【问题26】新增BOS 单据分录中有数量 及基本单位数量 字段, 基本单位数量关联字段为数量, 但输入完数量后,基本单位数量仍然为空.【解答】保存后基本单位数量就有了.【问题27】我在做k3BillTransfer开发时需要取表体中的"批次"列是否可以录入,即该物料是否批次管理,请问控件fpSpread中,怎么才能知道哪一个单元格可以录入或不能录入 或者可以取到该物料的内码也可以.EnteryCtl都有那些属性啊,我只知道一个fieldname,其他的比如内码等是什么 在单据二次开发参考组件没有描述,在哪有详细的说明【解答】1,获取分录某一分录物料的内码你可以通过EndGridLookUp(BeforGridLookUp)在分录执行查找功能后(前)激化这个事件,你就可以获取当前行,列,当前查询的资料类型(例如返回4说明是物料).EnteryCtl对应分录各列,记录每个分录列个属性的数组,在数组属性里面会有物料内码的属性!2,当TEntryCtl(Col).LookUpCls = 4 为按F7时查询物料 Col为物料在单身对应的列保存的就是物料ID,Col:为物料在单身对应的列,CurRow:分TEntryCtl(Col).DInterID(CurRow)录行号.【问题28】K/3 BOS单据,序时簿和工业单据,序时簿中分别如何获得当前用户的信息 (比如ID)【解答】BOS单据单据和序时簿都能读"当前用户",方法为:erID.工业单据单据目前还不能没有办法实现你的需求,请另想办法.【问题29】通过工业单据插件怎么获得当前K/3的版本号 工业单据插件是否支持所有账套类型的单据,不区分工业供应链,商业供应链【解答】通过以下代码可以解决:Dim read As ObjectDim reg As StringDim result As StringSet read = CreateObject("WScript.Shell")reg = "HKEY_LOCAL_MACHINE\SOFTWARE\Kingdee\Registered\PRODUCTVERSION"result = read.RegRead(reg)MsgBox resultSet read = Nothing表中管理的单据,都可以应用工业单据插件在ictransactiontype【问题30】在工业单据的插件中如何得到单据的FInterID (工业单据)【解答】BillID = m_BillTransfer.SaveVect.Item(1).Value("FInterID")方法【问题31】在BOSV10.2中,填充新行数据可以用m_BillInterface.InsertNewRowAndFill实现,但是在BOSV10.1中不知道用什么方法可以向单据体逐行插入数据 如果单据体中有物料,计量单位等查找类型字段,其赋值是否一样【解答】将10.1的KFO.DLL换成10.2 KFO.DLL,是兼容的m_BillInterface.Data("Page2").Add dctRow.CloneAll【问题32】请问10.2的工业老单(非BOS),作k3BillTransfer插件的时候,是否可以在BeforHeadLookUp事件中指定基础资料的过滤条件,= " 1=2 ".我发现这段代码所指定的过滤条件不起如:m_BillTransfer.HeadCtl(CtlIndex).Filter作用.【解答】参考以下代码:Private Sub m_BillTransfer_BeforHeadLookUp(ByVal CtlIndex As Long, ByVal nLookUpClsID As Long, Cancel As Boolean)If nLookUpClsID = 5 ThenDim tHeadCtl As VarianttHeadCtl = m_BillTransfer.HeadCtltHeadCtl(CtlIndex).Filter = tHeadCtl(CtlIndex).Filter & " AND 1=2 "'m_BillTransfer.HeadCtl(CtlIndex).Filter = " 1=2 "m_BillTransfer.HeadCtl = tHeadCtlEnd IfEnd Sub【问题33】 我们在使用K/3 BOS+VB6为新港湾开发一个完全个性的项目管理系统,是使用一套帐的方式实现的,帐套理面将会创建几十或更多的工程项目,这就涉及到基础资料,项目计划,项目施工记录,项目有关单据等诸多信息要跟具体的项目邦定起来,用户一旦选定当前项目后,所有的数据维护,查询及报表都只针对当前项目操作,现在录入时跟项目邦定的问题我已解决,可查询(主要是序时薄,包括基础资料序时薄与业务单据序时薄如何与当前选定项目邦定,即序时薄只显示属于当前选定项目的数据)的问题还没解决,这就是我提出问题的背景,该问题若解决不了,整个使用K/3 BOS进行开发的解决方案将行不通,面临几十万元退款损失的风险,故十分重要.需求如下(举个例):如用BOS定义了一个名为"项目任务"的基础资料,包含工程项目,任务代码,任务名称等字段,如下所示:工程项目 任务代码 任务名称-------------------------------00000001 01 进场准备00000001 02 进场00000002 01 进场准备00000002 02 进场........ .. ........写插件时,请问想要达到进入该基础资料序时薄时只显示某一个工程项目的相关基础资料记录该如何编码(在那个事件入口处理,怎样处理),同样,如果是业务单据序时薄,又该如何设置过滤条件(在那个事件入口处理,怎样处理),本人看过开发手册,好象没有合适的事件入口,更没有该方面的例子.【解答】应可以实现.但在在K/310.2+SP1的环境下,基础资料序时簿和单据序时簿有"ListFilterString"重新查询,过滤条件失效,在SP2解决此问题【问题34】怎么找每个字段的索引【解答】参考下列代码'表头THeadCtl = m_BillTransfer.HeadCtlFor i = 1 To UBound(THeadCtl)If UCase(THeadCtl(i).FieldName) = "FBILLERID" Then张三"m_BillTransfer.head(i).text = "Exit ForEnd IfNext'表体EntryCtl = m_BillTransfer.EntryCtlFor i = 1 To UBound(m_BillTransfer.EntryCtl)If UCase(EntryCtl(i).FieldName) = "FQTY" ThenExit ForEnd IfNext【问题35】BOS 开发一张新的单据. 在选单返回时, 希望能在表体自动添加一行分录.事件测试代码如下:dcData As KFO.IDictionary,Private S ub m_BillInterface_AfterSelBillBeforeFillData(ByValByVal dctLink As KFO.IDictionary)Dim CoDict As KFO.Dictionary拷贝第一条分录数据Set CoDict = dcData("Page2")(1).CloneAll //添加到 dcDatadcData("Page2").Add CoDict //dcData("Page2")(dcData("Page2").Count)("_-0001_FIndex2")("FFLD") = dcData("Page2").Count //更改分录号'Stopset CoDict=NothingEnd Sub我用 watch 查看 DcData 的值. DcData("Page") 也有增加一条, 但返回后,新添加的分录并未带到目标单据上 请问我还要修改哪些地方【解答】此方法在调试状态下是不能把值传过去的,编译之后就可以了.你的代码有以下问题:1,取分录号使用dcData("Page2")(dcData("Page2").UBound)("FEntryID").2,Vect的最大值用UBound,而不是count.是字段名.3,去字段的key值使用m_BillInterface.TableInfo("map")("FPrice")'FPrice正确的代码是:Dim CoDict As KFO.Dictionary'dcData("Page2")(1)(m_BillInterface.TableInfo("map")("FPrice"))("FFLD") = 1000拷贝第一条分录数据Set CoDict = dcData("Page2")(1).CloneAll ''添加到 dcDatadcData("Page2").Add CoDict '更改分dcData("Page2")(dcData("Page2").UBound)("FEntryID") = dcData("Page2").UBound - 1 '录号'StopSet CoDict = Nothing【问题18】BOS单据插件里的BusinessCheck事件有何用途 写在BusinessCheck里面的代码也不执行,不知道这个事件到底是什么时候触发的.在AfterBusinessCheck事件中写的代码在打了10.2SP1之后就不执行了,我把代码放到BusinessCheck事件中也不执行,不知道什么原因,但AfterUnBusinessCheck中的代码却执行了.我只做了一级审核.AfterBusinessCheck事件和BusinessCheck事件触发时点的问题,以查看状态打开单据进行审核时,这两个事件不触发,只有在修改状态打开单据并进行审核,这两个事件才会被触发.之前没有打SP1的时候是没有这个问题的.因为强制审核人必须要打开单据检查后再进行审核,所以我在该单据的序时簿中把审核菜单去掉了,只能打开单据审核.不知道有没有人遇到这个问题.【解答】经检查,以查看状态打开单据,进行多级审核,在业务审核级次被审核时,能够触发业务审核事件,另外,昨天发现的业务审核事件在某条件下会多次触发的BUG已经修改,将会随8.31日须完成的功能点一起发放.估计还是因为用户没有针对单据插件进行编码,所以没有捕捉到事件. 二,方案篇【问题1】客户的产品是通过图纸来制造的,图纸有些是客户自己提供标准图纸,有些是客户的需求自己根据需求画出来的,报价单很大的部分是根据图纸来的,而且图纸是公司的机密.现在用户需求是图纸需要有严格的权限控制,最好能够放在数据库里面统一管理,有图纸单据有:报价单,销售定单,合同;现在我们的K/3v10.2的附件的权限不好管理不能满足客户的需求.如何提供解决方案【解答】这样的话可以对图纸管理进行开发(如果对方有PDM系统就不需要),图纸存放可以用局域网FTP或数据库存储解决,后者比较容易进行权限控制,自己设定权限控制,下载,浏览,更新,删除,都能进行控制;而且关于图纸管理也比较容易解决,如图纸的版本控制.K/3 BOS解决不了.【问题2】客户需要开发一张外贸报价单,里面涉及到物料对应表的内容,对应代码具体能实现的功能跟现有的报价单的一致,现在不知道怎么样能够具体的实现这样的功能,因为BOS的基础资料里面没有物料对应表,可以新增BOS基础资料和物料对应表共用一个表名,但是怎么可以做到跟原有的报价单在物料对应这一块的一摸一样的功能.【解答】不可能具有原来一模一样的功能,"BOS新增基础资料,映射到原有的数据表或视图"方式只能。

插件BOM单标准格式

插件BOM单标准格式

部品型号/ 部品型号/规格 SF9B903
名称 PCB板 PCB板
数量 1
回路符号 单拼板
备注
长 沙 高 新 开 发 区 仁 盈 电 子 有 限 公 司
HP_SF9 903生产卡 HP_SF9B903生产卡

变 更 改 订 履 历 No ① ② ③ ④
文件编号 RY审核 确认 作成

变更日期 24/11/2009
插件材料表(BOM) 插件材料表(BOM)
变 更 内 容 初版做成
陈习华
长 沙 高 新 开 发 区 仁 盈 电 子 有 限 公 司
HP_SF9 903生产卡 HP_SF9B903生产卡

变 更 改 订 履 历 No ① ② ③ ④
文件编号 RY审核 确认 作成

变更日期 24/11/2009
插件材料表(BOM) 插件材料表(BOM)
长 沙 高 新 开 发 区 仁 盈 电 子 有 限 公 司
HP_SF9 903生产卡 HP_SF9B903生产卡

变 更 改 订 履 历 No ① ② ③ ④
文件编号 RY审核 确认 作成


变更日期 24/11/2009
插件材料表(BOM) 插件材料表(BOM)
变 更 内 容 初版做成
陈习华
NO.
工序
变 更 内 容 初版做成
陈习华
合计
备注: 备注: 其它未尽事宜请以样板为基准

物流单据管理系统

物流单据管理系统

物流单据管理系统一、案例预览运行该系统,主界面如图一所示,有“开销售单”、“开进货单”、“查看单据”等业务,下面按业务依次说明最后实现的程序界面和操作方法。

图一(1)开销售单。

单击程序主界面的【开销售单】按钮,弹出“销售单据”对话框,如图二所示。

填完单据的各项内容后,单击【保持】按钮。

如果程序提示保存成功,会返回主界面,单据列表中又增加了一张销售单据。

图二(2)开进货单。

单击程序主界面的【开进货单】按钮,弹出“进货单据”对话框,如图三所示。

开单操作和销售单类似。

图三(3)查看单据。

在主界面中,选择要查看的单据,然后单击【查看单据】按钮,弹出对应的单据,如图四所示。

此时单据不能被编辑,查看完后单击【关闭】按钮退出查看操作。

图四二分析与创建数据库本例采用Access 2002作为数据库,使用ADO方式访问数据库。

首先创建一个数据库,命名为“”,并且将该数据库文件放在本实例应用程序的根目录中,便于访问。

从前面的分析知道。

本例需要两个数据表bill和goods。

表bill用来保持单据,包括进货单据和销售单据,单据类型用一个数字类型的字段type来区分,0表示进货单,1表示销售单。

表goods用来保持单据中填写的流通商品,通过字段billid来对应某张单据,字段index表示在该单据中的表格位置。

表结构如图五和图六所示。

图五(bill表)图六(goods表)三创建VC工程创建给予对话框的应用程序,从第二步到第六步全部采用默认方式。

四引入控件1、表格(Grid)控件在用VC开发关于数据库的项目时,通常使用DataGrid作为数据库表格控件。

本例中介绍另外一个共享表格控件CGridCtrl,非常好用,也很美观,进货单据和销售单据显示商品时使用的就是CGridCtrl控件。

CGridCtrl和一般的GRID的不同之处在于,一般的GRID并不适合显示大的数据量,如果一个查询结果有上万条记录的话,如果都要插入到GRID中,这将是个很慢的过程,并且在GRID中移动滚动条的话,它的记录的滚动也是很慢的。

K3Cloud7.0插件开发应用案例

K3Cloud7.0插件开发应用案例

收货单提供以下功能:1.增加下拉列表,显示单据头的所有字段;2.在分录菜单上增加库存查询(FQueryInventory)菜单项;3.点击库存查询时,查询分录上当前焦点所在物料的库存(STK_InvSumQuery);STK_Inventory4.查询库存时按组织隔离,只查询当前组织的库存;5.当前分录物料F8时,显示所有组织的物料;6.暂存时清空单据类型的值;7.物料基础资料增加字段有效期至(F_MCY_ExpiryDate);时只显示有效期〉今天的物料;9.保存判断物料的库存,如果〉100则提示“库存〉100,是否入库”;10.保存后锁定“收料部门”、“收料员”;11.保存后自动记录收料日志(MCY_stk_ReceiptLog);操作步骤:1.增加下拉列表,显示单据头的所有字段;a)新建(打开)收货单插件工程();b)重载OnInitialize方法,定义List<EnumItem>用于存储下拉列表枚举值;c)通过方法获取所有字段;d)通过方法获取界面上的下拉列表控件;e)SetComboItems绑定值;f)代码如下:C#public override void OnInitialize(InitializeEventArgs e){(e);List<EnumItem> list = new List<EnumItem>();foreach (Field field in {EnumItem item = new EnumItem();= ;= ;= ;(item);}"FCombo").SetComboItems(list);}2.在分录菜单上增加库存查询(tbQueryInventory)菜单项;a)运行IDE,选择单据体-菜单集合,新增菜单:b)保存;3.点击库存查询时,查询分录上当前焦点所在物料的库存;a)打开插件工程,重载方法EntryBarItemClickb)判断BarItemKey==库存查询(tbQueryInventory)c)取当前分录行d)设置ListShowParameter参数,打开表单这里介绍2种获取当前分录字段数据的方法:TryGetEntryCurrentRow:获取单据体当前行,返回是否取到值以及行数据和行号;另外一种方法:先获取单据体当前行号,再取指定行数据;2种方法没什么区别。

k3商贸单据组件参考

k3商贸单据组件参考

商贸组件使用参考商贸单据参考 相关说明:1.在该手册中,涉及到数据库结构信息,请参考相关的数据库说明文档。

2.在该手册中,为了便于读者理解,对变量命名采用如下方式:前缀加上表示具体含义的字符串。

前缀Lng表示该变量是Long类型的变量;前缀i表示该变量是Integer类型的变量;前缀d表示该变量是Double或者Date类型的变量;前缀s表示该变量是String类型的变量;前缀o表示该变量是对象变量;前缀v表示该变量是Variant变量;前缀c表示该变量是Currency变量;3.当属性说明为[返回或者设置]时,说明该属性可读可写,当属性说明为[返回]时,说明该属性为只读属性。

4. :公用参数说明PropStr数据库的连接串,包含用户信息例如:PropStr=” ConnectString={Provider=SQLOLEDB.1; UserID=sa; Password=; Data Source=caren; InitialCatalog=huigui1104}; UserName=Administrator;UserID=16394;DBMS Name=Microsoft SQL Server; DBMS Version=7.0/2000; SubID=escg;AcctType=sm; Setuptype=commerce; SessionID=zongyu.本地磁盘_28261707; LogStatus=2”ScreenID具体在Com_screen表里,具体如下(非全部):010200 采购收货单0103 采购发票010300 采购发票010301 采购增值税发票010400 采购退货单020200 销售出库单0203 销售发票020300 销售发票020301 销售增值税发票020400 销售退回入库单030105 盘盈单030106 其它入库单030107 组合入库单030205 盘亏单K3SMBillLib.CBillUpdate对象参考CbillUpdate对象主要是处理各种单据数据,包括采购单据、销售单据、仓存单据。

BOS新增单据案例2008.7.29

BOS新增单据案例2008.7.29

K/3V11.0BOS新增单据案例本期概述●本文档适用于实施、服务人员。

●当完成本文档学习之后,您将能够掌握用BOS集成开发工具开发新单据时常用的字段、ACTION等,并能够独立开发新单据。

版本信息●V1.0编写人:2008年7月29日●本文件使用须知著作权人保留本文件的内容的解释权,并且仅将本文件内容提供给阁下个人使用。

对于内容中所含的版权和其他所有权声明,您应予以尊重并在其副本中予以保留。

您不得以任何方式修改、复制、公开展示、公布或分发这些内容或者以其他方式把它们用于任何公开或商业目的。

任何未经授权的使用都可能构成对版权、商标和其他法律权利的侵犯。

如果您不接受或违反上述约定,您使用本文件的授权将自动终止,同时您应立即销毁任何已下载或打印好的本文件内容。

著作权人对本文件内容可用性不附加任何形式的保证,也不保证本文件内容的绝对准确性和绝对完整性。

本文件中介绍的产品、技术、方案和配置等仅供您参考,且它们可能会随时变更,恕不另行通知。

本文件中的内容也可能已经过期,著作权人不承诺更新它们。

如需得到最新的技术信息和服务,您可向当地的金蝶业务联系人和合作伙伴进行咨询。

著作权声明著作权所有2008 金蝶软件(中国)有限公司。

所有权利均予保留。

目录第一章单据配置的业务背景 (3)第二章单据配置 (3)1案例 (3)2单据字段配置 (5)2.1新建业务单据 (5)2.2 配置业务单据的字段 (6)2.2.1 修改单据名称 (6)2.2.2 配置“单据编号” (7)2.2.3 配置“制单人、制单日期、审核人、审核日期”字段 (8)2.2.4 配置“供应商、部门、业务员”字段 (11)2.2.5 配置“物料代码、物料名称、规格型号、计量单位、收料仓库、收料仓位”字段 (12)2.2.6 配置“实收数量、已钩稽数量、单价、金额、税率、税额、价税合计”字段 (14)3生成凭证配置 (17)第三章常见问题 (19)第一章单据配置的业务背景客户的需求是多样的,而软件是通用的,K/3预设的单据、流程不一定与客户的需求完全吻合,此时,我们就可以使用BOS集成开发工具新增、配置符合客户业务的单据和流程。

java机试-单据列表

java机试-单据列表

机试题(60分,时间7小时)实现销售出货单的列表、删除操作:1、技术要求:使用ssh架构,数据库用oracle。

2、页面使用struts进行数据显示。

点击删除按钮时,弹出确认窗口,待确定后,使用ajax技术删除对应记录。

3、点击详情,使用ajax技术,弹出一个层显示该出库单的明细内容。

4、实现分页功能。

5、数据表结构:出库单表(t_saleform)字段名类型空否主键外键中文说明f_saleform_no VARCHAR(20) N Y 单号f_saleform_date DATE N 单据日期,要建索引idx_form_datef_customer VARCHAR(20) N 客户f_sales VARCHAR(20) N 业务员f_remark TEXT 备注出库单明细表(t_saleform_detail)字段名类型空否主键外键中文说明f_saleform_no VARCHAR(20) N Y Y 报价单号,引用t_sd_saleform.f_saleform_nof_line_id SMALLINT N Y 行号f_goods VARCHAR(50) N 商品名称f_qty NUMERIC(19,4) N 数量f_price NUMERIC(19,4) N 单价f_money_amt NUMERIC(19,4) N 金额6、用SQL脚本建表,脚本存放在Documents文件夹下;7、选中行后,可以点击删除按钮进行删除,但必须有是否确认删除的提示;1、考试文件夹结构:(班级名+姓名)文件夹|---工程名|____src|____Database|____ WebRoot|____js|____css|____image数据库sql文件放在Database下;源程序放在Src下;有独立JS,css,图片等文件者,必须放在对应的js、css、image文件夹下。

评分规则(总分60分,采用扣分制评分,本题分扣完为止):1、未使用ssh架构,不得分;2、中途弃考者或交卷未等监考老师检查完自行离开者,不得分;3、数据库脚本未创建扣10分,有未写建库语句、未写建表语句、未写主键约束、未写外键约束、未写索引者,每项扣2分;4、未实现分页者(必须录入11张以上的单据作为测试数据),扣20分;;5、有未实现单据删除操作者,扣15分;删除操作必须单据明细表与主表一起删除,使用事务,否则视同删除操作未实现;6、项目必须按要求存放,否则扣5分;7、代码书写不规范,未写注释者,扣5分。

er_bxzb(报销单主表)

er_bxzb(报销单主表)

officialprintdate
正式打印日期
char

44
officialprintuser
正式打印人
char

45
paydate
支付日期
char

46
payflag
支付状态
smallint

47
payman
支付人
char

48
pjh
票据号
varchar

49
pk_corp
录入人公司
char

50

67
zy
事由
varchar

68
zyx1
自定义项 1
varchar

69zyx10自定义项10varchar是
70
zyx11
自定义项 11
varchar

71
zyx12
自定义项 12
varchar

72
zyx13
自定义项 13
varchar

73
zyx14
自定义项 14
varchar

74
zyx15

59
szxmid
收支项目
char

60
total
合计金额
decimal

61
ts
时间戳
char

62
ybje
报销原币金额
decimal

63
zfbbje
支付本币金额
decimal

64
zfdwbm

李誉-单表单据代码及配置文件

李誉-单表单据代码及配置文件

单表单据代码及配置文件李誉2012-05-31关键词:单表说明:以信用额度设置为例。

1. 配置文件<!-- 环境变量--><bean id="context" class="nc.vo.uif2.LoginContext" /><!-- 应用服务类,负责进行模型操作的处理,增删改操作--><bean id="batchModelService"class="nc.ui.credit.creditamount.model.MaintainService"><property name="context" ref="context" /></bean><!-- 对象转换器工厂,由此获取操作对象的特征信息--><bean id="boadatorfactory" class="nc.vo.bd.meta.BDObjectAdpaterFactory" /> <!-- 批量操作前台校验,例如过滤空行等--><bean id="batchValidateSerice"class="nc.ui.pubapp.uif2app.model.DefaultBatchValidateService"><property name="editor" ref="list" /></bean><!-- 批量操作应用模型--><bean id="batchBillTableModel"class="nc.ui.pubapp.uif2app.model.BatchBillTableModel"><property name="context" ref="context"></property><property name="service" ref="batchModelService"></property><property name="businessObjectAdapterFactory"ref="boadatorfactory"></property><property name="validationService" ref="batchValidateSerice"></property></bean><!-- 查询代理--><bean id="qryService"class="nc.ui.credit.creditamount.serviceproxy.QueryProxy" /><!-- 数据模型管理器,主要负责各种方式的模型初始化--><bean id="modelDataManager"class="nc.ui.pubapp.uif2app.query2.model.ModelDataManager"><property name="service" ref="qryService" /><property name="model" ref="batchBillTableModel" /></bean><!-- 列表控件的取值策略--><bean id="componentValueManager"class="nc.ui.uif2.editor.value.BillCardPanelMetaDataValueAdapter"></bean><!-- 打开节点初始化数据监听--><bean id="InitDataListener"class="nc.ui.pubapp.uif2app.model.DefaultFuncNodeInitDataListener"><property name="context" ref="context" /><property name="model" ref="batchBillTableModel" /><property name="voClassName"value="nc.vo.credit.creditamount.entity.CreditAmountVO" /><property name="autoShowUpComponent" ref="list" /><property name="queryAction" ref="queryAction" /></bean><!-- 节点关闭的校验--><bean id="ClosingListener"class="mon.validateservice.ClosingCheck"><property name="model" ref="batchBillTableModel" /><property name="saveAction" ref="saveAction" /></bean><!-- 列表控件--><bean id="list"class="nc.ui.credit.creditamount.model.CreditAmountBatchBillTable"init-method="initUI"><property name="model" ref="batchBillTableModel" /><property name="componentValueManager" ref="componentValueManager" /> <property name="voClassName"value="nc.vo.credit.creditamount.entity.CreditAmountVO" /><property name="isBodyAutoAddLine" value="true" /><!-- 表体行操作按钮注册,与表体右键菜单保持一致--><property name="addLineAction" ref="addAction" /><property name="insLineAction" ref="insertAction" /></bean><!-- 来源,此例是根据单据号超链接到信用额度审批单--><bean id="vsourcecodeMediator"class="nc.ui.pubapp.uif2app.linkquery.LinkQueryHyperlinkMediator"><property name="model" ref="batchBillTableModel" /><property name="srcBillIdField" value="ccreditauditid" /><property name="srcBillNOField" value="vbillcode" /><!-- 保存源单据类型的字段名--><property name="srcBillType" value="4320" /></bean><!-- 编辑事件,此例包含事件编辑前事件、事件编辑后事件、组织改变事件--> <bean id="appEventHandlerMediator"class="nc.ui.pubapp.uif2app.model.AppEventHandlerMediator"><property name="model" ref="batchBillTableModel" /><property name="handlerMap"><map> <entry key="nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent"> <list> <bean class="nc.ui.credit.creditamount.editor.AfterEditHandler"><property name="editor" ref="list" /> </bean> </list> </entry><entry key="nc.ui.pubapp.uif2app.event.card.CardBodyBeforeEditEvent"><list> <bean class="nc.ui.credit.creditamount.editor.BeforeEditHandler" /></list> </entry> <entry key="ChangedEvent"><list> <bean class="EditHandler"> <property name="context" ref="context" /><property name="listView" ref="list" /><property name="model" ref="batchBillTableModel" /></bean> </list> </entry> </map> </property> </bean><!-- 分隔按钮--><bean id="separatorAction" class="nc.funcnode.ui.action.SeparatorAction" /><!-- 界面布局总装,此例列表界面中有主组织--><bean id="container" class="nc.ui.uif2.TangramContainer"init-method="initUI"><property name="tangramLayoutRoot"><bean class="nc.ui.uif2.tangramlayout.node.VSNode"><property name="down"><bean class="ode"><property name="component" ref="list"></property></bean></property><property name="up"><bean class="ode"><property name="component" ref="orgPanel"></property></bean></property><property name="dividerLocation" value="31"></property></bean></property><property name="actions"><list><ref bean="addAction" /><ref bean="editAction" /><ref bean="delAction" /><ref bean="separatorAction" /><ref bean="queryAction" /><ref bean="refreshAction" /><ref bean="separatorAction" /><ref bean="printActionGroup" /></list></property><property name="editActions"><list><ref bean="addAction" /><ref bean="delAction" /><ref bean="separatorAction" /><ref bean="saveAction" /><ref bean="separatorAction" /><ref bean="cancelAction" /></list></property><!-- 需要把model注入,状态从model中获得--><property name="model" ref="batchBillTableModel" /></bean><!-- Actions --><!-- 新增--><bean id="addAction" class="nc.ui.credit.creditamount.action.AddAction"> <property name="model" ref="batchBillTableModel" /><property name="voClassName"value="nc.vo.credit.creditamount.entity.CreditAmountVO" /></bean><!-- 插入--><bean id="insertAction" class="nc.ui.credit.creditamount.action.InsertAction"> <property name="model" ref="batchBillTableModel" /><property name="voClassName"value="nc.vo.credit.creditamount.entity.CreditAmountVO" /></bean><!-- 编辑--><bean id="editAction" class="nc.ui.credit.creditamount.action.EditAction"> <property name="model" ref="batchBillTableModel" /></bean><!-- 删除--><bean id="delAction" class="nc.ui.credit.creditamount.action.DeleteAction"> <property name="model" ref="batchBillTableModel" /></bean><!-- 查询--><bean id="queryAction"class="nc.ui.credit.creditamount.action.CreditAmountQueryAction"><property name="model" ref="batchBillTableModel" /><property name="dataManager" ref="modelDataManager" /><property name="qryCondDLGInitializer"ref="qryCondDLGInitializer"></property><property name="orgPanel" ref="orgPanel"></property></bean><!-- 查询条件初始化,主要用于参照过滤--><bean name="qryCondDLGInitializer"class="nc.ui.credit.creditamount.view.CreditAmountQryCondDLGInitializer"> </bean><!-- 刷新--><bean id="refreshAction"class="nc.ui.pubapp.uif2app.query2.action.DefaultRefreshAction"> <property name="model" ref="batchBillTableModel" /><property name="dataManager" ref="modelDataManager" /></bean><!-- 保存--><bean id="saveAction"class="nc.ui.pubapp.uif2app.actions.batch.BatchSaveAction"><property name="model" ref="batchBillTableModel" /><property name="editor" ref="list" /></bean><!-- 取消--><bean id="cancelAction"class="nc.ui.pubapp.uif2app.actions.batch.BatchCancelAction"> <property name="model" ref="batchBillTableModel" /><property name="editor" ref="list" /></bean><!-- 打印组--><bean id="printActionGroup" class="nc.funcnode.ui.action.GroupAction"> <property name="code" value="printgroup" /><property name="name" value="打印" /><property name="actions"><list><ref bean="printAction" /><ref bean="previewAction" /><ref bean="outputAction" /></list></property></bean><!-- 预览--><bean id="previewAction"class="nc.ui.pubapp.uif2app.actions.MetaDataBasedPrintAction"> <property name="preview" value="true" /><property name="model" ref="batchBillTableModel" /><property name="beforePrintDataProcess" ref="digitProcessor" /></bean><!-- 打印--><bean id="printAction"class="nc.ui.pubapp.uif2app.actions.MetaDataBasedPrintAction"> <property name="preview" value="false" /><property name="model" ref="batchBillTableModel" /><property name="beforePrintDataProcess" ref="digitProcessor" /></bean><!-- 报表精度处理--><bean id="digitProcessor"class="nc.ui.credit.creditamount.editor.util.DigitProcessor4Print"><property name="model" ref="batchBillTableModel" /></bean><!-- 输出--><bean id="outputAction" class="nc.ui.pubapp.uif2app.actions.OutputAction"> <property name="model" ref="batchBillTableModel" /><property name="parent" ref="list" /></bean>2. 代码2.1. nc.ui.credit.creditamount.action.AddAction extendsBatchAddLineAction新增行按钮,复写protected Object createNewVO()方法,可以设置默认值,复写protected boolean isActionEnable(),可以设置按状态。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单据列表插件示例代码修改记录问题和意见如果你对文档有任何意见、问题或想法,或者你的问题未在此文档中找到答案,请通过电子邮件联系我们jinbo_zhang@目录单据列表插件示例代码 (1)单据列表插件概要说明 (4)公共属性 (4)ListModel (4)语法 (4)常用属性 (5)常用方法 (5)案例–汇率列表,对汇率按精度格式化显示 (6)ListView (8)语法 (8)常用属性 (9)常用方法 (9)案例–销售订单列表对订单进行BOM配置 (9)事件 (11)BatchCopyData (11)案例–暂缺 (11)AfterBatchCopyData (11)案例–暂缺 (12)BeforeButtonClick (12)AfterButtonClick (12)AfterGetData (12)案例–网上银行,银行类型列表,刷新取数 (12)AfterMenuClick (13)BeforeMenuClick (14)CellDbClick (14)CellFormat (14)CreateFilterEditorControl (14)EntryHyperlinkButtonClick (14)FormatCellValue (14)案例–股权关系列表,持股比例精度按参数设置控制 (15)OnFormatRowConditions (16)案例–暂缺 (17)ListCreateColumns (17)案例–暂缺 (17)ListInitialize (17)案例–调整分录模板列表初始化时获取用户参数 (18)ListRowDoubleClick (19)案例–采购价目表列表界面双击 (19)OnGetConvertRule (20)案例–简单生产入库下推简单生产领料订单 (20)OnShowConvertOpForm (22)案例–采购收料单列表界面下推筛选掉资产卡片 (23)OnShowTrackResult (24)案例–生产领料单上查替换物料清单为生产订单 (24)PrepareFilterParameter (27)案例–信用检查规则查找列表数据筛选 (27)PrepareFuncPermissionDataRule (28)单据列表插件概要说明平台插件继承体系图如下如上图所示,列表插件基类AbstractListPlugIn继承自动态表单基类插件AbstractDynamicFormPlugIn,并实现了IlistViewPlugIn和IlistModelPlugIn两个插件接口,分别是视图层和模型层的插件接口。

公共属性ListModel模型层访问接口,Model属性做强制转换语法属性定义:C#public virtual IListModel ListModel{get{if (this.Model != null && this.Model is IListModel) {return (IListModel)this.Model;}else{return null;}}}备注:无常用属性常用方法案例– 汇率列表,对汇率按精度格式化显示代码来源汇率管理列表插件mon.Business.PlugIn.RateList,mon.Business.PlugIn需求背景汇率列表界面的直接汇率和间接汇率列的显示值,需要根据所在汇率类型中定义的精度进行格式化显示实现方案捕获FormatCellValue事件,对直接汇率和间接汇率进行格式化。

先需要加载当前行的汇率数据,以拿到精度信息,然后进行格式化。

示例代码C#using Kingdee.BOS;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.Core.List;using Kingdee.BOS.Core.List.PlugIn;using Kingdee.BOS.Core.List.PlugIn.Args;using Kingdee.BOS.Core.Metadata;using Kingdee.BOS.Core.SqlBuilder;using Kingdee.BOS.Orm.DataEntity;using Kingdee.BOS.ServiceHelper;using Kingdee.BOS.Util;using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Linq;namespace mon.Business.PlugIn{///<summary>///汇率管理列表插件///</summary>public class RateList : AbstractListPlugIn{///<summary>///直接汇率和间接汇率精度集 rateDecimal[主键PKID][0:直接汇率,1:间接汇率]=精度///</summary>private IDictionary<long, int[]> rateDecimal = new Dictionary<long, int[]>();public override void FormatCellValue(FormatCellValueArgs args){base.FormatCellValue(args);string filedName = args.Header.FieldName;//字段名//直接汇率或间接汇率列if (filedName.Equals("FExchangeRate",StringComparison.OrdinalIgnoreCase)|| filedName.Equals("FReverseExRate",StringComparison.OrdinalIgnoreCase)){long pkId = Convert.ToInt64(this.ListModel.GetRow(args.DataRow).PrimaryKeyValue);//暂存汇率字段中,不存在当前分录的记录if (!rateDecimal.ContainsKey(pkId)){//加载直接汇率和间接会精度QueryBuilderParemeter para = new QueryBuilderParemeter(){FormId = "BD_Rate",SelectItems = SelectorItemInfo.CreateItems("FRateID,FRATETYPEID.FDIGITS,FRATETYPEID.FREVERSEDIGITS"), FilterClauseWihtKey = "FRateID=@FRateID"};List<SqlParam> lstSqlPara = new List<SqlParam>();lstSqlPara.Add(new SqlParam("@FRateID", DbType.Int64, pkId));DynamicObjectCollection obj =QueryServiceHelper.GetDynamicObjectCollection(this.Context,para, lstSqlPara);if (obj != null && obj.Count > 0){DynamicObject dy = obj.First();rateDecimal.Add(pkId, new int[2]);rateDecimal[pkId][0] =Convert.ToInt32(dy["FRATETYPEID_FDIGITS"]);rateDecimal[pkId][1] =Convert.ToInt32(dy["FRATETYPEID_FREVERSEDIGITS"]);}}//格式化值if (filedName.Equals("FExchangeRate",StringComparison.OrdinalIgnoreCase)){args.FormateValue = string.Format("{0:F"+ rateDecimal[pkId][0] + "}", args.Value);}else if (filedName.Equals("FReverseExRate",StringComparison.OrdinalIgnoreCase)){args.FormateValue = string.Format("{0:F"+ rateDecimal[pkId][1] + "}", args.Value);}}}}}ListView视图层访问接口,View属性做强制转换语法属性定义:C#public virtual IListView ListView{get{if (null != this.View && this.View is IListView){return (IListView)this.View; }else{return null;}}}备注:无常用属性常用方法案例– 销售订单列表对订单进行BOM配置代码来源销售订单列表插件Kingdee.K3.SCM.Sal.Business.PlugIn.SaleOrderList,Kingdee.K3.SCM.Sal.Business.PlugIn需求背景销售订单列表菜单项【配置】,点击时进行订单的BOM配置,配置只能对一张订单的唯一一行分录进行。

实现方案捕获菜单点击事件,如果是点击的【配置】,则判断是否符合BOM配置的条件,符合,则进行配置,否则,直接退出菜单操作。

示例代码C#using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.Core.List;using Kingdee.BOS.Core.List.PlugIn;using Kingdee.BOS.Util;using System;using ponentModel;using System.Linq;namespace Kingdee.K3.SCM.Sal.Business.PlugIn{///<summary>///销售订单叙事薄列表插件///</summary>public class SaleOrderList : AbstractListPlugIn{public override void BarItemClick(BarItemClickEventArgs e){ListSelectedRowCollection selectRows = this.ListView.SelectedRowsInfo;string objectID = this.ListView.BillBusinessInfo.GetForm().Id;string entiryKey =this.ListView.Model.BillBusinessInfo.GetField("FQty").EntityKey;switch (e.BarItemKey.ToUpperInvariant()){case"TBBOMCONFIG"://分是否显示单据体处理if (selectRows.Count() != 1 ||this.ListView.SelectedRowsInfo[0].EntryEntityKey !="FSaleOrderEntry"||this.ListView.SelectedRowsInfo[0].EntryPrimaryKeyValue.IsNullOrEmptyOrWhiteSpace()){e.Cancel = true;this.View.ShowMessage("请选择唯一一行单据分录进行配置操作!");break;}//私有函数,进行BOM配置,具体逻辑略去BomConfigViewEdit();break;//其他case分支处理逻辑略去}}}}事件BatchCopyData触发时机调用批量复制操作,获取目标数据包时触发应用场景批量复制单据时,调整复制的单据主键或自定义复制的目标数据包。

相关文档
最新文档