Source
Source
MESSAGE-ID z1.
************************************************************************
* PROGRAM NAME: ZMR_STO_CONSIGNMENT CREATE DATE: 03/05/2002 *
* AUTHOR NAME: MANGINIRJ LAST UPDATE: 03/05/2002 *
*
*
* This program allows the user to choose stock transport orders *
* from the Delivery Due List, select consignment stock to convert *
* to own stock to satisfy the orders, then post the stock to our *
* own stock using 411 K movement type. Includes automatic batch *
* and quantity proposal functionality. *
*----------------------------------------------------------------------*
* INCLUDES: ZMR_STO_CONSIGNMENT_GEN_DECL *
* <ICON>
*
* ZYX_UOM_CONVERT
*
*----------------------------------------------------------------------*
* CHANGE HISTORY
*
*----------------------------------------------------------------------*
* DATE | DEVELOPER | DESCRIPTION
*
*----------------------------------------------------------------------*
* 03/05/02 | MANGINIRJ | ORIGINAL DEVELOPMENT *
* | |
*
* 04/02/02 | MANGINIRJ | Check goods issue history for each *
* | [DEVK966931] | PO line item. If goods issued to *
* | | within delivery tolerance, delete *
* | | from list. If partially goods issued *
* | | but not within delivery tolerance, *
* | | reflect remaining quantity still *
* | | unissued.
*
* | |
*
* 07/25/02 | MANGINIRJ | Fix for Halls Warehouse (pass a *
* | [DEVK971355] | required field from the first WM *
* | | posting to the second.
*
* | |
*
* 06/25/07 | KIRKCH | Update FIFO date on quant to match *
* | [DEVK9A0BAD] | original K consign date when moving *
* | | to own.
*
* 03/15/10 | Wislocki sir8906 | Ignore PO lines item flagged for del *
* | |
*
* 04/09/10 | CHUNUKM SIR 9029 | Populate Min. Lot Size and Rounding *
* | DV4K902364 | Value when using Material Move search*
* MM15608 |11/15/13 | Michael Birchbauer | Ignore stock in storage *
* | | DV5K906628 | type 902
*
************************************************************************
INCLUDE zmr_sto_consignment_gen_decl.
INCLUDE <icon>.
INITIALIZATION.
AT SELECTION-SCREEN.
CLEAR material_move.
IF s_vstel IS INITIAL.
IF p_matnr-low IS INITIAL AND
p_werks IS INITIAL.
MESSAGE e044(z2) WITH 'Shipping Point is required'.
ELSE.
MOVE 'X' TO material_move.
IF p_matnr-low IS INITIAL.
MESSAGE e044(z2) WITH 'Plant and Material'
'are required' 'for Material Move'.
ELSEIF p_werks IS INITIAL.
MESSAGE e044(z2) WITH 'Plant and Material'
'are required' 'for Material Move'.
ENDIF.
CLEAR w_slabs.
ENDLOOP.
ENDIF.
IF w_slabs > 0.
EXIT.
ENDIF.
ENDSELECT.
IF w_slabs > 0.
ELSE.
MESSAGE e000 WITH 'No consignment stock for material(s)'.
ENDIF.
ENDIF.
ELSE.
IF p_matnr IS INITIAL AND
p_werks IS INITIAL.
ELSE.
MESSAGE e000 WITH 'Enter Either Mass STOs or Material Move'.
ENDIF.
ENDIF.
START-OF-SELECTION.
IF s_werks IS INITIAL.
ELSE.
LOOP AT s_werks.
AUTHORITY-CHECK OBJECT 'M_BEST_WRK'
ID 'ACTVT' DUMMY
ID 'WERKS' FIELD s_werks-low.
IF sy-subrc <> 0.
MESSAGE e044(z2) WITH sy-uname 'is not Authorized'
'to Access Plant' s_werks-low.
ENDIF.
ENDLOOP.
ENDIF.
IF p_werks IS INITIAL.
ELSE.
AUTHORITY-CHECK OBJECT 'M_BEST_WRK'
ID 'ACTVT' DUMMY
ID 'WERKS' FIELD p_werks.
IF sy-subrc <> 0.
MESSAGE e044(z2) WITH sy-uname 'is not Authorized'
'to Access Plant' p_werks.
ENDIF.
ENDIF.
CLEAR program_exit.
IF material_move = 'X'.
PERFORM prepare_screen_200_matnr.
CLEAR screen_back.
PERFORM display_screen_200.
IF program_exit <> space.
EXIT.
ENDIF.
CLEAR error_count.
PERFORM initial_posting_attempt USING 'N'.
LOOP AT i_stk_cnv INTO zmstk_cnv.
* PERFORM DO_POSTING USING 'N'. "already done above
IF zmstk_cnv-rc = 0.
PERFORM do_posting_2 USING 'N'.
ENDIF.
IF zmstk_cnv-rc = 0.
PERFORM do_posting_3 USING 'N'.
ENDIF.
MODIFY i_stk_cnv FROM zmstk_cnv.
ENDLOOP.
IF error_count = 0.
MESSAGE s525.
ELSE.
MESSAGE s526 WITH error_count.
ENDIF.
PERFORM build_sto_due_list.
IF program_exit <> space.
EXIT.
ENDIF.
CLEAR error_count.
PERFORM initial_posting_attempt USING 'N'.
LOOP AT i_stk_cnv INTO zmstk_cnv.
* PERFORM DO_POSTING USING 'N'. "already done above
IF zmstk_cnv-rc = 0.
PERFORM do_posting_2 USING 'N'.
ENDIF.
IF zmstk_cnv-rc = 0.
PERFORM do_posting_3 USING 'N'.
ENDIF.
MODIFY i_stk_cnv FROM zmstk_cnv.
ENDLOOP.
IF error_count = 0.
MESSAGE s525.
ELSE.
MESSAGE s526 WITH error_count.
ENDIF.
*---------------------------------------------------------------------*
* FORM BUILD_STO_DUE_LIST
*
*---------------------------------------------------------------------*
* ........
*
*---------------------------------------------------------------------*
FORM build_sto_due_list.
sy-subrc = 0.
READ TABLE i_stk_cnv INTO zmstk_cnv
WITH KEY matnr = zmsto_due-matnr
werks = zmsto_due-reswk
BINARY SEARCH.
IF sy-subrc <> 0.
DELETE i_sto_due.
CONTINUE.
ENDIF.
sy-subrc = 0.
READ TABLE i_stk_req INTO zmstk_req
WITH KEY matnr = zmsto_due-matnr
werks = zmsto_due-reswk
BINARY SEARCH.
IF sy-subrc <> 0.
zmsto_due-lbkum = 0.
ELSE.
zmsto_due-lbkum = zmstk_req-lbkum.
IF zmstk_req-meinsunrest = zmsto_due-meins.
ELSE.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
EXPORTING
input = zmsto_due-lbkum
* NO_TYPE_CHECK = 'X'
* ROUND_SIGN = ' '
unit_in = zmstk_req-meinsunrest
unit_out = zmsto_due-meins
IMPORTING
* ADD_CONST =
* DECIMALS =
* DENOMINATOR =
* NUMERATOR =
output = w_output_qty
EXCEPTIONS
OTHERS = 10.
IF sy-subrc <> 0.
zmsto_due-lbkum = 0.
ELSE.
zmsto_due-lbkum = w_output_qty.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM DISPLAY_STO_DUE_LIST *
*---------------------------------------------------------------------*
* ........
*
*---------------------------------------------------------------------*
FORM display_sto_due_list.
ENDFORM.
*---------------------------------------------------------------------*
* FORM PREPARE_SCREEN_200
*
*---------------------------------------------------------------------*
* ........
*
*---------------------------------------------------------------------*
FORM prepare_screen_200.
*** Get the base unit of measure from MARA for all
*** materials selected by the user.
REFRESH i_sel_mara.
LOOP AT temp_sto_due.
MOVE temp_sto_due-matnr TO i_sel_mara-matnr.
APPEND i_sel_mara.
ENDLOOP.
SORT i_sel_mara BY matnr.
DELETE ADJACENT DUPLICATES FROM i_sel_mara COMPARING matnr.
REFRESH : i_mara, i_mbew.
ENDIF.
CLEAR w_clabs.
SELECT SUM( clabs ) INTO w_clabs
FROM mchb
WHERE matnr = temp_matnr AND
werks = temp_reswk AND
clabs > 0.
CLEAR w_slabs.
SELECT SUM( slabs )
INTO w_slabs
FROM mkol
WHERE matnr = temp_matnr AND
werks = temp_reswk AND
sobkz = 'K' AND
slabs > 0.
MOVE temp_matnr TO zmstk_req-matnr.
MOVE temp_reswk TO zmstk_req-werks.
MOVE temp_meins TO zmstk_req-meinsreq.
MOVE temp_meins TO zmstk_req-meinsavail.
MOVE w_bstmi TO zmstk_req-bstmi.
MOVE w_bstrf TO zmstk_req-bstrf.
MOVE w_clabs TO zmstk_req-clabs.
zmstk_req-total_stk = w_clabs + w_slabs.
APPEND zmstk_req TO i_stk_req.
CLEAR zmstk_req.
* ENDSELECT.
ENDIF.
ENDIF.
CLEAR i_mara.
READ TABLE i_mara
WITH KEY matnr = temp_sto_due-matnr
BINARY SEARCH.
temp_matnr = temp_sto_due-matnr.
temp_reswk = temp_sto_due-reswk.
temp_meins = i_mara-meins.
CLEAR: w_conv_qty, w_conv_uom.
PERFORM determine_uom_conversion
USING temp_sto_due-menge
temp_sto_due-meins
i_mara-matnr
i_mara-meins
CHANGING w_conv_qty
w_conv_uom.
ADD w_conv_qty TO zmstk_req-slabsreq.
ENDLOOP.
CLEAR w_clabs.
SELECT SUM( clabs )
INTO w_clabs
FROM mchb
WHERE matnr = temp_matnr AND
werks = temp_reswk AND
clabs > 0.
CLEAR w_slabs.
SELECT SUM( slabs )
INTO w_slabs
FROM mkol
WHERE matnr = temp_matnr AND
werks = temp_reswk AND
sobkz = 'K' AND
slabs > 0.
MOVE w_bstmi TO zmstk_req-bstmi.
MOVE w_bstrf TO zmstk_req-bstrf.
MOVE temp_matnr TO zmstk_req-matnr.
MOVE temp_reswk TO zmstk_req-werks.
MOVE temp_meins TO zmstk_req-meinsreq.
MOVE temp_meins TO zmstk_req-meinsavail.
MOVE w_clabs TO zmstk_req-clabs.
zmstk_req-total_stk = w_clabs + w_slabs.
APPEND zmstk_req TO i_stk_req.
CLEAR zmstk_req.
* ENDSELECT.
ENDIF.
*** Get the T320 config. table. This table maps each
*** plant/stor.loc. combination to a specific warehouse.
*** If a record does not exist in this table for a
*** particular plant/stor.loc., then it is not warehouse
*** managed, and we will get all stock from MKOL.
*** Also, if there is a record in T320 but T320-OBEST
*** is nonblank, then it is "light" warehouse management.
*** There will be no consignment quants, and so we'll still
*** want to get the stock from MKOL. Otherwise, if there's
*** a record in T320 and OBEST is blank, it's full warehouse
*** management, and we'll get the quants from LQUA.
REFRESH i_t320.
SELECT * FROM t320 INTO TABLE i_t320.
SORT i_t320 BY werks lgort.
CLEAR i_mard.
REFRESH i_mard.
CLEAR zmstk_req-lbkum.
LOOP AT i_mard.
zmstk_req-lbkum = i_mard-labst.
EXIT.
ENDLOOP.
ENDLOOP.
ENDIF.
PERFORM determine_uom_conversion
USING zmstk_cnv-slabsavail
zmstk_cnv-meinsavail
zmstk_cnv-matnr
zmstk_req-meinsreq
CHANGING w_conv_qty
w_conv_uom.
ADD w_conv_qty TO zmstk_req-slabsavail.
MODIFY i_stk_req FROM zmstk_req INDEX sy-tabix.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM PREPARE_SCREEN_200_MATNR *
*---------------------------------------------------------------------*
* DO screen 200 for only one Material and plant *
*---------------------------------------------------------------------*
FORM prepare_screen_200_matnr.
CLEAR w_slabs.
ENDSELECT.
ENDFORM.
*---------------------------------------------------------------------*
* FORM GET_EACH_MATERIAL
*
*---------------------------------------------------------------------*
* ........
*
*---------------------------------------------------------------------*
FORM get_each_material.
w_conv_qty = 0.
w_conv_uom = temp_meins.
temp_reswk = p_werks.
*Add min. lot size (bstmi) and rounding value (bstrf) "DV4K902364
IF temp_matnr = w_prev_matnr.
MOVE w_bstmi TO zmstk_req-bstmi.
MOVE w_bstrf TO zmstk_req-bstrf.
ELSE.
CLEAR: w_bstmi,
w_bstrf.
MOVE temp_matnr to w_prev_matnr.
SELECT SINGLE bstmi bstrf
INTO (w_bstmi, w_bstrf)
FROM marc
WHERE matnr = temp_matnr AND
werks = temp_reswk.
ENDIF.
MOVE w_bstmi TO zmstk_req-bstmi.
MOVE w_bstrf TO zmstk_req-bstrf.
*end of code "DV4K902364
MOVE temp_matnr TO zmstk_req-matnr.
MOVE temp_reswk TO zmstk_req-werks.
MOVE temp_meins TO zmstk_req-meinsreq.
MOVE temp_meins TO zmstk_req-meinsavail.
APPEND zmstk_req TO i_stk_req.
CLEAR zmstk_req.
ENDFORM.
*---------------------------------------------------------------------*
* FORM GET_MATERIAL_CONSIGNMENT *
*---------------------------------------------------------------------*
* ........
*
*---------------------------------------------------------------------*
FORM get_material_consignment.
*** Now get the available consignment stock batches:
DATA: w_sonum(16) TYPE c,
w_lifnr_ext(10) TYPE c,
w_lifnr_int(10) TYPE c.
*** Get the T320 config. table. This table maps each
*** plant/stor.loc. combination to a specific warehouse.
*** If a record does not exist in this table for a
*** particular plant/stor.loc., then it is not warehouse
*** managed, and we will get all stock from MKOL.
*** Also, if there is a record in T320 but T320-OBEST
*** is nonblank, then it is "light" warehouse management.
*** There will be no consignment quants, and so we'll still
*** want to get the stock from MKOL. Otherwise, if there's
*** a record in T320 and OBEST is blank, it's full warehouse
*** management, and we'll get the quants from LQUA.
REFRESH i_t320.
SELECT * FROM t320 INTO TABLE i_t320.
SORT i_t320 BY werks lgort.
*Output min. lot size and rounding lot size in Material Move "DV4K902364
LOOP AT i_stk_cnv INTO zmstk_cnv.
READ TABLE i_stk_req INTO zmstk_req
WITH KEY matnr = zmstk_cnv-matnr
werks = zmstk_cnv-werks
BINARY SEARCH.
if sy-subrc = 0.
zmstk_cnv-bstmi = zmstk_req-bstmi.
zmstk_cnv-bstrf = zmstk_req-bstrf.
modify i_stk_cnv from zmstk_cnv TRANSPORTING bstrf bstmi.
endif.
endloop.
CLEAR i_mard.
REFRESH i_mard.
CLEAR zmstk_req-lbkum.
LOOP AT i_mard.
zmstk_req-lbkum = i_mard-labst.
EXIT.
ENDLOOP.
ENDLOOP.
ENDIF.
PERFORM determine_uom_conversion
USING zmstk_cnv-slabsavail
zmstk_cnv-meinsavail
zmstk_cnv-matnr
zmstk_req-meinsreq
CHANGING w_conv_qty
w_conv_uom.
ADD w_conv_qty TO zmstk_req-slabsavail.
MODIFY i_stk_req FROM zmstk_req INDEX sy-tabix.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM DISPLAY_SCREEN_200
*
*---------------------------------------------------------------------*
* ........
*
*---------------------------------------------------------------------*
FORM display_screen_200.
ENDFORM.
*---------------------------------------------------------------------*
* FORM CHECK_STO_GOODS_ISSUES *
*---------------------------------------------------------------------*
* ........
*
*---------------------------------------------------------------------*
FORM check_sto_goods_issues.
ENDFORM.
*---------------------------------------------------------------------*
* FORM GENERATE_STK_CONV_PROPOSAL *
*---------------------------------------------------------------------*
* ........
*
*---------------------------------------------------------------------*
FORM generate_stk_conv_proposal.
*** Clear out batches whose quantity is not 'fixed'. These will
*** be re-proposed.
LOOP AT i_stk_cnv INTO zmstk_cnv WHERE fixed = space.
CLEAR zmstk_cnv-slabsconv.
MODIFY i_stk_cnv FROM zmstk_cnv.
ENDLOOP.
*** Compute the net requirement (total req - fixed user entries)
*** Then go batch-by-batch and apply the requirements to actual
*** batches.
LOOP AT i_stk_req INTO zmstk_req.
LOOP AT i_stk_cnv INTO zmstk_cnv
WHERE matnr = zmstk_req-matnr
AND werks = zmstk_req-werks
AND fixed <> space.
SUBTRACT zmstk_cnv-slabsconv FROM zmstk_req-slabsreq.
ENDLOOP.
CHECK zmstk_req-slabsreq > 0.
LOOP AT i_stk_cnv INTO zmstk_cnv
WHERE matnr = zmstk_req-matnr
AND werks = zmstk_req-werks
AND fixed = space.
IF zmstk_cnv-slabsavail < zmstk_req-slabsreq.
MOVE zmstk_cnv-slabsavail TO zmstk_cnv-slabsconv.
ELSE.
MOVE zmstk_req-slabsreq TO zmstk_cnv-slabsconv.
ENDIF.
SUBTRACT zmstk_cnv-slabsconv FROM zmstk_req-slabsreq.
MODIFY i_stk_cnv FROM zmstk_cnv.
ENDLOOP.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM INITIAL_POSTING_ATTEMPT *
*---------------------------------------------------------------------*
* In the initial posting attempt, consolidate similar *
* MB1B 411-K's into a single document as multiple line items. *
*---------------------------------------------------------------------*
* --> P_MODE
*
*---------------------------------------------------------------------*
FORM initial_posting_attempt USING p_mode TYPE c.
REFRESH i_xfer_doc.
LOOP AT i_xfer_doc.
REFRESH bdcdata.
PERFORM bdc_dynpro USING: 'SAPMM07M' '0400'.
PERFORM bdc_field USING: 'RM07M-BWARTWA' '411',
'RM07M-SOBKZ' 'K',
'RM07M-WERKS' i_xfer_doc-werks,
'RM07M-GRUND' space,
'RM07M-LGORT' i_xfer_doc-lgort,
'XFULL' space.
ENDLOOP.
CLEAR zmstk_cnv.
sy-subrc = 0.
CALL TRANSACTION 'MB1B' USING bdcdata
MODE w_mode UPDATE 'S'.
MOVE sy-subrc TO zmstk_cnv-rc.
IF zmstk_cnv-rc <> 0.
MOVE 1001 TO zmstk_cnv-rc.
ENDIF.
CLEAR zmstk_cnv-message.
MOVE sy-msgno TO w_msgno.
CALL FUNCTION 'RH_MESSAGE_GET'
EXPORTING
arbgb = sy-msgid
msgnr = w_msgno
msgv1 = sy-msgv1
msgv2 = sy-msgv2
msgv3 = sy-msgv3
msgv4 = sy-msgv4
IMPORTING
msgtext = zmstk_cnv-message
EXCEPTIONS
message_not_found = 1
OTHERS = 2.
IF zmstk_cnv-rc = 0.
MOVE icon_green_light TO zmstk_cnv-icon.
ELSE.
MOVE icon_red_light TO zmstk_cnv-icon.
ADD 1 TO error_count.
ENDIF.
CLEAR: zmstk_cnv-mblnr,
zmstk_cnv-tanum_1,
zmstk_cnv-tanum_2,
zmstk_cnv-temp_lgtyp,
zmstk_cnv-temp_lgpla.
IF zmstk_cnv-rc = 0.
CLEAR w_mblnr.
MOVE sy-msgv1 TO w_mblnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_mblnr
IMPORTING
output = zmstk_cnv-mblnr.
REFRESH i_mkpf.
SELECT mblnr mjahr
FROM mkpf
INTO TABLE i_mkpf
WHERE mblnr = zmstk_cnv-mblnr.
SORT i_mkpf BY mjahr DESCENDING.
IF NOT i_mkpf[] IS INITIAL.
READ TABLE i_mkpf INDEX 1.
SELECT SINGLE lgtyp lgpla
FROM mseg
INTO (zmstk_cnv-temp_lgtyp, zmstk_cnv-temp_lgpla)
WHERE mblnr = i_mkpf-mblnr
AND mjahr = i_mkpf-mjahr
AND zeile = '0001'.
ENDIF.
ENDIF.
CLEAR zmstk_cnv.
ENDFORM.
*---------------------------------------------------------------------*
* FORM DO_POSTING
*
*---------------------------------------------------------------------*
* First posting: Inventory Management transfer posting, movement *
* type 411 K, via transaction MB1B *
*---------------------------------------------------------------------*
* --> P_MODE
*
*---------------------------------------------------------------------*
FORM do_posting USING p_mode TYPE c.
REFRESH bdcdata.
sy-subrc = 0.
CALL TRANSACTION 'MB1B' USING bdcdata
MODE w_mode UPDATE 'S'.
MOVE sy-subrc TO zmstk_cnv-rc.
IF zmstk_cnv-rc <> 0.
MOVE 1001 TO zmstk_cnv-rc.
ENDIF.
CLEAR zmstk_cnv-message.
MOVE sy-msgno TO w_msgno.
CALL FUNCTION 'RH_MESSAGE_GET'
EXPORTING
arbgb = sy-msgid
msgnr = w_msgno
msgv1 = sy-msgv1
msgv2 = sy-msgv2
msgv3 = sy-msgv3
msgv4 = sy-msgv4
IMPORTING
msgtext = zmstk_cnv-message
EXCEPTIONS
message_not_found = 1
OTHERS = 2.
IF zmstk_cnv-rc = 0.
MOVE icon_green_light TO zmstk_cnv-icon.
ELSE.
MOVE icon_red_light TO zmstk_cnv-icon.
ADD 1 TO error_count.
ENDIF.
CLEAR: zmstk_cnv-mblnr,
zmstk_cnv-tanum_1,
zmstk_cnv-tanum_2,
zmstk_cnv-temp_lgtyp,
zmstk_cnv-temp_lgpla.
IF zmstk_cnv-rc = 0.
CLEAR w_mblnr.
MOVE sy-msgv1 TO w_mblnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_mblnr
IMPORTING
output = zmstk_cnv-mblnr.
REFRESH i_mkpf.
SELECT mblnr mjahr
FROM mkpf
INTO TABLE i_mkpf
WHERE mblnr = zmstk_cnv-mblnr.
SORT i_mkpf BY mjahr DESCENDING.
IF NOT i_mkpf[] IS INITIAL.
READ TABLE i_mkpf INDEX 1.
SELECT SINGLE lgtyp lgpla
FROM mseg
INTO (zmstk_cnv-temp_lgtyp, zmstk_cnv-temp_lgpla)
WHERE mblnr = i_mkpf-mblnr
AND mjahr = i_mkpf-mjahr
AND zeile = '0001'.
ENDIF.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM DO_POSTING_2
*
*---------------------------------------------------------------------*
* Second posting: Warehouse management transfer order, movement type *
* 999 K, via transaction LT01. *
*---------------------------------------------------------------------*
* --> P_MODE
*
*---------------------------------------------------------------------*
FORM do_posting_2 USING p_mode TYPE c.
REFRESH bdcdata.
ENDFORM.
*---------------------------------------------------------------------*
* FORM DO_POSTING_3
*
*---------------------------------------------------------------------*
* Third posting: Warehouse management transfer order, movement type *
* 999, via transaction LT01.
*
*---------------------------------------------------------------------*
* --> P_MODE
*
*---------------------------------------------------------------------*
FORM do_posting_3 USING p_mode TYPE c.
REFRESH bdcdata.
IF zmstk_cnv-rc = 0.
CLEAR zmstk_cnv-message.
MOVE '527' TO w_msgno.
CALL FUNCTION 'RH_MESSAGE_GET'
EXPORTING
arbgb = 'Z1'
msgnr = w_msgno
msgv1 = zmstk_cnv-mblnr
msgv2 = zmstk_cnv-tanum_1
msgv3 = zmstk_cnv-tanum_2
msgv4 = space
IMPORTING
msgtext = zmstk_cnv-message
EXCEPTIONS
message_not_found = 1
OTHERS = 2.
ENDIF.
** KIRKCH - MM3644 - Update quant date to match original
** consignment create date - Proj.3826 -
** done Dec 2007.
IF zmstk_cnv-rc = 0.
Clear W_NLQNR.
Select NLQNR from LTAP
into W_NLQNR
where LGNUM = zmstk_cnv-lgnum
and TANUM = zmstk_cnv-tanum_2.
endselect.
If sy-subrc = 0.
UPDATE LQUA
SET WDATU = zmstk_cnv-ersda
WENUM = zmstk_cnv-mblnr
where LGNUM = zmstk_cnv-lgnum
and LQNUM = W_NLQNR.
ENDIF.
ENDIF.
** End of KIRKCH - MM3644.
ENDFORM.
*---------------------------------------------------------------------*
* FORM BDC_DYNPRO
*
*---------------------------------------------------------------------*
* ........
*
*---------------------------------------------------------------------*
* --> P_PROGRAM
*
* --> P_DYNPRO
*
*---------------------------------------------------------------------*
FORM bdc_dynpro USING p_program p_dynpro.
CLEAR bdcdata.
MOVE p_program TO bdcdata-program.
MOVE p_dynpro TO bdcdata-dynpro.
MOVE 'X' TO bdcdata-dynbegin.
APPEND bdcdata.
CLEAR bdcdata.
ENDFORM.
*---------------------------------------------------------------------*
* FORM BDC_FIELD
*
*---------------------------------------------------------------------*
* ........
*
*---------------------------------------------------------------------*
* --> P_FNAM
*
* --> P_FVAL
*
*---------------------------------------------------------------------*
FORM bdc_field USING p_fnam p_fval.
CLEAR bdcdata.
MOVE p_fnam TO bdcdata-fnam.
MOVE p_fval TO bdcdata-fval.
APPEND bdcdata.
CLEAR bdcdata.
ENDFORM.
INCLUDE zyx_uom_convert.
*&---------------------------------------------------------------------*
*& Form USER_OK_TC
*
*&---------------------------------------------------------------------*
FORM user_ok_tc USING p_tc_name TYPE dynfnam
p_table_name
p_mark_name
CHANGING p_ok LIKE sy-ucomm.
* WHEN 'SASCEND' OR
* 'SDESCEND'. "sort column
* PERFORM FCODE_SORT_TC USING P_TC_NAME
* l_ok.
ENDCASE.
*&---------------------------------------------------------------------*
*& Form FCODE_INSERT_ROW
*
*&---------------------------------------------------------------------*
FORM fcode_insert_row
USING p_tc_name TYPE dynfnam
p_table_name .
*&---------------------------------------------------------------------*
*& Form FCODE_DELETE_ROW
*
*&---------------------------------------------------------------------*
FORM fcode_delete_row
USING p_tc_name TYPE dynfnam
p_table_name
p_mark_name .
IF <mark_field> = 'X'.
DELETE <table> INDEX syst-tabix.
IF sy-subrc = 0.
<tc>-lines = <tc>-lines - 1.
ENDIF.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form COMPUTE_SCROLLING_IN_TC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
* -->P_OK ok code
*----------------------------------------------------------------------*
FORM compute_scrolling_in_tc USING p_tc_name
p_ok.
*-BEGIN OF LOCAL DATA--------------------------------------------------*
DATA l_tc_new_top_line TYPE i.
DATA l_tc_name LIKE feld-name.
DATA l_tc_lines_name LIKE feld-name.
DATA l_tc_field_name LIKE feld-name.
* is no line filled?
*
IF <tc>-lines = 0.
* yes, ...
*
l_tc_new_top_line = 1.
ELSE.
* no, ...
*
CALL FUNCTION 'SCROLLING_IN_TABLE'
EXPORTING
entry_act = <tc>-top_line
entry_from = 1
entry_to = <tc>-lines
last_page_full = 'X'
loops = <lines>
ok_code = p_ok
overlapping = 'X'
IMPORTING
entry_new = l_tc_new_top_line
EXCEPTIONS
no_entry_or_page_act = 01
no_entry_to = 02
no_ok_code_or_page_go = 03
OTHERS = 99.
ENDIF.
IF syst-subrc = 0.
IF l_tc_name = p_tc_name.
* set actual column
*
SET CURSOR FIELD l_tc_field_name LINE 1.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FCODE_TC_MARK_LINES
*&---------------------------------------------------------------------*
* marks all TableControl lines
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
*----------------------------------------------------------------------*
FORM fcode_tc_mark_lines USING p_tc_name
p_table_name
p_mark_name.
*-BEGIN OF LOCAL DATA--------------------------------------------------*
DATA l_table_name LIKE feld-name.
<mark_field> = 'X'.
ENDLOOP.
ENDFORM. "fcode_tc_mark_lines
*&---------------------------------------------------------------------*
*& Form FCODE_TC_DEMARK_LINES
*&---------------------------------------------------------------------*
* demarks all TableControl lines
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
*----------------------------------------------------------------------*
FORM fcode_tc_demark_lines USING p_tc_name
p_table_name
p_mark_name .
*-BEGIN OF LOCAL DATA--------------------------------------------------*
DATA l_table_name LIKE feld-name.
<mark_field> = space.
ENDLOOP.
ENDFORM. "fcode_tc_mark_lines
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'SCREEN0100'.
SET TITLEBAR '100'.
CLEAR ok_code.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
IF ok_code = 'PROPOSE'.
CLEAR ok_code.
CLEAR screen_cancelled.
SET SCREEN 0.
LEAVE SCREEN.
ELSEIF ok_code = 'CANCEL'.
CLEAR ok_code.
SET SCREEN 0.
LEAVE SCREEN.
ENDIF.
CLEAR ok_code.
IF material_move = 'X'.
ELSE.
LOOP AT i_stk_req INTO zmstk_req.
MODIFY i_stk_cnv
FROM zmstk_cnv
INDEX stk_c-current_line.
ENDMODULE.
* INPUT MODULE FOR TABLECONTROL 'STK_C': PROCESS USER COMMAND
MODULE stk_c_user_command INPUT.
PERFORM user_ok_tc USING 'STK_C'
'I_STK_CNV'
' '
CHANGING ok_code.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0200 OUTPUT.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0200 INPUT.
IF ok_code = 'PROCESS'.
CLEAR ok_code.
CLEAR screen_cancelled.
SET SCREEN 0.
LEAVE SCREEN.
ELSEIF ok_code = 'REPROPOSE'.
CLEAR ok_code.
PERFORM generate_stk_conv_proposal.
ELSEIF ok_code = 'CANCEL'.
CLEAR ok_code.
SET SCREEN 0.
LEAVE SCREEN.
ELSEIF ok_code = 'PICK0200'.
CLEAR ok_code.
CLEAR w_field.
GET CURSOR FIELD w_field.
CLEAR w_index.
GET CURSOR LINE w_index.
SUBTRACT 1 FROM w_index.
IF w_field CS 'ZMSTK_REQ'.
ADD stk_r-top_line TO w_index.
CLEAR zmstk_req.
READ TABLE i_stk_req INTO zmstk_req INDEX w_index.
SET PARAMETER ID 'MAT' FIELD zmstk_req-matnr.
SET PARAMETER ID 'WRK' FIELD zmstk_req-werks.
SET PARAMETER ID 'BERID' FIELD zmstk_req-werks.
SET PARAMETER ID 'PRR' FIELD 'ZI'.
CALL TRANSACTION 'CO09' AND SKIP FIRST SCREEN.
ELSEIF w_field CS 'ZMSTK_CNV'.
ADD stk_c-top_line TO w_index.
CLEAR zmstk_cnv.
READ TABLE i_stk_cnv INTO zmstk_cnv INDEX w_index.
SET PARAMETER ID 'MAT' FIELD zmstk_cnv-matnr.
SET PARAMETER ID 'WRK' FIELD zmstk_cnv-werks.
SET PARAMETER ID 'BERID' FIELD zmstk_cnv-werks.
SET PARAMETER ID 'PRR' FIELD 'ZI'.
CALL TRANSACTION 'CO09' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
CLEAR ok_code.
CLEAR ok_code.
*&---------------------------------------------------------------------*
*& Module STK_R_MODIFY INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE stk_r_modify INPUT.
IF zmstk_req-slabsreq < 0.
CLEAR ok_code.
MESSAGE e524.
ENDIF.
MODIFY i_stk_req
FROM zmstk_req
INDEX stk_r-current_line.
ENDMODULE. " STK_R_MODIFY INPUT