求助:用JCO插入数据到SAP报错
本人在用 JCO 插入数据到SAP时。不能正常插入,在RETURN表中获取的错误信息如下:消息类型[TYPE]:E
java.lang.Exception: 新增数据失败:凭证错误: BKPFF $ T90CLNT090
消息, 消息类[ID]:RW
消息, 消息编号[NUMBER]:609
消息文本[MESSAGE]:凭证错误: BKPFF $ T90CLNT090
应用程序日志: 日志号[LOG_NO] :
应用日志:内部邮件序列号[LOG_MSG_NO]:000000
消息,消息变量[MESSAGE_V1]:BKPFF
消息,消息变量[MESSAGE_V2]:$
消息,消息变量[MESSAGE_V3]:T90CLNT090
消息,消息变量[MESSAGE_V4]:
参数名称[PARAMETER]:
参数中的行[ROW]:0
参数中的字段[FIELD]:
引发消息的逻辑系统[SYSTEM]:T90CLNT090
凭证错误: BKPFF $ T90CLNT090
插入数据时报错
at com.sap.victor.test.SAP_Create_Item.<init>(SAP_Create_Item.java:174)
at com.sap.victor.test.SAP_Create_Item.main(SAP_Create_Item.java:10)
代码如下:
只是少了连接SAP那块。
try {
//Creating a Function Object And Executing
function = this.createFunction("BAPI_ACC_GL_POSTING_POST");
if (function == null) {
System.out.println("BAPI_ACC_GL_POSTING_POST"
+ " not found in SAP.");
System.out.println("SAP_RFC中没有此函数!");
System.exit(1);
}
//带有控制信息的表头段
//1)DOCUMENTHEADER里的信息是表示凭证表头的一些内容,如输入时间,创建人等,只有一条记录。
JCO.Structure head_data = function.getImportParameterList().getStructure("DOCUMENTHEADER");
//head_data.setValue("UNPACK", "OBJ_TYPE");//参考交易
//head_data.setValue("$", "OBJ_KEY");//字段参考关键
//head_data.setValue("$", "OBJ_SYS");//源凭证的逻辑系统
head_data.setValue("abc", "USERNAME");//用户名
head_data.setValue("Test using BAPI", "HEADER_TXT");//凭证抬头文本
head_data.setValue("1000", "COMP_CODE");//公司代码
head_data.setValue("20090615", "DOC_DATE"); //凭证中的凭证日期
head_data.setValue("20090615", "PSTNG_DATE"); //凭证中的过帐日期
head_data.setValue("SA", "DOC_TYPE"); //凭证类型
//
/*
* 2、先调用FUNCTION BAPI_ACC,需要传入3张表。
1)DOCUMENTHEADER里的信息是表示凭证表头的一些内容,如输入时间,创建人等,只有一条记录。
2)ACCOUNTGL里的信息是表示凭证明细的一些内容:如科目号等,一般是两条以上的记录,如果是一借一贷就是两条记录。
3)CURRENCYAMOUNT里的信息表示凭证明细里跟金额有关的一些内容:如币种等,是与ACCOUNTGL里的记录一一对应的。
*/
//2)
///第1条记录
JCO.Table account_gl = function.getTableParameterList().getTable("ACCOUNTGL");
account_gl.appendRow();
account_gl.setValue("1", "ITEMNO_ACC");//会计凭证行项目编号
account_gl.setValue("0000113700", "GL_ACCOUNT");//总分类帐帐目
account_gl.setValue("1000", "COMP_CODE");//公司代码
account_gl.setValue("20090615", "PSTNG_DATE");//凭证中的过帐日期
account_gl.setValue("SA", "DOC_TYPE");//凭证类型
/////第2条记录
//JCO.Table account_gl = function.getTableParameterList().getTable("ACCOUNTGL");
account_gl.appendRow();
account_gl.setValue("2", "ITEMNO_ACC");//会计凭证行项目编号
account_gl.setValue("0000101000", "GL_ACCOUNT");//总分类帐帐目
account_gl.setValue("1000", "COMP_CODE");//公司代码
account_gl.setValue("20090615", "PSTNG_DATE");//凭证中的过帐日期
account_gl.setValue("SA", "DOC_TYPE");//凭证类型
//3)
///第1条记录
JCO.Table currency_amount = function.getTableParameterList().getTable("CURRENCYAMOUNT");
currency_amount.appendRow();
currency_amount.setValue("1", "ITEMNO_ACC");//会计凭证行项目编号
currency_amount.setValue("EUR", "CURRENCY");//货币码
currency_amount.setValue("100", "AMT_DOCCUR");//凭证货币金额
/////第2条记录
currency_amount.appendRow();
currency_amount.setValue("2", "ITEMNO_ACC");//会计凭证行项目编号
currency_amount.setValue("EUR", "CURRENCY");//货币码
currency_amount.setValue("100", "AMT_DOCCUR");//凭证货币金额
mConnection.execute(function);// 执行配置好的function
JCO.Table returnStructure = function.getTableParameterList().getTable("RETURN");
if(!(returnStructure.getString("TYPE").equals("") || returnStructure.getString("TYPE").equals("S"))){
System.out.println("消息类型[TYPE]:"+returnStructure.getString("TYPE"));
System.out.println("消息, 消息类[ID]:"+returnStructure.getString("ID"));
System.out.println("消息, 消息编号[NUMBER]:"+returnStructure.getString("NUMBER"));
System.out.println("消息文本[MESSAGE]:"+returnStructure.getString("MESSAGE"));
System.out.println("应用程序日志: 日志号[LOG_NO] :"+returnStructure.getString("LOG_NO"));
System.out.println("应用日志:内部邮件序列号[LOG_MSG_NO]:"+returnStructure.getString("LOG_MSG_NO"));
System.out.println("消息,消息变量[MESSAGE_V1]:"+returnStructure.getString("MESSAGE_V1"));
System.out.println("消息,消息变量[MESSAGE_V2]:"+returnStructure.getString("MESSAGE_V2"));
System.out.println("消息,消息变量[MESSAGE_V3]:"+returnStructure.getString("MESSAGE_V3"));
System.out.println("消息,消息变量[MESSAGE_V4]:"+returnStructure.getString("MESSAGE_V4"));
System.out.println("参数名称[PARAMETER]:"+returnStructure.getString("PARAMETER"));
System.out.println("参数中的行[ROW]:"+returnStructure.getString("ROW"));
System.out.println("参数中的字段[FIELD]:"+returnStructure.getString("FIELD"));
System.out.println("引发消息的逻辑系统[SYSTEM]:"+returnStructure.getString("SYSTEM"));
System.out.println(returnStructure.getString("MESSAGE"));
throw new Exception("新增数据失败:" + returnStructure.getString("MESSAGE"));
}
function = this.createFunction("BAPI_TRANSACTION_COMMIT");
mConnection.execute(function);
System.out.println("ok");
} catch (Exception ex) {
System.out.println("插入数据时报错");
ex.printStackTrace();
System.exit(1);
} finally {
// =================================//
// 9.关闭链接
// =================================//
if (mConnection != null) {
mConnection.disconnect();
}
}
--------------------编程问答-------------------- 方便登陆R3吗?
或者旁边有人熟悉的吗?
直接进R3里面调BAPI函数自己往里加加数据看看有没有错。 --------------------编程问答-------------------- 嗯嗯。我要等下个星期老板回来,然后才能叫人去试。因为我也是第一次接触SAP。
--------------------编程问答-------------------- 简单看了一下你的JCO相关语句,没发现什么问题,你登陆一下SAP系统,看一下字段的对应是否正确,我以前做的时候,大部分原因是这个 --------------------编程问答-------------------- 可能是RFC写得有问题 --------------------编程问答-------------------- 进SAP看接口 ,直接用你的数据在SAP上接口去调试
补充:企业软件 , ERP/CRM