From 69446e2dda0842c7977c724ba8ac398fdf5be423 Mon Sep 17 00:00:00 2001 From: liangjunyu <13726812+shifang-tianhua_0@user.noreply.gitee.com> Date: Fri, 20 Jun 2025 09:17:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Newtonsoft.Json.dll | Bin 0 -> 345600 bytes aoyuPlugIn.sln | 25 + aoyuPlugIn/MJ_wgd_lb.cs | 376 ++++++++++++ aoyuPlugIn/MaterialUnAuditController.cs | 49 ++ aoyuPlugIn/Properties/AssemblyInfo.cs | 36 ++ aoyuPlugIn/aoyuPlugIn.csproj | 126 ++++ aoyuPlugIn/zplr_lb_sh.cs | 74 +++ aoyuPlugIn/常成/cc_dbd.cs | 107 ++++ aoyuPlugIn/常成/cc_dbd_lb.cs | 67 +++ aoyuPlugIn/常成/fhtzd.cs | 109 ++++ aoyuPlugIn/常成/fhtzd_lb.cs | 108 ++++ aoyuPlugIn/接口/jk_cgcx.cs | 16 + .../服务插件校验数据/OnAddValidatorsHead.cs | 85 +++ aoyuPlugIn/汇威/API新增单据/API_fygj.cs | 540 +++++++++++++++++ aoyuPlugIn/汇威/API新增单据/add_dj.cs | 150 +++++ aoyuPlugIn/汇威/JJ_show_yggzmx.cs | 95 +++ aoyuPlugIn/汇威/MJ_jdhb.cs | 54 ++ aoyuPlugIn/汇威/MJ_jdhb_lb.cs | 78 +++ aoyuPlugIn/汇威/MJ_qtyf.cs | 206 +++++++ aoyuPlugIn/汇威/MJ_xtqtrk.cs | 553 ++++++++++++++++++ aoyuPlugIn/汇威/MJ_zckpbg.cs | 45 ++ aoyuPlugIn/汇威/hg_KPILR.cs | 35 ++ aoyuPlugIn/汇威/hg_xzjxxm.cs | 236 ++++++++ aoyuPlugIn/汇威/jj_show_ygz_ygmx.cs | 47 ++ aoyuPlugIn/汇威/mjcpdj.cs | 209 +++++++ aoyuPlugIn/汇威/workRL.cs | 117 ++++ aoyuPlugIn/汇威/zp_bsdlb.cs | 75 +++ aoyuPlugIn/汇威/zp_plyg.cs | 393 +++++++++++++ aoyuPlugIn/汇威/zp_plyg_LB.cs | 95 +++ aoyuPlugIn/汇威/zp_rgz.cs | 167 ++++++ aoyuPlugIn/汇威/zp_rgz_LB.cs | 77 +++ aoyuPlugIn/汇威/zp_ygz.cs | 172 ++++++ aoyuPlugIn/汇威/zpjjmxb_lb.cs | 51 ++ aoyuPlugIn/汇威/zq_bsd.cs | 59 ++ aoyuPlugIn/汇威/zq_pl.cs | 111 ++++ aoyuPlugIn/汇威/zs_rgz.cs | 103 ++++ aoyuPlugIn/汇威/zs_ygz.cs | 94 +++ aoyuPlugIn/汇威/zxSQL.cs | 38 ++ .../佳博销售订单验证库存数/jb_xsck_lb.cs | 69 +++ .../佳博销售订单验证库存数/jb_xsck_tj.cs | 47 ++ .../佳博销售订单验证库存数/jb_xsdd_sh.cs | 279 +++++++++ .../佳博销售订单验证库存数/jb_xsdd_yzkcs.cs | 97 +++ aoyuPlugIn/皇顶/hd_xsdd_xsddps.cs | 74 +++ 43 files changed, 5544 insertions(+) create mode 100644 Newtonsoft.Json.dll create mode 100644 aoyuPlugIn.sln create mode 100644 aoyuPlugIn/MJ_wgd_lb.cs create mode 100644 aoyuPlugIn/MaterialUnAuditController.cs create mode 100644 aoyuPlugIn/Properties/AssemblyInfo.cs create mode 100644 aoyuPlugIn/aoyuPlugIn.csproj create mode 100644 aoyuPlugIn/zplr_lb_sh.cs create mode 100644 aoyuPlugIn/常成/cc_dbd.cs create mode 100644 aoyuPlugIn/常成/cc_dbd_lb.cs create mode 100644 aoyuPlugIn/常成/fhtzd.cs create mode 100644 aoyuPlugIn/常成/fhtzd_lb.cs create mode 100644 aoyuPlugIn/接口/jk_cgcx.cs create mode 100644 aoyuPlugIn/服务插件校验数据/OnAddValidatorsHead.cs create mode 100644 aoyuPlugIn/汇威/API新增单据/API_fygj.cs create mode 100644 aoyuPlugIn/汇威/API新增单据/add_dj.cs create mode 100644 aoyuPlugIn/汇威/JJ_show_yggzmx.cs create mode 100644 aoyuPlugIn/汇威/MJ_jdhb.cs create mode 100644 aoyuPlugIn/汇威/MJ_jdhb_lb.cs create mode 100644 aoyuPlugIn/汇威/MJ_qtyf.cs create mode 100644 aoyuPlugIn/汇威/MJ_xtqtrk.cs create mode 100644 aoyuPlugIn/汇威/MJ_zckpbg.cs create mode 100644 aoyuPlugIn/汇威/hg_KPILR.cs create mode 100644 aoyuPlugIn/汇威/hg_xzjxxm.cs create mode 100644 aoyuPlugIn/汇威/jj_show_ygz_ygmx.cs create mode 100644 aoyuPlugIn/汇威/mjcpdj.cs create mode 100644 aoyuPlugIn/汇威/workRL.cs create mode 100644 aoyuPlugIn/汇威/zp_bsdlb.cs create mode 100644 aoyuPlugIn/汇威/zp_plyg.cs create mode 100644 aoyuPlugIn/汇威/zp_plyg_LB.cs create mode 100644 aoyuPlugIn/汇威/zp_rgz.cs create mode 100644 aoyuPlugIn/汇威/zp_rgz_LB.cs create mode 100644 aoyuPlugIn/汇威/zp_ygz.cs create mode 100644 aoyuPlugIn/汇威/zpjjmxb_lb.cs create mode 100644 aoyuPlugIn/汇威/zq_bsd.cs create mode 100644 aoyuPlugIn/汇威/zq_pl.cs create mode 100644 aoyuPlugIn/汇威/zs_rgz.cs create mode 100644 aoyuPlugIn/汇威/zs_ygz.cs create mode 100644 aoyuPlugIn/汇威/zxSQL.cs create mode 100644 aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsck_lb.cs create mode 100644 aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsck_tj.cs create mode 100644 aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsdd_sh.cs create mode 100644 aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsdd_yzkcs.cs create mode 100644 aoyuPlugIn/皇顶/hd_xsdd_xsddps.cs diff --git a/Newtonsoft.Json.dll b/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..416bd3737967e8e718f39ea454fd6920f2e2b0d7 GIT binary patch literal 345600 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
!(cjII*D)^CRF&R8x+F96iVeJ;&GhxcZc`u8mL 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
  • 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↰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 literal 0 HcmV?d00001 diff --git a/aoyuPlugIn.sln b/aoyuPlugIn.sln new file mode 100644 index 0000000..f47509b --- /dev/null +++ b/aoyuPlugIn.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.271 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aoyuPlugIn", "aoyuPlugIn\aoyuPlugIn.csproj", "{FD254B5C-1BE6-4165-9176-9DA10375CE7D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FD254B5C-1BE6-4165-9176-9DA10375CE7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD254B5C-1BE6-4165-9176-9DA10375CE7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD254B5C-1BE6-4165-9176-9DA10375CE7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD254B5C-1BE6-4165-9176-9DA10375CE7D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {65E004C6-66BA-46D0-AD19-6200637A2A82} + EndGlobalSection +EndGlobal diff --git a/aoyuPlugIn/MJ_wgd_lb.cs b/aoyuPlugIn/MJ_wgd_lb.cs new file mode 100644 index 0000000..72fb03c --- /dev/null +++ b/aoyuPlugIn/MJ_wgd_lb.cs @@ -0,0 +1,376 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.List.PlugIn; +using Kingdee.BOS.WebApi.FormService; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +using System.Web.Script.Serialization; + +namespace aoyuPlugIn +{ + [Description("列表费用归集新增")] + [Kingdee.BOS.Util.HotUpdate] + public class MJ_wgd_lb : AbstractListPlugIn + { + + //列表菜单事件 + public override void AfterBarItemClick(AfterBarItemClickEventArgs e) + { + base.AfterBarItemClick(e); + if (e.BarItemKey == "tbfygjlb")//生成费用归集单 + { + if (this.ListView.SelectedRowsInfo.Count > 0) + { + for (int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) + { + //取指定行单据编号 + string fbillno = this.ListView.SelectedRowsInfo[i].BillNo; + //string zt = this.ListView.SelectedRowsInfo[i].DataRow["FDOCUMENTSTATUS"].ToString();//取单据状态 + + SaveBill(fbillno); + + } + + } + } + } + //调用API生成费用归集单--本机 + public Boolean SaveBill2(string fbillno) + { + + try + { + var sSql = String.Format("EXEC hw_get_wwdd '" + fbillno + "'"); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + try + { + JObject jsonRoot = new JObject(); + + // NeedUpDateFields: 哪些字段需要更新?为空则表示参数中全部字段,均需要更新 + jsonRoot.Add("NeedUpDateFields", new JArray("")); + + // Model: 单据详细数据参数 + JObject model = new JObject(); + jsonRoot.Add("Model", model); + + // 开始设置单据字段值 + // 必须设置的字段:主键、单据类型、主业务组织,各必录且没有设置默认值的字段 + // 特别注意:字段Key大小写是敏感的,建议从BOS设计器中,直接复制字段的标识属性过来 + + // 单据主键:必须填写,系统据此判断是新增还是修改单据;新增单据,填0 + model.Add("FID", 0); + + //核算体系编码 + JObject FACCTGSYSTEMID = new JObject(); + FACCTGSYSTEMID.Add("FNumber", "KJHSTX01_SYS"); + model.Add("FACCTGSYSTEMID", FACCTGSYSTEMID); + + //核算体组织码 + JObject FACCTGORGID = new JObject(); + FACCTGORGID.Add("FNumber", "107"); + + model.Add("FACCTGORGID", FACCTGORGID); + + //会计政策编码 + JObject FACCTPOLICYID = new JObject(); + FACCTPOLICYID.Add("FNumber", "KJZC02_SYS"); + + model.Add("FACCTPOLICYID", FACCTPOLICYID); + + + ////业务类型 + //model.Add("FBusinessType", "CG");//标准采购 + + + // 开始构建单据体参数:集合参数JArray + + JArray entryRows = new JArray(); + // 把单据体行集合,添加到model中,以单据体Key为标识 + string entityKey = "FEntity"; + model.Add(entityKey, entryRows); + // 通过循环创建单据体行:示例代码仅创建一行 + foreach (var item in dr) + { + // 添加新行,把新行加入到单据体行集合 + JObject entryRow = new JObject(); + entryRows.Add(entryRow); + + + // 给新行,设置关键字段值 + // 单据体主键:必须填写,系统据此判断是新增还是修改行,0是新增 + entryRow.Add("FEntryID", 0); + + //业务组织 + JObject FBIZORGID = new JObject(); + FBIZORGID.Add("FNumber", "107"); + + entryRow.Add("FBIZORGID", FBIZORGID); + + //费用项目编码 + JObject FEXPENSEITEMID = new JObject(); + FEXPENSEITEMID.Add("FNumber", "FYXM04_SYS"); + entryRow.Add("FEXPENSEITEMID", FEXPENSEITEMID); + + //this.Model.SetValue("F_ISSYQ", item[2], i); + //日期 + //entryRow.Add("FDATE", item[0].ToString()); + entryRow.Add("FDATE", "2019-5-31"); + //成本中心编码 + JObject FCOSTCENTERID = new JObject(); + FCOSTCENTERID.Add("FNumber", "CBZX000016"); + + entryRow.Add("FCOSTCENTERID", FCOSTCENTERID); + + + //金额 + entryRow.Add("FAMOUNT", item[1].ToString()); + + + + //产品编号 + JObject FPRODUCTID = new JObject(); + FPRODUCTID.Add("FNumber", item[2].ToString()); + entryRow.Add("FPRODUCTID", FPRODUCTID); + i++; + } + + // 调用Web API接口服务,保存 + object result = WebApiServiceCall.Save(this.Context, "CB_EXPENSECOLLECTION", jsonRoot.ToString()); + + string t = objzjs(result); + + if (strJson(t)) + { + sSql = string.Format("exec hw_fxwgd '{0}'", fbillno); + DBServiceHelper.Execute(this.Context, sSql); + this.View.ShowMessage("操作成功!"); + + return true; + } + else + { + this.View.ShowMessage("操作失败!" + t); + return false; + + } + + } + catch (Exception ex) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("程序运行遇到了未知的错误11:"); + sb.Append("错误提示:").AppendLine(ex.Message); + sb.Append("错误堆栈:").AppendLine(ex.StackTrace); + this.View.ShowMessage(sb.ToString()); + return false; + } + } + else + { + this.View.ShowMessage("无数据,请确认后再操作!"); + return false; + } + + } + catch (Exception ex) { this.View.ShowMessage("生成费用归集单时发生错误为:" + ex.Message); return false; } + + + } + //调用API生成费用归集单--汇威 + public Boolean SaveBill(string fbillno) + { + + try + { + var sSql = String.Format("EXEC hw_get_wwdd '" + fbillno + "'"); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + try + { + JObject jsonRoot = new JObject(); + + // NeedUpDateFields: 哪些字段需要更新?为空则表示参数中全部字段,均需要更新 + jsonRoot.Add("NeedUpDateFields", new JArray("")); + + // Model: 单据详细数据参数 + JObject model = new JObject(); + jsonRoot.Add("Model", model); + + // 开始设置单据字段值 + // 必须设置的字段:主键、单据类型、主业务组织,各必录且没有设置默认值的字段 + // 特别注意:字段Key大小写是敏感的,建议从BOS设计器中,直接复制字段的标识属性过来 + + // 单据主键:必须填写,系统据此判断是新增还是修改单据;新增单据,填0 + model.Add("FID", 0); + + //核算体系编码 + JObject FACCTGSYSTEMID = new JObject(); + FACCTGSYSTEMID.Add("FNumber", "KJHSTX01_SYS"); + model.Add("FACCTGSYSTEMID", FACCTGSYSTEMID); + + //核算体组织码 + JObject FACCTGORGID = new JObject(); + //FACCTGORGID.Add("FNumber", "107"); + FACCTGORGID.Add("FNumber", "100"); + model.Add("FACCTGORGID", FACCTGORGID); + + //会计政策编码 + JObject FACCTPOLICYID = new JObject(); + //FACCTPOLICYID.Add("FNumber", "KJZC02_SYS"); + FACCTPOLICYID.Add("FNumber", "KJZC01_SYS"); + model.Add("FACCTPOLICYID", FACCTPOLICYID); + + + ////业务类型 + //model.Add("FBusinessType", "CG");//标准采购 + + + // 开始构建单据体参数:集合参数JArray + + JArray entryRows = new JArray(); + // 把单据体行集合,添加到model中,以单据体Key为标识 + string entityKey = "FEntity"; + model.Add(entityKey, entryRows); + // 通过循环创建单据体行:示例代码仅创建一行 + foreach (var item in dr) + { + // 添加新行,把新行加入到单据体行集合 + JObject entryRow = new JObject(); + entryRows.Add(entryRow); + + + // 给新行,设置关键字段值 + // 单据体主键:必须填写,系统据此判断是新增还是修改行,0是新增 + entryRow.Add("FEntryID", 0); + + //业务组织 + JObject FBIZORGID = new JObject(); + //FBIZORGID.Add("FNumber", "107"); + FBIZORGID.Add("FNumber", "100"); + entryRow.Add("FBIZORGID", FBIZORGID); + + //费用项目编码 + JObject FEXPENSEITEMID = new JObject(); + FEXPENSEITEMID.Add("FNumber", "FYXM04_SYS"); + entryRow.Add("FEXPENSEITEMID", FEXPENSEITEMID); + + //this.Model.SetValue("F_ISSYQ", item[2], i); + //日期 + entryRow.Add("FDATE", item[0].ToString()); + //entryRow.Add("FDATE", "2019-5-31"); + //成本中心编码 + JObject FCOSTCENTERID = new JObject(); + //FCOSTCENTERID.Add("FNumber", "CBZX000016"); + FCOSTCENTERID.Add("FNumber", "CBZX000049"); + entryRow.Add("FCOSTCENTERID", FCOSTCENTERID); + + + //金额 + entryRow.Add("FAMOUNT", item[1].ToString()); + + + + //产品编号 + JObject FPRODUCTID = new JObject(); + FPRODUCTID.Add("FNumber", item[2].ToString()); + entryRow.Add("FPRODUCTID", FPRODUCTID); + i++; + } + + // 调用Web API接口服务,保存 + var result = WebApiServiceCall.Save(this.Context, "CB_EXPENSECOLLECTION", jsonRoot.ToString()); + + + string t = objzjs(result); + + if (strJson(t)) + { + sSql = string.Format("exec hw_fxwgd '{0}'", fbillno); + DBServiceHelper.Execute(this.Context, sSql); + this.View.ShowMessage("操作成功1!"); + return true; + } + else + { + this.View.ShowMessage("操作失败!" + t); + return false; + + } + + } + catch (Exception ex) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("程序运行遇到了未知的错误11:"); + sb.Append("错误提示:").AppendLine(ex.Message); + sb.Append("错误堆栈:").AppendLine(ex.StackTrace); + this.View.ShowMessage(sb.ToString()); + return false; + } + } + else + { + this.View.ShowMessage("无数据,请确认后再操作!"); + return false; + } + + } + catch (Exception ex) { this.View.ShowMessage("生成费用归集单时发生错误为:" + ex.Message); return false; } + + + } + //object转json + public string objzjs(Object obj) + { + JavaScriptSerializer js = new JavaScriptSerializer(); + string myJson = js.Serialize(obj); + return myJson; + } + // 将字符串转换成Json格式显示 + //字符串转json + public bool strJson(string t) + { + string jsonText = t; + // "{"shenzheng":"深圳","beijing":"北京","shanghai":[{"zj1":"zj11","zj2":"zj22"},"zjs"]}"; + + JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);//或者JObject jo = JObject.Parse(jsonText); + //string zone = jo["shenzheng"].ToString();//输出 "深圳" + //string zone_en = jo["shanghai"].ToString();//输出 "[{"zj1":"zj11","zj2":"zj22"},"zjs"]" + //string zj1 = jo["shanghai"][1].ToString();//输出 "zjs" + //Console.WriteLine(jo); + + string tt = jo["Result"].ToString(); + JObject jo1 = (JObject)JsonConvert.DeserializeObject(tt); + string t3 = jo1["ResponseStatus"].ToString(); + JObject jo2 = (JObject)JsonConvert.DeserializeObject(t3); + string t4 = jo2["IsSuccess"].ToString(); + + if (t4.ToLower() == "true") + return true; + else + return false; + } + + + } +} diff --git a/aoyuPlugIn/MaterialUnAuditController.cs b/aoyuPlugIn/MaterialUnAuditController.cs new file mode 100644 index 0000000..021a4bd --- /dev/null +++ b/aoyuPlugIn/MaterialUnAuditController.cs @@ -0,0 +1,49 @@ +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using System; +using System.ComponentModel; + +namespace Kingdee.Joysing.Domustarzs +{ + [HotUpdate] + [Description("物料反审核控制【已弃用】")] + public class MaterialUnAuditController: AbstractOperationServicePlugIn + { + public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) + { + + foreach (ExtendedDataEntity extendedDataEntity in e.SelectedRows) + { + int MaterialID = 0; + DynamicObject dynamicObjects = extendedDataEntity.DataEntity; + MaterialID = Convert.ToInt32(dynamicObjects["Id"]); + + string sql = string.Format(@"/*dialect*/select + (SELECT case when count(1) > 0 then '在BOM单已使用此物料,' else ''end + FROM T_ENG_BOM t0 LEFT OUTER JOIN T_ENG_BOMCHILD t1 ON t0.FID = t1.FID + where t0.FMATERIALID={0} or t1.FMATERIALID={1})+ + (SELECT case when count(1) > 0 then '采购订单已使用此物料,' else ''end + FROM T_PUR_POORDERENTRY where FMATERIALID = {2}) as result + where (select top 1 FAntiCheckControl from PAEZ_t_AntiCheckControl order by fid)=1", MaterialID, MaterialID, MaterialID); + DynamicObjectCollection rows = DBUtils.ExecuteDynamicObject(this.Context, sql); + string result = ""; + foreach (DynamicObject row in rows) + { + result = row["result"].ToString(); + } + if (!"".Equals(result)) + { + e.Cancel = true; + e.CancelMessage = Convert.ToString(dynamicObjects["Number"]) + result + "不能反审核的!本次反审核操作失败。"; + + break; + } + } + base.BeforeExecuteOperationTransaction(e); + } + } +} diff --git a/aoyuPlugIn/Properties/AssemblyInfo.cs b/aoyuPlugIn/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3a5123f --- /dev/null +++ b/aoyuPlugIn/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("aoyuPlugIn")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("aoyuPlugIn")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("fd254b5c-1be6-4165-9176-9da10375ce7d")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/aoyuPlugIn/aoyuPlugIn.csproj b/aoyuPlugIn/aoyuPlugIn.csproj new file mode 100644 index 0000000..9c83f14 --- /dev/null +++ b/aoyuPlugIn/aoyuPlugIn.csproj @@ -0,0 +1,126 @@ + + + + + Debug + AnyCPU + {FD254B5C-1BE6-4165-9176-9DA10375CE7D} + Library + Properties + aoyuPlugIn + aoyuPlugIn + v4.5 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + bin\Debug\Kingdee.BOS.dll + + + False + bin\Debug\Kingdee.BOS.App.dll + + + False + bin\Debug\Kingdee.BOS.App.Core.dll + + + False + bin\Debug\Kingdee.BOS.Contracts.dll + + + False + bin\Debug\Kingdee.BOS.Core.dll + + + False + bin\Debug\Kingdee.BOS.DataEntity.dll + + + False + bin\Debug\Kingdee.BOS.ServiceHelper.dll + + + False + C:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.WebApi.Client.dll + + + False + C:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.BOS.WebApi.FormService.dll + + + False + C:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.Core.dll + + + False + C:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\Kingdee.K3.FIN.App.Core.dll + + + False + ..\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/aoyuPlugIn/zplr_lb_sh.cs b/aoyuPlugIn/zplr_lb_sh.cs new file mode 100644 index 0000000..4f817bf --- /dev/null +++ b/aoyuPlugIn/zplr_lb_sh.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.K3.Core.MFG.EntityHelper; +using System.ComponentModel; +using Kingdee.BOS; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.Const; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.Operation; +using Kingdee.BOS.Core.List; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.ConvertElement; +using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs; +using Kingdee.BOS.Core.Interaction; +using Kingdee.BOS.Core.Validation; +using Kingdee.BOS.Contracts; +using Kingdee.BOS.App; +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Orm; +using Kingdee.BOS.Orm.DataEntity; + +namespace aoyuPlugIn +{ + [Description("装配录入列表--审核")] + public class zplr_lb_sh : AbstractOperationServicePlugIn + { + public override void EndOperationTransaction(EndOperationTransactionArgs e) + { + foreach (DynamicObject item in e.DataEntitys) + { + long fid = Convert.ToInt64(item["ID"]); + + } + } + void fxjdb(string issh) + { + //try + //{ + // //string fbillno = ""; + // if (this.ListView.SelectedRowsInfo.Count > 0) + // { + // for (int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) + // { + // //取指定行单据编号 + // string fbillno = this.ListView.SelectedRowsInfo[i].BillNo; + // string zt = this.ListView.SelectedRowsInfo[i].DataRow["FDOCUMENTSTATUS"].ToString(); + // if (issh == "1") + // { + // if (zt == "D" || zt == "B") + // { + // fx_yscs(fbillno, issh); + // } + // } + // else + // { + // if (zt == "C") + // { + // fx_yscs(fbillno, issh); + // } + // } + + + // } + // } + //} + //catch (Exception ex) { this.View.ShowMessage("反写已生产数时发生错误为:" + ex.Message); } + } + } +} diff --git a/aoyuPlugIn/常成/cc_dbd.cs b/aoyuPlugIn/常成/cc_dbd.cs new file mode 100644 index 0000000..f2025ca --- /dev/null +++ b/aoyuPlugIn/常成/cc_dbd.cs @@ -0,0 +1,107 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.Validation; +using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; + +namespace aoyuPlugIn +{ + [Description("调拔单")] + public class cc_dbd : AbstractBillPlugIn + { + List> mycolor = new List>(); + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + if (e.BarItemKey == "tbApprove" || e.BarItemKey == "tbSplitApprove") + { + string fbillno = this.View.Model.GetValue("FBillNo").ToString(); + var sSql = String.Format("EXEC hz_cc_dbd " + fbillno); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + if (dr.Count > 0) + { + + string t = "发货数量大于当前库存,不能审核!"; + foreach (var item in dr) + { + string k = "物料编号:" + item["FNUMBER"].ToString() + "|未出库数合计:" + item["wcks"].ToString() + + "|即时库存:" + item["jskc"].ToString(); + t = t + "\r\n" + k; + } + + List> colors = new List>(); + DynamicObjectCollection entrys = this.View.Model.GetEntityDataObject(this.View.BusinessInfo.GetEntity("FBillEntry")); + int rowNo = 0; + //80C8FE + foreach (var one in entrys) + { + string wl = ""; + wl = Convert.ToString((this.View.Model.GetValue("FMATERIALID", rowNo) as DynamicObject)["Number"]); + foreach (var item in dr) + { + if (item["FNUMBER"].ToString() == wl) + { + colors.Add(new KeyValuePair(rowNo, "#80C8FE")); + mycolor.Add(new KeyValuePair(rowNo, "#FFFFFF")); + } + } + rowNo++; + } + EntryGrid grid = this.View.GetControl("FBillEntry"); + grid.SetRowBackcolor(colors); + + this.View.ShowMessage(t); + //setColor(); + e.Cancel = true; + } + + + } + } + public override void EntryBarItemClick(BarItemClickEventArgs e) + { + base.EntryBarItemClick(e); + if (e.BarItemKey.ToString() == "tbDeleteRow") + { + EntryGrid grid = this.View.GetControl("FBillEntry"); + + //int tol = this.Model.GetEntryRowCount("FEntity"); + int k = this.Model.GetEntryCurrentRowIndex("FBillEntry"); + + grid.SetRowBackcolor("#FFFFFF", k); + + } + //this.View.ShowMessage(e.BarItemKey.ToString()); + } + + + //设置行颜色 + void setColor() + { + List> colors = new List>(); + DynamicObjectCollection entrys = this.View.Model.GetEntityDataObject(this.View.BusinessInfo.GetEntity("FBillEntry")); + int rowNo = 0; + foreach (var one in entrys) + { + colors.Add(new KeyValuePair(rowNo, "#80C8FE")); + rowNo++; + } + EntryGrid grid = this.View.GetControl("FBillEntry"); + grid.SetRowBackcolor(colors); + } + } +} diff --git a/aoyuPlugIn/常成/cc_dbd_lb.cs b/aoyuPlugIn/常成/cc_dbd_lb.cs new file mode 100644 index 0000000..9067e92 --- /dev/null +++ b/aoyuPlugIn/常成/cc_dbd_lb.cs @@ -0,0 +1,67 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.List.PlugIn; + +namespace aoyuPlugIn +{ + [Description("调拔单列表审核")] + public class cc_dbd_lb : AbstractListPlugIn + { + public override void BeforeDoOperation(BeforeDoOperationEventArgs e) + { + base.BeforeDoOperation(e); + if (e.Operation.FormOperation.Id == "ad221364-f04e-4b31-8a69-debd8f5066bc")//审核 + { + if (this.ListView.SelectedRowsInfo.Count > 0) + + { + + for (int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) + { + //取指定行单据编号 + string fbillno = this.ListView.SelectedRowsInfo[i].BillNo; + string zt = this.ListView.SelectedRowsInfo[i].DataRow["FDOCUMENTSTATUS"].ToString(); + + if (zt == "D" || zt == "B") + { + var sSql = String.Format("EXEC hz_cc_dbd " + fbillno); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + if (dr.Count > 0) + { + + string t = "发货数量大于当前库存,不能审核!"; + foreach (var item in dr) + { + string k = "单据编号:" + fbillno + "中物料:" + item["FNUMBER"].ToString() + "|未出库数合计:" + item["wcks"].ToString() + + "|即时库存:" + item["jskc"].ToString(); + t = t + "\r\n" + k; + } + this.View.ShowMessage(t); + e.Cancel = true; + } + } + } + + } + + + } + + } + } +} diff --git a/aoyuPlugIn/常成/fhtzd.cs b/aoyuPlugIn/常成/fhtzd.cs new file mode 100644 index 0000000..402a304 --- /dev/null +++ b/aoyuPlugIn/常成/fhtzd.cs @@ -0,0 +1,109 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.Validation; +using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; +//using System.Windows.Forms; +//using System.Data; + + +namespace aoyuPlugIn +{//AbstractValidator + [Description("发货通知单")] + public class xs_fhtzd : AbstractBillPlugIn + { + List> mycolor = new List>(); + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + if (e.BarItemKey == "tbApprove" || e.BarItemKey== "tbSplitApprove") + { + string fbillno = this.View.Model.GetValue("FBillNo").ToString(); + var sSql = String.Format("EXEC hz_fhtzd " + fbillno); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + if (dr.Count > 0) + { + + string t = "发货数量大于当前库存,不能审核!"; + foreach (var item in dr) + { + string k = "物料编号:" + item["FNUMBER"].ToString() + "|未出库数合计:" + item["wcks"].ToString() + + "|即时库存:" + item["jskc"].ToString(); + t = t + "\r\n" + k; + } + + List> colors = new List>(); + DynamicObjectCollection entrys = this.View.Model.GetEntityDataObject(this.View.BusinessInfo.GetEntity("FEntity")); + int rowNo = 0; + //80C8FE + foreach (var one in entrys) + { + string wl = ""; + wl = Convert.ToString((this.View.Model.GetValue("FMATERIALID", rowNo) as DynamicObject)["Number"]); + foreach (var item in dr) + { + if (item["FNUMBER"].ToString() == wl) + { colors.Add(new KeyValuePair(rowNo, "#80C8FE")); + mycolor.Add(new KeyValuePair(rowNo, "#FFFFFF")); + } + } + rowNo++; + } + EntryGrid grid = this.View.GetControl("FEntity"); + grid.SetRowBackcolor(colors); + + this.View.ShowMessage(t); + //setColor(); + e.Cancel = true; + } + + + } + } + public override void EntryBarItemClick(BarItemClickEventArgs e) + { + base.EntryBarItemClick(e); + if(e.BarItemKey.ToString()== "tbDeleteRow") + { + EntryGrid grid = this.View.GetControl("FEntity"); + + //int tol = this.Model.GetEntryRowCount("FEntity"); + int k=this.Model.GetEntryCurrentRowIndex("FEntity"); + + grid.SetRowBackcolor("#FFFFFF", k); + + } + //this.View.ShowMessage(e.BarItemKey.ToString()); + } + + + //设置行颜色 + void setColor() + { + List> colors = new List>(); + DynamicObjectCollection entrys = this.View.Model.GetEntityDataObject(this.View.BusinessInfo.GetEntity("FEntity")); + int rowNo = 0; + foreach(var one in entrys) + { + colors.Add(new KeyValuePair(rowNo, "#80C8FE")); + rowNo++; + } + EntryGrid grid = this.View.GetControl("FEntity"); + grid.SetRowBackcolor(colors); + } + } +} diff --git a/aoyuPlugIn/常成/fhtzd_lb.cs b/aoyuPlugIn/常成/fhtzd_lb.cs new file mode 100644 index 0000000..444282f --- /dev/null +++ b/aoyuPlugIn/常成/fhtzd_lb.cs @@ -0,0 +1,108 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.List.PlugIn; + +namespace aoyuPlugIn +{ + [Description("发货通知单列表审核")] + public class fhtzd_lb: AbstractListPlugIn + { + + //列表菜单事件 + public override void AfterBarItemClick(AfterBarItemClickEventArgs e) + { + base.AfterBarItemClick(e); + + if (e.BarItemKey == "tbSplitApprove" || e.BarItemKey == "tbApprove")//审核 + { + return; + if (this.ListView.SelectedRowsInfo.Count > 0) + + { + + for (int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) + { + //取指定行单据编号 + string fbillno = this.ListView.SelectedRowsInfo[i].BillNo; + string zt = this.ListView.SelectedRowsInfo[i].DataRow["FDOCUMENTSTATUS"].ToString(); + + if (zt == "D" || zt == "B") + { + var sSql = String.Format("EXEC hz_fhtzd " + fbillno); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + if (dr.Count > 0) + { + + string t = "发货数量大于当前库存,不能审核!"; + foreach (var item in dr) + { + string k = "物料编号:" + item["FNUMBER"].ToString() + "|未出库数合计:" + item["wcks"].ToString() + + "|即时库存:" + item["jskc"].ToString(); + t = t + "\r\n" + k; + } + this.View.ShowMessage(t); + } + } + } + + } + } + } + public override void BeforeDoOperation(BeforeDoOperationEventArgs e) + { + base.BeforeDoOperation(e); + if (e.Operation.FormOperation.Id == "ad221364-f04e-4b31-8a69-debd8f5066bc")//审核 + { + if (this.ListView.SelectedRowsInfo.Count > 0) + + { + + for (int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) + { + //取指定行单据编号 + string fbillno = this.ListView.SelectedRowsInfo[i].BillNo; + string zt = this.ListView.SelectedRowsInfo[i].DataRow["FDOCUMENTSTATUS"].ToString(); + + if (zt == "D" || zt == "B") + { + var sSql = String.Format("EXEC hz_fhtzd " + fbillno); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + if (dr.Count > 0) + { + + string t = "发货数量大于当前库存,不能审核!"; + foreach (var item in dr) + { + string k = "单据编号:"+fbillno+"中物料:" + item["FNUMBER"].ToString() + "|未出库数合计:" + item["wcks"].ToString() + + "|即时库存:" + item["jskc"].ToString(); + t = t + "\r\n" + k; + } + this.View.ShowMessage(t); + e.Cancel = true; + } + } + } + + } + + + } + + } + } +} diff --git a/aoyuPlugIn/接口/jk_cgcx.cs b/aoyuPlugIn/接口/jk_cgcx.cs new file mode 100644 index 0000000..fa6fbed --- /dev/null +++ b/aoyuPlugIn/接口/jk_cgcx.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + + +//using Newtonsoft.Json.Linq; +using Kingdee.BOS.WebApi.Client; + +namespace aoyuPlugIn +{ + class jk_cgcx + { + } +} diff --git a/aoyuPlugIn/服务插件校验数据/OnAddValidatorsHead.cs b/aoyuPlugIn/服务插件校验数据/OnAddValidatorsHead.cs new file mode 100644 index 0000000..bc0e7af --- /dev/null +++ b/aoyuPlugIn/服务插件校验数据/OnAddValidatorsHead.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Kingdee.BOS; +using Kingdee.BOS.Core; +//服务端 +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +//校验器 +using Kingdee.BOS.Core.Validation; +using System.ComponentModel; + + +namespace aoyuPlugIn +{ + [Description("校验器")] + [Kingdee.BOS.Util.HotUpdate] + + //继承操作服务插件 + public class OnAddValidatorsHead:AbstractOperationServicePlugIn + { + //OnPreparePropertys 数据加载前,确保需要的属性被加载 + //因为需要读取采购员信息,先必须加载 + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + //采购员FPurchaserId + e.FieldKeys.Add("FPurchaserId"); + //单据编号FBillNo + e.FieldKeys.Add("FBillNo"); + + //加载复选框 F_PAEZ_CheckBox + e.FieldKeys.Add("F_PAEZ_CheckBox"); + } + + //OnAddValidators操作执行前,加载操作校验器 + public override void OnAddValidators(AddValidatorsEventArgs e) + { + base.OnAddValidators(e); + TestValidator validator = new TestValidator(); + //是否需要校验,true需要 + validator.AlwaysValidate = true; + //校验单据头FBillHead + validator.EntityKey = "FBillHead"; + + //校验单据体FPOOrderEntry + validator.EntityKey = "FPOOrderEntry"; + + //加载校验器 + e.Validators.Add(validator); + } + //自定义校验器.派生:AbstractValidator + private class TestValidator:AbstractValidator + { + //重写方法 + //数组ExtendedDataEntity,传递全部的信息 + public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx) + { //for循环,读取数据 + foreach (ExtendedDataEntity obj in dataEntities) + { + + //判断复选框是否勾选 + if (!(bool)obj.DataEntity["F_PAEZ_CheckBox"]) + { //报错 + validateContext.AddError(obj.DataEntity, + new ValidationErrorInfo + ("",//出错的字段Key,可以空 + obj.DataEntity["Id"].ToString(),// 数据包内码,必填,后续操作会据此内码避开此数据包 + obj.DataEntityIndex, // 出错的数据包在全部数据包中的顺序 + obj.RowIndex,// 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0 + "001",//错误编码,可以任意设定一个字符,主要用于追查错误来源 + "单据编号" + obj.BillNo + "第" + obj.RowIndex + "行没有选择复选框",// 错误的详细提示信息 + "审核:" + obj.BillNo,// 错误的简明提示信息 + ErrorLevel.Error// 错误级别:警告、错误... + )); + } + } + } + } + + + } +} diff --git a/aoyuPlugIn/汇威/API新增单据/API_fygj.cs b/aoyuPlugIn/汇威/API新增单据/API_fygj.cs new file mode 100644 index 0000000..f758b0e --- /dev/null +++ b/aoyuPlugIn/汇威/API新增单据/API_fygj.cs @@ -0,0 +1,540 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json.Linq; +using Kingdee.BOS.WebApi.Client; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.WebApi.FormService; +using System.Web.Script.Serialization; +using Newtonsoft.Json; +using System.IO; + +namespace aoyuPlugIn +{ + [Description("费用归集新增")] + [Kingdee.BOS.Util.HotUpdate] + public class API_fygj:AbstractBillPlugIn + { + //调用API生成费用归集单--本机 + public Boolean SaveBill2() + { + string fbillno = this.View.Model.GetValue("FBillNo").ToString(); + + try + { + var sSql = String.Format("EXEC hw_get_wwdd '" + fbillno + "'"); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + try + { + JObject jsonRoot = new JObject(); + + // NeedUpDateFields: 哪些字段需要更新?为空则表示参数中全部字段,均需要更新 + jsonRoot.Add("NeedUpDateFields", new JArray("")); + + // Model: 单据详细数据参数 + JObject model = new JObject(); + jsonRoot.Add("Model", model); + + // 开始设置单据字段值 + // 必须设置的字段:主键、单据类型、主业务组织,各必录且没有设置默认值的字段 + // 特别注意:字段Key大小写是敏感的,建议从BOS设计器中,直接复制字段的标识属性过来 + + // 单据主键:必须填写,系统据此判断是新增还是修改单据;新增单据,填0 + model.Add("FID", 0); + + //核算体系编码 + JObject FACCTGSYSTEMID = new JObject(); + FACCTGSYSTEMID.Add("FNumber", "KJHSTX01_SYS"); + model.Add("FACCTGSYSTEMID", FACCTGSYSTEMID); + + //核算体组织码 + JObject FACCTGORGID = new JObject(); + FACCTGORGID.Add("FNumber", "107"); + + model.Add("FACCTGORGID", FACCTGORGID); + + //会计政策编码 + JObject FACCTPOLICYID = new JObject(); + FACCTPOLICYID.Add("FNumber", "KJZC02_SYS"); + + model.Add("FACCTPOLICYID", FACCTPOLICYID); + + + ////业务类型 + //model.Add("FBusinessType", "CG");//标准采购 + + + // 开始构建单据体参数:集合参数JArray + + JArray entryRows = new JArray(); + // 把单据体行集合,添加到model中,以单据体Key为标识 + string entityKey = "FEntity"; + model.Add(entityKey, entryRows); + // 通过循环创建单据体行:示例代码仅创建一行 + foreach (var item in dr) + { + // 添加新行,把新行加入到单据体行集合 + JObject entryRow = new JObject(); + entryRows.Add(entryRow); + + + // 给新行,设置关键字段值 + // 单据体主键:必须填写,系统据此判断是新增还是修改行,0是新增 + entryRow.Add("FEntryID", 0); + + //业务组织 + JObject FBIZORGID = new JObject(); + FBIZORGID.Add("FNumber", "107"); + + entryRow.Add("FBIZORGID", FBIZORGID); + + //费用项目编码 + JObject FEXPENSEITEMID = new JObject(); + FEXPENSEITEMID.Add("FNumber", "FYXM04_SYS"); + entryRow.Add("FEXPENSEITEMID", FEXPENSEITEMID); + + //this.Model.SetValue("F_ISSYQ", item[2], i); + //日期 + //entryRow.Add("FDATE", item[0].ToString()); + entryRow.Add("FDATE", "2019-5-31"); + //成本中心编码 + JObject FCOSTCENTERID = new JObject(); + FCOSTCENTERID.Add("FNumber", "CBZX000016"); + + entryRow.Add("FCOSTCENTERID", FCOSTCENTERID); + + + //金额 + entryRow.Add("FAMOUNT", item[1].ToString()); + + + + //产品编号 + JObject FPRODUCTID = new JObject(); + FPRODUCTID.Add("FNumber", item[2].ToString()); + entryRow.Add("FPRODUCTID", FPRODUCTID); + i++; + } + + // 调用Web API接口服务,保存 + object result = WebApiServiceCall.Save(this.Context, "CB_EXPENSECOLLECTION", jsonRoot.ToString()); + + string t = objzjs(result); + + if (strJson(t)) + { + sSql = string.Format("exec hw_fxwgd '{0}'", fbillno); + DBServiceHelper.Execute(this.Context, sSql); + this.View.ShowMessage("操作成功!"); + + return true; + } + else + { + this.View.ShowMessage("操作失败!" + t); + return false; + + } + + } + catch (Exception ex) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("程序运行遇到了未知的错误11:"); + sb.Append("错误提示:").AppendLine(ex.Message); + sb.Append("错误堆栈:").AppendLine(ex.StackTrace); + this.View.ShowMessage(sb.ToString()); + return false; + } + } + else + { + this.View.ShowMessage("无数据,请确认后再操作!"); + return false; + } + + } + catch (Exception ex) { this.View.ShowMessage("生成费用归集单时发生错误为:" + ex.Message); return false; } + + + } + //调用API生成费用归集单--汇威 + public Boolean SaveBill() + { + + string fbillno = this.View.Model.GetValue("FBillNo").ToString(); + + try + { + var sSql = String.Format("EXEC hw_get_wwdd '" + fbillno + "'"); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + try + { + JObject jsonRoot = new JObject(); + + // NeedUpDateFields: 哪些字段需要更新?为空则表示参数中全部字段,均需要更新 + jsonRoot.Add("NeedUpDateFields", new JArray("")); + + // Model: 单据详细数据参数 + JObject model = new JObject(); + jsonRoot.Add("Model", model); + + // 开始设置单据字段值 + // 必须设置的字段:主键、单据类型、主业务组织,各必录且没有设置默认值的字段 + // 特别注意:字段Key大小写是敏感的,建议从BOS设计器中,直接复制字段的标识属性过来 + + // 单据主键:必须填写,系统据此判断是新增还是修改单据;新增单据,填0 + model.Add("FID", 0); + + //核算体系编码 + JObject FACCTGSYSTEMID = new JObject(); + FACCTGSYSTEMID.Add("FNumber", "KJHSTX01_SYS"); + model.Add("FACCTGSYSTEMID", FACCTGSYSTEMID); + + //核算体组织码 + JObject FACCTGORGID = new JObject(); + //FACCTGORGID.Add("FNumber", "107"); + FACCTGORGID.Add("FNumber", "100"); + model.Add("FACCTGORGID", FACCTGORGID); + + //会计政策编码 + JObject FACCTPOLICYID = new JObject(); + //FACCTPOLICYID.Add("FNumber", "KJZC02_SYS"); + FACCTPOLICYID.Add("FNumber", "KJZC01_SYS"); + model.Add("FACCTPOLICYID", FACCTPOLICYID); + + + ////业务类型 + //model.Add("FBusinessType", "CG");//标准采购 + + + // 开始构建单据体参数:集合参数JArray + + JArray entryRows = new JArray(); + // 把单据体行集合,添加到model中,以单据体Key为标识 + string entityKey = "FEntity"; + model.Add(entityKey, entryRows); + // 通过循环创建单据体行:示例代码仅创建一行 + foreach (var item in dr) + { + // 添加新行,把新行加入到单据体行集合 + JObject entryRow = new JObject(); + entryRows.Add(entryRow); + + + // 给新行,设置关键字段值 + // 单据体主键:必须填写,系统据此判断是新增还是修改行,0是新增 + entryRow.Add("FEntryID", 0); + + //业务组织 + JObject FBIZORGID = new JObject(); + //FBIZORGID.Add("FNumber", "107"); + FBIZORGID.Add("FNumber", "100"); + entryRow.Add("FBIZORGID", FBIZORGID); + + //费用项目编码 + JObject FEXPENSEITEMID = new JObject(); + FEXPENSEITEMID.Add("FNumber", "FYXM04_SYS"); + entryRow.Add("FEXPENSEITEMID", FEXPENSEITEMID); + + //this.Model.SetValue("F_ISSYQ", item[2], i); + //日期 + entryRow.Add("FDATE", item[0].ToString()); + //entryRow.Add("FDATE", "2019-5-31"); + //成本中心编码 + JObject FCOSTCENTERID = new JObject(); + //FCOSTCENTERID.Add("FNumber", "CBZX000016"); + FCOSTCENTERID.Add("FNumber", "CBZX000049"); + entryRow.Add("FCOSTCENTERID", FCOSTCENTERID); + + + //金额 + entryRow.Add("FAMOUNT", item[1].ToString()); + + + + //产品编号 + JObject FPRODUCTID = new JObject(); + FPRODUCTID.Add("FNumber", item[2].ToString()); + entryRow.Add("FPRODUCTID", FPRODUCTID); + i++; + } + + // 调用Web API接口服务,保存 + var result = WebApiServiceCall.Save(this.Context, "CB_EXPENSECOLLECTION", jsonRoot.ToString()); + + + string t = objzjs(result); + + if (strJson(t)) + { + sSql = string.Format("exec hw_fxwgd '{0}'", fbillno); + DBServiceHelper.Execute(this.Context, sSql); + this.View.ShowMessage("操作成功1!"); + return true; + } + else + { + this.View.ShowMessage("操作失败!" + t); + return false; + + } + + } + catch (Exception ex) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("程序运行遇到了未知的错误11:"); + sb.Append("错误提示:").AppendLine(ex.Message); + sb.Append("错误堆栈:").AppendLine(ex.StackTrace); + this.View.ShowMessage(sb.ToString()); + return false; + } + } + else + { + this.View.ShowMessage("无数据,请确认后再操作!"); + return false; + } + + } + catch (Exception ex) { this.View.ShowMessage("生成费用归集单时发生错误为:" + ex.Message); return false; } + + + } + //object转json + public string objzjs(Object obj) + { + JavaScriptSerializer js = new JavaScriptSerializer(); + string myJson = js.Serialize(obj); + return myJson; + } + // 将字符串转换成Json格式显示 + //字符串转json + public bool strJson(string t) + { + string jsonText = t; + // "{"shenzheng":"深圳","beijing":"北京","shanghai":[{"zj1":"zj11","zj2":"zj22"},"zjs"]}"; + + JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);//或者JObject jo = JObject.Parse(jsonText); + //string zone = jo["shenzheng"].ToString();//输出 "深圳" + //string zone_en = jo["shanghai"].ToString();//输出 "[{"zj1":"zj11","zj2":"zj22"},"zjs"]" + //string zj1 = jo["shanghai"][1].ToString();//输出 "zjs" + //Console.WriteLine(jo); + + string tt = jo["Result"].ToString(); + JObject jo1 = (JObject)JsonConvert.DeserializeObject(tt); + string t3 = jo1["ResponseStatus"].ToString(); + JObject jo2 = (JObject)JsonConvert.DeserializeObject(t3); + string t4 = jo2["IsSuccess"].ToString(); + + if (t4.ToLower() == "true") + return true; + else + return false; + } + + + public Boolean SaveBill6() + { + string fbillno = this.View.Model.GetValue("FBillNo").ToString(); + + try + { + var sSql = String.Format("EXEC hw_get_wwdd '" + fbillno + "'"); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + string cwts = "-"; + try + { + string url = "https://5f1nococmwz67jl/K3Cloud/"; + string dbid = "5c85f54f52a132"; + string user = "demo"; + string pwd = "888888"; + + + url = "http://61.145.228.58:9656/k3cloud"; + + dbid = "5e0f100d492605"; + + user = "Hezhiq"; + + pwd = "abc123++"; + + ApiClient client = new ApiClient(url); + var loginResult = client.Login( + dbid, + user, + pwd, + 2052); + string result = "登录失败,请检查与站点地址、数据中心Id,用户名及密码!"; + + // 登陆成功,开始保存数据 + if (loginResult == true) + { + // 开始构建Web API参数对象 + // 参数根对象:包含Creator、NeedUpDateFields、Model这三个子参数 + // using Newtonsoft.Json.Linq; // (需引用Newtonsoft.Json.dll) + JObject jsonRoot = new JObject(); + + // Creator: 创建用户 + //jsonRoot.Add("Creator", "Demo"); + + // NeedUpDateFields: 哪些字段需要更新?为空则表示参数中全部字段,均需要更新 + jsonRoot.Add("NeedUpDateFields", new JArray("")); + + // Model: 单据详细数据参数 + JObject model = new JObject(); + jsonRoot.Add("Model", model); + + // 开始设置单据字段值 + // 必须设置的字段:主键、单据类型、主业务组织,各必录且没有设置默认值的字段 + // 特别注意:字段Key大小写是敏感的,建议从BOS设计器中,直接复制字段的标识属性过来 + + + // 单据主键:必须填写,系统据此判断是新增还是修改单据;新增单据,填0 + model.Add("FID", 0); + + //核算体系编码 + JObject FACCTGSYSTEMID = new JObject(); + FACCTGSYSTEMID.Add("FNumber", "KJHSTX01_SYS"); + model.Add("FACCTGSYSTEMID", FACCTGSYSTEMID); + + //核算体组织码 + JObject FACCTGORGID = new JObject(); + FACCTGORGID.Add("FNumber", "107"); + model.Add("FACCTGORGID", FACCTGORGID); + + //会计政策编码 + JObject FACCTPOLICYID = new JObject(); + FACCTPOLICYID.Add("FNumber", "KJZC02_SYS"); + model.Add("FACCTPOLICYID", FACCTPOLICYID); + + + ////业务类型 + //model.Add("FBusinessType", "CG");//标准采购 + + + // 开始构建单据体参数:集合参数JArray + + JArray entryRows = new JArray(); + // 把单据体行集合,添加到model中,以单据体Key为标识 + string entityKey = "FEntity"; + model.Add(entityKey, entryRows); + // 通过循环创建单据体行:示例代码仅创建一行 + foreach (var item in dr) + { + //string k = item[0].ToString(); + //this.Model.SetValue("F_YGNM", item[0], i); + //this.Model.SetValue("F_ISXYG", item[1], i); + //this.Model.SetValue("F_ISSYQ", item[2], i); + + + + + // 添加新行,把新行加入到单据体行集合 + JObject entryRow = new JObject(); + entryRows.Add(entryRow); + + + // 给新行,设置关键字段值 + // 单据体主键:必须填写,系统据此判断是新增还是修改行 + entryRow.Add("FEntryID", 0); + + //业务组织 + JObject FBIZORGID = new JObject(); + FBIZORGID.Add("FNumber", "107"); + entryRow.Add("FBIZORGID", FBIZORGID); + + //费用项目编码 + JObject FEXPENSEITEMID = new JObject(); + FEXPENSEITEMID.Add("FNumber", "FYXM04_SYS"); + entryRow.Add("FEXPENSEITEMID", FEXPENSEITEMID); + + //this.Model.SetValue("F_ISSYQ", item[2], i); + //日期 + string tm9 = DateTime.Today.ToShortDateString(); + entryRow.Add("FDATE", tm9); + + //成本中心编码 + JObject FCOSTCENTERID = new JObject(); + FCOSTCENTERID.Add("FNumber", "CBZX000016"); + entryRow.Add("FCOSTCENTERID", FCOSTCENTERID); + + + //金额 + entryRow.Add("FAMOUNT", item[1].ToString()); + + + //产品编号 + JObject FPRODUCTID = new JObject(); + FPRODUCTID.Add("FNumber", item[2].ToString()); + entryRow.Add("FPRODUCTID", FPRODUCTID); + i++; + } + + cwts = "准备执行费用归集"+jsonRoot.ToString(); + + // 调用Web API接口服务,保存 + result = client.Execute( + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save", + new object[] { "CB_EXPENSECOLLECTION", jsonRoot.ToString() }); + } + this.View.ShowMessage("操作成功!"); + return true; + } + catch (Exception ex) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("程序运行遇到了未知的错误56:"+cwts); + sb.Append("错误提示:").AppendLine(ex.Message); + sb.Append("错误堆栈:").AppendLine(ex.StackTrace); + this.View.ShowMessage(sb.ToString()); + return false; + } + } + else + { + this.View.ShowMessage("无数据,请确认后再操作!"); + return false; + } + + } + catch (Exception ex) { this.View.ShowMessage("生成费用归集单时发生错误为:" + ex.Message); return false; } + + + } + //单据头菜单点击 + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + if (e.BarItemKey == "tbfygj") + { + SaveBill(); + } + + } + } +} diff --git a/aoyuPlugIn/汇威/API新增单据/add_dj.cs b/aoyuPlugIn/汇威/API新增单据/add_dj.cs new file mode 100644 index 0000000..8c3209e --- /dev/null +++ b/aoyuPlugIn/汇威/API新增单据/add_dj.cs @@ -0,0 +1,150 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; + + +using Kingdee.BOS.Core; + +using Kingdee.BOS.Core.Metadata.ConvertElement; +using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; +using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; + +using Kingdee.BOS.Core.Metadata.FormElement; + +using Kingdee.BOS.Contracts; +using Kingdee.BOS.App; +namespace aoyuPlugIn +{ + [Description("新增单据")] + public class add_dj: AbstractConvertPlugIn + { + + + /// 主单据体的字段携带完毕,与源单的关联关系创建好之后,触发此事件 + + public override void OnAfterCreateLink(CreateLinkEventArgs e) + { + var targetRows = e.TargetExtendedDataEntities.FindByEntityKey("FEntity"); + + foreach (var targetRow in targetRows) + { + // 获取每行数据,对应的源单行 + var sourceRows = targetRow["ConvertSource"] as List; + } + + // 预先获取一些必要的元数据,后续代码要用到: + // 源单第二单据体 + Entity srcSecondEntity = e.SourceBusinessInfo.GetEntity("FEntity2"); + + // 目标单第一单据体 + Entity mainEntity = e.TargetBusinessInfo.GetEntity("FEntity"); + + // 目标单第二单据体 + Entity secondEntity = e.TargetBusinessInfo.GetEntity("FEntity2"); + + // 目标单关联子单据体 + Entity linkEntity = null; + Form form = e.TargetBusinessInfo.GetForm(); + if (form.LinkSet != null + && form.LinkSet.LinkEntitys != null + && form.LinkSet.LinkEntitys.Count != 0) + { + linkEntity = e.TargetBusinessInfo.GetEntity( + form.LinkSet.LinkEntitys[0].Key); + } + + if (linkEntity == null) + { + return; + } + + // 获取生成的全部下游单据 + ExtendedDataEntity[] billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"); + + // 对下游单据,逐张单据进行处理 + foreach (var item in billDataEntitys) + { + DynamicObject dataObject = item.DataEntity; + + // 定义一个集合,用于收集本单对应的源单内码 + HashSet srcBillIds = new HashSet(); + + // 开始到主单据体中,读取关联的源单内码 + DynamicObjectCollection mainEntryRows = + mainEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection; + foreach (var mainEntityRow in mainEntryRows) + { + DynamicObjectCollection linkRows = + linkEntity.DynamicProperty.GetValue(mainEntityRow) as DynamicObjectCollection; + foreach (var linkRow in linkRows) + { + long srcBillId = Convert.ToInt64(linkRow["SBillId"]); + if (srcBillId != 0 + && srcBillIds.Contains(srcBillId) == false) + { + srcBillIds.Add(srcBillId); + } + } + } + if (srcBillIds.Count == 0) + { + continue; + } + // 开始加载源单第二单据体上的字段 + + // 确定需要加载的源单字段(仅加载需要携带的字段) + List selector = new List(); + selector.Add(new SelectorItemInfo("F_JD_Text")); + // TODO: 继续添加其他需要携带的字段,示例代码略 + // 设置过滤条件 + string filter = string.Format(" {0} IN ({1}) ", + e.SourceBusinessInfo.GetForm().PkFieldName, + string.Join(",", srcBillIds)); + OQLFilter filterObj = OQLFilter.CreateHeadEntityFilter(filter); + + // 读取源单 + IViewService viewService = ServiceHelper.GetService(); + var srcBillObjs = viewService.Load(this.Context, + e.SourceBusinessInfo.GetForm().Id, + selector, + filterObj); + + // 开始把源单单据体数据,填写到目标单上 + DynamicObjectCollection secondEntryRows = + secondEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection; + secondEntryRows.Clear(); // 删除空行 + + foreach (var srcBillObj in srcBillObjs) + { + DynamicObjectCollection srcEntryRows = + srcSecondEntity.DynamicProperty.GetValue(srcBillObj) as DynamicObjectCollection; + + foreach (var srcEntryRow in srcEntryRows) + { + // 目标单添加新行,并接受源单字段值 + DynamicObject newRow = new DynamicObject(secondEntity.DynamicObjectType); + secondEntryRows.Add(newRow); + // 填写字段值 + newRow["F_JD_Text"] = srcEntryRow["F_JD_Text"]; + // TODO: 逐个填写其他字段值,示例代码略 + } + } + } + } + + } +} diff --git a/aoyuPlugIn/汇威/JJ_show_yggzmx.cs b/aoyuPlugIn/汇威/JJ_show_yggzmx.cs new file mode 100644 index 0000000..cfa80fc --- /dev/null +++ b/aoyuPlugIn/汇威/JJ_show_yggzmx.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.ComponentModel; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.ComponentModel; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; + +using Kingdee.BOS; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.ServiceHelper; + +namespace aoyuPlugIn +{ + + [Description("显示员工工资明细")] + public class JJ_show_yggzmx : AbstractDynamicFormPlugIn + { + string _ygID = ""; + string _month = ""; + string _year = ""; + string _day = ""; + public override void AfterBindData(EventArgs e) + { + base.AfterBindData(e); + try + { + Int64 ygID = Convert.ToInt64(this.View.OpenParameter.GetCustomParameter("ygid")); + _ygID = ygID.ToString(); + string y = this.View.OpenParameter.GetCustomParameter("FYEAR").ToString(); + _year = y; + string m = this.View.OpenParameter.GetCustomParameter("FMONTH").ToString(); + _month = m; + _day = this.View.OpenParameter.GetCustomParameter("FDAY").ToString(); + + loadData(); + + + + } + catch (Exception ex) { this.View.ShowMessage("加载数据时发生错误中为:" + ex.Message); } + //this.View.ShowMessage(mid.ToString()); + + } + void loadData() + { + show_yg_mx();//按员工显示 + + } + //按员工显示 + //按日期显示 + //填写员工姓名 + void show_yg_mx() + { + try + { + if (_day != "") return; + this.View.Model.SetValue("FRG", 0); + this.View.UpdateView("FRG"); + + this.View.Model.SetValue("FYGNO", _ygID); + this.View.UpdateView("FYGNO"); + this.View.UpdateView("FYGNM"); + this.View.Model.SetValue("FYEAR", _year); + this.View.UpdateView("FYEAR"); + this.View.Model.SetValue("FMONTH", _month); + this.View.UpdateView("FMONTH"); + } + catch (Exception ex) { this.View.ShowMessage("加载数据时发生错误中为:" + ex.Message); } + } + } +} diff --git a/aoyuPlugIn/汇威/MJ_jdhb.cs b/aoyuPlugIn/汇威/MJ_jdhb.cs new file mode 100644 index 0000000..5dbfa57 --- /dev/null +++ b/aoyuPlugIn/汇威/MJ_jdhb.cs @@ -0,0 +1,54 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; + +namespace aoyuPlugIn +{ + [Description("模具进度汇报反写进度单")] + public class MJ_jdhb : AbstractBillPlugIn + { + //表单菜单事件 + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + //this.View.ShowMessage("Hello World:" + e.BarItemKey.ToString()); + string t = ""; + if (e.BarItemKey == "tbSplitApprove"||e.BarItemKey== "tbApprove")//审核 + { + t =this.View.Model.GetValue("FBillNo").ToString(); + fxjdb(t, "1"); + + }else if (e.BarItemKey == "tbReject")//反审核 + { + t = this.View.Model.GetValue("FBillNo").ToString(); + fxjdb(t, "0"); + } + } + //反写进度表 + void fxjdb(string fbillno, string issh) + { + try + { + var sSql = String.Format("EXEC hw_mj_jdhbfxjdd " + fbillno + "," + issh); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + } + catch (Exception ex) { this.View.ShowMessage("反写进度表时发生错误为:" + ex.Message); } + } + + + } +} diff --git a/aoyuPlugIn/汇威/MJ_jdhb_lb.cs b/aoyuPlugIn/汇威/MJ_jdhb_lb.cs new file mode 100644 index 0000000..9cd1d90 --- /dev/null +++ b/aoyuPlugIn/汇威/MJ_jdhb_lb.cs @@ -0,0 +1,78 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.List.PlugIn; + +namespace aoyuPlugIn +{ + [Description("模具进度汇报列表反写进度单")] + public class MJ_jdhb_lb:AbstractListPlugIn + { + void fxjdb(string issh) + { + try + { + //string fbillno = ""; + if(this.ListView.SelectedRowsInfo.Count >0) + { + for(int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) + { + //取指定行单据编号 + string fbillno = this.ListView.SelectedRowsInfo[i].BillNo; + string zt = this.ListView.SelectedRowsInfo[i].DataRow["FDOCUMENTSTATUS"].ToString(); + if (issh == "1") + { + if (zt == "D" || zt == "B") + { + var sSql = String.Format("EXEC hw_mj_jdhbfxjdd " + fbillno + "," + issh); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + } + } + else + { + if (zt == "C") + { + var sSql = String.Format("EXEC hw_mj_jdhbfxjdd " + fbillno + "," + issh); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + } + } + + + } + } + } + catch (Exception ex) { this.View.ShowMessage("反写进度表时发生错误为:" + ex.Message); } + } + //列表菜单事件 + public override void AfterBarItemClick(AfterBarItemClickEventArgs e) + { + base.AfterBarItemClick(e); + + if (e.BarItemKey == "tbSplitApprove" || e.BarItemKey == "tbApprove")//审核 + { + + fxjdb("1"); + + } + else if (e.BarItemKey == "tbReject")//反审核 + { + + fxjdb("0"); + } + } + } +} diff --git a/aoyuPlugIn/汇威/MJ_qtyf.cs b/aoyuPlugIn/汇威/MJ_qtyf.cs new file mode 100644 index 0000000..4ce28e1 --- /dev/null +++ b/aoyuPlugIn/汇威/MJ_qtyf.cs @@ -0,0 +1,206 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json.Linq; +using Kingdee.BOS.WebApi.Client; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; + +namespace aoyuPlugIn +{ + [Description("其他应付生成费用归集")] + public class MJ_qtyf : AbstractBillPlugIn + { + //调用API生成费用归集单 + public Boolean SaveBill() + { + string fbillno = this.View.Model.GetValue("FBillNo").ToString(); + + try + { + var sSql = String.Format("EXEC hw_get_qtyf '" + fbillno + "'"); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + try + { + string url = "https://hui-wei.ik3cloud.com/K3cloud/"; + string dbid = "5c85f54f52a132"; + string user = "wwj01"; + string pwd = "wwj@123456"; + + + url = "http://61.145.228.58:9656/k3cloud"; + + dbid = "5e0f100d492605"; + + user = "Hezhiq"; + + pwd = "abc123++"; + + ApiClient client = new ApiClient(url); + var loginResult = client.Login( + dbid, + user, + pwd, + 2052); + string result = "登录失败,请检查与站点地址、数据中心Id,用户名及密码!"; + + // 登陆成功,开始保存数据 + if (loginResult == true) + { + // 开始构建Web API参数对象 + // 参数根对象:包含Creator、NeedUpDateFields、Model这三个子参数 + // using Newtonsoft.Json.Linq; // (需引用Newtonsoft.Json.dll) + JObject jsonRoot = new JObject(); + + // Creator: 创建用户 + //jsonRoot.Add("Creator", "Demo"); + + // NeedUpDateFields: 哪些字段需要更新?为空则表示参数中全部字段,均需要更新 + jsonRoot.Add("NeedUpDateFields", new JArray("")); + + // Model: 单据详细数据参数 + JObject model = new JObject(); + jsonRoot.Add("Model", model); + + // 开始设置单据字段值 + // 必须设置的字段:主键、单据类型、主业务组织,各必录且没有设置默认值的字段 + // 特别注意:字段Key大小写是敏感的,建议从BOS设计器中,直接复制字段的标识属性过来 + + + // 单据主键:必须填写,系统据此判断是新增还是修改单据;新增单据,填0 + model.Add("FID", 0); + + //核算体系编码 + JObject FACCTGSYSTEMID = new JObject(); + FACCTGSYSTEMID.Add("FNumber", "KJHSTX01_SYS"); + model.Add("FACCTGSYSTEMID", FACCTGSYSTEMID); + + //核算体组织码 + JObject FACCTGORGID = new JObject(); + FACCTGORGID.Add("FNumber", "107"); + model.Add("FACCTGORGID", FACCTGORGID); + + //会计政策编码 + JObject FACCTPOLICYID = new JObject(); + FACCTPOLICYID.Add("FNumber", "KJZC02_SYS"); + model.Add("FACCTPOLICYID", FACCTPOLICYID); + + + ////业务类型 + //model.Add("FBusinessType", "CG");//标准采购 + + + // 开始构建单据体参数:集合参数JArray + + JArray entryRows = new JArray(); + // 把单据体行集合,添加到model中,以单据体Key为标识 + string entityKey = "FEntity"; + model.Add(entityKey, entryRows); + // 通过循环创建单据体行:示例代码仅创建一行 + foreach (var item in dr) + { + //string k = item[0].ToString(); + //this.Model.SetValue("F_YGNM", item[0], i); + //this.Model.SetValue("F_ISXYG", item[1], i); + //this.Model.SetValue("F_ISSYQ", item[2], i); + + + + + // 添加新行,把新行加入到单据体行集合 + JObject entryRow = new JObject(); + entryRows.Add(entryRow); + + + // 给新行,设置关键字段值 + // 单据体主键:必须填写,系统据此判断是新增还是修改行 + entryRow.Add("FEntryID", 0); + + //业务组织 + JObject FBIZORGID = new JObject(); + FBIZORGID.Add("FNumber", "107"); + entryRow.Add("FBIZORGID", FBIZORGID); + + //费用项目编码 + JObject FEXPENSEITEMID = new JObject(); + FEXPENSEITEMID.Add("FNumber", "FYXM04_SYS"); + entryRow.Add("FEXPENSEITEMID", FEXPENSEITEMID); + + //this.Model.SetValue("F_ISSYQ", item[2], i); + //日期 + entryRow.Add("FDATE", item[1].ToString()); + + //成本中心编码 + JObject FCOSTCENTERID = new JObject(); + FCOSTCENTERID.Add("FNumber", "CBZX000016"); + entryRow.Add("FCOSTCENTERID", FCOSTCENTERID); + + + //金额 + entryRow.Add("FAMOUNT", item[1].ToString()); + + + //产品编号 + JObject FPRODUCTID = new JObject(); + FPRODUCTID.Add("FNumber", item[2].ToString()); + entryRow.Add("FPRODUCTID", FPRODUCTID); + i++; + } + + // 调用Web API接口服务,保存 + result = client.Execute( + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save", + new object[] { "CB_EXPENSECOLLECTION", jsonRoot.ToString() }); + } + this.View.ShowMessage("操作成功!"); + return true; + } + catch (Exception ex) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("程序运行遇到了未知的错误:"); + sb.Append("错误提示:").AppendLine(ex.Message); + sb.Append("错误堆栈:").AppendLine(ex.StackTrace); + this.View.ShowMessage(sb.ToString()); + return false; + } + } + else + { + this.View.ShowMessage("无数据,请确认后再操作!"); + return false; + } + + } + catch (Exception ex) { this.View.ShowMessage("生成费用归集单时发生错误为:" + ex.Message); return false; } + + + } + //单据头菜单点击 + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + if (e.BarItemKey == "tbfygj") + { + SaveBill(); + } + + } + } +} diff --git a/aoyuPlugIn/汇威/MJ_xtqtrk.cs b/aoyuPlugIn/汇威/MJ_xtqtrk.cs new file mode 100644 index 0000000..6ca7fae --- /dev/null +++ b/aoyuPlugIn/汇威/MJ_xtqtrk.cs @@ -0,0 +1,553 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.K3.Core.MFG.EntityHelper; +using Kingdee.K3.FIN.App.Core; +using System.ComponentModel; +using Kingdee.BOS; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.Const; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.Operation; +using Kingdee.BOS.Core.List; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.ConvertElement; +using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs; +using Kingdee.BOS.Core.Interaction; +using Kingdee.BOS.Core.Validation; +using Kingdee.BOS.Contracts; +using Kingdee.BOS.App; +using Kingdee.BOS.Orm; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.App.Data; +using System.Data; +using System.Collections; +using Kingdee.BOS.Core.Metadata.EntityElement; + +namespace aoyuPlugIn +{ + //其他出库单审核时自动生成其他出库单,在审核操作的服务插件中 + [Description("自动生成其他入库单")]//自动下推生产审核的调入调出单STK_MISCELLANEOUS + public class MJ_xtqtrk : AbstractOperationServicePlugIn + { + private string entityKey = "FEntity";//其他出库单单据标识 + int rowIndex; + string scddfid; + int scddRow; + //public override void OnPreparePropertys(PreparePropertysEventArgs e) + //{ + // base.OnPreparePropertys(e); + // e.FieldKeys.Add("F_QBOY_JKDH");//缴库单号 + // e.FieldKeys.Add("F_QBOY_YDEntryID");//生产订单单据体ID + // e.FieldKeys.Add("F_QBOY_YDHH");//生产订单行号 + // e.FieldKeys.Add("F_QBOY_SKYTLed");//已退量 + // e.FieldKeys.Add("F_QBOY_SKL");//水口量 + // e.FieldKeys.Add("F_QBOY_SKYTL");//应退量 + + + //} + + /// + /// 审核操作完成,单据状态已经更改,但是还没有提交事务时,触发此事件: + /// + /// + /// + /// 因为此事件触发时,还在事务保护中,因此适合进行数据同步; + /// 审核后自动下推,如果下推失败,需要放弃审核,因此,放在此事件中处理(事务中) + /// + public override void EndOperationTransaction(EndOperationTransactionArgs e) + { + + Entity entityObj = this.BusinessInfo.GetEntity(entityKey); + foreach (DynamicObject d in e.DataEntitys) + { + if (d["BillEntry"] == null) + { + return; + } + + + DynamicObjectCollection FentryRow = d["BillEntry"] as DynamicObjectCollection; + //scddfid = FentryRow[0][7].ToString();//生产订单单据体ID + //scddRow = Convert.ToInt32(FentryRow[0][6]);//生产订单行号 + + //if (Convert.ToDouble(FentryRow[0][5]) + Convert.ToDouble(FentryRow[0][4]) < Convert.ToDouble(FentryRow[0][3])) + //{ + // return; + //} + + //String sSql2 = String.Format(@" select FID FROM T_PRD_MO where FBILLNO='{0}' ", FentryRow[0][2]); + //DynamicObjectCollection dr = DBUtils.ExecuteDynamicObject(this.Context, sSql2); + + + + + this.DoPush("STK_MisDelivery", "STK_MISCELLANEOUS", (from p in e.DataEntitys select Convert.ToInt64(p[0])).ToList(), e); + //using (IDataReader dr = DBUtils.ExecuteReader(this.Context, sSql2)) + //{ + + // while (dr.Read()) + // { + // var scddfid = Convert.ToInt64(dr["F_PCDN_INMD"]); + // //this.DoPush("k246ba461a1494a348dc7c9996f609b60", "PRD_INSTOCK", + // // (from p in e.DataEntitys select Convert.ToInt64(p[0])).ToList(), e); + // } + // dr.Close(); + + + //} + } + } + + + //this.DoPush("k246ba461a1494a348dc7c9996f609b60", "PRD_INSTOCK", + // (from p in e.DataEntitys select Convert.ToInt64(p[0])).ToList(), e); + + + + /// + /// 自动下推并保存 + /// + /// 源单FormId + /// 目标单FormId + /// 源单内码 + private void DoPush(string sourceFormId, string targetFormId, List sourceBillIds, EndOperationTransactionArgs e) + { + // 获取源单与目标单的转换规则 + IConvertService convertService = ServiceHelper.GetService(); + var rules = convertService.GetConvertRules(this.Context, sourceFormId, targetFormId); + if (rules == null || rules.Count == 0) + { + throw new KDBusinessException("", string.Format("未找到{0}到{1}之间,启用的转换规则,无法自动下推!", sourceFormId, targetFormId)); + } + // 取勾选了默认选项的规则 + // var rule = rules.FirstOrDefault(t => t.IsDefault); + // 如果无默认规则,则取第一个 + // if (rule == null) + //{ + // rule = rules[0]; + // } + //门店至运营中心,或运营中心至门店 + + //if (true && rules.Count > 0) + if (true && rules.Count > 1) + { + //var rule = rules[0]; + var rule = rules[1]; + // 开始构建下推参数: + // 待下推的源单数据行 + List srcSelectedRows = new List(); + + + foreach (var billId in sourceBillIds) + {// 把待下推的源单内码,逐个创建ListSelectedRow对象,添加到集合中 + srcSelectedRows.Add(new ListSelectedRow(billId.ToString(), string.Empty, 0, sourceFormId)); + + + // 特别说明:上述代码,是整单下推; + // 如果需要指定待下推的单据体行,请参照下句代码,在ListSelectedRow中,指定EntryEntityKey以及EntryId + //srcSelectedRows.Add(new ListSelectedRow(billId.ToString(), entityId, 0, sourceFormId) { EntryEntityKey = "FEntity" }); + } + + + + + + + // 指定目标单单据类型:情况比较复杂,没有合适的案例做参照,示例代码暂略,直接留空,会下推到默认的单据类型 + string targetBillTypeId = string.Empty; + // 指定目标单据主业务组织:情况更加复杂,需要涉及到业务委托关系,缺少合适案例,示例代码暂略 + // 建议在转换规则中,配置好主业务组织字段的映射关系:运行时,由系统根据映射关系,自动从上游单据取主业务组织,避免由插件指定 + long targetOrgId = 0; + // 自定义参数字典:把一些自定义参数,传递到转换插件中;转换插件再根据这些参数,进行特定处理 + Dictionary custParams = new Dictionary(); + // 组装下推参数对象 + PushArgs pushArgs = new PushArgs(rule, srcSelectedRows.ToArray()) + { + TargetBillTypeId = targetBillTypeId, + TargetOrgId = targetOrgId, + CustomParams = custParams + }; + + OperateOption option = OperateOption.Create(); + option.SetVariableValue(BOSConst.CST_ConvertValidatePermission, true); + // 调用下推服务,生成下游单据数据包 + ConvertOperationResult convResult = convertService.Push(this.Context, pushArgs, OperateOption.Create()); + + // 开始处理下推结果: + // 获取下推生成的下游单据数据包 + DynamicObject[] destObjs = (from p in convResult.TargetDataEntities select p.DataEntity).ToArray(); + if (destObjs.Length == 0) + { + // 未下推成功目标单,抛出错误,中断审核 + throw new KDBusinessException("", string.Format("由{0}自动下推{1},没有成功生成数据包,自动下推失败!", sourceFormId, targetFormId)); + } + + // 对下游单据数据包,进行适当的修订,以避免关键字段为空,自动保存失败 + // 示例代码略 + // 读取目标单据元数据 + IMetaDataService metaService = ServiceHelper.GetService(); + FormMetadata destFormMetadata = metaService.Load(this.Context, targetFormId) as FormMetadata; + // 构建保存操作参数:设置操作选项值,忽略交互提示 + OperateOption saveOption = OperateOption.Create(); + // 忽略全部需要交互性质的提示,直接保存; + saveOption.SetIgnoreWarning(true); // 忽略交互提示 + saveOption.SetInteractionFlag(this.Option.GetInteractionFlag()); // 如果有交互,传入用户选择的交互结果 + // using Kingdee.BOS.Core.Interaction; + saveOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag()); + + // 上一步操作成功的目标单 + List lastSuccessIdLst = new List(); + // 本操作成功的目标单 + List successIdLst = new List(); + // 操作失败的目标单 + List failedobjs = new List(); + // 操作结果 + IOperationResult result = new OperationResult(); + // 错误信息 + List errorLst = new List(); + + + ////////////////////////////// 暂存 ////////////////////////////// + IDraftService service = Kingdee.BOS.Contracts.ServiceFactory.GetService(this.Context); + IOperationResult innerResult = service.Draft(this.Context, destFormMetadata.BusinessInfo, destObjs); + // 暂存成功的目标单 + successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); + // 暂存不通过的目标单 + failedobjs = destObjs.Where(o => !successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToList(); + if (failedobjs != null && !failedobjs.IsEmpty()) + { + errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "DraftError", string.Format("{0}暂存失败:{1}", + string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); + } + // 暂存不通过,则操作失败 + if (successIdLst.IsEmpty()) + { + result.IsSuccess = false; + } + e.DataEntitys = e.DataEntitys.Where(o => successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToArray(); + ////////////////////////////// 保存 ////////////////////////////// + if (!successIdLst.IsEmpty()) + { + lastSuccessIdLst = successIdLst; + innerResult = AppServiceContext.SaveService.Save(this.Context, destFormMetadata.BusinessInfo, destObjs.Where(o => successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToArray(), option); + // 保存成功的目标单 + successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); + // 校验不通过的目标单 + failedobjs = destObjs.Where(o => lastSuccessIdLst.Contains(o.GetDynamicObjectItemValue("Id")) + && !successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToList(); + if (failedobjs != null && !failedobjs.IsEmpty()) + { + errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "SaveError", string.Format("{0}保存失败,已暂存:{1}", + string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); + } + } + + + + + + + ////////////////////////////// 提交 ////////////////////////////// + if (!successIdLst.IsEmpty()) + { + lastSuccessIdLst = successIdLst; + innerResult = AppServiceContext.SubmitService.Submit(this.Context, destFormMetadata.BusinessInfo, successIdLst.ToArray(), "Submit", option); + // 提交成功的目标单 + successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); + // 校验不通过的目标单 + failedobjs = destObjs.Where(o => lastSuccessIdLst.Contains(o.GetDynamicObjectItemValue("Id")) + && !successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToList(); + if (failedobjs != null && !failedobjs.IsEmpty()) + { + errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "SubmitError", string.Format("{0}提交失败,已保存:{1}", + string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); + } + } + ////////////////////////////// 审核 ////////////////////////////// + if (!successIdLst.IsEmpty()) + { + lastSuccessIdLst = successIdLst; + List> pkIds = new List>(); + foreach (var o in successIdLst) + { + pkIds.Add(new KeyValuePair(o, "")); + } + //审核 + List paraAudit = new List(); + //1审核通过 + paraAudit.Add("1"); + //审核意见 + paraAudit.Add(""); + innerResult = AppServiceContext.SetStatusService.SetBillStatus(this.Context, destFormMetadata.BusinessInfo, pkIds, paraAudit, "Audit", option); + // 审核成功的目标单 + successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); + // 审核不通过的目标单 + failedobjs = destObjs.Where(o => lastSuccessIdLst.Contains(o.GetDynamicObjectItemValue("Id")) + && !successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToList(); + if (failedobjs != null && !failedobjs.IsEmpty()) + { + errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "AuditError", string.Format("{0}审核失败,已提交:{1}", + string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); + } + } + ////////////////////////////// 构造错误信息 ////////////////////////////// + if (!errorLst.IsNullOrEmpty()) + { + result.ValidationErrors.AddRange(errorLst); + } + // 将操作结果合并到空操作结果中 + this.OperationResult.IsSuccess = result.IsSuccess; + if (!this.OperationResult.IsSuccess) + { + this.OperationResult.ValidationErrors.Add(new ValidationErrorInfo("", "Id", 0, 0, "Error", string.Format("自动转换失败"), "", ErrorLevel.Error)); + } + + // 调用保存服务,自动保存 + // ISaveService saveService = ServiceHelper.GetService(); + // var saveResult = saveService.Save(this.Context, targetBillMeta.BusinessInfo, targetBillObjs, saveOption, "Save"); + // 判断自动保存结果:只有操作成功,才会继续 + // if (!this.CheckOpResult(saveResult, saveOption)) + // { + // throw new KDBusinessException("", string.Format("由{0}自动下推{1},自动下推失败!", sourceFormId, targetFormId)); + // } + } + + //if (true && rules.Count > 1) + if (true && rules.Count > 0) + { + //var rule = rules[1]; + var rule = rules[0]; + // 开始构建下推参数: + // 待下推的源单数据行 + // 开始构建下推参数: + // 待下推的源单数据行 + List srcSelectedRows = new List(); + foreach (var billId in sourceBillIds) + {// 把待下推的源单内码,逐个创建ListSelectedRow对象,添加到集合中 + srcSelectedRows.Add(new ListSelectedRow(billId.ToString(), string.Empty, 0, sourceFormId)); + + // 特别说明:上述代码,是整单下推; + // 如果需要指定待下推的单据体行,请参照下句代码,在ListSelectedRow中,指定EntryEntityKey以及EntryId + //srcSelectedRows.Add(new ListSelectedRow(billId.ToString(), scddfid, 0, sourceFormId) { EntryEntityKey = "FTreeEntity" }); + //srcSelectedRows.Add(new ListSelectedRow(billId.ToString(), entityId, 0, sourceFormId) { EntryEntityKey = "FEntity" }); + } + + + + + + + + + + + + + + + + + + // 指定目标单单据类型:情况比较复杂,没有合适的案例做参照,示例代码暂略,直接留空,会下推到默认的单据类型 + string targetBillTypeId = string.Empty; + // 指定目标单据主业务组织:情况更加复杂,需要涉及到业务委托关系,缺少合适案例,示例代码暂略 + // 建议在转换规则中,配置好主业务组织字段的映射关系:运行时,由系统根据映射关系,自动从上游单据取主业务组织,避免由插件指定 + long targetOrgId = 0; + // 自定义参数字典:把一些自定义参数,传递到转换插件中;转换插件再根据这些参数,进行特定处理 + Dictionary custParams = new Dictionary(); + // 组装下推参数对象 + PushArgs pushArgs = new PushArgs(rule, srcSelectedRows.ToArray()) + { + TargetBillTypeId = targetBillTypeId, + TargetOrgId = targetOrgId, + CustomParams = custParams + }; + + OperateOption option = OperateOption.Create(); + option.SetVariableValue(BOSConst.CST_ConvertValidatePermission, true); + // 调用下推服务,生成下游单据数据包 + ConvertOperationResult convResult = convertService.Push(this.Context, pushArgs, OperateOption.Create()); + + // 开始处理下推结果: + // 获取下推生成的下游单据数据包 + DynamicObject[] destObjs = (from p in convResult.TargetDataEntities select p.DataEntity).ToArray(); + if (destObjs.Length == 0) + { + // 未下推成功目标单,抛出错误,中断审核 + throw new KDBusinessException("", string.Format("由{0}自动下推{1},没有成功生成数据包,自动下推失败!", sourceFormId, targetFormId)); + } + + // 对下游单据数据包,进行适当的修订,以避免关键字段为空,自动保存失败 + // 示例代码略 + // 读取目标单据元数据 + IMetaDataService metaService = ServiceHelper.GetService(); + FormMetadata destFormMetadata = metaService.Load(this.Context, targetFormId) as FormMetadata; + // 构建保存操作参数:设置操作选项值,忽略交互提示 + OperateOption saveOption = OperateOption.Create(); + // 忽略全部需要交互性质的提示,直接保存; + saveOption.SetIgnoreWarning(true); // 忽略交互提示 + saveOption.SetInteractionFlag(this.Option.GetInteractionFlag()); // 如果有交互,传入用户选择的交互结果 + // using Kingdee.BOS.Core.Interaction; + saveOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag()); + + // 上一步操作成功的目标单 + List lastSuccessIdLst = new List(); + // 本操作成功的目标单 + List successIdLst = new List(); + // 操作失败的目标单 + List failedobjs = new List(); + // 操作结果 + IOperationResult result = new OperationResult(); + // 错误信息 + List errorLst = new List(); + + + ////////////////////////////// 暂存 ////////////////////////////// + IDraftService service = Kingdee.BOS.Contracts.ServiceFactory.GetService(this.Context); + IOperationResult innerResult = service.Draft(this.Context, destFormMetadata.BusinessInfo, destObjs); + // 暂存成功的目标单 + successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); + // 暂存不通过的目标单 + failedobjs = destObjs.Where(o => !successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToList(); + if (failedobjs != null && !failedobjs.IsEmpty()) + { + errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "DraftError", string.Format("{0}暂存失败:{1}", + string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); + } + // 暂存不通过,则操作失败 + if (successIdLst.IsEmpty()) + { + result.IsSuccess = false; + } + e.DataEntitys = e.DataEntitys.Where(o => successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToArray(); + ////////////////////////////// 保存 ////////////////////////////// + if (!successIdLst.IsEmpty()) + { + lastSuccessIdLst = successIdLst; + innerResult = AppServiceContext.SaveService.Save(this.Context, destFormMetadata.BusinessInfo, destObjs.Where(o => successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToArray(), option); + // 保存成功的目标单 + successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); + // 校验不通过的目标单 + failedobjs = destObjs.Where(o => lastSuccessIdLst.Contains(o.GetDynamicObjectItemValue("Id")) + && !successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToList(); + if (failedobjs != null && !failedobjs.IsEmpty()) + { + errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "SaveError", string.Format("{0}保存失败,已暂存:{1}", + string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); + } + } + ////////////////////////////// 提交 ////////////////////////////// + if (!successIdLst.IsEmpty()) + { + lastSuccessIdLst = successIdLst; + innerResult = AppServiceContext.SubmitService.Submit(this.Context, destFormMetadata.BusinessInfo, successIdLst.ToArray(), "Submit", option); + // 提交成功的目标单 + successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); + // 校验不通过的目标单 + failedobjs = destObjs.Where(o => lastSuccessIdLst.Contains(o.GetDynamicObjectItemValue("Id")) + && !successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToList(); + if (failedobjs != null && !failedobjs.IsEmpty()) + { + errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "SubmitError", string.Format("{0}提交失败,已保存:{1}", + string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); + } + } + ////////////////////////////// 审核 ////////////////////////////// + if (!successIdLst.IsEmpty()) + { + lastSuccessIdLst = successIdLst; + List> pkIds = new List>(); + foreach (var o in successIdLst) + { + pkIds.Add(new KeyValuePair(o, "")); + } + //审核 + List paraAudit = new List(); + //1审核通过 + paraAudit.Add("1"); + //审核意见 + paraAudit.Add(""); + innerResult = AppServiceContext.SetStatusService.SetBillStatus(this.Context, destFormMetadata.BusinessInfo, pkIds, paraAudit, "Audit", option); + // 审核成功的目标单 + successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); + // 审核不通过的目标单 + failedobjs = destObjs.Where(o => lastSuccessIdLst.Contains(o.GetDynamicObjectItemValue("Id")) + && !successIdLst.Contains(o.GetDynamicObjectItemValue("Id"))).ToList(); + if (failedobjs != null && !failedobjs.IsEmpty()) + { + errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "AuditError", string.Format("{0}审核失败,已提交:{1}", + string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); + } + } + ////////////////////////////// 构造错误信息 ////////////////////////////// + if (!errorLst.IsNullOrEmpty()) + { + result.ValidationErrors.AddRange(errorLst); + } + // 将操作结果合并到空操作结果中 + this.OperationResult.IsSuccess = result.IsSuccess; + if (!this.OperationResult.IsSuccess) + { + this.OperationResult.ValidationErrors.Add(new ValidationErrorInfo("", "Id", 0, 0, "Error", string.Format("自动转换失败"), "", ErrorLevel.Error)); + } + } + return; + } + + /// + /// 判断操作结果是否成功,如果不成功,则直接抛错中断进程 + /// + /// 操作结果 + /// 操作参数 + /// + private bool CheckOpResult(IOperationResult opResult, OperateOption opOption) + { + bool isSuccess = false; + if (opResult.IsSuccess == true) + { + // 操作成功 + isSuccess = true; + } + else + { + if (opResult.InteractionContext != null + && opResult.InteractionContext.Option.GetInteractionFlag().Count > 0) + {// 有交互性提示 + // 传出交互提示完整信息对象 + this.OperationResult.InteractionContext = opResult.InteractionContext; + // 传出本次交互的标识, + // 用户在确认继续后,会重新进入操作; + // 将以此标识取本交互是否已经确认过,避免重复交互 + this.OperationResult.Sponsor = opResult.Sponsor; + // 抛出交互错误,把交互信息传递给前端 + new KDInteractionException(opOption, opResult.Sponsor); + } + else + { + // 操作失败,拼接失败原因,然后抛出中断 + opResult.MergeValidateErrors(); + if (opResult.OperateResult == null) + {// 未知原因导致提交失败 + throw new KDBusinessException("", "未知原因导致自动提交、审核失败!"); + } + else + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("自动操作失败:"); + foreach (var operateResult in opResult.OperateResult) + { + sb.AppendLine(operateResult.Message); + } + throw new KDBusinessException("", sb.ToString()); + } + } + } + return isSuccess; + } + } +} diff --git a/aoyuPlugIn/汇威/MJ_zckpbg.cs b/aoyuPlugIn/汇威/MJ_zckpbg.cs new file mode 100644 index 0000000..6688fca --- /dev/null +++ b/aoyuPlugIn/汇威/MJ_zckpbg.cs @@ -0,0 +1,45 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; + +namespace aoyuPlugIn +{ + [Description("资产卡片变更")] + public class MJ_zckpbg : AbstractBillPlugIn + { + public override void AfterBindData(EventArgs e) + { + //"ZCLB027" + //this.View.Model.SetValue("FAlterId", "100034"); + //this.View.UpdateView("FAlterId"); + //this.View.ShowMessage("绑定成功"); + //DataChanged(null); + + base.AfterBindData(e); + + } + public override void DataChanged(DataChangedEventArgs e) + { + base.DataChanged(e); + DynamicObject fgt = this.View.Model.GetValue("FAlterId") as DynamicObject; + Int64 fgtid = 0; + fgtid = Convert.ToInt64(fgt["ID"]); + + this.View.ShowMessage(fgtid.ToString()); + } + } +} diff --git a/aoyuPlugIn/汇威/hg_KPILR.cs b/aoyuPlugIn/汇威/hg_KPILR.cs new file mode 100644 index 0000000..78afaac --- /dev/null +++ b/aoyuPlugIn/汇威/hg_KPILR.cs @@ -0,0 +1,35 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; + +namespace aoyuPlugIn +{ + [Description("KPI录入")] + public class hg_KPILR : AbstractBillPlugIn + { + //public override void EntryBarItemClick(BarItemClickEventArgs e) + //{ + // base.EntryBarItemClick(e); + //} + public override void DataChanged(DataChangedEventArgs e) + { + base.DataChanged(e); + string t = e.Row.ToString(); + this.View.ShowMessage(t); + } + } +} diff --git a/aoyuPlugIn/汇威/hg_xzjxxm.cs b/aoyuPlugIn/汇威/hg_xzjxxm.cs new file mode 100644 index 0000000..54d6838 --- /dev/null +++ b/aoyuPlugIn/汇威/hg_xzjxxm.cs @@ -0,0 +1,236 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Kingdee.BOS; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Bill; +using Kingdee.BOS.Core.CommonFilter; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.List; +using Kingdee.BOS.Core.Report; +using Kingdee.BOS.Core.WNReport; +using System.Collections.ObjectModel; +using System.ComponentModel; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Core.Metadata.EntityElement; + +namespace aoyuPlugIn +{ + [Description("绩效录入")] + public class hg_xzjxxm : AbstractDynamicFormPlugIn + { + public override void EntryBarItemClick(BarItemClickEventArgs e) + { + base.EntryBarItemClick(e); + if (e.BarItemKey == "tbNewxm") + { + Add_XM(); + } + else if (e.BarItemKey == "tbyg") + { + addyg(); + } + } + //取当前行的值 + string get_ygNO(int i) + { + //得到当前行行号 + //int i = this.View.Model.GetEntryCurrentRowIndex("k13d7a697920649329a5f90e0365ea5c8"); + DynamicObject fgt = this.View.Model.GetValue("FygID",i) as DynamicObject; + + string ygno = fgt["Name"].ToString(); + return ygno; + } + //调用基础资料表单添加员工 + void addyg() + { + + string pageId = Guid.NewGuid().ToString(); + ListShowParameter showParameter = new ListShowParameter(); + //要显示列表的单据标识 + showParameter.FormId = "k13d7a697920649329a5f90e0365ea5c8"; + showParameter.PageId = pageId; + showParameter.UseOrgId = this.Context.CurrentOrganizationInfo.ID; + showParameter.IsLookUp = true; + + //取部门名称 + DynamicObject dobjt = this.View.Model.GetValue("FbmID") as DynamicObject; + string bmNm = dobjt["Name"].ToString(); + //得到当前行行号 + EntryEntity entry = this.View.BusinessInfo.GetEntryEntity("F_QBOY_Entity"); + int i = this.Model.GetEntryCurrentRowIndex("F_QBOY_Entity"); + int tol = this.Model.GetEntryRowCount("F_QBOY_Entity"); + DynamicObject fgt = this.View.Model.GetValue("FygID", i) as DynamicObject; + //取员工编号 + //string billNo = Convert.ToString(this.Model.GetValue("FNUMBER")); + string tj = ""; + if (fgt is null) + tj ="FbmNm='"+ bmNm+"'"; + else + tj = "FNAME='" + fgt["Name"].ToString()+"'"; + + //this.View.ShowErrMessage("员工姓名" + billNo); + + showParameter.ListFilterParameter.Filter =tj; + ListSelectedRowCollection returndata = new ListSelectedRowCollection(); + //this.View.ShowForm(showParameter);//直接显示窗体,不用返回值 + + this.View.ShowForm(showParameter, new Action((result) => + { + if (result.ReturnData != null) + { + returndata = result.ReturnData as ListSelectedRowCollection; + int j = 0; + foreach (ListSelectedRow dObj in returndata) + { + if (i==tol) + { this.Model.CreateNewEntryRow("F_QBOY_Entity"); // 新增一行,需要调用的单据体 + tol++; + } + + //设置员工ID + this.Model.SetValue("FygID", dObj.DataRow["FygID"].ToString(), i); + //设置项目ID + this.Model.SetValue("FJXXMID", dObj.DataRow["FxmID"].ToString(), i); + //设置岗位ID + this.Model.SetValue("FgwID", dObj.DataRow["FgwID"].ToString(), i); + //目标值 + this.Model.SetValue("Fmbz", dObj.DataRow["Fmbz"].ToString(), i); + //权重 + this.Model.SetValue("Fqz", dObj.DataRow["Fqz"].ToString(), i); + + ////设置员工ID + //this.Model.SetValue("FJXXMID", ygID, i); + ////Double FCPID = Convert.ToDouble(dObj.FICPID_ID); + + //string t = dObj.DataRow["FxmID"].ToString(); + ////this.View.ShowMessage(t); + //// 新增一行,需要调用的单据体 + //this.Model.CreateNewEntryRow("F_QBOY_Entity"); + //// 设置字段值 + //this.Model.SetValue("FJXXMID", t, i); + i++; + j++; + } + this.View.UpdateView("F_QBOY_Entity"); + } + })); + + + } + + //调用单据添加项目 + public void Add_XM() + { + + //当前行ID GetEntryCurrentRowIndex + string ygID = this.View.Model.GetEntryCurrentRowIndex("FygID").ToString(); + //当前行行号 + EntryEntity entry = this.View.BusinessInfo.GetEntryEntity("FEntityKey"); + int entryCurrentRowIndex = this.Model.GetEntryCurrentRowIndex("FEntityKey"); + + + + string pageId = Guid.NewGuid().ToString(); + ListShowParameter showParameter = new ListShowParameter(); + //被调用的单据体标识 + showParameter.FormId = "kd0081e4d05cc40c499bf0cf8fb0d4460"; + showParameter.PageId = pageId; + showParameter.UseOrgId = this.Context.CurrentOrganizationInfo.ID; + showParameter.IsLookUp = true; + //先取部门ID + DynamicObject fgt = this.View.Model.GetValue("FbmID") as DynamicObject; + string billNo = fgt["Number"].ToString(); + + //string billNo = Convert.ToString(this.Model.GetValue("FNUMBER")); + showParameter.ListFilterParameter.Filter = "FNUMBER='" + billNo + "'"; + ListSelectedRowCollection returndata = new ListSelectedRowCollection(); + //this.View.ShowForm(showParameter);//直接显示窗体,不用返回值 + + this.View.ShowForm(showParameter, new Action((result) => + { + if (result.ReturnData != null) + { + returndata = result.ReturnData as ListSelectedRowCollection; + int i = 0; + foreach (ListSelectedRow dObj in returndata) + { + //设置员工ID + this.Model.SetValue("FJXXMID", ygID, i); + //Double FCPID = Convert.ToDouble(dObj.FICPID_ID); + + string t = dObj.DataRow["FxmID_ID"].ToString(); + //this.View.ShowMessage(t); + // 新增一行,需要调用的单据体 + this.Model.CreateNewEntryRow("F_QBOY_Entity"); + // 设置字段值 + this.Model.SetValue("FJXXMID", t, i); + i++; + } + this.View.UpdateView("F_QBOY_Entity"); + } + })); + + + } + //行数据变动 + public override void DataChanged(DataChangedEventArgs e) + { + base.DataChanged(e); + int hh = Convert.ToInt16(e.Row); + string t =e.Field.ToString(); + + if (t == "得分") + { + Double df =Convert.ToDouble( e.NewValue.ToString()); + //df = this.View.Model.GetValue("FYGID", hh).ToString(); + //this.View.ShowMessage(df.ToString()); + jsgrzdf(hh, df); + } + } + //计算个人总得分 + void jsgrzdf(int hh, double df) + { + try { + //EntryEntity entry = this.View.BusinessInfo.GetEntryEntity("F_QBOY_Entity"); + int zhh = this.Model.GetEntryRowCount("F_QBOY_Entity"); + if (hh == 0)//第一行 + { + this.View.Model.SetValue("FDF", df, hh); + + } + else + { + //--本行的员工ID + Int64 bhygID = Convert.ToInt64((this.View.Model.GetValue("F_YGNO", hh) as DynamicObject)["ID"]); + double zdf = df; + for (int i = hh; i >-1; i--)//从当前行往上循环 + { + //--上一行的员工ID + Int64 ygID = Convert.ToInt64((this.View.Model.GetValue("F_YGNO", i-1) as DynamicObject)["ID"]); + if (bhygID != ygID)//本行员工ID不等于上一行员工ID,就付值退出 + { + this.View.Model.SetValue("FDF", zdf, hh); + break; + } + else + { + zdf =zdf+ Convert.ToDouble(this.View.Model.GetValue("FPF", i - 1).ToString()); + } + } + + } + + } + catch(Exception ex) { this.View.ShowMessage("计算个人总得分时发生错误为:" + ex.Message); } + this.View.UpdateView("F_QBOY_Entity"); + } + } +} diff --git a/aoyuPlugIn/汇威/jj_show_ygz_ygmx.cs b/aoyuPlugIn/汇威/jj_show_ygz_ygmx.cs new file mode 100644 index 0000000..70e4efc --- /dev/null +++ b/aoyuPlugIn/汇威/jj_show_ygz_ygmx.cs @@ -0,0 +1,47 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; + +namespace aoyuPlugIn +{ + [Description("月工资显示员工明细")] + public class jj_show_ygz_ygmx : AbstractBillPlugIn + { + //单据体菜单操作 + public override void EntryBarItemClick(BarItemClickEventArgs e) + { + base.EntryBarItemClick(e); + //DynamicFormShowParameter param = new DynamicFormShowParameter(); + //param.FormId = BusinessObjectConst.HS_Hook_StockArticulation; //动态表单唯一标识,由字符串组成 + //param.OpenStyle.ShowType = ShowType.Default; + //this.View.ShowForm(param); + + if (e.BarItemKey == "tbShowMX") + { + this.View.ShowMessage("菜单测试成功!"); + DynamicFormShowParameter param = new DynamicFormShowParameter(); + + string fgtid = "121"; + //param.CustomParams.Add("mid", "0"); + //param.CustomParams.Add("gid", Convert.ToString(fgtid)); + param.FormId = "PCDN_XH_YY_MSDKC"; + + this.View.ShowForm(param); + } + } + } +} diff --git a/aoyuPlugIn/汇威/mjcpdj.cs b/aoyuPlugIn/汇威/mjcpdj.cs new file mode 100644 index 0000000..f2ac0c9 --- /dev/null +++ b/aoyuPlugIn/汇威/mjcpdj.cs @@ -0,0 +1,209 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.ComponentModel; + + +using Kingdee.BOS; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Bill; +using Kingdee.BOS.Core.CommonFilter; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.List; +using Kingdee.BOS.Core.Report; +using Kingdee.BOS.Core.WNReport; +using System.Collections.ObjectModel; + +namespace aoyuPlugIn +{ + [Description("调用单据列表")] + public class mjcpdj:AbstractDynamicFormPlugIn + { + //public override void AfterBarItemClick(AfterBarItemClickEventArgs e) + //{ + // return; + // if (e.BarItemKey.EqualsIgnoreCase("tbShowDynamicForm")) + // { + // // 打开动态表单界面 + // // using Kingdee.BOS.Core.DynamicForm; + // string pageId = Guid.NewGuid().ToString(); + // DynamicFormShowParameter showParameter = new DynamicFormShowParameter(); + // showParameter.FormId = "a6fe71c4beda4f7baf60411c4b5f3b3e"; + // showParameter.PageId = pageId; + // //showParameter.OpenStyle.ShowType = ShowType.InContainer; + // //showParameter.OpenStyle.TagetKey = "FTab_P2"; + // this.View.ShowForm(showParameter); + // } + // else if (e.BarItemKey.EqualsIgnoreCase("tbShowInventoryQuery")) + // { + // // 打开即时库存查询界面,传入过滤条件 + // DynamicFormShowParameter inventoryQueryShowParameter = new DynamicFormShowParameter(); + // inventoryQueryShowParameter.FormId = "STK_InventoryQuery"; + // inventoryQueryShowParameter.PageId = Guid.NewGuid().ToString(); + // inventoryQueryShowParameter.CustomParams.Add("QueryMode", "1"); + // inventoryQueryShowParameter.CustomParams.Add("NeedReturnData", "0"); + // inventoryQueryShowParameter.CustomParams.Add("QueryOrgId", "100003"); + // inventoryQueryShowParameter.CustomParams.Add("StockOrgIds", "100003"); + // inventoryQueryShowParameter.CustomParams.Add("QueryFilter", " FMaterialId.FNumber = '1.01.001' and FStockId.FNumber = 'CK001' "); + // this.View.ShowForm(inventoryQueryShowParameter); + // } + // else if (e.BarItemKey.EqualsIgnoreCase("tbShowBill")) + // { + // // 打开单据维护界面:以打开销售订单100001为例 + // // using Kingdee.BOS.Core.Bill; + // string pageId = Guid.NewGuid().ToString(); + // BillShowParameter showParameter = new BillShowParameter(); + // showParameter.FormId = "SAL_SaleOrder"; + // showParameter.OpenStyle.ShowType = ShowType.MainNewTabPage; + // showParameter.PageId = pageId; + // showParameter.Status = OperationStatus.EDIT; + // // 传入需要修改的销售订单内码,演示代码直接固定写死为100001 + // showParameter.PKey = "100001"; + + + // this.View.ShowForm(showParameter); + // } + // else if (e.BarItemKey.EqualsIgnoreCase("tbShowList")) + // { + // // 打开单据列表界面:以打开物料F8查询列表为例 + // // using Kingdee.BOS.Core.List; + // string pageId = Guid.NewGuid().ToString(); + // ListShowParameter showParameter = new ListShowParameter(); + // showParameter.FormId = "BD_Material"; + // showParameter.PageId = pageId; + // showParameter.UseOrgId = this.Context.CurrentOrganizationInfo.ID; + // showParameter.IsLookUp = true; + // showParameter.ListFilterParameter.Filter = ""; + // this.View.ShowForm(showParameter); + + + // // 打开单据联查列表:以联查销售订单为例 + // string billNo = Convert.ToString(this.Model.GetValue("FBillNo")); + // string fldName = "销售合同号字段标识"; + + // IRegularFilterParameter filterParameter = new ListRegularFilterParameter(); + // filterParameter.Filter = string.Format(" {0} = '{1}' ", fldName, billNo); ; + // filterParameter.SelectEntitys = new List() { "FSaleOrderEntry" }; + + + // var listTrackParameter = new ListTrackBillShowParameter(); + // listTrackParameter.FormId = "SAL_SaleOrder"; + // listTrackParameter.PageId = Guid.NewGuid().ToString(); + // listTrackParameter.IsShowFilter = false; + // listTrackParameter.ListFilterParameter = filterParameter; + + + // this.View.ShowForm(listTrackParameter); + // } + // else if (e.BarItemKey.EqualsIgnoreCase("tbShowSQLReport")) + // { + // // 打开直接SQL报表 + // // using Kingdee.BOS.Core.Report; + // string pageId = Guid.NewGuid().ToString(); + // SQLReportShowParameter showParameter = new SQLReportShowParameter(); + // showParameter.FormId = "a9e51595c6c1433ebb623c8e340f7b5b"; + // showParameter.PageId = pageId; + // this.View.ShowForm(showParameter); + // } + // else if (e.BarItemKey.EqualsIgnoreCase("tbShowSysReport")) + // { + // // 打开简单系统账表 + // // using Kingdee.BOS.Core.Report; + // string pageId = Guid.NewGuid().ToString(); + // SysReportShowParameter showParameter = new SysReportShowParameter(); + // showParameter.FormId = "c3329ed2a55c4c31b9420d104f29af9b"; + // showParameter.PageId = pageId; + // showParameter.IsShowFilter = true; + // this.View.ShowForm(showParameter); + // } + // else if (e.BarItemKey.EqualsIgnoreCase("tbShowMoveReport")) + // { + // // 打开分页账表 + // // using Kingdee.BOS.Core.Report; + // string pageId = Guid.NewGuid().ToString(); + // MoveReportShowParameter showParameter = new MoveReportShowParameter(); + // showParameter.FormId = "c3329ed2a55c4c31b9420d104f29af8b"; + // showParameter.PageId = pageId; + // this.View.ShowForm(showParameter); + // } + // else if (e.BarItemKey.EqualsIgnoreCase("tbShowTreeReport")) + // { + // // 打开树形账表 + // // using Kingdee.BOS.Core.Report; + // string pageId = Guid.NewGuid().ToString(); + // TreeReportShowParameter showParameter = new TreeReportShowParameter(); + // showParameter.FormId = "c3329ed2a55c4c31b9420d104f29af7b"; + // showParameter.PageId = pageId; + // this.View.ShowForm(showParameter); + // } + // else if (e.BarItemKey.EqualsIgnoreCase("tbShowPivotGridReport")) + // { + // // 打开透视表 + // // using Kingdee.BOS.Core.Report; + // string pageId = Guid.NewGuid().ToString(); + // CrossReportShowParameter showParameter = new CrossReportShowParameter(); + // showParameter.FormId = "c3329ed2a55c4c31b9420d104f29ae59"; + // showParameter.PageId = pageId; + // this.View.ShowForm(showParameter); + // } + // else if (e.BarItemKey.EqualsIgnoreCase("tbShowWNSQLReport")) + // { + // // 打开万能报表(SQL增强报表是一种万能报表) + // // using Kingdee.BOS.Core.WNReport; + // string pageId = Guid.NewGuid().ToString(); + // WNReportShowParameter showParameter = new WNReportShowParameter(); + // showParameter.FormId = "c3329ed2a55c4c31b9420d104f29ae69"; + // showParameter.PageId = pageId; + // showParameter.ReporType = Kingdee.BOS.Core.Enums.BOSEnums.Enu_DevReportType.SqlOver;// SQL增强报表 + // this.View.ShowForm(showParameter); + // } + //} + public override void EntryBarItemClick(BarItemClickEventArgs e) + { + base.EntryBarItemClick(e); + if (e.BarItemKey == "tbCX") + { + string pageId = Guid.NewGuid().ToString(); + ListShowParameter showParameter = new ListShowParameter(); + showParameter.FormId = "GAT_mjcpdzb"; + showParameter.PageId = pageId; + showParameter.UseOrgId = this.Context.CurrentOrganizationInfo.ID; + showParameter.IsLookUp = true; + string billNo = Convert.ToString(this.Model.GetValue("FNUMBER")); + showParameter.ListFilterParameter.Filter = "FNUMBER='"+billNo+"'"; + ListSelectedRowCollection returndata = new ListSelectedRowCollection(); + //this.View.ShowForm(showParameter);//直接显示窗体,不用返回值 + + this.View.ShowForm(showParameter, new Action((result) => + { + if (result.ReturnData != null) + { + returndata = result.ReturnData as ListSelectedRowCollection; + int i = 0; + foreach (ListSelectedRow dObj in returndata) + { + //Double FCPID = Convert.ToDouble(dObj.FICPID_ID); + + string t = dObj.DataRow["FCPID_ID"].ToString(); + //this.View.ShowMessage(t); + // 新增一行 + this.Model.CreateNewEntryRow("F_GAT_Entity"); + // 设置字段值 + this.Model.SetValue("FCPID", t, i); + i++; + } + this.View.UpdateView("F_GAT_Entity"); + } + })); + + + } + } + + } +} diff --git a/aoyuPlugIn/汇威/workRL.cs b/aoyuPlugIn/汇威/workRL.cs new file mode 100644 index 0000000..a00f99e --- /dev/null +++ b/aoyuPlugIn/汇威/workRL.cs @@ -0,0 +1,117 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; + +namespace aoyuPlugIn +{ + [Description("工作日历")] + public class workRL: AbstractBillPlugIn + { + int sbts = 0; + //单据头菜单点击 + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + try + { + if (e.BarItemKey == "tbPL") + { + sbts = 0; + string t = this.View.Model.GetValue("F_YEAR").ToString(); + if (t == "") t = DateTime.Today.Year.ToString(); + string months = this.View.Model.GetValue("F_MONTH").ToString(); + del_data(t, months); + this.View.Model.SetValue("F_SBTS", sbts); + + } + } + catch(Exception ex) { + this.View.ShowMessage("取单据体字段数据时发生错误为:"+ex.Message); + } + //加日期 + void add_date(string y,string m,string body_nm) + { + try { + var weekdays = new string[] { "0", "1", "2", "3", "4", "5", "6" }; + + int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(Convert.ToInt16(y),Convert.ToInt16(m)); + + this.View.Model.BatchCreateNewEntryRow(body_nm, days); + int sbts = 0; + for (int i = 1; i <= days; i++) + { + string tm = y + "-" + m + "-" + i.ToString(); + this.Model.SetValue("Fdate", tm, i-1); + string zt = getxt(tm); + this.Model.SetValue("F_RLZT", zt, i-1); + if (zt == "上班") + { + sbts++; + this.Model.SetValue("F_GZXS", 1, i - 1); + } + else + { + this.Model.SetValue("F_GZXS", 2, i - 1); + } + + DateTime rq = Convert.ToDateTime(tm); + string wk=weekdays[(int)rq.DayOfWeek]; + this.Model.SetValue("F_WK", wk, i - 1); + } + this.View.Model.SetValue("F_SBTS", sbts, 0); + + + + } + catch(Exception ex) { + this.View.ShowMessage("加日期时发生错误为:" + ex.Message); + } + } + string getxt(string tm) + { + DateTime t = Convert.ToDateTime(tm); + string xx = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(t.DayOfWeek); + //if (xx == "星期六" || xx == "星期日") + if (xx == "星期日") + xx = "休息"; + else + { + xx = "上班"; + sbts++; + } + return xx; + } + void del_data(string y, string m) + { + try + { + string nm = "F_GAT_GZRLs"; + //取表体最大行数 + int tol = this.Model.GetEntryRowCount(nm); + tol--; + for (int i = tol; i > -1; i--) + { + this.View.Model.DeleteEntryRow(nm, i); //先删除空行 + } + add_date(y, m, nm); + } + catch (Exception ex) + { this.View.ShowMessage("删除表体数据时发生错误为:" + ex.Message); } + } + } + } +} diff --git a/aoyuPlugIn/汇威/zp_bsdlb.cs b/aoyuPlugIn/汇威/zp_bsdlb.cs new file mode 100644 index 0000000..4889edd --- /dev/null +++ b/aoyuPlugIn/汇威/zp_bsdlb.cs @@ -0,0 +1,75 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.List.PlugIn; +namespace aoyuPlugIn +{ + [Description("补数单列表反写生产订单")] + public class zp_bsdlb:AbstractListPlugIn + { + //int fx = -1; + void fxjdb(string issh) + { + try + { + //string fbillno = ""; + if (this.ListView.SelectedRowsInfo.Count > 0) + { + for (int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) + { + //取指定行单据编号 + string fbillno = this.ListView.SelectedRowsInfo[i].BillNo; + string zt = this.ListView.SelectedRowsInfo[i].DataRow["FDOCUMENTSTATUS"].ToString(); + if (issh == "1") + { + if (zt == "D" || zt == "B") + { + var sSql = String.Format("EXEC hw_fx_bs " + fbillno + "," + issh); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + } + } + else + { + if (zt == "C") + { + var sSql = String.Format("EXEC hw_fx_bs " + fbillno + "," + issh); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + } + } + + } + } + } + catch (Exception ex) { this.View.ShowMessage("反写进度表时发生错误为:" + ex.Message); } + } + //列表菜单事件 + public override void AfterBarItemClick(AfterBarItemClickEventArgs e) + { + base.AfterBarItemClick(e); + + if (e.BarItemKey == "tbSplitApprove" || e.BarItemKey == "tbApprove")//审核 + { + fxjdb("1"); + } + else if (e.BarItemKey == "tbReject")//反审核 + { + fxjdb("0"); + } + } + + } +} diff --git a/aoyuPlugIn/汇威/zp_plyg.cs b/aoyuPlugIn/汇威/zp_plyg.cs new file mode 100644 index 0000000..d2b46cc --- /dev/null +++ b/aoyuPlugIn/汇威/zp_plyg.cs @@ -0,0 +1,393 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using System.Collections; +using System.Data; + +namespace aoyuPlugIn +{ + [HotUpdate] + [Description("装配批录员工")] + public class zp_plyg : AbstractBillPlugIn + { + public override void BeforeSave(BeforeSaveEventArgs e) + { + + base.BeforeSave(e); + if (check_data() == false) + e.Cancel = true; + } + //检测数据 + bool check_data() + { + bool isok = true; + try + { + string djno ="";int isAdd=0; + if (this.View.OpenParameter.Status == OperationStatus.ADDNEW) //新增 + { + isAdd = 0; + } + else + { + djno = this.Model.GetValue("FBillNo").ToString(); + isAdd = 1; + } + string FEntity_nm = "F_GAT_Entity1"; + //取表体最大行数 + int tol = this.Model.GetEntryRowCount(FEntity_nm); + if (tol > 0) + { + //集体计件 + isok = yzdata(getJTJJ(), djno, isAdd); + } + else + { + //个人计件 + isok = yzdata(getGRJJ(), djno, isAdd); + } + + } + catch (Exception ex) + { this.View.ShowMessage("检测数据时发生错误为:" + ex.Message); } + return isok; + } + //验证数据 + bool yzdata(DataTable tb,string djno,int isAdd) + { + try + { + foreach (DataRow r in tb.Rows) + { + string rwdID = r["rwdID"].ToString(); + string gxID = r["gxID"].ToString(); + string sl = r["sl"].ToString(); + string[] jg = tolsl(djno, rwdID, gxID, sl, isAdd); + if (jg[0] == "1") + { + this.View.ShowErrMessage(jg[1].ToString() + "!"); + return false; + } + } + }catch(Exception ex) { this.View.ShowMessage("验证数据时发生错误为:" + ex.Message); } + return true; + } + //bool check_data1() + //{ + // bool isok = true; + // try + // { + // string djno = ""; int isAdd = 0; + // if (this.View.OpenParameter.Status == OperationStatus.ADDNEW) //新增 + // { + // isAdd = 0; + // } + // else + // { + // djno = this.Model.GetValue("FBillNo").ToString(); + // isAdd = 1; + // } + // string FEntity_nm = "F_GAT_Entity1"; + + // //取表体最大行数 + // int tol = this.Model.GetEntryRowCount(FEntity_nm); + + // for (int i = 0; i < tol; i++) + // { + // DynamicObject fgt = this.View.Model.GetValue("F_SCNO", i) as DynamicObject; + // string rwdID = fgt["ID"].ToString(); + + // DynamicObject fgt1 = this.View.Model.GetValue("F_DJGWID", i) as DynamicObject; + // string gxID = fgt1["Number"].ToString(); + // string sl = this.Model.GetValue("F_FQTY").ToString(); + // Double[] jg = tolsl(djno, rwdID, gxID, sl, isAdd); + // if (jg[0] == 1) + // { + // isok = false; + // this.View.ShowErrMessage("第" + (i + 1).ToString() + "行超过订单数" + jg[1].ToString() + "!"); + // break; + // } + // } + // //个人计件 + // DataTable tbgr = getGRJJ(); + + // } + // catch (Exception ex) + // { this.View.ShowMessage("验证数据时发生错误为:" + ex.Message); } + // return isok; + //} + //取集体计件数量 + DataTable getJTJJ () + { + ArrayList data1 = new ArrayList(); + DataTable tb = new DataTable(); + tb.Columns.Add("rwdID"); + tb.Columns.Add("gxID"); + tb.Columns.Add("sl"); + + try + { + + string FEntity_nm = "F_GAT_Entity1"; + //取表体最大行数 + int tol = this.Model.GetEntryRowCount(FEntity_nm); + + for (int i = 0; i < tol; i++) + { + DynamicObject fgt = this.View.Model.GetValue("F_SCNO", i) as DynamicObject; + string rwdID = fgt["ID"].ToString(); + + DynamicObject fgt1 = this.View.Model.GetValue("F_DJGWID", i) as DynamicObject; + string gxID = fgt1["Number"].ToString(); + string sl = this.Model.GetValue("F_FQTY",i).ToString(); + string p = rwdID + "*" + gxID; + if (data1.Contains(p) == false) + { + data1.Add(p); + DataRow nr = tb.NewRow(); + nr[0] = rwdID; + nr[1] = gxID; + nr[2] = sl; + tb.Rows.Add(nr); + } + else + { + foreach (DataRow r2 in tb.Rows) + { + if (rwdID == r2["rwdID"].ToString() && gxID == r2["gxID"].ToString()) + { + r2["sl"] = Convert.ToInt16(sl) + Convert.ToInt16(r2["sl"].ToString()); + break; + } + } + } + + + } + + } + catch (Exception ex) + { this.View.ShowMessage("验证数据时发生错误为:" + ex.Message); } + return tb; + } + //取个人计件数据 + DataTable getGRJJ() + { + //int index = this.View.Model.GetEntryCurrentRowIndex("你的单据体标识"); + //DynamicObject obj = this.Model.DataObject; + //DynamicObjectCollection rows = obj["你的单据体ORM实体名"] as DynamicObjectCollection; + //rows[index];// 就是你要的 + + //取表体最大行数 + //int tol = this.Model.GetEntryRowCount(FEntity_nm); + + ArrayList data1 = new ArrayList(); + DataTable tb = new DataTable(); + tb.Columns.Add("rwdID"); + tb.Columns.Add("gxID"); + tb.Columns.Add("sl"); + try + { + string ORM_NM = "GAT_DAY_GR_ZP";//你的单据体ORM实体名 + DynamicObject obj = this.Model.DataObject; + DynamicObjectCollection rows = obj[ORM_NM] as DynamicObjectCollection; + int i = 0; + foreach (var r in rows) + { + + DynamicObject fgt = r["F_SCNO1"] as DynamicObject; + string rwdID = fgt["ID"].ToString(); + DynamicObject fgt1 = r["F_GWID"] as DynamicObject; + string gxID = fgt1["Number"].ToString(); + string p = rwdID + "*" + gxID; + string sl = r["F_FQ1TY1"].ToString(); + if (data1.Contains(p) == false) + { + data1.Add(p); + DataRow nr = tb.NewRow(); + nr[0] = rwdID; + nr[1] = gxID; + nr[2] = sl; + tb.Rows.Add(nr); + } + else + { + foreach (DataRow r2 in tb.Rows) + { + if (rwdID == r2["rwdID"].ToString() && gxID == r2["gxID"].ToString()) + { + int kk = Convert.ToInt16(sl) + Convert.ToInt16(r2["sl"].ToString()); + r2["sl"] = kk; + break; + } + } + } + } + }catch(Exception ex) { this.View.ShowMessage("组合表数据时发生错误为:" + ex.Message); } + return tb; + } + string[] tolsl(string djno,string rwdID,string gxID,string sl, int isAdd) + { + string[] isok = new string[2]; + isok[0] = "0"; + isok[1] = "0"; + + + + string sql = String.Format("exec hw_zp_yzsl '{0}',{1},{2},'{3}',{4}",djno, rwdID,gxID,sl,isAdd); + var dr1 = DBServiceHelper.ExecuteDynamicObject(this.Context, sql); + string jg = "0"; + if (dr1.Count > 0) + jg = dr1[0][0].ToString(); + + if ( jg!="0") { + isok[0] = "1"; + isok[1] = jg; + } + return isok; + } + //单据头菜单点击 + //public override void BarItemClick(BarItemClickEventArgs e) + //{ + // base.BarItemClick(e); + // //if (e.BarItemKey == "tbApprove" || e.BarItemKey == "tbSplitApprove") + // //{ + // // fx_yscs(e, "1"); + // //}else if(e.BarItemKey== "tbReject") { + // // fx_yscs(e, "0"); + + + // //} + //} + //public override void AfterBarItemClick(AfterBarItemClickEventArgs e) + //{ + // base.AfterBarItemClick(e); + // //if (e.BarItemKey == "tbReject") + // //{ + // // //隐藏审核菜单 + // // this.View.GetMainBarItem("tbApprove").Visible = false; + // // this.View.GetMainBarItem("tbSplitApprove").Visible = false; + // //} + //} + //public override void AfterBindData(EventArgs e) + //{ + // base.AfterBindData(e); + + + //// var baseObj1 = this.Model.GetValue("FBT005"); + // if (baseObj1.ToString() =="0") + // { + // var sSql = String.Format("exec hw_get_btbz"); + // var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + // int i = 0; + // if (dr.Count > 0) + // { + // //string k = item[0].ToString(); + // //this.Model.SetValue("F_YGNO3", item[0], i); + + // this.Model.SetValue("FBT005", dr[0][1].ToString()); + // this.View.UpdateView("FBT005"); + // this.Model.SetValue("FBT006", dr[1][1].ToString()); + // this.View.UpdateView("FBT006"); + // this.Model.SetValue("FBT012", dr[2][1].ToString()); + // this.View.UpdateView("FBT012"); + + + + // } + + + + // } + + + //} + //反写已生产数据 + void fx_yscs(BarItemClickEventArgs e,string sh) + { + string fbillno = this.View.Model.GetValue("FBillNo").ToString(); + var sSql = String.Format("EXEC hw_zplr_fx_scdd " + fbillno + ","+sh); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + string t = "生产数量大于订单数量,不能审核!"; + + if (dr.Count > 0) + { + foreach (var item in dr) + { + string k = "生产订单:" + item["rwdNo"].ToString() + "|工序编号:" + item["gxNo"].ToString() + + "|订单数:" + item["dds"].ToString() + "|已生产数:" + item["yscs"].ToString(); + t = t + "\r\n" + k; + } + + this.View.ShowMessage(t); + e.Cancel = true; + } + + } + //点击单据体菜单 + public override void EntryBarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + if (e.BarItemKey == "tbPLYG") + { + //string t =this.View.Model.GetValue("F_CBM").ToString(); + //string t = this.View.Model.DataObject["F_CBM"].ToString(); + DynamicObject fgt = this.View.Model.GetValue("F_CBM") as DynamicObject; + string t = fgt["ID"].ToString(); + add_data_stort(t); + } + + } + void del_data(string FEntity_nm) + { + try + { + //取表体最大行数 + int tol = this.Model.GetEntryRowCount(FEntity_nm); + tol--; + for (int i = tol; i > -1; i--) + { + this.View.Model.DeleteEntryRow(FEntity_nm, i); //先删除空行 + } + } + catch (Exception ex) + { this.View.ShowMessage("删除表体数据时发生错误为:" + ex.Message); } + } + public void add_data_stort(string cs) + { + try + { + del_data("F_JTJJ"); + var sSql = String.Format("EXEC hw_get_plyg " + cs); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + this.View.Model.BatchCreateNewEntryRow("F_JTJJ", dr.Count); + } + foreach (var item in dr) + { + string k = item[0].ToString(); + this.Model.SetValue("F_YGNO3", item[0], i); + //this.Model.SetValue("F_REM", "1", i); + i++; + } + } + catch (Exception ex) { this.View.ShowMessage("加表体数据时发生错误为:" + ex.Message); } + } + } +} diff --git a/aoyuPlugIn/汇威/zp_plyg_LB.cs b/aoyuPlugIn/汇威/zp_plyg_LB.cs new file mode 100644 index 0000000..4e53223 --- /dev/null +++ b/aoyuPlugIn/汇威/zp_plyg_LB.cs @@ -0,0 +1,95 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.List.PlugIn; + +namespace aoyuPlugIn +{ + [Description("装配录入列表反写已生产数")] + public class zp_plyg_LB : AbstractListPlugIn + { + //列表菜单事件 + public override void AfterBarItemClick(AfterBarItemClickEventArgs e) + { + //base.AfterBarItemClick(e); + + //if (e.BarItemKey == "tbSplitApprove" || e.BarItemKey == "tbApprove")//审核 + //{ + + // fxjdb("1"); + + //} + //else if (e.BarItemKey == "tbReject")//反审核 + //{ + + // fxjdb("0"); + //} + } + //反写已生产数据 + void fxjdb(string issh) + { + try + { + //string fbillno = ""; + if (this.ListView.SelectedRowsInfo.Count > 0) + { + for (int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) + { + //取指定行单据编号 + string fbillno = this.ListView.SelectedRowsInfo[i].BillNo; + string zt = this.ListView.SelectedRowsInfo[i].DataRow["FDOCUMENTSTATUS"].ToString(); + if (issh == "1") + { + if (zt == "D" || zt == "B") + { + fx_yscs(fbillno, issh); + } + } + else + { + if (zt == "C") + { + fx_yscs(fbillno, issh); + } + } + + + } + } + } + catch (Exception ex) { this.View.ShowMessage("反写已生产数时发生错误为:" + ex.Message); } + } + void fx_yscs( string fbillno,string sh) + { + //string fbillno = this.View.Model.GetValue("FBillNo").ToString(); + var sSql = String.Format("EXEC hw_zplr_fx_scdd " + fbillno + "," + sh); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + string t = "生产数量大于订单数量,不能审核!"; + + if (dr.Count > 0) + { + foreach (var item in dr) + { + string k = "生产订单:" + item["rwdNo"].ToString() + "|工序编号:" + item["gxNo"].ToString() + + "|订单数:" + item["dds"].ToString() + "|已生产数:" + item["yscs"].ToString(); + t = t + "\r\n" + k; + } + this.View.ShowMessage(t); + } + } + } +} diff --git a/aoyuPlugIn/汇威/zp_rgz.cs b/aoyuPlugIn/汇威/zp_rgz.cs new file mode 100644 index 0000000..405786d --- /dev/null +++ b/aoyuPlugIn/汇威/zp_rgz.cs @@ -0,0 +1,167 @@ + +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +namespace aoyuPlugIn +{ + [Description("装配日工资")] + public class aoyuPlugIn : AbstractBillPlugIn + { + + ////菜单按钮必须有操作事件,如新增,删除、保存等 + //public override void BeforeDoOperation(BeforeDoOperationEventArgs e) + //{ + // base.BeforeDoOperation(e); + + // //this.View.ShowMessage("菜单测试成功!"); + //} + //单据头菜单点击 + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + //this.View.ShowMessage("Hello World:" + e.BarItemKey.ToString()); + string t = Convert.ToDateTime(this.View.Model.GetValue("FDate").ToString()).ToShortDateString(); + + if (e.BarItemKey == "tbSCRGZ") + { + check_data(t); + } + else if (e.BarItemKey == "tbSplitSave" || e.BarItemKey == "tbSave")// + { + //t = "'" + t + "'"; + //var sSql = String.Format("EXEC hw_get_zpjjmxb " + t ); + //var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + } + else if (e.BarItemKey == "tbSplitSubmit" || e.BarItemKey == "tbSubmit") + { + sc_mx(t); + } + } + //生成员工计件工资明细 + void sc_mx(string fdate) + { + try + { + fdate = "'" + fdate + "'"; + var sSql = String.Format("EXEC hw_get_zpjjmxb " + fdate); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + } + catch (Exception ex) + { + this.View.ShowMessage("生成员工计件工资明细时发生错误为:" + ex); + } + } + ////单据体菜单操作 + //public override void EntryBarItemClick(BarItemClickEventArgs e) + //{ + // base.EntryBarItemClick(e); + //} + //按钮事件 + public override void ButtonClick(ButtonClickEventArgs e) + { + base.ButtonClick(e); + try + { + if (e.Key == "F_GAT_BUTTON") + { + + string t = Convert.ToDateTime(this.View.Model.GetValue("FDate").ToString()).ToShortDateString(); + //add_data_stort(t); + //check_data(t); + //this.View.ShowMessage(t); + + } + } + catch (Exception ex) { this.View.ShowMessage("取日期时发生错误为:" + ex.Message); } + + } + //检测数据是否有未审核 + void check_data(string date1) + { + try + { + date1 = "'" + date1 + "'"; + var sSql = String.Format("EXEC hw_jsrgz_checkSH " + date1); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + if (dr.Count > 0) + { + string t = dr[0][0].ToString(); + this.View.ShowMessage(t); + return; + } + add_data_stort(date1); + } + catch (Exception ex) + { this.View.ShowMessage("检测数据是否有未审核时发生错误为:" + ex.Message); } + + } + //存储过程加入表 + public void add_data_stort(string cs) + { + try + { + del_data("F_QBOY_Entity");//先删除数据 + //return; + //cs = "'" + cs + "'"; + var sSql = String.Format("EXEC hw_get_rgz " + cs); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + this.View.Model.BatchCreateNewEntryRow("F_QBOY_Entity", dr.Count); + } + foreach (var item in dr) + { + + this.Model.SetValue("F_YGNO", item[0], i); + this.Model.SetValue("F_JJGZ", item[1], i); + this.Model.SetValue("F_JSGZ", item[2], i); + this.Model.SetValue("F_JLGZ", item[3], i); + this.Model.SetValue("F_JBGZ", item[4], i); + this.Model.SetValue("F_CSBT", item[5], i); + this.Model.SetValue("F_GWBT", item[6], i); + this.Model.SetValue("F_XYGBT", item[7], i); + this.Model.SetValue("F_SYQBT", item[8], i); + this.Model.SetValue("F_QT", item[9], i); + this.Model.SetValue("F_DRGZ", item[10], i); + + i++; + } + } + catch (Exception ex) { this.View.ShowMessage("加表体数据时发生错误为:" + ex.Message); } + } + //计算前先删除当前数据 + void del_data(string FEntity_nm) + { + try + { + //取表体最大行数 + int tol = this.Model.GetEntryRowCount(FEntity_nm); + tol--; + for (int i = tol; i > -1; i--) + { + this.View.Model.DeleteEntryRow(FEntity_nm, i); //先删除空行 + } + } + catch (Exception ex) + { this.View.ShowMessage("删除表体数据时发生错误为:" + ex.Message); } + } + + } + + +} diff --git a/aoyuPlugIn/汇威/zp_rgz_LB.cs b/aoyuPlugIn/汇威/zp_rgz_LB.cs new file mode 100644 index 0000000..55252ef --- /dev/null +++ b/aoyuPlugIn/汇威/zp_rgz_LB.cs @@ -0,0 +1,77 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.List.PlugIn; + +namespace aoyuPlugIn +{ + [Description("装配日工资列表生成计件明细")] + public class zp_rgz_LB : AbstractListPlugIn + { + //列表菜单事件 + public override void AfterBarItemClick(AfterBarItemClickEventArgs e) + { + base.AfterBarItemClick(e); + + if (e.BarItemKey == "tbSplitSubmit" || e.BarItemKey == "tbSubmit")//提交 + { + + fxjdb(); + + } + + } + void fxjdb() + { + try + { + //string fbillno = ""; + if (this.ListView.SelectedRowsInfo.Count > 0) + { + for (int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) + { + //取指定行单据编号 + //string fbillno = this.ListView.SelectedRowsInfo[i].BillNo; + string fdate = this.ListView.SelectedRowsInfo[i].DataRow["FDate"].ToString(); + string[] dt = fdate.Split(' '); + fdate = dt[0]; + string zt = this.ListView.SelectedRowsInfo[i].DataRow["FDOCUMENTSTATUS"].ToString(); + if (zt == "A" || zt == "D") + { + sc_mx(fdate); + } + } + } + } + catch (Exception ex) { this.View.ShowMessage("生成计件工资明细时发生错误为:" + ex.Message); } + } + //生成员工计件工资明细 + void sc_mx(string fdate) + { + try + { + fdate = "'" + fdate + "'"; + var sSql = String.Format("EXEC hw_get_zpjjmxb " + fdate); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + } + catch (Exception ex) + { + this.View.ShowMessage("生成员工计件工资明细时发生错误为:" + ex); + } + } + } + } diff --git a/aoyuPlugIn/汇威/zp_ygz.cs b/aoyuPlugIn/汇威/zp_ygz.cs new file mode 100644 index 0000000..5744ba7 --- /dev/null +++ b/aoyuPlugIn/汇威/zp_ygz.cs @@ -0,0 +1,172 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.ComponentModel; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; + +namespace aoyuPlugIn +{ + [Description("装配月工资")] + public class zp_ygz : AbstractBillPlugIn + { + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + //this.View.ShowMessage("Hello World:" + e.BarItemKey.ToString()); + if (e.BarItemKey == "tbSCYGZ") + { + string years = this.View.Model.GetValue("F_YEAR").ToString(); + if (years == "" || years == "0") years = DateTime.Today.Year.ToString(); + string months = this.View.Model.GetValue("F_MONTH").ToString(); + del_data("F_YGZ_ZP", years, months); + } + + + } + //删除窗体数据 + void del_data(string bodynm, string y, string m) + { + try + { + //取表体最大行数 + int tol = this.Model.GetEntryRowCount(bodynm); + tol--; + for (int i = tol; i > -1; i--) + { + this.View.Model.DeleteEntryRow(bodynm, i); //先删除空行 + } + add_data_stort(y, m, bodynm); + } + catch (Exception ex) + { this.View.ShowMessage("删除表体数据时发生错误为:" + ex.Message); } + } + //加载数据 + void add_data_stort(string y, string m, string bodynm) + { + try + { + string cs = y + "," + m; + var sSql = String.Format("EXEC hw_get_ygz " + cs); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + string t = dr[0][0].ToString(); + if (t == "1") + { + this.View.ShowMessage("计算月工资失败:因为日工资有未审核单据"); + return; + } + + this.View.Model.BatchCreateNewEntryRow(bodynm, dr.Count); + } + foreach (var item in dr) + { + + this.Model.SetValue("F_YGNO", item[0], i); + this.Model.SetValue("F_JJGZ", item[1], i); + this.Model.SetValue("F_JSGZ", item[2], i); + this.Model.SetValue("F_BZGZ", item[3], i); + this.Model.SetValue("F_JLGZ", item[4], i); + this.Model.SetValue("F_YCGZ", item[5], i); + this.Model.SetValue("F_JBGZ", item[6], i); + this.Model.SetValue("F_QT", item[7], i); + + this.Model.SetValue("F_CSBT", item[8], i); + this.Model.SetValue("F_GWBT", item[9], i); + this.Model.SetValue("F_CFBT", item[10], i); + this.Model.SetValue("F_YBBT", item[11], i); + this.Model.SetValue("F_XYGBT", item[12], i); + this.Model.SetValue("F_SYQBT", item[13], i); + this.Model.SetValue("F_XCPBT", item[14], i); + this.Model.SetValue("F_DRGZ", item[15], i); + this.Model.SetValue("F_GLBT", item[16], i); + i++; + } + } + catch (Exception ex) { this.View.ShowMessage("加表体数据时发生错误为:" + ex.Message); } + } + //显示明细 + //单据体菜单操作 + public override void EntryBarItemClick(BarItemClickEventArgs e) + { + base.EntryBarItemClick(e); + + //DynamicFormShowParameter param = new DynamicFormShowParameter(); + //param.FormId = BusinessObjectConst.HS_Hook_StockArticulation; //动态表单唯一标识,由字符串组成 + //param.OpenStyle.ShowType = ShowType.Default; + //this.View.ShowForm(param); + + if (e.BarItemKey == "tbShowMX") + { + + //F_GAT_BaseProperty:员工姓名 + string djtnm = "yggzmx"; + //try + //{ + // int index = this.View.Model.GetEntryCurrentRowIndex(djtnm); + // DynamicObject obj = this.Model.DataObject; + // DynamicObjectCollection rows = obj[djtnm] as DynamicObjectCollection; + // string tt = rows[index]["F_YGNO"].ToString(); + // this.View.ShowMessage("当前行员工编号为:" + tt); + //} + //catch(Exception ex) { this.View.ShowMessage(ex.Message); } + + DynamicFormShowParameter param = new DynamicFormShowParameter(); + + string fgtid = "121"; + //param.CustomParams.Add("mid", "0"); + //param.CustomParams.Add("gid", Convert.ToString(fgtid)); + param.FormId = "k5c2439c690654f63b158713af5fe353e"; + + this.View.ShowForm(param); + } + } + + public override void EntityRowDoubleClick(EntityRowClickEventArgs e) + { + + base.EntityRowDoubleClick(e); + int i = e.Row; + string Y = this.View.Model.GetValue("F_YEAR").ToString(); + string M = this.View.Model.GetValue("F_MONTH").ToString(); + + Int64 ID = Convert.ToInt64((this.View.Model.GetValue("F_YGNO", i) as DynamicObject)["ID"]); + + + + //this.View.ShowMessage(ID.ToString()); + //DynamicFormShowParameter param = new DynamicFormShowParameter(); + Kingdee.BOS.Core.DynamicForm.DynamicFormShowParameter param = + new Kingdee.BOS.Core.DynamicForm.DynamicFormShowParameter(); + //string fgtid = "121"; + //param.CustomParams.Add("mid", "0"); + //param.CustomParams.Add("ygid", Convert.ToString(ID)); + //param.CustomParams.Add("FYEAR",Y); + //param.CustomParams.Add("FMONTH", M); + //param.CustomParams.Add("FDAY", ""); + //param.FormId = "k5c2439c690654f63b158713af5fe353e"; + param.FormId = "BOS_K3Displyer"; + + + this.View.ShowForm(param); + + } + + + + } +} diff --git a/aoyuPlugIn/汇威/zpjjmxb_lb.cs b/aoyuPlugIn/汇威/zpjjmxb_lb.cs new file mode 100644 index 0000000..03f0f03 --- /dev/null +++ b/aoyuPlugIn/汇威/zpjjmxb_lb.cs @@ -0,0 +1,51 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.List.PlugIn; +namespace aoyuPlugIn +{ + [Description("装配计件工资明细列表")] + public class zpjjmxb_lb: AbstractListPlugIn + { + public override void BeforeDoOperation(BeforeDoOperationEventArgs e) + { + base.BeforeDoOperation(e); + + //return; + if (e.Operation.FormOperation.Id == "701fae4c-257c-4852-acfe-5a3c94a6fef5")//删除 + { + for (int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) + { + //取指定行单据编号 + string fbillno = this.ListView.SelectedRowsInfo[i].DataRow["FID"].ToString(); + //this.View.ShowMessage(fbillno); + + var sSql = String.Format("EXEC hw_zpjjmxb_del " + fbillno); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + + + } + + e.Cancel = true; + + this.View.ShowMessage("删除成功,请刷新数据!"); + this.View.ParentFormView.Refresh(); + } + + } + } +} diff --git a/aoyuPlugIn/汇威/zq_bsd.cs b/aoyuPlugIn/汇威/zq_bsd.cs new file mode 100644 index 0000000..fd95567 --- /dev/null +++ b/aoyuPlugIn/汇威/zq_bsd.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +namespace aoyuPlugIn +{ + [Description("补数单反写生产订单")] + public class bsdFXscdd : AbstractBillPlugIn + { + + //单据头菜单点击 + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + string t = ""; + if (e.BarItemKey == "tbSplitApprove"||e.BarItemKey== "tbApprove") + { + t = this.View.Model.GetValue("FBillNo").ToString(); + fx_scdds(t,"1"); + } else if (e.BarItemKey == "tbReject") { + t = this.View.Model.GetValue("FBillNo").ToString(); + fx_scdds(t,"0"); + } + } + //计算前先删除当前数据 + void fx_scdds(string fbillno, string isja) + { + try + { + var sSql = String.Format("EXEC hw_fx_bs " + fbillno + "," + isja); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + } + catch (Exception ex) + { this.View.ShowMessage("反写生产订单补数时发生错误为:" + ex.Message); } + } + + } +} + + diff --git a/aoyuPlugIn/汇威/zq_pl.cs b/aoyuPlugIn/汇威/zq_pl.cs new file mode 100644 index 0000000..3bfb0e9 --- /dev/null +++ b/aoyuPlugIn/汇威/zq_pl.cs @@ -0,0 +1,111 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; + +namespace aoyuPlugIn +{ + [Description("出勤批录员工")] + public class zq_pl : AbstractBillPlugIn + { + public override void AfterBindData(EventArgs e) + { + base.AfterBindData(e); + + + var baseObj1 = this.Model.GetValue("FBT005"); + if (baseObj1.ToString() == "0") + { + var sSql = String.Format("exec hw_get_btbz"); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + //string k = item[0].ToString(); + //this.Model.SetValue("F_YGNO3", item[0], i); + + this.Model.SetValue("FBT005", dr[0][1].ToString()); + this.View.UpdateView("FBT005"); + this.Model.SetValue("FBT006", dr[1][1].ToString()); + this.View.UpdateView("FBT006"); + this.Model.SetValue("FBT012", dr[2][1].ToString()); + this.View.UpdateView("FBT012"); + + + + } + + + + } + + + } + //单据体菜单操作 + public override void EntryBarItemClick(BarItemClickEventArgs e) + { + base.EntryBarItemClick(e); + if (e.BarItemKey == "tbPL") + { + string tm = Convert.ToDateTime(this.View.Model.GetValue("F_DATE").ToString()).ToShortDateString(); + tm = "'" + tm + "'"; + DynamicObject fgt = this.View.Model.GetValue("FCBM") as DynamicObject; + string t = fgt["ID"].ToString(); + add_data_stort(tm,t); + } + } + void del_data(string FEntity_nm) + { + try + { + //取表体最大行数 + int tol = this.Model.GetEntryRowCount(FEntity_nm); + tol--; + for (int i = tol; i > -1; i--) + { + this.View.Model.DeleteEntryRow(FEntity_nm, i); //先删除空行 + } + } + catch (Exception ex) + { this.View.ShowMessage("删除表体数据时发生错误为:" + ex.Message); } + } + public void add_data_stort(string fdate,string bcID) + { + try + { + del_data("F_GAT_YGCQs"); + var sSql = String.Format("EXEC hw_get_plyg_cq " + fdate+","+bcID); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + this.View.Model.BatchCreateNewEntryRow("F_GAT_YGCQs", dr.Count); + } + foreach (var item in dr) + { + string k = item[0].ToString(); + this.Model.SetValue("F_YGNM", item[0], i); + this.Model.SetValue("F_ISXYG", item[1], i); + this.Model.SetValue("F_ISSYQ", item[2], i); + + //this.Model.SetValue("F_REM", "1", i); + i++; + } + } + catch (Exception ex) { this.View.ShowMessage("加表体数据时发生错误为:" + ex.Message); } + } + } +} diff --git a/aoyuPlugIn/汇威/zs_rgz.cs b/aoyuPlugIn/汇威/zs_rgz.cs new file mode 100644 index 0000000..9280cf1 --- /dev/null +++ b/aoyuPlugIn/汇威/zs_rgz.cs @@ -0,0 +1,103 @@ +using System; +using System.ComponentModel; + +using Kingdee.BOS.Core.Bill.PlugIn; + +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; + +using Kingdee.BOS.ServiceHelper; + + +namespace aoyuPlugIn +{ + [Description("注塑日工资")] + public class zs_rgz : AbstractBillPlugIn + { + + //单据头菜单点击 + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + string t = Convert.ToDateTime(this.View.Model.GetValue("FDate").ToString()).ToShortDateString(); + if (e.BarItemKey == "tbSCRGZ") + { + check_data(t); + } + } + //检测数据是否有未审核 + void check_data(string date1) + { + try + { + date1 = "'" + date1 + "'"; + var sSql = String.Format("EXEC hw_zsrgz_checkSH " + date1); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + if (dr.Count > 0) + { + string t = dr[0][0].ToString(); + this.View.ShowMessage(t); + return; + } + add_data_stort(date1); + } + catch (Exception ex) + { this.View.ShowMessage("检测数据是否有未审核时发生错误为:" + ex.Message); } + + } + //存储过程加入表 + public void add_data_stort(string cs) + { + try + { + del_data("F_QBOY_Entity");//先删除数据 + //return; + //cs = "'" + cs + "'"; + var sSql = String.Format("EXEC hw_get_rgz_zs " + cs); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + this.View.Model.BatchCreateNewEntryRow("F_QBOY_Entity", dr.Count); + } + foreach (var item in dr) + { + + this.Model.SetValue("FYGID", item[0], i); + this.Model.SetValue("FJJGZ", item[1], i); + this.Model.SetValue("FJSGZ", item[2], i); + this.Model.SetValue("FTJBT", item[3], i); + this.Model.SetValue("FBMJT", item[4], i); + this.Model.SetValue("FYBBT", item[5], i); + this.Model.SetValue("FCFBT", item[6], i); + this.Model.SetValue("FKJBT", item[7], i); + this.Model.SetValue("FOTHER", item[8], i); + this.Model.SetValue("FDTGZ", item[9], i); + //this.Model.SetValue("F_GWBT", item[10], i); + //this.Model.SetValue("F_CFBT", item[11], i); + //this.Model.SetValue("F_YBBT", item[12], i); + //this.Model.SetValue("F_XYGBT", item[13], i); + //this.Model.SetValue("F_SYQBT", item[14], i); + //this.Model.SetValue("F_XCPBT", item[15], i); + i++; + } + } + catch (Exception ex) { this.View.ShowMessage("加表体数据时发生错误为:" + ex.Message); } + } + //计算前先删除当前数据 + void del_data(string FEntity_nm) + { + try + { + //取表体最大行数 + int tol = this.Model.GetEntryRowCount(FEntity_nm); + tol--; + for (int i = tol; i > -1; i--) + { + this.View.Model.DeleteEntryRow(FEntity_nm, i); //先删除空行 + } + } + catch (Exception ex) + { this.View.ShowMessage("删除表体数据时发生错误为:" + ex.Message); } + } + } +} diff --git a/aoyuPlugIn/汇威/zs_ygz.cs b/aoyuPlugIn/汇威/zs_ygz.cs new file mode 100644 index 0000000..e1ad3af --- /dev/null +++ b/aoyuPlugIn/汇威/zs_ygz.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.ComponentModel; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; + +namespace aoyuPlugIn +{ + [Description("注塑月工资")] + public class zs_ygz : AbstractBillPlugIn + { + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + //this.View.ShowMessage("Hello World:" + e.BarItemKey.ToString()); + if (e.BarItemKey == "tbSCYGZ") + { + string years = this.View.Model.GetValue("F_YEAR").ToString(); + if (years == "" || years == "0") years = DateTime.Today.Year.ToString(); + string months = this.View.Model.GetValue("F_MONTH").ToString(); + del_data("F_QBOY_Entity", years, months); + } + //删除窗体数据 + void del_data(string bodynm, string y, string m) + { + try + { + //取表体最大行数 + int tol = this.Model.GetEntryRowCount(bodynm); + tol--; + for (int i = tol; i > -1; i--) + { + this.View.Model.DeleteEntryRow(bodynm, i); //先删除空行 + } + add_data_stort(y, m, bodynm); + } + catch (Exception ex) + { this.View.ShowMessage("删除表体数据时发生错误为:" + ex.Message); } + } + //加载数据 + void add_data_stort(string y, string m, string bodynm) + { + try + { + string cs = y + "," + m; + var sSql = String.Format("EXEC hw_get_ygz_zs " + cs); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + int i = 0; + if (dr.Count > 0) + { + string t = dr[0][0].ToString(); + if (t == "1") + { + this.View.ShowMessage("计算月工资失败:因为日工资有未审核单据"); + return; + } + + this.View.Model.BatchCreateNewEntryRow(bodynm, dr.Count); + } + foreach (var item in dr) + { + + this.Model.SetValue("FYGID", item[0], i); + this.Model.SetValue("FJJGZ", item[1], i); + this.Model.SetValue("FJSGZ", item[2], i); + this.Model.SetValue("FTJBT", item[3], i); + this.Model.SetValue("FBMJT", item[4], i); + this.Model.SetValue("FYBBT", item[5], i); + this.Model.SetValue("FCFBT", item[6], i); + this.Model.SetValue("FGLBT", item[7], i); + this.Model.SetValue("FOTHER", item[8], i); + this.Model.SetValue("FDTGZ", item[9], i); + i++; + } + } + catch (Exception ex) { this.View.ShowMessage("加表体数据时发生错误为:" + ex.Message); } + } + + } + } +} diff --git a/aoyuPlugIn/汇威/zxSQL.cs b/aoyuPlugIn/汇威/zxSQL.cs new file mode 100644 index 0000000..62e2023 --- /dev/null +++ b/aoyuPlugIn/汇威/zxSQL.cs @@ -0,0 +1,38 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; + + +namespace aoyuPlugIn +{ + [Description("执行SLQ语句")] + public class zxSQL: AbstractBillPlugIn + { + + public override void ButtonClick(ButtonClickEventArgs e) + { + base.ButtonClick(e); + if (e.Key.ToString() == "") + { + this.View.ShowMessage("点击按钮成功"); + } + } + + + + } +} diff --git a/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsck_lb.cs b/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsck_lb.cs new file mode 100644 index 0000000..105eedd --- /dev/null +++ b/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsck_lb.cs @@ -0,0 +1,69 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.List.PlugIn; +using Kingdee.BOS.Core.List.PlugIn.Args; +using System.Collections; +using Kingdee.BOS.Core.List; + +namespace aoyuPlugIn +{ + [Description("销售出库提交_列表")] + public class jb_xsck_lb : AbstractListPlugIn + { + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + if (e.BarItemKey == "tbSplitSubmit" || e.BarItemKey == "tbSubmit")//提交 + { + try + { + + if (this.ListView.SelectedRowsInfo.Count > 0) + { + string tsxx = ""; + ListSelectedRowCollection listcoll = this.ListView.SelectedRowsInfo; + string[] listKey = listcoll.GetPrimaryKeyValues(); + + for (int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) + { + + + //取指定行单据编号 + //string fbillno = this.ListView.SelectedRowsInfo[i].BillNo; + string zt = this.ListView.SelectedRowsInfo[i].DataRow["FDOCUMENTSTATUS"].ToString(); + if (zt == "A" || zt == "D") + { + string fid = listKey[i]; + var sSql = String.Format("EXEC jb_get_kchz " + fid); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + + foreach (var r in dr) + { + tsxx =tsxx+ "出货单号:" + r[0].ToString() + "|物料编号:" + r[1].ToString() + " |出货数:" + r[2].ToString() + "|差异数:" + r[3].ToString()+"\r\n"; + } + } + } + if(tsxx!="") + this.View.ShowMessage(tsxx); + } + } + catch (Exception ex) { this.View.ShowMessage("提交时发生错误为:" + ex.Message); } + } + } + } +} diff --git a/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsck_tj.cs b/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsck_tj.cs new file mode 100644 index 0000000..8da8be8 --- /dev/null +++ b/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsck_tj.cs @@ -0,0 +1,47 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +namespace aoyuPlugIn +{ + [Description("销售出库单据界面提交")] + public class jb_xsck_tj : AbstractBillPlugIn + { + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + if (e.BarItemKey == "tbSplitSubmit" || e.BarItemKey == "tbSubmit")//提交 + { + try + { + string tsxx = ""; + //e.DynamicObjects[0]["Id"] + string fid = this.View.Model.DataObject["Id"].ToString(); + var sSql = String.Format("EXEC jb_get_kchz " + fid); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + foreach (var r in dr) + { + tsxx = tsxx + "出货单号:" + r[0].ToString() + "|物料编号:" + r[1].ToString() + " |出货数:" + r[2].ToString() + "|差异数:" + r[3].ToString() + "\r\n"; + } + if(tsxx!="") + this.View.ShowMessage(tsxx); + + } + catch (Exception ex) { this.View.ShowMessage("提交时发生错误为:" + ex.Message); } + } + } + } +} diff --git a/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsdd_sh.cs b/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsdd_sh.cs new file mode 100644 index 0000000..380bf63 --- /dev/null +++ b/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsdd_sh.cs @@ -0,0 +1,279 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.K3.Core.MFG.EntityHelper; +using System.ComponentModel; +using Kingdee.BOS; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.Const; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.Operation; +using Kingdee.BOS.Core.List; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.ConvertElement; +using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs; +using Kingdee.BOS.Core.Interaction; +using Kingdee.BOS.Core.Validation; +using Kingdee.BOS.Contracts; +using Kingdee.BOS.App; +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Orm; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; + +namespace aoyuPlugIn +{ + [Description("销售订单--审核验证差异数")] + public class jb_xsdd_sh : AbstractOperationServicePlugIn + { + public override void EndOperationTransaction(EndOperationTransactionArgs e) + { + base.EndOperationTransaction(e); + string tsxx = ""; + foreach (DynamicObject item in e.DataEntitys) + { + long fid = Convert.ToInt64(item["ID"]); + //String sSql = String.Format(@" insert into pcdn_t_sd_kucunst(id ,beginnum,endnum,ydid,ftype,fbegin) select b.F_PCDN_STORE*100,F_PCDN_BEGINNUM,F_PCDN_ENDNUM,a.FID,'SDIN',F_PCDN_BEGINZF from pcdn_t_sd_sdinentry a, pcdn_t_sd_sdin b where a.FID=b.FID and b.fid={0} ", fid); + //DBUtils.Execute(this.Context, sSql); + var sSql = String.Format("EXEC jb_get_kchz " + fid); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + + foreach (var r in dr) + { + tsxx = "出货单号:" + r[0].ToString() + "|物料编号:" + r[1].ToString() + "|出货数:" + r[2].ToString() + "|差异数:" + r[3].ToString(); + + OperationResult.OperateResult.Insert(0, new OperateResult() + { + MessageType = MessageType.Normal, + Message = Convert.ToString(tsxx), + Name = "验证结果", + SuccessStatus = true, + } + ); + } + + } + } + + + + + + + //public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) + //{ + // base.BeforeExecuteOperationTransaction(e); + // return; + // string tsxx = ""; + // foreach (ExtendedDataEntity extendedDataEntity in e.SelectedRows) + // { + // int DJID = 0; + // DynamicObject dynamicObjects = extendedDataEntity.DataEntity; + // DJID = Convert.ToInt32(dynamicObjects["Id"]); + + // var sSql = String.Format("EXEC jb_get_kchz " + DJID); + // var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + + // foreach (var r in dr) + // { + // tsxx ="销售订单号:"+r[0].ToString() + "|物料编号:" + r[1].ToString() + "|订单数:"+r[2].ToString()+"|差异数:"+r[3].ToString(); + + // OperationResult.OperateResult.Insert(0, new OperateResult() + // { + // MessageType = MessageType.Normal, + // Message = Convert.ToString(tsxx), + // Name = "验证结果", + // SuccessStatus = true, + // } + // ); + + // } + // //if (tsxx != "") + // //{ + // // tsxx = "提交失败!\r\n" + tsxx; + // // //throw new KDBusinessException("", tsxx); + // // //e.Cancel = false; + // // //e.CancelMessage = Convert.ToString(tsxx); + + // // OperationResult.OperateResult.Insert(0, new OperateResult() + // // { + // // MessageType = MessageType.Normal, + // // Message = Convert.ToString(tsxx), + // // Name = "验证结果", + // // SuccessStatus = true, + // // } + // // ); + + // // OperationResult.OperateResult.Insert(0, new OperateResult() + // // { + // // MessageType = MessageType.Normal, + // // Message = Convert.ToString(tsxx), + // // Name = "验证结果", + // // SuccessStatus = true, + // // } + // // ); + + // //} + + // //throw new KDBusinessException("", "物料ID为:" + MaterialID.ToString()); + // //e.CancelMessage = "物料ID为:"+MaterialID.ToString(); + + // //string sql = string.Format(@"/*dialect*/select + // // (SELECT case when count(1) > 0 then '在BOM单已使用此物料,' else ''end + // // FROM T_ENG_BOM t0 LEFT OUTER JOIN T_ENG_BOMCHILD t1 ON t0.FID = t1.FID + // // where t0.FMATERIALID={0} or t1.FMATERIALID={1})+ + // // (SELECT case when count(1) > 0 then '采购订单已使用此物料,' else ''end + // // FROM T_PUR_POORDERENTRY where FMATERIALID = {2}) as result + // // where (select top 1 FAntiCheckControl from PAEZ_t_AntiCheckControl order by fid)=1", MaterialID, MaterialID, MaterialID); + + // // string sql = string.Format(@"/*dialect*/select + // // (SELECT case when count(1) > 0 then '在BOM单已使用此物料,' else ''end + // // FROM T_ENG_BOM t0 LEFT OUTER JOIN T_ENG_BOMCHILD t1 ON t0.FID = t1.FID + // // where t0.FMATERIALID={0} or t1.FMATERIALID={1})+ + // // (SELECT case when count(1) > 0 then '采购订单已使用此物料,' else ''end + // // FROM T_PUR_POORDERENTRY where FMATERIALID = {2}) as result + // // where (select top 1 FAntiCheckControl from PAEZ_t_AntiCheckControl order by fid)=1", MaterialID, MaterialID, MaterialID); + + // // DynamicObjectCollection rows = DBUtils.ExecuteDynamicObject(this.Context, sql); + // // string result = ""; + // // foreach (DynamicObject row in rows) + // // { + // // result = row["result"].ToString(); + // // } + // // if (!"".Equals(result)) + // // { + // //e.Cancel = true; + // //e.CancelMessage = Convert.ToString(dynamicObjects["Number"]) + result + "不能反审核的!本次反审核操作失败。"; + // //e.CancelMessage = "审核测试不能反审核的!本次反审核操作失败。"; + + // // break; + // // } + // } + + //} + string getjg(BeforeExecuteOperationTransaction e) + { + string tsxx = ""; + int k = 0; + foreach (ExtendedDataEntity extendedDataEntity in e.SelectedRows) + { + + int DJID = 0; + DynamicObject dynamicObjects = extendedDataEntity.DataEntity; + DJID = Convert.ToInt32(dynamicObjects["Id"]); + + var sSql = String.Format("EXEC jb_get_kchz " + DJID); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + + foreach (var r in dr) + { + tsxx = tsxx + "销售订单号:" + r[0].ToString() + "|物料编号:" + r[1].ToString() + "|订单数:" + r[2].ToString() + "|差异数:" + r[3].ToString() + "\r\n"; + + } + if (tsxx != "") + { + tsxx = "提交失败!\r\n" + tsxx; + //throw new KDBusinessException("", tsxx); + //e.Cancel = false; + //e.CancelMessage = Convert.ToString(tsxx); + + OperationResult.OperateResult.Insert(0, new OperateResult() + { + MessageType = MessageType.Normal, + Message = Convert.ToString(tsxx), + Name = "验证结果", + SuccessStatus = true, + } + ); + OperationResult.OperateResult.Insert(0, new OperateResult() + { + MessageType = MessageType.Normal, + Message = Convert.ToString(tsxx), + Name = "验证结果1", + SuccessStatus = true, + } + ); + + } + k++; + } + + return ""; + } + string getjg2(BeforeExecuteOperationTransaction e) + { + string tsxx = ""; + foreach (ExtendedDataEntity extendedDataEntity in e.SelectedRows) + { + int DJID = 0; + DynamicObject dynamicObjects = extendedDataEntity.DataEntity; + DJID = Convert.ToInt32(dynamicObjects["Id"]); + + var sSql = String.Format("EXEC jb_get_kchz " + DJID); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + + foreach (var r in dr) + { + tsxx = tsxx + "销售订单号:" + r[0].ToString() + "|物料编号:" + r[1].ToString() + "|订单数:" + r[2].ToString() + "|差异数:" + r[3].ToString() + "\r\n"; + + } + if (tsxx != "") + { + tsxx = "提交失败!\r\n" + tsxx; + //throw new KDBusinessException("", tsxx); + //e.Cancel = false; + //e.CancelMessage = Convert.ToString(tsxx); + + OperationResult.OperateResult.Insert(0, new OperateResult() + { + MessageType = MessageType.Normal, + Message = Convert.ToString(tsxx), + Name = "验证结果", + SuccessStatus = true, + } + ); + + } + + //throw new KDBusinessException("", "物料ID为:" + MaterialID.ToString()); + //e.CancelMessage = "物料ID为:"+MaterialID.ToString(); + + //string sql = string.Format(@"/*dialect*/select + // (SELECT case when count(1) > 0 then '在BOM单已使用此物料,' else ''end + // FROM T_ENG_BOM t0 LEFT OUTER JOIN T_ENG_BOMCHILD t1 ON t0.FID = t1.FID + // where t0.FMATERIALID={0} or t1.FMATERIALID={1})+ + // (SELECT case when count(1) > 0 then '采购订单已使用此物料,' else ''end + // FROM T_PUR_POORDERENTRY where FMATERIALID = {2}) as result + // where (select top 1 FAntiCheckControl from PAEZ_t_AntiCheckControl order by fid)=1", MaterialID, MaterialID, MaterialID); + + // string sql = string.Format(@"/*dialect*/select + // (SELECT case when count(1) > 0 then '在BOM单已使用此物料,' else ''end + // FROM T_ENG_BOM t0 LEFT OUTER JOIN T_ENG_BOMCHILD t1 ON t0.FID = t1.FID + // where t0.FMATERIALID={0} or t1.FMATERIALID={1})+ + // (SELECT case when count(1) > 0 then '采购订单已使用此物料,' else ''end + // FROM T_PUR_POORDERENTRY where FMATERIALID = {2}) as result + // where (select top 1 FAntiCheckControl from PAEZ_t_AntiCheckControl order by fid)=1", MaterialID, MaterialID, MaterialID); + + // DynamicObjectCollection rows = DBUtils.ExecuteDynamicObject(this.Context, sql); + // string result = ""; + // foreach (DynamicObject row in rows) + // { + // result = row["result"].ToString(); + // } + // if (!"".Equals(result)) + // { + //e.Cancel = true; + //e.CancelMessage = Convert.ToString(dynamicObjects["Number"]) + result + "不能反审核的!本次反审核操作失败。"; + //e.CancelMessage = "审核测试不能反审核的!本次反审核操作失败。"; + + // break; + // } + } + return ""; + } + } +} diff --git a/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsdd_yzkcs.cs b/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsdd_yzkcs.cs new file mode 100644 index 0000000..cf98edd --- /dev/null +++ b/aoyuPlugIn/汪总监/佳博销售订单验证库存数/jb_xsdd_yzkcs.cs @@ -0,0 +1,97 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using System.Data; +using System.Collections; +using System.Windows.Forms; +namespace aoyuPlugIn +{ + [Description("销售订单验证库存数")] + public class jb_xsdd_yzkcs : AbstractBillPlugIn + { + public override void BeforeSave(BeforeSaveEventArgs e) + { + + base.BeforeSave(e); + + + ////取表体最大行数 + //string FEntity_nm = "T_SAL_ORDERENTRY"; + //int tol = this.Model.GetEntryRowCount(FEntity_nm); + //计算评审天数 + //销售组 FSaleGroupId,FSALEGROUPID + DynamicObject obxsz = this.View.Model.GetValue("FSaleGroupId") as DynamicObject; + string xsz = obxsz["Name"].ToString(); + try + { + //FSaleOrderEntry + string ORM_NM = "SaleOrderEntry";//你的单据体ORM实体名 + DynamicObject obj = this.Model.DataObject; + DynamicObjectCollection rows = obj[ORM_NM] as DynamicObjectCollection; + int k = 0; + ComboBox cmb = new ComboBox();DataTable tb = new DataTable(); + tb.Columns.Add("wlno");tb.Columns.Add("fqty"); + try { + foreach (var r in rows) + { + DynamicObject obwl = this.View.Model.GetValue("FMaterialId", k) as DynamicObject; + string wlno = obwl["Number"].ToString(); + + if (cmb.Items.Contains(wlno) == false) + { + cmb.Items.Add(wlno); + DataRow nr = tb.NewRow(); + nr[0] = wlno; + string dds = this.View.Model.GetValue("FQty", k).ToString(); + nr[1] = dds; + tb.Rows.Add(nr); + } + else + { + DataRow[] nr = tb.Select("wlno='" + wlno + "'"); + nr[0]["fqty"] = (Convert.ToDouble(nr[0]["fqty"].ToString()) + Convert.ToDouble(this.View.Model.GetValue("FQty",k).ToString())).ToString(); + } + k++; + } + } + catch(Exception ex) { MessageBox.Show(ex.Message); } + k = 0; + foreach (DataRow r in tb.Rows) + { + string wlno = r["wlno"].ToString(); + Double fqty = Convert.ToDouble( r["fqty"].ToString()); + + var sSql = String.Format("EXEC jb_get_kchz " + xsz + "," + wlno); + var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); + Double cys =Convert.ToDouble(dr[0]["cys"].ToString()); + if (fqty > cys) + { + this.View.ShowMessage("物料编码:" + wlno + "的订单数" + fqty.ToString() + "大于库存管理报表中的差异数" + cys.ToString() + ",不能保存"); + + //e.Cancel = true; + } + k++; + } + } + catch (Exception ex) { this.View.ShowMessage("验证数据时发生错误为:" + ex.Message); + e.Cancel = true; + } + + } + + } +} diff --git a/aoyuPlugIn/皇顶/hd_xsdd_xsddps.cs b/aoyuPlugIn/皇顶/hd_xsdd_xsddps.cs new file mode 100644 index 0000000..d23f67d --- /dev/null +++ b/aoyuPlugIn/皇顶/hd_xsdd_xsddps.cs @@ -0,0 +1,74 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kingdee.BOS; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.Bill.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.SqlBuilder; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using System.Data; +using System.Collections; + +namespace aoyuPlugIn +{ + [Description("销售订单评审")] + public class hd_xsdd_xsddps : AbstractBillPlugIn + { + public override void BeforeSave(BeforeSaveEventArgs e) + { + + base.BeforeSave(e); + //F_HDIN_DDPS + //订单日期 + string ddrq = this.View.Model.GetValue("FDate").ToString(); + + ////取表体最大行数 + //string FEntity_nm = "T_SAL_ORDERENTRY"; + //int tol = this.Model.GetEntryRowCount(FEntity_nm); + //计算评审天数 + try + { + string ORM_NM = "SaleOrderEntry";//你的单据体ORM实体名 + DynamicObject obj = this.Model.DataObject; + DynamicObjectCollection rows = obj[ORM_NM] as DynamicObjectCollection; + + foreach (var r in rows) + { + //FDeliveryDate DeliveryDate + string yhrq = r["DeliveryDate"].ToString(); + //交货期和下单日期的相差天数 + string xcts = getRQC(Convert.ToDateTime(ddrq), Convert.ToDateTime(yhrq)); + r["F_HDIN_SCTS"] = xcts; + //string sczq= r["F_Hdin_SCZQ"].ToString(); + //string scts = r["F_HDIN_SCTS"].ToString(); + //string psts = r["F_HDIN_PSTS"].ToString(); + this.View.ShowMessage(yhrq); + string sl = r["F_FQ1TY1"].ToString(); + + + } + } + catch (Exception ex) { this.View.ShowMessage("组合表数据时发生错误为:" + ex.Message); } + //this.View.ShowMessage(ddrq); + //e.Cancel = true; + } + //计算日期差 + string getRQC(DateTime tm1,DateTime tm2) + { + int ts = 0; + TimeSpan tsc = tm2.Subtract(tm1); + ts = tsc.Days + 1; + return ts.ToString(); + } + + } +}