发料方式全调拨,新增调拨单自动插入生产用料清单

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

发料方式全调拨,新增调拨单自动插入生产用料清单

案例需求:客退回来的产品,种类多,数量小,当仓库收到货后,PMC安排生产返工,无法第一时间知道,返工需要的材料,所以需要很频繁的,修改生产用料清单,且不能一次处理。 开发思路:1:直接调拨单上增加字段,点击跳转生产订单,便于用户关联。 2:根据关联的信息,将调拨单上的包插入生产用料清单上,并且产生关联 3:可能用户会行删除明细,特将保存上判断如果不存在此行,则删除用料清单上的创建行,并且删掉关联。且列表点击删除,则也删除用料清单上的行。 那么开发开始。首先是第一个表单插件。先将直接调拨单上增加如下字段。 * 用料清单编号:FPPBomBillNo * 生产订单内码:FMoId * 生产订单编号:FMoBillNo * 生产订单分录内码:FMoEntryId * 源单类型:FSrcBillTypeId * 源单编号:FSrcBillNo * 系统源单内码:FSrcInterId ``` using Kingdee.BOS.BusinessEntity.BillType; using Kingdee.BOS.Core.CommonFilter; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.List; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Resource; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using Kingdee.K3.Core.MFG.EntityHelper; using Kingdee.K3.Core.MFG.Utils; using Kingdee.K3.MFG.ServiceHelper; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; namespace SNZL.PRD_Fid.aduit { /// <summary> /// 【表单插件】单据获取生产订单信息 /// </summary> [Description("表单插件,点击生产订单编号获取生产订单信息"), HotUpdate] public class GetBeforeF7Select : AbstractDynamicFormPlugIn { public override void BeforeF7Select(BeforeF7SelectEventArgs e) { base.BeforeF7Select(e); string text = e.ListFilterParameter.Filter; if (this.GetF7AndSetNumberEvent(e.FieldKey, e.Row, out text)) { e.Cancel = true; } } private bool GetF7AndSetNumberEvent(string fieldKey, int eRow, out string filter) { bool flag = false; filter = null; switch (fieldKey) { case "FMoBillNo": this.ShowMoListForm(eRow);//生产订单编码 break; } if (flag) { filter = " 1 = 0 "; } return flag; } private void ShowMoListForm(int row) { long value = base.View.Model.GetValue("FMaterialId", row, 0L, null);//物料编码不为空 if (value <= 0L) { base.View.ShowMessage(ResManager.LoadKDString("请先选择物料", "015078000002331", SubSystemType.MFG, new object[0]), MessageBoxType.Notice); return; } long prdOrgId = base.View.Model.GetValue("FStockOutOrgId", row, 0L, null);//调出库存组织不为空。 if (prdOrgId <= 0L) { base.View.ShowMessage(ResManager.LoadKDString("请先选择调入组织", "015078000002332", SubSystemType.MFG, new object[0]), MessageBoxType.Notice); return; } if (!this.ValidatePermission())//是否有查询的权限 { return; } string billType = this.GetBillType(); ListSelBillShowParameter listSelBillShowParameter = new ListSelBillShowParameter { FormId = "PRD_MO", PermissionItemId = "6e44119a58cb4a8e86f6c385e14a17ad", ParentPageId = base.View.PageId, IsShowApproved = true, IsLookUp = true, IsIsolationOrg = false, ListFilterParameter = new ListRegularFilterParameter { Filter = this.GetMoFilter(value, prdOrgId, billType), OrderBy = " FBILLNO DESC " } }; /*生产车间,无必要可以去掉*/ //long dynamicObjectItemValue = base.View.Model.DataObject.GetDynamicObjectItemValue("WorkShopId_Id", 0L); //if (dynamicObjectItemValue != 0L) //{ // IRegularFilterParameter expr_169 = listSelBillShowParameter.ListFilterParameter; // expr_169.Filter += string.Format(" AND FWORKSHOPID ={0} ", dynamicObjectItemValue); //} base.View.ShowForm(listSelBillShowParameter, delegate (FormResult result) { if (result != null && result.ReturnData != null && (result.ReturnData as ListSelectedRowCollection).Count > 0) { ListSelectedRowCollection listSelectedRowCollection = (ListSelectedRowCollection)result.ReturnData; long num = 0L; if (!long.TryParse(listSelectedRowCollection[0].EntryPrimaryKeyValue, out num) || num <= 0L) { this.View.ShowMessage(ResManager.LoadKDString("请选择生产订单的一条分录", "015078000002333", SubSystemType.MFG, new object[0]), MessageBoxType.Notice); return; } this.SetReturnValue(num, prdOrgId, row); } }); } private bool ValidatePermission() { bool flag = MFGCommonUtil.AuthPermissionBeforeShowF7Form(base.View, "PRD_MO", "6e44119a58cb4a8e86f6c385e14a17ad"); if (!flag) { base.View.ShowMessage(ResManager.LoadKDString("没有目标单据的“查看”权限!", "015078000002334", SubSystemType.MFG, new object[0]), MessageBoxType.Notice); flag = false; } return flag; } private string GetBillType() { List<SimpleBillType> billTypeInfos = BusinessDataServiceHelper.GetBillTypeInfos(base.Context, "PRD_MO", "ProductType", "2", "MoBillTypeParaSetting"); string result = string.Empty; if (billTypeInfos.Count > 0) { string text = string.Join(",", (from o in billTypeInfos select o.Id).ToList<string>()); result = string.Format("'{0}'", text.Replace(",", "','")); } return result; } private string GetMoFilter(long mtrlId, long prdOrgId, string moBillType) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine(string.Format("FDocumentStatus = '{0}' AND FCancelStatus != '{1}' AND FIsSuspend !='1' AND FStatus in ('{2}','{3}','{4}') AND EXISTS (SELECT 1 FROM T_PRD_PPBOM p WHERE p.FDocumentStatus='{0}' AND p.FMOENTRYID=FTreeEntity_FENTRYID) And (FPrdOrgId = {5} OR (FIsEntrust='1' And FEntrustOrgId={6}))", new object[] { 'C', 'B', 3, 4, 5, prdOrgId, prdOrgId })); stringBuilder.AppendLine(this.GetExtMoFilter(moBillType, mtrlId)); return stringBuilder.ToString(); } private void SetReturnValue(long entryKeyId, long prdOrgId, int row) { DynamicObject pPBomDataForSelectedMo = this.GetPPBomDataForSelectedMo(entryKeyId); if (pPBomDataForSelectedMo == null) { base.View.ShowErrMessage(ResManager.LoadKDString("所选择生产订单分录没有对应的用料清单记录!", "015078000002335", SubSystemType.MFG, new object[0]), "", MessageBoxType.Notice); return; } this.SetValueForSelectedMo(pPBomDataForSelectedMo, row); } protected virtual string GetExtMoFilter(string moBillType, long mtrlId) { return string.Format(" AND NOT EXISTS (SELECT 1 FROM T_PRD_MO WHERE FBILLTYPE NOT IN ({0}) AND FMATERIALID={1})", moBillType, mtrlId); } private DynamicObject GetPPBomDataForSelectedMo(long moEntryId) { List<string> list = new List<string>(); list.Add("FMaterialID as FMaterialID");//物料 list.Add("FMoId as FMoId");//生产订单内码 list.Add("FMoBillNo as FMoBillNo");//生产订单编号 list.Add("FMoEntryId as FMoEntryId");//生产订单分录内码 list.Add("FMoEntrySeq as FMoEntrySeq");//生产订单行号 list.Add("FBillNo as FBillNo");//单据编号 list.Add("FId as FId");//单据ID list.Add("FMOTYPE as FMoType");//生产订单类型 QueryBuilderParemeter para = new QueryBuilderParemeter { FormId = "PRD_PPBOM", SelectItems = SelectorItemInfo.CreateItems(list.ToArray()), FilterClauseWihtKey = string.Format(" {0}={1} ", "FMOEntryID", moEntryId) }; return MFGServiceHelper.GetDynamicObjectCollection(base.Context, para, null).FirstOrDefault<DynamicObject>(); } private void SetValueForSelectedMo(DynamicObject ppbomData, int row) { base.View.Model.SetValue("FMoId", ppbomData.GetDynamicObjectItemValue("FMOID", 0L), row);//生产订单ID base.View.Model.SetValue("FMoBillNo", ppbomData.GetDynamicObjectItemValue<string>("FMOBILLNO", null), row);//生产订单编号 base.View.Model.SetValue("FMoEntryId", ppbomData.GetDynamicObjectItemValue("FMOENTRYID", 0L), row);//生产订单分录内码 base.View.Model.SetValue("FMoEntrySeq", ppbomData.GetDynamicObjectItemValue("FMOENTRYSEQ", 0), row);//生产订单行号 long dynamicObjectItemValue = ppbomData.GetDynamicObjectItemValue("FID", 0L);//获取生产用料单ID string dynamicObjectItemValue2 = ppbomData.GetDynamicObjectItemValue<string>("FBILLNO", null); //获取生产用料单单据编号 base.View.Model.SetValue("FEntrySrcInterId", dynamicObjectItemValue, row);//系统源单内码 base.View.Model.SetValue("FSrcBillNo", dynamicObjectItemValue2, row);//源单编号 base.View.Model.SetValue("FSrcBillTypeId", "PRD_PPBOM", row);//源单类型 base.View.Model.SetValue("FPPBomBillNo", dynamicObjectItemValue2, row);//用料清单编号 base.View.Model.SetValue("F_HX_Base", ppbomData.GetDynamicObjectItemValue("FMaterialID", 0L), row);//产品编码 } } } ``` 后面接下来的还有2个插件需要搭配使用,未完待续~ 1. 点击保存插入生产用料清单,并且创建关联关系。 2. 点击保存删除插入生产用料清单上的行。

发料方式全调拨,新增调拨单自动插入生产用料清单

案例需求:客退回来的产品,种类多,数量小,当仓库收到货后,PMC安排生产返工,无法第一时间知道,返工需要的材料,所以需要很频繁的,修...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息