Движение ТМЦ в соответствии с планом производства. Запрет движения ТМЦ, наносящего экономический ущерб предприятию. Проверка движения со складов ДОП на наличие введенных замен, запрет движения без замен.

Enhancement Implementation ZME_PROCESS_PO_CUST Метод IF_EX_ME_PROCESS_PO_CUST~CHECK

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
zhm_cl_pp=>get_alt_mat_postavka( exporting matnr = ls_item_plan-matnr
werks = ls_item_plan-werks
reslo = ls_item_plan-reslo
lgort = ls_item_plan-lgort
importing not_found_zam = not_found_zam ).
method GET_ALT_MAT_POSTAVKA.
types: begin of ty_werks,
        werks type werks_d,
       end of ty_werks.
types: begin of ty_node,
        node type matnr,
       end of ty_node.
types: begin of ty_bom,
        matnr type mast-matnr,
        matnr_ext type materialid-matnr_ext,
        werks type mast-werks,
        stlan type mast-stlan, "Использование спецификации
        stlal type mast-stlal,
*        stlnr type mast-stlnr, "Номер спецификации
*        idnrk type stpo-idnrk, " Компонент спецификации
*        ewahr type stpo-ewahr, "Использование для группы альтернативных позиций 100% или 0 - вероятность
*        alpgr type stpo-alpgr,"Название группы альтернативных позиций
       end of ty_bom.
  data: lt_zppmrp5_dop_dop type table of zppmrp5_dop,
        ls_zppmrp5_dop type zppmrp5_dop,
        it_werks type ty_werks,
        lt_po_header type table of bapiekkol,
        lt_po_items type table of bapiekpoc,
        lv_ceh type zceh,
        lv_ceh_check type char04,
        dismm type dismm,
        pbdnr type zppmrp5_dop-pbdnr,
        mtart type mtart,
        zbesk type zbesk,
        matnr_temp type matnr,
        ceh type char04,
        it_eban type table of eban,
        t_stpo type table of stpo_api02,
        i_stko type stko_api01,
        tchng_stpo type table of stpo_api02,
        tchng_stpo_write type table of stpo_api03,
        t_stpo_gr type table of stpo_api02,
        tchng_stko type table of stko_api02,
        ls_stko  type stko_api02,
        t_stko type table of stko_api02,
        fl_warning type capiflag-flwarning,
        data type csap_mbom-datuv,
        it_node type table of ty_node,
        it_node_m2 type table of ty_node,
        matnr_ext type matnr_ext,
        it_bom type table of ty_bom,
        it_bom_temp type table of ty_bom,
        i type i,
        lt_stpov       type table of stpov,
        lt_equicat     type table of cscequi,
        lt_kndcat      type table of cscknd,
        lt_matcat      type table of cscmat,
        lt_tplcat      type table of csctpl,
        lt_stdcat      type table of cscstd.

field-symbols: <fs_po_items> type bapiekpoc,
               <fs_zppmrp5_dop> type zppmrp5_dop,
               <fs_bom> type ty_bom,
               <fs_bom_temp> type ty_bom,
               <fs_stpo> type stpo_api02,
               <fs_stpo_gr> type stpo_api02,
               <fs_chng_stpo> type stpo_api02,
               <fs_tchng_stpo_write> type stpo_api03,
               <fs_node> type ty_node,
               <fs_node_m2> type ty_node,
               <fs_matcat> type cscmat,
               <fs_werks> type ty_werks,
               <fs_eban> type eban.
*-->Определение номера цеха для выбора из result
  if lgort(1) = 'T' or lgort(1) = 'R' or lgort(1) = 'L' or lgort(1) = 'D'.
    lv_ceh_check = lgort+1(3).
  else.
    lv_ceh_check = lgort(2).
  endif.
  if lgort = 'D241'.
    lv_ceh_check = '100'.
  endif.
  select single matnr into matnr_temp from zppmrp5_dop
    where matnr_1 = matnr and  arbpl_2 = lv_ceh_check.
  if sy-subrc <> 0.
    not_found_zam = 'X'.
    select single matnr_m into matnr_temp from zbazmod inner join zppmrp5_dop on zbazmod~matnr_m = zppmrp5_dop~matnr_1
      where matnr_b = matnr and  arbpl_2 = lv_ceh_check.
      if sy-subrc = 0.
        clear not_found_zam.
      endif.
    if not_found_zam = 'X'.
      select single matnr_b into matnr_temp from zbazmod inner join zppmrp5_dop on zbazmod~matnr_b = zppmrp5_dop~matnr_1
        where matnr_m = matnr and  arbpl_2 = lv_ceh_check.
        if sy-subrc = 0.
          clear not_found_zam.
        endif.
    endif.
    if not_found_zam = 'X'.
      select single matnr_m into matnr_temp
        from zvrazr_pos inner join zvrazr_head on zvrazr_pos~id = zvrazr_head~id inner join zppmrp5_dop on zvrazr_pos~matnr_m = zppmrp5_dop~matnr_1
        where matnr_b = matnr and zvrazr_pos~del = '' and srok  >= sy-datum  and  arbpl_2 = lv_ceh_check.
        if sy-subrc = 0.
          clear not_found_zam.
        endif.
    endif.
    if not_found_zam = 'X'.
      select single matnr_b into matnr_temp
        from zvrazr_pos inner join zvrazr_head on zvrazr_pos~id = zvrazr_head~id inner join zppmrp5_dop on zvrazr_pos~matnr_b = zppmrp5_dop~matnr_1
        where matnr_m = matnr and zvrazr_pos~del = '' and srok  >= sy-datum  and  arbpl_2 = lv_ceh_check.
        if sy-subrc = 0.
          clear not_found_zam.
        endif.
    endif.
  else.
    not_found_zam = ''.
  endif.

*Поиск замен в ГДЗ
  if not_found_zam = 'X'.
*Получаем список узлов в которые входит материал
    call function 'CS_WHERE_USED_MAT'
      exporting
        datub                      = sy-datum
        datuv                      = sy-datum
        matnr                      = matnr
        werks                      = werks "zcl_rd_constants=>c_werks_mask "'*'
*        stlan                      = lv_bom_usage
*        stltp                      = lv_stltp
      tables
        wultb                      = lt_stpov[]
        equicat                    = lt_equicat[]
        matcat                     = lt_matcat[]
        kndcat                     = lt_kndcat[]
        stdcat                     = lt_stdcat[]
        tplcat                     = lt_tplcat[]
      exceptions
        call_invalid               = 1
        material_not_found         = 2
        no_where_used_rec_found    = 3
        no_where_used_rec_selected = 4
        no_where_used_rec_valid    = 5.
*    loop at lt_matcat assigning <fs_matcat>.
*      append initial line to it_node assigning <fs_node>.
*      <fs_node>-node = <fs_matcat>-matnr.
*      unassign <fs_node>.
*    endloop.
    sort lt_matcat by matnr.
    delete adjacent duplicates from lt_matcat comparing matnr .
    if lt_matcat[] is not initial.
    select matnr_2 as node into corresponding fields of table it_node_m2 from zppmrp5_dop where  arbpl_2 = lv_ceh_check.
      loop at it_node_m2 assigning <fs_node_m2>.
        read table lt_matcat assigning <fs_matcat> with key matnr = <fs_node_m2>-node.
        if sy-subrc = 0.
          append initial line to it_node assigning <fs_node>.
          <fs_node>-node = <fs_matcat>-matnr.
          unassign <fs_node>.
        endif.
      endloop.
    endif.
    select single matnr_ext into matnr_ext from materialid where matnr_int = matnr.
    sort it_node by node.
    delete adjacent duplicates from it_node.
    loop at it_node assigning <fs_node>.
*Получаем действующие спецификации
      select mast~matnr           as matnr
             materialid~matnr_ext as matnr_ext
             mast~werks           as werks
             mast~stlan           as stlan
             mast~stlal           as stlal
        into table it_bom
        from mast
                  inner join stko
                                  on mast~werks = stko~wrkan
                                 and mast~stlnr = stko~stlnr
                                 and mast~stlal = stko~stlal

                  inner join stpo
                                  on stko~stlty = stpo~stlty
                                 and stko~stlnr = stpo~stlnr

                  inner join materialid
                                  on materialid~matnr_int = mast~matnr

                  inner join mkal
                                  on mast~matnr = mkal~matnr
                                 and mast~stlan = mkal~stlan
        where alpgr <> ''
          and ( mast~stlan = 1 or mast~stlan = 3 )
          and mast~matnr = <fs_node>-node
          and mkal~adatu <= sy-datum
          and mkal~bdatu >= sy-datum
          and mksp = ''.
      sort it_bom by matnr werks stlan stlal.
      delete adjacent duplicates from it_bom.

*  Получаем позиции спецификации
      it_bom_temp = it_bom.
      loop at it_bom assigning <fs_bom>.
        call function 'CSAP_MAT_BOM_READ'
            exporting
              material             = <fs_bom>-matnr_ext
              plant                = <fs_bom>-werks
              bom_usage            = <fs_bom>-stlan
              alternative          = <fs_bom>-stlal
            tables
              t_stpo               = t_stpo
              t_stko               = t_stko
            exceptions
              error                = 1
              others               = 2.
        delete t_stpo where ai_group = ''." and rel_engin = 'X'.
        t_stpo_gr = t_stpo.
        sort t_stpo_gr by ai_group.
        delete adjacent duplicates from t_stpo_gr.
        loop at t_stpo_gr assigning <fs_stpo_gr> where component = matnr_ext.
          loop at t_stpo assigning <fs_stpo> where ai_group = <fs_stpo_gr>-ai_group.
            select single matnr_1 into matnr_temp  from zppmrp5_dop inner join materialid on zppmrp5_dop~matnr_1 = materialid~matnr_int where matnr_ext = <fs_stpo>-component and  arbpl_2 = lv_ceh_check.
            if sy-subrc = 0.
              clear not_found_zam.
              loop at it_bom_temp assigning <fs_bom_temp> where matnr_ext = <fs_bom>-matnr_ext.

                 call function 'CSAP_MAT_BOM_READ'
                    exporting
                      material             = <fs_bom_temp>-matnr_ext
                      plant                = <fs_bom_temp>-werks
                      bom_usage            = <fs_bom_temp>-stlan
                      alternative          = <fs_bom_temp>-stlal
                    tables
                      t_stpo               = tchng_stpo
                      t_stko               = tchng_stko
                    exceptions
                      error                = 1
                      others               = 2.

                 clear tchng_stpo_write.
                 loop at tchng_stpo assigning <fs_chng_stpo>.
                   if <fs_chng_stpo>-component = matnr_ext.
                     <fs_chng_stpo>-usage_prob = 100.
                   else.
                     <fs_chng_stpo>-usage_prob = 0.
                   endif.
                   append initial line to tchng_stpo_write assigning <fs_tchng_stpo_write>.
                   move-corresponding <fs_chng_stpo> to <fs_tchng_stpo_write>.
                   unassign <fs_tchng_stpo_write>.
                 endloop.
                clear ls_stko.
                read table tchng_stko into ls_stko index 1.
                move-corresponding ls_stko to i_stko.
                concatenate sy-datum+6(2) '.' sy-datum+4(2) '.' sy-datum(4) into data.
                i = 0.
                loop at tchng_stpo_write assigning <fs_tchng_stpo_write>.
                  if <fs_tchng_stpo_write>-usage_prob > 0.
                    i = i + 1.
                  endif.
                endloop.
                if i = 1.
                  call function 'CSAP_MAT_BOM_MAINTAIN'
                    exporting
                      material           = <fs_bom_temp>-matnr_ext
                      plant              = <fs_bom_temp>-werks
                      bom_usage          = <fs_bom_temp>-stlan
                      alternative        = <fs_bom_temp>-stlal
                      fl_no_change_doc = ''
*                      change_no          = '500000069609'
                      fl_commit_and_wait = 'X'  "Synchronous update
                      i_stko             = i_stko
                      valid_from = data
                      fl_bom_create = ' '
                      fl_new_item = ' '
                    importing
                      fl_warning = fl_warning
                    tables
                      t_stpo             = tchng_stpo_write
*                     t_dep_data         = deps
*                      t_dep_order        = ords
                    exceptions
                      error              = 1
                      others             = 2.
                endif.
              endloop.
              exit.
            endif.
          endloop.
          if not_found_zam is initial.
            exit.
          endif.
        endloop.
        if not_found_zam is initial.
          exit.
        endif.
      endloop.
      if not_found_zam is initial.
        exit.
      endif.
    endloop.
  endif.
endmethod.

 

  • ZBRAK_SETTING —  транзакция для настройки движения брака
  • ZME21N_PDU — транзакция для создания заказов на перемещение из  таблицы: ZSTOPPOST_LOG — лог попыток создания перемещений сверх плана производства
  • ZSTOPPOST_MOTIVE транзакция для ведения причин остановки движений деталей сверх плана производства
  • ZPBDNR_ALLOWтранзакция для ведения разрешенных номеров планов для перемещения
  • ZCOPY_STOPPOST_LOGтранзакция для удаления и копирования записей из таблицы  zstoppost_log в zstoppost_log_dl
  • ZNOPLANТаблица исключений при проверке сверхпоставок
  • ZCEHCHECKPLAN  Проверка плана только  для цехов из таблицы/транзакции, складов ДОП
  • ZPPMRP1_LIMIT — Копирование данных из zppmrp1 — первичная потребность
  • ZPPMRP1_LIMIT_R — Ввод лимита плана
  • ZPPMRP1_LIMIT_CALC — Расчет лимита

Расчет  процента плана по регламенту в классе ZCL_PPMRP(транзакция se24) метод COPY_TMP_TO_ZPPMRP5

Доработки/замечания:

  1. Разрешать создавать заказы для ПДУ по ЛОГУ только на текущую дату.
  2. EBELN   =  ‘№ЗакПеремещ’. записываем при создании заказа ПДУ в транзакции ZME21N_PDU
  3. MENGE_PO ‘СумЗак’. Количество созданных заказов за сутки  aedat = sydatum group by matnr reslo lgort. по материалу, складу отправителю и складу получателю
  4. 3 поля добавить zak, zaya, plan_result
  5. Доработать загрузку из ekpo
  6. Пометить и чекбокс LOEKZ из транзакции пду удаленные позиции
  7. временный взять из екко по номеру
  8. временно сохраненные подряд 2 раза не перезаписывать, сейчас перезаписывает(размножить строки)
  9. Выбор номера заказа на первом экране
  10. В транзакции  ZME21N_PDU  добавить дополнительное поле на первый экран «№ЗакПеремещ» (EBELN)
  11. В транзакции  ZME21N_PDU  №заказа на перемещ. должен прописываться в каждой строке
  12. ДОБАВИТЬ ПРОВЕРКУ НА ТАБЛИЦУ ИСКЛЮЧЕНИЙ ПО МАТЕРЬЯЛУ (ZNOPLAN — Исключение проверки сверхпоставок
  13. Неправильное отображение количества в стоп логе в колонке «Кол. отправки» (поле MENGE)
  14. Дубли неправильные цифры кол отправки попыток сумбур
  15. Неправильно виды заказов и скл

создаем таблицу из zppmrp1

всю + поле GAMNG_LIMIT+дата +изменил

Уткин Валерьевич, [07.02.19 07:52]
Копирование производит тр ZPPMRP1_LIMIT
работает практически в автоматическом режиме — выгружает ,но не то что нужно
для нее нужен первый экран где по фильту можно произвести выбор выгружаемой номенклатуры

Уткин Валерьевич, [07.02.19 07:59]
на первом экране должны быть поля
SEQNR =3
MATNR — изделие
PBDNR -план потребности
после выбора нужно проверить что выгрузилось и произвести выгрузку в ZPPMRP1_LIMIT_R

Добавить комментарий