SAP移庫介面實現(C#版)
阿新 • • 發佈:2018-11-29
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; } }