首页 > 其他分享 >生产订单执行明细表二开增加字段

生产订单执行明细表二开增加字段

时间:2024-07-09 16:58:27浏览次数:9  
标签:插件 string 二开 tableName 明细表 filter 订单 Krystal using

  1. 业务背景
  2. 业务需求
  3. 方案设计
  4. 详细设计和实现

 

 一、业务背景

标准产品目前的逻辑是入库数量/计划数量=达成率,需要加入计划完成时间和数据/实际完成时间和数量=达成率。

 

二、业务需求
过滤匡提供输入时间段,作为入库单的时间限制,算出入库数,实际达成率=入库数/计划数*100%。

 

 三、方案设计

二开标准产品,添加字段,创建插件继承标准产品插件,重写方法,修改临时表添加字段,更新字段取值,替换标准产品插件。

 

四、详细设计和实现

标准报表引入到应用

查询《生产订单执行明细表》引入到应用,同样引入《生产订单执行明细表过滤》

 

扩展报表,添加自定义字段相关

 

 

 

 生产订单执行明细报表新增字段,字段的标识名命名一致。

 

 

 保存后:

 生产订单执行明细报表过滤框的快捷界面添加查询条件-入库的起止日期,日期控件,默认今天。

 生产订单执行明细报表过滤框的显示隐藏列添加过滤字段,字段的标识名和报表一致。

 创建插件,挂载插件

新建类库 Krystal.K3.SCGL.App.Report,添加引用

 

创建类,继承报表原插件

 

重写BuilderReportSqlAndTempTable方法,对临时表添加自定义字段,对添加的字段进行逻辑计算后赋值

 

 

 

 

#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 版权所有 (c) 2024  NJRN 保留所有权利。
 * CLR版本:4.0.30319.42000
 * 机器名称:INC1507245
 * 公司名称:Increase
 * 命名空间:Krystal.K3.SCGL.App.Report.PRD
 * 唯一标识:5d1dc27c-1776-4835-9f85-739566192920
 * 文件名:Krystal_MOExecuteDetailRpt
 * 当前用户域:INC1507245
 * 
 * 创建者:Krystal
 * 电子邮箱:[email protected]
 * 创建时间:2024/7/8 14:48:36
 * 版本:V1.0.0
 * 描述:
 *
 * ----------------------------------------------------------------
 * 修改人:
 * 时间:
 * 修改说明:
 *
 * 版本:V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Kingdee.K3.MFG.PRD.App.ReportPlugIn.MOExecute;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Krystal.K3.SCGL.App.Report.PRD
{
    /// <summary>
    /// 功能描述    :Krystal_MOExecuteDetailRpt  
    /// 创 建 者    :Administrator
    /// 创建日期    :2024/7/8 14:48:36 
    /// 最后修改者  :Krystal
    /// 最后修改日期:2024/7/8 14:48:36 
    /// </summary>
    [Description("生产订单执行明细表服务端插件二开-报表插件"), HotUpdate]
    public class Krystal_MOExecuteDetailRpt: MOExecuteDetailRpt
    {
        #region <常量>
        #endregion <常量>

        #region <变量>
        /// <summary>
        /// 页面过滤参数
        /// </summary>
        FilterArgs _filterArgs = new FilterArgs();
        #endregion <变量>

        #region <属性>
        #endregion <属性>

        #region <构造方法和析构方法>
        #endregion <构造方法和析构方法>

        #region <方法>
        public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
        {
            //调用基类的方法,获取初步的查询结果到临时表tableName【基类默认的存放查询结果的临时表】
            base.BuilderReportSqlAndTempTable(filter, tableName);

            //构造过滤条件
            DynamicObject dyFilter = this.GetFilter(filter);

            this.AddSecondField(tableName);
        }

        //, IRptParams filter
        /// <summary>
        /// 添加字段入库数,实际达成率
        /// </summary>
        /// <param name="tableName"></param>
        private void AddSecondField(string tableName)
        {
            //1、对临时表tableName添加字段入库数,实际达成率
            //添加的字段长度,类型,是否为空,尽量和原字段保持一致
            //,添加的字段中间加上二开标识,防止和标准产品字段冲突
            StringBuilder sqlStr = new StringBuilder();
            sqlStr.AppendFormat(@"alter table {0} add F_XHWT_InStockQty decimal(23, 10) NOT NULL default 0;
                                  alter table {0} add F_XHWT_FinishPercent decimal(19, 2) NOT NULL default 0;", tableName);
            int uc = DBUtils.Execute(this.Context, sqlStr.ToString());
            // 高级过滤条件已自动存放在FilterParameter.FilterString中,账表插件可以直接拿来使用

            //var commonFilter = filter.FilterParameter.FilterString;
            //测试临时表
            //string sql1 = string.Format(@"select top 10000 * from {0}", tableName);
            //var sd = DBUtils.ExecuteDynamicObject(this.Context, sql1);
            //2、更新该字段
            sqlStr.Clear();
            sqlStr.AppendFormat(@" MERGE INTO {0} T0", tableName);
            sqlStr.AppendFormat(@" using (SELECT  b.FMOENTRYID ,SUM(b.FREALQTY) FInstockQty
     FROM T_PRD_INSTOCK a JOIN T_PRD_INSTOCKENTRY b ON a.FID=b.FID
     WHERE a.FDOCUMENTSTATUS='C' AND a.FAPPROVEDATE BETWEEN '{0}' AND '{1}'
      GROUP BY b.FMOENTRYID ) T ", _filterArgs.ISBeginTime, _filterArgs.ISEndTime);
            sqlStr.AppendFormat(@" ON T0.FMOENTRYID=T.FMOENTRYID ");//round(20 * 1.0 / 120, 4) * 100
            sqlStr.AppendFormat(@" WHEN matched THEN UPDATE SET F_XHWT_InStockQty=T.FInstockQty
,F_XHWT_FinishPercent=(case when T0.FPLANQTY>0 then round(T.FInstockQty*1.0/T0.FPLANQTY,4)*100 else 0 end) ");
            int uc1 = DBUtils.Execute(this.Context, sqlStr.ToString());
        }


        /// <summary>
        /// 获取过滤条件
        /// </summary>
        /// <param name="filter"></param>
        private DynamicObject GetFilter(IRptParams filter)
        {
            DynamicObject dyFilter = filter.FilterParameter.CustomFilter;
            _filterArgs.ISBeginTime = this.GetDataByKey(dyFilter, "F_Krystal_InStockBeginTime") == string.Empty 
                ? DateTime.MinValue : Convert.ToDateTime(this.GetDataByKey(dyFilter, "F_Krystal_InStockBeginTime"));
            _filterArgs.ISEndTime = this.GetDataByKey(dyFilter, "F_Krystal_InStockEndTime") == string.Empty 
                ? DateTime.MaxValue : Convert.ToDateTime(this.GetDataByKey(dyFilter, "F_Krystal_InStockEndTime"));
            return dyFilter;
        }

        /// <summary>
        /// 查询条件标题
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        public override ReportTitles GetReportTitles(IRptParams filter)
        {
            ReportTitles reportTitle = base.GetReportTitles(filter);
            string beginApplicationMonthStr = _filterArgs.ISBeginTime.ToString("yyyy-MM-dd");
            string endApplicationMonthStr = _filterArgs.ISEndTime.ToString("yyyy-MM-dd");
            reportTitle.AddTitle("F_Krystal_InStockTitle", string.Format("{0}{1}{2}"
                , beginApplicationMonthStr
                , Kingdee.BOS.Resource.ResManager.LoadKDString(" 至 ", "004102030003172"
                , Kingdee.BOS.Resource.SubSystemType.SCM)
                , endApplicationMonthStr));
            return reportTitle;
        }


        #endregion <方法>

        #region 过滤参数 FilterArgs
        internal class FilterArgs
        {
            public DateTime ISBeginTime { get; set; }//起始年月
            public DateTime ISEndTime { get; set; }//结束年月
        }
        #endregion
    }
}
完整代码

 

 

如果入库数,需要汇总。

/// <summary>
/// 构造汇总字段信息集合
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public override List<SummaryField> GetSummaryColumnInfo(IRptParams filter)
{
    var lstGroupField = base.GetSummaryColumnInfo(filter);
    lstGroupField.Add(new Kingdee.BOS.Core.Report.SummaryField("F_Krystal_InStockQty", BOSEnums.Enu_SummaryType.SUM));
    return lstGroupField;
}

 测试

 

标签:插件,string,二开,tableName,明细表,filter,订单,Krystal,using
From: https://www.cnblogs.com/lanrenka/p/18289264

相关文章

  • 快团团开团大团长和帮卖团长如何合并“收件人信息相同的订单”核销打印?
    快团团开团大团长和帮卖团长如何合并“收件人信息相同的订单”核销打印?一、背景经营方式为线下自提等无需快递的团长,在核销打印订单时,需要将“收件人信息相同的订单”合并核销打印二、操作说明第一步,团长电脑端登陆快团团,在【商品核销】中勾选需要核销打印的订单,点击【核销......
  • 创新赋能,高效二开!CRMEB 标准版 v5.4公测版发布
    历经十年磨砺,CRMEB标准版如今已成为众多技术开发者与企业二次开发、构建定制化项目的热门系统,其全开源无加密、功能齐全、独立部署的特质,造就了标准版系统方便二开的优势,不仅深受开发者喜爱,更因其实用性和可靠性赢得了众多长期回购用户的青睐。如今,我们紧跟市场趋势,持续创......
  • 黑马点评下订单-小程序下单没问题但是Postman发送请求失败了,返回401
    经过多方探索,这个✓8错误就是由于黑马点评使用了拦截器,我们直接发送请求是会被拦截器拦截下来的,我给出的解决方案是通过配置Postman解决,方法很简单!解决方案右边的value写上Redis里面登录所用token值就可以了!!!......
  • 5.FineReport制作明细表
    1.首先连接自带的sqlite数据库,具体方法点击下面的链接FineReport连接自带的sqlite数据库2.文件–新建普通报表3.新建数据库查询4.查询自带的销量表5.按shift键选中左下角的地区到销量字段,拖动到右边的格子中,选从左往右6.添加标题,并调整对齐,边框线,背景色和字体颜色......
  • 交友系统定制版源码| 相亲交友小程序源码全开源可二开_打造独特的社交交友系统
    交友系统源码的实现涉及到多个方面,包括前端页面设计、后端逻辑处理、数据库设计以及用户交互等。以下是一个简单的交友系统源码实现的基本框架和关键步骤: 1.数据库设计:用户表:存储用户基本信息,如用户ID、用户名、密码、头像、性别、年龄、地理位置等。消息表:存储用户之......
  • 网上商品订单转手系统boot论文
    摘 要传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装网上商品订单转手系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,网上商品订......
  • 基于SSM+Vue的酒店管理系统设计与实现(SSM技术栈的酒店管理系统,非常适合二开各种酒店
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我自己的网站自己的小程序(小蔡coding)代码参考数据库参考源码获取前言......
  • 亚马逊卖家的福音:订单发货贴单系统如何革新业务流程
    在亚马逊这个全球领先的电商平台上,订单发货贴单系统对于卖家来说,就如同航海者的罗盘,指引着他们高效、精准地完成每一个订单的旅程。面对亚马逊庞大的用户群和海量订单,一个高效的订单处理系统不仅是卖家的需求,更是他们成功航行的关键。亚马逊订单发货贴单系统,便是这样一套自动......
  • 后端开发Spring框架之消息 消息队列案例--订单短信通知
    消息队列案例首先我们书写一个业务层接口定义的是发送消息短信消息处理packagecom.bigdata1421.message.service;publicinterfaceOrderService{voidorder(Stringid);}创建业务层的实现类并且我们要重写方法这里就是打印日志将消息打印在控制台再写......
  • 开发查询订单信息fastGPT智能体工作流 将工作流接入到人工客服系统
    我在抖音上发布了视频https://www.douyin.com/video/7382446337482099977下面是主要内容介绍【视频标题:】开发查询订单信息fastGPT智能体工作流将工作流接入到人工客服系统#智能体#FastGPT#客服系统-----------【视频行业分类:】<3C数码>-----------【视频文案】:我们使用fa......