‎2007 Jul 25 10:17 AM
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
‎2007 Jul 25 11:41 AM
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
‎2007 Jul 25 11:55 AM
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>
‎2007 Jul 25 12:07 PM
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
‎2007 Jul 25 12:14 PM
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>
‎2007 Jul 25 12:21 PM
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