Michael's profileAt world's endBlogGuestbookNetwork Tools Help

Blog


    June 25

    前世的五百次回眸才换来今生的擦肩而过

    佛说前世的五百次回眸才换来今生的擦肩而过
    这句话是从这个故事来的吧:
    有个年轻美丽的女孩,出身豪门,家产丰厚,又多才多艺,*子过得很好。
    媒婆也快把她家的门槛给踩烂了,但她一直不想结婚,因为她觉得还没见到她真正想要嫁的那个男孩。
    直到有一天,她去一个庙会散心,于万千拥挤的人群中,看见了一个年轻的男人,不用多说什么,反正女孩觉得那个男人就是她苦苦等待的结果了。
    可惜,庙会太挤了, 她无法走到那个男人的身边,就这样眼睁睁的看着那个男人消失在人群中。
    后来的两年里,女孩四处去寻找那个男人,但这人就像蒸发了一样,无影无踪。
    女孩每天都向佛祖祈祷,希望能再见到那个男人。
    她的诚心打动了佛祖,佛祖显灵了。
    佛祖说:“你想再看到那个男人吗?”
    女孩说:“是的!我只想再看他一眼!”
    佛祖:”你要放弃你现在的一切,包括爱你的家人和幸福的生活。”
    女孩:“我能放弃!”
    佛祖:“你还必须修炼五百年道行,才能见他一面。你不后悔么?”
    女孩:“我不后悔!”
    女孩变成了一块大石头,躺在荒郊野外,四百多年的风吹*晒,苦不堪言,但女孩都觉得没什么,难受的是这四百多年都没看到一个人,看不见一点点希望,这让她都快崩溃了。
    最后一年,一个采石队来了,看中了她的巨大,把她凿成一块巨大的条石,运进了城里,他们正在建一座石桥,于是,女孩变成了石桥的护栏。
    就在石桥建成的第一天,女孩就看见了,那个她等了五百年的男人!
    他行色匆匆,像有什么急事,很快地从石桥的正中走过了,当然,他不会发觉有一块石头正目不转睛地望着他。
    男人又一次消失了,再次出现的是佛祖。
    佛祖:“你满意了吗?”
    女孩:“不!为什么?为什么我只是桥的护栏?如果我被铺在桥的正中,我就能碰到他了,我就能摸他一下!”
    佛祖:“你想摸他一下?那你还得修炼五百年!”
    女孩:“我愿意!”
    佛祖:“你吃了这么多苦,不后悔?”
    女孩:“不后悔!”
    女孩变成了一棵大树,立在一条人来人往的官道上,这里每天都有很多人经过,女孩每天都在近处观望,但这更难受,因为无数次满怀希望的看见一个人走来,又无数次希望破灭。
    不是有前五百年的修炼,相信女孩早就崩溃了!
    *子一天天的过去,女孩的心逐渐平静了,她知道,不到最后一天,他是不会出现的。
    又是一个五百年啊!最后一天,女孩知道他会来了,但她的心中竟然不再激动。
    来了!他来了!他还是穿着他最喜欢的白色长衫,脸还是那么俊美,女孩痴痴地望着他。
    这一次,他没有急匆匆的走过,因为,天太热了。
    他注意到路边有一棵大树,那浓密的树荫很诱人,休息一下吧,他这样想。
    他走到大树脚下,靠着树根,微微的闭上了双眼,他睡着了。
    女孩摸到他了!他就靠在她的身边!
    但是,她无法告诉他,这千年的相思。她只有尽力把树荫聚集起来,为他挡住毒辣的阳光。
    千年的柔情啊!
    男人只是小睡了一刻,因为他还有事要办,他站起身来,拍拍长衫上的灰尘,在动身的前一刻,他抬头看了看这棵大树,又微微地抚摸了一下树干,大概是为了感谢大树为他带来清凉吧。
    然后,他头也不回地走了!就在他消失在她的视线的那一刻,佛祖又出现了。
    佛祖:“你是不是还想做他的妻子?那你还得修炼……”
    女孩平静地打断了佛祖的话:“我是很想,但是不必了。”
    佛祖:“哦?”
    女孩:“这样已经很好了,爱他,并不一定要做他的妻子。”
    佛祖:“哦!”
    女孩:“他现在的妻子也像我这样受过苦吗?”
    佛祖微微地点点头。
    女孩微微一笑:“我也能做到的,但是不必了。”
    就在这一刻,女孩发现佛祖微微地叹了一口气,或者是说,佛祖轻轻地松了一口气。
    女孩有几分诧异,“佛祖也有心事么?”
    佛祖的脸上绽开了一个笑容:“因为这样很好,有个男孩可以少等一千年了,他为了能够看你一眼,已经修炼了两千年。”

    DOI- Upload EXCEL TO SAP

    *&---------------------------------------------------------------------*
    *& Report  ZUSD017
    *&
    *&---------------------------------------------------------------------*
    *& Author              : CHUNG NAM INTERNATIONAL CO.,LTD. MICHAELCHOW
    *& Creation Date       : 21.11.2008
    *& Program Type        : Executable Programs
    *& Logical DB          : [Nil]
    *& Text Elements
    *&   (Titles&Headers)  : [Nil]
    *&   (Selection Texts) : [Nil]
    *&   (Text symbols)    : [Nil]
    *& GUI Status          : [Nil] OR [Standard]
    *& Variants            : [Nil] OR Variant
    *& Message Class       : [Nil]
    *& Description         :
    *&
    *&---------------------------------------------------------------------*
    *& Modifications       :
    *& ID   Date           Programmer   Description
    *&     2008.11.24      Michael chow Update SBI file and create
    *&                     So with upload file.
    *&---------------------------------------------------------------------*
    REPORT  ZUSD017.
    * Define Screen Container
    DATA: obj_container TYPE REF TO cl_gui_custom_container.
    DATA: o_error       TYPE REF TO i_oi_error,
          o_control     TYPE REF TO i_oi_container_control,
          o_document    TYPE REF TO i_oi_document_proxy,
          o_spreadsheet TYPE REF TO i_oi_spreadsheet.
    * Data declarations.
    DATA: t_files       TYPE filetable,
          s_files       TYPE file_table,
          v_doc_name    TYPE char256,
          v_changed     TYPE int4,
          v_rcode       TYPE int4,
          t_ranges      TYPE soi_range_list,
          s_ranges      TYPE soi_range_item,
          t_data        TYPE soi_generic_table  ,
          s_data        TYPE soi_generic_item,
          v_action      TYPE int4.
    DATA:  GT_data        TYPE soi_generic_table WITH HEADER LINE.
    data : ORDER_HEADER_IN like BAPISDHD1.
    data : ORDER_ITEMS_IN like BAPISDITM occurs 0 with
    header line.
    data : RETURN like BAPIRET2 occurs 0 with header line.
    data : ORDER_PARTNERS like BAPIPARNR occurs 0 with
    header line.
    DATA : ORDER_KEYS LIKE BAPISDKEY OCCURS 0 WITH HEADER
    LINE.
    data : ORDER_SCHEDULES_IN like BAPISCHDL occurs 0 with
    header line.
    data : BEGIN OF TAB OCCURS 0,
            SRNO(4),
            DOC_TYPE like ORDER_HEADER_IN-dOC_TYPE,
            SALES_ORG LIKE ORDER_HEADER_IN-SALES_ORG,
            DISTR_CHAN LIKE ORDER_HEADER_IN-DISTR_CHAN,
            DIVISION like ORDER_HEADER_IN-DIVISION,
    *        REQ_DATE_H(10),
            PURCH_DATE(10),
            PMNTTRMS LIKE ORDER_HEADER_IN-PMNTTRMS,
            PURCH_NO_C LIKE ORDER_HEADER_IN-PURCH_NO_C,
            ITM_NUMBER like BAPISDITM-ITM_NUMBER,
            CUST_MAT22 LIKE BAPISDITM-CUST_MAT22,
            PLANT LIKE ORDER_ITEMS_IN-PLANT,
            TARGET_QTY LIKE ORDER_ITEMS_IN-TARGET_QTY,
            PARTN_ROLE LIKE ORDER_PARTNERS-PARTN_ROLE,
            PARTN_NUMB LIKE ORDER_PARTNERS-PARTN_NUMB,
            MATERIAL   like BAPISDITM-material,
    END OF TAB.
    *data: t_data like alsmex_tabline occurs 0 with header
    DATA: gd_currentrow type i.
    data : PURCHASEORDER like ekko-ebeln.
    Data: tot_rec type i,     "Total Records
         gd_update type i,   "Main Table Increement Counter
         gd_lines type i,    "Success Table increement Counter
         w_textout like t100-text. "VARIABLE TO GET ERRORLOG
    data : begin of it_success occurs 0,
            SALESDOCUMENT LIKE BAPIVBELN-VBELN,  "PROJECT
    end of it_success.
    data : begin of it_error occurs 0,
            srno(4),
            err_msg(73) TYPE c,    "TO RETREIVE ERROR MESSAGES
    end of it_error.
    data : srno(4).
    DATA : SALESDOCUMENT LIKE  BAPIVBELN-VBELN.
    *selection-screen begin of block b1 with frame.
    *skip 3.
    *parameter:p_infile like rlgrap-filename obligatory.
    *skip 3.
    *selection-screen end  of block b1.
    *
    *AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile.
    *  PERFORM value_help.
    start-of-selection.
    PERFORM Objinit.
    PERFORM Open_File.
    PERFORM Process_data.
    PERFORM Upload_data.
    *
    *&---------------------------------------------------------------------*
    *&      Form  display_column_headings
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM display_column_headings.
    WRITE:2 ' Success Report '(014) COLOR COL_POSITIVE.
    SKIP.
    WRITE:2 'The following records inserted successfully:'(013).
    WRITE:/ sy-uline(104).
    FORMAT COLOR COL_HEADING.
    WRITE:/(10) 'Sales order '(004), sy-vline.
    WRITE:/ sy-uline(104).
    ENDFORM.                    "display_column_headings
    *Subroutine to display SUCESS REPORT
    FORM DISPLAY_SUCESS.
    FORMAT COLOR COL_NORMAL.
    LOOP AT it_success.
    WRITE:/(10) it_success-SALESDOCUMENT, sy-vline,'SO has been created successfully!'.
    CLEAR it_success.
    ENDLOOP.
    WRITE:/ sy-uline(104).
    REFRESH: it_success.
    FORMAT COLOR COL_BACKGROUND.
    ENDFORM.                               "
    *DISPLAY_REPORT
    *&---------------------------------------------------------------------*
    *&      Form  errorreport
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM errorreport.
    LOOP AT it_error.
    WRITE:/(10)    " sy-vline,
                it_error-SRNO, sy-vline,
                 (40) it_error-err_msg .
    ENDLOOP.
    WRITE:/ sy-uline(104).
    REFRESH: it_error.
    endform.                    "errorreport
    *&---------------------------------------------------------------------*
    *&      Form  ERRORHEADINGS
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM ERRORHEADINGS.
    SKIP.
    WRITE:2 ' Error Report '(007) COLOR COL_NEGATIVE.
    SKIP.
    WRITE:2 'The following records failed during update:'(008).
    WRITE:/ sy-uline(104).
    FORMAT COLOR COL_HEADING.
    WRITE:/(10) 'ERRORs'(009), sy-vline.
    WRITE:/ sy-uline(104).
    FORMAT COLOR COL_NORMAL.
    ENDFORM.                    "ERRORHEADINGS
    FORM ObjInit.
    CLASS c_oi_errors DEFINITION LOAD.
    * Create Instance control for container
    CALL METHOD c_oi_container_control_creator=>get_container_control
    IMPORTING control = o_control
                     error   = o_error.
    IF o_error->has_failed = 'X'.
    CALL METHOD o_error->raise_message
    EXPORTING type = 'E'.
    ENDIF.
    * Create generic container linked to container in screen 100
    CREATE OBJECT obj_container
    EXPORTING
         container_name               = 'CONTAINER'
    EXCEPTIONS
         cntl_error                  = 1
         cntl_system_error           = 2
         create_error                = 3
         lifetime_error              = 4
         lifetime_dynpro_dynpro_link = 5
    others                      = 6.
    IF sy-subrc <> 0.
    MESSAGE e208(00) WITH 'Error creating container'.
    ENDIF.
    * Establish connection to GUI Control
    CALL METHOD o_control->init_control
    EXPORTING r3_application_name = 'Excel Document Container'
                     inplace_enabled     = 'X'
                     parent              = obj_container
    IMPORTING error               = o_error.
    IF o_error->has_failed = 'X'.
    CALL METHOD o_error->raise_message
    EXPORTING type = 'E'.
    ENDIF.
    * Create Document Proxy
    CALL METHOD o_control->get_document_proxy
    EXPORTING document_type   = soi_doctype_excel_sheet
    IMPORTING document_proxy  = o_document
                     error           = o_error.
    IF o_error->has_failed = 'X'.
    CALL METHOD o_error->raise_message
    EXPORTING type = 'E'.
    ENDIF.
    endform.
    form open_file.
    *Call dialog to navigate to file
    CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
           default_extension       = '*.xls'
           file_filter             = '*.xls'
           initial_directory       = 'C:\'
    CHANGING
           file_table              = t_files
           rc                      = v_rcode
           user_action             = v_action
    EXCEPTIONS
           file_open_dialog_failed = 1
           cntl_error              = 2
           error_no_gui            = 3
    OTHERS                  = 4.
    IF sy-subrc <> 0 .
    MESSAGE 'Please select SBI upload data (*.xls|*.xlsx)!' TYPE 'S' DISPLAY LIKE 'E'.
    leave PROGRAM.
    ENDIF.
    if v_action NE 0.  "If user press "Cancel" button, then quit program.
    leave program.
    endif.
    * Only continue if User hasn't cancelled
    *  CHECK: v_action = 0.
    data: l type I,
            P type I.
    data: v_ext(4) type c.
    * Determine filename to open Excel document
    READ TABLE t_files INDEX 1 INTO s_files.
    IF sy-subrc = 0.
          l = strlen( s_files-filename ).
          p = l - 4.
          v_ext = s_files-filename+p(4).
    translate v_ext to upper case.
    if v_ext NE '.XLS' and
             v_ext NE 'XLSX'.
    MESSAGE 'Invalid SBI upload files!' TYPE 'S' DISPLAY LIKE 'E'.
    leave PROGRAM.
    endif.
    CONCATENATE 'FILE://' s_files-filename INTO v_doc_name.
    ELSE.
    MESSAGE e208(00).
    ENDIF.  "sy-subrc = 0
    * Open Spreadsheet in SAPWORKDIR
    CALL METHOD o_document->open_document
    EXPORTING open_inplace     = 'X'
                     document_title   = 'Excel'
                     document_url     = v_doc_name
                     no_flush         = ''
    IMPORTING error            = o_error.
    IF o_error->has_failed = 'X'.
    CALL METHOD o_error->raise_message
    EXPORTING type = 'E'.
    ENDIF.
    * Open Spreadsheet interface
    CALL METHOD o_document->get_spreadsheet_interface
    EXPORTING no_flush        = ''
    IMPORTING sheet_interface = o_spreadsheet
                     error           = o_error.
    IF o_error->has_failed = 'X'.
    CALL METHOD o_error->raise_message
    EXPORTING type = 'E'.
    ENDIF.
    * Set selection for 1000 rows
    CALL METHOD o_spreadsheet->set_selection
    EXPORTING top   = 1
    left  = 1
    rows  = '1000' "Max rows
                             columns = '15'. "Max columns
    * Define Range in spreadsheet
    CALL METHOD o_spreadsheet->insert_range
    EXPORTING name      = 'SBI'
    rows      = '1000' "Max rows
                       columns   = '15' "Max columns
                       no_flush  = ''
    IMPORTING error     = o_error.
    IF o_error->has_failed = 'X'.
    CALL METHOD o_error->raise_message
    EXPORTING type = 'E'.
    ENDIF.
      s_ranges-name    = 'SBI'.
      s_ranges-rows    = '1000'. "Max rows
      s_ranges-columns = '15'.
    APPEND s_ranges TO t_ranges.
    * Get data
    CALL METHOD o_spreadsheet->get_ranges_data
    EXPORTING all       = 'X'
                       no_flush  = ''
    IMPORTING contents  = t_data
                       error     = o_error
    CHANGING ranges    = t_ranges.
    IF o_error->has_failed = 'X'.
    CALL METHOD o_error->raise_message
    EXPORTING type = 'E'.
    ENDIF."* Close document
    * Close the document
    CALL METHOD o_document->close_document
    EXPORTING do_save     = ''
                       no_flush    = ''
    IMPORTING has_changed = v_changed
                       error       = o_error.
    IF o_error->has_failed = 'X'.
    CALL METHOD o_error->raise_message
    EXPORTING type = 'E'.
    ENDIF.
    * Clear Document Resources
    CALL METHOD o_document->release_document
    EXPORTING no_flush = ''
    IMPORTING error    = o_error.
    IF o_error->has_failed = 'X'.
    CALL METHOD o_error->raise_message
    EXPORTING type = 'E'.
    ENDIF.
    endform.
    FORM Process_data.
    CLEAR GT_DATA[].
    loop at t_data into s_data.
    MOVE-CORRESPONDING s_data to GT_DATA.
    append gt_data.
    ENDLOOP.
    sort gt_data  by row column.
    * Get first row retrieved
    read table gt_data index 1.
    * Set first row retrieved to current row
      gd_currentrow = gt_data-row.
    loop at gt_data.
    * Reset values for next row
    if gt_data-row ne gd_currentrow.
    append tab .
    clear tab.
          gd_currentrow = gt_data-row.
    endif.
    SHIFT gt_data-VALUE LEFT DELETING LEADING SPACE.
    case gt_data-column.
    when '1'.
            TAB-SRNO = gt_data-value.
    when '2'.
            TAB-DOC_TYPE = gt_data-value.
    when '3'.
            TAB-SALES_ORG = gt_data-value.
    when '4'.
            TAB-DISTR_CHAN = gt_data-value.
    when '5'.
            TAB-DIVISION = gt_data-value.
    *      when '0006'.
    *        TAB-REQ_DATE_H =  t_data-value.
    when '6'.
            TAB-PURCH_DATE = gt_data-value.
    when '7'.
            TAB-PMNTTRMS = gt_data-value.
    when '8'.
            TAB-PURCH_NO_C = gt_data-value.
    when '9'.
            TAB-ITM_NUMBER = gt_data-value.
    when '10'.
            TAB-CUST_MAT22 = gt_data-value.
    when '11'.
            TAB-PLANT  = gt_data-value.
    when '12'.
            TAB-TARGET_QTY = gt_data-value.
    when '13'.
            TAB-PARTN_ROLE = gt_data-value.
    when '14'.
            TAB-PARTN_NUMB = gt_data-value.
    when '15'.
            TAB-MATERIAL = gt_data-value.
    endcase.
    endloop.
    append tab.
    clear tab.
    DELETE TAB WHERE Material EQ '' or doc_type EQ ''.
    endform.
    form upload_data.
    sort tab by SRNO.
    LOOP AT TAB.
    *    concatenate tab-REQ_DATE_H+4(4)
    *tab-REQ_DATE_H+2(2) tab-REQ_DATE_H+0(2) into
    *tab-REQ_DATE_H.
    *    concatenate tab-PURCH_DATE+4(4)
    *tab-PURCH_DATE+2(2) tab-PURCH_DATE+0(2) into
    *tab-PURCH_DATE.
        SRNO = TAB-SRNO.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
    INPUT  = tab-PARTN_NUMB
    IMPORTING
    OUTPUT = tab-PARTN_NUMB.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
    INPUT  = tab-CUST_MAT22
    IMPORTING
    OUTPUT = tab-CUST_MAT22.
    IF TAB-SRNO = SRNO.
          ORDER_HEADER_IN-DOC_TYPE = TAB-DOC_TYPE.
          ORDER_HEADER_IN-SALES_ORG = TAB-SALES_ORG.
          ORDER_HEADER_IN-DISTR_CHAN = TAB-DISTR_CHAN.
    *      ORDER_HEADER_IN-REQ_DATE_H = TAB-REQ_DATE_H.
          ORDER_HEADER_IN-PURCH_DATE = TAB-PURCH_DATE.
          ORDER_HEADER_IN-PMNTTRMS = TAB-PMNTTRMS.
          ORDER_HEADER_IN-PURCH_NO_C = TAB-PURCH_NO_C.
          ORDER_HEADER_IN-DIVISION  = tab-DIVISION.
          ORDER_ITEMS_IN-ITM_NUMBER = tab-ITM_NUMBER.
          ORDER_ITEMS_IN-material = TAB-CUST_MAT22.
          ORDER_ITEMS_IN-PLANT      = TAB-PLANT.
          ORDER_ITEMS_IN-material   = tab-material.
    APPEND ORDER_ITEMS_IN.
          ORDER_PARTNERS-PARTN_ROLE = TAB-PARTN_ROLE.
          ORDER_PARTNERS-PARTN_NUMB = TAB-PARTN_NUMB.
    APPEND ORDER_PARTNERS.
          ORDER_SCHEDULES_IN-ITM_NUMBER = tab-ITM_NUMBER.
          ORDER_SCHEDULES_IN-REQ_QTY = tab-TARGET_QTY.
    append ORDER_SCHEDULES_IN.
    ENDIF.
    AT END OF SRNO.
    CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
    EXPORTING
    *            SALESDOCUMENTIN               =
                 ORDER_HEADER_IN               = ORDER_HEADER_IN
    *            ORDER_HEADER_INX              =
    *            SENDER                        =
    *            BINARY_RELATIONSHIPTYPE       =
    *            INT_NUMBER_ASSIGNMENT         =
    *            BEHAVE_WHEN_ERROR             =
    *            LOGIC_SWITCH                  =
    *            TESTRUN                       =
    *            CONVERT                       = ' '
    IMPORTING
             SALESDOCUMENT                 = SALESDOCUMENT
    TABLES
    RETURN                        = RETURN
                 ORDER_ITEMS_IN                = ORDER_ITEMS_IN
    *            ORDER_ITEMS_INX               =
                 ORDER_PARTNERS                = ORDER_PARTNERS
                 ORDER_SCHEDULES_IN            = ORDER_SCHEDULES_IN
    *            ORDER_SCHEDULES_INX           =
    *            ORDER_CONDITIONS_IN           =
    *            ORDER_CONDITIONS_INX          =
    *            ORDER_CFGS_REF                =
    *            ORDER_CFGS_INST               =
    *            ORDER_CFGS_PART_OF            =
    *            ORDER_CFGS_VALUE              =
    *            ORDER_CFGS_BLOB               =
    *            ORDER_CFGS_VK                 =
    *            ORDER_CFGS_REFINST            =
    *            ORDER_CCARD                   =
    *            ORDER_TEXT                    =
             ORDER_KEYS                    = ORDER_KEYS
    *            EXTENSIONIN                   =
    *            PARTNERADDRESSES              =
                    .
    IF SALESDOCUMENT <> SPACE.
    commit work.
    ADD 1 TO gd_update.
            it_success-SALESDOCUMENT = SALESDOCUMENT.
    append it_success.
    CLEAR :SALESDOCUMENT,ORDER_HEADER_IN.
    REFRESH : RETURN,ORDER_ITEMS_IN,ORDER_PARTNERS.
    ELSE.
    loop at return.
              it_error-SRNO = tab-SRNO.
              it_error-err_msg = return-MESSAGE .
    Append it_error.
    ENDLOOP.
    CLEAR :SALESDOCUMENT,ORDER_HEADER_IN.
    REFRESH : RETURN,ORDER_ITEMS_IN,ORDER_PARTNERS.
    ENDIF.
    endat.
    endloop.
    DESCRIBE TABLE it_success LINES gd_lines.
    IF gd_lines GT 0.
    *     Display result report column headings
    PERFORM display_column_headings.
    *     Display result report
    PERFORM DISPLAY_SUCESS.
    ENDIF.
    * IF SUCESS FAILS Display Error Report
    DESCRIBE TABLE it_error LINES gd_lines.
    IF gd_lines GT 0.
    PERFORM errorheadings.
    PERFORM errorreport.
    ENDIF.
    endform.

    June 24

    一庭芳草围新绿

    桃花飞绿水,一庭芳草围新绿
    有情芍药含春泪,野竹上表霄
    十亩藤花落古香,无力蔷薇卧晓枝
    我愿意暂求借化力,减却牡丹妖艳色
    花非花,梦非梦
    花如梦,梦似花
    梦里有花,花开如梦
    心非心,镜非镜
    心如镜,镜似心
    镜中有心,心如明镜

    岂曰无衣,与子同袍;岂曰无衣,与子同裳

    岂曰无衣,与子同袍;岂曰无衣,与子同裳

    ——我与妖精的素年擦肩之缘

    那一年,我十四岁,妖精十八岁。我瞪著好奇的眼睛,看著她赤裸著从我家漂满栀子花办的浴缸里出来,悠悠然穿上我姐姐那洁白的连衣裙,恍若梦中的仙女。那一年,我们之间什麽都没有可能发生。

    那一年,我十八岁,妖精十八岁,我瞪著急色的眼睛,看著她赤裸著从我家漂满玫瑰花瓣的浴缸里出来,施施然穿上我爲初恋情人准备的睡衣,恍若心中的初恋。那一年,我们之间单纯的什麽都没有发生。

    那一年,我二十四岁,妖精十八岁,我瞪著流气的眼睛,看著她赤裸著从我家漂满百合花瓣的浴缸里出来,俏俏然穿上我一夜情的女人留下的低胸吊带,妩媚诱惑迷人。那一年,我们之间还是什麽都没有发生。

    那一年,我三十岁,妖精十八岁,我熟视无睹的看著她赤裸著从我家漂满桃花花瓣的浴缸里出来,潇潇然穿上我和老婆戏玩时的女王装,手执皮鞭,威风凛凛。那一年,我们之间依然无情趣的什麽都没有发生。

    那一年,我四十岁,妖精十八岁,我闭上双眼,她赤裸著从我家漂满桂花的浴缸里出来,升升然穿起我为女儿准备的户外运动装,清纯可人。那一年,我们之间仍然矜持的什麽都没有发生。

    那一年,妖精十八岁,我已经是一堆枯骨,她从我的坟前拿起我为她准备的女巫装,愀然不乐的穿上,看到了衣服下面压著的一张纸条:前生你生米已成熟饭,今生你木已成舟,来生你琵琶别抱,三生石上如此姻缘,纵一往情深,妖精不老亦成空。

    2008年6月8日,端午,入梅第一天,有雨。我撑著伞在太湖之滨踯躅前行,渴望碰到一只类似白素贞一样的女妖,却什麽都没有发生,只有路边泥地上翻出了几条蚯蚓。

    我一直自以为高傲其实孤僻的存在于这世间,不太相信身边所遇到的一些人,反而把理想寄托在虚拟的网络上,希望能遇到知己。然世间何处不孤独,知己难寻,倒是在网上总能遇到一些令我赞叹不已击节欣赏的家伙,嗜泪的妖精是其中和我相处较深的一个。

    时以江中无水、故衣等马甲浪迹西祠,于青楼遇到妖精,唱和之文时有,如《你的江中,没有我的水》、《故衣》、《碧螺春香处,红莲落故衣》、《鬼卦魅妖》、《应妖精徵婚檄文序》等,作为无聊之时,二人解闷之作,如今文字于我渐行渐远,唯有记下一方心情,留待他年细细品读。

    妖精的文字其实并不好,在我看来,很多时候都是凌乱的、文字空洞堆砌的,大风一吹,那几张纸片也许就在空中化作漫天的素白,成为文字被妖精滥用的六月之雪。唯一剩下的,就是妖精在那些文字中所表现出的自己的风骨——自信、执著、果敢干练以及孤独、寂寞前行者的偶尔迷茫。在这些文字中,一个风韵万千的女人时而以比男人更男人的气概承担起一切责任,时而以一种小女人寂寞的姿态诉说著对爱情的渴望,就像邻家妹妹一样时而用稚气的声音告诉你,我要保护哥哥,又时而哭著来找你说自己被人欺负了,总是那样惹人怜爱,宠溺不已。

    妖精在东北,我在江南,相隔三千多公里,就靠著一根网线牵引著我们相识数年,总是在网上断续的聊著,偶尔的电话短信,会告诉对方,还有个素未谋面的朋友在远方偶尔会想起你。我遇她距离最近的时候,或许就是我和她的几次出差,在浙江、在上海、在福建、在南京、在北京,每次我都想象著她坐的飞机从我的头顶飞过,那时我们之间的距离也许只有一万米,或者是火车从我所在的城市经过,那时我们之间的距离也许只有几千米,或许,我距离她的家也不过几千米。然而,在这现代化的社会中,我们匆忙著,在中国的大地上奔波,总是在不经意间擦肩而过,将佛说的所谓前生千万次的回眸在今生消耗殆尽。

    曾经在一个春日的午後和妖精视频,一身纯白的她恍若正处在单纯的十八岁雨季的女孩,银铃般的声音传来,让我惊讶与她的年轻貌美和与文字风情万种的天壤之别,她却笑著说这只是千面妖精的某一面而已,於是我心自然沉淀,寂然不动,幻想出无数单纯、可爱、妩媚、风骚、艳情……等面容,从青梅竹马的恋人、情人、爱人、姐姐、妹妹到学生、制服、女王、OL、拉拉最後依旧回归到如此单纯的面孔,历经轮回,终归本色。

    你为妖,我为人,妖为世间的精灵,乃是不老的传说,我在时光中悄然老去,唯有静坐一旁,看你演绎妖的风情万种,置身事外远观而永难投入亵玩!

    这样一个美丽的初夏,我在江南如画的风景中,想念著曾经交往的彼此心情,如那江南女孩手中素白的丝绸,清新闪亮!

    June 17

    Upload FC Data to ZTUSD018 table and upload FC data to MD61 synchronously

    *&---------------------------------------------------------------------*
    *& Report  ZUSD018
    *&
    *&---------------------------------------------------------------------*
    *& Author              : CHUNG NAM INTERNATIONAL CO.,LTD. MICHAELCHOW
    *& Creation Date       : 02.12.2008
    *& Program Type        : Executable Programs
    *& Logical DB          : [Nil]
    *& Text Elements
    *&   (Titles&Headers)  : [Nil]
    *&   (Selection Texts) : [Nil]
    *&   (Text symbols)    : [Nil]
    *& GUI Status          : [Nil] OR [Standard]
    *& Variants            : [Nil] OR Variant
    *& Message Class       : [Nil]
    *& Description         :
    *&
    *&---------------------------------------------------------------------*
    *& Modifications       :
    *& ID             Date        Programmer   Description
    *& ZUSD018    2008.12.03      Michael Chow CNPC Auto-Program Phase3 Part2
    *& CD1K902966                 Upload FC Data to ZTUSD018 table and upload
    *&                            FC data to MD61 synchronously
    *&---------------------------------------------------------------------*
    REPORT  ZUSD018 NO STANDARD PAGE HEADING
                    .
    TABLES:
          PBIM,
          PBED,
          PBHI,
          MARA,
          KNMT,
          ZTUSD018, "Fc Data
          ZTUSD018_FD. "FC Field List
    *******************************************************************
    " Global variable declaration
    *******************************************************************
    TYPE-POOLS: slis.
    DATA: wa_line TYPE slis_fieldcat_alv.
    DATA: it_fieldcat TYPE slis_t_fieldcat_alv  .
    DATA: wa_layout TYPE slis_layout_alv.
    DATA: it_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE.
    DATA:  G_COL TYPE I VALUE 1. "Global col index.
    "Fc Data
    data:  IT_UPLOAD LIKE ZTUSD018 OCCURS 0 WITH HEADER LINE.
    "Field List.
    DATA:  IT_FIELD_LIST like ZTUSD018_FD OCCURS 0 WITH HEADER LINE.
    DATA: G_WEEK like ZTUSD018_FD-WEEK.
    DATA: G_WEEK_TMP LIKE SCAL-WEEK.
    "Import file
    data: it_file like alsmex_tabline occurs 0 with header line.
    DATA: gd_currentrow type i.
    DATA: IT_KNMT LIKE KNMT OCCURS 0 WITH HEADER LINE. "Customer Material Infor REC.
    DATA: IT_PBED LIKE PBED OCCURS 0 WITH HEADER LINE. "Independent Requirements Data
    DATA: IT_PBIM LIKE PBIM OCCURS 0 WITH HEADER LINE. "Independent Requirements for Material
    DATA: IT_PBHI LIKE PBHI OCCURS 0 WITH HEADER LINE. "Independent Requirements History
    DATA: BEGIN OF IT_FCDATA OCCURS 0. "To be uploaded FC DATA.
    INCLUDE STRUCTURE ZTUSD018.
    DATA: WERKS LIKE MARC-WERKS.
    DATA: MATNR LIKE MARA-MATNR.
    DATA: END OF IT_FCDATA.
    DATA: BEGIN OF IT_PERXX OCCURS 0,
                   MATNR LIKE MARA-MATNR,
                   PERXX LIKE SY-DATUM,
                   PLNMG LIKE PBED-PLNMG,
                   RQDAT LIKE SY-DATUM,
                   UPMOD TYPE C.  " Update Mode C- Create , U-Update
    DATA: END OF IT_PERXX.
    DATA: BEGIN OF IT_MSG  OCCURS 0.
    INCLUDE STRUCTURE BAPIRETURN1.
    DATA: MATNR     LIKE MARA-MATNR.
    DATA: END OF IT_MSG.
    data : begin of it_error occurs 0,
            Item(4),
            err_msg(73) TYPE c,    "TO RETREIVE ERROR MESSAGES
    end of it_error.
    data : Item(4).
    DEFINE append_alv_field.
    clear wa_line .
      wa_line-fieldname   =   &1.
      wa_line-seltext_l   =   &2.
      wa_line-seltext_m   =   &2.
      wa_line-seltext_s   =   &2.
      wa_line-cfieldname  =   &3.
      wa_line-tech        =   &4.
      wa_line-qfieldname  =   &5.
      wa_line-edit_mask   =   &6.
      wa_line-ddictxt     =   'L'.
    append wa_line      to  it_fieldcat.
    END-OF-DEFINITION .
    selection-screen begin of block b1 with frame TITLE TEXT-T01.
    PARAMETER : R_QRY RADIOBUTTON GROUP G1 DEFAULT 'X',
                R_upd RADIOBUTTON GROUP G1 .
    selection-screen end of block b1.
    *SKIP 3.
    selection-screen begin of block b2 with frame TITLE TEXT-T02.
    *skip 3.
    PARAMETER: "p_werks like ZTUSD018-WERKS DEFAULT '3231' ,
               p_week  like ZTUSD018-WEEK DEFAULT SY-DATUM+4(2).
    *skip 3.
    selection-screen end of block b2.
    selection-screen begin of block b3 with frame TITLE TEXT-T03.
    *skip 3.
    parameter:p_infile like rlgrap-filename.
    *skip 3.
    selection-screen end of block b3.
    INITIALIZATION.
    PERFORM GET_WEEK USING SY-DATUM G_WEEK_tmp.
      p_week = g_week_tmp+4(2).
      G_WEEK = g_week_tmp+4(2).
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile.
    PERFORM value_help.
    start-of-selection.
    IF R_Qry EQ 'X'.
    PERFORM DATA_CHECK.
    PERFORM GET_DATA.
    PERFORM LIST_FC.
    ELSE.
    IF P_INFILE IS INITIAL.
    Message 'Please select a upload file,only excel file is supported!' type 'E'.
    stop.
    endif.
    PERFORM Upload_FIELD_LIST.
    PERFORM Upload_2ZTABLE.
    PERFORM DELETE_CM. "Delete It_upload's leading CM
    PERFORM GET_KNMT.
    PERFORM Process_FCDATA.
    PERFORM Combine_data.
    PERFORM Upload_FCDATA.
    PERFORM Show_Update_status.
    endif.
    END-OF-SELECTION.
    FORM Show_Update_status.
    append_alv_field 'MATNR' 'MATERIAL' '' '' '' ''.       "
    append_alv_field 'TYPE' 'Message Type' '' '' '' ''.       "
    append_alv_field 'ID' 'Message ID' '' '' '' ''.       "
    append_alv_field 'NUMBER' 'Message Number' '' '' '' ''.       "
    append_alv_field 'MESSAGE' 'Message' '' '' '' ''.       "
    PERFORM alv_layout.
    PERFORM SHOW_ALV TABLES IT_MSG.
    ENDFORM.
    FORM Upload_FCDATA.
    DATA: ex_matnr like BAPISITEMR-MATERIAL.
    data: ls_req_item like BAPISITEMR.
    data: lt_req_data like BAPISSHDIN occurs 0 with header line.
    data: lt_RETURN LIKE BAPIRETURN1 OCCURS 0 WITH HEADER LINE.
    *data: matertemp like BAPISITEMR-MATERIAL.
    data: lt_matnr like IT_PERXX OCCURS 0 WITH HEADER LINE.
    data: l_rows_count type I, l_Row_index type I.
    data: l_index like sy-tabix.
    "DELETE IT_PERXX WHERE MATNR ne 'PCMVSHE011110202'. "Test only
    SORT IT_PERXX BY MATNR RQDAT.
    LT_MATNR[] = IT_PERXX[].
    sort lt_matnr by matnr.
    delete ADJACENT DUPLICATES FROM lt_matnr COMPARING matnr.
    "Mark the update mode flag
    select * INTO CORRESPONDING FIELDS OF TABLE it_pbim
    from pbim
    FOR ALL ENTRIES IN lt_matnr
    where matnr = lt_matnr-matnr
    and werks = '3231'.
    if sy-subrc eq 0.
    loop at it_pbim.
    READ TABLE lt_matnr with key matnr = it_pbim-matnr.
    if sy-subrc eq 0.
                lt_matnr-UPMOD = 'U'.
    modify lt_matnr index sy-tabix.
    endif.
    ENDLOOP.
    endif.
    DESCRIBE TABLE lt_matnr LINES  l_rows_count.
    l_row_index = 1.
    if l_rows_count > 0.
    while l_row_index <= l_rows_count.
    READ TABLE lt_matnr INDEX L_row_index.
    if sy-subrc eq 0.
    Loop at IT_PERXX where matnr = lt_matnr-matnr.
    ls_req_item-material = IT_PERXX-MATNR.
    ls_req_item-plant = '3231'.
    ls_req_item-REQU_TYPE = 'VSE'.
    ls_req_item-VERSION = '00'.
    ls_req_item-VERS_ACTIV = 'X'.
    lt_req_data-DATE_TYPE = 2.
    lt_req_data-req_date = IT_PERXX-RQDAT.
    lt_req_data-REQ_QTY = IT_PERXX-PLNMG.
    append lt_req_data.
    clear lt_req_data.
    endloop.
    if lt_matnr-UPMOD EQ ''.
    CALL FUNCTION 'BAPI_REQUIREMENTS_CREATE'
    EXPORTING
               REQUIREMENTS_ITEM              = ls_req_item
    *           REQUIREMENT_PARAM              =
              UPDATE_MODE                     = 'X'
    IMPORTING
              MATERIAL                       =  ex_matnr
    *           PLANT                          =
    *           REQUIREMENTSTYPE               =
    *           VERSION                        =
    *           REQMTSPLANNUMBER               =
    TABLES
               REQUIREMENTS_SCHEDULE_IN       = lt_REQ_data
    *           REQUIREMENTS_CHAR_IN           =
    RETURN                         = LT_RETURN.
    if lines( lt_RETURN ) = 0 .
      IT_MSG-MATNR = LT_MATNR-MATNR.
      IT_MSG-MESSAGE = 'Forecast has been create successfully'.
    APPEND IT_MSG.
    ELSE.
    LOOP AT LT_RETURN.
    MOVE-CORRESPONDING LT_RETURN TO IT_MSG.
      IT_MSG-MATNR = LT_MATNR-MATNR.
    APPEND IT_MSG.
    ENDLOOP.
    endif.
    clear:LS_req_item,lt_req_data,lt_REQ_data[],lt_return[].
    ELSE.
    CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'
    EXPORTING
        MATERIAL                       = LT_MATNR-MATNR
        PLANT                          = '3231'
        REQUIREMENTSTYPE               = 'VSE'
        VERSION                        = '00'
        REQMTSPLANNUMBER               = ''
        VERS_ACTIV                     = 'X'
    *   REQUIREMENT_PARAM              =
    *   MRP_AREA                       =
    *   DO_COMMIT                      = 'X'
    *    UPDATE_MODE                    = 'X'
       DELETE_OLD                     = 'X'
    *   NO_WITHDR                      = ' '
    *   MATERIAL_EVG                   =
    * IMPORTING
    *   REQUIREMENT_ITEM_OUT           =
    TABLES
        REQUIREMENTS_SCHEDULE_IN       = lt_req_data
    *   REQUIREMENTS_CHAR_IN           =
    RETURN                         = lt_RETURN
              .
    if lines( lt_RETURN ) = 0 .
      IT_MSG-MATNR = LT_MATNR-MATNR.
      IT_MSG-MESSAGE = 'Forecast has been updated successfully'.
    APPEND IT_MSG.
    ELSE.
    LOOP AT LT_RETURN.
    MOVE-CORRESPONDING LT_RETURN TO IT_MSG.
      IT_MSG-MATNR = LT_MATNR-MATNR.
    APPEND IT_MSG.
    ENDLOOP.
    endif.
    endif.
    endif.
    clear:ls_req_item,lt_REQ_data,lt_REQ_data[],LT_RETURN[].
    l_row_index = l_row_index + 1.
    endwhile.
    endif.
    endform.
    FORM Process_FCDATA.
    DATA: l_index like sy-tabix.
    DATA: LT_FC_TOTAL LIKE IT_FCDATA OCCURS 0 WITH HEADER LINE.
    Loop at it_upload.
    MOVE-CORRESPONDING it_upload to it_FCDATA.
        it_FCdata-WERKS = '3231'.
    READ TABLE it_knmt with key kdmat = it_upload-CPN.
    if sy-subrc eq 0.
                   it_FCDATA-MATNR = IT_KNMT-MATNR.
    ENDIF.
    APPEND IT_FCDATA.
    ENDLOOP.
    DELETE IT_FCDATA WHERE MATNR EQ '' OR FUNCT NE 'SUPPLY'.
    LOOP AT IT_FCDATA.  "Combine the Planed Qty
    READ TABLE LT_FC_TOTAL WITH KEY MATNR = IT_FCDATA-MATNR.
    IF SY-SUBRC EQ 0.
              L_INDEX = SY-TABIX.
              LT_FC_TOTAL-ABCOL = LT_FC_TOTAL-ABCOL + IT_FCDATA-ABCOL.
              LT_FC_TOTAL-ACCOL = LT_FC_TOTAL-ACCOL + IT_FCDATA-ACCOL.
              LT_FC_TOTAL-ADCOL = LT_FC_TOTAL-ADCOL + IT_FCDATA-ADCOL.
              LT_FC_TOTAL-AECOL = LT_FC_TOTAL-AECOL + IT_FCDATA-AECOL.
              LT_FC_TOTAL-AFCOL = LT_FC_TOTAL-AFCOL + IT_FCDATA-AFCOL.
              LT_FC_TOTAL-AGCOL = LT_FC_TOTAL-AGCOL + IT_FCDATA-AGCOL.
              LT_FC_TOTAL-AHCOL = LT_FC_TOTAL-AHCOL + IT_FCDATA-AHCOL.
              LT_FC_TOTAL-AICOL = LT_FC_TOTAL-AICOL + IT_FCDATA-AICOL.
              LT_FC_TOTAL-AJCOL = LT_FC_TOTAL-AJCOL + IT_FCDATA-AJCOL.
              LT_FC_TOTAL-AKCOL = LT_FC_TOTAL-AKCOL + IT_FCDATA-AKCOL.
              LT_FC_TOTAL-ALCOL = LT_FC_TOTAL-ALCOL + IT_FCDATA-ALCOL.
    MODIFY LT_FC_TOTAL INDEX L_INDEX.
    ELSE.
    MOVE-CORRESPONDING IT_FCDATA TO LT_FC_TOTAL.
    APPEND LT_FC_TOTAL.
    ENDIF.
    ENDLOOP.
    IF NOT LT_FC_TOTAL[] IS INITIAL.
       IT_FCDATA[] = LT_FC_TOTAL[].
    ENDIF.
    ENDFORM.
    FORM COMBINE_DATA.
    data: l_text(72) TYPE C.
    data: l_perxx(6) type c.
    data: l_date like BAPISSHDIN-REQ_DATE.
    data: lv_date like SCAL-DATE,
          lv_week like SCAL-week.
    Loop at IT_FCDATA.
          G_COL = 28.
    PERFORM GET_TITLE USING L_TEXT.
    CONDENSE L_TEXT.
    WRITE L_TEXT TO lv_date.
    PERFORM GET_WEEK USING lv_date lv_week.
          l_date = lv_date.
    *      CONCATENATE L_TEXT+0(4) L_TEXT+6(2) INTO L_PERXX.
    *      PERFORM GET_FIRST_OF_WEEK USING L_PERXX
    *                                L_DATE.
    if   IT_FCDATA-ABCOL > 0.
         IT_PERXX-MATNR = IT_FCDATA-MATNR.
         IT_PERXX-PLNMG = IT_FCDATA-ABCOL.
         IT_PERXX-PERXX = L_TEXT.
         IT_PERXX-PERXX = LV_WEEK.
         IT_PERXX-RQDAT = L_DATE.
    APPEND IT_PERXX.
    ENDIF.
    PERFORM GET_TITLE USING L_TEXT.
    CONDENSE L_TEXT.
    WRITE L_TEXT TO lv_date.
    PERFORM GET_WEEK USING lv_date lv_week.
          l_date = lv_date.
    *      CONCATENATE L_TEXT+0(4) L_TEXT+6(2) INTO L_PERXX.
    *      PERFORM GET_FIRST_OF_WEEK USING L_PERXX
    *                                L_DATE.
    if   IT_FCDATA-ACCOL > 0.
        IT_PERXX-MATNR = IT_FCDATA-MATNR.
         IT_PERXX-PLNMG = IT_FCDATA-ACCOL.
         IT_PERXX-PERXX = LV_WEEK.
         IT_PERXX-RQDAT = L_DATE.
    APPEND IT_PERXX.
    ENDIF.
    PERFORM GET_TITLE USING L_TEXT.
    CONDENSE L_TEXT.
    WRITE L_TEXT TO lv_date.
    PERFORM GET_WEEK USING lv_date lv_week.
          l_date = lv_date.
    *      CONCATENATE L_TEXT+0(4) L_TEXT+6(2) INTO L_PERXX.
    *      PERFORM GET_FIRST_OF_WEEK USING L_PERXX
    *                                L_DATE.
    if   IT_FCDATA-ADCOL > 0.
        IT_PERXX-MATNR = IT_FCDATA-MATNR.
         IT_PERXX-PLNMG = IT_FCDATA-ADCOL.
         IT_PERXX-PERXX = Lv_week.
         IT_PERXX-RQDAT = L_DATE.
    APPEND IT_PERXX.
    ENDIF.
    PERFORM GET_TITLE USING L_TEXT.
    CONDENSE L_TEXT.
    WRITE L_TEXT TO lv_date.
    PERFORM GET_WEEK USING lv_date lv_week.
          l_date = lv_date.
    *      CONCATENATE L_TEXT+0(4) L_TEXT+6(2) INTO L_PERXX.
    *      PERFORM GET_FIRST_OF_WEEK USING L_PERXX
    *                                L_DATE.
    if   IT_FCDATA-AECOL > 0.
        IT_PERXX-MATNR = IT_FCDATA-MATNR.
         IT_PERXX-PLNMG = IT_FCDATA-AECOL.
         IT_PERXX-PERXX = Lv_week.
         IT_PERXX-RQDAT = L_DATE.
    APPEND IT_PERXX.
    ENDIF.
    PERFORM GET_TITLE USING L_TEXT.
    CONDENSE L_TEXT.
    WRITE L_TEXT TO lv_date.
    PERFORM GET_WEEK USING lv_date lv_week.
          l_date = lv_date.
    *      CONCATENATE L_TEXT+0(4) L_TEXT+6(2) INTO L_PERXX.
    *      PERFORM GET_FIRST_OF_WEEK USING L_PERXX
    *                                L_DATE.
    if   IT_FCDATA-AFCOL > 0.
         IT_PERXX-MATNR = IT_FCDATA-MATNR.
         IT_PERXX-PLNMG = IT_FCDATA-AFCOL.
         IT_PERXX-PERXX = Lv_week.
         IT_PERXX-RQDAT = L_DATE.
    APPEND IT_PERXX.
    ENDIF.
    PERFORM GET_TITLE USING L_TEXT.
    CONDENSE L_TEXT.
    WRITE L_TEXT TO lv_date.
    PERFORM GET_WEEK USING lv_date lv_week.
          l_date = lv_date.
    *      CONCATENATE L_TEXT+0(4) L_TEXT+6(2) INTO L_PERXX.
    *      PERFORM GET_FIRST_OF_WEEK USING L_PERXX
    *                                L_DATE.
    if   IT_FCDATA-AHCOL > 0.
        IT_PERXX-MATNR = IT_FCDATA-MATNR.
         IT_PERXX-PLNMG = IT_FCDATA-AHCOL.
         IT_PERXX-PERXX = LV_WEEK.
         IT_PERXX-RQDAT = L_DATE.
    APPEND IT_PERXX.
    ENDIF.
    PERFORM GET_TITLE USING L_TEXT.
    CONDENSE L_TEXT.
    *      CONCATENATE L_TEXT+0(4) L_TEXT+6(2) INTO L_PERXX.
    *      PERFORM GET_FIRST_OF_WEEK USING L_PERXX
    *                                L_DATE.
    if   IT_FCDATA-AICOL > 0.
        IT_PERXX-MATNR = IT_FCDATA-MATNR.
         IT_PERXX-PLNMG = IT_FCDATA-AICOL.
         IT_PERXX-PERXX = Lv_week.
         IT_PERXX-RQDAT = L_DATE.
    APPEND IT_PERXX.
    ENDIF.
    PERFORM GET_TITLE USING L_TEXT.
    CONDENSE L_TEXT.
    *      CONCATENATE L_TEXT+0(4) L_TEXT+6(2) INTO L_PERXX.
    *      PERFORM GET_FIRST_OF_WEEK USING L_PERXX
    *                                L_DATE.
    if   IT_FCDATA-AJCOL > 0.
        IT_PERXX-MATNR = IT_FCDATA-MATNR.
         IT_PERXX-PLNMG = IT_FCDATA-AJCOL.
         IT_PERXX-PERXX = Lv_week.
         IT_PERXX-RQDAT = L_DATE.
    APPEND IT_PERXX.
    ENDIF.
    PERFORM GET_TITLE USING L_TEXT.
    CONDENSE L_TEXT.
    WRITE L_TEXT TO lv_date.
    PERFORM GET_WEEK USING lv_date lv_week.
          l_date = lv_date.
    *      CONCATENATE L_TEXT+0(4) L_TEXT+6(2) INTO L_PERXX
    *      PERFORM GET_FIRST_OF_WEEK USING L_PERXX
    *                                L_DATE.
    if   IT_FCDATA-AKCOL > 0.
        IT_PERXX-MATNR = IT_FCDATA-MATNR.
         IT_PERXX-PLNMG = IT_FCDATA-AKCOL.
         IT_PERXX-PERXX = Lv_week.
         IT_PERXX-RQDAT = L_DATE.
    APPEND IT_PERXX.
    ENDIF.
    PERFORM GET_TITLE USING L_TEXT.
    CONDENSE L_TEXT.
    *      CONCATENATE L_TEXT+0(4) L_TEXT+6(2) INTO L_PERXX.
    *      PERFORM GET_FIRST_OF_WEEK USING L_PERXX
    *                                L_DATE.
    if   IT_FCDATA-ALCOL > 0.
        IT_PERXX-MATNR = IT_FCDATA-MATNR.
         IT_PERXX-PLNMG = IT_FCDATA-ALCOL.
         IT_PERXX-PERXX = Lv_week.
         IT_PERXX-RQDAT = L_DATE.
    APPEND IT_PERXX.
    ENDIF.
    ENDLOOP.
    ENDFORM.
    FORM DELETE_CM.
    DATA: L_INDEX LIKE SY-TABIX.
    Loop at it_upload.
           l_Index = sy-tabix.
    PERFORM delete_LEADING_CM using it_upload-CPN.
    PERFORM delete_LEADING_CM using it_upload-MCOL.
    TRANSLATE IT_UPLOAD-MCOL TO UPPER CASE.
    modify it_upload index l_index.
    ENDLOOP.
    endform.
    FORM GET_KNMT.
    DATA: L_INDEX LIKE SY-TABIX.
    DATA: LT_CPN LIKE IT_UPLOAD OCCURS 0 WITH HEADER LINE.
    Loop at IT_UPLOAD.
        l_index = sy-tabix.
    TRANSLATE IT_UPLOAD-FUNCT TO UPPER CASE.
    MODIFY it_upload index l_index.
    ENDLOOP.
    LT_CPN[] = IT_UPLOAD[].
    DELETE LT_CPN WHERE CPN EQ '' or FUNCT NE 'SUPPLY'. "Delete none-used rows.
    DELETE ADJACENT DUPLICATES FROM LT_CPN COMPARING CPN.
    IF NOT LT_CPN[] IS INITIAL.
    SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_KNMT
    FROM KNMT
    FOR ALL ENTRIES IN LT_CPN
    WHERE KDMAT = LT_CPN-CPN.
    *  AND VKORG = '3231'.
    endif.
    ENDFORM.
    FORM add_alv_fields .
    CLEAR it_fieldcat[].
    DATA: L_TEXT(72) TYPE C.
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'ITEM'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'LGORT' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'SUPLIER' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'PLANT'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'CPN' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'MAKTX'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'FUNCT' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'GCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'HCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'ICOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'JCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'KCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'LCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
    *    append_alv_field 'LCOL'  L_TEXT '' '' '' ''.       "
    *    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'MCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'NCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'OCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'PCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'QCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'RCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'SCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'TCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'UCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'VCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'WCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'XCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'YCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'ZCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'AACOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'ABCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'ACCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'ADCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'AECOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'AFCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'AGCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'AHCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'AICOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'AJCOL' L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'AKCOL'  L_TEXT '' '' '' ''.       "
    PERFORM GET_TITLE USING  L_TEXT.
        append_alv_field 'ALCOL' L_TEXT '' '' '' ''.       "
    *    PERFORM GET_TITLE USING  L_TEXT.
    *    append_alv_field 'AMCOL'  L_TEXT '' '' '' ''.       "
    *    PERFORM GET_TITLE USING  L_TEXT.
    *    append_alv_field 'ANCOL'  L_TEXT '' '' '' ''.       "
    ENDFORM.
    FORM alv_layout .
      wa_layout-colwidth_optimize = 'X'.
    ENDFORM.                    "ALV_LAYOUT
    FORM show_alv TABLES im_table.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
          it_fieldcat        = it_fieldcat[]
          is_layout          = wa_layout
          it_sort            = it_sort[]
    TABLES
          t_outtab           =  im_table
    EXCEPTIONS
          program_error      = 1
    OTHERS             = 2.
    IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    ENDFORM.                    "show_alv
    Form LIST_FC.
    PERFORM GET_FIELD_LIST.
    PERFORM add_alv_fields.
    PERFORM alv_layout.
    PERFORM SHOW_ALV TABLES IT_UPLOAD.
    ENDFORM.
    FORM DATA_CHECK.
    IF "P_WERKS IS INITIAL
       P_WEEK IS INITIAL.
    MESSAGE 'Plant and week are required!' type 'S' DISPLAY LIKE 'E'.
    endif.
    ENDFORM.
    FORM get_DATA.
    CLEAR IT_UPLOAD[].
    SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_UPLOAD
    FROM ZTUSD018 CLIENT SPECIFIED
    WHERE MANDT = SY-MANDT
    *AND WERK = P_WERK
    AND WEEK = P_WEEK.
    sort IT_UPLOAD BY ITEM.
    ENDFORM.
    FORM Upload_2ZTABLE.
    data: l_row type I.
    call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
          filename                = p_infile
          i_begin_col             = '1'
          i_begin_row             = '3' "Do not require
    *headings
          i_end_col               = '38'
          i_end_row               = '5000'
    TABLES
          intern                  = it_file
    EXCEPTIONS
          inconsistent_parameters = 1
          upload_ole              = 2
    others                  = 3.
    if sy-subrc <> 0.
    message e010(zz) with text-001. "Problem uploading
    *Excel Spreadsheet
    endif.
    *perform open_group.
    "Delete non-used Rows and clear text field value in numeric cell areas.
    Loop at it_file WHERE value ne '' and value ne '0'.
    CONDENSE it_file-value.
    modify it_file.
    ENDLOOP.
    Loop at it_file where value+0(4) EQ 'Data'.
      L_ROW = it_file-row.
    delete it_file where row eq l_row.
    ENDLOOP.
    loop at it_file where VALUE EQ 'No Supply Allowed'.
    clear it_file-value.
    modify it_file index sy-tabix.
    ENDLOOP.
    "End of processing
    sort it_file by row col.
    * Get first row retrieved
    read table it_file index 1.
    * Set first row retrieved to current row
      gd_currentrow = it_file-row.
    loop at it_file.
    * Reset values for next row
    if it_file-row ne gd_currentrow.
    append it_upload .
    clear it_upload.
          gd_currentrow = it_file-row.
    endif.
    SHIFT it_file-VALUE LEFT DELETING LEADING SPACE.
    *    PERFORM delete_LEADING_CM using it_file-VALUE. "Delete leading CM.
    case it_file-col.
    when '0001'.
            it_upload-LGORT = it_file-value. "Plant codes
    when '0002'.
            it_upload-SUPLIER = it_file-value.
    when '0003'.
            it_upload-PLANT = it_file-value.
    when '0004'.
            it_upload-CPN = it_file-value.
    when '0005'.
            it_upload-MAKTX = it_file-value.
    when '0006'.
            it_upload-FUNCT =  it_file-value.
    when '0007'.
            it_upload-GCOL = it_file-value.
    when '0008'.
            it_upload-HCOL = it_file-value.
    when '0009'.
            it_upload-ICOL = it_file-value.
    when '0010'.
            it_upload-JCOL = it_file-value.
    when '0011'.
           it_upload-KCOL  = it_file-value.
    when '0012'.
           it_upload-LCOL = it_file-value.
    when '0013'.
          it_upload-MCOL = it_file-value.
    when '0014'.
            it_upload-NCOL = it_file-value.
    when '0015'.
            it_upload-OCOL = it_file-value.
    when '0016'.
            it_upload-PCOL = it_file-value.
    when '0017'.
            it_upload-QCOL = it_file-value.
    when '0018'.
            it_upload-RCOL = it_file-value.
    when '0019'.
            it_upload-SCOL =  it_file-value.
    when '0020'.
            it_upload-TCOL = it_file-value.
    when '0021'.
            it_upload-UCOL = it_file-value.
    when '0022'.
            it_upload-VCOL = it_file-value.
    when '0023'.
            it_upload-WCOL = it_file-value.
    when '0024'.
            it_upload-XCOL = it_file-value.
    when '0025'.
            it_upload-YCOL = it_file-value.
    when '0026'.
            it_upload-ZCOL = it_file-value.
    when '0027'.
           it_upload-AACOL = it_file-value.
    when '0028'.
          it_upload-ABCOL = it_file-value.
    when '0029'.
            it_upload-ACCOL = it_file-value.
    when '0030'.
            it_upload-ADCOL = it_file-value.
    when '0031'.
            it_upload-AECOL = it_file-value.
    when '0032'.
            it_upload-AFCOL = it_file-value.
    when '0033'.
            it_upload-AGCOL = it_file-value.
    when '0034'.
            it_upload-AHCOL =  it_file-value.
    when '0035'.
            it_upload-AICOL = it_file-value.
    when '0036'.
            it_upload-AJCOL = it_file-value.
    when '0037'.
            it_upload-AKCOL = it_file-value.
    when '0038'.
            it_upload-ALCOL = it_file-value.
    *      when '0039'.
    *        it_upload-AMCOL = it_file-value.
    endcase.
        it_upload-mandt = sy-mandt.
        it_upload-week  = G_WEEK.
        it_upload-AENME = SY-UNAME.
        it_upload-AEDAT = SY-DATUM.
    endloop.
    append it_upload.
    clear it_upload.
    clear l_row.
      l_row = 1.
    Loop at it_upload.
              it_upload-item = l_row.
    modify it_upload.
              l_row = l_row + 1.
    ENDLOOP.
    sort it_upload by Item.
    *
    Delete FROM ZTUSD018 CLIENT SPECIFIED WHERE MANDT = SY-MANDT
    AND WEEK = G_WEEK.
    IF SY-SUBRC EQ 0.
    COMMIT WORK.
    ENDIF.
    INSERT ZTUSD018 FROM TABLE IT_UPLOAD.
    IF SY-SUBRC EQ 0.
    COMMIT WORK.
    MESSAGE 'FC data has been uploaded to database successfully' type 'S'.
    ELSE.
    MESSAGE 'FC data uploaded faild' type 'S' DISPLAY LIKE 'E'.
    stop.
    ENDIF.
    ENDFORM.
    **&---------------------------------------------------------------------
    **
    **&      Form  value_help
    **&---------------------------------------------------------------------
    **
    **       text
    **----------------------------------------------------------------------
    **
    **  -->  p1        text
    **  <--  p2        text
    **----------------------------------------------------------------------
    **
    FORM value_help .
    CALL FUNCTION 'DSVAS_DOC_WS_FILENAME_GET_50'
    EXPORTING
          DEF_FILENAME     = ' '
          DEF_PATH         = ' '
    MASK             = ',*.*,*.*.'
    MODE             = 'O'
    TITLE            = ' '
    IMPORTING
          FILENAME         = p_infile
    EXCEPTIONS
          INV_WINSYS       = 1
          NO_BATCH         = 2
          SELECTION_CANCEL = 3
          SELECTION_ERROR  = 4
    OTHERS           = 5.
    IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    endform.                    "value_help
    FORM upload_Field_List.
    "Get first row field List( column 1 to column 6)
    call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
          filename                = p_infile
          i_begin_col             = '1'
          i_begin_row             = '1' "Do not require
    *headings
          i_end_col               = '6'
          i_end_row               = '1'
    TABLES
          intern                  = it_file
    EXCEPTIONS
          inconsistent_parameters = 1
          upload_ole              = 2
    others                  = 3.
    if sy-subrc <> 0.
    message e010(zz) with text-001. "Problem uploading
    *Excel Spreadsheet
    endif.
    *  sort it_file by row col.
    *READ TABLE it_file INDEX 1.
    *  IF SY-SUBRC EQ 0.
    *    TRANSLATE it_file-value to UPPER CASE.
    *    IF IT_FILE-VALUE NE 'ITEM'.
    *    MESSAGE 'Invalid EXCEL Format, Please select a vaild excel file' type 'S' DISPLAY LIKE 'E'.
    *    stop.
    *    endif.
    *  endif.
    Loop at it_file.
    MOVE-CORRESPONDING it_file to it_field_list.
    PERFORM DELETE_LEADING_CM USING it_file-value.
        it_field_list-value = it_file-value.
        it_field_list-mandt = sy-mandt.
        it_field_list-week  = G_WEEK.
        it_field_list-spras = sy-langu.
    append it_field_list.
    ENDLOOP.
    clear it_file[].
    "Get second row field List( column 7 to column 32)
    call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
          filename                = p_infile
          i_begin_col             = '7'
          i_begin_row             = '2' "Do not require
    *headings
          i_end_col               = '38'
          i_end_row               = '2'
    TABLES
          intern                  = it_file
    EXCEPTIONS
          inconsistent_parameters = 1
          upload_ole              = 2
    others                  = 3.
    if sy-subrc <> 0.
    message e010(zz) with text-001. "Problem uploading
    *Excel Spreadsheet
    endif.
    *  sort it_file by row col.
    *READ TABLE it_file INDEX 1.
    *  IF SY-SUBRC EQ 0.
    *    TRANSLATE it_file-value to UPPER CASE.
    *    IF IT_FILE-VALUE NE 'ITEM'.
    *    MESSAGE 'Invalid EXCEL Format, Please select a vaild excel file' type 'S' DISPLAY LIKE 'E'.
    *    stop.
    *    endif.
    *  endif.
    Loop at it_file.
    MOVE-CORRESPONDING it_file to it_field_list.
    PERFORM DELETE_LEADING_CM USING it_file-value.
        it_field_list-col   = it_file-col + 6. "Because start from 6 column
        it_field_list-value = it_file-value.
        it_field_list-mandt = sy-mandt.
        it_field_list-week  = G_WEEK.
        it_field_list-spras = sy-langu.
    append it_field_list.
    ENDLOOP.
    "Save field List to database.
    IF NOT IT_FIELD_LIST[] IS INITIAL.
    DELETE ADJACENT DUPLICATES FROM IT_FIELD_LIST COMPARING MANDT WEEK COL.
    DELETE FROM ZTUSD018_FD CLIENT SPECIFIED WHERE mandt = sy-mandt and WEEK = G_WEEK .
    *                            AND SPRAS =  SY-LANGU.
    IF SY-SUBRC EQ 0.
    COMMIT WORK.
    ENDIF.
    INSERT ZTUSD018_FD FROM TABLE it_field_list .
    if sy-subrc eq 0.
    commit work.
    endif.
    endif.
    ENDFORM.
    FORM GET_WEEK USING V_DATE V_WEEK.
    DATA: L_WEEK LIKE SCAL-WEEK.
    DATA: L_DATE LIKE SCAL-DATE.
    L_DATE = V_DATE.
    CALL FUNCTION 'HRIQ_DATE_GET_WEEK'
    EXPORTING
    DATE = L_DATE
    IMPORTING
                WEEK = L_WEEK
    .
      V_WEEK = L_WEEK.
    ENDFORM.
    "Get ALV Title from table.
    FORM GET_TITLE USING L_TEXT.
    read table it_field_list with key week = g_week
                                          col = G_col.
    *                                      SPRAS = SY-LANGU.
    IF SY-SUBRC EQ 0.
              l_text = it_field_list-value.
    endif.
    ADD 1 TO G_COL.
    ENDFORM.
    FORM GET_FIELD_LIST.
    select * into CORRESPONDING FIELDS OF TABLE it_field_list
    from  ztusd018_fd CLIENT SPECIFIED
    where MANDT = SY-MANDT
    AND   week = g_week.
    *  and spras = sy-langu.
    if sy-subrc NE 0.
    Message 'Field List not found, Please upload first!' type 'S' DISPLAY LIKE 'E'.
    stop.
    endif.
    ENDFORM.
    FORM DELETE_LEADING_CM using " Delete leading inverted comma                        .
                           v_str.
    DATA: L,P type I.
    DATA: v_src_str type char50,
          v_des_str type char50.
    DATA: v_char type c.
    v_char = TEXT-C01.
    v_src_str = v_str.
    CONDENSE v_src_str.
    if v_src_str+0(1) = v_char.
    REPLACE v_char with '' into v_src_str.
    CONDENSE v_src_str.
    endif.
      v_str = v_src_str.
    ENDFORM.
    "Get the first date of a week.
    FORM GET_FIRST_OF_WEEK USING V_WEEK
                                 V_DATE.
    DATA: l_week like SCAL-WEEK.
    DATA: l_date like SCAL-date.
    L_WEEK = V_WEEK.
    CALL FUNCTION 'HRIQ_WEEK_GET_FIRST_DAY'
    EXPORTING
        week               = l_week
    IMPORTING
    DATE               = l_date
    EXCEPTIONS
       WEEK_INVALID       = 1
    OTHERS             = 2
              .
    IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    V_DATE = L_DATE.
    ENDFORM.
    FORM GET_BDZEI USING V_EX_BDZEI. "Get Independent requirements pointer
    DATA: l_BDZEI like PBED-BDZEI.
    SELECT SINGLE MAX( BDZEI ) INTO L_BDZEI
    FROM PBED.
    IF SY-SUBRC NE 0.
      L_BDZEI = 0.
    endif.
    v_ex_bdzei = l_bdzei.
    endform.