发料方式全调拨,新增调拨单自动插入生产用料清单
案例需求:客退回来的产品,种类多,数量小,当仓库收到货后,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安排生产返工,无法第一时间知道,返工需要的材料,所以需要很频繁的,修...
点击下载文档
本文2024-09-16 18:16:13发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-21037.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章