Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

perfrom statement

Former Member
0 Likes
661

hello,

plz put this following program into perform statements.plz help me..

SELECT mastmatnr maralabor

INTO TABLE lt_mara

FROM mast

INNER JOIN mara ON

maramatnr = mastmatnr

WHERE mast~werks = 'JER'

AND mast~stlan = '5'.

LOOP AT lt_mara.

CLEAR ls_zcrmtab_scheme.

IF lt_mara-labor IS INITIAL.

WRITE:/ 'no labor value for scheme', lt_mara-matnr.

CONTINUE.

ENDIF.

ls_zcrmtab_scheme-schemecode = lt_mara-matnr.

CASE lt_mara-labor.

WHEN 'D&A'.

ls_zcrmtab_scheme-clientnumber = '0004000001'.

WHEN 'APO'.

ls_zcrmtab_scheme-clientnumber = '0004000195'.

WHEN 'BRA'.

ls_zcrmtab_scheme-clientnumber = '0004000240'.

WHEN 'CC'.

ls_zcrmtab_scheme-clientnumber = '0004000051'.

WHEN 'CCS'.

ls_zcrmtab_scheme-clientnumber = '0004000157'.

WHEN 'IWS'.

ls_zcrmtab_scheme-clientnumber = '0004000220'.

WHEN 'LIN'.

ls_zcrmtab_scheme-clientnumber = '0004000181'.

WHEN 'ON'.

ls_zcrmtab_scheme-clientnumber = '0004000073'.

WHEN 'OOG'.

ls_zcrmtab_scheme-clientnumber = '0004000180'.

WHEN 'PAT'.

ls_zcrmtab_scheme-clientnumber = '0004000196'.

WHEN 'PRL'.

ls_zcrmtab_scheme-clientnumber = '0004000051'.

WHEN OTHERS.

CLEAR :ls_zcrmtab_scheme,

lt_mara.

CONTINUE.

endcase.

**GET CLIENT SCHEME DETAILS

SELECT SINGLE t1~zzmaktx

INTO ls_zcrmtab_scheme-clientscheme

FROM kotd901 AS t1 INNER

JOIN kondd AS t2

ON t1knumh = t2knumh

WHERE t1~kappl = 'V'

AND t1~kschl = 'Z001'

AND t1~vkorg = 'PAT'

AND t1~kunag = ls_zcrmtab_scheme-clientnumber

AND t2~smatn = ls_zcrmtab_scheme-schemecode.

    • setting the value to item

ls_zcrmtab_scheme-item = '10'.

    • setting the value to quantity

ls_zcrmtab_scheme-quantity = V_DEC .

*move 1 to gs_zcrmtab_scheme-quantity.

**setting the value to unit

ls_zcrmtab_scheme-unit = 'EA'.

    • get modality

SELECT SINGLE stzu~ztext

INTO lv_ztext

FROM stzu INNER JOIN mast

ON maststlnr = stzustlnr

WHERE matnr = ls_zcrmtab_scheme-schemecode.

**MAP THE MODALITIES

CASE lv_ztext.

WHEN 'ZWK2'.

ls_zcrmtab_scheme-modality = '1M'.

WHEN 'ZWK4'.

ls_zcrmtab_scheme-modality = '3M'.

WHEN 'ZWK6'.

ls_zcrmtab_scheme-modality = '6M'.

WHEN 'ZWK8'.

ls_zcrmtab_scheme-modality = '2M'.

ENDCASE.

**checking for replenishments

DATA: lv_matnr TYPE matnr.

SELECT SINGLE mast~matnr

INTO lv_matnr

FROM mast

INNER JOIN mara ON

maramatnr = mastmatnr

WHERE mast~werks = 'GLA'

AND mast~stlan = '5'.

IF sy-subrc = 0.

ls_zcrmtab_scheme-replenishable = 'X'.

ENDIF.

RANGES: r_scheme FOR ls_zcrmtab_scheme-schemecode.

    • build up range

r_scheme-low = 'A3'.

r_scheme-option = 'EQ'.

r_scheme-sign = 'I'.

APPEND r_scheme.

r_scheme-low = 'AY'.

APPEND r_scheme.

r_scheme-low = 'C3'.

APPEND r_scheme.

r_scheme-low = 'QX'.

APPEND r_scheme.

    • ZOR_SPLIT

CASE ls_zcrmtab_scheme-clientnumber.

WHEN '0004000073' OR '0004000240'.

ls_zcrmtab_scheme-zor_split = space.

WHEN OTHERS.

IF ls_zcrmtab_scheme-schemecode IN r_scheme.

ls_zcrmtab_scheme-zor_split = space.

ELSE.

CASE ls_zcrmtab_scheme-modality.

WHEN '1M'.

ls_zcrmtab_scheme-zor_split = 'X'.

ls_zcrmtab_scheme-zfc_split = 'X'.

WHEN OTHERS.

ls_zcrmtab_scheme-zor_split = 'A'.

ls_zcrmtab_scheme-zfc_split = 'A'.

ENDCASE.

ENDIF.

ENDCASE.

APPEND ls_zcrmtab_scheme TO lt_zcrmtab_scheme.

CLEAR: ls_zcrmtab_scheme,

lt_mara.

ENDLOOP.

thanks

sudheer

5 REPLIES 5
Read only

Former Member
0 Likes
622

hi sudheer..

i didnt understnd ur reqt..

but if u want to use subroutines then create a form:

form details.

ur code.

endform.

and u can call the form whevr u want (in the same program ofcourse) by the foll. statement:

perform details.

Thanks!

Prasanna

Read only

Former Member
0 Likes
622

hi sudheer

create a perform .

double click on it

form

endform will be created.

put ur code inside it

is this wat ur are asking?????

regards

ravish

b]plz dont forget to reward points if useful</b>

Read only

Former Member
0 Likes
622

Hi,

You can do it your self. Creating perform statements is nothing but creating blocks of programs.

In your program you can put statement like perform task.

when you doule click it it would ask you is you want to create a seprate include or you want to create it in the same program choose the same program and click ok you will find that statement like form task...end form . are generated automatically you can now put a part of your program in this. similarly you can break the program in blocks and put them in seperate forms.

Regards,

Himanshu

Read only

Former Member
0 Likes
622

Hi ,

here is an example code to understnad perform.

made changes according to your code.

START-OF-SELECTION.

  PERFORM data_fetch.

  PERFORM fieldcat_merge.

  PERFORM display.

*&---------------------------------------------------------------------*
*&      Form  FIELDCAT_MERGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fieldcat_merge .

  DATA : l_pos TYPE i VALUE 1.


  ist_fieldcat-fieldname = 'POSID'.
  ist_fieldcat-tabname   = 'IT_FINAL'.
  ist_fieldcat-outputlen = 24.
  ist_fieldcat-col_pos   = l_pos.
  ist_fieldcat-ddictxt = 'L'.
  ist_fieldcat-key = 'X'.
  ist_fieldcat-seltext_l = 'Appropriation Request Number'.
  APPEND ist_fieldcat.
  CLEAR ist_fieldcat.

  l_pos = l_pos + 1.
  ist_fieldcat-fieldname = 'UDATE'.
  ist_fieldcat-tabname   = 'IT_FINAL'.
  ist_fieldcat-outputlen = 8.
  ist_fieldcat-col_pos   = l_pos.
  ist_fieldcat-ddictxt = 'L'.
  ist_fieldcat-key = 'X'.
  ist_fieldcat-seltext_l = 'Status Date'.
  APPEND ist_fieldcat.
  CLEAR ist_fieldcat.

  l_pos = l_pos + 1.
  ist_fieldcat-fieldname = 'TXT04'.
  ist_fieldcat-tabname   = 'IT_FINAL'.
  ist_fieldcat-outputlen = 4.
  ist_fieldcat-col_pos   = l_pos.
  ist_fieldcat-ddictxt = 'L'.
  ist_fieldcat-key = 'X'.
  ist_fieldcat-seltext_l = 'Status'.
  APPEND ist_fieldcat.
  CLEAR ist_fieldcat.



ENDFORM.                    " FIELDCAT_MERGE
*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
 EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
   i_callback_program                = sy-repid
*   I_CALLBACK_PF_STATUS_SET          = ' '
*   I_CALLBACK_USER_COMMAND           = ' '
*   I_CALLBACK_TOP_OF_PAGE            = ' '
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '
*   I_STRUCTURE_NAME                  =
*   I_BACKGROUND_ID                   = ' '
*   I_GRID_TITLE                      =
*   I_GRID_SETTINGS                   =
*   IS_LAYOUT                         =
   it_fieldcat                       = ist_fieldcat[]

*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*   IT_SORT                           =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'
*   I_SAVE                            = ' '
*   IS_VARIANT                        =
*   IT_EVENTS                         =
*   IT_EVENT_EXIT                     =
*   IS_PRINT                          =
*   IS_REPREP_ID                      =
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 = 0
*   I_HTML_HEIGHT_END                 = 0
*   IT_ALV_GRAPHICS                   =
*   IT_HYPERLINK                      =
*   IT_ADD_FIELDCAT                   =
*   IT_EXCEPT_QINFO                   =
*   IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           =
*   ES_EXIT_CAUSED_BY_USER            =
    TABLES
      t_outtab                          = it_final
* EXCEPTIONS
*   PROGRAM_ERROR                     = 1
*   OTHERS                            = 2
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


ENDFORM.                    " DISPLAY
*&---------------------------------------------------------------------*
*&      Form  DATA_FETCH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM data_fetch .
  SELECT    posnr
            objnr
            posid
            FROM imak
            INTO CORRESPONDING FIELDS OF TABLE itab1
            WHERE posnr IN s_posnr.

  IF s_date IS NOT  INITIAL.            " IF DATE IS IN USER INPUT
    LOOP AT itab1.
      SELECT    objnr
                udate
                utime          " add on 13.02.2007
                inact
                stat
                FROM jcds
                INTO CORRESPONDING FIELDS OF TABLE itab2
                WHERE objnr = itab1-objnr
                AND inact = ' '
               AND udate IN s_date.


**    LOOP AT ITAB2.
**    C = C + 1.
**    ENDLOOP.

************ commeted by debjani on 13.02 2007 *****************
*      IF sy-subrc EQ 0.
*        c = sy-dbcnt.
*        CLEAR itab2.
*        CLEAR itab5.
**    LOOP AT itab2.
*        READ TABLE itab2 INDEX c.
*        IF  itab2-objnr   IS NOT INITIAL AND itab2-udate  IS NOT INITIAL.
*          itab5-objnr = itab2-objnr.
*          itab5-udate = itab2-udate.
*          itab5-inact = itab2-inact.
*          itab5-stat =  itab2-stat.
*
*          APPEND itab5.
*        ENDIF.
**    ENDLOOP.
*        REFRESH itab2.
*        CLEAR itab2.
*        CLEAR c.
*      ELSE.
*        DELETE itab1 INDEX sy-tabix.
*        CLEAR itab1.
*      ENDIF.

************ commeted by debjani on 13.02 2007 *****************
*    ENDLOOP.

*********** ADD  by Debjani on 13.02.2007 ************************

    IF sy-subrc EQ 0.
      SORT ITAB2 BY UDATE UTIME.
      C = SY-DBCNT.
      READ TABLE itab2 INDEX c.
      IF  itab2-objnr   IS NOT INITIAL AND itab2-udate  IS NOT INITIAL.
        itab5-objnr = itab2-objnr.
        itab5-udate = itab2-udate.
        itab5-inact = itab2-inact.
        itab5-stat =  itab2-stat.

        APPEND itab5.
*        EXIT.
      ENDIF.

      REFRESH itab2.
      CLEAR itab2.
      CLEAR c.
    ELSE.
      DELETE itab1 INDEX sy-tabix.
      CLEAR itab1.
    ENDIF.

 ENDLOOP.
*********** ADD  by Debjani on 13.02.2007 ************************
  ELSE.             " IF DATE IS NOT  IN USER INPUT


    LOOP AT itab1.
      SELECT    objnr
                udate
                utime         " add on 14.02.2007
                inact
                stat
                utime
                FROM jcds
                INTO CORRESPONDING FIELDS OF TABLE itab2
                WHERE objnr = itab1-objnr
                AND inact = ' '.
*             AND udate LE SY-DATUM.
*      LOOP AT itab2.
*        c = c + 1.
*      ENDLOOP.

************ commeted by debjani on 14.02 2007 *****************

*      c = sy-dbcnt.
*      CLEAR itab2.
*      CLEAR itab5.
**    LOOP AT itab2.
*      READ TABLE itab2 INDEX c.
*      itab5-objnr = itab2-objnr.
*      itab5-udate = itab2-udate.
*      itab5-inact = itab2-inact.
*      itab5-stat =  itab2-stat.
*      APPEND itab5.
**    ENDLOOP.
*      REFRESH itab2.
*      CLEAR itab2.
*    ENDLOOP.
*    CLEAR c.

************ commeted by debjani on 14.02 2007 *****************

*********** ADD  by Debjani on 19.02.2007 ************************

   IF sy-subrc EQ 0.
      SORT ITAB2 BY UDATE UTIME.
      C = SY-DBCNT.
      READ TABLE itab2 INDEX c.
      IF  itab2-objnr   IS NOT INITIAL AND itab2-udate  IS NOT INITIAL.
        itab5-objnr = itab2-objnr.
        itab5-udate = itab2-udate.
        itab5-inact = itab2-inact.
        itab5-stat =  itab2-stat.

        APPEND itab5.
*        EXIT.
      ENDIF.

      REFRESH itab2.
      CLEAR itab2.
      CLEAR c.
    ELSE.
      DELETE itab1 INDEX sy-tabix.
      CLEAR itab1.
    ENDIF.




*    LOOP AT itab2.
*      READ TABLE itab2 INDEX c.
*      itab7-objnr = itab2-objnr.
*      itab7-udate = itab2-udate.
*      itab7-utime = itab2-utime.
*      itab7-inact = itab2-inact.
*      itab7-stat =  itab2-stat.
*      APPEND itab7.
*    ENDLOOP.
ENDLOOP.




*********** ADD  by Debjani on 14.02.2007 ************************


  ENDIF.

  LOOP AT itab5.
    SELECT istat
           txt04
           FROM tj02t
           INTO CORRESPONDING FIELDS OF TABLE itab3
           WHERE istat = itab5-stat
           AND spras = 'E'.
    CLEAR itab3.
    CLEAR itab6.
    LOOP AT itab3.
      itab6-istat = itab3-istat.
      itab6-txt04 = itab3-txt04.

      APPEND itab6.
    ENDLOOP.
  ENDLOOP.

  LOOP AT itab1.

    it_final-posnr = itab1-posnr.
    it_final-objnr = itab1-objnr.

    CALL FUNCTION 'CONVERSION_EXIT_REQID_INPUT'
      EXPORTING
        input  = itab1-posid
      IMPORTING
        output = itab1-posid.

*   MODIFY ITAB1.

    CALL FUNCTION 'CONVERSION_EXIT_REQID_OUTPUT'
      EXPORTING
        input  = itab1-posid
      IMPORTING
        output = itab1-posid.


*   MODIFY ITAB1.
    it_final-posid = itab1-posid.

    APPEND it_final.
    CLEAR it_final.

  ENDLOOP.

  LOOP AT it_final.
    READ TABLE itab5 WITH KEY objnr = it_final-objnr.
    it_final-udate = itab5-udate.
    it_final-utime = itab5-utime.          " add on 14.02.2007
    it_final-stat = itab5-stat.
    MODIFY it_final.
    CLEAR it_final.
  ENDLOOP.

  LOOP AT it_final.
    READ TABLE itab6 WITH KEY istat = it_final-stat.
    it_final-txt04 = itab6-txt04.
    MODIFY it_final.
    CLEAR it_final.
  ENDLOOP.

<b>Regards

Debjani

reward point for all helpful answer</b>

Read only

Former Member
0 Likes
622

Hi Sudheer,

normally perform statements will be used to identify the logic easily. and you can call many times with out writing the same code multiple times, and also used to modify the fields dynamically.

so for that you have to write. perform <routine name>. here double click on Routine name, so it will create an form and endform with the routine name.

below i put it ur code inside the subroutine(Perform).

Perform sub_test.

form sub_test.

SELECT mastmatnr maralabor

INTO TABLE lt_mara

FROM mast

INNER JOIN mara ON

maramatnr = mastmatnr

WHERE mast~werks = 'JER'

AND mast~stlan = '5'.

LOOP AT lt_mara.

CLEAR ls_zcrmtab_scheme.

IF lt_mara-labor IS INITIAL.

WRITE:/ 'no labor value for scheme', lt_mara-matnr.

CONTINUE.

ENDIF.

ls_zcrmtab_scheme-schemecode = lt_mara-matnr.

CASE lt_mara-labor.

WHEN 'D&A'.

ls_zcrmtab_scheme-clientnumber = '0004000001'.

WHEN 'APO'.

ls_zcrmtab_scheme-clientnumber = '0004000195'.

WHEN 'BRA'.

ls_zcrmtab_scheme-clientnumber = '0004000240'.

WHEN 'CC'.

ls_zcrmtab_scheme-clientnumber = '0004000051'.

WHEN 'CCS'.

ls_zcrmtab_scheme-clientnumber = '0004000157'.

WHEN 'IWS'.

ls_zcrmtab_scheme-clientnumber = '0004000220'.

WHEN 'LIN'.

ls_zcrmtab_scheme-clientnumber = '0004000181'.

WHEN 'ON'.

ls_zcrmtab_scheme-clientnumber = '0004000073'.

WHEN 'OOG'.

ls_zcrmtab_scheme-clientnumber = '0004000180'.

WHEN 'PAT'.

ls_zcrmtab_scheme-clientnumber = '0004000196'.

WHEN 'PRL'.

ls_zcrmtab_scheme-clientnumber = '0004000051'.

WHEN OTHERS.

CLEAR :ls_zcrmtab_scheme,

lt_mara.

CONTINUE.

endcase.

**GET CLIENT SCHEME DETAILS

SELECT SINGLE t1~zzmaktx

INTO ls_zcrmtab_scheme-clientscheme

FROM kotd901 AS t1 INNER

JOIN kondd AS t2

ON t1knumh = t2knumh

WHERE t1~kappl = 'V'

AND t1~kschl = 'Z001'

AND t1~vkorg = 'PAT'

AND t1~kunag = ls_zcrmtab_scheme-clientnumber

AND t2~smatn = ls_zcrmtab_scheme-schemecode.

    • setting the value to item

ls_zcrmtab_scheme-item = '10'.

    • setting the value to quantity

ls_zcrmtab_scheme-quantity = V_DEC .

*move 1 to gs_zcrmtab_scheme-quantity.

**setting the value to unit

ls_zcrmtab_scheme-unit = 'EA'.

    • get modality

SELECT SINGLE stzu~ztext

INTO lv_ztext

FROM stzu INNER JOIN mast

ON maststlnr = stzustlnr

WHERE matnr = ls_zcrmtab_scheme-schemecode.

**MAP THE MODALITIES

CASE lv_ztext.

WHEN 'ZWK2'.

ls_zcrmtab_scheme-modality = '1M'.

WHEN 'ZWK4'.

ls_zcrmtab_scheme-modality = '3M'.

WHEN 'ZWK6'.

ls_zcrmtab_scheme-modality = '6M'.

WHEN 'ZWK8'.

ls_zcrmtab_scheme-modality = '2M'.

ENDCASE.

**checking for replenishments

DATA: lv_matnr TYPE matnr.

SELECT SINGLE mast~matnr

INTO lv_matnr

FROM mast

INNER JOIN mara ON

maramatnr = mastmatnr

WHERE mast~werks = 'GLA'

AND mast~stlan = '5'.

IF sy-subrc = 0.

ls_zcrmtab_scheme-replenishable = 'X'.

ENDIF.

RANGES: r_scheme FOR ls_zcrmtab_scheme-schemecode.

    • build up range

r_scheme-low = 'A3'.

r_scheme-option = 'EQ'.

r_scheme-sign = 'I'.

APPEND r_scheme.

r_scheme-low = 'AY'.

APPEND r_scheme.

r_scheme-low = 'C3'.

APPEND r_scheme.

r_scheme-low = 'QX'.

APPEND r_scheme.

    • ZOR_SPLIT

CASE ls_zcrmtab_scheme-clientnumber.

WHEN '0004000073' OR '0004000240'.

ls_zcrmtab_scheme-zor_split = space.

WHEN OTHERS.

IF ls_zcrmtab_scheme-schemecode IN r_scheme.

ls_zcrmtab_scheme-zor_split = space.

ELSE.

CASE ls_zcrmtab_scheme-modality.

WHEN '1M'.

ls_zcrmtab_scheme-zor_split = 'X'.

ls_zcrmtab_scheme-zfc_split = 'X'.

WHEN OTHERS.

ls_zcrmtab_scheme-zor_split = 'A'.

ls_zcrmtab_scheme-zfc_split = 'A'.

ENDCASE.

ENDIF.

ENDCASE.

APPEND ls_zcrmtab_scheme TO lt_zcrmtab_scheme.

CLEAR: ls_zcrmtab_scheme,

lt_mara.

ENDLOOP.

endform. "Sub_test

thanks,

Murali