搜索
查看: 378|回复: 31

[经验] 用友开发练习

  [复制链接]
 楼主| 发表于 2021-4-14 10:49:31 | 显示全部楼层 |阅读模式
扫码关注微信公众号

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
Dim oDomhead As New MSXML2.DOMDocument
Dim oDombody As New MSXML2.DOMDocument
Dim RowSel As Int16
RowSel = objVoucher.RowSel
Call objVoucher.GetVoucherDataXML(oDomhead, oDombody)
oDomhead.save("D://123.xml")
'oDombody.save("D://1234.xml")
oDombody.load("D://1235.xml")
按钮开发,获取当前单据的表头、表体信息。


 楼主| 发表于 2021-4-16 08:29:04 | 显示全部楼层
本帖最后由 18928099590 于 2021-4-16 17:19 编辑

本次培训采用简单二次开发案例教学,让大家轻松学会二次开发。
如需详细了解可以加Q群:293892902
1.第一章:用友U8二次开发
1.1用友U8按钮开发
1.1.1讲解了如何添加自定义按钮,介绍了在销售订单和销售订单列表添加按钮。
1.1.2讲解如何获取单据界面的数据库链接、登录人员信息、以及表头内容、表体内容,以及如何给单据界面的表头、表体赋值,可以通过一般赋值,或者模拟输入方式赋值。
1.1.3介绍了三个案例。
第一个是引采购订单生产销售订单,快速生单。
第二个是循环表体,根据表体物料编码获取最新单价,更新的含税单价。
第三个是在列表批改备注,会循环列表,识别打勾的行,获取行销售订单号,根据行销售订单号更新对应备注。
1.2用友单据控件事件开发
1.2.1讲解了如何添加单据控件事件开发,介绍了在采购订单表头、表体控件校验后事件,以及表体单击后事件。
1.2.2介绍了三个案例
第一个表头选择供应商事件触发,循环表体根据供应商+存货编码从价格表获取维护单价,赋值给表体的采购单价栏目。
第二个表头选择供应商事件触发,循环表体根据供应商+存货编码从价格表获取维护单价,赋值给表体的采购单价栏目。
第三个单击表体,根据表体物料编码查询最近一次的采购价格信息,弹窗显示。
1.3用友单据事件开发
1.3.1讲解了如何添加单据事件,介绍了在销售订单添加保存前触发的单据事件开发。
1.3.2介绍了一个案例
第一个是单据保存前检查00001客户不予许销售01000001此类产品,如果检查有此类产品,单据不允许保存,并且提醒用户。
1.4用友嵌入式窗口开发
1.4.1讲解了如何在U8添加菜单以及菜单嵌入式窗口。
1.4.2介绍了一个案例
第一个是开发嵌入式页签窗口,自定义窗口功能,本窗口功能是输入订单号和行号修改销售订单表体备注信息。
1.5用友补丁打包
1.5.1 介绍如何把开发好的dll文件打包成msi补丁,并且介绍如何部署msi补丁。
2.第二章:用友UAP单据开发
2.1用友UAP单据开发设计
2.1.1讲解如何新增UAP单据,设计UAP单据的界面,以及发布UAP单据到ERP。案例是临时发货单据,并且发布到ERP。
2.1.2讲解如何进行UAP单据开发,实现个性化功能发。案例是在临时发货单添加了自定义按钮,按钮功能是点击按钮弹输入框,改变表头备注信息。
3.第三章:用友UAP报表开发
3.1用友UAP报表开发
3.1.1利用SQL储存过程和UAP报表工具开发自定义报表。并且指导如何添加查询条件以及部署报表到ERP。
4.第四章:用友接口功能开发
4.1介绍用友API方式生单
4.1.1U8 API是官方三大接口方式中,功能最强大,实用性最高的对接方式。为U8二次开发提供支持,诞生于开发产业链生态形成时期,面向交付伙伴提供U8二次开发支持。有专门的开发指导工具--“U8API资源管理器”。
4.1.2介绍了采购订单导入案例以及如何快速调整导入模板,快速学会测试API。
4.2介绍用友Co方式生单
4.2.1用友内部的接口,不对外开放。主要针对单据的数据操作。由用友的各个业务开发组封装提供,数据格式为xml(dom)。
4.2.2介绍了采购订单、采购到货单、采购入库单、销售订单、销售发货单、销售出库单导入案例,实现和API一样的效果。
4.3介绍用友U8凭证导入
4.3.1使用用友底层接口方式生成U8凭证,接口具有各种校验,保证导入的凭证准确。
4.3.2提供用友集成的凭证导入案例,供研究。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-16 11:03:20 | 显示全部楼层
            string cmdLine = "";
            cmdLine = "ID:{0}&&&Name:{1}&&&SubSysID:{2}&&&AuthID:{3}&&&CMDLINE:{4}\t{5}";

            cmdLine = string.Format(cmdLine, menuID, menuName, subID, authID, cardNumber, pkFieldValue);
            IPortalCommandOperator portalCommandOperator = new PortalCommandOperator();
            IPortalCommandArgs portalCommandArgs = new PortalCommandArgs(menuID, subID);
            portalCommandArgs.AuthId = string.Empty;
            portalCommandArgs.DocId = string.Empty;
            portalCommandArgs.DocType = string.Empty;
            portalCommandArgs.ID = menuID;
            portalCommandArgs.Name = menuName;
            portalCommandArgs.SubFunction = string.Empty;
            portalCommandArgs.Extenision = string.Empty;
            portalCommandArgs.SubSysID = subID;
            portalCommandArgs.CmdLine = cmdLine;
            portalCommandArgs.FromUserClick = false;
            portalCommandArgs.ExtProperties.Add("recheck", "1");
            portalCommandOperator.RunBusiness(portalCommandArgs);
            联查单据语句


回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-16 18:43:04 | 显示全部楼层
private void BtnUser1_Click(object sender, EventArgs e)
        {
            U8RefService.IService refService = new U8RefService.IService();
            refService.RefType = U8RefService.RefTypes.RefArchive;
            refService.RefID = "UA_UserBaseRef";
            Recordset rds1 = null;
            Recordset rds2 = null;
            object obj = MyLoginable.u8login;
            string errStr = "";
            string sMetaXML = "";
            refService.MetaXML = sMetaXML;
            refService.ShowRefSecond(ref obj, ref rds1, ref rds2, ref errStr);
            //
            if (rds2 != null && rds2.EOF == false)
            {
                txtUser1.Text = rds2.Fields["cUser_id"].Value.ToString();//客户编号
                txtUserName1.Text = rds2.Fields["cUser_name"].Value.ToString();
            }
        }

调用系统原生的档案

回复 支持 反对

使用道具 举报

发表于 2021-4-16 18:46:40 | 显示全部楼层
    '初始化功能,在窗体Toolbar初始化时执行一次
    'objLogin代表UFToolbar上取得的Login信息
    'objForm代表该Toolbar所在的窗体信息
    'objVoucher代表Toolbar所在窗体上的单据控件对象或者单据列表对象
    'msbar代表窗体上的MsToolbar对象
    Public Function Init(ByVal objLogin As Object, ByVal objForm As Object, ByVal objVoucher As Object, ByVal msbar As Object) As      Boolean
    End Function
    '执行按钮前执行该方法,objVoucher为单据或列表对象
    'VarentValue为在表中预置的cVariant的值。
    'objLogin代表UFToolbar上取得的Login信息
    'objForm代表该Toolbar所在的窗体信息
    'objVoucher代表Toolbar所在窗体上的单据控件对象或者单据列表对象
    'sKey代表该按钮的ButtonKey
    'VarentValue代表数据库预置的Varent值
    Public Function BeforeRunSysCommand(ByVal objLogin As Object, ByVal objForm As Object, ByVal objVoucher As Object, _
                            ByVal sKey As String, ByVal VarentValue As Object, ByRef Cancel As Boolean, ByVal other As String) As Boolean
    End Function
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-14 10:51:19 | 显示全部楼层
一般输入
objVoucher.headerText("OrderDId")
模拟输入
Call objVoucher.SimulateInput(SectionsConstants.sibody, RowSel, "DOpSeq", OpSeq.ToString(), True)
区别就是模拟输入可以实现联动,就是输入一个位置,其他信息会跟着联动带出来。例如输入物料编码,自动带出物料名称、规格型号。
   
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-15 08:31:12 | 显示全部楼层
Call objVoucher.oToolBar.SimulateOnCommand(0, "tlbSave")  调用刷新按钮
回复 支持 反对

使用道具 举报

发表于 2021-4-16 08:27:53 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-16 09:33:18 | 显示全部楼层
SkinSE_Net skin = new SkinSE_Net();
skin.Init_NET(this, 1);
使得软件的皮肤和系统的一样


回复 支持 反对

使用道具 举报

发表于 2021-4-16 19:41:16 | 显示全部楼层
完全看不懂啊

点评

你想学习开发嘛 可以找我  详情 回复 发表于 2021-4-16 19:52
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-16 19:52:16 | 显示全部楼层

你想学习开发嘛 可以找我

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-18 10:20:47 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-18 12:30:22 | 显示全部楼层
For i = 1 To objVoucher.Rows
       cInvCode = objVoucher.bodyText(i, "cInvCode").ToString()
Next
循环表体


回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-18 17:06:31 | 显示全部楼层
NewLateBinding.LateCall(objForm, null, "ButtonClick", new object[] { "refresh", "refresh" }, null, null, null, true);  c#调用刷新按钮 记得要识别本身刷新按钮的keyid 并且记得单据的状态 刷新按钮在非编辑状态可用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-19 10:08:54 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

欢迎关注微信公众号

QQ|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号 )川公网安备 51072502110008号

GMT+8, 2021-5-11 09:02 , Processed in 0.334272 second(s), 13 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2005-2020.

快速回复 返回顶部 返回列表