当前位置:网站首页>Md61 plan independent demand import Bapi [by daily dimension / dynamic template / dynamic field]
Md61 plan independent demand import Bapi [by daily dimension / dynamic template / dynamic field]
2022-06-11 02:06:00 【DeveloperMrMeng】
Realize downloading dynamic templates according to the input interval of the selection screen , According to the actual date column name in the upload template , Create a planned independent demand for the corresponding date .
Download effect :

Upload effect :


The complete code is as follows , With a little modification, it can be reused directly :
*&---------------------------------------------------------------------*
*& Form FRM_GET_COMP
*&---------------------------------------------------------------------*
*& Get field structure list
*&---------------------------------------------------------------------*
FORM FRM_GET_COMP USING US_DATA
CHANGING CT_COMP TYPE ABAP_COMPDESCR_TAB.
DATA:
LO_DESCR_REF TYPE REF TO CL_ABAP_TYPEDESCR,
LO_STRUC TYPE REF TO CL_ABAP_STRUCTDESCR.
CALL METHOD CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA
EXPORTING
P_DATA = US_DATA
RECEIVING
P_DESCR_REF = LO_DESCR_REF.
LO_STRUC ?= LO_DESCR_REF.
CT_COMP = LO_STRUC->COMPONENTS.
ENDFORM.*&---------------------------------------------------------------------*
*& Report ZPPR005
*&---------------------------------------------------------------------*
*& Plan independent demand import
*&---------------------------------------------------------------------*
REPORT ZPPR005.
TABLES:PBIM,SSCRFIELDS.
TYPES:
BEGIN OF TY_PBIM,
MATNR TYPE PBIM-MATNR, " materiel
WERKS TYPE PBIM-WERKS, " factory
BEDAE TYPE PBIM-BEDAE, " Type of demand
VERSB TYPE PBIM-VERSB, " edition
PBDNR TYPE PBIM-PBDNR, " Demand planning
END OF TY_PBIM,
TY_TAB_PBIM TYPE STANDARD TABLE OF TY_PBIM,
BEGIN OF TY_MARA,
MATNR TYPE MARA-MATNR, " materiel
MEINS TYPE MARA-MEINS, " The basic unit of measurement
END OF TY_MARA,
TY_TAB_MARA TYPE STANDARD TABLE OF TY_MARA.
DATA:
GT_PBIM TYPE TY_TAB_PBIM,
GS_PBIM TYPE TY_PBIM,
GT_MARA TYPE TY_TAB_MARA,
GT_FIELDCAT TYPE LVC_T_FCAT,
GS_FIELDCAT TYPE LVC_S_FCAT,
GS_FUNCTXT TYPE SMP_DYNTXT. " Menu Maker
FIELD-SYMBOLS:
<FS_TAB_UPLOAD> TYPE STANDARD TABLE,
<FS_UPLOAD> TYPE ANY,
<FS_TAB_ALV> TYPE STANDARD TABLE,
<FS_ALV> TYPE ANY.
*OLE Define with relevant parameters
DATA:
MYEXCEL TYPE OLE2_OBJECT,
MYSHEET TYPE OLE2_OBJECT,
MYSHEETNAME TYPE OLE2_OBJECT,
MYCELL TYPE OLE2_OBJECT,
MYWORKBOOK TYPE OLE2_OBJECT,
MYRANGE TYPE OLE2_OBJECT.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:
P_FILE TYPE RLGRAP-FILENAME OBLIGATORY MEMORY ID Z1 MODIF ID M1.
SELECT-OPTIONS:
S_DATUM FOR PBIM-DATLP MODIF ID M2 NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-003.
PARAMETERS:
P_RB1 RADIOBUTTON GROUP R1 DEFAULT 'X' USER-COMMAND CREATE, " Plan independent requirement template download
P_RB2 RADIOBUTTON GROUP R1. " Plan independent demand import
SELECTION-SCREEN END OF BLOCK B2.
INITIALIZATION.
* Initialize screen text description
PERFORM FRM_INITIAL_DESC.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
* Import file search help
PERFORM FRM_CALL_F4 CHANGING P_FILE.
AT SELECTION-SCREEN OUTPUT.
* Dynamic update screen
PERFORM FRM_CHANGE_SCREEN.
AT SELECTION-SCREEN.
START-OF-SELECTION.
* Execution start
PERFORM FRM_PROCESS_MAIN.
*&---------------------------------------------------------------------*
*& Form FRM_INITIAL_DESC
*&---------------------------------------------------------------------*
*& Initialize screen text description
*&---------------------------------------------------------------------*
FORM FRM_INITIAL_DESC .
GS_FUNCTXT-ICON_ID = ICON_EXPORT.
GS_FUNCTXT-QUICKINFO = TEXT-002. " Download the production version import template
GS_FUNCTXT-ICON_TEXT = TEXT-002. " Download the production version import template
SSCRFIELDS-FUNCTXT_01 = GS_FUNCTXT.
* The default template date range is the next two months
S_DATUM-SIGN = 'I'.
S_DATUM-OPTION = 'EQ'.
S_DATUM-LOW = SY-DATUM.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
DATE = SY-DATUM
DAYS = 0
MONTHS = 2
SIGNUM = '+'
YEARS = 0
IMPORTING
CALC_DATE = S_DATUM-HIGH.
APPEND S_DATUM.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_call_f4
*&---------------------------------------------------------------------*
*& Import file search help
*&---------------------------------------------------------------------*
FORM FRM_CALL_F4 CHANGING CV_FILE TYPE RLGRAP-FILENAME.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
FILE_NAME = CV_FILE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHANGE_SCREEN
*&---------------------------------------------------------------------*
*& Dynamic update screen
*&---------------------------------------------------------------------*
FORM FRM_CHANGE_SCREEN .
IF P_RB1 = 'X'.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'M1'.
SCREEN-ACTIVE = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSE.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'M2'.
SCREEN-ACTIVE = 0.
ENDIF.
IF SCREEN-NAME = 'P_FILE'.
SCREEN-REQUIRED = 2.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& Download the template
*&---------------------------------------------------------------------*
FORM FRM_DOWNLOAD_TEMPLATE .
DATA:
LV_FULLPATH TYPE STRING,
LV_PATH TYPE STRING.
* Get the template save path
PERFORM FRM_GET_FULLPATH CHANGING LV_FULLPATH
LV_PATH.
* If the path is empty, exit
IF LV_FULLPATH IS INITIAL.
* Download canceled !
MESSAGE S028(ZMSG01).
LEAVE LIST-PROCESSING.
ENDIF.
* Use OLE Download dynamic templates
PERFORM FRM_CRT_EXCEL2 USING LV_FULLPATH
LV_PATH.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_MAIN
*&---------------------------------------------------------------------*
*& Execution start
*&---------------------------------------------------------------------*
FORM FRM_PROCESS_MAIN .
CASE ABAP_ON.
* Plan independent requirement template download
WHEN P_RB1.
* Download the template
PERFORM FRM_DOWNLOAD_TEMPLATE.
* Plan independent demand import
WHEN P_RB2.
* Create an upload template dynamic internal table
PERFORM FRM_CREATE_UPLOAD_TAB.
* Import plan independent demand data
PERFORM FRM_UPLOAD_FILE.
* Processing imported data
PERFORM FRM_PROCESS_DATA.
* Exhibition ALV
PERFORM FRM_DISPLAY_ALV.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_FILE
*&---------------------------------------------------------------------*
*& Import plan independent demand data
*&---------------------------------------------------------------------*
FORM FRM_UPLOAD_FILE .
DATA:
LT_RAW_DATA TYPE TRUXS_T_TEXT_DATA.
IF P_FILE IS INITIAL.
* Please select the import file !
MESSAGE S035(ZMSG01) DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
* Import file data
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
* I_LINE_HEADER = 'X'
I_TAB_RAW_DATA = LT_RAW_DATA
I_FILENAME = P_FILE
* I_STEP = 1
TABLES
I_TAB_CONVERTED_DATA = <FS_TAB_UPLOAD>
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID
TYPE 'S'
NUMBER SY-MSGNO
WITH SY-MSGV1
SY-MSGV2
SY-MSGV3
SY-MSGV4
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ELSE.
IF LINES( <FS_TAB_UPLOAD> ) = 1.
* The file content is empty , Please check !
MESSAGE S029(ZMSG01) DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
*& Processing imported data
*&---------------------------------------------------------------------*
FORM FRM_PROCESS_DATA .
* Build dynamic ALV
PERFORM FRM_CREATE_DYN_ALV.
* Data mapping
PERFORM FRM_MAPPING_DATA.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& Exhibition ALV
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .
DATA:
LS_LAYOUT TYPE LVC_S_LAYO,
LT_FIELDCAT TYPE LVC_T_FCAT,
LT_EXCLUDING TYPE SLIS_T_EXTAB,
LT_EVENT TYPE SLIS_T_EVENT,
LS_EVENT TYPE SLIS_ALV_EVENT,
LS_DDVAL TYPE LVC_S_DROP.
* Set layout control
LS_LAYOUT-ZEBRA = 'X'. " Color spacing
LS_LAYOUT-SEL_MODE = 'D'. " Choice mode
LS_LAYOUT-CWIDTH_OPT = 'X'. " Column width adaption
LS_LAYOUT-STYLEFNAME = 'STYLE'. " Control field
LS_LAYOUT-BOX_FNAME = 'CBOX'. " Select box fields
* Additional events
LS_EVENT-NAME = 'DATA_CHANGED'.
LS_EVENT-FORM = 'FRM_ALV_DATA_CHANGED'.
APPEND LS_EVENT TO LT_EVENT.
* Exhibition ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'FRM_STATUS_SET'
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
IS_LAYOUT_LVC = LS_LAYOUT
IT_FIELDCAT_LVC = GT_FIELDCAT
IT_EXCLUDING = LT_EXCLUDING
I_SAVE = 'A'
IT_EVENTS = LT_EVENT
TABLES
T_OUTTAB = <FS_TAB_ALV>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_DATA_CHANGED
*&---------------------------------------------------------------------*
*& Data change event
*&---------------------------------------------------------------------*
*& --> ER_DATA_CHANGED Data change monitoring instance object
*&---------------------------------------------------------------------*
FORM FRM_ALV_DATA_CHANGED USING ER_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
* Manual trigger PBO event , To achieve the refresh column width adaptive effect
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
FUNCTIONCODE = 'REFRESH'
EXCEPTIONS
FUNCTION_NOT_SUPPORTED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_STATUS_SET
*&---------------------------------------------------------------------*
*& GUI Status bar settings
*&---------------------------------------------------------------------*
*& --> RT_EXTAB Exclude button
*&---------------------------------------------------------------------*
FORM FRM_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
DATA:
LS_EXTAB TYPE SLIS_EXTAB.
SET PF-STATUS 'STATUS' EXCLUDING RT_EXTAB.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& User button event response
*&---------------------------------------------------------------------*
*& --> R_UCOMM Event code
*& --> RS_SELFIELD Operation data field information
*&---------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA:
LO_GRID TYPE REF TO CL_GUI_ALV_GRID,
LS_STABLE TYPE LVC_S_STBL,
LV_VALID TYPE CHAR1,
LS_LAYOUT TYPE LVC_S_LAYO,
LV_REFRESH TYPE CHAR1.
LS_STABLE-ROW = 'X'.
LS_STABLE-COL = 'X'.
* Get the current screen instance object
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LO_GRID.
* take EDIT The data is updated back to the internal table GT_RESULT in .
CALL METHOD LO_GRID->CHECK_CHANGED_DATA
IMPORTING
E_VALID = LV_VALID
CHANGING
C_REFRESH = LV_REFRESH.
CASE R_UCOMM.
* double-click
WHEN '&IC1'.
* preservation
WHEN 'SAVE'.
* Create plan independent requirements
PERFORM FRM_CREATE_MD61.
WHEN OTHERS.
ENDCASE.
CALL METHOD LO_GRID->GET_FRONTEND_LAYOUT
IMPORTING
ES_LAYOUT = LS_LAYOUT.
LS_LAYOUT-CWIDTH_OPT = 'X'.
* Set column width adaptation
CALL METHOD LO_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = LS_LAYOUT.
* Refresh ALV
CALL METHOD LO_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LS_STABLE
EXCEPTIONS
FINISHED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_MD61
*&---------------------------------------------------------------------*
*& Create plan independent requirements
*&---------------------------------------------------------------------*
FORM FRM_CREATE_MD61 .
DATA:
LS_REQ_ITEM TYPE BAPISITEMR,
LT_REQ_SCHE_ITEM TYPE FSH_BAPISSHDIN_T,
LS_REQ_SCHE_ITEM TYPE BAPISSHDIN,
LT_RETURN TYPE TAB_BAPIRET1,
LT_COMPONENTS TYPE ABAP_COMPDESCR_TAB,
LV_VERVS TYPE PBIM-VERVS,
LV_SELNUM TYPE I.
* Get field structure list
PERFORM FRM_GET_COMP(ZCUSTOM_FORM)
USING <FS_ALV>
CHANGING LT_COMPONENTS IF FOUND.
LOOP AT <FS_TAB_ALV> INTO <FS_ALV>.
ASSIGN COMPONENT 'CBOX' OF STRUCTURE <FS_ALV> TO FIELD-SYMBOL(<FS_CBOX>). " Selection box
ASSIGN COMPONENT 'MESSAGE' OF STRUCTURE <FS_ALV> TO FIELD-SYMBOL(<FS_MESSAGE>). " news
ASSIGN COMPONENT 'ICON' OF STRUCTURE <FS_ALV> TO FIELD-SYMBOL(<FS_ICON>). " Status light
IF <FS_CBOX> <> 'X' OR <FS_ICON> = ICON_LED_GREEN.
CONTINUE.
ENDIF.
ADD 1 TO LV_SELNUM.
ASSIGN COMPONENT 'MATNR' OF STRUCTURE <FS_ALV> TO FIELD-SYMBOL(<FS_MATNR>)." materiel
ASSIGN COMPONENT 'WERKS' OF STRUCTURE <FS_ALV> TO FIELD-SYMBOL(<FS_WERKS>)." factory
ASSIGN COMPONENT 'VERSB' OF STRUCTURE <FS_ALV> TO FIELD-SYMBOL(<FS_VERSB>)." edition
ASSIGN COMPONENT 'PBDNR' OF STRUCTURE <FS_ALV> TO FIELD-SYMBOL(<FS_PBDNR>)." Demand planning
ASSIGN COMPONENT 'VERVS' OF STRUCTURE <FS_ALV> TO FIELD-SYMBOL(<FS_VERVS>)." Activate
READ TABLE GT_MARA INTO DATA(LS_MARA)
WITH KEY MATNR = <FS_MATNR>
BINARY SEARCH.
* BAPI Detail filling
LOOP AT LT_COMPONENTS INTO DATA(LS_COMPOMENTS) FROM 9.
ASSIGN COMPONENT LS_COMPOMENTS-NAME OF STRUCTURE <FS_ALV> TO FIELD-SYMBOL(<FS_PLNMG>).
IF <FS_PLNMG> IS NOT INITIAL.
LS_REQ_SCHE_ITEM-DATE_TYPE = '1'. " The date type ( Japan , week , month , interval )
LS_REQ_SCHE_ITEM-REQ_DATE = LS_COMPOMENTS-NAME+1(8)." Plan line date
LS_REQ_SCHE_ITEM-REQ_QTY = <FS_PLNMG>. " Planned quantity
LS_REQ_SCHE_ITEM-UNIT = LS_MARA-MEINS. " The basic unit of measurement
APPEND LS_REQ_SCHE_ITEM TO LT_REQ_SCHE_ITEM.
CLEAR LS_REQ_SCHE_ITEM.
ENDIF.
ENDLOOP.
READ TABLE GT_PBIM INTO DATA(LS_PBIM)
WITH KEY MATNR = <FS_MATNR>
WERKS = <FS_WERKS>
VERSB = <FS_VERSB>
PBDNR = <FS_PBDNR>
BINARY SEARCH.
* establish
IF SY-SUBRC <> 0.
LS_REQ_ITEM-MATERIAL = <FS_MATNR>. " materiel
LS_REQ_ITEM-PLANT = <FS_WERKS>. " factory
LS_REQ_ITEM-REQU_TYPE = 'VSF'. " Type of demand
LS_REQ_ITEM-VERSION = <FS_VERSB>. " edition
LS_REQ_ITEM-REQ_NUMBER = <FS_PBDNR>. " Demand planning
LS_REQ_ITEM-VERS_ACTIV = <FS_VERVS>. " Activate
* Independent demand plan creation
CALL FUNCTION 'BAPI_REQUIREMENTS_CREATE'
EXPORTING
REQUIREMENTS_ITEM = LS_REQ_ITEM
DO_COMMIT = 'X'
TABLES
REQUIREMENTS_SCHEDULE_IN = LT_REQ_SCHE_ITEM
RETURN = LT_RETURN.
* change
ELSE.
LV_VERVS = <FS_VERVS>.
* Independent demand plan change
CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'
EXPORTING
MATERIAL_LONG = LS_PBIM-MATNR " materiel
PLANT = LS_PBIM-WERKS " factory
REQUIREMENTSTYPE = 'VSF' " Type of demand
VERSION = LS_PBIM-VERSB " edition
REQMTSPLANNUMBER = LS_PBIM-PBDNR " Demand planning
VERS_ACTIV = LV_VERVS " Activate
DO_COMMIT = 'X'
UPDATE_MODE = 'X'
DELETE_OLD = 'X'
TABLES
REQUIREMENTS_SCHEDULE_IN = LT_REQ_SCHE_ITEM
RETURN = LT_RETURN.
ENDIF.
LOOP AT LT_RETURN INTO DATA(LS_RETURN) WHERE TYPE CA 'EAX'.
IF <FS_MESSAGE> IS INITIAL.
<FS_MESSAGE> = LS_RETURN-MESSAGE.
ELSE.
<FS_MESSAGE> = <FS_MESSAGE> && ';' && LS_RETURN-MESSAGE.
ENDIF.
ENDLOOP.
IF SY-SUBRC <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
<FS_ICON> = ICON_LED_GREEN. " A green light
* The independent demand plan was created successfully !
MESSAGE S165(ZMSG01) INTO <FS_MESSAGE>.
ELSE.
<FS_ICON> = ICON_LED_RED. " A red light
ENDIF.
MODIFY <FS_TAB_ALV> FROM <FS_ALV>.
CLEAR:
LT_REQ_SCHE_ITEM,
LT_RETURN,
LS_MARA,
LV_VERVS,
LS_PBIM.
ENDLOOP.
IF LV_SELNUM = 0.
* Please select at least one row of data !
MESSAGE S041(ZMSG01) DISPLAY LIKE 'E'.
RETURN.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_FULLPATH
*&---------------------------------------------------------------------*
*& Get the template save path
*&---------------------------------------------------------------------*
*& <-- CV_FULLPATH The full path
*& <-- CV_PATH File path
*&---------------------------------------------------------------------*
FORM FRM_GET_FULLPATH CHANGING CV_FULLPATH
CV_PATH.
DATA:
LV_INIT_PATH TYPE STRING,
LV_INIT_FNAME TYPE STRING,
LV_PATH TYPE STRING,
LV_FILENAME TYPE STRING,
LV_FULLPATH TYPE STRING.
* Initial name ( Plan independent demand import template .XLSX)
CONCATENATE TEXT-010
S_DATUM-LOW
'~'
S_DATUM-HIGH
'.xlsx'
INTO LV_INIT_FNAME.
* Get desktop path
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
CHANGING
DESKTOP_DIRECTORY = LV_INIT_PATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
* The user selects the name 、 route
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
DEFAULT_FILE_NAME = LV_INIT_FNAME
FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
INITIAL_DIRECTORY = LV_INIT_PATH
PROMPT_ON_OVERWRITE = 'X'
CHANGING
FILENAME = LV_FILENAME
PATH = LV_PATH
FULLPATH = LV_FULLPATH
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC = 0.
CV_FULLPATH = LV_FULLPATH.
CV_PATH = LV_PATH.
ENDIF.
ENDFORM. " FRM_GET_FULLPATH
*&---------------------------------------------------------------------*
*& Form FRM_CRT_EXCEL2
*&---------------------------------------------------------------------*
*& Use OLE Download dynamic templates
*&---------------------------------------------------------------------*
*& --> LV_FULLPATH
*& --> LV_PATH
*&---------------------------------------------------------------------*
FORM FRM_CRT_EXCEL2 USING UV_FULLPATH
UV_PATH.
* Download template file
PERFORM FRM_DOWNLOAD_FROM_SERVER USING UV_FULLPATH.
* open excel
PERFORM FRM_OPEN_EXCEL USING UV_FULLPATH.
* Dynamically populate data
PERFORM FRM_FILL_SHEET .
* Save the file
CALL METHOD OF MYWORKBOOK 'SAVE'.
* Close file
CALL METHOD OF MYWORKBOOK 'CLOSE'.
* sign out excel
CALL METHOD OF MYEXCEL 'QUIT'.
* Release object
FREE OBJECT MYSHEET.
FREE OBJECT MYWORKBOOK.
FREE OBJECT MYEXCEL.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_FROM_SERVER
*&---------------------------------------------------------------------*
*& Download template file
*&---------------------------------------------------------------------*
*& --> UV_FULLPATH
*&---------------------------------------------------------------------*
FORM FRM_DOWNLOAD_FROM_SERVER USING UV_FULLPATH.
DATA:
LV_MOD TYPE WWWDATA-OBJID, " Template object name
LS_OBJECT TYPE WWWDATATAB, " Template object
LV_FULLPATH TYPE LOCALFILE, " The full path
LV_RC TYPE SY-SUBRC. " Return code
LV_MOD = 'ZPPR005_TEMP'.
LV_FULLPATH = UV_FULLPATH.
* Query and download templates
SELECT SINGLE
RELID
OBJID
FROM WWWDATA
INTO CORRESPONDING FIELDS OF LS_OBJECT
WHERE SRTF2 = '0'
AND OBJID = LV_MOD. "smw0 Object name
IF SY-SUBRC <> 0 OR LS_OBJECT-OBJID = SPACE .
* Template file &1 non-existent , Please use first. SMW0 Upload !
MESSAGE S025(ZMSG01) WITH LV_MOD DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
* Download the template
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LS_OBJECT
DESTINATION = LV_FULLPATH
IMPORTING
RC = LV_RC.
IF LV_RC <> 0.
* Template file &1 Download failed , Please contact the developer !
MESSAGE S026(ZMSG01) WITH LV_MOD DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
* Download successful !
MESSAGE S027(ZMSG01).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_OPEN_EXCEL
*&---------------------------------------------------------------------*
*& open excel
*&---------------------------------------------------------------------*
*& --> UV_FULLPATH
*&---------------------------------------------------------------------*
FORM FRM_OPEN_EXCEL USING UV_FULLPATH.
* open excel application
CREATE OBJECT MYEXCEL 'EXCEL.APPLICATION'.
SET PROPERTY OF MYEXCEL 'VISIBLE' = 0 . "0 Running on behalf of the background ,1 Running on behalf of the front desk
* Get the workbooks .
CALL METHOD OF MYEXCEL 'WORKBOOKS' = MYWORKBOOK.
* Open the workbook
CALL METHOD OF MYWORKBOOK 'OPEN'
EXPORTING
#1 = UV_FULLPATH.
* Set the active workbook .
GET PROPERTY OF MYEXCEL 'ACTIVEWORKBOOK' = MYWORKBOOK.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILL_SHEET
*&---------------------------------------------------------------------*
*& Dynamically populate data
*&---------------------------------------------------------------------*
FORM FRM_FILL_SHEET .
DATA:
LV_DAYS TYPE TFMATAGE,
LV_DATE TYPE DATUM,
LV_FIELDNAME TYPE CHAR12,
LT_TITLE TYPE STANDARD TABLE OF CHAR2000,
LS_TITLE LIKE LINE OF LT_TITLE,
LV_RC TYPE I.
* Set up sheet Page name
CALL METHOD OF MYEXCEL 'WORKSHEETS' = MYSHEET
EXPORTING
#1 = TEXT-010. " Plan independent demand import template
CALL METHOD OF MYSHEET 'ACTIVATE'.
* Get the number of days in the date range
CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
EXPORTING
I_DATE_FROM = S_DATUM-LOW
I_DATE_TO = S_DATUM-HIGH
IMPORTING
E_DAYS = LV_DAYS.
LV_DATE = S_DATUM-LOW.
DO LV_DAYS + 1 TIMES.
WRITE LV_DATE TO LV_FIELDNAME USING EDIT MASK '____/__/__'.
IF LS_TITLE IS INITIAL.
LS_TITLE = LV_FIELDNAME.
ELSE.
CONCATENATE LS_TITLE
LV_FIELDNAME
INTO LS_TITLE
SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
ENDIF.
LV_DATE = LV_DATE + 1.
ENDDO.
APPEND LS_TITLE TO LT_TITLE.
* Copy the contents into the pasteboard
CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
IMPORTING
DATA = LT_TITLE
CHANGING
RC = LV_RC
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
CALL METHOD OF MYEXCEL 'CELLS' = MYCELL
EXPORTING
#1 = 1 " That's ok
#2 = 6. " Column
* Paste the content
CALL METHOD OF MYCELL 'PASTESPECIAL'.
* Select range
CALL METHOD OF MYEXCEL 'RANGE' = MYRANGE
EXPORTING
#1 = 'F1' " Start cell
#2 = 'EO1'. " End cell
* Change column width
SET PROPERTY OF MYRANGE 'COLUMNWIDTH' = '12'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_UPLOAD_TAB
*&---------------------------------------------------------------------*
*& Create an upload template dynamic internal table
*&---------------------------------------------------------------------*
FORM FRM_CREATE_UPLOAD_TAB .
DATA:
LT_COMPONENTS TYPE ABAP_COMPONENT_TAB,
LO_STRUC TYPE REF TO CL_ABAP_STRUCTDESCR,
LO_TABLE TYPE REF TO CL_ABAP_TABLEDESCR,
LO_WS TYPE REF TO DATA,
LO_TAB TYPE REF TO DATA,
LV_INDEX TYPE I,
LV_FNAME TYPE STRING.
* Add template fixed column : materiel
PERFORM FRM_CHANGE_COMP USING 'MATNR'
'CHAR30'
CHANGING LT_COMPONENTS.
* Add template fixed column : factory
PERFORM FRM_CHANGE_COMP USING 'WERKS'
'CHAR30'
CHANGING LT_COMPONENTS.
* Add template fixed column : edition
PERFORM FRM_CHANGE_COMP USING 'VERSB'
'CHAR30'
CHANGING LT_COMPONENTS.
* Add template fixed column : Demand planning
PERFORM FRM_CHANGE_COMP USING 'PBDNR'
'CHAR30'
CHANGING LT_COMPONENTS.
* Add template fixed column : Activation ID
PERFORM FRM_CHANGE_COMP USING 'VERVS'
'CHAR30'
CHANGING LT_COMPONENTS.
* Add dynamic columns ( Reserve one year's days )
DO 365 TIMES.
ADD 1 TO LV_INDEX.
LV_FNAME = |FIELD{ LV_INDEX }|.
* Add dynamic columns : Demand quantity
PERFORM FRM_CHANGE_COMP USING LV_FNAME
'CHAR30'
CHANGING LT_COMPONENTS.
ENDDO.
TRY.
* Get workspace type
CALL METHOD CL_ABAP_STRUCTDESCR=>CREATE
EXPORTING
P_COMPONENTS = LT_COMPONENTS
RECEIVING
P_RESULT = LO_STRUC.
CATCH CX_SY_STRUCT_CREATION.
ENDTRY.
TRY.
* Get table type
CALL METHOD CL_ABAP_TABLEDESCR=>CREATE
EXPORTING
P_LINE_TYPE = LO_STRUC
RECEIVING
P_RESULT = LO_TABLE.
CATCH CX_SY_TABLE_CREATION.
ENDTRY.
CREATE DATA LO_TAB TYPE HANDLE LO_TABLE.
CREATE DATA LO_WS TYPE HANDLE LO_STRUC.
ASSIGN LO_TAB->* TO <FS_TAB_UPLOAD>.
ASSIGN LO_WS->* TO <FS_UPLOAD>.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHANGE_COMP
*&---------------------------------------------------------------------*
*& Add dynamic field
*&---------------------------------------------------------------------*
*& --> UV_FNAME
*& --> UV_REF_FIELD
*& <-- CT_COMPONENTS
*&---------------------------------------------------------------------*
FORM FRM_CHANGE_COMP USING VALUE(UV_FNAME)
VALUE(UV_REF_FIELD)
CHANGING CT_COMPONENTS TYPE ABAP_COMPONENT_TAB.
DATA:
LO_TYPE TYPE REF TO CL_ABAP_TYPEDESCR,
LS_COMPOMENTS TYPE ABAP_COMPONENTDESCR.
LS_COMPOMENTS-NAME = UV_FNAME.
CALL METHOD CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME
EXPORTING
P_NAME = UV_REF_FIELD
RECEIVING
P_DESCR_REF = LO_TYPE
EXCEPTIONS
TYPE_NOT_FOUND = 1
OTHERS = 2.
LS_COMPOMENTS-TYPE ?= LO_TYPE.
APPEND LS_COMPOMENTS TO CT_COMPONENTS.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_DYN_ALV
*&---------------------------------------------------------------------*
*& Build dynamic ALV
*&---------------------------------------------------------------------*
FORM FRM_CREATE_DYN_ALV .
DATA:
LO_TAB TYPE REF TO DATA,
LO_WS TYPE REF TO DATA,
LV_INDEX TYPE I,
LV_DATEFNAME TYPE CHAR9,
LT_SPLIT TYPE STANDARD TABLE OF STRING,
LV_YEAR TYPE N LENGTH 4,
LV_MONTH TYPE N LENGTH 2,
LV_DAY TYPE N LENGTH 2,
LV_COL_POS TYPE LVC_COLPOS.
CLEAR <FS_UPLOAD>.
READ TABLE <FS_TAB_UPLOAD> INTO <FS_UPLOAD> INDEX 1.
* Set field control ( Fixed column section )
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'ZSPP_ALV_STRUC_003'
I_BYPASSING_BUFFER = 'X'
CHANGING
CT_FIELDCAT = GT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
READ TABLE GT_FIELDCAT ASSIGNING FIELD-SYMBOL(<FS_FIELDCAT>) " Selection box
WITH KEY FIELDNAME = 'CBOX'.
IF SY-SUBRC = 0.
<FS_FIELDCAT>-NO_OUT = 'X'.
<FS_FIELDCAT>-TECH = 'X'.
ENDIF.
* From 6 The column starts as a dynamic column
LV_INDEX = 6.
LV_COL_POS = LINES( GT_FIELDCAT ).
DO.
ASSIGN COMPONENT LV_INDEX OF STRUCTURE <FS_UPLOAD> TO FIELD-SYMBOL(<FS_FIELD>).
IF <FS_FIELD> IS NOT INITIAL.
SPLIT <FS_FIELD> AT '/' INTO TABLE LT_SPLIT.
READ TABLE LT_SPLIT INTO DATA(LS_SPLIT) INDEX 1.
LV_YEAR = LS_SPLIT.
READ TABLE LT_SPLIT INTO LS_SPLIT INDEX 2.
LV_MONTH = LS_SPLIT.
READ TABLE LT_SPLIT INTO LS_SPLIT INDEX 3.
LV_DAY = LS_SPLIT.
LV_DATEFNAME = |D{ LV_YEAR }{ LV_MONTH }{ LV_DAY }|.
ADD 1 TO LV_COL_POS.
* Add quantity field
PERFORM FRM_ADD_FIELDCAT USING <FS_FIELD>
LV_DATEFNAME
'PBED'
'PLNMG'
LV_COL_POS.
ADD 1 TO LV_INDEX.
ELSE.
EXIT.
ENDIF.
CLEAR:
LT_SPLIT.
ENDDO.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = GT_FIELDCAT
IMPORTING
EP_TABLE = LO_TAB
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS = 2.
ASSIGN LO_TAB->* TO <FS_TAB_ALV>.
CREATE DATA LO_WS LIKE LINE OF <FS_TAB_ALV>.
ASSIGN LO_WS->* TO <FS_ALV>.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_MAPPING_DATA
*&---------------------------------------------------------------------*
*& Data mapping
*&---------------------------------------------------------------------*
FORM FRM_MAPPING_DATA .
DATA:
LV_INDEX_FILE TYPE I,
LV_INDEX_ALV TYPE I,
LT_PBIM TYPE TY_TAB_PBIM,
LS_PBIM TYPE TY_PBIM,
LV_VERSB TYPE VERSB.
LOOP AT <FS_TAB_UPLOAD> INTO <FS_UPLOAD> FROM 2.
ASSIGN COMPONENT 'MATNR' OF STRUCTURE <FS_UPLOAD> TO FIELD-SYMBOL(<FS_FIELD>).
ASSIGN COMPONENT 'MATNR' OF STRUCTURE <FS_ALV> TO FIELD-SYMBOL(<FS_ALV_FIELD>).
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = <FS_FIELD>
IMPORTING
OUTPUT = <FS_ALV_FIELD> " materiel
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2.
LS_PBIM-MATNR = <FS_ALV_FIELD>.
ASSIGN COMPONENT 'WERKS' OF STRUCTURE <FS_UPLOAD> TO <FS_FIELD>.
ASSIGN COMPONENT 'WERKS' OF STRUCTURE <FS_ALV> TO <FS_ALV_FIELD>.
<FS_ALV_FIELD> = <FS_FIELD>. " factory
LS_PBIM-WERKS = <FS_FIELD>.
ASSIGN COMPONENT 'VERSB' OF STRUCTURE <FS_UPLOAD> TO <FS_FIELD>.
ASSIGN COMPONENT 'VERSB' OF STRUCTURE <FS_ALV> TO <FS_ALV_FIELD>.
LV_VERSB = |{ <FS_FIELD> ALPHA = IN }|.
<FS_ALV_FIELD> = LV_VERSB. " edition
LS_PBIM-VERSB = LV_VERSB.
ASSIGN COMPONENT 'PBDNR' OF STRUCTURE <FS_UPLOAD> TO <FS_FIELD>.
ASSIGN COMPONENT 'PBDNR' OF STRUCTURE <FS_ALV> TO <FS_ALV_FIELD>.
<FS_ALV_FIELD> = <FS_FIELD>. " Demand planning
LS_PBIM-PBDNR = <FS_FIELD>.
ASSIGN COMPONENT 'VERVS' OF STRUCTURE <FS_UPLOAD> TO <FS_FIELD>.
ASSIGN COMPONENT 'VERVS' OF STRUCTURE <FS_ALV> TO <FS_ALV_FIELD>.
<FS_ALV_FIELD> = <FS_FIELD>. " Activation ID
* From 6 The column starts as a dynamic column ( file )
LV_INDEX_FILE = 6.
* From 9 The column starts as a dynamic column (ALV)
LV_INDEX_ALV = 9.
DO.
ASSIGN COMPONENT LV_INDEX_FILE OF STRUCTURE <FS_UPLOAD> TO <FS_FIELD>.
IF <FS_FIELD> IS ASSIGNED.
ASSIGN COMPONENT LV_INDEX_ALV OF STRUCTURE <FS_ALV> TO <FS_ALV_FIELD>.
<FS_ALV_FIELD> = <FS_FIELD>.
ADD 1 TO LV_INDEX_FILE.
ADD 1 TO LV_INDEX_ALV.
ELSE.
EXIT.
ENDIF.
UNASSIGN <FS_FIELD>.
ENDDO.
APPEND <FS_ALV> TO <FS_TAB_ALV>.
APPEND LS_PBIM TO LT_PBIM.
CLEAR:
<FS_ALV>,
LS_PBIM.
ENDLOOP.
* Get the existing independent demand plan
SELECT MATNR " materiel
WERKS " factory
BEDAE " Type of demand
VERSB " edition
PBDNR " Demand planning
INTO TABLE GT_PBIM
FROM PBIM
FOR ALL ENTRIES IN LT_PBIM
WHERE MATNR = LT_PBIM-MATNR
AND WERKS = LT_PBIM-WERKS
AND BEDAE = 'VSF'
AND VERSB = LT_PBIM-VERSB
AND PBDNR = LT_PBIM-PBDNR
AND LOEVR <> 'D'.
* Get the basic unit of material
SELECT MATNR
MEINS
INTO TABLE GT_MARA
FROM MARA
FOR ALL ENTRIES IN LT_PBIM
WHERE MATNR = LT_PBIM-MATNR.
SORT GT_PBIM BY MATNR ASCENDING
WERKS ASCENDING
BEDAE ASCENDING
VERSB ASCENDING
PBDNR ASCENDING.
SORT GT_MARA BY MATNR ASCENDING.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ADD_FIELDCAT
*&---------------------------------------------------------------------*
*& Add quantity field
*&---------------------------------------------------------------------*
*& --> UV_FIELDDESC Field description
*& --> UV_FIELDNAME Field name
*& --> UV_REF_TABLE Refer to table
*& --> UV_REF_FIELD Reference field
*& --> UV_COLPOS Column position
*&---------------------------------------------------------------------*
FORM FRM_ADD_FIELDCAT USING UV_FIELDDESC
UV_FIELDNAME
VALUE(UV_REF_TABLE)
VALUE(UV_REF_FIELD)
UV_COLPOS.
GS_FIELDCAT-FIELDNAME = UV_FIELDNAME.
GS_FIELDCAT-COL_POS = UV_COLPOS.
GS_FIELDCAT-REPTEXT = UV_FIELDDESC.
GS_FIELDCAT-SCRTEXT_L = UV_FIELDDESC.
GS_FIELDCAT-SCRTEXT_M = UV_FIELDDESC.
GS_FIELDCAT-SCRTEXT_S = UV_FIELDDESC.
GS_FIELDCAT-REF_TABLE = UV_REF_TABLE.
GS_FIELDCAT-REF_FIELD = UV_REF_FIELD.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR GS_FIELDCAT.
ENDFORM.边栏推荐
- [matlab] image compression coding (DCT, RLE)
- 2021-2-26 compilation of programming language knowledge points
- Internet of things final assignment - sleep quality detection system (refined version)
- CLIP论文详解
- [traitement d'image] système multifonctionnel de traitement d'image basé sur l'interface graphique MATLAB [y compris le code source MATLAB 1876]
- [traffic sign recognition] Based on Matlab GUI YCbCr feature extraction +bp neural network traffic sign recognition [including Matlab source code 1869]
- Task01: array
- What if ROS lacks a package
- [leetcode] flat multi-level bidirectional linked list
- Start with interpreting the code automatically generated by BDC, and explain the trial version of the program components of sapgui
猜你喜欢

How to reinstall win11 drawing tool when it is missing

Task07: double pointer
![[leetcode] same tree + symmetric binary tree](/img/e5/40803ce66756c03737aa8991f7ec92.jpg)
[leetcode] same tree + symmetric binary tree
![[leetcode] path sum II (first glimpse recursion + backtracking)](/img/a8/54920e54a026ebef3eb0a1336e5b62.jpg)
[leetcode] path sum II (first glimpse recursion + backtracking)

5月B站榜单丨飞瓜数据UP主成长排行榜(B站平台)发布

Programming implementation: input any English month, and output its corresponding Chinese prompt after looking up the month table. Abbreviations can also be found.

视频压缩数据集TVD

Linux Installation MySQL database details

The female programmer gives out a salary slip: the salary is high, but she feels she is 10 years old

Project sorting of Online Exercise System Based on gin and Gorm
随机推荐
Understanding of pointers
[music] playing city of the sky based on MATLAB [including Matlab source code 1874]
Task06: bit operation
面试官:介绍一下你简历中的项目,细讲一点,附项目实战
Battery control of QT widget (qpainter)
Matlab digital operation function notes
[leetcode] construct a binary tree by traversing the sequence from front to middle (continuous optimization)
What should be paid attention to in PMP registration? Special reminder
2021-02-27image processing of MATLAB
[leetcode] flat multi-level bidirectional linked list
[traffic sign recognition] Based on Matlab GUI YCbCr feature extraction +bp neural network traffic sign recognition [including Matlab source code 1869]
[untitled]
Today's sleep quality record 80 points
【HaaS Hands-On】全新视频节目上线 创意案例我们一起上手做 第一期E01: 物联网工程师 和你一起上手做遥控机械臂
Basic underlying principles of concurrent programming (4)
Polynomial multiplication
Some records of China open SSL compilation
Task02: linked list
QT database learning notes (II) QT operation SQLite database
Task01: array