销售订单推销售出库单,下推时报错“”
金蝶云社区-Flong
Flong
0人赞赏了该文章 587次浏览 未经作者许可,禁止转载编辑于2016年09月30日 00:06:21

销售订单,下推销售出库单。
这边物料设置时,新增了个子单据体,包含几个子物料。下推时,根据对应关系,在出库单时,显示子物料,删除之前那个物料。

我现在是在单据转换中写的插件,逻辑是,循环下推过来的单据体,如果该物料有子物料,就复制当前行,将里面的物料和数量替换成子物料的数据。
然后将当前行做标记。
整体循环完之后,将有标记的行删除。

但是,执行完后,在页面提示错误。(下图) 请帮忙看一下是怎么回事?

DynamicObjectCollection rowObjs = entity.DynamicProperty.GetValue(bills[0].DataEntity) as DynamicObjectCollection;
int count = rowObjs.Count;
int newCount = 1;
int realQty = 0;//销售数量
bool flag = false;
DynamicObject objItem = null;
//获取源单据分录行,for循环单据行
for (int i = 0; i < count; i++)
{
//虚拟产品中产品明细的行数
int ProductId = Int32.Parse(rowObjs[i]["MaterialID_Id"].ToString());//销售出库产品ID
decimal productNum = decimal.Parse(rowObjs[i]["SALUNITQTY"].ToString());
//通过产品ID查询物料
string sql = string.Format(@" select * from M_t_ProductInfo where FMATERIALID={0} ", ProductId);
DataSet ds = DBServiceHelper.ExecuteDataSet(this.Context, sql);
//判断物料表中是否有数据
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
{
flag = false;
foreach (var entryRow in rowObjs)
{
if (entryRow["MaterialID_Id"].ToString() == ds.Tables[0].Rows[j]["FPROJDUCTNUMBER"].ToString())
{
realQty = int.Parse(entryRow["SALUNITQTY"].ToString());
entryRow["SALUNITQTY"] = realQty + decimal.Parse(ds.Tables[0].Rows[j]["FQTY"].ToString()) * productNum;
flag = true;
break;
}
}
if (flag) continue;
//增加分录行,并判断分录行的产品是否有一样的需要合并处理
//复制一行分录数据
DynamicObject newEntryRow = (DynamicObject)rowObjs[i].Clone(false, true);
int productid = int.Parse(ds.Tables[0].Rows[j]["FPROJDUCTNUMBER"].ToString());
IViewService viewService = ServiceHelper.GetService();
DynamicObject[] productObjs = viewService.LoadFromCache(this.Context,
new object[] { productid }, productFld.RefFormDynamicObjectType);
newEntryRow["MaterialID"] = productObjs[0];
newEntryRow["MaterialID_Id"] = productid;
newEntryRow["SALUNITQTY"] = decimal.Parse(ds.Tables[0].Rows[j]["FQTY"].ToString()) * productNum;
rowObjs.Insert(count + newCount - 1, newEntryRow);
ExtendedDataEntity newRow = new ExtendedDataEntity(newEntryRow, bills[0].DataEntityIndex, count + newCount);
newRows.Add(newRow);
e.TargetExtendedDataEntities.AddExtendedDataEntities("FEntity", newRows.ToArray());
newCount++;
}
//标记i行,作为后面循环删除的对象
rowObjs[i]["SALUNITQTY"] = -1;
}
}
count = rowObjs.Count;
for (int j = count - 1; j >= 0; j--)
{
string res = rowObjs[j]["SALUNITQTY"].ToString();//
if (res == "-1")
{
//删除下面出现重复的那一行,行 j
objItem = rowObjs[j];
rowObjs.Remove(objItem);
}
}

[/i][/i][/i][/i]