用友U8生产订单生成-通过写数据库方式

      从标准来说,生成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#文档类资源-优快云文库icon-default.png?t=M85Bhttps://download.youkuaiyun.com/download/daniel_qsy/87061567

### U8 数据库中自动生成生产订单的方法与解决方案 在用友U8系统中实现生产订单的自动化生成涉及多个模块之间的协同工作,包括物料需求计划(MRP)、库存管理和生产管理。为了确保生产订单能够依据预设条件自动创建,通常需要配置MRP运算参数,并设置相应的业务流程。 #### MRP 运算配置 通过合理配置MRP运算规则,可以根据销售预测或现有客户订单自动计算所需生产的数量和时间安排。当MRP运行完成后,对于净需求大于零的产品项,系统将建议生成新的生产任务单[^1]。 ```sql UPDATE mrp_order SET status='待审核' WHERE net_need > 0 AND order_type = '生产'; INSERT INTO production_order (product_id, quantity, planned_start_date, ...) SELECT product_id, net_need AS quantity, DATE_ADD(CURDATE(), INTERVAL lead_time DAY), ... FROM mrp_order WHERE net_need > 0 AND order_type = '生产'; ``` 此SQL片段展示了如何基于MRP的结果更新状态并插入新记录到`production_order`表中以启动生产过程。具体字段需根据实际情况调整。 #### 自动化脚本集成 除了依赖于标准功能外,还可以编定制化的后台作业程序定期扫描符合条件的数据条目,并调用API接口完成生产订单的建立。这可能涉及到定时任务调度工具的应用,如Linux下的cron服务或是Windows的任务计划器。 ```bash # Linux Crontab Example */5 * * * * /usr/bin/python3 /path/to/auto_generate_production_orders.py >> /var/log/u8_auto_gen_prod.log 2>&1 ``` 上述命令表示每五分钟执行一次Python脚本来检查是否有满足特定逻辑的新产品需求,并据此发起生产指令。 #### 用户界面交互优化 为了让最终用户更方便地监控整个流程,在前端界面上提供直观的状态反馈也非常重要。可以通过增加额外的通知机制(比如消息推送)、简化审批路径等方式提高工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

daniel_qsy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值