Timeout in select mseg

Hi,
i try this short report and get allways a runtime-error. Has anyone an idea where i can
in MSEG faster?
REPORT ZTEST MESSAGE-ID ZZ.
TABLES: LFA1,   "Lieferantenstamm (allgemeiner Teil)
        LFM1,   "Lieferantenstamm Einkaufssicht
        MSEG.
PARAMETERS:       P_MJAHR LIKE MKPF-MJAHR.
SELECT-OPTIONS:   S_MBLNR FOR MSEG-LIFNR.
SELECT-OPTIONS:   S_LIFNR FOR LFA1-LIFNR.
DATA: DMBTR     LIKE          MSEG-DMBTR.
DATA: DMBTR_SUM LIKE          MSEG-DMBTR.
START-OF-SELECTION.
  SELECT * FROM LFA1 WHERE LIFNR IN S_LIFNR.
    SELECT SINGLE * FROM LFM1 WHERE LIFNR = LFA1-LIFNR
                                AND EKORG = '1000'.
    CLEAR: DMBTR_SUM.
    IF SY-SUBRC = 0.
* Nur wenn auch Einkaufssicht vorhanden
      SELECT DMBTR FROM MSEG INTO DMBTR
                         WHERE MBLNR IN S_MBLNR
                           AND MJAHR = P_MJAHR
                           AND LIFNR = LFA1-LIFNR
                           AND BWART = '101' "Wareneingang
                           AND KZBEW = 'B'.  "Bestellung.
        ADD DMBTR TO DMBTR_SUM.
      ENDSELECT.
    ENDIF.
    WRITE: LFA1-LIFNR, DMBTR_SUM.
  ENDSELECT.
END-OF-SELECTION.
Thanks.
regards, Dieter
Moderator message - Moved to the correct forum
Edited by: Rob Burbank on May 12, 2009 9:30 AM

Use this
*& Report  ZSKC_SDN
REPORT ZTEST MESSAGE-ID ZZ.
TABLES: LFA1,   "Lieferantenstamm (allgemeiner Teil)
        LFM1,   "Lieferantenstamm Einkaufssicht
        MSEG.
*                              D A T A
TYPES : BEGIN OF TY_LIFNR,
          LIFNR TYPE LIFNR,
          SUM   TYPE WERTV9,
        END   OF TY_LIFNR,
        BEGIN OF TY_MSEG,
          MBLNR TYPE MBLNR,
          MJAHR TYPE MJAHR,
          ZEILE TYPE MBLPO,
          LIFNR TYPE ELIFN,
          DMBTR TYPE DMBTR,
        END   OF TY_MSEG.
DATA :  T_LIFNR TYPE SORTED TABLE OF TY_LIFNR WITH UNIQUE KEY LIFNR,
        T_MSEG  TYPE STANDARD TABLE OF TY_MSEG.
DATA :  IS_MSEG TYPE TY_MSEG.
FIELD-SYMBOLS : <FS_LIFNR> TYPE TY_LIFNR.
*                    S E L E C T I O N   S C R E E N
PARAMETERS:       P_MJAHR LIKE MKPF-MJAHR.
SELECT-OPTIONS:   S_MBLNR FOR MSEG-LIFNR.
SELECT-OPTIONS:   S_LIFNR FOR LFA1-LIFNR.
*                  S T A R T   O F   S E L E C T I O N
START-OF-SELECTION.
* Get the list of vendors.
  SELECT LFA1~LIFNR
  FROM   LFA1 INNER JOIN LFM1
         ON LFA1~LIFNR = LFM1~LIFNR
  INTO   TABLE T_LIFNR
  WHERE  LFA1~LIFNR IN S_LIFNR
  AND    LFM1~EKORG EQ '1000'.
  CHECK SY-SUBRC EQ 0.
* Get Document Segment: Material.
  SELECT MBLNR MJAHR ZEILE LIFNR DMBTR
  INTO   TABLE T_MSEG
  FROM   MSEG
  WHERE  MBLNR IN S_MBLNR
  AND    MJAHR EQ P_MJAHR
  AND    BWART EQ '101'
  AND    KZBEW EQ 'B'.
  CHECK SY-SUBRC EQ 0.
  SORT T_MSEG BY LIFNR.
* Calculate and Add.
  LOOP AT T_MSEG INTO IS_MSEG.
    READ TABLE T_LIFNR ASSIGNING <FS_LIFNR> WITH KEY LIFNR = IS_MSEG-LIFNR
                                                             BINARY SEARCH.
    CHECK SY-SUBRC EQ 0.
    <FS_LIFNR>-SUM = <FS_LIFNR>-SUM + IS_MSEG-DMBTR.
  ENDLOOP.
* Print output.
  LOOP AT T_LIFNR ASSIGNING <FS_LIFNR>.
    WRITE :/ <FS_LIFNR>-LIFNR, <FS_LIFNR>-SUM.
  ENDLOOP.
Use this..This is the tuned version keeping the functionality intact. I assume u will be passing both the vendor number and the Material doc # in the selection screen.

Similar Messages

  • Help with timeout for select inside loop

    Hi everyone, im a little confused with this code. Can you help me to optimize it? Its giving Timeout dump.
    Thanks so much, I´m new in abap and I tried hard, but its getting worse.
    Any idea is welcomed.
    LOOP AT it_lips.
        SELECT SINGLE *
          FROM vbak
         WHERE vbeln = it_lips-vgbel.
        IF sy-subrc <> 0 OR vbak-vbtyp <> 'C'.
          CONTINUE.
        ENDIF.
        SELECT SINGLE *
          FROM vbup
         WHERE vbeln = it_lips-vgbel
           AND posnr = it_lips-vgpos.
        IF sy-subrc = 0 AND vbup-lfgsa = 'C'.
          READ TABLE it_likp WITH KEY vbeln = it_lips-vbeln.
          IF it_likp-wadat < it_likp-wadat_ist.
            it_data-statu = 'N'.
            v_countn = v_countn + 1.
          ELSE.
            it_data-statu = 'S'.
            v_counts = v_counts + 1.
          ENDIF.
        ELSE.
          CONTINUE.
        ENDIF.
        it_data-vbeln = it_lips-vgbel.
        it_data-posnr = it_lips-vgpos.
        SELECT SINGLE matnr arktx kwmeng vrkme
          INTO (it_data-matnr, it_data-arktx, it_data-mengs, it_data-vrkme)
          FROM vbap
         WHERE vbeln = it_lips-vgbel
           AND posnr = it_lips-vgpos.
        it_data-menge = it_data-mengs.
        it_data-kunnr = vbak-kunnr.
        SELECT SINGLE name1
          INTO it_data-name1
          FROM kna1
         WHERE kunnr = it_data-kunnr.
        it_data-edatu = it_likp-wadat.
        it_data-wadat = it_likp-wadat_ist.
        it_data-vkorg = it_likp-vkorg.
        APPEND it_data.
        CLEAR: it_data, vbak, it_vbep, vbap, kna1, it_lips, it_likp.
      ENDLOOP.

    The issue of SELECTing within a LOOP is much overblown. All of the SELECTs are SELECT SINGLE using the fully qualified primary key. Using a JOIN or FOR ALL ENTRIES might speed this up a bit, but dollars to doughnuts, the problem is here:
    READ TABLE it_likp WITH KEY vbeln = it_lips-vbeln.
    If it_likp is a standard table, you will be reading half of all of the entries, on average, every time you do the read. If you don't want to change it to a sorted or hashed table, SORT it_likp by vbeln before going into the loop and use the addition BINARY SEARCH on the READ statement.
    Rob
    Edited by: Rob Burbank on Apr 18, 2010 9:34 PM
    Edited by: Rob Burbank on Apr 19, 2010 10:15 AM

  • PREFIX ORACLE_SEM_FS_NS timeout via Jena Adapter

    Hi,
    I am executing SPARQL via Jena Adapter and would like to specify timeout.
    I use PREFIX ORACLE_SEM_FS_NS: <http://oracle.com/semtech#timeout=5> , according the the sem dev guide Jena examples, but the timeout value has no effect at all.
    For some heavy queries QueryExecution->execSelect() never returns
    I found this thread - Re: Query IDs in ORACLE_SEM_FS_NS : 32 or 64 bits? , which discuss the similar subject. I tried to add qid to the prefix, but that did not help. I don't use Joseki endpoint nor OracleQueryMgtServlet to manage(kill) long queries. Maybe I will provide the latter function in the future, but I would like to start with that users specify the timeout and query would interrupt itself if not ready.
    So, is there anything else I have to do in Java/Jena code or somewhere else?
    Thanks, best regards
    Jürgen
    After some more testing it turns that the problem with timeout is related to certain type of queries only. Normally the timeout works.
    But when LET statement is used in some way, then timeout does not occur and it seems the query simply hangs:
    This query works and times out (if timeout value is set short enough):
    SELECT DISTINCT
    ?HR_Zone
    (count(?e) AS ?major_count)
    WHERE {
    ?e rdf:type r:ST_Episode .
    OPTIONAL
    ?e r:isClassifiedAs rn:major_st_episode .
    OPTIONAL{
    ?e r:mappedHRZone ?zone .
    ?zone r:index ?HR_Zone
    GROUP BY ?HR_Zone
    This query does not finsih (in boundaries of my patients) and does not time out:
    SELECT DISTINCT
    ?HR_Zone
    (count(?e) AS ?major_count)
    WHERE {
    ?e rdf:type r:ST_Episode .
    OPTIONAL
    ?e r:isClassifiedAs rn:major_st_episode .
    LET( ?emajor := ?e )
    OPTIONAL{
    ?e r:mappedHRZone ?zone .
    ?zone r:index ?HR_Zone
    GROUP BY ?HR_Zone
    However, one might think that LET is not supported - but without ARQ functions it works. This query works and times out (with short timeout value)
    SELECT DISTINCT
    ?emajor ?HR_Zone
    WHERE {
    ?e rdf:type r:ST_Episode .
    OPTIONAL
    ?e r:isClassifiedAs rn:major_st_episode .
    LET( ?emajor := ?e )
    OPTIONAL{
    ?e r:mappedHRZone ?zone .
    ?zone r:index ?HR_Zone
    Edited by: user8793616 on 2010-sep-29 04:51

    Hi Jurgen,
    The timeout pragma is most effective when used with SPARQL 1.0 queries, since they are supported natively. Once you start using ARQ features - which are not available in Oracle so they are processed in the mid-tier - timeout becomes less reliable.
    Cheers,
    Vladimir

  • PROLEM IN RETRIVING MATNR FROM MSEG IN STOCK REPORT

    HI FRIENDS ,
    IAM DOING A REPORT IN WHICH I HAVE TO DISPLAY THOSE MATERIAL NUMBER WHICH HAS UNRESTRICTED STOCK AS OF TODAY
    AND ALSO THOSE WHICH HAVE TRANSACTION DONE IN LAST ONE YEAR THAT I THINK HAVE TO TAKE FRM MKPF AND MSEG ,
    I SELECTED MATNR FROM MARD AND ALSO GAVE THE LOGIC WHICH IS BELOW BUT GETTING PROBLEM TO HAVE THOSE MATNR WHICH ARE
    TRANSACTION DONE.
    NEED HELP CAN GIVE ME SUGGESTION
    SELECT mard~matnr
    mard~werks
    mard~lgort
    mard~labst
    mara~mtart
    FROM mard
    INNER JOIN mara ON
    maramatnr = mardmatnr
    INNER JOIN MAKT ON
    MAKTMATNR = MARDMATNR
    INTO TABLE imard
    WHERE mard~matnr IN s_matnr
    AND mara~mtart IN s_mtart.
    AND SPRAS = SY-LANGU.
    IF imard[] IS NOT INITIAL .
    SELECT makt~matnr
    makt~maktx
    FROM makt
    INTO TABLE imakt FOR ALL ENTRIES IN imard
    WHERE matnr = imard-matnr
    AND spras = sy-langu.
    ENDIF.
    SELECT mkpf~mblnr
    mkpf~budat
    FROM mkpf INTO TABLE imkpf .
    IF imkpf IS NOT INITIAL.
    SELECT mseg~mblnr
    mseg~matnr
    mseg~werks
    mseg~bwart
    mseg~menge
    mseg~shkzg
    FROM mseg INTO TABLE imseg FOR ALL ENTRIES IN imkpf
    WHERE mblnr = imkpf-mblnr.
    ENDIF.
    LOOP AT imard.
    CLEAR itab.
    IF imard-labst > 0.
    itab-matnr = imard-matnr.
    itab-werks = imard-werks.
    ELSE.
    CONTINUE.
    ENDIF.
    READ TABLE imakt WITH KEY matnr = imard-matnr.
    IF sy-subrc = 0.
    itab-maktx = imakt-maktx.
    ENDIF.
    APPEND itab.
    ENDLOOP.
    PLS REPLY ME .
    FARUKH

    hi Farukh,
    i see the field as DLINL as the date of Last Posted Count for Unrestricted-Use Stock .. which is found in table MARD .. I think in the initila select you can add an additional chec on that field .. if it falls in the last year..
    regards
    satesh

  • Solaris 10 svc:/milestone/single-user timeout during patch run

    Hello all,
    when doing a patch run (Oct 07 baseline) on a Solaris 10 client the machine rebooted into single user as per normal. However the time for the patches to be applied in single user took so long the single-user milestone timed out and the machine went into maintenance mode. The machine did continue to complete the rest of the patch run. Anyone else seen this and have a work around? I don't really want to blanket increase the service timeout. Selected console output below..
    ( 27 / 37 ) Installing '127111-02' - succeeded.
    ( 28 / 37 ) Performing 'Mandatory reboot with reconfigure and action as single-user'
    ( 29 / 37 ) Installing '127753-02' Nov 22 10:30:08 svc.startd[7]: svc:/milestone/single-user:default: Method or service exit timed out. Killing contract 31.Nov 22 10:30:08 svc.startd[7]: milestone/single-user:default failed: transitioned to maintenance (see 'svcs -xv' for details)
    Requesting System Maintenance Mode
    (See /lib/svc/share/README for more information.)
    Console login service(s) cannot run
    Root password for system maintenance (control-d to bypass): Nov 22 10:30:20 svc.startd[7]: network/ntp:default failed repeatedly: transitioned to maintenance (see 'svcs -xv' for details)
    Nov 22 10:30:20 svc.startd[7]: failed to abandon contract 45: Permission denied
    - succeeded.
    ( 30 / 37 ) Installing '119757-09' - succeeded.
    ( 31 / 37 ) Installing '127737-01' - succeeded.
    ( 32 / 37 ) Installing '127718-01' - succeeded.
    ( 33 / 37 ) Installing '125184-04' - succeeded.
    ( 34 / 37 ) Installing '124444-01' - succeeded.
    ( 35 / 37 ) Installing 'postpatch' - succeeded.
    ( 36 / 37 ) Performing 'Reboot'
    ( 37 / 37 ) Performing 'Reboot with reconfigure'

    Hi, yes I see it all the time and it's normal and in fact documented in the release notes:
    http://docs.sun.com/app/docs/doc/820-0428/6nc5u3kou?l=en&a=view#smftimeout
    One workaround is to ignore it and not do anything! In fact I think that is the preferred workaround.
    Another question, just out of curiosity, what does your "postpatch" Post action script do? Just wondering if it might be something useful for other sites too?

  • Dynamic ALV as per the periods on the selection screen

    Hello Experts
    I am new to dynamic ALV , Please help me to sought out my confusion.
    I want to create a dynamic ALV , based on the period mentioned at selection screen.
    for example I want to display the movement type  ( sum of the quantity ) for materials for the full month.
    I want the ALV output as below.
    Material  .........qty 01.04.2011..... qty 02.04.2011... qty 03.04.2011 ........ qty 30.04.2011
    AB1........................... 30.................... 20............................. 50......................... 200
    AB2.................................................... 50 ............................. 80 ..........................10
    I create an internal table itab with there fields to selact the data
    MATNR
    date
    qty
    select MATNR
           date
           qty
    into itab
    from mseg
    where based on the selection screen.
    then collect the data to other table date wise , now i have summrise data of material quantity
    now the results after collection data into table itab2 is as follows
    Material  ................... date ................................   qty
    AB1  ....................    01.04.2011.......................  30
    AB1  ...................     02.04.2011 ....................... 20
    AB1  ...................   03.04.2011.......................  50
    AB1  ...................   .30.04.2011.......................  200
    AB2 ....................   02.04.2011.......................   50
    AB2 .......................   03.04.2011.......................   80
    AB2 .......................   30.04.2011 .......................   10
    How can I display these fields horizontally instead of vertically ,
    and to the exact column as per the field catalog column header belongs to date.
    it would be so helpful if somebody explain with code by taking the above example.
    Thanks in Advance

    Hello Both Experts ,
    I write the below code and it is working for the requirement.
    Can you please check
    REPORT  z_test_dynamic                          .
    TABLES : mkpf , mseg .
    TYPES : BEGIN OF t_mseg ,
          mblnr TYPE mblnr ,
          bwart TYPE bwart ,
          matnr TYPE matnr ,
          werks TYPE werks_d ,
          menge TYPE menge_d ,
          budat TYPE budat ,
      END OF t_mseg.
    TYPES : BEGIN OF t_mseg_1 ,
          matnr TYPE matnr ,
          menge TYPE menge_d ,
          budat TYPE budat ,
      END OF t_mseg_1.
    DATA : gt_mseg TYPE STANDARD TABLE OF t_mseg ,
           gs_mseg TYPE t_mseg,
           gt_mseg_1 TYPE STANDARD TABLE OF t_mseg_1 ,
           gs_mseg_1 TYPE t_mseg_1,
           gt_mseg_2 TYPE STANDARD TABLE OF t_mseg_1 ,
           gs_mseg_2 TYPE t_mseg_1..
    DATA : gt_date TYPE STANDARD TABLE OF sy-datum ,
          gs_date TYPE sy-datum..
    DATA: ok_code LIKE sy-ucomm,
          g_container TYPE scrfname VALUE 'CONTAINER_01',
          grid1  TYPE REF TO cl_gui_alv_grid,
          g_custom_container TYPE REF TO cl_gui_custom_container.
    DATA: gt_fieldcat TYPE lvc_t_fcat.
    DATA: gp_table TYPE REF TO data.
    FIELD-SYMBOLS: <gt_table> TYPE table.
    SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    SELECT-OPTIONS : s_matnr FOR mseg-matnr ,
                     s_bwart FOR mseg-bwart NO INTERVALS,
                     s_werks FOR mseg-werks ,
                     s_budat FOR mkpf-budat .
    PARAMETERS   : p_mjahr TYPE mjahr OBLIGATORY.
    SELECTION-SCREEN : END OF BLOCK b1.
    PERFORM field_catalog.
    CALL METHOD cl_alv_table_create=>create_dynamic_table
      EXPORTING
        it_fieldcatalog = gt_fieldcat
      IMPORTING
        ep_table        = gp_table.
    ASSIGN gp_table->* TO <gt_table>.
    PERFORM select_main_data.
    PERFORM move_data.
    *&      Form  select_main_data
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM select_main_data .
      SELECT      mseg~mblnr
          mseg~bwart
          mseg~matnr
          mseg~werks
          mseg~menge
          mkpf~budat
        INTO TABLE gt_mseg
        FROM mseg AS mseg INNER JOIN mkpf AS mkpf
        ON mseg~mblnr = mkpf~mblnr AND
           mseg~mjahr = mkpf~mjahr
        WHERE matnr IN s_matnr AND
             budat IN s_budat AND
             werks IN s_werks AND
             bwart IN s_bwart AND
             mseg~mjahr EQ p_mjahr .
      IF  gt_mseg IS NOT INITIAL.
        LOOP AT gt_mseg INTO gs_mseg.
          gs_mseg_1-matnr = gs_mseg-matnr.
          gs_mseg_1-budat = gs_mseg-budat.
          gs_mseg_1-menge = gs_mseg-menge.
          COLLECT gs_mseg_1 INTO gt_mseg_1.
        ENDLOOP.
      ENDIF.
      gt_mseg_2 = gt_mseg_1.
      DELETE ADJACENT DUPLICATES FROM gt_mseg_2  COMPARING matnr.
    ENDFORM.                    " select_main_data
    *&      Form  field_catalog
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM field_catalog .
      DATA : lt_day_attributes TYPE STANDARD TABLE OF casdayattr ,
             ls_day_attributes TYPE casdayattr .
      DATA: ls_fieldcat TYPE lvc_s_fcat ,
            lv_fieldname TYPE lvc_fname.
      IF s_budat-high IS INITIAL.
        s_budat-high = s_budat-low.
      ENDIF.
      CALL FUNCTION 'DAY_ATTRIBUTES_GET'
       EXPORTING
    *   FACTORY_CALENDAR                 = ' '
    *   HOLIDAY_CALENDAR                 = ' '
         date_from                        = s_budat-low
         date_to                          = s_budat-high
         language                         = sy-langu
    * IMPORTING
    *   YEAR_OF_VALID_FROM               =
    *   YEAR_OF_VALID_TO                 =
    *   RETURNCODE                       =
        TABLES
          day_attributes                   = lt_day_attributes
    * EXCEPTIONS
    *   FACTORY_CALENDAR_NOT_FOUND       = 1
    *   HOLIDAY_CALENDAR_NOT_FOUND       = 2
    *   DATE_HAS_INVALID_FORMAT          = 3
    *   DATE_INCONSISTENCY               = 4
    *   OTHERS                           = 5
      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 lt_day_attributes INTO ls_day_attributes.
        gs_date = ls_day_attributes-date.
        APPEND gs_date TO gt_date.
      ENDLOOP.
      ls_fieldcat-fieldname = 'MATNR'.
      ls_fieldcat-inttype    = 'CHAR18'.
      ls_fieldcat-coltext    = 'MATERIAL'.
    *   ls_fieldcat-decimals_o   = '2'.
      ls_fieldcat-outputlen = 18.
      APPEND ls_fieldcat TO gt_fieldcat.
      LOOP AT gt_date INTO gs_date.
        CONCATENATE 'QTY_' gs_date INTO lv_fieldname.
        ls_fieldcat-fieldname = lv_fieldname.
        ls_fieldcat-inttype    = 'QUAN'.
        ls_fieldcat-coltext    = gs_date.
        ls_fieldcat-decimals_o   = '2'.
    *    ls_fieldcat-outputlen = 18.
        APPEND ls_fieldcat TO gt_fieldcat.
      ENDLOOP.
    ENDFORM.                    " field_catalog
    *&      Form  move_data
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM move_data .
      DATA: l_row TYPE sy-index.
      FIELD-SYMBOLS: <ls_table>.
      FIELD-SYMBOLS: <l_field> ,
                     <l_mseg_1> TYPE t_mseg_1.
      DATA: ls_fieldcat TYPE lvc_s_fcat .
      ASSIGN LOCAL COPY OF INITIAL LINE OF <gt_table> TO <ls_table>.
      SORT gt_mseg_1 BY matnr.
      LOOP AT gt_mseg_1 ASSIGNING <l_mseg_1> .
        IF <l_field> IS ASSIGNED.
          UNASSIGN <l_field>.
        ENDIF.
        MOVE-CORRESPONDING <l_mseg_1> TO <ls_table>.
          READ TABLE gt_fieldcat INTO ls_fieldcat WITH KEY coltext = <l_mseg_1>-budat.
          IF sy-subrc EQ 0.
            ASSIGN COMPONENT ls_fieldcat-fieldname OF STRUCTURE <ls_table> TO <l_field>.
            <l_field> = <l_mseg_1>-menge.
          ELSE.
            <l_field> =  0.
          ENDIF.
        AT end of matnr.
          APPEND <ls_table> TO <gt_table>.
    clear <ls_table>.
        ENDAT.
      ENDLOOP.
    ENDFORM.                    " move_data
    your answers help me lot . I am awarding the points.
    Very Very Thanks
    Edited by: Dilraj Singh on Apr 13, 2011 3:58 PM
    Edited by: Dilraj Singh on Apr 13, 2011 4:09 PM
    Edited by: Dilraj Singh on Apr 13, 2011 4:23 PM

  • Are there any alternatives for mseg and mkpf

    I had to display from table S032...following fields.
    S032-LETZTABG --> Date: last (i.e. most recent) goods issue
    S032-LETZTVER --> Date: last (i.e. most recent) consumption
    However the data was not properly filled in s032 table.  So I went for mseg and mkpf table to get budat based on moment types.
        SELECT   MSEG~MATNR
                 MSEG~WERKS
                 MSEG~LGORT
                 MSEG~BWART
                 MKPF~BUDAT
                 INTO TABLE IT_MSEG
                 FROM MKPF AS MKPF  INNER JOIN MSEG AS MSEG
                 ON
                     MKPFMBLNR  =  MSEGMBLNR  AND
                     MKPFMJAHR  =  MSEGMJAHR
                 FOR ALL ENTRIES  IN  T_OUT_TMP
                WHERE MSEG~MATNR  EQ  T_OUT_TMP-MATNR
                  AND MSEG~WERKS  EQ  T_OUT_TMP-WERKS.
    Are there any other alternative table for mseg and mkpf...
    Because my above coding  ( which includes above  SELECT of mseg and mkpf )got performance issue...
    Could you please suggest me anyu other alternative for mseg and mkpf ...

    Try to include the BUDAT in the selection of the MKPF.. if you don't have any restriction in MKPF than just pass an empty range.
    RANGES: S_BUDAT FOR MKPF-BUDAT.
    SELECT
    MKPF~BUDAT   "<<<
    MSEG~MATNR
    MSEG~WERKS
    MSEG~LGORT
    MSEG~BWART
    INTO TABLE IT_MSEG
    FROM MKPF AS MKPF INNER JOIN MSEG AS MSEG
    ON
    MKPF~MBLNR = MSEG~MBLNR AND
    MKPF~MJAHR = MSEG~MJAHR
    FOR ALL ENTRIES IN T_OUT_TMP
    WHERE
    MKPF~BUDAT IN S_BUDAT   " <<<
    MSEG~MATNR EQ T_OUT_TMP-MATNR
    AND MSEG~WERKS EQ T_OUT_TMP-WERKS.
    Regards,
    Naimesh Patel

  • Roundtrip timeout in remote invocations

    Does anybody know how to specify or implement CORBA like roundtrip timeouts for RMI calls ?
    Our application has strict reqirements to detect network interrupts quickly ( < 3 seconds ) under all circumstances, not just when reading the result from a socket. Thus just setting a socket read timeout as suggested in answers to similar posts is not sufficient. We also need the remote call to timeout if the request could not be sent to the remote within a specified, short time.
    As far as i could find out, RMI does not support this feature. Did i miss anything ?
    Thanks in advance for any help, Martin

    Hi ejp, i disagree. This is my view:
    The (BSD like) Socket APIs on Unix-like OSses do not directly offer timeouts at all, neither for reading nor for writing. Reading/Writing to sockets is done through standard read() and write() calls, which do not have any timeout parameter. However, the JAVA Socket API has added timeout functionality for reading from a socket. In the SUN implementation for linux this is implemented using select() and non-blocking reading. BTW, i know of socket TCP-APIs that DO offer timeouts for reading and writing directly.
    Although writing of small chunks of data is handled by the TCP stack in background asynchronously, a timeout on writing is extremely usefull. Think of this scenario: The application writes a fairly huge amount of data to a socket. The send buffer fills up, and the thread that issued the write is blocked. Now, Mr. Murphy stumbles over the network cable next floor, and tears it apart. The sending thread will now stay blocked until the inner TCP machinery gives up retransmitting the data, what takes VERY long (depending on the TCP stack implementation / configuration), and cannot be tolerated.
    This scenario can be handled with a simple write timeout, that just prevents the writer from beeing blocked for longer than the timeout period. This kind of timeout could be implemented as easily as the read timeout via select and non-blocking writing - indeed i have done this in many applications in my past live as C programmer. I'm quite astonished that the designers of the JAVA Socket API left it to the users of the API to work around this.
    Of course, implementation of asynchronous notifications about timeouts of every chunk of data written to the socket would be much more complicated and must be supported by the underlying TCP stack.
    kind regards, Martin

  • CFQUERY Timeout Parameter for SQL2005 Fails

    Here's my test:
    <cfquery name="test" datasource="dsn" timeout="1">
      select top 20000 *
      from table
    </cfquery>
    <cfoutput>#cfquery.ExecutionTime#</cfoutput>
    I'm getting 3000+ for this value.  This shouldn't be, right?  Because I have the timeout parameter set for a second?  The driver I'm using is the one that's
    supplied with CFMX7.02, "Microsoft SQL Server", hooked into a MS SQL Server 2005 Standard.  Why is CF ignoring the timeout parameter?

    Hi,
    Anyone? I saw many articles in Metalink regarding the tx_timeout parameter - also one which a customer is demanding an explanation and enhancement on the tx_timeout parameter. Come to think of it, when will it work? only for Exchange? (found some hints on this in metalink).
    But still, is there no other way to immediately know if the port has opened or not?
    I will try the following: http://www.oraclenerd.com/2008/11/javaplsql-port-scanner-ii.html , but still would prefer a PL/SQL solution though.
    Many Thanks,
    Henry Wu

  • Urgent: Regarding Inner join relation b/w MSEG, MKPF, MARA and MAKT

    I have written o code like below for inner join. However, The program has take much more time to give out put. Could any one please correct the below inner join statement. Its very urgent.
    Thanks for your help.
    SELECT  mseg~mblnr
              mseg~matnr
              mseg~werks
              mseg~charg
              mseg~lifnr
              mseg~bualt
              mseg~erfmg
              mseg~ebeln
              mseg~ebelp
              mkpf~budat   
              mara~zzshelf_life                              
              makt~maktx
              FROM mseg
              INNER JOIN mkpf
                ON mkpfmblnr EQ msegmblnr
              INNER JOIN mara
                ON msegmatnr EQ maramatnr
              INNER JOIN makt
                ON maramatnr EQ maktmatnr
              INTO TABLE gt_mat_doc
              WHERE  mseg~matnr IN s_matnr
                AND  mseg~werks IN s_werks
                AND  mseg~lifnr IN s_lifnr
                AND  mseg~bwart EQ p_bwart
                AND  ( msegebeln NE ' ' AND msegebeln IN s_ebeln )
                AND  mkpf~budat IN s_budat
                AND  mara~mtart IN s_mtart
                AND  makt~spras EQ sy-langu.

    Hi,
    Do like this
    Types: begin of ty_mesg_mkpf,
             mblnr type mseg-mblnr,
             matnr type mseg-matnr,
             werks type mseg-werks,
             charg type mseg-charg,
             lifnr type mseg-lifnr,
             bualt type mseg-bualt,
             erfmg type mseg-erfmg,
             ebeln type mseg-ebeln,
             ebelp type mseg-ebelp,
             budat type mkpf-budat,
           end of ty_mseg_mkpf,
           Begin og ty_mara_makt,
            matnr type mara-matnr,
            zzshelf_life type mara-zzshelf_life,
            maktx type makt-maktx,
           end of ty_mara_makt.
    Data: it_mseg_mkpf type table of ty_mseg_mkpf,
          wa_mseg_mkpf type ty_mseg_mkpf,
          it_mara_makt type table of ty_mara_makt,
          wa_mara_makt type ty_mara_makt.
    SELECT m1~mblnr
    m1~matnr
    m1~werks
    m1~charg
    m1~lifnr
    m1~bualt
    m1~erfmg
    m1~ebeln
    m1~ebelp
    m2~budat
    FROM mseg
    INTO TABLE it_mseg_mkpf
    INNER JOIN mkpf
    ON m1mblnr EQ m2mblnr
    WHERE m1~matnr IN s_matnr
    AND m1~werks IN s_werks
    AND m1~lifnr IN s_lifnr
    AND m1~bwart EQ p_bwart
    AND ( m1ebeln NE ' ' AND m1ebeln IN s_ebeln )
    AND m2~budat IN s_budat
    if sy-subrc = 0.
    Select m3~matnr
    m3~zzshelf_life
    m4~maktx from mara as m3
    INNER JOIN makt as m4
    ON m3matnr EQ m4matnr
    INTO TABLE it_mara_makt
    where m3~mtart IN s_mtart
    AND m4~spras EQ sy-langu.
    endif.
    loop at it_mseg_mkpf into wa_mseg_mkpf.
    Move necessary field values from wa_mseg_mkpf to wa_mat_doc.
    Read table it_mara_makt into wa_mara_makt with key matnr = wa_mseg_mkpf-matnr.
    if sy-subrc = 0.
      move remaining field values to wa_mat_doc.
      append wa_mat_doc to gt_mat_doc.
      clear wa_mat_doc.
    endif.
    endloop.
    Regards,
    Satish

  • Timeout attribute of cfquery ignored?

    I set up the following SELECT * test on a table with a huge number of rows, just to make sure the query would run over 1 second:
    <cfquery name="test" datasource="#ds#" timeout="1">
              SELECT *
              FROM request_stats
    </cfquery>
    The debugging info indicates that the query took 2539ms, but instead of throwing an error the query ran & returned results. Maybe I am not understanding how the timeout attribute should work? The CF docs indicate that "Because the timeout attribute only affects the maximum time for each suboperation of a query, the cumulative time may exceed its value" -- but does a simple query like this one have suboperations?
    I'm using CF9.

    According to Charlie Arehart on New for CF9 (and 9.0.1): a query timeout that really works, with a caveat, the timeout attribute of the cfquery tag "generally does not work."
    As mentioned in the same post, there is a query timeout option available in the CF Administrator for certain data source types, but unfortunately not for the ODBC Socket that I'm using.
    Additionally, the CF9 docs indicate, regarding the timeout attribute, that "For JDBC statements, ColdFusion sets this attribute. For other drivers, see the driver documentation." So it's possible that the timeout attribute does work, but only for some drivers.

  • Closing stock by using opening sock

    Hi All,
    I got opening stock by using this how can I calculate closing stock,pls help me.
    REPORT   zhzl_material_analysis_gb LINE-SIZE 1000.
    tables:mara,mseg,s034.
    TYPE-POOLS: slis.
    DATA: budat TYPE budat.
    DATA: v_fieldcat TYPE slis_fieldcat_alv,
    v_t_fieldcat TYPE slis_t_fieldcat_alv.
    *Internal Tables for Opening Stock Calculation
    DATA : BEGIN OF t_mbew OCCURS 0,
    matnr LIKE mbew-matnr,
    bwkey LIKE mbew-bwkey,
    lbkum LIKE mbew-lbkum,
    salk3 LIKE mbew-salk3,
    END OF t_mbew.
    DATA: BEGIN OF i_mbew OCCURS 0,
    mblnr LIKE mseg-mblnr,
    mjahr LIKE mseg-mjahr,
    menge LIKE mseg-menge,
    meins TYPE meins,
    bwart LIKE mseg-bwart,
    matnr LIKE mseg-matnr,
    *REP werks as bwkey
    bwkey LIKE mseg-werks,
    shkzg LIKE mseg-shkzg,
    dmbtr LIKE mseg-dmbtr,
    zeile LIKE mseg-zeile,
    smbln LIKE mseg-smbln,
    smblp LIKE mseg-smblp,
    sjahr LIKE mseg-sjahr,
    kunnr LIKE mseg-kunnr,
    mblnr1 LIKE mkpf-mblnr,
    mjahr1 LIKE mkpf-mjahr,
    budat LIKE mkpf-budat,
    taxkd LIKE knvi-taxkd,
    END OF i_mbew.
    DATA: BEGIN OF i_mara OCCURS 0,
    matnr LIKE mara-matnr,
    matkl LIKE mara-matkl,
    spart LIKE mara-spart,
    END OF i_mara.
    DATA: i_makt TYPE TABLE OF makt WITH HEADER LINE.
    DATA: BEGIN OF i_collect OCCURS 0,
    matnr LIKE mara-matnr,
    bwkey LIKE mbew-bwkey,
    menge LIKE bsim-menge,
    dmbtr LIKE bsim-dmbtr,
    END OF i_collect.
    DATA: BEGIN OF i_op_stock OCCURS 0,
    matnr LIKE mara-matnr,
    maktx LIKE makt-maktx,
    matkl LIKE mara-matkl,
    bwkey LIKE mbew-bwkey,
    menge LIKE bsim-menge,
    dmbtr LIKE bsim-dmbtr,
    spart LIKE mara-spart,
    END OF i_op_stock.
    *The Selection-Screen Construction
    SELECTION-SCREEN: BEGIN OF BLOCK sel_block WITH FRAME.
    PARAMETER: p_werks LIKE mseg-werks.
    *PlantCompany Code
    SELECT-OPTIONS : s_date FOR budat,
                     p_spart for mara-spart,
    *Division
                     p_bukrs for mseg-bukrs .
    SELECTION-SCREEN: END OF BLOCK sel_block .
    START-OF-SELECTION.
    PERFORM opening_stock.
    PERFORM alv.
    *FORM opening_stock *
    *Calculates stock for date value in the low field of the *
    *select-options.
    FORM opening_stock.
    CLEAR t_mbew.
    SELECT * FROM mbew INTO CORRESPONDING FIELDS OF TABLE t_mbew
    WHERE bwkey = p_werks .
    SORT t_mbew BY matnr.
    REFRESH i_mbew.
    CLEAR i_mbew.
    LOOP AT t_mbew.
    i_mbew-matnr = t_mbew-matnr.
    i_mbew-bwkey = t_mbew-bwkey.
    i_mbew-dmbtr = t_mbew-salk3.
    i_mbew-menge = t_mbew-lbkum.
    APPEND i_mbew.
    CLEAR i_mbew.
    ENDLOOP.
    SELECT
    mseg~mblnr
    mseg~mjahr
    mseg~bwart
    mseg~menge
    mseg~matnr
    mseg~shkzg
    mseg~werks AS bwkey
    mseg~zeile
    mseg~smbln
    mseg~smblp
    mseg~sjahr
    mseg~kunnr
    mkpf~mblnr AS mblnr1
    mkpf~mjahr AS mjahr1
    mkpf~budat
    FROM mseg AS mseg INNER JOIN
    mkpf AS mkpf ON
    msegmblnr = mkpfmblnr
    AND
    msegmjahr = mkpfmjahr
    APPENDING CORRESPONDING FIELDS OF TABLE i_mbew
    WHERE mkpf~budat > s_date-low
    AND mseg~bukrs in p_bukrs
    AND mseg~werks = p_werks
    AND mseg~kzvbr = ' '
    AND mseg~bustw NE ' '.
    SORT i_mbew BY matnr budat mblnr.
    SORT i_mara BY matnr.
    SORT i_makt BY matnr.
    LOOP AT i_mbew.
    IF i_mbew-shkzg = 'S'.
    i_mbew-dmbtr = i_mbew-dmbtr * ( - 1 ).
    i_mbew-menge = i_mbew-menge * ( - 1 ).
    ENDIF.
    MODIFY i_mbew TRANSPORTING dmbtr menge.
    ENDLOOP.
    CLEAR i_collect.
    LOOP AT i_mbew.
    i_collect-matnr = i_mbew-matnr.
    i_collect-bwkey = i_mbew-bwkey.
    i_collect-dmbtr = i_mbew-dmbtr.
    i_collect-menge = i_mbew-menge.
    COLLECT i_collect.
    ENDLOOP.
    CLEAR: i_collect,i_op_stock.
    LOOP AT i_collect.
    MOVE-CORRESPONDING i_collect TO i_op_stock.
    APPEND i_op_stock.
    CLEAR i_op_stock.
    ENDLOOP.
    CHECK NOT i_op_stock[] IS INITIAL.
    LOOP AT i_op_stock.
    DELETE i_op_stock WHERE menge = 0.
    ENDLOOP.
    SORT i_op_stock BY matnr.
    SELECT * FROM mara INTO CORRESPONDING FIELDS OF TABLE i_mara
    FOR ALL ENTRIES IN i_op_stock
    WHERE matnr = i_op_stock-matnr
    AND spart in p_spart.
    SELECT * FROM makt INTO TABLE i_makt
    FOR ALL ENTRIES IN i_mara
    WHERE matnr = i_mara-matnr
    AND spras = 'EN'.
    LOOP AT i_op_stock.
    CLEAR i_mara.
    READ TABLE i_mara WITH KEY matnr = i_op_stock-matnr.
    IF sy-subrc = 0.
    i_op_stock-matkl = i_mara-matkl.
    i_op_stock-spart = i_mara-spart.
    MODIFY i_op_stock TRANSPORTING matkl spart.
    ELSE.
    DELETE i_op_stock.
    ENDIF.
    ENDLOOP.
    LOOP AT i_op_stock.
    CLEAR i_makt.
    READ TABLE i_makt WITH KEY matnr = i_op_stock-matnr.
    IF sy-subrc = 0.
    i_op_stock-maktx = i_makt-maktx.
    MODIFY i_op_stock TRANSPORTING maktx.
    ELSE.
    DELETE i_op_stock.
    ENDIF.
    ENDLOOP.
    ENDFORM.
    FORM alv.
    CLEAR v_fieldcat.
    v_fieldcat-col_pos = 1.
    v_fieldcat-fieldname = 'MATNR'.
    v_fieldcat-seltext_m = 'Material code'.
    APPEND v_fieldcat TO v_t_fieldcat.
    v_fieldcat-col_pos = 2.
    v_fieldcat-fieldname = 'MAKTX'.
    v_fieldcat-seltext_m = 'Description'.
    APPEND v_fieldcat TO v_t_fieldcat.
    v_fieldcat-col_pos = 3.
    v_fieldcat-fieldname = 'MATKL'.
    v_fieldcat-seltext_m = 'Material Group'.
    APPEND v_fieldcat TO v_t_fieldcat.
    v_fieldcat-col_pos = 4.
    v_fieldcat-fieldname = 'SPART'.
    v_fieldcat-seltext_m = 'Division'.
    APPEND v_fieldcat TO v_t_fieldcat.
    v_fieldcat-col_pos = 5.
    v_fieldcat-fieldname = 'BWKEY'.
    v_fieldcat-seltext_m = 'Plant'.
    APPEND v_fieldcat TO v_t_fieldcat.
    v_fieldcat-col_pos = 6.
    v_fieldcat-fieldname = 'DMBTR'.
    v_fieldcat-seltext_m = 'Amount'.
    APPEND v_fieldcat TO v_t_fieldcat.
    v_fieldcat-col_pos = 7.
    v_fieldcat-fieldname = 'MENGE'.
    v_fieldcat-seltext_m = 'Quantity'.
    APPEND v_fieldcat TO v_t_fieldcat.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    it_fieldcat = v_t_fieldcat
    TABLES
    t_outtab = i_op_stock.
    ENDFORM.
    Thanks&regds,
    Sree.

    Hi,
    Please note that MBEW contains the stock position as of now. MBEWH contains the closing stock of all the previous periods. However if there is no transaction in a particular period you may not find a record in MBEWH for that period.
    Please refer to SAP documentation:
    [Back To Resultlist]
    Material Master (Industry/Retail): Enhancements to Period Closing
    Description
    In Release 4.5A, the period closing function has been redesigned to eliminate or at least alleviate the following problems:
    Long runtime if there are very many stock segments
    Locking of all materials while the period closing program is run
    Data inconsistencies in stock segments due to incorrect operation of the period closing program by users
    The enhancements made to eliminate or alleviate these problems affect the way in which period closing is performed technically and particularly the data design. As a result, the following information is intended primarily for the following persons:
    System administrators
    Developers (for example, in customer projects)
    Other persons in IT departments or systems departments
    Runtime
    The runtime of the period closing program has been improved substantially since no stock tables (such as MBEW, MARD, or MCHB) are updated any longer for the change in period, unless the change in period is a change in fiscal year. Only the material ledger tables are updated.
    If the change in period coincides with the end of a fiscal year, the program also updates the physical inventory indicators and thus those tables relevant to physical inventory management; that is, even in this case, table MBEW in particular is no longer updated.
    Locking of materials
    The materials are locked by the period closing program only if the material ledger is used.
    In the case of a change in fiscal year, no physical inventory transactions can be performed when running the period closing program.
    Ease of use
    As of Release 4.5A, period closing is performed in inventory management or invoice verification; that is, whenever, for example, a goods movement is made, the period is updated in the relevant stock segments of the material if the material is moved for the first time in this period.
    Changes to the interface
    There have been no changes to the interface.
    Changes in procedure
    The implementation of the above enhancements has required the data design to be changed as follows:
    Stock tables MBEW, EBEW, QBEW, MARC, MARD, MCHB, MKOL, MSKA, MSSA, MSKU, MSLB, MSPR, and MSSQ now have history tables, for example, MBEWH is the history table for MBEW, and EBEWH the history table for EBEW. For each period, these history tables can contain an entry with the corresponding stock information, and are created for the previous period whenever there is a change in period-relevant information such as unrestricted-use stock. This means that the information for the previous period can no longer be read directly from tables MBEW, EBEW, and so on, but that tables MBEWH, EBEWH, etc. have to be read and interpreted.
    The point in time at which the system is upgraded to Release 4.5A is important for interpreting the history tables. If the period has been closed at least once after the upgrade, the stocks for the previous period are contained, for example, in history table MARDH. If this table does not contain a corresponding entry, the previous period stock for the corresponding stock fields is the same as the current stock.
    Fields LFMON/LFGJA of the stock tables no longer contain the current period, but one of the following periods, depending on when the upgrade took place:
    Period of the last goods movement, invoice verification, price change, or other function that has resulted in period-specific information being updated
    Period of the release upgrade if no such function has been performed since the system was upgraded
    The current period is still recorded (as prior to Release 4.5A) in table MARV.
    Planning
    In a future release, it is planned for the data in the material ledger to no longer be updated by the period closing program. This will further increase the speed of the program.
    [Back To Resultlist]
    Regards
    Raju Chitale

  • Row position in alv report

    Hi experts....
    I want to put data in first row in alv report. I am using reuse_alv_list_display for alv report output.
    I used "FIELDCAT_LN-ROW_POS = '1'. '
    but it doesn't make any effect in output.
    please help me.
    thank you.

    Hi..
    Code is like this...
    *& Report  Z_MATERIAL_ANALYSIS
    Report  Z_MATERIAL_ANALYSIS.
    TYPE-POOLS: SLIS , VRM.
    DATA: G_REPID LIKE SY-REPID,
    GS_PRINT            TYPE SLIS_PRINT_ALV,
    GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
    GT_EVENTS           TYPE SLIS_T_EVENT,
    i_sort TYPE slis_t_sortinfo_alv,
    gs_layout           TYPE SLIS_LAYOUT_ALV,
    GT_FIELDCAT         TYPE SLIS_T_FIELDCAT_ALV,
    FIELDCAT_LN LIKE LINE OF GT_FIELDCAT,
    COL_POS TYPE I.
    DATA: gs_variant LIKE disvariant,
          g_save.
    TABLES : MSEG , MKPF.
    DATA : BEGIN OF ITAB1 OCCURS 0,
           601_602 LIKE MSEG-MENGE,
           END OF ITAB1.
    DATA : BEGIN OF ITAB OCCURS 0,
            LGORT LIKE MSEG-LGORT,
            BWART LIKE MSEG-BWART,
            ZEILE LIKE MSEG-ZEILE,
            MENGE LIKE MSEG-MENGE,
            MEINS LIKE MSEG-MEINS,
            MATNR LIKE MSEG-MATNR,
            WERKS LIKE MSEG-WERKS,
            SHKZG LIKE MSEG-SHKZG,
            MBLNR LIKE MKPF-MBLNR,
            BUDAT LIKE MKPF-BUDAT,
            SIGN(2),
            101_102 LIKE MSEG-MENGE,
            301 LIKE MSEG-MENGE,
            311 LIKE MSEG-MENGE,
            321 LIKE MSEG-MENGE,
            601_602 LIKE MSEG-MENGE,
            641_642 LIKE MSEG-MENGE,
            653 LIKE MSEG-MENGE,
            671 LIKE MSEG-MENGE,
            END OF ITAB.
    DATA: TOTAL_PLUS,
          TOTAL_MINUS,
          TOTAL.
    SELECT-OPTIONS : MATNR FOR MSEG-MATNR,
                     DAT  FOR MKPF-BUDAT.
    PARAMETERS :     LGORT LIKE MSEG-LGORT,
                     WERKS LIKE MSEG-WERKS,
                     BWART LIKE MSEG-BWART.
    SELECT MSEG~MATNR
           MSEG~LGORT
           MSEG~BWART
           MSEG~ZEILE
          MSEG~MENGE
           MSEG~MEINS
           MSEG~WERKS
           MSEG~SHKZG
           MKPF~MBLNR
           MKPF~BUDAT
           INTO CORRESPONDING FIELDS OF TABLE ITAB
           FROM MSEG
           INNER JOIN MKPF ON MSEGMBLNR = MKPFMBLNR
           WHERE MSEG~MATNR IN MATNR
           AND MSEG~LGORT EQ LGORT
           AND MKPF~BUDAT IN DAT
           AND MSEG~WERKS EQ WERKS.
    *LOOP AT ITAB.
    *IF ITAB-BWART EQ
    *WRITE : / 'MATNR', 10 'LGORT',20 'BWART', 30 'ZEILE',40 'MENGE',50
    *'101102', 60
    *'MEINS', 70 'MBLNR', 80 'BUDAT'.
    LOOP AT ITAB.
    IF ITAB-BWART = '101' OR ITAB-BWART = '102'.
      SELECT MENGE INTO (ITAB-101_102) FROM MSEG  WHERE MATNR = ITAB-MATNR
      AND MBLNR = ITAB-MBLNR
      AND LGORT = ITAB-LGORT
      AND WERKS = ITAB-WERKS
      AND ZEILE = ITAB-ZEILE.
      MODIFY ITAB.
      ENDSELECT.
    ENDIF.
    IF ITAB-BWART = '601' OR ITAB-BWART = '602'.
      SELECT MENGE INTO (ITAB-601_602) FROM MSEG WHERE MATNR = ITAB-MATNR
      AND MBLNR = ITAB-MBLNR
      AND LGORT = ITAB-LGORT
      AND WERKS = ITAB-WERKS
      AND ZEILE = ITAB-ZEILE.
    AND BWART IN ('601','602').
      MODIFY ITAB.
      ENDSELECT.
    ENDIF.
    IF ITAB-BWART = '641' OR ITAB-BWART = '642'.
        SELECT MENGE INTO CORRESPONDING FIELDS OF TABLE ITAB1 FROM MSEG
    WHERE MATNR = ITAB-MATNR
        AND MBLNR = ITAB-MBLNR
      AND LGORT = ITAB-LGORT
      AND WERKS = ITAB-WERKS
      AND ZEILE = ITAB-ZEILE.
      MODIFY ITAB.
    ENDSELECT.
    ENDIF.
    ENDLOOP.
    LOOP AT ITAB.
    IF ITAB-SHKZG = 'H'.
      ITAB-SIGN = '+'.
        MODIFY ITAB.
    ELSE.
      ITAB-SIGN = '-'.
    MODIFY ITAB.
    ENDIF.
    ENDLOOP.
    *LOOP AT ITAB.
    *WRITE : /
    ITAB-MATNR,
             ITAB-LGORT,
             ITAB-BWART,
             ITAB-ZEILE,
             ITAB-MENGE,
             ITAB-TOT ,
             ITAB-101_102,
             ITAB-SIGN,
             ITAB-601_602.
             ITAB-SIGN.
             ITAB-MEINS,
             ITAB-MBLNR,
             ITAB-BUDAT,
             ITAB-SHKZG.
    *AT LAST.
    *SUM.
    *WRITE : / ITAB-101_102.
    *ENDAT.
    *ENDLOOP.
    PERFORM BUILD.
    PERFORM CALL_ALV.
    FORM BUILD.
    DATA: FIELDCAT_IN TYPE SLIS_FIELDCAT_ALV.
    REFRESH GT_FIELDCAT.
    *CLEAR GT_FIELDCAT.
    CLEAR FIELDCAT_LN.
    FIELDCAT_LN-FIELDNAME = '101_102'.
    FIELDCAT_LN-TABNAME   = 'ITAB'.
    FIELDCAT_LN-ROW_POS = '1'.
    FIELDCAT_LN-COL_POS = '1'.
    APPEND FIELDCAT_LN TO GT_FIELDCAT.
    CLEAR FIELDCAT_LN.
    FIELDCAT_LN-FIELDNAME = '301 '.
    FIELDCAT_LN-TABNAME   = 'ITAB'.
    FIELDCAT_LN-NO_OUT    = 'X'.
    FIELDCAT_LN-SELTEXT_L = 'Description'.
    FIELDCAT_LN-OUTPUTLEN = 22.
    FIELDCAT_LN-DO_SUM        = 'X'.   "SUM UPON DISPLAY
    APPEND FIELDCAT_LN TO GT_FIELDCAT.
    CLEAR FIELDCAT_LN.
    FIELDCAT_LN-FIELDNAME = '601_602'.
    FIELDCAT_LN-TABNAME   = 'ITAB1'.
    FIELDCAT_LN-ROW_POS = '1'.
    FIELDCAT_LN-COL_POS = '1'.
    *FIELDCAT_LN-NO_OUT    = 'X'.
    FIELDCAT_LN-SELTEXT_L = 'Base qty'.
    FIELDCAT_LN-NO_ZERO = 'X'.
    FIELDCAT_LN-just = 'C'.
    *FIELDCAT_LN-DO_SUM        = 'X'.   "SUM UPON DISPLAY
    APPEND FIELDCAT_LN TO GT_FIELDCAT.
    g_repid = sy-repid.
        gs_variant-report = g_repid.
        g_save           = 'A'.
    ENDFORM.
    FORM EVENTTAB_BUILD CHANGING LT_EVENTS TYPE SLIS_T_EVENT.
    CONSTANTS:
    GC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.
    *GC_FORMNAME_END_OF_PAGE TYPE SLIS_FORMNAME VALUE 'END_OF_PAGE'.
      DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
           EXPORTING
                I_LIST_TYPE = 0
           IMPORTING
                ET_EVENTS   = LT_EVENTS.
      READ TABLE 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 LT_EVENTS.
      ENDIF.
    ENDFORM.
    FORM CALL_ALV.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
      I_CALLBACK_PROGRAM = G_REPID
    I_STRUCTURE_NAME = 'ITAB'
      IS_LAYOUT =  gs_layout
      i_save                            = g_save
      is_variant                        = gs_variant
      IT_FIELDCAT = GT_FIELDCAT[]
       IT_SORT = I_SORT
        IT_EVENTS = GT_EVENTS[]
        IS_PRINT = GS_PRINT
      TABLES
      T_OUTTAB = ITAB
      EXCEPTIONS
      PROGRAM_ERROR = 1
      OTHERS = 2.
    ENDFORM.

  • How to include maintaince view in da report

    I did a report for Audit – Inventory Ageing Company-wise Summary i am getting the output of the report well. what I need is that i should include a field WGBEZ of the maintaince view V023 so that to display material group description. where & how should i write the code in my code. kindly give suggestions. i here with attaching my code.
    Title       : Aged Stock
    Description : 'Audit – Inventory Ageing Company-wise Summary’
    REPORT ZMMR0024MOD LINE-SIZE 170 NO STANDARD PAGE HEADING .
    TYPE-POOLS : SLIS.
    TABLES : T001,
             T023,
             T001K,
             MARA,
             marv,
             MAKT,
             MBEW,
             MSEG,
             ekpo.
    Constants
    CONSTANTS : GC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE
    'TOP_OF_PAGE'.
    Internal Tables
    DATA  :  BEGIN OF GT_FINAL OCCURS 0,
             MATKL LIKE MARA-MATKL,
             MATNR LIKE MARA-MATNR,
            WGBEZ LIKE V023-WGBEZ,
             LBKUM LIKE MBEW-LBKUM,
             tot_val type p decimals 2,
             MAKTX LIKE MAKT-MAKTX,
             tot_amt type p decimals 2,
             price type p decimals 2,
             meins like mara-meins,
             END OF GT_FINAL,
             DETAIL_FINAL LIKE GT_FINAL OCCURS 0 WITH HEADER LINE.
    DATA  :  BEGIN OF MAT_FINAL OCCURS 0,
             MATKL LIKE MARA-MATKL,
             TOT_VAL LIKE MSEG-MENGE,
             TOT_AMT LIKE MBEW-SALK3,
             PRICE LIKE MBEW-SALK3,
             meins like mara-meins,
             END OF MAT_FINAL.
    DATA :   BEGIN OF I_MARA OCCURS 0,
             MATNR LIKE MARA-MATNR,
             MATKL LIKE MARA-MATKL,
             MAKTX LIKE MAKT-MAKTX,
             WGBEZ LIKE V023-WGBEZ,
             MEINS LIKE MARA-MEINS,
             LBKUM LIKE MBEWH-LBKUM,
             TOT_AMT LIKE MBEW-SALK3,
             END OF I_MARA.
    DATA :   BEGIN OF I_MKPF_MSEG OCCURS 0,
             MATNR LIKE MARA-MATNR,
             MBLNR LIKE MSEG-MBLNR,
             ZEILE LIKE MSEG-ZEILE,
             MENGE LIKE MSEG-MENGE,
             BWART LIKE MSEG-BWART,
             BUDAT LIKE MKPF-BUDAT,
             NET_VAL LIKE MSEG-MENGE,
             ebeln like mseg-ebeln,
             ebelp like mseg-ebelp,
             lfbnr like mseg-lfbnr,
             lfpos like mseg-lfpos,
             SHKZG LIKE MSEG-SHKZG,
             meins like mara-meins,
             END OF I_MKPF_MSEG,
             WA_TEMP LIKE I_MKPF_MSEG.
    DATA :   BEGIN OF I_MBEWH OCCURS 0,
             MATNR LIKE MARA-MATNR,
             LBKUM LIKE MBEW-LBKUM,
             SALK3 LIKE MBEW-SALK3,
             BWKEY LIKE MBEW-BWKEY,
             END OF I_MBEWH.
    DATA :   I_MBEWH1 LIKE I_MBEWH OCCURS 0 WITH HEADER LINE.
    DATA :   BEGIN OF I_TEMP OCCURS 0,
             MATNR LIKE MARA-MATNR,
             NET_VAL LIKE MSEG-MENGE,
             meins like mara-meins,
             END OF I_TEMP.
    RANGES : RANGE_WERK FOR T001W-WERKS,
             RANGE_DATE FOR SY-DATUM,
             S_BWTAR FOR BWTAR.
    DATA :  PERIOD LIKE  BAPI0002_4-FISCAL_PERIOD,
            FISCAL_YEAR LIKE  BAPI0002_4-FISCAL_YEAR,
            CUR_VAL LIKE MSEG-MENGE,
            NET_VAL LIKE MSEG-MENGE,
            TOT_VAL LIKE MSEG-MENGE,
            TOT_QTY LIKE MSEG-MENGE,
            TOT_AMT1 LIKE MBEW-SALK3,
            RES_DATE LIKE SY-DATUM,
            NUM LIKE MBEW-SALK3,
            UOM LIKE MARA-MEINS.
    Data declarations for alv
    DATA : GV_PAGE TYPE N VALUE 0.
    DATA : GT_FIELDCAT         TYPE SLIS_T_FIELDCAT_ALV,
           GT_SORT             TYPE SLIS_T_SORTINFO_ALV,
           GT_FILTER           TYPE SLIS_T_FILTER_ALV,
           GT_SP_GROUP         TYPE SLIS_T_SP_GROUP_ALV,
           GT_EVENTS           TYPE SLIS_T_EVENT WITH HEADER LINE,
           GV_REPID            LIKE SY-REPID,
           GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
           GV_SAVE(1)          TYPE C,
           GT_VARIANT          LIKE DISVARIANT,
           GV_DOMNAME          LIKE DD07V-DOMNAME,
           GV_DOMVAL           LIKE DD07V-DOMVALUE_L,
           GW_FIELDCAT         TYPE SLIS_FIELDCAT_ALV.
    Selection screen
    SELECTION-SCREEN BEGIN OF BLOCK SEL WITH FRAME TITLE TEXT-001.
    PARAMETERS     : GS_BUKRS LIKE T001K-BUKRS OBLIGATORY.
    SELECT-OPTIONS : GS_MATKL FOR MARA-MATKL,
                     GS_MATNR FOR MARA-MATNR.
    PARAMETERS     : gs_ped like s031-spmon OBLIGATORY,
                     GS_DAYS(3) TYPE n,
                     MG1 RADIOBUTTON GROUP GR1,
                     MT2 RADIOBUTTON GROUP GR1.
    SELECTION-SCREEN END OF BLOCK SEL.
    Validations on selection screen
    AT SELECTION-SCREEN ON GS_BUKRS.
      PERFORM F00_VALIDATE_COMPANY_CODE.
    AT SELECTION-SCREEN ON GS_MATKL.
      IF NOT GS_MATKL[] IS INITIAL.
        PERFORM F01_VALIDATE_MATERIAL_GROUP.
      ENDIF.
    AT SELECTION-SCREEN ON GS_MATNR.
      IF NOT GS_MATNR[] IS INITIAL.
        PERFORM F01_VALIDATE_MATERIAL.
      ENDIF.
    AT SELECTION-SCREEN ON GS_days.
      if gs_days = ''.
        gs_days = 0.
      endif.
    START-OF-SELECTION.
      GV_REPID = SY-REPID.
      PERFORM F20_EVENTTAB_BUILD CHANGING GT_EVENTS[].
      PERFORM F30_SELECT_PRIMARY_DATA.
      IF MG1 = 'X'.
        PERFORM F11_DATA_FORMAT_GROUP.
        PERFORM F50_MATERIAL_GROUP_DATA.
        PERFORM F40_DISPLAY_REPORT TABLES MAT_FINAL.
      ELSEIF MT2 = 'X'.
        PERFORM F10_DATA_FORMAT_MAT.
        PERFORM F40_DISPLAY_REPORT TABLES GT_FINAL.
      ENDIF.
    *&      Form  F20_EVENTTAB_BUILD
    FORM F20_EVENTTAB_BUILD CHANGING LT_EVENTS TYPE SLIS_T_EVENT.
      CONSTANTS:  LC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE
                  'TOP_OF_PAGE',
                  LC_FORMNAME_USER_COMMAND TYPE SLIS_FORMNAME VALUE
                  'USER_COMMAND'.
      DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
        EXPORTING
          I_LIST_TYPE = 0
        IMPORTING
          ET_EVENTS   = LT_EVENTS.
    note : lt_events has all the events
      READ TABLE 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 LT_EVENTS.
      ENDIF.
      READ TABLE LT_EVENTS WITH KEY NAME =   SLIS_EV_USER_COMMAND
      INTO LS_EVENT.
      IF SY-SUBRC = 0.
        MOVE LC_FORMNAME_USER_COMMAND TO LS_EVENT-FORM.
        APPEND LS_EVENT TO LT_EVENTS.
      ENDIF.
    ENDFORM.                    "F20_EVENTTAB_BUILD
    *&      Form  F12_E04_COMMENT_BUILD
    FORM F12_E04_COMMENT_BUILD USING E04_LT_TOP_OF_PAGE TYPE
    SLIS_T_LISTHEADER.
      DATA : LS_LINE TYPE SLIS_LISTHEADER,
             LV_TEXT(100) TYPE C,
             LV_DAYLOW(2) TYPE C,
             LV_MONTHLOW(2) TYPE C,
             LV_YEARHIGH(4) TYPE C,
             LV_DAYHIGH(2) TYPE C,
             LV_MONTHHIGH(2) TYPE C,
             LV_YEARLOW(4) TYPE C,
             LV_DATFORMAT1(10),
             LV_DATFORMAT2(10).
      CONCATENATE  'Company Code :' ' '  GS_BUKRS
      INTO LV_TEXT SEPARATED BY SPACE.
      CLEAR LS_LINE.
      LS_LINE-TYP  = 'H'.
      LS_LINE-INFO = LV_TEXT.
      APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
      CLEAR LV_TEXT.
      IF NOT GS_MATKL[] IS INITIAL.
        IF GS_MATKL-HIGH IS INITIAL AND NOT GS_MATKL-LOW IS INITIAL.
          CONCATENATE  'Material Group :' ' '  GS_MATKL-LOW
          INTO LV_TEXT SEPARATED BY SPACE.
        ELSE .
          CONCATENATE  'Material Group :' GS_MATKL-LOW ' to'
          GS_MATKL-HIGH INTO LV_TEXT SEPARATED BY SPACE.
        ENDIF.
      ENDIF.
      CLEAR LS_LINE.
      LS_LINE-TYP  = 'H'.
      LS_LINE-INFO = LV_TEXT.
      APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
      CLEAR LV_TEXT.
      IF NOT GS_MATNR[] IS INITIAL.
        IF GS_MATNR-HIGH IS INITIAL AND NOT GS_MATNR-LOW IS INITIAL.
          CONCATENATE  'Material :' ' '  GS_MATNR-LOW
          INTO LV_TEXT SEPARATED BY SPACE.
        ELSE .
          CONCATENATE  'Material :' GS_MATNR-LOW ' to'
          GS_MATNR-HIGH INTO LV_TEXT SEPARATED BY SPACE.
        ENDIF.
      ENDIF.
      CLEAR LS_LINE.
      LS_LINE-TYP  = 'H'.
      LS_LINE-INFO = LV_TEXT.
      APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
      CLEAR LV_TEXT.
    LV_YEARLOW  = gs_ped+0(4).
    LV_MONTHLOW = gs_ped+4(2).
    LV_DAYLOW   = gs_ped+6(2).
    CONCATENATE LV_DAYLOW LV_MONTHLOW LV_YEARLOW INTO LV_DATFORMAT1
    *SEPARATED BY '.'.
      CONCATENATE  'Key month : ' gs_ped
      INTO LV_TEXT SEPARATED BY SPACE.
      CLEAR LS_LINE.
      LS_LINE-TYP  = 'H'.
      LS_LINE-INFO = LV_TEXT.
      APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
      CLEAR LV_TEXT.
      CONCATENATE  'Number of days :' ' '  GS_DAYS
      INTO LV_TEXT SEPARATED BY SPACE.
      CLEAR LS_LINE.
      LS_LINE-TYP  = 'H'.
      LS_LINE-INFO = LV_TEXT.
      APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
      CLEAR LV_TEXT.
      GV_PAGE = GV_PAGE + 1.
      CONCATENATE  'PAGE NO : ' ' '  GV_PAGE
      INTO LV_TEXT SEPARATED BY SPACE.
      CLEAR LS_LINE.
      LS_LINE-TYP  = 'H'.
      LS_LINE-INFO = LV_TEXT.
      APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
    ENDFORM.                    "F12_E04_COMMENT_BUILD
          FORM TOP_OF_PAGE                                              *
    FORM TOP_OF_PAGE.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
    ENDFORM.                    "TOP_OF_PAGE
    *&      Form  validate_sales_organization
          text
    FORM F00_VALIDATE_COMPANY_CODE .
      SELECT SINGLE BUKRS
          FROM T001
          INTO T001-BUKRS
          WHERE BUKRS = GS_BUKRS.
      IF SY-SUBRC = 0.
      ELSE.
        MESSAGE E000(ZCBOM) WITH 'Please enter the valid material group'.
      ENDIF.
    ENDFORM.                    " validate_sales_organization
    *&      Form  VALIDATE_PLANT
          text
    -->  p1        text
    <--  p2        text
    FORM F01_VALIDATE_MATERIAL_GROUP.
      SELECT SINGLE MATKL
          FROM T023
          INTO T023-MATKL
          WHERE MATKL IN GS_MATKL.
      IF SY-SUBRC = 0.
      ELSE.
        MESSAGE E000(ZCBOM) WITH 'Please enter the valid material group'.
      ENDIF.
    ENDFORM.                    " VALIDATE_PLANT
    *&      Form  VALIDATE_MATERIAL
          text
    -->  p1        text
    <--  p2        text
    FORM F01_VALIDATE_MATERIAL.
      SELECT SINGLE MATNR
          FROM MARA
          INTO MARA-MATNR
          WHERE MATNR IN GS_MATNR.
      IF SY-SUBRC = 0.
      ELSE.
        MESSAGE E000(ZCBOM) WITH 'Please enter the valid material '.
      ENDIF.
    ENDFORM.                    " VALIDATE_MATERIAL
    *&      Form  F40_DISPLAY_REPORT
    FORM F40_DISPLAY_REPORT TABLES IT.
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
        EXPORTING
          I_CALLBACK_PROGRAM      = GV_REPID
          I_CALLBACK_USER_COMMAND = 'USER_COMMAND '
          IT_FIELDCAT             = GT_FIELDCAT[]
          IT_SPECIAL_GROUPS       = GT_SP_GROUP[]
          IT_SORT                 = GT_SORT[]
          I_SAVE                  = GV_SAVE
          IS_VARIANT              = GT_VARIANT
          IT_EVENTS               = GT_EVENTS[]
        TABLES
          T_OUTTAB                = IT.                         "it_1.
      CLEAR:GT_FIELDCAT.
      REFRESH:GT_FIELDCAT.
    ENDFORM.                    " F40_DISPLAY_REPORT
    *&      Form  F30_SELECT_PRIMARY_DATA
          text
    FORM F30_SELECT_PRIMARY_DATA .
    subroutine to get the actual data
    to get the plants for the given company code
      data : temp_bukrs like BAPI0002_2-COMP_CODE,
             temp_date  like BAPI0002_4-POSTING_DATE.
      data : last_day(2) type n,
             from_date like sy-datum,
             temp_date1 like sy-datum,
             cal_month(2) type n,
             cal_year(4) type n.
      SELECT DISTINCT BWKEY FROM T001K INTO RANGE_WERK-LOW WHERE BUKRS = GS_BUKRS.
        RANGE_WERK-SIGN = 'I'.
        RANGE_WERK-OPTION = 'EQ'.
        APPEND RANGE_WERK.
      ENDSELECT.
    *selecting material that is relevant to the selection criteria
      SELECT MARA~MATNR MATKL MEINS MAKTX
             FROM MARA JOIN MAKT
               ON MAKTMATNR = MARAMATNR
             INTO CORRESPONDING FIELDS OF TABLE I_MARA
             WHERE MARA~MATNR IN GS_MATNR
              AND  MATKL IN GS_MATKL
              AND MAKT~SPRAS = 'EN'.
      temp_bukrs = gs_bukrs.
      cal_month = gs_ped+4(2).
      cal_year  = gs_ped+0(4).
      concatenate cal_year cal_month '01' into temp_date.
    *temp_date = temp_date1.
      CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
        EXPORTING
          COMPANYCODEID = temp_bukrs
          POSTING_DATE  = temp_date
        IMPORTING
          FISCAL_YEAR   = fiscal_year
          FISCAL_PERIOD = period.
      select single * from marv into marv where bukrs = temp_bukrs.
    temp_date1 = temp_date.
      if sy-subrc = 0.
        if ( marv-lfmon ne period or marv-lfgja ne fiscal_year ).
          CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
            EXPORTING
              DAY_IN            = temp_date
            IMPORTING
              LAST_DAY_OF_MONTH = from_date
            EXCEPTIONS
              DAY_IN_NO_DATE    = 1
              OTHERS            = 2.
        else.
          from_date = sy-datum.
        endif.
      endif.
    to define the range for posting date
      RES_DATE = from_date - GS_DAYS.
      RANGE_DATE-LOW  = RES_DATE.
      RANGE_DATE-HIGH = from_date.
      RANGE_DATE-OPTION = 'BT'.
      RANGE_DATE-SIGN = 'I'.
      APPEND RANGE_DATE.
    to select documents and their quantities for the given range of posting dates
    with goods movement type 101 105 657 453 459 501 521 and their reversals
      if range_date-low ne range_date-high.
        SELECT MSEG~MATNR MSEG~MBLNR MSEG~ZEILE MSEG~MENGE MSEG~BWART mseg~ebeln mseg~ebelp
               MKPF~BUDAT MSEG~SHKZG
               FROM MKPF
               JOIN MSEG ON MSEG~MBLNR = MKPF~MBLNR
                        AND MSEG~MJAHR = MKPF~MJAHR
                          INTO CORRESPONDING FIELDS OF TABLE I_MKPF_MSEG
                              FOR ALL ENTRIES IN I_MARA
                            WHERE MSEG~MATNR = I_MARA-MATNR
                              AND MSEG~WERKS IN RANGE_WERK
                              AND MKPF~BUDAT IN RANGE_DATE
                              AND MSEG~BWART IN ('101','105','657','453','459','501','521','561','309','701','712', "711
                                                 '102','106','658','454','460','502','522','562').
        DELETE  I_MKPF_MSEG WHERE ( BWART = '309' AND SHKZG = 'H')
                               or ( bwart = '453' and shkzg = 'H')
                               or ( bwart = '454' and shkzg = 'S').
      endif.
      SORT I_MKPF_MSEG BY MATNR MBLNR.
      LOOP AT I_MKPF_MSEG.
        if i_mkpf_mseg-bwart = '101' or i_mkpf_mseg-bwart = '102'.
          select single * from ekpo  where ebeln = i_mkpf_mseg-ebeln
                                       and ebelp = i_mkpf_mseg-ebelp.
          if ekpo-pstyp = 7.
            delete i_mkpf_mseg where ebeln = i_mkpf_mseg-ebeln
                                 and ebelp = i_mkpf_mseg-ebelp.
            CLEAR I_MKPF_MSEG-MENGE.
          endif.
        endif.
        IF ( I_MKPF_MSEG-BWART = '101' OR I_MKPF_MSEG-BWART = '105' OR I_MKPF_MSEG-BWART = '712' OR
             I_MKPF_MSEG-BWART = '657' OR I_MKPF_MSEG-BWART = '453' OR "I_MKPF_MSEG-BWART = '711' OR
             I_MKPF_MSEG-BWART = '459' OR I_MKPF_MSEG-BWART = '501' OR I_MKPF_MSEG-BWART = '701' OR
             I_MKPF_MSEG-BWART = '521' OR I_MKPF_MSEG-BWART = '561' OR I_MKPF_MSEG-BWART = '309').
          NET_VAL = NET_VAL + I_MKPF_MSEG-MENGE.
        ENDIF.
        IF ( I_MKPF_MSEG-BWART = '102' OR I_MKPF_MSEG-BWART = '106' OR
             I_MKPF_MSEG-BWART = '658' OR I_MKPF_MSEG-BWART = '454' OR
             I_MKPF_MSEG-BWART = '460' OR I_MKPF_MSEG-BWART = '502' OR
             I_MKPF_MSEG-BWART = '522' OR I_MKPF_MSEG-BWART = '562').
          NET_VAL = NET_VAL - I_MKPF_MSEG-MENGE.
        ENDIF.
        WA_TEMP = I_MKPF_MSEG.
        AT END OF MATNR.
          I_TEMP-MATNR  = WA_TEMP-MATNR.
          I_TEMP-NET_VAL = NET_VAL.
          APPEND I_TEMP.
          CLEAR NET_VAL.
        ENDAT.
      ENDLOOP.
      SORT I_MARA BY MATNR.
      SORT I_TEMP BY MATNR.
      SELECT MATNR LBKUM SALK3 BWKEY
             FROM MBEWH
             INTO CORRESPONDING FIELDS OF TABLE I_MBEWH
             FOR ALL ENTRIES IN I_MARA
             WHERE MATNR = I_MARA-MATNR
               AND BWKEY IN RANGE_WERK
               AND BWTAR IN S_BWTAR
               AND LFGJA = FISCAL_YEAR
               AND LFMON = PERIOD.
      SELECT MATNR LBKUM SALK3 BWKEY
             FROM MBEW
             INTO CORRESPONDING FIELDS OF TABLE I_MBEWH1
             FOR ALL ENTRIES IN I_MARA
             WHERE MATNR = I_MARA-MATNR
               AND BWKEY IN RANGE_WERK.
                AND LFMON = PERIOD
                AND LFGJA = FISCAL_YEAR.
      SORT I_MBEWH BY MATNR BWKEY.
      SORT I_MBEWH1 BY MATNR BWKEY.
      LOOP AT I_MBEWH.
        LOOP AT I_MBEWH1 WHERE MATNR = I_MBEWH-MATNR
                           AND BWKEY = I_MBEWH-BWKEY.
          DELETE I_MBEWH1.
        ENDLOOP.
      ENDLOOP.
      APPEND LINES OF I_MBEWH1 TO I_MBEWH.
      CLEAR : I_MBEWH1.
      REFRESH I_MBEWH1.
      SORT I_MBEWH BY MATNR.
      LOOP AT I_MBEWH .
        I_MBEWH1 = I_MBEWH.
        AT END OF MATNR.
          SUM.
          I_MBEWH1-LBKUM = I_MBEWH-LBKUM.
          I_MBEWH1-SALK3 = I_MBEWH-SALK3.
          APPEND I_MBEWH1.
        ENDAT.
      ENDLOOP.
      DELETE I_MBEWH1 WHERE LBKUM <= 0.
      LOOP AT I_MARA.
        CLEAR : CUR_VAL,
                NUM,
                TOT_VAL,
                TOT_AMT1,
                I_MBEWH1.
        GT_FINAL-MATNR = I_MARA-MATNR.
        GT_FINAL-MATKL = I_MARA-MATKL.
        GT_FINAL-MAKTX = I_MARA-MAKTX.
        gt_final-meins = I_MARA-MEINS.
        READ TABLE I_MBEWH1 WITH KEY MATNR = I_MARA-MATNR.
        GT_FINAL-LBKUM = I_MBEWH1-LBKUM.
    to get the net inward movement vale that is to be subtracted from current value
        READ TABLE I_TEMP WITH KEY MATNR = I_MARA-MATNR.
        IF SY-SUBRC = 0 .
          IF GT_FINAL-LBKUM > 0.
            TOT_VAL = gt_final-lbkum - I_TEMP-NET_VAL.
            if tot_val gt 0.
              GT_FINAL-TOT_VAL = TOT_VAL.
              GT_FINAL-PRICE = I_MBEWH1-SALK3 / gt_final-lbkum."TOT_VAL.
              GT_FINAL-TOT_AMT = GT_FINAL-PRICE * GT_FINAL-TOT_VAL.
              APPEND GT_FINAL.
            endif.
          ENDIF.
        else.
          if gt_final-lbkum > 0.
            gt_final-tot_val = gt_final-lbkum.
            GT_FINAL-PRICE = I_MBEWH1-SALK3 / gt_final-lbkum.
            GT_FINAL-TOT_AMT = GT_FINAL-PRICE * GT_FINAL-TOT_VAL.
            APPEND GT_FINAL.
          endif.
        ENDIF.
      ENDLOOP.
      DELETE GT_FINAL WHERE LBKUM LE 0.
    ENDFORM.                    " F30_SELECT_PRIMARY_DATA
    *&      Form  f10_DATA_FORMAT
          text
    FORM F10_DATA_FORMAT_MAT .
    populating the field catalog table
    MATNR
      PERFORM F11_E01_FIELDCAT_INIT USING  'MARA' 'MATNR' 'MATNR' '1'
                               TEXT-003 'GT_FINAL' '15'.
    MAKTX
      PERFORM F11_E01_FIELDCAT_INIT USING  'MARA' 'MATKL' 'MATKL' '2'
                               TEXT-004 'GT_FINAL' '24'.
    DESC
      PERFORM F11_E01_FIELDCAT_INIT USING  'MAKT' 'MAKTX' 'MAKTX' '3'
                               TEXT-005 'GT_FINAL' '35'.
    Material Group Decription
      PERFORM F11_E01_FIELDCAT_INIT USING  'V023' 'WGBEZ' 'WGBEZ' '3'
                               TEXT-005 'GT_FINAL' '20'.
    qty
      PERFORM F11_E01_FIELDCAT_INIT USING  '' 'TOT_VAL' 'MENGE' '4'
                               TEXT-006 'GT_FINAL' '15'.
    MEINS
      PERFORM F11_E01_FIELDCAT_INIT USING  '' 'MEINS' 'MEINS' '4'
                               TEXT-008 'GT_FINAL' '15'.
    TOTAL COST
      PERFORM F11_E01_FIELDCAT_INIT USING  '' 'TOT_AMT' 'SALK3' '5'
                               TEXT-007 'GT_FINAL' '24'.
      PERFORM F12_E04_COMMENT_BUILD USING GT_LIST_TOP_OF_PAGE[].
      GV_SAVE = 'A'.
      CLEAR GT_EVENTS.
      REFRESH GT_EVENTS.
      GT_EVENTS-NAME = 'TOP_OF_PAGE'.
      GT_EVENTS-FORM = 'TOP_OF_PAGE'.
      APPEND GT_EVENTS.
    ENDFORM.                    " f10_DATA_FORMAT
    *&      Form  F11_E01_FIELDCAT_INIT
          text
    FORM F11_E01_FIELDCAT_INIT  USING T1 T2 T3 T4 T5 T6 T7.
      CLEAR GW_FIELDCAT.
      GW_FIELDCAT-REF_TABNAME    = T1.
      GW_FIELDCAT-FIELDNAME      = T2.
      GW_FIELDCAT-REF_FIELDNAME  = T3.
      GW_FIELDCAT-COL_POS        = T4.
      GW_FIELDCAT-SELTEXT_L      = T5.
      GW_FIELDCAT-TABNAME        = T6.
      GW_FIELDCAT-OUTPUTLEN      = T7.
      APPEND GW_FIELDCAT TO GT_FIELDCAT.
    ENDFORM.                    " F11_E01_FIELDCAT_INIT
    *&      Form  f40_material_group_data
          text
    -->  p1        text
    <--  p2        text
    FORM F50_MATERIAL_GROUP_DATA .
      SORT GT_FINAL BY MATKL.
      LOOP AT GT_FINAL.
        TOT_QTY = GT_FINAL-TOT_VAL + TOT_QTY.
        TOT_AMT1 = GT_FINAL-TOT_AMT + TOT_AMT1.
        UOM = GT_FINAL-MEINS.
        AT END OF MATKL.
          MAT_FINAL-MATKL = GT_FINAL-MATKL.
          MAT_FINAL-TOT_VAL = TOT_QTY.
          MAT_FINAL-TOT_AMT = TOT_AMT1.
          MAT_FINAL-MEINS   = UOM.
          APPEND MAT_FINAL.
          CLEAR : TOT_QTY,
                  TOT_AMT1.
        ENDAT.
      ENDLOOP.
    ENDFORM.                    " f40_material_group_data
    *&      Form  BUILD_DETAIL
          text
    -->  p1        text
    <--  p2        text
    FORM BUILD_DETAIL .
      DETAIL_FINAL[] = GT_FINAL[].
      DELETE DETAIL_FINAL WHERE MATKL NE MAT_FINAL-MATKL.
    ENDFORM.                    " BUILD_DETAIL
    *&      Form  f11_data_format_group
          text
    -->  p1        text
    <--  p2        text
    FORM F11_DATA_FORMAT_GROUP .
    MATNR
    PERFORM F11_E01_FIELDCAT_INIT USING  'MARA' 'MATNR' 'MATNR' '1'
                              TEXT-003 'GT_FINAL' '15'.
      REFRESH GT_FIELDCAT[].
    MAKTX
      PERFORM F11_E01_FIELDCAT_INIT USING  'MARA' 'MATKL' 'MATKL' '2'
                               TEXT-004 'MAT_FINAL' '24'.
    DESC
    PERFORM F11_E01_FIELDCAT_INIT USING  'MAKT' 'MAKTX' 'MAKTX' '3'
                              TEXT-005 'GT_FINAL' '35'.
    Material Group Decription
    PERFORM F11_E01_FIELDCAT_INIT USING  'V023' 'WGBEZ' 'WGBEZ' '3'
                              TEXT-005 'GT_FINAL' '20'.
    qty
      PERFORM F11_E01_FIELDCAT_INIT USING  '' 'TOT_VAL' 'MENGE' '4'
                               TEXT-006 'MAT_FINAL' '15'.
    qty
      PERFORM F11_E01_FIELDCAT_INIT USING  '' 'MEINS' 'MEINS' '5'
                               TEXT-008 'MAT_FINAL' '15'.
    TOTAL COST
      PERFORM F11_E01_FIELDCAT_INIT USING  '' 'TOT_AMT' 'SALK3' '6'
                               TEXT-007 'MAT_FINAL' '24'.
      PERFORM F12_E04_COMMENT_BUILD USING GT_LIST_TOP_OF_PAGE[].
      GV_SAVE = 'A'.
      CLEAR GT_EVENTS.
      REFRESH GT_EVENTS.
      GT_EVENTS-NAME = 'TOP_OF_PAGE'.
      GT_EVENTS-FORM = 'TOP_OF_PAGE'.
      APPEND GT_EVENTS.
    ENDFORM.                    " f11_data_format_group
    *&      Form  DETAIL_FORMAT_FIELDCAT
          text
    -->  p1        text
    <--  p2        text
    FORM DETAIL_FORMAT_FIELDCAT .
      REFRESH GT_FIELDCAT[].
    MATNR
      PERFORM F11_E01_FIELDCAT_INIT USING  'MARA' 'MATNR' 'MATNR' '1'
                               TEXT-003 'DETAIL_FINAL' '15'.
    MAKTL
      PERFORM F11_E01_FIELDCAT_INIT USING  'MARA' 'MATKL' 'MATKL' '2'
                               TEXT-004 'DETAIL_FINAL' '24'.
    MAKTX
      PERFORM F11_E01_FIELDCAT_INIT USING  'MAKT' 'MAKTX' 'MAKTX' '3'
                               TEXT-005 'DETAIL_FINAL' '35'.
    qty
      PERFORM F11_E01_FIELDCAT_INIT USING  '' 'TOT_VAL' 'MENGE' '4'
                               TEXT-006 'DETAIL_FINAL' '15'.
    UOM
      PERFORM F11_E01_FIELDCAT_INIT USING  '' 'MEINS' 'MEINS' '5'
                               TEXT-008 'DETAIL_FINAL' '15'.
    TOTAL COST
      PERFORM F11_E01_FIELDCAT_INIT USING  '' 'TOT_AMT' 'SALK3' '6'
                               TEXT-007 'DETAIL_FINAL' '24'.
    PERFORM F12_E04_COMMENT_BUILD USING GT_LIST_TOP_OF_PAGE[].
      GV_SAVE = 'A'.
    CLEAR GT_EVENTS.
    REFRESH GT_EVENTS.
    GT_EVENTS-NAME = 'TOP_OF_PAGE'.
    GT_EVENTS-FORM = 'TOP_OF_PAGE'.
    APPEND GT_EVENTS.
    ENDFORM.                    " DETAIL_FORMAT_FIELDCAT
          FORM USER_COMMAND                                             *
    FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                   RS_SELFIELD TYPE SLIS_SELFIELD.
      CASE R_UCOMM.
        WHEN '&IC1'.                       "doubleclick
          IF RS_SELFIELD-TABNAME = 'MAT_FINAL'.
            READ TABLE MAT_FINAL INDEX  RS_SELFIELD-TABINDEX .
            PERFORM BUILD_DETAIL.
            PERFORM DETAIL_FORMAT_FIELDCAT.
            PERFORM F20_EVENTTAB_BUILD CHANGING GT_EVENTS[].
            PERFORM F40_DISPLAY_REPORT TABLES DETAIL_FINAL.
            CLEAR DETAIL_FINAL[].
          ENDIF.
          CLEAR R_UCOMM.
      ENDCASE.
    ENDFORM.                    "USER_COMMAND

    Hi,
    Done with the help of abaper.
    Thanks & Regards,
    Sandeep

  • Problem: new entered data is saved but I am facing one error message --- no

    This is a module program for gate entry of materials(miro). This is a simple entry form which updates z tables with data entered. I have to send the new record details automatically through mail to the particular vendor email  id from where the material has been purchased.
    Problem: new entered data is saved but I am facing one error message --- no authorization to unpack list with rfc when the program is sending list through mail.
    PROGRAM  ZMMI001_GRN_ENTRY_BARCODE  MESSAGE-ID ZMM .
    *Table Declaration
    TABLES : EKKO , EKPO , LFA1 , MARC ,
             MARD , J_1IMTCHID , EKET , MSEG,
             MKPF , ZMMT001_GRN_GATE,
             ZMMT002_GRN_ITEM.
    TABLES: ADR6.
    *Table Control Declaration
    CONTROLS : TC1 TYPE TABLEVIEW USING SCREEN 1000.
    DATA: COLS LIKE LINE OF TC1-COLS.
    *Internal Table Declaration
    DATA : BEGIN OF IT_TC1 OCCURS 0,
            SEL,
            SNO(2) TYPE C,
            ITEMCODE(18) TYPE C,
            ITEMNAME(40) TYPE C,
            QUANTITY TYPE P DECIMALS 2,
            EXCISE(13) TYPE P DECIMALS 2,
           END OF IT_TC1.
    DATA : IT_TEMP_TC1 LIKE IT_TC1 OCCURS 0  WITH HEADER LINE.
    DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
    DATA : IT_EKPO LIKE EKPO OCCURS 0 WITH HEADER LINE.
    DATA : IT_EKKO LIKE EKKO OCCURS 0 WITH HEADER LINE.
    DATA : IT_EKET LIKE EKET OCCURS 0 WITH HEADER LINE.
    DATA : WK_ZMMT01 LIKE ZMMT001_GRN_GATE.
    DATA : IT_ZMMT01 LIKE ZMMT001_GRN_GATE OCCURS 0 WITH HEADER LINE.
    DATA : IT_ZMMT02 LIKE ZMMT002_GRN_ITEM OCCURS 0 WITH HEADER LINE.
    DATA : BEGIN OF IT_TEMP_EKPO OCCURS 0,
            EBELN LIKE EKPO-EBELN,
            EBELP LIKE EKPO-EBELP,
            MATNR LIKE EKPO-MATNR,
           END OF IT_TEMP_EKPO.
    DATA : BEGIN OF IT_MSEG OCCURS 0,
             MBLNR LIKE MSEG-MBLNR,
             MJAHR LIKE MSEG-MJAHR,
             ZEILE LIKE MSEG-ZEILE,
             BWART LIKE MSEG-BWART,
             MATNR LIKE MSEG-MATNR,
             EBELN LIKE MSEG-EBELN,
             EBELP LIKE MSEG-EBELP,
             BUDAT LIKE MKPF-BUDAT,
             MENGE LIKE MSEG-MENGE,
            END OF IT_MSEG.
    DATA : BEGIN OF IT_TEMP_MSEG OCCURS 0,
            MBLNR LIKE MSEG-MBLNR,
            MJAHR LIKE MSEG-MJAHR,
            ZEILE LIKE MSEG-ZEILE,
            BWART LIKE MSEG-BWART,
            EBELN LIKE MSEG-EBELN,
           END OF IT_TEMP_MSEG.
    DATA : BEGIN OF IT_TEMP_MKPF OCCURS 0,
            MBLNR LIKE MKPF-MBLNR,
            MJAHR LIKE MKPF-MJAHR,
            BUDAT LIKE MKPF-BUDAT,
            BKTXT LIKE MKPF-BKTXT,
           END OF IT_TEMP_MKPF.
    *Data Declaration
    DATA : WK_SNO TYPE I,
           WK_LIFNR LIKE LFA1-LIFNR,
           WK_EBELN(10) TYPE C,
           WK_VBELN(10) TYPE C,
           WK_FKDAT TYPE D,
           WK_NAME LIKE LFA1-NAME1,
           WK_SCHNO(10) TYPE C,
           WK_CHALNO(10) TYPE C,
           WK_CHALDATE(10) TYPE C,
           WK_GRNO(10) TYPE C,
           WK_GRDATE(10) TYPE C,
           WK_VEHICLE(10) TYPE C,
           WK_CARRIER(10) TYPE C,
           WK_FREIGHT(13) TYPE P DECIMALS 2,
           WK_MDOC(3) TYPE C,
           WK_DEPT(7) TYPE C,
           WK_MODE(7) TYPE C,
           WK_BASIC(13) TYPE P DECIMALS 2,
           WK_EXCISE(13) TYPE P DECIMALS 2,
           WK_TAX(13) TYPE P DECIMALS 2,
           WK_APPVAL(13) TYPE P DECIMALS 2,
           WK_CHAL(2) TYPE C,
           WK_FORM38(9) TYPE C,
           WK_COMMENT(30) TYPE C,
           WK_MAKTX(40) TYPE C,
           WK_LINES TYPE I,
           WK_TOTAL LIKE MARD-LABST,
           WK_LGORT LIKE MARD-LGORT,
           WK_EXCISE_IND,
           WK_TOT_EXCISE LIKE EKPO-NETWR,
           WK_DIFF LIKE EKPO-NETWR,
           WK_BSTYP LIKE EKKO-BSTYP,
           WK_BSART LIKE EKKO-BSART,
           WK_DIFF_QTY LIKE EKET-MENGE,
           WK_101_QTY LIKE EKET-MENGE,
           WK_102_QTY LIKE EKET-MENGE,
           WK_122_QTY LIKE EKET-MENGE,
           WK_WERKS LIKE EKPO-WERKS,
           WK_CHAR_SNO TYPE STRING,
           WK_DATE LIKE SY-DATUM,
           WK_TIME LIKE SY-UZEIT.
    DATA : WK_DATE1 LIKE SY-DATUM,
           WK_DATE2 LIKE SY-DATUM,
           WK_FISYEAR TYPE I,
           WK_CHAR_YEAR(20) TYPE C.
    DATA : V_UCOMM TYPE SY-UCOMM,
           V_INDEX(10) TYPE   C,
           V_QUANTITY(8) TYPE C.
    **DECLARATION FOR INPUT HELP*
    TYPES : BEGIN OF VALUES,
             TXZ01 LIKE EKPO-TXZ01,
             MENGE LIKE EKPO-MENGE,
             MATNR LIKE EKPO-MATNR,
            END OF VALUES.
    TYPES : BEGIN OF VALUES1,
             EBELN LIKE EKKO-EBELN,
            END OF VALUES1.
    TYPES : BEGIN OF VALUES2,
             NAME1 LIKE LFA1-NAME1,
             LIFNR LIKE LFA1-LIFNR,
            END OF VALUES2.
    DATA: PROGNAME LIKE SY-REPID,
          DYNNUM   LIKE SY-DYNNR,
          DYNPRO_VALUES TYPE TABLE OF DYNPREAD,
          FIELD_VALUE LIKE LINE OF DYNPRO_VALUES,
          VALUES_TAB TYPE TABLE OF VALUES WITH HEADER LINE,
          VALUES_TAB1 TYPE TABLE OF VALUES1,
          VALUE_EBELN TYPE TABLE OF VALUES1.
         VALUES_TAB2 TYPE TABLE OF VALUES2.
    DATA : VALUES_TAB2 TYPE VALUES2 OCCURS 0 WITH HEADER LINE.
    DATA : RETURN_TAB  LIKE DDSHRETVAL OCCURS 0 WITH HEADER LINE.
    *nidhi
    DATA: BEGIN OF IT_LFA1 OCCURS 0,
    LIFNR LIKE LFA1-LIFNR,
    ADRNR LIKE LFA1-ADRNR,
    END OF IT_LFA1.
    DATA: BEGIN OF IT_ADR6 OCCURS 0,
          ADDRNUMBER TYPE ADR6-ADDRNUMBER,
          SMTP_ADDR  TYPE ADR6-SMTP_ADDR,
                   END OF IT_ADR6.
    *nidhi
    *&      Module  FILL_TABLE_CONTROL  OUTPUT
          text
    MODULE FILL_TABLE_CONTROL OUTPUT.
      READ TABLE IT_TEMP_TC1 INTO IT_TC1 INDEX TC1-CURRENT_LINE.
    ENDMODULE.                 " FILL_TABLE_CONTROL  OUTPUT
    *&      Module  READ_TABLE_CONTROL  INPUT
          text
    MODULE READ_TABLE_CONTROL INPUT.
    *Validation for Item code
      CLEAR : EKPO-MATNR,
              EKPO-WERKS.
    IF sy-uname = 'GATE1020'.
      IF ( SY-UNAME = 'GATE1010' OR  SY-UNAME = 'GATE1020' OR
           SY-UNAME = 'GATE1030' OR  SY-UNAME = 'GATE1040' OR
           SY-UNAME = 'GATE1050' OR  SY-UNAME = 'GATE1060' OR
           SY-UNAME = 'GATE1070' OR  SY-UNAME = 'GATE1080' OR
           SY-UNAME = 'ABAP'  ).
    **SELECT SINGLE bstyp  FROM EKKO INTO WK_BSTYP  WHERE ebeln = wk_ebeln.
    **SELECT SINGLE bsart FROM EKKO INTO WK_BSART WHERE ebeln = wk_ebeln.
        READ TABLE VALUES_TAB WITH KEY MATNR = IT_TC1-ITEMCODE.
    **ELSE.
        SELECT SINGLE MATNR WERKS
                  FROM EKPO CLIENT SPECIFIED
                  INTO (EKPO-MATNR , EKPO-WERKS )
                  WHERE MANDT = SY-MANDT AND
                  EBELN = WK_EBELN AND
                  MATNR EQ IT_TC1-ITEMCODE.
    ENDIF.
        IF SY-SUBRC NE 0 AND NOT IT_TC1-ITEMCODE IS INITIAL.
      CLEAR it_tc1.
          MESSAGE E003 WITH TEXT-002.
        ELSE.
          SELECT SINGLE MAKTX FROM MAKT
                       CLIENT SPECIFIED
                       INTO WK_MAKTX WHERE
                       MANDT = SY-MANDT AND
                       MATNR = IT_TC1-ITEMCODE AND SPRAS = SY-LANGU.
        ENDIF.
      ENDIF.
    **SELECT SINGLE bstyp  FROM EKKO INTO WK_BSTYP  WHERE ebeln = wk_ebeln.
    **SELECT SINGLE bsart FROM EKKO INTO WK_BSART WHERE ebeln = wk_ebeln.
      IF ( SY-UNAME = 'GATE1010' OR  SY-UNAME = 'GATE1020' OR
           SY-UNAME = 'GATE1030' OR  SY-UNAME = 'GATE1040' OR
           SY-UNAME = 'GATE1050' OR  SY-UNAME = 'GATE1060' OR
           SY-UNAME = 'GATE1070' OR  SY-UNAME = 'GATE1080' OR  SY-UNAME =
           'ABAP'  ).
        IF WK_BSART = 'ZLR' .
    Validation for Quantity.
          IF NOT IT_TC1-QUANTITY IS INITIAL.
            READ TABLE VALUES_TAB WITH KEY MATNR = IT_TC1-ITEMCODE.
            IF SY-SUBRC EQ 0 AND IT_TC1-QUANTITY GT VALUES_TAB-MENGE.
              MESSAGE E003 WITH TEXT-013.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    *Validation for Max.Stock Level
      CLEAR : MARC-MABST.
      SELECT SINGLE MABST FROM MARC
              CLIENT SPECIFIED
              INTO MARC-MABST
              WHERE MANDT = SY-MANDT AND
              MATNR = IT_TC1-ITEMCODE AND
              WERKS = EKPO-WERKS.
      CLEAR : MARD-LABST ,
              MARD-INSME .
    SELECT SINGLE labst insme FROM mard
              CLIENT SPECIFIED
              INTO (mard-labst , mard-insme )
              WHERE MANDT = SY-MANDT AND
              matnr = it_tc1-itemcode
              AND werks = ekpo-werks.
      SELECT  SUM( LABST ) SUM( INSME ) FROM MARD
               CLIENT SPECIFIED
               INTO (MARD-LABST , MARD-INSME )
               WHERE MANDT = SY-MANDT AND
               MATNR = IT_TC1-ITEMCODE
               AND WERKS = EKPO-WERKS.
      CLEAR : WK_TOTAL.
      WK_TOTAL = MARD-LABST + MARD-INSME + IT_TC1-QUANTITY.
      IF WK_BSART = 'ZLR'.
        IF WK_TOTAL GT MARC-MABST.
          MESSAGE E001 WITH IT_TC1-ITEMCODE.
        ENDIF.
      ENDIF.
    Appending the table control data to Internal table
      READ TABLE IT_TEMP_TC1 INDEX TC1-CURRENT_LINE.
      IT_TC1-SNO = TC1-CURRENT_LINE.
      IF SY-SUBRC EQ 0.
        MODIFY IT_TEMP_TC1 FROM IT_TC1 INDEX TC1-CURRENT_LINE.
      ELSE.
        READ TABLE IT_TEMP_TC1 WITH KEY ITEMCODE = IT_TC1-ITEMCODE.
        IF SY-SUBRC NE 0.
          IT_TC1-ITEMNAME = WK_MAKTX.
          IF IT_TC1-ITEMCODE IS INITIAL.
            CLEAR IT_TC1.
          ELSE.
            APPEND IT_TC1 TO IT_TEMP_TC1.
          ENDIF.
        ELSE.
          MESSAGE E003 WITH TEXT-004.
        ENDIF.
      ENDIF.
      CLEAR : J_1IMTCHID-J_1ICAPIND.
      SELECT SINGLE J_1ICAPIND FROM J_1IMTCHID
                    CLIENT SPECIFIED
                    INTO  J_1IMTCHID-J_1ICAPIND
                    WHERE MANDT = SY-MANDT AND
                    MATNR = IT_TC1-ITEMCODE AND
                    WERKS = EKPO-WERKS.
      IF SY-SUBRC EQ 0.
        IF J_1IMTCHID-J_1ICAPIND = 'N'.
          WK_EXCISE_IND = 'N'.
        ELSE.
          WK_EXCISE_IND = 'E'.
        ENDIF.
      ENDIF.
    ENDMODULE.                 " READ_TABLE_CONTROL  INPUT
    *&      Module  USER_COMMAND_1000  INPUT
          text
    MODULE USER_COMMAND_1000 INPUT.
      V_UCOMM = SY-UCOMM.
      CASE V_UCOMM.
        WHEN 'WK_SAVE'.
          IF WK_APPVAL > 0.
            IF ( SY-UNAME = 'STORE1010'  OR SY-UNAME = 'STORE1020' OR
                 SY-UNAME = 'STORE1030'  OR SY-UNAME = 'STORE1040' OR
                 SY-UNAME = 'STORE1050'  OR SY-UNAME = 'STORE1060' OR
                 SY-UNAME = 'STORE1070'  OR SY-UNAME = 'STORE1080'  ).
              CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
                EXPORTING
                  INPUT  = WK_VBELN
                IMPORTING
                  OUTPUT = WK_VBELN.
              SELECT * FROM EKKO INTO TABLE IT_EKKO WHERE EBELN = WK_EBELN
              AND
                                                          LOEKZ NE 'X'.
              IF SY-SUBRC EQ 0.
                READ TABLE IT_EKKO INDEX 1.
                WK_BSTYP = IT_EKKO-BSTYP.
              ENDIF.
              SELECT * FROM EKPO CLIENT SPECIFIED
              INTO TABLE IT_EKPO WHERE
              MANDT = SY-MANDT AND
              EBELN = WK_EBELN AND LOEKZ NE 'X'.
              SORT IT_EKPO BY EBELN EBELP.
              IF WK_BSTYP = 'L'.
                SELECT * FROM EKET CLIENT SPECIFIED
                INTO TABLE IT_EKET WHERE
                MANDT = SY-MANDT AND
                EBELN = WK_EBELN.
                IF SY-SUBRC EQ 0.
                  SORT IT_EKET BY EBELN EBELP ETENR.
                  LOOP AT IT_EKPO.
                    CLEAR WK_DIFF_QTY.
                    LOOP AT IT_EKET WHERE EBELN = IT_EKPO-EBELN
                                      AND EBELP = IT_EKPO-EBELP
                                      AND EINDT LE SY-DATUM.
                      WK_DIFF_QTY = WK_DIFF_QTY + IT_EKET-MENGE -
                      IT_EKET-WEMNG.
                    ENDLOOP.
                    IF WK_DIFF_QTY GT 0.
                      IT_TEMP_EKPO-EBELN = IT_EKET-EBELN.
                      IT_TEMP_EKPO-EBELP = IT_EKET-EBELP.
                      IT_TEMP_EKPO-MATNR = IT_EKPO-MATNR.
                      APPEND IT_TEMP_EKPO.
                    ENDIF.
                  ENDLOOP.
                ENDIF.
              ELSEIF WK_BSTYP = 'F'.
                SELECT * FROM EKET
                CLIENT SPECIFIED
                INTO TABLE IT_EKET
                WHERE MANDT = SY-MANDT AND
                EBELN = IT_EKPO-EBELN.
                LOOP AT IT_EKPO.
                  CLEAR : WK_DIFF_QTY.
                  READ TABLE IT_EKET WITH KEY EBELN = IT_EKPO-EBELN
                                              EBELP = IT_EKPO-EBELP.
                  IF SY-SUBRC EQ 0.
                    WK_DIFF_QTY = IT_EKPO-MENGE - IT_EKET-WEMNG.
                  ENDIF.
                  IF WK_DIFF_QTY GT 0.
                    IT_TEMP_EKPO-EBELN = IT_EKET-EBELN.
                    IT_TEMP_EKPO-EBELP = IT_EKET-EBELP.
                    IT_TEMP_EKPO-MATNR = IT_EKPO-MATNR.
                    APPEND IT_TEMP_EKPO.
                  ENDIF.
                ENDLOOP.
              ENDIF.
              SORT IT_TEMP_EKPO BY EBELN EBELP.
              PERFORM BDC_DYNPRO      USING 'SAPLMIGO' '0001'.
              PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                       '=OK_GO'.
              PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                       'GODYNPRO-PO_NUMBER'.
              PERFORM BDC_FIELD       USING 'GODYNPRO-PO_NUMBER'
                                       WK_EBELN.
              PERFORM BDC_DYNPRO      USING 'SAPLMIGO' '0001'.
              PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                       '=OK_GO'.
              IF WK_EXCISE_IND = 'E'.
                PERFORM BDC_FIELD       USING 'J_1IEXHEAD-EXNUM'
                                         WK_VBELN.
                PERFORM BDC_FIELD       USING 'J_1IEXHEAD-EXDAT'
                                        WK_FKDAT.
                PERFORM BDC_FIELD       USING 'GOHEAD-LFSNR'
                                         WK_VBELN.
              ELSE.
                PERFORM BDC_FIELD       USING 'GOHEAD-LFSNR'
                                         WK_VBELN.
              ENDIF.
              CLEAR : WK_CHAR_SNO.
              WK_CHAR_SNO = WK_SNO.
              CONDENSE WK_CHAR_SNO NO-GAPS.
              PERFORM BDC_FIELD       USING 'GOHEAD-BKTXT'
                                       WK_CHAR_SNO.
              LOOP AT IT_TEMP_TC1.
                READ TABLE IT_TEMP_EKPO WITH KEY MATNR =
                IT_TEMP_TC1-ITEMCODE.
                IF SY-SUBRC EQ 0.
                  CLEAR V_INDEX.
                  V_INDEX = SY-TABIX.
                  CONDENSE V_INDEX NO-GAPS.
                  PERFORM BDC_DYNPRO      USING 'SAPLMIGO' '0001'.
                  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                           '=OK_GO'.
                  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                           'GODYNPRO-DETAIL_ZEILE'.
                  PERFORM BDC_FIELD       USING 'GODYNPRO-DETAIL_ZEILE'
                  PERFORM BDC_FIELD       USING 'GODYNPRO-DETAIL_ZEILE'
                                           V_INDEX.
                  PERFORM BDC_DYNPRO      USING 'SAPLMIGO' '0001'.
                  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                           '=OK_GO'.
                  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                           'GOITEM-ERFMG'.
                  PERFORM BDC_FIELD       USING 'GOITEM-ERFMG'
                  CLEAR V_QUANTITY.
                  V_QUANTITY = IT_TEMP_TC1-QUANTITY.
                  CONDENSE V_QUANTITY NO-GAPS.
                  PERFORM BDC_FIELD       USING 'GOITEM-ERFMG'
                                           V_QUANTITY.
                  PERFORM BDC_FIELD       USING 'GOITEM-LSMNG'
                                          V_QUANTITY.
                perform bdc_field       using 'GOITEM-LGOBE'
                                        WK_LGORT.
                ENDIF.
              ENDLOOP.
              CALL TRANSACTION 'MIGO' USING BDCDATA
                              MODE   'E'
                              UPDATE 'L'.
              IF SY-SUBRC NE 0.
                MESSAGE E003 WITH TEXT-003.
                LOOP AT SCREEN.
                  SCREEN-INPUT = 1.
                  MODIFY SCREEN.
                ENDLOOP.
              ENDIF.
              LEAVE PROGRAM.
            ELSE.
              CLEAR : WK_TOT_EXCISE.
              IF NOT WK_EXCISE IS INITIAL.
                LOOP AT IT_TEMP_TC1.
                  READ TABLE IT_EKPO WITH KEY MATNR = IT_TEMP_TC1-ITEMCODE.
                  IF SY-SUBRC EQ 0.
                    WK_TOT_EXCISE = WK_TOT_EXCISE +
               ( ( ( IT_EKPO-NETWR / IT_EKPO-MENGE ) * 16  / 100 )
    IT_TEMP_TC1-QUANTITY ).
                  ENDIF.
                ENDLOOP.
                WK_DIFF = WK_EXCISE - WK_TOT_EXCISE.
                IF WK_DIFF LE 0.
                  WK_DIFF = -1 * WK_DIFF.
                ENDIF.
                IF WK_DIFF GE 1.
                  WK_COMMENT = 'Difference in Excise. Please Check!'.
                ENDIF.
              ENDIF.
              SELECT * FROM EKPO CLIENT SPECIFIED
              INTO TABLE IT_EKPO WHERE
              MANDT = SY-MANDT AND
              EBELN = WK_EBELN.
              IF SY-SUBRC EQ 0.
                READ TABLE IT_EKPO INDEX 1.
                WK_WERKS = IT_EKPO-WERKS.
              ENDIF.
              SELECT * FROM ZMMT001_GRN_GATE
              CLIENT SPECIFIED
              INTO TABLE IT_ZMMT01
              WHERE MANDT = SY-MANDT AND
              WERKS = WK_WERKS.
              IF SY-SUBRC EQ 0.
                SORT IT_ZMMT01 BY SERIAL DESCENDING.
                READ TABLE IT_ZMMT01 INDEX 1.
                WK_SNO = IT_ZMMT01-SERIAL + 1.
              ELSE.
                WK_SNO = 1.
              ENDIF.
              CLEAR WK_ZMMT01.
              WK_ZMMT01-MANDT = SY-MANDT.
              WK_ZMMT01-SERIAL = WK_SNO.
              WK_ZMMT01-WERKS = WK_WERKS.
              WK_ZMMT01-EBELN = WK_EBELN.
              WK_ZMMT01-LIFNR = WK_LIFNR.
              WK_ZMMT01-CHALNO = WK_CHALNO.
              WK_ZMMT01-CHALDATE = WK_CHALDATE.
              WK_ZMMT01-BILLNO = WK_VBELN.
              WK_ZMMT01-BILLDATE = WK_FKDAT.
              WK_ZMMT01-GRNUMBER = WK_GRNO.
              WK_ZMMT01-GRDATE = WK_GRDATE.
              WK_ZMMT01-VEHICLE = WK_VEHICLE.
              WK_ZMMT01-CARRIER = WK_CARRIER.
              WK_ZMMT01-FREIGHT = WK_FREIGHT.
              WK_ZMMT01-MDOC = WK_MDOC.
              WK_ZMMT01-DEPT = WK_DEPT.
              WK_ZMMT01-PAYMODE = WK_MODE.
              WK_ZMMT01-BASIC = WK_BASIC.
              WK_ZMMT01-EXCISE = WK_EXCISE.
              WK_ZMMT01-TAXAMT = WK_TAX.
              WK_ZMMT01-APPVAL = WK_APPVAL.
              WK_ZMMT01-CHALINV = WK_CHAL.
              WK_ZMMT01-FORM38 = WK_FORM38.
              WK_ZMMT01-COMMENTS = WK_COMMENT.
              WK_ZMMT01-CDATE    = SY-DATUM.
              WK_ZMMT01-CTIME    = SY-UZEIT.
              WK_ZMMT01-PERSON   = SY-UNAME.
              IF WK_FKDAT+4(2) = '04' OR
                 WK_FKDAT+4(2) = '05' OR
                 WK_FKDAT+4(2) = '06' OR
                 WK_FKDAT+4(2) = '07' OR
                 WK_FKDAT+4(2) = '08' OR
                 WK_FKDAT+4(2) = '09' OR
                 WK_FKDAT+4(2) = '10' OR
                 WK_FKDAT+4(2) = '11' OR
                 WK_FKDAT+4(2) = '12'.
                WK_DATE10(4) = WK_FKDAT0(4).
                WK_DATE1+4(2) = '04'.
                WK_DATE1+6(2) = '01'.
              ELSEIF
                 WK_FKDAT+4(2) = '01' OR
                 WK_FKDAT+4(2) = '02' OR
                 WK_FKDAT+4(2) = '03'.
                WK_FISYEAR = WK_FKDAT+0(4).
                WK_FISYEAR = WK_FISYEAR - 1.
                WK_CHAR_YEAR = WK_FISYEAR.
                CONDENSE WK_CHAR_YEAR NO-GAPS.
                WK_DATE1+0(4) = WK_CHAR_YEAR.
                WK_DATE1+4(2) = '04'.
                WK_DATE1+6(2) = '01'.
              ELSE.
              ENDIF.
    nidhi
              SELECT LIFNR ADRNR FROM LFA1 INTO TABLE IT_LFA1 WHERE LIFNR =
              WK_ZMMT01-LIFNR.
              SELECT ADDRNUMBER SMTP_ADDR FROM ADR6 INTO TABLE IT_ADR6 FOR
    ALL ENTRIES IN IT_LFA1 WHERE ADDRNUMBER = IT_LFA1-ADRNR.
              SELECT SINGLE * FROM ZMMT001_GRN_GATE
              CLIENT SPECIFIED
              WHERE MANDT = SY-MANDT AND
              WERKS = WK_WERKS AND
              LIFNR = WK_LIFNR AND
              BILLNO = WK_VBELN AND
              BILLDATE GE WK_DATE1.
              IF SY-SUBRC EQ 0.
                MESSAGE E003 WITH TEXT-006.
              ENDIF.
              CLEAR IT_ZMMT02.
              REFRESH IT_ZMMT02.
              LOOP AT IT_TEMP_TC1.
                IT_ZMMT02-MANDT = SY-MANDT.
                IT_ZMMT02-SERIAL = WK_SNO.
                IT_ZMMT02-WERKS = WK_WERKS.
                IT_ZMMT02-EBELN = WK_EBELN.
                IT_ZMMT02-ITEMCODE = IT_TEMP_TC1-ITEMCODE.
                IT_ZMMT02-DESCRIPTION = IT_TEMP_TC1-ITEMNAME.
                IT_ZMMT02-QUANTITY = IT_TEMP_TC1-QUANTITY.
                IT_ZMMT02-EXCISE = IT_TEMP_TC1-EXCISE.
                APPEND IT_ZMMT02.
                CLEAR IT_ZMMT02.
              ENDLOOP.
              IF IT_ZMMT02[] IS INITIAL.
                MESSAGE E003 WITH TEXT-007.
              ENDIF.
              IF SY-UNAME = 'GATE1010' AND WK_WERKS NE '1010'.
                MESSAGE E003 WITH TEXT-008.
              ELSEIF SY-UNAME = 'GATE1020' AND WK_WERKS NE '1020'.
                MESSAGE E003 WITH TEXT-008.
              ELSEIF SY-UNAME = 'GATE1030' AND WK_WERKS NE '1030'.
                MESSAGE E003 WITH TEXT-008.
              ELSEIF SY-UNAME = 'GATE1040' AND WK_WERKS NE '1040'.
                MESSAGE E003 WITH TEXT-008.
              ELSEIF SY-UNAME = 'GATE1050' AND WK_WERKS NE '1050'.
                MESSAGE E003 WITH TEXT-008.
              ELSEIF SY-UNAME = 'GATE1060' AND WK_WERKS NE '1060'.
                MESSAGE E003 WITH TEXT-008.
              ELSEIF SY-UNAME = 'ABAP' AND WK_WERKS NE 'ABAP'.
                MESSAGE E003 WITH TEXT-008.
              ELSEIF SY-UNAME = 'GATE1070' AND WK_WERKS NE '1070'.
                MESSAGE E003 WITH TEXT-008.
              ELSEIF SY-UNAME = 'GATE1080' AND WK_WERKS NE '1080'.
                MESSAGE E003 WITH TEXT-008.
              ENDIF.
              INSERT ZMMT001_GRN_GATE FROM WK_ZMMT01.
              INSERT ZMMT002_GRN_ITEM FROM TABLE IT_ZMMT02.
              IF SY-SUBRC EQ 0.
                COMMIT WORK.
                MESSAGE I002 WITH WK_SNO.
    ********nidhi*******************************************************
                CALL SCREEN 1001.
                CLEAR WK_LIFNR.
                CLEAR WK_EBELN.
                CLEAR WK_NAME.
                CLEAR WK_SCHNO.
                CLEAR WK_CHALNO.
                CLEAR WK_CHALDATE.
                CLEAR WK_VBELN.
                CLEAR WK_FKDAT.
                CLEAR WK_GRNO.
                CLEAR WK_GRDATE.
                CLEAR WK_VEHICLE.
                CLEAR WK_CARRIER.
                CLEAR WK_FREIGHT.
                CLEAR WK_MDOC.
                CLEAR WK_DEPT.
                CLEAR WK_MODE.
                CLEAR WK_BASIC.
                CLEAR WK_EXCISE.
                CLEAR WK_TAX.
                CLEAR WK_APPVAL.
                CLEAR WK_CHAL.
                CLEAR WK_FORM38.
                REFRESH IT_TEMP_TC1.
                CLEAR WK_FISYEAR.
                CLEAR WK_DATE1.
                CLEAR WK_CHAR_YEAR.
             CALL TRANSACTION 'ZMMI001'.
              ELSE.
                ROLLBACK WORK.
                MESSAGE E003 WITH TEXT-006.
              ENDIF.
            ENDIF.
          ELSE.
            MESSAGE E009 WITH TEXT-014.
          ENDIF.
        WHEN 'WK_EXIT'.
        WHEN 'WK_CLEAR'.
          CLEAR WK_LIFNR.
          CLEAR WK_EBELN.
          CLEAR WK_NAME.
          CLEAR WK_SCHNO.
          CLEAR WK_CHALNO.
          CLEAR WK_CHALDATE.
          CLEAR WK_VBELN.
          CLEAR WK_FKDAT.
          CLEAR WK_GRNO.
          CLEAR WK_GRDATE.
          CLEAR WK_VEHICLE.
          CLEAR WK_CARRIER.
          CLEAR WK_FREIGHT.
          CLEAR WK_MDOC.
          CLEAR WK_DEPT.
          CLEAR WK_MODE.
          CLEAR WK_BASIC.
          CLEAR WK_EXCISE.
          CLEAR WK_TAX.
          CLEAR WK_APPVAL.
          CLEAR WK_CHAL.
          CLEAR WK_FORM38.
          REFRESH IT_TEMP_TC1 .
          CLEAR WK_FISYEAR.
          CLEAR WK_DATE1.
          CLEAR WK_CHAR_YEAR.
        WHEN 'DELETE'.
          DELETE IT_TEMP_TC1 WHERE SEL = 'X'.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_1000  INPUT
           Start new screen                                              *
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
      CLEAR BDCDATA.
      BDCDATA-PROGRAM  = PROGRAM.
      BDCDATA-DYNPRO   = DYNPRO.
      BDCDATA-DYNBEGIN = 'X'.
      APPEND BDCDATA.
    ENDFORM.                    "BDC_DYNPRO
           Insert field                                                  *
    FORM BDC_FIELD USING FNAM FVAL.
    IF FVAL <> NODATA.
      CLEAR BDCDATA.
      BDCDATA-FNAM = FNAM.
      BDCDATA-FVAL = FVAL.
      APPEND BDCDATA.
    ENDIF.
    ENDFORM.                    "BDC_FIELD
    *&      Module  STATUS_1000  OUTPUT
          text
    MODULE STATUS_1000 OUTPUT.
      SET PF-STATUS 'GRN'.
      SET TITLEBAR 'GRN'.
      PROGNAME = SY-REPID.
      DYNNUM   = SY-DYNNR.
      CLEAR: FIELD_VALUE, DYNPRO_VALUES.
      FIELD_VALUE-FIELDNAME = 'IT_TC1-ITEMCODE'.
      APPEND FIELD_VALUE TO DYNPRO_VALUES.
      FIELD_VALUE-FIELDNAME = 'WK_EBELN'.
      APPEND FIELD_VALUE TO DYNPRO_VALUES.
      FIELD_VALUE-FIELDNAME = 'WK_LIFNR'.
      APPEND FIELD_VALUE TO DYNPRO_VALUES.
      LOOP AT SCREEN.
        IF SCREEN-NAME NE 'WK_COMMENT'.
          SCREEN-INPUT = 1.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.
      IF ( SY-UNAME = 'GATE1010' OR SY-UNAME = 'GATE1020' OR
           SY-UNAME = 'GATE1030' OR SY-UNAME = 'GATE1040' OR
           SY-UNAME = 'GATE1050' OR SY-UNAME = 'GATE1060' OR
           SY-UNAME = 'GATE1070' OR SY-UNAME = 'GATE1080' OR  SY-UNAME =
           'ABAP' ).
        LOOP AT SCREEN.
          IF SCREEN-NAME = 'WK_SNO' OR
             SCREEN-NAME = 'SNO' OR
             SCREEN-NAME = 'WK_COMMENT' .
            SCREEN-INVISIBLE = 1.
            SCREEN-ACTIVE = 0.
            SCREEN-INPUT = 0.
            SCREEN-OUTPUT = 0.
          ENDIF.
          MODIFY SCREEN.
        ENDLOOP.
        IF WK_LIFNR IS INITIAL.
          SET CURSOR FIELD 'WK_LIFNR'.
        ELSEIF WK_EBELN IS INITIAL.
          SET CURSOR FIELD 'WK_EBELN'.
        ELSEIF WK_VBELN IS INITIAL.
          SET CURSOR FIELD 'WK_VBELN'.
        ELSEIF WK_FKDAT IS INITIAL.
          SET CURSOR FIELD 'WK_FKDAT'.
        ENDIF.
      ELSE.
        IF NOT WK_SNO IS INITIAL.
          IF SY-UNAME = 'STORE1010'.
            WK_WERKS = '1010'.
          ELSEIF SY-UNAME = 'STORE1020'.
            WK_WERKS = '1020'.
          ELSEIF SY-UNAME = 'STORE1030'.
            WK_WERKS = '1030'.
          ELSEIF SY-UNAME = 'STORE1040'.
            WK_WERKS = '1040'.
          ELSEIF SY-UNAME = 'STORE1050'.
            WK_WERKS = '1050'.
          ELSEIF SY-UNAME = 'STORE1060'.
            WK_WERKS = '1060'.
          ELSEIF SY-UNAME = 'STORE1070'.
            WK_WERKS = '1070'.
          ELSEIF SY-UNAME = 'STORE1080'.
            WK_WERKS = '1080'.
          ENDIF.
          SELECT SINGLE * FROM ZMMT001_GRN_GATE INTO WK_ZMMT01
                       WHERE SERIAL = WK_SNO AND
                       WERKS = WK_WERKS.
          IF SY-SUBRC EQ 0.
            WK_WERKS = WK_ZMMT01-WERKS.
            WK_EBELN = WK_ZMMT01-EBELN.
            WK_LIFNR = WK_ZMMT01-LIFNR.
            WK_CHALNO = WK_ZMMT01-CHALNO.
            WK_CHALDATE = WK_ZMMT01-CHALDATE.
            WK_VBELN = WK_ZMMT01-BILLNO.
            WK_FKDAT = WK_ZMMT01-BILLDATE.
            WK_GRNO = WK_ZMMT01-GRNUMBER.
            WK_GRDATE = WK_ZMMT01-GRDATE.
            WK_VEHICLE = WK_ZMMT01-VEHICLE.
            WK_CARRIER = WK_ZMMT01-CARRIER.
            WK_FREIGHT = WK_ZMMT01-FREIGHT.
            WK_MDOC = WK_ZMMT01-MDOC.
            WK_DEPT = WK_ZMMT01-DEPT.
            WK_MODE = WK_ZMMT01-PAYMODE.
            WK_BASIC = WK_ZMMT01-BASIC.
            WK_EXCISE = WK_ZMMT01-EXCISE.
            WK_TAX = WK_ZMMT01-TAXAMT.
            WK_APPVAL = WK_ZMMT01-APPVAL.
            WK_CHAL = WK_ZMMT01-CHALINV.
            WK_FORM38 = WK_ZMMT01-FORM38.
            WK_COMMENT = WK_ZMMT01-COMMENTS.
            SELECT * FROM ZMMT002_GRN_ITEM INTO TABLE IT_ZMMT02
                            WHERE SERIAL = WK_SNO AND
                            WERKS = WK_WERKS.
            IF SY-SUBRC EQ 0.
              CLEAR IT_TEMP_TC1.
              REFRESH IT_TEMP_TC1.
              LOOP AT IT_ZMMT02.
                IT_TEMP_TC1-SNO = SY-TABIX.
                IT_TEMP_TC1-ITEMCODE = IT_ZMMT02-ITEMCODE.
                IT_TEMP_TC1-ITEMNAME = IT_ZMMT02-DESCRIPTION.
                IT_TEMP_TC1-QUANTITY = IT_ZMMT02-QUANTITY.
                APPEND IT_TEMP_TC1.
                CLEAR IT_TEMP_TC1.
              ENDLOOP.
            ENDIF.
          ENDIF.
          LOOP AT SCREEN.
            IF ( SCREEN-NAME NE 'WK_SNO' ) AND
               ( SCREEN-NAME NE 'WK_SAVE' ) AND
               ( SCREEN-NAME NE 'WK_CLEAR' ) AND
               ( SCREEN-NAME NE 'WK_EXIT' ).
              SCREEN-INPUT = 0.
            ENDIF.
            MODIFY SCREEN.
          ENDLOOP.
          LOOP AT TC1-COLS INTO COLS WHERE INDEX GT 0.
            COLS-SCREEN-INPUT = '0'.
            MODIFY TC1-COLS FROM COLS INDEX SY-TABIX.
          ENDLOOP.
        ENDIF.
      ENDIF.
      WK_DATE = SY-DATUM.
      WK_TIME = SY-UZEIT.
      TC1-LINES = 20.
    ENDMODULE.                 " STATUS_1000  OUTPUT
    *&      Module  EXIT_1000  INPUT
          text
    MODULE EXIT_1000 INPUT.
      CASE SY-UCOMM.
        WHEN 'BACK' OR 'CANCEL' OR 'EXIT' OR 'WK_EXIT'.
          LEAVE PROGRAM.
      ENDCASE.
    ENDMODULE.                 " EXIT_1000  INPUT
    *&      Module  ITEM_CODE  INPUT
          text
    MODULE ITEM_CODE INPUT.
      REFRESH : VALUES_TAB.
      CLEAR : VALUES_TAB.
      IF ( SY-UNAME = 'GATE1020' OR
    SY-UNAME = 'GATE1010' OR
    SY-UNAME = 'GATE1030' OR
    SY-UNAME = 'GATE1040' OR
    SY-UNAME = 'GATE1050' OR
    SY-UNAME = 'GATE1060' OR
    SY-UNAME = 'GATE1070' OR
    SY-UNAME = 'STORE1020' OR
    SY-UNAME = 'STORE1030' OR
    SY-UNAME = 'STORE1040' OR
    SY-UNAME = 'STORE1050' OR
    SY-UNAME = 'STORE1060' OR
    SY-UNAME = 'STORE1070' OR
    SY-UNAME = 'STORE1010' OR
           SY-UNAME = 'ABAP'  ).
        SELECT * FROM EKKO CLIENT SPECIFIED
        INTO TABLE IT_EKKO WHERE
        MANDT = SY-MANDT AND
        EBELN = WK_EBELN AND
        LOEKZ NE 'X'.
        IF SY-SUBRC EQ 0.
          READ TABLE IT_EKKO INDEX 1.
          WK_BSTYP = IT_EKKO-BSTYP.
          WK_BSART = IT_EKKO-BSART.
        ENDIF.
          if wk_bsart = 'ZLR'.
        SELECT * FROM EKPO CLIENT SPECIFIED
        INTO TABLE IT_EKPO WHERE
        MANDT = SY-MANDT AND
        EBELN = WK_EBELN AND
        LOEKZ NE 'X'.
        SORT IT_EKPO BY EBELN EBELP.
        IF WK_BSTYP = 'L' AND WK_BSART = 'ZLR'.
          SELECT * FROM EKET CLIENT SPECIFIED
          INTO TABLE IT_EKET WHERE
          MANDT = SY-MANDT AND
          EBELN = WK_EBELN.
          IF SY-SUBRC EQ 0.
            SORT IT_EKET BY EBELN EBELP ETENR.
            LOOP AT IT_EKPO.
              CLEAR WK_DIFF_QTY.
              LOOP AT IT_EKET WHERE EBELN = IT_EKPO-EBELN
                                AND EBELP = IT_EKPO-EBELP
                                AND EINDT LE SY-DATUM.
                WK_DIFF_QTY = WK_DIFF_QTY + IT_EKET-MENGE - IT_EKET-WEMNG.
              ENDLOOP.
              IF WK_DIFF_QTY GT 0.
                VALUES_TAB-TXZ01 = IT_EKPO-TXZ01.
                VALUES_TAB-MENGE = WK_DIFF_QTY.
                VALUES_TAB-MATNR = IT_EKPO-MATNR.
                APPEND VALUES_TAB.
              ENDIF.
            ENDLOOP.
          ENDIF.
        ELSEIF WK_BSTYP = 'F'.
         SELECT mseg~mblnr
                mseg~mjahr
                mseg~zeile
                mseg~bwart
                mseg~matnr
                mseg~ebeln
                mseg~ebelp
                mkpf~budat
                mseg~menge INTO TABLE it_mseg
                FROM mkpf INNER JOIN mseg
                ON mkpfmblnr EQ msegmblnr
                AND mkpfmjahr EQ msegmjahr
    FOR ALL entries IN it_ekpo
    WHERE bwart IN ('101','122','102')
    AND werks = it_ekpo-werks
    AND ebeln = it_ekpo-ebeln
    AND ebelp = it_ekpo-ebelp.
          SELECT * FROM EKET CLIENT SPECIFIED
          INTO TABLE IT_EKET
          WHERE MANDT = SY-MANDT AND
          EBELN = IT_EKPO-EBELN.
          LOOP AT IT_EKPO.
            CLEAR : WK_DIFF_QTY.
                   wk_101_qty,
                   wk_102_qty,
                   wk_122_qty.
           LOOP AT it_mseg WHERE ebeln = it_ekpo-ebeln AND
                                 ebelp = it_ekpo-ebelp.
             IF it_mseg-bwart = '101'.
               wk_101_qty = wk_101_qty + it_mseg-menge.
             ENDIF.
             IF it_mseg-bwart = '102'.
               wk_102_qty = wk_102_qty + it_mseg-menge.
             ENDIF.
             IF it_mseg-bwart = '122'.
               wk_122_qty = wk_122_qty + it_mseg-menge.
             ENDIF.
           ENDLOOP.
           if not it_mseg[] is initial.
           wk_diff_qty = it_ekpo-menge - wk_101_qty
                                 - wk_102_qty - wk_122_qty.
           else.
            wk_diff_qty = it_ekpo-menge.
           endif.
            READ TABLE IT_EKET WITH KEY EBELN = IT_EKPO-EBELN
                                        EBELP = IT_EKPO-EBELP.
            IF SY-SUBRC EQ 0.
              WK_DIFF_QTY = IT_EKPO-MENGE - IT_EKET-WEMNG.
            ENDIF.
           IF wk_diff_qty LE it_ekpo-menge.
            IF WK_DIFF_QTY GT 0.
              VALUES_TAB-TXZ01 = IT_EKPO-TXZ01.
              VALUES_TAB-MENGE = WK_DIFF_QTY.
              VALUES_TAB-MATNR = IT_EKPO-MATNR.
              APPEND VALUES_TAB.
            ENDIF.
          ENDLOOP.
           ENDIF.
        ELSE.
          SELECT TXZ01
          MATNR FROM EKPO CLIENT SPECIFIED
          INTO CORRESPONDING FIELDS OF TABLE VALUES_TAB
          WHERE MANDT = SY-MANDT AND
          EBELN = WK_EBELN AND
          LOEKZ NE 'X'.
        ENDIF.
      ELSE.
        SELECT TXZ01
              MATNR FROM EKPO CLIENT SPECIFIED
              INTO CORRESPONDING FIELDS OF TABLE VALUES_TAB
               WHERE MANDT = SY-MANDT AND
               EBELN = WK_EBELN AND
               LOEKZ NE 'X'.
      ENDIF.
      SORT VALUES_TAB BY TXZ01.
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          RETFIELD        = 'IT_TC1-ITEMCODE'
          DYNPPROG        = PROGNAME
          DYNPNR          = DYNNUM
          DYNPROFIELD     = 'IT_TC1-ITEMCODE'
          VALUE_ORG       = 'S'
        TABLES
          VALUE_TAB       = VALUES_TAB
          RETURN_TAB      = RETURN_TAB
        EXCEPTIONS
          PARAMETER_ERROR = 1
          NO_VALUES_FOUND = 2
          OTHERS          = 3.
    *BREAK-POINT.
      IF SY-SUBRC = 0.
        READ TABLE RETURN_TAB INDEX 1.
        SELECT SINGLE MAKTX FROM MAKT CLIENT SPECIFIED
        INTO WK_MAKTX WHERE
        MANDT = SY-MANDT AND
        MATNR = RETURN_TAB-FIELDVAL AND SPRAS = SY-LANGU.
      ENDIF.
    ENDMODULE.                 " ITEM_CODE  INPUT
    *&      Module  CHECK_INPUT  INPUT
          text
    MODULE CHECK_INPUT INPUT.
      CLEAR : EKKO-EBELN , EKKO-LIFNR.
      SELECT SINGLE EBELN LIFNR FROM EKKO CLIENT SPECIFIED
      INTO (EKKO-EBELN , EKKO-LIFNR )  WHERE
      MANDT = SY-MANDT AND
      EBELN = WK_EBELN.
      IF SY-SUBRC NE 0 AND ( SY-UNAME = 'GATE1010' OR
                             SY-UNAME = 'GATE1020' OR
                             SY-UNAME = 'GATE1030' OR
                             SY-UNAME = 'GATE1040' OR
                             SY-UNAME = 'GATE1050' OR
                             SY-UNAME = 'GATE1060' OR
                             SY-UNAME = 'GATE1070' OR
                             SY-UNAME = 'GATE1080' OR  SY-UNAME = 'ABAP' ).
        IF WK_EBELN NE SPACE.
          MESSAGE E003 WITH TEXT-001.
        ENDIF.
      ELSE.
        WK_LIFNR = EKKO-LIFNR.
        CLEAR : LFA1-NAME1.
        SELECT SINGLE NAME1 FROM LFA1 CLIENT SPECIFIED
        INTO LFA1-NAME1 WHERE
        MANDT = SY-MANDT AND
        LIFNR = WK_LIFNR.
        IF SY-SUBRC EQ 0.
          WK_NAME = LFA1-NAME1.
        ENDIF.
      ENDIF.
      IF ( SY-UNAME = 'GATE1010' OR SY-UNAME = 'GATE1020' OR
           SY-UNAME = 'GATE1030' OR SY-UNAME = 'GATE1040' OR
           SY-UNAME = 'GATE1050' OR SY-UNAME = 'GATE1060' OR
           SY-UNAME = 'GATE1070' OR SY-UNAME = 'GATE1080' OR  SY-UNAME =
           'ABAP' ).
       IF wk_vbeln IS INITIAL.
         set cursor field wk_vbeln.
         MESSAGE E003 WITH text-009.
       ENDIF.
       IF wk_fkdat IS INITIAL.
         MESSAGE E003 WITH text-010.
       ENDIF.
      ENDIF.
      IF ( SY-UNAME = 'STORE1010' OR SY-UNAME = 'STORE1020' OR
           SY-UNAME = 'STORE1030' OR SY-UNAME = 'STORE1040' OR
           SY-UNAME = 'STORE1050' OR SY-UNAME = 'STORE1060' OR
           SY-UNAME = 'STORE1070' OR SY-UNAME = 'STORE1080' ).
        CLEAR : ZMMT001_GRN_GATE.
        SELECT SINGLE EBELN CDATE FROM ZMMT001_GRN_GATE
        CLIENT SPECIFIED
        INTO (ZMMT001_GRN_GATE-EBELN ,
        ZMMT001_GRN_GATE-CDATE )
        WHERE MANDT = SY-MANDT AND
        SERIAL = WK_SNO AND WERKS = WK_WERKS.
        IF SY-SUBRC EQ 0.
          SELECT MBLNR
                 MJAHR
                 BUDAT
                 BKTXT FROM MKPF CLIENT SPECIFIED
                 INTO TABLE IT_TEMP_MKPF
                 WHERE MANDT = SY-MANDT AND
                 BUDAT = ZMMT001_GRN_GATE-CDATE
                 AND BKTXT = WK_SNO.
          IF

    Hi,
    after calling you programm and get the message call transaction su53. That willl display the authorization that you need.
    Hope this helps.
    Regards
    Bernd

Maybe you are looking for

  • Enquiry for a price plan

    Hi, I live in Romania and need to call El Salvador on a daily basis, what packages are available that can save me money in comparison to standard phone networks? Kind regards, George

  • Auto start and shutdown 9iR2 on Mac OS X?

    Does anybody know how to set up Mac OS X to auto start and auto shutdown 9iR2 on Mac OS X?

  • Moving location of original file

    I have a referenced library as I am sharing photos on a server between multiple computers (Mac and PC's). I need to change how a couple of folders are organized on that server. However, I don't want to break the reference to those files in iPhoto. Ho

  • Passing comma separated string

    1) This query works select a.GSDB_SITE_CODE from GFSTQ75_GSDB_SITE a where a.IS_ASSEMBLY_PLANT_FLAG = 'Y' and a.EFFECTIVE_OUT_DTS = '31-DEC-9999' and a.ISO3_COUNTRY_CODE IN ('RUS','AUS','SA') 2) This query not working select a.GSDB_SITE_CODE from GFS

  • Remote Desktop clients

    Hi, I am Unable to RDP my Work Windows 7 based System from my MAC 10.10.2 using MICROSOFT REMOTE DESKTOP Version 8.0.15 (Build 25886)