Professional Documents
Culture Documents
ZOQAPHO_MSGS,
ZOQAPHO_STATUS,
* MARA,
AUSP,
USR01.
"PHO messages
"PHO status table
"General Material Data"CHG03
"Characteristic Values
"User master record (runtime data)
ERDAT
TYPE ERDAT,
"Date on which the record was created
ERZET
TYPE ERZET,
"Entry time
* End of change on 24/06/2004
MATNR
TYPE MATNR,
"Material Number
CHARG
TYPE CHARG_D,
"Batch Number
ERDAT_1ST TYPE ERDAT,
"Transaction Date
ERZET_1ST TYPE ERZET,
"Transaction Time
END OF TY_PHO_MESSAGES,
* Type declaration for internal table containing all PHO data.
BEGIN OF TY_PHO_FINAL,
DIVISION
TYPE SPART,
"Division
PHONBR
TYPE Z_OQAPHONBR,
"Business Hold Number
BU
TYPE Z_OQABU,
"Business Unit
REVISION
TYPE Z_OQAREV,
"Business Hold Revision
HOLDCODE
TYPE Z_OQAHOLDCODE,
"Hold Code
INITIATOR TYPE Z_OQAINIT,
"Initiator
USERID
TYPE UNAME,
"Initiator MDT ID
HOLDTITLE TYPE Z_OQAHOLDTITLE, "Hold Title/Reason
SERIAL_NBR TYPE Z_OQASERIAL,
"Serial Characteristic number
STATUS
TYPE Z_OQASTATUS,
"PHO status
REV_HELD
TYPE Z_OQAREVHELD,
"Revision held
REV_LAST
TYPE Z_OQAREVLAST,
"Revision last
ERDAT
TYPE ERDAT,
"Initial Hold Date
ERNAM
TYPE ERNAM,
"User ID
MATNR
TYPE MATNR,
"Material Number
CHARG
TYPE CHARG_D,
"Batch Number
ERDAT_1ST TYPE ERDAT,
"Transaction Date
ERZET_1ST TYPE ERZET,
"Transaction Time
PRODNUMBER TYPE ATWRT,
"product number
CLABS TYPE LABST,
"Valuated stock with unrestricted use
*
"changed on 30/06/2004
CEINM TYPE EINME,
"Total Stock of All Restricted Batches
*
"changed on 30/06/2004
BDMNG TYPE BDMNG,
END OF TY_PHO_FINAL.
* Type declaration for internal table contains information from
* Structure AUSP(Characteristic Values)
TYPES:BEGIN OF TY_MARA.
INCLUDE STRUCTURE AUSP.
TYPES:END OF TY_MARA.
"Characteristic Values
C_REV_LAST
C_ERDAT
C_ERNAM
C_MATNR
C_CHARG
C_ERDAT_1ST
C_ERZET_1ST
C_PRODNUMBER
C_TABNAME
C_CHECKED(1)
C_SPACE(1)
"Revision held
TYPE SLIS_FIELDNAME VALUE 'REV_LAST',
"Revision last
TYPE SLIS_FIELDNAME VALUE 'ERDAT',
"Initial Hold Date
TYPE SLIS_FIELDNAME VALUE 'ERNAM',
"User ID
TYPE SLIS_FIELDNAME VALUE 'MATNR',
"Material Number
TYPE SLIS_FIELDNAME VALUE 'CHARG',
"Batch Number
TYPE SLIS_FIELDNAME VALUE 'ERDAT_1ST',
"Transaction Date
TYPE SLIS_FIELDNAME VALUE 'ERZET_1ST',
"Transaction Time
TYPE SLIS_FIELDNAME VALUE 'PRODNUMBER',
"product number
TYPE SLIS_TABNAME VALUE 'T_PHO_FINAL',
" Field catalog table
TYPE C VALUE 'X', " Flag On
TYPE C VALUE ' ',
" space
INITIALIZATION.
* Initialize and clear all type of data variable used in program.
PERFORM SUB_INITIALIZE.
*&-------------------------------------------------------------------* AT SELECTION SCREEN EVENT:
*&-------------------------------------------------------------------AT SELECTION-SCREEN.
* Stop further processing if user has not restricted the selection.
PERFORM SUB_RESTRICT_SELECTION.
* Validate the selection screen fields.
PERFORM SUB_VALIDATE.
* Begin of change on 25/06/2004
*&------------------------------------------------------------------*
*& TOP OF PAGE EVENT:
*&------------------------------------------------------------------*
*TOP-OF-PAGE.
* Write Header of the report.
* PERFORM sub_report_header.
* End of change on 25/06/2004
*&-------------------------------------------------------------------* START-OF-SELECTION
*&-------------------------------------------------------------------START-OF-SELECTION.
* Retrive PHO header data from custom table ZOQAPHO_HDR (PHO Header)
* satisfying the selection criteria entered by the user.
PERFORM SUB_RETRIVE_PHO_HEADER_DATA.
* Retrive PHO Detail data from custom table ZOQAPHO_DTL (PHO Detail)
* satisfying the selection criteria entered by the user.
PERFORM SUB_RETRIVE_PHO_DETAIL_DATA.
* Retrive PHO messages from custom table ZOQAPHO_MSGS (PHO messages)
* satisfying the selection criteria entered by the user.
PERFORM SUB_RETRIVE_PHO_MESSAGES.
*************SATYA *********INSERT *****BEGIN****CHG03**********
* here the data gathered from exclusive selcetions is merged into main
* stream data that is fetched from PHO header path
PERFORM SUB_MERGE_DATA.
*************SATYA *********INSERT *****BEGIN****CHG03**********
* Retrieve the feature(ATINN) Product number from function module
PERFORM SUB_PRODUCT_NUMBER.
* get the product number and store in an internal table
PERFORM SUB_GET_PRODNUMBER1.
* Begin of change on 30/06/2004
* get the unrestricted and restricted quantity details from MCHB (Batch
* Stocks) table and store in internal table
PERFORM SUB_GETQUANTITY.
* End of change on 30/06/2004
*&-------------------------------------------------------------------* END-OF-SELECTION
*&-------------------------------------------------------------------END-OF-SELECTION.
*integrate the data retrived from PHO header, detail and messages into
*one internal table
PERFORM SUB_INTEGRATE_DATA.
IF NOT T_PHO_FINAL[] IS INITIAL.
*display the final report in required format
PERFORM SUB_DISPLAY_REPORT.
ELSE.
MESSAGE i213(ZO).
"No record exists for given selection criteria
LEAVE LIST-PROCESSING.
ENDIF.
*&---------------------------------------------------------------------*
*&
Form sub_initialize
*&---------------------------------------------------------------------*
*
This subroutine initializes all the global variables, work area
*
and internal tables.
*----------------------------------------------------------------------*
*
PARAMETERS: NONE
*----------------------------------------------------------------------*
FORM SUB_INITIALIZE .
* Refresh all internal tables
REFRESH:
T_PHO_HEADER,
T_PHO_DETAIL,
T_PHO_MESSAGES,
T_PHO_FINAL,
T_FIELDCAT,
"changed
T_EVENT,
"changed
T_HEADER,
"changed
T_QNTY_DETAILS, "changed
T_QNTY_FINAL.
"changed
on
on
on
on
on
25/06/2004
25/06/2004
25/06/2004
30/06/2004
30/06/2004
on
on
on
on
on
25/06/2004
25/06/2004
25/06/2004
30/06/2004
30/06/2004
" sub_initialize
*&---------------------------------------------------------------------*
*&
Form sub_restrict_selection
*&---------------------------------------------------------------------*
*
This routine will stop further processing if user has not made
*
even a single entry at selection screen to restrict the
*
selection
*----------------------------------------------------------------------*
*
PARAMETERS: NONE
*----------------------------------------------------------------------*
FORM SUB_RESTRICT_SELECTION .
************satya***********COMMENT*************begin***CHG03**********
* IF s_dvsn IS INITIAL AND s_phonbr IS INITIAL AND
*
s_revisn IS INITIAL AND s_htitle IS INITIAL AND
*
s_intusr IS INITIAL AND s_intmdt IS INITIAL AND
*
s_hdcode IS INITIAL AND s_srlnbr IS INITIAL AND
*
s_status IS INITIAL AND s_hldate IS INITIAL AND
*
s_usrid IS INITIAL AND s_matnr IS INITIAL AND
*
s_charg IS INITIAL AND s_trdate IS INITIAL AND
*
s_trtime IS INITIAL .
*
*
MESSAGE e184.
* ENDIF.
************satya***********COMMENT*************END***CHG03**********
************satya***********insert***************begin***CHG03**********
IF S_PHONBR IS INITIAL AND
S_REVISN IS INITIAL AND
S_INTMDT IS INITIAL AND
S_SRLNBR IS INITIAL AND
S_CHARG IS INITIAL.
MESSAGE I184(ZO).
LEAVE LIST-PROCESSING.
ENDIF.
CLEAR G_STRING.
IF NOT S_MATNR IS INITIAL.
CONCATENATE G_STRING 'M' INTO G_STRING.
ENDIF.
IF NOT S_CHARG IS INITIAL.
CONCATENATE G_STRING 'L' INTO G_STRING.
ENDIF.
IF NOT S_SRLNBR IS INITIAL.
CONCATENATE G_STRING 'S' INTO G_STRING.
ENDIF.
************satya***********insert***************END***CHG03**********
ENDFORM.
" sub_restrict_selection
*&---------------------------------------------------------------------*
*&
Form sub_validate_division
*&---------------------------------------------------------------------*
*
this routine validates division using check table TSPA
*
(Organizational Unit: Sales Divisions).
*----------------------------------------------------------------------*
*
PARAMETERS: NONE
*----------------------------------------------------------------------*
FORM SUB_VALIDATE.
DATA: L_DIVISION TYPE SPART,
L_CHARG TYPE CHARG_D.
"Division
"Batch
"holdcode
ENDSELECT.
*Give an error message for incorrect value entered
IF SY-SUBRC NE 0.
MESSAGE I190(ZO).
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
************satya***********insert***************begin***CHG03**********
* validate Serial Number
* IF NOT S_SRLNBR IS INITIAL.
*
SELECT SERIAL_NBR UP TO 1 ROWS
"Serail number
*
FROM ZOQAPHO_DTL
*
INTO ZOQAPHO_DTL-SERIAL_NBR
*
WHERE SERIAL_NBR IN S_SRLNBR.
*
ENDSELECT.
*
**Give an error message for incorrect value entered
*
IF SY-SUBRC NE 0.
*
MESSAGE E189.
*
ENDIF.
*
* ENDIF.
************satya***********insert***************END*****CHG03**********
* validate Log Status
IF NOT S_STATUS IS INITIAL.
SELECT SINGLE STATUS
INTO ZOQAPHO_STATUS-STATUS
FROM ZOQAPHO_STATUS
WHERE STATUS IN S_STATUS.
"status
ENDIF.
ENDIF.
************satya***********insert***************begin***CHG03**********
** validate User-ID.
* IF NOT S_USRID IS INITIAL.
*
*
SELECT SINGLE BNAME
"User name
*
FROM USR01
*
INTO USR01-BNAME
*
WHERE BNAME IN S_USRID.
*
**Give an error message for incorrect value entered
*
IF SY-SUBRC NE 0.
*
MESSAGE E191.
*
ENDIF.
* ENDIF.
************satya***********insert***************END***CHG03**********
* Validate Material Number
IF NOT S_MATNR IS INITIAL.
SELECT SINGLE MATNR
INTO MARA-MATNR
FROM MARA
WHERE MATNR IN S_MATNR.
"Material number
"Batch number
" sub_validate
*&---------------------------------------------------------------------*
*&
Form sub_retrive_pho_header_data
*&---------------------------------------------------------------------*
*
This routine retrieves PHO header data from custom table
*
ZOQAPHO_HDR (PHO Header) satisfying the selection criteria
*
entered by the user at selection screen.
*----------------------------------------------------------------------*
*
PARAMETERS: NONE
*----------------------------------------------------------------------*
FORM SUB_RETRIVE_PHO_HEADER_DATA .
* Retrive PHO Header data from ZOQAPHO_HDR (PHO Header) into internal
* table t_pho_header satisfying the selection criteria for header data
* entered at selection screen.
************satya***********insert***************begin***CHG03**********
IF S_DVSN IS INITIAL AND S_PHONBR IS INITIAL AND
S_REVISN IS INITIAL AND S_HDCODE IS INITIAL AND
S_INTMDT IS INITIAL AND
S_BU IS INITIAL
AND S_HTITLE IS INITIAL.
* if there is no selections in PHO header then look for exclusive
* selections such as Material number , Serial number and batch number
PERFORM SUB_CHECK_OTHER_OPTIONS.
ELSE.
************satya***********insert***************END***CHG03**********
SELECT DIVISION
"Division
PHONBR
"Business Hold Number
BU
"Business
REVISION
"Business Hold Revision
HOLDCODE
"Hold Code
INITIATOR
"Initiator
USERID
"Initiator MDT ID
HOLDTITLE
"Hold Title/Reason
FROM ZOQAPHO_HDR
INTO TABLE T_PHO_HEADER
WHERE DIVISION IN S_DVSN AND
PHONBR
IN S_PHONBR AND
BU
IN S_BU AND
"satya CHG02
REVISION IN S_REVISN AND
HOLDCODE IN S_HDCODE AND
*
INITIATOR IN S_INTUSR AND
USERID
IN S_INTMDT AND
HOLDTITLE IN S_HTITLE.
* Check for the success of select database operation.
IF SY-SUBRC NE 0.
************satya***********insert***************begin***CHG03**********
* if there is no selections in PHO header then look for exclusive
* selections such as Material number , Serial number and batch number
PERFORM SUB_CHECK_OTHER_OPTIONS.
************satya***********insert***************END***CHG03**********
ELSE.
*
*----------------------------------------------------------------------*
FORM SUB_RETRIVE_PHO_DETAIL_DATA .
* Retrive PHO Detail data from ZOQAPHO_DTL (PHO Detail) into internal
* table t_pho_detail satisfying the selection criteria for Detail data
* entered at selection screen.
IF NOT T_PHO_HEADER[] IS INITIAL.
SELECT DIVISION
"Division
PHONBR
"Business Hold Number
ITEM
"Item number
SERIAL_NBR
"Serial Characteristic number
STATUS
"PHO status
REV_HELD
"Revision held
REV_LAST
"Revision last
ERDAT
"Initial Hold Date
ERZET
"Entry time
ERNAM
"User ID
AEDAT
"Date of Last Change
*
"changed on 24/06/2004
AEZET
"Time last change was made
*
"changed on 24/06/2004
FROM ZOQAPHO_DTL INTO TABLE T_PHO_DETAIL
FOR ALL ENTRIES IN T_PHO_HEADER
WHERE DIVISION = T_PHO_HEADER-DIVISION AND
PHONBR = T_PHO_HEADER-PHONBR AND
SERIAL_NBR IN S_SRLNBR AND
STATUS
IN S_STATUS AND
ERDAT
IN S_HLDATE.
*
AND ERNAM
IN S_USRID.
"CHG03 COMMENT
* Check for the success of select database operation.
IF SY-SUBRC NE 0.
*
PHONBR
ITEM
ERDAT
*
*
" sub_product_number
*&---------------------------------------------------------------------*
*&
Form sub_get_prodnumber1
*&---------------------------------------------------------------------*
*
Form to get the product number
*----------------------------------------------------------------------*
*
No parameters
*----------------------------------------------------------------------*
FORM SUB_GET_PRODNUMBER1 .
T_PHO_MESSAGES_TEMP[] = T_PHO_MESSAGES[].
SORT T_PHO_MESSAGES_TEMP BY MATNR.
*Delete duplicate material numbers.
DELETE ADJACENT DUPLICATES FROM T_PHO_MESSAGES_TEMP
COMPARING MATNR.
LOOP AT T_PHO_MESSAGES_TEMP INTO W_PHO_MESSAGES_TEMP.
*to get the product number using material.
PERFORM SUB_GET_PRODNUMBER.
ENDLOOP.
*free the un used temp tables for more performance
FREE: T_PHO_MESSAGES_TEMP,
T_MARA_TEMP.
CLEAR: W_PHO_MESSAGES_TEMP,
W_MARA_TEMP.
ENDFORM.
" sub_get_prodnumber1
*&---------------------------------------------------------------------*
*&
Form sub_get_prodnumber
*&---------------------------------------------------------------------*
*
Form to get product number using material
*----------------------------------------------------------------------*
*
No Parameters
*----------------------------------------------------------------------*
FORM SUB_GET_PRODNUMBER .
CLEAR :W_MARA,
W_MARA_TEMP,
G_MATNR.
*
*
'CLFM_SELECT_AUSP'
=
=
=
=
C_MAFID
C_CLASSTY
G_MATNR
G_PRONUM
= T_MARA_TEMP
= 1
= 2.
IF SY-SUBRC = 0.
READ TABLE T_MARA_TEMP INTO W_MARA_TEMP INDEX C_ONE.
IF SY-SUBRC = 0.
* move the data from t_mara_temp into t_mara.
W_MARA = W_MARA_TEMP.
APPEND W_MARA TO T_MARA.
ENDIF.
ENDIF.
ENDFORM.
" sub_get_prodnumber
W_QNTY_FINAL-MATNR = W_PHO_MESSAGES-MATNR.
W_QNTY_FINAL-CHARG = W_PHO_MESSAGES-CHARG.
* w_qnty_details-lgort = cbe-lgort.
* w_qnty_details-werks = cbe-werks.
CLEAR LV_STOCK.
LOOP AT CBE.
LV_STOCK = LV_STOCK + CBE-LABST + CBE-UMLME +
CBE-INSME + CBE-EINME + CBE-SPEME + CBE-RETME
+ CBE-KINSM + CBE-KEINM + CBE-KSPEM.
ENDLOOP.
W_QNTY_FINAL-CEINM = LV_STOCK / 1000.
.
APPEND W_QNTY_FINAL TO T_QNTY_FINAL.
ENDLOOP.
************satya***********insert***************END***CHG03**********
************satya***********COMMENT*************begin***CHG03**********
*
*
SELECT MATNR
"Material Number
*
CHARG
"Batch Number
*
WERKS
"Plant
*
LGORT
"storage location
*
CLABS
"Valuated stock with unrestricted use
*
CEINM
"Total Stock of All Restricted Batches
*
INTO TABLE T_QNTY_DETAILS
*
FROM MCHB
*
FOR ALL ENTRIES IN T_PHO_MESSAGES_TEMP
*
WHERE MATNR = T_PHO_MESSAGES_TEMP-MATNR
*
AND CHARG = T_PHO_MESSAGES_TEMP-CHARG.
*
*
IF SY-SUBRC = 0.
*
SORT T_QNTY_DETAILS BY MATNR CHARG.
*
ENDIF.
********** CHG02 BEGIN
*
SELECT MATNR
"Material Number
*
CHARG
"Batch Number
*
WERKS
"Plant
*
LGORT
"storage location
*
BDMNG
"Valuated stock with unrestricted use
*
INTO TABLE T_RESB_DETAILS
*
FROM RESB
*
FOR ALL ENTRIES IN T_PHO_MESSAGES_TEMP
*
WHERE MATNR = T_PHO_MESSAGES_TEMP-MATNR
*
AND CHARG = T_PHO_MESSAGES_TEMP-CHARG.
*
*
IF SY-SUBRC = 0.
*
SORT T_RESB_DETAILS BY MATNR CHARG.
*
ENDIF.
* ENDIF.
* IF NOT T_RESB_DETAILS[] IS INITIAL.
*
*
LOOP AT T_RESB_DETAILS INTO W_RESB_DETAILS.
*
*
AT END OF CHARG.
*
W_RESB_FINAL-MATNR = W_RESB_DETAILS-MATNR.
*
W_RESB_FINAL-CHARG = W_RESB_DETAILS-CHARG.
*
SUM.
*
*
W_RESB_FINAL-BDMNG = W_RESB_DETAILS-BDMNG.
*
*
APPEND W_RESB_FINAL TO T_RESB_FINAL.
*
CLEAR W_RESB_FINAL.
*
ENDAT.
*
CLEAR : W_RESB_DETAILS.
*
*
ENDLOOP.
* ENDIF.
********** CHG02 END
*
** sum up the quantities for the combination of material
** and batch number.
*
* IF NOT T_QNTY_DETAILS[] IS INITIAL.
*
*
LOOP AT T_QNTY_DETAILS INTO W_QNTY_DETAILS.
*
*
AT END OF CHARG.
*
W_QNTY_FINAL-MATNR = W_QNTY_DETAILS-MATNR.
*
W_QNTY_FINAL-CHARG = W_QNTY_DETAILS-CHARG.
*
SUM.
*
*
W_QNTY_FINAL-CLABS = W_QNTY_DETAILS-CLABS.
*
W_QNTY_FINAL-CEINM = W_QNTY_DETAILS-CEINM.
*****CHG02 START
*
READ TABLE T_RESB_FINAL INTO W_RESB_FINAL WITH KEY
*
MATNR = W_QNTY_DETAILS-MATNR
*
CHARG = W_QNTY_DETAILS-CHARG.
*
IF SY-SUBRC = 0.
*
W_QNTY_FINAL-BDMNG = W_RESB_FINAL-BDMNG.
*
ENDIF.
*****CHG02 END
*
APPEND W_QNTY_FINAL TO T_QNTY_FINAL.
*
CLEAR W_QNTY_FINAL.
*
ENDAT.
*
CLEAR : W_QNTY_DETAILS.
*
*
ENDLOOP.
************satya***********COMMENT*************END***CHG03**********
ENDIF.
*free the un used temp tables for more performance
FREE: T_PHO_MESSAGES_TEMP.
ENDFORM.
" sub_getquantity
SORT T_MCH1_TAB.
DELETE ADJACENT DUPLICATES FROM T_MCH1_TAB COMPARING ALL FIELDS.
SORT T_MARA BY OBJEK.
SORT T_QNTY_FINAL BY MATNR CHARG.
"changed on 30/06/2004
* check whether the header table is initial or not
IF NOT T_PHO_DETAIL[] IS INITIAL.
LOOP AT T_PHO_DETAIL INTO W_PHO_DETAIL.
CLEAR : W_PHO_HEADER,
W_PHO_MESSAGES,
W_MARA,
W_QNTY_FINAL.
"changed on 30/06/2004
*Read the header table information
READ TABLE T_PHO_HEADER INTO W_PHO_HEADER
WITH KEY DIVISION = W_PHO_DETAIL-DIVISION
PHONBR = W_PHO_DETAIL-PHONBR
BINARY SEARCH.
IF SY-SUBRC = 0.
* Begin of change on 24/06/2004
**
**
**
**
BINARY SEARCH.
IF SY-SUBRC = 0.
W_PHO_FINAL-CEINM
= W_QNTY_FINAL-CEINM.
*
ENDIF.
W_PHO_FINAL-PRODNUMBER = '>>>>>>>>>'.
W_PHO_FINAL-CHARG = T_MCH1_TAB-CHARG.
W_PHO_FINAL-SERIAL_NBR = T_MCH1_TAB-SERNR.
LV_MCH1_SUCCESS = 'X'.
APPEND W_PHO_FINAL TO T_PHO_FINAL.
ENDLOOP.
************satya***********insert***************END*****CHG03**********
IF LV_MCH1_SUCCESS = ' '.
APPEND W_PHO_FINAL TO T_PHO_FINAL.
ENDIF.
CLEAR : W_PHO_FINAL.
*
ENDIF.
* Begin of change on 24/06/2004
*
ENDLOOP.
ELSE.
READ TABLE T_PHO_MESSAGES INTO W_PHO_MESSAGES
WITH KEY DIVISION = W_PHO_DETAIL-DIVISION
PHONBR = W_PHO_DETAIL-PHONBR
ITEM = W_PHO_DETAIL-ITEM
ERDAT = W_PHO_DETAIL-AEDAT
ERZET = W_PHO_DETAIL-AEZET
BINARY SEARCH.
IF SY-SUBRC <> 0.
clear W_PHO_MESSAGES.
* these values are required for the items which do not batches/serial *
* numbers in SAP as of date
W_PHO_MESSAGES-ERDAT_1ST = W_PHO_DETAIL-AEDAT.
W_PHO_MESSAGES-ERZET_1ST = W_PHO_DETAIL-AEZET.
endif.
*get the product number using material number.
READ TABLE T_MARA INTO W_MARA
WITH KEY OBJEK = W_PHO_MESSAGES-MATNR
BINARY SEARCH.
IF NOT W_MARA-ATWRT IN S_PRODNR.
CONTINUE.
ENDIF.
* here sy-subrc check is not required as the data is passed into
* final internal table even with out product number
* Begin of change on 30/06/2004
READ TABLE T_QNTY_FINAL INTO W_QNTY_FINAL
WITH KEY MATNR = W_PHO_MESSAGES-MATNR
CHARG = W_PHO_MESSAGES-CHARG
BINARY SEARCH.
* Here No sy-subrc check is required as the data can be passed into
* final internal table even with out any qauntity.
* End of change on 30/06/2004
* send the data into final internal table
*
*
*
W_PHO_FINAL-DIVISION = W_PHO_HEADER-DIVISION.
W_PHO_FINAL-BU = W_PHO_HEADER-BU.
W_PHO_FINAL-PHONBR = W_PHO_HEADER-PHONBR.
W_PHO_FINAL-REVISION = W_PHO_HEADER-REVISION.
W_PHO_FINAL-HOLDCODE = W_PHO_HEADER-HOLDCODE.
W_PHO_FINAL-INITIATOR = W_PHO_HEADER-INITIATOR.
W_PHO_FINAL-USERID = W_PHO_HEADER-USERID.
W_PHO_FINAL-HOLDTITLE = W_PHO_HEADER-HOLDTITLE.
W_PHO_FINAL-SERIAL_NBR = W_PHO_DETAIL-SERIAL_NBR.
W_PHO_FINAL-STATUS = W_PHO_DETAIL-STATUS.
W_PHO_FINAL-REV_HELD = W_PHO_DETAIL-REV_HELD.
W_PHO_FINAL-REV_LAST = W_PHO_DETAIL-REV_LAST.
W_PHO_FINAL-ERDAT = W_PHO_DETAIL-ERDAT.
W_PHO_FINAL-ERNAM = W_PHO_DETAIL-ERNAM.
W_PHO_FINAL-MATNR = W_PHO_MESSAGES-MATNR.
W_PHO_FINAL-CHARG = W_PHO_MESSAGES-CHARG.
W_PHO_FINAL-ERDAT_1ST = W_PHO_MESSAGES-ERDAT_1ST.
W_PHO_FINAL-ERZET_1ST = W_PHO_MESSAGES-ERZET_1ST.
W_PHO_FINAL-PRODNUMBER = W_MARA-ATWRT.
W_PHO_FINAL-CLABS
= W_QNTY_FINAL-CLABS.
"changed on 30/06/2004
W_PHO_FINAL-CEINM
= W_QNTY_FINAL-CEINM.
"changed on 30/06/2004
W_PHO_FINAL-BDMNG
= W_QNTY_FINAL-BDMNG.
APPEND W_PHO_FINAL TO T_PHO_FINAL.
************satya***********insert***************begin***CHG03**********
* add the details of serial numbers, and batch numbers that are under
* this HOLD which user is interested to see in report selection
CLEAR LV_MCH1_SUCCESS.
LOOP AT T_MCH1_TAB.
* select only material that is in the final.
IF NOT W_PHO_MESSAGES-MATNR is INITIAL.
IF W_PHO_MESSAGES-MATNR <> T_MCH1_TAB-MATNR.
CONTINUE.
ENDIF.
ENDIF.
* select only batch that is in the final.
IF NOT W_PHO_MESSAGES-CHARG is INITIAL.
IF W_PHO_MESSAGES-CHARG <> T_MCH1_TAB-CHARG.
CONTINUE.
ENDIF.
ENDIF.
* select only serial number that is in the final.
IF NOT W_PHO_DETAIL-SERIAL_NBR is INITIAL.
IF W_PHO_DETAIL-SERIAL_NBR <> T_MCH1_TAB-SERNR.
CONTINUE.
ENDIF.
ENDIF.
CLEAR:W_PHO_FINAL-CEINM.
READ TABLE T_QNTY_FINAL INTO W_QNTY_FINAL
WITH KEY MATNR = T_MCH1_TAB-MATNR
CHARG = T_MCH1_TAB-CHARG
BINARY SEARCH.
IF SY-SUBRC = 0.
W_PHO_FINAL-CEINM
= W_QNTY_FINAL-CEINM.
ENDIF.
W_PHO_FINAL-PRODNUMBER = '>>>>>>>>>'.
W_PHO_FINAL-CHARG = T_MCH1_TAB-CHARG.
W_PHO_FINAL-SERIAL_NBR = T_MCH1_TAB-SERNR.
LV_MCH1_SUCCESS = 'X'.
APPEND W_PHO_FINAL TO T_PHO_FINAL.
ENDLOOP.
************satya***********insert***************END***CHG03**********
IF LV_MCH1_SUCCESS = ' '.
APPEND W_PHO_FINAL TO T_PHO_FINAL.
ENDIF.
CLEAR : W_PHO_FINAL.
* End of change on 24/06/2004
*
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
" sub_integrate_data
*&---------------------------------------------------------------------*
*&
Form sub_display_report
*&---------------------------------------------------------------------*
*
form to display the final report
*----------------------------------------------------------------------*
*
No parameters
*----------------------------------------------------------------------*
FORM SUB_DISPLAY_REPORT .
* Begin of change on 25/06/2004
* DATA : l_flag(1) TYPE c VALUE 'X',
*
l_flg_head(1) TYPE c VALUE 'X'.
*
"Flag
"Flag for header data
C_INITIATOR
C_HOLDCODE
C_STATUS
C_ERDAT
C_ERDAT_1ST
C_ERZET_1ST
C_ERNAM
C_USERID
TEXT-030
TEXT-037
TEXT-032
TEXT-033
TEXT-034
TEXT-035
TEXT-036
TEXT-031
C_SPACE,
C_SPACE,
C_SPACE,
C_SPACE,
C_SPACE,
C_SPACE,
C_SPACE.
C_SPACE,
"comment CHG03
.
* Populating the Layout for the ALV Report
PERFORM SUB_POPULATE_LAYOUT.
* Setting the Events
PERFORM SUB_EVENT_BULID .
* Displaying the ALV Reoport using 'REUSE_ALV_LIST_DISPLAY'
PERFORM SUB_DISPLAY_ALV.
* DATA : l_cnt_matnr TYPE i,
*
l_cnt_batch TYPE i,
*
l_cnt_srlno TYPE i.
**
CLEAR : l_cnt_matnr,
**
l_cnt_batch,
**
l_cnt_srlno.
**
ENDON.
***on change of bussiness write bussiness to the list
**
ON CHANGE OF w_pho_final-bu.
**
WRITE: 10 w_pho_final-bu.
**
ENDON.
**
***on change of phone number write phone number to the list
**
**
ON CHANGE OF w_pho_final-phonbr.
**
**
IF l_flg_head IS INITIAL.
**
IF l_flag IS INITIAL.
**
FORMAT COLOR COL_TOTAL ON.
***here we print materials if batch numbers and serial number fields
***are initial perhold number
***else we print batch numbers if serial number field is initial per
***hold number
**
IF l_cnt_batch IS INITIAL AND
**
l_cnt_srlno IS INITIAL.
**
WRITE:/40(300) text-013, 64 l_cnt_matnr.
**
ELSE.
**
IF l_cnt_srlno IS INITIAL.
**
WRITE:/40(300) text-014, 60 l_cnt_batch.
**
ELSE.
**
WRITE:/40(300) text-015, 62 l_cnt_srlno.
**
ENDIF.
**
ENDIF.
**
SKIP.
**
FORMAT COLOR COL_TOTAL OFF.
**
ELSE.
**
CLEAR l_flag.
**
ENDIF.
**
**
WRITE: 20 w_pho_final-phonbr.
**
ELSE.
**
CLEAR l_flg_head.
**
ENDIF.
**
**
CLEAR : l_cnt_matnr,
**
l_cnt_batch,
**
l_cnt_srlno.
**
ENDON.
***count the number of materials per hold number
**
IF NOT w_pho_final-matnr IS INITIAL.
**
l_cnt_matnr = l_cnt_matnr + 1.
**
ENDIF.
**
***count the batch number per hold number
**
IF NOT w_pho_final-charg IS INITIAL.
**
l_cnt_batch = l_cnt_batch + 1.
**
ENDIF.
**
***count the Serial number per hold number
**
IF NOT w_pho_final-serial_nbr IS INITIAL.
**
l_cnt_srlno = l_cnt_srlno + 1.
**
ENDIF.
**
" sub_display_report
W_LAYOUT-LIGHTS_TABNAME
ENDFORM.
= C_TABNAME.
" sub_populate_layout
*&---------------------------------------------------------------------*
*&
Form sub_event_bulid
*&---------------------------------------------------------------------*
*
Form to create the event
*----------------------------------------------------------------------*
*
No parameters
*----------------------------------------------------------------------*
FORM SUB_EVENT_BULID .
* Top-of-page event is added to the internal table t_event
W_EVENT-FORM = SLIS_EV_TOP_OF_PAGE.
W_EVENT-NAME = SLIS_EV_TOP_OF_PAGE.
APPEND W_EVENT TO T_EVENT.
CLEAR W_EVENT.
ENDFORM.
" sub_event_bulid
*&---------------------------------------------------------------------*
*&
Form sub_create_catalog
*&---------------------------------------------------------------------*
*
Form to craete the catalog
*----------------------------------------------------------------------*
*
-->P_fname for field
*
-->P_desc for field description
*
-->P_space for space
*
-->P_leng for length
*----------------------------------------------------------------------*
FORM SUB_CREATE_CATALOG USING
P_FNAME TYPE ANY
P_DESC TYPE ANY
P_SPACE TYPE ANY.
* Populate the fileds to the work area
W_FIELDCAT-TABNAME = C_TABNAME.
W_FIELDCAT-FIELDNAME = P_FNAME.
W_FIELDCAT-SELTEXT_M = P_DESC.
W_FIELDCAT-JUST
= P_SPACE.
APPEND W_FIELDCAT TO T_FIELDCAT.
CLEAR: W_FIELDCAT.
ENDFORM.
" sub_create_catalog
*&---------------------------------------------------------------------*
*&
Form sub_report_header
*&---------------------------------------------------------------------*
*
Form to write the standard Medtronic header for the report
*----------------------------------------------------------------------*
*
No para meters
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE.
* Pouplate the header table t_header
IF T_HEADER[] IS INITIAL.
CALL FUNCTION 'ZXCAP_REPORT_HEADER_ALV_GRID'
EXPORTING
DATUM =
TITLE1 =
TITLE2 =
TITLE3 =
TITLE4 =
UNAME =
BUKRS =
TABLES
HEADER =
ENDIF.
SY-DATUM
SY-TITLE
SPACE
SPACE
SPACE
SY-UNAME
SPACE
T_HEADER.
" top_of_page
*&---------------------------------------------------------------------*
*&
Form sub_display_alv
*&---------------------------------------------------------------------*
*
Form to display the report in ALV grid
*----------------------------------------------------------------------*
*
NO parameters
*----------------------------------------------------------------------*
FORM SUB_DISPLAY_ALV .
** Local Variable declaration for Program name
DATA: L_PROGID TYPE SYCPROG. "Hold the program name
CLEAR: L_PROGID.
L_PROGID = SY-CPROG.
* Check if the field catalog is not empty
IF NOT T_FIELDCAT[] IS INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = L_PROGID
*******************satya ravi ****insert***********start******CHG02
I_CALLBACK_USER_COMMAND = W_CALLBACK_USER_COMMAND
I_CALLBACK_PF_STATUS_SET = W_CALLBACK_PF_STATUS_SET
*******************satya ravi ****insert***********end*******CHG02
IS_LAYOUT
= W_LAYOUT
IT_FIELDCAT
= T_FIELDCAT
IT_EVENTS
= T_EVENT
TABLES
T_OUTTAB
= T_PHO_FINAL
EXCEPTIONS
PROGRAM_ERROR
= 1
OTHERS
= 2.
*
*
ENDIF.
ENDIF.
ENDFORM.
" sub_display_alv
* End of change on 25/06/2004
************satya***********insert***************start****CHG02********
*---------------------------------------------------------------------*
*
FORM F_PF_STATUS_SET
*
*---------------------------------------------------------------------*
FORM F_PF_STATUS_SET USING FP_ALV_EXCL TYPE KKBLO_T_EXTAB.
DATA: LW_FCODE LIKE SY-UCOMM.
* Allow
DELETE FP_ALV_EXCL WHERE FCODE = '&SUM'.
DELETE FP_ALV_EXCL WHERE FCODE = '&FG_SUBTOT'.
DELETE FP_ALV_EXCL WHERE FCODE = '&LFO'.
* Disallow
LW_FCODE = '&ALL '. APPEND LW_FCODE TO FP_ALV_EXCL.
LW_FCODE = '&SALL '. APPEND LW_FCODE TO FP_ALV_EXCL.
LW_FCODE = 'ANL2 '. APPEND LW_FCODE TO FP_ALV_EXCL.
LW_FCODE = 'AEN2 '. APPEND LW_FCODE TO FP_ALV_EXCL.
LW_FCODE = 'ANZ2 '. APPEND LW_FCODE TO FP_ALV_EXCL.
LW_FCODE = 'REFR '. APPEND LW_FCODE TO FP_ALV_EXCL.
LW_FCODE = 'PRUE '. APPEND LW_FCODE TO FP_ALV_EXCL.
SET PF-STATUS 'ALV_PF_STATUS' EXCLUDING FP_ALV_EXCL.
SET TITLEBAR '001' WITH W_SY_TITLE.
ENDFORM.
"F_PF_STATUS_SET
*---------------------------------------------------------------------*
*
FORM f_user_command
*
*---------------------------------------------------------------------*
FORM F_USER_COMMAND USING R_UCOMM
LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
* Local data
DATA : LD_VBTYP LIKE VBRK-VBTYP.
* Command
CASE R_UCOMM.
WHEN 'ZXXL'.
PERFORM Z_XXL_SIMPLE_API TABLES T_PHO_FINAL
USING T_FIELDCAT.
WHEN OTHERS.
ENDCASE.
ENDFORM.
"f_user_command
*&--------------------------------------------------------------------*
*&
Form z_XXL_SIMPLE_API
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
*
-->FT_DATA
text
*
-->FP_CATLG text
*---------------------------------------------------------------------*
FORM Z_XXL_SIMPLE_API TABLES FT_DATA
USING FP_CATLG.
IS
IS
IS
IS
INITIAL
INITIAL
INITIAL
INITIAL
AND
AND
AND
AND
P_EMPTY = 'X'.
ENDIF.
ENDFORM.
" SUB_check_for_other_input
*&---------------------------------------------------------------------*
*&
Form sub_check_holds
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM SUB_CHECK_HOLDS .
DATA: LT_ZOQAPHO_HDRH TYPE ZOQAPHO_HDRH OCCURS 0 WITH HEADER LINE,
LT_ZOQAPHO_DTLH TYPE ZOQAPHO_DTLH OCCURS 0 WITH HEADER LINE,
LT_ZOQAPHO_MSGS TYPE ZOQAPHO_MSGS OCCURS 0 WITH HEADER LINE,
LC_GET_CHARGS_Y TYPE C
VALUE 'X',
LC_GET_CHARGS_N TYPE C
VALUE ' '.
DATA:LW_PHO_MESSAGES TYPE ZOQAPHO_MSGS.
DATA:LW_PHO_DETAIL TYPE ZOQAPHO_DTLH.
DATA:FP_BATCH TYPE CHARG.
DATA:LV_COUNT TYPE I.
* If nothing passed then I raise an exception to that
IF G_STRING = ' '.
MESSAGE I184(ZO).
LEAVE LIST-PROCESSING.
ENDIF.
* Build status ranges for SELECTs
PERFORM F_BUILD_STATUS_RANGES.
* Refresh results table
REFRESH: FT_ZOQAPHO_HDRH,
FT_ZOQAPHO_DTLH,
FT_ZOQAPHO_MSGS.
*=== Check if material only passed =====================
IF G_STRING = 'M'.
PERFORM F_CHECK_FOR_MATERIALS TABLES LT_ZOQAPHO_HDRH
LT_ZOQAPHO_DTLH
LT_ZOQAPHO_MSGS
USING
'XXXXXXXXXXXXXXXXXX'
LC_GET_CHARGS_Y.
*=== Check if only lot_nbr passed ========================
ELSEIF G_STRING = 'L'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE LOT_NBR
IN S_CHARG
AND MATNR
= ' '
AND SERIAL_NBR = ' '.
*=== Check if only serial_nbr passed =====================
ELSEIF G_STRING = 'S'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE SERIAL_NBR IN S_SRLNBR
AND MATNR
= ' '
AND LOT_NBR
= ' '.
*=== Check if lot_nbr & serial nbr passed ================
ELSEIF G_STRING = 'LS'.
* For lot
SELECT * INTO CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE LOT_NBR
IN S_CHARG
AND MATNR
= ' '
AND SERIAL_NBR = ' '.
* For serial
WHERE LOT_NBR
IN S_CHARG
AND MATNR
= ' '
AND SERIAL_NBR IN S_SRLNBR.
* Now check with material & serial
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE LOT_NBR
= ' '
AND MATNR
IN S_MATNR
AND SERIAL_NBR IN S_SRLNBR.
* Now check with material & lot
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE LOT_NBR
IN S_CHARG
AND MATNR
IN S_MATNR
AND SERIAL_NBR = ' '.
* Now check with the material
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE LOT_NBR
IN S_CHARG
AND MATNR
IN S_MATNR
AND SERIAL_NBR IN S_SRLNBR.
ENDIF.
* Not done yet. If a serial or batch # check, then look for material
IF S_CHARG
<> ' '
OR S_SRLNBR <> ' '.
* But was a material passed?
IF S_MATNR <> ' '.
PERFORM F_CHECK_FOR_MATERIALS TABLES LT_ZOQAPHO_HDRH
LT_ZOQAPHO_DTLH
LT_ZOQAPHO_MSGS
USING 'XXXXXXXXXXXXXXXXXX'
LC_GET_CHARGS_N.
ELSE.
PERFORM F_SELECT_BTCHS_TO_UPDATE TABLES T_MCH1_TAB.
ENDIF.
ENDIF.
IF FP_BATCH <> ' '.
PERFORM F_SELECT_BTCHS TABLES T_MCH1_TAB
USING S_MATNR
FP_BATCH.
ENDIF.
IF NOT T_MCH1_TAB[] IS INITIAL.
Only want one occurence of the material number
DELETE ADJACENT DUPLICATES FROM T_MCH1_TAB COMPARING MATNR CHARG
SERNR.
LOOP AT T_MCH1_TAB.
* get all the details if it is Material Hold
PERFORM F_CHECK_FOR_MATERIALS TABLES LT_ZOQAPHO_HDRH
LT_ZOQAPHO_DTLH
LT_ZOQAPHO_MSGS
USING T_MCH1_TAB-MATNR
LC_GET_CHARGS_N.
* Get all the details if it is a Batch hold
PERFORM SUB_CHECK_FOR_LOTNBR TABLES LT_ZOQAPHO_HDRH
LT_ZOQAPHO_DTLH
LT_ZOQAPHO_MSGS
USING T_MCH1_TAB-CHARG
*
LC_GET_CHARGS_N.
ENDLOOP.
ENDIF.
* Now get all headers for the details
LOOP AT FT_ZOQAPHO_DTLH.
IF FT_ZOQAPHO_DTLH-AEDAT IS INITIAL.
*
current header?
SELECT SINGLE * INTO CORRESPONDING FIELDS OF FT_ZOQAPHO_HDRH
FROM ZOQAPHO_HDR
WHERE DIVISION = FT_ZOQAPHO_DTLH-DIVISION
AND PHONBR = FT_ZOQAPHO_DTLH-PHONBR
AND AEDAT
= FT_ZOQAPHO_DTLH-ERDAT
AND AEZET
= FT_ZOQAPHO_DTLH-ERZET.
IF SY-SUBRC <> 0.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF FT_ZOQAPHO_HDRH
FROM ZOQAPHO_HDRH
WHERE DIVISION = FT_ZOQAPHO_DTLH-DIVISION
AND PHONBR = FT_ZOQAPHO_DTLH-PHONBR
AND AEDAT
= FT_ZOQAPHO_DTLH-ERDAT
AND AEZET
= FT_ZOQAPHO_DTLH-ERZET.
ENDIF.
ELSE.
*
current header?
SELECT SINGLE * INTO CORRESPONDING FIELDS OF FT_ZOQAPHO_HDRH
FROM ZOQAPHO_HDR
WHERE DIVISION = FT_ZOQAPHO_DTLH-DIVISION
AND PHONBR = FT_ZOQAPHO_DTLH-PHONBR
AND AEDAT
= FT_ZOQAPHO_DTLH-AEDAT
AND AEZET
= FT_ZOQAPHO_DTLH-AEZET.
IF SY-SUBRC <> 0.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF FT_ZOQAPHO_HDRH
FROM ZOQAPHO_HDRH
WHERE DIVISION = FT_ZOQAPHO_DTLH-DIVISION
AND PHONBR = FT_ZOQAPHO_DTLH-PHONBR
AND AEDAT
= FT_ZOQAPHO_DTLH-AEDAT
AND AEZET
= FT_ZOQAPHO_DTLH-AEZET.
ENDIF.
ENDIF.
* Save it
APPEND FT_ZOQAPHO_HDRH.
*
AND ERDAT
AND ERZET
= FT_ZOQAPHO_DTLH-AEDAT
= FT_ZOQAPHO_DTLH-AEZET.
ENDIF.
ENDLOOP.
* Append
APPEND
APPEND
APPEND
LT_ZOQAPHO_MSGS-DIVISION
LT_ZOQAPHO_MSGS-PHONBR
LT_ZOQAPHO_MSGS-ITEM
LT_ZOQAPHO_MSGS-ERDAT
ERZET
IF SY-SUBRC <> 0.
READ TABLE LT_ZOQAPHO_DTLH
WITH KEY DIVISION
PHONBR
ITEM
AEDAT
AEZET
ENDIF.
= LT_ZOQAPHO_MSGS-ERZET.
=
=
=
=
=
LT_ZOQAPHO_MSGS-DIVISION
LT_ZOQAPHO_MSGS-PHONBR
LT_ZOQAPHO_MSGS-ITEM
LT_ZOQAPHO_MSGS-ERDAT
LT_ZOQAPHO_MSGS-ERZET.
If didn't find it then skip rest & delete because from history
IF SY-SUBRC <> 0.
DELETE LT_ZOQAPHO_MSGS.
CONTINUE.
ENDIF.
FROM ZOQAPHO_HDRH
WHERE DIVISION = LT_ZOQAPHO_MSGS-DIVISION
AND PHONBR = LT_ZOQAPHO_MSGS-PHONBR
AND AEDAT
= LT_ZOQAPHO_MSGS-ERDAT
AND AEZET
= LT_ZOQAPHO_MSGS-ERZET.
ENDIF.
ENDIF.
*
*
*
If we
CHECK
OR
OR
OR
OR
build
CLEAR FT_ZOQAPHO_DTLH.
FT_ZOQAPHO_DTLH-DIVISION = LT_ZOQAPHO_MSGS-DIVISION.
FT_ZOQAPHO_DTLH-PHONBR
= LT_ZOQAPHO_MSGS-PHONBR.
FT_ZOQAPHO_DTLH-MATNR
= LT_ZOQAPHO_MSGS-MATNR.
FT_ZOQAPHO_DTLH-ERDAT
= LT_ZOQAPHO_MSGS-ERDAT.
FT_ZOQAPHO_DTLH-ERZET
= LT_ZOQAPHO_MSGS-ERZET.
ADD 1 TO W_ERZET.
FT_ZOQAPHO_DTLH-ERZET_HIST = W_ERZET.
IF LT_ZOQAPHO_MSGS-ERDAT = LT_ZOQAPHO_HDRH-ERDAT.
FT_ZOQAPHO_DTLH-ERNAM
= LT_ZOQAPHO_HDRH-ERNAM.
ELSE.
FT_ZOQAPHO_DTLH-ERNAM
= LT_ZOQAPHO_HDRH-AENAM.
ENDIF.
Get the status - If plant then hold
IF LT_ZOQAPHO_HDRH-WERKS <> ' '.
LOOP AT T_ZOQAPHO_STATUS WHERE STATUS IN R_STATUS_H.
if find an initial status with action then use as priority
CHECK T_ZOQAPHO_STATUS-ACTION1 <> ' '.
CHECK T_ZOQAPHO_STATUS-STATUS IN R_STATUS_1.
EXIT.
ENDLOOP.
ELSE.
LOOP AT T_ZOQAPHO_STATUS WHERE STATUS IN R_STATUS_R.
if find a final status with action then use as priority
CHECK T_ZOQAPHO_STATUS-ACTION1 <> ' '.
CHECK T_ZOQAPHO_STATUS-STATUS IN R_STATUS_9.
EXIT.
ENDLOOP.
ENDIF.
*
*
FT_ZOQAPHO_DTLH-STATUS = T_ZOQAPHO_STATUS-STATUS.
APPEND FT_ZOQAPHO_DTLH.
ENDLOOP.
* Loop at local detail and add to output tables
LOOP AT LT_ZOQAPHO_DTLH.
* Get header
IF LT_ZOQAPHO_HDRH-DIVISION <> LT_ZOQAPHO_DTLH-DIVISION
OR LT_ZOQAPHO_HDRH-PHONBR
<> LT_ZOQAPHO_DTLH-PHONBR
OR ( LT_ZOQAPHO_HDRH-AEDAT <> LT_ZOQAPHO_DTLH-ERDAT
AND LT_ZOQAPHO_HDRH-AEDAT <> LT_ZOQAPHO_DTLH-AEDAT )
OR ( LT_ZOQAPHO_HDRH-AEZET <> LT_ZOQAPHO_DTLH-ERZET
AND LT_ZOQAPHO_HDRH-AEZET <> LT_ZOQAPHO_DTLH-AEZET ).
*
Check if from history or current
IF LT_ZOQAPHO_DTLH-AEDAT IS INITIAL.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_HDRH
FROM ZOQAPHO_HDR
WHERE DIVISION = LT_ZOQAPHO_DTLH-DIVISION
AND PHONBR = LT_ZOQAPHO_DTLH-PHONBR
AND AEDAT
= LT_ZOQAPHO_DTLH-ERDAT
AND AEZET
= LT_ZOQAPHO_DTLH-ERZET.
IF SY-SUBRC <> 0.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_HDRH
FROM ZOQAPHO_HDRH
WHERE DIVISION = LT_ZOQAPHO_DTLH-DIVISION
AND PHONBR = LT_ZOQAPHO_DTLH-PHONBR
AND AEDAT
= LT_ZOQAPHO_DTLH-ERDAT
AND AEZET
= LT_ZOQAPHO_DTLH-ERZET.
ENDIF.
ELSE.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_HDRH
FROM ZOQAPHO_HDR
WHERE DIVISION = LT_ZOQAPHO_DTLH-DIVISION
AND PHONBR = LT_ZOQAPHO_DTLH-PHONBR
AND AEDAT
= LT_ZOQAPHO_DTLH-AEDAT
AND AEZET
= LT_ZOQAPHO_DTLH-AEZET.
IF SY-SUBRC <> 0.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_HDRH
FROM ZOQAPHO_HDRH
WHERE DIVISION = LT_ZOQAPHO_DTLH-DIVISION
AND PHONBR = LT_ZOQAPHO_DTLH-PHONBR
AND AEDAT
= LT_ZOQAPHO_DTLH-AEDAT
AND AEZET
= LT_ZOQAPHO_DTLH-AEZET.
ENDIF.
ENDIF.
*
AND ERDAT
AND ERZET
= LT_ZOQAPHO_DTLH-ERDAT
= LT_ZOQAPHO_DTLH-ERZET.
ELSE.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_MSGS
FROM ZOQAPHO_MSGS
WHERE DIVISION = LT_ZOQAPHO_DTLH-DIVISION
AND PHONBR = LT_ZOQAPHO_DTLH-PHONBR
AND ITEM
= LT_ZOQAPHO_DTLH-ITEM
AND ERDAT
= LT_ZOQAPHO_DTLH-AEDAT
AND ERZET
= LT_ZOQAPHO_DTLH-AEZET.
ENDIF.
ENDLOOP.
ENDFORM.
"f_check_for_materials
*&---------------------------------------------------------------------*
*&
Form f_build_status_ranges
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM F_BUILD_STATUS_RANGES.
CHECK T_ZOQAPHO_STATUS[] IS INITIAL.
* Get all statuses
SELECT * INTO TABLE T_ZOQAPHO_STATUS
FROM ZOQAPHO_STATUS.
R_STATUS_H-OPTION
R_STATUS_H-SIGN
R_STATUS_1-OPTION
R_STATUS_1-SIGN
=
=
=
=
R_STATUS_R-OPTION = R_STATUS_C-OPTION
R_STATUS_R-SIGN = R_STATUS_C-SIGN
R_STATUS_9-OPTION
R_STATUS_9-SIGN
* Build ranges
LOOP AT T_ZOQAPHO_STATUS.
* Fill out ranges for type
CASE T_ZOQAPHO_STATUS-TYPE.
WHEN 'H'.
R_STATUS_H-LOW = T_ZOQAPHO_STATUS-STATUS.
APPEND R_STATUS_H.
WHEN 'R'.
R_STATUS_R-LOW = T_ZOQAPHO_STATUS-STATUS.
APPEND R_STATUS_R.
WHEN 'C'.
R_STATUS_R-LOW = T_ZOQAPHO_STATUS-STATUS.
APPEND R_STATUS_R.
R_STATUS_C-LOW = T_ZOQAPHO_STATUS-STATUS.
APPEND R_STATUS_C.
ENDCASE.
*
=
=
=
=
'EQ'.
'I'.
'EQ'.
'I'.
APPEND R_STATUS_9.
ENDCASE.
ENDLOOP.
ENDFORM.
"f_build_status_ranges
*&--------------------------------------------------------------------*
*&
Form f_select_btchs
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
*
-->Ft_mch1_TAB
text
*
-->FP_MATNR text
*
-->FP_CHARG text
*---------------------------------------------------------------------*
FORM F_SELECT_BTCHS TABLES FT_MCH1_TAB STRUCTURE W_MCH1
USING FP_MATNR
FP_CHARG.
IF FP_MATNR = ' '.
SELECT MATNR CHARG
APPENDING CORRESPONDING FIELDS OF TABLE FT_MCH1_TAB
FROM MCH1
WHERE CHARG = FP_CHARG.
ELSE.
SELECT MATNR CHARG
APPENDING CORRESPONDING FIELDS OF TABLE FT_MCH1_TAB
FROM MCH1
WHERE MATNR = FP_MATNR
AND CHARG = FP_CHARG.
ENDIF.
ENDFORM.
"f_select_btchs
*&--------------------------------------------------------------------*
*&
Form f_select_btchs_to_update
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
*
-->Ft_mch1_TAB
text
*
-->FP_LOT_NBR text
*
-->FP_SERIAL_Ntext
*---------------------------------------------------------------------*
FORM F_SELECT_BTCHS_TO_UPDATE
TABLES FT_MCH1_TAB
STRUCTURE W_MCH1.
.
DATA: LT_CABN
LIKE CABN OCCURS 0 WITH HEADER LINE,
LW_CABN_B
LIKE CABN,
LW_CABN_S
LIKE CABN,
LT_AUSP
LIKE AUSP OCCURS 0 WITH HEADER LINE,
LT_AUSP_B
LIKE AUSP OCCURS 0 WITH HEADER LINE,
LT_EQUI_TAB TYPE EQUI OCCURS 0 WITH HEADER LINE,
LT_INOB
LIKE INOB OCCURS 0 WITH HEADER LINE,
L_MATNR_LEN TYPE I,
L_ATWRT
LIKE AUSP-ATWRT.
RANGES:R_ATWRT FOR AUSP-ATWRT.
* Need matnr length
DESCRIBE FIELD FT_MCH1_TAB-MATNR LENGTH L_MATNR_LEN IN CHARACTER MODE.
LW_CABN_B
KEY ATNAM = 'SOURCE_BATCH_NUMBER'.
LW_CABN_S
KEY ATNAM = 'SERIAL_NUMBER'.
*
*
table
= LT_EQUI_TAB-MATNR.
= LT_EQUI_TAB-CHARGE.
= LT_EQUI_TAB-SERNR.
ENDLOOP.
* Merge the Messages data
LOOP AT FT_ZOQAPHO_MSGS.
W_PHO_MESSAGES-DIVISION = FT_ZOQAPHO_MSGS-DIVISION.
W_PHO_MESSAGES-PHONBR = FT_ZOQAPHO_MSGS-PHONBR.
W_PHO_MESSAGES-ITEM = FT_ZOQAPHO_MSGS-ITEM.
W_PHO_MESSAGES-ERDAT = FT_ZOQAPHO_MSGS-ERDAT.
W_PHO_MESSAGES-ERZET = FT_ZOQAPHO_MSGS-ERZET.
W_PHO_MESSAGES-MATNR = FT_ZOQAPHO_MSGS-MATNR.
W_PHO_MESSAGES-CHARG = FT_ZOQAPHO_MSGS-CHARG.
W_PHO_MESSAGES-ERDAT_1ST = FT_ZOQAPHO_MSGS-ERDAT_1ST.
W_PHO_MESSAGES-ERZET_1ST = FT_ZOQAPHO_MSGS-ERZET_1ST.
APPEND W_PHO_MESSAGES TO T_PHO_MESSAGES.
CLEAR W_PHO_MESSAGES.
ENDLOOP.
SORT T_PHO_HEADER .
DELETE ADJACENT DUPLICATES FROM T_PHO_HEADER COMPARING ALL FIELDS.
SORT T_PHO_DETAIL .
DELETE ADJACENT DUPLICATES FROM T_PHO_DETAIL COMPARING ALL FIELDS.
SORT T_PHO_MESSAGES .
DELETE ADJACENT DUPLICATES FROM T_PHO_MESSAGES COMPARING ALL FIELDS.
ENDFORM.
" sub_merge_data
*&--------------------------------------------------------------------*
*&
Form sub_check_for_lotnbr
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
*
-->FT_ZOQAPHO_text
*
-->FT_ZOQAPHO_text
*
-->FT_ZOQAPHO_text
*
-->FP_MATNR text
*
-->FP_HIST_ALStext
*---------------------------------------------------------------------*
FORM SUB_CHECK_FOR_LOTNBR TABLES FT_ZOQAPHO_HDRH STRUCTURE ZOQAPHO_HDRH
FT_ZOQAPHO_DTLH STRUCTURE ZOQAPHO_DTLH
FT_ZOQAPHO_MSGS STRUCTURE ZOQAPHO_MSGS
USING FP_CHARG
FP_GET_CHARGS.
* Local
DATA: LT_ZOQAPHO_HDRH TYPE ZOQAPHO_HDRH OCCURS 0 WITH HEADER LINE,
LT_ZOQAPHO_DTLH TYPE ZOQAPHO_DTLH OCCURS 0 WITH HEADER LINE,
LT_ZOQAPHO_MSGS TYPE ZOQAPHO_MSGS OCCURS 0 WITH HEADER LINE.
* Get from detail table
IF FP_CHARG = 'XXXXXXXXXXXXXXXXXX'.
IF NOT S_MATNR[] IS INITIAL.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE LT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE MATNR
IN S_MATNR
AND LOT_NBR
= ' '
AND SERIAL_NBR = ' '.
ENDIF.
ELSE.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE LT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE MATNR
= ' '
AND LOT_NBR
= FP_CHARG
AND SERIAL_NBR = ' '.
ENDIF.
LT_ZOQAPHO_MSGS-DIVISION
LT_ZOQAPHO_MSGS-PHONBR
LT_ZOQAPHO_MSGS-ITEM
LT_ZOQAPHO_MSGS-ERDAT
LT_ZOQAPHO_MSGS-ERZET.
LT_ZOQAPHO_MSGS-DIVISION
LT_ZOQAPHO_MSGS-PHONBR
LT_ZOQAPHO_MSGS-ITEM
LT_ZOQAPHO_MSGS-ERDAT
LT_ZOQAPHO_MSGS-ERZET.
If didn't find it then skip rest & delete because from history
IF SY-SUBRC <> 0.
DELETE LT_ZOQAPHO_MSGS.
CONTINUE.
ENDIF.
Append detail rec
APPEND LT_ZOQAPHO_DTLH TO FT_ZOQAPHO_DTLH.
ENDIF.
*
If we
CHECK
OR
OR
OR
OR
build
CLEAR FT_ZOQAPHO_DTLH.
FT_ZOQAPHO_DTLH-DIVISION = LT_ZOQAPHO_MSGS-DIVISION.
FT_ZOQAPHO_DTLH-PHONBR
= LT_ZOQAPHO_MSGS-PHONBR.
FT_ZOQAPHO_DTLH-MATNR
= LT_ZOQAPHO_MSGS-MATNR.
FT_ZOQAPHO_DTLH-ERDAT
= LT_ZOQAPHO_MSGS-ERDAT.
FT_ZOQAPHO_DTLH-ERZET
= LT_ZOQAPHO_MSGS-ERZET.
ADD 1 TO W_ERZET.
FT_ZOQAPHO_DTLH-ERZET_HIST = W_ERZET.
IF LT_ZOQAPHO_MSGS-ERDAT = LT_ZOQAPHO_HDRH-ERDAT.
FT_ZOQAPHO_DTLH-ERNAM
= LT_ZOQAPHO_HDRH-ERNAM.
ELSE.
FT_ZOQAPHO_DTLH-ERNAM
= LT_ZOQAPHO_HDRH-AENAM.
ENDIF.
Get the status - If plant then hold
ENDIF.
ENDIF.
*
ENDFORM.
"sub_check_for_lotnbr
*&---------------------------------------------------------------------*
*&
Form sub_get_stock_data
*&---------------------------------------------------------------------*
*
Get stock data
*----------------------------------------------------------------------*
FORM SUB_GET_STOCK_DATA .
DATA: L_PROGRAMM LIKE RS38M-PROGRAMM VALUE 'ZROQA0095_RMMMBEST'.
RANGES: LR_MATNR FOR MKOL-MATNR,
LR_WERKS FOR MKOL-WERKS,
LR_LGORT FOR MKOL-LGORT,
LR_CHARG FOR MKOL-CHARG,
LR_SOBKZ FOR MKOL-SOBKZ.
CLEAR LR_CHARG. REFRESH LR_CHARG.
IF NOT W_PHO_MESSAGES-CHARG IS INITIAL.
LR_CHARG-LOW = W_PHO_MESSAGES-CHARG.
LR_CHARG-HIGH = W_PHO_MESSAGES-CHARG.
LR_CHARG-OPTION = 'EQ'.
LR_CHARG-SIGN = 'I'.
APPEND LR_CHARG.
ENDIF.
* Clear tables
REFRESH: BBE, WBE, LBE, CBE, KBE, EBS, MPS, PBE,
OBS, OSU, OEB, VBS, VSU, WBS, WSU.
* Submit the report
SUBMIT (L_PROGRAMM) EXPORTING LIST TO MEMORY
WITH MS_MATNR EQ W_PHO_MESSAGES-MATNR
*
WITH ms_werks IN s_werks
WITH MS_LGORT IN LR_LGORT
WITH MS_CHARG
WITH KZLSO
WITH KZLON
WITH SOBKZ
WITH VERNU
WITH MEINH
AND RETURN.
IN
EQ
EQ
IN
EQ
EQ
LR_CHARG
C_CHECKED
C_CHECKED
LR_SOBKZ
'1'
' '
IMPORT BBE WBE LBE CBE KBE EBS MPS PBE OBS OSU OEB VBS VSU WBS WSU
FROM MEMORY ID 'ZPHOSTOCK'.
ENDFORM.
" sub_get_stock_data
************satya***********insert***************end***CHG03**********