WF for MVKE-SCMNG

Hi All,
I have a requirement to trigger a WF upon changing MVKE-SCMNG(Delivering unit) and MVKE-ZZCARTONQTY(Web Qty). I checked in BUS1001 (SAP Material BOR) but did not find these fields in attributes.
I tried adding a virtual attribute to ZBUS1001. But that did not work. Because i was not able to trigger the WF from SWEC upon changing MVKE-SCMNG(Delivering unit).
The other option i was thinking of is to create a custom BOR (MVKE-SCMNG(Delivering unit) and MVKE-ZZCARTONQTY(Web Qty).
Can anyone please let me know if there is other way to

Hello Karuna !
               Your requirement is to trigger the workflow when there is a change in SCMNG(Delivering unit) and ZZCARTONQTY(Web Qty). of MVKE table.
               I belive the business object BUS1001006 should work.Create a database attribute for the above two fields in its subtype and delegate it to business object BUS1001006.Also, ensure that you have implemented,released and generated the business object.
              For triggering, I hope you should go either BAdI or user exit provided no events are raised in event trace(when trace is  switched-on) when changes to above fields are saved and correct change documnet is configured in SWEC.
            Can you share with us the tranaction code where the the field values are changed ?Is it MM02 ?
Regards,
S.Suresh

Similar Messages

  • Delivery Unit (MVKE-SCMNG) in Sales Order

    Dear Experts,
    I have a scenario where the field in the Material Master on Sales Org 1 tab > MVKE-SCMNG (Delivery Unit) is used to restrict the Order quantity to be exact multiple of Delivery Unit.
    It is already implemented in the scanario. But I want to use the same for other Sales Order Type too. But I could not find any settings which is Sales Order Type Dependent.
    Can anybody give some idea?
    Thanks in advance.
    regards,
    hp

    Hello,
    One of my observations is that Delivery Unit functionality does not work with Return Order Scanario.
    Would somebody suggest what could be the option for this?
    Thanks in advance.
    Quick answer would be appriciated.
    Br,
    hp

  • RFC/FM   IN R/3 FOR  MVKE

    HI,
    Is there any functional module or rfc in r/3 ((eg... for table mvke)) which gives all DETAILS by giving ...............either any material number(or sales order ) or any other value for other fields (eg. date from) ....?????????????????????????

    Did you try MVKE_SINGLE_READ or similiar ones?

  • User exit; Article master SAP Retail for MVKE table?

    Is there a user exit in SAP Retail for the MVKE table?
    The articles is maintained in a third-party system and are transferred to SAP via Idoc. For sales sets, article category = 10, these requires a item category = ERLA in SAP (MVKE-MTPOS) so that the sales set "explodes" in the sales order.
    The third-party system doesn't maintain sales org-spesific data for the articles, therefor we use one ref.article for all article groups. And because sales sets exits in many article groups, we found it difficult to have ref.articles for all of these article groups.
    Also the article type is also "normal",so the only way to differentiate the sales sets, are via article category. But since SAP has no link between article category and item category in customizing (as far as I know), I wonder if there is a user-exit to set the item category based on the article category?

    Hello Sonika,
    WE_PLU is generally used along with the POS interface.
    Please check this for more details
    http://help.sap.com/saphelp_470/helpdata/en/ed/df673c86d19b35e10000000a11402f/frameset.htm
    Article Master Uploading in IS- Retail system
    This is basically your call depending on what data the message type is intended to carry and the use. ARTMAS should be the choice in your case.
    Regards,
    Nimish

  • Default values for MVKE in MM01/MM02

    Hi All,
    If user changes any data in MM02/create material in MM01 , then I need to default some values in MVKE table( say MVKE-PRAT2, Standard SAP Field).
    I have tried with User exits and badi, but nothing works .
    EXIT_SAPLMGMU_001   ZXMG0U02 (cannot change MVKE fields)
    BADI_MATERIAL_CHECK(same as the above user exit)
    BADI_MATERIAL_REF ( looks to be works only when extending and creation of new material)
    Can somebody help to advise , is there any other user exit/method to update the MVKE fields in MM01/MM02.?
    Thanks a lot.
    Regards
    Agrud

    There are many Implicit Enhancement points in the PBO modules of SAPLMGMM. You might want to play with one of those, see where MVKE is getting populated/initialized and pre-populate it there.

  • Generic Delta for table MVKE

    I need to extract material sales data from table MVKE.
    I want to use generic delta datasource but I'm not sure based on which field I need to load delta.
    Any suggestions?
    Is it possible to use generic delta for MVKE?

    Hi,
    Yes you can go for generic delta, but you need to decide how your delta should be, whether you want only changed records or after before images or only new records,...
    After deciding if you want only new records then you can go for CREATED On field
    For changed records ou can go for CHANGED ON field
    if you want after before images then choose the correct fields,
    after choosing the delta you have to check for when you want to run your delta, daily once or more than ones, if you want yo run more than once go for time stamp.
    Regards,
    Pavan.

  • Performance Issue in ABAP part as suggested by SE30 for the below coding

    Dear Abapers,
    The below coding was done by my seniors and having performance issue i.e in SE30 the abap part is consuming 98% of time.
    Pl. help us to solve this situation.
    With best regards,
    S. Arunachalam.
    the code is:
    REPORT ZOBJLIST LINE-SIZE 320 NO STANDARD PAGE HEADING. "280 to 320
    TABLES: MARA, MAKT, A916, KONP, MVKE, ZSAI_PARAM.
    Input parameters *****************************************************
    DATA IT_MARA LIKE MARA OCCURS 0 WITH HEADER LINE.
    DATA T_CLASS LIKE SCLASS OCCURS 0 WITH HEADER LINE.
    DATA T_CLOBJDAT LIKE CLOBJDAT OCCURS 0 WITH HEADER LINE.
    DATA FLG_COLOR TYPE C.
    DATA WRK_CLASS LIKE KLAH-CLASS.
    DATA WRK_PERCENT TYPE I. " Progress percentage
    DATA WRK_LINES LIKE SY-TABIX. " To store the no. of lines in int.table
    DATA WRK_PROGRESSTEXT(72) . " Progress indicator text
    DATA : BEGIN OF IT_MATNR OCCURS 0,
    MATNR LIKE MARA-MATNR,
    MAKTX LIKE MAKT-MAKTX,
    BISMT LIKE MARA-BISMT, "Thanikai-17.05.2002
    END OF IT_MATNR.
    DATA : BEGIN OF IT_HEADER OCCURS 0,
    MATNR LIKE MARA-MATNR,
    MAKTX LIKE MAKT-MAKTX,
    CLART LIKE SCLASS-KLART,
    CLASS LIKE SCLASS-CLASS,
    BISMT LIKE MARA-BISMT, "Thanikai-17.05.2002
    SCMNG(4) TYPE I, "Thanikai-03.10.2002
    END OF IT_HEADER.
    DATA : BEGIN OF IT_DETAILS OCCURS 0,
    MATNR LIKE MARA-MATNR,
    ZAEHL LIKE CLOBJDAT-ZAEHL,
    ATNAM LIKE CLOBJDAT-ATNAM,
    AUSP1 LIKE CLOBJDAT-AUSP1,
    END OF IT_DETAILS.
    DATA : BEGIN OF IT_DETAILS1 OCCURS 0,
    MATNR LIKE MARA-MATNR,
    ATNAM LIKE CLOBJDAT-ATNAM,
    ZAEHL LIKE CLOBJDAT-ZAEHL,
    END OF IT_DETAILS1.
    DATA: IT_DETAILS2 LIKE IT_DETAILS1 OCCURS 0 WITH HEADER LINE.
    DATA TMP_MATNR LIKE AUSP-OBJEK.
    DATA WRK_FIELD(25).
    DATA WRK_TABNAME(40). " Name of the int.table from wrk_fldname
    DATA WRK_FIELDNAME(40). " Name of the fld name from wrk_fldname
    DATA WRK_FLDNAME(40).
    DATA T_CLOBJDAT_LINES LIKE SY-TABIX.
    DATA WRK_LINES1 LIKE SY-TABIX.
    DATA WRK_FIRST_TIME.
    DATA TMP_STR.
    DATA WRK_AUSP1 LIKE CLOBJDAT-AUSP1.
    DATA: WRK_KBETR LIKE KONP-KBETR. "Thanikai-03.10.2002
    SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.
    *PARAMETERS:
    SELECT-OPTIONS:
    P_MATKL FOR MARA-MATKL DEFAULT 'DIAL' OBLIGATORY NO INTERVALS.
    SELECT-OPTIONS : S_MATNR FOR MARA-MATNR MATCHCODE OBJECT MAT1.
    SELECTION-SCREEN END OF BLOCK B3.
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
    PARAMETERS: P_CLASS LIKE KLAH-CLASS,
    P_KLART LIKE KLAH-KLART DEFAULT '001' OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK B2.
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    PARAMETERS : REQ RADIOBUTTON GROUP RGRP ,
    NREQ RADIOBUTTON GROUP RGRP .
    SELECTION-SCREEN END OF BLOCK B1.
    AT SELECTION-SCREEN.
    IF NOT P_CLASS IS INITIAL.
    WRK_CLASS = P_CLASS.
    ELSE.
    WRK_CLASS = SPACE.
    ENDIF.
    TOP-OF-PAGE.
    IF SY-BATCH NE 'X'.
    PERFORM PRINT_TOP.
    ENDIF.
    START-OF-SELECTION.
    SET PF-STATUS '9000'.
    SELECT * INTO TABLE IT_MARA
    FROM MARA CLIENT SPECIFIED
    WHERE MANDT = SY-MANDT
    AND MATKL IN P_MATKL
    AND MATNR IN S_MATNR.
    DESCRIBE TABLE IT_MARA LINES WRK_LINES.
    MOVE 'Selecting Material Description' TO WRK_PROGRESSTEXT.
    PERFORM SAPGUI USING WRK_PERCENT WRK_PROGRESSTEXT.
    LOOP AT IT_MARA.
    SELECT SINGLE * FROM MAKT CLIENT SPECIFIED
    WHERE MANDT = SY-MANDT
    AND MATNR = IT_MARA-MATNR
    AND SPRAS = 'E'.
    IF SY-SUBRC = 0.
    IT_MATNR-MATNR = IT_MARA-MATNR.
    IT_MATNR-MAKTX = MAKT-MAKTX.
    IT_MATNR-BISMT = IT_MARA-BISMT. "Thanikai-17.05.2002
    ENDIF.
    APPEND IT_MATNR.
    CLEAR IT_MATNR.
    ENDLOOP.
    CLEAR WRK_LINES.
    DESCRIBE TABLE IT_MATNR LINES WRK_LINES.
    MOVE 'Selecting Class / characteristics for the Material'
    TO WRK_PROGRESSTEXT.
    PERFORM SAPGUI USING WRK_PERCENT WRK_PROGRESSTEXT.
    LOOP AT IT_MATNR.
    CLEAR: TMP_MATNR, T_CLASS, T_CLOBJDAT. "Thanikai-26.08.2002
    REFRESH: T_CLASS, T_CLOBJDAT. "Thanikai-26.08.2002
    TMP_MATNR = IT_MATNR-MATNR.
    CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
    EXPORTING
    CLASS = WRK_CLASS
    CLASSTEXT = 'X'
    CLASSTYPE = '001'
    CLINT = ' '
    FEATURES = 'X'
    LANGUAGE = SY-LANGU
    OBJECT = TMP_MATNR
    OBJECTTABLE = 'MARA'
    KEY_DATE = SY-DATUM
    INITIAL_CHARACT = 'X'
    NO_VALUE_DESCRIPT = 'X'
    CHANGE_SERVICE_CLF = 'X'
    INHERITED_CHAR = ' '
    TABLES
    T_CLASS = T_CLASS
    T_OBJECTDATA = T_CLOBJDAT
    EXCEPTIONS
    NO_CLASSIFICATION = 1
    NO_CLASSTYPES = 2
    INVALID_CLASS_TYPE = 3
    OTHERS = 4.
    IF SY-SUBRC = 0.
    READ TABLE T_CLASS INDEX 1.
    IT_HEADER-MATNR = IT_MATNR-MATNR.
    IT_HEADER-MAKTX = IT_MATNR-MAKTX.
    IT_HEADER-BISMT = IT_MATNR-BISMT."Thanikai-17.05.2002
    IT_HEADER-CLART = T_CLASS-KLART.
    IT_HEADER-CLASS = T_CLASS-CLASS.
    PERFORM PKG_DLVY_UNIT.
    APPEND IT_HEADER.
    CLEAR: IT_HEADER.
    Code Start by Thanikai on 16.08.2002
    LOOP AT T_CLOBJDAT.
    IT_DETAILS-MATNR = IT_MATNR-MATNR.
    IT_DETAILS-ZAEHL = T_CLOBJDAT-ZAEHL.
    IT_DETAILS-ATNAM = T_CLOBJDAT-ATNAM.
    IT_DETAILS-AUSP1 = T_CLOBJDAT-AUSP1.
    APPEND IT_DETAILS.
    ENDLOOP.
    CLEAR: IT_DETAILS.
    LOOP AT T_CLOBJDAT.
    IT_DETAILS1-MATNR = IT_MATNR-MATNR.
    IT_DETAILS1-ATNAM = T_CLOBJDAT-ATNAM.
    IT_DETAILS1-ZAEHL = T_CLOBJDAT-ZAEHL.
    APPEND IT_DETAILS1.
    ENDLOOP.
    CLEAR: IT_DETAILS1.
    DESCRIBE TABLE IT_DETAILS1 LINES T_CLOBJDAT_LINES.
    IF WRK_FIRST_TIME NE 'X'.
    WRK_LINES1 = T_CLOBJDAT_LINES.
    WRK_FIRST_TIME = 'X'.
    IT_DETAILS2[] = IT_DETAILS1[].
    ELSE.
    IF T_CLOBJDAT_LINES GT WRK_LINES1.
    WRK_LINES1 = T_CLOBJDAT_LINES.
    IT_DETAILS2[] = IT_DETAILS1[].
    ENDIF.
    ENDIF.
    CLEAR: T_CLOBJDAT_LINES.
    CLEAR: IT_DETAILS1. REFRESH: IT_DETAILS1.
    ENDIF.
    Code end by Thanikai on 16.08.2002
    ENDLOOP.
    CLEAR: WRK_LINES1, WRK_FIRST_TIME.
    Print Details *********************************
    PERFORM PRINT_DETAILS.
    AT USER-COMMAND.
    GET CURSOR FIELD WRK_FIELD.
    SPLIT WRK_FIELD AT '-' INTO WRK_TABNAME WRK_FLDNAME.
    IF NOT WRK_FLDNAME IS INITIAL.
    CASE SY-UCOMM.
    WHEN 'SORA'.
    IF SY-LSIND > 0.
    SY-LSIND = SY-LSIND - 1. "To print in the same window
    ENDIF.
    PERFORM PRINT_REPORT_ASCENDING.
    WHEN 'SORD'.
    IF SY-LSIND > 0.
    SY-LSIND = SY-LSIND - 1. "To print in the same window
    ENDIF.
    PERFORM PRINT_REPORT_DESCENDING.
    ENDCASE.
    ELSE.
    MESSAGE S000(38) WITH 'Selete Material Number / Description'.
    ENDIF.
    *& Form SAPGUI
    text
    -->P_WRK_PERCENT text *
    -->P_WRK_PROGRESSTEXT text *
    FORM SAPGUI USING P_WRK_PERCENT
    P_WRK_PROGRESSTEXT.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
    PERCENTAGE = WRK_PERCENT
    TEXT = WRK_PROGRESSTEXT
    EXCEPTIONS
    OTHERS = 1.
    ENDFORM. " SAPGUI
    *& Form PRINT_REPORT_ASCENDING
    text
    --> p1 text
    <-- p2 text
    FORM PRINT_REPORT_ASCENDING.
    IF WRK_TABNAME = 'IT_HEADER'.
    SORT IT_HEADER BY (WRK_FLDNAME).
    PERFORM PRINT_TOP.
    PERFORM PRINT_DETAILS.
    ENDIF.
    ENDFORM. " PRINT_REPORT_ASCENDING
    *& Form PRINT_DETAILS
    text
    --> p1 text
    <-- p2 text
    WRK_AUSP1 width chged below from (7)to(9) by Nagaraj/MKRK 24.11.05
    FORM PRINT_DETAILS.
    SORT IT_HEADER BY MATNR.
    IF SY-BATCH EQ 'X'.
    PERFORM PRINT_TOP.
    ENDIF.
    IF REQ = 'X'.
    LOOP AT IT_HEADER.
    IF FLG_COLOR = 'X'.
    FORMAT COLOR COL_NORMAL INTENSIFIED ON.
    CLEAR FLG_COLOR.
    ELSE.
    FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
    FLG_COLOR = 'X'.
    ENDIF.
    WRITE :/ SY-VLINE NO-GAP,
    (18) IT_HEADER-MATNR COLOR COL_KEY NO-GAP,
    SY-VLINE NO-GAP,
    (40) IT_HEADER-MAKTX NO-GAP,
    SY-VLINE NO-GAP,
    (18) IT_HEADER-BISMT NO-GAP, "Thanikai-17.05.2002
    SY-VLINE NO-GAP.
    Code started by Thanikai on 16.08.2002
    LOOP AT IT_DETAILS2.
    CLEAR: TMP_STR, WRK_AUSP1.
    IF IT_DETAILS2-ATNAM EQ 'CALIBRE'.
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR
    AND ATNAM = IT_DETAILS2-ATNAM
    AND ZAEHL = IT_DETAILS2-ZAEHL.
    TMP_STR = 'X'.
    WRK_AUSP1 = IT_DETAILS-AUSP1.
    EXIT.
    ENDLOOP.
    IF TMP_STR EQ 'X'.
    WRITE : (9)WRK_AUSP1 NO-GAP, SY-VLINE NO-GAP.
    ELSE.
    WRITE : ' ', SY-VLINE NO-GAP.
    ENDIF.
    ELSE.
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR
    AND ATNAM = IT_DETAILS2-ATNAM.
    TMP_STR = 'X'.
    WRK_AUSP1 = IT_DETAILS-AUSP1.
    EXIT.
    ENDLOOP.
    IF TMP_STR EQ 'X'.
    WRITE : (9)WRK_AUSP1 NO-GAP, SY-VLINE NO-GAP.
    ELSE.
    WRITE : ' ', SY-VLINE NO-GAP.
    ENDIF.
    ENDIF.
    ENDLOOP.
    WRITE : (8) IT_HEADER-SCMNG NO-GAP, SY-VLINE NO-GAP.
    IF SY-LINNO > 25.
    IF SY-BATCH EQ 'X'.
    NEW-PAGE.
    PERFORM PRINT_TOP.
    ENDIF.
    ENDIF.
    Code end by Thanikai on 16.08.2002..
    ENDLOOP.
    ELSEIF NREQ = 'X'.
    LOOP AT IT_HEADER.
    IF FLG_COLOR = 'X'.
    FORMAT COLOR COL_NORMAL INTENSIFIED ON.
    CLEAR FLG_COLOR.
    ELSE.
    FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
    FLG_COLOR = 'X'.
    ENDIF.
    WRITE :/ SY-VLINE NO-GAP,
    (18) IT_HEADER-MATNR COLOR COL_KEY NO-GAP,
    SY-VLINE NO-GAP,
    (18) IT_HEADER-BISMT NO-GAP, "Thanikai-17.05.2002
    SY-VLINE NO-GAP.
    Code started by Thanikai on 16.08.2002
    LOOP AT IT_DETAILS2.
    CLEAR: TMP_STR, WRK_AUSP1.
    IF IT_DETAILS2-ATNAM EQ 'CALIBRE'.
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR
    AND ATNAM = IT_DETAILS2-ATNAM
    AND ZAEHL = IT_DETAILS2-ZAEHL.
    TMP_STR = 'X'.
    WRK_AUSP1 = IT_DETAILS-AUSP1.
    EXIT.
    ENDLOOP.
    IF TMP_STR EQ 'X'.
    WRITE : (9)WRK_AUSP1 NO-GAP, SY-VLINE NO-GAP.
    ELSE.
    WRITE : ' ', SY-VLINE NO-GAP.
    ENDIF.
    ELSE.
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR
    AND ATNAM = IT_DETAILS2-ATNAM.
    TMP_STR = 'X'.
    WRK_AUSP1 = IT_DETAILS-AUSP1.
    EXIT.
    ENDLOOP.
    IF TMP_STR EQ 'X'.
    WRITE : (9)WRK_AUSP1 NO-GAP, SY-VLINE NO-GAP.
    ELSE.
    WRITE : ' ', SY-VLINE NO-GAP.
    ENDIF.
    ENDIF.
    ENDLOOP.
    WRITE : (8) IT_HEADER-SCMNG NO-GAP, SY-VLINE NO-GAP.
    IF SY-LINNO > 25.
    IF SY-BATCH EQ 'X'.
    NEW-PAGE.
    PERFORM PRINT_TOP.
    ENDIF.
    ENDIF.
    Code end by Thanikai on 16.08.2002
    ENDLOOP.
    ENDIF.
    ULINE.
    ENDFORM. " PRINT_DETAILS
    *& Form PRINT_REPORT_DESCENDING
    text
    --> p1 text
    <-- p2 text
    FORM PRINT_REPORT_DESCENDING.
    IF WRK_TABNAME = 'IT_HEADER'.
    SORT IT_HEADER BY (WRK_FLDNAME) DESCENDING.
    PERFORM PRINT_TOP.
    PERFORM PRINT_DETAILS.
    ENDIF.
    ENDFORM. " PRINT_REPORT_DESCENDING
    *& Form PRINT_TOP
    text
    --> p1 text
    <-- p2 text
    IT_DETAILS2-ATNAM width chged below from 7 to 9. Nagaraj/MKRK 24.11.05
    FORM PRINT_TOP.
    FORMAT COLOR COL_HEADING INTENSIFIED OFF.
    ULINE.
    IF REQ = 'X'.
    READ TABLE IT_HEADER INDEX 1.
    WRITE :/ SY-VLINE NO-GAP,(17) 'Material No' ,SY-VLINE NO-GAP.
    SET LEFT SCROLL-BOUNDARY.
    WRITE :(39) ' Material Description', SY-VLINE NO-GAP,
    (17) ' Old Matl. Number', SY-VLINE NO-GAP. "Thanikai-17.05.2002
    Comments made by Thanikai on 16.08.2002
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR.
    LOOP AT IT_DETAILS2.
    WRITE : (9) IT_DETAILS1-ATNAM NO-GAP,SY-VLINE NO-GAP.
    WRITE : (9) IT_DETAILS2-ATNAM NO-GAP,SY-VLINE NO-GAP.
    ENDLOOP.
    WRITE : (8) 'Pkg.Unit' NO-GAP, SY-VLINE NO-GAP.
    ELSEIF NREQ = 'X'.
    READ TABLE IT_HEADER INDEX 1.
    WRITE :/ SY-VLINE NO-GAP, (17) 'Material No' ,SY-VLINE NO-GAP,
    (17) ' Old Matl. Number', SY-VLINE NO-GAP. "Thanikai-17.05.2002
    Comments made by Thanikai on 16.08.2002
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR.
    LOOP AT IT_DETAILS2.
    WRITE : (9) IT_DETAILS-ATNAM NO-GAP,SY-VLINE NO-GAP.
    WRITE : (9) IT_DETAILS2-ATNAM NO-GAP,SY-VLINE NO-GAP.
    ENDLOOP.
    WRITE : (8) 'Pkg.Unit' NO-GAP, SY-VLINE NO-GAP.
    ENDIF.
    ULINE.
    FORMAT RESET.
    ENDFORM. " PRINT_TOP
    *& Form PKG_DLVY_UNIT
    text
    --> p1 text
    <-- p2 text
    FORM PKG_DLVY_UNIT.
    SELECT SINGLE KONP~KBETR INTO WRK_KBETR
    FROM ( A916 INNER JOIN KONP
    ON KONP~MANDT = SY-MANDT
    AND KONPKNUMH = A916KNUMH
    AND KONP~KOPOS = '01' ) CLIENT SPECIFIED
    WHERE A916~MANDT = SY-MANDT
    AND A916~KAPPL = 'V'
    AND A916~KSCHL = 'PR00'
    AND A916~VKORG = 'WTCH'
    AND A916~VTWEG = '01'
    AND A916~SPART = '01'
    AND A916~MATNR = IT_MATNR-MATNR
    AND A916~DATBI >= SY-DATUM
    AND A916~DATAB <= SY-DATUM.
    IF SY-SUBRC EQ 0.
    SELECT SINGLE * FROM ZSAI_PARAM CLIENT SPECIFIED
    WHERE MANDT = SY-MANDT
    AND PMFID = 'ZPKG_PRICE'
    AND PMVL1 = '01'.
    IF SY-SUBRC EQ 0.
    IF WRK_KBETR BETWEEN 1 AND ZSAI_PARAM-PMVL2.
    SELECT SINGLE * FROM MVKE CLIENT SPECIFIED
    WHERE MANDT = SY-MANDT
    AND MATNR = IT_MATNR-MATNR
    AND VKORG = 'WTCH'
    AND VTWEG = '01'.
    IF SY-SUBRC EQ 0.
    IF MVKE-SCMNG GE 1.
    IT_HEADER-SCMNG = MVKE-SCMNG.
    ELSE.
    In the absence of delivery unit for a material,
    delivery unit is considered as one.
    IT_HEADER-SCMNG = 1.
    ENDIF.
    ELSE.
    IT_HEADER-SCMNG = 1.
    ENDIF.
    ELSE.
    If the price for a material is either below 1 or above 2499, then
    the delivery unit is considered as one.
    IT_HEADER-SCMNG = 1.
    ENDIF.
    ELSE.
    IT_HEADER-SCMNG = 1.
    ENDIF.
    ELSE.
    In the absence of price for a material, delivery unit is
    considered as one.
    IT_HEADER-SCMNG = 1.
    ENDIF.
    CLEAR: WRK_KBETR.
    ENDFORM. " PKG_DLVY_UNIT

    The first point would be to change the following:
    LOOP AT IT_MARA.
    SELECT SINGLE * FROM MAKT CLIENT SPECIFIED
    WHERE MANDT = SY-MANDT
    AND MATNR = IT_MARA-MATNR
    AND SPRAS = 'E'.
    IF SY-SUBRC = 0.
    IT_MATNR-MATNR = IT_MARA-MATNR.
    IT_MATNR-MAKTX = MAKT-MAKTX.
    IT_MATNR-BISMT = IT_MARA-BISMT. "Thanikai-17.05.2002
    ENDIF.
    APPEND IT_MATNR.
    CLEAR IT_MATNR.
    ENDLOOP.
    I would sort IT_MARA by matnr then select for all entries into new table IT_matnr and only read when you are actuallygoing to use it for your final table.
    This however will not make much difference to your problem. I suggest you put more of the code into subroutines and look at the se30 output as tyo which subroutines are actually taking most of the time. Please post the results and the subroutines which take the longest.

  • Output the requested delivery date for each different line item

    Hello Experts
    I have program called ZFSFSF(following), in the output Its showing multiple requested delvery dates per line item.
    But We need to show the requested delivery date for each different line item.
    Any code is highly appreciated. I wud appreacite if you cud bold the added code.
    Thanks
    SP
    TYPE-POOLS: slis.
    TABLES: vbap, vbrk, vbfa, vbak, vbrp, konv, kna1, bkpf, bsad, bkpf_bsad,
    knvv, pa0002, t005u, mvke, lips, likp, vbpa, vbep.
    DATA: BEGIN OF i_list OCCURS 0,
    vbeln LIKE vbak-vbeln,
    posnr LIKE vbap-posnr,
    matnr LIKE vbap-matnr,
    erdat LIKE vbap-erdat,
    mvgr1 LIKE mvke-mvgr1,
    wadat_ist LIKE likp-wadat_ist,
    days TYPE i,
    werks LIKE vbap-werks,
    lgort LIKE vbap-lgort,
    kwmeng LIKE vbap-kwmeng," CH01+
    lfimg LIKE lips-lfimg," CH01+
    pstyv LIKE vbap-pstyv," CH01+
    obd LIKE lips-vbeln," CH01+
    obd_pos LIKE lips-posnr," CH01+
    soldto LIKE vbaK-kunnr," JR+
    shipto LIKE vbpa-kunnr," JR+
    edatu like vbep-edatu," PR+
    END OF i_list.
    DATA: i_list2 LIKE i_list OCCURS 0 WITH HEADER LINE,
    i_list3 LIKE i_list OCCURS 0 WITH HEADER LINE.
    DATA: i_list4 LIKE vbap OCCURS 0 WITH HEADER LINE.
    *ALV Output Header
    DATA: gt_list_top_of_page TYPE slis_t_listheader,
    prognm LIKE sy-repid,
    gc_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE',
    gt_events TYPE slis_t_event,
    is_layout TYPE slis_layout_alv,
    is_variant LIKE disvariant,
    it_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE.
    DATA:gt_fieldcat TYPE slis_t_fieldcat_alv.
    DATA:gt_outtab LIKE i_list OCCURS 0 WITH HEADER LINE.
    DATA: g_repid LIKE sy-repid,
    g_count LIKE sy-tabix.
    SELECTION-SCREEN BEGIN OF BLOCK block0 WITH FRAME TITLE text-t01.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(79) text-t10.
    SELECTION-SCREEN: END OF LINE.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(79) text-t11.
    SELECTION-SCREEN: END OF LINE.
    SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(79) text-t12.
    SELECTION-SCREEN: END OF LINE.
    SELECTION-SCREEN END OF BLOCK block0.
    */ Selection and Input Parameters
    SELECTION-SCREEN BEGIN OF BLOCK blocko WITH FRAME TITLE text-001.
    SELECT-OPTIONS: s_vbeln FOR vbap-vbeln, "SO
    s_auart FOR vbak-auart DEFAULT 'KB' OBLIGATORY,
    s_matnr FOR vbap-matnr," obligatory,
    s_mvgr1 FOR mvke-mvgr1,
    s_erdat FOR vbap-erdat OBLIGATORY,
    s_werks FOR vbap-werks,
    s_lgort FOR vbap-lgort,
    s_edatu FOR vbep-edatu.
    PARAMETERS: p_vkorg LIKE vbak-vkorg DEFAULT '5010'.
    SELECTION-SCREEN SKIP 2.
    +EC1
    Addition +EC1
    +EC1
    PARAMETERS: p_vari LIKE disvariant-variant.
    +EC1
    End Addition +EC1
    +EC1
    SELECTION-SCREEN END OF BLOCK blocko.
    +EC1
    Addition +EC1
    +EC1
    DATA: g_save(1) TYPE c,
    g_default(1) TYPE c,
    g_exit(1) TYPE c,
    gx_variant LIKE disvariant,
    g_variant LIKE disvariant.
    +EC1
    End Addition +EC1
    +EC1
    Initialization fieldcatalog
    INITIALIZATION.
    PERFORM clear_tables.
    g_repid = sy-repid.
    PERFORM fieldcat_init USING gt_fieldcat[].
    +EC1
    Addition +EC1
    +EC1
    g_save = 'A'.
    PERFORM variant_init.
    Get default variant
    gx_variant = g_variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    EXPORTING
    i_save = g_save
    CHANGING
    cs_variant = gx_variant
    EXCEPTIONS
    not_found = 2.
    IF sy-subrc = 0.
    p_vari = gx_variant-variant.
    ENDIF.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
    PERFORM f4_for_variant.
    AT SELECTION-SCREEN.
    PERFORM auth_check. "+ESC
    PERFORM pai_of_selection_screen.
    +EC1
    End Addition +EC1
    +EC1
    START-OF-SELECTION.
    PERFORM get_data.
    PERFORM alv.
    END-OF-SELECTION.
    FORM get_data *
    FORM get_data.
    *CH01 - Added kwmeng(order qty) to selection, excluded rejects
    *JR -added soldto and shipto code
    SELECT avbeln aposnr amatnr aerdat awerks algort
    akwmeng apstyv bkunnr cedatu
    CH01+
    INTO
    (i_list-vbeln, i_list-posnr, i_list-matnr, i_list-erdat, i_list-werks,
    i_list-lgort,
    i_list-kwmeng , i_list-pstyv, i_list-soldto,i_list-edatu)
    CH01+
    FROM vbap AS a INNER JOIN vbak AS b ON avbeln = bvbeln
    INNER JOIN vbep AS c ON avbeln = cvbeln
    WHERE b~vkorg = p_vkorg
    AND a~werks IN s_werks
    AND a~lgort IN s_lgort
    AND b~auart IN s_auart
    AND a~vbeln IN s_vbeln
    AND a~erdat IN s_erdat
    AND a~abgru = ''" CH01+
    AND a~matnr IN s_matnr
    AND c~edatu IN s_edatu.
    APPEND i_list.
    ENDSELECT.
    COMMIT WORK AND WAIT.
    LOOP AT i_list.
    SELECT SINGLE mvgr1 INTO i_list-mvgr1 FROM mvke
    WHERE matnr = i_list-matnr.
    MODIFY i_list.
    CLEAR: i_list.
    ENDLOOP.
    COMMIT WORK AND WAIT.
    LOOP AT i_list.
    IF i_list-mvgr1 IN s_mvgr1.
    CONTINUE.
    ELSE.
    DELETE i_list.
    COMMIT WORK AND WAIT.
    ENDIF.
    ENDLOOP.
    CH01 - commented these lines out and redid logic below
    LOOP AT i_list.
    select single vbeln into lips-vbeln from lips
    where vgbel = i_list-vbeln
    and vgpos = i_list-posnr.
    select single wadat_ist into i_list-wadat_ist from likp
    where vbeln = lips-vbeln.
    SELECT b~wadat_ist INTO i_list-wadat_ist
    FROM lips AS a INNER JOIN
    likp AS b ON avbeln = bvbeln WHERE a~vgbel = i_list-vbeln
    AND a~vgpos = i_list-posnr.
    MODIFY i_list.
    CLEAR: i_list, lips-vbeln.
    ENDSELECT.
    ENDLOOP.
    CH01 - Changed to select multiple delivery lines & del qty
    summing the total deliveries per OBD# and date
    LOOP AT i_list.
    SELECT avbeln sum( alfimg ) b~wadat_ist
    INTO (i_list-obd , i_list-lfimg , i_list-wadat_ist)
    FROM lips AS a INNER JOIN
    likp AS b ON avbeln = bvbeln WHERE a~vgbel = i_list-vbeln
    AND a~vgpos = i_list-posnr
    AND a~pstyv = i_list-pstyv
    group by avbeln bwadat_ist.
    i_list2 = i_list.
    APPEND i_list2.
    ENDSELECT.
    IF sy-subrc <> 0.
    i_list2 = i_list.
    APPEND i_list2.
    ENDIF.
    ENDLOOP.
    i_list[] = i_list2[].
    *End CH01
    COMMIT WORK AND WAIT.
    LOOP AT i_list.
    IF i_list-wadat_ist IS INITIAL.
    CONTINUE.
    ELSE.
    i_list-days = i_list-wadat_ist - i_list-erdat.
    ENDIF.
    MODIFY i_list.
    CLEAR: i_list.
    COMMIT WORK AND WAIT.
    ENDLOOP.
    COMMIT WORK AND WAIT.
    LOOP AT i_list.
    IF i_list-vbeln IS INITIAL.
    DELETE i_list.
    ENDIF.
    ENDLOOP.
    COMMIT WORK AND WAIT.
    *JR
    LOOP AT i_list.
    SELECT SINGLE KUNNR INTO i_list-shipto FROM vbpa
    WHERE vbeln = i_list-vbeln
    AND parvw = 'WE'.
    MODIFY i_list.
    ENDLOOP.
    *END JR
    gt_outtab[] = i_list[].
    COMMIT WORK AND WAIT.
    ENDFORM.
    FORM alv *
    FORM alv.
    PERFORM e03_eventtab_build USING gt_events[]. "+EC1
    PERFORM e04_comment_build USING gt_list_top_of_page[]. "+EC1
    prognm = sy-repid. "+EC1
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    i_callback_user_command = 'USER_COMMAND'
    i_callback_program = g_repid
    it_fieldcat = gt_fieldcat[]
    it_events = gt_events[] "+ESC
    it_sort = it_sort[]
    +EC1
    Addition +EC1
    +EC1
    is_variant = g_variant
    i_save = g_save
    +EC1
    End Addition +EC1
    +EC1
    TABLES
    t_outtab = gt_outtab.
    COMMIT WORK AND WAIT.
    ENDFORM.
    FORM fieldcat_init *
    --> I_FIELDCAT *
    FORM fieldcat_init
    USING i_fieldcat TYPE slis_t_fieldcat_alv.
    DATA: ls_fieldcat TYPE slis_fieldcat_alv.
    DATA: pos TYPE i VALUE 1.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'VBELN'.
    ls_fieldcat-ref_tabname = 'VBAK'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'POSNR'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'MATNR'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'MVGR1'.
    ls_fieldcat-ref_tabname = 'MVKE'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'WERKS'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'LGORT'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'ERDAT'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'WADAT_IST'.
    ls_fieldcat-ref_tabname = 'LIKP'.
    ls_fieldcat-key = 'X'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'DAYS'.
    ls_fieldcat-ref_fieldname = 'DAYS'.
    ls_fieldcat-seltext_s = '# Of Days'.
    ls_fieldcat-seltext_m = '# Of Days'.
    ls_fieldcat-seltext_l = '# Of Days'.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    *Begin CH01
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'KWMENG'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-outputlen = 7.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'LFIMG'.
    ls_fieldcat-ref_tabname = 'LIPS'.
    ls_fieldcat-outputlen = 7.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'OBD'.
    ls_fieldcat-seltext_s = 'OBD'.
    ls_fieldcat-seltext_m = 'Outbound Del'.
    ls_fieldcat-seltext_l = 'Outbound Delivery'.
    ls_fieldcat-outputlen = 10.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'OBD_POS'.
    ls_fieldcat-seltext_s = 'OBD Ln'.
    ls_fieldcat-seltext_m = 'Outbound Del Ln'.
    ls_fieldcat-seltext_l = 'Outbound Del Line'.
    ls_fieldcat-outputlen = 10.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    *End CH01
    *JR
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'SOLDTO'.
    ls_fieldcat-ref_tabname = 'VBAP'.
    ls_fieldcat-seltext_m = 'Sold To'.
    ls_fieldcat-seltext_l = 'Sold To'.
    ls_fieldcat-outputlen = 10.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'SHIPTO'.
    ls_fieldcat-ref_tabname = 'VBPA'.
    ls_fieldcat-seltext_m = 'Ship To'.
    ls_fieldcat-seltext_l = 'Ship To'.
    ls_fieldcat-outputlen = 10.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    *END JR
    ls_fieldcat-col_pos = pos.
    ls_fieldcat-fieldname = 'EDATU'.
    ls_fieldcat-ref_tabname = 'VBEP'.
    ls_fieldcat-seltext_m = 'Requested Delivery date'.
    ls_fieldcat-seltext_l = 'Requested Delivery date'.
    ls_fieldcat-outputlen = 20.
    APPEND ls_fieldcat TO i_fieldcat.
    CLEAR ls_fieldcat.
    *FOR ALV SORT & SUBTOTAL
    CLEAR it_sort.
    it_sort-spos = '0'.
    it_sort-fieldname = 'VBELN'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '1'.
    it_sort-fieldname = 'POSNR'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '2'.
    it_sort-fieldname = 'MATNR'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '3'.
    it_sort-fieldname = 'MVGR1'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '4'.
    it_sort-fieldname = 'ERDAT'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '5'.
    it_sort-fieldname = 'WADAT_IST'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-down = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '6'.
    it_sort-fieldname = 'PERNR'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '7'.
    it_sort-fieldname = 'VORNA'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '8'.
    it_sort-fieldname = 'NACHN'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '9'.
    it_sort-fieldname = 'VKGRP'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '10'.
    it_sort-fieldname = 'VBELN'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '11'.
    it_sort-fieldname = 'ERDAT'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    CLEAR it_sort.
    it_sort-spos = '12'.
    it_sort-fieldname = 'BEZEI'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    it_sort-subtot = 'X'.
    APPEND it_sort.
    clear it_sort.
    it_sort-spos = '1'.
    it_sort-fieldname = 'BELNR'.
    it_sort-tabname = 'GT_OUTTAB'.
    it_sort-up = 'X'.
    append it_sort.
    ENDFORM.
    +EC1
    Addition +EC1
    +EC1
    *& Form VARIANT_INIT
    text
    --> p1 text
    <-- p2 text
    FORM variant_init.
    CLEAR g_variant.
    g_variant-report = g_repid.
    ENDFORM. " VARIANT_INIT
    FORM f4_for_variant *
    FORM f4_for_variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
    is_variant = g_variant
    i_save = g_save
    it_default_fieldcat =
    IMPORTING
    e_exit = g_exit
    es_variant = gx_variant
    EXCEPTIONS
    not_found = 2.
    IF sy-subrc = 2.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.
    IF g_exit = space.
    p_vari = gx_variant-variant.
    ENDIF.
    ENDIF.
    ENDFORM.
    *& Form PAI_OF_SELECTION_SCREEN
    text
    FORM pai_of_selection_screen.
    IF NOT p_vari IS INITIAL.
    MOVE g_variant TO gx_variant.
    MOVE p_vari TO gx_variant-variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
    EXPORTING
    i_save = g_save
    CHANGING
    cs_variant = gx_variant.
    g_variant = gx_variant.
    ELSE.
    PERFORM variant_init.
    ENDIF.
    ENDFORM. " PAI_OF_SELECTION_SCREEN
    +EC1
    End Addition +EC1
    +EC1
    FORM e03_eventtab_build *
    --> E03_LT_EVENTS *
    FORM e03_eventtab_build USING e03_lt_events TYPE slis_t_event.
    DATA: ls_event TYPE slis_alv_event.
    CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
    i_list_type = 0
    IMPORTING
    et_events = e03_lt_events.
    READ TABLE e03_lt_events WITH KEY name = slis_ev_top_of_page
    INTO ls_event.
    IF sy-subrc = 0.
    MOVE gc_formname_top_of_page TO ls_event-form.
    APPEND ls_event TO e03_lt_events.
    ENDIF.
    ENDFORM.
    FORM e04_comment_build *
    --> E04_LT_TOP_OF_PAGE *
    FORM e04_comment_build USING e04_lt_top_of_page TYPE slis_t_listheader.
    DATA: ls_line TYPE slis_listheader.
    *Report Title
    CLEAR ls_line.
    ls_line-typ = 'H'.
    ls_line-info = text-007.
    APPEND ls_line TO e04_lt_top_of_page.
    **Doc Type Desc.
    clear ls_line.
    ls_line-typ = 'S'.
    ls_line-key = text-008.
    ls_line-info = p_matnr.
    append ls_line to e04_lt_top_of_page.
    clear ls_line.
    ls_line-typ = 'S'.
    ls_line-key = text-009.
    ls_line-info = p_werks.
    append ls_line to e04_lt_top_of_page.
    clear ls_line.
    ls_line-typ = 'S'.
    ls_line-key = text-010.
    ls_line-info = p_stlan.
    append ls_line to e04_lt_top_of_page.
    clear ls_line.
    ls_line-typ = 'S'.
    ls_line-key = text-011.
    ls_line-info = p_stlal.
    append ls_line to e04_lt_top_of_page.
    clear ls_line.
    ls_line-typ = 'S'.
    ls_line-key = text-012.
    ls_line-info = p_stlal.
    append ls_line to e04_lt_top_of_page.
    ENDFORM.
    FORM top_of_page *
    FORM top_of_page.
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
    it_list_commentary = gt_list_top_of_page.
    ENDFORM.
    FORM auth_check *
    FORM auth_check.
    AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
    ID 'VKORG' FIELD p_vkorg.
    IF sy-subrc NE 0.
    MESSAGE e054 WITH p_vkorg.
    ENDIF.
    ENDFORM. " auth_check
    *& Form USER_COMMAND
    FORM user_command USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.
    CASE r_ucomm.
    WHEN '&IC1'.
    PERFORM display_so_order USING r_ucomm
    rs_selfield.
    ENDCASE.
    ENDFORM.
    *& Form display_sales_order
    text
    -->P_R_UCOMM text
    -->P_RS_SELFIELD text
    FORM display_so_order USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.
    CASE rs_selfield-sel_tab_field.
    WHEN '1-VBELN'.
    SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
    CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
    WHEN '1-MATNR'.
    SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
    CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
    WHEN '1-OBD'.
    SET PARAMETER ID 'VL' FIELD rs_selfield-value.
    CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
    WHEN OTHERS.
    MESSAGE i000(z1) WITH 'Please Click on the Valid Selection'.
    EXIT.
    ENDCASE.
    ENDFORM. " display_sales_order
    FORM EDit_table *

    > TYPE-POOLS: slis.
    >
    > TABLES: vbap, vbrk, vbfa, vbak, vbrp, konv, kna1,
    > bkpf, bsad, bkpf_bsad,
    > knvv, pa0002, t005u, mvke, lips, likp, vbpa, vbep.
    >
    > DATA: BEGIN OF i_list OCCURS 0,
    > vbeln LIKE vbak-vbeln,
    > posnr LIKE vbap-posnr,
    <b>  etenr like vbep-etenr,</b>
    > matnr LIKE vbap-matnr,
    > erdat LIKE vbap-erdat,
    > mvgr1 LIKE mvke-mvgr1,
    > wadat_ist LIKE likp-wadat_ist,
    > days TYPE i,
    > werks LIKE vbap-werks,
    > lgort LIKE vbap-lgort,
    > kwmeng LIKE vbap-kwmeng," CH01+
    > lfimg LIKE lips-lfimg," CH01+
    > pstyv LIKE vbap-pstyv," CH01+
    > obd LIKE lips-vbeln," CH01+
    > obd_pos LIKE lips-posnr," CH01+
    > soldto LIKE vbaK-kunnr," JR+
    > shipto LIKE vbpa-kunnr," JR+
    > edatu like vbep-edatu," PR+
    > END OF i_list.
    >
    > DATA: i_list2 LIKE i_list OCCURS 0 WITH HEADER LINE,
    > i_list3 LIKE i_list OCCURS 0 WITH HEADER LINE.
    >
    > DATA: i_list4 LIKE vbap OCCURS 0 WITH HEADER LINE.
    >
    >
    > *ALV Output Header
    > DATA: gt_list_top_of_page TYPE slis_t_listheader,
    > prognm LIKE sy-repid,
    > gc_formname_top_of_page TYPE slis_formname VALUE
    > 'TOP_OF_PAGE',
    > gt_events TYPE slis_t_event,
    > is_layout TYPE slis_layout_alv,
    > is_variant LIKE disvariant,
    > it_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE.
    >
    > DATA:gt_fieldcat TYPE slis_t_fieldcat_alv.
    > DATA:gt_outtab LIKE i_list OCCURS 0 WITH HEADER
    > LINE.
    >
    > DATA: g_repid LIKE sy-repid,
    > g_count LIKE sy-tabix.
    >
    > SELECTION-SCREEN BEGIN OF BLOCK block0 WITH FRAME
    > TITLE text-t01.
    >
    > SELECTION-SCREEN: BEGIN OF LINE.
    > SELECTION-SCREEN COMMENT 1(79) text-t10.
    >
    > SELECTION-SCREEN: END OF LINE.
    >
    > SELECTION-SCREEN: BEGIN OF LINE.
    > SELECTION-SCREEN COMMENT 1(79) text-t11.
    > SELECTION-SCREEN: END OF LINE.
    >
    > SELECTION-SCREEN: BEGIN OF LINE.
    > SELECTION-SCREEN COMMENT 1(79) text-t12.
    > SELECTION-SCREEN: END OF LINE.
    >
    > SELECTION-SCREEN END OF BLOCK block0.
    >
    > */ Selection and Input Parameters
    > SELECTION-SCREEN BEGIN OF BLOCK blocko WITH FRAME
    > TITLE text-001.
    >
    >
    >
    > SELECT-OPTIONS: s_vbeln FOR vbap-vbeln, "SO
    > s_auart FOR vbak-auart DEFAULT 'KB' OBLIGATORY,
    > s_matnr FOR vbap-matnr," obligatory,
    > s_mvgr1 FOR mvke-mvgr1,
    > s_erdat FOR vbap-erdat OBLIGATORY,
    > s_werks FOR vbap-werks,
    > s_lgort FOR vbap-lgort,
    > s_edatu FOR vbep-edatu.
    >
    > PARAMETERS: p_vkorg LIKE vbak-vkorg DEFAULT '5010'.
    >
    >
    >
    > SELECTION-SCREEN SKIP 2.
    > *----
    > -
    +EC1
    > * Addition +EC1
    > *----
    > -
    +EC1
    > PARAMETERS: p_vari LIKE disvariant-variant.
    > *----
    > -
    +EC1
    > * End Addition +EC1
    > *----
    > -
    +EC1
    > SELECTION-SCREEN END OF BLOCK blocko.
    >
    > *----
    > -
    +EC1
    > * Addition +EC1
    > *----
    > -
    +EC1
    > DATA: g_save(1) TYPE c,
    > * g_default(1) TYPE c,
    > g_exit(1) TYPE c,
    > gx_variant LIKE disvariant,
    > g_variant LIKE disvariant.
    > *----
    > -
    +EC1
    > * End Addition +EC1
    > *----
    > -
    +EC1
    >
    > * Initialization fieldcatalog
    > INITIALIZATION.
    >
    > * PERFORM clear_tables.
    >
    > g_repid = sy-repid.
    > PERFORM fieldcat_init USING gt_fieldcat[].
    > *----
    > -
    +EC1
    > * Addition +EC1
    > *----
    > -
    +EC1
    > g_save = 'A'.
    > PERFORM variant_init.
    > * Get default variant
    > gx_variant = g_variant.
    > CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    > EXPORTING
    > i_save = g_save
    > CHANGING
    > cs_variant = gx_variant
    > EXCEPTIONS
    > not_found = 2.
    > IF sy-subrc = 0.
    > p_vari = gx_variant-variant.
    > ENDIF.
    >
    > AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
    > PERFORM f4_for_variant.
    >
    > AT SELECTION-SCREEN.
    > PERFORM auth_check. "+ESC
    > PERFORM pai_of_selection_screen.
    >
    >
    >
    > *----
    > -
    +EC1
    > * End Addition +EC1
    > *----
    > -
    +EC1
    >
    >
    > START-OF-SELECTION.
    >
    > PERFORM get_data.
    >
    > PERFORM alv.
    >
    > END-OF-SELECTION.
    >
    > *----
    > -
    > * FORM get_data *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > FORM get_data.
    > *CH01 - Added kwmeng(order qty) to selection,
    > excluded rejects
    > *JR -added soldto and shipto code
    SELECT a~vbeln a~posnr a~matnr a~erdat a~werks a~lgort
    a~kwmeng a~pstyv b~kunnr c~edatu
    CH01+
    INTO corresponding fields of table i_list
    FROM vbap AS a INNER JOIN vbak AS b ON a~vbeln = b~vbeln
    INNER JOIN vbep AS c ON a~vbeln = c~vbeln
    and a~posnr = c~posnr
    WHERE b~vkorg = p_vkorg
    AND a~werks IN s_werks
    AND a~lgort IN s_lgort
    AND b~auart IN s_auart
    AND a~vbeln IN s_vbeln
    AND a~erdat IN s_erdat
    AND a~abgru = ''" CH01+
    AND a~matnr IN s_matnr
    AND c~edatu IN s_edatu.
    > COMMIT WORK AND WAIT.
    >
    > LOOP AT i_list.
    > SELECT SINGLE mvgr1 INTO i_list-mvgr1 FROM mvke
    > WHERE matnr = i_list-matnr.
    > MODIFY i_list.
    > CLEAR: i_list.
    > ENDLOOP.
    > COMMIT WORK AND WAIT.
    >
    > LOOP AT i_list.
    > IF i_list-mvgr1 IN s_mvgr1.
    > CONTINUE.
    > ELSE.
    > DELETE i_list.
    > COMMIT WORK AND WAIT.
    > ENDIF.
    > ENDLOOP.
    > * CH01 - commented these lines out and redid logic
    > below
    > * LOOP AT i_list.
    > ** select single vbeln into lips-vbeln from lips
    > ** where vgbel = i_list-vbeln
    > ** and vgpos = i_list-posnr.
    > **
    > ** select single wadat_ist into i_list-wadat_ist from
    > likp
    > ** where vbeln = lips-vbeln.
    > *
    > * SELECT b~wadat_ist INTO i_list-wadat_ist
    > * FROM lips AS a INNER JOIN
    > * likp AS b ON a~vbeln = b~vbeln WHERE a~vgbel =
    > i_list-vbeln
    > * AND a~vgpos = i_list-posnr.
    > * MODIFY i_list.
    > * CLEAR: i_list, lips-vbeln.
    > * ENDSELECT.
    > * ENDLOOP.
    >
    > * CH01 - Changed to select multiple delivery lines &
    > del qty
    > * summing the total deliveries per OBD# and date
    > LOOP AT i_list.
    > SELECT avbeln sum( alfimg ) b~wadat_ist
    > INTO (i_list-obd , i_list-lfimg , i_list-wadat_ist)
    > FROM lips AS a INNER JOIN
    > likp AS b ON avbeln = bvbeln WHERE a~vgbel =
    > i_list-vbeln
    > AND a~vgpos = i_list-posnr
    > AND a~pstyv = i_list-pstyv
    > group by avbeln bwadat_ist.
    > i_list2 = i_list.
    > APPEND i_list2.
    > ENDSELECT.
    > IF sy-subrc <> 0.
    > i_list2 = i_list.
    > APPEND i_list2.
    > ENDIF.
    > ENDLOOP.
    > i_list[] = i_list2[].
    > *End CH01
    >
    > COMMIT WORK AND WAIT.
    >
    > LOOP AT i_list.
    > IF i_list-wadat_ist IS INITIAL.
    > CONTINUE.
    > ELSE.
    > i_list-days = i_list-wadat_ist - i_list-erdat.
    > ENDIF.
    > MODIFY i_list.
    > CLEAR: i_list.
    > COMMIT WORK AND WAIT.
    > ENDLOOP.
    >
    > COMMIT WORK AND WAIT.
    >
    > LOOP AT i_list.
    > IF i_list-vbeln IS INITIAL.
    > DELETE i_list.
    > ENDIF.
    > ENDLOOP.
    > COMMIT WORK AND WAIT.
    >
    > *JR
    > LOOP AT i_list.
    > SELECT SINGLE KUNNR INTO i_list-shipto FROM vbpa
    > WHERE vbeln = i_list-vbeln
    > AND parvw = 'WE'.
    > MODIFY i_list.
    > ENDLOOP.
    > *END JR
    >
    > gt_outtab[] = i_list[].
    > COMMIT WORK AND WAIT.
    >
    >
    > ENDFORM.
    >
    > *----
    > -
    > * FORM alv *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > FORM alv.
    >
    > PERFORM e03_eventtab_build USING gt_events[]. "+EC1
    > PERFORM e04_comment_build USING
    > gt_list_top_of_page[]. "+EC1
    > prognm = sy-repid. "+EC1
    >
    >
    > CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    > EXPORTING
    > i_callback_user_command = 'USER_COMMAND'
    > i_callback_program = g_repid
    > it_fieldcat = gt_fieldcat[]
    > it_events = gt_events[] "+ESC
    > it_sort = it_sort[]
    > *----
    > -
    +EC1
    > * Addition +EC1
    > *----
    > -
    +EC1
    > is_variant = g_variant
    > i_save = g_save
    > *----
    > -
    +EC1
    > * End Addition +EC1
    > *----
    > -
    +EC1
    > TABLES
    > t_outtab = gt_outtab.
    >
    > COMMIT WORK AND WAIT.
    >
    >
    > ENDFORM.
    >
    >
    > *----
    > -
    > * FORM fieldcat_init *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > * --> I_FIELDCAT *
    > *----
    > -
    > FORM fieldcat_init
    > USING i_fieldcat TYPE slis_t_fieldcat_alv.
    > DATA: ls_fieldcat TYPE slis_fieldcat_alv.
    > DATA: pos TYPE i VALUE 1.
    > CLEAR ls_fieldcat.
    <b>Please note to keep on incrementing pos variable for column position.</b>
    <b> pos = pos + 1.</b>
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'VBELN'.
    > ls_fieldcat-ref_tabname = 'VBAK'.
    > ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    <b> pos = pos + 1.</b> ===> after every append to field catalog.
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'POSNR'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    <b>> ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'ETERN'.
    > ls_fieldcat-ref_tabname = 'VBEP'.
    > ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.</b>
    >
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'MATNR'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'MVGR1'.
    > ls_fieldcat-ref_tabname = 'MVKE'.
    > ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'WERKS'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > * ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'LGORT'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > * ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'ERDAT'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > * ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'WADAT_IST'.
    > ls_fieldcat-ref_tabname = 'LIKP'.
    > * ls_fieldcat-key = 'X'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'DAYS'.
    > ls_fieldcat-ref_fieldname = 'DAYS'.
    > ls_fieldcat-seltext_s = '# Of Days'.
    > ls_fieldcat-seltext_m = '# Of Days'.
    > ls_fieldcat-seltext_l = '# Of Days'.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > *Begin CH01
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'KWMENG'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > ls_fieldcat-outputlen = 7.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'LFIMG'.
    > ls_fieldcat-ref_tabname = 'LIPS'.
    > ls_fieldcat-outputlen = 7.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'OBD'.
    > ls_fieldcat-seltext_s = 'OBD'.
    > ls_fieldcat-seltext_m = 'Outbound Del'.
    > ls_fieldcat-seltext_l = 'Outbound Delivery'.
    > ls_fieldcat-outputlen = 10.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > * ls_fieldcat-col_pos = pos.
    > * ls_fieldcat-fieldname = 'OBD_POS'.
    > * ls_fieldcat-seltext_s = 'OBD Ln'.
    > * ls_fieldcat-seltext_m = 'Outbound Del Ln'.
    > * ls_fieldcat-seltext_l = 'Outbound Del Line'.
    > * ls_fieldcat-outputlen = 10.
    > * APPEND ls_fieldcat TO i_fieldcat.
    > * CLEAR ls_fieldcat.
    > *
    > *End CH01
    >
    > *JR
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'SOLDTO'.
    > ls_fieldcat-ref_tabname = 'VBAP'.
    > ls_fieldcat-seltext_m = 'Sold To'.
    > ls_fieldcat-seltext_l = 'Sold To'.
    > ls_fieldcat-outputlen = 10.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'SHIPTO'.
    > ls_fieldcat-ref_tabname = 'VBPA'.
    > ls_fieldcat-seltext_m = 'Ship To'.
    > ls_fieldcat-seltext_l = 'Ship To'.
    > ls_fieldcat-outputlen = 10.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    > *END JR
    >
    > ls_fieldcat-col_pos = pos.
    > ls_fieldcat-fieldname = 'EDATU'.
    > ls_fieldcat-ref_tabname = 'VBEP'.
    > ls_fieldcat-seltext_m = 'Requested Delivery date'.
    > ls_fieldcat-seltext_l = 'Requested Delivery date'.
    > ls_fieldcat-outputlen = 20.
    > APPEND ls_fieldcat TO i_fieldcat.
    > CLEAR ls_fieldcat.
    >
    >
    > *FOR ALV SORT & SUBTOTAL
    > CLEAR it_sort.
    > it_sort-spos = '0'.
    > it_sort-fieldname = 'VBELN'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-up = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    >
    > CLEAR it_sort.
    > it_sort-spos = '1'.
    > it_sort-fieldname = 'POSNR'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-up = 'X'.
    > it_sort-subtot = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    > *
    > CLEAR it_sort.
    > it_sort-spos = '2'.
    > it_sort-fieldname = 'MATNR'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-up = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    >
    > CLEAR it_sort.
    > it_sort-spos = '3'.
    > it_sort-fieldname = 'MVGR1'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-up = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    > *
    > CLEAR it_sort.
    > it_sort-spos = '4'.
    > it_sort-fieldname = 'ERDAT'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-up = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    >
    >
    > CLEAR it_sort.
    > it_sort-spos = '5'.
    > it_sort-fieldname = 'WADAT_IST'.
    > it_sort-tabname = 'GT_OUTTAB'.
    > it_sort-down = 'X'.
    > * it_sort-subtot = 'X'.
    > APPEND it_sort.
    >
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '6'.
    > * it_sort-fieldname = 'PERNR'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '7'.
    > * it_sort-fieldname = 'VORNA'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '8'.
    > * it_sort-fieldname = 'NACHN'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '9'.
    > * it_sort-fieldname = 'VKGRP'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '10'.
    > * it_sort-fieldname = 'VBELN'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '11'.
    > * it_sort-fieldname = 'ERDAT'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    > * CLEAR it_sort.
    > * it_sort-spos = '12'.
    > * it_sort-fieldname = 'BEZEI'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > ** it_sort-subtot = 'X'.
    > * APPEND it_sort.
    > *
    >
    > * clear it_sort.
    > * it_sort-spos = '1'.
    > * it_sort-fieldname = 'BELNR'.
    > * it_sort-tabname = 'GT_OUTTAB'.
    > * it_sort-up = 'X'.
    > * append it_sort.
    >
    >
    > ENDFORM.
    >
    > *----
    > -
    +EC1
    > * Addition +EC1
    > *----
    > -
    +EC1
    > *&----
    > -
    > *& Form VARIANT_INIT
    > *&----
    > -
    > * text
    > *----
    > -
    > * --> p1 text
    > * <-- p2 text
    > *----
    > -
    > FORM variant_init.
    > *
    > CLEAR g_variant.
    > g_variant-report = g_repid.
    > ENDFORM. " VARIANT_INIT
    >
    >
    >
    > *----
    > -
    > * FORM f4_for_variant *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > FORM f4_for_variant.
    > *
    > CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    > EXPORTING
    > is_variant = g_variant
    > i_save = g_save
    > * it_default_fieldcat =
    > IMPORTING
    > e_exit = g_exit
    > es_variant = gx_variant
    > EXCEPTIONS
    > not_found = 2.
    > IF sy-subrc = 2.
    > MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
    > WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    > ELSE.
    > IF g_exit = space.
    > p_vari = gx_variant-variant.
    > ENDIF.
    > ENDIF.
    > ENDFORM.
    > *&----
    > -
    > *& Form PAI_OF_SELECTION_SCREEN
    > *&----
    > -
    > * text
    > *----
    > -
    > FORM pai_of_selection_screen.
    > *
    > IF NOT p_vari IS INITIAL.
    > MOVE g_variant TO gx_variant.
    > MOVE p_vari TO gx_variant-variant.
    > CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
    > EXPORTING
    > i_save = g_save
    > CHANGING
    > cs_variant = gx_variant.
    > g_variant = gx_variant.
    > ELSE.
    > PERFORM variant_init.
    > ENDIF.
    > ENDFORM. " PAI_OF_SELECTION_SCREEN
    > *----
    > -
    +EC1
    > * End Addition +EC1
    > *----
    > -
    +EC1
    >
    >
    > *----
    > -
    > * FORM e03_eventtab_build *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > * --> E03_LT_EVENTS *
    > *----
    > -
    > FORM e03_eventtab_build USING e03_lt_events TYPE
    > slis_t_event.
    > DATA: ls_event TYPE slis_alv_event.
    >
    > CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    > EXPORTING
    > i_list_type = 0
    > IMPORTING
    > et_events = e03_lt_events.
    > READ TABLE e03_lt_events WITH KEY name =
    > slis_ev_top_of_page
    > INTO ls_event.
    > IF sy-subrc = 0.
    > MOVE gc_formname_top_of_page TO ls_event-form.
    > APPEND ls_event TO e03_lt_events.
    > ENDIF.
    > ENDFORM.
    >
    > *----
    > -
    > * FORM e04_comment_build *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > * --> E04_LT_TOP_OF_PAGE *
    > *----
    > -
    > FORM e04_comment_build USING e04_lt_top_of_page TYPE
    > slis_t_listheader.
    > DATA: ls_line TYPE slis_listheader.
    >
    > *Report Title
    > CLEAR ls_line.
    > ls_line-typ = 'H'.
    > ls_line-info = text-007.
    > APPEND ls_line TO e04_lt_top_of_page.
    > *
    > *
    > **Doc Type Desc.
    > * clear ls_line.
    > * ls_line-typ = 'S'.
    > * ls_line-key = text-008.
    > ** ls_line-info = p_matnr.
    > * append ls_line to e04_lt_top_of_page.
    > *
    > * clear ls_line.
    > * ls_line-typ = 'S'.
    > * ls_line-key = text-009.
    > ** ls_line-info = p_werks.
    > * append ls_line to e04_lt_top_of_page.
    > *
    > *
    > * clear ls_line.
    > * ls_line-typ = 'S'.
    > * ls_line-key = text-010.
    > ** ls_line-info = p_stlan.
    > * append ls_line to e04_lt_top_of_page.
    > *
    > * clear ls_line.
    > * ls_line-typ = 'S'.
    > * ls_line-key = text-011.
    > ** ls_line-info = p_stlal.
    > * append ls_line to e04_lt_top_of_page.
    > *
    > * clear ls_line.
    > * ls_line-typ = 'S'.
    > * ls_line-key = text-012.
    > ** ls_line-info = p_stlal.
    > * append ls_line to e04_lt_top_of_page.
    >
    >
    >
    > ENDFORM.
    >
    > *----
    > -
    > * FORM top_of_page *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > FORM top_of_page.
    >
    > CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    > EXPORTING
    > it_list_commentary = gt_list_top_of_page.
    >
    >
    > ENDFORM.
    >
    > *----
    > -
    > * FORM auth_check *
    > *----
    > -
    > * ........ *
    > *----
    > -
    > FORM auth_check.
    >
    > AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
    > ID 'VKORG' FIELD p_vkorg.
    > IF sy-subrc NE 0.
    > MESSAGE e054 WITH p_vkorg.
    > ENDIF.
    >
    >
    > ENDFORM. " auth_check
    >
    >
    > *&----
    > -
    > *& Form USER_COMMAND
    > *&----
    > -
    > FORM user_command USING r_ucomm LIKE sy-ucomm
    > rs_selfield TYPE slis_selfield.
    >
    > CASE r_ucomm.
    > WHEN '&IC1'.
    > PERFORM display_so_order USING r_ucomm
    > rs_selfield.
    >
    > ENDCASE.
    >
    > ENDFORM.
    >
    > *&----
    > -
    > *& Form display_sales_order
    > *&----
    > -
    > * text
    > *----
    > -
    > * -->P_R_UCOMM text
    > * -->P_RS_SELFIELD text
    > *----
    > -
    > FORM display_so_order USING r_ucomm LIKE sy-ucomm
    > rs_selfield TYPE slis_selfield.
    >
    > CASE rs_selfield-sel_tab_field.
    > WHEN '1-VBELN'.
    > SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
    > CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
    > WHEN '1-MATNR'.
    > SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
    > CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
    > WHEN '1-OBD'.
    > SET PARAMETER ID 'VL' FIELD rs_selfield-value.
    > CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
    > WHEN OTHERS.
    > MESSAGE i000(z1) WITH 'Please Click on the Valid
    > Selection'.
    > EXIT.
    > ENDCASE.
    >
    >
    > ENDFORM. " display_sales_order
    >
    > *----
    > -
    > * FORM EDit_table *
    > *----
    > -
    > * ........ *
    > *----
    > -
    Message was edited by: Anurag Bankley

  • Create TOP-OF-PAGE display for REUSE_ALV_GRID_DISPLAY

    Hi,
    I need to create a TOP-OF-PAGE display to show the MATNR, description and EA per CSE for my report.
    The report is output using "REUSE_ALV_GRID_DISPLAY."
    See following code:
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
      I_CALLBACK_TOP_OF_PAGE            =
         I_STRUCTURE_NAME                  = 'ZSTATE_PROD_INQ'
        TABLES
          T_OUTTAB                          = I_ALV_MATNR.
    How do I add a TOP-OF-PAGE display to the report, while using the above alv?
    Points will be rewarded and all responses will be greatly appreciated.
    Thanks,
    John

    See the example Program :
    Use FM - 
       CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
           EXPORTING
                I_LOGO             = 'FDLOGO'
                IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
    REPORT ZMM_INV_DAYS_SUPPLY no standard page heading
                                message-id zwave.
    ======================================================================
    Program Name : ZMM_INV_DAYS_SUPPLY                                   *
    Description  : this report  identify Obsolete and Excessive inventory*
                   it show show days of supply by date. Need to define   *
                   Average daily sales for a sku. Possibly look back to  *
                   the last 3 weeks or look at the same period a year ago*
                   puls a growth factor to help with seasonal items      *
    Author       : Seshu                                                 *
    Date         : 03/14/2007                                            *
    MODIFICATION HISTORY                                                 *
    DATE    | AUTHOR   | CHANGE #   | DESCRIPTION OF MODIFICATION        *
    --|||--
    03/14/07| Seshu    | DEVK922128 | Initial                            *
    03/22/07| Seshu    | DEVK922148 | Removed Duplicates                 *
    03/26/07| Seshu    | DEVK922152 | Added new selection-screen         *
    03/27/07| Seshu    | DEVK922154 | Material status as range option now*
    03/27/07| Seshu    | DEVK922158 | Corrected storage type in where con*
    ======================================================================
    type-pools
    type-pools : slis.
    Data Declaration
    tables : mara,
             marc,
             lagp,
             mvke,
             makt.
    Constants
    constants : c_werks(4) type c value '1000'," Plant
                c_lgort(4) type c value '1000'," Storage Location
                c_periv like MARC-PERIV value 'XX',
                c_perkz like MVER-PERKZ value 'T'.
    Internal Tables
    Internal Table for MARA and MAKT and MARD
    data : begin of I_material occurs 0,
           matnr like mara-matnr, " Material
           lgpla like mlgt-lgpla," Storage Type
           zzdept like marc-zzdept," Pick Dept
           ZZPRODDEPT like marc-ZZPRODDEPT," Prod Dept
           vmsta like mvke-vmsta, " Material Status
           end of i_material.
    Structure
    data : begin of i_final occurs 0 ,
           matnr like mara-matnr," Material #
           maktx like makt-maktx," Description
           lgpla like mlgt-lgpla, " Storage Bin
           days  like P0347-SCRDD, " No of Days
           menge like mseg-menge, " Avg Daily Sales
           kbetr like konp-kbetr, " Avg
           labst like mard-labst," Inventory Stock
           stprs like mbew-stprs, " Mvg avg Price
           dos   like mseg-menge, " DOS Units
           dosm  like konp-kbetr, " DOS $$
           end of i_final.
    data : int_ges_verb_tab like sverbtaba
                                occurs 0 with header line.
    Internal table for A004
    data : i_a004 like a004 occurs 0 with header line.
    Data Variables
    data : v_stprs like konp-kbetr,
           v_repid like sy-repid,
           v_labst like mard-labst,
           v_maktx like makt-maktx.
      ALV Function Module Variables
    DATA: g_repid like sy-repid,
          gs_layout type slis_layout_alv,
          g_exit_caused_by_caller,
          gs_exit_caused_by_user type slis_exit_by_user.
    DATA: gt_fieldcat    type slis_t_fieldcat_alv,
          gs_print       type slis_print_alv,
          gt_events      type slis_t_event,
          gt_list_top_of_page type slis_t_listheader,
          g_status_set   type slis_formname value 'PF_STATUS_SET',
          g_user_command type slis_formname value 'USER_COMMAND',
          g_top_of_page  type slis_formname value 'TOP_OF_PAGE',
          g_top_of_list  type slis_formname value 'TOP_OF_LIST',
          g_end_of_list  type slis_formname value 'END_OF_LIST',
          g_variant LIKE disvariant,
          g_save(1) TYPE c,
          g_tabname_header TYPE slis_tabname,
          g_tabname_item   TYPE slis_tabname,
          g_exit(1) TYPE c,
          gx_variant LIKE disvariant.
    Selection-screen
    selection-screen : begin of block blk with frame title text-001.
    parameters : p_werks like marc-werks obligatory default '1000'.
    select-options : s_matnr for mara-matnr,
                     s_MATKL for mara-MATKL,
                     s_mtart for mara-mtart,
                     s_LGTYP for LAGP-LGTYP,
                     p_vmsta for MVKE-VMSTA,
                     s_dept  for marc-zzdept,
                     s_pdept for MARC-ZZPRODDEPT.
    selection-screen: end of block blk.
    selection-screen begin of block periods with frame title text-002.
    selection-screen begin of line.
    selection-screen comment (15) text-c01.
    selection-screen position 18.
    Period 1
    parameters: p_stdat1 like mkpf-budat obligatory.
    selection-screen position 35.
    selection-screen comment (10) text-c02.
    parameters: p_endat1 like mkpf-budat obligatory.
    selection-screen end of line.
    selection-screen end of block periods.
    Fill the default values
    initialization.
      v_repid = sy-repid.
      PERFORM LAYOUT_INIT USING GS_LAYOUT.
      PERFORM EVENTTAB_BUILD USING GT_EVENTS[].
    Validation for Dates
    at selection-screen.
      if p_stdat1 > p_endat1.
        message e206(zwave) with
           ' End date should be greater than or equal to Start Date'.
      endif.
    Make one of the Selection should be mandatory
      if s_matnr-low is initial.
        if s_matkl-low is initial and s_mtart-low is initial and
           s_dept-low is initial  and s_pdept-low is initial.
          message e208(zwave) with
                       'Enter atleast one selection Criteria'.
        endif.
      endif.
    Start-of-selection.
    start-of-selection.
    Get the data from MARA,MARD,MAKT Table
      perform get_data_tables.
    Read the data into FInal Table.
      perform read_data.
    END-OF-SELECTION.
    end-of-selection.
      if not i_final[] is initial.
    ALV Function Module
        perform print_alv.
      endif.
    *&      Form  get_data_tables
    Get the data from Tables MARA,MARD,MAKT
    FORM get_data_tables.
      select a~matnr
             b~lgpla
             czzdept cZZPRODDEPT d~vmsta into table i_material
             from mara as a inner join mlgt as b on amatnr = bmatnr
             inner join marc as c on cmatnr = amatnr
             inner join mvke as d on dmatnr = amatnr
             where a~matnr in s_matnr
                   and   c~werks = p_werks
                   and   a~mtart in s_mtart
                   and   c~ZZPRODDEPT in s_pdept
                   and   a~MATKL in s_MATKL
                   and   c~zzdept in s_dept
                   and   b~lgnum = '100'
                   and   b~LGTYP in s_lgtyp
                   and   b~lgpla ne space
                   and   d~vkorg = '0001'
                   and   d~vtweg = '01'
                   and   d~matnr in s_matnr
                   and   d~vmsta in p_vmsta.
      if sy-subrc ne 0.
      message e207(zwave) with 'No data found for Given Selection Criteria'.
      endif.
      sort i_material by matnr .
      DELETE ADJACENT DUPLICATES FROM i_material COMPARING matnr.
    ENDFORM.                    " get_data_tables
    *&      Form  read_data
          Read the data
    FORM read_data.
      loop at i_material.
      Storage Bin
        i_final-lgpla = i_material-lgpla.
    Days of Sales ( End date - Start date )
        CALL FUNCTION 'HR_HK_DIFF_BT_2_DATES'
             EXPORTING
                  DATE1         = p_endat1
                  DATE2         = p_stdat1
                  OUTPUT_FORMAT = '02'
             IMPORTING
                  DAYS          = i_final-days.
    Get the Average Daily Sales (Units) from MVER Table
        perform get_average_sales.
    Get the Average Daily Sales ($$) from VK13 Transaction
        perform get_avgsales_price.
        clear : v_labst.
    Get the Inventory from MARD Table
        select single labst from mard into v_labst
                                 where matnr = i_material-matnr
                                 and   werks = p_werks
                                 and   lgort = c_lgort.
        if sy-subrc eq 0.
    Inventory Stock - MARD-LABST
          i_final-labst = v_labst.
        endif.
    Material #
        i_final-matnr = i_material-matnr.
    Get the Material Description
        clear v_maktx.
        select single maktx from makt into v_maktx
                            where matnr = i_material-matnr
                            and   spras = 'EN'.
        if sy-subrc eq 0.
    Description
          i_final-maktx = v_maktx.
        endif.
    Get the Mvg Average Price
        perform get_moving_avgpr.
    Days of Supply Units.
        if i_final-kbetr ne 0.
          i_final-dos = i_final-labst / i_final-menge.
        endif.
    Days of Supply $$
        i_final-dosm =  i_final-dos * v_stprs.
        append  i_final.
        clear : i_final,
                i_material.
      endloop.
      refresh i_material.
    ENDFORM.                    " read_data
    *&      Form  get_average_sales
          Get the data from MVER Table
    FORM get_average_sales.
      data : lv_menge like mseg-menge.
      refresh int_ges_verb_tab.
      clear : int_ges_verb_tab,
              lv_menge.
      CALL FUNCTION 'CONSUMPTION_READ_FOR_MM'
        EXPORTING
      KZRFB              = ' '
          MATNR              = i_material-matnr
          WERKS              = c_werks
          PERKZ              = c_perkz
          PERIV              = c_periv
       TABLES
         GES_VERB_TAB       = int_ges_verb_tab
      UNG_VERB_TAB       =
       EXCEPTIONS
         WRONG_CALL         = 1
         NOT_FOUND          = 2
         OTHERS             = 3
      IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      loop at int_ges_verb_tab.
        if int_ges_verb_tab-ertag   >= p_stdat1  and
           int_ges_verb_tab-ertag  <= p_endat1.
          add int_ges_verb_tab-vbwrt to lv_menge.
        endif.
      endloop.
      i_final-menge = lv_menge / i_final-days.
    ENDFORM.                    " get_average_sales
    *&      Form  get_avgsales_price
          Avg Daily Sales Price
    FORM get_avgsales_price.
    Get the data from A004 table to get KNUMH
    Added new field Sales Unit - Seshu 01/09/2006
      refresh : i_a004.
      clear :   i_a004.
      data : lv_kbetr like konp-kbetr," Condition value
             lv_KPEIN like konp-kpein , "per
             lv_KMEIN like konp-KMEIN. " Sales Unit
      select * from a004 into table i_a004
                              where matnr = i_material-matnr
                              and   vkorg = '0001'
                              and   vtweg = '01'.
      if sy-subrc eq 0.
        sort i_a004 by DATAB descending.
    Get the Latetest Date
        read table i_a004 with key matnr = i_material-matnr
                                   vkorg = '0001'
                                   vtweg = '01'
                                   binary search.
    Get the Sales Value
        select single kbetr KPEIN KMEIN from konp
                 into (lv_kbetr,lv_KPEIN, lv_KMEIN)
                                 where knumh = i_a004-knumh
                                 and   kappl = i_a004-kappl
                                 and   kschl = i_a004-kschl.
        if sy-subrc eq 0.
          i_final-kbetr = lv_kbetr / lv_KPEIN.
          i_final-kbetr = i_final-kbetr * i_final-menge.
        endif.
      endif.
      clear : lv_kbetr,
              lv_kpein,
              lv_KMEIN.
    ENDFORM.                    " get_avgsales_price
    *&      Form  get_moving_avgpr
          Get the data from MVEW Table
    FORM get_moving_avgpr.
    Local Variables
      data : lv_stprs like mbew-stprs, " Standard Price
             lv_verpr like mbew-verpr, " Moving avg Price
             lv_vprsv like mbew-vprsv. " Price Indicator
      clear : lv_stprs,
              lv_verpr,
              lv_vprsv,
              v_stprs.
      select single stprs verpr vprsv from mbew
                    into (lv_stprs,lv_verpr,lv_vprsv)
                    where matnr = i_material-matnr.
      if sy-subrc eq 0.
        if lv_vprsv = 'S'.
          i_final-stprs = lv_stprs * i_final-labst.
          v_stprs = lv_stprs.
        elseif lv_vprsv = 'V'.
          i_final-stprs = lv_verpr * i_final-labst.
          v_stprs = lv_verpr.
        endif.
      endif.
    ENDFORM.                    " get_moving_avgpr
    *&      Form  print_alv
          REUSE_ALV_GRID_DISPLAY Function Module
    FORM print_alv.
      PERFORM COMMENT_BUILD USING GT_LIST_TOP_OF_PAGE[].
    Populate field catalog
      PERFORM fieldcat_init  using gt_fieldcat[].
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
       I_INTERFACE_CHECK                 = ' '
       I_BYPASSING_BUFFER                =
       I_BUFFER_ACTIVE                   = ' '
         I_CALLBACK_PROGRAM                = v_repid
       I_CALLBACK_PF_STATUS_SET          = ' '
        I_CALLBACK_USER_COMMAND           = g_user_command
        I_CALLBACK_TOP_OF_PAGE            =  g_top_of_page
       I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
       I_CALLBACK_HTML_END_OF_LIST       = ' '
       I_STRUCTURE_NAME                  =
       I_BACKGROUND_ID                   = ' '
       I_GRID_TITLE                      =
       I_GRID_SETTINGS                   =
         IS_LAYOUT                         = gs_layout
          IT_FIELDCAT                       = gt_fieldcat[]
       IT_EXCLUDING                      =
       IT_SPECIAL_GROUPS                 =
       IT_SORT                           =
       IT_FILTER                         =
       IS_SEL_HIDE                       =
       I_DEFAULT                         = 'X'
         I_SAVE                            = 'A'
        IS_VARIANT                        =
         IT_EVENTS                         = GT_EVENTS[]
       IT_EVENT_EXIT                     =
       IS_PRINT                          =
       IS_REPREP_ID                      =
       I_SCREEN_START_COLUMN             = 0
       I_SCREEN_START_LINE               = 0
       I_SCREEN_END_COLUMN               = 0
       I_SCREEN_END_LINE                 = 0
       IT_ALV_GRAPHICS                   =
       IT_ADD_FIELDCAT                   =
       IT_HYPERLINK                      =
       I_HTML_HEIGHT_TOP                 =
       I_HTML_HEIGHT_END                 =
       IT_EXCEPT_QINFO                   =
    IMPORTING
       E_EXIT_CAUSED_BY_CALLER           =
       ES_EXIT_CAUSED_BY_USER            =
        TABLES
          T_OUTTAB                          = i_final
       EXCEPTIONS
         PROGRAM_ERROR                     = 1
         OTHERS                            = 2
      IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    " print_alv
    *&      Form  get_fieldcatlog
          Fieldcatlog
    *&      Form  fieldcat_init
          Fieldcat
    FORM fieldcat_init USING  e01_lt_fieldcat type slis_t_fieldcat_alv.
      DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
    Material #
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'MATNR'.
      LS_FIELDCAT-ref_fieldname = 'MATNR'.
      LS_FIELDCAT-ref_tabname = 'MARA'.
      LS_FIELDCAT-TABNAME    = 'I_FINAL'.
      ls_fieldcat-seltext_L = 'Material'.
      ls_fieldcat-seltext_M = 'Material'.
      ls_fieldcat-seltext_S = 'Material'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Material Description
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'MAKTX'.
      LS_FIELDCAT-OUTPUTLEN    = 30.
      LS_FIELDCAT-TABNAME    = 'I_FINAL'.
      ls_fieldcat-seltext_L = 'Description'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Storage Bin
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'LGPLA'.
      LS_FIELDCAT-OUTPUTLEN    = 10.
      LS_FIELDCAT-TABNAME    = 'I_FINAL'.
      ls_fieldcat-seltext_L = 'Storage Bin'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Start Date
    CLEAR LS_FIELDCAT.
    LS_FIELDCAT-FIELDNAME    = 'SDATE'.
    LS_FIELDCAT-OUTPUTLEN    = 10.
    LS_FIELDCAT-TABNAME    = 'I_FINAL'.
    ls_fieldcat-seltext_L = 'Start Date'.
    APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    End Date.
    CLEAR LS_FIELDCAT.
    LS_FIELDCAT-FIELDNAME    = 'EDATE'.
    LS_FIELDCAT-OUTPUTLEN    = 10.
    LS_FIELDCAT-TABNAME    = 'I_FINAL'.
    ls_fieldcat-seltext_L = 'End Date'.
    APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Days of Sales
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'DAYS'.
      LS_FIELDCAT-OUTPUTLEN    = 12.
      LS_FIELDCAT-TABNAME    = 'I_FINAL'.
      ls_fieldcat-seltext_L = 'Days of Sales'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Average Daily Sales(Units).
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'MENGE'.
      LS_FIELDCAT-OUTPUTLEN    = 18.
      LS_FIELDCAT-TABNAME    = 'I_FINAL'.
      ls_fieldcat-seltext_L = 'Average Daily Sales(Units)'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Average Daily Sales($$)
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'KBETR'.
      LS_FIELDCAT-OUTPUTLEN    = 18.
      LS_FIELDCAT-TABNAME    = 'I_FINAL'.
      ls_fieldcat-seltext_L = 'Average Daily Sales($$)'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Inventory(Units)
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'LABST'.
      LS_FIELDCAT-OUTPUTLEN    = 18.
      LS_FIELDCAT-TABNAME    = 'I_FINAL'.
      ls_fieldcat-seltext_L = 'Inventory(Units)'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Inventory($$)
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'STPRS'.
      LS_FIELDCAT-OUTPUTLEN    = 18.
      LS_FIELDCAT-TABNAME    = 'I_FINAL'.
      ls_fieldcat-seltext_L = 'Inventory($$)'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    DOS($$)
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'DOSM'.
      LS_FIELDCAT-OUTPUTLEN    = 13.
      LS_FIELDCAT-TABNAME    = 'I_FINAL'.
      ls_fieldcat-seltext_L = 'DOS($$)'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    DOS(Days)
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'DOS'.
      LS_FIELDCAT-OUTPUTLEN    = 13.
      LS_FIELDCAT-TABNAME    = 'I_FINAL'.
      ls_fieldcat-seltext_L = 'DOS(Days)'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    ENDFORM.                    " get_fieldcatlog
          FORM COMMENT_BUILD                                            *
    -->  LT_TOP_OF_PAGE                                                *
    FORM COMMENT_BUILD USING LT_TOP_OF_PAGE TYPE
                                            SLIS_T_LISTHEADER.
      DATA: LS_LINE TYPE SLIS_LISTHEADER.
    Variables for Date
      data : lv_year(4) type c,
             lv_mon(2) type c,
             lv_day(2) type c,
             lv_date1(10) type c,
             lv_date2(10) type c.
    LIST HEADING LINE: TYPE H
      CLEAR LS_LINE.
      LS_LINE-TYP  = 'H'.
      LS_LINE-INFO = sy-title.
      APPEND LS_LINE TO LT_TOP_OF_PAGE.
      clear : lv_year,
              lv_day,
              lv_mon,
              lv_date1.
      lv_year = p_stdat1+0(4).
      lv_mon = p_stdat1+4(2).
      lv_day = p_stdat1+6(2).
      concatenate lv_mon '/' lv_day '/' lv_year into lv_date1.
    STATUS LINE: TYPE S
      CLEAR LS_LINE.
      LS_LINE-TYP  = 'S'.
      LS_LINE-KEY  = TEXT-c01.
      LS_LINE-INFO = lv_date1.
      APPEND LS_LINE TO LT_TOP_OF_PAGE.
      clear : lv_year,
                lv_day,
                lv_mon,
                lv_date2.
      lv_year = P_ENDAT1+0(4).
      lv_mon = P_ENDAT1+4(2).
      lv_day = P_ENDAT1+6(2).
      concatenate lv_mon '/' lv_day '/' lv_year into lv_date2.
      LS_LINE-KEY  = text-c02.
      LS_LINE-INFO = lv_date2.
      APPEND LS_LINE TO LT_TOP_OF_PAGE.
      CLEAR LS_LINE.
    ENDFORM.
          FORM TOP_OF_PAGE                                              *
    FORM TOP_OF_PAGE.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
           EXPORTING
                I_LOGO             = 'FDLOGO'
                IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
    ENDFORM.
          FORM EVENTTAB_BUILD                                           *
    -->  RT_EVENTS                                                     *
    FORM EVENTTAB_BUILD USING RT_EVENTS TYPE SLIS_T_EVENT.
    *"Registration of events to happen during list display
      DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
           EXPORTING
                I_LIST_TYPE = 0
           IMPORTING
                ET_EVENTS   = RT_EVENTS.
      READ TABLE RT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
                               INTO LS_EVENT.
      IF SY-SUBRC = 0.
        MOVE G_TOP_OF_PAGE TO LS_EVENT-FORM.
        APPEND LS_EVENT TO RT_EVENTS.
      ENDIF.
    ENDFORM.
          FORM LAYOUT_INIT                                              *
    -->  RS_LAYOUT                                                     *
    FORM LAYOUT_INIT USING RS_LAYOUT TYPE SLIS_LAYOUT_ALV.
    **"Build layout for list display
      RS_LAYOUT-DETAIL_POPUP      = 'X'.
    lslayout-f2code            = p_f2code.
    rs_layout-zebra             = 'X'.
    rs_layout-colwidth_optimize = 'X'.
    ENDFORM.

  • Text Determination for order's header text

    Hii All
    My requirement is to populate the header text of the order with the text maintained in customer master (Sales Area Data-Extras-Text)
    I have maintained entries in VOTXN, by choosing sales document --header and maintained a text id Z004 with acces sequence 9021 (Spec order instruction).
    My question is which object should i choose for this access sequence. I have KNVV(Customer texts) as my text object but with that when i create the order the fields are not getting popullated.
    When I choose VBBK as my text object then i get the error that language is "The language does not come from the partner function AG for MVKE"
    Can any one do let me know about how to go about this
    Thanks & Regards
    Gaurav

    Hi Gaurav,
    VBBK - For Non populating the text which is maintained in Customer Master.
    Please maintain Reference/Dupl.in Text ID's in Test Procedure & in Access Sequence 9021 mark ALL LANGUAGES & maintain Partner function SP.
    Regards,
    Hemant Patil

  • Order quantity equals to delivery unit in material master

    Dear All,
    I have below requirement regarding Delivery unit (MVKE-SCMNG).
    My requirement is that whatever unit has been maintained in material master in Delivery unit, system shall not allow to create sales order of quantity which is more or less than the delivery unit.
    Meaning, system shall only allow to create sales order of quantity equals to the quantity maintained in the material master in delivery unit.
    Kindly let me know if any user exit(s) available for the same.
    Waiting for your valuable reply.
    Thanks,
    Ritesh

    Hi Ritesh,
    This is very much possible using user exit, MV45AFZZ in FORM userexit_save_document.
    Other option would be in MV45AFZB FORM USEREXIT_CHECK_VBAP, you can check that this qty in material master if unequal to ordered qty you can give a pop-up to user that 'The qty is being changed to xx' as soon as the user presses enter as the user would know about it.
    in MV45AFZZ, the user would know only after saving and would be able to see in VA03 after the document is created.
    Regards,
    RS.

  • More than 255 bytes in SO_NEW_DOCUMENT_ATT_SEND_API1

    I know they are some posts about this topic already but I have read them all but I still don't have the solution. I hope someone could help me with this:
    The problem is this: I have an internal table and I make an excell file of it which is mailed (sapmail) to the user who started the program. I all works fine except for the problem of the 255 limit. This happens because SOLISTI1 has an 255 limit. The excell attachment is mailed but it breaks after 255 characters (the total characters is about 500).
    I know there are some solutions with TABLE_COMPRESS and TABLE_DECOMPRESS but I don't know on which moment you should compress or decompress which table! Below if my coding hope someone can help:
    REPORT ZDTAFNAME_K.
    tables: marc,
    lips,
    vbrp,
    mara,
    kna1,
    vbak,
    VBKD,
    vbrk,
    vbap,
    vbep,
    mvke,
    mbew.
    selection-screen: begin of block select with frame title text-f70.
    select-options art for marc-matnr.
    select-options abc for marc-abcin.
    select-options fak for vbrp-vbeln default '20406070'.
    Select-options dat for vbrp-erdat.
    selection-screen: end of block select.
    PARAMETERS: p_email TYPE somlreci1-receiver
    DEFAULT '31dtg'.
    data: rule(2) value '.,'.
    data: begin of itab occurs 0,
    deb like vbak-kunnr, "Debiteurennummer
    debnaam like kna1-name1, "Naam debiteur
    bestnr like vbkd-bstkd, "Bestelnr klant
    artnr like marc-matnr, "Artikelnr
    oms like lips-arktx, "Omschrijving
    type like mara-groes, "Type
    fab like lips-matkl, "Fabrikaat
    faktuurdat like vbrp-erdat, "Faktuurdatum
    faksrt like vbrk-fkart, "Faktuursoort
    faktuur like vbrp-vbeln, "Faktuurnr
    fakpos like vbrp-posnr, "Faktuurpositie
    fakaantal(11) type c , "Faktuuraantal
    fakeenh like vbrp-meins, "Faktuureenheid
    fakwaarde(11) type c , "Faktuurwaarde
    orddat like vbap-erdat, "Orderdatum
    ordsrt like vbak-auart, "Ordersoort
    verkoper like vbak-ernam, "Verkoper
    ordnr like lips-vgbel, "Ordernr
    ordnrpos like lips-vgpos, "Order positie
    artklant like vbap-kdmat, "Artikelnr klant
    ordaant(11) type c, "Order aantal
    ordeenh like vbap-meins, "Order eenheid
    ordwaarde(11) type c, "Nettowaarde orderpositie
    postype like vbap-pstyv, "Positietype
    gevlevdat like vbep-edatu, "Gevraagde leverdatum
    levdat like lips-erdat, "Werkelijke leverdatum
    levnr like lips-vbeln, "Leveringsnr
    levpos like lips-posnr, "Levering positie
    levaant(11) type c, "Leveringsaantal
    leveenh like lips-meins, "Leveringseenheid
    min(11) type c, "Bestelpunt
    max(11) type c, "Max vrd
    basiseenh like mara-meins, "Basiseenheid
    abc like marc-abcin, "ABC Classificatie
    artsoort like mara-mtart, "Artikelsoort
    vkstatus(2) type c, "Verkoopstatus
    ikstatus(2) type c, "Inkoopstatus
    minlev(11) type c, "Min levereenheid
    afrd(11) type c, "Afrondingswaarde
    vprs(11) type c, "VPRS
    vprseenh(11) type c, "VPRS eenheid
    end of itab.
    DATA: it_message TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
    WITH HEADER LINE.
    DATA: it_attach TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
    WITH HEADER LINE.
    DATA: t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
    t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,
    t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
    t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,
    t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,
    w_cnt TYPE i,
    w_sent_all(1) TYPE c,
    w_doc_data LIKE sodocchgi1,
    gd_error TYPE sy-subrc,
    gd_reciever TYPE sy-subrc.
    *START_OF_SELECTION
    START-OF-SELECTION.
    Retrieve sample data from table ekpo
    PERFORM data_retrieval.
    Populate table with detaisl to be entered into .xls file
    PERFORM build_xls_data_table.
    *END-OF-SELECTION
    END-OF-SELECTION.
    Populate message body text
    perform populate_email_message_body.
    Send file by email as .xls speadsheet
    PERFORM send_file_as_email_attachment
    tables it_message
    it_attach
    using p_email
    'Example .xls documnet attachment'
    'XLS'
    'filename'
    changing gd_error
    gd_reciever.
    Instructs mail send program for SAPCONNECT to send email(rsconn01)
    PERFORM initiate_mail_execute_program.
    *& Form DATA_RETRIEVAL
    Retrieve data form EKPO table and populate itab it_ekko
    FORM data_retrieval.
    select * from vbrk client specified where
    mandt = sy-mandt and
    vbeln in fak and
    erdat in dat and
    fkart = 'F2'.
    select * from vbrp client specified where
    mandt = sy-mandt and
    vbeln = vbrk-vbeln and
    erdat in dat and
    matnr in art.
    select single * from marc client specified where
    mandt = sy-mandt and
    werks = 610 and
    matnr = vbrp-matnr and
    abcin in abc.
    if sy-subrc = 0.
    itab-levnr = vbrp-vgbel.
    itab-levpos = vbrp-vgpos.
    itab-faksrt = vbrk-fkart.
    select single * from mara client specified where
    mandt = sy-mandt and
    matnr = marc-matnr.
    if sy-subrc = 0.
    itab-type = mara-groes.
    itab-basiseenh = mara-meins.
    endif.
    select single * from mvke client specified where
    mandt = sy-mandt and
    matnr = marc-matnr.
    if sy-subrc = 0.
    itab-vkstatus = mvke-vmsta.
    itab-minlev = mvke-scmng.
    endif.
    select single * from mbew client specified where
    mandt = sy-mandt and
    matnr = marc-matnr and
    bwkey = 610.
    if sy-subrc = 0.
    itab-vprs = mbew-verpr.
    itab-vprseenh = mbew-peinh.
    endif.
    select single * from vbak client specified where
    mandt = sy-mandt and
    vbeln = vbrp-aubel.
    if sy-subrc = 0.
    itab-deb = vbak-kunnr.
    itab-ordsrt = vbak-auart.
    endif.
    select single * from vbap client specified where
    mandt = sy-mandt and
    vbeln = vbrp-aubel and
    posnr = vbrp-aupos.
    if sy-subrc = 0.
    itab-verkoper = vbap-ernam.
    itab-orddat = vbap-erdat.
    itab-artklant = vbap-kdmat.
    itab-ordaant := vbap-kwmeng.
    itab-ordeenh = vbap-meins.
    itab-ordwaarde := vbap-netwr.
    itab-postype = vbap-pstyv.
    endif.
    select single * from vbep client specified where
    mandt = sy-mandt and
    vbeln = vbap-vbeln and
    posnr = vbap-posnr and
    etenr = '0001'.
    if sy-subrc = 0.
    itab-gevlevdat = vbep-edatu.
    endif.
    select single * from vbkd client specified where
    mandt = sy-mandt and
    vbeln = vbak-vbeln.
    if sy-subrc = 0.
    itab-bestnr = vbkd-bstkd.
    endif.
    select single * from lips client specified where
    mandt = sy-mandt and
    vbeln = vbrp-vgbel and
    posnr = vbrp-vgpos.
    if sy-subrc = 0.
    itab-levdat = lips-erdat.
    itab-levaant = lips-lfimg.
    itab-leveenh = lips-meins.
    else.
    clear itab-levnr.
    clear itab-levpos.
    clear itab-levaant.
    clear itab-levdat.
    endif.
    select single * from kna1 client specified where
    mandt = sy-mandt and
    kunnr = vbak-kunnr.
    if sy-subrc = 0.
    itab-debnaam = kna1-name1.
    endif.
    itab-artnr = marc-matnr.
    itab-oms = vbrp-arktx.
    itab-fab = vbrp-matkl.
    itab-abc = marc-abcin.
    itab-artsoort = mara-mtart.
    itab-min = marc-minbe.
    itab-max = marc-mabst.
    itab-afrd = marc-bstrf.
    itab-ikstatus = marc-mmsta.
    itab-faktuur = vbrp-vbeln.
    itab-fakpos = vbrp-posnr.
    *UNPACK VBRP-FKIMG TO ITAB-FAKAANTAL.
    *shift itab-fakaantal right by 3 places.
    itab-fakaantal = vbrp-fkimg.
    translate itab-fakaantal using rule.
    itab-fakeenh = vbrp-meins.
    itab-faktuurdat = vbrp-erdat.
    *UNPACK VBRP-NETWR TO ITAB-FAKWAARDE.
    *shift itab-FAKWAARDE right by 2 places.
    itab-FAKWAARDE = vbrp-netwr.
    Translate van velden
    translate itab-fakwaarde using rule.
    translate itab-fakaantal using rule.
    translate itab-ordaant using rule.
    translate itab-ordwaarde using rule.
    translate itab-min using rule.
    translate itab-max using rule.
    translate itab-vkstatus using rule.
    translate itab-ikstatus using rule.
    itab-ordnr = vbrp-aubel.
    itab-ordnrpos = vbrp-aupos.
    append itab.
    endif.
    endselect. " Select * from vbrp.
    endselect.
    endform.
    *& Form BUILD_XLS_DATA_TABLE
    Build data table for .xls document
    FORM build_xls_data_table.
    CONSTANTS: con_cret TYPE x VALUE '0D', "OK for non Unicode
    con_tab TYPE x VALUE '09'. "OK for non Unicode
    *If you have Unicode check active in program attributes thnen you will
    *need to declare constants as follows
    *class cl_abap_char_utilities definition load.
    *constants:
    con_tab type c value cl_abap_char_utilities=>HORIZONTAL_TAB,
    con_cret type c value cl_abap_char_utilities=>CR_LF.
    CONCATENATE 'DEBNR' 'NAAM' 'BESTELNR'
    'ARTNR' 'OMSCHRIJVING' 'TYPE'
    'FABRIKAAT' 'FAKTUURDATUM' 'FAKSRT'
    'FAKTUURNR' 'FAK.POS.' 'FAK.AANTAL'
    'FAK.EENH' 'FAKTUUR WAARDE' 'ORDER DATUM'
    'ORDSRT' 'VERKOPER' 'ORDERNR.' 'ORDER.POS.'
    'ARTNR KLANT' 'ORDER AANTAL' 'ORDER EENH'
    'ORDERWAARDE' 'POS.TYPE' 'GEVRAAGDE LEVDAT'
    'WERKELIJKE LEVDAT' 'LEVERINGSNR' 'LEV.POS'
    'LEV.AANTAL' 'LEV.EENH' 'BESTELPUNT'
    'MAX VRD' 'BASISEENH' 'ABC' 'ARTSRT.'
    'VK.STATUS' 'IK.STATUS' 'MIN.LEVEENH.'
    'AFDRONDINGSWAARDE' 'VPRS' 'PER'
    INTO it_attach SEPARATED BY con_tab.
    CONCATENATE con_cret it_attach INTO it_attach.
    APPEND it_attach.
    LOOP AT ITAB.
    CONCATENATE itab-deb itab-debnaam itab-bestnr itab-artnr
    itab-oms itab-type itab-fab itab-faktuurdat
    itab-faksrt itab-faktuur itab-fakpos
    itab-fakaantal itab-fakeenh itab-fakwaarde
    itab-orddat itab-ordsrt itab-verkoper itab-ordnr
    itab-ordnrpos itab-artklant itab-ordaant
    itab-ordeenh itab-ordwaarde itab-postype
    itab-gevlevdat itab-levdat itab-levnr itab-levpos
    itab-levaant itab-leveenh itab-min itab-max
    itab-basiseenh itab-abc itab-artsoort itab-vkstatus
    itab-ikstatus itab-minlev itab-afrd itab-vprs
    itab-vprseenh
    INTO it_attach SEPARATED BY con_tab.
    CONCATENATE con_cret it_attach INTO it_attach.
    APPEND it_attach.
    ENDLOOP.
    ENDFORM. " BUILD_XLS_DATA_TABLE
    *& Form SEND_FILE_AS_EMAIL_ATTACHMENT
    Send email
    FORM send_file_as_email_attachment tables pit_message
    pit_attach
    using p_email
    p_mtitle
    p_format
    p_filename
    p_attdescription
    p_sender_address
    p_sender_addres_type
    changing p_error
    p_reciever.
    DATA: ld_error TYPE sy-subrc,
    ld_reciever TYPE sy-subrc,
    ld_mtitle LIKE sodocchgi1-obj_descr,
    ld_email LIKE somlreci1-receiver,
    ld_format TYPE so_obj_tp ,
    ld_attdescription TYPE so_obj_nam ,
    ld_attfilename TYPE so_obj_des ,
    ld_sender_address LIKE soextreci1-receiver,
    ld_sender_address_type LIKE soextreci1-adr_typ,
    ld_receiver LIKE sy-subrc.
    ld_email = p_email.
    ld_mtitle = p_mtitle.
    ld_format = p_format.
    ld_attdescription = p_attdescription.
    ld_attfilename = p_filename.
    ld_sender_address = p_sender_address.
    ld_sender_address_type = p_sender_addres_type.
    Fill the document data.
    w_doc_data-doc_size = 1.
    Populate the subject/generic message attributes
    w_doc_data-obj_langu = sy-langu.
    w_doc_data-obj_name = 'SAPRPT'.
    w_doc_data-obj_descr = ld_mtitle .
    w_doc_data-sensitivty = 'F'.
    Fill the document data and get size of attachment
    CLEAR w_doc_data.
    READ TABLE it_attach INDEX w_cnt.
    w_doc_data-doc_size =
    ( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
    w_doc_data-obj_langu = sy-langu.
    w_doc_data-obj_name = 'SAPRPT'.
    w_doc_data-obj_descr = ld_mtitle.
    w_doc_data-sensitivty = 'F'.
    CLEAR t_attachment.
    REFRESH t_attachment.
    t_attachment[] = pit_attach[].
    Describe the body of the message
    CLEAR t_packing_list.
    REFRESH t_packing_list.
    t_packing_list-transf_bin = space.
    t_packing_list-head_start = 1.
    t_packing_list-head_num = 0.
    t_packing_list-body_start = 1.
    DESCRIBE TABLE it_message LINES t_packing_list-body_num.
    t_packing_list-doc_type = 'RAW'.
    APPEND t_packing_list.
    Create attachment notification
    t_packing_list-transf_bin = 'X'.
    t_packing_list-head_start = 1.
    t_packing_list-head_num = 1.
    t_packing_list-body_start = 1.
    DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
    t_packing_list-doc_type = ld_format.
    t_packing_list-obj_descr = ld_attdescription.
    t_packing_list-obj_name = ld_attfilename.
    t_packing_list-doc_size = t_packing_list-body_num * 255.
    APPEND t_packing_list.
    Add the recipients email address
    CLEAR t_receivers.
    REFRESH t_receivers.
    MOVE: SY-UNAME TO t_RECEIVERs-RECEIVER,
    'X' TO t_RECEIVERs-EXPRESS,
    'B' TO t_RECEIVERs-REC_TYPE.
    APPEND t_RECEIVERs.
    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
    document_data = w_doc_data
    put_in_outbox = 'X'
    sender_address = ld_sender_address
    sender_address_type = ld_sender_address_type
    commit_work = 'X'
    IMPORTING
    sent_to_all = w_sent_all
    TABLES
    packing_list = t_packing_list
    contents_bin = t_attachment
    contents_txt = it_message
    receivers = t_receivers
    EXCEPTIONS
    too_many_receivers = 1
    document_not_sent = 2
    document_type_not_exist = 3
    operation_no_authorization = 4
    parameter_error = 5
    x_error = 6
    enqueue_error = 7
    OTHERS = 8.
    Populate zerror return code
    ld_error = sy-subrc.
    Populate zreceiver return code
    LOOP AT t_receivers.
    ld_receiver = t_receivers-retrn_code.
    ENDLOOP.
    ENDFORM.
    *& Form INITIATE_MAIL_EXECUTE_PROGRAM
    Instructs mail send program for SAPCONNECT to send email.
    FORM initiate_mail_execute_program.
    WAIT UP TO 2 SECONDS.
    SUBMIT rsconn01 WITH mode = 'INT'
    WITH output = 'X'
    AND RETURN.
    ENDFORM. " INITIATE_MAIL_EXECUTE_PROGRAM
    *& Form POPULATE_EMAIL_MESSAGE_BODY
    Populate message body text
    form populate_email_message_body.
    REFRESH it_message.
    it_message = 'Please find attached a list test ekpo records'.
    APPEND it_message.
    endform. " POPULATE_EMAIL_MESSAGE_BODY

    Thanks Kunal Ghosh for your replies. I did try to condense it but it was still more than 255 characters.
    I solved it by using chunks! I spend more than a week to solve this problem! The solution is so simple. Here's the new code for everybody who has the same problem:
    REPORT ZDTAFNAME_K_ART no standard page heading line-size 250.
    tables: marc,
            lips,
            vbrp,
            mara,
            kna1,
            vbak,
            VBKD,
            vbrk,
            vbap,
            vbep,
            mvke,
            mbew.
    selection-screen: begin of block select with frame title text-f70.
    select-options art for marc-matnr.
    select-options abc for marc-abcin.
    select-options fak for vbrp-vbeln.
    Select-options dat for vbrp-erdat.
    select-options fsoort for vbrk-fkart.
    select-options vest for marc-werks.
    selection-screen: end of block select.
    *parameters: p_email   type somlreci1-receiver
                                     DEFAULT '31dtg'.
    data: p_email like somlreci1-receiver.
    data: rule(2) value '.,'.
    data: begin of itab occurs 0,
         deb     like vbak-kunnr,  "Debiteurennummer
         debnaam like kna1-name1,  "Naam debiteur
          bestnr like vbkd-bstkd,  "Bestelnr klant
           artnr like marc-matnr,  "Artikelnr
             oms like lips-arktx,  "Omschrijving
            type like mara-groes,  "Type
             fab like lips-matkl,  "Fabrikaat
      faktuurdat like vbrp-erdat,  "Faktuurdatum
          faksrt like vbrk-fkart,  "Faktuursoort
         faktuur like vbrp-vbeln,  "Faktuurnr
          fakpos like vbrp-posnr,  "Faktuurpositie
       fakaantal(11) type c     ,  "Faktuuraantal
         fakeenh like vbrp-meins,  "Faktuureenheid
           fakwaarde(11) type c ,  "Faktuurwaarde
          orddat like vbap-erdat,  "Orderdatum
          ordsrt like vbak-auart,  "Ordersoort
        verkoper like vbak-ernam,  "Verkoper
           ordnr like lips-vgbel,  "Ordernr
        ordnrpos like lips-vgpos,  "Order positie
        artklant like vbap-kdmat,  "Artikelnr klant
              ordaant(11) type c,  "Order aantal
         ordeenh like vbap-meins,  "Order eenheid
             ordwaarde(11) type c, "Nettowaarde orderpositie
         postype like vbap-pstyv,  "Positietype
       gevlevdat like vbep-edatu,  "Gevraagde leverdatum
          levdat like lips-erdat,  "Werkelijke leverdatum
           levnr like lips-vbeln,  "Leveringsnr
          levpos like lips-posnr,  "Levering positie
         levaant(11) type c,       "Leveringsaantal
         leveenh like lips-meins,  "Leveringseenheid
             min(11) type c,  "Bestelpunt
             max(11) type c,  "Max vrd
       basiseenh like mara-meins,  "Basiseenheid
             abc like marc-abcin,  "ABC Classificatie
        artsoort like mara-mtart,  "Artikelsoort
        vkstatus(2) type c,        "Verkoopstatus
        ikstatus(2) type c,        "Inkoopstatus
          minlev(11) type c,       "Min levereenheid
            afrd(11) type c,       "Afrondingswaarde
            vprs(11) type c,       "VPRS
        vprseenh(11) type c,       "VPRS eenheid
      end of itab.
    DATA:   it_message TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
                    WITH HEADER LINE.
    DATA:   it_attach TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
                    WITH HEADER LINE.
    DATA:   t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
            t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,
            t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
            t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,
            t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,
            w_cnt TYPE i,
            w_sent_all(1) TYPE c,
            w_doc_data LIKE sodocchgi1,
            gd_error    TYPE sy-subrc,
            gd_reciever TYPE sy-subrc.
    *START_OF_SELECTION
    START-OF-SELECTION.
      Retrieve sample data from table ekpo
      PERFORM data_retrieval.
      Populate table with detaisl to be entered into .xls file
      PERFORM build_xls_data_table.
    *END-OF-SELECTION
    END-OF-SELECTION.
    Populate message body text
      perform populate_email_message_body.
    Send file by email as .xls speadsheet
      PERFORM send_file_as_email_attachment
                              tables it_message
                              it_attach
                              using p_email
                              'Xls bestand afname per artikelsoort'
                                          'XLS'
                                          'filename'
                                 changing gd_error
                                          gd_reciever.
      Instructs mail send program for SAPCONNECT to send email(rsconn01)
      PERFORM initiate_mail_execute_program.
    *&      Form  DATA_RETRIEVAL
          Retrieve data form EKPO table and populate itab it_ekko
    FORM data_retrieval.
    select * from vbrk client specified where
             mandt = sy-mandt and
             vbeln in fak and
             erdat in dat and
             fkart in fsoort.
    select * from vbrp client specified where
             mandt = sy-mandt and
             vbeln = vbrk-vbeln and
             matnr in art.
      select single * from  marc client specified where
      mandt = sy-mandt and
      werks in vest and
      matnr = vbrp-matnr and
      abcin in abc.
      if sy-subrc = 0.
        itab-levnr = vbrp-vgbel.
        itab-levpos = vbrp-vgpos.
        itab-faksrt = vbrk-fkart.
        select single * from mara client specified where
                        mandt = sy-mandt and
                        matnr = marc-matnr.
        if sy-subrc = 0.
          itab-type = mara-groes.
          itab-basiseenh = mara-meins.
        endif.
        select single * from mvke client specified where
                        mandt = sy-mandt and
                        matnr = marc-matnr.
        if sy-subrc = 0.
          itab-vkstatus = mvke-vmsta.
          itab-minlev = mvke-scmng.
        endif.
        select single * from mbew client specified where
                        mandt = sy-mandt and
                        matnr = marc-matnr and
                        bwkey = 610.
        if sy-subrc = 0.
          itab-vprs = mbew-verpr.
          itab-vprseenh = mbew-peinh.
        endif.
        select single * from vbak client specified where
                        mandt = sy-mandt and
                        vbeln = vbrp-aubel.
        if sy-subrc = 0.
          itab-deb = vbak-kunnr.
          itab-ordsrt = vbak-auart.
        endif.
        select single * from vbap client specified where
                        mandt = sy-mandt and
                        vbeln = vbrp-aubel and
                        posnr = vbrp-aupos.
        if sy-subrc = 0.
          itab-verkoper = vbap-ernam.
          itab-orddat = vbap-erdat.
          itab-artklant = vbap-kdmat.
          itab-ordaant := vbap-kwmeng.
          itab-ordeenh = vbap-meins.
          itab-ordwaarde := vbap-netwr.
          itab-postype = vbap-pstyv.
        endif.
        select single * from vbep client specified where
                        mandt = sy-mandt and
                        vbeln = vbap-vbeln and
                        posnr = vbap-posnr and
                        etenr = '0001'.
        if sy-subrc = 0.
          itab-gevlevdat = vbep-edatu.
        endif.
        select single * from vbkd client specified where
                        mandt = sy-mandt and
                        vbeln = vbak-vbeln.
        if sy-subrc = 0.
          itab-bestnr = vbkd-bstkd.
        endif.
        select single * from lips client specified where
                        mandt = sy-mandt and
                        vbeln = vbrp-vgbel and
                        posnr = vbrp-vgpos.
        if sy-subrc = 0.
          itab-levdat = lips-erdat.
          itab-levaant = lips-lfimg.
          itab-leveenh = lips-meins.
        else.
          clear itab-levnr.
          clear itab-levpos.
          clear itab-levaant.
          clear itab-levdat.
        endif.
        select single * from kna1 client specified where
                        mandt = sy-mandt and
                        kunnr = vbak-kunnr.
        if sy-subrc = 0.
          itab-debnaam = kna1-name1.
        endif.
        itab-artnr = marc-matnr.
        itab-oms = vbrp-arktx.
        itab-fab = vbrp-matkl.
        itab-abc = marc-abcin.
        itab-artsoort = mara-mtart.
        itab-min = marc-minbe.
        itab-max = marc-mabst.
        itab-afrd = marc-bstrf.
        itab-ikstatus = marc-mmsta.
        itab-faktuur = vbrp-vbeln.
        itab-fakpos = vbrp-posnr.
    *UNPACK VBRP-FKIMG TO ITAB-FAKAANTAL.
    *shift itab-fakaantal right by 3 places.
    itab-fakaantal = vbrp-fkimg.
    translate itab-fakaantal using rule.
        itab-fakeenh = vbrp-meins.
        itab-faktuurdat = vbrp-erdat.
    *UNPACK VBRP-NETWR TO ITAB-FAKWAARDE.
    *shift itab-FAKWAARDE right by 2 places.
    itab-FAKWAARDE = vbrp-netwr.
    Translate van velden
    translate itab-fakwaarde using rule.
    translate itab-fakaantal using rule.
    translate itab-ordaant using rule.
    translate itab-ordwaarde using rule.
    translate itab-min using rule.
    translate itab-max using rule.
    translate itab-vkstatus using rule.
    translate itab-ikstatus using rule.
    translate itab-VPRS using rule.
    translate itab-vprseenh using rule.
    translate itab-levaant using rule.
    translate itab-minlev using rule.
    translate itab-afrd using rule.
        itab-ordnr = vbrp-aubel.
        itab-ordnrpos = vbrp-aupos.
    append itab.
    clear itab.
    endif.
    endselect. " Select * from vbrp.
    endselect. " Select * from vbrk.
    endform.
    *&      Form  BUILD_XLS_DATA_TABLE
          Build data table for .xls document
    FORM build_xls_data_table.
      CONSTANTS: con_cret TYPE x VALUE '0D',  "OK for non Unicode
                 con_tab TYPE x VALUE '09'.   "OK for non Unicode
    *If you have Unicode check active in program attributes thnen you will
    *need to declare constants as follows
    *class cl_abap_char_utilities definition load.
    *constants:
       con_tab  type c value cl_abap_char_utilities=>HORIZONTAL_TAB,
       con_cret type c value cl_abap_char_utilities=>CR_LF.
    <b>
      CONCATENATE 'DEBNR' 'NAAM' 'BESTELNR'
                  'ARTNR' 'OMSCHRIJVING' 'TYPE'
                 'FABRIKAAT' 'FAKTUURDATUM' 'FAKSRT'
                  'FAKTUURNR' 'FAK.POS.' 'FAK.AANTAL'
                  'FAK.EENH' 'FAKTUUR WAARDE' 'ORDER DATUM'
                  'ORDSRT' 'VERKOPER' 'ORDERNR.' 'ORDER.POS.'
                  'ARTNR KLANT' 'ORDER AANTAL'
                  INTO it_attach SEPARATED BY con_tab.
    CONCATENATE con_cret it_attach INTO it_attach.
       APPEND  it_attach.
    CONCATENATE   con_tab 'ORDER EENH' 'ORDERWAARDE'
                  'POS.TYPE' 'GEVRAAGDE LEVDAT'
                  'WERKELIJKE LEVDAT' 'LEVERINGSNR' 'LEV.POS'
                  'LEV.AANTAL' 'LEV.EENH' 'BESTELPUNT'
                  'MAX VRD' 'BASISEENH' 'ABC' 'ARTSRT.'
                  'VK.STATUS' 'IK.STATUS' 'MIN.LEVEENH.'
                  'AFDRONDINGSWAARDE' 'VPRS' 'PER'
             INTO it_attach SEPARATED BY con_tab.
      APPEND  it_attach.
      LOOP AT ITAB.
        CONCATENATE itab-deb itab-debnaam itab-bestnr itab-artnr
                    itab-oms itab-type itab-fab itab-faktuurdat
                    itab-faksrt itab-faktuur itab-fakpos
                    itab-fakaantal itab-fakeenh itab-fakwaarde
                    itab-orddat itab-ordsrt itab-verkoper itab-ordnr
                    itab-ordnrpos itab-artklant itab-ordaant
                    INTO it_attach SEPARATED BY con_tab.
                    CONCATENATE Con_cret it_attach  INTO it_attach.
                    APPEND  it_attach.
    CONCATENATE     con_tab itab-ordeenh itab-ordwaarde itab-postype
                    itab-gevlevdat itab-levdat itab-levnr itab-levpos
                    itab-levaant itab-leveenh itab-min itab-max
                    itab-basiseenh itab-abc itab-artsoort itab-vkstatus
                    itab-ikstatus itab-minlev itab-afrd itab-vprs
                    itab-vprseenh
                    INTO it_attach SEPARATED BY con_tab.
        APPEND  it_attach.
      ENDLOOP.</b>
    ENDFORM.                    " BUILD_XLS_DATA_TABLE
    *&      Form  SEND_FILE_AS_EMAIL_ATTACHMENT
          Send email
    FORM send_file_as_email_attachment tables pit_message
                                              pit_attach
                                        using p_email
                                              p_mtitle
                                              p_format
                                              p_filename
                                              p_attdescription
                                              p_sender_address
                                              p_sender_addres_type
                                     changing p_error
                                              p_reciever.
      DATA: ld_error    TYPE sy-subrc,
            ld_reciever TYPE sy-subrc,
            ld_mtitle LIKE sodocchgi1-obj_descr,
            ld_email LIKE  somlreci1-receiver,
            ld_format TYPE  so_obj_tp ,
            ld_attdescription TYPE  so_obj_nam ,
            ld_attfilename TYPE  so_obj_des ,
            ld_sender_address LIKE  soextreci1-receiver,
            ld_sender_address_type LIKE  soextreci1-adr_typ,
            ld_receiver LIKE  sy-subrc.
      ld_email   = p_email.
      ld_mtitle = p_mtitle.
      ld_format              = p_format.
      ld_attdescription      = p_attdescription.
      ld_attfilename         = p_filename.
      ld_sender_address      = p_sender_address.
      ld_sender_address_type = p_sender_addres_type.
    Fill the document data.
      w_doc_data-doc_size = 1.
    Populate the subject/generic message attributes
      w_doc_data-obj_langu = sy-langu.
      w_doc_data-obj_name  = 'SAPRPT'.
      w_doc_data-obj_descr = ld_mtitle .
      w_doc_data-sensitivty = 'F'.
    Fill the document data and get size of attachment
      CLEAR w_doc_data.
      READ TABLE it_attach INDEX w_cnt.
      w_doc_data-doc_size =
         ( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
      w_doc_data-obj_langu  = sy-langu.
      w_doc_data-obj_name   = 'SAPRPT'.
      w_doc_data-obj_descr  = ld_mtitle.
      w_doc_data-sensitivty = 'F'.
      CLEAR t_attachment.
      REFRESH t_attachment.
      t_attachment[] = pit_attach[].
    Describe the body of the message
      CLEAR t_packing_list.
      REFRESH t_packing_list.
      t_packing_list-transf_bin = space.
      t_packing_list-head_start = 1.
      t_packing_list-head_num = 0.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE it_message LINES t_packing_list-body_num.
      t_packing_list-doc_type = 'RAW'.
      APPEND t_packing_list.
    Create attachment notification
      t_packing_list-transf_bin = 'X'.
      t_packing_list-head_start = 1.
      t_packing_list-head_num   = 1.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
      t_packing_list-doc_type   =  ld_format.
      t_packing_list-obj_descr  =  ld_attdescription.
      t_packing_list-obj_name   =  ld_attfilename.
      t_packing_list-doc_size   =  t_packing_list-body_num * 255.
      APPEND t_packing_list.
    Add the recipients email address
      CLEAR t_receivers.
      REFRESH t_receivers.
      MOVE: SY-UNAME TO t_RECEIVERs-RECEIVER,
            'X'      TO t_RECEIVERs-EXPRESS,
            'B'      TO t_RECEIVERs-REC_TYPE.
      APPEND t_RECEIVERs.
      CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
           EXPORTING
                document_data              = w_doc_data
                put_in_outbox              = 'X'
                sender_address             = ld_sender_address
                sender_address_type        = ld_sender_address_type
                commit_work                = 'X'
           IMPORTING
                sent_to_all                = w_sent_all
           TABLES
                packing_list               = t_packing_list
                contents_bin               = t_attachment
                contents_txt               = it_message
                receivers                  = t_receivers
           EXCEPTIONS
                too_many_receivers         = 1
                document_not_sent          = 2
                document_type_not_exist    = 3
                operation_no_authorization = 4
                parameter_error            = 5
                x_error                    = 6
                enqueue_error              = 7
                OTHERS                     = 8.
    Populate zerror return code
      ld_error = sy-subrc.
    Populate zreceiver return code
      LOOP AT t_receivers.
        ld_receiver = t_receivers-retrn_code.
      ENDLOOP.
    ENDFORM.
    *&      Form  INITIATE_MAIL_EXECUTE_PROGRAM
          Instructs mail send program for SAPCONNECT to send email.
    FORM initiate_mail_execute_program.
      WAIT UP TO 2 SECONDS.
      SUBMIT rsconn01 WITH mode = 'INT'
                    WITH output = 'X'
                    AND RETURN.
    ENDFORM.                    " INITIATE_MAIL_EXECUTE_PROGRAM
    *&      Form  POPULATE_EMAIL_MESSAGE_BODY
           Populate message body text
    form populate_email_message_body.
      REFRESH it_message.
      it_message = 'Deze mail is automatisch gemaakt door transactie ZAKA'.
      APPEND it_message.
    endform.                    " POPULATE_EMAIL_MESSAGE_BODY

  • Convert quantity in one unit to quantity in another unit

    Hi all,
    I have to convert quantity in one unit to quantity in another unit.
    please suggest me a function module which converts.
    Ex :
    i have quantity : MVKE-SCMNG = 20
           Unit     : MVKE-SCHME = UUE
    now  convert the quantity
           quantity : ?
           Unit     : PCE
    i have used : UNIT_CONVERSION_SIMPLE, but it did not work.
    i think the conv is material specific.
    i can get values from MARM Table .. but i am looking for a function module which can convert.
    Thank you all in advance.

    Hi
    see this may be helpfull
    i had changed the sobid (45 char) to objid (8 numc)
    reward if usefull
    SELECT OTYPE
             OBJID
             RELAT
             BEGDA
             ENDDA
             SCLAS
             SOBID FROM HRP1001 INTO TABLE IT_HRP1001
                        WHERE OTYPE = 'D'
                            AND OBJID IN S_OBJID
                            AND BEGDA GE DATE-LOW
                            AND ENDDA LE DATE-HIGH
                            AND ( SCLAS = 'E' OR SCLAS = 'ET' ).
      IF SY-SUBRC NE 0.
        MESSAGE 'NO RECORD FOUND FOR THE GIVEN SELECTION CRITERIA ' TYPE 'E'.
      ENDIF.
      LOOP AT IT_HRP1001 INTO WA_HRP1001.
        WA_SOBID-OTYPE = WA_HRP1001-OTYPE.
        WA_SOBID-OBJID = WA_HRP1001-OBJID.
        WA_SOBID-RELAT = WA_HRP1001-RELAT.
        WA_SOBID-BEGDA = WA_HRP1001-BEGDA.
        WA_SOBID-ENDDA = WA_HRP1001-ENDDA.
        WA_SOBID-SCLAS = WA_HRP1001-SCLAS.
        WA_SOBID-SOBID = WA_HRP1001-SOBID.
        APPEND WA_SOBID TO IT_SOBID.
      ENDLOOP.
    regards
    naresh

  • Background scheduling in BAPI

    REPORT  ZIND_BACKGROUND_JOB MESSAGE-ID zsd
                                        NO STANDARD PAGE HEADING
                                        LINE-SIZE 160.
    Tables
    TABLES: mara,mvke.
    Data Definitions.
    TYPES: BEGIN OF ty_mat,
             matnr     TYPE mara-matnr,
             vkorg     TYPE mvke-vkorg,                " Sales Org
             vtweg     TYPE mvke-vtweg,                " Dist. Channel
             prdha     TYPE mara-prdha,                " Prod Hierarchy
             err(60)   TYPE C,
           END OF ty_mat.
    DATA: gt_matnr     TYPE STANDARD TABLE  OF ty_mat WITH HEADER LINE,
          gt_matnr_err TYPE STANDARD TABLE  OF ty_mat WITH HEADER LINE.
    DATA: gs_matnr_err TYPE ty_mat.
    DATA: lv_file_name    TYPE string,
          lv_message(200) TYPE c.
    DATA : JN(8) TYPE C,
           val(1) .
    DATA: PRIPAR TYPE PRI_PARAMS,
          ARCPAR TYPE ARC_PARAMS.
    For BAPI
    DATA: headdata             TYPE bapimathead,
          clientdata           TYPE bapi_mara,
          clientdatax          TYPE bapi_marax,
          return               TYPE bapiret2,
          salesdata            TYPE bapi_mvke,
          salesdatax           TYPE bapi_mvkex.
    DATA: ret  TYPE STANDARD TABLE OF bapi_matreturn2 WITH HEADER LINE.
    Selection Screen
    SELECTION-SCREEN BEGIN OF BLOCK b001 WITH FRAME TITLE text-001.
    SELECT-OPTIONS: s_matnr FOR mara-matnr,
                    s_vkorg FOR mvke-vkorg OBLIGATORY,
                    s_vtweg FOR mvke-vtweg OBLIGATORY,
                    s_matkl FOR mara-matkl.
    SELECTION-SCREEN END OF BLOCK b001.
    SELECTION-SCREEN BEGIN OF BLOCK b002 WITH FRAME TITLE text-002.
        PARAMETERS: p_err       TYPE localfile OBLIGATORY.
    SELECTION-SCREEN: END OF BLOCK b002.
    SELECTION-SCREEN BEGIN OF BLOCK b003 WITH FRAME TITLE text-003.
    PARAMETERS: P_FORE RADIOBUTTON GROUP rad,
                P_BACK RADIOBUTTON GROUP rad.
    SELECTION-SCREEN: END OF BLOCK b003.
    PARAMETERS : P_JOB LIKE TBTCJOB-JOBNAME.
    At selection screen
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_err.
      PERFORM get_filename USING 'Output - Error File'
                           CHANGING p_err.
    AT SELECTION-SCREEN ON BLOCK B003.
    IF P_BACK = 'X' AND  P_JOB NE SPACE.
      PERFORM PRINTER_GET.
      PERFORM JOB_OPEN.
      PERFORM JOB_SUMBIT.
      PERFORM JOB_CLOSE.
      STOP.
    ELSEIF P_JOB = SPACE AND P_BACK = 'X' .
      MESSAGE 'Enter The Job Name' type 'I'.
    ENDIF.
    START-OF-SELECTION.
    START-OF-SELECTION.
      PERFORM 100_collect_dbrecs.
      PERFORM 200_process_dbrecs.
    END-OF-SELECTION.
    *&     TOP-OF-PAGE.
    TOP-OF-PAGE.
      WRITE: 40 'Material Product Hierarchy Update Report'.
      ULINE (115).
    *SKIP.
      WRITE: /'MATERIAL'.
      WRITE: /.
      ULINE (115).
    *&      Form  100_collect_dbrecs
    FORM 100_collect_dbrecs .
      SELECT   maramatnr mvkevkorg mvkevtweg maraprdha
         INTO  CORRESPONDING FIELDS OF TABLE gt_matnr
         FROM  mara INNER JOIN mvke
         ON    maramatnr = mvkematnr
         WHERE mara~matnr IN s_matnr
           AND mara~prdha NE space
           AND mara~matkl IN s_matkl
           AND mara~lvorm EQ space
           AND mvke~vkorg IN s_vkorg
           AND mvke~vtweg IN s_vtweg
           AND mvke~prodh EQ space.
    ENDFORM.                    " 100_collect_dbrecs
    *&      Form  200_process_dbrecs
    FORM 200_process_dbrecs.
      IF gt_matnr[] IS INITIAL.
        MESSAGE s000 WITH 'No Materials Processed.'.
      ELSE.
        LOOP AT gt_matnr.
          CLEAR:  headdata,
                  clientdata,
                  clientdatax,
                  return,
                  salesdata  ,
                  salesdatax,
                  ret.
          REFRESH: ret.
    Filling Material.
          MOVE: gt_matnr-matnr   TO headdata-material,
                'X'              TO headdata-sales_view.
    Sales Org
          MOVE: gt_matnr-vkorg TO salesdata-sales_org,
                gt_matnr-vkorg TO salesdatax-sales_org.
    *Dist Channel
          MOVE: gt_matnr-vtweg TO salesdata-distr_chan,
                gt_matnr-vtweg TO salesdatax-distr_chan.
    *Prod Hierarchy
          MOVE: gt_matnr-prdha TO salesdata-prod_hier,
                'X'            TO salesdatax-prod_hier.
          PERFORM  220_bapi_call.
          CLEAR: gt_matnr.
        ENDLOOP.
    Download Error Files
        IF gt_matnr_err[] IS INITIAL.
    no errors to be downloaded
        ELSE.
    Error File being downloaded.
      lv_file_name = p_err.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename                = lv_file_name
          filetype                = 'ASC'
        TABLES
          data_tab                = gt_matnr_err
        EXCEPTIONS
          file_write_error        = 1
          no_batch                = 2
          gui_refuse_filetransfer = 3
          invalid_type            = 4
          no_authority            = 5
          unknown_error           = 6
          header_not_allowed      = 7
          separator_not_allowed   = 8
          filesize_not_allowed    = 9
          header_too_long         = 10
          dp_error_create         = 11
          dp_error_send           = 12
          dp_error_write          = 13
          unknown_dp_error        = 14
          access_denied           = 15
          dp_out_of_memory        = 16
          disk_full               = 17
          dp_timeout              = 18
          file_not_found          = 19
          dataprovider_exception  = 20
          control_flush_error     = 21
          OTHERS                  = 99.
      IF sy-subrc = 0.
        WRITE: /05 'Error File Download - Successful.'.
      ELSE.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
                INTO lv_message.
        FORMAT INTENSIFIED ON.
        WRITE: /05 'Write error:', lv_message COLOR COL_NEGATIVE.
      ENDIF.
        ENDIF.
      ENDIF.
    ENDFORM.                    " 200_process_dbrecs
    *&      Form  220_BAPI_CALL
    FORM 220_bapi_call .
      DATA: lv_message(60) TYPE c.
      CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
        EXPORTING
          headdata       = headdata
          clientdata     = clientdata
          clientdatax    = clientdatax
          salesdata      = salesdata
          salesdatax     = salesdatax
        IMPORTING
          return         = return
        TABLES
          returnmessages = ret.
      IF sy-subrc EQ 0.
        MOVE : return-message TO lv_message.
        IF return-type EQ 'E'.
          WRITE: /  gt_matnr-matnr,
                   'Change Failed -', lv_message.
          MOVE-CORRESPONDING gt_matnr TO gs_matnr_err.
          APPEND gs_matnr_err to gt_matnr_err. CLEAR gs_matnr_err.
        ELSE.
          WRITE: / gt_matnr-matnr,
                   'Change Successful -', lv_message, ' for ', gt_matnr-vkorg,' ', gt_matnr-vtweg.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
          COMMIT WORK.
        ENDIF.
      ENDIF.
    ENDFORM.                    " 220_BAPI_CALL
    *&      Form  get_filename
          Call up a dialog window to retrieve the filename
         --> P_FILETITLE    Dialog file title
         <-- P_FILENAME     FIle name retrieved
    FORM get_filename  USING    p_filetitle         TYPE c
                       CHANGING p_filename          TYPE localfile.
      CALL FUNCTION 'WS_FILENAME_GET'
        EXPORTING
          def_filename     = ' '
          def_path         = ' '
          mask             = ',.,..'
          mode             = 'O'
          title            = p_filetitle
        IMPORTING
          filename         = p_filename
        EXCEPTIONS
          inv_winsys       = 1
          no_batch         = 2
          selection_cancel = 3
          selection_error  = 4
          OTHERS           = 5.
    ENDFORM.                    " get_filename
    *&      Form  JOB_OPEN
       BACK GROUND JOB ASSIGNING JOB NAME AND IMPORTING JOB NUMBER
    form JOB_OPEN .
      CALL FUNCTION 'JOB_OPEN'
        EXPORTING
        DELANFREP              = ' '
        JOBGROUP               = ' '
          jobname                = P_JOB
        SDLSTRTDT              = NO_DATE
        SDLSTRTTM              = NO_TIME
        JOBCLASS               =
       IMPORTING
         JOBCOUNT               = JN
      CHANGING
        RET                    =
       EXCEPTIONS
         CANT_CREATE_JOB        = 1
         INVALID_JOB_DATA       = 2
         JOBNAME_MISSING        = 3
         OTHERS                 = 4
      IF sy-subrc <> 0.
       MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
                INTO lv_message.
       FORMAT INTENSIFIED ON.
        WRITE: /05 'Write error:', lv_message COLOR COL_NEGATIVE.
      ENDIF.
    endform.                    " JOB_OPEN
    *&      Form  JOB_SUMBIT
         SUBMITTING THE JOB
    form JOB_SUMBIT .
    CALL FUNCTION 'JOB_SUBMIT'
      EXPORTING
      ARCPARAMS                         =
        authcknam                         = SY-UNAME
      COMMANDNAME                       = ' '
      OPERATINGSYSTEM                   = ' '
      EXTPGM_NAME                       = ' '
      EXTPGM_PARAM                      = ' '
      EXTPGM_SET_TRACE_ON               = ' '
      EXTPGM_STDERR_IN_JOBLOG           = 'X'
      EXTPGM_STDOUT_IN_JOBLOG           = 'X'
      EXTPGM_SYSTEM                     = ' '
      EXTPGM_RFCDEST                    = ' '
      EXTPGM_WAIT_FOR_TERMINATION       = 'X'
        jobcount                          = JN
        jobname                           = P_JOB
      LANGUAGE                          = SY-LANGU
      PRIPARAMS                         = pripar
       REPORT                            = SY-REPID
      VARIANT                           = ' '
    IMPORTING
      STEP_NUMBER                       =
    EXCEPTIONS
       BAD_PRIPARAMS                     = 1
       BAD_XPGFLAGS                      = 2
       INVALID_JOBDATA                   = 3
       JOBNAME_MISSING                   = 4
       JOB_NOTEX                         = 5
       JOB_SUBMIT_FAILED                 = 6
       LOCK_FAILED                       = 7
       PROGRAM_MISSING                   = 8
       PROG_ABAP_AND_EXTPG_SET           = 9
       OTHERS                            = 10
    IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
             INTO lv_message.
       FORMAT INTENSIFIED ON.
        WRITE: /05 'Write error:', lv_message COLOR COL_NEGATIVE.
    ENDIF.
    submit ZIND_BACKGROUND_JOB
          via job     p_JOB
              number  JN
          to sap-spool without spool dynpro
              spool parameters PRIPAR
                 and return.
    *SUBMIT ZIND_BACKGROUND_JOB AND RETURN
    *USER SY-UNAME " User for runtime authorizations
    *VIA JOB p_JOB NUMBER JN
    *" Job name and job number
    *" from JOB_OPEN
    *TO SAP-SPOOL " Print and archiving options from
    *" GET_PRINT_PARAMETERS
    *" Both sets of options come from
    *" GET_PRINT_PARAMETERS
    *SPOOL PARAMETERS PRIPAR
    *ARCHIVE PARAMETERS ARCPAR
    *WITHOUT SPOOL DYNPRO.
    **End of Content Area
    endform.                    " JOB_SUMBIT
    *&      Form  JOB_CLOSE
          text
    form JOB_CLOSE .
    CALL FUNCTION 'JOB_CLOSE'
      EXPORTING
      AT_OPMODE                         = ' '
      AT_OPMODE_PERIODIC                = ' '
      CALENDAR_ID                       = ' '
      EVENT_ID                          = ' '
      EVENT_PARAM                       = ' '
      EVENT_PERIODIC                    = ' '
        jobcount                          = JN
        jobname                           = P_JOB
      LASTSTRTDT                        = NO_DATE
      LASTSTRTTM                        = NO_TIME
      PRDDAYS                           = 0
      PRDHOURS                          = 0
      PRDMINS                           = 0
      PRDMONTHS                         = 0
      PRDWEEKS                          = 0
      PREDJOB_CHECKSTAT                 = ' '
      PRED_JOBCOUNT                     = ' '
      PRED_JOBNAME                      = ' '
      SDLSTRTDT                         = NO_DATE
      SDLSTRTTM                         = NO_TIME
      STARTDATE_RESTRICTION             = BTC_PROCESS_ALWAYS
       STRTIMMED                         = 'X'
      TARGETSYSTEM                      = ' '
      START_ON_WORKDAY_NOT_BEFORE       = SY-DATUM
      START_ON_WORKDAY_NR               = 0
      WORKDAY_COUNT_DIRECTION           = 0
      RECIPIENT_OBJ                     =
      TARGETSERVER                      = ' '
      DONT_RELEASE                      = ' '
      TARGETGROUP                       = ' '
      DIRECT_START                      =
    IMPORTING
      JOB_WAS_RELEASED                  =
    CHANGING
      RET                               =
    EXCEPTIONS
       CANT_START_IMMEDIATE              = 1
       INVALID_STARTDATE                 = 2
       JOBNAME_MISSING                   = 3
       JOB_CLOSE_FAILED                  = 4
       JOB_NOSTEPS                       = 5
       JOB_NOTEX                         = 6
       LOCK_FAILED                       = 7
       INVALID_TARGET                    = 8
       OTHERS                            = 9
    IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
                      INTO lv_message.
       FORMAT INTENSIFIED ON.
        WRITE: /05 'Write error:', lv_message COLOR COL_NEGATIVE.
    ENDIF.
    endform.                    " JOB_CLOSE
    *&      Form  PRINTER_GET
          text
    form PRINTER_GET .
    CALL FUNCTION 'GET_PRINT_PARAMETERS'
    EXPORTING
       DESTINATION                    = 'LOCL'
       IMMEDIATELY                    = ''
       NO_DIALOG                      = 'X'
    IMPORTING
       out_archive_parameters         = arcpar
       OUT_PARAMETERS                 = PRIPAR
       valid                          = val
    EXCEPTIONS
       ARCHIVE_INFO_NOT_FOUND         = 1
       INVALID_PRINT_PARAMS           = 2
       INVALID_ARCHIVE_PARAMS         = 3
       OTHERS                         = 4
    IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    endform.                    " PRINTER_GET
    <b>Actually this prog schedules a job and i can see it in SM37, but when i try to release it error i get is step is not defined properly....
    What can be the possible causes of the errors.
    here in my prog i have two parameters which is obligatory (VTWEG and VKORG).
    Iam not submitting this parameter in the background jb, how to do this???
    is it necessary for it to be scheduled in background.
    Pls help me ASAP.</b>
    Title was edited by:
            Alvaro Tejada Galindo

    Hi Naveen,
    You are trying to submit the same program in background. You need to create 2 programs for that..
    Create a program : ZBCKGD & inside it use FM JOB_SUBMIT & Pass program name as ZIND_BACKGROUND_JOB.
    Export the selection criteria from ZBCKGD to ZIND_BACKGROUND_JOB.
    Refer:/people/prashant.patil12/blog/2007/02/20/displaying-alv-grid-in-background-job
    form JOB_SUMBIT .
    CALL FUNCTION 'JOB_SUBMIT'
    EXPORTING
    ARCPARAMS =
    authcknam = SY-UNAME
    COMMANDNAME = ' '
    OPERATINGSYSTEM = ' '
    EXTPGM_NAME = ' '
    EXTPGM_PARAM = ' '
    EXTPGM_SET_TRACE_ON = ' '
    EXTPGM_STDERR_IN_JOBLOG = 'X'
    EXTPGM_STDOUT_IN_JOBLOG = 'X'
    EXTPGM_SYSTEM = ' '
    EXTPGM_RFCDEST = ' '
    EXTPGM_WAIT_FOR_TERMINATION = 'X'
    jobcount = JN
    jobname = P_JOB
    LANGUAGE = SY-LANGU
    PRIPARAMS = pripar
    <b>REPORT = 'ZIND_BACKGROUND_JOB'</b>
    VARIANT = ' '
    IMPORTING
    STEP_NUMBER =
    EXCEPTIONS
    BAD_PRIPARAMS = 1
    BAD_XPGFLAGS = 2
    INVALID_JOBDATA = 3
    JOBNAME_MISSING = 4
    JOB_NOTEX = 5
    JOB_SUBMIT_FAILED = 6
    LOCK_FAILED = 7
    PROGRAM_MISSING = 8
    PROG_ABAP_AND_EXTPG_SET = 9
    OTHERS = 10
    IF

  • REPORT TAKING MORE CPU UTILIZATION

    Hello Experts,
    my following report is of sales order report it gives me an output in less than 250 seconds,
    But taking 80 percentage CPU time so tell me how to overcome this problem ??
    <b>&----
    *& Report  ZMSL_SALES_ORDER_REPORT
    REPORT  ZMSL_SALES_ORDER_REPORT.
    DEFINE: M_FIELDCAT.
      ADD 1 TO LS_FIELDCAT-COL_POS.
      LS_FIELDCAT-FIELDNAME = &1.
      LS_FIELDCAT-SELTEXT_L = &2.
      LS_FIELDCAT-OUTPUTLEN = &3.
      LS_FIELDCAT-TABNAME = 'gt_final_data'.
      APPEND LS_FIELDCAT TO FELD_CAT.
    END-OF-DEFINITION.
    *==================Start of Datebase tables Declaration=================
    TABLES : VBAK, "Sales Document: Header Data
             VBAP, "Sales Document: Item Data
             MARA, "Matrial Master
             VBEP, "Sales Document: Schedule Line Data
             VBPA, "Sales Document: Partner
             TVROT,
             YMSLT_MAIL_ID.
    *=================End of Datebase tables Declaration====================
    *==================Start of Virable  ALV  declaration=================
    **=============================
    TYPE POOLS
    *=============================
    TYPE-POOLS: SLIS.
    *=============================
    *FIELD CATALOG DECLARATION
    *=============================
    CONSTANTS : CO_FORMNAME_TOP_OF_PAGE  TYPE SLIS_FORMNAME
                                         VALUE 'TOP_OF_PAGE'.
    DATA : G_TABNAME_HEADER TYPE SLIS_TABNAME,
           G_TABNAME_ITEM   TYPE SLIS_TABNAME.
    DATA:  FELD_CAT TYPE SLIS_T_FIELDCAT_ALV," WITH HEADER LINE ,
           ALV_LAYOUT   TYPE SLIS_LAYOUT_ALV,
           T_EVENTS           TYPE SLIS_T_EVENT,
           G_SAVE(1) TYPE C,
           G_VARIANT LIKE DISVARIANT,
           GX_VARIANT LIKE DISVARIANT,
           EVENTS   TYPE SLIS_T_EVENT,
           G_EXIT(1) TYPE C,
           LAYOUT   TYPE SLIS_LAYOUT_ALV,
           ALV_PRINT        TYPE SLIS_PRINT_ALV,
           ALV_DETAIL_FUNC(30),
          EVENTS   TYPE SLIS_T_EVENT,
           T_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
    CONSTANTS: FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.
    RANGES : R_PARVW FOR VBPA-PARVW.
    *=================End of Virable  tables Declaration====================
    *==================Start of Selection Screen Declaration================
    SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    SELECTION-SCREEN BEGIN OF BLOCK VAR WITH FRAME TITLE VARIANT.
    PARAMETERS     : P_VARI LIKE DISVARIANT-VARIANT.
    SELECTION-SCREEN END OF BLOCK VAR.
    SELECTION-SCREEN :BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
    SELECT-OPTIONS : S_VKORG FOR VBAK-VKORG OBLIGATORY, " Sales Org.
                     S_VKBUR FOR VBAK-VKBUR, " Sales Office
                     S_VKGRP FOR VBAK-VKGRP, " Sales Group
                     S_VTWEG FOR VBAK-VTWEG. " Distribution Channel
    SELECTION-SCREEN :END OF BLOCK B2.
    SELECTION-SCREEN :BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.
    SELECT-OPTIONS : S_KUNNR FOR VBAK-KUNNR, "Customer Number
                     S_VBELN FOR VBAK-VBELN, "Sales Order Number
                     S_ERDAT FOR VBAK-ERDAT, "OBLIGATORY, "Sales Order Date
                     S_AUGRU FOR VBAK-AUGRU, "Order Reason
                     S_BSTNK FOR VBAK-BSTNK, "PO Number
                     S_AUART FOR VBAK-AUART. "Sales order type
    SELECTION-SCREEN :END OF BLOCK B3.
    SELECTION-SCREEN :BEGIN OF BLOCK B4 WITH FRAME TITLE TEXT-004.
    SELECT-OPTIONS : S_WERKS FOR VBAP-WERKS,  "plant,
                     S_MATNR FOR VBAP-MATNR, " Matrial Code
                     S_PSTYV FOR VBAP-PSTYV, "Sales Order Item cat.
                     S_EDATU FOR VBEP-EDATU,  "Conformatin Date
                     S_REQDAT FOR VBAP-ZZCUST_REQDAT. "Req.Del Date
    SELECTION-SCREEN :END OF BLOCK B4.
    SELECTION-SCREEN :BEGIN OF BLOCK B5 WITH FRAME TITLE TEXT-005.
    SELECT-OPTIONS : S_ZE FOR  VBPA-KUNNR NO INTERVALS NO-EXTENSION , "Partner Function
                     S_ZS FOR VBPA-KUNNR NO INTERVALS NO-EXTENSION, "Partner Function
                     S_ZA FOR VBPA-KUNNR NO INTERVALS NO-EXTENSION, "Partner Function
                     S_ZR FOR VBPA-KUNNR NO INTERVALS NO-EXTENSION, "Partner Function
                     S_ZI FOR VBPA-KUNNR NO INTERVALS NO-EXTENSION. "Partner Function
    *FOR VBPA-KUNNR MATCHCODE OBJECT ZSMR ,
    ***SELECT-OPTIONS : S_ZE FOR  VBPA-PARVW NO INTERVALS NO-EXTENSION , "Partner Function
                    S_ZS FOR VBPA-PARVW NO INTERVALS NO-EXTENSION, "Partner Function
                    S_ZA FOR VBPA-PARVW NO INTERVALS NO-EXTENSION, "Partner Function
                    S_ZR FOR VBPA-PARVW NO INTERVALS NO-EXTENSION, "Partner Function
                    S_ZI FOR VBPA-PARVW NO INTERVALS NO-EXTENSION. "Partner Function
    SELECTION-SCREEN :END OF BLOCK B5.
    SELECTION-SCREEN : BEGIN OF BLOCK B6 WITH FRAME TITLE TEXT-006.
    PARAMETER :  P_SCREEN RADIOBUTTON GROUP RTYP DEFAULT 'X' USER-COMMAND
                                                     UCOMM ,
                 P_FILE  RADIOBUTTON GROUP RTYP,
                 P_MAIL  RADIOBUTTON GROUP RTYP.
    SELECTION-SCREEN :END OF BLOCK B6.
    SELECTION-SCREEN : BEGIN OF BLOCK B7 WITH FRAME TITLE TEXT-007.
    PARAMETER :  P_PEN RADIOBUTTON GROUP RE1 DEFAULT 'X' USER-COMMAND
                                                     UCOMM , " Pending Sales order
                 P_ALL  RADIOBUTTON GROUP RE1,  " ALL Sales order
                 P_BLOCK  RADIOBUTTON GROUP RE1.  " Blocked Sales order
                P_DELE   RADIOBUTTON GROUP RE1.  " Delevered Sales order
    SELECTION-SCREEN :END OF BLOCK B7.
    SELECTION-SCREEN : END OF BLOCK B1.
    *=================End of Selection Screen Declaration===================
    *==================Start of Internal table Declaration==================
    Internal table for vbak
    DATA : BEGIN OF GT_VBAK OCCURS 0 ,
                VBELN             LIKE VBAK-VBELN , " Sales Document Number
                ERDAT             LIKE VBAK-ERDAT , " Order Date
                AUART             LIKE VBAK-AUART,  "Sales Document Type
                VTWEG             LIKE VBAK-VTWEG,  "Distribution Channel
                SPART             LIKE VBAK-SPART,  "Division
                KNUMV             LIKE VBAK-KNUMV ,  "Number of the document condition
                BSTNK             LIKE VBAK-BSTNK, " cUSTOMER pURCHASE ORDER NUMBER
                BSTDK             LIKE VBAK-BSTDK,  "Customer purchase order date
                KUNNR             LIKE VBAK-KUNNR,  " Customer Code
                ZOA_RECP_PLAN_DT  LIKE VBAK-ZOA_RECP_PLAN_DT, "Order receipt at plant
           END OF GT_VBAK.
    Internal table for VBAP
    DATA : BEGIN OF GT_VBAP OCCURS 0,
              VBELN LIKE VBAP-VBELN, " Sales Document Number
              POSNR LIKE VBAP-POSNR, " Sales Doc. Line item number
              MATNR LIKE VBAP-MATNR,
              ABGRU LIKE VBAP-ABGRU, "Reason for rejection
              MEINS LIKE VBAP-MEINS,  "Base Unit of Measure
              FAKSP LIKE VBAP-FAKSP,
              NETWR  LIKE VBAP-NETWR, " Net Value
              KWMENG LIKE VBAP-KWMENG, " Order Quantity
              WERKS LIKE VBAP-WERKS, "PLANT
              LGORT LIKE VBAP-LGORT, "S.Loc
              ROUTE LIKE VBAP-ROUTE, " Route
              ZZWIDTH LIKE VBAP-ZZWIDTH, " widht
              ZZKDMAT LIKE VBAP-ZZKDMAT, " customer Matrial
              ZZBRAND LIKE VBAP-ZZBRAND, " bRAND
              ZZSPLDIA LIKE VBAP-ZZSPLDIA, "Spool Diameter
              ZZCUST_REQDAT LIKE VBAP-ZZCUST_REQDAT, " REquested Date
              ZZCOATING LIKE VBAP-ZZCOATING,
              ZZWEIGHT LIKE VBAP-ZZWEIGHT,
              ZZWEIGHT_UMO LIKE VBAP-ZZWEIGHT_UMO,
             END OF GT_VBAP.
    Internal table for VBEP
    DATA : BEGIN OF GT_VBEP OCCURS 0,
              VBELN LIKE VBEP-VBELN, " Sales Doc. Number
              POSNR LIKE VBEP-POSNR, " Sales Doc. Item Number
              ETENR LIKE VBEP-ETENR, "Delivery Schedule Line Number
              EDATU LIKE VBEP-EDATU, "Schedule line date
             END OF GT_VBEP.
    Internal table for VBPA
    DATA : BEGIN OF GT_VBPA OCCURS 0,
             VBELN LIKE VBAP-VBELN, "Sales Document Number
             POSNR LIKE VBAP-POSNR, "Sales Document Item Number
             PARVW LIKE VBPA-PARVW, "Partner Function
             KUNNR LIKE VBPA-KUNNR, " Customer Number
          END OF GT_VBPA.
    Internal table for VBKD
    DATA : BEGIN OF GT_VBKD OCCURS 0,
            VBELN LIKE VBKD-VBELN , " Sales Documet number
            KDGRP LIKE VBKD-KDGRP, " Custoemr Group
            INCO1 LIKE VBKD-INCO1, "Incoterms (Part 1)
            INCO2 LIKE VBKD-INCO2, "Incoterms (Part 2)
            ZTERM LIKE VBKD-ZTERM, " Payment Term
            STCUR LIKE VBKD-STCUR, " Exchang Rate
         END OF GT_VBKD.
    Internal table VBFA
    DATA : BEGIN OF GT_VBFA OCCURS 0 ,
             VBELV   LIKE VBFA-VBELV, " Preceding sales and distribution document
             POSNV   LIKE VBFA-POSNV, "Preceding item of an SD document
             VBELN   LIKE VBFA-VBELN, "Subsequent sales and distribution document
             POSNN   LIKE VBFA-POSNN, "Subsequent item of an SD document
             VBTYP_N LIKE VBFA-VBTYP_N, "Document category of subsequent document
             RFMNG   LIKE VBFA-RFMNG,    "Referenced quantity in base unit of measure
           END OF GT_VBFA.
    Internal table for KONV
    DATA :  BEGIN OF GT_KONV OCCURS 0,
                  KNUMV LIKE KONV-KNUMV, "Number of the document condition
                  KPOSN LIKE KONV-KPOSN, "Condition item number
                  KSCHL LIKE KONV-KSCHL , "Cond Type.
                  KBETR LIKE KONV-KBETR, " Rate per KG
                  WAERS LIKE KONV-WAERS, "currency
                  KWERT LIKE KONV-KWERT, "Condition value
              END OF GT_KONV.
    Internal table for MSKA,
    DATA  : BEGIN OF GT_MSKA OCCURS 0,
               MATNR LIKE MSKA-MATNR, "Matrial
               WERKS LIKE MSKA-WERKS, "PLANT
               LGORT LIKE MSKA-LGORT, "S. Loc
               CHARG  LIKE MSKA-CHARG,"Batch Number
               SOBKZ LIKE MSKA-SOBKZ, "Special Stock Indicator
               VBELN LIKE MSKA-VBELN , "Sales Doc Number
               POSNR LIKE MSKA-POSNR, "Sales Doc Item Number
               KALAB LIKE MSKA-KALAB, "Unrestricted-Use Stock
               KAINS LIKE MSKA-KAINS, " Stock in Quality Inspection
            END OF GT_MSKA.
    Internal table for MARD
    DATA : BEGIN OF GT_MARD OCCURS 0 ,
              MATNR LIKE MARD-MATNR, "Matrial
              WERKS LIKE MARD-WERKS, "PLANT
              LGORT LIKE MARD-LGORT, "S. Loc
              LABST LIKE MARD-LABST, "Valuated Unrestricted-Use Stock
           END OF GT_MARD.
    Internal table for KNA1
    DATA : BEGIN OF GT_KNA1 OCCURS 0,
               KUNNR LIKE KNA1-KUNNR , " Customer Number
               NAME1 LIKE KNA1-NAME1,  "Customer Name
               NAME2 LIKE KNA1-NAME2,  " Customer Name
               ORT01 LIKE KNA1-ORT01, "City
            END OF GT_KNA1.
    DATA: BEGIN OF GT_KNA1_1 OCCURS 0,
              KUNNR LIKE KNA1-KUNNR , " Customer Number
              NAME1 LIKE KNA1-NAME1,  "Customer Name
             ORT01 LIKE KNA1-ORT01,
           END OF GT_KNA1_1.
    Internal table for KNVV
    DATA : BEGIN OF GT_KNVV OCCURS 0,
                KUNNR LIKE KNVV-KUNNR , " Customer Number
                KLABC LIKE KNVV-KLABC, " Custoemr Class
           END OF GT_KNVV.
    Internal table for MAKT,
    DATA : BEGIN OF GT_MAKT OCCURS 0,
             MATNR LIKE MAKT-MATNR,  "Matrial
             SPRAS LIKE MAKT-SPRAS,
             MAKTX LIKE MAKT-MAKTX, "Matrial DESC
             MAKTG LIKE MAKT-MAKTG,
          END OF GT_MAKT.
    Internal table for MVKE
    DATA : BEGIN OF GT_MVKE OCCURS 0 ,
                MATNR LIKE MVKE-MATNR,  "Matrial
                MVGR1 LIKE MVKE-MVGR1, " Matrial Group
          END OF GT_MVKE.
    Internal table for TVM1T
    DATA : BEGIN OF GT_TVM1T OCCURS 0 ,
                 SPRAS LIKE TVM1T-SPRAS,
                 MVGR1 LIKE TVM1T-MVGR1, " Matrial Group
                 BEZEI LIKE TVM1T-BEZEI, "  Matrial Group DESC
          END OF GT_TVM1T.
    Internal table for TSPAT
    DATA : BEGIN OF GT_TSPAT OCCURS 0,
                SPRAS LIKE TSPAT-SPRAS,
                SPART LIKE VBAK-SPART,  "Division
                VTEXT LIKE TSPAT-VTEXT, "Division Desc
           END OF GT_TSPAT.
    Internal table for TVTWT
    DATA : BEGIN OF GT_TVTWT OCCURS 0 ,
            SPRAS LIKE TVTWT-SPRAS,
            VTWEG LIKE VBAK-VTWEG, "  Distribution Channel
            VTEXT LIKE TVTWT-VTEXT, "Distribution Channel Desc
           END OF GT_TVTWT.
    Internal table for TVAKT
    DATA : BEGIN OF GT_TVAKT OCCURS 0,
              SPRAS LIKE TVAKT-SPRAS,
              AUART LIKE VBAK-AUART,  "Sales Document Type
              BEZEI LIKE TVAKT-BEZEI, "sALES dOC TYPE Description
           END OF GT_TVAKT .
    Internal table for T151t
    DATA: BEGIN OF GT_VBUP OCCURS 0,
              VBELN LIKE VBUP-VBELN,
              POSNR LIKE VBUP-POSNR,
              GBSTA LIKE VBUP-GBSTA,
          END OF GT_VBUP.
    DATA : BEGIN OF GT_T151T OCCURS 0,
              SPRAS LIKE T151T-SPRAS,
              KDGRP LIKE VBKD-KDGRP, " Custoemr Group
              KTEXT LIKE T151T-KTEXT, " Custoemr Group Desc
          END OF GT_T151T.
    DATA : BEGIN OF GT_TVROT OCCURS 0,
              SPRAS LIKE TVROT-SPRAS,
              ROUTE LIKE TVROT-ROUTE, " Route code
              BEZEI LIKE TVROT-BEZEI , " Route Desc
           END OF GT_TVROT.
    DATA : BEGIN OF GT_T052U OCCURS 0,
              SPRAS LIKE T052U-SPRAS,
              ZTERM LIKE T052U-ZTERM, " Payment terms
              TEXT1 LIKE T052U-TEXT1, " text
           END OF GT_T052U.
    DATA: BEGIN OF GT_VBUK OCCURS 0,
             VBELN LIKE VBUK-VBELN,
             WBSTK LIKE VBUK-WBSTK,
          END OF GT_VBUK.
    *-------fINAL iNTERNAL TABLE FOR OUTPUT
    DATA : BEGIN OF GT_FINAL_DATA OCCURS 0,
                KUNNR             LIKE VBAK-KUNNR, " cUSTOMER CODE
                NAME(70)          TYPE C, " cUSTOMER NAME
                ORT01             LIKE KNA1-ORT01, "cITY
                S_KUNNR           LIKE VBAK-KUNNR, " cUSTOMER CODE
                S_NAME(70)        TYPE C, " cUSTOMER NAME
                S_ORT01           LIKE KNA1-ORT01, "cITY
                KLABC             LIKE KNVV-KLABC, " Custoemr Class
                VBELN(70)         TYPE C, "   LIKE VBAK-VBELN, "sALES oRDER nUMBER
                POSNR             LIKE VBAP-POSNR, "SALES ORDER LINE NUMBER
                INCO1             LIKE VBKD-INCO1, "Incoterms (Part 1)
                INCO2             LIKE VBKD-INCO2, "Incoterms (Part 2)
                KALAB             LIKE MSKA-KALAB, "Unrestricted-Use Stock
                KAINS             LIKE MSKA-KAINS, " Stock in Quality Inspection
                LABST             LIKE MARD-LABST, "Valuated Unrestricted-Use Stock
                ERDAT             LIKE VBAK-ERDAT , " Order Date
                MATNR             LIKE MAKT-MATNR,  "Matrial
                MAKTX             LIKE MAKT-MAKTX, "Matrial DESC
                MAKTG             LIKE MAKT-MAKTG, "Matrial DESC
                ZZKDMAT           LIKE VBAP-ZZKDMAT, "Customter Mat. Number
                ABGRU             LIKE VBAP-ABGRU, " Reason for rejection
                COLOR(20)         TYPE C,          "Color
                COMPLEX(20)       TYPE C,         "Complex
                WIDTH(10)         TYPE C,          "Width
                KBETR             LIKE KONV-KBETR, " Rate per KG
                WAERS             LIKE KONV-WAERS, "currency
                STCUR             LIKE VBKD-STCUR, " Exchang Rate
                MEINS             LIKE VBAP-MEINS,  "Base Unit of Measure
                KWMENG            LIKE VBAP-KWMENG, " Order Quantity
                RFMNG             LIKE VBFA-RFMNG,    "Referenced quantity in base unit of measure
                BAL_QTY           LIKE VBFA-RFMNG, " Balance QTY
                EDATU             LIKE VBEP-EDATU, "Schedule line date
                DAYS(5)          TYPE C, " Sch.Delay
                BSTNK             LIKE VBAK-BSTNK, " cUSTOMER pURCHASE ORDER NUMBER
                BSTDK             LIKE VBAK-BSTDK,  "Customer purchase order date
                VTWEG             LIKE VBAK-VTWEG,  "Distribution Channel
                SPART             LIKE VBAK-SPART,  "Division
                DIST_NAME         LIKE TVTWT-VTEXT, "Distribution Channels NAME
                DIV_NAME          LIKE TSPAT-VTEXT, "Sales Divisions NAME
                ZA_KUNNR          LIKE KNA1-KUNNR,
                ZA_NAME               LIKE KNA1-NAME1,
                ZE_KUNNR          LIKE KNA1-KUNNR,
                ZE_NAME               LIKE KNA1-NAME1,
                ZI_KUNNR          LIKE KNA1-KUNNR,
                ZI_NAME               LIKE KNA1-NAME1,
                ZR_KUNNR          LIKE KNA1-KUNNR,
                ZR_NAME               LIKE KNA1-NAME1,
                ZS_KUNNR          LIKE KNA1-KUNNR,
                ZS_NAME               LIKE KNA1-NAME1,
                MVGR1(20)         TYPE C          , " Matrial Group
                B_VALUE           LIKE KONV-KWERT, "bASIC value
                EX_VALUE          LIKE KONV-KWERT, "eXCISE value
                EC_VALUE          LIKE KONV-KWERT, "ecess value
                HE_VALUE          LIKE  KONV-KWERT, "hcess value
                VAT_VALUE         LIKE KONV-KWERT, "VAT value
                CST_VALUE         LIKE KONV-KWERT, "CST
                F_VALUE           LIKE KONV-KWERT, "fREIGJT
                C_VALUE           LIKE KONV-KWERT, "cOMISSION
                KDGRP(70)         TYPE C, " Custoemr Group
                NETWR             LIKE VBAP-NETWR, " Net Value
                INR               LIKE VBAP-NETWR, " inr Net Value
                AUART             LIKE VBAK-AUART,  "Sales Document Type
                BEZEI             LIKE TVAKT-BEZEI, "SALES DOC TYPE DESC
                ZOA_RECP_PLAN_DT  LIKE VBAK-ZOA_RECP_PLAN_DT, "Order receipt at plant
                ZZCUST_REQDAT     LIKE VBAP-ZZCUST_REQDAT, " REquested Date
                ROUTE             LIKE VBAP-ROUTE, " Route
                ROUTE_NAME        LIKE  TVROT-BEZEI , "Route name
                ZZBRAND           LIKE VBAP-ZZBRAND, " bRAND
                ZZSPLDIA          LIKE VBAP-ZZSPLDIA, "Spool Diameter
                ZTERM             LIKE VBKD-ZTERM, " Payment Term
                Z_TERM_TEXT(50)   TYPE C, "Payment Terms Text
                Z001(50)          TYPE C, "text
                Z002(50)          TYPE C, "text
                Z003(50)          TYPE C, "text
                Z004(50)          TYPE C, "text
                ZI_001(50)        TYPE C, "text
                ZI_002(50)        TYPE C, "text
                ZZCOATING(20)     TYPE C,
                ZZWEIGHT          LIKE VBAP-ZZWEIGHT,
                ZZWEIGHT_UMO      LIKE VBAP-ZZWEIGHT_UMO,
                WBSTK             LIKE VBUK-WBSTK,
                T_NETWR           LIKE VBAP-NETWR, " Net Value
                FAKSP             LIKE VBAP-FAKSP,
           END OF GT_FINAL_DATA.
    *****Mail Data Decleration.
    DATA : BEGIN OF MAIL_TAB OCCURS 0 ,
                ZE_NAME               LIKE KNA1-NAME1,
                ZS_NAME               LIKE KNA1-NAME1,
                NAME              LIKE KNA1-NAME1,
                ORT01             LIKE KNA1-ORT01, "cITY
                S_NAME            LIKE KNA1-NAME1,
                S_ORT01           LIKE KNA1-ORT01, "cITY
                KLABC             LIKE KNVV-KLABC, " Custoemr Class
                VBELN             LIKE VBAK-VBELN, "sALES oRDER nUMBER
                POSNR             LIKE VBAP-POSNR, "SALES ORDER LINE NUMBER
                ERDAT             LIKE VBAK-ERDAT , " Order Date
                MATNR             LIKE MAKT-MATNR,  "Matrial
                MAKTX             LIKE MAKT-MAKTX, "Matrial DESC
                ZZKDMAT           LIKE VBAP-ZZKDMAT, "Customter Mat. Number
                COLOR(20)         TYPE C,          "Color
                COMPLEX(20)       TYPE C,         "Complex
                WIDTH(10)         TYPE C,          "Width
                KBETR             LIKE KONV-KBETR, " Rate per KG
                WAERS             LIKE KONV-WAERS, "currency
                MEINS             LIKE VBAP-MEINS,  "Base Unit of Measure
                KWMENG            LIKE VBAP-KWMENG, " Order Quantity
                BAL_QTY           LIKE VBFA-RFMNG, " Balance QTY
                EDATU             LIKE VBEP-EDATU, "Schedule line date
                DAYS(5)          TYPE C, " Sch.Delay
                BSTNK             LIKE VBAK-BSTNK, " cUSTOMER pURCHASE ORDER NUMBER
                BSTDK             LIKE VBAK-BSTDK,  "Customer purchase order date
                ZA_NAME               LIKE KNA1-NAME1,
                ZI_NAME               LIKE KNA1-NAME1,
                ZR_NAME               LIKE KNA1-NAME1,
                MVGR1(20)         TYPE C          , " Matrial Group
                ZZCUST_REQDAT     LIKE VBAP-ZZCUST_REQDAT, " REquested Date
                ZZBRAND           LIKE VBAP-ZZBRAND, " bRAND
           END OF MAIL_TAB.
    DATA : IT_MAIL_ID TYPE YMSLT_MAIL_ID OCCURS 0 WITH HEADER LINE.
    DATA : SM_MAIL_ID TYPE YMSLT_MAIL_ID OCCURS 0 WITH HEADER LINE.
    DATA : SP_MAIL_ID TYPE YMSLT_MAIL_ID OCCURS 0 WITH HEADER LINE.
    DATA:   IT_MESSAGE TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0
                    WITH HEADER LINE.
    DATA:   IT_ATTACH TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0
                    WITH HEADER LINE.
    DATA:   T_PACKING_LIST LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
            T_CONTENTS LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
            T_RECEIVERS LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,
            T_ATTACHMENT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
            T_OBJECT_HEADER LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
            W_CNT TYPE I,
            W_SENT_ALL(1) TYPE C,
            W_DOC_DATA LIKE SODOCCHGI1,
            GD_ERROR    TYPE SY-SUBRC,
            GD_RECIEVER TYPE SY-SUBRC.
    DATA STR_VAL TYPE STRING.
    CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.
    CONSTANTS:
        CON_TAB  TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
        CON_CRET TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF.
    DATA: GT_VBAK_KNA1 LIKE GT_VBAK OCCURS 0 WITH HEADER LINE,
          GT_VBAP_VBPA LIKE GT_VBAP OCCURS 0 WITH HEADER LINE,
          GT_VBAP_MAKT LIKE GT_VBAP OCCURS 0 WITH HEADER LINE,
          GT_MVKE_TVM1T LIKE GT_MVKE OCCURS 0 WITH HEADER LINE,
          GT_VBAP_MSKA LIKE GT_VBAP OCCURS 0 WITH HEADER LINE,
          GT_VBPA_KNA1 LIKE GT_VBPA OCCURS 0 WITH HEADER LINE,
          GT_VBFA_VBUK LIKE GT_VBFA OCCURS 0 WITH HEADER LINE,
          GT_VBAP_INOB LIKE GT_VBAP OCCURS 0 WITH HEADER LINE.
    DATA : BEGIN OF GT_INOB  OCCURS 0.
              INCLUDE STRUCTURE INOB.
    DATA : END OF GT_INOB.
    DATA: BEGIN OF GT_YCAT_PARAMS OCCURS 0,
           KEY01 TYPE YYKEY01_C10,
           KEY02 TYPE YYKEY02_C16,
           KEY03 TYPE YYKEY03_C20,
           SRNO TYPE YYSRNO_N4,
           VALUE TYPE YYVALUE_C25,
          END OF GT_YCAT_PARAMS.
    DATA: BEGIN OF GT_CABN OCCURS 0,
           ATINN LIKE CABN-ATINN,
           ATNAM LIKE CABN-ATNAM,
          END OF GT_CABN.
    DATA: BEGIN OF GT_AUSP OCCURS 0,
           OBJEK LIKE AUSP-OBJEK,
           ATINN LIKE AUSP-ATINN,
           ATWRT LIKE AUSP-ATWRT,
          END OF GT_AUSP.
    DATA: BEGIN OF GT_CUOBJ OCCURS 0,
          CUOBJ(18) TYPE C,
            CUOBJ TYPE OBJNUM,
          END OF GT_CUOBJ.
    DATA: BEGIN OF GT_CAWN OCCURS 0,
            ATINN LIKE CAWN-ATINN,
            ATZHL LIKE CAWN-ATZHL,
            ATWRT LIKE CAWN-ATWRT,
         END OF GT_CAWN.
    DATA: BEGIN OF GT_CAWNT OCCURS 0,
            ATINN LIKE CAWNT-ATINN,
            ATZHL LIKE CAWNT-ATZHL,
            SPRAS LIKE CAWNT-SPRAS,
            ATWTB LIKE CAWNT-ATWTB,
         END OF GT_CAWNT.
                          START-OF-SELECTION                             *
    INITIALIZATION.
      VARIANT = 'Display Options'.
    RB1 = 'X'.
    REPNAME = SY-REPID.
      PERFORM BUILD_EVENTTAB USING EVENTS[].
      PERFORM BUILD_LAYOUT .
      PERFORM INITIALIZE_VARIANT.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI.
      PERFORM F4_FOR_VARIANT.
    AT SELECTION-SCREEN.
      PERFORM PAI_OF_SELECTION_SCREEN.
    END-OF-SELECTION.
      PERFORM SELECT_DATA.
      PERFORM PROCESS_DATA.
      PERFORM FILTER_PATNER_DATA.
      IF P_FILE = 'X'.
        PERFORM OUT_PUT_FILE.
      ELSEIF P_SCREEN = 'X'.
        PERFORM FILED_CAT_LOG.
        PERFORM CREATE_ALV_LAYOUT.
    PERFORM fill_events.
        PERFORM OUT_PUT_DATA.
      ELSEIF P_MAIL = 'X'.
        PERFORM MAIL_RPT.
      ENDIF.
    *=================Start of Internal table Declaration===================
    *===========
    *&      Form  SELECT_DATA
          sELECTING DATA FROM dATA bASE
    FORM SELECT_DATA .
      REFRESH R_PARVW.
      R_PARVW-SIGN = 'I'.
      R_PARVW-OPTION = 'EQ'.
      IF  NOT  S_ZE[] IS INITIAL.
        R_PARVW-LOW = S_ZE-LOW.
        APPEND R_PARVW.
      ENDIF.
      IF  NOT  S_ZS[] IS INITIAL.
        R_PARVW-LOW = S_ZS-LOW.
        APPEND R_PARVW.
      ENDIF.
      IF  NOT  S_ZA[] IS INITIAL.
        R_PARVW-LOW = S_ZA-LOW.
        APPEND R_PARVW.
      ENDIF.
      IF  NOT  S_ZR[] IS INITIAL.
        R_PARVW-LOW = S_ZR-LOW.
        APPEND R_PARVW.
      ENDIF.
      IF  NOT  S_ZI[] IS INITIAL.
        R_PARVW-LOW = S_ZI-LOW.
        APPEND R_PARVW.
      ENDIF.
    R_PARVW-LOW = 'SH'.
    APPEND R_PARVW.
    sELECTING DATA FROM VBAK TABLE INTO INTERNAL TABLE GT_VBAK
      SELECT  VBELN ERDAT AUART
              VTWEG SPART KNUMV
              BSTNK BSTDK KUNNR
               ZOA_RECP_PLAN_DT
        INTO TABLE GT_VBAK
        FROM VBAK
              WHERE VBELN IN S_VBELN
              AND ERDAT IN S_ERDAT
              AND VBTYP = 'C'
              AND AUART IN S_AUART
              AND AUGRU IN S_AUGRU
              AND VKORG IN S_VKORG
              AND VTWEG IN S_VTWEG
              AND VKGRP IN S_VKGRP
              AND VKBUR IN S_VKBUR
              AND BSTNK  IN S_BSTNK
              AND KUNNR IN S_KUNNR.
      SORT GT_VBAK[] BY VBELN.
      IF NOT GT_VBAK[] IS INITIAL.
    Selecting data from VBAP into Internal tabl gt_vbap
        IF P_BLOCK = 'X' .
          SELECT  VBELN   POSNR
                  MATNR  ABGRU
                  MEINS   FAKSP
                  NETWR KWMENG
                  WERKS   LGORT
                  ROUTE ZZWIDTH
                  ZZKDMAT ZZBRAND
                  ZZSPLDIA ZZCUST_REQDAT
                  ZZCOATING ZZWEIGHT
                  ZZWEIGHT_UMO
            INTO TABLE GT_VBAP
            FROM VBAP
            FOR ALL ENTRIES IN GT_VBAK
            WHERE VBELN = GT_VBAK-VBELN
            AND MATNR IN S_MATNR
            AND ABGRU <> ''
            AND WERKS IN S_WERKS
        ELSEIF P_PEN = 'X'.
          SELECT  VBELN   POSNR
                  MATNR  ABGRU
                  MEINS   FAKSP
                  NETWR KWMENG
                  WERKS   LGORT
                  ROUTE ZZWIDTH
                  ZZKDMAT ZZBRAND
                  ZZSPLDIA ZZCUST_REQDAT
                  ZZCOATING ZZWEIGHT
                  ZZWEIGHT_UMO
            INTO TABLE GT_VBAP
            FROM VBAP
            FOR ALL ENTRIES IN GT_VBAK
            WHERE VBELN = GT_VBAK-VBELN
            AND MATNR IN S_MATNR
            AND FAKSP <> '10'
            AND WERKS IN S_WERKS.
        ELSE.
             SELECT  VBELN   POSNR
                  MATNR  ABGRU
                  MEINS   FAKSP
                  NETWR KWMENG
                  WERKS   LGORT
                  ROUTE ZZWIDTH
                  ZZKDMAT ZZBRAND
                  ZZSPLDIA ZZCUST_REQDAT
                  ZZCOATING ZZWEIGHT
                  ZZWEIGHT_UMO
            INTO TABLE GT_VBAP
            FROM VBAP
            FOR ALL ENTRIES IN GT_VBAK
            WHERE VBELN = GT_VBAK-VBELN
            AND MATNR IN S_MATNR
            AND WERKS IN S_WERKS.
        ENDIF.
      ENDIF.
    IF P_PEN = 'X'.
       SELECT VBELN POSNR GBSTA FROM VBUP INTO TABLE GT_VBUP
              FOR ALL ENTRIES IN GT_VBAP
              WHERE VBELN = GT_VBAP-VBELN AND  POSNR = GT_VBAP-POSNR AND
              GBSTA <> 'C'.
       SORT GT_VBUP[] BY VBELN.
       LOOP AT GT_VBAP.
         READ TABLE GT_VBUP WITH KEY VBELN = GT_VBAP-VBELN
                                     POSNR = GT_VBAP-POSNR.
         IF SY-SUBRC <> 0.
           DELETE GT_VBAP.
         ENDIF.
         CLEAR GT_VBUP.
       ENDLOOP.
        LOOP AT GT_VBAK.
          READ TABLE GT_VBAP WITH KEY VBELN = GT_VBAK-VBELN.
          IF SY-SUBRC <> 0.
            DELETE GT_VBAK.
          ENDIF.
          CLEAR GT_VBAP.
        ENDLOOP.
    ENDIF.
      IF NOT GT_VBAP[] IS INITIAL.
        GT_VBAP_INOB[] = GT_VBAP[].
    SORT GT_VBAP_INOB[] BY MATNR.
    DELETE ADJACENT DUPLICATES FROM GT_VBAP_INOB COMPARING MATNR.
    SELECT * FROM INOB INTO TABLE GT_INOB
         WHERE KLART = '023'
             AND  OBTAB = 'MARA'.
    IF SY-SUBRC = 0.
       SELECT  KEY01 KEY02 KEY03 SRNO VALUE
                     INTO TABLE Gt_YCAT_PARAMS
                     FROM  YCAT_PARAMS
                                 WHERE KEY01 = 'CHAR_NAME'
                                 AND   KEY02 = 'ATNAM'
                                 AND  ( KEY03 = 'COLOR' OR  KEY03 = 'COMPLEX' )
                                 AND   SRNO  = '0001'.
    SELECT ATINN ATNAM INTO TABLE GT_CABN FROM CABN
                              WHERE ( ATNAM = 'COLOUR' OR ATNAM = 'COMPLEX' ).
    LOOP AT GT_INOB.
    GT_CUOBJ-CUOBJ = GT_INOB-CUOBJ.
    APPEND GT_CUOBJ.
    ENDLOOP.
    SELECT OBJEK ATINN ATWRT
          INTO TABLE GT_AUSP FROM AUSP
             FOR ALL ENTRIES IN GT_CUOBJ
              WHERE OBJEK = GT_CUOBJ-CUOBJ.
             AND   ATINN = L_ATINN.
    SELECT ATINN ATZHL ATWRT INTO TABLE GT_CAWN
            FROM CAWN FOR ALL ENTRIES IN GT_AUSP
              WHERE ATWRT = GT_AUSP-ATWRT.
    SELECT ATINN ATZHL SPRAS ATWTB INTO TABLE GT_CAWNT
           FROM CAWNT FOR ALL ENTRIES IN GT_CAWN
              WHERE ATINN = GT_CAWN-ATINN
              AND   ATZHL = GT_CAWN-ATZHL
              AND SPRAS = 'EN'.
    ENDIF.
    Selecting data from VBeP into Internal tabl gt_vbep
        SORT GT_VBAP[] BY VBELN POSNR.
        SELECT  VBELN POSNR
                ETENR EDATU
          INTO TABLE GT_VBEP
          FROM VBEP
          FOR ALL ENTRIES IN GT_VBAP
          WHERE VBELN = GT_VBAP-VBELN
          AND POSNR = GT_VBAP-POSNR
          AND EDATU IN S_EDATU
               AND BMENG <> 0.
        SELECT SPRAS ROUTE BEZEI
              INTO TABLE GT_TVROT
              FROM TVROT
             WHERE SPRAS = 'EN'.
      ENDIF.
      IF NOT GT_VBAP[] IS INITIAL.
        GT_VBAP_VBPA[] = GT_VBAP[].
        SORT GT_VBAP_VBPA[] BY VBELN.
        DELETE ADJACENT DUPLICATES FROM GT_VBAP_VBPA COMPARING VBELN.
    Selecting data from  VBPA into Internal tabl GT_VBPA
        IF NOT R_PARVW[] IS INITIAL.
          SELECT VBELN POSNR
                 PARVW KUNNR
            INTO TABLE GT_VBPA
            FROM VBPA
            FOR ALL ENTRIES IN  GT_VBAP_VBPA
            WHERE VBELN = GT_VBAP_VBPA-VBELN
            AND (  PARVW  IN R_PARVW
            OR PARVW = 'WE' ).
        ELSE.
          SELECT VBELN POSNR
                 PARVW KUNNR
            INTO TABLE GT_VBPA
            FROM VBPA
            FOR ALL ENTRIES IN  GT_VBAP_VBPA
            WHERE VBELN = GT_VBAP_VBPA-VBELN
            AND  ( PARVW  = 'ZE'
            OR  PARVW = 'ZS'
            OR PARVW = 'ZA'
            OR  PARVW = 'ZR'
            OR  PARVW = 'ZI' OR PARVW = 'WE' ).
        ENDIF.
      ENDIF.
      SORT GT_VBPA[].
      GT_VBPA_KNA1[] = GT_VBPA[].
      SORT GT_VBPA_KNA1[] BY KUNNR.
      DELETE ADJACENT DUPLICATES FROM GT_VBPA_KNA1 COMPARING KUNNR.
      IF NOT GT_VBPA_KNA1[] IS INITIAL.
        SELECT KUNNR NAME1 ORT01 FROM KNA1 INTO TABLE
               GT_KNA1_1 FOR ALL ENTRIES IN GT_VBPA_KNA1
                WHERE KUNNR = GT_VBPA_KNA1-KUNNR.
      ENDIF.
    Selecting data from  VBKD into Internal tabl GT_VBKD
      IF NOT GT_VBAK[] IS INITIAL.
        SELECT VBELN  KDGRP
               INCO1 INCO2
               ZTERM  STCUR
          INTO TABLE GT_VBKD
          FROM VBKD
          FOR ALL ENTRIES IN GT_VBAK
          WHERE VBELN = GT_VBAK-VBELN
          AND PRSDT <> ''.
    Selecting data from VBFA into Internal table gt_vbfa
        IF P_PEN = 'X'.
            SELECT VBFAVBELV   VBFAPOSNV
                    VBFAVBELN   VBFAPOSNN
                    VBFAVBTYP_N VBFARFMNG
               INTO TABLE GT_VBFA
               FROM VBFA INNER JOIN
               VBAK ON VBFAVBELV = VBAKVBELN
               WHERE
               ( VBFA~VBTYP_N = 'J' OR
                     VBFA~VBTYP_N = 'R').
    LOOP AT GT_VBFA.
         READ TABLE GT_VBAK WITH KEY VBELN = Gt_VBFA-VBELV.
           IF SY-SUBRC <> 0.
             DELETE GT_VBFA.
           ENDIF.
    CLEAR GT_VBFA.
    ENDLOOP.
         SELECT VBELV   POSNV
                   VBELN   POSNN
                   VBTYP_N RFMNG
              INTO TABLE GT_VBFA
              FROM VBFA
              FOR ALL ENTRIES IN GT_VBAK
              WHERE VBELV = GT_VBAK-VBELN
              AND ( VBTYP_N = 'J' OR
                    VBTYP_N = 'R').
        ELSE.
          SELECT VBELV   POSNV
                 VBELN   POSNN
                 VBTYP_N RFMNG
            INTO TABLE GT_VBFA
            FROM VBFA
            FOR ALL ENTRIES IN GT_VBAK
            WHERE VBELV = GT_VBAK-VBELN
            AND VBTYP_N = 'J'.
        ENDIF.
        SORT GT_VBFA[].
        IF GT_VBFA[] IS NOT INITIAL.
          GT_VBFA_VBUK[] = GT_VBFA[].
          SORT GT_VBFA_VBUK[] BY VBELN.
          DELETE ADJACENT DUPLICATES FROM GT_VBFA_VBUK COMPARING VBELN.
          SELECT VBELN WBSTK FROM VBUK INTO TABLE GT_VBUK
               FOR ALL ENTRIES IN GT_VBFA_VBUK
                  WHERE VBELN = GT_VBFA_VBUK-VBELN.
        ENDIF.
             -----------Selection data from KONv into Internal table gt_konv
        SORT GT_VBAK[] BY KNUMV.
        SELECT KNUMV KPOSN KSCHL
               KBETR WAERS KWERT
             INTO TABLE GT_KONV
             FROM KONV
             FOR ALL ENTRIES IN GT_VBAK
             WHERE KNUMV = GT_VBAK-KNUMV
             AND ( KSCHL = 'ZBAP'
                  OR   KSCHL = 'JEXP'
                  OR   KSCHL = 'JEDC'
                  OR   KSCHL = 'JEDH'
                  OR   KSCHL = 'ZJIP'
                  OR   KSCHL = 'ZCOM'
                  OR   KSCHL = 'JIVC'
                  OR   KSCHL   = 'JFRE' ).
      ENDIF.
      IF NOT GT_VBAP[] IS INITIAL.
    sELECING dATA FROM MSKA INTO INTERNAL TABLE GT_MSKA
        GT_VBAP_MSKA[] = GT_VBAP[].
        SORT GT_VBAP_MSKA[] BY MATNR WERKS VBELN POSNR.
        DELETE ADJACENT DUPLICATES FROM GT_VBAP_MSKA COMPARING MATNR WERKS VBELN POSNR.
        SELECT  MATNR  WERKS
                LGORT  CHARG
                SOBKZ  VBELN
                POSNR
                KALAB  KAINS
          INTO TABLE GT_MSKA
          FROM MSKA
          FOR ALL ENTRIES IN GT_VBAP_MSKA
          WHERE MATNR = GT_VBAP_MSKA-MATNR
          AND WERKS = GT_VBAP_MSKA-WERKS
       AND LGORT = GT_VBAP-LGORT
          AND VBELN = GT_VBAP_MSKA-VBELN
          AND POSNR = GT_VBAP_MSKA-POSNR.
        SORT GT_MSKA[].
        DATA :BEGIN OF TMP_MATNR OCCURS 0,
               MATNR LIKE MARA-MATNR,
              END OF TMP_MATNR.
        LOOP AT GT_VBAP.
          TMP_MATNR-MATNR = GT_VBAP-MATNR.
          TMP_MATNR-MATNR+0(1) ='S'.
          APPEND TMP_MATNR.
        ENDLOOP.
        SORT TMP_MATNR[].
        DELETE ADJACENT DUPLICATES FROM TMP_MATNR COMPARING MATNR.
        SELECT MATNR
               WERKS
               LGORT
               LABST
          FROM MARD
          INTO TABLE GT_MARD
          FOR ALL ENTRIES IN TMP_MATNR
          WHERE MATNR = TMP_MATNR-MATNR."'SDX25000B040GC01'."GT_VBAP-MATNR.
      ENDIF.
      SORT GT_MARD[].
      IF NOT GT_VBAK[] IS INITIAL.
        GT_VBAK_KNA1[] = GT_VBAK[].
        SORT GT_VBAK_KNA1[] BY KUNNR.
        DELETE ADJACENT DUPLICATES FROM GT_VBAK_KNA1 COMPARING KUNNR.
        SELECT  KUNNR
                     NAME1
                     NAME2
                     ORT01
             FROM KNA1
             INTO TABLE GT_KNA1
             FOR ALL ENTRIES IN GT_VBAK_KNA1
             WHERE KUNNR = GT_VBAK_KNA1-KUNNR.
        SELECT KUNNR  KLABC
          FROM KNVV
         INTO TABLE GT_KNVV
         FOR ALL ENTRIES IN GT_VBAK_KNA1
         WHERE KUNNR = GT_VBAK_KNA1-KUNNR.
      ENDIF.
      IF NOT GT_VBAP[] IS INITIAL.
        GT_VBAP_MAKT[] = GT_VBAP[].
        SORT GT_VBAP_MAKT[] BY MATNR.
        DELETE ADJACENT DUPLICATES FROM GT_VBAP_MAKT COMPARING MATNR.
        SELECT   MATNR
                 SPRAS
                 MAKTX
             FROM MAKT
             INTO TABLE GT_MAKT
             FOR ALL ENTRIES IN GT_VBAP_MAKT
             WHERE MATNR = GT_VBAP_MAKT-MATNR AND
                   SPRAS = 'EN'.
        SELECT MATNR
               MVGR1
          FROM MVKE
          INTO TABLE GT_MVKE
          FOR ALL ENTRIES IN GT_VBAP_MAKT
          WHERE MATNR = GT_VBAP_MAKT-MATNR
          AND MVGR1 <> ''.
      ENDIF.
      IF NOT GT_MVKE[] IS INITIAL.
        GT_MVKE_TVM1T[] = GT_MVKE[].
        SORT GT_MVKE_TVM1T[] BY MVGR1.
        DELETE ADJACENT DUPLICATES FROM GT_MVKE_TVM1T COMPARING MVGR1.
        SELECT SPRAS MVGR1 BEZEI
            FROM TVM1T
            INTO TABLE GT_TVM1T
            FOR ALL ENTRIES IN GT_MVKE_TVM1T
            WHERE SPRAS = 'EN' AND
              MVGR1 = GT_MVKE_TVM1T-MVGR1.
      ENDIF.
      IF NOT GT_VBAK[] IS INITIAL.
        SELECT SPRAS
               SPART
               VTEXT
          FROM TSPAT
          INTO TABLE GT_TSPAT
          WHERE SPRAS = 'EN'.
        SELECT  SPRAS
                VTWEG
                VTEXT
              FROM TVTWT
              INTO TABLE GT_TVTWT
              WHERE SPRAS = 'EN'.
        SELECT SPRAS AUART BEZEI
              FROM TVAKT
              INTO TABLE GT_TVAKT
              WHERE
               SPRAS = 'EN'.
      ENDIF.
      IF NOT GT_VBKD[] IS INITIAL.
        SELECT SPRAS KDGRP
               KTEXT
               FROM T151T
          INTO TABLE GT_T151T
        FOR ALL ENTRIES IN GT_VBKD
         WHERE SPRAS = 'EN' .
         AND
             KDGRP = GT_VBKD-KDGRP.
      ENDIF.
      IF NOT GT_VBKD[] IS INITIAL.
        SELECT SPRAS ZTERM TEXT1
          FROM T052U
          INTO TABLE GT_T052U
        FOR ALL ENTRIES IN GT_VBKD
          WHERE SPRAS = 'EN'.
          AND ZTERM = GT_VBKD-ZTERM.
      ENDIF.
    ENDFORM.                    " SELECT_DATA
    *&      Form  PROCESS_DATA
          text
    -->  p1        text
    <--  p2        text
    FORM PROCESS_DATA .
      DATA : T_FLAG(2) TYPE C,
             J_AMT LIKE VBFA-RFMNG,
             M_AMT LIKE VBFA-RFMNG,
             R_AMT LIKE VBFA-RFMNG,
             N_AMT LIKE VBFA-RFMNG,
             JR_AMT LIKE VBFA-RFMNG,
             MN_AMT LIKE VBFA-RFMNG,
             TMP_WBSTK LIKE VBUK-WBSTK,
             SFG_MATNR LIKE MARD-MATNR.
      LOOP AT GT_VBAP.
        CLEAR : GT_FINAL_DATA,
              J_AMT ,
             M_AMT ,
             R_AMT,
             N_AMT ,
             JR_AMT ,
             SFG_MATNR,
             MN_AMT .
        READ TABLE GT_VBAK WITH KEY VBELN = GT_VBAP-VBELN.
        IF SY-SUBRC = 0.
          GT_FINAL_DATA-KUNNR    = GT_VBAK-KUNNR.
          GT_FINAL_DATA-VBELN  = GT_VBAK-VBELN.
          GT_FINAL_DATA-POSNR = GT_VBAP-POSNR.
          GT_FINAL_DATA-ABGRU = GT_VBAP-ABGRU.
        ENDIF.
        READ TABLE GT_KNA1 WITH KEY KUNNR = GT_VBAK-KUNNR.
        IF SY-SUBRC = 0.
          GT_FINAL_DATA-NAME = GT_KNA1-NAME1.
          GT_FINAL_DATA-ORT01 = GT_KNA1-ORT01.
        ENDIF.
        READ TABLE GT_KNVV WITH KEY KUNNR = GT_VBAK-KUNNR.
        IF SY-SUBRC = 0.
          GT_FINAL_DATA-KLABC = GT_KNVV-KLABC.
        ENDIF.
        IF SY-SUBRC = 0.
          READ TABLE GT_VBKD WITH KEY VBELN = GT_VBAK-VBELN.
          GT_FINAL_DATA-INCO1 = GT_VBKD-INCO1. "Incoterms (Part 1)
          GT_FINAL_DATA-INCO2 = GT_VBKD-INCO2. "Incoterms (Part 2)
          GT_FINAL_DATA-ZTERM = GT_VBKD-ZTERM. " Payment Term
        ENDIF.
        LOOP AT  GT_MSKA WHERE  MATNR = GT_VBAP-MATNR
                         AND    WERKS = GT_VBAP-WERKS
                         AND    LGORT = GT_VBAP-LGORT
                         AND    VBELN = GT_VBAP-VBELN
                         AND    POSNR = GT_VBAP-POSNR.
          GT_FINAL_DATA-KALAB = GT_FINAL_DATA-KALAB  + GT_MSKA-KALAB. "Unrestricted-Use Stock
          GT_FINAL_DATA-KAINS = GT_FINAL_DATA-KAINS + GT_MSKA-KAINS. " Stock in Quality Inspection
        ENDLOOP.
        SFG_MATNR = GT_VBAP-MATNR.
        SFG_MATNR+0(1) ='S'.
        READ TABLE  GT_MARD WITH KEY  MATNR = SFG_MATNR
                               WERKS = GT_VBAP-WERKS
                           LGORT = 'SF01'.
       loop at gt_mard where MATNR = SFG_MATNR
                       and  WERKS = GT_VBAP-WERKS.
        IF SY-SUBRC = 0.
          GT_FINAL_DATA-LABST =   GT_FINAL_DATA-LABST + GT_MARD-LABST . "Valuated Unrestricted-Use Stock
        ENDIF.
       endloop.
        GT_FINAL_DATA-MATNR = GT_VBAP-MATNR.  "Matrial
        GT_FINAL_DATA-ZZKDMAT = GT_VBAP-ZZKDMAT. " Customer Mat. N

    Hi Rajan,
    There is a lot of scope for performance tuning the code:
    1. Read statement should be with BINARY SEARCH
    2. Select statement should have FIELDS in the same order as they exist in the table
    3. Select statement where clause should have fields in same order as they exist in the table.
    4. Internal tables seem to be having a huge number of fields. If possible, please limit the fields to only required fields in the internal table.
    Best regards,
    Prashant

Maybe you are looking for

  • Wireless Network Printing Issue

    Hi there, I use an Airport Express to put a wireless arm onto our offices mac-only network. Everything was a-ok but, over the weekend, the express seems to have reset itself it changing its name back to 'Apple Network 43124' I reconfigured and everyt

  • #%&*@%$*   Can't Get iTunes to Load Up my iPod

    Each time I try to transfer a music playlist from the iTunes platform to my iPod, a few songs go through and then I get an error message saying "iPod cannot be synced. The required files cannot be found". This cancels the entire transfer. #%*%^#$@& !

  • Crystal Reports XI: formatting and exporting to Excel (VB 6)

    Hi. I have a VERY simple report that all I want it to do is display the numbers from a table EXACTLY as formatted and be able to export them to Excel, as NUMBER (not STRINGS). Example: My fields may contains the following values in a single column: 4

  • Browser Security Error When Viewing Published Movie

    We've made our Captivate movies, we've published them as SWF's with 'Export HTML' checked with Flash Player 7 (and also tried FP 9) selected. When we view our movies in our our browser (Mac Safari, Mac Firefox, PC I.E., PC Firefox) the following erro

  • Advanced suggestions for slow iPod sync?

    A few weeks after I upgraded to iTunes 7, I noticed that my 60GB iPod was taking several hours to sync. Using Task Manager, I found that everything is fine for about 30 seconds after starting the sync, then the processor pegs to 100%, making the syst