TR转TO L_TO_CREATE_TR

1.只传lt_fun_it_trite,lt_ltak和lt_ltap_vb都不用传的

2.不能指定特殊库存的Bin位,通过增强解决

在include LL03AFAS 11行

FORM SONUM_SETZEN USING VALUE(P_SONUM).

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form SONUM_SETZEN, Start                                                                                                                          A

*$*$-Start: (1)---------------------------------------------------------------------------------$*$*

ENHANCEMENT 2  ZWM_DELAWARE_TO_CREATE.    "active version

data:

      ls_data  type ZWM_S_DELAWARE_TO_CREATE,

      lt_data  type  TABLE OF ZWM_S_DELAWARE_TO_CREATE.

IMPORT t_data = lt_data from memory id 'ZWM_DELAWARE_TO_CREATE'. "from function ZWM_DELAWARE_TO_CREATE

IF lt_data IS NOT INITIAL.

    IF SOBKZ[] IS INITIAL.

    READ TABLE lt_data INTO ls_data INDEX 1.

    SOBKZ-sign = 'I'.

    SOBKZ-OPTION = 'EQ'.

    SOBKZ-low = ls_data-SOBKZ.

    APPEND SOBKZ.

  ENDIF.

  endif.

ENDENHANCEMENT.

 

demo

function zwm_xxx_to_create .

*"----------------------------------------------------------------------

*"*"Local Interface:

*"  IMPORTING

*"     VALUE(IV_LGNUM) TYPE  LGNUM

*"     VALUE(IV_KVQUI) TYPE  CHAR1 OPTIONAL

*"     VALUE(IT_DATA) TYPE  ZWM_T_XXX_TO_CREATE

*"  EXPORTING

*"     VALUE(RTYPE) TYPE  BAPI_MTYPE

*"     VALUE(RTMSG) TYPE  BAPI_MSG

*"     VALUE(RTTAB) TYPE  ZWM_T_XXX_TO_CREATE

*"----------------------------------------------------------------------

  zfmparavalsave1 'ZWM_XXX_TO_CREATE'.

  zfmparavalsave2 'B'.

 

  if iv_lgnum is initial.

    rtype = 'E'.

    rtmsg = 'input IV_LGNUM'.

    zfmparavalsave2 'R'.

    return.

  endif.

  data ls_data like zwm_s_xxx_to_create.

  """"TR

  data:begin of ly_tbnum,

         tbnum like ltbp-tbnum,

       end of ly_tbnum,

       lt_tbnum like table of ly_tbnum,

       ls_tbnum like ly_tbnum.

 

  """"OBD

  data:begin of ly_vbeln,

         vbeln like ltak-vbeln,

       end of ly_vbeln,

       lt_vbeln like table of ly_vbeln,

       ls_vbeln like ly_vbeln.

 

  """"""TO

  data:begin of ly_tanum,

         tanum like ltak-tanum,

       end of ly_tanum,

       lt_tanum like table of ly_tanum,

       ls_tanum like ly_tanum.

 

 

  data:lt_fun_it_delit  type l03b_delit_t,

       lt_ltap_conf     like table of ltap_conf,

       ls_ltap_conf     like ltap_conf,

       wa_fun_it_delit  like line of lt_fun_it_delit,

       lt_fun_wmgrp_msg like table of wmgrp_msg,

       lt_fun_it_trite  type l03b_trite_t,

       wa_fun_it_trite  like line of lt_fun_it_trite,

       lv_msg(255).

 

*create to

  data lv_lgnum       type ltak-lgnum.

  data lv_bwlvs       type ltak-bwlvs.

  data lv_betyp       type ltak-betyp.

  data lv_benum       type ltak-benum.

  data lv_tanum       type ltak-tanum.

  data:

    lt_ltap_creat type standard table of ltap_creat,

    ls_ltak       type ltak_vb,

    lt_ltak       type table of ltak_vb,

    ls_lqua       type lqua,

    lt_ltap       type table of ltap_vb,

    ls_ltap       type ltap_vb.

 

  lv_lgnum = iv_lgnum.

 

  loop at it_data into ls_data.

    perform frm_matn1_input changing ls_data-matnr.

    if sy-tcode ne 'SE37'.

      perform frm_cunit_in changing ls_data-altme.

      modify it_data from ls_data.

    endif.

    if ls_data-tbnum is not initial.

      ls_tbnum-tbnum = ls_data-tbnum.

      append ls_tbnum to lt_tbnum.

    endif.

    if ls_data-vbeln is not initial.

      ls_vbeln-vbeln = ls_data-vbeln.

      append ls_vbeln to lt_vbeln.

    endif.

  endloop.

 

  sort lt_vbeln.

  delete adjacent duplicates from lt_vbeln comparing all fields.

 

  sort lt_tbnum.

  delete adjacent duplicates from lt_tbnum comparing all fields.

 

  loop at lt_tbnum into ls_tbnum.

    clear:lt_ltak[],lt_ltak,lt_ltap,lt_ltap[],lt_fun_it_trite[],lv_tanum,lt_tanum,ls_ltak.

    ls_ltak-lgnum = ls_data-lgnum.

    ls_ltak-tbnum = ls_data-tbnum.

    "lt_ltak-vbeln = t_data-vbeln.

    select single trart into @data(lv_trart) from ltbk where tbnum = @ls_data-tbnum and lgnum = @ls_data-lgnum.

    append ls_ltak to lt_ltak.

    loop at it_data into data(wa_tab1) where tbnum = ls_tbnum-tbnum.

      clear:ls_ltap,wa_fun_it_trite.

      select single lgort into @data(lv_lgort) from ltbp where tbnum = @ls_data-tbnum and lgnum = @ls_data-lgnum and tbpos = @ls_data-tbpos.

      wa_fun_it_trite-tbpos = wa_tab1-tbpos."     TR??

      "wa_fun_it_trite-anfme = t_data-nsolm."     ????

 

      wa_fun_it_trite-altme = wa_tab1-altme."

      if sy-tcode ne 'SE37'.

        perform frm_cunit_in changing wa_fun_it_trite-altme.

      endif.

      wa_fun_it_trite-nltyp = wa_tab1-nltyp."      ??????

      wa_fun_it_trite-nlpla = wa_tab1-nlpla."       ????

      wa_fun_it_trite-nlber = wa_tab1-nlber.        "??????

      wa_fun_it_trite-vltyp = wa_tab1-vltyp."      ??????

      wa_fun_it_trite-vlpla = wa_tab1-vlpla.       " ????

      wa_fun_it_trite-vlber = wa_tab1-vlber.                 "??????

 

 

 

      ls_ltap-tbpos = wa_tab1-tbpos.

      ls_ltap-matnr = wa_tab1-matnr.

      ls_ltap-werks = wa_tab1-werks.

      ls_ltap-bestq = wa_tab1-bestq.

      ls_ltap-sobkz = wa_tab1-sobkz.

      ls_ltap-altme = wa_tab1-altme.

 

      select single xchpf from mara into @data(lv_xchpf) where matnr = @wa_tab1-matnr and xchpf = 'X'.

      if sy-subrc eq 0.

        ls_ltap-charg = wa_tab1-charg.

        wa_fun_it_trite-charg = wa_tab1-charg.

      endif.

 

      if lv_trart = 'A'."DOWN

        ls_ltap-vltyp = wa_tab1-vltyp."      ?????? source

        ls_ltap-vlpla = wa_tab1-vlpla.       " ????

        ls_ltap-vlber = wa_tab1-vlber.                 "??????

        ls_ltap-vsolm = wa_tab1-vsolm.

        ls_ltap-vistm = wa_tab1-vistm.

        wa_fun_it_trite-anfme = wa_tab1-vistm.

        select single * from lqua into ls_lqua

            where lgnum = lv_lgnum

            and matnr = wa_tab1-matnr

            and werks = wa_tab1-werks

            and lgort = lv_lgort

            and sobkz = wa_tab1-sobkz

            "and sonum = iv_sonum

            and bestq = wa_tab1-bestq

            and lgtyp = wa_tab1-vltyp and lgpla = wa_tab1-vlpla "chenyl for  25.10.2020 00:47:57

            and verme > 0

            and skzsi = ' '.

        ls_ltap-vlqnr = ls_lqua-lqnum.

      elseif lv_trart = 'E'. "UP

        ls_ltap-nltyp = wa_tab1-nltyp."      ??????

        ls_ltap-nlpla = wa_tab1-nlpla."       ????

        ls_ltap-nlber = wa_tab1-nlber.        "??????

        ls_ltap-nsolm = wa_tab1-nsolm.

        ls_ltap-nistm = wa_tab1-nistm.

        wa_fun_it_trite-anfme = wa_tab1-nistm.

        select single * from lqua into ls_lqua

            where lgnum = lv_lgnum

            and matnr = wa_tab1-matnr

            and werks = wa_tab1-werks

            and lgort = lv_lgort

            and sobkz = wa_tab1-sobkz

            "and sonum = iv_sonum

             and bestq = wa_tab1-bestq

            and lgtyp = wa_tab1-nltyp and lgpla = wa_tab1-nlpla "chenyl for  25.10.2020 00:47:57

            and verme > 0

            and skzsi = ' '.

        ls_ltap-nlqnr = ls_lqua-lqnum.

      endif.

      append ls_ltap to lt_ltap.

      append wa_fun_it_trite to lt_fun_it_trite.

    endloop.

 

    export t_data = it_data to memory id 'ZWM_XXX_TO_CREATE'. "FOR enhancement ZWM_XXX_TO_FROM_TR

 

    call function 'L_TO_CREATE_TR'

      exporting

        i_nidru                        = 'X' " do not print

        i_lgnum                        = iv_lgnum "

        i_tbnum                        = ls_tbnum-tbnum "

*       i_squit                        = 'X'

*       i_bname                        = sy-uname

        it_trite                       = lt_fun_it_trite[]

      importing

        e_tanum                        = lv_tanum

*       E_TEILK                        =

      tables

        t_ltak                         = lt_ltak

        t_ltap_vb                      = lt_ltap

        t_wmgrp_msg                    = lt_fun_wmgrp_msg

      exceptions

        error_message                  = 16

        foreign_lock                   = 1

        qm_relevant                    = 2

        tr_completed                   = 3

        xfeld_wrong                    = 4

        ldest_wrong                    = 5

        drukz_wrong                    = 6

        tr_wrong                       = 7

        squit_forbidden                = 8

        no_to_created                  = 9

        update_without_commit          = 10

        no_authority                   = 11

        preallocated_stock             = 12

        partial_transfer_req_forbidden = 13

        input_error                    = 14

        others                         = 15.

 

    if sy-subrc = 0.

      call function 'BAPI_TRANSACTION_COMMIT'

        exporting

          wait = 'X'.

      data(lv_pk) = 'X'.

      "批量更新

      ls_tanum-tanum = lv_tanum.

      append ls_tanum to lt_tanum.

      clear:ls_tanum.

      select * from ltap into corresponding fields of table lt_ltap where tanum = lv_tanum and lgnum = iv_lgnum.

      loop at it_data into wa_tab1 where tbnum = ls_tbnum-tbnum.

        wa_tab1-tanum = lv_tanum.

        clear:ls_ltap.

        read table lt_ltap into ls_ltap with key matnr =  wa_tab1-matnr tbpos = wa_tab1-tbpos werks = wa_tab1-werks.

        wa_tab1-tapos = ls_ltap-tapos.

        wa_tab1-rtype = 'S'.

        wa_tab1-rtmsg = 'Success'.

        modify it_data from wa_tab1.

      endloop.

 

    else.

 

*      if sy-subrc = 3.

*        rtype = 'S'.

*      else.

*        rtype = 'E'.

*      endif.

      rtype = 'E'.

      call function 'BAPI_TRANSACTION_ROLLBACK'.

 

      message id sy-msgid type 'S' number sy-msgno

      with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4

      into  rtmsg.

      loop at it_data into ls_data where tbnum = ls_tbnum-tbnum.

        ls_data-rtmsg = rtmsg.

        ls_data-rtype = rtype.

        modify it_data from ls_data.

      endloop.

    endif.

 

  endloop.

 

 

*    set update task local.

 

  loop at lt_vbeln into ls_vbeln.

    clear:lt_ltak[],lt_ltak,lt_ltap,lt_ltap[],wa_fun_it_delit,lt_fun_it_delit,lv_tanum,lt_tanum,ls_ltak.

    ls_ltak-lgnum = ls_data-lgnum.

    ls_ltak-tbnum = ls_data-tbnum.

    ls_ltak-vbeln = ls_data-vbeln.

    append ls_ltak to lt_ltak.

    loop at it_data into data(wa_tab2) where vbeln = ls_vbeln-vbeln.

      clear:lt_ltap,wa_fun_it_delit.

      wa_fun_it_delit-posnr = wa_tab2-posnr."     TR??

      "wa_fun_it_delit-anfme = t_data-nsolm."     ????

      wa_fun_it_delit-anfme = wa_tab2-vistm.

      wa_fun_it_delit-altme = wa_tab2-altme."

      if sy-tcode ne 'SE37'.

        perform frm_cunit_in changing wa_fun_it_delit-altme.

      endif.

      wa_fun_it_delit-nltyp = wa_tab2-nltyp."      ??????

      wa_fun_it_delit-nlpla = wa_tab2-nlpla."       ????

      wa_fun_it_trite-nlber = wa_tab2-nlber.        "??????

      wa_fun_it_delit-vltyp = wa_tab2-vltyp."      ??????

      wa_fun_it_delit-vlpla = wa_tab2-vlpla.       " ????

      wa_fun_it_delit-vlber = wa_tab2-vlber.                 "??????

 

      select single xchpf from mara into @data(lv_xchpf1) where matnr = @wa_tab2-matnr and xchpf = 'X'.

      if sy-subrc eq 0.

        ls_ltap-charg = wa_tab2-charg.

        wa_fun_it_delit-charg = wa_tab2-charg.

      endif.

 

      append wa_fun_it_delit to lt_fun_it_delit.

      ls_ltap-tbpos = wa_tab2-tbpos.

      ls_ltap-matnr = wa_tab2-matnr.

      ls_ltap-werks = wa_tab2-werks.

      ls_ltap-bestq = wa_tab2-bestq.

      ls_ltap-sobkz = wa_tab2-sobkz.

      ls_ltap-altme = wa_tab2-altme.

      ls_ltap-vltyp = wa_tab2-vltyp."      ?????? source

      ls_ltap-vlpla = wa_tab2-vlpla.       " ????

      ls_ltap-vlber = wa_tab2-vlber.                 "??????

      ls_ltap-vsolm = wa_tab2-vsolm.

      ls_ltap-vistm = wa_tab2-vistm.

      select single * from lqua into ls_lqua

          where lgnum = lv_lgnum

          and matnr = wa_tab2-matnr

          and werks = wa_tab2-werks

          and lgort = lv_lgort

          and sobkz = wa_tab2-sobkz

          "and sonum = iv_sonum

          and bestq = wa_tab2-bestq

          and lgtyp = wa_tab2-vltyp and lgpla = wa_tab2-vlpla "chenyl for  25.10.2020 00:47:57

          and verme > 0

          and skzsi = ' '.

      ls_ltap-vlqnr = ls_lqua-lqnum.

      append ls_ltap to lt_ltap.

    endloop.

 

    export t_data = it_data to memory id 'ZWM_XXX_TO_CREATE'. "FOR enhancement ZWM_XXX_TO_FROM_TR

 

    call function 'L_TO_CREATE_DN'

      exporting

        i_nidru                        = 'X'

        i_lgnum                        = iv_lgnum "

        i_vbeln                        = ls_vbeln-vbeln "

        i_commit_work                  = 'X'

*       i_squit                        = 'X'

*       i_bname                        = sy-uname

        it_delit                       = lt_fun_it_delit[]

      importing

        e_tanum                        = lv_tanum

*       E_TEILK                        =

      tables

*       t_ltak                         = lt_ltak

        t_ltap_vb                      = lt_ltap

        t_wmgrp_msg                    = lt_fun_wmgrp_msg

      exceptions

        error_message                  = 16

        foreign_lock                   = 1

        qm_relevant                    = 2

        tr_completed                   = 3

        xfeld_wrong                    = 4

        ldest_wrong                    = 5

        drukz_wrong                    = 6

        tr_wrong                       = 7

        squit_forbidden                = 8

        no_to_created                  = 9

        update_without_commit          = 10

        no_authority                   = 11

        preallocated_stock             = 12

        partial_transfer_req_forbidden = 13

        input_error                    = 14

        others                         = 15.

 

    if sy-subrc = 0.

      call function 'BAPI_TRANSACTION_COMMIT'

        exporting

          wait = 'X'.

      "批量更新

      ls_tanum-tanum = lv_tanum.

      append ls_tanum to lt_tanum.

      clear:ls_tanum.

      select * from ltap into corresponding fields of table lt_ltap where tanum = lv_tanum and lgnum = iv_lgnum.

      loop at it_data into ls_data where vbeln = ls_vbeln-vbeln.

        ls_data-tanum = lv_tanum.

        clear:ls_ltap.

        read table lt_ltap into ls_ltap with key matnr =  ls_data-matnr posnr = ls_data-posnr werks = ls_data-werks.

        ls_data-tapos = ls_ltap-tapos.

        ls_data-rtype = 'S'.

        ls_data-rtmsg = 'Success'.

        modify it_data from ls_data.

      endloop.

 

    else.

*      if sy-subrc = 3.

*        rtype = 'S'.

*      else.

*        rtype = 'E'.

*      endif.

      rtype = 'E'.

      call function 'BAPI_TRANSACTION_ROLLBACK'.

      "rtype = 'E'.

      message id sy-msgid type 'S' number sy-msgno

      with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4

      into  rtmsg.

      loop at it_data into ls_data where vbeln = ls_vbeln-vbeln.

        ls_data-rtmsg = rtmsg.

        ls_data-rtype = rtype.

        modify it_data from ls_data.

      endloop.

    endif.

 

  endloop.

 

 

********to confirm

  loop at lt_tanum into ls_tanum.

    if iv_kvqui = 'X' and ls_tanum-tanum is not initial.

      call function 'L_TO_CONFIRM'

        exporting

          i_update_task                  = 'X'

          i_commit_work                  = 'X'

          i_squit                        = 'X'

          i_lgnum                        = iv_lgnum "仓库号

          i_tanum                        = ls_tanum-tanum "to号

*         i_qname                        = uname "最终确认的用户

*         i_ename                        = uname "拣配用户

          i_quknz                        = '1'

        tables

          t_ltap_conf                    = lt_ltap_conf

        exceptions

          to_confirmed                   = 1

          to_doesnt_exist                = 2

          item_confirmed                 = 3

          item_subsystem                 = 4

          item_doesnt_exist              = 5

          item_without_zero_stock_check  = 6

          item_with_zero_stock_check     = 7

          one_item_with_zero_stock_check = 8

          item_su_bulk_storage           = 9

          item_no_su_bulk_storage        = 10

          one_item_su_bulk_storage       = 11

          foreign_lock                   = 12

          squit_or_quantities            = 13

          vquit_or_quantities            = 14

          bquit_or_quantities            = 15

          quantity_wrong                 = 16

          double_lines                   = 17

          kzdif_wrong                    = 18

          no_difference                  = 19

          no_negative_quantities         = 20

          wrong_zero_stock_check         = 21

          su_not_found                   = 22

          no_stock_on_su                 = 23

          su_wrong                       = 24

          too_many_su                    = 25

          nothing_to_do                  = 26

          no_unit_of_measure             = 27

          xfeld_wrong                    = 28

          update_without_commit          = 29

          no_authority                   = 30

          lqnum_missing                  = 31

          charg_missing                  = 32

          no_sobkz                       = 33

          no_charg                       = 34

          nlpla_wrong                    = 35

          two_step_confirmation_required = 36

          two_step_conf_not_allowed      = 37

          pick_confirmation_missing      = 38

          quknz_wrong                    = 39

          hu_data_wrong                  = 40

          no_hu_data_required            = 41

          hu_data_missing                = 42

          hu_not_found                   = 43

          picking_of_hu_not_possible     = 44

          not_enough_stock_in_hu         = 45

          serial_number_data_wrong       = 46

          serial_numbers_not_required    = 47

          no_differences_allowed         = 48

          serial_number_not_available    = 49

          serial_number_data_missing     = 50

          to_item_split_not_allowed      = 51

          input_wrong                    = 52

          others                         = 53.

 

      if sy-subrc > 1.

 

        message id sy-msgid

          type sy-msgty

          number sy-msgno

          with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4

          into lv_msg.

        loop at it_data into ls_data where tanum = ls_tanum-tanum.

          ls_data-rtype = 'E'.

          ls_data-rtmsg = 'TO Create Success;To Confirmation failed:#' && lv_msg.

          modify it_data from ls_data.

        endloop.

 

 

        call function 'BAPI_TRANSACTION_ROLLBACK'.

      else.

        call function 'BAPI_TRANSACTION_COMMIT'

          exporting

            wait = 'X'.

      endif.

    endif.

  endloop.

  "rttab = it_data.

  clear rttab.

  rttab = it_data.

  "move-CORRESPONDING it_data[] to rttab[].

 

  zfmparavalsave2 'R'.

 

endfunction.

 

 

猜你喜欢

转载自blog.csdn.net/cylcylcylcylwo/article/details/114019196
tr