PV Program
PV Program
REPORT ZUTPP609
LINE-SIZE 200
LINE-COUNT 200
MESSAGE-ID ZZ
NO STANDARD PAGE HEADING.
***********************************************************************
* Program: Production Version Creation Utility Program *
* *
* Description: Basically this is Mass upload utility program to create*
* Production version for given Material,Plant,BOM, and *
* Routing information. *
***********************************************************************
***********************************************************************
* T A B L E D E C L A R A T I O N S *
***********************************************************************
TABLES : MAST,MAPL,MKAL,STKO,MARA,MARC.
***********************************************************************
* D A T A D E C L A R A T I O N S *
***********************************************************************
TYPE-POOLS: SLIS,TRUXS.
DATA:EXIT.
DATA: FCT TYPE SLIS_FIELDCAT_ALV,
IT_FCT TYPE SLIS_T_FIELDCAT_ALV,
LOUT TYPE SLIS_LAYOUT_ALV,
HEAD TYPE SLIS_LISTHEADER,
IT_HEAD TYPE SLIS_T_LISTHEADER.
*** MATERIAL TO BOM LINK DATA
TYPES: BEGIN OF TY_MAST,
MATNR TYPE MAST-MATNR,
WERKS TYPE MAST-WERKS,
STLAN TYPE MAST-STLAN,
STLNR TYPE MAST-STLNR,
STLAL TYPE MAST-STLAL,
LOSVN TYPE MAST-LOSVN,
LOSBS TYPE MAST-LOSBS,
ANDAT TYPE MAST-ANDAT,
END OF TY_MAST.
DATA : GT_MAST TYPE TABLE OF TY_MAST,
GS_MAST LIKE LINE OF GT_MAST.
*** ROUTING DATA
TYPES: BEGIN OF TY_MAPL,
MATNR TYPE MAPL-MATNR,
WERKS TYPE MAPL-WERKS,
PLNTY TYPE MAPL-PLNTY,
PLNNR TYPE MAPL-PLNNR,
PLNAL TYPE MAPL-PLNAL,
ZKRIZ TYPE MAPL-ZKRIZ,
ZAEHL TYPE MAPL-ZAEHL,
DATUV TYPE MAPL-DATUV,
LOEKZ TYPE MAPL-LOEKZ,
ANDAT TYPE MAPL-ANDAT,
END OF TY_MAPL.
DATA : GT_MAPL TYPE TABLE OF TY_MAPL,
GS_MAPL LIKE LINE OF GT_MAPL.
*** BOM HEADER DATA
TYPES: BEGIN OF TY_STKO,
STLTY TYPE STKO-STLTY,
STLNR TYPE STKO-STLNR,
STLAL TYPE STKO-STLAL,
STKOZ TYPE STKO-STKOZ,
DATUV TYPE STKO-DATUV,
LOEKZ TYPE STKO-LOEKZ,
ANDAT TYPE STKO-ANDAT,
STLST TYPE STKO-STLST,
END OF TY_STKO.
DATA : GT_STKO TYPE TABLE OF TY_STKO,
GS_STKO LIKE LINE OF GT_STKO.
TYPES: BEGIN OF TY_MARA,
MATNR TYPE MARA-MATNR,
SPART TYPE MARA-SPART,
END OF TY_MARA.
DATA : GT_MARA TYPE TABLE OF TY_MARA,
GS_MARA LIKE LINE OF GT_MARA.
TYPES: BEGIN OF TY_MARC,
MATNR TYPE MARA-MATNR,
WERKS TYPE MARC-WERKS,
DISPO TYPE MARC-DISPO,
END OF TY_MARC.
DATA : GT_MARC TYPE TABLE OF TY_MARC,
GS_MARC LIKE LINE OF GT_MARC.
TYPES: BEGIN OF TY_MAKL,
MATNR TYPE MKAL-MATNR, "material
WERKS TYPE MKAL-WERKS, "plant
VERID TYPE MKAL-VERID, "production version
BDATU TYPE MKAL-BDATU, "valid from
ADATU TYPE MKAL-ADATU, "valid to
STLAL TYPE MKAL-STLAL, "Alternative bom
STLAN TYPE MKAL-STLAN, "bom usage
PLNTY TYPE MKAL-PLNTY, "task type
PLNNR TYPE MKAL-PLNNR, "task list
PLNAL TYPE MAPL-PLNAL, "group counter
BSTMI TYPE MKAL-BSTMI, "lot size from
BSTMA TYPE MKAL-BSTMA, "lot size to
ALORT TYPE MKAL-ALORT, "receiving storage location
PRFG_F(10) TYPE C, "status
TEXT1 TYPE MKAL-TEXT1, "text
ICON(4) TYPE C, "signal symbol
END OF TY_MAKL.
DATA : GT_MAKL TYPE TABLE OF TY_MAKL,
GS_MAKL LIKE LINE OF GT_MAKL,
GT_STATUS TYPE TABLE OF TY_MAKL,
GS_STATUS LIKE LINE OF GT_STATUS.
***********************************************************************
* S E L E C T - O P T I O N S / P A R A M E T E R S *
***********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS : P_TEST RADIOBUTTON GROUP R1 USER-COMMAND USR DEFAULT 'X',
P_UPDAT RADIOBUTTON GROUP R1.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF P_TEST = 'X' AND SCREEN-GROUP1 = 'MD1'.
SCREEN-ACTIVE = '0'.
MODIFY SCREEN.
CONTINUE.
* ELSEIF P_UPDAT = 'X' AND SCREEN-GROUP1 = 'MD2'.
* SCREEN-ACTIVE = '0'.
* MODIFY SCREEN.
* CONTINUE.
ENDIF.
ENDLOOP.
***********************************************************************
* I N I T I A L I Z A T I O N *
***********************************************************************
INITIALIZATION.
P_MODE = 'A'.
***********************************************************************
* S T A R T - O F - S E L E C T I O N *
***********************************************************************
START-OF-SELECTION.
IF P_UPDAT = 'X' AND P_INVALD = 'X'.
MESSAGE S208(00) WITH 'select valid prod.vers option to update' DISPLAY LIKE
'E'.
STOP.
ENDIF.
IF C1 = 'X' AND P_ALORT = ' '.
MESSAGE S208(00) WITH 'Please input receiving storage location' DISPLAY LIKE
'E'.
STOP.
ENDIF.
PERFORM GET_DATA_INPUT. " GET PRODUCTION VERSION DETAILS.
PERFORM FINAL_DATA. " DATA PROCESSING FOR BDC
IF P_TEST = 'X'.
PERFORM REPORT. " GENERATE REPORT.
ELSE.
IF P_TRANS = 'X'.
PERFORM START_BDC. " START BDC USING CALL TRANSACTION
ELSE.
PERFORM START_SESSION_BDC. " START BDC USING CALL SESSION
ENDIF.
PERFORM STATUS_REPORT. " status after succesfull creation of
production version
ENDIF.
***********************************************************************
* F O R M S *
***********************************************************************
*&---------------------------------------------------------------------*
*& Form GET_DATA_INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA_INPUT .
ELSE.
" Material not given in input selection
ENDIF.
IF GT_MARA[] IS NOT INITIAL.
SELECT MATNR WERKS STLAN STLNR STLAL LOSVN LOSBS ANDAT FROM MAST
" get material to BOM link
INTO TABLE GT_MAST FOR ALL ENTRIES IN GT_MARA
WHERE MATNR = GT_MARA-MATNR
AND WERKS IN S_WERKS
AND ANDAT IN S_ANDAT
AND STLAL IN S_STLAL
AND ANNAM IN S_ANNAM.
SELECT MATNR WERKS PLNTY PLNNR PLNAL ZKRIZ ZAEHL DATUV LOEKZ ANDAT FROM
MAPL " Get Task list
INTO TABLE GT_MAPL FOR ALL ENTRIES IN GT_MARA
WHERE MATNR = GT_MARA-MATNR
AND WERKS IN S_WERKS
AND ANDAT IN S_RODAT
AND PLNNR IN S_PLNNR
AND LOEKZ = ' '
AND PLNTY = 'N'
AND ANNAM IN S_ANNAM.
ENDIF.
ELSE.
" MRP controller is not given in selection.
SELECT MATNR SPART FROM MARA INTO TABLE GT_MARA
WHERE MATNR IN S_MATNR
* AND SPART = P_SPART.
SELECT MATNR WERKS VERID BDATU ADATU STLAL STLAN PLNTY PLNNR ALNAL BSTMI BSTMA
FROM MKAL
INTO TABLE GT_MAKL FOR ALL ENTRIES IN GT_MARA
WHERE MATNR = GT_MARA-MATNR
AND WERKS IN S_WERKS
AND STLAL IN S_STLAL
AND PLNNR IN S_PLNNR.
ENDIF.
IF SY-SUBRC = 0.
IF GS_STKO-DATUV <= SY-DATUM. " BOM SHOULD BE VALID FROM
CURRENT DATE ONLY
READ TABLE GT_MAKL INTO GS_MAKL
WITH KEY MATNR = GS_MAST-MATNR
WERKS = GS_MAST-WERKS
STLAL = GS_MAST-STLAL.
IF SY-SUBRC = 0. " BOM ALREADY USED.
* COUNT = GS_MAKL-VERID.
* AT END OF MATNR.
* AT END OF WERKS.
* CLEAR : COUNT.
* ENDAT.
* ENDAT.
CONTINUE.
ELSE.
GS_FINAL-MATNR = GS_MAST-MATNR.
GS_FINAL-WERKS = GS_MAST-WERKS.
* IF COUNT IS INITIAL.
* COUNT = '0001'.
* ELSE.
* COUNT = COUNT + 0001.
* ENDIF.
IF SY-SUBRC <> 0.
LOOP AT GT_MAPL INTO GS_MAPL.
PERFORM BUILD_ALV.
FCT-SELTEXT_M = 'Plant'.
FCT-SELTEXT_L = 'Plant'.
IF P_VALID = 'X'.
FCT-TABNAME = 'GT_FINAL'.
ELSE.
FCT-TABNAME = 'GT_FINAL1'.
ENDIF.
FCT-FIELDNAME = 'WERKS'.
FCT-OUTPUTLEN = '12'.
APPEND FCT TO IT_FCT.
CLEAR FCT.
FCT-SELTEXT_M = 'Material'.
FCT-SELTEXT_L = 'Material'.
IF P_VALID = 'X'.
FCT-TABNAME = 'GT_FINAL'.
ELSE.
FCT-TABNAME = 'GT_FINAL1'.
ENDIF.
FCT-FIELDNAME = 'MATNR'.
FCT-OUTPUTLEN = '18'.
APPEND FCT TO IT_FCT.
CLEAR FCT.
IF GT_FINAL[] IS INITIAL.
MESSAGE I208(00) WITH 'No Prod.Versions will be created for selected data'.
STOP.
ELSE.
*&---------------------------------------------------------------------*
*& Form TOP_PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM TOP_PAGE.
CLEAR: IT_HEAD,LINE.
HEAD-TYP = 'H'.
IF LV_HEAD = 'X'.
HEAD-INFO = 'Following Production versions are created'.
ELSE.
IF P_VALID = 'X'.
HEAD-INFO = 'Valid records for Production version'.
ELSE.
HEAD-INFO = 'Invalid Records for Production version'.
ENDIF.
ENDIF.
APPEND HEAD TO IT_HEAD.
HEAD-TYP = 'S'.
HEAD-KEY = 'Run Date'.
HEAD-INFO = LV_DATE.
APPEND HEAD TO IT_HEAD.
CLEAR : LV_HEAD.
IF P_VALID = 'X'.
DESCRIBE TABLE GT_FINAL[] LINES LINE.
HEAD-TYP = 'S'.
HEAD-KEY = 'Total Records:'.
HEAD-INFO = LINE.
APPEND HEAD TO IT_HEAD.
CLEAR : LINE.
ELSE.
DESCRIBE TABLE GT_FINAL1[] LINES LINE.
HEAD-TYP = 'S'.
HEAD-KEY = 'Total Records:'.
HEAD-INFO = LINE.
APPEND HEAD TO IT_HEAD.
CLEAR : LINE.
ENDIF.
ENDFORM. "TOP_PAGE
*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PROGRAM text
* -->DYNPRO text
*----------------------------------------------------------------------*
*FORM BDC_DYNPRO USING PROGRAM DYNPRO.
* CLEAR BDCDATA.
* BDCDATA-PROGRAM = PROGRAM.
* BDCDATA-DYNPRO = DYNPRO.
* BDCDATA-DYNBEGIN = 'X'.
* APPEND BDCDATA.
*ENDFORM. "BDC_DYNPRO
**----------------------------------------------------------------------*
** Insert field *
**----------------------------------------------------------------------*
*FORM BDC_FIELD USING FNAM FVAL.
* CLEAR BDCDATA.
* IF FVAL <> SPACE.
* BDCDATA-FNAM = FNAM.
* BDCDATA-FVAL = FVAL.
* APPEND BDCDATA.
* ENDIF.
*ENDFORM. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form STATUS_REPORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM STATUS_REPORT .
CLEAR : IT_FCT[],IT_HEAD[].
SELECT MATNR WERKS VERID BDATU ADATU STLAL STLAN PLNTY PLNNR ALNAL BSTMI BSTMA
ALORT PRFG_F FROM MKAL
INTO TABLE GT_STATUS FOR ALL ENTRIES IN GT_FINAL
WHERE MATNR = GT_FINAL-MATNR
AND WERKS = GT_FINAL-WERKS
AND VERID = GT_FINAL-VERID.
ENDIF.
FCT-SELTEXT_M = 'Plant'.
FCT-SELTEXT_L = 'Plant'.
FCT-TABNAME = 'GT_STATUS'.
FCT-FIELDNAME = 'WERKS'.
FCT-OUTPUTLEN = '12'.
APPEND FCT TO IT_FCT.
CLEAR FCT.
FCT-SELTEXT_M = 'Material'.
FCT-SELTEXT_L = 'Material'.
FCT-TABNAME = 'GT_STATUS'.
FCT-FIELDNAME = 'MATNR'.
FCT-OUTPUTLEN = '18'.
APPEND FCT TO IT_FCT.
CLEAR FCT.
FCT-SELTEXT_M = 'Status'.
FCT-SELTEXT_L = 'Status'.
FCT-TABNAME = 'GT_STATUS'.
FCT-FIELDNAME = 'PRFG_F'.
FCT-OUTPUTLEN = '10'.
APPEND FCT TO IT_FCT.
CLEAR FCT.
*** Begin of +SK20141016
FCT-SELTEXT_M = 'Rec.Storage Loc.'.
FCT-SELTEXT_L = 'Rec.Storage Loc.'.
FCT-TABNAME = 'GT_STATUS'.
FCT-FIELDNAME = 'ALORT'.
FCT-OUTPUTLEN = '15'.
APPEND FCT TO IT_FCT.
CLEAR FCT.
*** End of +SK20141016
FCT-SELTEXT_M = 'ICON'.
FCT-SELTEXT_L = 'ICON'.
FCT-TABNAME = 'GT_STATUS'.
FCT-FIELDNAME = 'ICON'.
FCT-OUTPUTLEN = '1'.
APPEND FCT TO IT_FCT.
CLEAR FCT.
*&---------------------------------------------------------------------*
*& Form BDC_OPEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BDC_OPEN .
IF GT_FINAL[] IS INITIAL.
MESSAGE I208(00) WITH 'No Prod.Versions will be created for selected data'.
STOP.
ELSE.
PERFORM BDC_OPEN.
LOOP AT GT_FINAL INTO GS_FINAL.
* IF P_SIMRUN = 'X'.
** L_JOBNAME = SY-REPID.
** CALL FUNCTION 'JOB_OPEN'
** EXPORTING
** JOBNAME = L_JOBNAME
** IMPORTING
** JOBCOUNT = L_JOBCOUNT
** EXCEPTIONS
** CANT_CREATE_JOB = 1
** INVALID_JOB_DATA = 2
** JOBNAME_MISSING = 3
** OTHERS = 4.
** IF SY-SUBRC EQ 0.
*
* COMMIT WORK AND WAIT.
* SUBMIT RSBDCSUB TO SAP-SPOOL WITHOUT SPOOL DYNPRO AND RETURN
* WITH MAPPE = P_MAP " SESSION NAME
* WITH Z_VERARB = 'X'
* WITH FEHLER = ' ' " NOT BATCH SESSION IN ERROR
* WITH LOGALL = 'X'. " EXTENDED LOG
*
** IF SY-SUBRC EQ 0.
**
** CALL FUNCTION 'JOB_CLOSE'
** EXPORTING
** JOBCOUNT = L_JOBCOUNT
** JOBNAME = L_JOBNAME
** STRTIMMED = 'X'
** EXCEPTIONS
** CANT_START_IMMEDIATE = 1
** INVALID_STARTDATE = 2
** JOBNAME_MISSING = 3
** JOB_CLOSE_FAILED = 4
** JOB_NOSTEPS = 5
** JOB_NOTEX = 6
** LOCK_FAILED = 7
** OTHERS = 8.
**
** ENDIF.
** ENDIF.
* ENDIF.