Advertisement
falazure123

Untitled

Oct 5th, 2022 (edited)
796
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 46.94 KB | None | 0 0
  1. CLASS ztest_cl_rev DEFINITION
  2.   PUBLIC
  3.   CREATE PUBLIC .
  4.   PUBLIC SECTION.
  5.     TYPES:
  6.       mtt_zrnpt TYPE TABLE OF zrnpt_input_doc,
  7.       mtt_rseg  TYPE mrm_tab_mrmrseg,
  8.       mtt_rbco  TYPE mrm_tab_mrmrbco.
  9.  
  10.     CLASS-METHODS process_rnpt_by_miro
  11.       IMPORTING
  12.         !iv_invoicedocnumber TYPE re_belnr
  13.         !iv_fiscalyear       TYPE gjahr
  14.         !iv_save_mode        TYPE flag
  15.         !iv_repeat_mode      TYPE flag OPTIONAL
  16.         !iv_update_batch     TYPE flag OPTIONAL
  17.       EXPORTING
  18.         !et_ret              TYPE bapiret2_t
  19.         !et_rn_reg           TYPE j_3rm_rn_reg_t .
  20.     CLASS-METHODS process_rn_by_storno_miro
  21.       IMPORTING
  22.         !iv_invoicedocnumber TYPE re_belnr
  23.         !iv_fiscalyear       TYPE gjahr
  24.         !iv_save_mode        TYPE flag OPTIONAL
  25.         !iv_repeat_mode      TYPE flag OPTIONAL
  26.       EXPORTING
  27.         !et_ret              TYPE bapiret2_t .
  28.     CLASS-METHODS process_doc_rn
  29.       IMPORTING
  30.         !iv_reg_id      TYPE j_3rm_rn_id
  31.         !iv_reg_year    TYPE j_3rm_rn_year
  32.         !iv_save_mode   TYPE flag
  33.         !iv_cpudt_begin TYPE datum OPTIONAL
  34.         !iv_cputm_begin TYPE uzeit OPTIONAL
  35.       EXPORTING
  36.         !et_rn_doc      TYPE j_3rm_rn_doc_t
  37.         !et_ret         TYPE bapiret2_t .
  38.   PROTECTED SECTION.
  39.   PRIVATE SECTION.
  40.  
  41.     TYPES:
  42.       BEGIN OF mty_fae,
  43.         belnr   TYPE belnr_d,
  44.         gjahr   TYPE gjahr,
  45.         buzei   TYPE rblgp,
  46.         cobl_nr TYPE cobl_nr,
  47.       END OF mty_fae .
  48.     TYPES:
  49.       BEGIN OF mty_clause,
  50.         line(72) TYPE c,
  51.       END OF mty_clause .
  52.     TYPES:
  53.       BEGIN OF mty_fae_mseg,
  54.         mblnr TYPE mblnr,
  55.         mjahr TYPE mjahr,
  56.         zeile TYPE mblpo,
  57.       END OF mty_fae_mseg .
  58.     TYPES:
  59.       BEGIN OF mty_invoic,
  60.         r_budat         TYPE budat,
  61.         r_belnr         TYPE re_belnr,
  62.         r_buzei         TYPE rblgp,
  63.         r_gjahr         TYPE gjahr,
  64.         r_bukrs         TYPE bukrs,
  65.         r_lfbnr         TYPE lfbnr,
  66.         r_ebeln         TYPE ebeln,
  67.         r_ebelp         TYPE ebelp,
  68.         r_lfgja         TYPE lfgja,
  69.         r_lfpos         TYPE lfpos,
  70.         r_waers         TYPE waers,
  71.         r_wbs_element   TYPE ps_psp_pnr,
  72.         r_aufnr         TYPE aufnr,
  73.         r_anln1         TYPE anln1,
  74.         r_anln2         TYPE anln2,
  75.         r_matnr         TYPE matnr,
  76.         r_erfnam        TYPE erfnam,
  77.         rnpt            TYPE j_3rm_rn_ext_num,
  78.         land            TYPE herkl,
  79.         wrbtr           TYPE rseg-wrbtr,
  80.         m_mjahr         TYPE mjahr,
  81.         m_mblnr         TYPE mblnr,
  82.         m_budat         TYPE mseg-budat_mkpf,
  83.         m_zeile         TYPE mblpo,
  84.         m_batch         TYPE charg_d,
  85.         r_menge         TYPE menge_d,
  86.         r_meins         TYPE bstme,
  87.         f_belnr         TYPE belnr_d,
  88.         f_pos           TYPE buzei,
  89.         f_gjahr         TYPE gjahr,
  90.         tnved           TYPE zmara_tnved-ztnved_kod,
  91.         rnpt_type_doc   TYPE zrnpt_input_doc-type_doc,
  92.         rnpt_doc_id     TYPE zrnpt_input_doc-doc_id,
  93.         rnpt_pos_id     TYPE zrnpt_input_doc-pos_id,
  94.         rnpt_sub_pos    TYPE zrnpt_input_doc-sub_pos,
  95.         rnpt_type_input TYPE zrnpt_input_doc-type_input,
  96.       END OF mty_invoic .
  97.     TYPES:
  98.       mtt_fae    TYPE STANDARD TABLE OF mty_fae WITH DEFAULT KEY,
  99.       mtt_j3     TYPE TABLE OF j_3rm_rn_reg WITH DEFAULT KEY,
  100.       mtt_clause TYPE STANDARD TABLE OF mty_clause WITH DEFAULT KEY,
  101.       mtt_invoic TYPE STANDARD TABLE OF mty_invoic WITH DEFAULT KEY,
  102.       mtt_mseg   TYPE TABLE OF mseg WITH DEFAULT KEY.
  103.  
  104.     CLASS-METHODS _filter_doc
  105.       IMPORTING
  106.         !iv_pos_id      TYPE char2
  107.         VALUE(it_zrnpt) TYPE mtt_zrnpt
  108.       RETURNING
  109.         VALUE(rt_fae)   TYPE mtt_fae .
  110.     CLASS-METHODS get_rn_reg_by_full_key
  111.       IMPORTING
  112.         !iv_company_code  TYPE bukrs OPTIONAL
  113.         !iv_rn_ext_number TYPE j_3rm_rn_ext_num OPTIONAL
  114.         !iv_rn_reg_date   TYPE j_3rm_rn_date OPTIONAL
  115.         !iv_batch         TYPE charg_d OPTIONAL
  116.         !iv_material      TYPE matnr OPTIONAL
  117.         !iv_serial_number TYPE gernr OPTIONAL
  118.         !iv_asset_num     TYPE anln1 OPTIONAL
  119.         !iv_asset_subnum  TYPE anln2 OPTIONAL
  120.         !iv_wbs_element   TYPE ps_psp_pnr OPTIONAL
  121.         !iv_invest_order  TYPE aufnr OPTIONAL
  122.       RETURNING
  123.         VALUE(rt_rn_reg)  TYPE mtt_j3 .
  124.     CLASS-METHODS _build_dynamic_where
  125.       IMPORTING
  126.         !iv_company_code       TYPE bukrs OPTIONAL
  127.         !iv_rn_ext_number      TYPE j_3rm_rn_ext_num OPTIONAL
  128.         !iv_rn_reg_date        TYPE j_3rm_rn_date OPTIONAL
  129.         !iv_batch              TYPE charg_d OPTIONAL
  130.         !iv_material           TYPE matnr OPTIONAL
  131.         !iv_serial_number      TYPE gernr OPTIONAL
  132.         !iv_asset_num          TYPE anln1 OPTIONAL
  133.         !iv_asset_subnum       TYPE anln2 OPTIONAL
  134.         !iv_wbs_element        TYPE ps_psp_pnr OPTIONAL
  135.         !iv_invest_order       TYPE aufnr OPTIONAL
  136.         !iv_charg              TYPE charg_d OPTIONAL
  137.         !iv_cpudt              TYPE datum OPTIONAL
  138.         !iv_cputm              TYPE uzeit OPTIONAL
  139.       RETURNING
  140.         VALUE(rt_where_clause) TYPE mtt_clause .
  141.     CLASS-METHODS rn_reg_create
  142.       IMPORTING
  143.         !is_invoic TYPE mty_invoic OPTIONAL
  144.         !it_invoic TYPE mtt_invoic
  145.       EXPORTING
  146.         !et_ret    TYPE bapiret2_t
  147.         !et_rn_reg TYPE mtt_j3 .
  148.     CLASS-METHODS rn_reg_update
  149.       IMPORTING
  150.         !it_rn_reg TYPE mtt_j3
  151.         !is_invoic TYPE mty_invoic OPTIONAL
  152.         !it_invoic TYPE mtt_invoic
  153.       EXPORTING
  154.         !et_ret    TYPE bapiret2_t .
  155.     CLASS-METHODS _add_message
  156.       IMPORTING
  157.         !iv_num    TYPE sy-msgno
  158.         !iv_msg_v1 TYPE symsgv OPTIONAL
  159.         !iv_msg_v2 TYPE symsgv OPTIONAL
  160.         !iv_msgty  TYPE bapi_mtype OPTIONAL
  161.       CHANGING
  162.         !ct_ret    TYPE bapiret2_t .
  163.     CLASS-METHODS process_sysdoc_migo_pos
  164.       IMPORTING
  165.         !it_mseg      TYPE mtt_mseg
  166.         !iv_save_mode TYPE flag
  167.       EXPORTING
  168.         !et_ret       TYPE bapiret2_t .
  169. ENDCLASS.
  170.  
  171.  
  172.  
  173. CLASS ZTEST_CL_REV IMPLEMENTATION.
  174.  
  175.  
  176. * <SIGNATURE>---------------------------------------------------------------------------------------+
  177. * | Static Private Method ZTEST_CL_REV=>GET_RN_REG_BY_FULL_KEY
  178. * +-------------------------------------------------------------------------------------------------+
  179. * | [--->] IV_COMPANY_CODE                TYPE        BUKRS(optional)
  180. * | [--->] IV_RN_EXT_NUMBER               TYPE        J_3RM_RN_EXT_NUM(optional)
  181. * | [--->] IV_RN_REG_DATE                 TYPE        J_3RM_RN_DATE(optional)
  182. * | [--->] IV_BATCH                       TYPE        CHARG_D(optional)
  183. * | [--->] IV_MATERIAL                    TYPE        MATNR(optional)
  184. * | [--->] IV_SERIAL_NUMBER               TYPE        GERNR(optional)
  185. * | [--->] IV_ASSET_NUM                   TYPE        ANLN1(optional)
  186. * | [--->] IV_ASSET_SUBNUM                TYPE        ANLN2(optional)
  187. * | [--->] IV_WBS_ELEMENT                 TYPE        PS_PSP_PNR(optional)
  188. * | [--->] IV_INVEST_ORDER                TYPE        AUFNR(optional)
  189. * | [<-()] RT_RN_REG                      TYPE        MTT_J3
  190. * +--------------------------------------------------------------------------------------</SIGNATURE>
  191.   METHOD get_rn_reg_by_full_key.
  192.  
  193.     DATA: lt_where_clause TYPE mtt_clause.
  194.  
  195.     IF iv_material IS INITIAL
  196.        AND iv_batch IS INITIAL
  197.        AND iv_serial_number IS INITIAL
  198.        AND iv_asset_num IS INITIAL
  199.        AND iv_asset_subnum IS INITIAL
  200.        AND iv_wbs_element IS INITIAL
  201.        AND iv_invest_order IS INITIAL.
  202.       RETURN.
  203.     ENDIF.
  204.  
  205.     lt_where_clause = _build_dynamic_where( iv_company_code = iv_company_code
  206.                                             iv_rn_ext_number = iv_rn_ext_number
  207.                                             iv_rn_reg_date   = iv_rn_reg_date
  208.                                             iv_batch         = iv_batch
  209.                                             iv_material      = iv_material
  210.                                             iv_serial_number = iv_serial_number
  211.                                             iv_asset_num     = iv_asset_num
  212.                                             iv_asset_subnum  = iv_asset_subnum
  213.                                             iv_wbs_element   = iv_wbs_element
  214.                                             iv_invest_order  = iv_invest_order ).
  215.  
  216.     SELECT * FROM j_3rm_rn_reg
  217.       INTO CORRESPONDING FIELDS OF TABLE @rt_rn_reg
  218.       WHERE (lt_where_clause).
  219.  
  220.   ENDMETHOD.
  221.  
  222.  
  223. * <SIGNATURE>---------------------------------------------------------------------------------------+
  224. * | Static Public Method ZTEST_CL_REV=>PROCESS_DOC_RN
  225. * +-------------------------------------------------------------------------------------------------+
  226. * | [--->] IV_REG_ID                      TYPE        J_3RM_RN_ID
  227. * | [--->] IV_REG_YEAR                    TYPE        J_3RM_RN_YEAR
  228. * | [--->] IV_SAVE_MODE                   TYPE        FLAG
  229. * | [--->] IV_CPUDT_BEGIN                 TYPE        DATUM(optional)
  230. * | [--->] IV_CPUTM_BEGIN                 TYPE        UZEIT(optional)
  231. * | [<---] ET_RN_DOC                      TYPE        J_3RM_RN_DOC_T
  232. * | [<---] ET_RET                         TYPE        BAPIRET2_T
  233. * +--------------------------------------------------------------------------------------</SIGNATURE>
  234.   METHOD process_doc_rn.
  235.     DATA:
  236.       ls_rn_reg       TYPE j_3rm_rn_reg,
  237.       lt_ret          TYPE bapiret2_t,
  238.       lt_where_clause TYPE mtt_clause,
  239.       lt_mseg         TYPE mtt_mseg.
  240.  
  241.     cl_j3rm_rn_processor=>get_rn_by_key(
  242.       EXPORTING
  243.         iv_reg_id   = iv_reg_id
  244.         iv_reg_year = iv_reg_year
  245.       IMPORTING
  246.         es_rn_reg = ls_rn_reg ).
  247.     IF ls_rn_reg IS INITIAL.
  248.       _add_message(
  249.         EXPORTING
  250.           iv_num = 077
  251.           iv_msg_v1 = CONV symsgv( iv_reg_id )
  252.           iv_msg_v2 = CONV symsgv( iv_reg_year )
  253.         CHANGING
  254.           ct_ret = et_ret ).
  255.       RETURN.
  256.     ENDIF.
  257.  
  258.     IF ls_rn_reg-batch IS NOT INITIAL.
  259.       lt_where_clause = _build_dynamic_where( iv_charg    = ls_rn_reg-batch
  260.                                               iv_material = ls_rn_reg-matnr
  261.                                               iv_cpudt    = iv_cpudt_begin
  262.                                               iv_cputm    = iv_cputm_begin ).
  263.  
  264.       SELECT * FROM mseg
  265.         INTO CORRESPONDING FIELDS OF TABLE @lt_mseg
  266.         WHERE (lt_where_clause).
  267.  
  268.       process_sysdoc_migo_pos(
  269.         EXPORTING
  270.           it_mseg      = lt_mseg
  271.           iv_save_mode = iv_save_mode
  272.         IMPORTING
  273.           et_ret    = lt_ret ).
  274.       APPEND LINES OF lt_ret TO et_ret.
  275.  
  276.     ELSEIF ls_rn_reg-wbs_element IS NOT INITIAL.
  277.       " in next version
  278.     ELSEIF ls_rn_reg-asset_num IS NOT INITIAL.
  279.       " in next version
  280.     ELSE.
  281.       _add_message(
  282.         EXPORTING
  283.           iv_num = 078
  284.           iv_msg_v1 = CONV symsgv( iv_reg_id )
  285.           iv_msg_v2 = CONV symsgv( iv_reg_year )
  286.         CHANGING
  287.           ct_ret = et_ret ).
  288.       RETURN.
  289.     ENDIF.
  290.   ENDMETHOD.
  291.  
  292.  
  293. * <SIGNATURE>---------------------------------------------------------------------------------------+
  294. * | Static Public Method ZTEST_CL_REV=>PROCESS_RNPT_BY_MIRO
  295. * +-------------------------------------------------------------------------------------------------+
  296. * | [--->] IV_INVOICEDOCNUMBER            TYPE        RE_BELNR
  297. * | [--->] IV_FISCALYEAR                  TYPE        GJAHR
  298. * | [--->] IV_SAVE_MODE                   TYPE        FLAG
  299. * | [--->] IV_REPEAT_MODE                 TYPE        FLAG(optional)
  300. * | [--->] IV_UPDATE_BATCH                TYPE        FLAG(optional)
  301. * | [<---] ET_RET                         TYPE        BAPIRET2_T
  302. * | [<---] ET_RN_REG                      TYPE        J_3RM_RN_REG_T
  303. * +--------------------------------------------------------------------------------------</SIGNATURE>
  304.   METHOD process_rnpt_by_miro.
  305.     DATA: lv_doc_id    TYPE zrnpt_doc_id,
  306.           lt_fae       TYPE TABLE OF mty_fae,
  307.           lt_fae_mseg  TYPE TABLE OF mty_fae_mseg,
  308.           lt_invoic    TYPE TABLE OF mty_invoic,
  309.           lt_grp       TYPE TABLE OF mty_invoic,
  310.           lv_pos_id    TYPE zrnpt_pos_id,
  311.           lt_rn_reg    TYPE mtt_j3,
  312.           lt_ret       TYPE bapiret2_t,
  313.           lt_ret_storn TYPE bapiret2_t.
  314.  
  315.     IF iv_invoicedocnumber IS INITIAL.
  316.       _add_message( EXPORTING iv_num = 065 CHANGING ct_ret = et_ret ).
  317.       RETURN.
  318.     ENDIF.
  319.  
  320.     IF iv_fiscalyear IS INITIAL.
  321.       _add_message( EXPORTING iv_num = 066 CHANGING ct_ret = et_ret ).
  322.       RETURN.
  323.     ENDIF.
  324.  
  325.     SELECT SINGLE * FROM rbkp
  326.       WHERE belnr = @iv_invoicedocnumber
  327.         AND gjahr = @iv_fiscalyear
  328.       INTO @DATA(ls_rbkp).
  329.  
  330.     IF ls_rbkp-rbstat <> '5'.
  331.       _add_message( EXPORTING iv_num = 068 CHANGING ct_ret = et_ret ).
  332.       RETURN.
  333.     ENDIF.
  334.  
  335.     IF ls_rbkp-ivtyp = '5'.
  336.       process_rn_by_storno_miro(
  337.         EXPORTING
  338.           iv_invoicedocnumber = iv_invoicedocnumber
  339.           iv_fiscalyear       = iv_fiscalyear
  340.           iv_save_mode        = iv_save_mode
  341.           iv_repeat_mode      = iv_repeat_mode
  342.         IMPORTING
  343.           et_ret              = lt_ret_storn ).
  344.       APPEND LINES OF lt_ret_storn TO et_ret.
  345.       RETURN.
  346.     ENDIF.
  347.  
  348.     lv_doc_id = |{ iv_invoicedocnumber }{ iv_fiscalyear }|.
  349.  
  350.     SELECT * FROM zrnpt_input_doc
  351.      WHERE doc_id = @lv_doc_id
  352.        AND type_doc = 'BUS2081'
  353.        AND rnpt <> ''
  354.        INTO TABLE @DATA(lt_zrnpt).
  355.  
  356.     IF lt_zrnpt IS INITIAL.
  357.       _add_message( EXPORTING iv_num = 067 CHANGING ct_ret = et_ret ).
  358.       RETURN.
  359.     ENDIF.
  360.  
  361.     IF ls_rbkp-stblg IS NOT INITIAL.
  362.       _add_message( EXPORTING iv_num = 070 CHANGING ct_ret = et_ret ).
  363.       RETURN.
  364.     ENDIF.
  365.  
  366.     IF iv_repeat_mode <> abap_true.
  367.       DELETE lt_zrnpt WHERE rn_reg_year IS NOT INITIAL.
  368.     ENDIF.
  369.  
  370.     SELECT * FROM bkpf
  371.       WHERE awtyp = 'RMRP'
  372.         AND awkey = @lv_doc_id
  373.       INTO TABLE @DATA(lt_bkpf).
  374.     IF sy-subrc = 0.
  375.       SELECT * FROM bseg
  376.         INTO TABLE @DATA(lt_bseg)
  377.         FOR ALL ENTRIES IN @lt_bkpf
  378.         WHERE bukrs = @lt_bkpf-bukrs
  379.           AND belnr = @lt_bkpf-belnr
  380.           AND gjahr = @lt_bkpf-gjahr.
  381.     ENDIF.
  382.  
  383.     lt_fae = _filter_doc( it_zrnpt = lt_zrnpt iv_pos_id = 'ЗП' ).
  384.     IF lt_fae IS NOT INITIAL.
  385.       SELECT * FROM rseg
  386.         FOR ALL ENTRIES IN @lt_fae
  387.         WHERE belnr = @lt_fae-belnr
  388.           AND gjahr = @lt_fae-gjahr
  389.           AND buzei = @lt_fae-buzei
  390.       INTO TABLE @DATA(lt_rseg).
  391.     ENDIF.
  392.  
  393.     IF lt_rseg IS NOT INITIAL.
  394.       SELECT * FROM rbco
  395.         FOR ALL ENTRIES IN @lt_rseg
  396.         WHERE belnr = @lt_rseg-belnr
  397.           AND gjahr = @lt_rseg-gjahr
  398.           AND buzei = @lt_rseg-buzei
  399.         INTO TABLE @DATA(lt_rbco_rseg).
  400.     ENDIF.
  401.  
  402.     lt_fae = _filter_doc( it_zrnpt = lt_zrnpt iv_pos_id = 'ОС' ).
  403.     IF lt_fae IS NOT INITIAL.
  404.       SELECT * FROM rbco
  405.         FOR ALL ENTRIES IN @lt_fae
  406.         WHERE belnr   = @lt_fae-belnr
  407.           AND gjahr   = @lt_fae-gjahr
  408.           AND cobl_nr = @lt_fae-cobl_nr
  409.       INTO TABLE @DATA(lt_rbco).
  410.     ENDIF.
  411.  
  412.     IF lt_rseg IS NOT INITIAL.
  413.       SELECT * FROM zmara_tnved
  414.         INTO TABLE @DATA(lt_tnved)
  415.         FOR ALL ENTRIES IN @lt_rseg
  416.         WHERE matnr = @lt_rseg-matnr.
  417.     ENDIF.
  418.  
  419.     IF lt_zrnpt IS INITIAL.
  420.       _add_message( EXPORTING iv_num = 076 CHANGING ct_ret = et_ret ).
  421.       RETURN.
  422.     ENDIF.
  423.  
  424.     LOOP AT lt_rseg INTO DATA(ls_rseg).
  425.       APPEND INITIAL LINE TO lt_invoic ASSIGNING FIELD-SYMBOL(<fs_row>).
  426.       <fs_row>-r_buzei = ls_rseg-buzei.
  427.       <fs_row>-r_lfbnr = ls_rseg-lfbnr.
  428.       <fs_row>-r_ebeln = ls_rseg-ebeln.
  429.       <fs_row>-r_ebelp = ls_rseg-ebelp.
  430.       <fs_row>-r_lfgja = ls_rseg-lfgja.
  431.       <fs_row>-r_lfpos = ls_rseg-lfpos.
  432.       <fs_row>-r_matnr = ls_rseg-matnr.
  433.       <fs_row>-r_menge = ls_rseg-menge.
  434.       <fs_row>-r_meins = ls_rseg-meins.
  435.       <fs_row>-wrbtr   = ls_rseg-wrbtr.
  436.       IF <fs_row>-r_lfbnr IS NOT INITIAL.
  437.         APPEND VALUE #( mblnr = <fs_row>-r_lfbnr mjahr = <fs_row>-r_lfgja zeile = <fs_row>-r_lfpos ) TO lt_fae_mseg.
  438.       ENDIF.
  439.  
  440.       READ TABLE lt_tnved WITH KEY matnr = <fs_row>-r_matnr INTO DATA(ls_tnved).
  441.       IF sy-subrc = 0.
  442.         <fs_row>-tnved = ls_tnved-ztnved_kod.
  443.       ENDIF.
  444.  
  445.       <fs_row>-r_budat = ls_rbkp-budat.
  446.       <fs_row>-r_belnr = ls_rbkp-belnr.
  447.       <fs_row>-r_gjahr = ls_rbkp-gjahr.
  448.       <fs_row>-r_bukrs = ls_rbkp-bukrs.
  449.       <fs_row>-r_waers = ls_rbkp-waers.
  450.       <fs_row>-r_erfnam = ls_rbkp-erfnam.
  451.  
  452.       READ TABLE lt_bseg WITH KEY ebeln = <fs_row>-r_ebeln ebelp = <fs_row>-r_ebelp INTO DATA(ls_bseg).
  453.       IF sy-subrc = 0.
  454.         <fs_row>-f_belnr = ls_bseg-belnr.
  455.         <fs_row>-f_pos   = ls_bseg-buzei.
  456.         <fs_row>-f_gjahr = ls_bseg-gjahr.
  457.       ENDIF.
  458.  
  459.       READ TABLE lt_rbco_rseg WITH KEY belnr = <fs_row>-r_belnr
  460.                                        gjahr = <fs_row>-r_gjahr
  461.                                        buzei = <fs_row>-r_buzei INTO DATA(ls_rbco_rseg).
  462.       IF sy-subrc = 0.
  463.         <fs_row>-r_wbs_element = ls_rbco_rseg-ps_psp_pnr.
  464.         <fs_row>-r_aufnr = ls_rbco_rseg-aufnr.
  465.         <fs_row>-r_anln1 = ls_rbco_rseg-anln1.
  466.         <fs_row>-r_anln2 = ls_rbco_rseg-anln2.
  467.  
  468.         lv_pos_id = |{ 'ОС' }{ ls_rbco_rseg-cobl_nr }|.
  469.  
  470.         LOOP AT lt_zrnpt INTO DATA(ls_zrnpt) WHERE pos_id = lv_pos_id.
  471.           <fs_row>-rnpt = ls_zrnpt-rnpt.
  472.           <fs_row>-land = ls_zrnpt-land.
  473.           <fs_row>-r_menge = ls_zrnpt-menge.
  474.           <fs_row>-r_meins = ls_zrnpt-meins.
  475.           <fs_row>-wrbtr = ls_zrnpt-amount.
  476.           <fs_row>-rnpt_type_doc = ls_zrnpt-type_doc.
  477.           <fs_row>-rnpt_doc_id = ls_zrnpt-doc_id.
  478.           <fs_row>-rnpt_pos_id = ls_zrnpt-pos_id.
  479.           <fs_row>-rnpt_sub_pos = ls_zrnpt-sub_pos.
  480.           <fs_row>-rnpt_type_input = ls_zrnpt-type_input.
  481.         ENDLOOP.
  482.       ENDIF.
  483.     ENDLOOP.
  484.  
  485.     IF lt_fae_mseg IS NOT INITIAL.
  486.       SELECT * FROM mseg
  487.         INTO TABLE @DATA(lt_mseg)
  488.         FOR ALL ENTRIES IN @lt_fae_mseg
  489.         WHERE mblnr = @lt_fae_mseg-mblnr
  490.           AND mjahr = @lt_fae_mseg-mjahr
  491.           AND zeile = @lt_fae_mseg-zeile.
  492.  
  493.       LOOP AT lt_invoic ASSIGNING <fs_row> WHERE r_lfbnr IS NOT INITIAL.
  494.         READ TABLE lt_mseg WITH KEY mblnr = <fs_row>-r_lfbnr
  495.                                     mjahr = <fs_row>-r_lfgja
  496.                                     zeile = <fs_row>-r_lfpos INTO DATA(ls_mseg).
  497.         IF sy-subrc = 0.
  498.           <fs_row>-m_mblnr = ls_mseg-mblnr.
  499.           <fs_row>-m_batch = ls_mseg-charg.
  500.           <fs_row>-m_mjahr = ls_mseg-mjahr.
  501.           <fs_row>-m_zeile = ls_mseg-zeile.
  502.           <fs_row>-m_budat = ls_mseg-budat_mkpf.
  503.         ENDIF.
  504.       ENDLOOP.
  505.     ENDIF.
  506.  
  507.     LOOP AT lt_invoic INTO DATA(ls_invoic)
  508.       GROUP BY ( r_bukrs       = ls_invoic-r_bukrs
  509.                  r_rnpt        = ls_invoic-rnpt
  510.                  m_batch       = ls_invoic-m_batch
  511.                  r_matnr       = ls_invoic-r_matnr
  512.                  r_anln1       = ls_invoic-r_anln1
  513.                  r_anln2       = ls_invoic-r_anln2
  514.                  r_wbs_element = ls_invoic-r_wbs_element
  515.                  r_aufnr       = ls_invoic-r_aufnr ).
  516.       CLEAR: lt_ret, lt_rn_reg.
  517.  
  518.       lt_rn_reg = get_rn_reg_by_full_key( iv_company_code = ls_invoic-r_bukrs
  519.                                           iv_rn_ext_number = ls_invoic-rnpt
  520.                                           iv_batch = ls_invoic-m_batch
  521.                                           iv_material = ls_invoic-r_matnr
  522.                                           iv_asset_num = ls_invoic-r_anln1
  523.                                           iv_asset_subnum = ls_invoic-r_anln2
  524.                                           iv_wbs_element = ls_invoic-r_wbs_element
  525.                                           iv_invest_order = ls_invoic-r_aufnr ).
  526.       CLEAR lt_grp.
  527.       LOOP AT GROUP ls_invoic INTO DATA(ls_grp).
  528.         APPEND ls_grp TO lt_grp.
  529.       ENDLOOP.
  530.  
  531.       IF lt_rn_reg IS INITIAL.
  532.         rn_reg_create(
  533.           EXPORTING
  534.             is_invoic = ls_invoic
  535.             it_invoic = lt_grp
  536.           IMPORTING
  537.             et_ret = lt_ret
  538.             et_rn_reg = lt_rn_reg ).
  539.       ELSE.
  540.         rn_reg_update(
  541.           EXPORTING
  542.             it_rn_reg = lt_rn_reg
  543.             is_invoic = ls_invoic
  544.             it_invoic = lt_grp
  545.           IMPORTING
  546.             et_ret = lt_ret ).
  547.  
  548.       ENDIF.
  549.       APPEND LINES OF lt_ret TO et_ret.
  550.       CLEAR: lt_ret, lt_rn_reg.
  551.     ENDLOOP.
  552.  
  553.     LOOP AT et_ret TRANSPORTING NO FIELDS WHERE type CA 'EAX'.
  554.       EXIT.
  555.     ENDLOOP.
  556.  
  557.     IF iv_save_mode = abap_true.
  558.       CALL FUNCTION 'J_3RM_RN_REG_COMMIT_WORK'
  559.         EXPORTING
  560.           iv_wait = abap_true.
  561.     ENDIF.
  562.  
  563.   ENDMETHOD.
  564.  
  565.  
  566. * <SIGNATURE>---------------------------------------------------------------------------------------+
  567. * | Static Public Method ZTEST_CL_REV=>PROCESS_RN_BY_STORNO_MIRO
  568. * +-------------------------------------------------------------------------------------------------+
  569. * | [--->] IV_INVOICEDOCNUMBER            TYPE        RE_BELNR
  570. * | [--->] IV_FISCALYEAR                  TYPE        GJAHR
  571. * | [--->] IV_SAVE_MODE                   TYPE        FLAG(optional)
  572. * | [--->] IV_REPEAT_MODE                 TYPE        FLAG(optional)
  573. * | [<---] ET_RET                         TYPE        BAPIRET2_T
  574. * +--------------------------------------------------------------------------------------</SIGNATURE>
  575.   METHOD process_rn_by_storno_miro.
  576.     DATA: lv_doc_id       TYPE zrnpt_doc_id,
  577.           lv_doc_id_storn TYPE zrnpt_doc_id,
  578.           lt_item         TYPE TABLE OF j_3rm_rn_miro_cancel_ty,
  579.           lt_zrnpt_zp     TYPE TABLE OF zrnpt_input_doc,
  580.           lo_expt         TYPE REF TO cx_j3rm_rn_processor_error,
  581.           lt_zrnpt        TYPE ztrh0030_rnpt.
  582.  
  583.     IF iv_invoicedocnumber IS INITIAL.
  584.       _add_message( EXPORTING iv_num = 071 CHANGING ct_ret = et_ret ).
  585.       RETURN.
  586.     ENDIF.
  587.  
  588.     IF iv_fiscalyear IS INITIAL.
  589.       _add_message( EXPORTING iv_num = 072 CHANGING ct_ret = et_ret ).
  590.       RETURN.
  591.     ENDIF.
  592.  
  593.     SELECT SINGLE * FROM rbkp
  594.       WHERE belnr = @iv_invoicedocnumber
  595.         AND gjahr = @iv_fiscalyear
  596.       INTO @DATA(ls_rbkp).
  597.  
  598.     IF ls_rbkp-ivtyp <> '5'.
  599.       _add_message( EXPORTING iv_num = 073 CHANGING ct_ret = et_ret ).
  600.       RETURN.
  601.     ENDIF.
  602.  
  603.     lv_doc_id_storn = |{ ls_rbkp-stblg }{ ls_rbkp-stjah }|.
  604.  
  605.     lv_doc_id = |{ iv_invoicedocnumber }{ iv_fiscalyear }|.
  606.  
  607.     SELECT * FROM zrnpt_input_doc
  608.      WHERE doc_id = @lv_doc_id
  609.        AND type_doc = 'BUS2081'
  610.        AND rnpt <> ''
  611.        INTO TABLE @lt_zrnpt.
  612.     IF sy-subrc <> 0.
  613.       SELECT * FROM zrnpt_input_doc
  614.         WHERE doc_id = @lv_doc_id_storn
  615.           AND type_doc = 'BUS2081'
  616.           AND rnpt <> ''
  617.           INTO TABLE @lt_zrnpt.
  618.       LOOP AT lt_zrnpt ASSIGNING FIELD-SYMBOL(<fs>).
  619.         <fs>-doc_id = lv_doc_id.
  620.         CLEAR: <fs>-rn_reg_id,
  621.                <fs>-rn_reg_year.
  622.       ENDLOOP.
  623.     ENDIF.
  624.  
  625.     IF lt_zrnpt IS INITIAL.
  626.       _add_message( EXPORTING iv_num = 067 CHANGING ct_ret = et_ret ).
  627.       RETURN.
  628.     ENDIF.
  629.  
  630.     IF iv_repeat_mode <> abap_true.
  631.       DELETE lt_zrnpt WHERE rn_reg_year IS NOT INITIAL.
  632.     ENDIF.
  633.  
  634.     IF lt_zrnpt IS INITIAL.
  635.       _add_message( EXPORTING iv_num = 076 CHANGING ct_ret = et_ret ).
  636.       RETURN.
  637.     ENDIF.
  638.  
  639.     LOOP AT lt_zrnpt INTO DATA(ls_zrnpt).
  640.       CHECK ls_zrnpt-pos_id+0(2) = 'ЗП'.
  641.       APPEND ls_zrnpt TO lt_zrnpt_zp.
  642.     ENDLOOP.
  643.  
  644.     SORT lt_zrnpt_zp BY pos_id.
  645.     DELETE ADJACENT DUPLICATES FROM lt_zrnpt_zp COMPARING pos_id.
  646.  
  647.     LOOP AT lt_zrnpt_zp INTO ls_zrnpt.
  648.       APPEND VALUE #(
  649.         mm_invoice_number   = ls_rbkp-belnr
  650.         mm_invoice_year     = ls_rbkp-gjahr
  651.         mm_invoice_item     = ls_zrnpt-pos_id+2
  652.         orig_invoice_number = ls_rbkp-stblg
  653.         orig_invoice_year   = ls_rbkp-stjah
  654.         orig_invoice_item   = ls_zrnpt-pos_id+2 ) TO lt_item.
  655.     ENDLOOP.
  656.  
  657.     TRY.
  658.         cl_j3rm_rn_processor=>update_rn_miro_cancellation( it_item = lt_item ).
  659.  
  660.  
  661.         SELECT * FROM zrnpt_input_doc
  662.           WHERE doc_id = @lv_doc_id_storn
  663.             AND type_doc = 'BUS2081'
  664.             AND rnpt <> ''
  665.             INTO TABLE @lt_zrnpt.
  666.  
  667.         LOOP AT lt_zrnpt ASSIGNING FIELD-SYMBOL(<fs_upd>).
  668.           <fs_upd>-doc_id = lv_doc_id.
  669.         ENDLOOP.
  670.  
  671.         _add_message(
  672.           EXPORTING
  673.             iv_num = 075
  674.             iv_msgty  = 'S'
  675.             iv_msg_v1 = CONV symsgv( iv_invoicedocnumber )
  676.             iv_msg_v2 = CONV symsgv( iv_fiscalyear )
  677.           CHANGING
  678.             ct_ret = et_ret ).
  679.  
  680.       CATCH cx_j3rm_rn_processor_error INTO lo_expt.
  681.         LOOP AT lt_zrnpt ASSIGNING <fs_upd>.
  682.           <fs_upd>-rn_reg_id = 'ERROR'.
  683.           CLEAR <fs_upd>-rn_reg_year.
  684.         ENDLOOP.
  685.  
  686.         APPEND VALUE #(
  687.           id   = lo_expt->ms_message-msgid
  688.           type = lo_expt->ms_message-msgty
  689.           number = lo_expt->ms_message-msgno
  690.           message_v1 = lo_expt->ms_message-msgv1
  691.           message_v2 = lo_expt->ms_message-msgv2
  692.           message_v3 = lo_expt->ms_message-msgv3
  693.           message_v4 = lo_expt->ms_message-msgv4 ) TO et_ret.
  694.  
  695.     ENDTRY.
  696.  
  697.     CALL FUNCTION 'Z_UPDATE_ZRNPT_INPUT_DOC' IN UPDATE TASK
  698.       EXPORTING
  699.         it_rnpt     = lt_zrnpt
  700.         iv_doc_id   = lv_doc_id
  701.         iv_type_doc = 'BUS2081'
  702.         iv_generate = abap_true.
  703.  
  704.     IF iv_save_mode = abap_true.
  705.       CALL FUNCTION 'J_3RM_RN_REG_COMMIT_WORK'
  706.         EXPORTING
  707.           iv_wait = abap_true.
  708.     ENDIF.
  709.   ENDMETHOD.
  710.  
  711.  
  712. * <SIGNATURE>---------------------------------------------------------------------------------------+
  713. * | Static Private Method ZTEST_CL_REV=>PROCESS_SYSDOC_MIGO_POS
  714. * +-------------------------------------------------------------------------------------------------+
  715. * | [--->] IT_MSEG                        TYPE        MTT_MSEG
  716. * | [--->] IV_SAVE_MODE                   TYPE        FLAG
  717. * | [<---] ET_RET                         TYPE        BAPIRET2_T
  718. * +--------------------------------------------------------------------------------------</SIGNATURE>
  719.   METHOD process_sysdoc_migo_pos.
  720.     TYPES:
  721.       BEGIN OF lts_prim_document,
  722.         document_type   TYPE j_3rm_rn_doc-prim_doc_type,
  723.         document_number TYPE j_3rm_rn_doc-prim_doc_num,
  724.         document_year   TYPE j_3rm_rn_doc-prim_doc_year,
  725.         document_item   TYPE j_3rm_rn_doc-prim_doc_pos,
  726.       END OF lts_prim_document .
  727.  
  728.     TYPES:
  729.       ltt_prim_documents TYPE STANDARD TABLE OF lts_prim_document .
  730.  
  731.     DATA:
  732.       lt_mseg              TYPE mtt_mseg,
  733.       lt_mkpf_c            TYPE TABLE OF mkpf,
  734.       lt_documents         TYPE ltt_prim_documents,
  735.       lt_checked_documents TYPE ltt_prim_documents,
  736.       lt_rn_mm_cancel      TYPE cl_j3rm_rn_processor=>gtt_rn_mm_cancel,
  737.       lo_expt              TYPE REF TO cx_j3rm_rn_processor_error.
  738.  
  739.     CHECK it_mseg IS NOT INITIAL.
  740.  
  741.     SELECT * FROM mkpf
  742.       FOR ALL ENTRIES IN @it_mseg
  743.       WHERE mblnr = @it_mseg-mblnr
  744.         AND mjahr = @it_mseg-mjahr
  745.       INTO TABLE @DATA(lt_mkpf).
  746.     SORT lt_mkpf BY cpudt cputm.
  747.  
  748.     LOOP AT lt_mkpf INTO DATA(ls_mkpf).
  749.       CLEAR: lt_mseg,
  750.              lt_mkpf_c,
  751.              lt_rn_mm_cancel,
  752.              lt_documents,
  753.              lt_checked_documents.
  754.  
  755.       LOOP AT it_mseg INTO DATA(ls_mseg) WHERE mblnr = ls_mkpf-mblnr
  756.                                            AND mjahr = ls_mkpf-mjahr.
  757.         APPEND ls_mseg TO lt_mseg.
  758.         APPEND VALUE #( document_type = '01' document_number = ls_mseg-mblnr document_year = ls_mseg-mjahr document_item = ls_mseg-zeile ) TO lt_documents.
  759.         APPEND VALUE #( document_type = '05' document_number = ls_mseg-mblnr document_year = ls_mseg-mjahr document_item = ls_mseg-zeile ) TO lt_documents.
  760.       ENDLOOP.
  761.  
  762.       cl_j3rm_rn_processor=>check_docs_by_rn(
  763.         EXPORTING
  764.           it_documents = lt_documents
  765.         IMPORTING
  766.           et_checked_documents = lt_checked_documents ).
  767.  
  768.       LOOP AT lt_checked_documents INTO DATA(ls_checked).
  769.         DELETE lt_mseg WHERE mblnr = ls_checked-document_number
  770.                          AND mjahr = ls_checked-document_year
  771.                          AND zeile = ls_checked-document_item.
  772.       ENDLOOP.
  773.  
  774.       IF lt_mseg IS INITIAL.
  775.         _add_message(
  776.           EXPORTING
  777.             iv_num = 079
  778.             iv_msgty = 'W'
  779.             iv_msg_v1 = CONV symsgv( ls_mkpf-mblnr )
  780.             iv_msg_v2 = CONV symsgv( ls_mkpf-mjahr )
  781.           CHANGING
  782.             ct_ret = et_ret ).
  783.         CONTINUE.
  784.       ENDIF.
  785.  
  786.       APPEND ls_mkpf TO lt_mkpf_c.
  787.       cl_j3rm_rn_migo_catcher=>prepare_cancellation_table(
  788.         EXPORTING
  789.           it_mkpf = lt_mkpf_c
  790.           it_mseg = lt_mseg
  791.         CHANGING
  792.           ct_mm_cancel = lt_rn_mm_cancel ).
  793.  
  794.       TRY.
  795.           IF lt_rn_mm_cancel IS NOT INITIAL.
  796.             cl_j3rm_rn_migo_catcher=>rnpt_usage_cancellation(
  797.               EXPORTING
  798.                 it_item   = lt_rn_mm_cancel
  799.                 iv_update = iv_save_mode ).
  800.           ELSE.
  801.             cl_j3rm_rn_migo_catcher=>rnpt_usage(
  802.               EXPORTING
  803.                 it_xmkpf  = lt_mkpf_c
  804.                 it_xmseg  = lt_mseg
  805.                 iv_update = abap_false ).
  806.  
  807. *{ fix [с двумя вызовами работает корректно]
  808.             cl_j3rm_rn_migo_catcher=>rnpt_usage(
  809.               EXPORTING
  810.                 it_xmkpf  = lt_mkpf_c
  811.                 it_xmseg  = lt_mseg
  812.                 iv_update = abap_true ).
  813. *}
  814.           ENDIF.
  815.  
  816.           IF iv_save_mode = abap_true.
  817.             CALL FUNCTION 'J_3RM_RN_REG_COMMIT_WORK'
  818.               EXPORTING
  819.                 iv_wait = abap_true.
  820.           ENDIF.
  821.  
  822.         CATCH cx_j3rm_rn_processor_error INTO lo_expt.
  823.           APPEND VALUE #(
  824.             id   = lo_expt->ms_message-msgid
  825.             type = lo_expt->ms_message-msgty
  826.             number = lo_expt->ms_message-msgno
  827.             message_v1 = lo_expt->ms_message-msgv1
  828.             message_v2 = lo_expt->ms_message-msgv2
  829.             message_v3 = lo_expt->ms_message-msgv3
  830.             message_v4 = lo_expt->ms_message-msgv4 ) TO et_ret.
  831.       ENDTRY.
  832.  
  833.     ENDLOOP.
  834.  
  835.   ENDMETHOD.
  836.  
  837.  
  838. * <SIGNATURE>---------------------------------------------------------------------------------------+
  839. * | Static Private Method ZTEST_CL_REV=>RN_REG_CREATE
  840. * +-------------------------------------------------------------------------------------------------+
  841. * | [--->] IS_INVOIC                      TYPE        MTY_INVOIC(optional)
  842. * | [--->] IT_INVOIC                      TYPE        MTT_INVOIC
  843. * | [<---] ET_RET                         TYPE        BAPIRET2_T
  844. * | [<---] ET_RN_REG                      TYPE        MTT_J3
  845. * +--------------------------------------------------------------------------------------</SIGNATURE>
  846.   METHOD rn_reg_create.
  847.  
  848.     DATA: lt_rn_reg        TYPE j_3rm_rn_reg_t,
  849.           lt_rn_doc        TYPE j_3rm_rn_doc_t,
  850.           lt_created_rn    TYPE j_3rm_rn_created_ret,
  851.           lv_prim_doc_type TYPE j_3rm_primdoctype,
  852.           lv_prim_doc_num  TYPE j_3rm_rn_primdocnr,
  853.           lv_prim_doc_year TYPE j_3rm_rn_primdocyr,
  854.           lv_prim_doc_pos  TYPE j_3rm_rn_primdocpos,
  855.           lt_rn_reg_cre    TYPE j_3rm_rn_created_ret,
  856.           lt_ret           TYPE j_3rm_rn_messages_ret,
  857.           ls_rn_reg        TYPE j_3rm_rn_reg,
  858.           lt_rnpt_upd      TYPE TABLE OF zrnpt_input_doc,
  859.           lv_quantity      TYPE j_3rm_rn_avquant,
  860.           lv_rn_reg_date   TYPE j_3rm_rn_date.
  861.  
  862.     LOOP AT it_invoic INTO DATA(ls).
  863.       lv_quantity = lv_quantity + ls-r_menge.
  864.     ENDLOOP.
  865.  
  866.     IF is_invoic-r_budat IS NOT INITIAL.
  867.       lv_rn_reg_date = is_invoic-r_budat.
  868.     ELSE.
  869.       lv_rn_reg_date = is_invoic-m_budat.
  870.     ENDIF.
  871.  
  872.     APPEND VALUE j_3rm_rn_reg_s(
  873.                     internal_id       = '00001'
  874.                     rn_ext_num        = is_invoic-rnpt
  875.                     rn_reg_date       = lv_rn_reg_date
  876.                     src_oper_type     = '01'
  877.                     material          = is_invoic-r_matnr
  878.                     asset_num         = is_invoic-r_anln1
  879.                     asset_subnum      = is_invoic-r_anln2
  880.                     company_code      = is_invoic-r_bukrs
  881.                     country_of_origin = is_invoic-land
  882.                     batch             = is_invoic-m_batch
  883.                     unit_of_measure   = is_invoic-r_meins
  884.                     quantity          = lv_quantity
  885.                     wbs_element       = is_invoic-r_wbs_element ) TO lt_rn_reg.
  886.  
  887.     LOOP AT it_invoic INTO DATA(ls_invoic).
  888.       IF ls_invoic-r_anln1 IS NOT INITIAL OR ls_invoic-r_wbs_element IS NOT INITIAL.
  889.         lv_prim_doc_type = '06'.
  890.       ELSE.
  891.         lv_prim_doc_type = '01'.
  892.       ENDIF.
  893.  
  894.       IF ls_invoic-m_mblnr IS INITIAL.
  895.         lv_prim_doc_num = ls_invoic-f_belnr.
  896.         lv_prim_doc_year = ls_invoic-f_gjahr.
  897.       ELSE.
  898.         lv_prim_doc_num = ls_invoic-m_mblnr.
  899.         lv_prim_doc_year = ls_invoic-m_mjahr.
  900.       ENDIF.
  901.  
  902.       IF ls_invoic-m_zeile IS INITIAL.
  903.         lv_prim_doc_pos = ls_invoic-f_pos.
  904.       ELSE.
  905.         lv_prim_doc_pos = ls_invoic-m_zeile.
  906.       ENDIF.
  907.  
  908.       APPEND VALUE j_3rm_rn_doc_s(
  909.                       internal_id = '00001'
  910.                       prim_doc_type   = lv_prim_doc_type
  911.                       prim_doc_num    = lv_prim_doc_num
  912.                       prim_doc_year   = lv_prim_doc_year
  913.                       prim_doc_pos    = lv_prim_doc_pos
  914.                       mm_invoice_num  = ls_invoic-r_belnr
  915.                       mm_invoice_year = ls_invoic-r_gjahr
  916.                       mm_invoice_pos  = ls_invoic-r_buzei
  917.                       fi_invoice_num  = ls_invoic-f_belnr
  918.                       fi_invoice_year = ls_invoic-f_gjahr
  919.                       quantity        = ls_invoic-r_menge
  920.                       amount          = ls_invoic-wrbtr
  921.                       currency        = ls_invoic-r_waers
  922.                       operation_date  = ls_invoic-r_budat
  923.                       tnved           = ls_invoic-tnved ) TO lt_rn_doc.
  924.     ENDLOOP.
  925.  
  926.     CALL FUNCTION 'J_3RM_RN_REG_CREATE'
  927.       EXPORTING
  928.         it_rn_reg       = lt_rn_reg
  929.         it_rn_doc       = lt_rn_doc
  930.         iv_savemode     = abap_false
  931.         iv_external_doc = abap_true
  932.       IMPORTING
  933.         et_messages     = lt_ret
  934.         et_created_rn   = lt_rn_reg_cre.
  935.  
  936.     LOOP AT lt_rn_reg_cre INTO DATA(ls_rn_reg_cre).
  937.       cl_j3rm_rn_processor=>get_rn_by_key(
  938.         EXPORTING
  939.           iv_reg_id   = ls_rn_reg_cre-rn_id
  940.           iv_reg_year = ls_rn_reg_cre-rn_year
  941.         IMPORTING
  942.           es_rn_reg   = ls_rn_reg ).
  943.       APPEND ls_rn_reg TO et_rn_reg.
  944.  
  945.       IF line_exists( lt_ret[ type = 'E' ] ).
  946.         ls_rn_reg_cre-rn_id = 'ERROR'.
  947.         CLEAR ls_rn_reg_cre-rn_year.
  948.       ENDIF.
  949.  
  950.       APPEND VALUE #( rn_reg_id   = ls_rn_reg_cre-rn_id
  951.                       rn_reg_year = ls_rn_reg_cre-rn_year
  952.                       type_doc    = is_invoic-rnpt_type_doc
  953.                       doc_id      = is_invoic-rnpt_doc_id
  954.                       pos_id      = is_invoic-rnpt_pos_id
  955.                       sub_pos     = is_invoic-rnpt_sub_pos
  956.                       rnpt        = is_invoic-rnpt
  957.                       land        = is_invoic-land
  958.                       meins       = is_invoic-r_meins
  959.                       menge       = is_invoic-r_menge
  960.                       amount      = is_invoic-wrbtr
  961.                       type_input  = is_invoic-rnpt_type_input ) TO lt_rnpt_upd.
  962.  
  963.     ENDLOOP.
  964.  
  965.     CALL FUNCTION 'Z_UPDATE_ZRNPT_INPUT_DOC' IN UPDATE TASK
  966.       EXPORTING
  967.         it_rnpt     = lt_rnpt_upd
  968.         iv_doc_id   = is_invoic-rnpt_doc_id
  969.         iv_type_doc = is_invoic-rnpt_type_doc
  970.         iv_generate = abap_true.
  971.  
  972.     et_ret = CORRESPONDING #( lt_ret ).
  973.  
  974.   ENDMETHOD.
  975.  
  976.  
  977. * <SIGNATURE>---------------------------------------------------------------------------------------+
  978. * | Static Private Method ZTEST_CL_REV=>RN_REG_UPDATE
  979. * +-------------------------------------------------------------------------------------------------+
  980. * | [--->] IT_RN_REG                      TYPE        MTT_J3
  981. * | [--->] IS_INVOIC                      TYPE        MTY_INVOIC(optional)
  982. * | [--->] IT_INVOIC                      TYPE        MTT_INVOIC
  983. * | [<---] ET_RET                         TYPE        BAPIRET2_T
  984. * +--------------------------------------------------------------------------------------</SIGNATURE>
  985.   METHOD rn_reg_update.
  986.     DATA: lt_rn_reg_chg    TYPE j_3rm_rn_reg_tt,
  987.           lt_rn_doc_new    TYPE j_3rm_rn_doc_tt,
  988.           lv_prim_doc_type TYPE j_3rm_primdoctype,
  989.           lv_prim_doc_num  TYPE j_3rm_rn_primdocnr,
  990.           lv_prim_doc_year TYPE j_3rm_rn_primdocyr,
  991.           lv_prim_doc_pos  TYPE j_3rm_rn_primdocpos,
  992.           lt_ret           TYPE j_3rm_rn_messages_ret,
  993.           lt_rnpt_upd      TYPE TABLE OF zrnpt_input_doc,
  994.           lv_quantity      TYPE j_3rm_rn_avquant.
  995.  
  996.     LOOP AT it_invoic INTO DATA(ls_sum).
  997.       lv_quantity = lv_quantity + ls_sum-r_menge.
  998.     ENDLOOP.
  999.  
  1000.  
  1001.     LOOP AT it_rn_reg INTO DATA(ls_rn_reg).
  1002.       APPEND INITIAL LINE TO lt_rn_reg_chg ASSIGNING FIELD-SYMBOL(<fs_reg>).
  1003.       <fs_reg>-rn_reg_id = ls_rn_reg-rn_reg_id.
  1004.       <fs_reg>-rn_reg_year = ls_rn_reg-rn_reg_year.
  1005.       <fs_reg>-rn_reg_date = ls_rn_reg-rn_reg_date.
  1006.       <fs_reg>-rn_ext_num  = ls_rn_reg-rn_ext_num.
  1007.       <fs_reg>-src_oper_type = ls_rn_reg-src_oper_type.
  1008.       <fs_reg>-matnr = is_invoic-r_matnr.
  1009.       <fs_reg>-asset_num = is_invoic-r_anln1.
  1010.       <fs_reg>-asset_subnum = is_invoic-r_anln2.
  1011.       <fs_reg>-company_code = is_invoic-r_bukrs.
  1012.       <fs_reg>-country_of_origin = is_invoic-land.
  1013.       <fs_reg>-batch = is_invoic-m_batch.
  1014.       <fs_reg>-wbs_element = is_invoic-r_wbs_element.
  1015.       <fs_reg>-invest_order = is_invoic-r_aufnr.
  1016.       <fs_reg>-meins = is_invoic-r_meins.
  1017.       <fs_reg>-avail_quantity = 0.
  1018.       <fs_reg>-created_by = ls_rn_reg-created_by.
  1019.       <fs_reg>-created_on = ls_rn_reg-created_on.
  1020.       <fs_reg>-changed_by = ls_rn_reg-changed_by.
  1021.       <fs_reg>-changed_on = ls_rn_reg-changed_on.
  1022.     ENDLOOP.
  1023.  
  1024.     LOOP AT it_invoic INTO DATA(ls_invoic).
  1025.  
  1026.       IF ls_invoic-r_anln1 IS NOT INITIAL OR ls_invoic-r_wbs_element IS NOT INITIAL..
  1027.         lv_prim_doc_type = '06'.
  1028.       ELSE.
  1029.         lv_prim_doc_type = '01'.
  1030.       ENDIF.
  1031.  
  1032.       IF ls_invoic-m_mblnr IS INITIAL.
  1033.         lv_prim_doc_num  = ls_invoic-f_belnr.
  1034.         lv_prim_doc_year = ls_invoic-f_gjahr.
  1035.       ELSE.
  1036.         lv_prim_doc_num  = ls_invoic-m_mblnr.
  1037.         lv_prim_doc_year = ls_invoic-m_mjahr.
  1038.       ENDIF.
  1039.  
  1040.       IF ls_invoic-m_zeile IS INITIAL.
  1041.         lv_prim_doc_pos = ls_invoic-f_pos.
  1042.       ELSE.
  1043.         lv_prim_doc_pos = ls_invoic-m_zeile.
  1044.       ENDIF.
  1045.  
  1046.       APPEND INITIAL LINE TO lt_rn_doc_new ASSIGNING FIELD-SYMBOL(<fs_doc>).
  1047.       <fs_doc>-rn_reg_id = ls_rn_reg-rn_reg_id.
  1048.       <fs_doc>-rn_reg_year = ls_rn_reg-rn_reg_year.
  1049.       <fs_doc>-prim_doc_type   = lv_prim_doc_type.
  1050.       <fs_doc>-prim_doc_num    = lv_prim_doc_num.
  1051.       <fs_doc>-prim_doc_year   = lv_prim_doc_year.
  1052.       <fs_doc>-prim_doc_pos    = lv_prim_doc_pos.
  1053.       <fs_doc>-mm_invoice_num  = ls_invoic-r_belnr.
  1054.       <fs_doc>-mm_invoice_year = ls_invoic-r_gjahr.
  1055.       <fs_doc>-mm_invoice_pos  = ls_invoic-r_buzei.
  1056.       <fs_doc>-fi_invoice_num  = ls_invoic-f_belnr.
  1057.       <fs_doc>-fi_invoice_year = ls_invoic-f_gjahr.
  1058.       <fs_doc>-menge           = ls_invoic-r_menge.
  1059.       <fs_doc>-tnved           = ls_invoic-tnved.
  1060.       <fs_doc>-created_by      = sy-uname.
  1061.       <fs_doc>-created_on      = sy-datum.
  1062.       <fs_doc>-amount          = ls_invoic-wrbtr.
  1063.       <fs_doc>-currency        = ls_invoic-r_waers.
  1064.       <fs_doc>-operation_date  = ls_invoic-r_budat.
  1065.     ENDLOOP.
  1066.  
  1067.     CALL FUNCTION 'J_3RM_RN_REG_UPDATE'
  1068.       EXPORTING
  1069.         it_rn_reg_chg     = lt_rn_reg_chg
  1070.         iv_save_mode      = abap_false
  1071.         iv_disable_checks = abap_true
  1072.       IMPORTING
  1073.         et_messages       = lt_ret
  1074.       CHANGING
  1075.         ct_rn_doc_new     = lt_rn_doc_new.
  1076.  
  1077.     LOOP AT lt_rn_doc_new INTO DATA(ls).
  1078.  
  1079.       IF line_exists( lt_ret[ type = 'E' ] ).
  1080.         ls-rn_reg_id = 'ERROR'.
  1081.         CLEAR ls-rn_reg_year.
  1082.       ENDIF.
  1083.  
  1084.       APPEND VALUE #( rn_reg_id   = ls-rn_reg_id
  1085.                       rn_reg_year = ls-rn_reg_year
  1086.                       type_doc    = is_invoic-rnpt_type_doc
  1087.                       doc_id      = is_invoic-rnpt_doc_id
  1088.                       pos_id      = is_invoic-rnpt_pos_id
  1089.                       sub_pos     = is_invoic-rnpt_sub_pos
  1090.                       rnpt        = is_invoic-rnpt
  1091.                       land        = is_invoic-land
  1092.                       meins       = is_invoic-r_meins
  1093.                       menge       = is_invoic-r_menge
  1094.                       amount      = is_invoic-wrbtr
  1095.                       type_input  = is_invoic-rnpt_type_input  ) TO lt_rnpt_upd.
  1096.     ENDLOOP.
  1097.  
  1098.     CALL FUNCTION 'Z_UPDATE_ZRNPT_INPUT_DOC' IN UPDATE TASK
  1099.       EXPORTING
  1100.         it_rnpt     = lt_rnpt_upd
  1101.         iv_doc_id   = is_invoic-rnpt_doc_id
  1102.         iv_type_doc = is_invoic-rnpt_type_doc
  1103.         iv_generate = abap_true.
  1104.  
  1105.     et_ret = CORRESPONDING #( lt_ret ).
  1106.  
  1107.   ENDMETHOD.
  1108.  
  1109.  
  1110. * <SIGNATURE>---------------------------------------------------------------------------------------+
  1111. * | Static Private Method ZTEST_CL_REV=>_ADD_MESSAGE
  1112. * +-------------------------------------------------------------------------------------------------+
  1113. * | [--->] IV_NUM                         TYPE        SY-MSGNO
  1114. * | [--->] IV_MSG_V1                      TYPE        SYMSGV(optional)
  1115. * | [--->] IV_MSG_V2                      TYPE        SYMSGV(optional)
  1116. * | [--->] IV_MSGTY                       TYPE        BAPI_MTYPE(optional)
  1117. * | [<-->] CT_RET                         TYPE        BAPIRET2_T
  1118. * +--------------------------------------------------------------------------------------</SIGNATURE>
  1119.   METHOD _add_message.
  1120.  
  1121.     DATA ls_bapiret2 TYPE bapiret2.
  1122.  
  1123.     IF iv_msgty IS NOT INITIAL.
  1124.       ls_bapiret2-type = iv_msgty.
  1125.     ELSE.
  1126.       ls_bapiret2-type = 'E'.
  1127.     ENDIF.
  1128.     ls_bapiret2-id   = 'ZL_RN000001'.
  1129.     ls_bapiret2-number = iv_num.
  1130.     ls_bapiret2-message_v1 = iv_msg_v1.
  1131.     ls_bapiret2-message_v2 = iv_msg_v2.
  1132.  
  1133.     MESSAGE ID  ls_bapiret2-id
  1134.            TYPE ls_bapiret2-type
  1135.          NUMBER ls_bapiret2-number
  1136.            WITH ls_bapiret2-message_v1
  1137.                 ls_bapiret2-message_v2
  1138.                 ls_bapiret2-message_v3
  1139.                 ls_bapiret2-message_v4
  1140.            INTO ls_bapiret2-message.
  1141.  
  1142.     APPEND ls_bapiret2 TO ct_ret.
  1143.  
  1144.   ENDMETHOD.
  1145.  
  1146.  
  1147. * <SIGNATURE>---------------------------------------------------------------------------------------+
  1148. * | Static Private Method ZTEST_CL_REV=>_BUILD_DYNAMIC_WHERE
  1149. * +-------------------------------------------------------------------------------------------------+
  1150. * | [--->] IV_COMPANY_CODE                TYPE        BUKRS(optional)
  1151. * | [--->] IV_RN_EXT_NUMBER               TYPE        J_3RM_RN_EXT_NUM(optional)
  1152. * | [--->] IV_RN_REG_DATE                 TYPE        J_3RM_RN_DATE(optional)
  1153. * | [--->] IV_BATCH                       TYPE        CHARG_D(optional)
  1154. * | [--->] IV_MATERIAL                    TYPE        MATNR(optional)
  1155. * | [--->] IV_SERIAL_NUMBER               TYPE        GERNR(optional)
  1156. * | [--->] IV_ASSET_NUM                   TYPE        ANLN1(optional)
  1157. * | [--->] IV_ASSET_SUBNUM                TYPE        ANLN2(optional)
  1158. * | [--->] IV_WBS_ELEMENT                 TYPE        PS_PSP_PNR(optional)
  1159. * | [--->] IV_INVEST_ORDER                TYPE        AUFNR(optional)
  1160. * | [--->] IV_CHARG                       TYPE        CHARG_D(optional)
  1161. * | [--->] IV_CPUDT                       TYPE        DATUM(optional)
  1162. * | [--->] IV_CPUTM                       TYPE        UZEIT(optional)
  1163. * | [<-()] RT_WHERE_CLAUSE                TYPE        MTT_CLAUSE
  1164. * +--------------------------------------------------------------------------------------</SIGNATURE>
  1165.   METHOD _build_dynamic_where.
  1166.     DATA: lt_condtab TYPE TABLE OF hrcond.
  1167.  
  1168.     IF iv_company_code IS NOT INITIAL.
  1169.       APPEND VALUE #( field = 'COMPANY_CODE' opera = 'EQ' low = iv_company_code ) TO lt_condtab.
  1170.     ENDIF.
  1171.  
  1172.     IF iv_rn_ext_number IS NOT INITIAL.
  1173.       APPEND VALUE #( field = 'RN_EXT_NUM' opera = 'EQ' low = iv_rn_ext_number ) TO lt_condtab.
  1174.     ENDIF.
  1175.  
  1176.     IF iv_rn_reg_date IS NOT INITIAL.
  1177.       APPEND VALUE #( field = 'RN_REG_DATE' opera = 'EQ' low = iv_rn_reg_date ) TO lt_condtab.
  1178.     ENDIF.
  1179.  
  1180.     IF iv_batch IS NOT INITIAL.
  1181.       APPEND VALUE #( field = 'BATCH' opera = 'EQ' low = iv_batch ) TO lt_condtab.
  1182.     ENDIF.
  1183.  
  1184.     IF iv_material IS NOT INITIAL.
  1185.       APPEND VALUE #( field = 'MATNR' opera = 'EQ' low = iv_material ) TO lt_condtab.
  1186.     ENDIF.
  1187.  
  1188.     IF iv_serial_number IS NOT INITIAL.
  1189.       APPEND VALUE #( field = 'SERIAL_NUMBER' opera = 'EQ' low = iv_serial_number ) TO lt_condtab.
  1190.     ENDIF.
  1191.  
  1192.     IF iv_asset_num IS NOT INITIAL.
  1193.       APPEND VALUE #( field = 'ASSET_NUM' opera = 'EQ' low = iv_asset_num ) TO lt_condtab.
  1194.     ENDIF.
  1195.  
  1196.     IF iv_asset_subnum IS NOT INITIAL.
  1197.       APPEND VALUE #( field = 'ASSET_SUBNUM' opera = 'EQ' low = iv_asset_subnum ) TO lt_condtab.
  1198.     ENDIF.
  1199.  
  1200.     IF iv_wbs_element IS NOT INITIAL.
  1201.       APPEND VALUE #( field = 'WBS_ELEMENT' opera = 'EQ' low = iv_wbs_element ) TO lt_condtab.
  1202.     ENDIF.
  1203.  
  1204.     IF iv_invest_order IS NOT INITIAL.
  1205.       APPEND VALUE #( field = 'INVEST_ORDER' opera = 'EQ' low = iv_invest_order ) TO lt_condtab.
  1206.     ENDIF.
  1207.  
  1208.     IF iv_charg IS NOT INITIAL.
  1209.       APPEND VALUE #( field = 'CHARG' opera = 'EQ' low = iv_charg ) TO lt_condtab.
  1210.     ENDIF.
  1211.  
  1212.     IF iv_cpudt IS NOT INITIAL.
  1213.       APPEND VALUE #( field = 'CPUDT_MKPF' opera = 'GE' low = iv_cpudt ) TO lt_condtab.
  1214.     ENDIF.
  1215.  
  1216.     IF iv_cputm IS NOT INITIAL.
  1217.       APPEND VALUE #( field = 'CPUTM_MKPF' opera = 'GE' low = iv_cputm ) TO lt_condtab.
  1218.     ENDIF.
  1219.  
  1220.     CHECK lt_condtab IS NOT INITIAL.
  1221.  
  1222.     CALL FUNCTION 'RH_DYNAMIC_WHERE_BUILD'
  1223.       EXPORTING
  1224.         dbtable         = space
  1225.       TABLES
  1226.         condtab         = lt_condtab
  1227.         where_clause    = rt_where_clause
  1228.       EXCEPTIONS
  1229.         empty_condtab   = 01
  1230.         no_db_field     = 02
  1231.         unknown_db      = 03
  1232.         wrong_condition = 04.
  1233.  
  1234.   ENDMETHOD.
  1235.  
  1236.  
  1237. * <SIGNATURE>---------------------------------------------------------------------------------------+
  1238. * | Static Private Method ZTEST_CL_REV=>_FILTER_DOC
  1239. * +-------------------------------------------------------------------------------------------------+
  1240. * | [--->] IV_POS_ID                      TYPE        CHAR2
  1241. * | [--->] IT_ZRNPT                       TYPE        MTT_ZRNPT
  1242. * | [<-()] RT_FAE                         TYPE        MTT_FAE
  1243. * +--------------------------------------------------------------------------------------</SIGNATURE>
  1244.   METHOD _filter_doc.
  1245.     rt_fae = VALUE #( FOR ls_rnpt IN it_zrnpt WHERE ( pos_id(2) = iv_pos_id )
  1246.                       ( belnr = ls_rnpt-doc_id(10)
  1247.                         gjahr = ls_rnpt-doc_id+10(4)
  1248.                         buzei = ls_rnpt-pos_id+2
  1249.                         cobl_nr = ls_rnpt-pos_id+2 ) ).
  1250.  
  1251.     SORT rt_fae BY belnr gjahr buzei.
  1252.     DELETE ADJACENT DUPLICATES FROM rt_fae COMPARING belnr gjahr buzei.
  1253.   ENDMETHOD.
  1254. ENDCLASS.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement