PM工单结算规则处理方法

 

PM工单结算规则处理方法

侯志宇

  2011-12-6

在订单中我们可以通过出口维护结算规则,这样可以避免用户手工维护结算规则

可以再IWO10027(生成用户定义的结算规则)出口中实现实现代码如下:

*&---------------------------------------------------------------------*
*&  包括                ZXWOCU24
*&---------------------------------------------------------------------*
*
*增强名称:试点-工单建立后,保存时直接填入一个虚拟的结算规则。(结算到科目9999999999)
*增强内容:工单保存时,全部自动赋给一个虚拟的结算规则:科目9999999999

    DATA: S_PMDFU TYPE PMDFU.
    S_PMDFU-KONTY = 'SK'."G/L = SK
    S_PMDFU-FDIND = '9999999999'.
    S_PMDFU-PERBZ = 'GES'."FUL
    S_PMDFU-AQZIF = 0.
    S_PMDFU-PROZS = 100.
    APPEND S_PMDFU TO PMDFU_TAB.
 .

IWO10027正常情况下在IW31中及其在IW32中单击结算规则选择默认时调用;

但是由于某些未知原因也可能导致此出口更新失败,这样我们就找了另一种更新结算规则的方法来进行补救,我将此方法写在IWO10009 (PM订单:对于'保存'事件的客户检查)出口中进行处理,在EXIT_SAPLCOIH_009中代码如下:

*>>>modify begin  2011.12.06*************************************
*修改方案:在非创建工单时如果还没有维护结算规则,就自动生成结算规则
*修改人:侯志宇
**************************************************
* 如果还没有维护结算规则,就自动生成结算规则 *
**************************************************
call function 'STATUS_CHECK'
  exporting
*   BYPASS_BUFFER           = ' '
*   CLIENT                  = SY-MANDT
    OBJNR                   = CAUFVD_IMP-OBJNR
    STATUS                  = 'I0028'"SETC in table TJ02T 结算规则己维护
 exceptions
   OBJECT_NOT_FOUND        = 1
   STATUS_NOT_ACTIVE       = 2
   others                  = 3.

if SY-SUBRC = 2 and CAUFVD_IMP-OBJNR+0(2) <> 'TM'."不是新建末保存的订单 STATUS_NOT_ACTIVE,

**************************************************
* 自动生成结算规则 开始 *
**************************************************
*************************
* Data Declaration *
*************************
  data IT_OBJNR type standard table of IONRB with header line.

  data IT_COBRA type standard table of COBRA with header line.
  data IT_COBRB type standard table of COBRB with header line.

*.COBRA-BUFFER (SEE FM KOBS)
  types:  begin of TY_COBRA_BUF.
          include structure COBRA.
  types:  UFLAG like DKOBR-UPD_FLAG,
          end of TY_COBRA_BUF.

*.COBRB-PUFFER MIT ?NDERUNGSFLAG (SEE FM KOBS)
  types:  begin of TY_COBRB_BUF.
          include structure COBRB.
  types:  UFLAG like DKOBR-UPD_FLAG,
          end of TY_COBRB_BUF.

  data L_MEM_COBRA type standard table of TY_COBRA_BUF with header line.
  data L_MEM_COBRB type standard table of TY_COBRB_BUF with header line.

*************************
* Data Process *
*************************

  IT_OBJNR-OBJNR = CAUFVD_IMP-OBJNR.
  append IT_OBJNR.

  call function 'K_SRULE_PRE_READ'
    exporting
      I_PFLEGE = ' '
    tables
      T_SENDER_OBJNR = IT_OBJNR
*   T_COBRA =
    exceptions
      WRONG_PARAMETERS = 1
      others = 2.

  call function 'K_SETTLEMENT_RULE_EXISTENCE'
    exporting
      OBJNR                = IT_OBJNR-OBJNR
*   FLG_LOCAL            = ' '
* IMPORTING
*   E_COBRA              =
   exceptions
     RULE_NOT_FOUND       = 1
     others               = 2.

  if SY-SUBRC = 1."如果没有结算规则,就创建

    call function 'K_SRULE_CREATE'
      exporting
        I_OBJNR                   = IT_OBJNR-OBJNR
*     I_CHECK_ONLY_LOCAL        = ' '
*   IMPORTING
*     E_COBRA                   =
     exceptions
       RULE_ALREADY_EXISTS       = 1
       others                    = 2.

  endif."如果没有结算规则,就创建


  call function 'K_SETTLEMENT_RULE_GET'
   exporting
     OBJNR           = IT_OBJNR-OBJNR
*   X_ALL           = ' '
    tables
      E_COBRA         = IT_COBRA
      E_COBRB         = IT_COBRB
   exceptions
     NOT_FOUND       = 1
     others          = 2.

  call function 'K_SRULE_EXPORT_IMPORT'
    exporting
      I_MODE     = 'EX'
    exceptions
      WRONG_MODE = 1
      others     = 2.

  import L_MEM_COBRA L_MEM_COBRB from memory id 'K_SRULE'.

* 修改 IT_COBRA, IT_COBRB.
  clear:L_MEM_COBRB,L_MEM_COBRB[].

  L_MEM_COBRB-OBJNR = IT_OBJNR-OBJNR.
  L_MEM_COBRB-LFDNR = 1.
  L_MEM_COBRB-PERBZ = 'GES'."FUL "结算类型
*  L_MEM_COBRB-URZUO = 'COS'. "原始分配
  L_MEM_COBRB-PROZS = '100'. "百分比
  L_MEM_COBRB-DFREG = 'PMU'. "缺省规则
  L_MEM_COBRB-KONTY = 'SK'."G/L = SK "科目分配类别
  L_MEM_COBRB-KOKRS = 'SEC0'. "成本控制范围
  L_MEM_COBRB-BUKRS = CAUFVD_IMP-BUKRS. "公司代码
  L_MEM_COBRB-HKONT = '9999999999'. "总帐科目
  L_MEM_COBRB-KOSTL = CAUFVD_IMP-KOSTV. "成本中心
  concatenate L_MEM_COBRB-KONTY  L_MEM_COBRB-BUKRS L_MEM_COBRB-HKONT into L_MEM_COBRB-REC_OBJNR1.
  L_MEM_COBRB-EXTNR = 1.
  L_MEM_COBRB-UFLAG = 'I'.

  append L_MEM_COBRB.

*  L_MEM_COBRB-OBJNR = IT_OBJNR-OBJNR.
*  L_MEM_COBRB-LFDNR = 2.
*  L_MEM_COBRB-PERBZ = 'GES'. "结算类型
*  L_MEM_COBRB-URZUO = 'REV'. "原始分配
*  L_MEM_COBRB-PROZS = '100'. "百分比
*  L_MEM_COBRB-DFREG = 'PMU'. "缺省规则
*  L_MEM_COBRB-KONTY = 'SK'. "科目分配类别
*  L_MEM_COBRB-KOKRS = '3333'. "成本控制范围
*  L_MEM_COBRB-BUKRS = CAUFVD_IMP-BUKRS. "公司代码
*  L_MEM_COBRB-HKONT = '6001010611'. "总帐科目
*  L_MEM_COBRB-KOSTL = CAUFVD_IMP-KOSTV. "成本中心
*  L_MEM_COBRB-PRCTR = CAUFVD_IMP-PRCTR. "利润中心
*  L_MEM_COBRB-REC_OBJNR1 = 'SK31106001010611'. "结算接收方的对象号
*  L_MEM_COBRB-EXTNR = 2.
*  L_MEM_COBRB-UFLAG = 'I'.
*
*  append L_MEM_COBRB.

  export L_MEM_COBRA L_MEM_COBRB to memory id 'K_SRULE'.


  call function 'K_SETTLEMENT_RULE_REFRESH'
    exporting
      OBJNR = IT_OBJNR-OBJNR.

  call function 'K_SRULE_EXPORT_IMPORT'
    exporting
      I_MODE     = 'IM'
    exceptions
      WRONG_MODE = 1
      others     = 2.

  call function 'K_SETTLEMENT_RULE_CHECK'
    exporting
*   ADD_PARA                = ' '
*   APROF                   = ' '
      OBJNR                   = IT_OBJNR-OBJNR
*   TEST_BUKRS              = ' '
*   TEST_KOKRS              = ' '
*   RWIN_AUFRUF             = 'X'
      I_PFLEGE                = 'X'"you can change the rule
*   IVPRO                   = ' '
*   XREVENUE                = ' '
*   XFUNCSAVE               = ' '
* IMPORTING
*   XSAVE                   =
   exceptions
     ERROR_OCCURRED          = 1
     NO_RULE_FOR_OBJNR       = 2
     WARNING_OCCURRED        = 3
     INTERNAL_PROBLEMS       = 4
     others                  = 5.

  if SY-SUBRC = 0."保存结算规则,设置状态 SETC 结算规则己维护

    call function 'K_SETTLEMENT_RULE_SAVE'
      exporting
        DIALOG            = ''
        OBJNR             = IT_OBJNR-OBJNR
        I_STATUS_UPDATE   = 'X'
      exceptions
        NO_RULE_FOR_OBJNR = 1
        others            = 2.

    data STATUS type standard table of JSTAT with header line.
    STATUS-STAT = 'I0028'."SETC in table TJ02T 结算规则己维护
    STATUS-INACT = ''.
    append STATUS.

    call function 'STATUS_CHANGE_INTERN'
      exporting
*     CHECK_ONLY                = ' '
*     CLIENT                    = SY-MANDT
        OBJNR                     = IT_OBJNR-OBJNR
*     ZEILE                     = ' '
*     SET_CHGKZ                 =
*   IMPORTING
*     ERROR_OCCURRED            =
*     OBJECT_NOT_FOUND          =
*     STATUS_INCONSISTENT       =
*     STATUS_NOT_ALLOWED        =
      tables
        STATUS                    = STATUS
     exceptions
       OBJECT_NOT_FOUND          = 1
       STATUS_INCONSISTENT       = 2
       STATUS_NOT_ALLOWED        = 3
       others                    = 4.
    if SY-SUBRC = 0.
      call function 'STATUS_UPDATE_ON_COMMIT'.
    endif.
  endif.
**************************************************
* 自动生成结算规则 结束 *
**************************************************
endif.
*>>>>END begin  2011.12.06

 

 

 

你可能感兴趣的:(ABAP)