Application Development 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: 

module pool runtime error---too many consecutive nested call screens.

Former Member
0 Kudos

Hi guys,

Attach Dump Analysis generated from system. i'm having this problem after several calls of module pool screen. Appreciate your advise to fix this.

Runtime errors LIST_TOO_MANY_LPROS

Occurred on 07/20/2007 at 00:11:14

-


>> Short dump has not been completely stored. It is too big.

No further list processing possible.

What happened?

-


You requested too many consecutive nested call screens.

-

What can you do?

-


If possible, leave the current screen level before making a further

selection (Back=F3 or Cancel=F12).

Print out the error message (using the "Print" function)

and make a note of the actions and input that caused the

error.

To resolve the problem, contact your SAP system administrator.

You can use transaction ST22 (ABAP Dump Analysis) to view and administer

termination messages, especially those beyond their normal deletion

date.

Error analysis

-


At present, the maximum permitted number of nested screen levels is

restricted to 50.

3 REPLIES 3

Sougata
Active Contributor
0 Kudos

Looks like its stuck in an endless loop. Can you post the part of the code where it calls screen?

Cheers,

Sougata.

Former Member
0 Kudos

hi,

attach 2 portion of the code here.

1)sub rountine.

&----


*& Include ZRF_MB1B_F01 *

&----


&----


*& Form VERIFICATION

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM verification .

IF werks <> ''.

SELECT SINGLE werks FROM t001w INTO werks WHERE werks = werks.

IF sy-subrc <> 0.

errflag = 'X'.

message_id = 'M7' .

message_type = 'E' .

message_number = '146'.

message_var1 = werks.

PERFORM error_message .

PERFORM clear_message.

CALL SCREEN 100.

ENDIF.

ELSE.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '036'.

PERFORM error_message .

PERFORM clear_message.

IF movetype = '309'.

LEAVE TO SCREEN 800.

ELSE.

CALL SCREEN 100.

ENDIF.

ENDIF.

IF recv_mat <> ''.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = recv_mat

IMPORTING

output = recv_mat.

CALL FUNCTION 'MARC_SINGLE_READ'

EXPORTING

kzrfb = ' '

maxtz = 0

matnr = recv_mat

werks = werks

sperrmodus = ' '

std_sperrmodus = ' '

IMPORTING

wmarc = i_rec_marc

EXCEPTIONS

lock_on_marc = 1

lock_system_error = 2

wrong_call = 3

not_found = 4

OTHERS = 5.

.

IF sy-subrc <> 0.

errflag = 'X'.

message_id = sy-msgid .

message_type = sy-msgty .

message_number = sy-msgno.

message_var1 = sy-msgv1.

message_var2 = sy-msgv2.

message_var3 = sy-msgv3.

message_var4 = sy-msgv4.

PERFORM error_message .

PERFORM clear_message.

CALL SCREEN 800.

ENDIF.

ELSEIF movetype ='309' AND recv_mat = ''.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '038'.

PERFORM error_message .

PERFORM clear_message.

CALL SCREEN 800.

ENDIF.

ENDFORM. " VERIFICATION

&----


*& Form BATCH_READ

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM batch_read USING lgort TYPE resb-lgort

matnr TYPE resb-matnr.

READ TABLE i_mchb WITH KEY matnr = matnr lgort = lgort.

IF sy-subrc <> 0.

SELECT matnr werks lgort charg laeda clabs FROM mchb

INTO CORRESPONDING FIELDS OF TABLE i_mchb "CH 05.09.95

WHERE matnr = matnr

AND werks = werks

AND lgort = lgort

AND clabs <> ''.

SORT i_mchb DESCENDING BY clabs.

ENDIF.

ENDFORM. " BATCH_READ

&----


*& Form SLOC_UNKNOWN

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM sloc_unknown.

SELECT matnr werks lgort charg ersda clabs FROM mchb

INTO CORRESPONDING FIELDS OF TABLE i_mchb "CH 05.09.95

WHERE matnr = xmatnr

AND werks = werks

AND lgort <> recv_sloc

AND clabs <> ''.

IF sy-subrc = 0.

SORT i_mchb DESCENDING BY clabs.

DESCRIBE TABLE i_mchb LINES batch_lines.

LOOP AT itap_items.

READ TABLE i_mchb WITH KEY matnr = itap_items-matnr lgort =

itap_items-lgort charg = itap_items-charg.

IF sy-subrc = 0.

i_mchb-rdconf = itap_items-rdconf.

i_mchb-issue_qty = itap_items-qty.

i_mchb-rec_batch = itap_items-rec_batch.

MODIFY i_mchb INDEX sy-tabix TRANSPORTING rdconf issue_qty

rec_batch.

ENDIF.

ENDLOOP.

CALL SCREEN 600.

ELSE.

SELECT amatnr aekgrp adispo blgort blabst bklabs INTO

CORRESPONDING FIELDS OF TABLE i_mard FROM marc AS a INNER JOIN mard AS

b ON amatnr = bmatnr AND awerks = bwerks

WHERE a~matnr = xmatnr

AND a~werks = werks

AND labst <> '' .

IF sy-subrc = 0.

CALL SCREEN 700.

ELSE.

errflag = 'X'.

message_id = 'M7'.

message_type = 'E' .

message_number = '046'.

message_var1 = tap_items-matnr.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

ENDIF.

ENDFORM. " SLOC_UNKNOWN

&----


*& Form SLOC_SINGLE

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM sloc_single.

SELECT matnr werks lgort charg ersda clabs FROM mchb

INTO CORRESPONDING FIELDS OF TABLE i_mchb "CH 05.09.95

WHERE matnr = xmatnr

AND werks = werks

AND lgort = xlgort

AND clabs <> ''.

IF sy-subrc = 0.

SORT i_mchb DESCENDING BY clabs.

DESCRIBE TABLE i_mchb LINES batch_lines.

LOOP AT itap_items.

READ TABLE i_mchb WITH KEY matnr = itap_items-matnr lgort =

itap_items-lgort charg = itap_items-charg.

IF sy-subrc = 0.

i_mchb-rdconf = itap_items-rdconf.

i_mchb-issue_qty = itap_items-qty.

i_mchb-rec_batch = itap_items-rec_batch.

MODIFY i_mchb INDEX sy-tabix TRANSPORTING rdconf issue_qty

rec_batch.

ENDIF.

ENDLOOP.

CALL SCREEN 600.

ELSE.

SELECT amatnr aekgrp adispo blgort blabst bklabs INTO

CORRESPONDING FIELDS OF TABLE i_mard FROM marc AS a INNER JOIN mard AS

b ON amatnr = bmatnr AND awerks = bwerks

WHERE a~matnr = xmatnr

AND a~werks = werks

AND lgort = xlgort

AND labst <> '' .

IF sy-subrc = 0.

CALL SCREEN 700.

ELSE.

errflag = 'X'.

message_id = 'M7'.

message_type = 'E' .

message_number = '046'.

message_var1 = tap_items-matnr.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

ENDIF.

ENDFORM. " SLOC_SINGLE

&----


*& Form SLOC_BLOCKED_STOCK

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM sloc_blocked_stock.

SELECT matnr werks lgort charg ersda clabs cspem FROM mchb

INTO CORRESPONDING FIELDS OF TABLE i_mchb "CH 05.09.95

WHERE matnr = xmatnr

AND werks = werks

  • AND LGORT <> RECV_SLOC

AND cspem <> ''.

IF sy-subrc = 0.

SORT i_mchb DESCENDING BY clabs.

DESCRIBE TABLE i_mchb LINES batch_lines.

LOOP AT itap_items.

READ TABLE i_mchb WITH KEY matnr = itap_items-matnr lgort =

itap_items-lgort charg = itap_items-charg.

IF sy-subrc = 0.

i_mchb-rdconf = itap_items-rdconf.

i_mchb-issue_qty = itap_items-qty.

i_mchb-rec_batch = itap_items-rec_batch.

MODIFY i_mchb INDEX sy-tabix TRANSPORTING rdconf issue_qty

rec_batch.

ENDIF.

ENDLOOP.

CALL SCREEN 600.

ELSE.

SELECT amatnr aekgrp adispo blgort blabst bklabs b~speme INTO

CORRESPONDING FIELDS OF TABLE i_mard FROM marc AS a INNER JOIN mard AS

b ON amatnr = bmatnr AND awerks = bwerks

WHERE a~matnr = xmatnr

AND a~werks = werks

AND speme <> '' .

IF sy-subrc = 0.

CALL SCREEN 700.

ELSE.

errflag = 'X'.

message_id = 'M7'.

message_type = 'E' .

message_number = '046'.

message_var1 = tap_items-matnr.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

ENDIF.

ENDFORM. " SLOC_BLOCKED_STOCK

&----


*& Form UNRESTRICTED_BATCH_READ

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM unrestricted_batch_read .

SELECT matnr werks lgort charg ersda clabs FROM mchb

INTO CORRESPONDING FIELDS OF TABLE i_mchb

WHERE matnr = xmatnr

AND werks = werks

AND lgort = xlgort

AND charg = xcharg

AND clabs <> ''.

IF sy-subrc <> 0.

errflag = 'X'.

message_id = 'M7' .

message_type = 'E' .

message_number = '042'.

message_var1 = xmatnr.

message_var2 = werks.

message_var3 = xlgort.

message_var4 = xcharg.

PERFORM error_message .

PERFORM clear_message.

CALL SCREEN 200.

ELSE.

READ TABLE i_mchb INDEX 1.

qty = i_mchb-clabs.

  • MODIFY I_MCHB INDEX 1 TRANSPORTING QTY.

ENDIF.

ENDFORM. " UNRESTRICTED_BATCH_READ

&----


*& Form VENDOR_UNRESTRICTED_BATCH_READ

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM vendor_unrestricted_batch_read .

SELECT matnr werks lgort charg ersda slabs lifnr FROM mkol

INTO CORRESPONDING FIELDS OF TABLE i_mkol

WHERE matnr = xmatnr

AND werks = werks

AND lgort = xlgort

AND charg = xcharg

AND sobkz = 'K'

AND slabs <> ''.

IF sy-subrc <> 0.

errflag = 'X'.

message_id = 'M7' .

message_type = 'E' .

message_number = '042'.

message_var1 = xmatnr.

message_var2 = werks.

message_var3 = xlgort.

message_var4 = xcharg.

PERFORM error_message .

PERFORM clear_message.

CALL SCREEN 200.

ELSE.

READ TABLE i_mkol INDEX 1.

qty = i_mkol-slabs.

vendor = i_mkol-lifnr.

  • MODIFY I_MKOL INDEX 1 TRANSPORTING QTY.

ENDIF.

ENDFORM. " VENDOR_UNRESTRICTED_BATCH_READ

&----


*& Form BLOCKED_BATCH_READ

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM blocked_batch_read .

SELECT matnr werks lgort charg ersda cspem FROM mchb

INTO CORRESPONDING FIELDS OF TABLE i_mchb "CH 05.09.95

WHERE matnr = xmatnr

AND werks = werks

AND lgort = xlgort

AND charg = xcharg

AND cspem <> ''.

IF sy-subrc <> 0.

errflag = 'X'.

message_id = 'M7' .

message_type = 'E' .

message_number = '042'.

message_var1 = xmatnr.

message_var2 = werks.

message_var3 = xlgort.

message_var4 = xcharg.

PERFORM error_message .

PERFORM clear_message.

CALL SCREEN 200.

ELSE.

READ TABLE i_mchb INDEX 1.

qty = i_mchb-cspem.

  • MODIFY I_MCHB INDEX 1 TRANSPORTING QTY.

ENDIF.

ENDFORM. " BLOCKED_BATCH_READ

&----


*& Form VENDOR_BLOCKED_BATCH_READ

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM vendor_blocked_batch_read .

SELECT matnr werks lgort charg ersda sspem lifnr FROM mkol

INTO CORRESPONDING FIELDS OF TABLE i_mkol "CH 05.09.95

WHERE matnr = xmatnr

AND werks = werks

AND lgort = xlgort

AND charg = xcharg

AND sspem <> ''.

IF sy-subrc <> 0.

errflag = 'X'.

message_id = 'M7' .

message_type = 'E' .

message_number = '042'.

message_var1 = xmatnr.

message_var2 = werks.

message_var3 = xlgort.

message_var4 = xcharg.

PERFORM error_message .

PERFORM clear_message.

CALL SCREEN 200.

ELSE.

READ TABLE i_mkol INDEX 1.

qty = i_mkol-sspem.

vendor = i_mkol-lifnr.

  • MODIFY I_MKOL INDEX 1 TRANSPORTING QTY.

ENDIF.

ENDFORM. " VENDOR_BLOCKED_BATCH_READ

&----


*& Form GOODS_ISSUE

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM goods_issue .

gmhead-pstng_date = sy-datum.

gmhead-doc_date = sy-datum.

gmhead-pr_uname = sy-uname.

gmhead-ref_doc_no = delivery_note.

gmhead-header_txt = header_txt.

gmcode-gm_code = '04'.

LOOP AT itap_items WHERE rdconf = 'X'.

gritab-material = itap_items-matnr.

gritab-plant = itap_items-werks.

gritab-stge_loc = itap_items-lgort.

gritab-batch = itap_items-charg.

gritab-move_type = movetype.

gritab-mvt_ind = ''.

gritab-entry_qnt = itap_items-qty.

gritab-spec_stock = itap_items-spec_stock.

gritab-vendor = itap_items-vendor.

gritab-move_plant = werks.

gritab-move_mat = recv_mat.

IF movetype = '412' OR movetype = '344' OR movetype = '542'.

gritab-move_stloc = itap_items-lgort.

gritab-move_batch = itap_items-iss_batch.

gritab-stge_loc = itap_items-recv_sloc.

ELSE.

gritab-move_stloc = itap_items-recv_sloc.

gritab-move_batch = itap_items-rec_batch.

ENDIF.

APPEND gritab.

ENDLOOP.

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'

EXPORTING

goodsmvt_header = gmhead

goodsmvt_code = gmcode

  • TESTRUN = ' '

IMPORTING

goodsmvt_headret = mthead

materialdocument = mat_doc

  • MATDOCUMENTYEAR =

TABLES

goodsmvt_item = gritab

  • GOODSMVT_SERIALNUMBER =

return = errmsg

.

CLEAR errflag.

READ TABLE errmsg WITH KEY type = 'E'.

IF sy-subrc = 0.

errflag = 'X'.

message_id = errmsg-id .

message_type = errmsg-type .

message_number = errmsg-number.

message_var1 = errmsg-message_v1.

message_var2 = errmsg-message_v2.

message_var3 = errmsg-message_v3.

message_var4 = errmsg-message_v4.

PERFORM error_message .

PERFORM clear_message.

CLEAR: gmhead,gritab.

REFRESH: gritab,errmsg.

LEAVE TO SCREEN 500.

ENDIF.

IF errflag IS INITIAL.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = 'X'.

IF sy-subrc NE 0.

WRITE:/ 'Error in updating'.

EXIT.

ELSE.

message_id = 'M7'. .

message_type = 'S' .

message_number = '060'.

message_var1 = mthead-mat_doc.

message_var2 = errmsg-message_v2.

message_var3 = errmsg-message_v3.

message_var4 = errmsg-message_v4.

PERFORM error_message .

PERFORM clear_message.

PERFORM clear_all.

ENDIF.

ENDIF.

ENDFORM. " GOODS_ISSUE

*&----


*& Form ERROR_MESSAGE

*&----


  • Calling the error message screen

*----


FORM error_message.

  • For different types of screens there are different lengths of message

  • line and no of lines. Default values are 40 chars X 4 lines

  • for 8x40 screens.

message_type = 'W'.

msg_scr = error_screen.

message_lang = sy-langu.

message_lang = sy-langu.

CALL FUNCTION 'ZCALL_MESSAGE_SCREEN'

EXPORTING

i_msgid = message_id

i_lang = message_lang

i_msgno = message_number

i_msgv1 = message_var1

i_msgv2 = message_var2

i_msgv3 = message_var3

i_msgv4 = message_var4

i_line_size = msg_line

i_lines = msg_nln

i_message_screen = msg_scr

i_condense = con_x

IMPORTING

o_answer = msg_answ

EXCEPTIONS

invalid_message1 = 01.

IF sy-subrc <> 0.

ENDIF.

ENDFORM. " ERROR_MESSAGE

*&----


*& Form WARNING_MESSAGE

*&----


  • Calling the error message screen

  • (warning message,answer may be YES or NO)

*----


FORM warning_message.

  • WARNING IS DIPLAYED ON SPECIAL SCREEN, USER GIVES ANSWER Y/N

message_type = 'W'.

msg_scr = warning_screen.

message_lang = sy-langu.

CALL FUNCTION 'ZCALL_MESSAGE_SCREEN'

EXPORTING

i_msgid = message_id

i_lang = message_lang

i_msgno = message_number

i_msgv1 = message_var1

i_msgv2 = message_var2

i_msgv3 = message_var3

i_msgv4 = message_var4

i_line_size = msg_line

i_lines = msg_nln

i_message_screen = msg_scr

i_condense = con_x

IMPORTING

o_answer = msg_answ

EXCEPTIONS

invalid_message1 = 01.

IF sy-subrc <> 0.

ENDIF.

ENDFORM. "WARNING_MESSAGE

&----


*& Form CLEAR_MESSAGE

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM clear_message .

CLEAR: message_id,message_type,message_number,message_var1,message_var2,

message_var3, message_var4 .

ENDFORM. " CLEAR_MESSAGE

&----


*& Form CLEAR_ALL

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM clear_all .

CLEAR: wa_mard,sloc,movetype,werks, spec_stock, xlgort,

xcharg,recv_sloc,werks, wa_storage,i_storage,resb_index,selection,

sloc_selection,batch_index,xmatnr, balance,wa_batch, i_mchb,xmatnr,

tap_index,itemno,pf_itab,wo_items, gmhead,delivery_note, header_txt,

gmcode,gritab,errmsg,mat_doc, errflag,tap_items,rec_batch,iss_sloc,

iss_batch,issue_qty,vendor,spec_stock,issued_qty,recv_mat.

REFRESH:i_mard,i_storage, i_mchb,pf_itab,i_woitems,itap_items,

gritab,errmsg.

ENDFORM. " CLEAR_ALL

&----


*& Form GET_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_data.

IF xmatnr <> ''.

CLEAR i_marc.

REFRESH i_marc.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = xmatnr

IMPORTING

output = xmatnr.

*check the material available in Cons PO for 541

IF movetype = '541'.

READ TABLE xmdgi WITH KEY matnr = xmatnr.

IF sy-subrc NE 0.

message_id = 'M7'.

message_lang = sy-langu.

message_number = 551.

message_var1 = xmatnr.

PERFORM error_message.

PERFORM clear_message.

CALL SCREEN 200.

ENDIF.

ENDIF.

*end of checking

CALL FUNCTION 'MARC_SINGLE_READ'

EXPORTING

kzrfb = ' '

maxtz = 0

matnr = xmatnr

werks = werks

sperrmodus = ' '

std_sperrmodus = ' '

IMPORTING

wmarc = i_marc

EXCEPTIONS

lock_on_marc = 1

lock_system_error = 2

wrong_call = 3

not_found = 4

OTHERS = 5.

IF sy-subrc <> 0.

errflag = 'X'.

message_id = sy-msgid .

message_type = sy-msgty .

message_number = sy-msgno.

message_var1 = sy-msgv1.

message_var2 = sy-msgv2.

message_var3 = sy-msgv3.

message_var4 = sy-msgv4.

PERFORM error_message .

PERFORM clear_message.

CALL SCREEN 200.

ELSE.

ENDIF.

ENDIF.

IF xlgort <> '' AND i_marc-xchar = ''.

CLEAR: i_mard_tab,i_mard.

REFRESH: i_mard_tab,i_mard.

CALL FUNCTION 'MARD_SINGLE_READ'

EXPORTING

kzrfb = ' '

maxtz = 0

matnr = xmatnr

werks = werks

lgort = xlgort

IMPORTING

wmard = i_mard_tab

EXCEPTIONS

wrong_call = 1

not_found = 2

OTHERS = 3.

IF sy-subrc <> 0.

errflag = 'X'.

message_id = sy-msgid .

message_type = sy-msgty .

message_number = sy-msgno.

message_var1 = sy-msgv1.

message_var2 = sy-msgv2.

message_var3 = sy-msgv3.

message_var4 = sy-msgv4.

PERFORM error_message .

PERFORM clear_message.

CALL SCREEN 200.

ELSE.

  • IF MOVETYPE <> '344' OR MOVETYPE <> '412'.

READ TABLE itap_items WITH KEY matnr = xmatnr lgort = xlgort .

IF sy-subrc = 0.

xmatnr = itap_items-matnr.

xlgort = itap_items-lgort.

xcharg = itap_items-charg.

recv_sloc = itap_items-recv_sloc.

spec_stock = itap_items-spec_stock.

vendor = itap_items-vendor.

rec_batch = itap_items-rec_batch .

IF issued_qty = ''.

issue_qty = itap_items-qty.

PERFORM move_num_to_char USING itap_items-qty CHANGING issued_qty.

ENDIF.

ENDIF.

  • ELSE.

  • READ TABLE ITAP_ITEMS WITH KEY MATNR = XMATNR LGORT = ISS_SLOC.

  • IF SY-SUBRC = 0.

  • XMATNR = ITAP_ITEMS-MATNR.

  • XLGORT = ITAP_ITEMS-LGORT.

  • XCHARG = ITAP_ITEMS-CHARG.

  • RECV_SLOC = ITAP_ITEMS-RECV_SLOC.

  • SPEC_STOCK = ITAP_ITEMS-SPEC_STOCK.

  • VENDOR = ITAP_ITEMS-VENDOR.

  • REC_BATCH = ITAP_ITEMS-REC_BATCH .

  • ISSUE_QTY = ITAP_ITEMS-QTY.

  • ENDIF.

  • ENDIF.

MOVE-CORRESPONDING i_mard_tab TO i_mard.

IF movetype = '325' OR movetype = '343'.

IF spec_stock <> 'K' AND spec_stock <> ''.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '030'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

IF spec_stock = 'K'.

qty = i_mard_tab-kspem.

ELSE.

qty = i_mard_tab-speme.

ENDIF.

ELSE.

IF spec_stock = 'K'.

qty = i_mard_tab-klabs.

ELSE.

qty = i_mard_tab-labst.

ENDIF.

ENDIF.

APPEND i_mard.

READ TABLE i_mard INDEX 1.

ENDIF.

ENDIF.

IF xcharg <> '' AND xlgort <> '' AND i_marc-xchar = 'X'.

CLEAR: wa_batch,i_mchb.

REFRESH: i_mchb.

READ TABLE itap_items WITH KEY matnr = xmatnr lgort = xlgort

charg = xcharg recv_sloc = recv_sloc.

IF sy-subrc = 0.

xmatnr = itap_items-matnr.

xlgort = itap_items-lgort.

xcharg = itap_items-charg.

recv_sloc = itap_items-recv_sloc.

spec_stock = itap_items-spec_stock.

vendor = itap_items-vendor.

rec_batch = itap_items-rec_batch .

IF issued_qty = ''.

issue_qty = itap_items-qty.

PERFORM move_num_to_char USING itap_items-qty CHANGING issued_qty.

ENDIF.

ENDIF.

IF spec_stock <> 'K' AND spec_stock <> ''.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '030'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

IF movetype = 325 OR movetype = 343.

IF spec_stock = ''.

PERFORM blocked_batch_read.

ELSE.

PERFORM vendor_blocked_batch_read.

ENDIF.

ELSE.

IF spec_stock = ''.

PERFORM unrestricted_batch_read.

ELSE.

PERFORM vendor_unrestricted_batch_read.

ENDIF.

ENDIF.

ENDIF.

ENDFORM. " GET_DATA

&----


*& Form MOVE_NUM_TO_CHAR

&----


  • text

----


  • -->P_RESULT_QTY text

  • <--P_*RLMOB_CQTY text

----


FORM move_num_to_char USING p_qty TYPE p CHANGING p_char.

DATA: positive_qty TYPE p DECIMALS 5,

negative_sign(1) VALUE '-'.

IF p_qty > 0.

  • CONDENSE P_QTY.

  • convert from numeric to char

CALL FUNCTION 'SHIFT_NUMBER'

EXPORTING

num = p_qty

IMPORTING

chr = p_char.

*in case the qty is negative

ELSEIF p_qty < 0.

positive_qty = p_qty * ( -1 ).

CALL FUNCTION 'SHIFT_NUMBER'

EXPORTING

num = positive_qty

IMPORTING

chr = p_char.

SHIFT p_char RIGHT.

p_char(1) = negative_sign.

*in case the qty is zero

ELSE.

p_char = '0'.

ENDIF. " p_qty

ENDFORM. "MOVE_NUM_TO_CHAR

&----


*& Form MOVE_CHAR_TO_NUM

&----


  • move character value to numeric

----


  • CHR character value

  • NUM numeric value

----


FORM move_char_to_num USING chr TYPE c

num TYPE p.

errorcode = 0.

CALL FUNCTION 'MOVE_CHAR_TO_NUM'

EXPORTING

chr = chr

IMPORTING

num = num

EXCEPTIONS

convt_no_number = 1

convt_overflow = 2.

IF sy-subrc = 1.

errorcode = 9.

  • Cannot convert entry &1 to number

message_id = 'LF'.

message_lang = sy-langu.

message_number = 139.

message_var1 = chr.

PERFORM error_message.

PERFORM clear_message.

  • EXIT.

ENDIF.

IF sy-subrc = 2.

errorcode = 9.

  • Value is out of range

message_id = 'LF'.

message_lang = sy-langu.

message_number = 209.

message_var1 = chr.

PERFORM error_message.

PERFORM clear_message.

  • EXIT.

ENDIF.

ENDFORM. " MOVE_CHAR_TO_NUM

2)PAI

&----


*& Include ZRF_MB1B_I01 *

&----


&----


*& Module TRANSP_ITAB_IN INPUT

&----


  • text

----


MODULE transp_itab_in INPUT.

lines = sy-loopc.

idx = sy-stepl + line.

ENDMODULE. " TRANSP_ITAB_IN INPUT

&----


*& Module USER_COMMAND_0300 INPUT

&----


  • text

----


MODULE user_command_0300 INPUT.

temp_movetype = movetype.

PERFORM clear_all.

movetype = temp_movetype.

CLEAR temp_movetype.

CASE ok_code.

WHEN 'ENTER' OR 'DITM'.

IF NOT move_select IS INITIAL AND move_select <= 10.

READ TABLE itab_movement INDEX move_select.

movetype = itab_movement-text(3).

IF movetype = '309'.

CALL SCREEN 800.

ELSEIF movetype = '541' OR movetype = '542'.

CALL SCREEN 900.

ELSE.

CALL SCREEN 100.

ENDIF.

ELSE.

ENDIF.

WHEN 'BACK'.

LEAVE PROGRAM.

WHEN 'PGDN'.

line = line + lines.

limit = fill - lines.

IF line > limit.

line = limit.

ENDIF.

WHEN 'PGUP'.

line = line - lines.

IF line < 0.

line = 0.

ENDIF.

ENDCASE.

ENDMODULE. " USER_COMMAND_0300 INPUT

&----


*& Module USER_COMMAND_0100 INPUT

&----


  • text

----


MODULE user_command_0100 INPUT.

CASE ok_code.

WHEN 'ENTER' OR 'DITM'.

CLEAR ok_code.

PERFORM verification.

CALL SCREEN 200.

WHEN 'CLEAR'.

CLEAR ok_code.

CLEAR: werks, header_txt,recv_mat.

WHEN 'BACK'.

CLEAR: ok_code,werks, header_txt,recv_mat.

LEAVE TO SCREEN 300.

ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

&----


*& Module USER_COMMAND_0200 INPUT

&----


  • text

----


MODULE user_command_0200 INPUT.

CASE ok_code.

WHEN 'ENTER' .

CLEAR: ok_code.

IF movetype <> '541' AND movetype <> '542'.

  • WERKS = XMDGI-WERKS.

PERFORM get_data.

ELSE.

IF xmatnr <> xmdgi-matnr.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '031'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ELSE.

werks = xmdgi-werks.

PERFORM get_data.

ENDIF.

ENDIF.

WHEN 'DEL'.

CASE i_marc-xchar.

WHEN 'X'.

DELETE itap_items WHERE matnr = xmatnr AND

lgort = xlgort AND

charg = xcharg AND

recv_sloc = recv_sloc. "#06-10-17-2250

IF sy-subrc = 0.

*update the qty in xmdgi

IF movetype = '541'.

READ TABLE xmdgi WITH KEY matnr = xmatnr.

xmdgi-erfmg = xmdgi-erfmg + issue_qty.

MODIFY xmdgi INDEX sy-tabix.

ENDIF.

CLEAR: recv_sloc,spec_stock,xmatnr,xlgort,xcharg,rec_batch,

issue_qty,issued_qty,vendor,tap_items,iss_sloc,iss_batch.

ENDIF.

WHEN ''.

DELETE itap_items WHERE matnr = xmatnr AND lgort = xlgort.

IF sy-subrc = 0.

*update the qty in xmdgi

IF movetype = '541'.

READ TABLE xmdgi WITH KEY matnr = xmatnr.

xmdgi-erfmg = xmdgi-erfmg + issue_qty.

MODIFY xmdgi INDEX sy-tabix.

ENDIF.

CLEAR: recv_sloc,spec_stock,xmatnr,xlgort,xcharg,

rec_batch,issue_qty,issued_qty,vendor,tap_items,

iss_sloc,iss_batch.

ENDIF.

ENDCASE.

WHEN 'CLEAR'.

CLEAR ok_code.

CLEAR: tap_items, xmatnr,xlgort,xcharg,issue_qty,issued_qty,

i_mchb,i_mard,tap_items-rdconf,

rec_batch,recv_sloc,vendor,spec_stock,iss_sloc,iss_batch.

REFRESH : i_mchb,i_mard.

WHEN 'SEL'.

CLEAR: ok_code.

  • PERFORM GET_DATA.

PERFORM move_char_to_num USING issued_qty issue_qty.

IF errorcode <> 0.

CALL SCREEN 200.

ENDIF.

IF movetype = '541' OR movetype = '542'.

werks = xmdgi-werks.

ENDIF.

PERFORM get_data.

IF movetype = '542'.

IF iss_batch = ''.

tap_items-vendor = xmdgi-lifnr.

vendor = xmdgi-lifnr.

iss_batch = ebeln.

tap_items-iss_batch = ebeln.

ELSE.

tap_items-iss_batch = iss_batch.

ENDIF.

SELECT SINGLE lblab INTO qty FROM mslb

WHERE matnr = xmatnr

AND werks = werks

AND charg = iss_batch

AND sobkz = 'O'

AND lblab <> ''.

IF sy-subrc <> 0.

errflag = 'X'.

message_id = 'M7' .

message_type = 'E' .

message_number = '042'.

message_var1 = xmatnr.

message_var2 = werks.

message_var3 = xlgort.

message_var4 = xcharg.

PERFORM error_message .

PERFORM clear_message.

CALL SCREEN 200.

ENDIF.

ENDIF.

IF movetype = '311' OR movetype = '411' OR movetype = '412' OR

movetype = '344'.

IF recv_sloc <> '' .

SELECT SINGLE lgort FROM t001l INTO recv_sloc WHERE lgort =

recv_sloc AND werks = werks.

IF sy-subrc <> 0.

errflag = 'X'.

message_id = 'HUSELECT' .

message_type = 'E' .

message_number = '031'.

message_var1 = recv_sloc.

message_var2 = werks.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

ELSE.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '037'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

  • ELSEIF MOVETYPE = '412' OR MOVETYPE = '344'.

  • IF ISS_SLOC <> '' .

  • SELECT SINGLE LGORT FROM T001L INTO RECV_SLOC WHERE LGORT =

  • ISS_SLOC AND WERKS = WERKS.

  • IF SY-SUBRC <> 0.

  • ERRFLAG = 'X'.

  • MESSAGE_ID = 'HUSELECT' .

  • MESSAGE_TYPE = 'E' .

  • MESSAGE_NUMBER = '041'.

  • MESSAGE_VAR1 = RECV_SLOC.

  • MESSAGE_VAR2 = WERKS.

  • PERFORM ERROR_MESSAGE .

  • PERFORM CLEAR_MESSAGE.

  • EXIT.

  • ENDIF.

  • ELSE.

  • MESSAGE_ID = 'ZRFCONSOLE'.

  • MESSAGE_TYPE = 'E' .

  • MESSAGE_NUMBER = '037'.

  • PERFORM ERROR_MESSAGE .

  • PERFORM CLEAR_MESSAGE.

  • EXIT.

  • ENDIF.

ENDIF.

IF spec_stock <> 'K' AND spec_stock <> ''.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '030'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

IF spec_stock = 'K'.

IF vendor <> ''.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = vendor

IMPORTING

output = vendor.

ELSE.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '039'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

ENDIF.

IF xmatnr = ''.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '031'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ELSEIF xlgort = '' .

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '032'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ELSEIF i_marc-xchar = '' AND xcharg <> ''.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '035'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ELSEIF xcharg = '' AND i_marc-xchar ='X'.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '033'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ELSEIF issue_qty = ''.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '034'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ELSEIF issue_qty > qty.

errflag = 'X'.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '017'.

message_var2 = xmatnr.

message_var3 = werks.

PERFORM error_message .

PERFORM clear_message.

EXIT.

  • message_id = 'ZRFCONSOLE'.

  • message_type = 'E' .

  • message_number = '011'.

  • PERFORM error_message .

  • PERFORM clear_message.

  • EXIT.

ELSEIF i_marc-xchar = 'X'.

IF movetype = '541' AND movetype <> '542'.

vendor = xmdgi-lifnr.

rec_batch = ebeln.

DATA: v1(1) VALUE '0'.

SHIFT rec_batch LEFT DELETING LEADING v1.

ENDIF.

IF recv_sloc = ''.

recv_sloc = xlgort.

ENDIF.

IF iss_sloc = ''.

iss_sloc = xlgort.

ENDIF.

*if excess qty entered show them warning for 541

IF issue_qty > xmdgi-erfmg AND movetype = '541'.

DATA: issue_qty1 LIKE resb-bdmng.

issue_qty1 = issue_qty - xmdgi-erfmg.

message_id = 'ZRFCONSOLE' .

message_type = 'W' .

message_number = '001'.

message_var1 = 'Excess Qty '.

message_var2 = issue_qty1.

message_var3 = 'issued'.

message_var4 = 'Do you want to Continue'.

PERFORM warning_message.

IF msg_answ = 'N'.

CLEAR: issued_qty,issue_qty.

EXIT.

ENDIF.

ENDIF.

READ TABLE itap_items WITH KEY matnr = xmatnr lgort =

xlgort charg = xcharg .

IF sy-subrc <> 0.

IF movetype <> '541' AND movetype <> '542'.

IF rec_batch = '' .

tap_items-rec_batch = xcharg.

rec_batch = xcharg.

ENDIF.

IF iss_batch = ''.

tap_items-iss_batch = xcharg.

iss_batch = xcharg.

ENDIF.

ENDIF.

tap_items-rdconf = 'X'.

tap_items-matnr = xmatnr.

tap_items-werks = werks.

tap_items-lgort = xlgort.

tap_items-charg = xcharg.

tap_items-qty = issue_qty.

tap_items-recv_sloc = recv_sloc.

tap_items-iss_sloc = iss_sloc.

tap_items-spec_stock = spec_stock.

tap_items-rec_batch = rec_batch.

tap_items-iss_batch = iss_batch.

tap_items-vendor = vendor.

APPEND tap_items TO itap_items.

ELSE.

itap_index = sy-tabix.

tap_items-rdconf = 'X'.

tap_items-matnr = xmatnr.

tap_items-werks = werks.

tap_items-lgort = xlgort.

tap_items-charg = xcharg.

tap_items-qty = issue_qty.

tap_items-rec_batch = rec_batch.

tap_items-iss_batch = iss_batch.

tap_items-recv_sloc = recv_sloc.

tap_items-spec_stock = spec_stock.

tap_items-vendor = vendor.

IF rec_batch = ''.

tap_items-rec_batch = xcharg.

rec_batch = xcharg.

ELSE.

tap_items-rec_batch = rec_batch.

ENDIF.

APPEND tap_items TO itap_items.

  • MODIFY ITAP_ITEMS FROM TAP_ITEMS INDEX ITAP_INDEX. thiru

ENDIF.

ELSEIF i_marc-xchar = ''.

*if excess qty entered show them warning for 541

IF issue_qty > xmdgi-erfmg AND movetype = '541'.

issue_qty1 = issue_qty - xmdgi-erfmg.

message_id = 'ZRFCONSOLE' .

message_type = 'W' .

message_number = '001'.

message_var1 = 'Excess Qty '.

message_var2 = issue_qty1.

message_var3 = 'issued'.

message_var4 = 'Do you want to Continue'.

PERFORM warning_message.

IF msg_answ = 'N'.

CLEAR: issued_qty,issue_qty.

EXIT.

ENDIF.

ENDIF.

READ TABLE itap_items WITH KEY matnr = xmatnr lgort = xlgort .

IF sy-subrc <> 0.

IF recv_sloc = ''.

recv_sloc = xlgort.

ENDIF.

IF iss_sloc = ''.

iss_sloc = xlgort.

ENDIF.

IF movetype = '541' AND movetype <> '542'.

vendor = xmdgi-lifnr.

ENDIF.

tap_items-rdconf = 'X'.

tap_items-matnr = xmatnr.

tap_items-werks = werks.

tap_items-lgort = xlgort.

tap_items-qty = issue_qty.

tap_items-recv_sloc = recv_sloc.

tap_items-iss_sloc = iss_sloc.

tap_items-spec_stock = spec_stock.

tap_items-vendor = vendor.

APPEND tap_items TO itap_items.

ELSE.

itap_index = sy-tabix.

tap_items-rdconf = 'X'.

tap_items-matnr = xmatnr.

tap_items-werks = werks.

tap_items-lgort = xlgort.

tap_items-qty = issue_qty.

tap_items-recv_sloc = recv_sloc.

tap_items-iss_sloc = iss_sloc.

tap_items-spec_stock = spec_stock.

tap_items-vendor = vendor.

  • MODIFY ITAP_ITEMS FROM TAP_ITEMS INDEX ITAP_INDEX. thiru

APPEND tap_items TO itap_items.

ENDIF.

ELSE.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '055'.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

*update the qty in xmdgi

IF movetype = '541'.

READ TABLE xmdgi WITH KEY matnr = xmatnr.

xmdgi-erfmg = xmdgi-erfmg - issue_qty.

MODIFY xmdgi INDEX sy-tabix.

ENDIF.

WHEN 'SLOC'.

CLEAR ok_code.

IF movetype <> '325' AND movetype <> '343'.

IF xlgort = ''.

PERFORM sloc_unknown.

ELSE.

PERFORM sloc_single.

ENDIF.

ELSE.

PERFORM sloc_blocked_stock.

ENDIF.

WHEN 'DITM'.

CLEAR ok_code.

IF NOT itap_items[] IS INITIAL.

CALL SCREEN 500.

ELSE.

message_id = 'ZRFCONSOLE' .

message_type = 'E' .

message_number = '056'.

  • MESSAGE_VAR1 = WERKS.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

WHEN 'BACK'.

IF movetype = '541' OR movetype = '542'.

CLEAR: ok_code, xmatnr,xlgort,xcharg,issue_qty,vendor,spec_stock,

rec_batch,recv_sloc,tap_items,i_mchb,i_mard,iss_batch.

REFRESH:i_mard,i_mchb.

LEAVE TO SCREEN 1100.

ELSE.

CLEAR ok_code.

message_id = 'ZRFCONSOLE' .

message_type = 'W' .

message_number = '001'.

message_var1 = 'Are you sure you '.

message_var2 = 'want to exit?'.

PERFORM warning_message.

IF msg_answ = 'Y'.

CLEAR: ok_code, xmatnr,xlgort,xcharg,issue_qty,vendor,spec_stock,

rec_batch,recv_sloc,tap_items,i_mchb,i_mard,tap_items,werks,recv_mat,

header_txt,iss_batch.

.

REFRESH:i_mard,i_mchb,itap_items.

LEAVE TO SCREEN 300.

ENDIF.

ENDIF.

ENDCASE.

ENDMODULE. " USER_COMMAND_0200 INPUT

&----


*& Module USER_COMMAND_0500 INPUT

&----


  • text

----


MODULE user_command_0500 INPUT.

CASE ok_code.

WHEN 'PGDN'.

CLEAR ok_code.

IF tap_items-rdconf <> ''.

ENDIF.

temporary_index = tap_index + tap_init_size.

IF temporary_index > tap_total_lines.

EXIT.

ELSE.

tap_index = tap_index + tap_init_size.

current_line = tap_index.

ENDIF.

WHEN 'PGUP'.

CLEAR ok_code.

tap_index = tap_index - tap_init_size .

IF tap_index <= 0.

tap_index = 1.

ENDIF.

current_line = tap_index.

WHEN 'SAVE'.

PERFORM goods_issue.

PERFORM clear_all.

CALL SCREEN 300.

WHEN 'BACK'.

recv_sloc = tap_items-recv_sloc.

xlgort = tap_items-lgort.

xmatnr = tap_items-matnr.

xcharg = tap_items-charg.

issued_qty = tap_items-qty.

rec_batch = tap_items-rec_batch.

iss_batch = tap_items-iss_batch.

vendor = tap_items-vendor.

CLEAR: tap_items,tap_index.

tap_items-rdconf = 'X'.

IF movetype = '541' OR movetype = '542'.

LEAVE TO SCREEN 1100.

ELSE.

  • CLEAR: TAP_ITEMS,TAP_INDEX.

LEAVE TO SCREEN 200.

ENDIF.

ENDCASE.

ENDMODULE. " USER_COMMAND_0500 INPUT

&----


*& Module USER_COMMAND_0800 INPUT

&----


  • text

----


MODULE user_command_0800 INPUT.

CASE ok_code.

WHEN 'ENTER' OR 'DITM'.

CLEAR ok_code.

PERFORM verification.

CALL SCREEN 200.

WHEN 'CLEAR'.

CLEAR: werks,recv_sloc, recv_mat, header_txt.

WHEN 'BACK'.

CLEAR ok_code.

CLEAR: werks,recv_sloc, recv_mat, header_txt.

LEAVE TO SCREEN 300.

ENDCASE.

ENDMODULE. " USER_COMMAND_0800 INPUT

&----


*& Module USER_COMMAND_0900 INPUT

&----


  • text

----


MODULE user_command_0900 INPUT.

CASE ok_code.

WHEN 'BACK'.

CLEAR: ebeln,ebelp.

LEAVE TO SCREEN 300.

WHEN 'CLEAR'.

CLEAR: ebeln.

WHEN 'DITM' OR 'ENTER'.

CALL FUNCTION 'ME_READ_COMP_GOODS_ISSUE'

EXPORTING

ebeln = ebeln

ebelp = ebelp

TABLES

xmdgi = xmdgi

EXCEPTIONS

not_found_any = 01

not_found_one = 02

not_valid_any = 03

not_valid_one = 04.

CASE sy-subrc.

WHEN 0.

IF xmdgi[] IS INITIAL.

MESSAGE ID 'M7' TYPE 'E' NUMBER 033 WITH ebeln.

ELSE.

CALL SCREEN 1100.

ENDIF.

WHEN 1.

message_id = 'M7' .

message_type = 'E' .

message_number = '033'.

message_var1 = ebeln.

PERFORM error_message .

PERFORM clear_message.

EXIT.

  • MESSAGE ID 'M7' TYPE 'E' NUMBER 033 WITH EBELN.

WHEN 2.

message_id = 'M7' .

message_type = 'E' .

message_number = '150'.

message_var1 = ebeln.

message_var2 = ebelp.

PERFORM error_message .

PERFORM clear_message.

EXIT.

WHEN 3.

message_id = 'M7' .

message_type = 'E' .

message_number = '151'.

message_var1 = ebeln.

PERFORM error_message .

PERFORM clear_message.

EXIT.

WHEN 4.

IF NOT ebelp IS INITIAL.

message_id = 'M7' .

message_type = 'E' .

message_number = '152'.

message_var1 = ebeln.

message_var2 = ebelp.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ELSE.

message_id = 'M7' .

message_type = 'E' .

message_number = '153'.

message_var1 = ebeln.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

ENDCASE.

ENDCASE.

ENDMODULE. " USER_COMMAND_0900 INPUT

&----


*& Module USER_COMMAND_1100 INPUT

&----


  • text

----


MODULE user_command_1100 INPUT.

CASE ok_code.

WHEN 'PGDN'.

CLEAR ok_code.

temporary_index = po_index + tap_init_size.

IF temporary_index > po_lines.

EXIT.

ELSE.

po_index = po_index + tap_init_size.

ENDIF.

WHEN 'PGUP'.

CLEAR ok_code.

po_index = po_index - tap_init_size .

IF po_index <= 0.

po_index = 1.

ENDIF.

WHEN 'BACK'.

CLEAR ok_code.

message_id = 'ZRFCONSOLE' .

message_type = 'W' .

message_number = '001'.

message_var1 = 'Are you sure you '.

message_var2 = 'want to exit?'.

PERFORM warning_message.

IF msg_answ = 'Y'.

CLEAR: ok_code, xmatnr,xlgort,xcharg,issue_qty,vendor,spec_stock,

rec_batch,recv_sloc,tap_items,i_mchb,i_mard,iss_batch,issued_qty.

CLEAR: tap_index,xmdgi,tap_items,itap_items.

REFRESH: xmdgi,itap_items.

LEAVE TO SCREEN 900.

ENDIF.

WHEN 'ENTER' OR 'DITM'.

MOVE-CORRESPONDING xmdgi TO tap_items.

CALL SCREEN 200.

  • WHEN 'DITM'.

  • IF NOT ITAP_ITEMS[] IS INITIAL.

  • CALL SCREEN 500.

  • ENDIF.

ENDCASE.

ENDMODULE. " USER_COMMAND_1100 INPUT

&----


*& Module USER_COMMAND_0600 INPUT

&----


  • text

----


MODULE user_command_0600 INPUT.

CASE ok_code.

WHEN 'SEL'.

  • DATA : QTY LIKE RESB-BDMNG.

CLEAR: ok_code,qty.

*IF I_MCHB = '0,000'.

  • ISSUE_QTY = ''.

*ENDIF.

  • IF I_MCHB-RDCONF IS INITIAL AND I_MCHB-ISSUE_QTY <> ''.

IF i_mchb-issue_qty <> ''.

IF i_mchb-issue_qty > batch_qty.

  • DATA:SHORTFALL(18) TYPE C..

  • SHORTFALL = I_MCHB-ISSUE_QTY - BATCH_QTY.

  • CONDENSE SHORTFALL.

  • CONCATENATE 'BA Unrestricted-use' SHORTFALL 'EA' ':' INTO

  • MESSAGE_VAR1 SEPARATED BY SPACE.

errflag = 'X'.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '017'.

message_var2 = tap_items-matnr.

message_var3 = werks.

  • CONCATENATE I_MCHB-LGORT '' I_MCHB-CHARG INTO MESSAGE_VAR4 SEPARATED

  • BY SPACE.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

i_mchb-rdconf = 'X'.

IF i_mchb-rec_batch = ''.

  • I_MCHB-REC_BATCH = REC_BATCH.

  • ELSE.

i_mchb-rec_batch = i_mchb-charg.

ENDIF.

tap_items-rdconf = i_mchb-rdconf.

tap_items-matnr = xmatnr.

tap_items-werks = werks.

tap_items-lgort = i_mchb-lgort.

tap_items-qty = i_mchb-issue_qty.

tap_items-charg = i_mchb-charg.

tap_items-rec_batch = i_mchb-rec_batch.

READ TABLE itap_items WITH KEY matnr = xmatnr

lgort = tap_items-lgort charg = i_mchb-charg.

IF sy-subrc = 0.

MODIFY TABLE itap_items FROM tap_items.

MODIFY i_mchb INDEX batch_index TRANSPORTING issue_qty rdconf

rec_batch.

ELSE.

APPEND tap_items TO itap_items .

MODIFY i_mchb INDEX batch_index TRANSPORTING issue_qty rdconf

rec_batch.

ENDIF.

ELSEIF i_mchb-issue_qty = '0.000'.

i_mchb-rdconf = ''.

itap_items-rdconf = i_mchb-rdconf.

issue_qty = ''.

issued_qty = ''.

rec_batch = ''.

i_mchb-rec_batch = ''.

i_mchb-issue_qty = issue_qty.

MODIFY i_mchb INDEX batch_index TRANSPORTING issue_qty rdconf.

DELETE itap_items WHERE matnr = xmatnr AND lgort =

i_mchb-lgort AND charg = i_mchb-charg.

ELSE.

  • I_MCHB-RDCONF = ''.

  • ITAP_ITEMS-RDCONF = I_MCHB-RDCONF.

  • ISSUE_QTY = ''.

  • I_MCHB-ISSUE_QTY = ISSUE_QTY.

  • MODIFY I_MCHB INDEX BATCH_INDEX TRANSPORTING ISSUE_QTY RDCONF.

  • DELETE ITAP_ITEMS WHERE MATNR = XMATNR AND LGORT =

*I_MCHB-LGORT AND CHARG = I_MCHB-CHARG.

ENDIF.

WHEN 'CLEAR'.

i_mchb-rdconf = ''.

itap_items-rdconf = i_mchb-rdconf.

issue_qty = ''.

i_mchb-issue_qty = issue_qty.

MODIFY i_mchb INDEX batch_index TRANSPORTING issue_qty rdconf.

DELETE itap_items WHERE matnr = xmatnr AND lgort =

i_mchb-lgort AND charg = i_mchb-charg.

CLEAR: tap_items,itap_items,i_mchb.

WHEN 'PGDN'.

CLEAR: ok_code,issue_qty,issued_qty.

IF i_mchb-rdconf <> ''.

MODIFY i_mchb INDEX batch_index TRANSPORTING issue_qty rdconf.

ENDIF.

temporary_index = batch_index + tap_init_size.

IF temporary_index > batch_lines.

EXIT.

ELSE.

batch_index = batch_index + tap_init_size.

current_line = batch_index.

ENDIF.

WHEN 'PGUP'.

CLEAR: ok_code,issue_qty,issued_qty.

MODIFY i_mchb INDEX batch_index TRANSPORTING issue_qty rdconf.

batch_index = batch_index - tap_init_size .

IF batch_index <= 0.

batch_index = 1.

ENDIF.

current_line = batch_index.

WHEN 'BACK'.

CLEAR: issue_qty, batch_index,itap_items,issued_qty.

xmatnr = tap_items-matnr.

xlgort = tap_items-lgort.

xcharg = tap_items-charg.

issue_qty = tap_items-qty.

rec_batch = tap_items-rec_batch.

LEAVE TO SCREEN 200.

ENDCASE.

ENDMODULE. " USER_COMMAND_0600 INPUT

&----


*& Module USER_COMMAND_0700 INPUT

&----


  • text

----


MODULE user_command_0700 INPUT.

CASE ok_code.

WHEN 'SEL'.

CLEAR: ok_code,qty.

IF issue_qty <> ''.

IF issue_qty > i_mard-labst.

  • SHORTFALL = ISSUE_QTY - SLOC_QTY.

  • CONDENSE SHORTFALL.

  • CONCATENATE 'BA Unrestricted-use' SHORTFALL 'EA' ':' INTO

  • MESSAGE_VAR1 SEPARATED BY SPACE.

errflag = 'X'.

message_id = 'ZRFCONSOLE'.

message_type = 'E' .

message_number = '017'.

message_var2 = tap_items-matnr.

message_var3 = werks.

message_var4 = i_mard-lgort.

PERFORM error_message .

PERFORM clear_message.

EXIT.

ENDIF.

i_mard-rdconf = 'X'.

tap_items-rdconf = i_mard-rdconf.

tap_items-matnr = xmatnr.

tap_items-werks = werks.

tap_items-lgort = i_mard-lgort.

tap_items-qty = issue_qty.

i_mard-issue_qty = issue_qty.

READ TABLE itap_items WITH KEY matnr = xmatnr

lgort = tap_items-lgort .

IF sy-subrc = 0.

itap_index = sy-tabix.

MODIFY itap_items FROM tap_items INDEX itap_index.

MODIFY i_mard INDEX storage_index TRANSPORTING issue_qty

rdconf.

ELSE.

APPEND tap_items TO itap_items .

MODIFY i_mard INDEX storage_index TRANSPORTING issue_qty

rdconf .

ENDIF.

ELSEIF issue_qty = ''.

i_mard-rdconf = ''.

itap_items-rdconf = i_mard-rdconf.

issue_qty = ''.

i_mard-issue_qty = issue_qty.

MODIFY i_mard INDEX storage_index TRANSPORTING issue_qty rdconf

.

DELETE itap_items WHERE matnr = xmatnr AND lgort =

i_mard-lgort .

ELSE.

  • I_MCHB-RDCONF = ''.

  • ITAP_ITEMS-RDCONF = I_MCHB-RDCONF.

  • ISSUE_QTY = ''.

  • I_MARD-ISSUE_QTY = ISSUE_QTY.

  • MODIFY I_MARD INDEX STORAGE_INDEX TRANSPORTING ISSUE_QTY .

  • DELETE ITAP_ITEMS WHERE MATNR = XMATNR AND LGORT =

*I_MARD-LGORT .

ENDIF.

WHEN 'CLEAR'.

i_mard-rdconf = ''.

itap_items-rdconf = i_mard-rdconf.

issue_qty = ''.

i_mard-issue_qty = issue_qty.

MODIFY i_mard INDEX storage_index TRANSPORTING issue_qty rdconf

.

DELETE itap_items WHERE matnr = xmatnr AND lgort =

i_mard-lgort .

CLEAR: tap_items,itap_items,i_mchb.

WHEN 'PGDN'.

CLEAR: ok_code,issue_qty.

temporary_index = storage_index + tap_init_size.

IF temporary_index > storage_lines.

EXIT.

ELSE.

storage_index = storage_index + tap_init_size.

ENDIF.

WHEN 'PGUP'.

CLEAR: ok_code,issue_qty.

storage_index = storage_index - tap_init_size .

IF batch_index <= 0.

batch_index = 1.

ENDIF.

WHEN 'BACK'.

CLEAR: issue_qty, batch_index.

xmatnr = tap_items-matnr.

xlgort = tap_items-lgort.

  • XCHARG = TAP_ITEMS-CHARG.

  • ISSUE_QTY = TAP_ITEMS-QTY.

PERFORM move_num_to_char USING tap_items-qty CHANGING issued_qty.

LEAVE TO SCREEN 200.

ENDCASE.

ENDMODULE. " USER_COMMAND_0700 INPUT

Former Member
0 Kudos

Hi,

There is a limit on maximum permitted number of nested screen....... and that is correctly 50.

This problem may be caused by too much use of statement

'Call Screen...'

While coding... for going back, try to avoid using call screen, if possible....use leave screen.

Else you can face exception LIST_TOO_MANY_LPROS

<b>Reward points</b>

Regards