二开插件上获取客户对账单
金蝶云社区-Jaden
Jaden
0人赞赏了该文章 763次浏览 未经作者许可,禁止转载编辑于2020年03月11日 16:36:28

///


/// 查询客户对账单数据
///

///
/// 客户编号
/// 查询时间
///
public static DataTable Query(Kingdee.BOS.Context context, string customerNumber, DateTime date)
{
string rptFormID = "AR_STATEMENT";
string filterFormID = "AR_StatementFilter";
FilterParameter filterPara = GetFileParameter(context, rptFormID, filterFormID, customerNumber,date);
string tempTable = StatementServiceHelper.GetAgingTable(context, filterPara, rptFormID);
string querySql = string.Format("select * from {0}", tempTable);
DataSet ds = DBUtils.ExecuteDataSet(context, querySql);
string dropTempTable = string.Format("drop table {0}", tempTable);
DBUtils.Execute(context, dropTempTable);
return ds != null && ds.Tables.Count > 0 ? ds.Tables[0] : null;
}

public static FilterParameter GetFileParameter(Kingdee.BOS.Context context, string rptFormID, string filterID, string customerNumber,DateTime date)
{
ISysReportService sysReporSservice = ServiceFactory.GetSysReportService(context);
IPermissionService permissionService = ServiceFactory.GetPermissionService(context);

var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(context);//加载字段比较条件元数据。
var reportMetadata = FormMetaDataCache.GetCachedFormMetaData(context, rptFormID);//加载应收款账龄分析表元数据。
var reportFilterMetadata = FormMetaDataCache.GetCachedFormMetaData(context, filterID);//加载应收款账龄分析表过滤条件元数据。
var reportFilterServiceProvider = reportFilterMetadata.BusinessInfo.GetForm().GetFormServiceProvider();

var model = new SysReportFilterModel();
model.SetContext(context, reportFilterMetadata.BusinessInfo, reportFilterServiceProvider);
model.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;
model.FilterObject.FilterMetaData = filterMetadata;
model.InitFieldList(reportMetadata, reportFilterMetadata);
model.GetSchemeList();

string schemeID = GetFilterSchemeID(context, rptFormID);
var entity = model.Load(schemeID);//过滤方案的主键值,可通过该SQL语句查询得到:SELECT * FROM T_BAS_FILTERSCHEME
var filter = model.GetFilterParameter();
#region 获取客户或供应商信息
ItemClassField field = GetFiled(context, filterID);
DynamicObject cus_suplier = GetMultiTypeMaterial(context, field, filter.CustomFilter["CONTACTUNITTYPE"].ToString(), customerNumber);
if (cus_suplier != null)
{
filter.CustomFilter["CONTACTUNITFrom_Id"] = cus_suplier["Id"];
filter.CustomFilter["CONTACTUNITFrom"] = cus_suplier;
filter.CustomFilter["CONTACTUNITTo_Id"] = cus_suplier["Id"];
filter.CustomFilter["CONTACTUNITTo"] = cus_suplier;
filter.CustomFilter["ByDate"] = date;
return filter;
}
else
{
return null;
}
#endregion
}

///


/// 获取查询条件过滤框元数据ID
///

///
///
///
public static string GetFilterSchemeID(Kingdee.BOS.Context context, string formID)
{
string querySql = string.Format("/*dialect*/SELECT top(1) FSCHEMEID FROM T_BAS_FILTERSCHEME where FFORMID='{0}' and FISDEFAULT=1", formID);
string schemeID = DBUtils.ExecuteScalar(context, querySql, "");
return schemeID;
}

public static ItemClassField GetFiled(Kingdee.BOS.Context context, string filterFormID)
{
FormMetadata metaData = MetaDataServiceHelper.Load(context, filterFormID) as FormMetadata;
return metaData.BusinessInfo.GetField("FCONTACTUNITFrom") as ItemClassField;
}

///


/// 获取过滤框中的客户或者供应商信息
///

///
///
///
///
///
public static DynamicObject GetMultiTypeMaterial(Kingdee.BOS.Context ctx, ItemClassField field, string classTypeID, string number)
{
List IDs = new List();
string queryIDSql = string.Format("select fitemid from {0} where fnumber='{1}' and fformid='{2}'", field.LookUpObject.TableName, number, classTypeID);
using (IDataReader dataReader = DBUtils.ExecuteReader(ctx, queryIDSql))
{
while (dataReader.Read())
{
IDs.Add(dataReader.GetValue(0));
}
dataReader.Close();
}
return BusinessDataServiceHelper.Load(ctx, IDs.ToArray(), field.RefFormDynamicObjectType).FirstOrDefault();
}