0% found this document useful (0 votes)
1K views13 pages

Bapi Md61 Final

This document defines a report that uploads planning data from an Excel file into SAP. It includes: 1) Data declarations to define internal tables for holding the Excel and SAP planning data. 2) Selection screen parameters to select the Excel file, test plan, plant, and other required fields. 3) Forms to read the Excel file, populate the internal tables, and call BAPI functions to upload the planning data to SAP. Any errors or duplicate records are handled. 4) The data is uploaded to SAP transaction MD61 in change or display mode depending on a selection screen option. Processing reports on the records uploaded.

Uploaded by

Anupam Samanta
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views13 pages

Bapi Md61 Final

This document defines a report that uploads planning data from an Excel file into SAP. It includes: 1) Data declarations to define internal tables for holding the Excel and SAP planning data. 2) Selection screen parameters to select the Excel file, test plan, plant, and other required fields. 3) Forms to read the Excel file, populate the internal tables, and call BAPI functions to upload the planning data to SAP. Any errors or duplicate records are handled. 4) The data is uploaded to SAP transaction MD61 in change or display mode depending on a selection screen option. Processing reports on the records uploaded.

Uploaded by

Anupam Samanta
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 13

*&---------------------------------------------------------------------* *& Report zbdc_md61 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZBDC_MD61. TABLES: PBHI, PBIM.

*DATA : BEGIN OF BDCDATA1 OCCURS 0. * INCLUDE STRUCTURE BDCDATA. *DATA : END OF BDCDATA1. *DATA : SLNO(2) TYPE N, * CHECK TYPE P DECIMALS 2. *DATA : COUNTER(2) TYPE N. *DATA : SCREEN(3) TYPE N. *DATA : P_MODE TYPE C. *DATA : ASPLN01(20) TYPE C, * ASPLN02(20) TYPE C, * ASPLN03(20) TYPE C, * ASMATNR(18) TYPE C. *********// STRUCTURE DEFINITION //******** *TYPES : BEGIN OF TYPE, * PBDNR(10), * WERKS(4), * VERSB(2), * DATVE(10), * DATBE(10), * MATNR(18), * PLN01(13), * PLN02(13), * PLN03(13), * END OF TYPE. *TYPES : BEGIN OF TY_ITAB_MD61_BAPI_COMFIELD, * MATERIAL TYPE BAPISITEMR-MATERIAL, * PLANT TYPE BAPISITEMR-PLANT, * REQ_TYP TYPE BAPISITEMR-REQU_TYPE, * VER TYPE BAPISITEMR-VERSION, * ACTIVE TYPE BAPISITEMR-VERS_ACTIV, * REQNO TYPE BAPISITEMR-REQ_NUMBER, * END OF TY_ITAB_MD61_BAPI_COMFIELD. * *TYPES : BEGIN OF TY_ITAB_MD61_BAPI_PLAN, * DATE_TY TYPE BAPISSHDIN-DATE_TYPE, * REQ_DAT TYPE BAPISSHDIN-REQ_DATE, * REQ_QTY TYPE BAPISSHDIN-REQ_QTY, * UNIT TYPE BAPISSHDIN-UNIT, * END OF TY_ITAB_MD61_BAPI_PLAN. ********// INTERNAL TABLE DECLARATION //******** *DATA: ITABMD61 TYPE STANDARD TABLE OF TYPE INITIAL SIZE 0, * WAMD61 LIKE LINE OF ITABMD61. *DATA: ITABMD611 TYPE STANDARD TABLE OF TYPE INITIAL SIZE 0, * WAMD611 LIKE LINE OF ITABMD611. *DATA: ITABPBHI TYPE STANDARD TABLE OF PBHI INITIAL SIZE 0, * WAPBHI LIKE LINE OF ITABPBHI.

*DATA: ITAB_MD61_BAPI_COMFIELD TYPE STANDARD TABLE OF TY_ITAB_MD61_BAPI_COMFIELD INITIAL SIZE 0, * WA_ITAB_MD61_BAPI_COMFIELD LIKE LINE OF ITAB_MD61_BAPI_COMFIELD. * *DATA: ITAB_MD61_BAPI_PLAN TYPE STANDARD TABLE OF TY_ITAB_MD61_BAPI_PLAN INITIAL SIZE 0, * WA_ITAB_MD61_BAPI_PLAN LIKE LINE OF ITAB_MD61_BAPI_PLAN. *DATA: * * *DATA: * ITAB_PBHI TYPE STANDARD TABLE OF PBHI INITIAL SIZE 0, WA_ITAB_PBHI LIKE LINE OF ITAB_PBHI. ITAB_PBIM TYPE STANDARD TABLE OF PBIM INITIAL SIZE 0, WA_ITAB_PBIM LIKE LINE OF ITAB_PBIM.

*********// SELECTION SCREEN BEGINS //******** *SELECTION-SCREEN BEGIN OF BLOCK GROUP WITH FRAME TITLE TXT. *PARAMETERS: MODE_N RADIOBUTTON GROUP MODE DEFAULT 'X', * MODE_A RADIOBUTTON GROUP MODE . *SELECTION-SCREEN END OF BLOCK GROUP. *INITIALIZATION. * TXT = 'SELECT MODE'. *********// CHANGE MODE //******** *START-OF-SELECTION. * IF MODE_N = 'X'. * P_MODE = 'N'. * ELSE. * P_MODE = 'A'. * ENDIF. * CALL FUNCTION 'UPLOAD' * EXPORTING * FILENAME = 'D:\' * FILETYPE = 'DAT' * TABLES DATA_TAB = ITABMD61. *END-OF-SELECTION. *ITABMD611[] = ITABMD61[]. *SORT ITABMD61 BY PBDNR. *DELETE ADJACENT DUPLICATES FROM ITABMD61 COMPARING PBDNR WERKS. * *SELECT MATNR WERKS PBDNR INTO CORRESPONDING FIELDS OF TABLE ITAB_PBIM FROM PBI M * FOR ALL ENTRIES IN ITABMD61 WHERE MATNR = ITABMD61-MATNR. *PERFORM CHECK USING 'MATNR' 'WERKS' 'PBDNR'. *FORM BDC_MAIN. * LOOP AT ITABMD61 INTO WAMD61. * COUNTER = 1. * SLNO = 0. * perform bdc_dynpro using * PERFORM BDC_FIELD using * PERFORM BDC_FIELD using * PERFORM BDC_FIELD using * PERFORM BDC_FIELD using * PERFORM BDC_FIELD using * PERFORM BDC_FIELD using * PERFORM BDC_FIELD using * PERFORM BDC_FIELD using

'SAPMM60X' '0100'. 'BDC_CURSOR' 'RM60X-DATBE'. 'BDC_OKCODE' '/00'. 'AM60X-MATAW' ''. 'AM60X-PBDAW' 'X'. 'AM60X-PBDNR' WAMD61-PBDNR. 'AM60X-WERKS' WAMD61-WERKS. 'RM60X-VERSB' 'GP'. 'RM60X-DATVE' WAMD61-DATVE.

* PERFORM BDC_FIELD using 'RM60X-DATBE' WAMD61-DATBE. * PERFORM BDC_FIELD using 'RM60X-ENTLU' 'M'. * LOOP AT ITABMD611 INTO WAMD611 WHERE PBDNR = WAMD61-PBDNR AND WERKS = WAM D61-WERKS. * * SCREEN = ( COUNTER / 18 ) * 100. * IF COUNTER >= 1 AND COUNTER < 18. ** SLNO = 0. * PERFORM bdc_dynpro using 'SAPLM60E' '0200'. * PERFORM bdc_field using 'BDC_OKCODE' '/00'. ** PERFORM bdc_field using 'BDC_CURSOR' 'RM60X-PLN03'. * SLNO = SLNO + 1. * IF SLNO > 9. * CONCATENATE 'PBPT-MATNR(' slno ')' INTO ASMATNR. * CONCATENATE 'RM60X-PLN01(' slno ')' INTO ASPLN01. * CONCATENATE 'RM60X-PLN02(' slno ')' INTO ASPLN02. * CONCATENATE 'RM60X-PLN03(' slno ')' INTO ASPLN03. * ELSE. * CONCATENATE 'PBPT-MATNR(0' slno ')' INTO ASMATNR. * CONCATENATE 'RM60X-PLN01(0' slno ')' INTO ASPLN01. * CONCATENATE 'RM60X-PLN02(0' slno ')' INTO ASPLN02. * CONCATENATE 'RM60X-PLN03(0' slno ')' INTO ASPLN03. * ENDIF. * PERFORM BDC_FIELD USING ASMATNR WAMD611-MATNR. * PERFORM BDC_FIELD USING ASPLN01 WAMD611-PLN01. "' 500 0'. * PERFORM BDC_FIELD USING ASPLN02 WAMD611-PLN02. "' 600 0'. * PERFORM BDC_FIELD USING ASPLN03 WAMD611-PLN03. "' 700 0'. * ENDIF. * * IF SCREEN = 100 OR SCREEN = 200 OR SCREEN = 300 OR SCREEN = 400 OR SCRE EN = 500. * SLNO = 0. * PERFORM BDC_DYNPRO using 'SAPLM60E' '0200'. * PERFORM BDC_FIELD using 'BDC_OKCODE' '=P+'. * ELSEIF ( SCREEN > 100 AND SCREEN < 200 ) OR * ( SCREEN > 200 AND SCREEN < 300 ) OR * ( SCREEN > 300 AND SCREEN < 400 ) OR * ( SCREEN > 400 AND SCREEN < 500 ). * ENDIF. * IF COUNTER >= 18. * SLNO = SLNO + 1. * IF SLNO > 9. * CONCATENATE 'PBPT-MATNR(' slno ')' INTO ASMATNR. * CONCATENATE 'RM60X-PLN01(' slno ')' INTO ASPLN01. * CONCATENATE 'RM60X-PLN02(' slno ')' INTO ASPLN02. * CONCATENATE 'RM60X-PLN03(' slno ')' INTO ASPLN03. * ELSE. * CONCATENATE 'PBPT-MATNR(0' slno ')' INTO ASMATNR. * CONCATENATE 'RM60X-PLN01(0' slno ')' INTO ASPLN01. * CONCATENATE 'RM60X-PLN02(0' slno ')' INTO ASPLN02. * CONCATENATE 'RM60X-PLN03(0' slno ')' INTO ASPLN03. * ENDIF. * PERFORM BDC_FIELD USING ASMATNR WAMD611-MATNR. * PERFORM BDC_FIELD USING ASPLN01 WAMD611-PLN01. "' 5 000'. * PERFORM BDC_FIELD USING ASPLN02 WAMD611-PLN02. "' 6 000'.

* PERFORM BDC_FIELD USING ASPLN03 WAMD611-PLN03. "' 7 000'. * ENDIF. * COUNTER = COUNTER + 1. * CLEAR : WAMD611, CHECK. * ENDLOOP. * PERFORM BDC_DYNPRO using 'SAPLM60E' '0200'. * PERFORM BDC_FIELD using 'BDC_OKCODE' '=SICH'. * PERFORM BDC_FIELD using 'BDC_CURSOR' 'PBPT-MATNR(01)'. * * DELETE ITABMD61 WHERE PBDNR = WAMD61-PBDNR AND WERKS = WAMD61-WERKS. * CLEAR : COUNTER, SLNO. * CALL TRANSACTION 'MD61' USING BDCDATA1 MODE P_MODE. * * IF P_MODE EQ 'N'. * WRITE : /'DATA UPLOADED IN TABLE FOR TESTPLAN:', WAMD61-PBDNR, 'AND PLANT:' ,WAMD61-WERKS . * ELSEIF P_MODE EQ 'A'. * WRITE : /'DATA UPLOADED IN TABLE FOR TESTPLAN:', WAMD61-PBDNR, 'AND PLANT:' ,WAMD61-WERKS . * ENDIF. * REFRESH BDCDATA1. * CLEAR BDCDATA1. * ENDLOOP. * ENDFORM. *END-OF-SELECTION. * * *FORM BDC_DYNPRO USING PROGRAM DYNPRO. * CLEAR BDCDATA1. * BDCDATA1-PROGRAM = PROGRAM. * BDCDATA1-DYNPRO = DYNPRO. * BDCDATA1-DYNBEGIN = 'X'. * APPEND BDCDATA1. *ENDFORM. "End BDC_DYNPRO **----------------------------------------------------------------* ** In the batch input data, insert a field * ** FORM BDC_FIELD **----------------------------------------------------------------* *FORM BDC_FIELD USING FNAM FVAL. * CLEAR BDCDATA1. * BDCDATA1-FNAM = FNAM. * BDCDATA1-FVAL = FVAL. * APPEND BDCDATA1. *ENDFORM. * *FORM CHECK USING MATNR WERKS PBDNR. *LOOP AT ITAB_PBIM INTO WA_ITAB_PBIM. * IF WA_ITAB_PBIM-MATNR <> MATNR OR WA_ITAB_PBIM-WERKS <> WERKS OR WA_ITAB_PB IM-PBDNR = PBDNR. * IF WA_ITAB_PBIM-MATNR <> MATNR. * WRITE: / 'CHECK MATERIAL :', WA_ITAB_PBIM-MATNR. * ELSEIF WA_ITAB_PBIM-WERKS <> WERKS. * WRITE: / 'CHECK PLANT :', WA_ITAB_PBIM-WERKS. * ELSE. * WRITE: / 'TEST PLAN :', WA_ITAB_PBIM-PBDNR ,'ALREADY EXISTS'. * ENDIF. * ELSE. * PERFORM BDC_MAIN. * ENDIF.

*ENDLOOP. *ENDFORM. TYPES: BEGIN OF TY_EXCELDATA, MATERIAL TYPE CHAR18, REQ_QTY1 TYPE CHAR13, REQ_QTY2 TYPE CHAR13, REQ_QTY3 TYPE CHAR13, REQ_QTY4 TYPE CHAR13, REQ_QTY5 TYPE CHAR13, REQ_QTY6 TYPE CHAR13, REQ_QTY7 TYPE CHAR13, REQ_QTY8 TYPE CHAR13, REQ_QTY9 TYPE CHAR13, REQ_QTY10 TYPE CHAR13, REQ_QTY11 TYPE CHAR13, REQ_QTY12 TYPE CHAR13, END OF TY_EXCELDATA. TYPES: TY_REQUIREMENT_SCHEDULE TYPE STANDARD TABLE OF BAPISSHDIN, TY_RETURN TYPE STANDARD TABLE OF BAPIRETURN1. TYPE-POOLS:TRUXS. *>>*<< Constants CONSTANTS: CC_REQU_TYP TYPE BEDAE VALUE 'LSF', CC_VERS_ACTIV TYPE VERVS VALUE 'X', CC_UNIT TYPE MEINS VALUE 'EA', CC_YEAR TYPE T5A4A-DLYYR VALUE 0. *>>*<< Filed Symbols FIELD-SYMBOLS: <FS_LS> TYPE ANY, <FS_COMP> TYPE ANY. * *>>*<< Variables DATA: LT_EXCELDATA TYPE STANDARD TABLE OF ty_exceldata, LT_REQUIREMENT_SCHEDULE TYPE ty_requirement_schedule, "bapisshdin, LT_RETURN TYPE TY_RETURN. "bapireturn1. DATA: ls_raw_data TYPE truxs_t_text_data, ls_exceldata TYPE ty_exceldata, ls_requirement_item TYPE bapisitemr, ls_return TYPE bapireturn1. DATA: lc_days TYPE dlydy, lc_month TYPE dlymo, lc_req_number TYPE bapisitemr-req_number. DATA: GI_EXCEL_ROW TYPE SY-TABIX. *DATA: ITAB_PBHI TYPE STANDARD TABLE OF PBHI INITIAL SIZE 0, * WA_ITAB_PBHI LIKE LINE OF ITAB_PBHI. DATA: ITAB_PBIM TYPE STANDARD TABLE OF PBIM INITIAL SIZE 0, WA_ITAB_PBIM LIKE LINE OF ITAB_PBIM. * *>>*<< Selection_Screen SELECTION-SCREEN BEGIN OF BLOCK block-0 WITH FRAME TITLE text-003. PARAMETERS: P_PBDNR TYPE PBDNR OBLIGATORY, P_WERKS TYPE WERKS_D . * p_bedae TYPE rm60x-bedae DEFAULT 'LSF' NO-DISPLAY. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 1.

SELECTION-SCREEN COMMENT 1(31) text-005. PARAMETERS: p_versb TYPE rm60x-versb DEFAULT 'GP' NO-DISPLAY. * SELECTION-SCREEN POSITION 40. PARAMETERS:p_vervs TYPE vervs DEFAULT 'X' NO-DISPLAY. SELECTION-SCREEN COMMENT 42(10) text-006. SELECTION-SCREEN END OF LINE. PARAMETERS: p_datve TYPE datve DEFAULT sy-datum OBLIGATORY, p_entlu TYPE rm60x-entlu DEFAULT 'M' OBLIGATORY. SELECTION-SCREEN END OF BLOCK block-0. SELECTION-SCREEN BEGIN OF BLOCK block-1 WITH FRAME TITLE text-001. PARAMETERS:p_fname TYPE localfile DEFAULT 'C:/.xls' OBLIGATORY. SELECTION-SCREEN END OF BLOCK BLOCK-1. SELECTION-SCREEN BEGIN OF BLOCK BLOCK-2 WITH FRAME TITLE text-004. SELECTION-SCREEN:COMMENT 1(79) text-010, COMMENT /1(79) text-011, COMMENT /1(79) text-012, COMMENT /1(79) text-013, COMMENT /1(79) text-014. SELECTION-SCREEN END OF BLOCK block-2. *>>* *<< At Selection_Screen AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname."* Function to browse requi red excel file PERFORM selectfile CHANGING p_fname. *>>** << Start of Selection START-OF-SELECTION."* Function to read data from excel file to internal table <intern> PERFORM UPLOADEXCELDATA."* Get the 1st day of the week IF p_entlu EQ 'W'. PERFORM 1st_dayofweek. "3 ENDIF. * * Read the internal table data from excel file gi_excel_row = 0. SORT LT_EXCELDATA BY MATERIAL. DELETE ADJACENT DUPLICATES FROM LT_EXCELDATA COMPARING MATERIAL. *LOOP AT LT_EXCELDATA INTO LS_EXCELDATA. *CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' * EXPORTING * input = ls_exceldata-MATERIAL " clike C field * IMPORTING * output = ls_exceldata-MATERIAL . " clike Internal display of INPUT, any category *ENDLOOP. *LOOP AT LT_EXCELDATA INTO LS_EXCELDATA. * SHIFT LS_EXCELDATA-MATERIAL RIGHT DELETING TRAILING SPACE. * OVERLAY LS_EXCELDATA-MATERIAL WITH '00000000'. * MODIFY LT_EXCELDATA FROM LS_EXCELDATA-MATERIAL. *ENDLOOP. *SELECT * FROM PBIM INTO CORRESPONDING FIELDS OF TABLE ITAB_PBIM * FOR ALL ENTRIES IN LT_EXCELDATA WHERE MATNR = LT_EXCELDATA-MATERIAL . *PERFORM CHECK. LOOP AT LT_EXCELDATA INTO ls_exceldata. gi_excel_row = SY-TABIX. TRANSLATE ls_exceldata-material TO UPPER CASE. * * Conversion exit for MATNR

CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = ls_exceldata-material IMPORTING output = ls_exceldata-material. * Check for existing Planning requirement

PERFORM check_for_exist USING ls_exceldata-material CHANGING lt_return." * Requirement planning exists need to update it. IF lt_return IS INITIAL. PERFORM read_data USING ls_exceldata CHANGING ls_requirement_item LT_REQUIREMENT_SCHEDULE. * Function to change requirement planning PERFORM change_requirement USING LT_REQUIREMENT_SCHEDULE ls_requirement_item CHANGING lt_return. REFRESH:LT_REQUIREMENT_SCHEDULE. ELSE. * * Requirement planning does not exists need to create it. PERFORM read_data USING ls_exceldata CHANGING ls_requirement_item LT_REQUIREMENT_SCHEDULE. * * Function to create independent requirement planning PERFORM create_requirement USING LT_REQUIREMENT_SCHEDULE ls_requirement_item CHANGING lt_return lc_req_number. REFRESH: LT_REQUIREMENT_SCHEDULE. ENDIF. ENDLOOP. *>> *FORM CHECK. *LOOP AT ITAB_PBIM INTO WA_ITAB_PBIM. * IF WA_ITAB_PBIM-MATNR <> LS_EXCELDATA-MATERIAL. ** IF WA_ITAB_PBIM-MATNR <> MATNR. ** WRITE: / 'CHECK MATERIAL :', LS_EXCELDATA-MATERIAL-MATERIAL. ** ELSEIF WA_ITAB_PBIM-WERKS <> WERKS. ** WRITE: / 'CHECK PLANT :', WA_ITAB_PBIM-WERKS. ** ELSE. ** WRITE: / 'TEST PLAN :', WA_ITAB_PBIM-PBDNR ,'ALREADY EXISTS'. ** EXIT. ** ENDIF. * ELSE. * CONTINUE. * ENDIF. *ENDLOOP. *ENDFORM. *&---------------------------------------------------------------------** *&Form SELECTFILE *&---------------------------------------------------------------------** * Function to browse excel file *----------------------------------------------------------------------* FORM selectfile CHANGING ic_filename TYPE localfile . DATA:lc_subrc TYPE sy-subrc, lc_windowt TYPE string.

DATA:lt_filetab TYPE filetable. lc_windowt = 'Select Source Excel File'(002). * * Display File Open Dialog control/screen to select excel file CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING window_title = lc_windowt default_filename = '*.xlsx' multiselection = ' ' CHANGING file_table = lt_filetab rc = lc_subrc. * * Write path on input area READ TABLE lt_filetab INDEX 1 INTO ic_filename. ENDFORM. " SELECTFILE *&---------------------------------------------------------------------* *& Form UPLOADEXCELDATA *&---------------------------------------------------------------------* * Function to upload excel file *----------------------------------------------------------------------* FORM UPLOADEXCELDATA. * FM to read data from excel file CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' EXPORTING i_tab_raw_data = ls_raw_data i_line_header = 'X' i_filename = p_fname TABLES i_tab_converted_data = LT_EXCELDATA. ENDFORM. " UPLOADEXCELDATA *&---------------------------------------------------------------------* *& Form GET_DATE *&---------------------------------------------------------------------* * Program to get next date *----------------------------------------------------------------------* FORM get_date USING value(id_date_in) TYPE p0001-begda value(ii_days) TYPE t5a4a-dlydy value(ii_month) TYPE t5a4a-dlymo value(lc_years) TYPE t5a4a-dlyyr CHANGING ed_date_out TYPE p0001-begda. * FM to calculate next date by passing date and number of days or number of mont hs CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL' EXPORTING date = id_date_in days = ii_days months = ii_month years = lc_years IMPORTING calc_date = ed_date_out. ENDFORM. " GET_DATE *&---------------------------------------------------------------------* *& Form CREATE_REQUIREMENT *&---------------------------------------------------------------------*

* Calling BAPI to create independent requirement planning *----------------------------------------------------------------------* FORM create_requirement USING value(it_requirement_schedule) TYPE ty_requirement_schedule value(is_requirement_item) TYPE bapisitemr CHANGING et_return TYPE ty_return ec_req_number TYPE bapisitemr-req_number. DATA:ls_return TYPE bapireturn1. REFRESH: et_return. CALL FUNCTION 'BAPI_REQUIREMENTS_CREATE' EXPORTING requirements_item = is_requirement_item do_commit = 'X' IMPORTING reqmtsplannumber = ec_req_number TABLES requirements_schedule_in = it_requirement_schedule return = et_return. IF et_return IS INITIAL. WRITE :/ gi_excel_row, 'Requirements created For Material:', is_requirem ent_item-material. REFRESH:it_requirement_schedule,et_return. ELSE. WRITE:/ gi_excel_row, 'Error while creation Requirement of Material:',is _requirement_item-material. LOOP AT et_return INTO ls_return. WRITE: ls_return-type, ls_return-id, ls_return-number, 20 ls_return-me ssage. ENDLOOP. ENDIF. ENDFORM. " CREATE_REQUIREMENT *&---------------------------------------------------------------------* *& Form READ_DATA *&---------------------------------------------------------------------* * Moving data to bapi required structures *----------------------------------------------------------------------* FORM read_data USING value(is_exceldata) TYPE ty_exceldata CHANGING es_requirement_item TYPE bapisitemr et_requirement_schedule TYPE ty_requirement_schedule. * * Item details * es_requirement_item-requ_type = p_bedae. es_requirement_item-material = is_exceldata-material. es_requirement_item-plant = p_werks. es_requirement_item-version = p_versb. es_requirement_item-vers_activ = p_vervs. es_requirement_item-req_number = p_pbdnr. ENDIF. * Schedule data PERFORM read_schedule_data USING is_exceldata CHANGING et_requirement_schedule. ENDFORM. " READ_DATA

* *

*&---------------------------------------------------------------------* *& Form CHANGE_REQUIREMENT *&---------------------------------------------------------------------* * Function to change requirement planning *----------------------------------------------------------------------* FORM change_requirement USING value(it_requirement_schedule) TYPE ty_requirement_schedule value(is_requirement_item) TYPE bapisitemr CHANGING et_return TYPE ty_return . DATA:ls_return TYPE bapireturn1. DATA: lc_material LIKE bapisitemr-material, lc_plant LIKE bapisitemr-plant, lc_requirementstype LIKE bapisitemr-requ_type, lc_version LIKE bapisitemr-version, lc_reqmtsplannumber LIKE bapisitemr-req_number, lc_vers_activ LIKE bapisitemr-vers_activ. lc_material lc_plant lc_requirementstype lc_version lc_reqmtsplannumber lc_vers_activ = = = = = = is_requirement_item-material. p_werks. p_bedae. p_versb. p_pbdnr. p_vervs.

REFRESH: et_return. * Bapi to update the planning CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE' EXPORTING material = lc_material plant = lc_plant requirementstype = lc_requirementstype version = lc_version reqmtsplannumber = lc_reqmtsplannumber vers_activ = lc_vers_activ TABLES requirements_schedule_in = it_requirement_schedule return = et_return. IF et_return IS INITIAL. WRITE : / gi_excel_row, 'Requirements updated For Material:', is_requireme nt_item-material. REFRESH:it_requirement_schedule,et_return. ELSE. WRITE: gi_excel_row, 'Error while updating Material:', is_requirement_it em-material. LOOP AT et_return INTO ls_return. WRITE: ls_return-type, ls_return-id, ls_return-number, 20 ls_return-me ssage. ENDLOOP. ENDIF. ENDFORM. " CHANGE_REQUIREMENT *&---------------------------------------------------------------------* *& Form CHECK_FOR_EXIST *&---------------------------------------------------------------------* * Function to check for plannning existance *----------------------------------------------------------------------* FORM check_for_exist USING value(is_exceldata_material) TYPE ty_exceldata-material CHANGING et_return TYPE ty_return.

DATA: lc_material LIKE bapisitemr-material, lc_plant LIKE bapisitemr-plant, lc_requirementstype LIKE bapisitemr-requ_type, lc_version LIKE bapisitemr-version, lc_reqmtsplannumber LIKE bapisitemr-req_number. lc_material = is_exceldata_material. lc_plant = p_werks. * lc_requirementstype = p_bedae. lc_version = p_versb. lc_reqmtsplannumber = p_pbdnr. * Bapi to get details of the planning requirement * If return table is initial then requirement exists * else the requirement doesn't exists. CALL FUNCTION 'BAPI_REQUIREMENTS_GETDETAIL' EXPORTING material = lc_material plant = lc_plant requirementstype = lc_requirementstype version = lc_version reqmtsplannumber = lc_reqmtsplannumber TABLES return = et_return. ENDFORM. " CHECK_FOR_EXIST *&---------------------------------------------------------------------* *& Form READ_SCHEDULE_DATA *&---------------------------------------------------------------------* * Function to get schedule line items *----------------------------------------------------------------------* FORM read_schedule_data USING value(is_exceldata) TYPE ty_exceldata CHANGING et_requirement_schedule TYPE ty_requirement_schedule. DATA:lc_data_type TYPE prgrs. IF p_entlu = 'D'. lc_data_type = '1'. lc_days = '01'. lc_month = '00'. ELSEIF p_entlu = 'W'. lc_data_type = '2'. lc_days = '07'. lc_month = '00'. ELSEIF p_entlu = 'M'. lc_data_type = '3'. lc_days = '00'. lc_month = '01'. ENDIF. * Get schedule data PERFORM get_schedule_data USING is_exceldata lc_data_type lc_days lc_month CHANGING et_requirement_schedule. ENDFORM. "read_schedule_data *&---------------------------------------------------------------------* *& Form GET_SCHEDULE_DATA *&---------------------------------------------------------------------*

* REad all schedule data from excel *----------------------------------------------------------------------* FORM get_schedule_data USING value(is_exceldata) TYPE ty_exceldata value(ic_date_type) TYPE prgrs value(ic_days) TYPE t5a4a-dlydy value(ic_month) TYPE t5a4a-dlymo CHANGING et_requirement_schedule TYPE ty_requirement_schedule . DATA:ls_requirement_schedule TYPE bapisshdin. DATA: ld_date_in TYPE begda, ld_date_out TYPE begda. ls_requirement_schedule-date_type = ic_date_type. ls_requirement_schedule-req_date = p_datve. ls_requirement_schedule-req_qty = is_exceldata-req_qty1. * ls_requirement_schedule-unit = cc_unit.* * CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' * EXPORTING * input = ls_requirement_schedule-unit * language = sy-langu * IMPORTING * output = ls_requirement_schedule-unit * EXCEPTIONS * unit_not_found = 1. APPEND ls_requirement_schedule TO et_requirement_schedule. ld_date_in = p_datve. ASSIGN is_exceldata TO <fs_ls>. * Loop will read data from work area horizontally and get next required quantity WHILE sy-subrc = 0. ASSIGN COMPONENT sy-index OF STRUCTURE <fs_ls> TO <fs_comp>. IF sy-index > 61.EXIT. ENDIF. * Function to get next date by paasing the start date IF sy-index > 2. PERFORM get_date USING ld_date_in ic_days ic_month CC_YEAR CHANGING ld_date_out. ls_requirement_schedule-date_type = ic_date_type. ls_requirement_schedule-req_date = ld_date_out. ls_requirement_schedule-req_qty = <fs_comp>. * ls_requirement_schedule-unit = cc_unit. * CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' * EXPORTING* input = ls_requirement_schedule-unit * language = sy-langu * IMPORTING * output = ls_requirement_schedule-unit * EXCEPTIONS * unit_not_found = 1. APPEND ls_requirement_schedule TO et_requirement_schedule. ld_date_in = ld_date_out. ENDIF. ENDWHILE. ENDFORM. " GET_SCHEDULE_DATA *&---------------------------------------------------------------------* *& Form 1ST_DAYOFWEEK *&---------------------------------------------------------------------*

* Frist day of the week *----------------------------------------------------------------------* FORM 1st_dayofweek . DATA:ld_datum TYPE sy-datum, lc_weekday TYPE dtresr-weekday. * To get day based system date CALL FUNCTION 'DATE_TO_DAY' EXPORTING date = p_datve IMPORTING weekday = lc_weekday. * To get the firstday for the week IF lc_weekday = text-021. ld_datum = p_datve. ELSEIF ( lc_weekday = text-022 ). ld_datum = p_datve - 1. ELSEIF ( lc_weekday = text-023 ). ld_datum = p_datve - 2. ELSEIF ( lc_weekday = text-024 ). ld_datum = p_datve - 3. ELSEIF ( lc_weekday = text-025 ). ld_datum = p_datve - 4. ELSEIF ( lc_weekday = text-026 ). ld_datum = p_datve - 5. ELSEIF ( lc_weekday = text-027 ). ld_datum = p_datve - 6. ENDIF. MOVE ld_datum TO p_datve. ENDFORM. " 1ST_DAYOFWEEK

You might also like