How to hide results not within the date range?

Question: Hello! This report is supposed to show goods movements within a date range, or materials without a movement within the date range.

When the program is run to show materials with goods movements within the date range, the valid materials show up with the
correct information, but the other invalid materials appear as well.

How can I hide these materials?



************************************************************************
*   Program Name    : ZMBTEST009AB
*   Author          :
*   Date            : 08/04/2003
*   Description     : List material movements by date and type
************************************************************************
* Modification Log
* Author     Date   Change Request   Description
*  SKM    01/05/2005  DEVK921735     Enable selection by manufacturer.
************************************************************************
REPORT ZMBTEST009 NO STANDARD PAGE HEADING LINE-SIZE 255.
TABLES: MARA, LFA1, MSEG, MKPF, MAKT, MBEW, MVKE, MARD, LQUA.

SELECTION-SCREEN BEGIN OF BLOCK MATT1 WITH FRAME TITLE TEXT-003.
SELECT-OPTIONS: SO_DATE FOR SY-DATUM OBLIGATORY.
SELECT-OPTIONS: SO_MATNR FOR MARA-MATNR.
SELECT-OPTIONS: SO_LABOR FOR MARA-LABOR DEFAULT 'ST'.
SELECT-OPTIONS: SO_MATKL FOR MARA-MATKL.          "obligatory.
SELECT-OPTIONS: SO_PRDHA FOR MARA-PRDHA.
SELECT-OPTIONS: SO_MFRNR FOR MARA-MFRNR.
SELECT-OPTIONS: SO_MSTAE FOR MARA-MSTAE.
SELECT-OPTIONS: SO_BWART FOR MSEG-BWART.
SELECT-OPTIONS: SO_BUKRS FOR MSEG-BUKRS DEFAULT '0010'. " obligatory.
SELECT-OPTIONS: SO_MVGR5 FOR MVKE-MVGR5.
PARAMETER: P_WERKS LIKE MSEG-WERKS DEFAULT '1003'. " obligatory.

SELECTION-SCREEN END OF BLOCK MATT1.
SELECTION-SCREEN BEGIN OF BLOCK MATT2 WITH FRAME TITLE TEXT-001.
PARAMETER: P_DEAD AS CHECKBOX.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(79) TEXT-002.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK MATT2.

DATA: W_DEAD(1).

DATA: BEGIN OF ITAB OCCURS 0,
MATNR LIKE MARA-MATNR,                 "Material number
MATNR2 LIKE MSEG-MATNR,                "MSEG material number
MFRNR LIKE MARA-MFRNR,                 "Vendor
LABOR LIKE MARA-LABOR,                 "Lab office
MATKL LIKE MARA-MATKL,                 "Material group
PRDHA LIKE MARA-PRDHA,                 "Product hierarchy
MSTAE LIKE MARA-MSTAE,                 "X-Plant status
BWART LIKE MSEG-BWART,                 "Movement type
BUKRS LIKE MSEG-BUKRS,                 "Company code
WERKS LIKE MSEG-WERKS,                 "Plant
MEINS LIKE MARA-MEINS,                 "Unit of measure
NAME1(26),                             "Vendor name
MENGE(10),                             "Quantity
BUDAT LIKE MKPF-BUDAT,                 "Posting date
MAKTX LIKE MAKT-MAKTX,                 "Material description
LABST LIKE MARD-LABST,                 "Quantity On-Hand
VERPR LIKE MBEW-VERPR,                 "Moving average price
MVGR5 LIKE MVKE-MVGR5,                 "Material group 5 (salesperson)
LGORT LIKE MSEG-LGORT,                 "Storage Location
MFRPN LIKE MARA-MFRPN,                 "Mfr part number
LGPLA LIKE LQUA-LGPLA,                 "Storage bin
LGTYP LIKE LQUA-LGTYP,                 "Storage type
BDATU LIKE LQUA-BDATU,                 "Date of last movement
MBLNR LIKE MSEG-MBLNR,                 "Document number
W_DEAD(1).                             "Indicates dead item or not
DATA: END OF ITAB.

DATA: BEGIN OF T_MARA OCCURS 100.
        INCLUDE STRUCTURE MARA.
DATA: END OF T_MARA.
*
DATA: BEGIN OF T_MAKT OCCURS 100.
        INCLUDE STRUCTURE MAKT.
DATA: END OF T_MAKT.
*
DATA: BEGIN OF T_MARD OCCURS 100.
        INCLUDE STRUCTURE MARD.
DATA: END OF T_MARD.
*
DATA: BEGIN OF T_MBEW OCCURS 100.
        INCLUDE STRUCTURE MBEW.
DATA: END OF T_MBEW.
*
DATA: BEGIN OF T_MVKE OCCURS 100.
        INCLUDE STRUCTURE MVKE.
DATA: END OF T_MVKE.
*
DATA: BEGIN OF T_LFA1 OCCURS 100.
        INCLUDE STRUCTURE LFA1.
DATA: END OF T_LFA1.
*
DATA: BEGIN OF T_LQUA OCCURS 100.
        INCLUDE STRUCTURE LQUA.
DATA: END OF T_LQUA.


DATA: WA_UU LIKE MARD-LABST.           "Stock for all storage locations
DATA: WA_BUDAT LIKE MKPF-BUDAT.        "Last material movement date
DATA: WA_BWART LIKE MSEG-BWART.
DATA: WA_BUKRS LIKE MSEG-BUKRS.
DATA: WA_WERKS LIKE MSEG-WERKS.
DATA: WA_MENGE LIKE MSEG-MENGE.
DATA: WA_MBLNR LIKE MSEG-MBLNR.

INITIALIZATION.
* Calculate 3 months range.
  DATA: BEGIN OF T_DATRANGE OCCURS 0.
          INCLUDE STRUCTURE RSDATRANGE.
  DATA: END OF T_DATRANGE.
  DATA: BEGIN OF T_INTRANGE OCCURS 0.
          INCLUDE STRUCTURE RSINTRANGE.
  DATA: END OF T_INTRANGE.
  CALL FUNCTION 'RS_VARI_V_LAST_MONTH'
       TABLES
            P_DATETAB  = T_DATRANGE
            P_INTRANGE = T_INTRANGE
       EXCEPTIONS
            OTHERS     = 1.

  DATA: W_DATEXT LIKE SY-DATUM.
  DATA: W_DATIMP LIKE T_DATRANGE-HIGH.
  DATA: W_MONTH TYPE P.
  W_DATEXT = SY-DATUM.
  W_MONTH = -3.
  CALL FUNCTION 'CALCULATE_DATE'
       EXPORTING
*             days        = '0'
            MONTHS      = W_MONTH
            START_DATE  = W_DATEXT
       IMPORTING
            RESULT_DATE = W_DATIMP
       EXCEPTIONS
            OTHERS      = 1.
  SO_DATE-LOW = W_DATIMP.
  SO_DATE-HIGH = SY-DATUM.
  APPEND SO_DATE.

TOP-OF-PAGE.
  FORMAT COLOR 5 INTENSIFIED OFF.
*  if p_dead = space.
  WRITE: / 'Material', AT 20 SY-VLINE,
  AT 21 'Material Description', AT 60 SY-VLINE,
  AT 61 'Vnd #', AT 71 SY-VLINE,
  AT 72 'Vnd Name', AT 98 SY-VLINE,
  AT 99 'L/O', AT 104 SY-VLINE,
  AT 105 'Hier', AT 124 SY-VLINE,
  AT 125 'X-Pl', AT 130 SY-VLINE,
  AT 131 'Move', AT 136 SY-VLINE,
  AT 137 'Code', AT 142 SY-VLINE,
  AT 143 'Plnt', AT 148 SY-VLINE,
  AT 154 'Qty', AT 161 SY-VLINE,
  AT 162 'UOM', AT 166 SY-VLINE,
  AT 167 'Date', AT 178 SY-VLINE,
  AT 179 'Document  ', AT 190 SY-VLINE,
  AT 191 'Group', AT 197 SY-VLINE,
  AT 204 'On Hand', AT 216 SY-VLINE,
  AT 217 'UOM', AT 221 SY-VLINE,
  AT 233 'MAP($)', AT 239 SY-VLINE,
  AT 240 'MG5', AT 244 SY-VLINE,
  AT 245 'Bin #', AT 255 SY-VLINE.

START-OF-SELECTION.
  PERFORM GET_DATA.
  PERFORM WRITE_ITAB.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
FORM GET_DATA.

  SELECT * FROM MARA INTO TABLE T_MARA
  WHERE MATNR IN SO_MATNR              "Material
  AND LABOR IN SO_LABOR                "Lab/Office
  AND MFRNR IN SO_MFRNR                "Manufacturer number
  AND PRDHA IN SO_PRDHA                "Product hierarchy
  AND MSTAE IN SO_MSTAE                "X-Plant status
  AND MATKL IN SO_MATKL.               "Material group

  SORT T_MARA BY MATNR.

  SELECT * FROM MAKT INTO TABLE T_MAKT "Material description
    FOR ALL ENTRIES IN T_MARA
      WHERE MATNR = T_MARA-MATNR.

  SELECT * FROM MARD INTO TABLE T_MARD "Unrestricted stock
    FOR ALL ENTRIES IN T_MARA
      WHERE MATNR = T_MARA-MATNR
        AND WERKS = P_WERKS.

  SELECT * FROM MVKE INTO TABLE T_MVKE "Vendor (MatGrp 5)
    FOR ALL ENTRIES IN T_MARA
      WHERE MATNR = T_MARA-MATNR.

  SELECT * FROM LQUA INTO TABLE T_LQUA "Date of last movement
    FOR ALL ENTRIES IN T_MARA
      WHERE MATNR = T_MARA-MATNR.

  SELECT * FROM MBEW INTO TABLE T_MBEW "Moving Avg. Price
    FOR ALL ENTRIES IN T_MARA
      WHERE MATNR = T_MARA-MATNR
        AND BWKEY IN SO_BWART.

  SELECT * FROM LFA1 INTO TABLE T_LFA1 "Vendor Name
    FOR ALL ENTRIES IN T_MARA
      WHERE LIFNR = T_MARA-MFRNR.

  SORT T_MARA BY MATNR.
  SORT T_MAKT BY MATNR.
  SORT T_MARD BY MATNR.
  SORT T_MVKE BY MATNR.
  SORT T_LQUA BY MATNR.
  SORT T_MBEW BY MATNR.
  SORT T_LFA1 BY LIFNR.

  LOOP AT T_MARA.

    CLEAR: T_MAKT, T_MARD, T_MVKE, T_LQUA, T_MBEW, T_LFA1, WA_UU.
    LOOP AT T_MAKT WHERE MATNR = T_MARA-MATNR.
    ENDLOOP.
    LOOP AT T_MARD WHERE MATNR = T_MARA-MATNR.
      WA_UU = WA_UU + T_MARD-LABST.    "Stock for all locations in plant
    ENDLOOP.
    LOOP AT T_MVKE WHERE MATNR = T_MARA-MATNR.
    ENDLOOP.
    LOOP AT T_LQUA WHERE MATNR = T_MARA-MATNR.
    ENDLOOP.
    LOOP AT T_MBEW WHERE MATNR = T_MARA-MATNR.
    ENDLOOP.
    LOOP AT T_LFA1 WHERE LIFNR = T_MARA-MFRNR.
    ENDLOOP.

* Determine if a movement exists during the specified time frame.
*  Retrieve the last movement.
    CLEAR: MSEG, MKPF, WA_BUDAT, WA_BWART, WA_BUKRS, WA_WERKS, WA_MENGE,
           WA_MBLNR.
    SELECT * FROM MSEG                 "Material # to compare
    WHERE MATNR = T_MARA-MATNR         "Movement type
    AND WERKS = P_WERKS                "Plant/Company code
    AND BUKRS IN SO_BUKRS              "Quantity
    AND BWART IN SO_BWART.             "Document number
      IF SY-SUBRC = 0.
        SELECT SINGLE * FROM MKPF      "Posting Date
        WHERE BUDAT IN SO_DATE
        AND MBLNR = MSEG-MBLNR
        AND MJAHR = MSEG-MJAHR.
        IF SY-SUBRC = 0.
*          if mkpf-budat >= wa_budat.
            WA_BUDAT = MKPF-BUDAT.
            WA_BWART = MSEG-BWART.
            WA_BUKRS = MSEG-BUKRS.
            WA_WERKS = MSEG-WERKS.
            WA_MENGE = MSEG-MENGE.
            WA_MBLNR = MSEG-MBLNR.
          ENDIF.
        ENDIF.
*     endif.
    ENDSELECT.

    PERFORM APPEND_ITAB.

  ENDLOOP.
ENDFORM.                               " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  APPEND_ITAB
*&---------------------------------------------------------------------*
FORM APPEND_ITAB.

  CLEAR ITAB.
  ITAB-MATNR = T_MARA-MATNR.
  ITAB-MFRNR = T_MARA-MFRNR.
  ITAB-LABOR = T_MARA-LABOR.
  ITAB-PRDHA = T_MARA-PRDHA.
  ITAB-MSTAE = T_MARA-MSTAE.
  ITAB-BWART = WA_BWART.
  ITAB-BUKRS = WA_BUKRS.
  ITAB-WERKS = WA_WERKS.
  ITAB-MEINS = T_MARA-MEINS.
  ITAB-MENGE = WA_MENGE.
  ITAB-NAME1 = T_LFA1-NAME1.
  ITAB-MBLNR = WA_MBLNR.
  ITAB-BUDAT = WA_BUDAT.
  ITAB-MAKTX = T_MAKT-MAKTX.
  ITAB-MATKL = T_MARA-MATKL.
  ITAB-MFRPN = T_MARA-MFRPN.
  ITAB-VERPR = T_MBEW-VERPR.
  ITAB-MVGR5 = T_MVKE-MVGR5.
  ITAB-LGTYP = T_LQUA-LGTYP.
  ITAB-LGPLA = T_LQUA-LGPLA.
  ITAB-BDATU = T_LQUA-BDATU.
  ITAB-LABST = WA_UU.
  IF NOT WA_BUDAT IS INITIAL.
    ITAB-W_DEAD = ' '.
  ELSE.
    ITAB-W_DEAD = 'X'.
  ENDIF.

  APPEND ITAB.

ENDFORM.                               " APPEND_ITAB

*&---------------------------------------------------------------------*
*&      Form  WRITE_ITAB
*&---------------------------------------------------------------------*
FORM WRITE_ITAB.

  SORT ITAB BY MATNR BWART BUDAT.
  LOOP AT ITAB.

* Write all records with movement existance.
    IF P_DEAD = SPACE
    AND ITAB-W_DEAD IS INITIAL.
      FORMAT COLOR 2 INTENSIFIED OFF.
      WRITE: / ITAB-MATNR, AT 20 SY-VLINE,
               AT 21 ITAB-MAKTX, AT 60 SY-VLINE,
               AT 61 ITAB-MFRNR, AT 71 SY-VLINE,
               AT 72 ITAB-NAME1, AT 98 SY-VLINE,
               AT 99 ITAB-LABOR, AT 104 SY-VLINE,
               AT 105 ITAB-PRDHA, AT 124 SY-VLINE,
               AT 125 ITAB-MSTAE, AT 130 SY-VLINE,
               AT 131 ITAB-BWART, AT 136 SY-VLINE,
               AT 137 ITAB-BUKRS, AT 142 SY-VLINE,
               AT 143 ITAB-WERKS, AT 148 SY-VLINE,
               AT 152 ITAB-MENGE, AT 161 SY-VLINE,
               AT 162 ITAB-MEINS, AT 166 SY-VLINE,
               AT 167 ITAB-BUDAT, AT 178 SY-VLINE,
               AT 179 ITAB-MBLNR, AT 190 SY-VLINE,
               AT 193 ITAB-MATKL, AT 197 SY-VLINE,
               AT 198 ITAB-LABST, AT 216 SY-VLINE,
               AT 217 ITAB-MEINS, AT 221 SY-VLINE,
               AT 224 ITAB-VERPR, AT 239 SY-VLINE,
               AT 240 ITAB-MVGR5, AT 244 SY-VLINE,
               AT 245 ITAB-LGPLA, AT 255 SY-VLINE.

* Write only those records without a movement and having stock.
    ELSE.
      IF ITAB-W_DEAD = 'X'
      AND ITAB-LABST <> 0.
        FORMAT COLOR 2 INTENSIFIED OFF.
        WRITE: / ITAB-MATNR, AT 20 SY-VLINE,
                 AT 21 ITAB-MAKTX, AT 60 SY-VLINE,
                 AT 61 ITAB-MFRNR, AT 71 SY-VLINE,
                 AT 72 ITAB-NAME1, AT 98 SY-VLINE,
                 AT 99 ITAB-LABOR, AT 104 SY-VLINE,
                 AT 105 ITAB-PRDHA, AT 124 SY-VLINE,
                 AT 125 ITAB-MSTAE, AT 130 SY-VLINE,
                 AT 131 ITAB-BWART, AT 136 SY-VLINE,
                 AT 137 ITAB-BUKRS, AT 142 SY-VLINE,
                 AT 143 ITAB-WERKS, AT 148 SY-VLINE,
                 AT 152 ITAB-MENGE, AT 161 SY-VLINE,
                 AT 162 ITAB-MEINS, AT 166 SY-VLINE,
                 AT 167 ITAB-BUDAT, AT 178 SY-VLINE,
                 AT 179 ITAB-MBLNR, AT 190 SY-VLINE,
                 AT 193 ITAB-MATKL, AT 197 SY-VLINE,
                 AT 198 ITAB-LABST, AT 216 SY-VLINE,
                 AT 217 ITAB-MEINS, AT 221 SY-VLINE,
                 AT 224 ITAB-VERPR, AT 239 SY-VLINE,
                 AT 240 ITAB-MVGR5, AT 244 SY-VLINE,
                 AT 245 ITAB-LGPLA, AT 255 SY-VLINE.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                               " WRITE_ITAB


Thanks for any assistance!

Answer:
Gosh .. you asked us to do your work? Come on you ... you're paid to do you work ..

Answer:
Well, I got it this far and now I'm stumped. So I'm not asking anyone to do my work for me, I just need a nudge.

Answer:
OK, by adding this:

IF P_DEAD = SPACE              "Filter out materials not w/in date range
AND ITAB-BUDAT IS INITIAL.
CONTINUE.
ENDIF.


...right before the first WRITE, it fixes my problem. It seems that after running through MKPF, if the material had any goods movement at all, it was considered valid - all this prior to the date range being considered.

Thanks wiraone for using sarcasm to make me think a little more about it.

Answer:
the code you have is written is horrible in a big company with millions of materials in database this crap will just crawl.

Answer:
Suggestion .. instead of doing loop at itab where key = variable .. you can use read table .. that will surely helps a lot in term of preformance. And reading the material master first instead of going to material document is NOT a good idea really, as previous poster said .. it will kills the system.

Answer:
wiraone - thanks for the tip - I found it useful.

guest - I'd tell you to go f--- yourself, but that would be about as useless as your post. Whoops! I was thinking out loud.

I post in this forum for help with certain things, not to receive useless commentary from people like yourself.

Answer:
Tseung - self moderate your behaviour. What the guest said was nasty, but it was about your code, not about your person.

What you replied with was offensive and personal. Don't do that please.
_________________
Kind Regards

Rosie Brent

Please remember to search the forum and check the FAQ before posting questions, thank you.

Tuly Idiot most of the time, part-time Guru
Copyright ?2007 - 2008 www.jt77.com