You are on page 1of 52

*&---------------------------------------------------------------------*

*& Program Name


: ZROTC0097_01
*
*& Author
: Prashanth Raghava Dasyam
*
*& Creation Date
: June-10-2004
*
*& Program Type
: Report (R)
*
*& SAP Release
: 4.7
*
*& Description
: Active PHO Detail Report
*
*& Transport No
: DR1K904159
*
*& Transaction
: ZOQAPHO0097
*
*&---------------------------------------------------------------------*
*& Revision Log
*
*& Date
: 25/06/2004
*
*& Author
: Prashanth Raghava Dasyam
*
*& Description
: Changed the layout of the Report from List
*
*&
display to ALV grid
*
*&
*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Revision Log
*
*& Date
: 07/07/2004
*
*& Author
: Satya Ravi
*
*& Description
: 1.Added the GUI status to make sure that excel *
*&
download works properly
*
*&
2. Business and Product number added to seletion*
*&
screen.
*
*&
3. added reserved quantity to output from RESB *
*& REVISIONFLAG
:CHG02
*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Revision Log
*
*& Date
: 07/27/2004
*
*& Author
: Satya Ravi
*
*& Description
: The report is modified to address the issues
*
*&
raised in the CRD such as
*
*&
1 Able search the PHO holds on material number *
*
batch number, and serial number though the
*
*&
hold does not correspond to the selection
*
*&
made in the selection screen.
*
*&
2.Some of the selections on selections were
*
*&
deleted.( userid in detail, initiator in header*
*&
transaction time in Messages)
*
*&
3.Diffrent stock columns are removed and now only*
*&
total stock is present in the columns and the *
*&
logic to calculate the total stock is changed *
*& REVISIONFLAG
:CHG03
*
*&---------------------------------------------------------------------*
************satya***********COMMENT****CHG02 START****************
*REPORT ZROTC0097_01
NO STANDARD PAGE HEADING
*
MESSAGE-ID ZO
*
LINE-COUNT 65
*
LINE-SIZE 325.
************satya***********COMMENT****CHG02 END****************
INCLUDE RMMMBTOP.
"CHG03
*&---------------------------------------------------------------------*
*& TABLES:
*&---------------------------------------------------------------------*
TABLES:
ZOQAPHO_HDR,
"PHO header
ZOQAPHO_DTL,
"PHO Detail

ZOQAPHO_MSGS,
ZOQAPHO_STATUS,
* MARA,
AUSP,
USR01.

"PHO messages
"PHO status table
"General Material Data"CHG03
"Characteristic Values
"User master record (runtime data)

* Begin of change on 25/06/2004


*--------------------------------------------------------------------*
*
Type pool declaration
*
*--------------------------------------------------------------------*
TYPE-POOLS: SLIS. "For ALV Report
INCLUDE RVREUSE_GLOBAL_DATA. "satya ravi CHG02
* End of change on 25/06/2004
*&---------------------------------------------------------------------*
*& Declaration of types
*&---------------------------------------------------------------------*
TYPES:
* Type declaration for internal table containing PHO header data
* retrieved from custom table ZOQAPHO_HDR (PHO header).
BEGIN OF TY_PHO_HEADER,
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
END OF TY_PHO_HEADER,
* Type declaration for internal table containing PHO detail data
* retrieved from custom table ZOQAPHO_DTL (PHO Detail).
BEGIN OF TY_PHO_DETAIL,
DIVISION
TYPE SPART,
"Division
PHONBR
TYPE Z_OQAPHONBR,
"Business Hold Number
ITEM
TYPE Z_OQAITEM,
"Item number
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
ERZET
TYPE ERZET,
"Entry time
ERNAM
TYPE ERNAM,
"User ID
* Begin of change on 24/06/2004
AEDAT
TYPE AEDAT,
"Date of Last Change
AEZET
TYPE AEZET,
"Time last change was made
* End of change on 24/06/2004
END OF TY_PHO_DETAIL,
* Type declaration for internal table containing PHO messages
* retrieved from custom table ZOQAPHO_MSGS (PHO messages).
BEGIN OF TY_PHO_MESSAGES,
DIVISION
TYPE SPART,
"Division
PHONBR
TYPE Z_OQAPHONBR,
"Business Hold Number
ITEM
TYPE Z_OQAITEM,
"Item number
* Begin of change on 24/06/2004

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

* Begin of change on 30/06/2004


TYPES: BEGIN OF TY_QNTY_DETAILS,
MATNR TYPE MATNR,
"Material Number
CHARG TYPE CHARG_D,
"Batch Number
WERKS TYPE WERKS_D,
"Plant
LGORT TYPE LGORT_D,
"storage location
CLABS TYPE LABST,
"Valuated stock with unrestricted use
CEINM TYPE EINME,
"Total Stock of All Restricted Batches
END OF TY_QNTY_DETAILS.
*****CHG02 BEGIN
TYPES: BEGIN OF TY_RESB_DETAILS,
MATNR TYPE MATNR,
"Material Number
CHARG TYPE CHARG_D,
"Batch Number
WERKS TYPE WERKS_D,
"Plant
LGORT TYPE LGORT_D,
"storage location

BDMNG TYPE BDMNG,


"Total Stock of All Restricted Batches
END OF TY_RESB_DETAILS.
******CHG02 END
TYPES: BEGIN OF TY_QNTY_FINAL,
MATNR TYPE MATNR,
"Material Number
CHARG TYPE CHARG_D,
"Batch Number
CLABS TYPE LABST,
"Valuated stock with unrestricted use
CEINM TYPE EINME,
"Total Stock of All Restricted Batches
BDMNG TYPE BDMNG,
" Total reserved stock
END OF TY_QNTY_FINAL.
*********CHG02 BEGIN
TYPES: BEGIN OF TY_RESB_FINAL,
MATNR TYPE MATNR,
"Material Number
CHARG TYPE CHARG_D,
"Batch Number
BDMNG TYPE BDMNG,
" Total reserved stock
END OF TY_RESB_FINAL.
*******CHG02 END
************satya***********insert****CHG03 START****************
TYPES: BEGIN OF TY_MCH1,
MATNR TYPE MATNR,
"Material Number
CHARG TYPE CHARG_D,
"Batch Number
SERNR TYPE ZOQAPHO_DTL-SERIAL_NBR,
" SERIAL NUMBER
END OF TY_MCH1.
************satya***********insert****CHG03 END****************
* End of change on 30/06/2004
*&---------------------------------------------------------------------*
*& Declaration of CONSTANTS
*&---------------------------------------------------------------------*
CONSTANTS:
C_MAFID TYPE KLMAF VALUE 'O',
"Const 'O'
C_CLASSTY TYPE KLASSENART VALUE '001',
"Const '001'
C_ONE(1)
TYPE C VALUE '1',
"Constant 1.
* C_PRONUMBER(18) TYPE C VALUE 'MDT_MATERIAL_UPN', "'MDT_MATERIAL_UPN'.
C_PRONUMBER(18) TYPE C VALUE 'PRODUCT_NUMBER', "'MDT_MATERIAL_UPN'.
"Product No
* Begin of change on 25/06/2004
C_DIVISION

TYPE SLIS_FIELDNAME VALUE 'DIVISION',


"divison
C_PHONBR
TYPE SLIS_FIELDNAME VALUE 'PHONBR',
"Business Hold Number
C_BU
TYPE SLIS_FIELDNAME VALUE 'BU',
"Business Unit
C_REVISION TYPE SLIS_FIELDNAME VALUE 'REVISION',
"Business Hold Revision
C_HOLDCODE TYPE SLIS_FIELDNAME VALUE 'HOLDCODE',
"Hold Code
C_INITIATOR TYPE SLIS_FIELDNAME VALUE 'INITIATOR',
"Initiator
C_USERID
TYPE SLIS_FIELDNAME VALUE 'USERID',
"Initiator MDT ID
C_HOLDTITLE TYPE SLIS_FIELDNAME VALUE 'HOLDTITLE',
"Hold Title/Reason
C_SERIAL_NBR TYPE SLIS_FIELDNAME VALUE 'SERIAL_NBR',
"Serial Characteristic number
C_STATUS
TYPE SLIS_FIELDNAME VALUE 'STATUS',
"PHO status
C_REV_HELD TYPE SLIS_FIELDNAME VALUE 'REV_HELD',

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

* End of change on 25/06/2004


* Begin of change on 30/06/2004
C_CLABS TYPE SLIS_FIELDNAME VALUE 'CLABS',
"changed on 30/06/2004
C_CEINM TYPE SLIS_FIELDNAME VALUE 'CEINM',
"changed on 30/06/2004
C_BDMNG TYPE SLIS_FIELDNAME VALUE 'BDMNG'.
* End of change on 30/06/2004
*&---------------------------------------------------------------------*
*& Decalration of INTERNAL TABLES
*&---------------------------------------------------------------------*
DATA :
* Internal table for containing PHO header data retrieved from custom
* table ZOQAPHO_HDR (PHO header).
T_PHO_HEADER
TYPE STANDARD TABLE OF TY_PHO_HEADER INITIAL SIZE 0,
* Internal table for containing PHO Detail data retrieved from custom
* table ZOQAPHO_DTL (PHO Detail).
T_PHO_DETAIL
TYPE STANDARD TABLE OF TY_PHO_DETAIL INITIAL SIZE 0,
* Internal table for containing PHO Detail data retrieved from custom
* table ZOQAPHO_DTL (PHO Detail).
T_PHO_MESSAGES_TEMP TYPE STANDARD TABLE OF TY_PHO_MESSAGES INITIAL
SIZE 0,
* Internal table for containing PHO messages retrieved from custom
* table ZOQAPHO_MSGS (PHO messages).
T_PHO_MESSAGES TYPE STANDARD TABLE OF TY_PHO_MESSAGES INITIAL SIZE 0,
* Internal table for containing the final data
T_PHO_FINAL TYPE STANDARD TABLE OF TY_PHO_FINAL INITIAL SIZE 0,
* Declaration of internal table contains information for
* Product number
T_MARA TYPE STANDARD TABLE OF TY_MARA INITIAL SIZE 0,

* Declaration of internal table contains information for


* product number
T_MARA_TEMP TYPE STANDARD TABLE OF TY_MARA INITIAL SIZE 0,
* Begin of change on 25/06/2004
* Internal Table for the ALV Report Field Catalog
T_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "field catalog
* Internal Table for the ALV Report Event
T_EVENT TYPE SLIS_T_EVENT,
"for event handling
* Internal Table for the ALV Header for Medtronic
T_HEADER TYPE SLIS_T_LISTHEADER,
"Report Header table
* End of change on 25/06/2004
* Begin of change on 30/06/2004
* internal table for quantity details
T_QNTY_DETAILS TYPE STANDARD TABLE OF TY_QNTY_DETAILS INITIAL
SIZE 0,
" for quantity details
* internal table for quantity details
T_QNTY_FINAL TYPE STANDARD TABLE OF TY_QNTY_FINAL INITIAL
SIZE 0,
" for quantity details
* end of change on 30/06/2004
********CHG02 BEGIN
T_RESB_DETAILS TYPE STANDARD TABLE OF TY_RESB_DETAILS
INITIAL SIZE 0,
" for RESB quantity details
T_RESB_FINAL TYPE STANDARD TABLE OF TY_RESB_FINAL INITIAL
SIZE 0.
" for quantity details
*******CHG02 END
************satya***********insert****CHG03 START****************
DATA: T_ZOQAPHO_STATUS LIKE ZOQAPHO_STATUS OCCURS 0 WITH HEADER LINE.
DATA: FT_ZOQAPHO_HDRH TYPE ZOQAPHO_HDRH OCCURS 0 WITH HEADER LINE,
FT_ZOQAPHO_DTLH TYPE ZOQAPHO_DTLH OCCURS 0 WITH HEADER LINE,
FT_ZOQAPHO_MSGS TYPE ZOQAPHO_MSGS OCCURS 0 WITH HEADER LINE.
DATA:T_MCH1_TAB TYPE TY_MCH1 OCCURS 0 WITH HEADER LINE.
************satya***********INSERT****CHG03 END***************
************satya***********insert****CHG02 START****************
DATA: W_CALLBACK_PF_STATUS_SET TYPE SLIS_FORMNAME
VALUE 'F_PF_STATUS_SET'.
DATA: W_CALLBACK_USER_COMMAND TYPE SLIS_FORMNAME
VALUE 'F_USER_COMMAND'.
************satya***********insert***CHG02*end********************
*&---------------------------------------------------------------------*
*& Decalration of INTERNAL TABLE WORK AREAS
*&---------------------------------------------------------------------*
DATA:
* Work area for internal table t_pho_header.
W_PHO_HEADER
TYPE TY_PHO_HEADER,
* Work area for internal table t_pho_detail.
W_PHO_DETAIL
TYPE TY_PHO_DETAIL,
* Work area for internal table t_pho_detail.
W_PHO_MESSAGES_TEMP
TYPE TY_PHO_MESSAGES,
* Work area for internal table t_pho_messages.

W_PHO_MESSAGES TYPE TY_PHO_MESSAGES,


* Work area declaration for internal table that contains
*information for product number
W_MARA TYPE TY_MARA,
* Work area declaration for internal table that contains
* information for product number
W_MARA_TEMP TYPE TY_MARA,
* Work area for internal table t_pho_messages.
W_PHO_FINAL TYPE TY_PHO_FINAL,
* Begin of change on 25/06/2004
* Work Area for the ALV Report Layout
W_LAYOUT TYPE SLIS_LAYOUT_ALV,
"work area for layout
* Work Area for the Internal Table for the ALV Report Field Catalog
W_FIELDCAT TYPE SLIS_FIELDCAT_ALV, "work area for Field catalog
* Work Area for the Internal Table for the ALV Report Event
W_EVENT
TYPE SLIS_ALV_EVENT,
"work area for Event
* End of change on 25/06/2004
* Begin of change on 30/06/2004
* work area for quantity details
W_QNTY_DETAILS TYPE TY_QNTY_DETAILS, "for quantity details
** work area for reservation quantity details
W_RESB_DETAILS TYPE TY_RESB_DETAILS, "for quantity details
W_RESB_FINAL TYPE TY_RESB_FINAL, "for RESB quantity final
* work area for quantity details
W_QNTY_FINAL TYPE TY_QNTY_FINAL. "for quantity final
* end of change on 30/06/2004
DATA:W_SY_TITLE
LIKE SY-TITLE.
"satya ravi
DATA: W_ERZET
LIKE ZOQAPHO_DTLH-ERZET.
"CHG03
DATA:W_MCH1 TYPE TY_MCH1.
"CHG03
*&---------------------------------------------------------------------*
*& Decalration of GLOBAL VARIABLES
*&---------------------------------------------------------------------*
DATA:
G_MATNR TYPE OBJNUM,
"Key of object to be classified
G_PRONUM TYPE ATINN.
"Internal characteristic
DATA:G_STRING(4) TYPE C.
"CHG03
********SATYA****INSERT*********BEGIN********************CHG03*********
*&---------------------------------------------------------------------*
*& Decalration of RANGES
*&---------------------------------------------------------------------*
RANGES: R_STATUS_H FOR ZOQAPHO_STATUS-STATUS,
R_STATUS_R FOR ZOQAPHO_STATUS-STATUS,
R_STATUS_C FOR ZOQAPHO_STATUS-STATUS,
R_STATUS_1 FOR ZOQAPHO_STATUS-STATUS,
R_STATUS_9 FOR ZOQAPHO_STATUS-STATUS.
********SATYA****INSERT*********END********************CHG03*********
*&---------------------------------------------------------------------*

*& SELECTION SCREEN:


*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Select-options:
*&---------------------------------------------------------------------*
*********************SATYA*****INSERT***BEGIN******CHG03***************
SELECTION-SCREEN BEGIN OF BLOCK B_NOTE
WITH FRAME TITLE TEXT-004.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(79) TEXT-005.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(79) TEXT-006.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B_NOTE.
*********************SATYA*****INSERT***END******CHG03***************
* For PHO Header data selection criteria.
SELECTION-SCREEN BEGIN OF BLOCK B_PHO_HEADER
WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
S_BU
FOR ZOQAPHO_HDR-BU,
"Business "CHG02
S_DVSN
FOR ZOQAPHO_HDR-DIVISION,
"Division
S_PHONBR FOR ZOQAPHO_HDR-PHONBR,
"Business Hold Number
S_REVISN FOR ZOQAPHO_HDR-REVISION,
"Business Hold Revision
S_HTITLE FOR ZOQAPHO_HDR-HOLDTITLE,
"Hold Title/Reason
* S_INTUSR FOR ZOQAPHO_HDR-INITIATOR, "Initiator "CHG03 COMMENT
S_INTMDT FOR ZOQAPHO_HDR-USERID,
"Initiator MDT
S_HDCODE FOR ZOQAPHO_HDR-HOLDCODE.
"Hold Code
SELECTION-SCREEN END OF BLOCK B_PHO_HEADER.
* For PHO Detail data selection criteria.
SELECTION-SCREEN BEGIN OF BLOCK B_PHO_DETAIL
WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS:
S_SRLNBR FOR ZOQAPHO_DTL-SERIAL_NBR, "Serial Number
S_STATUS FOR ZOQAPHO_DTL-STATUS,
"Status
S_HLDATE FOR ZOQAPHO_DTL-ERDAT.
"Initial Hold Date
* S_USRID FOR ZOQAPHO_DTL-ERNAM.
"User ID"CHG03 COMMENT
SELECTION-SCREEN END OF BLOCK B_PHO_DETAIL.
* For PHO messages selection criteria.
SELECTION-SCREEN BEGIN OF BLOCK B_PHO_MESSAGES
WITH FRAME TITLE TEXT-003.
SELECT-OPTIONS:
S_MATNR FOR ZOQAPHO_MSGS-MATNR,
"Material Number
S_CHARG FOR ZOQAPHO_MSGS-CHARG,
"Batch Number
S_PRODNR FOR AUSP-ATWRT,
"Product number CHG02
S_TRDATE FOR ZOQAPHO_MSGS-ERDAT_1ST. "Transaction Date
* S_TRTIME FOR ZOQAPHO_MSGS-ERZET_1ST. "Transaction Time"CHG03 COMM
SELECTION-SCREEN END OF BLOCK B_PHO_MESSAGES.
*&--------------------------------------------------------------------*
* INITIALIZATION EVENT:
*&--------------------------------------------------------------------*

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

* Clear all work areas


CLEAR:
W_PHO_HEADER,
W_PHO_DETAIL,
W_PHO_MESSAGES,
W_PHO_FINAL,
W_FIELDCAT,
"changed
W_EVENT,
"changed
W_LAYOUT,
"changed
W_QNTY_DETAILS, "changed
W_QNTY_FINAL.
"changed

on
on
on
on
on

25/06/2004
25/06/2004
25/06/2004
30/06/2004
30/06/2004

* Clear all global variables


CLEAR:
G_MATNR,
G_PRONUM.
ENDFORM.

" 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.

S_DVSN IS INITIAL AND


S_HTITLE IS INITIAL AND
S_HDCODE IS INITIAL AND
S_MATNR IS INITIAL AND

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

* Validate division (DIVISION) using check table TSPA(Organizational


* Unit: Sales Divisions).
IF NOT S_DVSN IS INITIAL.
SELECT SINGLE SPART
"Division
FROM TSPA
"Sales Divisions table
INTO L_DIVISION
WHERE SPART IN S_DVSN.
IF SY-SUBRC NE 0.
MESSAGE I185(ZO).
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
* validate hold code
IF NOT S_HDCODE IS INITIAL.
SELECT HOLDCODE UP TO 1 ROWS
FROM ZOQAPHO_HDR
INTO ZOQAPHO_HDR-HOLDCODE
WHERE HOLDCODE IN S_HDCODE.

"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

* Display and error message for in correct log status


IF SY-SUBRC NE 0.
MESSAGE I188(ZO).
LEAVE LIST-PROCESSING.

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

* Display an error message if in correct error message is entered


IF SY-SUBRC NE 0.
MESSAGE I186(ZO).
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
* Validate Batch Number
IF NOT S_CHARG IS INITIAL.
SELECT SINGLE CHARG INTO L_CHARG
FROM MCH1 WHERE CHARG IN S_CHARG.

"Batch number

**Give an error message for incorrect value entered


IF SY-SUBRC NE 0.
MESSAGE I187(ZO).
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
ENDFORM.

" 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.
*

Sort the internal table t_pho_header if data exists.


SORT T_PHO_HEADER BY DIVISION PHONBR.
ENDIF.
ENDIF.
ENDFORM.
" sub_retrive_pho_header_data
*&---------------------------------------------------------------------*
*&
Form sub_retrive_pho_detail_data
*&---------------------------------------------------------------------*
*
This routine retrieves PHO Detail data from custom table
*
ZOQAPHO_HDR (PHO Detail) satisfying the selection criteria
*
entered by the user at selection screen.
*----------------------------------------------------------------------*
*
PARAMETERS: NONE

*----------------------------------------------------------------------*
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.
*

Give message and stop further processing if no data found.


MESSAGE I193(ZO).
LEAVE LIST-PROCESSING.
ELSE.

Sort the internal table t_pho_detail if data exists.


SORT T_PHO_DETAIL BY DIVISION PHONBR ITEM.
ENDIF.
ENDIF.
ENDFORM.
" sub_retrive_pho_detail_data
*&---------------------------------------------------------------------*
*&
Form sub_retrive_pho_messages
*&---------------------------------------------------------------------*
*
This routine retrieves PHO messages data from custom table
*
ZOQAPHO_MSGS (PHO messages) satisfying the selection criteria
*
entered by the user at selection screen.
*----------------------------------------------------------------------*
*
PARAMETERS: NONE
*----------------------------------------------------------------------*
FORM SUB_RETRIVE_PHO_MESSAGES .
* Retrive PHO messages from ZOQAPHO_MSGS (PHO messages) into internal
* table t_pho_message satisfying the selection criteria for messages
* entered at selection screen.
IF NOT T_PHO_DETAIL[] IS INITIAL.
SELECT DIVISION
"Division

PHONBR
ITEM
ERDAT

*
*

"Business Hold Number


"Item number
"Date on which the record was created
"changed on 24/06/2004
ERZET
"Entry time
"changed on 24/06/2004
MATNR
"Material Number
CHARG
"Batch Number
ERDAT_1ST
"Transaction Date
ERZET_1ST
"Transaction Time
FROM ZOQAPHO_MSGS INTO TABLE T_PHO_MESSAGES
FOR ALL ENTRIES IN T_PHO_DETAIL
WHERE DIVISION = T_PHO_DETAIL-DIVISION AND
PHONBR = T_PHO_DETAIL-PHONBR AND
ITEM
= T_PHO_DETAIL-ITEM AND
MATNR IN S_MATNR AND
CHARG
IN S_CHARG AND
ERDAT_1ST IN S_TRDATE.
ERZET_1ST IN S_TRTIME.
"COMMENT CHG03

* Check for the success of select database operation.


IF SY-SUBRC NE 0.
* Give message and stop further processing if no data found.
MESSAGE I194(ZO).
LEAVE LIST-PROCESSING.
ELSE.
*

Sort the internal table t_pho_messages if data exists.


SORT T_PHO_MESSAGES BY DIVISION
PHONBR
ITEM
ERDAT
"changed on 24/06/2004
ERZET
"changed on 24/06/2004
MATNR.
ENDIF.
ENDIF.
ENDFORM.
" sub_retrive_pho_messages
*&---------------------------------------------------------------------*
*&
Form sub_product_number
*&---------------------------------------------------------------------*
*
form to retrieve the feature (ATINN) for product number
*----------------------------------------------------------------------*
*
No parameters
*----------------------------------------------------------------------*
FORM SUB_PRODUCT_NUMBER .
* CONVERSION_EXIT_ATINN_INPUT(Conversion exits for chars)
CALL FUNCTION 'CONVERSION_EXIT_ATINN_INPUT'
EXPORTING
INPUT = C_PRONUMBER
"Product Number
IMPORTING
OUTPUT = G_PRONUM.
"Product Number
ENDFORM.

" 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.
*
*

Retrieve the product Number from Function Module


table into internal table t_mara
G_MATNR = W_PHO_MESSAGES_TEMP-MATNR.
CALL FUNCTION
EXPORTING
MAFID
CLASSTYPE
OBJECT
FEATURE
TABLES
EXP_AUSP
EXCEPTIONS
NO_VALUES
OTHERS

'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

* Begin of change on 30/06/2004


*&---------------------------------------------------------------------*
*&
Form sub_getquantity
*&---------------------------------------------------------------------*
*
to get restricted/unrestricted quantity details from table MCHB
*----------------------------------------------------------------------*
*
No parameters
*----------------------------------------------------------------------*
FORM SUB_GETQUANTITY .
DATA:LV_STOCK TYPE EINME.
"CHG03
REFRESH : T_PHO_MESSAGES_TEMP[].
T_PHO_MESSAGES_TEMP[] = T_PHO_MESSAGES[].
SORT T_PHO_MESSAGES_TEMP BY MATNR CHARG.
*Delete duplicate material numbers.
DELETE ADJACENT DUPLICATES FROM T_PHO_MESSAGES_TEMP
COMPARING MATNR CHARG.
IF NOT T_PHO_MESSAGES_TEMP[] IS INITIAL.
************satya***********insert***************begin***CHG03**********
LOOP AT T_PHO_MESSAGES_TEMP INTO W_PHO_MESSAGES.
PERFORM SUB_GET_STOCK_DATA.
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.
LOOP AT T_MCH1_TAB.
CLEAR W_PHO_MESSAGES.
W_PHO_MESSAGES-MATNR = T_MCH1_TAB-MATNR.
W_PHO_MESSAGES-CHARG = T_MCH1_TAB-CHARG.
PERFORM SUB_GET_STOCK_DATA.

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

* End of change on 30/06/2004


*&---------------------------------------------------------------------*
*&
Form sub_integrate_data
*&---------------------------------------------------------------------*
*
To integrate the data retrived form PHO header, detail and
*
*
messages tables
*----------------------------------------------------------------------*
*
No Parameters
*----------------------------------------------------------------------*
FORM SUB_INTEGRATE_DATA .
DATA: LV_MCH1_SUCCESS TYPE C.

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
**
**
**
**

LOOP AT t_pho_messages INTO w_pho_messages


WHERE division = w_pho_detail-division
AND phonbr = w_pho_detail-phonbr
AND item = w_pho_detail-item.
IF W_PHO_DETAIL-AEDAT IS INITIAL.

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-ERDAT
ERZET = W_PHO_DETAIL-ERZET
BINARY SEARCH.
IF SY-SUBRC <> 0.
clear W_PHO_MESSAGES.
endif.
* End of change on 24/06/2004
*get the product number using material number.
CLEAR W_MARA.
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.
*
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

SORT T_PHO_FINAL BY DIVISION


BU
PHONBR
REVISION
MATNR
CHARG
SERIAL_NBR.
* Populating field catalog
PERFORM SUB_CREATE_CATALOG USING:
C_DIVISION TEXT-019 C_SPACE,
C_BU
TEXT-022 C_SPACE,
C_PHONBR
TEXT-020 C_SPACE,
C_REV_HELD TEXT-023 C_SPACE,
C_REV_LAST TEXT-024 C_SPACE,
C_REVISION TEXT-021 C_SPACE,
C_HOLDTITLE TEXT-025 C_SPACE,
C_PRODNUMBER TEXT-026 C_SPACE,
C_MATNR
TEXT-027 C_SPACE,
C_CHARG
TEXT-028 C_SPACE,
C_SERIAL_NBR TEXT-029 C_SPACE,
*
C_CLABS
TEXT-017 C_SPACE, "COMMENT CHG03
C_CEINM
TEXT-018 C_SPACE, "changed on 30/06/2004
*
C_BDMNG
TEXT-038 C_SPACE, "COMMENT CHG03

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.

"Count for Material


"Count for Batch
"Count for Serial number

** IF NOT t_pho_final IS INITIAL.


**
SORT t_pho_final BY division bu
**
phonbr revision matnr charg serial_nbr.
**
***write the line items to the list
**
LOOP AT t_pho_final INTO w_pho_final.
**
***on change of division write division
**
ON CHANGE OF w_pho_final-division.
**
**
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.
**
l_flg_head = 'X'.
**
WRITE: w_pho_final-division,
**
10 w_pho_final-bu,
**
20 w_pho_final-phonbr.
**

**
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.
**

***write all the items to the list output


**
WRITE: 31 w_pho_final-revision,
"Business Hold Revision
**
40 w_pho_final-rev_held,
"revision held
**
49 w_pho_final-rev_last,
"revision last
**
58 w_pho_final-holdtitle,
"Hold Title/Reason
**
108 w_pho_final-prodnumber,
"product number
**
128 w_pho_final-matnr,
"Material Number
**
147 w_pho_final-charg,
"Batch Number
**
158 w_pho_final-serial_nbr,
"Serial Characteristic
*number
**
189 w_pho_final-initiator,
"Initiator
**
220 w_pho_final-userid,
"Initiator MDT ID
**
243 w_pho_final-holdcode,
"Hold Code
**
252 w_pho_final-status,
"PHO status
**
274 w_pho_final-erdat,
"Initial Hold Date
**
288 w_pho_final-erdat_1st,
"Transaction Date
**
300 w_pho_final-erzet_1st,
"Transaction Time
**
312 w_pho_final-ernam, / .
"User ID
**
***to write the summation of material or batch number or serial number
*at
***the end report
**
AT LAST.
**
FORMAT COLOR COL_TOTAL ON.
**
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.
**
ENDAT.
**
ENDLOOP.
** ELSE.
**
MESSAGE i213.
"no record exists for given selection criteria
** ENDIF.
* End of change on 25/06/2004
ENDFORM.

" sub_display_report

* Begin of change on 25/06/2004


*&---------------------------------------------------------------------*
*&
Form sub_populate_layout
*&---------------------------------------------------------------------*
*
Form to populate the laypout for ALV grid
*----------------------------------------------------------------------*
*
No para meters
*----------------------------------------------------------------------*
FORM SUB_POPULATE_LAYOUT .
W_LAYOUT-ZEBRA
= C_CHECKED.
W_LAYOUT-COLWIDTH_OPTIMIZE = C_CHECKED.
W_LAYOUT-LIGHTS_CONDENSE = C_CHECKED.

" Layout zebra


" Optimize column width
" Lights Condense

W_LAYOUT-LIGHTS_TABNAME
ENDFORM.

= C_TABNAME.

" Lights table name

" 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.

* Display the header


CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = T_HEADER.
ENDFORM.

" 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.
*
*

If ALV Report Display is unsuccessful, display an Information


message and come back to the selection screen
IF SY-SUBRC <> 0.
MESSAGE I202(ZO).
" error while displaying ALV
LEAVE LIST-PROCESSING.

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.

CALL FUNCTION 'ZOQA0009_10_XXL_SIMPLE_API'


EXPORTING
FP_FIELDCAT
= FP_CATLG
TABLES
FT_DATA
= FT_DATA
EXCEPTIONS
FATAL_ERROR
= 01
NO_DISPLAY_POSSIBLE = 02.
ENDFORM.
"z_XXL_SIMPLE_API
************satya***********insert***************end*****CHG02**********
************satya***********insert***************begin***CHG03**********
*&---------------------------------------------------------------------*
*&
Form SUB_CHECK_OTHER_OPTIONS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM SUB_CHECK_OTHER_OPTIONS .
DATA:L_FLAG_EMPTY .
CLEAR L_FLAG_EMPTY.
PERFORM SUB_CHECK_FOR_OTHER_INPUT USING L_FLAG_EMPTY.
IF L_FLAG_EMPTY = 'X'.
* Since only PHONBR is used
ELSE.
* Give message and stop further processing if no data found.
MESSAGE I192(ZO).
LEAVE LIST-PROCESSING.
ENDIF.
PERFORM SUB_CHECK_HOLDS.
ENDFORM.
" SUB_CHECK_OTHER_OPTIONS
*&---------------------------------------------------------------------*
*&
Form check_for_other_input
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_L_FLAG_EMPTY text
*----------------------------------------------------------------------*
FORM SUB_CHECK_FOR_OTHER_INPUT USING
P_EMPTY.
IF S_DVSN
S_REVISN
S_STATUS
S_TRDATE

IS
IS
IS
IS

INITIAL
INITIAL
INITIAL
INITIAL

AND
AND
AND
AND

S_HDCODE IS INITIAL AND


S_HTITLE IS INITIAL AND
S_HLDATE IS INITIAL AND
S_INTMDT.

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

SELECT * APPENDING CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH


FROM ZOQAPHO_DTL
WHERE LOT_NBR
= ' '
AND MATNR
= ' '
AND SERIAL_NBR = S_SRLNBR.
For both
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE LOT_NBR
IN S_CHARG
AND MATNR
= ' '
AND SERIAL_NBR IN S_SRLNBR.

*=== Check if lot_nbr & matnr passed ===


ELSEIF G_STRING = 'ML'.
* If it exists without a material it is also on hold
SELECT * INTO CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE LOT_NBR
IN S_CHARG
AND 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 = ' '.
*=== Check if matnr & serial nbr passed ======================
ELSEIF G_STRING = 'MS'.
* If it exists without a material it is also on hold
SELECT * INTO CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE LOT_NBR
= ' '
AND MATNR
= ' '
AND SERIAL_NBR IN S_SRLNBR.
* Now check with the material
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.
*=== Check if matnr & lot_nbr & serial nbr passed ============
ELSEIF G_STRING = 'MLS'.
* If lot_nbr only
SELECT * INTO CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE LOT_NBR
IN S_CHARG
AND MATNR
= ' '
AND SERIAL_NBR = ' '.
* If serial nbr only
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE LOT_NBR
= ' '
AND MATNR
= ' '
AND SERIAL_NBR IN S_SRLNBR.
* If lot_nbr & serial nbr exist without a material it is also on hold
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE FT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL

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.
*

Now the detail messages


IF FT_ZOQAPHO_DTLH-AEDAT IS INITIAL.
SELECT * APPENDING TABLE FT_ZOQAPHO_MSGS
FROM ZOQAPHO_MSGS
WHERE DIVISION = FT_ZOQAPHO_DTLH-DIVISION
AND PHONBR
= FT_ZOQAPHO_DTLH-PHONBR
AND ITEM
= FT_ZOQAPHO_DTLH-ITEM
AND ERDAT
= FT_ZOQAPHO_DTLH-ERDAT
AND ERZET
= FT_ZOQAPHO_DTLH-ERZET.
ELSE.
SELECT * APPENDING TABLE FT_ZOQAPHO_MSGS
FROM ZOQAPHO_MSGS
WHERE DIVISION = FT_ZOQAPHO_DTLH-DIVISION
AND PHONBR
= FT_ZOQAPHO_DTLH-PHONBR
AND ITEM
= FT_ZOQAPHO_DTLH-ITEM

AND ERDAT
AND ERZET

= FT_ZOQAPHO_DTLH-AEDAT
= FT_ZOQAPHO_DTLH-AEZET.

ENDIF.
ENDLOOP.
* Append
APPEND
APPEND
APPEND

any material holds


LINES OF LT_ZOQAPHO_HDRH TO FT_ZOQAPHO_HDRH.
LINES OF LT_ZOQAPHO_DTLH TO FT_ZOQAPHO_DTLH.
LINES OF LT_ZOQAPHO_MSGS TO FT_ZOQAPHO_MSGS.

* Now make sure no extra headers


SORT FT_ZOQAPHO_HDRH BY DIVISION PHONBR ERDAT_HIST ERZET_HIST.
DELETE ADJACENT DUPLICATES FROM FT_ZOQAPHO_HDRH
COMPARING DIVISION PHONBR ERDAT_HIST ERZET_HIST.
* Make sure only 1 of each DTL
SORT FT_ZOQAPHO_DTLH BY DIVISION PHONBR ITEM ERDAT_HIST ERZET_HIST.
DELETE ADJACENT DUPLICATES FROM FT_ZOQAPHO_DTLH
COMPARING DIVISION PHONBR ITEM ERDAT_HIST ERZET_HIST.
* Do MSGS
SORT FT_ZOQAPHO_MSGS BY DIVISION PHONBR ITEM MATNR CHARG ERDAT ERZET
MCOUNT.
DELETE ADJACENT DUPLICATES FROM FT_ZOQAPHO_MSGS
COMPARING DIVISION PHONBR ITEM MATNR CHARG ERDAT ERZET
MCOUNT.
*
ENDFORM.
" sub_check_holds
*&--------------------------------------------------------------------*
*&
Form f_check_for_materials
*&--------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
*
-->FT_ZOQAPHO_text
*
-->FT_ZOQAPHO_text
*
-->FT_ZOQAPHO_text
*
-->FP_MATNR text
*
-->FP_HIST_ALStext
*---------------------------------------------------------------------*
FORM F_CHECK_FOR_MATERIALS TABLES FT_ZOQAPHO_HDRH STRUCTURE ZOQAPHO_HDRH
FT_ZOQAPHO_DTLH STRUCTURE ZOQAPHO_DTLH
FT_ZOQAPHO_MSGS STRUCTURE ZOQAPHO_MSGS
USING FP_MATNR
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_MATNR = '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
= FP_MATNR
AND LOT_NBR
= ' '
AND SERIAL_NBR = ' '.
ENDIF.
* The next condition is if batches are requested, use MSGS table
IF FP_GET_CHARGS = 'X'. "YeS
IF FP_MATNR = 'XXXXXXXXXXXXXXXXXX'.
IF NOT S_MATNR[] IS INITIAL.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE LT_ZOQAPHO_MSGS
FROM ZOQAPHO_MSGS
WHERE MATNR
IN S_MATNR
AND CHARG
<> ' '.
ENDIF.
ELSE.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE LT_ZOQAPHO_MSGS
FROM ZOQAPHO_MSGS
WHERE MATNR
= FP_MATNR
AND CHARG
<> ' '.
ENDIF.
ENDIF.
* The next condition is if plant hold, use MSGS table
IF FP_MATNR = 'XXXXXXXXXXXXXXXXXX'.
IF NOT S_MATNR[] IS INITIAL.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE LT_ZOQAPHO_MSGS
FROM ZOQAPHO_MSGS
WHERE MATNR
IN S_MATNR
AND ITEM
= '0'
"Header item
AND VKORG
= ' '.
"Only main MARA update
ENDIF.
ELSE.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE LT_ZOQAPHO_MSGS
FROM ZOQAPHO_MSGS
WHERE MATNR
= FP_MATNR
AND ITEM
= '0'
"Header item
AND VKORG
= ' '.
"Only main MARA update
ENDIF.
* -----------------------------------------------* Now bring the 2 tables together, DTL & MSGS
* -----------------------------------------------* Sort
SORT LT_ZOQAPHO_MSGS BY DIVISION PHONBR ITEM MATNR.
* loop on the messages and add the header
LOOP AT LT_ZOQAPHO_MSGS.
* dtl? (Could be either date)
READ TABLE LT_ZOQAPHO_DTLH
WITH KEY DIVISION =
PHONBR =
ITEM
=
ERDAT
=

& dtl if not selected

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 found it then skip rest because DTL will do it.


CHECK SY-SUBRC <> 0.

Get detail if not a plant hold/release


IF LT_ZOQAPHO_MSGS-ITEM <> 0.
Get from current first & date check.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE DIVISION = LT_ZOQAPHO_MSGS-DIVISION
AND PHONBR = LT_ZOQAPHO_MSGS-PHONBR
AND ITEM
= LT_ZOQAPHO_MSGS-ITEM
AND ERDAT
= LT_ZOQAPHO_MSGS-ERDAT
AND ERZET
= LT_ZOQAPHO_MSGS-ERZET.
If didn't find it then try other date.
IF SY-SUBRC <> 0.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE DIVISION = LT_ZOQAPHO_MSGS-DIVISION
AND PHONBR = LT_ZOQAPHO_MSGS-PHONBR
AND ITEM
= LT_ZOQAPHO_MSGS-ITEM
AND AEDAT
= LT_ZOQAPHO_MSGS-ERDAT
AND AEZET
= LT_ZOQAPHO_MSGS-ERZET.
ENDIF.

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.

First get header if not done it yet


IF LT_ZOQAPHO_HDRH-DIVISION <> LT_ZOQAPHO_MSGS-DIVISION
OR LT_ZOQAPHO_HDRH-PHONBR <> LT_ZOQAPHO_MSGS-PHONBR
OR LT_ZOQAPHO_HDRH-AEDAT
<> LT_ZOQAPHO_MSGS-ERDAT
OR LT_ZOQAPHO_HDRH-AEZET
<> LT_ZOQAPHO_MSGS-ERZET.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_HDRH
FROM ZOQAPHO_HDR
WHERE DIVISION = LT_ZOQAPHO_MSGS-DIVISION
AND PHONBR = LT_ZOQAPHO_MSGS-PHONBR
AND AEDAT
= LT_ZOQAPHO_MSGS-ERDAT
AND AEZET
= LT_ZOQAPHO_MSGS-ERZET.
If still didn't find it then check history
IF SY-SUBRC
<> 0.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_HDRH

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 item 0 then can only have hist header if requested.


IF LT_ZOQAPHO_MSGS-ITEM
= '0'.
IF fp_hist_also = ' '.
CHECK LT_ZOQAPHO_HDRH-ERDAT_HIST IS INITIAL.
ENDIF.
ENDIF.

Now OK to append header rec


APPEND LT_ZOQAPHO_HDRH TO FT_ZOQAPHO_HDRH.

If Item = 0 then from plant hold so create a detail.


CHECK LT_ZOQAPHO_MSGS-ITEM = '0'.

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.

*
*

already created a detail then skip rest


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.

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.
*

Append header rec


APPEND LT_ZOQAPHO_HDRH TO FT_ZOQAPHO_HDRH.
ENDIF.

Append detail rec


APPEND LT_ZOQAPHO_DTLH TO FT_ZOQAPHO_DTLH.

Get detail recs.


IF LT_ZOQAPHO_DTLH-AEDAT IS INITIAL.
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
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.
*

Fill out ranges for order


CASE T_ZOQAPHO_STATUS-ZORDER.
WHEN '1'.
R_STATUS_1-LOW = T_ZOQAPHO_STATUS-STATUS.
APPEND R_STATUS_1.
WHEN '9'.
R_STATUS_9-LOW = T_ZOQAPHO_STATUS-STATUS.

=
=
=
=

'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.

* Need to get the characteristic numbers


SELECT ATINN ATNAM
INTO CORRESPONDING FIELDS OF TABLE LT_CABN
FROM CABN
WHERE ATNAM = 'SERIAL_NUMBER'
OR ATNAM = 'SOURCE_BATCH_NUMBER'.
* Advance reads
READ TABLE LT_CABN INTO
WITH
READ TABLE LT_CABN INTO
WITH

LW_CABN_B
KEY ATNAM = 'SOURCE_BATCH_NUMBER'.
LW_CABN_S
KEY ATNAM = 'SERIAL_NUMBER'.

* Refresh main table


REFRESH LT_AUSP.
* Scenerio #1 - Only have lot_nbr
IF S_SRLNBR[] IS INITIAL.
*
l_atwrt = fp_lot_nbr.
CLEAR R_ATWRT. REFRESH R_ATWRT.
LOOP AT S_CHARG.
R_ATWRT-LOW = S_CHARG-LOW.
R_ATWRT-HIGH = S_CHARG-HIGH.
R_ATWRT-SIGN = S_CHARG-SIGN.
R_ATWRT-OPTION = S_CHARG-OPTION.
APPEND R_ATWRT.
ENDLOOP.
* AUSP holds the characteristic value
SELECT OBJEK ATINN KLART ATWRT
INTO CORRESPONDING FIELDS OF TABLE LT_AUSP
FROM AUSP
WHERE KLART = '023'
AND ATINN = LW_CABN_B-ATINN
AND ATWRT IN R_ATWRT..
CHECK SY-SUBRC = 0.
* Scenerio #2 - Only have serial_nbr
ELSEIF S_CHARG[] IS INITIAL.
* Try this way first
SELECT MATNR SERNR CHARGE
INTO CORRESPONDING FIELDS OF TABLE LT_EQUI_TAB
FROM EQUI
WHERE SERNR IN S_SRLNBR.
* if not found then try the slow way to make sure
IF SY-SUBRC <> 0.
*
l_atwrt = fp_serial_nbr.
CLEAR R_ATWRT. REFRESH R_ATWRT.
LOOP AT S_SRLNBR.
R_ATWRT-LOW = S_SRLNBR-LOW.
R_ATWRT-HIGH = S_SRLNBR-HIGH.
R_ATWRT-SIGN = S_SRLNBR-SIGN.
R_ATWRT-OPTION = S_SRLNBR-OPTION.
APPEND R_ATWRT.
ENDLOOP.
*

AUSP holds the characteristic value


SELECT OBJEK ATINN KLART ATWRT
INTO CORRESPONDING FIELDS OF TABLE LT_AUSP
FROM AUSP
WHERE KLART = '023'

AND ATINN = LW_CABN_S-ATINN


AND ATWRT IN R_ATWRT.
CHECK SY-SUBRC = 0.
ENDIF.
* Scenerio #2 - Have both so 2 step process
ELSE.
*
l_atwrt = fp_lot_nbr.
CLEAR R_ATWRT. REFRESH R_ATWRT.
LOOP AT S_CHARG.
R_ATWRT-LOW = S_CHARG-LOW.
R_ATWRT-HIGH = S_CHARG-HIGH.
R_ATWRT-SIGN = S_CHARG-SIGN.
R_ATWRT-OPTION = S_CHARG-OPTION.
APPEND R_ATWRT.
ENDLOOP.
*

*
*

AUSP holds the characteristic value


SELECT OBJEK ATINN KLART ATWRT
INTO CORRESPONDING FIELDS OF TABLE LT_AUSP_B
FROM AUSP
WHERE KLART = '023'
AND ATINN = LW_CABN_B-ATINN
AND ATWRT IN R_ATWRT.
CHECK SY-SUBRC = 0.
Use the same objects and check if have serial number
LOOP AT LT_AUSP_B.
l_atwrt = fp_serial_nbr.
CLEAR R_ATWRT. REFRESH R_ATWRT.
LOOP AT S_SRLNBR.
R_ATWRT-LOW = S_SRLNBR-LOW.
R_ATWRT-HIGH = S_SRLNBR-HIGH.
R_ATWRT-SIGN = S_SRLNBR-SIGN.
R_ATWRT-OPTION = S_SRLNBR-OPTION.
APPEND R_ATWRT.
ENDLOOP.
AUSP holds the characteristic value
SELECT OBJEK ATINN KLART ATWRT
APPENDING CORRESPONDING FIELDS OF TABLE LT_AUSP
FROM AUSP
WHERE OBJEK = LT_AUSP_B-OBJEK
AND KLART = '023'
AND ATINN = LW_CABN_S-ATINN
AND ATWRT IN R_ATWRT.
ENDLOOP.
ENDIF.

* Check on serial number


LOOP AT LT_EQUI_TAB.
FT_MCH1_TAB-MATNR
FT_MCH1_TAB-CHARG
FT_MCH1_TAB-SERNR
APPEND FT_MCH1_TAB.
ENDLOOP.

table
= LT_EQUI_TAB-MATNR.
= LT_EQUI_TAB-CHARGE.
= LT_EQUI_TAB-SERNR.

* Use INOB to get Material/Batch


LOOP AT LT_AUSP.
SELECT CUOBJ KLART OBTAB OBJEK

INTO CORRESPONDING FIELDS OF TABLE LT_INOB


FROM INOB
WHERE CUOBJ = LT_AUSP-OBJEK
AND KLART = '023'.
CHECK SY-SUBRC = 0.
Now add to table
LOOP AT LT_INOB.
CHECK LT_INOB-OBTAB(3) = 'MCH'.
FT_MCH1_TAB-MATNR
= LT_INOB-OBJEK(L_MATNR_LEN).
FT_MCH1_TAB-CHARG
= LT_INOB-OBJEK+L_MATNR_LEN.
FT_MCH1_TAB-SERNR
= LT_AUSP-ATWRT.
APPEND FT_MCH1_TAB.
ENDLOOP.
ENDLOOP.

* Make sure only one occurence of the batch


SORT FT_MCH1_TAB BY MATNR CHARG SERNR.
DELETE ADJACENT DUPLICATES FROM FT_MCH1_TAB COMPARING MATNR CHARG
SERNR.
ENDFORM.
"f_select_btchs_to_update
*&---------------------------------------------------------------------*
*&
Form sub_merge_data
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM SUB_MERGE_DATA .
* merge the header data
LOOP AT FT_ZOQAPHO_HDRH.
W_PHO_HEADER-DIVISION = FT_ZOQAPHO_HDRH-DIVISION.
W_PHO_HEADER-PHONBR = FT_ZOQAPHO_HDRH-PHONBR.
W_PHO_HEADER-BU = FT_ZOQAPHO_HDRH-BU.
W_PHO_HEADER-REVISION = FT_ZOQAPHO_HDRH-REVISION.
W_PHO_HEADER-HOLDCODE = FT_ZOQAPHO_HDRH-HOLDCODE.
W_PHO_HEADER-INITIATOR = FT_ZOQAPHO_HDRH-INITIATOR.
W_PHO_HEADER-USERID = FT_ZOQAPHO_HDRH-USERID.
W_PHO_HEADER-HOLDTITLE = FT_ZOQAPHO_HDRH-HOLDTITLE.
APPEND W_PHO_HEADER TO T_PHO_HEADER .
CLEAR W_PHO_HEADER.
ENDLOOP.
* merge the detail data
LOOP AT FT_ZOQAPHO_DTLH.
W_PHO_DETAIL-DIVISION = FT_ZOQAPHO_DTLH-DIVISION.
W_PHO_DETAIL-PHONBR = FT_ZOQAPHO_DTLH-PHONBR.
W_PHO_DETAIL-ITEM = FT_ZOQAPHO_DTLH-ITEM.
W_PHO_DETAIL-SERIAL_NBR = FT_ZOQAPHO_DTLH-SERIAL_NBR.
W_PHO_DETAIL-STATUS = FT_ZOQAPHO_DTLH-STATUS.
W_PHO_DETAIL-REV_HELD = FT_ZOQAPHO_DTLH-REV_HELD.
W_PHO_DETAIL-REV_LAST = FT_ZOQAPHO_DTLH-REV_LAST.
W_PHO_DETAIL-ERDAT = FT_ZOQAPHO_DTLH-ERDAT.
W_PHO_DETAIL-ERZET = FT_ZOQAPHO_DTLH-ERZET.
W_PHO_DETAIL-ERNAM = FT_ZOQAPHO_DTLH-ERNAM.
W_PHO_DETAIL-AEDAT = FT_ZOQAPHO_DTLH-AEDAT.
W_PHO_DETAIL-AEZET = FT_ZOQAPHO_DTLH-AEZET.
APPEND W_PHO_DETAIL TO T_PHO_DETAIL.
CLEAR W_PHO_DETAIL.

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.

SELECT * APPENDING CORRESPONDING FIELDS OF TABLE LT_ZOQAPHO_MSGS


FROM ZOQAPHO_MSGS
WHERE CHARG
= FP_CHARG.
* -----------------------------------------------* Now bring the 2 tables together, DTL & MSGS
* -----------------------------------------------* Sort
SORT LT_ZOQAPHO_MSGS BY DIVISION PHONBR ITEM MATNR.
* loop on the messages and add the header
LOOP AT LT_ZOQAPHO_MSGS.
* dtl? (Could be either date)
READ TABLE LT_ZOQAPHO_DTLH
WITH KEY DIVISION =
PHONBR =
ITEM
=
ERDAT
=
ERZET
=
IF SY-SUBRC <> 0.
READ TABLE LT_ZOQAPHO_DTLH
WITH KEY DIVISION =
PHONBR =
ITEM
=
AEDAT
=
AEZET
=
ENDIF.

& dtl if not selected

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 found it then skip rest because DTL will do it.


CHECK SY-SUBRC <> 0.

Get detail if not a plant hold/release


IF LT_ZOQAPHO_MSGS-ITEM <> 0.
Get from current first & date check.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE DIVISION = LT_ZOQAPHO_MSGS-DIVISION
AND PHONBR = LT_ZOQAPHO_MSGS-PHONBR
AND ITEM
= LT_ZOQAPHO_MSGS-ITEM
AND ERDAT
= LT_ZOQAPHO_MSGS-ERDAT
AND ERZET
= LT_ZOQAPHO_MSGS-ERZET.
If didn't find it then try other date.
IF SY-SUBRC <> 0.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_DTLH
FROM ZOQAPHO_DTL
WHERE DIVISION = LT_ZOQAPHO_MSGS-DIVISION
AND PHONBR = LT_ZOQAPHO_MSGS-PHONBR
AND ITEM
= LT_ZOQAPHO_MSGS-ITEM
AND AEDAT
= LT_ZOQAPHO_MSGS-ERDAT
AND AEZET
= LT_ZOQAPHO_MSGS-ERZET.
ENDIF.

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.
*

First get header if not done it yet


IF LT_ZOQAPHO_HDRH-DIVISION <> LT_ZOQAPHO_MSGS-DIVISION
OR LT_ZOQAPHO_HDRH-PHONBR <> LT_ZOQAPHO_MSGS-PHONBR
OR LT_ZOQAPHO_HDRH-AEDAT
<> LT_ZOQAPHO_MSGS-ERDAT
OR LT_ZOQAPHO_HDRH-AEZET
<> LT_ZOQAPHO_MSGS-ERZET.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_HDRH
FROM ZOQAPHO_HDR
WHERE DIVISION = LT_ZOQAPHO_MSGS-DIVISION
AND PHONBR = LT_ZOQAPHO_MSGS-PHONBR
AND AEDAT
= LT_ZOQAPHO_MSGS-ERDAT
AND AEZET
= LT_ZOQAPHO_MSGS-ERZET.
If still didn't find it then check history
IF SY-SUBRC
<> 0.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LT_ZOQAPHO_HDRH
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 item 0 then can only have hist header if requested.
IF LT_ZOQAPHO_MSGS-ITEM
= '0'.
CHECK LT_ZOQAPHO_HDRH-ERDAT_HIST IS INITIAL.
ENDIF.

Now OK to append header rec


APPEND LT_ZOQAPHO_HDRH TO FT_ZOQAPHO_HDRH.

If Item = 0 then from plant hold so create a detail.


CHECK LT_ZOQAPHO_MSGS-ITEM = '0'.

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

already created a detail then skip rest


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.

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.
*

Append header rec


APPEND LT_ZOQAPHO_HDRH TO FT_ZOQAPHO_HDRH.
ENDIF.

Append detail rec


APPEND LT_ZOQAPHO_DTLH TO FT_ZOQAPHO_DTLH.

Get detail recs.


IF LT_ZOQAPHO_DTLH-AEDAT IS INITIAL.
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-ERDAT
AND ERZET
= 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.
"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**********

You might also like