Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- form get_data changing exit_result type tit_result.
- types: begin of t_ekbe_collect,
- state type c,
- matnr type ekbe-matnr,
- werks type ekbe-werks,
- menge type ekbe-menge,
- dmbtr type ekbe-dmbtr,
- end of t_ekbe_collect,
- ***Add Lavrenyuk K. 27.01.2018 00:45:13
- BEGIN OF it_mslb,
- matnr type mslb-matnr,
- werks type mslb-werks,
- charg type mslb-charg,
- lblab type mslb-lblab,
- lfgja type mslb-lfgja,
- lfmon type mslb-lfmon,
- END OF it_mslb.
- *****
- TYPES : BEGIN OF STYPE_MBEW, "n450764
- MATNR LIKE MBEW-MATNR, "n450764
- BWKEY LIKE MBEW-BWKEY, "n450764
- BWTAR LIKE MBEW-BWTAR, "n450764
- LBKUM(09) TYPE P DECIMALS 3, "n450764
- SALK3(09) TYPE P DECIMALS 2, "n450764
- MEINS LIKE MARA-MEINS, "n450764
- WAERS LIKE T001-WAERS, "n450764
- BWTTY LIKE MBEW-BWTTY, "n1227439
- LFGJA LIKE MBEW-LFGJA,
- LFMON LIKE MBEW-LFMON,
- END OF STYPE_MBEW,
- STAB_MBEW TYPE STANDARD TABLE OF
- STYPE_MBEW WITH DEFAULT KEY.
- constants: lct_state_begin type c value 'B',
- lct_state_end type c value 'E'.
- data: lit_mat_group type tit_group with header line,
- lit_result type sorted table of t_result_data with unique key bukrs gnumb matnr with header line,
- lit_t001 type sorted table of t_t001 with unique key bukrs with header line,
- lit_t001w type sorted table of t_t001w with unique key werks with header line,
- lit_t001w_p type sorted table of t_t001w with unique key werks with header line, "Лавренюк К 27/01/2018
- lit_mara type standard table of t_mara with non-unique sorted key key_prim components matnr with header line,
- lit_t023 type standard table of t_t023 with non-unique sorted key key_prim components matkl with header line,
- lit_mseg type standard table of t_mseg with header line,
- lit_mseg_ type standard table of t_mseg with header line,
- lit_mseg_strn type standard table of t_mseg with non-unique sorted key srn_prim components sjahr smbln smblp with header line,
- lit_ekpo type standard table of t_ekpo with non-unique sorted key key_prim components ebeln ebelp with header line,
- lit_ekbe type standard table of t_ekbe with non-unique sorted key key_prim components ebeln ebelp with header line,
- lit_ekbe_col type sorted table of t_ekbe_collect with unique key state matnr werks with header line,
- lit_mchb type standard table of t_mchb with non-unique sorted key primkey components matnr werks charg with header line,
- * lit_mchb type standard table of t_mchb with non-unique sorted key primkey components matnr werks bwtar with header line,
- lit_mbew type standard table of t_mbew with header line ,
- lit_mslb TYPE STANDARD TABLE OF it_mslb WITH HEADER LINE, " Add Lavrenyuk K. 27.01.2018 00:45:41
- lit_matprice type tit_price_material with header line,
- lr_matnr type tr_matnr with header line,
- lr_bwkey type tr_bwkey with header line,
- lr_werks type tr_werks with header line,
- lr_calcdt type tr_budat with header line,
- ls_matkl like line of lit_mat_group-matkl,
- ls_mara like line of lit_mara,
- ls_ekbe like line of lit_ekbe,
- lsex_result like line of exit_result,
- lv_sqlfn_date type string, "Имя поля даты для запросов
- lv_string type string, "Условие для поля для запросов
- lv_tabix type sy-tabix,
- lfdate(8),
- bukrs_S TYPE BKPF-BUKRS, "Сдающая БЕ
- bukrs_P TYPE BKPF-BUKRS . "Принимающая БЕ
- DATA : L_T_MBEW TYPE STAB_MBEW, "n450764
- L_S_MBEW TYPE STYPE_MBEW, "n450764
- "n450764
- L_S_MBEW_SPLIT TYPE STYPE_MBEW, "n450764
- L_S_MBEW_NORMAL TYPE STYPE_MBEW, "n450764
- L_FLAG_SPLIT(01) TYPE C.
- field-symbols: <lfs_mara> like line of lit_mara,
- <lfs_result> like line of lit_result,
- <lfs_mchb> like line of lit_mchb,
- <lfs_mseg> like line of lit_mseg,
- <lfs_mbew> like line of lit_mbew,
- <lfs_any> type any.
- clear: lit_mat_group[], lit_mat_group, lit_mara[], lit_mara,
- lit_mseg[], lit_mseg, lit_mchb[], lit_mchb, ls_matkl,
- lr_matnr, lr_matnr[], lr_werks, lr_werks[], lr_bwkey,
- lr_bwkey[], lit_matprice, lit_matprice[], lr_calcdt, lr_calcdt[].
- if p_budat is not initial.
- lr_calcdt[] = so_budat[].
- lv_sqlfn_date = 'BUDAT'.
- elseif p_cpudt is not initial.
- lr_calcdt[] = so_cpudt[].
- lv_sqlfn_date = 'CPUDT'.
- endif.
- check lr_calcdt[] is not initial.
- read table lr_calcdt index 1.
- if lr_calcdt-high is initial. lr_calcdt-high = lr_calcdt-low. endif.
- perform get_matkl_group changing lit_mat_group[].
- loop at lit_mat_group.
- loop at lit_mat_group-matkl into ls_matkl.
- lit_t023-matkl = ls_matkl-low.
- append lit_t023.
- endloop.
- endloop.
- sort lit_t023 by matkl.
- delete adjacent duplicates from lit_t023 comparing matkl.
- check lit_t023[] is not initial.
- select mara~matnr mara~meins mara~matkl makt~maktx
- into corresponding fields of table lit_mara
- from mara left join makt on makt~matnr = mara~matnr
- and makt~spras = sy-langu
- for all entries in lit_t023
- where mara~matkl = lit_t023-matkl. "and mara~matnr = '000000000210000047'.
- select matkl wgbez into corresponding fields of table lit_t023
- from t023t for all entries in lit_t023
- where matkl = lit_t023-matkl
- and spras = sy-langu.
- check lit_mara[] is not initial.
- "заполняем параметры материалов
- lr_matnr-sign = 'I'. lr_matnr-option = 'EQ'.
- loop at lit_mara assigning <lfs_mara>.
- lr_matnr-low = <lfs_mara>-matnr.
- append lr_matnr.
- loop at lit_mat_group.
- check <lfs_mara>-matkl in lit_mat_group-matkl.
- <lfs_mara>-gnumb = lit_mat_group-gnumb.
- exit.
- endloop.
- endloop.
- select bukrs butxt into corresponding fields of table lit_t001
- from t001
- where bukrs in so_bukrs.
- check lit_t001[] is not initial.
- ****Change Lavrenyuk K. 27.01.2018 00:46:09
- * select t001w~werks t001k~bwkey t001k~bukrs into corresponding fields of table lit_t001w
- * from t001k inner join t001w on t001w~bwkey = t001k~bwkey
- * where t001k~bukrs in so_bukrs
- * and t001w~werks not like '%Z%'.
- select t001w~werks t001k~bwkey t001k~bukrs into corresponding fields of table lit_t001w
- from t001k inner join t001w on t001w~bwkey = t001k~bwkey
- where
- t001w~werks not like '%Z%'.
- lit_t001w_p[] = lit_t001w[].
- delete lit_t001w[] WHERE bukrs not in so_bukrs.
- *****
- lr_werks-sign = 'I'. lr_werks-option = 'EQ'.
- move-corresponding lr_werks to lr_bwkey.
- loop at lit_t001w.
- lr_werks-low = lit_t001w-werks.
- lr_bwkey-low = lit_t001w-bwkey.
- append: lr_werks, lr_bwkey.
- endloop.
- sort: lr_werks by low, lr_bwkey by low.
- delete adjacent duplicates from: lr_werks comparing low,
- lr_bwkey comparing low.
- if lit_mara[] is not initial. "Add Lavrenyuk K. 27.01.2018 00:47:08
- select mchb~matnr mchb~werks mchb~charg mchb~lgort mchb~clabs as clabs_b mchb~cspem as clabs_e mcha~bwtar
- into corresponding fields of table lit_mchb
- from mchb left join mcha on mcha~matnr = mchb~matnr
- and mcha~werks = mchb~werks
- and mcha~charg = mchb~charg
- for all entries in lit_mara
- where mchb~werks in lr_werks
- and mchb~matnr = lit_mara-matnr
- and ( mchb~clabs ne 0 or mchb~cspem ne 0 ).
- SELECT MATNR BWKEY BWTAR LBKUM SALK3 BWTTY LFGJA LFMON FROM MBEW
- INTO CORRESPONDING FIELDS OF TABLE L_T_MBEW
- for all entries in lit_mara
- WHERE MATNR = lit_mara-matnr
- AND BWKEY IN lr_werks
- AND LFGJA = lr_calcdt-low(4)
- .
- sort L_T_MBEW by matnr BWKEY bwtar.
- LOOP AT L_T_MBEW INTO L_S_MBEW.
- IF L_S_MBEW-BWTAR IS INITIAL
- AND NOT L_S_MBEW-BWTTY IS INITIAL.
- clear L_S_MBEW-LBKUM.
- clear L_S_MBEW-SALK3.
- ENDIF.
- IF L_S_MBEW-BWTAR IS not INITIAL.
- MOVE : L_S_MBEW-MATNR TO L_S_MBEW_NORMAL-MATNR,
- L_S_MBEW-BWTAR TO L_S_MBEW_NORMAL-BWTAR,
- L_S_MBEW-LFGJA TO L_S_MBEW_NORMAL-LFGJA,
- L_S_MBEW-LFMON TO L_S_MBEW_NORMAL-LFMON,
- L_S_MBEW-BWKEY TO L_S_MBEW_NORMAL-BWKEY.
- ADD : L_S_MBEW-LBKUM TO L_S_MBEW_NORMAL-LBKUM,
- L_S_MBEW-SALK3 TO L_S_MBEW_NORMAL-SALK3.
- MOVE-CORRESPONDING L_S_MBEW_NORMAL TO lit_mbew.
- append lit_mbew.
- ENDIF.
- CLEAR : L_FLAG_SPLIT, L_S_MBEW_NORMAL, L_S_MBEW_SPLIT.
- ENDLOOP.
- delete lit_mbew where LBKUM = 0 and SALK3 = 0.
- ****Add Lavrenyuk K. 27.01.2018 00:47:22 выбираем особый запас у поставщика (
- **Спросить он точно нужен ?
- select matnr werks charg lblab lfgja lfmon from mslb
- INTO CORRESPONDING FIELDS OF TABLE lit_mslb
- for all entries in lit_mara
- WHERE matnr = lit_mara-matnr and
- * lfgja <= lr_calcdt-high(4) and "Comment Lavrenyuk K. 31.01.2018 18:46:53 Выбираем все запасы поставщика
- werks in lr_werks.
- *****
- endif.
- loop at lit_mchb where lgort is not initial.
- clear lit_mchb-lgort.
- "Добавляем блокированный запас в основной
- add lit_mchb-clabs_e to lit_mchb-clabs_b.
- lit_mchb-clabs_e = lit_mchb-clabs_b.
- collect lit_mchb.
- endloop.
- delete lit_mchb where lgort is not initial.
- ***Add Lavrenyuk K. 27.01.2018 00:47:42
- ***добавим запас у поставщика к выбранным запасам
- loop at lit_mslb.
- READ TABLE lit_mchb ASSIGNING <lfs_mchb> with key matnr = lit_mslb-matnr
- werks = lit_mslb-werks
- charg = lit_mslb-charg.
- * 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) ) ).
- if sy-subrc = 0 . "Change Lavrenyuk K. 31.01.2018 19:39:27 Не проверяем на дату, т.к. мы берем запасы на текущий момент то и запас у поставщика берем весь
- <lfs_mchb>-clabs_e = <lfs_mchb>-clabs_e + lit_mslb-lblab.
- <lfs_mchb>-clabs_b = <lfs_mchb>-clabs_b + lit_mslb-lblab.
- * 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) ) ).
- ELSE. "Change Lavrenyuk K. 31.01.2018 19:41:39
- APPEND INITIAL LINE TO lit_mchb ASSIGNING <lfs_mchb>.
- <lfs_mchb>-matnr = lit_mslb-matnr.
- <lfs_mchb>-werks = lit_mslb-werks.
- <lfs_mchb>-charg = lit_mslb-charg.
- <lfs_mchb>-bwtar = lit_mslb-charg.
- <lfs_mchb>-clabs_e = lit_mslb-lblab.
- <lfs_mchb>-clabs_b = lit_mslb-lblab.
- ENDIF.
- *****
- ENDLOOP.
- concatenate 'MKPF~' lv_sqlfn_date ' >= lr_calcdt-low' into lv_string.
- select mseg~mblnr mseg~mjahr mseg~zeile mseg~xauto mseg~shkzg mseg~bwart
- mseg~werks mseg~bukrs mseg~parbu mseg~lgort mseg~matnr mseg~charg
- mseg~bwtar mseg~meins mseg~umwrk mseg~umlgo mseg~ummat mseg~umcha
- mseg~anln1 mseg~anln2 mseg~lifnr mseg~sobkz mseg~menge mseg~dmbtr
- mseg~lbkum mseg~salk3 mseg~sjahr mseg~smbln mseg~smblp mkpf~budat
- mkpf~cpudt mseg~ebeln mseg~ebelp into corresponding fields of table lit_mseg
- from mseg inner join mkpf on mkpf~mjahr = mseg~mjahr
- and mkpf~mblnr = mseg~mblnr
- for all entries in lit_mara
- where (lv_string)
- and mseg~werks in lr_werks
- and mseg~matnr = lit_mara-matnr.
- *Собираем все в одну таблицу
- clear lit_result.
- loop at lit_mseg assigning <lfs_mseg>.
- assign component lv_sqlfn_date of structure <lfs_mseg> to <lfs_any>.
- <lfs_mseg>-calcdt = <lfs_any>.
- endloop.
- concatenate lv_sqlfn_date ' in lr_calcdt' into lv_string.
- select ebeln ebelp zekkn vgabe gjahr belnr buzei
- lfgja lfbnr lfpos budat cpudt shkzg dmbtr matnr werks
- into corresponding fields of table lit_ekbe
- from ekbe for all entries in lit_mara
- where werks in lr_werks
- and matnr = lit_mara-matnr
- and vgabe = '3'
- and (lv_string).
- "Дополняем MSEG доп. дебетованием
- clear lit_mseg.
- loop at lit_ekbe.
- lit_mseg-mblnr = lit_ekbe-lfbnr.
- lit_mseg-mjahr = lit_ekbe-lfgja.
- lit_mseg-zeile = lit_ekbe-lfpos.
- lit_mseg-ebeln = lit_ekbe-ebeln.
- lit_mseg-ebelp = lit_ekbe-ebelp.
- lit_mseg-shkzg = lit_ekbe-shkzg.
- case lit_ekbe-shkzg.
- when 'S'. lit_mseg-bwart = '101'.
- when 'H'. lit_mseg-bwart = '102'.
- endcase.
- lit_mseg-dmbtr = lit_ekbe-dmbtr.
- lit_mseg-matnr = lit_ekbe-matnr.
- lit_mseg-werks = lit_ekbe-werks.
- lit_mseg-budat = lit_ekbe-budat.
- lit_mseg-cpudt = lit_ekbe-cpudt.
- assign component lv_sqlfn_date of structure lit_mseg to <lfs_any>.
- lit_mseg-calcdt = <lfs_any>.
- append lit_mseg.
- endloop.
- * endif.
- clear: lit_mchb, lit_ekbe[].
- loop at lit_mseg.
- insert_row_to_result_tab lit_mara lit_mseg-matnr lit_t001w lit_mseg-werks lit_result <lfs_result>.
- if lit_mseg-calcdt in lr_calcdt.
- case lit_mseg-bwart.
- when '101' or '907' or '919' or '915' or '123'.
- check lit_mseg-shkzg = 'S'.
- add: lit_mseg-menge to <lfs_result>-lifin-menge,
- lit_mseg-dmbtr to <lfs_result>-lifin-dmbtr.
- when '102' or '908' or '920' or '916' or '122'.
- check lit_mseg-shkzg = 'H'.
- subtract: lit_mseg-menge from <lfs_result>-lifin-menge,
- lit_mseg-dmbtr from <lfs_result>-lifin-dmbtr.
- when '309' or '310'.
- read table lit_mara into ls_mara with table key key_prim components matnr = lit_mseg-ummat.
- if sy-subrc ne 0. clear ls_mara. endif. "Если материал не найден, то он с другой группы
- if lit_mara-matkl ne ls_mara-matkl.
- case lit_mseg-bwart.
- when '309'.
- if lit_mseg-shkzg = 'S'.
- add: lit_mseg-menge to <lfs_result>-lifin-menge,
- lit_mseg-dmbtr to <lfs_result>-lifin-dmbtr.
- else.
- add: lit_mseg-menge to <lfs_result>-devout-menge,
- lit_mseg-dmbtr to <lfs_result>-devout-dmbtr.
- endif.
- when '310'.
- if lit_mseg-shkzg = 'H'.
- subtract: lit_mseg-menge from <lfs_result>-lifin-menge,
- lit_mseg-dmbtr from <lfs_result>-lifin-dmbtr.
- else.
- subtract: lit_mseg-menge from <lfs_result>-devout-menge,
- lit_mseg-dmbtr from <lfs_result>-devout-dmbtr.
- endif.
- endcase.
- endif.
- when '641'.
- * read table lit_t001w with table key werks = lit_mseg-umwrk. "Comment Lavrenyuk K. 27.01.2018 00:48:17
- * if sy-subrc eq 0 and lit_mseg-bukrs ne lit_t001w-bukrs. "Comment Lavrenyuk K. 27.01.2018 00:48:17
- read table lit_t001w_p with table key werks = lit_mseg-umwrk. "Add Lavrenyuk K. 27.01.2018 00:48:17
- if sy-subrc eq 0 and lit_mseg-bukrs ne lit_t001w_p-bukrs. "Add Lavrenyuk K. 27.01.2018 00:48:17
- if lit_mseg-shkzg = 'S'.
- add: lit_mseg-menge to <lfs_result>-bukin-menge,
- lit_mseg-dmbtr to <lfs_result>-bukin-dmbtr.
- else.
- add: lit_mseg-menge to <lfs_result>-bukout-menge,
- lit_mseg-dmbtr to <lfs_result>-bukout-dmbtr.
- endif.
- endif.
- when '642'.
- * read table lit_t001w with table key werks = lit_mseg-umwrk. "Comment Lavrenyuk K. 27.01.2018 00:48:17
- * if sy-subrc eq 0 and lit_mseg-bukrs ne lit_t001w-bukrs. "Comment Lavrenyuk K. 27.01.2018 00:48:17
- read table lit_t001w_p with table key werks = lit_mseg-umwrk. "Add Lavrenyuk K. 27.01.2018 00:48:17
- if sy-subrc eq 0 and lit_mseg-bukrs ne lit_t001w_p-bukrs. "Add Lavrenyuk K. 27.01.2018 00:48:17
- if lit_mseg-shkzg = 'H'.
- subtract: lit_mseg-menge from <lfs_result>-bukin-menge,
- lit_mseg-dmbtr from <lfs_result>-bukin-dmbtr.
- else.
- subtract: lit_mseg-menge from <lfs_result>-bukout-menge,
- lit_mseg-dmbtr from <lfs_result>-bukout-dmbtr.
- endif.
- endif.
- when '941' or '942'.
- read table lit_mara into ls_mara with table key key_prim components matnr = lit_mseg-ummat.
- if sy-subrc ne 0. clear ls_mara. endif. "Если материал не найден, то он с другой группы
- if lit_mara-matkl ne ls_mara-matkl.
- if lit_mseg-bwart = '941' and lit_mseg-shkzg eq 'H'.
- add: lit_mseg-menge to <lfs_result>-devout-menge,
- lit_mseg-dmbtr to <lfs_result>-devout-dmbtr.
- elseif lit_mseg-bwart = '942' and lit_mseg-shkzg eq 'S'.
- subtract: lit_mseg-menge from <lfs_result>-devout-menge,
- lit_mseg-dmbtr from <lfs_result>-devout-dmbtr.
- endif.
- endif.
- when '201' or '241' or '261' or '281' or '601'
- or '933' or '935' or '943'
- or '945' or '947' or '949' or '955'
- or '971' or 'Z51'.
- if lit_mseg-shkzg = 'H'.
- add:lit_mseg-menge to <lfs_result>-devout-menge,
- lit_mseg-dmbtr to <lfs_result>-devout-dmbtr.
- endif.
- when '202' or '242' or '262' or '282' or '602'
- or '934' or '936' or '944'
- or '946' or '948' or '950' or '956'
- or '972' or 'Z52'.
- if lit_mseg-shkzg = 'S'.
- subtract: lit_mseg-menge from <lfs_result>-devout-menge,
- lit_mseg-dmbtr from <lfs_result>-devout-dmbtr.
- endif.
- endcase.
- endif.
- " откатываем остатки
- if lit_mseg-shkzg = 'S'.
- lit_mseg-menge = - lit_mseg-menge.
- lit_mseg-dmbtr = - lit_mseg-dmbtr.
- endif.
- * IF lit_mseg-matnr = '000000000210000047' and lit_mseg-charg <> lit_mseg-bwtar. " пока сделал исключение потом посматрю после отпуска Yaki B. 21.02.2018
- * read table lit_mchb assigning <lfs_mchb> with table key primkey components matnr = lit_mseg-matnr
- * werks = lit_mseg-werks
- * charg = lit_mseg-bwtar.
- * else.
- IF lit_mseg-charg ne ''.
- read table lit_mchb assigning <lfs_mchb> with table key primkey components matnr = lit_mseg-matnr
- werks = lit_mseg-werks
- charg = lit_mseg-charg.
- ELSE.
- read table lit_mchb assigning <lfs_mchb> with key matnr = lit_mseg-matnr
- werks = lit_mseg-werks
- bwtar = lit_mseg-bwtar.
- lit_mseg-menge = - lit_mseg-menge.
- lit_mseg-dmbtr = - lit_mseg-dmbtr.
- ENDIF.
- * ENDIF.
- if sy-subrc ne 0.
- if sy-tabix eq 0. sy-tabix = 1. endif.
- lit_mchb-matnr = lit_mseg-matnr.
- lit_mchb-werks = lit_mseg-werks.
- lit_mchb-charg = lit_mseg-charg.
- IF lit_mseg-charg = ''.
- lit_mchb-charg = lit_mseg-bwtar.
- ENDIF.
- lit_mchb-bwtar = lit_mseg-bwtar.
- insert lit_mchb index sy-tabix assigning <lfs_mchb> .
- endif.
- * IF lit_mseg-charg <> lit_mseg-bwtar and lit_mseg-matnr = '000000000210000047'.
- * lit_mseg-menge = - lit_mseg-menge.
- * lit_mseg-dmbtr = - lit_mseg-dmbtr.
- *
- * IF lit_mseg-calcdt <= lr_calcdt-low.
- * add: lit_mseg-menge to <lfs_mchb>-clabs_b.
- * ENDIF.
- * if lit_mseg-calcdt > lr_calcdt-low .
- * add: lit_mseg-menge to <lfs_mchb>-clabs_e.
- * endif.
- * else.
- add: lit_mseg-menge to <lfs_mchb>-clabs_b.
- if lit_mseg-calcdt > lr_calcdt-high .
- add: lit_mseg-menge to <lfs_mchb>-clabs_e.
- endif.
- * ENDIF.
- endloop.
- "заносим остатки
- delete lit_mchb where ( clabs_e is initial and clabs_b is initial ) or charg = space.
- loop at lit_mchb.
- lit_matprice-matnr = lit_mchb-matnr.
- lit_matprice-bwtar = lit_mchb-bwtar.
- read table lit_t001w with table key werks = lit_mchb-werks.
- check sy-subrc eq 0.
- lit_matprice-bwkey = lit_t001w-bwkey.
- collect lit_matprice.
- endloop.
- perform get_current_price_material using lr_calcdt-low lr_calcdt-high changing lit_matprice[].
- LOOP AT lit_mbew assigning <lfs_mbew>.
- read table lit_mchb with key matnr = <lfs_mbew>-matnr werks = <lfs_mbew>-bwkey bwtar = <lfs_mbew>-bwtar.
- IF sy-subrc = 0.
- <lfs_mbew>-lbkum = 0.
- ENDIF.
- ENDLOOP.
- delete lit_mbew where lbkum = 0.
- * sort lit_matprice by matnr bwkey bwtar calcdt.
- * delete adjacent duplicates from lit_matprice comparing matnr bwkey bwtar calcdt.
- * sort lit_mchb by matnr werks bwtar.
- * delete adjacent duplicates from lit_mchb comparing matnr werks bwtar.
- loop at lit_mchb.
- insert_row_to_result_tab lit_mara lit_mchb-matnr lit_t001w lit_mchb-werks lit_result <lfs_result>.
- read table lit_matprice with table key matnr = lit_mchb-matnr
- bwkey = lit_t001w-bwkey
- bwtar = lit_mchb-bwtar
- calcdt = lr_calcdt-low.
- if sy-subrc eq 0.
- add lit_mchb-clabs_b to <lfs_result>-rembg-menge.
- <lfs_result>-rembg-dmbtr = <lfs_result>-rembg-dmbtr + lit_mchb-clabs_b * lit_matprice-dmbtr / lit_matprice-menge.
- ***Add Lavrenyuk K. 28.01.2018 22:40:49
- * else.
- * add lit_mchb-clabs_b to <lfs_result>-rembg-menge.
- ******
- endif.
- read table lit_matprice with table key matnr = lit_mchb-matnr
- bwkey = lit_t001w-bwkey
- bwtar = lit_mchb-bwtar
- calcdt = lr_calcdt-high.
- if sy-subrc eq 0.
- add lit_mchb-clabs_e to <lfs_result>-remed-menge.
- <lfs_result>-remed-dmbtr = <lfs_result>-remed-dmbtr + lit_mchb-clabs_e * lit_matprice-dmbtr / lit_matprice-menge.
- ***Add Lavrenyuk K. 28.01.2018 22:40:49
- * else.
- * add lit_mchb-clabs_e to <lfs_result>-remed-menge.
- ******
- endif.
- endloop.
- * Добавляем запас в пути
- select ekko~ebeln ekpo~ebelp ekpo~matnr ekpo~werks ekpo~pstyp
- ekpo~meins ekpo~netwr ekko~reswk ekpo~retpo ekpo~menge
- ekpo~elikz ekpo~bstyp ekpo~ccomp ekko~bsakz
- into corresponding fields of table lit_ekpo
- from ekpo inner join ekko on ekpo~ebeln = ekko~ebeln
- for all entries in lit_mara
- where ekpo~matnr = lit_mara-matnr
- and ekpo~werks in lr_werks
- and ekpo~bstyp in ('F', 'L')
- and ekpo~loekz = space
- and ekpo~sobkz = space
- and ekpo~wepos <> space
- and ekko~reswk <> space.
- ***Add Lavrenyuk K. 07.02.2018 22:17:45
- ***Если перемещение внутри одной БЕ, то не берем эти позиции заказа
- loop at lit_ekpo.
- lv_tabix = sy-tabix.
- clear: bukrs_S, bukrs_p.
- read table lit_t001w_p with table key werks = lit_ekpo-werks.
- bukrs_p = lit_t001w_p-bukrs.
- read table lit_t001w_p with table key werks = lit_ekpo-reswk.
- bukrs_s = lit_t001w_p-bukrs.
- if bukrs_p = bukrs_s.
- delete lit_ekpo index lv_tabix.
- endif.
- endloop.
- CLEAR lv_tabix.
- ***
- if lit_ekpo[] is not initial.
- concatenate lv_sqlfn_date ' <= lr_calcdt-high' into lv_string.
- select ebeln ebelp zekkn vgabe gjahr belnr buzei
- budat cpudt shkzg bewtp matnr werks dmbtr
- menge bpmng bwtar charg into corresponding fields of table lit_ekbe
- from ekbe for all entries in lit_ekpo
- where ebeln = lit_ekpo-ebeln
- and ebelp = lit_ekpo-ebelp
- and bewtp in ('E', 'U')
- and (lv_string)
- order by primary key.
- endif.
- "схлопываем суммы
- clear: ls_ekbe.
- loop at lit_ekbe where ebeln is not initial
- and ebelp is not initial.
- lv_tabix = sy-tabix.
- read table lit_ekpo into lit_ekpo with table key key_prim components ebeln = lit_ekbe-ebeln
- ebelp = lit_ekbe-ebelp.
- check sy-subrc eq 0.
- lit_ekbe_col-matnr = lit_ekpo-matnr.
- lit_ekbe_col-werks = lit_ekpo-werks.
- lit_ekbe_col-menge = lit_ekbe-menge.
- lit_ekbe_col-dmbtr = lit_ekbe-dmbtr.
- assign component lv_sqlfn_date of structure lit_ekbe to <lfs_any>.
- if lit_ekpo-retpo is not initial.
- lit_ekbe_col-menge = - lit_ekbe_col-menge.
- lit_ekbe_col-dmbtr = - lit_ekbe_col-dmbtr.
- endif.
- if lit_ekbe-shkzg = 'H'.
- lit_ekbe_col-menge = - lit_ekbe_col-menge.
- lit_ekbe_col-dmbtr = - lit_ekbe_col-dmbtr.
- endif.
- if <lfs_any> <= lr_calcdt-low.
- lit_ekbe_col-state = lct_state_begin.
- collect lit_ekbe_col.
- endif.
- lit_ekbe_col-state = lct_state_end.
- read table lit_mbew assigning <lfs_mbew> with key matnr = lit_ekbe-matnr bwtar = lit_ekbe-bwtar.
- IF sy-subrc = 0.
- <lfs_mbew>-lbkum = 0.
- ENDIF.
- collect lit_ekbe_col.
- endloop.
- delete lit_ekbe_col where menge is initial.
- free lit_ekbe.
- "добавляем запас в пути в результирующую таблицу
- loop at lit_ekbe_col.
- insert_row_to_result_tab lit_mara lit_ekbe_col-matnr lit_t001w lit_ekbe_col-werks lit_result <lfs_result>.
- "т.к у запаса в пути я нашел суммы, только у отправителя - поэтому умножаем суммы на -1
- lit_ekbe_col-dmbtr = - lit_ekbe_col-dmbtr.
- lit_ekbe_col-menge = - lit_ekbe_col-menge.
- if lit_ekbe_col-state = lct_state_begin.
- add: lit_ekbe_col-menge to <lfs_result>-rembg-menge,
- lit_ekbe_col-dmbtr to <lfs_result>-rembg-dmbtr.
- elseif lit_ekbe_col-state = lct_state_end.
- add: lit_ekbe_col-menge to <lfs_result>-remed-menge,
- lit_ekbe_col-dmbtr to <lfs_result>-remed-dmbtr.
- endif.
- endloop.
- delete lit_mbew where lbkum = 0.
- LOOP AT lit_mbew.
- insert_row_to_result_tab lit_mara lit_mbew-matnr lit_t001w lit_mbew-bwkey lit_result <lfs_result>.
- concatenate lit_mbew-lfgja lit_mbew-lfmon '01' into lfdate.
- IF lfdate < lr_calcdt-low.
- <lfs_result>-rembg-menge = <lfs_result>-rembg-menge + lit_mbew-lbkum.
- <lfs_result>-rembg-dmbtr = <lfs_result>-rembg-dmbtr + lit_mbew-salk3.
- ENDIF.
- IF lfdate <= lr_calcdt-high.
- <lfs_result>-remed-dmbtr = <lfs_result>-remed-dmbtr + lit_mbew-salk3.
- <lfs_result>-remed-menge = <lfs_result>-remed-menge + lit_mbew-lbkum.
- ENDIF.
- ENDLOOP.
- sort lit_mat_group by gnumb.
- clear lsex_result.
- loop at lit_result.
- move-corresponding lit_result to lsex_result.
- read table lit_mara into lit_mara with table key key_prim components matnr = lsex_result-matnr.
- if sy-subrc ne 0. clear lit_mara. endif.
- lsex_result-meins = lit_mara-meins.
- lsex_result-maktx = lit_mara-maktx.
- lsex_result-matkl = lit_mara-matkl.
- read table lit_mat_group with key gnumb = lsex_result-gnumb
- binary search.
- if sy-subrc ne 0. clear lit_mat_group. endif.
- lsex_result-gname = lit_mat_group-gname.
- read table lit_t001 with table key bukrs = lsex_result-bukrs.
- if sy-subrc ne 0. clear lit_t001. endif.
- lsex_result-butxt = lit_t001-butxt.
- read table lit_t023 into lit_t023 with table key key_prim components matkl = lsex_result-matkl.
- if sy-subrc ne 0. clear lit_t023. endif.
- lsex_result-matkl = lit_t023-matkl.
- lsex_result-wgbez = lit_t023-wgbez.
- lsex_result-allin-menge = lsex_result-lifin-menge + lsex_result-bukin-menge.
- lsex_result-allin-dmbtr = lsex_result-lifin-dmbtr + lsex_result-bukin-dmbtr.
- lsex_result-allout-menge = lsex_result-devout-menge + lsex_result-bukout-menge.
- lsex_result-allout-dmbtr = lsex_result-devout-dmbtr + lsex_result-bukout-dmbtr.
- append lsex_result to exit_result.
- endloop.
- * Добовляем отсутствующие в оборотах
- loop at lit_t001.
- loop at lit_mat_group.
- read table exit_result with key bukrs = lit_t001-bukrs
- gnumb = lit_mat_group-gnumb
- binary search
- transporting no fields.
- if sy-subrc ne 0.
- clear lsex_result.
- lsex_result-bukrs = lit_t001-bukrs.
- lsex_result-gnumb = lit_mat_group-gnumb.
- lsex_result-gname = lit_mat_group-gname.
- lsex_result-butxt = lit_t001-butxt.
- if sy-tabix eq 0. sy-tabix = 1. endif.
- insert lsex_result into exit_result index sy-tabix.
- endif.
- endloop.
- endloop.
- endform.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement