SAP Certification
SAP Download
SAP Companies India
SAP Books
SAP JOBS
SAP jobs in India
SAP ABAP jobs in India
SAP BASIS jobs in India
SAP BI jobs in India
SAP CRM jobs in India
SAP FICO jobs in India
SAP Fresher jobs in India
SAP HR jobs in India
SAP MM jobs in India
SAP PM jobs in India
SAP PP jobs in India
SAP SD jobs in India
SAP XI jobs in India
|
This source code is an ABAP Program to Get Output in EXCEL
Show Full Details
REPORT YLMM015A
MESSAGE-ID YL.
*-----------------------------------------------------------------------
*
* EDI FORECASTING INTERFACE - SHEILA TITCHENER JAN 1998
* L_IDOC_HEADER_CREATE, L_IDOC_SEGMENT_CREATE & L_IDOC_SEND
* left idoc ready to send but did not send automatically.
* these were replaced by ALE_MODEL_DETERMINE_IF_TO_SEND
* ALE_MODEL_INFO_GET & MASTER_IDOC_DISTRIBUTE
* 'in update task'. This solved the problem. Records are set up in table
* t_edidd.
*-----------------------------------------------------------------------
* TABLES - Database *
*-----------------------------------------------------------------------
TABLES: EORD,
MARC,
MARM,
EINA,
PLAF,
EBAN,
EDIDD.
*-----------------------------------------------------------------------
* DATA - Work Fields
*-----------------------------------------------------------------------
DATA: W_START_MONTH LIKE SY-DATUM.
DATA: W_NEXT_MONTH LIKE SY-DATUM.
DATA: W_THIRD_MONTH LIKE SY-DATUM.
DATA: W_END_DATE LIKE SY-DATUM.
DATA: W_COMP_DATE LIKE SY-DATUM.
DATA: W_BEG_DATE LIKE SY-DATUM.
DATA: W_DESP_DATE LIKE SY-DATUM.
DATA: W_DAY LIKE HRVSCHED-DAYNR.
DATA: W_DAY_TXT LIKE HRVSCHED-DAYTXT.
DATA: W_INDEX LIKE SY-TABIX.
DATA: W_TOTAL LIKE EBAN-MENGE.
DATA: W_ITEM_NUMBER TYPE I.
* IDOC DATA
DATA: W_E1EDK01_DATA LIKE E1EDK01.
DATA: W_E1EDK03_DATA LIKE E1EDK03.
DATA: W_E1EDKA1_DATA LIKE E1EDKA1.
DATA: W_E1EDP01_DATA LIKE E1EDP01.
DATA: W_E1EDP20_DATA LIKE E1EDP20.
DATA: W_E1EDP19_DATA LIKE E1EDP19.
* DATA - INTERNAL TABLES
*-----------------------------------------------------------------------
* forecast buckets - 8/9 weekly for first 2 months then 10 monthly
DATA: BEGIN OF FORECAST OCCURS 19,
DATE TYPE D, "start date of bucket
WEEK_MON, "weekly or monthly indicator
QTY LIKE EBAN-MENGE. "accumulated qty
DATA: END OF FORECAST.
*DATA: PRODUCTS LIKE EORD OCCURS 10 WITH HEADER LINE.
DATA: BEGIN OF PRODUCTS OCCURS 10,
MATNR LIKE EORD-MATNR,
WERKS LIKE EORD-WERKS,
LIFNR LIKE EORD-LIFNR.
DATA: END OF PRODUCTS.
* planned orders table PLAF
DATA: BEGIN OF T_PLAF OCCURS 10,
GSMNG LIKE PLAF-GSMNG,
PEDTR LIKE PLAF-PEDTR.
DATA: END OF T_PLAF.
* planned orders table EBAN
DATA: BEGIN OF T_EBAN OCCURS 10,
MENGE LIKE EBAN-MENGE,
LFDAT LIKE EBAN-LFDAT.
DATA: END OF T_EBAN.
* IDOC _SEND parameter
DATA: COMM_IDOC_CONTROL LIKE EDIDC OCCURS 1 WITH HEADER LINE.
*-----------------------------------------------------------------------
* new fields for new way of sending IDOC
DATA: W_EDIDC LIKE EDIDC OCCURS 5 WITH HEADER LINE,
L_EDIDC LIKE EDIDC,
L_SEND_FLAG,
W_SDATA LIKE EDIDD-SDATA.
DATA: T_BDI_MODEL LIKE BDI_MODEL OCCURS 0 WITH HEADER LINE.
DATA: T_EDIDC LIKE EDIDC OCCURS 0 WITH HEADER LINE.
DATA: T_EDIDD LIKE EDIDD OCCURS 0 WITH HEADER LINE.
*--------------------------------------------------------------------
* OUTPUT file layout
DATA: BEGIN OF OUTREC,
MATNR LIKE EBAN-MATNR,
D1 VALUE '$',
IDNLF LIKE EINA-IDNLF,
D2 VALUE '$',
WEEK_MON,
D3 VALUE '$',
PERIOD LIKE SY-DATUM,
D4 VALUE '$',
QTY(8),
ENDOFLINE TYPE X VALUE '0D',
END OF OUTREC.
*-----------------------------------------------------------------------
* SELECT-OPTIONS
*-----------------------------------------------------------------------
SELECT-OPTIONS P_LIFNR FOR EORD-LIFNR.
*-----------------------------------------------------------------------
* PARAMETERS *
*-----------------------------------------------------------------------
PARAMETERS: P_PART LIKE EDIDC-RCVPRN DEFAULT 'EDIFCAST',
P_FILE(30) DEFAULT '/vmedata/XXX/mdafcstddmmyy' LOWER CASE.
*-----------------------------------------------------------------------
* INITIALIZATION.
*-----------------------------------------------------------------------
INITIALIZATION.
* move hoot name to output file name
P_FILE+9(3) = SY-SYSID.
* move todays date to output file name
P_FILE+20(2) = SY-DATUM+6(2).
P_FILE+22(2) = SY-DATUM+4(2).
P_FILE+24(2) = SY-DATUM+2(2).
*-----------------------------------------------------------------------
START-OF-SELECTION.
*-----------------------------------------------------------------------
* OPEN $ delimited file
OPEN DATASET P_FILE FOR OUTPUT IN TEXT MODE.
* 4.1 create header idoc
* REPLACE function with alternative
* CALL FUNCTION 'L_IDOC_HEADER_CREATE'
* EXPORTING
* I_MESTYP = 'ORDERS'
* I_MESCOD = ' '
* I_IDOCTP = 'ORDERS01'
* I_RCVPRN = P_PART
* EXCEPTIONS
* OTHERS = 1.
*- Call function module to determine if message is to be distributed
CALL FUNCTION 'ALE_MODEL_DETERMINE_IF_TO_SEND'
EXPORTING
MESSAGE_TYPE = 'ORDERS'
IMPORTING
IDOC_MUST_BE_SENT = L_SEND_FLAG
EXCEPTIONS
OWN_SYSTEM_NOT_DEFINED = 1
OTHERS = 2.
*- Determine recipient systems
CALL FUNCTION 'ALE_MODEL_INFO_GET'
EXPORTING
MESSAGE_TYPE = 'ORDERS'
* RECEIVING_SYSTEM = ' '
* SENDING_SYSTEM = ' '
* VALIDDATE = SY-DATUM
TABLES
MODEL_DATA = T_BDI_MODEL
EXCEPTIONS
NO_MODEL_INFO_FOUND = 1
OWN_SYSTEM_NOT_DEFINED = 2
OTHERS = 3.
* 4.2 - 4.5 create idoc segments
PERFORM IDOC_CREATE.
* 4.6 Set up forecast bucket dates
* determine start of the next forecast month
W_START_MONTH = SY-DATUM.
* 12 months ago
*_LAST_12_MTH = SY-DATUM - 365.
IF W_START_MONTH+4(2) = '12'.
W_START_MONTH+4(2) = '01'.
W_START_MONTH(4) = W_START_MONTH(4) + '0001'.
ELSE.
W_START_MONTH+4(2) = W_START_MONTH+4(2) + '01'.
ENDIF.
W_START_MONTH+6 = '01'.
CALL FUNCTION 'RH_GET_DATE_DAYNAME'
EXPORTING
LANGU = 'E'
DATE = W_START_MONTH
* CHECK =
IMPORTING
DAYNR = W_DAY
DAYTXT = W_DAY_TXT
EXCEPTIONS
NO_LANGU = 1
NO_DATE = 2
NO_DAYTXT_FOR_LANGU = 3
INVALID_DATE = 4
OTHERS = 5.
CASE W_DAY.
WHEN 1.
WHEN 2.
W_START_MONTH = W_START_MONTH - 1.
WHEN 3.
W_START_MONTH = W_START_MONTH - 2.
WHEN 4.
W_START_MONTH = W_START_MONTH + 4.
WHEN 5.
W_START_MONTH = W_START_MONTH + 3.
WHEN 6.
W_START_MONTH = W_START_MONTH + 2.
WHEN 7.
W_START_MONTH = W_START_MONTH + 1.
ENDCASE.
* date of start of monthly forecasting
W_THIRD_MONTH = W_START_MONTH.
IF
W_START_MONTH+4(2) < '11'. W_THIRD_MONTH+4(2) = W_THIRD_MONTH+4(2) +
'02'. ELSE. W_THIRD_MONTH+4(2) = W_THIRD_MONTH+4(2) - '10'.
W_THIRD_MONTH(4) = W_THIRD_MONTH(4) + '0001'. ENDIF. * day will be the
first W_THIRD_MONTH+6 = '01'. * find nearest monday - removed *CALL
FUNCTION 'RH_GET_DATE_DAYNAME' * EXPORTING * LANGU = 'E' * DATE =
W_THIRD_MONTH ** CHECK = * IMPORTING * DAYNR = W_DAY * DAYTXT =
W_DAY_TXT * EXCEPTIONS * NO_LANGU = 1 * NO_DATE = 2 *
NO_DAYTXT_FOR_LANGU = 3 * INVALID_DATE = 4 * OTHERS = 5. *CASE W_DAY. *
WHEN 1. * WHEN 2. * W_THIRD_MONTH = W_THIRD_MONTH - 1. * WHEN 3. *
W_THIRD_MONTH = W_THIRD_MONTH - 2. * WHEN 4. * W_THIRD_MONTH =
W_THIRD_MONTH + 4. * WHEN 5. * W_THIRD_MONTH = W_THIRD_MONTH + 3. *
WHEN 6. * W_THIRD_MONTH = W_THIRD_MONTH + 2. * WHEN 7. * W_THIRD_MONTH
= W_THIRD_MONTH + 1. *ENDCASE. * set up all dates in table DO. IF
SY-INDEX = 1. FORECAST-DATE = W_START_MONTH. W_NEXT_MONTH =
W_START_MONTH. ELSE. * if this takes us into the third month set to
monthly IF W_NEXT_MONTH GE W_THIRD_MONTH. IF W_NEXT_MONTH+4(2) = '12'.
" add 1 month W_NEXT_MONTH+4(2) = '01'. W_NEXT_MONTH(4) =
W_NEXT_MONTH(4) + '0001'. ELSE. W_NEXT_MONTH+4(2) = W_NEXT_MONTH+4(2) +
'01'. ENDIF. * W_NEXT_MONTH = W_NEXT_MONTH + 28. * IF W_NEXT_MONTH+4(2)
= FORECAST-DATE+4(2). * W_NEXT_MONTH = W_NEXT_MONTH + 7. * ENDIF. ELSE.
* add 1 week W_NEXT_MONTH = W_NEXT_MONTH + 7. ENDIF. FORECAST-DATE =
W_NEXT_MONTH. ENDIF. IF FORECAST-DATE GE W_THIRD_MONTH.
FORECAST-DATE+6(2) = '01'. "set start day to 1 FORECAST-WEEK_MON = '2'.
ELSE. FORECAST-WEEK_MON = '1'. ENDIF. * year complete? IF
FORECAST-DATE+4(2) = W_START_MONTH+4(2) AND FORECAST-DATE(4) >
W_START_MONTH(4).
W_END_DATE = FORECAST-DATE.
EXIT.
ENDIF.
APPEND FORECAST.
ENDDO.
*-----------------------------------------------------------------------
* Start of selection processing
*-----------------------------------------------------------------------
* 4.7 select records from Purchasing Source list
*-----------------------------------------------------------------------
SELECT MATNR WERKS LIFNR FROM EORD INTO TABLE PRODUCTS
WHERE LIFNR IN P_LIFNR
AND FLIFN = 'X'
AND VDATU LE SY-DATUM
AND BDATU GE SY-DATUM.
* check within selection range
* CHECK P_LIFNR.
* add to table
* APPEND PRODUCTS.
*ENDSELECT.
* delete duplicates products
* table already in product code sequence
DELETE ADJACENT DUPLICATES FROM PRODUCTS COMPARING MATNR.
*-----------------------------------------------------------------------
* process selected vendors materials
*-----------------------------------------------------------------------
LOOP AT PRODUCTS.
*--------------------------------------
* 4.7 access material master
*--------------------------------------
SELECT SINGLE * FROM MARC
WHERE MATNR = PRODUCTS-MATNR
AND WERKS = PRODUCTS-WERKS .
CHECK MARC-DISMM = 'PD' OR MARC-DISMM = 'P3'
OR MARC-DISMM = 'ZD' OR MARC-DISMM = 'Z3'.
*--------------------------------------
* 4.8 access purchasing info record
*--------------------------------------
SELECT SINGLE * FROM EINA
WHERE MATNR = PRODUCTS-MATNR
AND LIFNR = PRODUCTS-LIFNR.
* record found?
CHECK SY-SUBRC = 0.
* vendor's material number begins with 45?
CHECK EINA-IDNLF(2) = '45'.
*--------------------------------------
* 4.10 clear forecast quantities
*--------------------------------------
LOOP AT FORECAST.
FORECAST-QTY = 0.
MODIFY FORECAST TRANSPORTING QTY.
ENDLOOP.
*--------------------------------------
* 4.10
*--------------------------------------
* calculate start & end dates
W_COMP_DATE = W_END_DATE + 9.
* W_BEG_DATE = W_START_MONTH + MARC-WEBAZ + 9.
* read all matching material records from planned orders table PLAF
SELECT GSMNG PEDTR FROM PLAF INTO CORRESPONDING FIELDS OF TABLE T_PLAF
WHERE MATNR = PRODUCTS-MATNR
AND PEDTR <> W_BEG_DATE.
*--------------------------------------
* 4.11 process any records found
*--------------------------------------
IF SY-SUBRC = 0.
LOOP AT T_PLAF.
W_DESP_DATE = T_PLAF-PEDTR - 9.
* IF date is < w_index =" 1."> despatch date.
LOOP AT FORECAST
WHERE DATE GE W_DESP_DATE.
W_INDEX = SY-TABIX.
EXIT.
ENDLOOP.
* read previous entry.
W_INDEX = W_INDEX - 1.
READ TABLE FORECAST INDEX W_INDEX.
ENDIF.
* convert to purchasing unit of measure
IF EINA-UMREZ NE 0.
T_PLAF-GSMNG = T_PLAF-GSMNG * EINA-UMREN / EINA-UMREZ.
ENDIF.
*
FORECAST-QTY = FORECAST-QTY + T_PLAF-GSMNG.
MODIFY FORECAST INDEX W_INDEX.
ENDLOOP.
ENDIF.
*--------------------------------------
* 4.12 read all matching material records from planned orders table EBAN
*--------------------------------------
SELECT MENGE LFDAT FROM EBAN INTO CORRESPONDING FIELDS OF TABLE T_EBAN
WHERE MATNR = PRODUCTS-MATNR
AND LFDAT <> W_BEG_DATE.
*--------------------------------------
* 4.13 process any records found
*--------------------------------------
IF SY-SUBRC = 0.
LOOP AT T_EBAN.
W_DESP_DATE = T_EBAN-LFDAT - 9.
* IF date is < w_index =" 1."> despatch date.
LOOP AT FORECAST
WHERE DATE GE W_DESP_DATE.
W_INDEX = SY-TABIX.
EXIT.
ENDLOOP.
* read previous entry.
W_INDEX = W_INDEX - 1.
READ TABLE FORECAST INDEX W_INDEX.
ENDIF.
* convert to purchasing unit of measure
IF EINA-UMREZ NE 0.
T_EBAN-MENGE = T_EBAN-MENGE * EINA-UMREN / EINA-UMREZ.
ENDIF.
* add to table
FORECAST-QTY = FORECAST-QTY + T_EBAN-MENGE.
MODIFY FORECAST INDEX W_INDEX.
ENDLOOP.
ENDIF.
*-----------------------------------------------------------------------
* 4.14 total all forecast buckets
*--------------------------------------
W_TOTAL = 0.
LOOP AT FORECAST.
W_TOTAL = W_TOTAL + FORECAST-QTY.
ENDLOOP.
CHECK W_TOTAL NE 0.
*--------------------------------------
* create idocs for material forecast
*--------------------------------------
W_ITEM_NUMBER = W_ITEM_NUMBER + 1.
IF W_ITEM_NUMBER > 80.
W_ITEM_NUMBER = 1.
PERFORM IDOC_CREATE.
ENDIF.
*--------------------------------------
* 4.14.3 create idoc E1EDP01
*--------------------------------------
W_E1EDP01_DATA-POSEX = W_ITEM_NUMBER.
WRITE W_TOTAL TO W_E1EDP01_DATA-MENGE DECIMALS 0.
* EDIDD-SDATA = W_E1EDP01_DATA.
T_EDIDD-SDATA = W_E1EDP01_DATA.
W_SDATA = W_E1EDP01_DATA. "????
T_EDIDD-SEGNAM = 'E1EDP01'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDP01'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
*--------------------------------------
* 4.14.4 create idoc E1EDP20
*--------------------------------------
LOOP AT FORECAST.
IF FORECAST-QTY NE 0.
WRITE FORECAST-QTY TO W_E1EDP20_DATA-WMENG DECIMALS 0.
W_E1EDP20_DATA-AMENG = FORECAST-WEEK_MON.
W_E1EDP20_DATA-EDATU = FORECAST-DATE.
* EDIDD-SDATA = W_E1EDP20_DATA.
T_EDIDD-SDATA = W_E1EDP20_DATA.
W_SDATA = W_E1EDP20_DATA. "????
T_EDIDD-SEGNAM = 'E1EDP20'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDP20'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
*--------------------------------------
* write record to $ delimited file
*--------------------------------------
OUTREC-MATNR = PRODUCTS-MATNR.
OUTREC-IDNLF = EINA-IDNLF.
OUTREC-WEEK_MON = FORECAST-WEEK_MON.
OUTREC-PERIOD = FORECAST-DATE.
WRITE FORECAST-QTY TO OUTREC-QTY DECIMALS 0.
TRANSFER OUTREC TO P_FILE.
ENDIF.
ENDLOOP.
* 4.14.5 End of this product
*--------------------------------------
W_E1EDP19_DATA-IDTNR = EINA-IDNLF.
* EDIDD-SDATA = W_E1EDP19_DATA.
T_EDIDD-SDATA = W_E1EDP19_DATA.
W_SDATA = W_E1EDP19_DATA. "????
T_EDIDD-SEGNAM = 'E1EDP19'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDP19'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
ENDLOOP.
*--------------------------------------
* end of all products
*-----------------------------------------------------------------------
* REPLACE WITH MASTER_IDOC_DISTRIBUTE
* CALL FUNCTION 'L_IDOC_SEND'
* TABLES
* T_COMM_IDOC = COMM_IDOC_CONTROL
* EXCEPTIONS
* ERROR_DISTRIBUTE_IDOC = 1
* OTHERS = 2.
READ TABLE T_BDI_MODEL INDEX 1. " maximum 1 recipient
MOVE 'ORDERS' TO L_EDIDC-MESTYP.
MOVE 'ORDERS01' TO L_EDIDC-IDOCTP.
MOVE 'LS' TO L_EDIDC-RCVPRT.
* MOVE T_BDI_MODEL-RCVSYSTEM TO L_EDIDC-RCVPRN.
* partner profile parameter
MOVE P_PART TO L_EDIDC-RCVPRN.
*- Distribute the iDoc
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE' IN UPDATE TASK
EXPORTING
MASTER_IDOC_CONTROL = L_EDIDC
TABLES
COMMUNICATION_IDOC_CONTROL = COMM_IDOC_CONTROL
MASTER_IDOC_DATA = T_EDIDD
EXCEPTIONS
ERROR_IN_IDOC_CONTROL = 01
ERROR_WRITING_IDOC_STATUS = 02
ERROR_IN_IDOC_DATA = 03
SENDING_LOGICAL_SYSTEM_UNKNOWN = 04.
COMMIT WORK.
*-----------------------------------------------------------------------
END-OF-SELECTION.
CLOSE DATASET P_FILE.
*-----------------------------------------------------------------------
FORM IDOC_CREATE.
*-----------------------------------------------------------------------
* 4.2 Create idoc segment E1EDK01
W_E1EDK01_DATA-BELNR = 'EDI FORECAST'.
* EDIDD-SDATA = W_E1EDK01_DATA.
T_EDIDD-SDATA = W_E1EDK01_DATA.
W_SDATA = W_E1EDK01_DATA. "????
T_EDIDD-SEGNAM = 'E1EDK01'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDK01'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
*--------------------------------------
* 4.3 Create idoc segments E1EDK03
*--------------------------------------
W_E1EDK03_DATA-IDDAT = '002'.
W_E1EDK03_DATA-DATUM = SY-DATUM.
* EDIDD-SDATA = W_E1EDK03_DATA.
T_EDIDD-SDATA = W_E1EDK03_DATA.
W_SDATA = W_E1EDK03_DATA. "????
T_EDIDD-SEGNAM = 'E1EDK03'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDK03'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
*--------------------------------------
* 4.4 Create idco E1EDKA1
*--------------------------------------
W_E1EDKA1_DATA-PARVW = 'LI'.
W_E1EDKA1_DATA-PARTN = P_PART.
* EDIDD-SDATA = W_E1EDKA1_DATA.
T_EDIDD-SDATA = W_E1EDKA1_DATA.
W_SDATA = W_E1EDKA1_DATA. "????
T_EDIDD-SEGNAM = 'E1EDKA1'.
APPEND T_EDIDD.
* CALL FUNCTION 'L_IDOC_SEGMENT_CREATE'
* EXPORTING
* I_SEGNAM = 'E1EDKA1'
* I_SDATA = EDIDD-SDATA
* EXCEPTIONS
* OTHERS = 1.
ENDFORM.
Show Most Readed SAP Tutorials
Most readed SAP Tutorials
Show Latest Added SAP Tutorials
Latest Added SAP documents
|
"Site covers most of the SAP technical and functional tutorials, articles, interview questions and PDF study materials . List and details of SAP transaction codes ( tcodes ), Tables, report names, Bapi, ABAP programming syntax and keywords are also available in the site.
Information on SAP Certification and training, latest SAP jobs in India, ABAP interview questions are useful for SAP professionals seeking for a career in SAP as a fresher or experienced.ABAP tutorial downloads on BDC, LSMW, BAPI, ALE, IDOC, Smartforms, Sapscripts etc etc are also added.Now you can read from this page about ABAP Program to Get Output in EXCEL" |