用友U8在单据的标准按钮中增加自己逻辑

在U8的实际使用过程中,经常会遇到在用友u8的单据的标准按钮中,增加一段自己的逻辑.比如:采购订单在保存的时候,要先校验单据中的存货是否符合一个特定自定义逻辑,例如:检验存货名称是否符合特定要求.这些在用友的标准控制中是不具备的.

如何达到这个功能呢?以下就是方法

1.通过Ctr+Shift+点击用友单据上的任意一个按钮(例如新增),打开写字板(不是记事本),点粘贴,即可看到单据的Key.

2.找到需要加入的按钮的Key值.例如:采购订单的内容

单据Key=88
按钮标题:向下联查,按钮Tooltip:向下联查,按钮Key:mnuRefVouchBackWard;
按钮标题:向上联查,按钮Tooltip:向上联查,按钮Key:mnuRefVouchForWard;
按钮标题:联查日志,按钮Tooltip:联查日志,按钮Key:mnuvariation;
按钮标题:确定,按钮Tooltip:确定,按钮Key:OK;
按钮标题:现付,按钮Tooltip:现付,按钮Key:Payment;
按钮标题:匹配,按钮Tooltip:匹配,按钮Key:Match;
按钮标题:定位,按钮Tooltip:定位,按钮Key:Locate;
按钮标题:帮助,按钮Tooltip:帮助,按钮Key:Help;
按钮标题:取价,按钮Tooltip:取价,按钮Key:Getcost;
按钮标题:合同结算,按钮Tooltip:合同结算,按钮Key:contractsettle;
按钮标题:合同执行,按钮Tooltip:合同执行,按钮Key:contractexec;
按钮标题:转入,按钮Tooltip:转入,按钮Key:ChangeTo;
按钮标题:弃付,按钮Tooltip:弃付,按钮Key:CancelPayment;
按钮标题:栏目,按钮Tooltip:栏目,按钮Key:ColumnSet;
按钮标题:生成,按钮Tooltip:生成,按钮Key:BatchBV;
按钮标题:调价,按钮Tooltip:调价,按钮Key:Adjust;
按钮标题:预览,按钮Tooltip:预览,按钮Key:Preview;
按钮标题:齐套,按钮Tooltip:齐套,按钮Key:QT;
按钮标题:参照,按钮Tooltip:参照,按钮Key:Query;
按钮标题:模板,按钮Tooltip:模板,按钮Key:Template;
按钮标题:全消,按钮Tooltip:全消,按钮Key:UnSelectAll;
按钮标题:滤设,按钮Tooltip:滤设,按钮Key:FilterSet;
按钮标题:释放,按钮Tooltip:释放,按钮Key:Release;
按钮标题:报检,按钮Tooltip:报检,按钮Key:ReportCheck;
按钮标题:全选,按钮Tooltip:全选,按钮Key:SelectAll;
按钮标题:设置,按钮Tooltip:设置,按钮Key:Setting;
按钮标题:结算,按钮Tooltip:结算,按钮Key:Settle;
按钮标题:查询,按钮Tooltip:查询,按钮Key:Filter;
按钮标题:退出,按钮Tooltip:退出,按钮Key:Exit;
按钮标题:生单,按钮Tooltip:生单,按钮Key:CreateVouch;
按钮标题:生单,按钮Tooltip:生单,按钮Key:CopyCreating;
按钮标题:打印,按钮Tooltip:打印(Ctrl+P),按钮Key:Print;
按钮标题:输出,按钮Tooltip:输出(ALT+E),按钮Key:Output;
按钮标题:邮件,按钮Tooltip:邮件,按钮Key:Mail;
按钮标题:增加,按钮Tooltip:增加(F5),按钮Key:Add;
按钮标题:复制,按钮Tooltip:复制(Ctrl+F5),按钮Key:Copy;
按钮标题:草稿,按钮Tooltip:草稿,按钮Key:Draft;
按钮标题:修改,按钮Tooltip:修改(F8),按钮Key:Modify;
按钮标题:删除,按钮Tooltip:删除(Del),按钮Key:Delete;
按钮标题:附件,按钮Tooltip:附件,按钮Key:Accessories;
按钮标题:放弃,按钮Tooltip:放弃(Ctrl+Z),按钮Key:Discard;
按钮标题:保存,按钮Tooltip:保存(F6),按钮Key:Save;
按钮标题:提交,按钮Tooltip:提交(Ctrl+J),按钮Key:Submit;
按钮标题:重新提交,按钮Tooltip:重新提交(Ctrl+J),按钮Key:ReSubmit;
按钮标题:撤销,按钮Tooltip:撤销(ALT+J),按钮Key:Return;
按钮标题:审核,按钮Tooltip:审核(Ctrl+U),按钮Key:Confirm;
按钮标题:查审,按钮Tooltip:查审(Ctrl+K),按钮Key:QueryConfirm;
按钮标题:弃审,按钮Tooltip:弃审(ALT+U),按钮Key:Cancelconfirm;
按钮标题:锁定,按钮Tooltip:锁定(Ctrl+L),按钮Key:Lock;
按钮标题:解锁,按钮Tooltip:解锁(ALT+L),按钮Key:removelock;
按钮标题:到货,按钮Tooltip:到货,按钮Key:pushgentonext;
按钮标题:请款,按钮Tooltip:请款,按钮Key:PayApply;
按钮标题:变更,按钮Tooltip:变更,按钮Key:AlterPO;
按钮标题:关闭,按钮Tooltip:关闭(Alt+C),按钮Key:Close;
按钮标题:打开,按钮Tooltip:打开(Alt+O),按钮Key:Open;
按钮标题:批注,按钮Tooltip:批注,按钮Key:Comment;
按钮标题:讨论,按钮Tooltip:讨论,按钮Key:Discuss;
按钮标题:通知,按钮Tooltip:通知,按钮Key:Notify;
按钮标题:上查,按钮Tooltip:上查,按钮Key:QueryUp;
按钮标题:下查,按钮Tooltip:下查,按钮Key:QueryDown;
按钮标题:整单关联,按钮Tooltip:整单关联,按钮Key:RefAllVoucher;
按钮标题:查询条码,按钮Tooltip:查询条码,按钮Key:SelectAllInvBarCode;
按钮标题:查看日志,按钮Tooltip:查看日志,按钮Key:ViewLog;
按钮标题:格式设置,按钮Tooltip:格式设置,按钮Key:VoucherDesign;
按钮标题:保存格式,按钮Tooltip:保存格式,按钮Key:SaveTemplate;
按钮标题:显示模板,按钮Tooltip:显示模板,按钮Key:ShowTemplate;
按钮标题:打印模板,按钮Tooltip:打印模板,按钮Key:PrintTemplate;
按钮标题:汇总,按钮Tooltip:汇总,按钮Key:Aggregate;
按钮标题:刷新,按钮Tooltip:刷新(Ctrl+R),按钮Key:Refresh;
按钮标题:首张,按钮Tooltip:首张,按钮Key:First;
按钮标题:上张,按钮Tooltip:上张,按钮Key:Previous;
按钮标题:下张,按钮Tooltip:下张,按钮Key:Next;
按钮标题:末张,按钮Tooltip:末张,按钮Key:Last;
按钮标题:高级,按钮Tooltip:高级,按钮Key:advanced;
按钮标题:增行,按钮Tooltip:增行,按钮Key:AddRecord;
按钮标题:生成批号,按钮Tooltip:生成批号,按钮Key:Getbatnum;
按钮标题:批改,按钮Tooltip:批改,按钮Key:MulModify;
按钮标题:查看现存量,按钮Tooltip:查看现存量,按钮Key:mnuViewCurStock;
按钮标题:现存量查询,按钮Tooltip:现存量查询,按钮Key:mnuViewStock;
按钮标题:单据联查,按钮Tooltip:单据联查,按钮Key:mnuVouchRef;
按钮标题:窗口列表,按钮Tooltip:窗口列表,按钮Key:mnuWindowList;
按钮标题:取价,按钮Tooltip:取价,按钮Key:mnuGetCost;
按钮标题:定位记录,按钮Tooltip:定位记录,按钮Key:mnuLocateRow;
按钮标题:合并显示,按钮Tooltip:合并显示,按钮Key:mnuAggrShow;
按钮标题:插行,按钮Tooltip:插行,按钮Key:InsertRow;
按钮标题:复制行,按钮Tooltip:行复制,按钮Key:mnuCopyItem;
按钮标题:拆分行,按钮Tooltip:行拆分,按钮Key:mnuSpiltItem;
按钮标题:删行,按钮Tooltip:删行,按钮Key:DeleteRecord;
按钮标题:关闭,按钮Tooltip:关闭,按钮Key:mnuCloseItem;
按钮标题:打开,按钮Tooltip:打开,按钮Key:mnuOpenItem;
按钮标题:批改,按钮Tooltip:批改,按钮Key:mnuBatchModify;
按钮标题:-,按钮Tooltip:-,按钮Key:bSeparator1;
按钮标题:存量,按钮Tooltip:存量,按钮Key:CurStock;
按钮标题:价格,按钮Tooltip:价格,按钮Key:Price;
按钮标题:PTO选配,按钮Tooltip:PTO选配,按钮Key:PTOmatch;
按钮标题:条码,按钮Tooltip:条码,按钮Key:CreateInvBarCode;
按钮标题:需求源,按钮Tooltip:需求源,按钮Key:DemandSrc;
按钮标题:关联单据,按钮Tooltip:关联单据,按钮Key:RefVoucher;
按钮标题:-,按钮Tooltip:-,按钮Key:bSeparator2;
按钮标题:排序定位,按钮Tooltip:排序定位,按钮Key:Sort;
按钮标题:显示格式,按钮Tooltip:显示格式,按钮Key:Showformat;

3.在Meta库中的Meta数据库,表AA_CustomerButton加入如下记录

delete dbo.AA_CustomerButton
where  cButtonID ='D752F529-9E4A-44E0-85FD-8ED0CB48029A'
insert into [AA_CustomerButton]
(
    [cButtonID],
    [cButtonKey],
    [cButtonType],
    [cProjectNO],
    [cFormKey],
    [cVoucherKey],
    [cKeyBefore],
    [iOrder],
    [cGroup],
    [cCustomerObjectName],
    [cCaption],
    [cLocaleID],
    [cImage],
    [cToolTip],
    [cHotKey],
    [bInneralCommand],
    [cVariant],
    [cVisibleAsKey],
    [cEnableAsKey]
)
values
('D752F529-9E4A-44E0-85FD-8ED0CB48029A', 'btnCusSASave', 'system', 'U8CustDef', '88', '88', 'save', '0', 'IEDIT', 'U8PlugIn.U8POSaveButton',
 '保存', 'zh-cn', '',
 '保存', 'Ctrl+N', 1, '保存', 'save', 'save');
go

说明:

cFormKey:单据的Key,采购订单88

cButtonID:可以自行生成(GUID也行),

btnCusSASave:按钮的Key,自定义,不重复即可

cButtonType:System,固定,不能修改,表示干预的是系统的按钮

cFormKey:单据的Key,具体参考粘贴到写字板的单据Key ,

cKeyBeform:要替换的系统的按钮的Key,采购订单保存是:save

cCustomerObjectName:VB开发的类名称,

4.打开VB6(很老了.找到都不容易)创建一个DLL

注意DLL名称和类名称就是上一步中cCustomerObjectName指定名称

5.在类中加入以下代码(固定方法以及参数)

Option Explicit

Public Function RunCommand(ByVal objLogin As Object, ByVal objForm As Object, ByVal objVoucher As Object, _
                            ByVal sKey As String, ByVal VarentValue As Variant, ByVal other As String)
    
       
End Function

'初始化
Public Function Init(ByVal objLogin As Object, ByVal objForm As Object, ByVal objVoucher As Object, msbar As Object)

End Function

'在执行系统按钮只前调用,Cancel后会不再执行系统方法。
Public Function BeforeRunSysCommand(ByVal objLogin As Object, ByVal objForm As Object, ByVal objVoucher As Object, _
                            ByVal sKey As String, ByVal VarentValue As Variant, ByRef Cancel As Boolean, ByVal other As String)
                            
                             '程序开始执行
    
    On Error GoTo DoERR
    
    Dim tarObj As New Entrance
    
    '通过HeaderText访问表头中的字段值
    'curVoucher.HeaderText ("cDefine2")
    Dim cCode As String
    Dim ID As String
    Dim sql As String
    Dim cInvCode As String
    Dim curUser As String
    Dim cAccId As String
    
    Dim dataNode As MSXML2.IXMLDOMNode
    Dim headDom As MSXML2.DOMDocument
    Dim bodyDom As MSXML2.DOMDocument
    Dim subNode As MSXML2.IXMLDOMNode
    Dim atts As MSXML2.IXMLDOMNamedNodeMap

    Dim I As Integer
    Dim moCode As String
    Dim moSeq As String
    Dim flagStr As String
    
    
    cCode = objVoucher.headerText("cPOID")
    
    Dim outMsg As String
    
  
    Call tarObj.CheckPOData(outMsg, objLogin.UFDBName, cCode, sKey)
    If outMsg <> "" Then
        MsgBox "不能保存:" & outMsg
        Cancel = True
        
    End If
    


    Exit Function
    
DoERR:
    
    MsgBox Err.Description
    
    'Cancel = True
End Function

方法说明:

执行按钮,objVoucher为单据或列表对象

‘VarentValue为在表中预置的cVariant的值。

Public Function RunCommand(ByVal objLogin As Object, ByVal objForm As Object, ByVal objVoucher As Object, _

                            ByVal sKey As String, ByVal VarentValue As Variant, ByVal other As String)

  

End Function

‘初始化

Public Function Init(ByVal objLogin As Object, ByVal objForm As Object, ByVal objVoucher As Object, msbar As Object)

End Function

‘在执行系统按钮只前调用,Cancel后会不再执行系统方法。

Public Function BeforeRunSysCommand(ByVal objLogin As Object, ByVal objForm As Object, ByVal objVoucher As Object, _

                            ByVal sKey As String, ByVal VarentValue As Variant, ByRef Cancel As Boolean, ByVal other As String)

    Cancel = False

End Function

以上范例中,在BeforeRunSysCommand加入了一段自己的校验:

先通过:cCode = objVoucher.headerText("cPOID")读取到采购订单号,

调用方法:Call tarObj.CheckPOData(outMsg, objLogin.UFDBName, cCode, sKey)

检验一些内容后,确定当前采购订单是否允许保存.

开发技巧:

鉴于VB6的开发技术是很早以前,掌握的同学已经很少了tarObj.CheckPOData其实一个c#开发的DLL中的方法,可以把VB中读取到参数,传到C#中处理.另外objLogin对象中有当前u8的数据库连接信息,用户名,密码等等信息,具体可以参考用友的官方文档.

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daniel_qsy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值