Browse Source

添加人员上线功能

callm 4 weeks ago
parent
commit
5cf6813fb2

+ 19 - 0
UAS_MES_YDCY/.workbuddy/memory/2026-09-18.md

@@ -0,0 +1,19 @@
+# 2026-09-18
+
+## 新增界面 Query_LoadMan(人员上下线,FunctionCode/Query)
+
+- 需求:线别放大镜 DbFind + 人员编号输入框(回车执行)+ 上线/下线两个 RadioButton + DGV 显示当前线别的在线人员,数据变更即刷新,只取未下线记录。
+- 表 `loadman`(用户截图提供结构):`LM_ID`(NUMBER 主键) / `LM_LINECODE`(线别) / `LM_EMCODE`(人员编号) / `LM_UPTIME`(上线时间) / `LM_DOWNTIME`(下线时间) / `LM_INMAN`(录入人)。
+- 主键生成:`loadman_seq.nextval`(用户确认,库里已建该序列)。
+- 模板来源:`Query_LoadMake`(工单上下线,同为 lm_ 前缀表,DbFind 配置 / insert / update lm_downtime=sysdate / FillDgvWithDataTable 写法全部照搬)。
+- 产出:`Query_LoadMan.cs` / `.Designer.cs` / `.resx`(空模板 Make_SplitBoard.resx 拷贝),csproj 已三处注册。
+- 控件选型:
+  - 线别放大镜:`CustomControl.TextBoxWithIcon.SearchTextBox`(`TableName="line"`、`Condition="li_statuscode='AUDITED'"`、`TextBoxEnable=false` 只能放大镜选择)。
+  - 人员编号:`SnCollectionBox em_code`,KeyDown Enter 分支执行(项目统一扫码范式)。
+  - RadioButton 上线(默认)/下线,CheckedChanged 切换模式提示。
+- 业务规则:
+  - 上线:**先校验人员编号存在于 `SOPEMPLOYEEDETAIL`(`sed_emcode`),不存在则提示"人员编号不存在"并拒绝**;再查 `lm_emcode + lm_downtime is null`,已存在则提示其所在线别并拒绝(一人只能同时一条线);通过后 insert(lm_id=loadman_seq.nextval, lm_uptime=sysdate, lm_inman=User.UserName)。`SOPEMPLOYEEDETAIL` 是用户提供的表(项目内无既有引用),下线不做人存在性校验。
+  - 下线:按人员编号(不限线别,一人最多一条在线记录)`update loadman set lm_downtime=sysdate`;无在线记录则提示。
+  - DGV:`from loadman lm left join SOPEMPLOYEEDETAIL se on lm.lm_emcode=se.sed_emcode`,取 `sed_emname` 作为「人员名称」列;`where lm.lm_downtime is null [and lm.lm_linecode=当前线别] order by lm.lm_uptime desc`;线别 DbChange、上线/下线成功后均调用 LoadGridData 刷新。
+- **发现的模板 bug**:Query_LoadMake 里 `li_code.DbChange` 与 `ma_code.DbChange` 共用一个 handler 且固定读 `ma_code.ReturnData`——线别触发时读到的是工单数据。新代码 handler 改读对应控件(`li_code.ReturnData`)。
+- 菜单:需在 `CS$SYSNAVATION` 插 `sn_classname='Query.Query_LoadMan'`,`CS$USERGROUPPOWER` 授权;代码侧无需改动。

+ 2 - 0
UAS_MES_YDCY/.workbuddy/memory/MEMORY.md

@@ -23,6 +23,7 @@
 
 ## 常用自定义控件(`UAS_MES_NEW.CustomControl.*`)
 - SN/条码输入:`TextBoxWithIcon.SnCollectionBox`(继承 `EnterTextBox`,额外属性 `AllPower/ID/Power/Str/Str1/Str2`)
+- 任意表查询放大镜:`TextBoxWithIcon.SearchTextBox`(属性 `TableName/SelectField(字段 # 中文)/SetValueField/FormName/Condition/DBTitle/TextBoxEnable`;`DbChange` 事件取 `ReturnData` 配 `BaseUtil.SetFormValue` 回填;`TextBoxEnable=false` 时只能放大镜选择)
 - 工单输入(带放大镜 DbFind):`TextBoxWithIcon.MaCodeSearchTextBox`,配 `TableName/SelectField/SetValueField/FormName/Condition`
 - 按钮:`ButtonUtil.NormalButton`(未设 NormalImage/DownImage/MoveImage 时自动取 `Properties.Resources` 默认图)
 - 结果面板:`RichText.RichTextAutoBottom`
@@ -31,6 +32,7 @@
 ## 数据访问
 - `dh.ExecuteSql(sql, "select")` 返回 `DataTable`;`dh.getFieldDataByCondition(表, 字段, 条件)` 返回单值。
 - 表命名:工序表 `step`(`st_code`/`st_name`),工序类型表 `steptype`(`STP_CODE`/`STP_NAME`,注意是 STP_ 前缀)。
+- 员工上下线表 `loadman`:`LM_ID`(`loadman_seq.nextval`)/`LM_LINECODE`/`LM_EMCODE`/`LM_UPTIME`/`LM_DOWNTIME`/`LM_INMAN`;同构的 `loadmake`(工单上下线)有现成界面 `Query_LoadMake` 可作模板。
 - SQL 多为拼字符串 + Oracle 函数(`nvl`、`ROWNUM`、`DUAL`)。
 
 ## 已知环境限制

+ 255 - 0
UAS_MES_YDCY/FunctionCode/Query/Query_LoadMan.Designer.cs

@@ -0,0 +1,255 @@
+namespace UAS_MES_NEW.Query
+{
+    partial class Query_LoadMan
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.linecode_label = new System.Windows.Forms.Label();
+            this.emcode_label = new System.Windows.Forms.Label();
+            this.DGV = new System.Windows.Forms.DataGridView();
+            this.lm_id = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.lm_emcode = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.sed_emname = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.lm_linecode = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.lm_uptime = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.lm_inman = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.UpLoadMan = new System.Windows.Forms.RadioButton();
+            this.DownLoadMan = new System.Windows.Forms.RadioButton();
+            this.li_code = new UAS_MES_NEW.CustomControl.TextBoxWithIcon.SearchTextBox();
+            this.em_code = new UAS_MES_NEW.CustomControl.TextBoxWithIcon.SnCollectionBox();
+            this.OperateResult = new UAS_MES_NEW.CustomControl.RichText.RichTextAutoBottom();
+            ((System.ComponentModel.ISupportInitialize)(this.DGV)).BeginInit();
+            this.SuspendLayout();
+            //
+            // linecode_label
+            //
+            this.linecode_label.AutoSize = true;
+            this.linecode_label.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.linecode_label.Location = new System.Drawing.Point(24, 38);
+            this.linecode_label.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+            this.linecode_label.Name = "linecode_label";
+            this.linecode_label.Size = new System.Drawing.Size(64, 31);
+            this.linecode_label.TabIndex = 10;
+            this.linecode_label.Text = "线别";
+            //
+            // li_code
+            //
+            this.li_code.AllPower = "IFALL";
+            this.li_code.Caller = null;
+            this.li_code.Condition = null;
+            this.li_code.DBTitle = "";
+            this.li_code.Font = new System.Drawing.Font("微软雅黑", 9F);
+            this.li_code.FormName = null;
+            this.li_code.Location = new System.Drawing.Point(96, 31);
+            this.li_code.Margin = new System.Windows.Forms.Padding(6);
+            this.li_code.Name = "li_code";
+            this.li_code.Power = "";
+            this.li_code.ReturnData = null;
+            this.li_code.SelectField = null;
+            this.li_code.SetValueField = null;
+            this.li_code.Size = new System.Drawing.Size(282, 46);
+            this.li_code.TabIndex = 1;
+            this.li_code.TableName = null;
+            this.li_code.TextBoxEnable = false;
+            //
+            // emcode_label
+            //
+            this.emcode_label.AutoSize = true;
+            this.emcode_label.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.emcode_label.Location = new System.Drawing.Point(408, 38);
+            this.emcode_label.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+            this.emcode_label.Name = "emcode_label";
+            this.emcode_label.Size = new System.Drawing.Size(94, 31);
+            this.emcode_label.TabIndex = 11;
+            this.emcode_label.Text = "人员编号";
+            //
+            // em_code
+            //
+            this.em_code.AllPower = null;
+            this.em_code.BackColor = System.Drawing.Color.White;
+            this.em_code.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.em_code.ID = null;
+            this.em_code.Location = new System.Drawing.Point(532, 34);
+            this.em_code.Margin = new System.Windows.Forms.Padding(4);
+            this.em_code.Name = "em_code";
+            this.em_code.Power = null;
+            this.em_code.Size = new System.Drawing.Size(220, 40);
+            this.em_code.TabIndex = 2;
+            this.em_code.KeyDown += new System.Windows.Forms.KeyEventHandler(this.em_code_KeyDown);
+            //
+            // UpLoadMan
+            //
+            this.UpLoadMan.AutoSize = true;
+            this.UpLoadMan.Checked = true;
+            this.UpLoadMan.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.UpLoadMan.Location = new System.Drawing.Point(800, 38);
+            this.UpLoadMan.Margin = new System.Windows.Forms.Padding(4);
+            this.UpLoadMan.Name = "UpLoadMan";
+            this.UpLoadMan.Size = new System.Drawing.Size(76, 32);
+            this.UpLoadMan.TabIndex = 3;
+            this.UpLoadMan.TabStop = true;
+            this.UpLoadMan.Text = "上线";
+            this.UpLoadMan.UseVisualStyleBackColor = true;
+            this.UpLoadMan.CheckedChanged += new System.EventHandler(this.UpLoadMan_CheckedChanged);
+            //
+            // DownLoadMan
+            //
+            this.DownLoadMan.AutoSize = true;
+            this.DownLoadMan.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.DownLoadMan.Location = new System.Drawing.Point(912, 38);
+            this.DownLoadMan.Margin = new System.Windows.Forms.Padding(4);
+            this.DownLoadMan.Name = "DownLoadMan";
+            this.DownLoadMan.Size = new System.Drawing.Size(76, 32);
+            this.DownLoadMan.TabIndex = 4;
+            this.DownLoadMan.TabStop = true;
+            this.DownLoadMan.Text = "下线";
+            this.DownLoadMan.UseVisualStyleBackColor = true;
+            this.DownLoadMan.CheckedChanged += new System.EventHandler(this.DownLoadMan_CheckedChanged);
+            //
+            // DGV
+            //
+            this.DGV.AllowUserToAddRows = false;
+            this.DGV.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.DGV.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.lm_id,
+            this.lm_emcode,
+            this.sed_emname,
+            this.lm_linecode,
+            this.lm_uptime,
+            this.lm_inman});
+            this.DGV.Location = new System.Drawing.Point(24, 96);
+            this.DGV.Name = "DGV";
+            this.DGV.RowHeadersWidth = 82;
+            this.DGV.RowTemplate.Height = 37;
+            this.DGV.Size = new System.Drawing.Size(1090, 640);
+            this.DGV.TabIndex = 5;
+            //
+            // lm_id
+            //
+            this.lm_id.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
+            this.lm_id.DataPropertyName = "lm_id";
+            this.lm_id.HeaderText = "ID";
+            this.lm_id.MinimumWidth = 10;
+            this.lm_id.Name = "lm_id";
+            this.lm_id.Visible = false;
+            this.lm_id.Width = 10;
+            //
+            // lm_emcode
+            //
+            this.lm_emcode.DataPropertyName = "lm_emcode";
+            this.lm_emcode.HeaderText = "人员编号";
+            this.lm_emcode.MinimumWidth = 10;
+            this.lm_emcode.Name = "lm_emcode";
+            this.lm_emcode.ReadOnly = true;
+            this.lm_emcode.Width = 180;
+            //
+            // sed_emname
+            //
+            this.sed_emname.DataPropertyName = "sed_emname";
+            this.sed_emname.HeaderText = "人员名称";
+            this.sed_emname.MinimumWidth = 10;
+            this.sed_emname.Name = "sed_emname";
+            this.sed_emname.ReadOnly = true;
+            this.sed_emname.Width = 120;
+            //
+            // lm_linecode
+            //
+            this.lm_linecode.DataPropertyName = "lm_linecode";
+            this.lm_linecode.HeaderText = "线别";
+            this.lm_linecode.MinimumWidth = 10;
+            this.lm_linecode.Name = "lm_linecode";
+            this.lm_linecode.ReadOnly = true;
+            this.lm_linecode.Width = 200;
+            //
+            // lm_uptime
+            //
+            this.lm_uptime.DataPropertyName = "lm_uptime";
+            this.lm_uptime.HeaderText = "上线时间";
+            this.lm_uptime.MinimumWidth = 10;
+            this.lm_uptime.Name = "lm_uptime";
+            this.lm_uptime.ReadOnly = true;
+            this.lm_uptime.Width = 200;
+            //
+            // lm_inman
+            //
+            this.lm_inman.DataPropertyName = "lm_inman";
+            this.lm_inman.HeaderText = "录入人";
+            this.lm_inman.MinimumWidth = 10;
+            this.lm_inman.Name = "lm_inman";
+            this.lm_inman.ReadOnly = true;
+            this.lm_inman.Width = 120;
+            //
+            // OperateResult
+            //
+            this.OperateResult.Location = new System.Drawing.Point(1130, 96);
+            this.OperateResult.Name = "OperateResult";
+            this.OperateResult.Size = new System.Drawing.Size(410, 640);
+            this.OperateResult.TabIndex = 6;
+            //
+            // Query_LoadMan
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(1560, 760);
+            this.Controls.Add(this.li_code);
+            this.Controls.Add(this.linecode_label);
+            this.Controls.Add(this.em_code);
+            this.Controls.Add(this.emcode_label);
+            this.Controls.Add(this.UpLoadMan);
+            this.Controls.Add(this.DownLoadMan);
+            this.Controls.Add(this.DGV);
+            this.Controls.Add(this.OperateResult);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+            this.Margin = new System.Windows.Forms.Padding(4);
+            this.Name = "Query_LoadMan";
+            this.Tag = "Query!LoadMan";
+            this.Text = "人员上下线";
+            this.Load += new System.EventHandler(this.Query_LoadMan_Load);
+            this.SizeChanged += new System.EventHandler(this.Query_LoadMan_SizeChanged);
+            ((System.ComponentModel.ISupportInitialize)(this.DGV)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+        private System.Windows.Forms.Label linecode_label;
+        private CustomControl.TextBoxWithIcon.SearchTextBox li_code;
+        private System.Windows.Forms.Label emcode_label;
+        private CustomControl.TextBoxWithIcon.SnCollectionBox em_code;
+        private System.Windows.Forms.RadioButton UpLoadMan;
+        private System.Windows.Forms.RadioButton DownLoadMan;
+        private System.Windows.Forms.DataGridView DGV;
+        private CustomControl.RichText.RichTextAutoBottom OperateResult;
+        private System.Windows.Forms.DataGridViewTextBoxColumn lm_id;
+        private System.Windows.Forms.DataGridViewTextBoxColumn lm_emcode;
+        private System.Windows.Forms.DataGridViewTextBoxColumn sed_emname;
+        private System.Windows.Forms.DataGridViewTextBoxColumn lm_linecode;
+        private System.Windows.Forms.DataGridViewTextBoxColumn lm_uptime;
+        private System.Windows.Forms.DataGridViewTextBoxColumn lm_inman;
+    }
+}

+ 150 - 0
UAS_MES_YDCY/FunctionCode/Query/Query_LoadMan.cs

@@ -0,0 +1,150 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Windows.Forms;
+using UAS_MES_NEW.DataOperate;
+using UAS_MES_NEW.Entity;
+using UAS_MES_NEW.PublicForm;
+using UAS_MES_NEW.PublicMethod;
+
+namespace UAS_MES_NEW.Query
+{
+    public partial class Query_LoadMan : Form
+    {
+        AutoSizeFormClass asc = new AutoSizeFormClass();
+
+        DataHelper dh = SystemInf.dh;
+
+        DataTable Dbfind;
+
+        public Query_LoadMan()
+        {
+            InitializeComponent();
+        }
+
+        private void Query_LoadMan_Load(object sender, EventArgs e)
+        {
+            asc.controllInitializeSize(this);
+            //线别放大镜
+            li_code.TableName = "line";
+            li_code.SelectField = "li_code # 线别编号,li_name # 线别名称";
+            li_code.FormName = Name;
+            li_code.SetValueField = new string[] { "li_code" };
+            li_code.Condition = "li_statuscode='AUDITED'";
+            li_code.DbChange += Li_code_DbChange;
+            //初始提示
+            OperateResult.AppendText(">>请选择线别,输入人员编号后回车执行" + (UpLoadMan.Checked ? "上线" : "下线") + "\n", Color.Black);
+            LoadGridData();
+            em_code.Focus();
+        }
+
+        private void Query_LoadMan_SizeChanged(object sender, EventArgs e)
+        {
+            asc.controlAutoSize(this);
+        }
+
+        private void Li_code_DbChange(object sender, EventArgs e)
+        {
+            Dbfind = li_code.ReturnData;
+            BaseUtil.SetFormValue(this.Controls, Dbfind);
+            //切换线别后刷新当前线别的在线人员
+            LoadGridData();
+            em_code.Focus();
+        }
+
+        /// <summary>
+        /// 人员编号输入框,回车后按选中的模式执行上线/下线
+        /// </summary>
+        private void em_code_KeyDown(object sender, KeyEventArgs e)
+        {
+            if (e.KeyCode != Keys.Enter)
+                return;
+            string linecode = li_code.Text.Trim();
+            string emcode = em_code.Text.Trim();
+            //限制一:线别必选
+            if (linecode == "")
+            {
+                OperateResult.AppendText("<<请先选择线别\n", Color.Red, li_code);
+                return;
+            }
+            //限制二:人员编号不能为空
+            if (emcode == "")
+            {
+                OperateResult.AppendText("<<人员编号不能为空\n", Color.Red, em_code);
+                return;
+            }
+            if (UpLoadMan.Checked)
+            {
+                //上线:先校验人员编号存在于 SOPEMPLOYEEDETAIL
+                if (!dh.CheckExist("SOPEMPLOYEEDETAIL", "sed_emcode='" + emcode + "'"))
+                {
+                    OperateResult.AppendText("<<" + emcode + "人员编号不存在\n", Color.Red, em_code);
+                    em_code.Clear();
+                    em_code.Focus();    
+                    return;
+                }
+                //一个人只能同时一条线上线
+                DataTable dtOn = (DataTable)dh.ExecuteSql("select lm_linecode from loadman where lm_emcode='" + emcode + "' and lm_downtime is null", "select");
+                if (dtOn.Rows.Count > 0)
+                {
+                    OperateResult.AppendText("<<" + emcode + "已在" + dtOn.Rows[0]["lm_linecode"].ToString() + "上线,不允许重复上线\n", Color.Red, em_code);
+                    em_code.Clear();
+                    em_code.Focus();
+                    return;
+                }
+                dh.ExecuteSql("insert into loadman(lm_id,lm_linecode,lm_emcode,lm_uptime,lm_inman)" +
+                    "values(loadman_seq.nextval,'" + linecode + "','" + emcode + "',sysdate,'" + User.UserName + "')", "insert");
+                OperateResult.AppendText("<<" + emcode + "在" + linecode + "上线成功\n", Color.Green, em_code);
+            }
+            else
+            {
+                //下线:一个人同一时间只有一条在线记录,直接按人员下线
+                DataTable dtOn = (DataTable)dh.ExecuteSql("select lm_linecode from loadman where lm_emcode='" + emcode + "' and lm_downtime is null", "select");
+                if (dtOn.Rows.Count == 0)
+                {
+                    OperateResult.AppendText("<<" + emcode + "当前不在任何线上,无法下线\n", Color.Red, em_code);
+                    em_code.Clear();
+                    em_code.Focus();
+                    return;
+                }
+                dh.ExecuteSql("update loadman set lm_downtime=sysdate where lm_emcode='" + emcode + "' and lm_downtime is null", "update");
+                OperateResult.AppendText("<<" + emcode + "已从" + dtOn.Rows[0]["lm_linecode"].ToString() + "下线\n", Color.Green, em_code);
+            }
+            //数据变更后刷新
+            LoadGridData();
+            em_code.Clear();
+            em_code.Focus();
+        }
+
+        private void UpLoadMan_CheckedChanged(object sender, EventArgs e)
+        {
+            if (UpLoadMan.Checked)
+            {
+                OperateResult.AppendText(">>已切换到上线模式,输入人员编号回车上线\n", Color.Black);
+                em_code.Focus();
+            }
+        }
+
+        private void DownLoadMan_CheckedChanged(object sender, EventArgs e)
+        {
+            if (DownLoadMan.Checked)
+            {
+                OperateResult.AppendText(">>已切换到下线模式,输入人员编号回车下线\n", Color.Black);
+                em_code.Focus();
+            }
+        }
+
+        /// <summary>
+        /// 刷新DGV:只取未下线的人员,已选线别时只显示当前线别;按 lm_emcode 关联 SOPEMPLOYEEDETAIL 取人员名称
+        /// </summary>
+        private void LoadGridData()
+        {
+            string sql = "select lm.lm_id,lm.lm_linecode,lm.lm_emcode,se.sed_emname,lm.lm_uptime,lm.lm_inman from loadman lm left join SOPEMPLOYEEDETAIL se on lm.lm_emcode=se.sed_emcode where lm.lm_downtime is null";
+            if (li_code.Text != "")
+                sql += " and lm.lm_linecode='" + li_code.Text + "'";
+            sql += " order by lm.lm_uptime desc";
+            DataTable dt = (DataTable)dh.ExecuteSql(sql, "select");
+            BaseUtil.FillDgvWithDataTable(DGV, dt);
+        }
+    }
+}

+ 120 - 0
UAS_MES_YDCY/FunctionCode/Query/Query_LoadMan.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 9 - 0
UAS_MES_YDCY/UAS_MES_YDCY.csproj

@@ -1289,6 +1289,12 @@
     <Compile Include="FunctionCode\Query\Query_LoadMake.Designer.cs">
       <DependentUpon>Query_LoadMake.cs</DependentUpon>
     </Compile>
+    <Compile Include="FunctionCode\Query\Query_LoadMan.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FunctionCode\Query\Query_LoadMan.Designer.cs">
+      <DependentUpon>Query_LoadMan.cs</DependentUpon>
+    </Compile>
     <Compile Include="FunctionCode\Query\Query_RFIDPrint.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -2214,6 +2220,9 @@
     <EmbeddedResource Include="FunctionCode\Query\Query_LoadMake.resx">
       <DependentUpon>Query_LoadMake.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="FunctionCode\Query\Query_LoadMan.resx">
+      <DependentUpon>Query_LoadMan.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="FunctionCode\Query\Query_RFIDPrint.resx">
       <DependentUpon>Query_RFIDPrint.cs</DependentUpon>
     </EmbeddedResource>