callm 3 дней назад
Родитель
Сommit
dfb5152dbe

+ 9 - 0
UAS_MES_YDCY/.workbuddy/memory/2026-10-27.md

@@ -35,6 +35,15 @@
   2. `User.UserCtCode == ""` → 「人员资料未维护线别,仅拉长可以扫码」(按用户原话文案);
   3. `getFieldDataByCondition("line","count(1)","li_longline='ct' and li_code='线别' and li_statuscode='AUDITED'")=="0"` → 「线别xx不在xx长线范围内,不允许扫码」。
 - em_ctcode 语义 = 长线代码,对应 `line.li_longline`。
+- 2026-10-28 用户自行调整为 `instr('ctcode串', li_longline)>0`(em_ctcode 可维护多个长线代码,线别少时够用);
+  后追加 **ALL 豁免**:`User.UserCtCode == "ALL"` 时跳过长线判断、任意线别可上/下线
+  (两处判断均改为 `if (User.UserCtCode != "ALL" && getFieldDataByCondition(...)=="0")`)。
+  最终卡控顺序:选线别非空 → ctcode 非空 → (ctcode!=ALL 且 instr 不中) 拦截。
+- 同步:`Load` 里线别放大镜 `li_code.Condition` 也按长线过滤(用户先改成 instr 版),补 ALL 豁免:
+  `ctcode=="ALL"` → 仅 `li_statuscode='AUDITED'`(列全部线别);否则加 `instr('ctcode',li_longline)>0`。
+  注意 ctcode 为空时走 else 分支 → instr 恒假 → 放大镜查不到任何线别,与扫码拦截行为一致。
+
+
 - 追加(同日):下线扫码时,人员**在线记录上的 `lm_linecode`** 也必须在长线范围内,否则提示「当前在xx上线,该线别不在xx长线范围内,不允许下线」。
   注意:批量勾选下线(`ConfirmDown_Click`)**尚未加此卡控**(用户只提扫码)。
 

+ 7 - 4
UAS_MES_YDCY/FunctionCode/Query/Query_LoadMan.cs

@@ -30,7 +30,9 @@ namespace UAS_MES_NEW.Query
             li_code.SelectField = "li_code # 线别编号,li_name # 线别名称";
             li_code.FormName = Name;
             li_code.SetValueField = new string[] { "li_code" };
-            li_code.Condition = "li_statuscode='AUDITED' and instr('" + User.UserCtCode + "',li_longline)>0";
+            //ctcode 为 ALL 时不限线别,放大镜列出全部已审核线别;否则只列出登录人长线下的线别
+            li_code.Condition = User.UserCtCode == "ALL" ? "li_statuscode='AUDITED'"
+                : "li_statuscode='AUDITED' and instr('" + User.UserCtCode + "',li_longline)>0";
             li_code.DbChange += Li_code_DbChange;
             //初始提示
             OperateResult.AppendText(">>请选择线别,输入人员工号后回车执行" + (UpLoadMan.Checked ? "上线" : "下线") + ";下线也可勾选列表后点\"确认下线\"批量处理\n", Color.Black);
@@ -125,7 +127,8 @@ namespace UAS_MES_NEW.Query
                 return;
             }
             //所选线别必须属于登录人长线(line.li_longline)下的线别,否则上/下线都不允许
-            if (dh.getFieldDataByCondition("line", "count(1)",
+            //ctcode 为 ALL 时不限线别,任何线别都可操作
+            if (User.UserCtCode != "ALL" && dh.getFieldDataByCondition("line", "count(1)",
                 "instr('" + User.UserCtCode + "',li_longline)>0 and li_code='" + linecode + "' and li_statuscode='AUDITED'").ToString() == "0")
             {
                 OperateResult.AppendText("<<线别" + linecode + "不在" + User.UserCtCode + "范围内,不允许扫码\n", Color.Red, li_code);
@@ -175,9 +178,9 @@ namespace UAS_MES_NEW.Query
                     em_code.Focus();
                     return;
                 }
-                //人员当前在线线体也必须在登录人长线范围内,否则不允许下线
+                //人员当前在线线体也必须在登录人长线范围内,否则不允许下线;ctcode 为 ALL 时不限
                 string onLineCode = dtOn.Rows[0]["lm_linecode"].ToString();
-                if (dh.getFieldDataByCondition("line", "count(1)",
+                if (User.UserCtCode != "ALL" && dh.getFieldDataByCondition("line", "count(1)",
                     "instr('" + User.UserCtCode + "',li_longline)>0 and li_code='" + onLineCode + "' and li_statuscode='AUDITED'").ToString() == "0")
                 {
                     OperateResult.AppendText("<<" + emcode + "当前在" + onLineCode + "上线,该线别不在" + User.UserCtCode + "范围内,不允许下线\n", Color.Red, em_code);