Автор Тема: Создание партий партий при 309 ВД  (Прочитано 6424 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Создание партий партий при 309 ВД
« : Декабрь 08, 2009, 08:19:24 pm »
Тут вопрос увидел  ;), а как раз недавно делал тоже самое, немного помучился, и не смог вспомнить как же делал, пришлось лезть в систему и смотреть как же я извращался, оказалось все просто.
В двух словах (весь код приводить не буду), есть табличка с заполнеными данными (материал, к-во, склад, завод), если необходимо новая партия, просто создаем ее и заполняем поле move_batch в табличке типа BAPI2017_GM_ITEM_CREATE

Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*&      Form  post_data
*&---------------------------------------------------------------------*
*       Проводка движений
*----------------------------------------------------------------------*
FORM post_data .
  DATA: npos, cntpos               TYPE i.
  DATA: ls_zgoodsmvt_item1 LIKE LINE OF zgoodsmvt_item1.

  cntpos = 300.

  CLEAR zgoodsmvt_header.
  CLEAR zgoodsmvt_item1.
  "REFRESH zgoodsmvt_item.
  CLEAR zgoodsmvt_headret.

  REFRESH bapiret.
  REFRESH bapiret2.

  zgoodsmvt_header-ref_doc_no = p_xblnr.
  zgoodsmvt_header-pstng_date = p_budat.
  zgoodsmvt_header-doc_date   = p_budat.
  zgoodsmvt_header-header_txt = 'Производство'.

  zgoodsmvt_code =  '04'.
  npos = 0.
  "mblnr = mblnr + 1.

  LOOP AT zgoodsmvt_item INTO ls_zgoodsmvt_item1 WHERE move_type = '311' OR move_type = '309'.
    npos = npos + 1.
    IF npos > cntpos.
      IF zgoodsmvt_item1[] IS NOT INITIAL.
        CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          goodsmvt_header  = zgoodsmvt_header
          goodsmvt_code    = zgoodsmvt_code
        IMPORTING
          goodsmvt_headret = zgoodsmvt_headret
        TABLES
          goodsmvt_item    = zgoodsmvt_item1
          return           = bapiret2.

        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.

        IF zgoodsmvt_headret IS NOT INITIAL.
          APPEND zgoodsmvt_headret TO docheader.
        ENDIF.

        CLEAR zgoodsmvt_header.
        CLEAR zgoodsmvt_item1.
      ENDIF.
    ENDIF.

    IF cr_nbth EQ 'X'. " Создание новых партий для 309 ВД  " <<<<<< ТУТ

      PERFORM create_new_batch CHANGING ls_zgoodsmvt_item1.
    ENDIF.

    MOVE-CORRESPONDING ls_zgoodsmvt_item1 TO zgoodsmvt_item1.

    APPEND zgoodsmvt_item1.
  ENDLOOP.

  IF zgoodsmvt_item1[] IS NOT INITIAL.
    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = zgoodsmvt_header
      goodsmvt_code    = zgoodsmvt_code
    IMPORTING
      goodsmvt_headret = zgoodsmvt_headret
    TABLES
      goodsmvt_item    = zgoodsmvt_item1
      return           = bapiret2.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.

    IF zgoodsmvt_headret IS NOT INITIAL.
      APPEND zgoodsmvt_headret TO docheader.
    ENDIF.

    CLEAR zgoodsmvt_header.
    CLEAR zgoodsmvt_item1.
  ENDIF.

  IF bapiret2[] IS NOT INITIAL.
    LOOP AT bapiret2 .
      APPEND bapiret2 TO bapiret.
    ENDLOOP.
  ENDIF.

ENDFORM.                    " post_data

Код: You are not allowed to view links. Register or Login
FORM create_new_batch
    CHANGING rs_zgoodsmvt_item LIKE LINE OF zgoodsmvt_item1.

    DATA: zclass TYPE klah-class.

    DATA: zlgort TYPE mchb-lgort.

    DATA: gt_mcha TYPE STANDARD TABLE OF  mcha.

    DATA: gt_mchb TYPE STANDARD TABLE OF  mchb.

    DATA: ls_mcha   LIKE mcha.
    DATA: xbncom TYPE bncom.

*    SELECT SINGLE * INTO ls_mcha FROM mcha WHERE charg = wa_xmseg-charg AND
*           matnr = wa_xmseg-matnr AND werks = wa_xmseg-werks.

    IF rs_zgoodsmvt_item-move_type EQ '309'.
      ls_mcha-matnr = rs_zgoodsmvt_item-move_mat.
      ls_mcha-werks = rs_zgoodsmvt_item-move_plant.
    ELSE.
      ls_mcha-matnr = rs_zgoodsmvt_item-material.
      ls_mcha-werks = rs_zgoodsmvt_item-plant.
    ENDIF.

    "ls_mcha-lgort = rs_zgoodsmvt_item-move_stloc.
    "ls_mcha-charg = batch_num.

    " ls_mcha-hsdat = p_budat.  см. Описание в начале

    " '*'. " Автоматичесская
    " '-'. " Без партий

     PERFORM check_use_batch
        USING    ls_mcha-matnr
        CHANGING rs_zgoodsmvt_item-move_batch.


    IF rs_zgoodsmvt_item-move_batch EQ '*'.

        PERFORM get_class CHANGING zclass.

        CALL FUNCTION 'VB_CREATE_BATCH'
        EXPORTING
          ymcha            = ls_mcha
          new_lgort        = rs_zgoodsmvt_item-move_stloc
          bypass_lock      = space
          x_bncom          = xbncom
          ref_matnr        = space
          ref_charg        = space
          kzcla            =  '1'  "ls_tco43-kzcla - возможность класификации, упростил см LCOKO1F81 там выбор по транзакции и профилю производству
          xkcfc            =  'X'  " ls_tco43-xkcfc
*          class            = 'BATCH'
*          class            =  'Z_BATCH'
          class            =  zclass
          no_change_of_bwtar = space "'X' "space "space " yx'X'
        IMPORTING
          ymcha            = ls_mcha
        TABLES
          new_batch        = gt_mcha
          new_batch_stoloc = gt_mchb
        EXCEPTIONS
            no_material                  = 1
            no_batch                     = 2
            no_plant                     = 3
            material_not_found           = 4
            plant_not_found              = 5
            stoloc_not_found             = 6
            lock_on_material             = 7
            lock_on_plant                = 8
            lock_on_batch                = 9
            lock_system_error            = 10
            no_authority                 = 11
            batch_exist                  = 12
            stoloc_exist                 = 13
            illegal_batch_number         = 14
            no_batch_handling            = 15
            no_valuation_area            = 16
            valuation_type_not_found     = 17
            no_valuation_found           = 18
            error_automatic_batch_number = 19
            cancelled                    = 20
            wrong_status                 = 21
            interval_not_found           = 22
            number_range_not_extern      = 23
            object_not_found             = 24
            error_check_batch_number     = 25
            no_external_number           = 26
            no_customer_number           = 27
            no_class                     = 28
            error_in_classification      = 29
            inconsistency_in_key         = 30
            OTHERS                       = 31.
          IF sy-subrc <> 0.
            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
          ENDIF.

         rs_zgoodsmvt_item-move_batch = ls_mcha-charg.
         rs_zgoodsmvt_item-move_val_type = ls_mcha-bwtar.
    ELSE.
        CONCATENATE 'Материал' ls_mcha-matnr 'не ведется по партиям, партия не создавалась' INTO ls_alvmessage-name SEPARATED BY space.
        ls_alvmessage-type = 'S'.
        APPEND ls_alvmessage TO gt_alvmessage.
    ENDIF.

ENDFORM.                    " create_new_batch

Думаю все понятно, если чего не ясно - спрашивайте.



« Последнее редактирование: Декабрь 08, 2009, 08:26:50 pm от Паганель »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login