CLOUD5.1打某个补丁后,凭证套打二次开发出错。。
金蝶云社区-dotqi
dotqi
0人赞赏了该文章 750次浏览 未经作者许可,禁止转载编辑于2016年07月19日 13:59:56

这个是我的15年10月做的凭证套打的二次开发,当时好用。
{{{/article/2566087}}}

但打完5.0的补丁后,现在发现出错。
如图


第一个是凭证信息,第二个为预览时信息,预览里的部门全都变成了,凭证最后的部门了。
源代码为

namespace L_K3CloudPrint
{
public class GL_Voucher : AbstractBillPlugIn
{
public override void OnPrepareNotePrintQueryParam(PrepareNotePrintQueryParamEventArgs e)
{
base.OnPrepareNotePrintQueryParam(e);
}
public override void OnPrepareNotePrintData(PreparePrintDataEventArgs e)
{
//单据头BillHead单据体FEntity
if (e.DataSourceId == "FEntity")
{
//循环处理分录
for (int i = 0; i < e.DataObjects.Length; i++)
{
//获取科目打印数据
DynamicObject acctObj = e.DataObjects[i]["FAccountId_Ref"] as DynamicObject;
string FNumber_ = "";
//获取科目ID
long FAccountId_ = (long)e.DataObjects[i]["FAccountId_Id"];
if (FAccountId_!=0)
{
//获取科目对应的信息
BaseDataField acctItem = this.View.BillBusinessInfo.GetField("FACCOUNTID") as BaseDataField;
DynamicObject[] acctItems = BusinessDataServiceHelper.LoadFromCache(this.Context, new object[] { FAccountId_ }, acctItem.RefFormDynamicObjectType);
FNumber_ += acctItems[0]["Number"].ToString();
FNumber_ += '_' + acctItems[0]["FullName"].ToString();
}
//获取核算维度ID
long FDetailId_ = (long)e.DataObjects[i]["FDetailId"];
if (FDetailId_ != 0)
{
//获取核算维度信息
RelatedFlexGroupField fldItem = this.View.BillBusinessInfo.GetField("FDETAILID") as RelatedFlexGroupField;
DynamicObject[] itemDetails = BusinessDataServiceHelper.LoadFromCache(this.Context, new object[] { FDetailId_ }, fldItem.RefFormDynamicObjectType);
foreach (var prop in itemDetails[0].DynamicObjectType.Properties)
{
DynamicObject item = prop.GetValue(itemDetails[0]) as DynamicObject;
if (item != null)
{
//break退出循环continue进入下次循环return函数体内
//获取类型值,如Department部门Expense费用项目,可通过不同的费用类型控制打印顺序
//item.DynamicObjectType.Name
//组合科目编码
switch (item.DynamicObjectType.Name)
{
case "Organization":
FNumber_ += "【组织机构:" + item["Name"].ToString() + "】";
break;
case "BD_CUSTOMER":
FNumber_ += "【客户:" + item["Name"].ToString() + "】";
break;
case "Supplier":
FNumber_ += "【供应商:" + item["Name"].ToString() + "】";
break;
case "FIN_OTHERS":
FNumber_ += "【其他往来单位:" + item["Name"].ToString() + "】";
break;
case "FA_ASSETTYPE":
FNumber_ += "【资产类别:" + item["Name"].ToString() + "】";
break;
case "BD_MATERIALCATEGORY":
FNumber_ += "【存货类别:" + item["Name"].ToString() + "】";
break;
case "Expense":
FNumber_ += "【费用项目:" + item["Name"].ToString() + "】";
break;
case "Department":
FNumber_ += "【部门:" + item["Name"].ToString() + "】";
break;
case "BaseEmpinfo":
FNumber_ += "【职员:" + item["Name"].ToString() + "】";
break;
default:
FNumber_ += "【核算维度:" + item["Name"].ToString() + "】";
break;
}
}
}
}
//将核算维度信息设置为0为的不打印
e.DataObjects[i]["FDetailId"] = 0;
//将合并好的字符串更新科目编码
acctObj["Number"] = FNumber_;
}
}
base.OnPrepareNotePrintData(e);
}
}
}

我跟踪后发现
if (e.DataSourceId == "FEntity")
当这一句成立时,下边的代码还没有运行时,所有的e.DataObjects内的部门就都错了

请助处理一下。。。谢谢