Professional Documents
Culture Documents
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.
*-----------------------------------------------------------------------
* 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.
EXPORTING
MESSAGE_TYPE = 'ORDERS'
IMPORTING
IDOC_MUST_BE_SENT = L_SEND_FLAG
EXCEPTIONS
OWN_SYSTEM_NOT_DEFINED = 1
OTHERS = 2.
PERFORM IDOC_CREATE.
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.
* 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.
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 .
* 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_COMP_DATE.
* 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 < first date add to first date
READ TABLE FORECAST INDEX 1.
IF FORECAST-DATE GE W_DESP_DATE.
W_INDEX = 1.
ELSE.
* find first slot where date > 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_COMP_DATE.
* 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 < first date add to first date
READ TABLE FORECAST INDEX 1.
IF FORECAST-DATE GE W_DESP_DATE.
W_INDEX = 1.
ELSE.
* find first slot where date > 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.
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.
COMMIT WORK.
*----------------------------------------------------------------------END-OF-SELECTION.
*----------------------------------------------------------------------FORM IDOC_CREATE.
*-----------------------------------------------------------------------
* 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.