5 1 1 1 1 1 Rating 100% (1 Vote)
Attachments:
Access this URL (http://abapblog.com/files/nugg/ZAB_EXTMD07.nugg)ZAB_EXTMD07.nugg
Tags: MD07 , MS07 , MDC7 , MSC7
You may noticed that standard transaction MD07 and MS07 offers basic filters on selection-screen which allows user to select materials they are responsible for, the problem comes when in your company users wants to be more precise in filtering or when the responsibility is set not only on a base of MRP controller. Fortunately SAP gives us the possibility to call MD07 and MS07 with our own list of materials using dummy transaction codes MDC7 and MSC7. All you need to do is to prepare a table of type MDMWX, export it to memory 'START_MD07and call dummy t-code. Bellow you can find an example of the report to call MD07/MS07 with own material list where on selection screen you can find for example purchasing group which is not available in standard. You can also find a link to nugg file.

Standard screen:



Screen of the own program:

Example code (also found in nugg file here).

report  zab_md07.

type-poolsm61x.
tablesmarc,
        sscrfields,
        mdkpdb.

constantsmemo_id_md07(10type c value 'START_MD07'.

datarm61r like rm61r.
data smp_dyntxt type smp_dyntxt.

typesbegin of t_vendor,
  matnr like eina-matnr,
  lifnr like eina-lifnr,
end of t_vendor.

datag_vendor type t_vendor.
datagt_vendor like standard table of g_vendor.
datagt_mdkp like standard table of mdkp.
datag_dtart like mdkp-dtart.

*--> Table of selected materials
databegin of mdmwx occurs 0.
        include structure mdmw.        "material / plant
dataend of mdmwx.

*--> Sicherung  des Dispokopfes
databegin of gt_mdkps occurs 0.
        include structure mdkp.
databerid like rm61r-berid.
dataend of gt_mdkps.

datagt_mdkpdb like standard table of mdkpdb.
datagt_mdma like standard table of mdma.
field-symbols<mdma> type mdma,
               <vend> type t_vendor,
               <mdkpdb> type mdkpdb,
               <mdkp> type mdkp,
               <mdkps> like line of gt_mdkps.

"add buttons on selection screen to be able to go to MD07, MS07
selection-screenfunction key 1,
                  function key 2.

*--------------------------------------------------------------------*
* Selection screen fields
*--------------------------------------------------------------------*
parameters:     p_plscn like rm61r-plscn.
selection-screen begin of line.
parametersp_dbrkz radiobutton group grp2.
selection-screen comment (28for field s_berid.
select-optionss_berid for rm61r-berid.
selection-screen end of line.
selection-screen begin of line.
parametersp_wrkkz radiobutton group grp2.
selection-screen comment (28for field s_werks.
select-optionss_werks for rm61r-werks.
selection-screen end of line.

selection-screen begin of block blk1 with frame title text-bl1.
  parameters:
          p_dspkz radiobutton group grp1,
          p_liekz radiobutton group grp1.
selection-screen end of block blk1.

selection-screen begin of block blk2 with frame title text-bl2.
select-optionss_matnr for marc-matnr,
                s_ekgrp for marc-ekgrp,
                s_dispo for marc-dispo,
                s_dismm for marc-dismm,
                s_lifnr for rm61r-lifnr.

selection-screen end of block blk2.


selection-screen begin of block blk3 with frame title text-bl3.
parameters:   p_dfilt like rm61r-dfilt,
              p_filbz like rm61r-filbz,
              p_ergbz like rm61r-ergbz.
selection-screen end of block blk3.

*--------------------------------------------------------------------*
*
*--------------------------------------------------------------------*

at selection-screen.
  case sscrfields-ucomm.
    when 'FC01'.
      call transaction 'MD07'.
    when 'FC02'.
      call transaction 'MS07'.
  endcase .


initialization.
*additional icons on selecetion screen
  clear smp_dyntxt.
  smp_dyntxt-text text-s01.
  smp_dyntxt-icon_id '@79@'.
  smp_dyntxt-icon_text text-s01.
  smp_dyntxt-quickinfo text-s01.
  smp_dyntxt-path 'T'.
  sscrfields-functxt_01 smp_dyntxt.
  clear smp_dyntxt.
  smp_dyntxt-text text-s02.
  smp_dyntxt-icon_id '@79@'.
  smp_dyntxt-icon_text text-s02.
  smp_dyntxt-quickinfo text-s02.
  smp_dyntxt-path 'T'.
  sscrfields-functxt_02 smp_dyntxt.

start-of-selection.

  if s_werks[] is initial and s_berid[] is initial.
    message s663(61).
*   Enter plant or MRP area
    exit.
  elseif s_werks[] is initial and p_wrkkz eq 'X'.
    message s664(61).
*   Enter a plant
    exit.
  elseif s_berid[] is initial and p_dbrkz eq 'X'.
    message s665(61).
*   Enter an MRP area
    exit.
  endif.
  if s_lifnr[] is initial and p_liekz eq 'X'.
    message s619(61).
*   Please specity valid vendor
    exit.
  endif.
  if s_dispo[] is initial and p_dspkz eq 'X'.
    message s677(61).
*   Please enter an MRP controller
    exit.
  endif.

  if p_wrkkz eq 'X'"select materials by plant
    select matnr werks werks as berid from marc
    
into corresponding fields of table gt_mdma
    
where werks in s_werks
    
and   matnr in s_matnr
    
and   ekgrp in s_ekgrp
    
and   dispo in s_dispo
    
and   dismm in s_dismm.
  elseif p_dbrkz eq 'X'"select material by MRP area
    select mdma~matnr mdma~werks mdma~berid
    
into corresponding fields of table gt_mdma
    
from mdma
    inner 
join marc as marc
    
on  marc~matnr eq mdma~matnr
    
and marc~werks eq mdma~werks
    
where mdma~matnr in s_matnr
    
and mdma~berid in s_berid
    
and mdma~dismm in s_dismm
    
and mdma~dispo in s_dispo
    
and marc~ekgrp in s_ekgrp.
  endif.

  sort gt_mdma by matnr werks berid.
  delete adjacent duplicates from gt_mdma comparing all fields.

  "check if we want to filter material on a base of inforecords
  " for vendor
  if gt_mdma[] is not initial and s_lifnr[] is not initial.
    "select material for vendors
    select matnr lifnr from eina
    
into corresponding fields of table gt_vendor
    
for all entries in gt_mdma
    
where lifnr in s_lifnr
    
and   matnr eq gt_mdma-matnr
    and   loekz eq space.

    sort gt_vendor by matnr lifnr.
    delete adjacent duplicates from gt_vendor comparing matnr.
  endif.


  if p_liekz eq 'X'"filter materials for selected vendors
    loop at gt_mdma assigning <mdma>.
      read table gt_vendor assigning <vend> with key matnr <mdma>-matnr
      binary search.
      if sy-subrc eq 0.
        move <mdma>-matnr to mdmwx-matnr.
        move <mdma>-werks to mdmwx-werks.
        move <mdma>-berid to mdmwx-berid.
        append mdmwxclear mdmwx.
      endif.
    endloop.
  else"append all materials to MDMWX
    loop at gt_mdma assigning <mdma>.
      move <mdma>-matnr to mdmwx-matnr.
      move <mdma>-werks to mdmwx-werks.
      move <mdma>-berid to mdmwx-berid.
      append mdmwxclear mdmwx.
    endloop.
  endif.


  move p_plscn to rm61r-plscn.
  move p_dbrkz to rm61r-dbrkz.
  move p_wrkkz to rm61r-wrkkz.
  move p_dspkz to rm61r-dspkz.

  movep_dfilt to rm61r-dfilt,
  p_filbz to rm61r-filbz,
  p_ergbz to rm61r-ergbz.

end-of-selection.

"check if our table is not empty
  if mdmwx[] is initial.
    message e085(61).
  endif.

*--> export of table MDMWX to the memory (note 1019303)
  export mdmwx rm61r-plscn rm61r-werks rm61r-dispo
  rm61r-dspkz rm61r-berid
  rm61r-dfilt rm61r-filbz rm61r-ergbz
  
to memory id memo_id_md07.

*--> Start of dummy-Transaction, which simulates the entry screen
*    of transaction MD07 or MS07.
  if rm61r-plscn is initial.                                "HW 652438
    call transaction 'MDC7' and skip first screen.
  else.
    call transaction 'MSC7' and skip first screen.
  endif.

Enjoy!