效果如下:
采购按钮代码
private void button1_Click(object sender, EventArgs e)
{
RfcConfigParameters rfcPar = new RfcConfigParameters();
rfcPar.Add(RfcConfigParameters.Name, "S4P");
rfcPar.Add(RfcConfigParameters.AppServerHost, "192.168.1.9");
rfcPar.Add(RfcConfigParameters.Client, "800");
rfcPar.Add(RfcConfigParameters.User, "TEST");
rfcPar.Add(RfcConfigParameters.Password, "123456");
rfcPar.Add(RfcConfigParameters.SystemNumber, "00");
rfcPar.Add(RfcConfigParameters.Language, "ZH");
RfcDestination dest = RfcDestinationManager.GetDestination(rfcPar);
RfcRepository rfcrep = dest.Repository;
IRfcFunction myfun = null;
myfun = rfcrep.CreateFunction("Z_MM01");
myfun.SetValue("IV_EBELN", textBox1.Text);//SAP里面的传入参数
myfun.Invoke(dest);
IRfcTable IrfTable = myfun.GetTable("ZRE_TB");
//提前实例化一个空的表结构出来
DataTable dt = new DataTable();
dt.Columns.Add("USERID");
dt.Columns.Add("USERPWD");
dt.Columns.Add("USERADDRESS");
dt.Columns.Add("USERADDRESS2");
dt.Columns.Add("USERADDRESS3");
dt.Columns.Add("USERADDRESS4");
dt.Columns.Add("USERADDRESS5");
dt.Columns.Add("USERADDRESS6");
dt.Columns.Add("USERADDRESS7");
//循环把IRfcTable里面的数据放入Table里面,因为类型不同,不可直接使用。
for (int i = 0; i < IrfTable.Count; i++)
{
IrfTable.CurrentIndex = i;
DataRow dr = dt.NewRow();
dr["USERID"] = IrfTable.GetString("EBELN");
dr["USERPWD"] = IrfTable.GetString("EBELP");
dr["USERADDRESS"] = IrfTable.GetString("LIFNR");
dr["USERADDRESS2"] = IrfTable.GetString("NAME1");
dr["USERADDRESS3"] = IrfTable.GetString("BEDAT");
dr["USERADDRESS4"] = IrfTable.GetString("MATNR");
dr["USERADDRESS5"] = IrfTable.GetString("MAKTX");
dr["USERADDRESS6"] = IrfTable.GetString("MENGE");
dr["USERADDRESS7"] = IrfTable.GetString("MEINS");
dt.Rows.Add(dr);
}
//将重新生成的Table赋值给数据控件DataGridView。
dataGridView1.DataSource = dt;
}
上面参数设置
SAP部份
FUNCTION z_mm01.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(IV_EBELN) TYPE EBELN
*" TABLES
*" ZRE_TB STRUCTURE ZMMTI001
*"----------------------------------------------------------------------
DATA: gs_zmmti001 TYPE zmmti001 .
DATA: gt_zmmti001 TYPE TABLE OF zmmti001 .
*
* gs_zmmti001-ebeln = '420611'.
* gs_zmmti001-ebelp = '00010' .
* gs_zmmti001-matnr = '10.130.000001' .
* gs_zmmti001-menge = 30 .
*
* APPEND gs_zmmti001 TO gt_zmmti001.
*
* gs_zmmti001-ebeln = '420611'.
* gs_zmmti001-ebelp = '00020' .
* gs_zmmti001-matnr = '10.130.000002' .
* gs_zmmti001-menge = 30 .
*
* APPEND gs_zmmti001 TO gt_zmmti001 .
*
* gs_zmmti001-ebeln = '420611'.
* gs_zmmti001-ebelp = '00030' .
* gs_zmmti001-matnr = '10.130.000001' .
* gs_zmmti001-menge = 30 .
* APPEND gs_zmmti001 TO gt_zmmti001 .
* CLEAR gs_zmmti001 .
SELECT a~mandt a~ebeln b~ebelp a~lifnr c~name1 a~bedat b~matnr d~maktx b~menge b~meins
INTO TABLE zre_tb
FROM ekko AS a
INNER JOIN ekpo AS b ON a~ebeln = b~ebeln
INNER JOIN lfa1 AS c ON a~lifnr = c~lifnr
INNER JOIN makt AS d ON b~matnr = d~matnr
WHERE a~ebeln = iv_ebeln .
.
*
* LOOP AT gt_zmmti001 INTO gs_zmmti001 WHERE EBELN = iv_ebeln .
* APPEND gs_zmmti001 TO zre_tb .
* ENDLOOP .
*
ENDFUNCTION.
SAP 表