单据转换插件,动态表单插件,表单插件,服务插件,多单据体 应用


多单据体,要二开绑定列上所有数据,二开的单据转换插件
using Kingdee.BOS;
using Kingdee.BOS.App;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace HANS.SalesOutboundSave
{
[Description("采购订单下推采购订单变更单携带付款计划到付款计划"), HotUpdate]
public class PoToPocPaymentPlan : AbstractConvertPlugIn
{
List<string> FBillNo = new List<string>();
public override void OnGetSourceData(GetSourceDataEventArgs e)
{
var sourceData = e.SourceData;
if (!sourceData.IsEmpty())
{
for (int i = 0, ilen = sourceData.Count; i < ilen; i++)
{
FBillNo.Add(Convert.ToString(sourceData[i]["FBillNo"]));
}
FBillNo = FBillNo.Distinct().ToList();
}
}
public override void AfterConvert(AfterConvertEventArgs e)
{
base.AfterConvert(e);
// 获取生成的全部下游单据
Entity mainEntity = e.TargetBusinessInfo.GetEntity("FIinstallment");
ExtendedDataEntity[] billDataEntitys = e.Result.FindByEntityKey("FBillHead");
// 对下游单据,逐张单据进行处理
Entity obj = e.TargetBusinessInfo.GetEntryEntity("FIinstallment");//单据体标识
foreach (var item in billDataEntitys)
{
DynamicObject dataObject = item.DataEntity;
DynamicObjectCollection SaleOrderEntry = dataObject["POChangeEntry"] as DynamicObjectCollection;
string srcBillNo = Convert.ToString(SaleOrderEntry[0]["OrderFBillNo"]);
DynamicObjectCollection secondEntryRows = mainEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;
secondEntryRows.Remove(secondEntryRows[0]);
List<SqlParam> ___SqlParam = new List<SqlParam>();
foreach (string billNo in FBillNo)
{
string SQL = String.Format(@"select x.*
from T_PUR_POORDERINSTALLMENT x
inner join t_PUR_POOrder y on x.fid=y.fid
where y.FBILLNO=@FBILLNO
order by x.FSEQ ASC
");
___SqlParam.Add(new SqlParam("@FBILLNO", KDDbType.String, billNo));
DynamicObjectCollection doc = DBServiceHelper.ExecuteDynamicObject(this.Context, SQL, null, null, System.Data.CommandType.Text, ___SqlParam.ToArray());
___SqlParam.Clear();
foreach (DynamicObject OB in doc)
{
DynamicObject newRow = new DynamicObject(obj.DynamicObjectType);
DynamicObject Material = null;
IViewService Service = ServiceHelper.GetService<IViewService>();
if (billNo.Equals(srcBillNo))
{
newRow["Seq"] = Convert.ToString(OB["FSEQ"]);
//应付比例(%),应付金额
newRow["YFRATIO"] = Convert.ToString(OB["FYFRATIO"]);
newRow["YFAMOUNT"] = Convert.ToString(OB["FYFAMOUNT"]);
//新应付比例(%),新应付金额
newRow["FYFRATIOEDIT"] = Convert.ToString(OB["FYFRATIO"]);
newRow["FYFAMOUNTEDIT"] = Convert.ToString(OB["FYFAMOUNT"]);
string FISPREPAYMENT = Convert.ToString(OB["FISPREPAYMENT"]);
newRow["ISPREPAYMENT"] = string.IsNullOrEmpty(FISPREPAYMENT) ?false:(FISPREPAYMENT.Equals("1") ? true : false);
newRow["RelBillNo"] = Convert.ToString(OB["FRELBILLNO"]);
newRow["InsPrepaidAmount"] = Convert.ToString(OB["FPREPAIDAMOUNT"]);
newRow["ACTUALAMOUNT"] = Convert.ToString(OB["FACTUALAMOUNT"]);
newRow["PayJoinAmount"] = Convert.ToString(OB["FPAYJOINAMOUNT"]);
newRow["FREMARKS"] = Convert.ToString(OB["FREMARKS"]);
//物料
string FPAYMATERIALID = Convert.ToString(OB["FPAYMATERIALID"]);
if (!FPAYMATERIALID.IsNullOrEmptyOrWhiteSpace() && Convert.ToInt64(FPAYMATERIALID)>0)
{
BaseDataField baseDataField = e.TargetBusinessInfo.GetField("FPayMaterialId") as BaseDataField;
Utils.SetBaseDataValue(Service, newRow, baseDataField, Convert.ToInt64(FPAYMATERIALID), ref Material,this.Context);
Material = null;
}
//物料行号
newRow["FMATERIALSEQ"] = Convert.ToString(OB["FMATERIALSEQ"]);
newRow["PayPlanQty"] = Convert.ToString(OB["FPAYPLANQTY"]);
newRow["PayPlanPrice"] = Convert.ToString(OB["FPAYPLANPRICE"]);
newRow["AppliedQty"] = Convert.ToString(OB["FAPPLIEDQTY"]);
newRow["ActualPayQty"] = Convert.ToString(OB["FACTUALPAYQTY"]);
newRow["APPLYAMOUNT"] = Convert.ToString(OB["FAPPLYAMOUNT"]);
newRow["FPURCHASEORDERNO"] = Convert.ToString(OB["FPURCHASEORDERNO"]);
newRow["OrderEntryId"] = Convert.ToString(OB["FORDERENTRYID"]);
newRow["InsPayAdvanceRate"] = Convert.ToString(OB["FPAYADVANCERATE"]);
newRow["InsPayAdvanceAmount"] = Convert.ToString(OB["FPAYADVANCEAMOUNT"]);
//
string FPAYPLANPRICEUNITID = Convert.ToString(OB["FPAYPLANPRICEUNITID"]);
if (!FPAYPLANPRICEUNITID.IsNullOrEmptyOrWhiteSpace() && Convert.ToInt64(FPAYPLANPRICEUNITID) > 0)
{
BaseDataField baseDataField = e.TargetBusinessInfo.GetField("FPAYPLANPRICEUNITID") as BaseDataField;
Utils.SetBaseDataValue(Service, newRow, baseDataField, Convert.ToInt64(FPAYPLANPRICEUNITID), ref Material, this.Context);
Material = null;
}
string FBASEPRICEUNIT = Convert.ToString(OB["FBASEPRICEUNIT"]);
if (!FBASEPRICEUNIT.IsNullOrEmptyOrWhiteSpace() && Convert.ToInt64(FBASEPRICEUNIT) > 0)
{
BaseDataField baseDataField = e.TargetBusinessInfo.GetField("FBASEPRICEUNIT") as BaseDataField;
Utils.SetBaseDataValue(Service, newRow, baseDataField, Convert.ToInt64(FBASEPRICEUNIT), ref Material, this.Context);
Material = null;
}
newRow["BasePayPlanQty"] = Convert.ToString(OB["FBASEPAYPLANQTY"]);
newRow["PayMaterialDesc"] = Convert.ToString(OB["FPAYMATERIALDESC"]);
//PayModel
string FPAYAUXPROPID = Convert.ToString(OB["FPAYAUXPROPID"]);
if (!FPAYAUXPROPID.IsNullOrEmptyOrWhiteSpace() && Convert.ToInt64(FPAYAUXPROPID) > 0)
{
RelatedFlexGroupField baseDataField = e.TargetBusinessInfo.GetField("FPAYAUXPROPID") as RelatedFlexGroupField;
Utils.SetFlexDataValue(Service, newRow, baseDataField, Convert.ToInt64(FPAYAUXPROPID), ref Material, this.Context);
Material = null;
}
newRow["F_HANS_APPLYAMOUNT"] = Convert.ToString(OB["F_HANS_APPLYAMOUNT"]);
newRow["F_HANS_APPLIEDQTY"] = Convert.ToString(OB["F_HANS_APPLIEDQTY"]);
//付款申请项目中心是否审批
string F_HANS_WETHERPUSH = Convert.ToString(OB["F_HANS_WETHERPUSH"]);
newRow["F_HANS_WETHERPUSH"] = string.IsNullOrEmpty(F_HANS_WETHERPUSH) ? false : (F_HANS_WETHERPUSH.Equals("1") ? true : false);
string F_HANS_LASTAUDIT = Convert.ToString(OB["F_HANS_LASTAUDIT"]);
if (!F_HANS_LASTAUDIT.IsNullOrEmptyOrWhiteSpace() && Convert.ToInt64(F_HANS_LASTAUDIT) > 0)
{
BaseDataField baseDataField = e.TargetBusinessInfo.GetField("F_HANS_LASTAUDIT") as BaseDataField;
Utils.SetBaseDataValue(Service, newRow, baseDataField, Convert.ToInt64(F_HANS_LASTAUDIT), ref Material, this.Context);
Material = null;
}
//是否已下推项目中心付款申请
string F_HANS_PAYPUSHED = Convert.ToString(OB["F_HANS_PAYPUSHED"]);
newRow["F_HANS_PAYPUSHED"] = string.IsNullOrEmpty(F_HANS_PAYPUSHED) ? false : (F_HANS_PAYPUSHED.Equals("1") ? true : false);
newRow["F_HANS_INIAMOUNT"] = Convert.ToString(OB["F_HANS_INIAMOUNT"]);
//添加
secondEntryRows.Add(newRow);
}
}
}
}
}
}
}
表单插件:
using Kingdee.BOS;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Kingdee.K3.Core.MFG.EntityHelper;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace HANS.SalesOutboundSave
{
//新应付金额录入 值更新事件
[Description("采购订单变更单_付款计划_根据新应付金额录入计算出新应付比率"), HotUpdate]
public class PocPaymentPlanBillPlugIn : AbstractBillPlugIn
{
//新应付比例(%): FYFRATIOEDIT
//新应付金额: FYFAMOUNTEDIT
public override void DataChanged(DataChangedEventArgs e)
{
base.DataChanged(e);
if (e.Field.OriginKey.EqualsIgnoreCase("FYFAMOUNTEDIT"))
{
int i = e.Row;
if (!this.View.GetFieldEditor("FYFAMOUNTEDIT", i).Enabled) return;
//历史应付金额
decimal oldFYFAMOUNTEDIT = Convert.ToDecimal(e.OldValue);
//新应付金额
decimal newFYFAMOUNTEDIT = Convert.ToDecimal(e.NewValue);
DynamicObject o = this.View.Model.DataObject;
if (o == null) return;
//业务类型:采购订单变更单(业务类型=资产采购订单)时处理,其他情况不处理
var strBusinessType = o.GetDynamicValue<string>("BusinessType");
if (string.IsNullOrEmpty(strBusinessType) || !strBusinessType.Equals("ZCCG", StringComparison.OrdinalIgnoreCase)) return;
//原单价之和:POChangeEntry OldPrice
decimal totalOldPrice = ((DynamicObjectCollection)o["POChangeEntry"])
.Where(p => p.GetDynamicValue<decimal>("OldPrice") > 0M && p.GetDynamicValue<decimal>("OldQty") > 0M)
.Sum(p => (p.GetDynamicValue<decimal>("OldPrice") * p.GetDynamicValue<decimal>("OldQty")));
//最新含税单价之和:POChangeEntry NewPrice
decimal totalNewPrice = ((DynamicObjectCollection)o["POChangeEntry"])
.Where(p => p.GetDynamicValue<decimal>("NewPrice") > 0M && p.GetDynamicValue<decimal>("NewQty") > 0M )
.Sum(p => (p.GetDynamicValue<decimal>("NewPrice")* p.GetDynamicValue<decimal>("NewQty")));
/*
情况1:采购订单变更单 金额 变大时,采购订单付款计划可以正常按原应付比例来调整应付金额。付款计划行明细多行数据都会按比例变大。不能手工调整
*/
if (totalNewPrice > totalOldPrice) return;
if (totalNewPrice <= 0M) return;
//付款计划
var PaymentPlanDtolist = o.GetDynamicValue<DynamicObjectCollection>("FIinstallment")
.Select(p=> new PaymentPlanDto() {
Seq=p.GetDynamicValue<int>("Seq")
,Amted=p.GetDynamicValue<decimal>("YFAMOUNT")
,Rated= p.GetDynamicValue<decimal>("YFRATIO")
,AmtEdit = p.GetDynamicValue<decimal>("FYFAMOUNTEDIT")
,RateEdit= p.GetDynamicValue<decimal>("FYFRATIOEDIT")
单据转换插件,动态表单插件,表单插件,服务插件,多单据体 应用
多单据体,要二开绑定列上所有数据,二开的单据转换插件using Kingdee.BOS;using Kingdee.BOS.App;using Kingdee.BOS.Contracts;using Kingde...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



