当前位置:软件学习 > 其它软件 >>

求助:用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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,