SAP:ZSD011 Upload Requirements Plan Data

47 篇文章 0 订阅

Program ZSDR011

T-Code: ZSD011

Upload Requirements Plan Data

 

1、注意是用zsd010download下来的格式

2、在每周、月全都输入空的话,是更改、创建不了的,输入0的话可以修改、创建,如果只有一个月、周输入0,其他的不输入,则会把其他的删除,如果不想删除的话,其他栏位必需要输入以前一样的值

 

*&---------------------------------------------------------------------*
*& Progarm      :  ZSDR011                        Author : Jimmy Wong
*& Created      :  21 Nov 2012                    App    : SD
*& Title        :  Upload Requirements Plan Data
*& Description  :  Upload Requirements Plan Data
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       21 Nov 2012  the first version
*&  M1            Jimmy       11 Dec 2012  enhance duplication date
*&  M2            Jimmy       07 Mar 2013  add check "PIR is being processed, you cannot make changes!"
*&  M3            Jimmy       11 Mar 2013  No_withdr = 'X'
*&  the last update time  2013.03.11 14:00
*&---------------------------------------------------------------------*

report  zsdr011 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : rlgrap,pbim.",tprg,pbed.
data:begin of it_field occurs 0,
    col type i,
    pdatu like pbed-pdatu,
    prgbz  like tprg-prgbz,
    prgrs like tprg-prgrs,
    fdnam type length 20,
    fdfield type length 20,
    flag type c,
    weeks_c(2type c ,
    year_c(4type c,
    end of it_field.
data:begin of it_pdatu occurs 0,
    pdatu like pbed-pdatu,
    prgbz like tprg-prgbz,
    end of it_pdatu.
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 .

include zsd_forecast.

*----------------------------------------------------------------------*
*  Parameter & Select-Options                                          *
*----------------------------------------------------------------------*
selection-screen begin of block with frame title text-001.
parameters filename type rlgrap-filename obligatory.
parameters: p_ver as checkbox modif id ver.
selection-screen end of block 1.
*----------------------------------------------------------------------*
*  Initialize                                                          *
*----------------------------------------------------------------------*
initialization.
  if sy-uname ne 'SAPADMIN' and sy-uname ne 'LISA_WONG' and sy-uname ne 'OLIVER_LEE' .
    loop at screen.
      if screen-group1 'VER'.
        screen-intensified '0'.
        screen-required '0'.
        screen-active 0.
        screen-display_3d '0'.
        modify screen.
      endif.
    endloop.
  endif.
*----------------------------------------------------------------------*
*  AT SELECTION-SCREEN
*----------------------------------------------------------------------*
at selection-screen on value-request for filename.
  call function 'WS_FILENAME_GET'
    exporting
      def_path         'C:\'
      mask             ',Excel Files,*.xls,All Files,*.*.'(101)
      mode             'O'
      title            'Select file'(100)
    importing
      filename         filename
    exceptions
      selection_cancel 1
      selection_error  2
      others           3.
  if sy-subrc ne 0.
    "     .
  endif.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
  refresh: it_record,lt_gt_data,it_create,it_change,it_err2,itab_create,itab_change.
  clear: it_record,lt_gt_data,it_create,it_change,it_err2,itab_create,itab_change,lv_col.
  perform manual_upld.
  if sy-subrc ne 0.
    clear msg.
    concatenate 'Upload Filename ' filename ' is Error' into msg.
    message msg type 'I'.
    exit.
  endif.
  sort lt_gt_data by row col value.
  read table lt_gt_data index 1.
  if sy-subrc ne 0.
    clear : msg.
    concatenate 'Upload File ' filename  ' Is Null!' into msg.
    message msg type 'I'.
    exit.
  endif.
  perform get_it_header.

  sort it_pdatu by pdatu prgbz.                             "M1 add
  describe table it_pdatu  lines lv_dt1.
  delete adjacent duplicates from it_pdatu comparing all fields .
  describe table it_pdatu  lines lv_dt2.

  read table it_field with  key flag 'X'.
  if sy-subrc eq or lv_dt1 ne lv_dt2.
    perform display_error_data.
    exit.
  endif.

  describe table it_field lines lv_col.
  if lv_col 0.
    message 'Excel header not first row'  type 'I'.
    exit.
  endif.
*  perform create_structure.
*  perform create_dynamic_table.
  perform get_data.
  if it_record[] is initial.
    message 'No Record Found' type 'I'.
    exit.
  endif.
  perform get_check_data.
  if p_ver 'X'.
    perform check_it_record using '04'.
  else.
    perform check_it_record using '11'.
  endif.
  perform process_data.
  perform write_data .

end-of-selection.
*&---------------------------------------------------------------------*
*&      Form  MANUAL_UPLD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form manual_upld .
  call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    exporting
      filename    filename
      i_begin_col '1'
      i_begin_row '1'
      i_end_col   '100'
      i_end_row   '50000'
    tables
      intern      lt_gt_data
    exceptions
      upload_ole  1.
  if sy-subrc ne 0.
    "     message i004(zmm)
  endif.
endform.                    " MANUAL_UPLD
*&---------------------------------------------------------------------*
*&      Form  GET_IT_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_it_header .
  data:lv_total type i,
       lv_i type i,
       lv_j type i,
       lv_len type i,
       lv_c type length 6,
       lv_week like scal-week,
       lv_field type length 20.
  lv_i 1.

  select prgbz prgrs
    into corresponding fields of table it_tprg
      from tprg
      where  spras sy-langu.
  sort it_tprg by prgbz  prgrs .

  loop at lt_gt_data where row 1.
    shift lt_gt_data-value right deleting trailing space.
    shift lt_gt_data-value left deleting leading space.
    it_field-fdnam lt_gt_data-value.
    it_field-col  lt_gt_data-col.
    case lt_gt_data-col.
      when '1'.
        it_field-fdfield 'PBDNR' .
      when '2'.
        it_field-fdfield 'MATNR' .
      when '3'.
        it_field-fdfield 'WERKS' .
      when '4'.
        it_field-fdfield 'VERSB' .
      when '5'.
        it_field-fdfield 'POSID' .
      when '6'.
        it_field-fdfield 'MEINS' .
      when others.
        lv_c lv_i.
        condense lv_c.
        lv_len strlenlv_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.
        add to lv_i.

        lv_len strlenit_field-fdnam ).
        if lv_len 9.
          it_field-prgbz it_field-fdnam+0(1) .
          read table it_tprg with key prgbz it_field-prgbz binary search.
          if sy-subrc eq 0.
            it_field-prgrs it_tprg-prgrs.
            concatenate it_field-fdnam+5(4)  it_field-fdnam+2(2into lv_week .
            if it_field-prgrs '2'.
              call function 'HRIQ_WEEK_GET_FIRST_DAY'
                exporting
                  week         lv_week
                importing
                  date         it_field-pdatu
                exceptions
                  week_invalid 1
                  others       2.
              if sy-subrc ne 0.
                it_field-flag 'X' .
              endif.
            elseif it_field-prgrs '3'.
              concatenate lv_week '01' into it_field-pdatu  .
            endif.
            it_pdatu-pdatu it_field-pdatu.
            it_pdatu-prgbz it_field-prgbz.                "M1 add
            it_field-weeks_c it_field-fdnam+2(2).
            perform add_pre_zero using it_field-weeks_c
                     changing it_field-weeks_c.
            it_field-year_c it_field-fdnam+5(4).
            append it_pdatu.
          else.
            it_field-flag 'X' .
          endif.
        else.
          it_field-flag 'X' .
        endif.
    endcase.
    append it_field.
    clear:it_field.
  endloop.
endform.                    " GET_IT_HEADER
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ERROR_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form display_error_data .
  refresh: fc_hier.
  alv_field '1' 'PDATU' '' 'Delivery/order finish date' '15' 'L' '' '' ''.
  alv_field '2' 'PRGBZ' 'Date type' '' '5' 'L' '' '' ''.
  alv_field '3' 'prgrs' '' 'Period indicator' '10' 'L' '' '' ''.
  alv_field '4' 'FDNAM' 'Field Desc' '' '20' 'L' '' '' ''.
  alv_field '5' 'FDFIELD' 'Field Name' '' '10' 'L' '' '' ''.
  alv_field '6' 'FLAG' 'Is error' '' '5' 'L' '' '' ''.

  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      it_fieldcat        fc_hier[]
      i_save             'A'
      i_callback_program sy-repid
    tables
      t_outtab           it_field[]
    exceptions
      program_error      1
      others             2.
endform.                    " DISPLAY_ERROR_DATA
*&---------------------------------------------------------------------*
*&      Form  CREATE_STRUCTURE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form create_structure .
  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.
  loop at it_field.
    create_stru it_field-fdfield  sy-tabix 'C' '20'  .
  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_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data .
  data:lv_order type i.
  check not lt_gt_data[] is initial.
  lv_order 1.
  describe table lt_gt_data lines lv_total_line.
  loop at lt_gt_data where row > 1.
    lv_line =  sy-tabix  / lv_total_line * 100.
    call function 'SAPGUI_PROGRESS_INDICATOR'
      exporting
        percentage lv_line
        text       'Get Data........'.
    shift lt_gt_data-value right deleting trailing space.
    shift lt_gt_data-value left deleting leading space.
    case lt_gt_data-col.
      when '1'.
        it_record-pbdnr lt_gt_data-value.
        translate it_record-pbdnr to upper case.
      when '2'.
        it_record-matnr_c lt_gt_data-value.
        perform  tranfer_material using it_record-matnr_c
                          changing it_record-matnr.
      when '3'.
        it_record-werks lt_gt_data-value.
      when '4'.
        it_record-versb lt_gt_data-value.
        perform add_pre_zero using it_record-versb
                     changing it_record-versb.
      when '5'.
        it_record-posid lt_gt_data-value.
        if it_record-posid  is not initial .
          perform  tranfer_wbs using it_record-posid
                                    changing it_record-pspnr.
        endif.
      when '6'.
        it_record-meins lt_gt_data-value.
      when others.
        check lt_gt_data-col <= lv_col.
        read table it_field with  key col lt_gt_data-col .
        if sy-subrc eq 0.
          it_record-prgrs it_field-prgrs.
          it_record-prgbz it_field-prgbz.
          it_record-pdatu it_field-pdatu.
          it_record-weeks_c it_field-weeks_c.
          it_record-year_c it_field-year_c .
          perform process_num using it_record-weeks_c
                              changing it_record-weeks_i.
          perform process_num using it_record-year_c
                              changing it_record-year_i.

          it_record-plnmg_c lt_gt_data-value .
          perform process_num using lt_gt_data-value
                changing it_record-plnmg.

          it_record-order lv_order.
          append it_record.
          add to lv_order.
        endif.
    endcase.
    at end of row.
      clear: it_record.
    endat.
  endloop.
endform.                    " GET_DATA

 

*&---------------------------------------------------------------------*
*&  Include           ZSD_FORECAST
*&---------------------------------------------------------------------*
data:begin of it_record occurs 0,
      order type i,
      pbdnr like pbim-pbdnr,
      werks like pbim-werks,
      versb like pbim-versb,
      matnr like pbim-matnr,
      matnr_c(20type c,
      prgbz like tprg-prgbz,
      prgrs like tprg-prgrs,
      weeks_c(2type c,
      weeks_i type i,
      year_c(4type c,
      year_i type i,
      week like scal-week,
      pdatu like pbed-pdatu,
      plnmg_c(20type c,
      plnmg like pbed-plnmg,
      pspnr like prps-pspnr,
      posid like prps-posid,
      meins  like pbed-meins,
      iscreate    type c,
      message(700type c,
    end of it_record.
data: it_err2 like it_record occurs with header line.
data: it_err3 like it_record occurs with header line.
data: it_create like it_record occurs with header line.
data: it_change like it_record occurs with header line.
data: begin of wa_itab,
      pbdnr like pbim-pbdnr,
      werks like pbim-werks,
      versb like pbim-versb,
      matnr like pbim-matnr,
      message(700type c,
      end of wa_itab.
data: itab_create like wa_itab occurs with header line.
data: itab_change like wa_itab occurs with header line.
data: req_item like bapisitemr.
data: req_data like bapisshdin occurs with header line.
data: it_return like bapireturn1 occurs with header line.
data: matemp like bapisitemr-material.

data:begin of it_t001w occurs 50,
    werks   like t001w-werks,
    end of it_t001w.
data:begin of it_t459v occurs 0,
    versb   like t459v-versb,
    end of it_t459v.
data:begin of it_mara occurs 0,
   matnr   like mara-matnr,
   mtart   like mara-mtart,
   end of it_mara.
data:begin of it_pbim occurs 0,
      pbdnr like pbim-pbdnr,
      werks like pbim-werks,
      versb like pbim-versb,
      matnr like pbim-matnr,
   end of it_pbim.
data:begin of it_tprg occurs 20,
    prgbz  like tprg-prgbz,
    prgrs  like tprg-prgrs,
    end of it_tprg.
define alv_field.
  clear:wa_hier.
  wa_hier-col_pos &1.
  wa_hier-fieldname &2.
  wa_hier-seltext_m &3.
  wa_hier-seltext_l &4.
  wa_hier-outputlen &5.
  wa_hier-just &6.
  wa_hier-do_sum &7.
  wa_hier-ref_tabname &8 .
  wa_hier-ref_fieldname &9 .
  append wa_hier to fc_hier.
end-of-definition.
type-pools: slis.
data: fc_hier type slis_t_fieldcat_alv,
      wa_hier type slis_fieldcat_alv .
data: lt_gt_data type alsmex_tabline occurs with header line.
data:lv_tabix like sy-tabix,
     lv_pspnr like prps-pspnr,
     lv_vervs type vervs,
     msg   type string,
     lv_col type i,
     lv_dt1  type i,
     lv_dt2  type i.
data:lv_total_line type i,
   lv_line type decimals 3.
constants:c_chk_num like pa0001-ename value '0123456789.,'.

*&---------------------------------------------------------------------*
*&      Form  TRANFER_MATERIAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_it_record_MATNR  text
*      <--P_it_record_MATNR_C  text
*----------------------------------------------------------------------*
form  tranfer_material using    p_old
                       changing p_new  .
  translate p_old to upper case.
  call function 'CONVERSION_EXIT_MATN1_INPUT'
    exporting
      input        p_old
    importing
      output       p_new
    exceptions
      length_error 1
      others       2.
  if sy-subrc <> 0.
  endif.
endform.                    "tranfer_material
*&---------------------------------------------------------------------*
*&      Form  TRANFER_WBS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_RECORD_POSID  text
*      <--P_IT_RECORD_PSPNR  text
*----------------------------------------------------------------------*
form tranfer_wbs  using    p_old
                  changing p_new  .
  translate p_old to upper case.
  call function 'CONVERSION_EXIT_ABPSP_INPUT'
    exporting
      input     p_old
    importing
      output    p_new
    exceptions
      not_found 1
      others    2.
  if sy-subrc <> 0.
    clear:p_new.
  endif.
endform.                    " TRANFER_WBS
*&---------------------------------------------------------------------*
*&      Form  ADD_PRE_ZERO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_RECORD_WEEKS_C  text
*      <--P_IT_RECORD_WEEKS_C  text
*----------------------------------------------------------------------*
form add_pre_zero  using    p_old
                   changing p_new .

  call function 'CONVERSION_EXIT_ALPHA_INPUT'
    exporting
      input  p_old
    importing
      output p_new.
endform.                    " ADD_PRE_ZERO
*&---------------------------------------------------------------------*
*&      Form  PROCESS_NUM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LT_GT_DATA_VALUE  text
*      <--P_IT_RECORD_KPEIN  text
*----------------------------------------------------------------------*
form process_num  using    p_value
                  changing p_change.
  data :lv_value type length 30 .
  if p_value cn c_chk_num.
    p_change -1.
  else.
    lv_value  p_value.
    call function 'C14DG_CHAR_NUMBER_CONVERSION'
      exporting
        i_string                   lv_value
      importing
*       E_FLOAT                    =
        e_dec                      p_change
*       E_DECIMALS                 =
      exceptions
        wrong_characters           1
        first_character_wrong      2
        arithmetic_sign            3
        multiple_decimal_separator 4
        thousandsep_in_decimal     5
        thousand_separator         6
        number_too_big             7
        others                     8.
    if sy-subrc 7.
      p_change p_value.
    endif.
  endif.
endform.                    " PROCESS_NUM
*&---------------------------------------------------------------------*
*&      Form  GET_CHECK_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_check_data .
  select   werks into table it_t001w
     from t001w.
  sort it_t001w by   werks.

  select  versb into table it_t459v
      from t459v
      where spras sy-langu .
  sort it_t459v by   versb.

  select matnr mtart into table it_mara
      from mara
      for all entries in it_record
      where matnr it_record-matnr.
  sort it_mara by  matnr.

  select prgbz prgrs
    into corresponding fields of table it_tprg
      from tprg
      where  spras sy-langu.
  sort it_tprg by prgbz prgrs .

  select matnr werks versb  pbdnr
    into corresponding fields of table it_pbim
    from pbim
    for all entries in it_record
    where matnr it_record-matnr
        and werks it_record-werks
        and bedae 'VSFB'
        and versb it_record-versb
        and pbdnr it_record-pbdnr.
  sort it_pbim by matnr werks versb pbdnr.
endform.                    " GET_CHECK_DATA
*&---------------------------------------------------------------------*
*&      Form  CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form check_it_record using p_type .
  data: lv_flag2 type c,
         lv_week  like scal-week,
         lv_week_i type i,
         lv_week_c(2type c ,
         lv_data   like sy-datum,
         lv_fabkl  like t001w-fabkl,
         l_objkey type sibfboriid,
         wfstate type char1,
         lv_msg type length 100.
  clear:lv_flag2.
  describe table it_record lines lv_total_line.
  sort it_record by pbdnr werks versb matnr.
  loop at it_record.
    lv_tabix sy-tabix.
    lv_line =  sy-tabix  / lv_total_line * 100.
    call function 'SAPGUI_PROGRESS_INDICATOR'
      exporting
        percentage lv_line
        text       'Check Data........'.
    clear:lv_flag2,it_record-message.

    "plant
    read table it_t001w with key  werks it_record-werks binary search.
    if sy-subrc <> 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Plant Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "version
    read table it_t459v with key  versb =  it_record-versb binary search .
    if sy-subrc <> 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Version Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    else.
      if p_type '11'.
        if  it_record-versb ='00'.
          lv_flag2 'X'.
          concatenate it_record-message  ' Version<>00 error.'
                 into it_record-message.
          modify it_record index lv_tabix.
        endif.
      endif.
    endif.
    " Material code
    read table it_mara with key matnr it_record-matnr binary search.
    if sy-subrc <> 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Material Code Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.

    "Period
    read table it_tprg with key prgbz it_record-prgbz binary search.
    if sy-subrc <> 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Period Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    else.
      if p_type '04'.
        clear:it_record-prgrs.
        it_record-prgrs it_tprg-prgrs.
      endif.
      if  it_record-prgbz <> 'W' and it_record-prgbz <> 'M'.
        lv_flag2 'X'.
        concatenate it_record-message  ' Period <>W or Period <>M error.'
               into it_record-message.
        modify it_record index lv_tabix.
      endif.
    endif.
    "M no. or W no.
    if it_record-weeks_i < or it_record-year_i < 0.
      if it_record-weeks_i < 0.
        lv_flag2 'X'.
        concatenate it_record-message  ' M no. or W no. error.'
               into it_record-message.
        modify it_record index lv_tabix.
      elseif   it_record-year_i < 0.

        lv_flag2 'X'.
        concatenate it_record-message  ' Y no. error.'
               into it_record-message.
        modify it_record index lv_tabix.
      endif.
    else.
      if p_type '04'.
        clear:it_record-pdatu,it_record-week,lv_week_c,lv_week_i.
        if it_record-prgbz 'W'.
          call function 'BKK_GET_LASTWEEK_OF_YEAR'
            exporting
              i_year it_record-year_i
            importing
              e_week lv_week
            exceptions
              others 1.
          lv_week_i lv_week+4(2).
          lv_week_c lv_week_i .
          if it_record-weeks_i > lv_week_i.
            lv_flag2 'X'.
            concatenate it_record-message  '  W no.>' lv_week_c ' error.'
                   into it_record-message.
            modify it_record index lv_tabix.
          else.
            concatenate it_record-year_c it_record-weeks_c into it_record-week.
            call function 'HRIQ_WEEK_GET_FIRST_DAY'
              exporting
                week         it_record-week
              importing
                date         it_record-pdatu
              exceptions
                week_invalid 1
                others       2.
            if sy-subrc ne 0 .
              lv_flag2 'X'.
              concatenate it_record-message  ' M no. or W no. error.'
                     into it_record-message.
            endif.
            modify it_record index lv_tabix.
          endif.
        else.
          if it_record-weeks_i > 12.
            lv_flag2 'X'.
            concatenate it_record-message  ' M no.>12 error.'
                   into it_record-message.
            modify it_record index lv_tabix.
          else.
            clear: lv_data,lv_fabkl.
            concatenate it_record-year_c it_record-weeks_c '01' into lv_data.
            select single fabkl into lv_fabkl from t001w where werks it_record-werks.
            call function 'DATE_CONVERT_TO_FACTORYDATE'
              exporting
                date                         lv_data
                factory_calendar_id          lv_fabkl
              importing
                date                         it_record-pdatu
              exceptions
                calendar_buffer_not_loadable 1
                correct_option_invalid       2
                date_after_range             3
                date_before_range            4
                date_invalid                 5
                factory_calendar_not_found   6
                others                       7.

          endif.
        endif.
      endif.
    endif.

    "Quantity
    if it_record-plnmg 0.
*      lv_flag2 = 'X'.
*      concatenate it_record-message
*        ' Quantity = 0 is error.' into it_record-message.
*      modify it_record index lv_tabix.
    elseif it_record-plnmg < 0.
      lv_flag2 'X'.
      concatenate it_record-message
        ' Quantity is negative or Quantity not is number.'
        into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Production Lot
*    if it_record-pspnr is  initial.
*      lv_flag2 = 'X'.
*      concatenate it_record-message  ' Production Lot  error.'
*             into it_record-message.
*      modify it_record index lv_tabix.
*    endif.
    "Requirement Plan
    if it_record-pbdnr space or it_record-pbdnr is initial .
      lv_flag2 'X'.
      concatenate it_record-message  ' Requirement Plan is empty.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
*M2 add
    if p_type '11'.
      on change of  it_record-pbdnr or  it_record-werks or  it_record-versb  .
        clear: l_objkey,wfstate,lv_msg.
        l_objkey+0(4it_record-werks.
        l_objkey+4(2it_record-versb.
        l_objkey+6(10it_record-pbdnr.

        call function 'ZWF_GET_CURRENTSPSTEPID'
          exporting
            wfid    'WFSD0002'
            instid  l_objkey
          importing
            wfstate wfstate.
        if wfstate 2.
          lv_msg 'pir is being processed, you cannot make changes!'.
        endif.
      endon.
    endif.
    if lv_msg is not initial.
      lv_flag2 'X'.
      concatenate it_record-message  lv_msg
             into it_record-message separated by space.
      modify it_record index lv_tabix.
    endif.
*M2 end
    if lv_flag2 <> 'X'.
      " is Create
      read table it_pbim with key matnr it_record-matnr
                                  werks it_record-werks
                                  versb it_record-versb
                                  pbdnr it_record-pbdnr  binary search.
      if sy-subrc ne 0.
        it_record-iscreate 'X'.
      endif.
      it_record-message ' OK.'.
      modify it_record index lv_tabix.
    endif.
  endloop.
endform.                    " CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_data .

  loop at it_record.
    if not it_record-message ' OK.'.
      move-corresponding it_record to it_err2.
      append it_err2.
      clear it_err2.
    else.
      if it_record-iscreate 'X'.
        move-corresponding it_record to it_create.
        append  it_create.
        itab_create-pbdnr it_record-pbdnr.
        itab_create-werks it_record-werks.
        itab_create-versb it_record-versb.
        itab_create-matnr it_record-matnr.
        collect itab_create.
        clear:  it_create,itab_create.
      else.
        move-corresponding it_record to it_change.
        append  it_change.
        itab_change-pbdnr it_record-pbdnr.
        itab_change-werks it_record-werks.
        itab_change-versb it_record-versb.
        itab_change-matnr it_record-matnr.
        collect itab_change.
        clear:  it_change,itab_change.
      endif.
    endif.
  endloop.

  "Create Requirement Plan
  if not itab_create[] is initial.
    describe table itab_create lines lv_total_line.
    sort itab_create by pbdnr werks versb matnr.
    loop at itab_create.
      lv_line =  sy-tabix  / lv_total_line * 100.
      call function 'SAPGUI_PROGRESS_INDICATOR'
        exporting
          percentage lv_line
          text       'Processing Create Data........'.
      lv_tabix sy-tabix.
      req_item-material itab_create-matnr.
      req_item-plant itab_create-werks.
      req_item-requ_type 'VSFB'.
      req_item-version itab_create-versb.
      if itab_create-versb '00'.
        req_item-vers_activ 'X'.
      else.
        req_item-vers_activ ''.
      endif.
      req_item-req_number itab_create-pbdnr .
      loop at it_create where pbdnr =   itab_create-pbdnr
                            and werks itab_create-werks
                            and versb itab_create-versb
                            and matnr itab_create-matnr.
        req_data-date_type it_create-prgrs.
        req_data-req_date it_create-pdatu.
        req_data-req_qty it_create-plnmg.
        lv_pspnr  it_create-pspnr.
        append req_data.
      endloop.
      call function 'BAPI_REQUIREMENTS_CREATE'
        exporting
          requirements_item        req_item
        importing
          material                 matemp
        tables
          requirements_schedule_in req_data
          return                   it_return.

      read table it_return with key type 'E'.
      if sy-subrc eq 0.
        loop at it_return where type 'E'.
          concatenate itab_create-message  ' E: ' it_return-message into itab_create-message.
        endloop.
        "concatenate 'E:' itab_create-message into itab_create-message.
        modify itab_create index lv_tabix transporting message .
      else.
        call function 'BAPI_TRANSACTION_COMMIT'
          exporting
            wait 'X'.
*
*        if lv_pspnr is not initial.
*          select * from pbim where matnr = itab_create-matnr
*                               and werks = itab_create-werks
*                               and bedae = 'VSFB'
*                               and versb = itab_create-versb
*                               and pbdnr = itab_create-pbdnr.
*          endselect.
*          if sy-subrc eq 0.
*            update pbim set knttp = 'Q'
*                            sobkz = 'Q'
*                            kzvbr = 'P'
*                            pspel  = lv_pspnr
*                            kzbws = 'M'
*                               where matnr = itab_create-matnr
*                                 and werks = itab_create-werks
*                                 and bedae = 'VSFB'
*                                 and versb = itab_create-versb
*                                 and pbdnr = itab_create-pbdnr.
*            if sy-subrc eq 0.
*              itab_create-message = 'Success.'.
*              modify itab_create index lv_tabix transporting message .
*            endif.
*          else.
*            itab_create-message = 'Update wbs failing'.
*            modify itab_create index lv_tabix transporting message .
*          endif.
*        else.
        itab_create-message 'Success.'.
        modify itab_create index lv_tabix transporting message .
*        endif.
      endif.
      clear:req_item,req_data,it_return,it_return[],req_data[],lv_pspnr,itab_create-message.
    endloop.
    " update wbs
    wait up to seconds.
    loop at itab_create.
      check itab_create-message 'Success.'.
      read table it_create  with  key pbdnr itab_create-pbdnr
                                      werks itab_create-werks
                                      versb itab_create-versb
                                      matnr itab_create-matnr.
      if sy-subrc eq  0.
        lv_pspnr  it_create-pspnr.
        if lv_pspnr is  not initial.
          update pbim set knttp 'Q'
                          sobkz 'Q'
                          kzvbr 'P'
                          pspel  lv_pspnr
                          kzbws 'M'
                             where matnr itab_create-matnr
                               and werks itab_create-werks
                               and bedae 'VSFB'
                               and versb itab_create-versb
                               and pbdnr itab_create-pbdnr.
          commit work and wait.
        endif.
      endif.
    endloop.

    sort itab_create by pbdnr werks versb  matnr.
    loop at it_create.
      lv_tabix sy-tabix.
      read table itab_create with key pbdnr it_create-pbdnr
                                      werks it_create-werks
                                      versb it_create-versb
                                      matnr it_create-matnr binary search.
      if sy-subrc eq 0.
        it_create-message itab_create-message .
        modify it_create index  lv_tabix transporting message.
      endif.
    endloop.
  endif.

  "Change Requirement Plan
  if not  itab_change[] is initial.
    describe table itab_change lines lv_total_line.
    loop at itab_change.
      lv_line =  sy-tabix  / lv_total_line * 100.
      call function 'SAPGUI_PROGRESS_INDICATOR'
        exporting
          percentage lv_line
          text       'Processing Change Data........'.
      lv_tabix sy-tabix.
      loop at it_change where pbdnr =   itab_change-pbdnr
                            and werks itab_change-werks
                            and versb itab_change-versb
                            and matnr itab_change-matnr.
        req_data-date_type it_change-prgrs.
        req_data-req_date it_change-pdatu.
        req_data-req_qty it_change-plnmg.
        lv_pspnr  it_change-pspnr.
        append req_data.
      endloop.
      if itab_change-versb '00'.
        lv_vervs 'X'.
      else.
        lv_vervs ''.
      endif.
      call function 'BAPI_REQUIREMENTS_CHANGE'
        exporting
          material                 itab_change-matnr
          plant                    itab_change-werks
          requirementstype         'VSFB'
          version                  itab_change-versb
          vers_activ               lv_vervs
          reqmtsplannumber         itab_change-pbdnr
          NO_WITHDR                'X'
        importing
          requirement_item_out     req_item
        tables
          requirements_schedule_in req_data
          return                   it_return.

      read table it_return with key type 'E'.
      if sy-subrc eq 0.
        loop at it_return where type 'E'.
          concatenate itab_change-message ' E: ' it_return-message into itab_change-message.
        endloop.
        modify itab_change index lv_tabix transporting message .
      else.
        call function 'BAPI_TRANSACTION_COMMIT'
          exporting
            wait 'X'.
*        wait up to 1 seconds.
*
*        if lv_pspnr is not initial.
*          select * from pbim  where matnr = itab_change-matnr
*                               and werks = itab_change-werks
*                               and bedae = 'VSFB'
*                               and versb = itab_change-versb
*                               and pbdnr = itab_change-pbdnr.
*          endselect.
*          if sy-subrc eq 0.
*            update pbim set knttp = 'Q'
*                            sobkz = 'Q'
*                            kzvbr = 'P'
*                            pspel  = lv_pspnr
*                            kzbws = 'M'
*                               where matnr = itab_change-matnr
*                                 and werks = itab_change-werks
*                                 and bedae = 'VSFB'
*                                 and versb = itab_change-versb
*                                 and pbdnr = itab_change-pbdnr.
*            if sy-subrc eq 0.
*              itab_change-message = 'Success.'.
*              modify itab_change index lv_tabix transporting message.
*            endif.
*          else.
*            itab_change-message = 'Update wbs failing'.
*            modify itab_change index lv_tabix transporting message.
*          endif.
*        else.
        itab_change-message 'Success.'.
        modify itab_change index lv_tabix transporting message.
*        endif.
      endif.
      clear:req_data,it_return,it_return[],req_data[],req_item,lv_pspnr,itab_change-message.
    endloop.
    " update wbs
    wait up to seconds.
    loop at itab_change.
      check itab_change-message 'Success.'.
      read table it_change  with  key pbdnr itab_change-pbdnr
                                      werks itab_change-werks
                                      versb itab_change-versb
                                      matnr itab_change-matnr.
      if sy-subrc eq  0.
        lv_pspnr  it_change-pspnr.
        if lv_pspnr is  not initial .
          update pbim set knttp 'Q'
                          sobkz 'Q'
                          kzvbr 'P'
                          pspel  lv_pspnr
                          kzbws 'M'
                             where matnr itab_change-matnr
                               and werks itab_change-werks
                               and bedae 'VSFB'
                               and versb itab_change-versb
                               and pbdnr itab_change-pbdnr.
          commit work and wait.
        endif.
      endif.
    endloop.

    sort itab_change by pbdnr werks versb  matnr.
    loop at it_change.
      lv_tabix sy-tabix.
      read table itab_change with key pbdnr it_change-pbdnr
                                      werks it_change-werks
                                      versb it_change-versb
                                      matnr it_change-matnr binary search.
      if sy-subrc eq 0.
        it_change-message itab_change-message .
        modify it_change index  lv_tabix transporting message .
      endif.
    endloop.
  endif.

  clear it_err3.
  refresh it_err3.
  append lines of it_create to it_err3.
  append lines of it_change to it_err3.
  append lines of it_err2 to it_err3.
  sort it_err3 by order ascending.


endform.                    " PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  WRITE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0275   text
*----------------------------------------------------------------------*
form write_data  .
  refresh fc_hier.
  alv_field '1' 'PBDNR' '' 'Requirement Plan' '12' '' '' ''  ''.
  alv_field '2' 'WERKS' 'Plant' '' ''  '' '' '' ''.
  alv_field '3' 'VERSB' 'Version' '' '6'  '' '' ''  ''.
  alv_field '4' 'MATNR' '' 'Material Number' '20'  '' '' 'MARA'  'MATNR'.
  alv_field '5' 'PRGBZ' 'Period' '' ''  '' '' ''  ''.
  alv_field '6' 'WEEKS_C' '' 'M no. or W no.' ''  '' '' '' ''.
  alv_field '7' 'YEAR_C' 'Year' '' ''  '' '' ''  ''.
  alv_field '8' 'PDATU' 'Deliv. Finish date' '' '10'  '' '' ''  ''.
  alv_field '9' 'PLNMG' 'Quantity' '' ''  '' '' ''  ''.
  alv_field '10' 'POSID' '' 'WBS element' ''  '' '' ''  ''.
  alv_field '11' 'MESSAGE' 'Message' '' '30'  '' '' '' ''.

  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      it_fieldcat   fc_hier[]
    tables
      t_outtab      it_err3[]
    exceptions
      program_error 1
      others        2.
  if sy-subrc ne 0.
    "     message i004(zmm)
  endif.

endform.                    " WRITE_DATA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值