Program :ZSDR010

T-Code: ZSD010

Download Requirements Plan Data

1、  download出和MD63一样格式的excel 以便用户操作

2、  用于zsd011,可以添加物料,也可以添加column,但添加column时格式要注意,和download出来的Column一样

*&---------------------------------------------------------------------*
*& Progarm      :  ZSDR011                        Author : Jimmy Wong
*& Created      :  21 Nov 2012                    App    : SD
*& Title        :  Download Requirements Plan Data
*& Description  :  Download Requirements Plan Data
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       21 Nov 2012 the first version
*&  the last update time  2012.12.03 17:00
*&---------------------------------------------------------------------*

report  zsdr010 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : rlgrap,pbim,pbed,cm60a.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*

data:begin of itab occurs 0,
    matnr  like pbim-matnr,
    werks  like pbim-werks,
    bedae  like pbim-bedae,
    versb  like pbim-versb,
    pbdnr  like pbim-pbdnr,
    entlu  like pbed-entlu,
    prgbz  like tprg-prgbz,
    pdatu  like pbed-pdatu,
    meins  like pbed-meins,
    plnmg  like pbed-plnmg,
    pspel  like pbim-pspel,
    posid  like prps-posid,
    end of itab.
data:gt_itab like itab occurs 0 with header line.
data:begin of it_tprg occurs 20,
    prgbz  like tprg-prgbz,
    prgrs  like tprg-prgrs,
    end of it_tprg.
data: begin of it_prps occurs 0,
    pspnr like prps-pspnr,
    posid like prps-posid,
    end of it_prps.
data:begin of it_field occurs 0,
    pdatu like pbed-pdatu,
    prgbz  like tprg-prgbz,
    entlu like pbed-entlu,
    fdnam type c length 20,
    fdfield type c length 20,
    end of it_field.
field-symbols: <gt_output> type standard table,
               <wa_output>,
               <wa_field>.
data: it_structure type lvc_t_fcat,
      wa_structure type lvc_s_fcat,
      gt_output type ref to data,
      wa_new_line type ref to data .
data: gv_file type string.
data:lv_year type i,
     wa_year(4) type c,
     lv_week like scal-week,
     lv_tabix like sy-tabix,
     wa_week type c length 10.
data: begin of it_pbdnr occurs 0,
       pbdnr  like pbim-pbdnr,
      end of it_pbdnr .

*----------------------------------------------------------------------*
*  Parameter & Select-Options                                          *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
parameters: p_pbdnr like pbim-pbdnr obligatory ,"default 'ELTEK',
            p_werks like pbim-werks obligatory default '8101'.
select-options:s_versb for pbim-versb obligatory no intervals ,
               s_pdatu for pbed-pdatu obligatory ,
               s_matnr for pbim-matnr.
parameters p_down type rlgrap-filename default 'C:\temp\for pir download\'.
selection-screen end of block 1.

initialization.
  s_pdatu-sign = 'I'.
  s_pdatu-option = 'BT'.
  s_pdatu-low = sy-datum.
  lv_year = sy-datum+0(4) + 1.
  wa_year = lv_year .
  concatenate wa_year '12' '31' into s_pdatu-high.
  append  s_pdatu.
*----------------------------------------------------------------------*
*  AT SELECTION-SCREEN
*----------------------------------------------------------------------*
at selection-screen on value-request for p_down.
  call function 'WS_FILENAME_GET'
    exporting
      def_path         = 'C:\'
      mask             = ',Excel Files,*.xls,All Files,*.*.'(101)
      mode             = 'O'
      title            = 'Select file'(100)
    importing
      filename         = p_down
    exceptions
      selection_cancel = 1
      selection_error  = 2
      others           = 3.
  if sy-subrc ne 0.
    "     .
  endif.

at selection-screen on value-request for p_pbdnr.
  perform get_pbdnr changing p_pbdnr.

*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
  perform get_data.
  if itab[] is initial .
    message 'No Record Found' type 'I'.
    exit.
  endif.
  perform get_field.
  perform create_structure.
  perform create_dynamic_table.
  perform add_header.
  perform process_data.
  perform download_data.

end-of-selection.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data .

select a~pbdnr a~werks a~versb a~matnr a~bedae
       b~entlu b~pdatu b~plnmg b~meins a~pspel
       into corresponding fields of table itab
    from pbim as a
      inner join pbed as b on a~bdzei = b~bdzei
    where a~pbdnr = p_pbdnr
      and a~werks = p_werks
      and a~versb in s_versb
      and a~bedae = 'VSFB'
      and b~pdatu in s_pdatu
      and a~matnr in  s_matnr.
  if itab[] is not initial.
    select pspnr posid
      into corresponding fields of table it_prps
        from prps
        for all entries in itab
        where pspnr = itab-pspel.
    sort it_prps by   pspnr posid  .

select prgbz prgrs
      into corresponding fields of table it_tprg
        from tprg
        where  spras = sy-langu.
    sort it_tprg by  prgrs prgbz.
  endif.
endform.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  CREATE_STRUCTURE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form create_structure .
  data:lv_total type i,
       lv_i type i,
       lv_j type i,
       lv_len type i,
       lv_c type c length 6,
       lv_field type c length 20.
  define create_stru.
    wa_structure-fieldname = &1.
    wa_structure-col_pos   = &2.
    wa_structure-inttype = &3.
    wa_structure-intlen = &4.
    append wa_structure to it_structure.
  end-of-definition.

create_stru 'PBDNR' '1' 'C' '20'  .
  create_stru 'MATNR' '2' 'C' '20'  .
  create_stru 'WERKS' '3' 'C' '20'  .
  create_stru 'VERSB' '4' 'C' '20'  .
  create_stru 'POSID' '5' 'C' '20'  .
  create_stru 'MEINS' '6' 'C' '20'  .

describe table it_field lines lv_total .
  lv_j = 7.
  lv_i = 0.
  loop at it_field .
    lv_tabix = sy-tabix.
    lv_c = lv_tabix.
    condense lv_c.
    lv_len = strlen( lv_c  ).
    if lv_len = 1.
      concatenate '0' lv_c into lv_c.
    endif.
    concatenate 'FIELD' lv_c into lv_field.
    it_field-fdfield = lv_field.
    create_stru lv_field lv_j 'C' '20'  .
    modify it_field index lv_tabix.
    add 1 to lv_j.
  endloop.
endform.                    " CREATE_STRUCTURE
*&---------------------------------------------------------------------*
*&      Form  CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form create_dynamic_table .
  call method cl_alv_table_create=>create_dynamic_table
    exporting
      it_fieldcatalog = it_structure
    importing
      ep_table        = gt_output.

assign gt_output->* to <gt_output>.
endform.                    " CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*&      Form  GET_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_field .
  loop at itab.
    it_field-entlu = itab-entlu.
    it_field-pdatu = itab-pdatu.

read table it_tprg with  key prgrs = it_field-entlu binary search.
    if sy-subrc eq 0.
      it_field-prgbz = it_tprg-prgbz .
    endif.

if it_field-entlu = '2'.
      call function 'GET_WEEK_INFO_BASED_ON_DATE'
        exporting
          date   = it_field-pdatu
        importing
          week   = lv_week
*         monday =
*         sunday =
        .
      concatenate lv_week+4(2)  lv_week+0(4) into wa_week separated by '/'.
    else.
      concatenate it_field-pdatu+4(2)  it_field-pdatu+0(4) into wa_week separated by '/'.
    endif.
    concatenate  it_field-prgbz wa_week  into it_field-fdnam separated by space.
    collect it_field.
    "WBS
    read table it_prps with  key pspnr = itab-pspel binary search.
    if sy-subrc eq 0.
      gt_itab-posid =  it_prps-posid .
    endif.

gt_itab-matnr = itab-matnr.
    gt_itab-werks = itab-werks.
    gt_itab-versb = itab-versb.
    gt_itab-pbdnr = itab-pbdnr.
    gt_itab-meins = itab-meins.
    collect gt_itab.
    clear:it_field,lv_week,wa_week,gt_itab.
  endloop.
  sort it_field by pdatu.
endform.                    " GET_FIELD
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_data .
  sort gt_itab by matnr versb pbdnr werks .
  loop at gt_itab.
    loop at it_structure into wa_structure.
      assign component wa_structure-fieldname of structure <wa_output> to <wa_field>.
      if wa_structure-fieldname ='PBDNR' .
        <wa_field>  =  gt_itab-pbdnr.
      elseif wa_structure-fieldname ='MATNR' .
        <wa_field>  =  gt_itab-matnr.
        perform tranfer_material   using <wa_field>
                   changing <wa_field>.
      elseif wa_structure-fieldname ='WERKS' .
        <wa_field>  =  gt_itab-werks.
      elseif wa_structure-fieldname ='VERSB' .
        <wa_field>  =  gt_itab-versb.
      elseif wa_structure-fieldname ='POSID' .
        <wa_field>  =   gt_itab-posid.
      elseif wa_structure-fieldname ='MEINS' .
        <wa_field>  =   gt_itab-meins.
      else.
        read table it_field with  key  fdfield = wa_structure-fieldname.
        if sy-subrc eq 0.
          read table itab with  key matnr = gt_itab-matnr werks = gt_itab-werks
                                   versb = gt_itab-versb  pbdnr = gt_itab-pbdnr
                                   pdatu = it_field-pdatu entlu = it_field-entlu.
          if sy-subrc eq 0.
            <wa_field>  =  itab-plnmg.
          endif.
        endif.
      endif.
    endloop.
    append <wa_output> to <gt_output>.
    clear:<wa_field>,<wa_output> .
  endloop.
endform.                    " PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  ADD_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form add_header .
  create data wa_new_line like line of <gt_output>.
  assign wa_new_line->* to <wa_output>.

loop at it_structure into wa_structure.
    assign component wa_structure-fieldname of structure <wa_output> to <wa_field>.
    if wa_structure-fieldname ='PBDNR' .
      <wa_field>  =  'Reqmst Plan'.
    elseif wa_structure-fieldname ='MATNR' .
      <wa_field>  =  'Material'.
    elseif wa_structure-fieldname ='WERKS' .
      <wa_field>  =  'Plant'.
    elseif wa_structure-fieldname ='VERSB' .
      <wa_field>  =  'Version'.
    elseif wa_structure-fieldname ='POSID' .
      <wa_field>  =  'WBS Element'.
    elseif wa_structure-fieldname ='MEINS' .
      <wa_field>  =  'Base Unit'.
    else.
      read table it_field with  key  fdfield = wa_structure-fieldname.
      if sy-subrc eq 0.
        <wa_field>  =  it_field-fdnam.
      endif.
    endif.
  endloop.
  append <wa_output> to <gt_output>.
  clear:<wa_field>,<wa_output> .
endform.                    " ADD_HEADER
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form download_data .

perform get_file.
  call function 'GUI_DOWNLOAD'
    exporting
      filename              = gv_file
      filetype              = 'DAT'
      codepage              = '4103'
      replacement           = '#'
      write_field_separator = 'X'
      write_bom             = 'X'
    tables
      data_tab              = <gt_output>.

if sy-subrc eq 0.
*   --- show document in the XLS Reader ---
    cl_gui_frontend_services=>execute( exporting  document = gv_file
                                       exceptions cntl_error             = 1
                                                  error_no_gui           = 2
                                                  bad_parameter          = 3
                                                  file_not_found         = 4
                                                  path_not_found         = 5
                                                  file_extension_unknown = 6
                                                  error_execute_failed   = 7
                                                  synchronous_failed     = 8
                                                  not_supported_by_gui   = 9
                                                  others                 = 10 ).
  endif.
endform.                    " DOWNLOAD_DATA
*&---------------------------------------------------------------------*
*&      Form  get_file
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form get_file .
  data: wa_key(30) type c.
  data: lv_i type i.
  data: lv_c(1) type c.
  data: wa_date(8) type c.
  data: wa_time like sy-uzeit.
  data: lv_char type c.
  wa_date = sy-datum.
  wa_time =  sy-uzeit.
  concatenate 'ReqmtsPlan' wa_date wa_time  into wa_key.
  concatenate wa_key '.xls' into wa_key.

lv_i = strlen( p_down ).
  lv_i = lv_i - 1 .
  if lv_i > 1.
    lv_c = p_down+lv_i(1).
  endif.
  lv_char = '\' .
  if lv_c eq lv_char.
    concatenate p_down wa_key into gv_file.
  else.
    concatenate p_down lv_char wa_key into gv_file.
  endif.
endform.                    " GET_FILE
*&---------------------------------------------------------------------*
*&      Form  TRANFER_MATERIAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ITAB_MATNR  text
*      <--P_ITAB_MATNR_C  text
*----------------------------------------------------------------------*
form  tranfer_material using    p_old
                       changing p_new  .

call function 'CONVERSION_EXIT_MATN1_OUTPUT'
    exporting
      input  = p_old
    importing
      output = p_new.
endform.                    "tranfer_material
*&---------------------------------------------------------------------*
*&      Form  GET_PBDNR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_P_PBDNR  text
*----------------------------------------------------------------------*
form get_pbdnr  changing p_p_pbdnr.
  data: begin of tab_pbdnr occurs 0.
          include structure cm60h.
  data:end of tab_pbdnr.

data: begin of felder occurs 10.
          include structure help_value.
  data: end of felder.

data: begin of xdynfields  occurs 10.
          include structure dynpread.
  data: end of xdynfields.

data: xflag(1) type c value 'X'.
  data: l_index like sy-tabix.

data: l_pbdnr like am60x-pbdnr,
        epbdnr like am60x-pbdnr,
        mpbdnr like am60x-pbdnr.

clear felder. refresh felder.

*- Nummer  (Pick-Up)
  felder-tabname    = 'CM60H'.
  felder-fieldname  = 'PBDNR'.
  felder-selectflag = xflag.
  append felder.

clear felder.
*- Material
  felder-tabname    = 'CM60H'.
  felder-fieldname  = 'MATNR'.
  append felder.

*- Bedarfsart (Pick-Up)
  felder-tabname    = 'CM60H'.
  felder-fieldname  = 'BERID'.
  append felder.

*- Werk
  felder-tabname    = 'CM60H'.
  felder-fieldname  = 'WERKS'.
  append felder.

*- Bedarfsart (Pick-Up)
  felder-tabname    = 'CM60H'.
  felder-fieldname  = 'BEDAE'.
  append felder.

*- Version
  felder-tabname    = 'CM60H'.
  felder-fieldname  = 'VERSB'.
  append felder.

call function 'REQUIREMENT_NUMBER'
    exporting
      icm60a    = cm60a
    tables
      tab_pbdnr = tab_pbdnr.

*--> Sort Result                                            "HW 665025
  sort tab_pbdnr by pbdnr matnr werks berid versb bedae.

call function 'HELP_VALUES_GET_NO_DD_NAME'
    exporting
      display                      = ' '
      selectfield                  = 'P_PBDNR'
*     TITEL                        = ' '
    importing
      ind                          = l_index
    tables
      fields                       = felder
      full_table                   = tab_pbdnr
    exceptions
      full_table_empty             = 1
      no_tablestructure_given      = 2
      no_tablefields_in_dictionary = 3
      more_then_one_selectfield    = 4
      no_selectfield               = 5
      others                       = 6.
  if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  endif.

read table tab_pbdnr index l_index.
  if sy-subrc eq 0.
    p_p_pbdnr = tab_pbdnr-pbdnr.
  endif.

endform.                    " GET_PBDNR

SAP:ZSD010 Download Requirements Plan Data相关推荐

  1. SAP:ZSD011 Upload Requirements Plan Data

    Program :ZSDR011 T-Code: ZSD011 Upload Requirements Plan Data 1.注意是用zsd010download下来的格式 2.在每周.月全都输入空 ...

  2. SAP RETAIL商品主数据Basic Data视图里几个让人莫名惊诧的字段

    SAP RETAIL商品主数据Basic Data视图里几个让人莫名惊诧的字段 刚刚接触SAP零售系统,笔者对于商品主数据的界面,很多不适应,不熟悉. 所以笔者在闲暇之余,没事就喜欢在SAP零售系统上 ...

  3. SAP MM 物料主数据Plant Data Storage 1视图里的Storage Bin

    SAP MM 物料主数据Plant Data Storage 1视图里的Storage Bin SAP系统是一个功能强大的企业管理软件系统,它对于各个行业的企业都能提供支持,对于各种不同业务场景和业务 ...

  4. SAP LSMW 物料主数据Basic Data Text数据的导入

    SAP LSMW 物料主数据Basic Data Text数据的导入 笔者所在的D项目上,业务要求每个物料主数据能有一个remark字段,用以在物料描述之外为物料做更多更详细的描述,比如一些备品备件物 ...

  5. SAP KKBC_ORD报表中Plan和Target的区别

    1.SAP关于成本的概念 2.差异的计算方法. 3.实际成本计算方法 4.SAP variance 1.成本的概念 标准成本=标准价格 * 标准数量 + 作业价格 * 标准数量 计划成本=计划价格 * ...

  6. SAP Cloud SDK‘s Virtual Data Model

    官网链接 SAP S/4HANA Cloud 和 On-Premise 公开的大部分服务都是 OData 服务. OData 是一种 RESTful API 协议,具有两个关键特性: 每个服务都由元数 ...

  7. SAP C4C和Gigya(Customer Data Cloud)的客户报表

    SAP C4C 假设我想对系统里所有的客户主数据的客户分类有个总体概念,每个分类下客户数量的具体数字, 可以简单的创建一个报表Report, 定义Key Figure,对于我统计分类数量的需求,类型为 ...

  8. SAP HANA SQL执行计划(SAP HANA SQL explain plan)

    SAP HANA SQL执行计划: 方法一:直接写执行语句 explain  plan  SET STATEMENT_NAME = 'select_emp' FOR select ename,sal, ...

  9. SAP gateway 后台OData model data查看工具

    Jerry has written this tool for support colleague in Zeiss to enable them to conveniently check a gi ...

最新文章

  1. 终于要考网络架构师了
  2. kubernetes 1.5 + nginx负载均衡 + jenkins集群 实战(一)
  3. 2021-05-19 一个简单有趣的LQR控制可视化例子及代码
  4. SAP HANA Delivery Unit概念简述
  5. leetcode 896. 单调数列
  6. vue = 什么意思_Vue导入模块import xxx from '@/xxx'中的@是什么含义?
  7. 乱斗西游2服务器修改,为我们的友谊干杯《乱斗西游2》转服功能邀你面基
  8. qpsk频谱图matlab,基于MATLAB的QPSK信号调制技术及其频谱分析
  9. feedsky官网访问异常
  10. 微积分——傅里叶级数
  11. 谷歌怎么设置下载位置
  12. “本地资源检测” 上手指南,玩转最前沿的优化黑科技!
  13. 英语每日听写练习 Day 19
  14. 新媒体运营教程:完整的用户增长5步方案!
  15. BusyBox 的配置
  16. 遗传算法(基础知识)
  17. 程序员所说的「轮子」是什么东西?
  18. 信用卡还款高峰到来小心多付冤枉钱
  19. 推荐国外IT资讯网站
  20. 企业研发源代码保密软件分析

热门文章

  1. CF1475F Unusual Matrix
  2. sql inject1
  3. python代码能做成软件步骤与异常情况mac
  4. 《第一行代码》总结之网络、服务(五)
  5. android apn xml,android 批改默认APN
  6. ITiM v2.0 闪亮发布,十年磨砺,倚天出鞘!
  7. Qt Creator禁用警告
  8. JBAS011232: Only one JAX-RS Application Class allowed. com.sun.jersey
  9. 《人工智能原理》读书笔记:第2章 体系论
  10. 进程与线程学习(1)