{"id":160,"date":"2023-12-11T06:37:55","date_gmt":"2023-12-11T06:37:55","guid":{"rendered":"https:\/\/sapabap.dwimansolution.com\/?p=160"},"modified":"2023-12-11T07:28:57","modified_gmt":"2023-12-11T07:28:57","slug":"sap-abap-bdc-clearing-f-51","status":"publish","type":"post","link":"https:\/\/sapabap.dwimansolution.com\/index.php\/2023\/12\/11\/sap-abap-bdc-clearing-f-51\/","title":{"rendered":"SAP ABAP &#8211; BDC Clearing F-51"},"content":{"rendered":"\n<p>F-51 : <strong>Transfer posting with clearing<\/strong><\/p>\n\n\n\n<p>Here we go.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>TOP<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TYPES:\n  tt_data       TYPE STANDARD TABLE OF yfs304,\n  tt_data_other TYPE STANDARD TABLE OF yfs306.\n\nTYPES: BEGIN OF ty_datasort.\n        INCLUDE STRUCTURE  yfs304.\nTYPES: sort TYPE i,\n       END OF ty_datasort,\n       tt_datasort TYPE TABLE OF ty_datasort.\n\nDATA: gt_bdc    TYPE TABLE OF bdcdata.<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>MAIN<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FUNCTION zfm_clearing.\r\n*\"----------------------------------------------------------------------\r\n*\"*\"Local Interface:\r\n*\"  IMPORTING\r\n*\"     REFERENCE(IM_HEADER) TYPE  ZHEADER\r\n*\"  EXPORTING\r\n*\"     REFERENCE(EX_BELNR) TYPE  BELNR_D\r\n*\"  TABLES\r\n*\"      T_DATA STRUCTURE  ZSDATA\r\n*\"      T_RETURN STRUCTURE  BDCMSGCOLL\r\n*\"      T_RET2 STRUCTURE  BAPIRET2\r\n*\"      T_DATA_OTHER STRUCTURE  ZSOTHER\r\n*\"----------------------------------------------------------------------\r\n  DATA: lv_mode   TYPE char1 VALUE 'N',\r\n        lv_update TYPE c VALUE 'S'.\r\n\r\n  LOOP AT t_data_other ASSIGNING FIELD-SYMBOL(&lt;lfs_other>).\r\n    &lt;lfs_other>-newko = |{ &lt;lfs_other>-newko ALPHA = IN }|.\r\n  ENDLOOP.\r\n\r\r\n  PERFORM f_fill_bdc_data USING im_header t_data_other&#91;] t_data&#91;].\r\n\r\n  CALL TRANSACTION 'F-51'\r\n    USING gt_bdc\r\n    MODE lv_mode \"gv_mode\r\n    UPDATE lv_update\r\n    MESSAGES INTO t_return.\r\n\r\n  READ TABLE t_return INTO DATA(ls_return) WITH KEY msgtyp = 'S' msgid = 'F5' msgnr = '312'.\r\n  IF sy-subrc EQ 0.\r\n    ex_belnr = ls_return-msgv1.\r\n  ENDIF.\r\n\r\n  CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'\r\n    TABLES\r\n      imt_bdcmsgcoll = t_return&#91;]\r\n      ext_return     = t_ret2.\r\n\r\n\r\nENDFUNCTION.<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>F01<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>*&amp;---------------------------------------------------------------------*\n*&amp;      Form  f_fill_bdc_data \n*&amp;---------------------------------------------------------------------*\n*       text\n*----------------------------------------------------------------------*\n*      -->P_IM_HEADER  text\n*      -->P_T_DATA_OTHER&#91;]  text\n*      -->P_T_DATA&#91;]  text\n*----------------------------------------------------------------------*\n\" we need lv_index to indexing amount to clearing because we have to match the amount with the document number while input\n\n*----------------------------------------------------------------------*\n\nFORM f_fill_bdc_data USING    ps_header TYPE yfs303\n                              pt_data_other TYPE tt_data_other\n                              pt_data TYPE tt_data.\n\n  DATA: lv_date TYPE char10.\n  DATA: lt_datasort TYPE tt_datasort.\n\n  DATA: lv_bldat      TYPE char10,\n        lv_budat      TYPE char10,\n        lv_sel        TYPE char20,\n        lv_index      TYPE sy-index,\n        lv_line       TYPE sy-index,\n        ls_other      TYPE yfs306,\n        lv_gsber      TYPE bseg-gsber.\n\n  DATA: BEGIN OF lw_data,\n          kunnr TYPE bseg-kunnr,\n          vbeln TYPE bseg-vbeln,\n        END OF lw_data,\n        lt_data LIKE TABLE OF lw_data.\n\n  DATA: BEGIN OF lw_other,\n          saknr TYPE ska1-saknr,\n          ktoks TYPE ska1-ktoks,\n        END OF lw_other,\n        lt_other LIKE TABLE OF lw_other.\n\n  DATA: lv_credit       TYPE char20,\n        ls_data         LIKE LINE OF  pt_data,\n        ls_datasort     TYPE ty_datasort.\n\n  CLEAR: gt_bdc.\n\n  IF pt_data IS NOT INITIAL.\n    LOOP AT pt_data INTO DATA(ls_dt) .\n      lw_data-kunnr = ls_dt-agkon.\n      lw_data-vbeln = ls_dt-sel01.\n      APPEND lw_data TO lt_data.\n      CLEAR lw_data.\n    ENDLOOP.\n\n    SELECT vbeln, bukrs, kunnr, umsks, umskz, augdt, augbl, zuonr, gjahr, belnr, buzei, rebzg, rebzj, rebzz, wrbtr\n       FROM bsid INTO TABLE @DATA(lt_bsid)\n      FOR ALL ENTRIES IN @lt_data\n      WHERE bukrs = @ps_header-bukrs\n        AND kunnr = @lt_data-kunnr\n        AND vbeln = @lt_data-vbeln.\n  ENDIF.\n\n  IF pt_data_other IS NOT INITIAL.\n    LOOP AT pt_data_other INTO DATA(ls_dt_o).\n      lw_other-saknr = ls_dt_o-newko+7.\n      APPEND lw_other TO lt_other.\n      CLEAR lw_other.\n    ENDLOOP.\n\n    SELECT saknr, ktoks\n      FROM ska1 INTO TABLE @DATA(lt_ska1)\n      FOR ALL ENTRIES IN @lt_other\n      WHERE saknr = @lt_other-saknr.\n  ENDIF.\n\n  lv_bldat = ps_header-bldat+6(2) &amp;&amp; '.' &amp;&amp; ps_header-bldat+4(2) &amp;&amp; '.' &amp;&amp; ps_header-bldat+0(4).\n  lv_budat = ps_header-budat+6(2) &amp;&amp; '.' &amp;&amp; ps_header-budat+4(2) &amp;&amp; '.' &amp;&amp; ps_header-budat+0(4).\n\n  PERFORM bdc_dynpro USING  'SAPMF05A' '0122'.\n  PERFORM bdc_field USING:  'BDC_OKCODE' '=SL',\n                            'BKPF-BLDAT' lv_bldat,\n                            'BKPF-BLART' ps_header-blart,\n                            'BKPF-BUKRS' ps_header-bukrs,\n                            'BKPF-BUDAT' lv_budat,\n                            'BKPF-MONAT' ps_header-monat,\n                            'BKPF-WAERS' ps_header-waers,\n                            'BKPF-XBLNR' ps_header-xbeln,\n                            'FS006-DOCID' '*'.\n\n  lt_datasort = CORRESPONDING #( pt_data ).\n  SORT lt_bsid BY kunnr bukrs umsks umskz augdt augbl zuonr gjahr belnr buzei.\n  SORT lt_datasort BY agkon sel01.\n  CLEAR: lv_index.\n  LOOP AT lt_bsid INTO DATA(ls_bsid).\n    DATA(lv_tabix) = sy-tabix.\n    READ TABLE lt_datasort ASSIGNING FIELD-SYMBOL(&lt;lfs_sort>) WITH KEY agkon = ls_bsid-kunnr sel01 = ls_bsid-belnr BINARY SEARCH.\n    IF sy-subrc EQ 0.\n      &lt;lfs_sort>-sort = lv_tabix.\n    ENDIF.\n  ENDLOOP.\n\n* -------------------------------------------------------------------\n*  I N P U T   D O C U M E N T S\n* -------------------------------------------------------------------\n  SORT lt_datasort BY agkoa agkon sort.\n  LOOP AT lt_datasort INTO ls_data GROUP BY ( agkoa = ls_data-agkoa agkon = ls_data-agkon ).\n    lv_line = lv_line + 1.\n\n    IF ls_data-agkoa = 'D' OR ls_data-agkoa = 'K'.\n      IF lv_line = 1.\n        lv_sel = 'RF05A-XPOS1(17)'. \" billing document\n      ELSE.\n        lv_sel = 'RF05A-XPOS1(16)'. \" billing document\n      ENDIF.\n    ELSEIF ls_data-agkoa = 'S'.\n      lv_sel = 'RF05A-XPOS1(03)'. \" document number\n    ENDIF.\n\n\n    PERFORM bdc_dynpro USING  'SAPMF05A' '0710'.\n    PERFORM bdc_field USING:  'BDC_OKCODE' '\/00',\n                              'RF05A-AGBUK' ps_header-bukrs,\n                              'RF05A-AGKON' ls_data-agkon,\n                              'RF05A-AGKOA' ls_data-agkoa,\n                              'RF05A-XNOPS' 'X',\n                              'RF05A-XPOS1(01)' '',\n                              lv_sel 'X'.\n\n    LOOP AT GROUP ls_data INTO DATA(ls_data2).\n      PERFORM bdc_dynpro USING  'SAPMF05A' '0731'.\n      PERFORM bdc_field USING:  'BDC_CURSOR' 'RF05A-SEL01(01)',\n                                'BDC_OKCODE' '\/00',\n                                'RF05A-SEL01(01)' ls_data2-sel01.\n    ENDLOOP.\n\n\n    PERFORM bdc_dynpro USING  'SAPMF05A' '0731'.\n    PERFORM bdc_field USING:  'BDC_CURSOR' 'RF05A-SEL01(01)',\n                              'BDC_OKCODE' '=SLK'.\n\n  ENDLOOP.\n\n\n  PERFORM bdc_dynpro USING  'SAPMF05A' '0710'.\n  PERFORM bdc_field USING:  'BDC_OKCODE' '=PA',\n                            'RF05A-AGBUK' '',\n                            'RF05A-AGKON' '',\n                            'RF05A-AGKOA' 'D',\n                            'RF05A-XNOPS' 'X',\n                            'RF05A-XPOS1(01)' 'X'.\n\n\n\n* -------------------------------------------------------------------\n*  I N P U T   A M O U N T   i n   P a r t i a l   a m t   t a b\n* -------------------------------------------------------------------\n\n  CLEAR: lv_index.\n  SORT lt_bsid BY vbeln bukrs kunnr umsks umskz augdt augbl zuonr gjahr belnr buzei.\n  LOOP AT lt_datasort INTO ls_datasort.\n      IF ls_datasort-sort IS NOT INITIAL.\n        lv_index = ls_datasort-sort.\n      ELSE.\n        lv_index = lv_index + 1.\n      ENDIF.\n\n      \" amount initial dari parameter\n      lv_credit = ls_datasort-amount.\n\n      \" jika ada document pembayaran bsid, maka dijumlahkan juga amountnya\n      READ TABLE lt_bsid INTO ls_bsid WITH KEY vbeln = ls_datasort-sel01 BINARY SEARCH.\n      IF sy-subrc EQ 0.\n        LOOP AT lt_bsid INTO ls_bsid FROM sy-tabix.\n          IF ls_bsid-vbeln NE ls_datasort-sel01.\n            EXIT.\n          ENDIF.\n\n          IF ls_bsid-vbeln NE ls_bsid-belnr.\n            lv_credit = lv_credit + ( ls_bsid-wrbtr * 100 ) .\n          ENDIF.\n        ENDLOOP.\n      ENDIF.\n\n      PERFORM bdc_dynpro USING  'SAPDF05X' '3100'.\n      PERFORM bdc_field USING:  'BDC_OKCODE' '=PART',\n                                'RF05A-ABPOS' lv_index.\n\n      PERFORM bdc_dynpro USING  'SAPDF05X' '3100'.\n      PERFORM bdc_field USING:  'BDC_OKCODE' '\/00',\n                                'RF05A-ABPOS' lv_index,\n                                'DF05B-PSZAH(01)' lv_credit.\n\n      PERFORM bdc_dynpro USING  'SAPDF05X' '3100'.\n      PERFORM bdc_field USING:  'BDC_OKCODE' '\/00',\n                                'RF05A-ABPOS' lv_index.\n\n  ENDLOOP.\n\n  PERFORM bdc_dynpro USING  'SAPDF05X' '3100'.\n  PERFORM bdc_field USING:  'BDC_OKCODE' '=KMD'.\n\n\n\n* -------------------------------------------------------------------\n*  I N P U T   O T H E R    D A T A\n* -------------------------------------------------------------------\n\n  LOOP AT pt_data_other INTO ls_other.\n\n    PERFORM bdc_dynpro USING  'SAPMF05A' '0700'.\n    PERFORM bdc_field USING  'BDC_OKCODE' '\/00'.\n    PERFORM bdc_field USING  'RF05A-NEWBS' ls_other-newbs.\n    PERFORM bdc_field USING  'RF05A-NEWKO' ls_other-newko.\n\n\n    CASE ls_other-newbs.\n      WHEN '31' OR '21'.\n        PERFORM bdc_dynpro USING 'SAPMF05A' '0302'.\n        PERFORM bdc_field USING  'BDC_OKCODE' '=AB'.\n        PERFORM bdc_field USING  'BSEG-GSBER' ls_other-gsber.\n        PERFORM bdc_field USING  'BSEG-WRBTR' ls_other-wrbtr.\n        PERFORM bdc_field USING  'BSEG-ZUONR' ls_other-zuonr.\n        PERFORM bdc_field USING  'BSEG-SGTXT' ls_other-sgtxt.\n        lv_date = |{ ls_other-valut+6(2) }.{ ls_other-valut+4(2) }.{ ls_other-valut(4) }|.\n        PERFORM bdc_field USING  'BSEG-ZFBDT' lv_date.\n      WHEN '17'.\n        PERFORM bdc_dynpro USING  'SAPMF05A' '0301'.\n        PERFORM bdc_field USING  'BDC_OKCODE' '=AB'.\n        PERFORM bdc_field USING  'BSEG-WRBTR' ls_other-wrbtr.\n        PERFORM bdc_field USING  'BSEG-ZUONR' ls_other-zuonr.\n        PERFORM bdc_field USING  'BSEG-SGTXT' ls_other-sgtxt.\n        lv_gsber = |{ ls_other-prctr ALPHA = OUT }|.\n        PERFORM bdc_field USING  'BSEG-GSBER' lv_gsber.\n      WHEN OTHERS.\n        PERFORM bdc_dynpro USING  'SAPMF05A' '0300'.\n        PERFORM bdc_field USING  'BDC_OKCODE' '=AB'.\n        PERFORM bdc_field USING  'BSEG-WRBTR' ls_other-wrbtr.\n        PERFORM bdc_field USING  'BSEG-ZUONR' ls_other-zuonr.\n        PERFORM bdc_field USING  'BSEG-SGTXT' ls_other-sgtxt.\n    ENDCASE.\n\n\n    READ TABLE lt_ska1 INTO DATA(ls_ska1) WITH KEY saknr = ls_other-newko+7.\n    IF ls_ska1-ktoks = '7000' OR ls_ska1-ktoks = '6000'.\n      IF ls_other-newbs EQ '50'.\n        PERFORM bdc_dynpro USING  'SAPLKACB' '0002'.\n        PERFORM bdc_field USING  'BDC_OKCODE' '=ENTE'.\n        PERFORM bdc_field USING  'COBL-PRCTR' ls_other-prctr.\n        PERFORM bdc_field USING  'COBL-KOSTL' ls_other-kostl.\n      ELSEIF ls_other-newbs EQ '40'.\n        PERFORM bdc_dynpro USING  'SAPLKACB' '0002'.\n        PERFORM bdc_field USING  'BDC_OKCODE' '=ENTE'.\n        PERFORM bdc_field USING  'COBL-PRCTR' ls_other-prctr.\n        PERFORM bdc_field USING  'COBL-KOSTL' ls_other-kostl.\n      ENDIF.\n    ELSE.\n      IF ls_other-newbs EQ '50'.\n        PERFORM bdc_dynpro USING  'SAPLKACB' '0002'.\n        PERFORM bdc_field USING  'BDC_OKCODE' '=ENTE'.\n      ELSEIF ls_other-newbs EQ '40'.\n        PERFORM bdc_dynpro USING  'SAPLKACB' '0002'.\n        PERFORM bdc_field USING  'BDC_OKCODE' '=ENTE'.\n      ENDIF.\n    ENDIF.\n\n  ENDLOOP.\n\n* -------------------------------------------------------------------\n*  S A V E\n* -------------------------------------------------------------------\n  PERFORM bdc_dynpro USING  'SAPMF05A' '0700'.\n  PERFORM bdc_field USING:  'BDC_OKCODE' '=BU'.\n\n\nENDFORM.<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>to be continued.. (will edit this post to add the structures)<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>F-51 : Transfer posting with clearing Here we go. TOP MAIN F01 to be continued.. (will edit this post to add the structures)<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/160"}],"collection":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/comments?post=160"}],"version-history":[{"count":5,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/160\/revisions"}],"predecessor-version":[{"id":169,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/160\/revisions\/169"}],"wp:attachment":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/media?parent=160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/categories?post=160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/tags?post=160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}