Advertisement
Guest User

Untitled

a guest
Jul 10th, 2018
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 30.03 KB | None | 0 0
  1. form get_data changing exit_result type tit_result.
  2.   types: begin of t_ekbe_collect,
  3.            state type c,
  4.            matnr type ekbe-matnr,
  5.            werks type ekbe-werks,
  6.            menge type ekbe-menge,
  7.            dmbtr type ekbe-dmbtr,
  8.          end of t_ekbe_collect,
  9. ***Add Lavrenyuk K. 27.01.2018 00:45:13
  10.          BEGIN OF it_mslb,
  11.            matnr type mslb-matnr,
  12.            werks type mslb-werks,
  13.            charg type mslb-charg,
  14.            lblab type mslb-lblab,
  15.            lfgja type mslb-lfgja,
  16.            lfmon type mslb-lfmon,
  17.            END OF it_mslb.
  18. *****
  19. TYPES : BEGIN OF STYPE_MBEW,                                "n450764
  20.           MATNR              LIKE      MBEW-MATNR,          "n450764
  21.           BWKEY              LIKE      MBEW-BWKEY,          "n450764
  22.           BWTAR              LIKE      MBEW-BWTAR,          "n450764
  23.           LBKUM(09)          TYPE P    DECIMALS 3,          "n450764
  24.           SALK3(09)          TYPE P    DECIMALS 2,          "n450764
  25.           MEINS              LIKE      MARA-MEINS,          "n450764
  26.           WAERS              LIKE      T001-WAERS,          "n450764
  27.           BWTTY              LIKE      MBEW-BWTTY,          "n1227439
  28.           LFGJA              LIKE MBEW-LFGJA,
  29.           LFMON              LIKE MBEW-LFMON,
  30.         END OF STYPE_MBEW,
  31.   STAB_MBEW            TYPE STANDARD TABLE OF
  32.                              STYPE_MBEW WITH DEFAULT KEY.
  33.   constants: lct_state_begin type c value 'B',
  34.              lct_state_end type c value 'E'.
  35.  
  36.   data: lit_mat_group type tit_group with header line,
  37.         lit_result type sorted table of t_result_data with unique key bukrs gnumb matnr with header line,
  38.         lit_t001 type sorted table of t_t001 with unique key bukrs with header line,
  39.         lit_t001w type sorted table of t_t001w with unique key werks with header line,
  40.         lit_t001w_p type sorted table of t_t001w with unique key werks with header line, "Лавренюк К 27/01/2018
  41.         lit_mara type standard table of t_mara with non-unique sorted key key_prim components matnr with header line,
  42.         lit_t023 type standard table of t_t023 with non-unique sorted key key_prim components matkl with header line,
  43.         lit_mseg type standard table of t_mseg with header line,
  44.         lit_mseg_ type standard table of t_mseg with header line,
  45.         lit_mseg_strn type standard table of t_mseg with non-unique sorted key srn_prim components sjahr smbln smblp with header line,
  46.         lit_ekpo type standard table of t_ekpo with non-unique sorted key key_prim components ebeln ebelp with header line,
  47.         lit_ekbe type standard table of t_ekbe with non-unique sorted key key_prim components ebeln ebelp with header line,
  48.         lit_ekbe_col type sorted table of t_ekbe_collect with unique key state matnr werks with header line,
  49.       lit_mchb type standard table of t_mchb with non-unique sorted key primkey components matnr werks charg with header line,
  50. *     lit_mchb type standard table of t_mchb with non-unique sorted key primkey components matnr werks bwtar with header line,
  51.         lit_mbew type standard table of t_mbew with header line ,
  52.         lit_mslb TYPE STANDARD TABLE OF it_mslb WITH HEADER LINE, " Add Lavrenyuk K. 27.01.2018 00:45:41
  53.         lit_matprice type tit_price_material with header line,
  54.         lr_matnr type tr_matnr with header line,
  55.         lr_bwkey type tr_bwkey with header line,
  56.         lr_werks type tr_werks with header line,
  57.         lr_calcdt type tr_budat with header line,
  58.         ls_matkl like line of lit_mat_group-matkl,
  59.         ls_mara like line of lit_mara,
  60.         ls_ekbe like line of lit_ekbe,
  61.         lsex_result like line of exit_result,
  62.         lv_sqlfn_date type string, "Имя поля даты для запросов
  63.         lv_string type string, "Условие для поля для запросов
  64.         lv_tabix type sy-tabix,
  65.         lfdate(8),
  66.         bukrs_S TYPE BKPF-BUKRS, "Сдающая БЕ
  67.         bukrs_P TYPE BKPF-BUKRS . "Принимающая БЕ
  68. DATA : L_T_MBEW              TYPE  STAB_MBEW,               "n450764
  69.        L_S_MBEW              TYPE  STYPE_MBEW,              "n450764
  70.                                                             "n450764
  71.        L_S_MBEW_SPLIT        TYPE  STYPE_MBEW,              "n450764
  72.        L_S_MBEW_NORMAL       TYPE  STYPE_MBEW,              "n450764
  73.        L_FLAG_SPLIT(01)      TYPE C.
  74.  
  75.  
  76.   field-symbols: <lfs_mara> like line of lit_mara,
  77.                  <lfs_result> like line of lit_result,
  78.                  <lfs_mchb> like line of lit_mchb,
  79.                  <lfs_mseg> like line of lit_mseg,
  80.                  <lfs_mbew> like line of lit_mbew,
  81.                  <lfs_any> type any.
  82.  
  83.   clear: lit_mat_group[], lit_mat_group, lit_mara[], lit_mara,
  84.     lit_mseg[], lit_mseg, lit_mchb[], lit_mchb,  ls_matkl,
  85.     lr_matnr, lr_matnr[], lr_werks, lr_werks[], lr_bwkey,
  86.     lr_bwkey[], lit_matprice, lit_matprice[], lr_calcdt, lr_calcdt[].
  87.  
  88.   if p_budat is not initial.
  89.     lr_calcdt[] = so_budat[].
  90.     lv_sqlfn_date = 'BUDAT'.
  91.   elseif p_cpudt is not initial.
  92.     lr_calcdt[] = so_cpudt[].
  93.     lv_sqlfn_date = 'CPUDT'.
  94.   endif.
  95.   check lr_calcdt[] is not initial.
  96.  
  97.   read table lr_calcdt index 1.
  98.   if lr_calcdt-high is initial. lr_calcdt-high = lr_calcdt-low. endif.
  99.   perform get_matkl_group changing lit_mat_group[].
  100.  
  101.   loop at lit_mat_group.
  102.     loop at lit_mat_group-matkl into ls_matkl.
  103.       lit_t023-matkl = ls_matkl-low.
  104.       append lit_t023.
  105.     endloop.
  106.   endloop.
  107.  
  108.   sort lit_t023 by matkl.
  109.   delete adjacent duplicates from lit_t023 comparing matkl.
  110.   check lit_t023[] is not initial.
  111.  
  112.   select mara~matnr mara~meins mara~matkl makt~maktx
  113.          into corresponding fields of table lit_mara
  114.     from mara left join makt on makt~matnr = mara~matnr
  115.                             and makt~spras = sy-langu
  116.          for all entries in lit_t023
  117.    where mara~matkl = lit_t023-matkl. "and mara~matnr = '000000000210000047'.
  118.  
  119.   select matkl wgbez into corresponding fields of table lit_t023
  120.     from t023t for all entries in lit_t023
  121.    where matkl = lit_t023-matkl
  122.      and spras = sy-langu.
  123.  
  124.   check lit_mara[] is not initial.
  125.   "заполняем параметры материалов
  126.   lr_matnr-sign = 'I'. lr_matnr-option = 'EQ'.
  127.   loop at lit_mara assigning <lfs_mara>.
  128.     lr_matnr-low = <lfs_mara>-matnr.
  129.     append lr_matnr.
  130.     loop at lit_mat_group.
  131.       check <lfs_mara>-matkl in lit_mat_group-matkl.
  132.       <lfs_mara>-gnumb = lit_mat_group-gnumb.
  133.       exit.
  134.     endloop.
  135.   endloop.
  136.  
  137.   select bukrs butxt into corresponding fields of table lit_t001
  138.     from t001
  139.    where bukrs in so_bukrs.
  140.   check lit_t001[] is not initial.
  141. ****Change Lavrenyuk K. 27.01.2018 00:46:09
  142. *  select t001w~werks t001k~bwkey t001k~bukrs into corresponding fields of table lit_t001w
  143. *    from t001k inner join t001w on t001w~bwkey = t001k~bwkey
  144. *   where t001k~bukrs in so_bukrs
  145. *     and t001w~werks not like '%Z%'.
  146. select t001w~werks t001k~bwkey t001k~bukrs into corresponding fields of table lit_t001w
  147.     from t001k inner join t001w on t001w~bwkey = t001k~bwkey
  148.    where
  149.        t001w~werks not like '%Z%'.
  150. lit_t001w_p[] = lit_t001w[].
  151. delete lit_t001w[] WHERE bukrs not in so_bukrs.
  152. *****
  153.  
  154.  
  155.   lr_werks-sign = 'I'. lr_werks-option = 'EQ'.
  156.   move-corresponding lr_werks to lr_bwkey.
  157.   loop at lit_t001w.
  158.     lr_werks-low = lit_t001w-werks.
  159.     lr_bwkey-low = lit_t001w-bwkey.
  160.     append: lr_werks, lr_bwkey.
  161.   endloop.
  162.   sort: lr_werks by low, lr_bwkey by low.
  163.   delete adjacent duplicates from: lr_werks comparing low,
  164.                                    lr_bwkey comparing low.
  165. if lit_mara[] is not initial. "Add Lavrenyuk K. 27.01.2018 00:47:08
  166.   select mchb~matnr mchb~werks mchb~charg mchb~lgort mchb~clabs as clabs_b mchb~cspem as clabs_e mcha~bwtar
  167.          into corresponding fields of table lit_mchb
  168.     from mchb left join mcha on mcha~matnr = mchb~matnr
  169.                             and mcha~werks = mchb~werks
  170.                             and mcha~charg = mchb~charg
  171.          for all entries in lit_mara
  172.    where mchb~werks in lr_werks
  173.      and mchb~matnr = lit_mara-matnr
  174.      and ( mchb~clabs ne 0 or mchb~cspem ne 0 ).
  175.  
  176.   SELECT MATNR BWKEY BWTAR LBKUM SALK3 BWTTY LFGJA LFMON FROM MBEW
  177.          INTO CORRESPONDING FIELDS OF TABLE L_T_MBEW
  178.           for all entries in lit_mara
  179.          WHERE  MATNR = lit_mara-matnr
  180.            AND  BWKEY  IN  lr_werks
  181.            AND  LFGJA = lr_calcdt-low(4)
  182.     .
  183.  
  184.   sort L_T_MBEW by matnr BWKEY bwtar.
  185.   LOOP AT L_T_MBEW           INTO  L_S_MBEW.
  186.     IF  L_S_MBEW-BWTAR IS INITIAL
  187.         AND NOT L_S_MBEW-BWTTY IS INITIAL.
  188.              clear L_S_MBEW-LBKUM.
  189.              clear L_S_MBEW-SALK3.
  190.     ENDIF.
  191.     IF  L_S_MBEW-BWTAR IS not INITIAL.
  192.       MOVE : L_S_MBEW-MATNR  TO  L_S_MBEW_NORMAL-MATNR,
  193.              L_S_MBEW-BWTAR  TO  L_S_MBEW_NORMAL-BWTAR,
  194.              L_S_MBEW-LFGJA  TO  L_S_MBEW_NORMAL-LFGJA,
  195.              L_S_MBEW-LFMON  TO  L_S_MBEW_NORMAL-LFMON,
  196.              L_S_MBEW-BWKEY  TO  L_S_MBEW_NORMAL-BWKEY.
  197.  
  198.       ADD :  L_S_MBEW-LBKUM  TO  L_S_MBEW_NORMAL-LBKUM,
  199.              L_S_MBEW-SALK3  TO  L_S_MBEW_NORMAL-SALK3.
  200.       MOVE-CORRESPONDING  L_S_MBEW_NORMAL TO  lit_mbew.
  201.       append lit_mbew.
  202.       ENDIF.
  203.       CLEAR : L_FLAG_SPLIT, L_S_MBEW_NORMAL, L_S_MBEW_SPLIT.
  204.   ENDLOOP.
  205.  
  206.     delete lit_mbew where LBKUM = 0 and SALK3 = 0.
  207.  
  208. ****Add Lavrenyuk K. 27.01.2018 00:47:22 выбираем особый запас у поставщика  (
  209. **Спросить он точно нужен ?
  210.     select matnr werks charg lblab lfgja lfmon  from mslb
  211.       INTO CORRESPONDING FIELDS OF TABLE lit_mslb
  212.       for all entries in lit_mara
  213.       WHERE matnr = lit_mara-matnr and
  214. *        lfgja <= lr_calcdt-high(4) and     "Comment Lavrenyuk K. 31.01.2018 18:46:53 Выбираем все запасы поставщика
  215.          werks in lr_werks.
  216. *****
  217. endif.
  218.   loop at lit_mchb where lgort is not initial.
  219.     clear lit_mchb-lgort.
  220.     "Добавляем блокированный запас в основной
  221.     add lit_mchb-clabs_e to lit_mchb-clabs_b.
  222.     lit_mchb-clabs_e = lit_mchb-clabs_b.
  223.     collect lit_mchb.
  224.   endloop.
  225.   delete lit_mchb where lgort is not initial.
  226. ***Add Lavrenyuk K. 27.01.2018 00:47:42
  227. ***добавим запас у поставщика к выбранным запасам
  228. loop at lit_mslb.
  229.     READ TABLE lit_mchb ASSIGNING <lfs_mchb> with key matnr = lit_mslb-matnr
  230.                                                       werks = lit_mslb-werks
  231.                                                       charg = lit_mslb-charg.
  232. *    if sy-subrc = 0 and ( lit_mslb-lfgja < lr_calcdt-high(4) or ( lit_mslb-lfgja = lr_calcdt-high(4) and  lit_mslb-lfmon <= lr_calcdt-high+4(2) ) ).
  233.     if sy-subrc = 0 . "Change Lavrenyuk K. 31.01.2018 19:39:27 Не проверяем на дату, т.к. мы берем запасы на текущий момент то и запас у поставщика берем весь
  234.      <lfs_mchb>-clabs_e = <lfs_mchb>-clabs_e + lit_mslb-lblab.
  235.      <lfs_mchb>-clabs_b = <lfs_mchb>-clabs_b + lit_mslb-lblab.
  236. *     ELSEIF sy-subrc <> 0 and ( lit_mslb-lfgja < lr_calcdt-high(4) or ( lit_mslb-lfgja = lr_calcdt-high(4) and  lit_mslb-lfmon <= lr_calcdt-high+4(2) ) ).
  237.      ELSE. "Change Lavrenyuk K. 31.01.2018 19:41:39
  238.        APPEND INITIAL LINE TO lit_mchb ASSIGNING <lfs_mchb>.
  239.        <lfs_mchb>-matnr = lit_mslb-matnr.
  240.        <lfs_mchb>-werks = lit_mslb-werks.
  241.        <lfs_mchb>-charg = lit_mslb-charg.
  242.        <lfs_mchb>-bwtar = lit_mslb-charg.
  243.        <lfs_mchb>-clabs_e = lit_mslb-lblab.
  244.        <lfs_mchb>-clabs_b = lit_mslb-lblab.
  245.       ENDIF.
  246. *****
  247.        ENDLOOP.
  248.  
  249.    concatenate 'MKPF~' lv_sqlfn_date ' >= lr_calcdt-low' into lv_string.
  250.   select mseg~mblnr mseg~mjahr mseg~zeile mseg~xauto mseg~shkzg mseg~bwart
  251.          mseg~werks mseg~bukrs mseg~parbu mseg~lgort mseg~matnr mseg~charg
  252.          mseg~bwtar mseg~meins mseg~umwrk mseg~umlgo mseg~ummat mseg~umcha
  253.          mseg~anln1 mseg~anln2 mseg~lifnr mseg~sobkz mseg~menge mseg~dmbtr
  254.          mseg~lbkum mseg~salk3 mseg~sjahr mseg~smbln mseg~smblp mkpf~budat
  255.          mkpf~cpudt mseg~ebeln mseg~ebelp into corresponding fields of table lit_mseg
  256.     from mseg inner join mkpf on mkpf~mjahr = mseg~mjahr
  257.                              and mkpf~mblnr = mseg~mblnr
  258.           for all entries in lit_mara
  259.    where (lv_string)
  260.      and mseg~werks in lr_werks
  261.      and mseg~matnr = lit_mara-matnr.
  262. *Собираем все в одну таблицу
  263.   clear lit_result.
  264.   loop at lit_mseg assigning <lfs_mseg>.
  265.     assign component lv_sqlfn_date of structure <lfs_mseg> to <lfs_any>.
  266.     <lfs_mseg>-calcdt = <lfs_any>.
  267.   endloop.
  268.  
  269.   concatenate lv_sqlfn_date ' in lr_calcdt' into lv_string.
  270.   select ebeln ebelp zekkn vgabe gjahr belnr buzei
  271.          lfgja lfbnr lfpos budat cpudt shkzg dmbtr matnr werks
  272.          into corresponding fields of table lit_ekbe
  273.     from ekbe for all entries in lit_mara
  274.    where werks in lr_werks
  275.      and matnr = lit_mara-matnr
  276.      and vgabe = '3'
  277.      and (lv_string).
  278.   "Дополняем MSEG доп. дебетованием
  279.   clear lit_mseg.
  280.   loop at lit_ekbe.
  281.     lit_mseg-mblnr = lit_ekbe-lfbnr.
  282.     lit_mseg-mjahr = lit_ekbe-lfgja.
  283.     lit_mseg-zeile = lit_ekbe-lfpos.
  284.  
  285.     lit_mseg-ebeln = lit_ekbe-ebeln.
  286.     lit_mseg-ebelp = lit_ekbe-ebelp.
  287.     lit_mseg-shkzg = lit_ekbe-shkzg.
  288.     case lit_ekbe-shkzg.
  289.       when 'S'. lit_mseg-bwart = '101'.
  290.       when 'H'. lit_mseg-bwart = '102'.
  291.     endcase.
  292.     lit_mseg-dmbtr = lit_ekbe-dmbtr.
  293.     lit_mseg-matnr = lit_ekbe-matnr.
  294.     lit_mseg-werks = lit_ekbe-werks.
  295.     lit_mseg-budat = lit_ekbe-budat.
  296.     lit_mseg-cpudt = lit_ekbe-cpudt.
  297.     assign component lv_sqlfn_date of structure lit_mseg to <lfs_any>.
  298.     lit_mseg-calcdt = <lfs_any>.
  299.     append lit_mseg.
  300.   endloop.
  301. *  endif.
  302.   clear: lit_mchb, lit_ekbe[].
  303.  
  304.   loop at lit_mseg.
  305.     insert_row_to_result_tab lit_mara lit_mseg-matnr lit_t001w lit_mseg-werks lit_result <lfs_result>.
  306.     if lit_mseg-calcdt in lr_calcdt.
  307.       case lit_mseg-bwart.
  308.         when '101' or '907' or '919' or '915' or '123'.
  309.           check lit_mseg-shkzg = 'S'.
  310.           add: lit_mseg-menge to <lfs_result>-lifin-menge,
  311.                lit_mseg-dmbtr to <lfs_result>-lifin-dmbtr.
  312.         when '102' or '908' or '920' or '916' or '122'.
  313.           check lit_mseg-shkzg = 'H'.
  314.           subtract: lit_mseg-menge from <lfs_result>-lifin-menge,
  315.                     lit_mseg-dmbtr from <lfs_result>-lifin-dmbtr.
  316.         when '309' or '310'.
  317.           read table lit_mara into ls_mara with table key key_prim components matnr = lit_mseg-ummat.
  318.           if sy-subrc ne 0. clear ls_mara.  endif. "Если материал не найден, то он с другой группы
  319.           if lit_mara-matkl ne ls_mara-matkl.
  320.             case lit_mseg-bwart.
  321.               when '309'.
  322.                 if lit_mseg-shkzg = 'S'.
  323.                   add: lit_mseg-menge to <lfs_result>-lifin-menge,
  324.                        lit_mseg-dmbtr to <lfs_result>-lifin-dmbtr.
  325.                 else.
  326.                   add: lit_mseg-menge to <lfs_result>-devout-menge,
  327.                        lit_mseg-dmbtr to <lfs_result>-devout-dmbtr.
  328.                 endif.
  329.               when '310'.
  330.                 if lit_mseg-shkzg = 'H'.
  331.                   subtract: lit_mseg-menge from <lfs_result>-lifin-menge,
  332.                             lit_mseg-dmbtr from <lfs_result>-lifin-dmbtr.
  333.                 else.
  334.                   subtract: lit_mseg-menge from <lfs_result>-devout-menge,
  335.                             lit_mseg-dmbtr from <lfs_result>-devout-dmbtr.
  336.                 endif.
  337.             endcase.
  338.           endif.
  339.         when '641'.
  340. *         read table lit_t001w  with table key werks = lit_mseg-umwrk. "Comment Lavrenyuk K. 27.01.2018 00:48:17
  341. *         if sy-subrc eq 0 and lit_mseg-bukrs ne lit_t001w-bukrs. "Comment Lavrenyuk K. 27.01.2018 00:48:17
  342.           read table lit_t001w_p with table key werks = lit_mseg-umwrk. "Add Lavrenyuk K. 27.01.2018 00:48:17
  343.           if sy-subrc eq 0 and lit_mseg-bukrs ne lit_t001w_p-bukrs. "Add Lavrenyuk K. 27.01.2018 00:48:17
  344.  
  345.             if lit_mseg-shkzg = 'S'.
  346.               add: lit_mseg-menge to <lfs_result>-bukin-menge,
  347.                    lit_mseg-dmbtr to <lfs_result>-bukin-dmbtr.
  348.             else.
  349.               add: lit_mseg-menge to <lfs_result>-bukout-menge,
  350.                    lit_mseg-dmbtr to <lfs_result>-bukout-dmbtr.
  351.             endif.
  352.           endif.
  353.         when '642'.
  354. *         read table lit_t001w  with table key werks = lit_mseg-umwrk. "Comment Lavrenyuk K. 27.01.2018 00:48:17
  355. *         if sy-subrc eq 0 and lit_mseg-bukrs ne lit_t001w-bukrs. "Comment Lavrenyuk K. 27.01.2018 00:48:17
  356.           read table lit_t001w_p with table key werks = lit_mseg-umwrk. "Add Lavrenyuk K. 27.01.2018 00:48:17
  357.           if sy-subrc eq 0 and lit_mseg-bukrs ne lit_t001w_p-bukrs. "Add Lavrenyuk K. 27.01.2018 00:48:17
  358.  
  359.             if lit_mseg-shkzg = 'H'.
  360.               subtract: lit_mseg-menge from <lfs_result>-bukin-menge,
  361.                         lit_mseg-dmbtr from <lfs_result>-bukin-dmbtr.
  362.             else.
  363.               subtract: lit_mseg-menge from <lfs_result>-bukout-menge,
  364.                         lit_mseg-dmbtr from <lfs_result>-bukout-dmbtr.
  365.             endif.
  366.           endif.
  367.         when '941' or '942'.
  368.           read table lit_mara into ls_mara with table key key_prim components matnr = lit_mseg-ummat.
  369.           if sy-subrc ne 0. clear ls_mara.  endif. "Если материал не найден, то он с другой группы
  370.           if lit_mara-matkl ne ls_mara-matkl.
  371.             if lit_mseg-bwart = '941' and lit_mseg-shkzg eq 'H'.
  372.               add: lit_mseg-menge to <lfs_result>-devout-menge,
  373.                    lit_mseg-dmbtr to <lfs_result>-devout-dmbtr.
  374.             elseif lit_mseg-bwart = '942' and lit_mseg-shkzg eq 'S'.
  375.               subtract: lit_mseg-menge from <lfs_result>-devout-menge,
  376.                         lit_mseg-dmbtr from <lfs_result>-devout-dmbtr.
  377.             endif.
  378.           endif.
  379.         when '201' or '241' or '261' or '281' or '601'
  380.           or '933' or '935' or '943'
  381.           or '945' or '947' or '949' or '955'
  382.           or '971' or 'Z51'.
  383.           if lit_mseg-shkzg = 'H'.
  384.             add:lit_mseg-menge to <lfs_result>-devout-menge,
  385.                 lit_mseg-dmbtr to <lfs_result>-devout-dmbtr.
  386.           endif.
  387.  
  388.         when '202' or '242' or '262' or '282' or '602'
  389.           or '934' or '936' or '944'
  390.           or '946' or '948' or '950' or '956'
  391.           or '972' or 'Z52'.
  392.           if lit_mseg-shkzg = 'S'.
  393.             subtract: lit_mseg-menge from <lfs_result>-devout-menge,
  394.                       lit_mseg-dmbtr from <lfs_result>-devout-dmbtr.
  395.           endif.
  396.       endcase.
  397.     endif.
  398.  
  399.     "   откатываем остатки
  400.     if lit_mseg-shkzg = 'S'.
  401.       lit_mseg-menge = - lit_mseg-menge.
  402.       lit_mseg-dmbtr = - lit_mseg-dmbtr.
  403.     endif.
  404. *     IF lit_mseg-matnr = '000000000210000047' and lit_mseg-charg <> lit_mseg-bwtar. " пока сделал исключение потом посматрю после отпуска Yaki B. 21.02.2018
  405. *      read table lit_mchb assigning <lfs_mchb> with table key primkey components matnr = lit_mseg-matnr
  406. *                                                                                 werks = lit_mseg-werks
  407. *                                                                                 charg = lit_mseg-bwtar.
  408. *     else.
  409.     IF lit_mseg-charg ne ''.
  410.       read table lit_mchb assigning <lfs_mchb> with table key primkey components matnr = lit_mseg-matnr
  411.                                                                                  werks = lit_mseg-werks
  412.                                                                                  charg = lit_mseg-charg.
  413.     ELSE.
  414.       read table lit_mchb assigning <lfs_mchb> with key  matnr = lit_mseg-matnr
  415.                                                                                  werks = lit_mseg-werks
  416.                                                                                  bwtar = lit_mseg-bwtar.
  417.       lit_mseg-menge = - lit_mseg-menge.
  418.       lit_mseg-dmbtr = - lit_mseg-dmbtr.
  419.     ENDIF.
  420.  
  421. *     ENDIF.
  422.  
  423.  
  424.     if sy-subrc ne 0.
  425.  
  426.       if sy-tabix eq 0. sy-tabix = 1. endif.
  427.       lit_mchb-matnr = lit_mseg-matnr.
  428.       lit_mchb-werks = lit_mseg-werks.
  429.  
  430.       lit_mchb-charg = lit_mseg-charg.
  431.        IF lit_mseg-charg = ''.
  432.          lit_mchb-charg = lit_mseg-bwtar.
  433.        ENDIF.
  434.  
  435.       lit_mchb-bwtar = lit_mseg-bwtar.
  436.       insert lit_mchb index sy-tabix  assigning <lfs_mchb> .
  437.     endif.
  438.  
  439.  
  440. *     IF lit_mseg-charg <> lit_mseg-bwtar and lit_mseg-matnr = '000000000210000047'.
  441. *          lit_mseg-menge = - lit_mseg-menge.
  442. *          lit_mseg-dmbtr = - lit_mseg-dmbtr.
  443. *
  444. *       IF lit_mseg-calcdt <=  lr_calcdt-low.
  445. *         add: lit_mseg-menge to <lfs_mchb>-clabs_b.
  446. *       ENDIF.
  447. *       if lit_mseg-calcdt >  lr_calcdt-low .
  448. *         add: lit_mseg-menge to <lfs_mchb>-clabs_e.
  449. *       endif.
  450. *     else.
  451.  
  452.        add: lit_mseg-menge to <lfs_mchb>-clabs_b.
  453.        if lit_mseg-calcdt >  lr_calcdt-high .
  454.          add: lit_mseg-menge to <lfs_mchb>-clabs_e.
  455.        endif.
  456. *     ENDIF.
  457.   endloop.
  458.   "заносим остатки
  459.   delete lit_mchb where ( clabs_e is initial and clabs_b is initial ) or charg = space.
  460.   loop at lit_mchb.
  461.     lit_matprice-matnr = lit_mchb-matnr.
  462.     lit_matprice-bwtar = lit_mchb-bwtar.
  463.     read table lit_t001w with table key werks = lit_mchb-werks.
  464.     check sy-subrc eq 0.
  465.     lit_matprice-bwkey = lit_t001w-bwkey.
  466.     collect lit_matprice.
  467.   endloop.
  468.  
  469.   perform get_current_price_material using lr_calcdt-low lr_calcdt-high changing lit_matprice[].
  470.  
  471.   LOOP AT lit_mbew assigning <lfs_mbew>.
  472.     read table lit_mchb with key matnr = <lfs_mbew>-matnr werks = <lfs_mbew>-bwkey bwtar = <lfs_mbew>-bwtar.
  473.     IF sy-subrc = 0.
  474.       <lfs_mbew>-lbkum = 0.
  475.     ENDIF.
  476.   ENDLOOP.
  477.  
  478.   delete lit_mbew where lbkum = 0.
  479.  
  480. *  sort lit_matprice by matnr bwkey bwtar calcdt.
  481. *  delete adjacent duplicates from lit_matprice comparing matnr bwkey bwtar calcdt.
  482. *  sort lit_mchb by matnr werks bwtar.
  483. *  delete adjacent duplicates from lit_mchb comparing matnr werks bwtar.
  484.  
  485.   loop at lit_mchb.
  486.     insert_row_to_result_tab lit_mara lit_mchb-matnr lit_t001w lit_mchb-werks lit_result <lfs_result>.
  487.     read table lit_matprice with table key matnr = lit_mchb-matnr
  488.                                            bwkey = lit_t001w-bwkey
  489.                                            bwtar = lit_mchb-bwtar
  490.                                            calcdt = lr_calcdt-low.
  491.     if sy-subrc eq 0.
  492.       add lit_mchb-clabs_b to <lfs_result>-rembg-menge.
  493.       <lfs_result>-rembg-dmbtr = <lfs_result>-rembg-dmbtr + lit_mchb-clabs_b * lit_matprice-dmbtr / lit_matprice-menge.
  494. ***Add Lavrenyuk K. 28.01.2018 22:40:49
  495. *    else.
  496. *      add lit_mchb-clabs_b to <lfs_result>-rembg-menge.
  497. ******
  498.     endif.
  499.  
  500.     read table lit_matprice with table key matnr = lit_mchb-matnr
  501.                                            bwkey = lit_t001w-bwkey
  502.                                            bwtar = lit_mchb-bwtar
  503.                                            calcdt = lr_calcdt-high.
  504.     if sy-subrc eq 0.
  505.       add lit_mchb-clabs_e to <lfs_result>-remed-menge.
  506.       <lfs_result>-remed-dmbtr = <lfs_result>-remed-dmbtr + lit_mchb-clabs_e * lit_matprice-dmbtr / lit_matprice-menge.
  507. ***Add Lavrenyuk K. 28.01.2018 22:40:49
  508. *    else.
  509. *      add lit_mchb-clabs_e to <lfs_result>-remed-menge.
  510. ******
  511.     endif.
  512.   endloop.
  513.  
  514.  
  515. * Добавляем запас в пути
  516.   select ekko~ebeln ekpo~ebelp ekpo~matnr ekpo~werks ekpo~pstyp
  517.          ekpo~meins ekpo~netwr ekko~reswk ekpo~retpo ekpo~menge
  518.          ekpo~elikz ekpo~bstyp ekpo~ccomp ekko~bsakz
  519.        into corresponding fields of table lit_ekpo
  520.        from ekpo inner join ekko on ekpo~ebeln = ekko~ebeln
  521.             for all entries in lit_mara
  522.        where ekpo~matnr = lit_mara-matnr
  523.          and ekpo~werks in lr_werks
  524.          and ekpo~bstyp in ('F', 'L')
  525.          and ekpo~loekz = space
  526.          and ekpo~sobkz = space
  527.          and ekpo~wepos <> space
  528.          and ekko~reswk <> space.
  529. ***Add Lavrenyuk K. 07.02.2018 22:17:45
  530. ***Если перемещение внутри одной БЕ, то не берем эти позиции заказа
  531.     loop at lit_ekpo.
  532.       lv_tabix = sy-tabix.
  533.       clear: bukrs_S, bukrs_p.
  534.       read table lit_t001w_p with table key werks = lit_ekpo-werks.
  535.       bukrs_p = lit_t001w_p-bukrs.
  536.       read table lit_t001w_p with table key werks = lit_ekpo-reswk.
  537.       bukrs_s = lit_t001w_p-bukrs.
  538.       if   bukrs_p =  bukrs_s.
  539.         delete lit_ekpo index lv_tabix.
  540.       endif.
  541.     endloop.
  542.     CLEAR lv_tabix.
  543. ***
  544.  
  545.   if lit_ekpo[] is not initial.
  546.     concatenate lv_sqlfn_date ' <= lr_calcdt-high' into lv_string.
  547.     select ebeln ebelp zekkn vgabe gjahr belnr buzei
  548.            budat cpudt shkzg bewtp matnr werks dmbtr
  549.            menge bpmng bwtar charg into corresponding fields of table lit_ekbe
  550.       from ekbe for all entries in lit_ekpo
  551.       where  ebeln = lit_ekpo-ebeln
  552.         and  ebelp = lit_ekpo-ebelp
  553.         and  bewtp in ('E', 'U')
  554.         and  (lv_string)
  555.       order by primary key.
  556.   endif.
  557.   "схлопываем суммы
  558.   clear: ls_ekbe.
  559.   loop at lit_ekbe where ebeln is not initial
  560.                      and ebelp is not initial.
  561.     lv_tabix = sy-tabix.
  562.     read table lit_ekpo into lit_ekpo with table key key_prim components ebeln = lit_ekbe-ebeln
  563.                                                                          ebelp = lit_ekbe-ebelp.
  564.     check sy-subrc eq 0.
  565.     lit_ekbe_col-matnr = lit_ekpo-matnr.
  566.     lit_ekbe_col-werks = lit_ekpo-werks.
  567.     lit_ekbe_col-menge = lit_ekbe-menge.
  568.     lit_ekbe_col-dmbtr = lit_ekbe-dmbtr.
  569.     assign component lv_sqlfn_date of structure lit_ekbe to <lfs_any>.
  570.  
  571.     if lit_ekpo-retpo is not initial.
  572.       lit_ekbe_col-menge = - lit_ekbe_col-menge.
  573.       lit_ekbe_col-dmbtr = - lit_ekbe_col-dmbtr.
  574.     endif.
  575.  
  576.     if lit_ekbe-shkzg = 'H'.
  577.       lit_ekbe_col-menge = - lit_ekbe_col-menge.
  578.       lit_ekbe_col-dmbtr = - lit_ekbe_col-dmbtr.
  579.     endif.
  580.  
  581.     if <lfs_any> <= lr_calcdt-low.
  582.       lit_ekbe_col-state = lct_state_begin.
  583.       collect lit_ekbe_col.
  584.     endif.
  585.     lit_ekbe_col-state = lct_state_end.
  586.  
  587.     read table lit_mbew assigning <lfs_mbew> with key matnr = lit_ekbe-matnr bwtar = lit_ekbe-bwtar.
  588.     IF sy-subrc = 0.
  589.       <lfs_mbew>-lbkum = 0.
  590.     ENDIF.
  591.  
  592.     collect lit_ekbe_col.
  593.   endloop.
  594.   delete lit_ekbe_col where menge is initial.
  595.   free lit_ekbe.
  596.  
  597.   "добавляем запас в пути в результирующую таблицу
  598.   loop at lit_ekbe_col.
  599.     insert_row_to_result_tab lit_mara lit_ekbe_col-matnr lit_t001w lit_ekbe_col-werks lit_result <lfs_result>.
  600.     "т.к у запаса в пути я нашел суммы, только у отправителя - поэтому умножаем суммы на -1
  601.     lit_ekbe_col-dmbtr = - lit_ekbe_col-dmbtr.
  602.     lit_ekbe_col-menge = - lit_ekbe_col-menge.
  603.  
  604.     if lit_ekbe_col-state = lct_state_begin.
  605.       add: lit_ekbe_col-menge to <lfs_result>-rembg-menge,
  606.            lit_ekbe_col-dmbtr to <lfs_result>-rembg-dmbtr.
  607.     elseif lit_ekbe_col-state = lct_state_end.
  608.       add: lit_ekbe_col-menge to <lfs_result>-remed-menge,
  609.            lit_ekbe_col-dmbtr to <lfs_result>-remed-dmbtr.
  610.     endif.
  611.   endloop.
  612.  
  613.  
  614.   delete lit_mbew where lbkum = 0.
  615.  
  616.   LOOP AT lit_mbew.
  617.  
  618.     insert_row_to_result_tab lit_mara lit_mbew-matnr lit_t001w lit_mbew-bwkey lit_result <lfs_result>.
  619.  
  620.     concatenate lit_mbew-lfgja lit_mbew-lfmon '01' into lfdate.
  621.  
  622.     IF lfdate < lr_calcdt-low.
  623.        <lfs_result>-rembg-menge = <lfs_result>-rembg-menge + lit_mbew-lbkum.
  624.        <lfs_result>-rembg-dmbtr = <lfs_result>-rembg-dmbtr + lit_mbew-salk3.
  625.     ENDIF.
  626.     IF lfdate <= lr_calcdt-high.
  627.       <lfs_result>-remed-dmbtr = <lfs_result>-remed-dmbtr + lit_mbew-salk3.
  628.       <lfs_result>-remed-menge = <lfs_result>-remed-menge + lit_mbew-lbkum.
  629.       ENDIF.
  630.  
  631.   ENDLOOP.
  632.  
  633.   sort lit_mat_group by gnumb.
  634.   clear lsex_result.
  635.   loop at lit_result.
  636.     move-corresponding lit_result to lsex_result.
  637.     read table lit_mara into lit_mara with table key key_prim components matnr = lsex_result-matnr.
  638.     if sy-subrc ne 0. clear lit_mara. endif.
  639.     lsex_result-meins = lit_mara-meins.
  640.     lsex_result-maktx = lit_mara-maktx.
  641.     lsex_result-matkl = lit_mara-matkl.
  642.  
  643.     read table lit_mat_group with key gnumb = lsex_result-gnumb
  644.                                       binary search.
  645.     if sy-subrc ne 0. clear lit_mat_group. endif.
  646.     lsex_result-gname = lit_mat_group-gname.
  647.  
  648.     read table lit_t001 with table key bukrs = lsex_result-bukrs.
  649.     if sy-subrc ne 0. clear lit_t001. endif.
  650.     lsex_result-butxt = lit_t001-butxt.
  651.  
  652.     read table lit_t023 into lit_t023 with table key key_prim components matkl = lsex_result-matkl.
  653.     if sy-subrc ne 0. clear lit_t023. endif.
  654.     lsex_result-matkl = lit_t023-matkl.
  655.     lsex_result-wgbez = lit_t023-wgbez.
  656.  
  657.     lsex_result-allin-menge = lsex_result-lifin-menge + lsex_result-bukin-menge.
  658.     lsex_result-allin-dmbtr = lsex_result-lifin-dmbtr + lsex_result-bukin-dmbtr.
  659.  
  660.     lsex_result-allout-menge = lsex_result-devout-menge + lsex_result-bukout-menge.
  661.     lsex_result-allout-dmbtr = lsex_result-devout-dmbtr + lsex_result-bukout-dmbtr.
  662.     append lsex_result to exit_result.
  663.   endloop.
  664. * Добовляем отсутствующие в оборотах
  665.   loop at lit_t001.
  666.     loop at lit_mat_group.
  667.       read table exit_result with key bukrs = lit_t001-bukrs
  668.                                       gnumb = lit_mat_group-gnumb
  669.                                       binary search
  670.                                       transporting no fields.
  671.       if sy-subrc ne 0.
  672.         clear lsex_result.
  673.         lsex_result-bukrs = lit_t001-bukrs.
  674.         lsex_result-gnumb = lit_mat_group-gnumb.
  675.         lsex_result-gname = lit_mat_group-gname.
  676.         lsex_result-butxt = lit_t001-butxt.
  677.         if sy-tabix eq 0. sy-tabix = 1. endif.
  678.         insert lsex_result into exit_result index sy-tabix.
  679.       endif.
  680.     endloop.
  681.   endloop.
  682. endform.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement