Upload Prodution Order CO02 BDC

38 篇文章 2 订阅
6 篇文章 0 订阅
*&---------------------------------------------------------------------*
*& Progarm      :  ZPPR010                        Author : Jimmy Wong
*& Created      :  12 Oct 2012                    App    : PP
*& Title        :  Upload Prodution Order
*& Description  :  Upload Prodution Order
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       12 Oct 2012 the first version
*&  the last update time  2012.10.24 14:00
*&---------------------------------------------------------------------*
report  zppr010 no standard page heading.
data:begin of it_record occurs 0,
      order type i,
      matnr like afpo-matnr,
      matnr_c(20type c,
      posid like prps-posid,
      werks like pbim-werks,
      auart like t003o-auart,
      aufnr like afko-aufnr,
      gamng like afko-gamng,
      gamng_c(17type c,
      gltrp like afko-gltrp,
      gltrp_c(10type c,
      posnr like resbd-posnr,
      posnr_c type length 4,
      matnr2 like resbd-matnr,
      matnr2_c(20type c,
      menge like resbd-menge,
      menge_c(18type c,
      postp like resbd-postp,
      vornr like afvgi-vornr,
      vornr_c(4type c,
      lgort like resbd-lgort,
      rgekz like resbd-rgekz,
      sobkz_d like resbd-sobkz_d,
      message(700type c,
    end of it_record.
data: it_err like it_record occurs with header line.
data: it_err2 like it_record occurs with header line.
data: it_err3 like it_record occurs with header line.
data: it_err5 like it_record occurs with header line.
data: it_bdcmsg like bdcmsgcoll occurs with header line,
      bdcdata like bdcdata occurs with header line.
types:lv_type type length 50.
data:begin of itab occurs 0,
      matnr_c type lv_type ,
      posid type lv_type ,
      werks type lv_type ,
      auart type lv_type ,
      aufnr type lv_type ,
      gamng_c type lv_type ,
      gltrp_c type lv_type ,
      posnr_c type lv_type ,
      matnr2_c type lv_type ,
      menge_c type lv_type ,
      postp  type lv_type ,
      vornr_c type lv_type ,
      lgort  type lv_type ,
      rgekz type lv_type ,
      sobkz_d type lv_type ,
    end of itab.
data:begin of it_tab occurs 0.
        include structure itab.
data: message(700type c,
    end of it_tab.
data: begin of it_aufnr occurs 0,
      aufnr like afko-aufnr,
      message(700type c,
      end of it_aufnr.
data: it_aufnr_tmp like it_aufnr occurs with header line.
data: it_aufnr_tmp2 like it_aufnr occurs with header line.
data: begin of it_down occurs 0,
          line(1000type c,
end of it_down .
data: begin of i_file occurs 0,
        line(1000type c,
      end of i_file.
data: gv_file like rlgrap-filename.
data: msg   type string,
      lv_tabix like sy-tabix.
data: pr_co01 type c,
      lv_total type i,
      lv_fail type i,
      lv_msg type length 100,
      it_return like  bapiret2 occurs with header line,
      lv_text like t100-text,
      lv_success type i.
constants:c_chk_num like pa0001-ename value '0123456789.,'.
constants:c_chk_date like pa0001-ename value '0123456789/'.

*----------------------------------------------------------------------*
*  Parameter & Select-Options                                          *
*----------------------------------------------------------------------*
selection-screen begin of block with frame title text-001.
parameter : filename like rlgrap-filename obligatory.
parameters: pr_error like rlgrap-filename obligatory default 'D:\Open Data'.
parameters: pr_mode  type ctu_mode default 'N'  .
*    parameters: pr_co01  as checkbox  default 'X'.
selection-screen end of block 1.
*----------------------------------------------------------------------*
*  AT SELECTION-SCREEN
*----------------------------------------------------------------------*
at selection-screen on value-request for filename.
  perform f4_filename using filename.

at selection-screen on value-request for  pr_error.
  perform f4_filename using pr_error.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
  perform up_select.

end-of-selection.
*&---------------------------------------------------------------------*
*&      Form  F4_FILENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_PR_ERROR  text
*----------------------------------------------------------------------*
form f4_filename  using    p_filename.
  call function 'F4_FILENAME'
*    EXPORTING
*     PROGRAM_NAME        = SYST-CPROG
*     DYNPRO_NUMBER       = SYST-DYNNR
*     FIELD_NAME          =
    importing
      file_name           p_filename.
endform.                    " F4_FILENAME
*&---------------------------------------------------------------------*
*&      Form  UP_SELECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form up_select .
  clear:it_record,it_record[],it_aufnr,it_aufnr[].
  perform get_data.
  perform get_it_record.
  perform check_it_record.
  loop at it_record.
    if not it_record-message ' OK.'.
      move-corresponding it_record to it_err2.
      it_aufnr_tmp2-aufnr it_record-aufnr.
      collect it_aufnr_tmp2.
      append it_err2.
      clear it_err2.
    endif.
    read table it_err2 with key aufnr it_record-aufnr.
    if sy-subrc ne 0.
      it_aufnr-aufnr it_record-aufnr.
      collect it_aufnr.
    else.
      delete it_aufnr where  aufnr it_record-aufnr.
    endif.
    it_aufnr_tmp-aufnr it_record-aufnr.
    collect it_aufnr_tmp.
  endloop.
  describe table it_aufnr_tmp lines lv_total.
  describe table it_aufnr_tmp2 lines lv_fail.

  if not it_aufnr is initial.
    loop at it_aufnr.
      clear:it_err5 ,it_err5[],it_bdcmsg,it_bdcmsg[],it_return,it_return[], bdcdata, bdcdata[],it_aufnr-message.
      lv_tabix sy-tabix.
      loop at it_record into it_err5
          where aufnr it_aufnr-aufnr.
        append it_err5.
      endloop.
      read table it_record with key aufnr it_aufnr-aufnr.
      if sy-subrc eq 0.
        if pr_co01 'X'.
          perform process_bdc_header_co01.
        else.
          perform process_bdc_header.
        endif.
        call function 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
          tables
            imt_bdcmsgcoll it_bdcmsg
            ext_return     it_return.

        read table it_return with key type 'E'.
        if sy-subrc eq 0.
          it_aufnr-message it_return-message.
*          select single text into it_aufnr-message
*            from t100 where sprsl = it_bdcmsg-msgspra
*                              and   arbgb = it_bdcmsg-msgid
*                              and   msgnr = it_bdcmsg-msgnr.
*          concatenate it_aufnr-message it_bdcmsg-msgv1 it_bdcmsg-msgv2 it_bdcmsg-msgv3 it_bdcmsg-msgv4
*                    into it_aufnr-message separated by space.
*
*          CALL FUNCTION 'PI_BP_GET_MESSAGE_TEXT'
*            EXPORTING
*                 IV_MESSAGE_ID      = it_bdcmsg-msgid
*                 IV_MESSAGE_TYPE    = 'E'
*                 IV_MESSAGE_NUMBER  = it_bdcmsg-msgnr
*                 IV_MESSAGE_V1      = it_bdcmsg-msgv1
*                 IV_MESSAGE_V2      = it_bdcmsg-msgv2
*                 IV_MESSAGE_V3      = it_bdcmsg-msgv3
*                 IV_MESSAGE_V4      = it_bdcmsg-msgv4
*            IMPORTING
*                 EV_MESSAGE_TEXT    = lv_text.


        else.
          it_aufnr-message =  ' OK.'.
          "   concatenate it_aufnr-message  it_aufnr-aufnr ' is Posted' into it_aufnr-message.
        endif.
      endif.
      modify it_aufnr index lv_tabix.
    endloop.
  endif.

  clear it_err3.
  refresh it_err3.
  loop at it_aufnr where message ne ' OK.' .
    loop at it_record  where aufnr it_aufnr-aufnr .
      move-corresponding it_record to it_err3.
      it_err3-message it_aufnr-message.
      append it_err3.
      clear it_err3.
    endloop.
    lv_fail lv_fail + 1.
  endloop.
  append lines of it_err2 to it_err3.
  sort it_err3 by order ascending.


  if  not it_err3[] is initial.
    perform down_file .
    perform download_local.
  endif.
  lv_success lv_total lv_fail .
  write :/1 'Production Order Record.'.
  lv_msg lv_total.
  condense lv_msg  no-gaps.
  concatenate 'Total : '  lv_msg into lv_msg.
  write :/1  lv_msg.

  lv_msg lv_success.
  condense lv_msg  no-gaps.
  concatenate 'Success : '  lv_msg into lv_msg.
  write :/1  lv_msg.

  lv_msg lv_fail.
  condense lv_msg  no-gaps.
  concatenate 'Fail : '  lv_msg into lv_msg.
  write :/1  lv_msg.

endform.                    " UP_SELECT
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data .
  clear:itab,itab[] .
  data: lv_file  type string.

  lv_file filename.
  call function 'GUI_UPLOAD'
    exporting
      filename                lv_file
      filetype                'ASC'
      has_field_separator     'X'
    tables
      data_tab                itab
    exceptions
      file_open_error         1
      file_read_error         2
      no_batch                3
      gui_refuse_filetransfer 4
      invalid_type            5
      no_authority            6
      unknown_error           7
      bad_data_format         8
      header_not_allowed      9
      separator_not_allowed   10
      header_too_long         11
      unknown_dp_error        12
      access_denied           13
      dp_out_of_memory        14
      disk_full               15
      dp_timeout              16
      others                  17.
  if sy-subrc ne 0.
    clear : msg.
    concatenate 'Upload Filename ' filename  ' Is Error!' into msg.
    message msg type 'I'.
    exit.
  endif.
endform.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  GET_IT_RECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_it_record .
  data:lv_order type i.
  check not itab[] is initial.
  lv_order 1.
  loop at itab.
    move-corresponding itab to it_record.

    it_record-matnr it_record-matnr_c.
    replace  '-' with '' into it_record-matnr.
    replace  '-' with '' into it_record-matnr.
    replace  '-' with '' into it_record-matnr.
    condense  it_record-matnr no-gaps.

    translate it_record-sobkz_d to upper case.

*   perform process_num using it_record-gamng_c
*             changing it_record-gamng  .
    it_record-gamng it_record-gamng_c.

    perform change_char_to_data using it_record-gltrp_c
                     changing it_record-gltrp.

    perform add_pre_zero using it_record-aufnr
                          changing it_record-aufnr.


    it_record-matnr2 it_record-matnr2_c.
    replace  '-' with '' into it_record-matnr2.
    replace  '-' with '' into it_record-matnr2.
    replace  '-' with '' into it_record-matnr2.
    condense  it_record-matnr2 no-gaps.

*    perform process_num using it_record-menge_c
*              changing it_record-menge .

    it_record-menge it_record-menge_c.

    perform add_pre_zero using it_record-vornr_c
                          changing it_record-vornr.

    it_record-order lv_order.
    append it_record.
    lv_order lv_order + 1.
    clear : it_record.
  endloop.
  delete it_record where matnr space  and aufnr space.
endform.                    " GET_IT_RECORD
*&---------------------------------------------------------------------*
*&      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_dec    p_change.
  endif.
endform.                    " PROCESS_NUM
*&---------------------------------------------------------------------*
*&      Form  CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LV_DATE  text
*      <--P_IT_RECORD_VDATU  text
*----------------------------------------------------------------------*
form change_char_to_data  using    p_char
                          changing p_date.

  check p_char is not initial.
  if p_char cn c_chk_date.
    p_date '00000000'.
  else.
    call function 'OIU_ME_CHAR_TO_DATE'
      exporting
        i_char      p_char
      importing
        e_date      p_date
      exceptions
        error_found 4.
    if sy-subrc ne 0.
      p_date '00000000'.
      "p_date = sy-datum.
    endif.
  endif.
endform.                    "CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*&      Form  ADD_PRE_ZERO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_RECORD_CHARG  text
*      <--P_IT_RECORD_CHARG  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  CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form check_it_record .
  data: lv_flag2 type c,
        lv_bsart  like t161-bsart,
        lv_ebeln like ekko-ebeln,
        lv_lifnr like lfa1-lifnr,
        lv_zterm like t052-zterm,
        lv_inco1 like tinc-inco1,
        lv_waers like tcurc-waers,
        lv_ekorg like t024e-ekorg,
        lv_ekgrp like t024-ekgrp,
        lv_bukrs like t001-bukrs,
        lv_mtart like mara-mtart,
        lv_meins like t006-msehi,
        lv_werks like t001w-werks,
        lv_posid like prps-posid,
        lv_postp like t418-postp,
        lv_posnr type i,
        lv_i type i,
        lv_j type i,
        lv_aufnr like afko-aufnr,
        lv_lgort like t001l-lgort  .

  clear: lv_flag2.
  sort it_record by order  .
  lv_posnr 10.
  loop at it_record.
    lv_tabix sy-tabix.
    clear:lv_flag2,it_record-message.
    if  lv_aufnr <> it_record-aufnr.
      lv_posnr 10.
    endif.
    lv_aufnr =  it_record-aufnr.
    "Material Number
    select single mtart into lv_mtart
        from mara
        where matnr it_record-matnr.
    if sy-subrc <> 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Material Number Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.

    "WBS Element
    if pr_co01 ne 'X'.
      select single pspnr into lv_posid
          from prps
          where posid it_record-posid.
      if sy-subrc <> 0.
        lv_flag2 'X'.
        concatenate it_record-message  ' WBS Element Not Exists.'
               into it_record-message.
        modify it_record index lv_tabix.
      endif.
    endif.
    "Production plant
    select single werks into  lv_werks
       from t001w
       where werks it_record-werks.
    if sy-subrc <> 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Production plant Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Order type
    select single werks into  lv_werks
       from t399x
       where werks it_record-werks
          and auart it_record-auart.
    if sy-subrc <> 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Order type Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.

    "Order Number
    select single aufnr into it_record-aufnr
          from afko
          where aufnr it_record-aufnr.
    if sy-subrc eq 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Order Number Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Total Qty
    if it_record-gamng 0.
      lv_flag2 'X'.
      concatenate it_record-message
        ' Total Qty = 0 is error.' into it_record-message.
      modify it_record index lv_tabix.
    elseif it_record-gamng < 0.
      lv_flag2 'X'.
      concatenate it_record-message
        ' Total Qty is negative or Total Qty not is number.'
        into it_record-message.
      modify it_record index lv_tabix.
    endif.

    "Finish Date
    if it_record-gltrp '00000000'.
      lv_flag2 'X'.
      concatenate it_record-message  ' Finish Date Format MM/dd/yyyy.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.

    "Item Number
*        if it_record-posnr is initial.
*            lv_flag2 = 'X'.
*            concatenate it_record-message  ' Item Number Error.'
*                   into it_record-message.
*            modify it_record index lv_tabix.
*        endif.

    "Component Number
    if not it_record-matnr2 is initial.
      select single mtart into lv_mtart
          from mara
          where matnr it_record-matnr2.
      if sy-subrc <> 0.
        lv_flag2 'X'.
        concatenate it_record-message  ' Component Number Not Exists.'
               into it_record-message.
        modify it_record index lv_tabix.
      else.
*              if lv_mtart = 'ZNON'.
*                lv_flag2 = 'X'.
*                concatenate it_record-message  ' Component Number Material Type IS ZNON'
*                      into it_record-message.
*                modify it_record index lv_tabix.
*              endif.
      endif.


      "Requirement Quantity
      if it_record-menge 0.
        lv_flag2 'X'.
        concatenate it_record-message
          ' Requirement Quantity = 0 is error.' into it_record-message.
        modify it_record index lv_tabix.
      elseif it_record-menge < 0.
        lv_flag2 'X'.
        concatenate it_record-message
          ' Requirement Quantity is negative or Requirement Quantity not is number.'
          into it_record-message.
        modify it_record index lv_tabix.
      endif.

      "Item Category
      select  single postp into lv_postp
           from  t418
           where postp it_record-postp.
      if sy-subrc <> 0.
        lv_flag2 'X'.
        concatenate it_record-message  ' Item Category Not Exists.'
               into it_record-message.
        modify it_record index lv_tabix.
      endif.

      "Operation
      if it_record-vornr is initial.
        lv_flag2 'X'.
        concatenate it_record-message  ' Operation Not Exists.'
               into it_record-message.
        modify it_record index lv_tabix.
      endif.

      "Storage location
      if it_record-lgort ne space .
        select single lgort  into lv_lgort
            from t001l
            where lgort  it_record-lgort
              and werks  it_record-werks.
        if sy-subrc <> 0.
          lv_flag2 'X'.
          concatenate it_record-message  ' Storage location Not Exists.'
                 into it_record-message.
          modify it_record index lv_tabix.
        endif.
      endif.

      "Special Stock
      if it_record-sobkz_d ne space .
        if it_record-sobkz_d <> '1' and it_record-sobkz_d <> '2'
         and it_record-sobkz_d <> '2' and it_record-sobkz_d <> '4'.
          lv_flag2 'X'.
          concatenate it_record-message  ' Special Stock Not Exists.'
                 into it_record-message.
          modify it_record index lv_tabix.
        endif.
      endif.


      it_record-posnr_c  lv_posnr.
      condense it_record-posnr_c no-gaps.
      lv_i strlenit_record-posnr_c ).
      lv_j lv_i.
      if lv_j > 0.
        overlay it_record-posnr+0(lv_jwith '0000' only space.
      else.
      endif.
      if lv_i ne 0.
        it_record-posnr+lv_j(lv_iit_record-posnr_c.
      endif.
      it_record-posnr_c it_record-posnr.
      add 10 to lv_posnr .
      modify it_record index lv_tabix.
    endif.

    if lv_flag2 <> 'X'.
      it_record-message ' OK.'.
      modify it_record index lv_tabix.
    endif.
  endloop.
endform.                    " CHECK_IT_RECORD
*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
form bdc_dynpro using program dynpro.
  clear bdcdata.
  bdcdata-program  program.
  bdcdata-dynpro   dynpro.
  bdcdata-dynbegin 'X'.
  append bdcdata.
endform.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
form bdc_field using fnam fval.
  clear bdcdata.
  bdcdata-fnam fnam.
  bdcdata-fval fval.
  append bdcdata.
endform.                    "BDC_FIELD
*&---------------------------------------------------------------------*
*&      Form  PROCESS_BDC_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_bdc_header .

  perform bdc_dynpro     using 'SAPLCOKO1' '0240'.          "CO01 diff
  perform bdc_field      using 'BDC_CURSOR'  'AUFPAR-PP_AUFART'.
  perform bdc_field      using 'AFPOD-PROJN' it_record-posid. "CO01 diff
  perform bdc_field      using 'CAUFVD-MATNR' it_record-matnr.
  perform bdc_field      using 'CAUFVD-WERKS' it_record-werks.
  perform bdc_field      using 'AUFPAR-PP_AUFART' it_record-auart.
  perform bdc_field      using 'CAUFVD-AUFNR' it_record-aufnr.
  perform bdc_field      using 'BDC_OKCODE'  '/00'.

  perform bdc_dynpro      using 'SAPLCOKO1' '0115'.
  perform bdc_field       using 'BDC_OKCODE' '/00'.
  perform bdc_field       using 'BDC_CURSOR' 'CAUFVD-GLTRP'.
  perform bdc_field       using 'CAUFVD-GLTRP' it_record-gltrp_c.
  perform bdc_field       using 'CAUFVD-GSTRP' it_record-gltrp_c.        "add by Lisa_wong 11/05/2012
  perform bdc_field       using 'CAUFVD-GAMNG' it_record-gamng_c..
*    perform bdc_field       using 'CAUFVD-GMEIN' 'PC'.
  perform bdc_field       using 'CAUFVD-TERKZ'  '3'.
*    perform bdc_field       using 'CAUFVD-FHORI'  '000'.

**" PP11
  if  it_record-auart+2(1'1'.
*        PERFORM bdc_dynpro     USING 'SAPLCOSD' '0310'.
*        PERFORM bdc_field      USING 'BDC_OKCODE'  '=CANC'.
  else.
*        PERFORM bdc_dynpro     USING 'SAPLCOSD' '0310'.   " PP12 no popup
*        PERFORM bdc_field      USING 'BDC_OKCODE' '=OPT2'.
  endif.

  if not it_record-matnr2 is initial.
    perform bdc_dynpro     using 'SAPLCOKO1' '0115'.
    perform bdc_field      using 'BDC_OKCODE'  '=KPU2'.
    perform bdc_field       using 'BDC_CURSOR' 'CAUFVD-GLTRP'.
    perform bdc_field       using 'CAUFVD-GLTRP' it_record-gltrp_c.
    perform bdc_field       using 'CAUFVD-GSTRP' it_record-gltrp_c.        "add by Lisa_wong 11/05/2012
    perform bdc_field       using 'CAUFVD-GAMNG' it_record-gamng_c..
*    perform bdc_field       using 'CAUFVD-GMEIN' 'PC'.
    perform bdc_field       using 'CAUFVD-TERKZ'  '3'.
*    perform bdc_field       using 'CAUFVD-FHORI'  '000'.
  endif.

  "PP11 select \ delete All
  if  it_record-auart+2(1'1'.
*      PERFORM bdc_dynpro     USING 'SAPLCOMK' '0120'.
*      PERFORM bdc_field      USING 'BDC_SUBSCR' 'SAPLCOMK                                0050BUTTONS'.
*      PERFORM bdc_field      USING 'BDC_OKCODE'  '=AMAK'.
*
*      PERFORM bdc_dynpro     USING 'SAPLCOMK' '0120'.
*      PERFORM bdc_field      USING 'BDC_SUBSCR' 'SAPLCOMK                                0050BUTTONS'.
*      PERFORM bdc_field      USING 'BDC_OKCODE'  '=DEL'.
  endif.

  if not it_record-matnr2 is initial.
    perform process_component.
  endif.

  if not it_record-matnr2 is initial.
    perform bdc_dynpro     using 'SAPLCOMK' '0120'.
    perform bdc_field      using 'BDC_OKCODE'  '=FREI'.

    perform bdc_dynpro     using 'SAPLCOMK' '0120'.
    perform bdc_field      using 'BDC_OKCODE'  '=BU'.
  else.
    perform bdc_dynpro     using 'SAPLCOKO1' '0115'.
    perform bdc_field      using 'BDC_OKCODE'  '=FREI'.

    perform bdc_dynpro      using 'SAPLCOKO1' '0115'.
    perform bdc_field      using 'BDC_OKCODE'  '=BU'.
  endif.


  call transaction 'CO10'                                   "CO01 diff
           using bdcdata
           mode pr_mode "Background performance
           update 'S' "local updata
           messages into it_bdcmsg. "all message table

endform.                    " PROCESS_BDC_HEADER
*&---------------------------------------------------------------------*
*&      Form  PROCESS_BDC_HEADER_CO01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_bdc_header_co01 .
  perform bdc_dynpro      using 'SAPLCOKO1' '0100'.
  perform bdc_field      using 'BDC_CURSOR'  'AUFPAR-PP_AUFART'.
  perform bdc_field      using 'CAUFVD-MATNR' it_record-matnr.
  perform bdc_field      using 'CAUFVD-WERKS' it_record-werks.
  perform bdc_field      using 'AUFPAR-PP_AUFART' it_record-auart.
  perform bdc_field      using 'CAUFVD-AUFNR' it_record-aufnr.
  perform bdc_field      using 'BDC_OKCODE'  '/00'.

  perform bdc_dynpro      using 'SAPLCOKO1' '0115'.
  perform bdc_field       using 'BDC_OKCODE' '/00'.
  perform bdc_field       using 'BDC_CURSOR' 'CAUFVD-GLTRP'.
  perform bdc_field       using 'CAUFVD-GLTRP' it_record-gltrp_c.
  perform bdc_field       using 'CAUFVD-GAMNG' it_record-gamng_c..
*    perform bdc_field       using 'CAUFVD-GMEIN' 'PC'.
  perform bdc_field       using 'CAUFVD-TERKZ'  '2'.
*    perform bdc_field       using 'CAUFVD-FHORI'  '000'.

**" PP11
  if  it_record-auart+2(1'1'.
*        PERFORM bdc_dynpro     USING 'SAPLCOSD' '0310'.
*        PERFORM bdc_field      USING 'BDC_OKCODE'  '=CANC'.
  else.
*        PERFORM bdc_dynpro     USING 'SAPLCOSD' '0310'.   " PP12 no popup
*        PERFORM bdc_field      USING 'BDC_OKCODE' '=OPT2'.
  endif.

  if not it_record-matnr2 is initial.
    perform bdc_dynpro     using 'SAPLCOKO1' '0115'.
    perform bdc_field      using 'BDC_OKCODE'  '=KPU2'.
  endif.

  "PP11 select \ delete All
  if  it_record-auart+2(1'1'.
*      PERFORM bdc_dynpro     USING 'SAPLCOMK' '0120'.
*      PERFORM bdc_field      USING 'BDC_SUBSCR' 'SAPLCOMK                                0050BUTTONS'.
*      PERFORM bdc_field      USING 'BDC_OKCODE'  '=AMAK'.
*
*      PERFORM bdc_dynpro     USING 'SAPLCOMK' '0120'.
*      PERFORM bdc_field      USING 'BDC_SUBSCR' 'SAPLCOMK                                0050BUTTONS'.
*      PERFORM bdc_field      USING 'BDC_OKCODE'  '=DEL'.
  endif.

  if not it_record-matnr2 is initial.
    perform process_component.
  endif.

  if not it_record-matnr2 is initial.
    perform bdc_dynpro     using 'SAPLCOMK' '0120'.
    perform bdc_field      using 'BDC_OKCODE'  '=FREI'.

    perform bdc_dynpro     using 'SAPLCOMK' '0120'.
    perform bdc_field      using 'BDC_OKCODE'  '=BU'.
  else.
    perform bdc_dynpro     using 'SAPLCOKO1' '0115'.
    perform bdc_field      using 'BDC_OKCODE'  '=FREI'.

    perform bdc_dynpro      using 'SAPLCOKO1' '0115'.
    perform bdc_field      using 'BDC_OKCODE'  '=BU'.
  endif.

  call transaction 'CO01'
           using bdcdata
           mode pr_mode "Background performance
           update 'S' "local updata
           messages into it_bdcmsg. "all message table
endform.                    " PROCESS_BDC_HEADER_CO01


*&---------------------------------------------------------------------*
*&      Form  PROCESS_COMPONENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_component .
  data:lv_cur type value 0,
       lv_mod type i,
       lv_fname(30type c,
       lv_temp(2type c,
       lv_len type i.
  lv_mod linesit_err5 ) .
  loop at it_err5.
    lv_cur lv_cur + 1.
    move lv_cur to lv_temp.
    lv_len strlenlv_temp  ).
    if lv_len 1.
      concatenate '0' lv_temp into lv_temp.
    endif.
    perform bdc_dynpro      using 'SAPLCOMK' '0120'.
    perform bdc_field using 'BDC_SUBSCR' 'SAPLCOMK                                0050BUTTONS'.
    concatenate 'RESBD-POSNR(' lv_temp ')' into lv_fname.
    perform bdc_field       using lv_fname it_err5-posnr.
    concatenate 'RESBD-MATNR(' lv_temp ')' into lv_fname.
    perform bdc_field       using lv_fname it_err5-matnr2.
    concatenate 'RESBD-MENGE(' lv_temp ')' into lv_fname.
    perform bdc_field       using lv_fname it_err5-menge_c.
    concatenate 'RESBD-POSTP(' lv_temp ')' into lv_fname.
    perform bdc_field       using lv_fname it_err5-postp.
    concatenate 'RESBD-VORNR(' lv_temp ')' into lv_fname.
    perform bdc_field       using lv_fname it_err5-vornr.
    concatenate 'RESBD-LGORT(' lv_temp ')' into lv_fname.
    perform bdc_field       using lv_fname it_err5-lgort.
    concatenate 'RESBD-RGEKZ(' lv_temp ')' into lv_fname.
    perform bdc_field       using lv_fname  ''."it_err5-rgekz.
    concatenate 'RESBD-SOBKZ_D(' lv_temp ')' into lv_fname.
    perform bdc_field       using lv_fname it_err5-sobkz_d.
    perform bdc_field       using 'BDC_OKCODE' '/00'.
*
    perform bdc_dynpro      using 'SAPLCOMD' '0110'.
    perform bdc_field       using 'RESBD-MATNR' it_err5-matnr2.
    perform bdc_field       using 'RESBD-POSNR' it_err5-posnr.
    perform bdc_field       using 'RESBD-LGORT' it_err5-lgort.
    perform bdc_field       using 'RESBD-MENGE' it_err5-menge_c.
    perform bdc_field       using 'RESBD-RGEKZ' ''.
*      PERFORM bdc_field       USING 'RESBD-SPLKZ' ''.
    perform bdc_field       using 'BDC_OKCODE' '=FREI'.

    lv_mod lv_cur mod 13.
    if lv_mod 0.
      clear:lv_cur.
      lv_cur 1.
      perform bdc_dynpro      using 'SAPLCOMK' '0120'.
      perform bdc_field       using 'BDC_OKCODE' '=P+'.
    endif.
  endloop.
endform.                    " PROCESS_COMPONENT
*&---------------------------------------------------------------------*
*&      Form  DOWN_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form down_file .
  clear:it_down,it_down[].
  concatenate
            'Material'
            'WBS Element'
            'Production plant'
            'Order type'
            'Order Number'
            'Total Qty'
            'Finish Date'
            'Item'
            'Component Number'
            'Requirement Quantity'
            'Item Category'
            'Operation'
            'Storage location'
            'Backflush'
            'Special Stock'
            'Message'
            into it_down separated by  cl_abap_char_utilities=>horizontal_tab.
  append it_down.
  loop at it_err3.
    move-corresponding it_err3 to it_tab.
    concatenate it_tab-matnr_c
                it_tab-posid
                it_tab-werks
                it_tab-auart
                it_tab-aufnr
                it_tab-gamng_c
                it_tab-gltrp_c
                it_tab-posnr_c
                it_tab-matnr2_c
                it_tab-menge_c
                it_tab-postp
                it_tab-vornr_c
                it_tab-lgort
                it_tab-rgekz
                it_tab-sobkz_d
                it_tab-message
                into it_down separated by cl_abap_char_utilities=>horizontal_tab.
    condense it_down .
    append it_down .
  endloop.
endform.                    " DOWN_FILE
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_LOCAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form download_local .
  data: lv_filename type string.

  perform get_file.
  lv_filename gv_file.

  call function 'GUI_DOWNLOAD'
    exporting
      filename                lv_filename
      filetype                'ASC'
      write_field_separator   'X'
    tables
      data_tab                it_down
    exceptions
      file_write_error        1
      no_batch                2
      gui_refuse_filetransfer 3
      invalid_type            4
      no_authority            5
      unknown_error           6
      header_not_allowed      7
      separator_not_allowed   8
      filesize_not_allowed    9
      header_too_long         10
      dp_error_create         11
      dp_error_send           12
      dp_error_write          13
      unknown_dp_error        14
      access_denied           15
      dp_out_of_memory        16
      disk_full               17
      dp_timeout              18
      file_not_found          19
      dataprovider_exception  20
      control_flush_error     21
      others                  22.
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
          with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.
endform.                    " DOWNLOAD_LOCAL
*&---------------------------------------------------------------------*
*&      Form  GET_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_file .
  data: wa_key(30type c.
  data: lv_i type i.
  data: lv_c(1type c.
  data: wa_date(8type c.
  data: wa_time like sy-uzeit.
  data: lv_char type c.
  wa_date sy-datum.
  wa_time =  sy-uzeit.
  concatenate 'ProdOrder' wa_date wa_time  into wa_key.
  concatenate wa_key '.txt' into wa_key.

  lv_i strlenpr_error ).
  lv_i lv_i 1 .
  if lv_i > 1.
    lv_c pr_error+lv_i(1).
  endif.
*    if p_test = 'X'.
*      lv_char = '\' .
*    else.
*      lv_char = '/' .
*    endif.
  lv_char '\' .
  if lv_c eq lv_char.
    concatenate pr_error wa_key into gv_file.
  else.
    concatenate pr_error lv_char wa_key into gv_file.
  endif.
endform.                    " GET_FILE
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值