对应收单进行扩展,增加了转出客户这个字段:F_Bmh_TransCustomer
在应收转销时,把转出客户给写入。
为此,把原先的Kingdee.K3.FIN.AP.Business.PlugIn.AutoWriteOffWizardEdit全部搬过来,并且把原来的禁用(不如此,好像会出错,不知道为什么)。
并且加上如下一段程序:
[code]public override void WizardStepChanged(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.WizardForm.WizardStepChangedEventArgs e)
{
base.WizardStepChanged(e);
if (e.WizardStep.ContainerKey == "FCompletePanel")
{
UpdateReceivable();
}
}
private void UpdateReceivable()
{
//获取保存服务
ISaveService saveService = Kingdee.BOS.App.ServiceHelper.GetService
FormMetadata materialMetada = MetaDataServiceHelper.Load(this.Context, "AR_receivable") as FormMetadata;
//构建过滤条件
QueryBuilderParemeter queryParameter = new QueryBuilderParemeter();
queryParameter.BusinessInfo = materialMetada.BusinessInfo;
queryParameter.FilterClauseWihtKey = "F_BMH_TRANSCUSTOMER=0 and FBILLTYPEID='545301011e96f8'";
DynamicObject[] objs = BusinessDataServiceHelper.Load(
this.Context,
materialMetada.BusinessInfo.GetDynamicObjectType(),
queryParameter);
if (objs != null)
{
var customerId = 0;
foreach (var obj in objs)
{
customerId = GetCustomerId(Convert.ToInt32(obj["ID"]));
obj["F_Bmh_TransCustomer_Id"] = customerId;
}
saveService.Save(this.Context, objs);
}
}
///
/// 获取客户编号
///
/// 应收单编号
///
private int GetCustomerId(int fID)
{
int custId = 0;
var sql = string.Format(@"Select top 1 FCUSTOMERID from T_AR_RECEIVABLE r inner join T_AR_RECMACTHLOGENTRY l on r.FID=l.FSRCBILLID
where l.FSOURCETYPE<>'545301011e96f8' and l.FID=(select lg.FID from T_AR_Receivable re inner join T_AR_RECMACTHLOGENTRY lg
on re.FID=lg.FSRCBILLID where re.FID={0})", fID);
using (IDataReader dr = DBServiceHelper.ExecuteReader(this.Context, sql))
{
while (dr.Read())
{
custId = dr.GetInt32(0);
}
}
return custId;
}[/code]这个,对新操作的应收转销单,转出客户填写正常。
现在的问题是:
在开发前,K3已经在运行一段时间了,已经生成了大量的应收转销单据。
现在要求把旧单据的转出客户也写进去,但去T_AR_RECEIVABLE这个表查看了,如果只是把查到的转出客户ID直接写到F_BMH_TRANSCUSTOMER里,并不会起作用。
我觉得,应该是有个中间表在把这个数据保存着,这个会在哪里呢?
那我该如何在让已有的旧数据也保存上它们原先的转出客户?