Sei sulla pagina 1di 12

REPORT ymr_material_bill MESSAGE-ID yh1071_message LINE-SIZE 120.

*---------------------------------------------------------------------*
* T Y P E S *
*---------------------------------------------------------------------*
TYPES:
BEGIN OF type_mast,
matnr LIKE mast-matnr, " Material Number
werks LIKE mast-werks, " Plant
stlan LIKE mast-stlan, " BOM Usage
stlnr LIKE mast-stlnr, " Bill of material
stlal LIKE mast-stlal, " Alternative BOM
END OF type_mast,

BEGIN OF type_makt,
matnr LIKE makt-matnr, " Material Number
maktx LIKE makt-maktx, " Material Description
END OF type_makt,

BEGIN OF type_bom_hdr,
stlty LIKE stko-stlty, " BOM category
stlnr LIKE stko-stlnr, " Bill of material
datuv LIKE stko-datuv, " Valid-From Date
bmeng LIKE stko-bmeng, " Base Quantity
stktx LIKE stko-stktx, " Alternative BOM Text
stlst LIKE stko-stlst, " BOM status
END OF type_bom_hdr,

BEGIN OF type_bom_item,
stlty LIKE stpo-stlty, " BOM category
stlnr LIKE stpo-stlnr, " Bill of material
idnrk LIKE stpo-idnrk, " BOM component
postp LIKE stpo-postp, " Item Category(BOM)
posnr LIKE stpo-posnr, " BOM Item Number
menge LIKE stpo-menge, " Component quantity
END OF type_bom_item,

BEGIN OF type_bom_text,
stlty LIKE stpo-stlty, " BOM category
stlnr LIKE stpo-stlnr, " Bill of material
ztext TYPE stzu-ztext, " BOM Text
END OF type_bom_text,

BEGIN OF type_output,
matnr LIKE mast-matnr, " Material Number
werks LIKE mast-werks, " Plant
stlan LIKE mast-stlan, " BOM Usage
stlnr LIKE mast-stlnr, " Bill of material
ztext TYPE stzu-ztext, " BOM Text
stlal LIKE mast-stlal, " Alternative BOM
maktx LIKE makt-maktx, " Material Description
stlty LIKE stko-stlty, " BOM category
datuv LIKE stko-datuv, " Valid-From Date
bmeng LIKE stko-bmeng, " Base Quantity
stktx LIKE stko-stktx, " Alternative BOM Text
stlst LIKE stko-stlst, " BOM status
idnrk LIKE stpo-idnrk, " BOM component
postp LIKE stpo-postp, " Item Category(BOM)
posnr LIKE stpo-posnr, " BOM Item Number
menge LIKE stpo-menge, " Component quantity
END OF type_output.

*----------------------------------------------------------------------*
* D A T A *
*----------------------------------------------------------------------*
DATA:
w_matnr TYPE mast-matnr, " Material Number
w_werks TYPE mast-werks, " Plant
w_stlan TYPE mast-stlan, " BOM Usage
w_stlst TYPE stko-stlst, " BOM status
w_stlty TYPE stko-stlty, " BOM category
ok_code LIKE sy-ucomm, " User Command

* Data reference of class ALV Grid


my_alv_grid TYPE REF TO cl_gui_alv_grid,

* Data reference of class Custom Container


r_container TYPE REF TO cl_gui_custom_container.

*---------------------------------------------------------------------*
* I N T E R N A L T A B L E S *
*---------------------------------------------------------------------*
DATA:
* Material Data
i_mast TYPE STANDARD TABLE OF type_mast,
wa_mast TYPE type_mast,

* Material Description Data


i_makt TYPE STANDARD TABLE OF type_makt,
wa_makt TYPE type_makt,

* BOM Header Data


i_stko TYPE STANDARD TABLE OF type_bom_hdr,
wa_stko TYPE type_bom_hdr,

* Output table
i_output TYPE STANDARD TABLE OF type_output,
wa_output TYPE type_output,

* BOM Item Data


i_stpo TYPE STANDARD TABLE OF type_bom_item,
wa_stpo TYPE type_bom_item,

* BOM Text
i_bom_text TYPE STANDARD TABLE OF type_bom_text,
wa_bom_text TYPE type_bom_text,

* Feld Catlog table


it_fcat TYPE lvc_t_fcat,
wa_fcat TYPE lvc_s_fcat.

*---------------------------------------------------------------------*
* S E L E C T I O N S C R E E N *
*---------------------------------------------------------------------*

SELECT-OPTIONS:
s_matnr FOR w_matnr, " Material Number
s_werks FOR w_werks OBLIGATORY, " Plant
s_stlan FOR w_stlan, " BOM Usage
s_stlst FOR w_stlst, " BOM status
s_stlty FOR w_stlty. " BOM category

*----------------------------------------------------------------------*
* A T S E L E C T I O N S C R E E N *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
PERFORM f010_validate_material.
PERFORM f020_validate_plant.
PERFORM f030_validate_bom_usage.
PERFORM f040_validate_bom_status.
PERFORM f050_validate_bom_category.

*---------------------------------------------------------------------*
* S T A R T O F S E L E C T I O N *
*---------------------------------------------------------------------*
START-OF-SELECTION .
PERFORM f200_fetch_bom_link_data.
PERFORM f210_fetch_material_des_data.
PERFORM f220_fetch_bom_header_data.
PERFORM f230_fetch_bom_text.
PERFORM f240_fetch_bom_item_data.

*---------------------------------------------------------------------*
* E N D O F S E L E C T I O N *
*---------------------------------------------------------------------*
END-OF-SELECTION.
PERFORM f600_display_data.
PERFORM f650_field_catlog .
CALL SCREEN 100.

*&--------------------------------------------------------------------*
*& Form F010_VALIDATE_MATERIAL *
*&--------------------------------------------------------------------*
* --Validate Material *
*---------------------------------------------------------------------*
FORM f010_validate_material .

* Validate Material
IF s_matnr IS NOT INITIAL.
SELECT matnr
INTO w_matnr
FROM mara
UP TO 1 ROWS
WHERE matnr IN s_matnr.
ENDSELECT.

CHECK sy-subrc NE 0.
SET CURSOR FIELD 'S_MATNR'.
MESSAGE e000. " Invalid Material
ENDIF.
ENDFORM. " F010_VALIDATE_MATERIAL

*&--------------------------------------------------------------------*
*& Form F020_VALIDATE_PLANT *
*&--------------------------------------------------------------------*
* - Validate Plant *
*---------------------------------------------------------------------*
FORM f020_validate_plant .

* Validate Plant

SELECT werks
INTO w_werks
FROM t001w
UP TO 1 ROWS
WHERE werks IN s_werks.
ENDSELECT.

CHECK sy-subrc NE 0.
SET CURSOR FIELD 'S_WERKS-LOW'.
MESSAGE e001. " Invalid Plant

ENDFORM. " F020_VALIDATE_PLANT

*&--------------------------------------------------------------------*
*& Form F030_VALIDATE_BOM_USAGE *
*&--------------------------------------------------------------------*
* -Validate BOM Usage *
*---------------------------------------------------------------------*
FORM f030_validate_bom_usage .

* Validate BOM Usage


IF s_stlan IS NOT INITIAL.
SELECT stlan
INTO w_stlan
FROM t416
UP TO 1 ROWS
WHERE stlan IN s_stlan.
ENDSELECT.

CHECK sy-subrc NE 0.
SET CURSOR FIELD 'S_STLAN'.
MESSAGE e002. " Invalid BOM Usage
ENDIF.
ENDFORM. " F030_VALIDATE_BOM_USAGE

*&--------------------------------------------------------------------*
*& Form F040_VALIDATE_BOM_STATUS *
*&--------------------------------------------------------------------*
* - Validate BOM Status *
*---------------------------------------------------------------------*
FORM f040_validate_bom_status .

* Validate BOM Status


IF s_stlst IS NOT INITIAL.

SELECT stlst
INTO w_stlst
FROM t415s
UP TO 1 ROWS
WHERE stlst IN s_stlst.
ENDSELECT.

CHECK sy-subrc NE 0.
SET CURSOR FIELD 'S_STLST'.
MESSAGE e003. " Invalid BOM Status

ENDIF.

ENDFORM. " F040_VALIDATE_BOM_STATUS

*&--------------------------------------------------------------------*
*& Form F050_VALIDATE_BOM_CATEGORY *
*&--------------------------------------------------------------------*
* -Validate BOM Category *
*---------------------------------------------------------------------*
FORM f050_validate_bom_category .

* Validate BOM Category


IF s_stlty IS NOT INITIAL.
SELECT stlty
INTO w_stlty
FROM stko
UP TO 1 ROWS
WHERE stlty IN s_stlty.
ENDSELECT.

CHECK sy-subrc NE 0.
SET CURSOR FIELD 'S_STLTY'.
MESSAGE e004. " Invalid BOM Category
ENDIF.
ENDFORM. " F050_VALIDATE_BOM_CATEGORY

*&--------------------------------------------------------------------*
*& Form F200_FETCH_BOM_LINK_DATA *
*&--------------------------------------------------------------------*
* - Fetch Material BOM Link data *
*---------------------------------------------------------------------*
FORM f200_fetch_bom_link_data .

* Fetch Material BOM Link data


SELECT matnr " Material Number
werks " Plant
stlan " BOM Usage
stlnr " Bill of material
stlal " Alternative BOM
INTO TABLE i_mast
FROM mast
WHERE matnr IN s_matnr
AND werks IN s_werks.

IF sy-subrc NE 0.
MESSAGE s008. " No Data Found
STOP.
ENDIF. " IF sy-subrc NE 0.
SORT i_mast ASCENDING BY stlnr .
ENDFORM. " F200_FETCH_BOM_LINK_DATA
*&--------------------------------------------------------------------*
*& Form F210_FETCH_MATERIAL_DES_DATA *
*&--------------------------------------------------------------------*
* -Fetch Material Description Data *
*---------------------------------------------------------------------*
FORM f210_fetch_material_des_data .
DATA:
i_mast_temp LIKE TABLE OF wa_mast.

i_mast_temp = i_mast.
SORT i_mast_temp BY matnr.
DELETE ADJACENT DUPLICATES FROM i_mast_temp.

SELECT matnr
maktx
INTO TABLE i_makt
FROM makt
FOR ALL ENTRIES IN i_mast_temp
WHERE matnr EQ i_mast_temp-matnr.

IF sy-subrc NE 0.
MESSAGE s008. " No Data Found
STOP.
ENDIF. " IF sy-subrc NE 0.

ENDFORM. " F210_FETCH_MATERIAL_DES_DATA

*&--------------------------------------------------------------------*
*& Form F220_FETCH_BOM_HEADER_DATA *
*&--------------------------------------------------------------------*
* - Fetch BOM Header data *
*---------------------------------------------------------------------*
FORM f220_fetch_bom_header_data .

* Fetch BOM Header data


SELECT stlty " BOM category
stlnr " Bill of material
datuv " Valid-From Date
bmeng " Base Quantity
stktx " Alternative BOM Text
stlst " BOM status
INTO TABLE i_stko
FROM stko
FOR ALL ENTRIES IN i_mast
WHERE stlnr EQ i_mast-stlnr
AND stlty IN s_stlty.

IF sy-subrc NE 0.
MESSAGE s008. " No Data Found
STOP.
ENDIF. " IF sy-subrc NE 0.
SORT i_stko ASCENDING BY stlty stlnr.
ENDFORM. " f220_fetch_bom_header_data

*&---------------------------------------------------------------------*
*& Form F230_FETCH_BOM_TEXT *
*&---------------------------------------------------------------------*
* Fetch Bill of Material Text *
*----------------------------------------------------------------------*

FORM f230_fetch_bom_text .
DATA:
i_stko_temp LIKE TABLE OF wa_stko.

i_stko_temp = i_stko.
SORT i_stko_temp BY stlty stlnr.
DELETE ADJACENT DUPLICATES FROM i_stko_temp
COMPARING stlty stlnr.

SELECT stlty
stlnr
ztext
FROM stzu
INTO TABLE i_bom_text
FOR ALL ENTRIES IN i_stko_temp
WHERE stlty EQ i_stko_temp-stlty
AND stlnr EQ i_stko_temp-stlnr.

IF sy-subrc NE 0.
MESSAGE s008. " No Data Found
STOP.
ENDIF. " IF sy-subrc NE 0.
SORT i_bom_text BY stlty stlnr.

ENDFORM. " F230_FETCH_BOM_TEXT

*&--------------------------------------------------------------------*
*& Form F240_FETCH_BOM_ITEM_DATA *
*&--------------------------------------------------------------------*
* - Fetch BOM Item data *
*---------------------------------------------------------------------*
FORM f240_fetch_bom_item_data .

* Fetch BOM Header data


SELECT stlty " BOM category
stlnr " Bill of material
idnrk " BOM component
postp " Item Category(BOM)
posnr " BOM Item Number
menge " Component quantity
INTO TABLE i_stpo
FROM stpo
FOR ALL ENTRIES IN i_stko
WHERE stlty EQ i_stko-stlty
AND stlnr EQ i_stko-stlnr.

IF sy-subrc NE 0.
MESSAGE s008. " No Data Found
STOP.
ENDIF. " IF sy-subrc NE 0.

ENDFORM. " F240_FETCH_BOM_ITEM_DATA

*&--------------------------------------------------------------------*
*& Form f600_display_data *
*&--------------------------------------------------------------------*
* - Displaying the data *
*---------------------------------------------------------------------*
FORM f600_display_data .

LOOP AT i_stpo INTO wa_stpo .


CLEAR wa_output.
MOVE:
wa_stpo-idnrk TO wa_output-idnrk,
wa_stpo-postp TO wa_output-postp,
wa_stpo-posnr TO wa_output-posnr,
wa_stpo-menge TO wa_output-menge.

READ TABLE i_stko INTO wa_stko WITH KEY stlnr = wa_stpo-stlnr


BINARY SEARCH.

CHECK sy-subrc EQ 0.
MOVE :
wa_stko-stlty TO wa_output-stlty,
wa_stko-datuv TO wa_output-datuv,
wa_stko-bmeng TO wa_output-bmeng,
wa_stko-stktx TO wa_output-stktx,
wa_stko-stlst TO wa_output-stlst.

CHECK sy-subrc EQ 0.
READ TABLE i_bom_text INTO wa_bom_text
WITH KEY stlnr = wa_stko-stlnr
stlty = wa_stko-stlty
BINARY SEARCH.
MOVE wa_bom_text-ztext TO wa_output-ztext.

CHECK sy-subrc EQ 0.
READ TABLE i_mast INTO wa_mast WITH KEY stlnr = wa_stko-stlnr
BINARY SEARCH.
MOVE:
wa_mast-werks TO wa_output-werks,
wa_mast-matnr TO wa_output-matnr,
wa_mast-stlnr TO wa_output-stlnr,
wa_mast-stlan TO wa_output-stlan,
wa_mast-stlal TO wa_output-stlal.

CHECK sy-subrc EQ 0.
READ TABLE i_makt INTO wa_makt WITH KEY matnr = wa_mast-matnr.

CHECK sy-subrc EQ 0.
MOVE wa_makt-maktx TO wa_output-maktx.
APPEND wa_output TO i_output.

ENDLOOP. " LOOP AT i_stpo

ENDFORM. " F600_display_data

*&---------------------------------------------------------------------*
*& Form F650_Field_CATALOG *
*&---------------------------------------------------------------------*
* Field Catlog Structure *
*----------------------------------------------------------------------*

FORM f650_field_catlog .
wa_fcat-fieldname = 'WERKS'.
wa_fcat-ref_table = 'MAST'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'MATNR'.
wa_fcat-ref_table = 'MAST'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'MAKTX'.
wa_fcat-ref_table = 'MAKT'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'STLTY'.
wa_fcat-ref_table = 'STKO'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'STLAN'.
wa_fcat-ref_table = 'MAST'.
wa_fcat-ref_field = 'STLAN'.

APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'STLNR'.
wa_fcat-ref_table = 'MAST'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'ZTEXT'.
wa_fcat-ref_table = 'STZU'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'STLAL'.
wa_fcat-ref_table = 'MAST'.
wa_fcat-ref_field = 'STLAL'.

APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'STKTX'.
wa_fcat-ref_table = 'STKO'.
wa_fcat-ref_field = 'STKTX'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'DATUV'.
wa_fcat-ref_table = 'STKO'.
wa_fcat-ref_field = 'DATUV'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'BMENG'.
wa_fcat-ref_table = 'STKO'.
wa_fcat-ref_field = 'BMENG'.

APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'STLST'.
wa_fcat-ref_table = 'STKO'.
wa_fcat-ref_field = 'STLST'.

APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.

wa_fcat-fieldname = 'IDNRK'.
wa_fcat-ref_table = 'STPO'.
wa_fcat-ref_field = 'IDNRK'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'POSTP'.
wa_fcat-ref_table = 'STPO'.
wa_fcat-ref_field = 'POSTP'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'POSNR'.
wa_fcat-ref_table = 'STPO'.
wa_fcat-ref_field = 'POSNR'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'MENGE'.
wa_fcat-ref_table = 'STPO'.
wa_fcat-ref_field = 'MENGE'.
APPEND wa_fcat TO it_fcat.

ENDFORM. " F650_FIELD_CATLOG


*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT *
*&---------------------------------------------------------------------*
* Module For Process Before Output *
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'OUTPUT'.
* SET TITLEBAR 'xxx'.

IF r_container IS NOT INITIAL.


IF cl_gui_alv_grid=>offline( ) IS INITIAL.

CREATE OBJECT r_container


EXPORTING
* PARENT =
container_name = 'CUSTOM'
* STYLE =
* LIFETIME = lifetime_default
* REPID =
* DYNNR =
* NO_AUTODEF_PROGID_DYNNR =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
WRITE : sy-subrc.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDIF.

CREATE OBJECT my_alv_grid


EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
i_parent = r_container
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
WRITE : sy-subrc.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CALL METHOD my_alv_grid->set_table_for_first_display


* EXPORTING
* I_BUFFER_ACTIVE = I_BUFFER_ACTIVE
* I_BYPASSING_BUFFER = I_BYPASSING_BUFFER
* I_CONSISTENCY_CHECK = I_CONSISTENCY_CHECK
* I_STRUCTURE_NAME = 'WA_OUTPUT'
** IS_VARIANT = IS_VARIANT
* I_SAVE = I_SAVE
* I_DEFAULT = 'X'
* IS_LAYOUT = IS_LAYOUT
* IS_PRINT = IS_PRINT
* IT_SPECIAL_GROUPS = IT_SPECIAL_GROUPS
* IT_TOOLBAR_EXCLUDING = IT_TOOLBAR_EXCLUDING
* IT_HYPERLINK = IT_HYPERLINK
* IT_ALV_GRAPHICS = IT_ALV_GRAPHICS
* IT_EXCEPT_QINFO = IT_EXCEPT_QINFO
* IR_SALV_ADAPTER = IR_SALV_ADAPTER
CHANGING
it_outtab = i_output
it_fieldcatalog = it_fcat
* IT_SORT = IT_SORT
* IT_FILTER = IT_FILTER
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3.
IF sy-subrc <> 0.
WRITE : sy-subrc.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDMODULE. " STATUS_0100 OUTPUT


*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT *
*&---------------------------------------------------------------------*
* Module For Process After Input *
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

CASE ok_code.
WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
LEAVE TO SCREEN 0.
ENDCASE.

ENDMODULE.

Potrebbero piacerti anche