SAP移库接口C#版本实现代码如下:
/// <summary>
/// 移库接口(将仓库中的地址移到线边仓,线边仓的地址用模板文件名称作为参数传过来)
/// </summary>
/// <param name="prd"></param>
/// <param name="OrderNum"></param>
/// <param name="errMsg"></param>
/// <returns></returns>
public static int StorageMoveToLineSilo(RfcDestination prd, List<MaterialDetail> mdList, out string errMsg)
{
errMsg = "";
try
{
RfcRepository SapRfcRepository = prd.Repository;
IRfcFunction function = SapRfcRepository.CreateFunction("BAPI_GOODSMVT_CREATE");
IRfcStructure strCode = function.GetStructure("GOODSMVT_CODE");
strCode.SetValue("GM_CODE", "04");
IRfcStructure strHeader = function.GetStructure("GOODSMVT_HEADER");
strHeader.SetValue("PSTNG_DATE", DateTime.Today.ToString("yyyy-MM-dd"));
strHeader.SetValue("DOC_DATE", DateTime.Today.ToString("yyyy-MM-dd"));
IRfcFunction functioncmt = SapRfcRepository.CreateFunction("BAPI_TRANSACTION_COMMIT");
IRfcTable tTable = function.GetTable("GOODSMVT_ITEM");
functioncmt.SetValue("WAIT", "X");
RfcSessionManager.BeginContext(prd);
for (int i = 0; i < mdList.Count; i++)
{
tTable.Append();
tTable.CurrentRow.SetValue("MATERIAL", mdList[i].MATERIAL);//物料编号
tTable.CurrentRow.SetValue("PLANT", mdList[i].PLANT);//工厂
tTable.CurrentRow.SetValue("STGE_LOC", mdList[i].STGE_LOC);//仓库
tTable.CurrentRow.SetValue("MOVE_TYPE", "311");//同一工厂不同库存移库
tTable.CurrentRow.SetValue("ENTRY_QNT", mdList[i].ENTRY_QNT);
//tTable.CurrentRow.SetValue("ENTRY_UOM", mdList[i].ENTRY_UOM);
//tTable.CurrentRow.SetValue("QUANTITY", mdList[i].iquantity);//单位
tTable.CurrentRow.SetValue("MOVE_PLANT", mdList[i].PLANT);
tTable.CurrentRow.SetValue("MOVE_STLOC", mdList[i].para1);//移库到线边仓(仓库SAP地址)用模板文件名称作为参数传过来
}
function.Invoke(prd);
functioncmt.Invoke(prd);
RfcSessionManager.EndContext(prd);
IRfcTable Return = function.GetTable("RETURN");
if (Return.RowCount > 0)
{
if (Return.GetString("TYPE").ToString().Trim() == "I")
{
errMsg = "凭证号:" + function.GetString("NUMBER").Trim();
prd = null;
return 0;
}
else if (Return.GetString("TYPE").ToString().Trim() == "E")
{
errMsg = Return.GetString("MESSAGE").ToString();
prd = null;
return -1;
}
else
return -1;
}
else
{
IRfcStructure strReturn = function.GetStructure("GOODSMVT_HEADRET");
errMsg = strReturn.GetValue("MAT_DOC").ToString();
return 0;
}
return 0;
}
catch (System.Exception ex)
{
errMsg = ex.Message;
return -1;
}
}