SAP BAPI 创建/修改MD61/MD62计划独立需求预测

MD61 创建:

BAPI: BAPI_REQUIREMENTS_CREATE

CLEAR: lv_error,ls_requirements_item,lt_requirements_schedule_in,ls_requirements_schedule_in,lt_return_n,ls_return_n,lv_reqmtsplannumber."工厂ls_requirements_item-plant      = lv_werks."MRP AREA
*            ls_requirements_item-mrp_area   = lv_berid."
*            ls_requirements_item-req_number   = gs_data-pbdnr."激活ls_requirements_item-vers_activ = 'X'."版本ASSIGN COMPONENT 'VERSB' OF STRUCTURE <fs_wa> TO <fs_val>.ls_requirements_item-version    = <fs_val>."Materialls_requirements_item-material    = lv_matnr.CLEAR: lv_index.LOOP AT gt_excel INTO gs_excel.lv_index = lv_index + 1.CLEAR: lv_index_c, lv_fname, lv_qty.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_qty.lv_qty = <fs_val>.IF lv_qty IS INITIAL. "如果数量为0,则不需要添加到销售订单的行项目上去CONTINUE.ENDIF."日期CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCRQ' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_week, lv_date_n.lv_week = <fs_val>.
*               转成内部日期CALL FUNCTION 'WEEK_GET_FIRST_DAY'EXPORTINGweek         = lv_weekIMPORTINGdate         = lv_date_nEXCEPTIONSweek_invalid = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ls_requirements_schedule_in-req_date = lv_date_n."计划周期ls_requirements_schedule_in-date_type = '2'."数量ls_requirements_schedule_in-req_qty = lv_qty.APPEND ls_requirements_schedule_in TO lt_requirements_schedule_in.CLEAR: ls_requirements_schedule_in.ENDLOOP.CALL FUNCTION 'BAPI_REQUIREMENTS_CREATE'EXPORTINGrequirements_item        = ls_requirements_item
*               REQUIREMENT_PARAM        =
*               DO_COMMIT                = 'X'
*               UPDATE_MODE              = 'X'
*               REFER_TYPE               = ' '
*               PROFILID                 = ' 'IMPORTING
*               MATERIAL                 =
*               PLANT                    =
*               REQUIREMENTSTYPE         =
*               VERSION                  =reqmtsplannumber         = lv_reqmtsplannumber
*               MRP_AREA                 =
*               MATERIAL_EVG             =
*               REQ_PLAN_ID_EXT          =
*               REQ_SEGMENT              =
*               MATERIAL_LONG            =
*               REQ_SEG_LONG             =TABLESrequirements_schedule_in = lt_requirements_schedule_in
*               REQUIREMENTS_CHAR_IN     =return                   = lt_return_n.

MD62 修改:

BAPI: BAPI_REQUIREMENTS_CHANGE

*         修改计划独立需求IF sy-subrc = 0."修改计划独立需求CLEAR: lv_error,lt_requirements_schedule_in,ls_requirements_schedule_in,lt_return_n,ls_return_n,lv_material."版本ASSIGN COMPONENT 'VERSB' OF STRUCTURE <fs_wa> TO <fs_val>.lv_versb = <fs_val>.CLEAR: lv_index.LOOP AT gt_excel INTO gs_excel.lv_index = lv_index + 1.CLEAR: lv_index_c, lv_fname, lv_qty.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_qty.lv_qty = <fs_val>.IF lv_qty IS INITIAL. "如果数量为0,则不需要添加到销售订单的行项目上去CONTINUE.ENDIF."日期CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCRQ' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_week, lv_date_n.lv_week = <fs_val>.
*               转成内部日期CALL FUNCTION 'WEEK_GET_FIRST_DAY'EXPORTINGweek         = lv_weekIMPORTINGdate         = lv_date_nEXCEPTIONSweek_invalid = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ls_requirements_schedule_in-req_date = lv_date_n."计划周期ls_requirements_schedule_in-date_type = '2'."数量ls_requirements_schedule_in-req_qty = lv_qty.APPEND ls_requirements_schedule_in TO lt_requirements_schedule_in.CLEAR: ls_requirements_schedule_in.ENDLOOP.lv_material = lv_matnr.CLEAR: lv_requirementstype.SELECT SINGLE bedae INTO lv_requirementstypeFROM pbimWHERE matnr = lv_matnrAND werks = lv_werksAND versb = lv_versb.CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'EXPORTINGmaterial                 = lv_materialplant                    = lv_werksrequirementstype         = lv_requirementstypeversion                  = lv_versbreqmtsplannumber         = ''vers_activ               = 'X'
*               REQUIREMENT_PARAM        =
*               MRP_AREA                 =
*               DO_COMMIT                = 'X'
*               UPDATE_MODE              = 'X'delete_old               = 'X'
*               NO_WITHDR                = ' '
*               MATERIAL_EVG             =
*               REQ_PLAN_ID_EXT          =
*               REQ_SEGMENT              =
*               MATERIAL_LONG            =
*               REQ_SEG_LONG             =
*             IMPORTING
*               REQUIREMENT_ITEM_OUT     =TABLESrequirements_schedule_in = lt_requirements_schedule_in
*               REQUIREMENTS_CHAR_IN     =return                   = lt_return_n.

完成代码:

*&---------------------------------------------------------------------*
*& Report ZPPE003
*&---------------------------------------------------------------------*
*&销售预测批量导入
*&---------------------------------------------------------------------*
REPORT zppe003.
*--------------------------------------------------------------------*
*变量定义
*--------------------------------------------------------------------*
TYPE-POOLS: icon.
TABLES: pbim.
TYPES: BEGIN OF gty_data,werks TYPE marc-werks,matnr TYPE marc-matnr,maktx TYPE makt-maktx,kunnr TYPE kna1-kunnr,END OF gty_Data.
DATA: dy_table       TYPE REF TO data,dy_line        TYPE REF TO data,dy_table_u     TYPE REF TO data,dy_line_u      TYPE REF TO data,gt_structure   TYPE lvc_t_fcat,gs_structure   TYPE lvc_s_fcat,gt_structure_u TYPE lvc_t_fcat,gs_structure_u TYPE lvc_s_fcat,gs_layout      TYPE lvc_s_layo.
DATA : gt_excel LIKE TABLE OF alsmex_tabline.
DATA : gs_excel  TYPE alsmex_tabline.  "excel structureDATA: gt_data TYPE TABLE OF gty_data,gs_data TYPE gty_data.DATA: gv_error TYPE c. "报错标识FIELD-SYMBOLS: <dyntab>   TYPE STANDARD TABLE,<fs_val>   TYPE any,<fs_wa>    TYPE any,<dyntab_u> TYPE STANDARD TABLE,<fs_val_u> TYPE any,<fs_wa_u>  TYPE any.*--------------------------------------------------------------------*
*选择屏幕
*--------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.PARAMETERS: p_werks TYPE pbim-werks OBLIGATORY, "工厂p_file  TYPE rlgrap-filename OBLIGATORY. "文件名SELECTION-SCREEN BEGIN OF LINE.PARAMETERS: p_r1 TYPE c RADIOBUTTON GROUP grp DEFAULT 'X'. "带客户销售预测导入SELECTION-SCREEN COMMENT (50) TEXT-002 FOR FIELD p_r1.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.PARAMETERS: p_r2 TYPE c RADIOBUTTON GROUP grp. "计划独立需求导入SELECTION-SCREEN COMMENT (50) TEXT-003 FOR FIELD p_r2.SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.INITIALIZATION.PERFORM frm_init.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.PERFORM frm_select_path."选择路径START-OF-SELECTION.PERFORM frm_upload_data."数据导入PERFORM frm_process_data. "处理数据END-OF-SELECTION.PERFORM frm_fieldcat_set.PERFORM frm_layout_set.PERFORM frm_show_alv. "处理消息输出
*&---------------------------------------------------------------------*
*& Form frm_select_path
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_select_path .CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGmask             = ',*.* ,*.*.'mode             = '0'title            = '请选择要上传的信息文件'IMPORTINGfilename         = p_fileEXCEPTIONSinv_winsys       = 1no_batch         = 2selection_cancel = 3selection_error  = 4OTHERS           = 5.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_upload_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
*&--- 导入内表
*&---EXCEL导入内表TYPES: BEGIN OF lty_week,week TYPE scal-week,END OF lty_week,BEGIN OF lty_data,row   TYPE alsmex_tabline-row,week  TYPE scal-week,col   TYPE alsmex_tabline-col,value TYPE alsmex_tabline-value,END OF lty_data.DATA : lt_excel LIKE TABLE OF alsmex_tabline.DATA : ls_excel  TYPE alsmex_tabline.  "excel structureFIELD-SYMBOLS : <field>.FIELD-SYMBOLS: <lfs_excel> TYPE alsmex_tabline.DATA: lv_date   TYPE scal-date,lv_week   TYPE scal-week,lv_date_c TYPE string,lt_week   TYPE TABLE OF lty_week,ls_week   TYPE lty_week,lt_data   TYPE TABLE OF lty_data,ls_data   TYPE lty_data,ls_data_c TYPE lty_data,ls_data_n TYPE lty_data,lt_data_n TYPE TABLE OF lty_data,lv_col    TYPE kcd_ex_col_n.CLEAR: gt_data,gs_data,lt_data,ls_data,ls_data_c,ls_data_n,lt_data_n,lv_col.CLEAR: lv_date,lv_week,lv_date_c,lt_week,ls_week.*&---读取EXCEL到内表CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGfilename                = p_filei_begin_col             = 1i_begin_row             = 1i_end_col               = 112i_end_row               = 9999TABLESintern                  = lt_excelEXCEPTIONSinconsistent_parameters = 1upload_ole              = 2OTHERS                  = 3.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*    MESSAGE 'EXCEL导入错误或文件路径错误' TYPE 'E'.ENDIF.IF p_r2 IS NOT INITIAL.
*   检查导入模板上的每一个日期所属是每年的哪一周,然后如果日期在同一周的需要进行数量汇总,放在同一周进行导入到系统
*    因为独立需求是按照周进行维护的LOOP AT lt_excel ASSIGNING <lfs_excel> WHERE row = '0001' AND col > '0004'.MOVE-CORRESPONDING <lfs_excel> TO ls_data.CLEAR: lv_date_c, lv_date, lv_week.lv_date_c = <lfs_excel>-value.CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'EXPORTINGdate_external            = lv_date_c
*         ACCEPT_INITIAL_DATE      =IMPORTINGdate_internal            = lv_dateEXCEPTIONSdate_external_is_invalid = 1OTHERS                   = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.CALL FUNCTION 'DATE_GET_WEEK' "获取日期对应的当前周EXPORTINGdate         = lv_dateIMPORTINGweek         = lv_weekEXCEPTIONSdate_invalid = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ls_data-week = lv_week.READ TABLE lt_week INTO ls_week WITH KEY week = lv_week. "如果算出的周在前面的日期中已经出现过,则打上删除标识IF sy-subrc = 0.<lfs_excel>-value = '$DELETE$'.ELSE.ls_week-week = lv_week.COLLECT ls_week INTO lt_week.CLEAR: ls_week.ENDIF.APPEND ls_data TO lt_data.CLEAR: ls_data.ENDLOOP.*   统计每一个数量对应的当前周LOOP AT lt_excel ASSIGNING <lfs_excel> WHERE row > '0001'AND col > '0004'.MOVE-CORRESPONDING <lfs_excel> TO ls_data.READ TABLE lt_data INTO ls_data_c WITH KEY row = '0001' col = <lfs_excel>-col.IF sy-subrc = 0.ls_data-week = ls_data_c-week.ENDIF.APPEND ls_data TO lt_data.CLEAR: ls_data.ENDLOOP.*   对在同一周的数量进行汇总,然后保留都同属同一周最小的那个导入日期LOOP AT lt_data INTO ls_data WHERE row > '0001'.CLEAR: ls_data_c.ls_data_c = ls_data.AT NEW week.ls_data_n = ls_data_c.CLEAR: ls_data_n-value.ENDAT.ls_data_n-value = ls_data_n-value + ls_data_c-value.AT END OF week.APPEND ls_data_n TO lt_data_n.CLEAR: ls_data_n.ENDAT.CLEAR: ls_data.ENDLOOP.*   对属于同一周的其它日期都打上删除标识LOOP AT lt_excel ASSIGNING <lfs_excel> WHERE row > '0001' AND col > '0004'.READ TABLE lt_data_n INTO ls_data_n WITH KEY row = <lfs_excel>-rowcol = <lfs_excel>-col.IF sy-subrc = 0.<lfs_excel>-value = ls_data_n-value.ELSE.<lfs_excel>-value = '$DELETE$'.ENDIF.CONDENSE <lfs_excel>-value.ENDLOOP.*   排除打上删除标识的行,这样就形成最终需要导入系统的数据DELETE lt_excel WHERE value = '$DELETE$'.*   对即将导入的数据列进行重新给值LOOP AT lt_excel ASSIGNING <lfs_excel>.CLEAR: <lfs_excel>-col.CLEAR: ls_excel.ls_excel = <lfs_excel>.AT NEW row.CLEAR: lv_col.ENDAT.lv_col = lv_col + 1.<lfs_excel>-col = lv_col.ENDLOOP.ENDIF.LOOP AT lt_excel INTO ls_excel WHERE row = '0001' AND col > '0004'. "获取Excel标题日期信息gs_excel = ls_excel.APPEND gs_excel TO gt_excel.CLEAR: gs_excel, ls_excel.ENDLOOP.PERFORM frm_create_structure TABLES lt_excel. "定义内表结构PERFORM frm_create_dynamic_table. "按照定义的内表结构,生成一个内表*  dynamic table data fillASSIGN dy_table_u->* TO <dyntab_u>.CREATE DATA dy_line_u LIKE LINE OF <dyntab_u>.ASSIGN dy_line_u->* TO <fs_wa_u>.LOOP AT lt_excel INTO ls_excel WHERE row > '0001'.IF ls_excel-col = '0001'. "工厂gs_data-werks = ls_excel-value.ENDIF.IF ls_excel-col = '0002'. "物料编码gs_data-matnr = ls_excel-value.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput        = gs_data-matnrIMPORTINGoutput       = gs_data-matnrEXCEPTIONSlength_error = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ENDIF.IF ls_excel-col = '0003'. "物料描述gs_data-maktx = ls_excel-value.ENDIF.IF ls_excel-col = '0004'. "客户编码gs_data-kunnr = ls_excel-value.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = gs_data-kunnrIMPORTINGoutput = gs_data-kunnr.ENDIF.ASSIGN COMPONENT ls_excel-col OF STRUCTURE <fs_wa_u> TO <fs_val_u>.<fs_val_u> = ls_excel-value.AT END OF row.IF gs_data-werks <> p_werks.CONTINUE.ENDIF.APPEND <fs_wa_u> TO <dyntab_u>.CLEAR : <fs_wa_u>.COLLECT gs_data INTO gt_data. "获取导入数据的前四列信息CLEAR: gs_data.ENDAT.CLEAR : ls_excel.ENDLOOP.
*
*  SORT gt_data.
*  DELETE ADJACENT DUPLICATES FROM gt_data COMPARING ALL FIELDS.FREE : lt_excel.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_process_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_process_data .DATA: lv_index   TYPE i,lv_index_c TYPE string,lv_fname   TYPE string,lt_marc    TYPE TABLE OF marc,ls_marc    TYPE marc,lv_matnr   TYPE marc-matnr,lv_werks   TYPE marc-werks,lv_kunnr   TYPE kna1-kunnr,lt_data    TYPE TABLE OF gty_data,ls_Data    TYPE gty_Data,lt_ppt003  TYPE TABLE OF zppt_003,ls_ppt003  TYPE zppt_003,lv_qty     TYPE vbep-wmeng,lv_qty_b   TYPE vbep-wmeng,lv_qty_c   TYPE vbep-wmeng,lv_qty_t   TYPE vbep-wmeng,lv_qty_s   TYPE vbep-wmeng,lv_date_s  TYPE sy-datum,lv_date_e  TYPE sy-datum,lv_date_c  TYPE string,lv_date_n  TYPE sy-datum,lv_week    TYPE scal-week,lv_weeks   TYPE string.DATA: lr_auart TYPE RANGE OF vbak-auart,ls_auart LIKE LINE OF lr_auart.DATA: lt_pbim  TYPE TABLE OF pbim,ls_pbim  TYPE pbim,lv_versb TYPE versb.CLEAR: lt_pbim,ls_pbim,lv_versb.DATA: lv_meins TYPE mara-meins,lv_maktx TYPE makt-maktx.CLEAR: lv_index,lv_index_c,lv_fname,lt_marc,ls_marc,lv_matnr,lv_werks,lv_kunnr,lt_data,ls_Data,lt_ppt003,ls_ppt003,lv_qty,lv_qty_b,lv_qty_c,lv_qty_t,lv_qty_s,lv_date_s,lv_date_e,lr_auart,ls_auart,lv_date_c,lv_date_n,lv_week,gv_error,lv_meins,lv_maktx,lv_weeks.*  获取销售订单类型-汇总计算销售订单类型配置表SELECT * INTO TABLE lt_ppt003FROM zppt_003.LOOP AT lt_ppt003 INTO ls_ppt003.ls_auart-sign = 'I'.ls_auart-option = 'EQ'.ls_auart-low = ls_ppt003-auart.APPEND ls_auart TO lr_auart.CLEAR: ls_auart.ENDLOOP.* dynamic table data fillASSIGN dy_table->* TO <dyntab>.CREATE DATA dy_line LIKE LINE OF <dyntab>.ASSIGN dy_line->* TO <fs_wa>.LOOP AT <dyntab_u> ASSIGNING <fs_wa_u>.CLEAR: lv_index.MOVE-CORRESPONDING <fs_wa_u> TO <fs_wa>.LOOP AT gt_excel INTO gs_excel.CLEAR: lv_index_c, lv_fname.lv_index = lv_index + 1.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCRQ' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = gs_excel-value.ENDLOOP.APPEND <fs_wa> TO <dyntab>.CLEAR: <fs_wa>, <fs_wa_u>.ENDLOOP.IF p_r1 IS NOT INITIAL. "销售预测CLEAR: lt_data.IF gt_data IS NOT INITIAL.SELECT * INTO TABLE lt_marcFROM marcFOR ALL ENTRIES IN gt_dataWHERE matnr = gt_data-matnrAND werks = gt_data-werks.LOOP AT <dyntab> ASSIGNING <fs_wa>.CLEAR: lv_matnr,lv_werks,lv_kunnr.ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_wa> TO <fs_val>.lv_matnr = <fs_val>.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput        = lv_matnrIMPORTINGoutput       = lv_matnrEXCEPTIONSlength_error = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.*       获取物料单位SELECT SINGLE meins INTO lv_meinsFROM maraWHERE matnr = lv_matnr.ASSIGN COMPONENT 'MEINS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = lv_meins.*       获取物料描述SELECT SINGLE maktx INTO lv_maktxFROM maktWHERE spras = sy-languAND matnr = lv_matnr.ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = lv_maktx.ASSIGN COMPONENT 'WERKS' OF STRUCTURE <fs_wa> TO <fs_val>.lv_werks = <fs_val>.ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <fs_wa> TO <fs_val>.lv_kunnr = <fs_val>.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = lv_kunnrIMPORTINGoutput = lv_kunnr.*        获取物料的独立需求数据IF p_r2 = 'X'.SELECT * INTO TABLE lt_pbimFROM pbimWHERE matnr = lv_matnrAND werks = lv_werks.SORT lt_pbim.ENDIF.ASSIGN COMPONENT 'AUART' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'ZPLN'.
****************************************************************************************************
*    检查导入数据
*****************************************************************************************************       按照工厂+物料编码+客户编码,检查导入模板内数据,若有重复项,则重复行校验结果显示E,
*      消息文本显示:导入模板中含重复项,请检查!(The The import template contains duplicate items, please check!)READ TABLE lt_data INTO ls_data WITH KEY matnr = lv_matnrwerks = lv_werkskunnr = lv_kunnr.IF sy-subrc = 0.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@0A@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'E'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.IF sy-langu = '1'.<fs_val> = '导入模板中含重复项,请检查!'.ELSEIF sy-langu = 'E'.<fs_val> = 'The The import template contains duplicate items, please check!'.ENDIF.gv_error = 'X'.RETURN.ELSE.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@08@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'S'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.IF sy-langu = '1'.<fs_val> = '检验成功'.ELSEIF sy-langu = 'E'.<fs_val> = 'Validation is OK'.ENDIF.ls_data-matnr = lv_matnr.ls_data-werks = lv_werks.ls_data-kunnr = lv_kunnr.COLLECT ls_data INTO lt_data.CLEAR: ls_Data.ENDIF.*     校验导入行项目中:工厂+物料编码在MARC表是否存在数据
*      ,若不存在则校验结果显示E,消息文本显示:物料编码在工厂下不存在,请检查数据!
*      (The material code does not exist in the plant, please check the data!)READ TABLE lt_marc INTO ls_marc WITH KEY matnr = lv_matnrwerks = lv_werks.IF sy-subrc = 0.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@08@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'S'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.IF sy-langu = '1'.<fs_val> = '检验成功'.ELSEIF sy-langu = 'E'.<fs_val> = 'Validation is OK'.ENDIF.ELSE.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@0A@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'E'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.IF sy-langu = '1'.<fs_val> = '物料编码在工厂下不存在,请检查数据!'.ELSEIF sy-langu = 'E'.<fs_val> = 'The material code does not exist in the plant, please check the data!'.ENDIF.gv_error = 'X'.RETURN.ENDIF.****************************************************************************************************
*       填入数据
****************************************************************************************************IF lt_ppt003 IS NOT INITIAL.CLEAR: lv_index.LOOP AT gt_excel INTO gs_excel.lv_index = lv_index + 1.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCRQ' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_date_c, lv_date_n.lv_date_c = <fs_val>.
*           转成内部日期CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'EXPORTINGdate_external            = lv_date_c
*               ACCEPT_INITIAL_DATE      =IMPORTINGdate_internal            = lv_date_nEXCEPTIONSdate_external_is_invalid = 1OTHERS                   = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.CLEAR: lv_qty,lv_date_s,lv_date_e.*           获取当前日期周周一周日的日期CALL FUNCTION 'GET_WEEK_INFO_BASED_ON_DATE'EXPORTINGdate   = lv_date_nIMPORTINGweek   = lv_weekmonday = lv_date_ssunday = lv_date_e.*           当期销售订单数量:VBAP表中,以工厂+物料+售达方(=客户编码)+订单类型(VBAK-AUART)=销售订单类型配置表中的范围,
*           取订销售订单号+行号;VBEP表中,以销售订单号+行号,取交货日期(VBEP-EDATU)+订单数量(VBEP-WMENG),将预测日期所在周的交货日期的订单数量进行汇总;SELECT SUM( vbep~wmeng )INTO lv_qtyFROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbelnINNER JOIN vbep ON vbap~vbeln = vbep~vbelnAND vbap~posnr = vbep~posnrWHERE vbak~kunnr = lv_kunnrAND vbap~matnr = lv_matnrAND vbap~werks = lv_werksAND vbak~auart IN lr_auartAND vbep~edatu >= lv_date_sAND vbep~edatu <= lv_date_e.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'DQSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = lv_qty.*           预测导入数量CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCZL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.lv_qty_t = <fs_val>. "预测总量lv_qty_s = lv_qty_t - lv_qty.IF lv_qty_s < 0.lv_qty_s = 0.ENDIF.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = lv_qty_s. "预测导入数量ENDLOOP.ENDIF.ENDLOOP.ENDIF.ELSE. "独立需求预测数据CLEAR: lt_data.IF gt_data IS NOT INITIAL.SELECT * INTO TABLE lt_marcFROM marcFOR ALL ENTRIES IN gt_dataWHERE matnr = gt_data-matnrAND werks = gt_data-werks.LOOP AT <dyntab> ASSIGNING <fs_wa>.CLEAR: lv_matnr,lv_werks,lv_kunnr.ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_wa> TO <fs_val>.lv_matnr = <fs_val>.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput        = lv_matnrIMPORTINGoutput       = lv_matnrEXCEPTIONSlength_error = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.*       获取物料单位SELECT SINGLE meins INTO lv_meinsFROM maraWHERE matnr = lv_matnr.ASSIGN COMPONENT 'MEINS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = lv_meins.*       获取物料描述SELECT SINGLE maktx INTO lv_maktxFROM maktWHERE spras = sy-languAND matnr = lv_matnr.ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = lv_maktx.ASSIGN COMPONENT 'WERKS' OF STRUCTURE <fs_wa> TO <fs_val>.lv_werks = <fs_val>.ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <fs_wa> TO <fs_val>.lv_kunnr = <fs_val>.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = lv_kunnrIMPORTINGoutput = lv_kunnr.*        获取物料的独立需求数据IF p_r2 = 'X'.SELECT * INTO TABLE lt_pbimFROM pbimWHERE matnr = lv_matnrAND werks = lv_werks.SORT lt_pbim BY versb DESCENDING.CLEAR: lv_versb.ASSIGN COMPONENT 'VERSB' OF STRUCTURE <fs_wa> TO <fs_val>. "版本号READ TABLE lt_pbim INTO ls_pbim WITH KEY matnr = lv_matnrwerks = lv_werkszkunnr = lv_kunnr..IF sy-subrc = 0. "如果读到对应的版本号,按照现有的版本号处理lv_versb = ls_pbim-versb.
*            lv_versb = lv_versb + 1.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = lv_versbIMPORTINGoutput = lv_versb.CONDENSE lv_versb.<fs_val> = lv_versb.ELSE.CLEAR: lv_versb.READ TABLE lt_pbim INTO ls_pbim INDEX 1. "检查是否创建过计划独立需求IF sy-subrc = 0. "读取现有的最大版本号,然后在此版本号上继续流水+1lv_versb = ls_pbim-versb.lv_versb = lv_versb + 1.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = lv_versbIMPORTINGoutput = lv_versb.CONDENSE lv_versb.<fs_val> = lv_versb.ELSE.<fs_val> = '00'. "如果没有创建,默认为00ENDIF.ENDIF.ENDIF.IF p_r1 = 'X'.ASSIGN COMPONENT 'AUART' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'ZPLN'.ENDIF.****************************************************************************************************
*    检查导入数据
*****************************************************************************************************       按照工厂+物料编码+客户编码,检查导入模板内数据,若有重复项,则重复行校验结果显示E,
*      消息文本显示:导入模板中含重复项,请检查!(The The import template contains duplicate items, please check!)READ TABLE lt_data INTO ls_data WITH KEY matnr = lv_matnrwerks = lv_werkskunnr = lv_kunnr.IF sy-subrc = 0.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@0A@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'E'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.IF sy-langu = '1'.<fs_val> = '导入模板中含重复项,请检查!'.ELSEIF sy-langu = 'E'.<fs_val> = 'The The import template contains duplicate items, please check!'.ENDIF.gv_error = 'X'.RETURN.ELSE.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@08@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'S'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.IF sy-langu = '1'.<fs_val> = '检验成功'.ELSEIF sy-langu = 'E'.<fs_val> = 'Validation is OK'.ENDIF.ls_data-matnr = lv_matnr.ls_data-werks = lv_werks.ls_data-kunnr = lv_kunnr.COLLECT ls_data INTO lt_data.CLEAR: ls_data.ENDIF.*     校验导入行项目中:工厂+物料编码在MARC表是否存在数据
*      ,若不存在则校验结果显示E,消息文本显示:物料编码在工厂下不存在,请检查数据!
*      (The material code does not exist in the plant, please check the data!)READ TABLE lt_marc INTO ls_marc WITH KEY matnr = lv_matnrwerks = lv_werks.IF sy-subrc = 0.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@08@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'S'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.IF sy-langu = '1'.<fs_val> = '检验成功'.ELSEIF sy-langu = 'E'.<fs_val> = 'Validation is OK'.ENDIF.ELSE.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@0A@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'E'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.IF sy-langu = '1'.<fs_val> = '物料编码在工厂下不存在,请检查数据!'.ELSEIF sy-langu = 'E'.<fs_val> = 'The material code does not exist in the plant, please check the data!'.ENDIF.gv_error = 'X'.RETURN.ENDIF.****************************************************************************************************
*       填入数据
****************************************************************************************************IF lt_ppt003 IS NOT INITIAL.CLEAR: lv_index.LOOP AT gt_excel INTO gs_excel.lv_index = lv_index + 1.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCRQ' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_date_c, lv_date_n.lv_date_c = <fs_val>.
*           转成内部日期CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'EXPORTINGdate_external            = lv_date_c
*               ACCEPT_INITIAL_DATE      =IMPORTINGdate_internal            = lv_date_nEXCEPTIONSdate_external_is_invalid = 1OTHERS                   = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.CLEAR: lv_qty,lv_date_s,lv_date_e.*           获取当前日期周周一周日的日期CALL FUNCTION 'GET_WEEK_INFO_BASED_ON_DATE'EXPORTINGdate   = lv_date_nIMPORTINGweek   = lv_weekmonday = lv_date_ssunday = lv_date_e.CLEAR: lv_weeks.CONCATENATE lv_week+0(4) '.' lv_week+4(2) INTO lv_weeks.CONDENSE lv_weeks.<fs_val> = lv_weeks.IF lv_kunnr IS NOT INITIAL.
*             VBAP表中,以工厂+物料+客户编码(若模板上为空,则不限制客户编码),取订销售订单号+行号且VBAP-ABGRU=“空”;
*             VBEP表中,以销售订单号+行号,取交货日期(VBEP-EDATU)+订单数量(VBEP-WMENG),将交货日期在对应周的订单数量进行汇总SELECT SUM( vbep~wmeng )INTO lv_qtyFROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbelnINNER JOIN vbep ON vbap~vbeln = vbep~vbelnAND vbap~posnr = vbep~posnrWHERE vbak~kunnr = lv_kunnrAND vbap~matnr = lv_matnrAND vbap~werks = lv_werksAND vbap~abgru = ''AND vbak~auart IN lr_auartAND vbep~edatu >= lv_date_sAND vbep~edatu <= lv_date_e."通过LIPS-VGBEL=VBAP-VBELN且VBAP-POSNR=LIPS-VGPOS且LIPS-WBSTA等于“C”取LIPS-LFIMG值SELECT SUM( lips~lfimg )INTO lv_qty_bFROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbelnINNER JOIN vbep ON vbap~vbeln = vbep~vbelnAND vbap~posnr = vbep~posnrINNER JOIN lips ON vbap~vbeln = lips~vgbelAND vbap~posnr = lips~vgposWHERE vbak~kunnr = lv_kunnrAND vbap~matnr = lv_matnrAND vbap~werks = lv_werksAND vbap~abgru = ''AND vbak~auart IN lr_auartAND vbep~edatu >= lv_date_sAND vbep~edatu <= lv_date_eAND lips~wbsta = 'C'.*             VBAP表中,以工厂+物料+客户编码(若模板上为空,则不限制客户编码),取订销售订单号+行号且VBAP-ABGRU不等于“空”;
*             通过订单号及行项目号LIPS-VGBEL=VBAP-VBELN且VBAP-POSNR=LIPS-VGPOS且LIPS-WBSTA不等于“C”取LIPS-LFIMG值SELECT SUM( lips~lfimg )INTO lv_qty_cFROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbelnINNER JOIN vbep ON vbap~vbeln = vbep~vbelnAND vbap~posnr = vbep~posnrINNER JOIN lips ON vbap~vbeln = lips~vgbelAND vbap~posnr = lips~vgposWHERE vbak~kunnr = lv_kunnrAND vbap~matnr = lv_matnrAND vbap~werks = lv_werksAND vbap~abgru <> ''AND vbak~auart IN lr_auartAND vbep~edatu >= lv_date_sAND vbep~edatu <= lv_date_eAND lips~wbsta <> 'C'.ELSE.
*             VBAP表中,以工厂+物料+客户编码(若模板上为空,则不限制客户编码),取订销售订单号+行号且VBAP-ABGRU=“空”;
*             VBEP表中,以销售订单号+行号,取交货日期(VBEP-EDATU)+订单数量(VBEP-WMENG),将交货日期在对应周的订单数量进行汇总SELECT SUM( vbep~wmeng )INTO lv_qtyFROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbelnINNER JOIN vbep ON vbap~vbeln = vbep~vbelnAND vbap~posnr = vbep~posnrINNER JOIN lips ON vbap~vbeln = lips~vgbelAND vbap~posnr = lips~vgposWHERE vbap~matnr = lv_matnrAND vbap~werks = lv_werksAND vbap~abgru = ''AND vbak~auart IN lr_auartAND vbep~edatu >= lv_date_sAND vbep~edatu <= lv_date_eAND lips~wbsta = 'C'."通过LIPS-VGBEL=VBAP-VBELN且VBAP-POSNR=LIPS-VGPOS且LIPS-WBSTA等于“C”取LIPS-LFIMG值SELECT SUM( lips~lfimg )INTO lv_qty_bFROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbelnINNER JOIN vbep ON vbap~vbeln = vbep~vbelnAND vbap~posnr = vbep~posnrINNER JOIN lips ON vbap~vbeln = lips~vgbelAND vbap~posnr = lips~vgposWHERE vbap~matnr = lv_matnrAND vbap~werks = lv_werksAND vbap~abgru = ''AND vbak~auart IN lr_auartAND vbep~edatu >= lv_date_sAND vbep~edatu <= lv_date_eAND lips~wbsta = 'C'.*             VBAP表中,以工厂+物料+客户编码(若模板上为空,则不限制客户编码),取订销售订单号+行号且VBAP-ABGRU不等于“空”;
*             通过订单号及行项目号LIPS-VGBEL=VBAP-VBELN且VBAP-POSNR=LIPS-VGPOS且LIPS-WBSTA不等于“C”取LIPS-LFIMG值SELECT SUM( lips~lfimg )INTO lv_qty_cFROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbelnINNER JOIN vbep ON vbap~vbeln = vbep~vbelnAND vbap~posnr = vbep~posnrINNER JOIN lips ON vbap~vbeln = lips~vgbelAND vbap~posnr = lips~vgposWHERE vbak~kunnr = lv_kunnrAND vbap~matnr = lv_matnrAND vbap~werks = lv_werksAND vbap~abgru <> ''AND vbak~auart IN lr_auartAND vbep~edatu >= lv_date_sAND vbep~edatu <= lv_date_eAND lips~wbsta <> 'C'.ENDIF.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'DQSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = lv_qty - lv_qty_b + lv_qty_c.*           预测导入数量CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCZL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.lv_qty_t = <fs_val>. "预测总量lv_qty_s = lv_qty_t - lv_qty.IF lv_qty_s < 0.lv_qty_s = 0.ENDIF.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = lv_qty_s. "预测导入数量ENDLOOP.ENDIF.ENDLOOP.ENDIF.ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_fieldcat_set
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_fieldcat_set .
*********************************
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_layout_set
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_layout_set .gs_layout-zebra = 'X'.gs_layout-cwidth_opt = 'X'.gs_layout-box_fname = 'SEL'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_show_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_show_alv .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTING
*     I_INTERFACE_CHECK           = ' '
*     I_BYPASSING_BUFFER          =
*     I_BUFFER_ACTIVE             =i_callback_program          = sy-repidi_callback_pf_status_set    = 'FRM_SET_PFSTATUS'i_callback_user_command     = 'FRM_USER_COMMAND'
*     I_CALLBACK_TOP_OF_PAGE      = ' 'i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
*     I_CALLBACK_HTML_END_OF_LIST = ' '
*     I_STRUCTURE_NAME            =
*     I_BACKGROUND_ID             = ' '
*     I_GRID_TITLE                =
*     I_GRID_SETTINGS             =is_layout_lvc               = gs_layoutit_fieldcat_lvc             = gt_structure
*     IT_EXCLUDING                =
*     IT_SPECIAL_GROUPS_LVC       =
*     IT_SORT_LVC                 =
*     IT_FILTER_LVC               =
*     IT_HYPERLINK                =
*     IS_SEL_HIDE                 =
*     I_DEFAULT                   = 'X'
*     I_SAVE                      = ' '
*     IS_VARIANT                  =
*     IT_EVENTS                   =
*     IT_EVENT_EXIT               =
*     IS_PRINT_LVC                =
*     IS_REPREP_ID_LVC            =
*     I_SCREEN_START_COLUMN       = 0
*     I_SCREEN_START_LINE         = 0
*     I_SCREEN_END_COLUMN         = 0
*     I_SCREEN_END_LINE           = 0
*     I_HTML_HEIGHT_TOP           =
*     I_HTML_HEIGHT_END           =
*     IT_ALV_GRAPHICS             =
*     IT_EXCEPT_QINFO_LVC         =
*     IR_SALV_FULLSCREEN_ADAPTER  =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER     =
*     ES_EXIT_CAUSED_BY_USER      =TABLESt_outtab                    = <dyntab>EXCEPTIONSprogram_error               = 1OTHERS                      = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_init
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_init .CLEAR: dy_table,dy_line,gt_structure,gs_structure.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_create_structure
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_create_structure TABLES lt_excel STRUCTURE alsmex_tabline.DATA: ls_excel   TYPE alsmex_tabline,lv_index   TYPE i,lv_weeks   TYPE scal-week,lv_date    TYPE scal-date,lv_index_c TYPE string,lv_weeks_c TYPE string,lv_colname TYPE string,lv_fname   TYPE string.CLEAR: ls_excel,lv_index,lv_weeks,lv_date,lv_index_c,lv_weeks_c,lv_colname,lv_fname.DEFINE fcat.gs_structure-fieldname = &1.gs_structure-scrtext_l = &2.gs_structure-edit = &3.gs_structure-icon = &4.gs_structure-intlen = &5.gs_structure-outputlen = &5.APPEND gs_structure TO gt_structure.CLEAR gs_structure.END-OF-DEFINITION.DEFINE fcat_u.gs_structure_u-fieldname = &1.gs_structure_u-scrtext_l = &2.gs_structure_u-intlen = &3.APPEND gs_structure_u TO gt_structure_u.CLEAR gs_structure_u.END-OF-DEFINITION.* ALV报表结构IF sy-langu = 'E'.fcat: 'STATUS' 'Status' '' 'X' 4,'MSGTY' 'Message Type' '' '' 4,'MSGTXT' 'Message Text' '' '' 220,'ZINTYPE' 'Upload Type' '' '' 20,'ZSCODE' 'Serial Number' '' '' 20,'LAEDA' 'Import Date' '' '' 10,'AENAM' 'Import Person' '' '' 20,'ZDRBBN' 'Import version No.' '' '' 30.IF p_r1 = 'X'.fcat: 'AUART' 'Forecast Doc. Type' '' '' 10.ENDIF.fcat: 'WERKS' 'Plant' '' '' 4,'KUNNR' 'Customer No.' '' '' 20,'MATNR' 'Material No.' '' '' 40,'MAKTX' 'Material Description' '' '' 40,'MEINS' 'Unit' '' '' 5.IF p_r2 = 'X'.fcat: 'VERSB' 'Version No.' '' '' 15.ENDIF.
*    fcat:'CHK_BOX' 'Checkbox' '' '' 1.ELSEIF sy-langu = '1'.fcat:'SEL' '' '' '' 1.fcat: 'STATUS' '状态' '' 'X' 4,'MSGTY' '消息类型' '' '' 4,'MSGTXT' '消息文本' '' '' 220,'ZINTYPE' '上传类型' '' '' 20,'ZSCODE' '流水码' '' '' 20,'LAEDA' '导入日期' '' '' 10,'AENAM' '导入人员' '' '' 20,'ZDRBBN' '导入版本号' '' '' 30.IF p_r1 = 'X'. "销售预测fcat: 'AUART' '预测凭证类型' '' '' 10.ENDIF.fcat: 'WERKS' '工厂' '' '' 4,'KUNNR' '客户编码' '' '' 20,'MATNR' '物料编码' '' '' 40,'MAKTX' '物料描述' '' '' 40,'MEINS' '单位' '' '' 5.IF p_r2 = 'X'.fcat: 'VERSB' '版本号' '' '' 15.ENDIF.ENDIF.LOOP AT lt_excel INTO ls_excel WHERE row = '0001'AND col > '0004'.*   预测日期/需求日期CLEAR: lv_fname.lv_index = lv_index + 1.CLEAR: lv_index_c.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCRQ' lv_index_c INTO lv_fname.CONDENSE lv_fname.CLEAR: lv_colname.IF p_r1 IS NOT INITIAL.IF sy-langu = '1'.lv_colname = '预测日期'.ELSEIF sy-langu = 'E'.lv_colname = 'Forecast Date'.ENDIF.ELSE.IF sy-langu = '1'.lv_colname = '需求日期'.ELSEIF sy-langu = 'E'.lv_colname = 'Requirement Date'.ENDIF.ENDIF.CONDENSE lv_colname.fcat: lv_fname lv_colname '' '' 20.*    CLEAR: lv_date, lv_weeks.
*    lv_date = ls_excel-value.
*    CALL FUNCTION 'DATE_GET_WEEK'
*      EXPORTING
*        date         = lv_date
*      IMPORTING
*        week         = lv_weeks
*      EXCEPTIONS
*        date_invalid = 1
*        OTHERS       = 2.
*    IF sy-subrc <> 0.
** Implement suitable error handling here
*    ENDIF.
*
*    CLEAR: lv_weeks_c.
*    lv_weeks_c = lv_weeks.
*    CONDENSE lv_weeks_c.
*
*    CLEAR: lv_colname.
*    CONCATENATE lv_weeks_c+2(2) '年第' lv_weeks_c+4(2) '周' INTO lv_colname.
*    CONDENSE lv_colname.
*    fcat: lv_fname lv_colname.*    预测总量/需求总量CLEAR: lv_fname.
*    lv_index = lv_index + 1.CLEAR: lv_index_c.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCZL' lv_index_c INTO lv_fname.CONDENSE lv_fname.CLEAR: lv_colname.IF p_r1 IS NOT INITIAL.IF sy-langu = '1'.lv_colname = '预测总量'.ELSEIF sy-langu = 'E'.lv_colname = 'Forecast Gross'.ENDIF.ELSE.IF sy-langu = '1'.lv_colname = '需求总量'.ELSEIF sy-langu = 'E'.lv_colname = 'Requirement Qty'.ENDIF.ENDIF.CONDENSE lv_colname.fcat: lv_fname lv_colname '' '' 20.*    当期销售订单数量/当期已交货数量CLEAR: lv_fname.
*    lv_index = lv_index + 1.CLEAR: lv_index_c.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'DQSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.CLEAR: lv_colname.IF p_r1 IS NOT INITIAL.IF sy-langu = '1'.lv_colname = '当期销售订单数量'.ELSEIF sy-langu = 'E'.lv_colname = 'Current Sales Order Qty'.ENDIF.ELSE.IF sy-langu = '1'.lv_colname = '当期已交货数量'.ELSEIF sy-langu = 'E'.lv_colname = 'Current Delivered Qty'.ENDIF.ENDIF.CONDENSE lv_colname.fcat: lv_fname lv_colname '' '' 20.*    预测导入数量/需求导入数量CLEAR: lv_fname.
*    lv_index = lv_index + 1.CLEAR: lv_index_c.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.CLEAR: lv_colname.IF p_r1 IS NOT INITIAL.IF sy-langu = '1'.lv_colname = '预测导入数量'.ELSEIF sy-langu = 'E'.lv_colname = 'Forecast Import Qty'.ENDIF.ELSE.IF sy-langu = '1'.lv_colname = '需求导入数量'.ELSEIF sy-langu = 'E'.lv_colname = 'Requirement Import Qty'.ENDIF.ENDIF.CONDENSE lv_colname.fcat: lv_fname lv_colname 'X' '' 20.ENDLOOP.*  批导上传的数据结构CLEAR: ls_excel,lv_index,lv_weeks,lv_date,lv_index_c,lv_weeks_c,lv_colname,lv_fname.fcat_u: 'WERKS' '工厂' 4,'MATNR' '物料编码' 40,'MAKTX' '物料描述' 40,'KUNNR' '客户编码' 10.LOOP AT lt_excel INTO ls_excel WHERE row = '0001'AND col > '0004'.CLEAR: lv_fname.lv_index = lv_index + 1.CLEAR: lv_index_c.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCZL' lv_index_c INTO lv_fname.CONDENSE lv_fname.CLEAR: lv_date, lv_weeks.
*    CONVERT_DATE_TO_INTERNALCALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'EXPORTINGdate_external            = ls_excel-value
*       ACCEPT_INITIAL_DATE      =IMPORTINGdate_internal            = lv_dateEXCEPTIONSdate_external_is_invalid = 1OTHERS                   = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.*    lv_date = ls_excel-value.CALL FUNCTION 'DATE_GET_WEEK'EXPORTINGdate         = lv_dateIMPORTINGweek         = lv_weeksEXCEPTIONSdate_invalid = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.CLEAR: lv_weeks_c.lv_weeks_c = lv_weeks.CONDENSE lv_weeks_c.CLEAR: lv_colname.CONCATENATE lv_weeks_c+0(4) '.' lv_weeks_c+4(2) INTO lv_colname.CONDENSE lv_colname.fcat_u: lv_fname lv_colname 20.ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_create_dynamic_table
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_create_dynamic_table .
*  生成ALV相关的动态内表CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog           = gt_structureIMPORTINGep_table                  = dy_tableEXCEPTIONSgenerate_subpool_dir_full = 1OTHERS                    = 2.IF sy-subrc <> 0.MESSAGE 'create dynamic table error' TYPE 'S' DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDIF.*  生成批导数据相关的动态内表CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog           = gt_structure_uIMPORTINGep_table                  = dy_table_uEXCEPTIONSgenerate_subpool_dir_full = 1OTHERS                    = 2.IF sy-subrc <> 0.MESSAGE 'create dynamic table error' TYPE 'S' DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDIF.
ENDFORM.*&---------------------------------------------------------------------*
*&      Form  html_top_of_page ALV标题
*&---------------------------------------------------------------------*
FORM html_top_of_page USING document TYPE REF TO cl_dd_document.DATA: text    TYPE sdydo_text_element,lv_name TYPE t001w-name1.CLEAR: text,lv_name.IF p_r1 IS NOT INITIAL.IF sy-langu = '1'.text = '销售预测导入'.ELSEIF sy-langu = 'E'.text = 'Batch Import of Sales Forecast'.ENDIF.ELSE.IF sy-langu = '1'.text = '独立需求导入'.ELSEIF sy-langu = 'E'.text = 'Batch Import of Plan Independent Requirement'.ENDIF.ENDIF.CALL METHOD document->add_textEXPORTINGtext         = textsap_fontsize = cl_dd_area=>mediumsap_emphasis = cl_dd_area=>strong.CALL METHOD document->add_gapEXPORTINGwidth = 2.*  CALL METHOD document->new_line.
*
*  CLEAR: text.
*  SELECT SINGLE name1 INTO lv_name FROM t001w
*    WHERE werks = p_werks.
*  CONCATENATE '工厂:' p_werks lv_name INTO text SEPARATED BY space.
*  CALL METHOD document->add_text
*    EXPORTING
*      text         = text
*      sap_fontsize = cl_dd_area=>medium
*      sap_emphasis = cl_dd_area=>strong.
*
*  CALL METHOD document->add_gap
*    EXPORTING
*      width = 2.
ENDFORM.FORM frm_set_pfstatus USING pu_extab TYPE slis_t_extab.DATA lt_fcode  TYPE SORTED TABLE OF sy-ucommWITH NON-UNIQUE KEY table_line.IF p_r1 = 'X'.lt_fcode =  VALUE #( ( |&BUT2| ) ) .ELSE.lt_fcode =  VALUE #( ( |&BUT1| ) ) .ENDIF.SET PF-STATUS 'STATUS_ALV' EXCLUDING lt_fcode .  "lt_fcode内表可自定义
ENDFORM.FORM frm_user_command USING p_ucomm  TYPE sy-ucommp_rs_selfield  TYPE slis_selfield.TYPES: BEGIN OF lty_vbap,vbeln TYPE vbak-vbeln,kunnr TYPE vbak-kunnr,posnr TYPE vbap-posnr,matnr TYPE vbap-matnr,werks TYPE vbap-werks,pstyv TYPE vbap-pstyv,END OF lty_vbap.DATA: lv_sel             TYPE c,lv_flag            TYPE c,lo_grid            TYPE REF TO cl_gui_alv_grid,lv_valid           TYPE c,ls_stbl            TYPE lvc_s_stbl,lt_vbap            TYPE TABLE OF lty_vbap,ls_vbap            TYPE lty_vbap,lv_kunnr           TYPE vbak-kunnr,lv_matnr           TYPE vbap-matnr,lv_werks           TYPE vbap-werks,order_header_in    TYPE bapisdh1,order_header_inx   TYPE bapisdh1x,order_item_in      TYPE TABLE OF bapisditm,ls_order_item_in   TYPE bapisditm,order_item_inx     TYPE TABLE OF bapisditmx,ls_order_item_inx  TYPE bapisditmx,schedule_lines     TYPE TABLE OF bapischdl,ls_schedule_lines  TYPE bapischdl,schedule_linesx    TYPE TABLE OF bapischdlx,ls_schedule_linesx TYPE bapischdlx,lt_return          TYPE TABLE OF bapiret2,ls_return          TYPE bapiret2,lv_error           TYPE c,lv_posnr           TYPE vbap-posnr,lv_etenr           TYPE vbep-etenr,lv_msg             TYPE string,lv_index           TYPE i,lv_index_c         TYPE string,lv_fname           TYPE string,lv_date_c          TYPE string,lv_date_n          TYPE sy-datum,lv_qty             TYPE vbep-wmeng,lv_week            TYPE scal-week,lt_pbim_u          TYPE TABLE OF pbim,ls_pbim_u          TYPE pbim,lv_versb           TYPE pbim-versb.DATA: lv_requirementstype TYPE bapisitemr-requ_type,lv_material         TYPE bapisitemr-material.CLEAR: lv_requirementstype,lv_material.DATA: ls_order_header_in     TYPE bapisdhd1,ls_order_header_inx    TYPE bapisdhd1x,lt_order_items_in      TYPE TABLE OF bapisditm,ls_order_items_in      TYPE bapisditm,lt_order_items_inx     TYPE TABLE OF bapisditmx,ls_order_items_inx     TYPE bapisditmx,lt_order_partners      TYPE TABLE OF bapiparnr,ls_order_partners      TYPE bapiparnr,lt_order_schedules_in  TYPE TABLE OF bapischdl,ls_order_schedules_in  TYPE bapischdl,lt_order_schedules_inx TYPE TABLE OF bapischdlx,ls_order_schedules_inx TYPE bapischdlx.DATA: lt_tp003_a  TYPE TABLE OF zppt_003a,ls_tp003_a  TYPE zppt_003a,lt_tp003_ac TYPE TABLE OF zppt_003a,ls_tp003_ac TYPE zppt_003a,lt_tp003_as TYPE TABLE OF zppt_003a,ls_tp003_as TYPE zppt_003a,lt_tp003_b  TYPE TABLE OF zppt_003b,ls_tp003_b  TYPE zppt_003b,lt_tp003_bs TYPE TABLE OF zppt_003b,ls_tp003_bs TYPE zppt_003b.DATA: lv_lsh      TYPE c LENGTH 4,lv_zscode   TYPE zscode,lv_zdrbbn   TYPE zdrbbn,lv_zdrbbn_c TYPE string.CLEAR: lv_zdrbbn_c,lt_pbim_u,ls_pbim_u,lv_versb.DATA: lt_pbim                     TYPE TABLE OF pbim,ls_pbim                     TYPE pbim,ls_requirements_item        TYPE bapisitemr,lt_requirements_schedule_in TYPE TABLE OF bapisshdin,ls_requirements_schedule_in TYPE bapisshdin,lt_return_n                 TYPE TABLE OF bapireturn1,ls_return_n                 TYPE bapireturn1,lv_reqmtsplannumber         TYPE bapisitemr-req_number.CLEAR: lt_pbim,ls_pbim,ls_requirements_item,lt_requirements_schedule_in,ls_requirements_schedule_in,lt_return_n,ls_return_n,lv_reqmtsplannumber.CLEAR: lt_tp003_a,ls_tp003_a,lt_tp003_ac,ls_tp003_ac,lt_tp003_as,ls_tp003_as,lt_tp003_b,ls_tp003_b,lt_tp003_bs,ls_tp003_bs,lv_lsh,lv_zscode,lv_zdrbbn,lv_week.CLEAR: ls_order_header_in,ls_order_header_inx,lt_order_items_in,ls_order_items_in,lt_order_items_inx,ls_order_items_inx,lt_order_partners,ls_order_partners,lt_order_schedules_in,ls_order_schedules_in,lt_order_schedules_inx,ls_order_schedules_inx.CLEAR: lv_sel,lv_flag,lv_valid,ls_stbl,lt_vbap,ls_vbap,lv_kunnr,lv_matnr,lv_werks,order_header_in,order_header_inx,order_item_in,ls_order_item_in,order_item_inx,ls_order_item_inx,schedule_lines,ls_schedule_lines,schedule_linesx,ls_schedule_linesx,lt_return,ls_return,lv_error,lv_posnr,lv_etenr,lv_msg,lv_index,lv_index_c,lv_fname,lv_date_c,lv_date_n,lv_qty.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lo_grid.CALL METHOD lo_grid->check_changed_dataIMPORTINGe_valid = lv_valid.CASE p_ucomm.WHEN '&BUT1'. "保存销售预测IF gv_error IS NOT INITIAL.IF sy-langu = '1'.MESSAGE '检查未通过,不允许保存!' TYPE 'E'.ELSEIF sy-langu = 'E'.MESSAGE 'You can not submit the result Till the issues are fixxed!' TYPE 'E'.ENDIF.ENDIF.LOOP AT <dyntab> ASSIGNING <fs_wa>.ASSIGN COMPONENT 'SEL' OF STRUCTURE <fs_wa> TO <fs_val>.lv_sel = <fs_val>.IF lv_sel = 'X'.lv_flag = 'X'.EXIT.ENDIF.ENDLOOP.IF lv_flag IS INITIAL.IF sy-langu = '1'.MESSAGE '请至少选择一条数据!' TYPE 'E'.ELSEIF sy-langu = 'E'.MESSAGE 'Please choose at least one records!' TYPE 'E'.ENDIF.ENDIF.*     销售订单创建VA01/修改VA02IF gt_data IS NOT INITIAL.SELECT vbak~vbelnvbak~kunnrvbap~posnrvbap~matnrvbap~werksvbap~pstyv INTO TABLE lt_vbapFROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbelnFOR ALL ENTRIES IN gt_dataWHERE vbap~matnr = gt_data-matnrAND vbap~werks = gt_data-werksAND vbak~kunnr = gt_data-kunnrAND vbak~auart = 'ZPLN'.ENDIF.LOOP AT <dyntab> ASSIGNING <fs_wa>.CLEAR: lv_sel,lv_kunnr,lv_matnr,lv_werks.ASSIGN COMPONENT 'SEL' OF STRUCTURE <fs_wa> TO <fs_val>.lv_sel = <fs_val>.ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <fs_wa> TO <fs_val>.lv_kunnr = <fs_val>.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = lv_kunnrIMPORTINGoutput = lv_kunnr.ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_wa> TO <fs_val>.lv_matnr = <fs_val>.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput        = lv_matnrIMPORTINGoutput       = lv_matnrEXCEPTIONSlength_error = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ASSIGN COMPONENT 'WERKS' OF STRUCTURE <fs_wa> TO <fs_val>.lv_werks = <fs_val>.IF lv_sel IS NOT INITIAL.READ TABLE lt_vbap INTO ls_vbap WITH KEY kunnr = lv_kunnrmatnr = lv_matnrwerks = lv_werks.
******************************************************************************
*         修改销售订单IF sy-subrc = 0."修改销售订单
*            首先删除销售订单的行项目CLEAR: order_header_inx,order_item_in,ls_order_item_in,order_header_in,order_item_inx,ls_order_item_inx,schedule_lines,ls_schedule_lines,schedule_linesx,ls_schedule_linesx,lt_return,ls_return,lv_error,lv_posnr,lv_etenr.order_header_inx-updateflag = 'U'.LOOP AT lt_vbap INTO ls_vbap WHERE kunnr = lv_kunnrAND matnr = lv_matnrAND werks = lv_werks.ls_order_item_in-itm_number = ls_vbap-posnr.APPEND ls_order_item_in TO order_item_in.CLEAR: ls_order_item_in.ls_order_item_inx-itm_number = ls_vbap-posnr.ls_order_item_inx-updateflag = 'D'.APPEND ls_order_item_inx TO order_item_inx.CLEAR: ls_order_item_inx.ENDLOOP.CALL FUNCTION 'BAPI_SALESORDER_CHANGE'EXPORTINGsalesdocument    = ls_vbap-vbeln
*               ORDER_HEADER_IN  =order_header_inx = order_header_inx
*               SIMULATION       =
*               BEHAVE_WHEN_ERROR           = ' '
*               INT_NUMBER_ASSIGNMENT       = ' '
*               LOGIC_SWITCH     =
*               NO_STATUS_BUF_INIT          = ' 'TABLESreturn           = lt_returnorder_item_in    = order_item_inorder_item_inx   = order_item_inx
*               PARTNERS         =
*               PARTNERCHANGES   =
*               PARTNERADDRESSES =
*               ORDER_CFGS_REF   =
*               ORDER_CFGS_INST  =
*               ORDER_CFGS_PART_OF          =
*               ORDER_CFGS_VALUE =
*               ORDER_CFGS_BLOB  =
*               ORDER_CFGS_VK    =
*               ORDER_CFGS_REFINST          =
*               SCHEDULE_LINES   =
*               SCHEDULE_LINESX  =
*               ORDER_TEXT       =
*               ORDER_KEYS       =
*               CONDITIONS_IN    =
*               CONDITIONS_INX   =
*               EXTENSIONIN      =
*               EXTENSIONEX      =
*               NFMETALLITMS     =.LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.lv_error  = 'X'.EXIT.ENDLOOP.CLEAR: ls_return.IF lv_error IS NOT INITIAL.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'IMPORTINGreturn = ls_return.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@0A@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'E'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_msg, ls_return.LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.CONCATENATE lv_msg ls_return-message INTO lv_msg.ENDLOOP.<fs_val> = lv_msg.lv_error  = 'X'.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait   = 'X'IMPORTINGreturn = ls_return.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@08@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'S'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_msg, ls_return.LOOP AT lt_return INTO ls_return WHERE type = 'S' AND id = 'V1'  AND number = '311'.CONCATENATE lv_msg ls_return-message INTO lv_msg.ENDLOOP.<fs_val> = lv_msg.ENDIF.*            再按照模板上的数据更新销售订单IF lv_error IS INITIAL.CLEAR: order_header_inx,order_item_in,ls_order_item_in,order_header_in,order_item_inx,ls_order_item_inx,schedule_lines,ls_schedule_lines,schedule_linesx,ls_schedule_linesx,lt_return,ls_return,lv_error,lv_posnr,lv_etenr.order_header_inx-updateflag = 'U'.CLEAR: lv_index.CLEAR: lv_posnr.LOOP AT gt_excel INTO gs_excel.lv_index = lv_index + 1.
*               明细行CLEAR: lv_index_c, lv_fname, lv_qty.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.lv_qty = <fs_val>.IF lv_qty IS INITIAL. "如果数量为0,则不需要添加到销售订单的行项目上去CONTINUE.ELSE.lv_posnr = lv_posnr + 10.ENDIF.ls_order_item_in-itm_number = lv_posnr.ls_order_item_in-material = lv_matnr.ls_order_item_in-plant = lv_werks.APPEND ls_order_item_in TO order_item_in.CLEAR: ls_order_item_in.ls_order_item_inx-itm_number = lv_posnr.ls_order_item_inx-material = 'X'.ls_order_item_inx-plant = 'X'.ls_order_item_inx-updateflag = 'I'.APPEND ls_order_item_inx TO order_item_inx.CLEAR: ls_order_item_inx.*               计划行CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCRQ' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_date_c, lv_date_n.lv_date_c = <fs_val>.
*               转成内部日期CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'EXPORTINGdate_external            = lv_date_c
*                   ACCEPT_INITIAL_DATE      =IMPORTINGdate_internal            = lv_date_nEXCEPTIONSdate_external_is_invalid = 1OTHERS                   = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.CLEAR: lv_etenr.lv_etenr = lv_etenr + 1.ls_schedule_lines-itm_number = lv_posnr.ls_schedule_lines-sched_line = lv_etenr.ls_schedule_lines-req_date = lv_date_n.ls_schedule_lines-req_qty = lv_qty.APPEND ls_schedule_lines TO schedule_lines.CLEAR: ls_schedule_lines.ls_schedule_linesx-itm_number = lv_posnr.ls_schedule_linesx-sched_line = lv_etenr.ls_schedule_linesx-req_date = 'X'.ls_schedule_linesx-req_qty = 'X'.APPEND ls_schedule_linesx TO schedule_linesx.CLEAR: ls_schedule_linesx.ENDLOOP.CALL FUNCTION 'BAPI_SALESORDER_CHANGE'EXPORTINGsalesdocument    = ls_vbap-vbeln
*                 order_header_in  = order_header_inorder_header_inx = order_header_inx
*                 SIMULATION       =
*                 BEHAVE_WHEN_ERROR           = ' '
*                 INT_NUMBER_ASSIGNMENT       = ' '
*                 LOGIC_SWITCH     =
*                 NO_STATUS_BUF_INIT          = ' 'TABLESreturn           = lt_returnorder_item_in    = order_item_inorder_item_inx   = order_item_inx
*                 PARTNERS         =
*                 PARTNERCHANGES   =
*                 PARTNERADDRESSES =
*                 ORDER_CFGS_REF   =
*                 ORDER_CFGS_INST  =
*                 ORDER_CFGS_PART_OF          =
*                 ORDER_CFGS_VALUE =
*                 ORDER_CFGS_BLOB  =
*                 ORDER_CFGS_VK    =
*                 ORDER_CFGS_REFINST          =schedule_lines   = schedule_linesschedule_linesx  = schedule_linesx
*                 ORDER_TEXT       =
*                 ORDER_KEYS       =
*                 CONDITIONS_IN    =
*                 CONDITIONS_INX   =
*                 EXTENSIONIN      =
*                 EXTENSIONEX      =
*                 NFMETALLITMS     =.LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.lv_error  = 'X'.EXIT.ENDLOOP.CLEAR: ls_return.IF lv_error IS NOT INITIAL.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'IMPORTINGreturn = ls_return.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@0A@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'E'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_msg, ls_return.LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.CONCATENATE lv_msg ls_return-message INTO lv_msg.ENDLOOP.<fs_val> = lv_msg.lv_error  = 'X'.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait   = 'X'IMPORTINGreturn = ls_return.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@08@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'S'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_msg, ls_return.LOOP AT lt_return INTO ls_return WHERE type = 'S' AND id = 'V1'  AND number = '311'.CONCATENATE lv_msg ls_return-message INTO lv_msg.ENDLOOP.ENDIF.ENDIF.******************************************************************************************
*          创建销售订单ELSE."创建销售订单CLEAR: ls_order_header_in,ls_order_header_inx,lt_order_items_in,ls_order_items_in,lt_order_items_inx,ls_order_items_inx,lt_order_partners,ls_order_partners,lt_order_schedules_in,ls_order_schedules_in,lt_order_schedules_inx,ls_order_schedules_inx,lt_return,ls_return,lv_error.*           headerls_order_header_in-doc_type = 'ZPLN'."销售订单类型ls_order_header_in-sales_org = lv_werks. "销售组织ls_order_header_in-distr_chan = '10'. "分销渠道ls_order_header_in-division = '00'. "产品组*           Partnersls_order_partners-partn_role = 'AG'.   "售达方ls_order_partners-partn_numb = lv_kunnr.APPEND ls_order_partners TO lt_order_partners.CLEAR: ls_order_partners.ls_order_partners-partn_role = 'RG'.   "付款方ls_order_partners-partn_numb = lv_kunnr.APPEND ls_order_partners TO lt_order_partners.CLEAR: ls_order_partners.ls_order_partners-partn_role = 'RE'.   "收票方ls_order_partners-partn_numb = lv_kunnr.APPEND ls_order_partners TO lt_order_partners.CLEAR: ls_order_partners.ls_order_partners-partn_role = 'WE'.   "送达方ls_order_partners-partn_numb = lv_kunnr.APPEND ls_order_partners TO lt_order_partners.CLEAR: ls_order_partners.*           itemsCLEAR: lv_posnr.CLEAR: lv_index.LOOP AT gt_excel INTO gs_excel.lv_index = lv_index + 1.CLEAR: lv_index_c, lv_fname, lv_qty.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.lv_qty = <fs_val>.IF lv_qty IS INITIAL. "如果数量为0,则不需要添加到销售订单的行项目上去CONTINUE.ELSE.lv_posnr = lv_posnr + 10.ENDIF.ls_order_items_in-itm_number = lv_posnr. "行项目号ls_order_items_in-material = lv_matnr. "物料ls_order_items_in-plant = lv_werks. "工厂APPEND ls_order_items_in TO lt_order_items_in.CLEAR: ls_order_items_in.ls_order_items_inx-itm_number = lv_posnr. "行项目号ls_order_items_inx-updateflag = 'I'. "ls_order_items_inx-material = 'X'. "物料ls_order_items_inx-plant = 'X'. "工厂APPEND ls_order_items_inx TO lt_order_items_inx.CLEAR: ls_order_items_inx.CLEAR: lv_etenr.lv_etenr = lv_etenr + 1.ls_order_schedules_in-itm_number = lv_posnr. "行项目号ls_order_schedules_in-sched_line = lv_etenr. "计划行号ls_order_schedules_in-req_date = lv_date_n. "交货日期ls_order_schedules_in-req_qty = lv_qty. "数量APPEND ls_order_schedules_in TO lt_order_schedules_in.CLEAR: ls_order_schedules_in.ls_order_schedules_inx-itm_number = lv_posnr. "行项目号ls_order_schedules_inx-sched_line = lv_etenr. "计划行号ls_order_schedules_inx-req_date = 'X'. "交货日期ls_order_schedules_inx-req_qty = 'X'. "数量APPEND ls_order_schedules_inx TO lt_order_schedules_inx.CLEAR: ls_order_schedules_inx.ENDLOOP.CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'EXPORTING
*               SALESDOCUMENTIN     =order_header_in     = ls_order_header_inorder_header_inx    = ls_order_header_inx
*               SENDER              =
*               BINARY_RELATIONSHIPTYPE       =
*               INT_NUMBER_ASSIGNMENT         =
*               BEHAVE_WHEN_ERROR   =
*               LOGIC_SWITCH        =
*               TESTRUN             =
*               CONVERT             = ' '
*             IMPORTING
*               SALESDOCUMENT       =TABLESreturn              = lt_returnorder_items_in      = lt_order_items_inorder_items_inx     = lt_order_items_inxorder_partners      = lt_order_partnersorder_schedules_in  = lt_order_schedules_inorder_schedules_inx = lt_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          =
*               EXTENSIONIN         =
*               PARTNERADDRESSES    =
*               EXTENSIONEX         =
*               NFMETALLITMS        =.LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.lv_error  = 'X'.EXIT.ENDLOOP.CLEAR: ls_return.IF lv_error IS NOT INITIAL.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'IMPORTINGreturn = ls_return.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@0A@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'E'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_msg, ls_return.LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.CONCATENATE lv_msg ls_return-message INTO lv_msg.ENDLOOP.<fs_val> = lv_msg.lv_error  = 'X'.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait   = 'X'IMPORTINGreturn = ls_return.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@08@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'S'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_msg, ls_return.LOOP AT lt_return INTO ls_return WHERE type = 'S'  AND id = 'V1'  AND number = '311'.CONCATENATE lv_msg ls_return-message INTO lv_msg.ENDLOOP.<fs_val> = lv_msg.ENDIF.ENDIF.ENDIF.IF lv_error IS INITIAL.ASSIGN COMPONENT 'ZINTYPE' OF STRUCTURE <fs_wa> TO <fs_val>.IF sy-langu = '1'.<fs_val> = '销售预测导入'.ELSEIF sy-langu = 'E'.<fs_val> = 'Sales Forecast Import'.ENDIF.CLEAR: lt_tp003_a,ls_tp003_a,lt_tp003_b,ls_tp003_b.
*         获取销售预测历史记录表SELECT * INTO TABLE lt_tp003_aFROM zppt_003aWHERE zintype = '销售预测导入'AND matnr = lv_matnrAND werks = lv_werksAND kunnr = lv_kunnr.CLEAR: lv_zscode.SELECT MAX( zscode ) INTO lv_zscode "获取当前日期最大的流水码(按照日期+工厂维护查找)FROM zppt_003aWHERE werks = lv_werksAND erdat = sy-datum.IF lt_tp003_a IS NOT INITIAL.
*            LOOP AT lt_tp003_a INTO ls_tp003_a WHERE erdat = sy-datum. "获取当前日期的销售预测历史记录
*              ls_tp003_ac = ls_tp003_a.
*              APPEND ls_tp003_ac TO lt_tp003_ac.
*              CLEAR: ls_tp003_ac, ls_tp003_a.
*            ENDLOOP.SORT lt_tp003_a BY zintype matnr werks kunnrzdrbbn DESCENDING.*            SORT lt_tp003_ac BY zintype matnr werks kunnr
*                                zscode DESCENDING.*            SELECT * INTO TABLE lt_tp003_b
*              FROM zppt_003b
*              FOR ALL ENTRIES IN lt_tp003_a
*              WHERE zscode = lt_tp003_a-zscode
*                AND zdrbbn = lt_tp003_a-zdrbbn.ENDIF.ASSIGN COMPONENT 'LAEDA' OF STRUCTURE <fs_wa> TO <fs_val>. "导入日期<fs_val> = sy-datum.ASSIGN COMPONENT 'AENAM' OF STRUCTURE <fs_wa> TO <fs_val>. "导入人员<fs_val> = sy-uname.CLEAR: lv_lsh.ASSIGN COMPONENT 'ZSCODE' OF STRUCTURE <fs_wa> TO <fs_val>. "流水码IF lv_zscode IS NOT INITIAL.lv_zscode = lv_zscode + 1.CONDENSE lv_zscode.<fs_val> = lv_zscode.ELSE.lv_lsh = '0001'.CONCATENATE sy-datum+2(6) lv_werks lv_lsh INTO lv_zscode.CONDENSE lv_zscode.<fs_val> = lv_zscode.ENDIF.ASSIGN COMPONENT 'ZDRBBN' OF STRUCTURE <fs_wa> TO <fs_val>. "导入版本号READ TABLE lt_tp003_a INTO ls_tp003_a INDEX 1.IF sy-subrc = 0.CLEAR: lv_zdrbbn.lv_zdrbbn = ls_tp003_a-zdrbbn.lv_zdrbbn = lv_zdrbbn + 1.
*            lv_zdrbbn_c = lv_zdrbbn.
*            CONDENSE lv_zdrbbn_c.<fs_val> = lv_zdrbbn.ELSE.CLEAR: lv_zdrbbn.lv_zdrbbn = 1.
*            CONDENSE lv_zdrbbn.<fs_val> = lv_zdrbbn.ENDIF.ls_tp003_as-zintype = '销售预测导入'.ls_tp003_as-matnr = lv_matnr.ls_tp003_as-werks = lv_werks.ls_tp003_as-kunnr = lv_kunnr.ls_tp003_as-zscode = lv_zscode.ls_tp003_as-zdrbbn = lv_zdrbbn.ls_tp003_as-erdat = sy-datum.ls_tp003_as-ernam = sy-uname.ls_tp003_as-auart = 'ZPLN'.ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_as-maktx = <fs_val>.ASSIGN COMPONENT 'MEINS' OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_as-meins = <fs_val>.APPEND ls_tp003_as TO lt_tp003_as.CLEAR: ls_tp003_as.CLEAR: lv_index.LOOP AT gt_excel INTO gs_excel.lv_index = lv_index + 1.ls_tp003_bs-zscode = lv_zscode.ls_tp003_bs-zdrbbn = lv_zdrbbn.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCRQ' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_date_c, lv_date_n.lv_date_c = <fs_val>.
*               转成内部日期CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'EXPORTINGdate_external            = lv_date_c
*               ACCEPT_INITIAL_DATE      =IMPORTINGdate_internal            = lv_date_nEXCEPTIONSdate_external_is_invalid = 1OTHERS                   = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ls_tp003_bs-zycrq = lv_date_n.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCZL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_bs-zyczl = <fs_val>.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'DQSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_bs-zdqsl = <fs_val>.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_bs-zycsl = <fs_val>.ASSIGN COMPONENT 'MEINS' OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_bs-meins = <fs_val>.ls_tp003_bs-zitem = lv_index.CONDENSE ls_tp003_bs-zitem.APPEND ls_tp003_bs TO lt_tp003_bs.CLEAR: ls_tp003_bs.ENDLOOP.ENDIF.ENDLOOP.IF lt_tp003_as IS NOT INITIAL.MODIFY zppt_003a FROM TABLE lt_tp003_as.IF sy-subrc = 0.COMMIT WORK AND WAIT.ELSE.ROLLBACK WORK.ENDIF.ENDIF.IF lt_tp003_bs IS NOT INITIAL.MODIFY zppt_003b FROM TABLE lt_tp003_bs.IF sy-subrc = 0.COMMIT WORK AND WAIT.ELSE.ROLLBACK WORK.ENDIF.ENDIF.p_rs_selfield-refresh = 'X'.WHEN '&BUT2'. "保存需求预测IF gv_error IS NOT INITIAL.IF sy-langu = '1'.MESSAGE '检查未通过,不允许保存!' TYPE 'E'.ELSEIF sy-langu = 'E'.MESSAGE 'You can not submit the result Till the issues are fixxed!' TYPE 'E'.ENDIF.ENDIF.LOOP AT <dyntab> ASSIGNING <fs_wa>.ASSIGN COMPONENT 'SEL' OF STRUCTURE <fs_wa> TO <fs_val>.lv_sel = <fs_val>.IF lv_sel = 'X'.lv_flag = 'X'.EXIT.ENDIF.ENDLOOP.IF lv_flag IS INITIAL.IF sy-langu = '1'.MESSAGE '请至少选择一条数据!' TYPE 'E'.ELSEIF sy-langu = 'E'.MESSAGE 'Please choose at least one records!' TYPE 'E'.ENDIF.ENDIF.*     创建MD61/修改MD62独立的计划需求IF gt_data IS NOT INITIAL.SELECT * INTO TABLE lt_pbimFROM pbimFOR ALL ENTRIES IN gt_dataWHERE matnr = gt_data-matnrAND werks = gt_data-werks.ENDIF.LOOP AT <dyntab> ASSIGNING <fs_wa>.CLEAR: lv_sel,lv_kunnr,lv_matnr,lv_werks.ASSIGN COMPONENT 'SEL' OF STRUCTURE <fs_wa> TO <fs_val>.lv_sel = <fs_val>.ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <fs_wa> TO <fs_val>.lv_kunnr = <fs_val>.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = lv_kunnrIMPORTINGoutput = lv_kunnr.ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_wa> TO <fs_val>.lv_matnr = <fs_val>.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput        = lv_matnrIMPORTINGoutput       = lv_matnrEXCEPTIONSlength_error = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ASSIGN COMPONENT 'WERKS' OF STRUCTURE <fs_wa> TO <fs_val>.lv_werks = <fs_val>.IF lv_sel IS NOT INITIAL.READ TABLE lt_pbim INTO ls_pbim WITH KEY zkunnr = lv_kunnrmatnr = lv_matnrwerks = lv_werks.
******************************************************************************
*         修改计划独立需求IF sy-subrc = 0."修改计划独立需求CLEAR: lv_error,lt_requirements_schedule_in,ls_requirements_schedule_in,lt_return_n,ls_return_n,lv_material."版本ASSIGN COMPONENT 'VERSB' OF STRUCTURE <fs_wa> TO <fs_val>.lv_versb = <fs_val>.CLEAR: lv_index.LOOP AT gt_excel INTO gs_excel.lv_index = lv_index + 1.CLEAR: lv_index_c, lv_fname, lv_qty.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_qty.lv_qty = <fs_val>.IF lv_qty IS INITIAL. "如果数量为0,则不需要添加到销售订单的行项目上去CONTINUE.ENDIF."日期CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCRQ' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_week, lv_date_n.lv_week = <fs_val>.
*               转成内部日期CALL FUNCTION 'WEEK_GET_FIRST_DAY'EXPORTINGweek         = lv_weekIMPORTINGdate         = lv_date_nEXCEPTIONSweek_invalid = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ls_requirements_schedule_in-req_date = lv_date_n."计划周期ls_requirements_schedule_in-date_type = '2'."数量ls_requirements_schedule_in-req_qty = lv_qty.APPEND ls_requirements_schedule_in TO lt_requirements_schedule_in.CLEAR: ls_requirements_schedule_in.ENDLOOP.lv_material = lv_matnr.CLEAR: lv_requirementstype.SELECT SINGLE bedae INTO lv_requirementstypeFROM pbimWHERE matnr = lv_matnrAND werks = lv_werksAND versb = lv_versb.CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'EXPORTINGmaterial                 = lv_materialplant                    = lv_werksrequirementstype         = lv_requirementstypeversion                  = lv_versbreqmtsplannumber         = ''vers_activ               = 'X'
*               REQUIREMENT_PARAM        =
*               MRP_AREA                 =
*               DO_COMMIT                = 'X'
*               UPDATE_MODE              = 'X'delete_old               = 'X'
*               NO_WITHDR                = ' '
*               MATERIAL_EVG             =
*               REQ_PLAN_ID_EXT          =
*               REQ_SEGMENT              =
*               MATERIAL_LONG            =
*               REQ_SEG_LONG             =
*             IMPORTING
*               REQUIREMENT_ITEM_OUT     =TABLESrequirements_schedule_in = lt_requirements_schedule_in
*               REQUIREMENTS_CHAR_IN     =return                   = lt_return_n.******************************************************************************************
*          创建计划独立需求ELSE."创建计划独立需求CLEAR: lv_error,ls_requirements_item,lt_requirements_schedule_in,ls_requirements_schedule_in,lt_return_n,ls_return_n,lv_reqmtsplannumber."工厂ls_requirements_item-plant      = lv_werks."MRP AREA
*            ls_requirements_item-mrp_area   = lv_berid."
*            ls_requirements_item-req_number   = gs_data-pbdnr."激活ls_requirements_item-vers_activ = 'X'."版本ASSIGN COMPONENT 'VERSB' OF STRUCTURE <fs_wa> TO <fs_val>.ls_requirements_item-version    = <fs_val>."Materialls_requirements_item-material    = lv_matnr.CLEAR: lv_index.LOOP AT gt_excel INTO gs_excel.lv_index = lv_index + 1.CLEAR: lv_index_c, lv_fname, lv_qty.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_qty.lv_qty = <fs_val>.IF lv_qty IS INITIAL. "如果数量为0,则不需要添加到销售订单的行项目上去CONTINUE.ENDIF."日期CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCRQ' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_week, lv_date_n.lv_week = <fs_val>.
*               转成内部日期CALL FUNCTION 'WEEK_GET_FIRST_DAY'EXPORTINGweek         = lv_weekIMPORTINGdate         = lv_date_nEXCEPTIONSweek_invalid = 1OTHERS       = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ls_requirements_schedule_in-req_date = lv_date_n."计划周期ls_requirements_schedule_in-date_type = '2'."数量ls_requirements_schedule_in-req_qty = lv_qty.APPEND ls_requirements_schedule_in TO lt_requirements_schedule_in.CLEAR: ls_requirements_schedule_in.ENDLOOP.CALL FUNCTION 'BAPI_REQUIREMENTS_CREATE'EXPORTINGrequirements_item        = ls_requirements_item
*               REQUIREMENT_PARAM        =
*               DO_COMMIT                = 'X'
*               UPDATE_MODE              = 'X'
*               REFER_TYPE               = ' '
*               PROFILID                 = ' 'IMPORTING
*               MATERIAL                 =
*               PLANT                    =
*               REQUIREMENTSTYPE         =
*               VERSION                  =reqmtsplannumber         = lv_reqmtsplannumber
*               MRP_AREA                 =
*               MATERIAL_EVG             =
*               REQ_PLAN_ID_EXT          =
*               REQ_SEGMENT              =
*               MATERIAL_LONG            =
*               REQ_SEG_LONG             =TABLESrequirements_schedule_in = lt_requirements_schedule_in
*               REQUIREMENTS_CHAR_IN     =return                   = lt_return_n.ENDIF.ENDIF.LOOP AT lt_return_n INTO ls_return_n WHERE type = 'E' OR type = 'A'.lv_error  = 'X'.EXIT.ENDLOOP.CLEAR: ls_return.IF lv_error IS NOT INITIAL.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'IMPORTINGreturn = ls_return.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@0A@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'E'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_msg, ls_return_n.LOOP AT lt_return_n INTO ls_return_n WHERE type = 'E' OR type = 'A'.CONCATENATE lv_msg ls_return_n-message INTO lv_msg.ENDLOOP.<fs_val> = lv_msg.lv_error  = 'X'.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait   = 'X'IMPORTINGreturn = ls_return.CLEAR: lt_pbim_u,ls_pbim_u,lv_versb.ASSIGN COMPONENT 'VERSB' OF STRUCTURE <fs_wa> TO <fs_val>.lv_versb = <fs_val>.SELECT * INTO TABLE lt_pbim_uFROM pbimWHERE matnr = lv_matnrAND werks = lv_werksAND versb = lv_versb.IF sy-subrc = 0.UPDATE pbim SET zkunnr = lv_kunnrWHERE matnr = lv_matnrAND werks = lv_werksAND versb = lv_versb.IF sy-subrc = 0.COMMIT WORK AND WAIT.ELSE.ROLLBACK WORK.ENDIF.ENDIF.ASSIGN COMPONENT 'STATUS' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = '@08@'.ASSIGN COMPONENT 'MSGTY' OF STRUCTURE <fs_wa> TO <fs_val>.<fs_val> = 'S'.ASSIGN COMPONENT 'MSGTXT' OF STRUCTURE <fs_wa> TO <fs_val>.CLEAR: lv_msg, ls_return_n.IF sy-langu = '1'.lv_msg = '导入成功'.ELSE.lv_msg = 'Import Successfully'.ENDIF.<fs_val> = lv_msg.ENDIF.IF lv_error IS INITIAL.ASSIGN COMPONENT 'ZINTYPE' OF STRUCTURE <fs_wa> TO <fs_val>.IF sy-langu = '1'.<fs_val> = '需求预测导入'.ELSEIF sy-langu = 'E'.<fs_val> = 'Requirement Forecast Import'.ENDIF.CLEAR: lt_tp003_a,ls_tp003_a,lt_tp003_b,ls_tp003_b.
*         获取独立需求预测历史记录表SELECT * INTO TABLE lt_tp003_aFROM zppt_003aWHERE zintype = '需求预测导入'AND matnr = lv_matnrAND werks = lv_werksAND kunnr = lv_kunnr.CLEAR: lv_zscode.SELECT MAX( zscode ) INTO lv_zscode "获取当前日期最大的流水码(按照日期+工厂维护查找)FROM zppt_003aWHERE werks = lv_werksAND erdat = sy-datum.IF lt_tp003_a IS NOT INITIAL.
*            LOOP AT lt_tp003_a INTO ls_tp003_a WHERE erdat = sy-datum. "获取当前日期的销售预测历史记录
*              ls_tp003_ac = ls_tp003_a.
*              APPEND ls_tp003_ac TO lt_tp003_ac.
*              CLEAR: ls_tp003_ac, ls_tp003_a.
*            ENDLOOP.SORT lt_tp003_a BY zintype matnr werks kunnrzdrbbn DESCENDING.*            SORT lt_tp003_ac BY zintype matnr werks kunnr
*                                zscode DESCENDING.*            SELECT * INTO TABLE lt_tp003_b
*              FROM zppt_003b
*              FOR ALL ENTRIES IN lt_tp003_a
*              WHERE zscode = lt_tp003_a-zscode
*                AND zdrbbn = lt_tp003_a-zdrbbn.ENDIF.ASSIGN COMPONENT 'LAEDA' OF STRUCTURE <fs_wa> TO <fs_val>. "导入日期<fs_val> = sy-datum.ASSIGN COMPONENT 'AENAM' OF STRUCTURE <fs_wa> TO <fs_val>. "导入人员<fs_val> = sy-uname.CLEAR: lv_lsh.ASSIGN COMPONENT 'ZSCODE' OF STRUCTURE <fs_wa> TO <fs_val>. "流水码IF lv_zscode IS NOT INITIAL.lv_zscode = lv_zscode + 1.CONDENSE lv_zscode.<fs_val> = lv_zscode.ELSE.lv_lsh = '0001'.CONCATENATE sy-datum+2(6) lv_werks lv_lsh INTO lv_zscode.CONDENSE lv_zscode.<fs_val> = lv_zscode.ENDIF.ASSIGN COMPONENT 'ZDRBBN' OF STRUCTURE <fs_wa> TO <fs_val>. "导入版本号READ TABLE lt_tp003_a INTO ls_tp003_a INDEX 1.IF sy-subrc = 0.CLEAR: lv_zdrbbn.lv_zdrbbn = ls_tp003_a-zdrbbn.lv_zdrbbn = lv_zdrbbn + 1.
*            CONDENSE lv_zdrbbn.<fs_val> = lv_zdrbbn.ELSE.CLEAR: lv_zdrbbn.lv_zdrbbn = '1'.
*            CONDENSE lv_zdrbbn.<fs_val> = lv_zdrbbn.ENDIF.ls_tp003_as-zintype = '需求预测导入'.ls_tp003_as-matnr = lv_matnr.ls_tp003_as-werks = lv_werks.ls_tp003_as-kunnr = lv_kunnr.ls_tp003_as-zscode = lv_zscode.ls_tp003_as-zdrbbn = lv_zdrbbn.ls_tp003_as-erdat = sy-datum.ls_tp003_as-ernam = sy-uname.
*          ls_tp003_as-auart = 'ZPLN'.ls_tp003_as-versb = lv_versb.ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_as-maktx = <fs_val>.ASSIGN COMPONENT 'MEINS' OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_as-meins = <fs_val>.APPEND ls_tp003_as TO lt_tp003_as.CLEAR: ls_tp003_as.CLEAR: lv_index.LOOP AT gt_excel INTO gs_excel.lv_index = lv_index + 1.ls_tp003_bs-zscode = lv_zscode.ls_tp003_bs-zdrbbn = lv_zdrbbn.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCRQ' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_bs-zycrq_n = <fs_val>.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCZL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_bs-zyczl = <fs_val>.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'DQSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_bs-zdqsl = <fs_val>.CLEAR: lv_index_c, lv_fname.lv_index_c = lv_index.CONDENSE lv_index_c.CONCATENATE 'YCSL' lv_index_c INTO lv_fname.CONDENSE lv_fname.ASSIGN COMPONENT lv_fname OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_bs-zycsl = <fs_val>.ASSIGN COMPONENT 'MEINS' OF STRUCTURE <fs_wa> TO <fs_val>.ls_tp003_bs-meins = <fs_val>.ls_tp003_bs-zitem = lv_index.CONDENSE ls_tp003_bs-zitem.APPEND ls_tp003_bs TO lt_tp003_bs.CLEAR: ls_tp003_bs.ENDLOOP.ENDIF.ENDLOOP.IF lt_tp003_as IS NOT INITIAL.MODIFY zppt_003a FROM TABLE lt_tp003_as.IF sy-subrc = 0.COMMIT WORK AND WAIT.ELSE.ROLLBACK WORK.ENDIF.ENDIF.IF lt_tp003_bs IS NOT INITIAL.MODIFY zppt_003b FROM TABLE lt_tp003_bs.IF sy-subrc = 0.COMMIT WORK AND WAIT.ELSE.ROLLBACK WORK.ENDIF.ENDIF.p_rs_selfield-refresh = 'X'.WHEN OTHERS.ENDCASE.ls_stbl-row = 'X'." 基于行的稳定刷新ls_stbl-col = 'X'." 基于列稳定刷新CALL METHOD lo_grid->refresh_table_displayEXPORTINGis_stable = ls_stblEXCEPTIONSfinished  = 1OTHERS    = 2.ENDFORM.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/33095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch模型加载caffe模型的权重

一、将caffe模型的权重转成dict格式 caffe库的编译可以参考我之前写的一篇博客&#xff1a;ImportError: dynamic module does not define module export function (PyInit__caffe)问题解决记录_chen_zn95的博客-CSDN博客 安装好后使用以下脚本便可将caffe模型的参数名和参数…

分布式测试插件 pytest-xdist 使用详解

目录 使用背景&#xff1a; 使用前提&#xff1a; 使用快速入门&#xff1a; 使用小结&#xff1a; 使用背景&#xff1a; 大型测试套件&#xff1a;当你的测试套件非常庞大&#xff0c;包含了大量的测试用例时&#xff0c;pytest-xdist可以通过并行执行来加速整体的测试过…

js中的break和continue中的区别

js中break和continue有着一些差别。 首先&#xff0c;虽然break和continue都有跳出循环的作用&#xff0c;但break是完全跳出循环&#xff0c;而continue则是跳出一次循环&#xff0c;然后开启下一次的循环。 下面我就来举几个例子吧。 var num 0;for(var i 1;i < 10;i){i…

如何使用ChatGPT设计LOGO,只需知道品牌名字就能完成傻瓜式操作

​独特且引人注目的LOGO对于引导用户/消费者快速识别并与你建立联系至关重要。然而&#xff0c;聘请专业的设计师来创建个性化LOGO可能非常昂贵。这里可以使用使用ChatGPT。[1] 你只需要&#xff1a; 准备好公司名称&#xff1b; 能用ChatGPT&#xff0c;用来给BingChat喂log…

学习总结(TAT)

好久都没交总结了&#xff0c;今天把之前的思路和错误整理了一下&#xff1a; 在服务器和客户端两侧&#xff0c;不可以同时先初始化获取输入流&#xff0c;否则会造成堵塞&#xff0c;同时为这位作者大大打call&#xff1a; (3条消息) 关于Java Socket和创建输入输出流的几点…

一、安全世界观

文章目录 1、 Web安全简史1.1 中国黑客简史1.2 黑客技术的发展历程1.3 web安全的兴起 2、黑帽子、白帽子3、安全的本质4、安全三要素5、如何实施安全评估5.1 资产等级划分5.2 威胁分析5.3 风险分析5.4 设计安全方案 6、白帽子兵法6.1 Secure By Default6.2 纵深防御原则6.3 数据…

java的junit之异常测试、参数化测试、超时测试

1.对可能抛出的异常进行测试 异常本身是方法签名的一部分测试错误的输入是否导致特定的异常 summary 测试异常可以使用Test(expectedExceptio.class)对可能发生的每种类型的异常进行测试 2.参数化测试 如果待测试的输入和输出是一组数据&#xff1a; 可以把测试数据组织起…

Oracle时间查询使用笔记:sysdate用法

Oracle的sysdate用法 通常会有 sysdate - 1 / 12这种&#xff0c;或者sysdate - 1 / 24/3 这两种用法,表示从当前时间往前推若干时间 下面就用sysdate - A/B,sysdate - A/B/C代替 第一种 sysdate - A/B型&#xff0c;这种结果是小时&#xff0c;A代表天数&#xff0c;B代表小时…

学习51单片机怎么开始?

学习的过程不总是先打好基础&#xff0c;然后再盖上层建筑&#xff0c;尤其是实践性的、工程性很强的东西。如果你一定要先全面打好基础&#xff0c;再学习单片机&#xff0c;我觉得你一定学不好&#xff0c;因为你的基础永远打不好&#xff0c;因为基础太庞大了&#xff0c;基…

Spring AOP 切点表达式

参考博客&#xff1a; 参考博客

Oracle 知识篇+会话级全局临时表在不同连接模式中的表现

标签&#xff1a;会话级临时表、全局临时表、幻读释义&#xff1a;Oracle 全局临时表又叫GTT ★ 结论 ✔ 专用服务器模式&#xff1a;不同应用会话只能访问自己的数据 ✔ 共享服务器模式&#xff1a;不同应用会话只能访问自己的数据 ✔ 数据库驻留连接池模式&#xff1a;不同应…

探索数据之美:初步学习 Python 柱状图绘制

文章目录 一 基础柱状图1.1 创建简单柱状图1.2 反转x和y轴1.3 数值标签在右侧1.4 演示结果 二 基础时间线柱状图2.1 创建时间线2.2 时间线主题设置取值表2.3 演示结果 三 GDP动态柱状图绘制3.1 需求分析3.2 数据文件内容3.3 列表排序方法3.4 参考代码3.5 运行结果 一 基础柱状图…

谷粒商城第十二天-基本属性销售属性管理功能的实现

目录 一、总述 二、前端部分 三、后端部分 四、总结 一、总述 前端的话&#xff0c;依旧是直接使用老师给的。 前端的话还是那些增删改查&#xff0c;业务复杂一点的话&#xff0c;无非就是设计到多个字段多个表的操作&#xff0c;当然这是后端的事了&#xff0c;前端这里…

Nodejs安装及环境变量配置(修改全局安装依赖工具包和缓存文件夹及npm镜像源)

本机环境&#xff1a;win11家庭中文版 一、官网下载 二、安装 三、查看nodejs及npm版本号 1、查看node版本号 node -v 2、查看NPM版本号&#xff08;安装nodejs时已自动安装npm&#xff09; npm -v 四、配置npm全局下载工具包和缓存目录 1、查看安装目录 在本目录下创建no…

瓴羊发布All in One 产品,零售SaaS的尽头是DaaS?

“打破烟囱、化繁为简&#xff0c;让丰富的能力、数据和智能All in One”&#xff0c;这是瓴羊新发布的产品瓴羊One承担的使命&#xff0c;也意味着瓴羊DaaS事业迈入了一个新阶段。 成立伊始&#xff0c;瓴羊就打出了“Not SaaS&#xff0c;But DaaS”旗号&#xff0c;将自己的…

小程序裂变怎么做?小程序裂变机制有哪些?

做了小程序就等于“生意上门”&#xff1f;其实并不是这样。小程序跟流量平台较为明显的区别就在于小程序并非“自带流量”&#xff0c;而是需要企业利用自己的营销推广能力来建立引流渠道&#xff0c;从而完成用户的拉新和留存、转化。因此&#xff0c;想要用小程序来增加自己…

[虚幻引擎] UE DTBase64 插件说明 使用蓝图对字符串或文件进行Base64加密解密

本插件可以在虚幻引擎中使用蓝图对字符串&#xff0c;字节数组&#xff0c;文件进行Base64的加密和解密。 目录 1. 节点说明 String To Base64 Base64 To String Binary To Base64 Base64 To Binary File To Base64 Base64 To File 2. 案例演示 3. 插件下载 1. 节点说…

centos如何配置IP地址?

CentOS如何查看和临时配置IP地址 CentOS系统中&#xff0c;可以通过使用ifconfig命令来查看当前本机的IP地址信息。输入ifconfig即可显示当前网络接口的IP地址、网络掩码和网关信息。如果需要设置临时IP地址&#xff0c;可以使用ifconfig命令后接网卡名称和需要设置的IP地址、网…

自定义element-plus的弹框样式

项目中弹框使用频繁,需要统一样式风格,此组件可以自定义弹框的头部样式和内容 一、文件结构如下: 二、自定义myDialog组件 需求&#xff1a; 1.自定义弹框头部背景样式和文字 2.自定义弹框内容 3.基本业务流程框架 components/myDialog/index.vue完整代码&#xff1a; &…

采用pycharm在虚拟环境使用pyinstaller打包python程序

一年多以前&#xff0c;我写过一篇博客描述了如何虚拟环境打包&#xff0c;这一次有所不同&#xff0c;直接用IDE pycharm构成虚拟环境并运行pyinstaller打包 之前的博文&#xff1a; 虚拟环境venu使用pyinstaller打包python程序_伊玛目的门徒的博客-CSDN博客 第一步&#xf…