表单插件无法获取批号字段值
金蝶云社区-王艳_4
王艳_4
1人赞赏了该文章 1,786次浏览 未经作者许可,禁止转载编辑于2017年04月19日 17:13:33

1.简单生产领料单/生产领料单/调拨单 这三个单据中,我写了表单插件,在保存前触发器
但是在获取 批号字段的值时,总是空值,获取不出数据。
我想问一下 ,这是什么原因!

[code]

public override void BeforeSave(Kingdee.BOS.Core.Bill.PlugIn.Args.BeforeSaveEventArgs e)
{
//是否属于 简单生产领料单/生产领料单/ 调拨单(取调出仓库为准) 其中一个单据
int FLAG = 0;
//定义每个单据上的各个基础资料的字段名
string FORGNAME = "";
string FMATENAME = "";
string FSTOCKNAME = "";
string FSTOCKLOCNAME = "";
string FLOTNAME = "";
string FQTYNAME = "";
string FSECQTYNAME = "";

switch (this.View.OpenParameter.FormId)
{ ///简单生产领料单
case "SP_PickMtrl":
FORGNAME = "FStockOrgId";
FMATENAME = "FMaterialId";
FSTOCKNAME = "FStockId";
FSTOCKLOCNAME = "FStockLocId";
FLOTNAME = "FLot";
FQTYNAME = "FActualQty";
FSECQTYNAME = "FSecActualQty";

FLAG = 1;
break;
//生产领料单
case "PRD_PickMtrl":
FORGNAME = "FStockOrgId";
FMATENAME = "FMaterialId";
FSTOCKNAME = "FStockId";
FSTOCKLOCNAME = "FStockLocId";
FLOTNAME = "FLot";
FQTYNAME = "FActualQty";
FSECQTYNAME = "FSecActualQty";
FLAG = 1;
break;
//调拨单
case "STK_TransferDirect":
FORGNAME = "FStockOutOrgId";
FMATENAME = "FMaterialId";
FSTOCKNAME = "FSrcStockId";
FSTOCKLOCNAME = "FSrcStockLocId";
FLOTNAME = "FLot";
FQTYNAME = "FQty";
FSECQTYNAME = "FSecQty";
FLAG = 1;
break;
}

if (FLAG == 1)
{
int rows = this.Model.GetEntryRowCount("FEntity");
int rowindex = 0;
DynamicObject FORG = this.Model.GetValue(FORGNAME, rowindex) as DynamicObject; //组织
Int64 FORGID = (FORG == null) ? 0 : Convert.ToInt64(FORG["Id"]);
DynamicObject FMATE; //物料
Int64 FMATEID = 0;
DynamicObject FSTOCK; //仓库
Int64 FSTOCKID = 0;
DynamicObject FSTOCKLOC;//仓位
Int64 FSTOCKLOCID = 0;
DynamicObject FLOT; //批次
Int64 FLOTID = 0;
string FSQL = ""; //sql语句
for (rowindex = 0; rowindex < rows; rowindex++)
{
FMATE = this.Model.GetValue(FMATENAME, rowindex) as DynamicObject;
FSTOCK = this.Model.GetValue(FSTOCKNAME, rowindex) as DynamicObject;
FSTOCKLOC = this.Model.GetValue(FSTOCKLOCNAME, rowindex) as DynamicObject;
FLOT = this.Model.GetValue(FLOTNAME, rowindex) as DynamicObject;
//1.对应仓库 存在 则判断 不存在 则不管
if (FSTOCK != null && FMATE != null)
{

FMATEID = Convert.ToInt64(FMATE["Id"]);
FSTOCKID = Convert.ToInt64(FSTOCK["Id"]);
FSTOCKLOCID = (FSTOCKLOC == null) ? 0 : Convert.ToInt64(FSTOCKLOC["Id"]);
FLOTID = (FLOT == null) ? 0 : Convert.ToInt64(FLOT["Id"]);

FSQL = string.Format(@"/*dialect*/ SELECT MATE.FMATERIALID,INV.FSTOCKID,INV.FLOT,INV.FSTOCKLOCID,INV.FSTOCKORGID,INV.FBASEAVBQTY,INV.FAVBQTY,INV.FSECAVBQTY
FROM T_STK_INVENTORY INV
JOIN T_BD_MATERIAL MATE
ON INV.FMATERIALID=MATE.FMASTERID AND FSTOCKORGID=FUSEORGID
WHERE INV.FSTOCKORGID={0}
AND MATE.FMATERIALID={1} AND INV.FSTOCKID={2}
AND INV.FSTOCKLOCID={3} AND INV.FLOT={4} "
, FORGID.ToString(), FMATEID.ToString(), FSTOCKID.ToString(), FSTOCKLOCID.ToString(), FLOTID.ToString());

using (IDataReader reader = DBUtils.ExecuteReader(this.Context, FSQL))
{
if (reader.Read())
{ //2.根据对应仓库 和 批次 即时库存中的数据抓取 辅助计量单未的 数量 跟单据上 辅助单位 数量不一致 ,也不进行判断
if (Convert.ToDecimal(reader["FSECAVBQTY"]) == Convert.ToDecimal(this.Model.GetValue(FSECQTYNAME, rowindex)))
{ //3. 判断 主计量单位 数量 跟 即时库存 住计量单未数量不一致 则更新 单据上的数量 为 即时库存的数量
if (Convert.ToDecimal(reader["FBASEAVBQTY"]) != Convert.ToDecimal(this.Model.GetValue(FQTYNAME, rowindex)))
{
this.Model.SetValue(FQTYNAME, Convert.ToDecimal(reader["FBASEAVBQTY"]), rowindex);
}
}

}
}
}
}
}
}

[/code]