Anda di halaman 1dari 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

Anda mungkin juga menyukai