‎2009 Feb 09 4:16 AM
TYPE-POOLS : SLIS.
TABLES : MSLB,MARD,MAKT,MARA,ZROC.
TYPES : BEGIN OF TY_MSLB,
MATNR TYPE MSLB-MATNR,
WERKS TYPE MSLB-WERKS,
LBLAB TYPE MSLB-LBLAB,
END OF TY_MSLB.
TYPES : BEGIN OF TY_MARD,
MATNR TYPE MARD-MATNR,
WERKS TYPE MARD-WERKS,
LABST TYPE MARD-LABST,
LABST1 TYPE MARD-LABST,
LGORT TYPE MARD-LGORT,
LGORT1 TYPE MARD-LGORT,
LBLAB TYPE MSLB-LBLAB,
MTART TYPE MARA-MTART,
MEINS TYPE MARA-MEINS,
SPRAS TYPE MAKT-SPRAS,
MAKTX TYPE MAKT-MAKTX,
T_STOCK TYPE I,
RP_MONTH TYPE I,
COVER TYPE P DECIMALS 2,
END OF TY_MARD.
TYPES : BEGIN OF TY_MARD1,
MATNR TYPE MARD-MATNR,
WERKS TYPE MARD-WERKS,
LABST TYPE MARD-LABST,
LGORT TYPE MARD-LGORT,
LABST1 TYPE MARD-LABST,
END OF TY_MARD1.
TYPES : BEGIN OF TY_MARA,
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH,
MEINS TYPE MARA-MEINS,
END OF TY_MARA.
TYPES : BEGIN OF TY_MAKT,
MATNR TYPE MAKT-MATNR,
SPRAS TYPE MAKT-SPRAS,
MAKTX TYPE MAKT-MAKTX,
END OF TY_MAKT.
DATA : IT_MARD TYPE TABLE OF TY_MARD WITH HEADER LINE,
IT_MARD1 TYPE TABLE OF TY_MARD1 WITH HEADER LINE,
IT_MSLB TYPE TABLE OF TY_MSLB WITH HEADER LINE,
IT_MARA TYPE TABLE OF TY_MARA WITH HEADER LINE,
IT_MAKT TYPE TABLE OF TY_MAKT WITH HEADER LINE.
DATA : IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
IT_LAYOUT TYPE SLIS_LAYOUT_ALV.
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_MATNR FOR MSLB-MATNR,
S_WERKS FOR MSLB-WERKS,
S_MTART FOR MARA-MTART.
SELECTION-SCREEN : END OF BLOCK B1.
START-OF-SELECTION.
PERFORM PREPARE_DATA.
PERFORM DISPLAY_DATA.
&----
*& Form PREPARE_DATA
&----
text
----
--> p1 text
<-- p2 text
----
FORM PREPARE_DATA .
SELECT MATNR WERKS LABST LGORT FROM MARD INTO
CORRESPONDING FIELDS OF TABLE IT_MARD
WHERE MATNR IN S_MATNR
AND WERKS IN S_WERKS
AND LGORT IN ('RM04','RM01','RM02','RM03','RM05').
SELECT MATNR WERKS LBLAB FROM MSLB INTO
CORRESPONDING FIELDS OF TABLE IT_MSLB
FOR ALL ENTRIES IN IT_MARD WHERE MATNR = IT_MARD-MATNR
AND WERKS = IT_MARD-WERKS.
LOOP AT IT_MARD.
READ TABLE IT_MSLB WITH KEY MATNR = IT_MARD-MATNR
WERKS = IT_MARD-WERKS.
IF SY-SUBRC = 0.
IT_MARD-LBLAB = IT_MSLB-LBLAB.
ENDIF.
MODIFY IT_MARD.
ENDLOOP.
SELECT MATNR MTART MEINS FROM MARA INTO CORRESPONDING FIELDS OF TABLE IT_MARA
FOR ALL ENTRIES IN IT_MARD WHERE MATNR = IT_MARD-MATNR
AND MTART IN S_MTART.
LOOP AT IT_MARD.
READ TABLE IT_MARA WITH KEY MATNR = IT_MARD-MATNR.
IF SY-SUBRC = 0.
IT_MARD-MTART = IT_MARA-MTART.
IT_MARD-MEINS = IT_MARA-MEINS.
ENDIF.
MODIFY IT_MARD.
ENDLOOP.
SELECT MATNR SPRAS MAKTX FROM MAKT INTO CORRESPONDING FIELDS OF TABLE
IT_MAKT FOR ALL ENTRIES IN IT_MARD WHERE MATNR = IT_MARD-MATNR
AND SPRAS = 'EN'.
LOOP AT IT_MARD.
READ TABLE IT_MAKT WITH KEY MATNR = IT_MARD-MATNR.
IF SY-SUBRC = 0.
IT_MARD-MAKTX = IT_MAKT-MAKTX.
ENDIF.
MODIFY IT_MARD.
ENDLOOP.
SELECT MATNR WERKS LABST LGORT FROM MARD INTO
CORRESPONDING FIELDS OF TABLE IT_MARD1
FOR ALL ENTRIES IN IT_MARD
WHERE "MATNR = IT_MARD-MATNR
WERKS = IT_MARD-WERKS
AND LGORT IN ('PR04','PR01','PR02','PR03','PR05').
LOOP AT IT_MARD.
READ TABLE IT_MARD1 WITH KEY MATNR = IT_MARD-MATNR.
IF SY-SUBRC = 0.
MOVE IT_MARD1-LABST TO IT_MARD-LABST1.
ENDIF.
MODIFY IT_MARD.
ENDLOOP.
LOOP AT IT_MARD.
IF IT_MARD-MTART = ''.
DELETE IT_MARD.
ENDIF.
ENDLOOP.
LOOP AT IT_MARD.
IF IT_MARD-MEINS = ''.
DELETE IT_MARD.
ENDIF.
ENDLOOP.
LOOP AT IT_MARD.
MOVE '5000' TO IT_MARD-RP_MONTH.
MODIFY IT_MARD.
ENDLOOP.
LOOP AT IT_MARD.
IT_MARD-T_STOCK = IT_MARD-LABST + IT_MARD-LABST1 + IT_MARD-LBLAB.
MODIFY IT_MARD.
ENDLOOP.
ENDFORM. " PREPARE_DATA
&----
*& Form DISPLAY_DATA
&----
text
----
--> p1 text
<-- p2 text
----
FORM DISPLAY_DATA .
IT_LAYOUT-ZEBRA = 'X'.
IT_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
PERFORM FIELD_CATALOG TABLES IT_FIELDCAT
USING: 'IT_MARD' 'WERKS' 'X' 'PLANT' ' ',
'IT_MARD' 'MATNR' ' ' 'MATERIAL NO' ' ',
'IT_MARD' 'MAKTX' ' ' 'MATERIAL DESCRIPTION' ' ',
'IT_MARD' 'MTART' ' ' 'MATERIAL TYPE' ' ',
'IT_MARD' 'LABST' ' ' 'RAW STOCK' ' ',
'IT_MARD' 'LABST1' ' ' 'PROD STOCK' ' ',
'IT_MARD' 'LBLAB' ' ' 'SUB CONTR STOCK' ' ',
'IT_MARD' 'T_STOCK' ' ' 'TOTAL STOCK' ' ',
'IT_MARD' 'MEINS' ' ' 'QUANTITY' ' ',
'IT_MARD' 'RP_MONTH' ' ' 'REQ PER MONTH' 'X',
'IT_MARD' 'COVER' ' ' 'COVERAGE IN DAYS' ' '.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-CPROG
I_CALLBACK_PF_STATUS_SET = 'ZTEST'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME =
IS_LAYOUT = IT_LAYOUT
IT_FIELDCAT = IT_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
IR_SALV_LIST_ADAPTER =
IT_EXCEPT_QINFO =
I_SUPPRESS_EMPTY_DATA = ABAP_FALSE
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = IT_MARD
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_DATA
----
FORM FIELD_CATALOG *
----
........ *
----
--> T_FIELD_CATALOG *
--> FP_TABNAME *
--> FP_FIELDNAME *
--> FP_KEY *
--> FP_TEXT *
----
FORM FIELD_CATALOG TABLES T_FIELD_CATALOG STRUCTURE IT_FIELDCAT
USING FP_TABNAME TYPE ANY
FP_FIELDNAME TYPE ANY
FP_KEY TYPE ANY
FP_TEXT TYPE ANY
FP_EDIT TYPE ANY.
T_FIELD_CATALOG-TABNAME = FP_TABNAME.
T_FIELD_CATALOG-FIELDNAME = FP_FIELDNAME.
T_FIELD_CATALOG-KEY = FP_KEY.
T_FIELD_CATALOG-SELTEXT_L = FP_TEXT.
T_FIELD_CATALOG-INPUT = FP_EDIT.
T_FIELD_CATALOG-EDIT = FP_EDIT.
APPEND IT_FIELDCAT.
CLEAR IT_FIELDCAT.
ENDFORM. " display_data
&----
*& Form ZTEST
&----
text
----
-->T_MENU text
----
FORM ZTEST USING T_MENU TYPE SLIS_T_EXTAB.
SET PF-STATUS 'ZTEST'.
ENDFORM. "ZDISP_BAS1
&----
*& Form user_command
&----
text
----
-->R_UCOMM text
-->RS_SELFIELD text
----
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN '&ENT'.
LOOP AT IT_MARD.
IF IT_MARD-RP_MONTH <> 0.
IT_MARD-COVER = ( IT_MARD-T_STOCK * 26 ) / IT_MARD-RP_MONTH.
ELSE.
IT_MARD-COVER = 0.
ENDIF.
MODIFY IT_MARD.
ENDLOOP.
WHEN '&SAVE'.
LOOP AT IT_MARD.
MOVE-CORRESPONDING IT_MARD TO ZROC.
MODIFY ZROC.
ENDLOOP.
MESSAGE 'Entries are saved in table' TYPE 'I'.
ENDCASE.
ENDFORM. "user_command
in the above program when you save it is saving in zroc table.value 5000 is the default in rp_month field.
after saving it in zroc table.if i again execute saved values should be displayed instead of 5000.
‎2009 Feb 09 4:25 AM
Hi,
Clear internal table before looping at
Eg:
IT_MARD[].
i.e
loop at IT_MARD[].
Regards
Kiran
‎2009 Feb 09 4:31 AM
‎2009 Feb 09 4:37 AM
Hi,
In the below part
WHEN '&SAVE'.
LOOP AT IT_MARD.
MOVE-CORRESPONDING IT_MARD TO ZROC.
MODIFY ZROC FROM ZROC. "Change it like this
ENDLOOP.Regards,
Manoj Kumar P
‎2009 Feb 09 4:59 AM
hi sir,
my problem is default value of 5000 is saving in it_mard[].
later i am changing the rp_month value and saving in zroc.
if i again execute the the program i shoud get the old values which i saved now.
i think i dont have query for getting it from zroc table.
where i have to write that one.
‎2009 Feb 09 5:19 AM
Hi,
you are not retrieving the saved values from ZROC at all. You should do a select from ZROC after your retrieval from MARD. When populating values to be displayed, check the entry in IT_ZROC .
Select ... from MARD where...
select ... from ZROC for all entries in IT_MARD where ...
LOOP AT IT_MARD.
READ IT_ZROC WITH KEY .....
IF sy-subrc = 0.
move IT_ZROC-FIELD TO IT_MARD-RP_MONTH.
else.
MOVE '5000' TO IT_MARD-RP_MONTH.
endif.
MODIFY IT_MARD.
ENDLOOP.
Regards.
‎2009 Feb 09 5:23 AM
Hi,
Its better to write the select query in start of selection just before the perform display
Regards,
Siddarth
‎2009 Feb 09 5:42 AM
Hi
In your entire program, you have read from mrad table into it_mard, modified it_mard several times and saved it in zroc. Only if you read from zroc into it_mard will you be able to obtain the modified values.
SELECT MATNR WERKS LABST LGORT FROM MARD INTO
CORRESPONDING FIELDS OF TABLE IT_MARD
WHERE MATNR IN S_MATNR
AND WERKS IN S_WERKS
AND LGORT IN ('RM04','RM01','RM02','RM03','RM05').
As this statement will be executed, you are reading from MARD into it_mard only.
You must write the stmt:
select * from zroc into corresponding fields of table it_mard....
in order to display the new data.
Maybe you can have a flag value.
The first time you can read from Mard and set the flag.
Then next time you can read from ZROC.
Hope this helps
Regards,
Jayanthi.K
‎2009 Feb 09 8:54 AM
‎2009 Feb 09 8:55 AM