从标准来说,生成U8的生产订单,应该通过调用API的方式生成.但是,API的调试的难度,以及莫名其妙的错误,对程序员来说,就是一种抓狂的感觉.有时候辛苦拼凑了一堆的参数,系统返回的是不知所闻的的错误信息,什么null值啊,什么不能为空.可恨的是,还无法调试.     

    本文提供一种最直接,最暴力的解决方式,直接写数据库的方式,生成用友U8的生产订单.对没接触过U8的业务逻辑的程序猿来说,不建议这个方式,但这个是了解U8生产订单各个表之间的逻辑关系,是个不错的借鉴.

    一般来说.生成用友单据需要几个门槛:

   1.单据Id.(表头,表体的主键) 通过sp_getID存储过程获得

   2.单据号的生成.通过读取:VoucherNumber:单据号生成规则,VoucherHistory:单据流水号

   3.各个业务表的关键字段的插入

   第1,2步相对固定,第3步就需要跟踪数据库,通过跟踪单据的写入过程,获得单据业的业务表插入的字段来获得.

 本文以一个生产订单的生成,阐述U8单据的生成过程

1.表头表体ID的获得

        public static void GetIdentity(string accId,int rowCount ,string funcType,ref int parentId ,ref int  childId)
        {
            string ufConn = Config.UFConn;

            string sql = @"declare @p5 int
                        set @p5=1000000003
                        declare @p6 int
                        set @p6=1000000005
                        exec sp_getID '','{0}','{2}',{1},@p5 output,@p6 output
                        select @p5 as ParentID, @p6 as ChildId";
            sql = string.Format(sql, accId, rowCount,funcType );

            DataTable dt = SqlHelper.ExecuteDataset(ufConn, CommandType.Text, sql).Tables[0];
            parentId = int.Parse(dt.Rows[0]["ParentID"].ToString());
            childId = int.Parse(dt.Rows[0]["ChildId"].ToString());
        }

通过存储过程Sp_getId 获得生产订单表头,表体的Id,

其中参数:AccId:账套号,rowCount:子表的记录数,funcType:单据类型,需要跟踪标准单据的写入过程获得,例如生产订单的类型:mom_order,子表:mom_orderdetail

返回的ParentId就是主表的Id,ChildId就是子表的Id

2.单据号生成

通过读取VoucherNumber表获得单据生成规则(代码参考我其他文章)

3.生产订单生成

生产订单涉及几张表:

mom_order:生产主表

mom_orderdetail:生产订单子表

mom_moallocate:生产订单子件用料表

mom_morder:生产订单开完工日期

表之间之间关联关系:mom_orderdetail:MOID(主表的Id),mom_moallocate:MoDID(和mom_orderdetail的明细MoDId关联)

mom_moallocate:生产订单子件,复制标准BOM

详细的代码入口:U8MoController

http://localhost:57453/MOTrans/CreateMO

参考JSON:

[
    {
        "类型": "标准",
        "订单类别": "量产",
        "存货编码": "00002312",
        "PartId": "22793",
        "数量": "1",
        "生产任务单号": "Test1111",
        "来源订单类别": "销售订单",
        "来源订单号": "202207C00101",
        "来源订单行号": "1",
        "开工日期": "2022-7-1",
        "完工日期": "2022-7-10",
        "生产部门编码": "80",
        "Size": "1",
        "BOM选择":"主BOM",
        "BOM版本号": "10",
        "备注": "1",
        "工艺路线选择": "主工艺路线"
    }
]

源代码

通过写数据库的方式生成用友U8生产订单-C#文档类资源-CSDN文库icon-default.png?t=M85Bhttps://download.csdn.net/download/daniel_qsy/87061567

更多推荐