FD32 客户信贷管理 BAPI: CREDITLIMIT_CHANGE 调用报错后问题处理

67 篇文章 48 订阅
39 篇文章 4 订阅

今天用户提了个需求写个自动程序来修改授信额度。因为之前没有用过,我先直接在SE37上运行这个BAPI来看看要填入哪些字段来进行修改。我贸贸然写了这三个字段的数字就点击运行了。

SE37上显示运行成功了,

 

但我在前台FD33查看修改效果时,傻眼了,系统直接崩溃了。什么也查询不了了!

 

 

 然后我后台查查询了一下数据表。KNKK表中除了 KUNNR、KKBER、KLIMK三个字段有值为其他所有字段都被清空了。我稍稍分析一下,那个信贷账号字段KNKLI应该是不能为空的。我后台把这个字段补回去后就FD32查看就没有报错了。

接下来在开发这个程序时,我就谨慎了,先把旧的 KNKK表行的数据复制到要修改的行,然后在修改要修改的字段。如下图所示:

 我这次完成的需求是把超过一年没有下单的客户信贷额度置为0.我把代码贴出来分享给大家。

REPORT zfi_fd32_update.
DATA i_days  TYPE tfmatage.
DATA wa_zknkk_log LIKE zknkk_log.
* 1从信贷管理表中找出所有信贷金额不为0的客户数据
* 2判断这些客户最后一次下单是否超过一年
* 3如果超过一年就把信贷改为0

SELECT *  INTO TABLE @DATA(it_knkk) FROM knkk WHERE klimk  <> ''.
IF it_knkk IS NOT INITIAL .

  LOOP AT it_knkk  INTO DATA(wa_knkk) .
    SELECT  *  INTO TABLE @DATA(it_vbak) FROM vbak WHERE kunnr = @wa_knkk-kunnr.
    IF  it_vbak  IS NOT INITIAL.
      SORT  it_vbak BY audat DESCENDING.
      READ TABLE  it_vbak INTO DATA(wa_vbak) INDEX 1.  "读取最新下单的一条数据

      CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
        EXPORTING
          i_date_from = wa_vbak-audat
*         I_KEY_DAY_FROM       =
          i_date_to   = sy-datum
*         I_KEY_DAY_TO         =
*         I_FLG_SEPARATE       = ' '
        IMPORTING
          e_days      = i_days
*         E_MONTHS    =
*         E_YEARS     =
        .
      IF  i_days > '365'.   "如过超过一年
        MOVE-CORRESPONDING  wa_knkk TO   wa_zknkk_log.
        wa_zknkk_log-audat = wa_vbak-audat.
        wa_zknkk_log-i_days = i_days.
        DATA:
          s_knka LIKE knka,
          s_knkk LIKE   knkk,
          yknka  LIKE  knka,
          yknkk  LIKE  knkk.
        " READ TABLE it_zknkk_tmp INTO DATA(wa_zknkk) INDEX 1.

        MOVE-CORRESPONDING wa_knkk TO s_knkk ."  把旧的KNKK行复制到新行
        "把要修改的字段重新赋值
        s_knkk-klimk = 0.  "  修改授信额度
        s_knkk-kraus  = ''.   " 修改信用信息号

        CALL FUNCTION 'CREDITLIMIT_CHANGE'
          EXPORTING
            i_knka   = s_knka
            i_knkk   = s_knkk
            upd_knka = ''
            upd_knkk = 'U'
*           XNEUA    = ' '
*           XREFL    = ' '
            yknka    = yknka
            yknkk    = yknkk.
        IF sy-subrc = '0'.
          wa_zknkk_log-emsg =  '更新成功'.
        ELSE.
          wa_zknkk_log-emsg =  '更新失败'.
        ENDIF.

        MODIFY   zknkk_log FROM wa_zknkk_log..  "先把数据保存一版记录在log表,方便回头查看
        COMMIT WORK.

      ENDIF.
    ENDIF.

  ENDLOOP.

ENDIF.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用BAPI_ROUTING_CHANGE进行SAP工艺路线的修改,需要按照以下步骤进行: 1. 准备数据:需要准备工艺路线的版本号、工厂代码、物料号等必要的信息,同时需要准备修改参数的数据。修改参数需要按照BAPI_ROUTING_CHANGE的输入参数格式进行组织。 2. 调用BAPI_ROUTING_CHANGE:使用SAP的RFC函数模块来调用BAPI_ROUTING_CHANGE,将准备好的数据作为输入参数传递给BAPI_ROUTING_CHANGE。BAPI_ROUTING_CHANGE会根据输入参数来修改工艺路线。 3. 处理返回值:BAPI_ROUTING_CHANGE会返回修改后的工艺路线的版本号等信息,需要对返回值进行处理,判断是否修改成功。 以下是一个简单的示例代码,用于使用BAPI_ROUTING_CHANGE修改SAP工艺路线: ``` DATA: lt_routing TYPE STANDARD TABLE OF bapi_routing_operation, ls_routing LIKE LINE OF lt_routing. * 准备工艺路线数据 ls_routing-operation = '0010'. ls_routing-work_center = 'WC001'. ls_routing-component = 'MAT001'. ls_routing.component_qty = '1.0'. APPEND ls_routing TO lt_routing. * 准备修改参数 DATA: lt_change TYPE STANDARD TABLE OF bapi_routing_change, ls_change LIKE LINE OF lt_change. ls_change-operation = '0010'. ls_change-change_flag = 'U'. ls_change-operation_longtext = '这是一条测试的长文本。'. APPEND ls_change TO lt_change. * 调用BAPI_ROUTING_CHANGE CALL FUNCTION 'BAPI_ROUTING_CHANGE' EXPORTING routing_header = ls_routing_header client = sy-mandt TABLES routing_operation = lt_routing change_operation = lt_change EXCEPTIONS not_found = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ``` 在这个示例代码中,我们首先准备了工艺路线的数据,然后准备修改参数,最后调用BAPI_ROUTING_CHANGE进行修改。请注意,在实际使用中,需要根据具体情况对代码进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值