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

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

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

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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

Sapforum.Biz

Создание партий партий при 309 ВД
« : Декабрь 08, 2009, 08:19:24 pm »