ABAP Program to Get Output in EXCEL

This source code is an ABAP Program to Get Output in EXCEL

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.

Most readed SAP Tutorials

Latest Added SAP documents

Custom Search
ABAP Tutorials ABAP Syntax BAPI SAP Jobs SAP Glossary SAP Netweaver SAP XI SAP Download SAP Interview questions

Complete SAP Study materials | SAP JOBS | PDF Tutorials   List of SAP Companies India

Google-Translate-Chinese (Simplified) BETA Google-Translate-English to French Google-Translate-English to German Google-Translate-English to Italian Google-Translate-English to Japanese BETA Google-Translate-English to Korean BETA Google-Translate-English to Russian BETA Google-Translate-English to Spanish

All of the product names here are trademarks of their respective companies. The site sapbrainsonline.com no way affiliated with SAP AG. Use information on this site at your own risk. Information furnished in the site is collected from various sites and posts from users. This site does not host any files on its server. If any compliants about the posts please contact us at sapbrain.support@gmail.com

Sitemap
web counter