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

Enhancement Implementation ZME_PROCESS_PO_CUST Метод IF_EX_ME_PROCESS_PO_CUST~CHECK

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

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