using Kingdee.BOS; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; using Kingdee.BOS.Core.List; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Demo.BillView.PRD { [Description("[日计划工单] 表单插件"), HotUpdate] public class Pro_DayPlan : AbstractBillPlugIn { public override void BarItemClick(BarItemClickEventArgs e) { base.BarItemClick(e); try { //主表关闭 if (e.BarItemKey.ToUpper() == "BTNCLOSE") { var FID = this.View.Model.GetPKValue(); string sql = $"/*dialect*/ update Sc_WorkBillSortBillMain set FDocumentStatus = 'E',FHCloseMan = '{Context.UserId}',FHCloseDate = GETDATE() where FID = {FID}"; DBServiceHelper.Execute(Context, sql); this.View.Refresh(); this.View.ShowMessage("操作成功"); } //反关闭 if (e.BarItemKey.ToUpper() == "BTNCANCELCLOSE") { var FID = this.View.Model.GetPKValue(); string yzSql = string.Format(@"/*dialect*/ SELECT A.FBILLNO FROM SC_WORKBILLSORTBILLMAIN A JOIN (SELECT * FROM SC_WORKBILLSORTBILLMAIN WHERE FDOCUMENTSTATUS <>'E') B ON A.FSCORDERNO=B.FSCORDERNO AND A.FSRCBILLENTRYSEQ=B.FSRCBILLENTRYSEQ WHERE A.FID IN ({0}) ", FID); DataTable dataTable = DBServiceHelper.ExecuteDataSet(Context, yzSql).Tables[0]; if (dataTable.Rows.Count > 0) { this.View.ShowErrMessage("反关闭后会存在生产订单和明细行号数据重复"); return; } string sql = $"/*dialect*/ update Sc_WorkBillSortBillMain set FDocumentStatus = 'C',FHCloseMan = '',FHCloseDate = NULL where FID = {FID}"; DBServiceHelper.Execute(Context, sql); this.View.Refresh(); this.View.ShowMessage("操作成功"); } } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } public override void EntryBarItemClick(BarItemClickEventArgs e) { base.EntryBarItemClick(e); if (e.BarItemKey.ToUpper() == "TBROWCLOSE") { int[] selectedIndexsR = this.View.GetControl("FEntity").GetSelectedRows(); //单据体数据     Array.Sort(selectedIndexsR); DynamicObjectCollection selectedRowsDy = this.Model.DataObject["FEntity"] as DynamicObjectCollection;        //选中行数据      DynamicObject selectedRow; StringBuilder result = new StringBuilder(); List sqlList = new List(); foreach (var item in selectedIndexsR) { selectedRow = selectedRowsDy[item]; string sql = string.Format(@" /*dialect*/ select isnull(c.FRealQty,0)FRealQty from Sc_WorkBillSortBillSub a left join T_PRD_MORPTENTRY b on a.FEntryID = b.FDAYPLANFID left join T_PRD_INSTOCKENTRY c on b.FENTRYID = c.FSrcEntryId where a.FEntryID in ({0})", selectedRow["Id"]); decimal FRealQty = DBServiceHelper.ExecuteScalar(Context, sql, 0); //if (FRealQty == 0) //{ // result.Append($"分录行:{selectedRow["Seq"]},日计划明细未下推生成生产入库单\r\n"); // continue; //} sql = string.Format(@" /*dialect*/ select count(*)res from Sc_WorkBillSortBillSub a left join Sc_DayPlanPPBomBillMain b on a.FEntryID = b.FDayPlanFID left join Sc_DayPlanPPBomBillSub c on b.FID = c.FID where a.FEntryID in ({0}) and FISSUETYPE in (1, 2) and FDwyl * {1} < FPickedQty", selectedRow["Id"], FRealQty); decimal Count = DBServiceHelper.ExecuteScalar(Context, sql, 0); if (Count > 0) { result.Append($"分录行:{selectedRow["Seq"]},下游领料单的已领料数大于入库的标准用量\r\n"); continue; } sql = string.Format(@" /*dialect*/ update Sc_WorkBillSortBillSub set FInStockCount = {0}, FNotInStockCount = FHQty - {0}, FHEntryCloseDate = getdate(), FHCloseTypeSub = 1 where FEntryID={1}", FRealQty, selectedRow["Id"]); sqlList.Add(sql); } var fid = this.View.Model.GetPKValue(); sqlList.Add($"update Sc_WorkBillSortBillMain set FCloseCount = (select sum(FNotInStockCount) from Sc_WorkBillSortBillSub where FID ={fid}) where FID ={fid}"); DBServiceHelper.ExecuteBatch(Context, sqlList); this.View.Refresh(); if (string.IsNullOrEmpty(result.ToString())) this.View.ShowMessage("操作成功"); else this.View.ShowErrMessage(result.ToString()); } else if (e.BarItemKey.ToUpper() == "TBROWCANCELCLOSE") { int[] selectedIndexsR = this.View.GetControl("FEntity").GetSelectedRows(); //单据体数据     Array.Sort(selectedIndexsR); DynamicObjectCollection selectedRowsDy = this.Model.DataObject["FEntity"] as DynamicObjectCollection;        //选中行数据      DynamicObject selectedRow; List sqlList = new List(); foreach (var item in selectedIndexsR) { selectedRow = selectedRowsDy[item]; string sql = string.Format(@" /*dialect*/ update Sc_WorkBillSortBillSub set FInStockCount = 0, FNotInStockCount =0, FHEntryCloseDate = null, FHCloseTypeSub = 0 where FEntryID={0}", selectedRow["Id"]); sqlList.Add(sql); } var fid = this.View.Model.GetPKValue(); sqlList.Add($"update Sc_WorkBillSortBillMain set FCloseCount = (select sum(FNotInStockCount) from Sc_WorkBillSortBillSub where FID ={fid}) where FID ={fid}"); DBServiceHelper.ExecuteBatch(Context, sqlList); this.View.Refresh(); this.View.ShowMessage("操作成功"); } } } }