on 09-08-2010 10:37 AM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
******
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.