cancel
Showing results for 
Search instead for 
Did you mean: 

error msg if no standard cost present for Production order target cost

Former Member
0 Kudos

Hi

There is a production order created for a fini product. If there is no standard cost estimate for the fini material as on the production order date, then the system should give an error message during release, so that further activities viz GR is not done.

How is this done. It is done at order type level ?

Pl advise.

Thanks

kamala

Accepted Solutions (1)

Accepted Solutions (1)

ajaycwa1981
Active Contributor

Hi Kamala

This is not available in standard

You will have to use BADI WORKORDER_UPDATE.. It has 2 methods

1. AT SAVE

2. AT RELEASE

Depending on whether you want to stop i.e. during save or at release of prod order, you can write your code here

Sample code is appended here.. Just change your Mat Types in this code.. My Mat types are ZFER and ZHAL.. replace ZFER and ZHAL with your mat types for FG and SFG

DATA: I_STPO TYPE TABLE OF STPO_API02,

WA_STPO TYPE STPO_API02 .

DATA: I_STPO2 TYPE TABLE OF STPO_API02,

WA_STPO2 TYPE STPO_API02 .

DATA : TEXT1(70) TYPE C .

DATA V_INDX LIKE SY-INDEX.

DATA : ICOLS TYPE TABLE OF HELP_VALUE,

WA_ICOLS TYPE HELP_VALUE .

TYPES : BEGIN OF ITAB1 ,

MATNR TYPE MARA-MATNR ,

MTART TYPE MARA-MTART ,

END OF ITAB1.

TYPES : BEGIN OF ITAB2 ,

MATNR TYPE MARA-MATNR ,

TEXT TYPE DFK006B-TEXT ,

END OF ITAB2 .

DATA : ITAB TYPE TABLE OF ITAB1 ,

WA_ITAB TYPE ITAB1 .

data : wa_mbew type mbew.

DATA : i_mbew TYPE TABLE OF mbew .

DATA : ERR_DET TYPE TABLE OF ITAB2,

WA_ERR_DET TYPE ITAB2 .

DATA: L_LPLPR TYPE MBEW-LPLPR,

L_BWTAR TYPE MBEW-BWTAR,

L_STPRS TYPE MBEW-STPRS,

L_BWKEY TYPE MBEW-BWKEY .

DATA : ANS(1) TYPE c.

CLEAR : L_BWTAR .

DATA : I_MATNR TYPE MARA-MATNR .

IF IS_HEADER_DIALOG-MATNR IS NOT INITIAL.

*Start of check for Standard price of material And its BOM component part-1

CALL FUNCTION 'CSAP_MAT_BOM_READ'

EXPORTING

MATERIAL = IS_HEADER_DIALOG-MATNR

PLANT = IS_HEADER_DIALOG-WERKS

BOM_USAGE = IS_HEADER_DIALOG-STLAN

  • ALTERNATIVE =

  • VALID_FROM =

  • VALID_TO =

  • CHANGE_NO =

  • REVISION_LEVEL =

  • FL_DOC_LINKS =

  • FL_DMU_TMX =

  • IMPORTING

  • FL_WARNING =

TABLES

T_STPO = I_STPO

  • T_STKO =

  • T_DEP_DATA =

  • T_DEP_DESCR =

  • T_DEP_ORDER =

  • T_DEP_SOURCE =

  • T_DEP_DOC =

  • T_DOC_LINK =

  • T_DMU_TMX =

  • T_LTX_LINE =

  • T_STPU =

EXCEPTIONS

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.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

INPUT = IS_HEADER_DIALOG-MATNR

IMPORTING

OUTPUT = WA_STPO-COMPONENT.

APPEND WA_STPO TO I_STPO.

CLEAR WA_STPO .

*End of check for Standard price of material And its BOM component part-1

*Start of check for Standard price of material And its BOM component part-2

LOOP AT I_STPO INTO WA_STPO.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

INPUT = WA_STPO-COMPONENT

IMPORTING

OUTPUT = I_MATNR.

SELECT SINGLE * INTO CORRESPONDING FIELDS OF WA_ITAB FROM MARA

WHERE MATNR = I_MATNR .

select single * from mbew into wa_mbew where matnr = i_matnr and

bwkey = IS_HEADER_DIALOG-WERKS.

IF ( WA_ITAB-MTART = 'ZFER' OR WA_ITAB-MTART = 'ZHAL' )." and wa_mbew-vprsv = 'S' .This is reqd only if SFG can have Price control as V

SELECT SINGLE BWKEY INTO L_BWKEY FROM T001W WHERE WERKS = IS_HEADER_DIALOG-WERKS.

IF SY-SUBRC = 0 .

SELECT SINGLE LPLPR STPRS INTO (L_LPLPR, L_STPRS) FROM MBEW WHERE MATNR = WA_ITAB-MATNR

AND BWKEY = L_BWKEY

AND BWTAR = L_BWTAR.

IF L_LPLPR IS INITIAL AND L_STPRS IS INITIAL .

WA_ERR_DET-MATNR = WA_ITAB-MATNR .

WA_ERR_DET-TEXT = 'Maintain current planned Price & Standard Price For ' .

ENDIF.

IF L_LPLPR IS INITIAL .

WA_ERR_DET-MATNR = WA_ITAB-MATNR .

WA_ERR_DET-TEXT = 'Maintain current planned Price' .

ENDIF.

IF L_STPRS IS INITIAL .

WA_ERR_DET-MATNR = WA_ITAB-MATNR .

WA_ERR_DET-TEXT = 'Maintain Standard Price ' .

ENDIF.

if wa_err_det is not INITIAL.

APPEND WA_ERR_DET TO ERR_DET.

CLEAR WA_ERR_DET.

endif.

ENDIF.

ENDIF.

clear : wa_mbew, wa_itab.

ENDLOOP.

SORT ERR_DET BY MATNR.

WA_ICOLS-TABNAME = 'MARA'.

WA_ICOLS-FIELDNAME = 'MATNR'.

WA_ICOLS-SELECTFLAG = 'X'.

APPEND WA_ICOLS TO ICOLS .

WA_ICOLS-TABNAME = 'DFK006B'.

WA_ICOLS-FIELDNAME = 'TEXT'.

APPEND WA_ICOLS TO ICOLS.

IF ERR_DET[] IS NOT INITIAL .

CALL FUNCTION 'MD_POPUP_SHOW_INTERNAL_TABLE'

EXPORTING

TITLE = 'ERROR FOR MATERIALS'

IMPORTING

INDEX = V_INDX

TABLES

VALUES = ERR_DET

COLUMNS = ICOLS

EXCEPTIONS

LEAVE = 1

OTHERS = 2.

MESSAGE 'Maintain Prices For Listed Material' TYPE 'E'.

ENDIF.

*END of check for Standard price of material And its BOM component part-2

ENDIF.

endmethod.

Regards

Ajay M

ajaycwa1981
Active Contributor
0 Kudos

Hi

Hi Kamala This is not available in standard You will have to use BADI WORKORDER_UPDATE..

It has 2 methods 1. AT SAVE 2. AT RELEASE

Depending on whether you want to stop i.e. during save or at release of prod order, you can write your code here Sample code is appended here..

Just change your Mat Types in this code.. My Mat types are ZFER and ZHAL.. replace ZFER and ZHAL with your mat types for FG and SFG

Code starts here

******

method IF_EX_WORKORDER_UPDATE~AT_SAVE.

DATA: I_STPO TYPE TABLE OF STPO_API02,

WA_STPO TYPE STPO_API02 .

DATA: I_STPO2 TYPE TABLE OF STPO_API02,

WA_STPO2 TYPE STPO_API02 .

DATA : TEXT1(70) TYPE C .

DATA V_INDX LIKE SY-INDEX.

DATA : ICOLS TYPE TABLE OF HELP_VALUE,

WA_ICOLS TYPE HELP_VALUE .

TYPES : BEGIN OF ITAB1 ,

MATNR TYPE MARA-MATNR ,

MTART TYPE MARA-MTART ,

END OF ITAB1.

TYPES : BEGIN OF ITAB2 ,

MATNR TYPE MARA-MATNR ,

TEXT TYPE DFK006B-TEXT ,

END OF ITAB2 .

DATA : ITAB TYPE TABLE OF ITAB1 ,

WA_ITAB TYPE ITAB1 .

data : wa_mbew type mbew.

DATA : i_mbew TYPE TABLE OF mbew .

DATA : ERR_DET TYPE TABLE OF ITAB2,

WA_ERR_DET TYPE ITAB2 .

DATA: L_LPLPR TYPE MBEW-LPLPR,

L_BWTAR TYPE MBEW-BWTAR,

L_STPRS TYPE MBEW-STPRS,

L_BWKEY TYPE MBEW-BWKEY .

DATA : ANS(1) TYPE c.

CLEAR : L_BWTAR .

DATA : I_MATNR TYPE MARA-MATNR .

IF IS_HEADER_DIALOG-MATNR IS NOT INITIAL.

*Start of check for Standard price of material And its BOM component part-1

CALL FUNCTION 'CSAP_MAT_BOM_READ'

EXPORTING

MATERIAL = IS_HEADER_DIALOG-MATNR

PLANT = IS_HEADER_DIALOG-WERKS

BOM_USAGE = IS_HEADER_DIALOG-STLAN

  • ALTERNATIVE =

  • VALID_FROM =

  • VALID_TO =

  • CHANGE_NO =

  • REVISION_LEVEL =

  • FL_DOC_LINKS =

  • FL_DMU_TMX =

  • IMPORTING

  • FL_WARNING =

TABLES

T_STPO = I_STPO

  • T_STKO =

  • T_DEP_DATA =

  • T_DEP_DESCR =

  • T_DEP_ORDER =

  • T_DEP_SOURCE =

  • T_DEP_DOC =

  • T_DOC_LINK =

  • T_DMU_TMX =

  • T_LTX_LINE =

  • T_STPU =

EXCEPTIONS

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.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

INPUT = IS_HEADER_DIALOG-MATNR

IMPORTING

OUTPUT = WA_STPO-COMPONENT.

APPEND WA_STPO TO I_STPO.

CLEAR WA_STPO .

*End of check for Standard price of material And its BOM component part-1

*Start of check for Standard price of material And its BOM component part-2

LOOP AT I_STPO INTO WA_STPO.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

INPUT = WA_STPO-COMPONENT

IMPORTING

OUTPUT = I_MATNR.

SELECT SINGLE * INTO CORRESPONDING FIELDS OF WA_ITAB FROM MARA

WHERE MATNR = I_MATNR .

select single * from mbew into wa_mbew where matnr = i_matnr and

bwkey = IS_HEADER_DIALOG-WERKS.

IF ( WA_ITAB-MTART = 'ZFER' OR WA_ITAB-MTART = 'ZHAL' )." and wa_mbew-vprsv = 'S' .This is reqd only if SFG can have Price control as V

SELECT SINGLE BWKEY INTO L_BWKEY FROM T001W WHERE WERKS = IS_HEADER_DIALOG-WERKS.

IF SY-SUBRC = 0 .

SELECT SINGLE LPLPR STPRS INTO (L_LPLPR, L_STPRS) FROM MBEW WHERE MATNR = WA_ITAB-MATNR

AND BWKEY = L_BWKEY

AND BWTAR = L_BWTAR.

IF L_LPLPR IS INITIAL AND L_STPRS IS INITIAL .

WA_ERR_DET-MATNR = WA_ITAB-MATNR .

WA_ERR_DET-TEXT = 'Maintain current planned Price & Standard Price For ' .

ENDIF.

IF L_LPLPR IS INITIAL .

WA_ERR_DET-MATNR = WA_ITAB-MATNR .

WA_ERR_DET-TEXT = 'Maintain current planned Price' .

ENDIF.

IF L_STPRS IS INITIAL .

WA_ERR_DET-MATNR = WA_ITAB-MATNR .

WA_ERR_DET-TEXT = 'Maintain Standard Price ' .

ENDIF.

if wa_err_det is not INITIAL.

APPEND WA_ERR_DET TO ERR_DET.

CLEAR WA_ERR_DET.

endif.

ENDIF.

ENDIF.

clear : wa_mbew, wa_itab.

ENDLOOP.

SORT ERR_DET BY MATNR.

WA_ICOLS-TABNAME = 'MARA'.

WA_ICOLS-FIELDNAME = 'MATNR'.

WA_ICOLS-SELECTFLAG = 'X'.

APPEND WA_ICOLS TO ICOLS .

WA_ICOLS-TABNAME = 'DFK006B'.

WA_ICOLS-FIELDNAME = 'TEXT'.

APPEND WA_ICOLS TO ICOLS.

IF ERR_DET[] IS NOT INITIAL .

CALL FUNCTION 'MD_POPUP_SHOW_INTERNAL_TABLE'

EXPORTING

TITLE = 'ERROR FOR MATERIALS'

IMPORTING

INDEX = V_INDX

TABLES

VALUES = ERR_DET

COLUMNS = ICOLS

EXCEPTIONS

LEAVE = 1

OTHERS = 2.

MESSAGE 'Maintain Prices For Listed Material' TYPE 'E'.

ENDIF.

*END of check for Standard price of material And its BOM component part-2

ENDIF.

endmethod.

******

Answers (2)

Answers (2)

former_member184655
Active Contributor
0 Kudos

Dear Kamala,

Use the BADI which Ajay has suggested.You can write the FS for building the logic either using the method at save or at release

to make a system check for the field STPRS from the table MBEW,by passing the material and valuation area.

Check and revert

Regards

S Mangalraj

ajaycwa1981
Active Contributor
0 Kudos

Hi Mangal

In my opinion, field LPLPR must be checked and not STPRS..

STPRS is populated even if MR21 is done where as LPLPR is populated only from CK11N and CK24... LPLPR if checked, it checks STPRS also....

having LPLPR helps because in KKS1/2, it will facilitate to calculate variance on each cost component

I sent to Kamala the code which I used.. Lets see if it works for her

Regards

Ajay M

former_member184655
Active Contributor
0 Kudos

Dear Ajay,

I'm sorry for giving the wrong field name.It should be current Planned price(as this field gets updated after releasing the cost

estimate)

You are absolutely correct.It must be LPLPR.

Regards

S Mangalraj

ajaycwa1981
Active Contributor
0 Kudos

Hi Kamala

I tried to paste the sample code for you.. But it looks shabby here

What you want is not available in standard

You will have to use BADI WORKORDER_UPDATE.. It has 2 methods

1. AT SAVE

2. AT RELEASE

Depending on whether you want to stop i.e. during save or at release of prod order, you can write your code here...

Read the header material and plant of prod order and check if MBEW-LPLPR is zero for this Plant/Material... If zero, then issue an error message

Regards

Ajay M