BAPI_ACC_DOCUMENT_POST 增強

使用 BAPI_ACC_DOCUMENT_POST 的時候,如果有些字段在 Tables 參數(shù)中沒有袁串,比如恰矩,現(xiàn)在大家都用 Reason code 來作為現(xiàn)金流量表的實現(xiàn)方案。但 BAPI_ACC_DOCUMENT_POSTaccountgl 參數(shù)是沒有原因代碼這個字段的体啰。這種情況下,如何能在導(dǎo)入憑證的時候嗽仪,包括這個字段呢荒勇?

簡介

  • 定義一個結(jié)構(gòu),包括 POSNR (類型為 POSNR_ACC ) 和 RSTGR (原因代碼) 兩個字段钦幔。POSNR 這個字段必須有,因為 BAPI_ACC_DOCUMENT_POST 包含多個 tables 參數(shù)常柄,需要行項目號來關(guān)聯(lián)鲤氢。比如第一行 #1 的總賬科目、金額西潘、extension2 等卷玉。

  • SE19 實現(xiàn) BADI 增強 ACC_DOCUMENT,這個增強是用來將 BAPI_ACC_DOCUMENT_POST 參數(shù)表EXTENSION2 傳入系統(tǒng)表 ACCIT喷市。只需要實現(xiàn) change 方法

  • BAPI_ACC_DOCUMENT_POST 中相种,啟用 extension2 參數(shù),將擴展字段傳入

定義結(jié)構(gòu)

事務(wù)碼 SE11 定義一個結(jié)構(gòu) zext2品姓,包括 POSNR (類型為 POSNR_ACC ) 和 RSTGR (原因代碼) 兩個字段寝并。

image

通過 BADI 將擴展字段傳入系統(tǒng)表

SE19箫措,使用 Classical BADI,BADI name 為 ACC_DOCUMENT衬潦,點擊 Create 按鈕斤蔓。

image

系統(tǒng)彈出如下對話框,輸入 implementation name:

image

點擊確認后镀岛,進入如下界面弦牡。下面有一個 Filter values,添加一行漂羊,選擇 BKPFF驾锰,表示這個 BADI 實現(xiàn)只適用于會計憑證直接輸入。

image

點擊激活按鈕走越,系統(tǒng)提示 migrate 到 New Badi椭豫。并彈出如下對話框

image

我們不選擇已有的 Enhancement Implementation,自己新建一個买喧。Composite Enhancement Implementation 留空捻悯。

image

確認后,系統(tǒng)提示 Activate 成功淤毛。點擊界面上的 Interface 按鈕今缚,可以看到,這個 BADI 的實現(xiàn)有兩個方法低淡,其中 CHANGE 方法就是我們需要實現(xiàn)的方法姓言。

這個方法可以從 Example implementation class 拷貝,完全不用改動蔗蹋。

  method if_ex_acc_document~change.

    data: wa_extension   type bapiparex,
          ext_value(960) type c,
          wa_accit       type accit,
          l_ref          type ref to data.

    field-symbols: <l_struc> type any,
                   <l_field> type any.

    sort c_extension2 by structure.

    loop at c_extension2 into wa_extension.
      at new structure.
        create data l_ref type (wa_extension-structure).
        assign l_ref->* to <l_struc>.
      endat.
      concatenate wa_extension-valuepart1 wa_extension-valuepart2
                  wa_extension-valuepart3 wa_extension-valuepart4
             into ext_value.
      move ext_value to <l_struc>.
      assign component 'POSNR' of structure <l_struc> to <l_field>.
      read table c_accit with key posnr = <l_field>
            into wa_accit.
      if sy-subrc is initial.
        move-corresponding <l_struc> to wa_accit.
        modify c_accit from wa_accit index sy-tabix.
      endif.
    endloop.

  endmethod.

過賬函數(shù)包含擴展字段

BAPI_ACC_DOCUMENT_POST 使用 extension2 參數(shù)接收傳入的自定義結(jié)構(gòu)

data:  l_extname type string value 'ZEXT2'.

data: extension2 type standard table of bapiparex with header line,
      gs_zext2   like zext2.

form populate_extension2.
  " first line
  clear gs_zext2.
  gs_zext2-posnr = '1'.
  gs_zext2-rstgr = 'A01'.

  clear extension2.
  extension2-structure = l_extname.
  extension2-valuepart1 = gs_zext2.
  append extension2.
  
  " second line
  clear gs_zext2.
  gs_zext2-posnr = '2'.
  gs_zext2-rstgr = 'A01'.

  clear extension2.
  extension2-structure = l_extname.
  extension2-valuepart1 = gs_zext2.
  append extension2.
endform.

在 BAPI 中使用 extension2 參數(shù):

call function 'BAPI_ACC_DOCUMENT_POST'
exporting
    documentheader = docheader
tables
    accountgl      = accountgl
    currencyamount = currencyamount
    extension2     = extension2
    return         = return.

完整代碼

最后給出完整代碼

report zbapi_acc_doc_post_test.

data:
  docheader      like bapiache09, " structure of document header
  accountgl      like bapiacgl09 occurs 0 with header line, " internal table for glaccounts
  currencyamount like bapiaccr09 occurs 0 with header line, " internal table for currency
  return         like bapiret2   occurs 0 with header line. " internal table for return

" Extension2
data: extension2 type standard table of bapiparex with header line,
      gs_zext2   like zext2.

" Populate required values
data: l_cocd    type bukrs value 'Z900',
      l_curr    type bapiaccr09-currency value 'CNY',
      l_doctype type bapiache09-doc_type value 'SA',
      l_extname type string value 'ZEXT2'.

start-of-selection.
  perform populate_doc_header.
  perform populate_gl_accounts.
  perform populate_currency_amt.
  perform populate_extension2.
  perform generate_fi_document.

form populate_doc_header.
  clear docheader.
  docheader-username = sy-uname.
  docheader-header_txt = 'Test FI doc using BAPI'.
  docheader-comp_code = l_cocd.  " company code
  docheader-doc_date = sy-datum.
  docheader-pstng_date = sy-datum.
  docheader-doc_type = l_doctype.
endform.

form populate_gl_accounts.
  clear accountgl.

  accountgl-itemno_acc = '1'.
  accountgl-gl_account = '0010010100'.
  accountgl-comp_code = l_cocd.
  accountgl-pstng_date = sy-datum.
  accountgl-doc_type = l_doctype.
  accountgl-item_text = '銀行取現(xiàn)'.
  append accountgl.

  clear accountgl.
  accountgl-itemno_acc = '2'.
  accountgl-gl_account = '0010020100'.
  accountgl-comp_code = l_cocd.
  accountgl-pstng_date = sy-datum.
  accountgl-value_date = sy-datum.
  accountgl-doc_type = l_doctype.
  accountgl-item_text = '銀行取現(xiàn)'.
  append accountgl.
endform.

form populate_currency_amt.
  clear currencyamount.
  currencyamount-itemno_acc = '1'.
  currencyamount-currency = l_curr.
  currencyamount-amt_doccur = '100.00'.
  append currencyamount.

  clear currencyamount.
  currencyamount-itemno_acc = '2'.
  currencyamount-currency = l_curr.
  currencyamount-amt_doccur = '-100.00'.
  append currencyamount.
endform.

form populate_extension2.
  clear gs_zext2.
  gs_zext2-posnr = '1'.
  gs_zext2-rstgr = 'A01'.

  clear extension2.
  extension2-structure = l_extname.
  extension2-valuepart1 = gs_zext2.
  append extension2.

  clear gs_zext2.
  gs_zext2-posnr = '2'.
  gs_zext2-rstgr = 'A01'.

  clear extension2.
  extension2-structure = l_extname.
  extension2-valuepart1 = gs_zext2.
  append extension2.
endform.

form generate_fi_document.
  data: has_error    type c,
        message_line type string.
  has_error = space.

  call function 'BAPI_ACC_DOCUMENT_CHECK'
    exporting
      documentheader = docheader
    tables
      accountgl      = accountgl
      currencyamount = currencyamount
      extension2     = extension2
      return         = return.

  loop at return.
    if return-type = 'E'.
      has_error = 'X'.
      exit.
    endif.
  endloop.

  if has_error = 'X'.
    loop at return.
      concatenate return-id return-number ': ' return-message into message_line.
      write: / message_line.
      clear return.
    endloop.
  endif.

  check has_error = space.
  clear return[].

  call function 'BAPI_ACC_DOCUMENT_POST'
    exporting
      documentheader = docheader
    tables
      accountgl      = accountgl
      currencyamount = currencyamount
      extension2     = extension2
      return         = return.

  if sy-subrc is initial.
    call function 'BAPI_TRANSACTION_COMMIT'
      exporting
        wait = 'X'.

    " write messages
    loop at return.
      concatenate return-id return-number ': ' return-message into message_line.
      write: / message_line.
      clear return.
    endloop.
  endif.

  if sy-subrc is initial.
    write: / 'Successful'.
  endif.

endform.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末何荚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猪杭,更是在濱河造成了極大的恐慌餐塘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皂吮,死亡現(xiàn)場離奇詭異戒傻,居然都是意外死亡,警方通過查閱死者的電腦和手機蜂筹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門需纳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艺挪,你說我怎么就攤上這事不翩。” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵口蝠,是天一觀的道長器钟。 經(jīng)常有香客問我,道長亚皂,這世上最難降的妖魔是什么俱箱? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮灭必,結(jié)果婚禮上狞谱,老公的妹妹穿的比我還像新娘。我一直安慰自己禁漓,他們只是感情好跟衅,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著播歼,像睡著了一般伶跷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秘狞,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天叭莫,我揣著相機與錄音,去河邊找鬼烁试。 笑死雇初,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的减响。 我是一名探鬼主播靖诗,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼支示!你這毒婦竟也來了刊橘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤颂鸿,失蹤者是張志新(化名)和其女友劉穎促绵,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘴纺,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡败晴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了颖医。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片位衩。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡裆蒸,死狀恐怖熔萧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤佛致,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布贮缕,位于F島的核電站,受9級特大地震影響俺榆,放射性物質(zhì)發(fā)生泄漏感昼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一罐脊、第九天 我趴在偏房一處隱蔽的房頂上張望定嗓。 院中可真熱鬧,春花似錦萍桌、人聲如沸宵溅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恃逻。三九已至,卻和暖如春藕施,著一層夾襖步出監(jiān)牢的瞬間寇损,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工裳食, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留矛市,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓胞谈,卻偏偏與公主長得像尘盼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子烦绳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的径密。 ??事件午阵,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,495評論 1 11
  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,767評論 0 15
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹 對...
    cosWriter閱讀 11,103評論 1 32
  • 概述 document節(jié)點是文檔的根節(jié)點,每張網(wǎng)頁都有自己的document節(jié)點享扔。window.document屬...
    許先生__閱讀 636評論 0 2
  • 一底桂、概述 document節(jié)點是整個文檔樹的頂層節(jié)點,每張網(wǎng)頁都有自己的document節(jié)點惧眠。window.doc...
    周花花啊閱讀 1,329評論 0 1