Автор Тема: Создание заказа на поставку через BAPI_PO_CREATE1 с контировкой V  (Прочитано 9612 раз)

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

Оффлайн Александра

  • Newbie
  • *
  • Сообщений: 2
  • Репутация: +0/-0
  • Пол: Женский
  • YearsYearsYearsYearsYearsYearsYearsYears
Добрый день! При создании заказа с контировкой 'V' возникает ошибка:
Ни одной инстанции типа объекта PurchaseOrder не создано. Внешняя ссылка:
Заказ на поставку еще содержит позиции с ошибками
К строке услуги 0000000010 контировок нет.

Никак не могу понять где ошибка. Проверила несколько раз. Помогите пожалуйста.


Оффлайн Александра

  • Newbie
  • *
  • Сообщений: 2
  • Репутация: +0/-0
  • Пол: Женский
  • YearsYearsYearsYearsYearsYearsYearsYears
Код программы
DATA lt_poheader    LIKE bapimepoheader.
  DATA lt_poheaderx   LIKE bapimepoheaderx.
  DATA lt_poitem      LIKE bapimepoitem     OCCURS 0 WITH HEADER LINE.
  DATA lt_poitemx     LIKE bapimepoitemx    OCCURS 0 WITH HEADER LINE.
  DATA lt_poservices  LIKE bapiesllc        OCCURS 0 WITH HEADER LINE.
  DATA lt_poaccount LIKE  BAPIMEPOACCOUNT  OCCURS 0 WITH HEADER LINE.
  DATA lt_POACCOUNTX TYPE BAPIMEPOACCOUNTX OCCURS 0 WITH HEADER LINE.
  DATA lt_expheader   LIKE  bapimepoheader .
  DATA ls_bapi_te_mepoheader TYPE bapi_te_mepoheader. "Польз. поля
  DATA ls_bapi_te_mepoheaderx TYPE bapi_te_mepoheaderx.
  DATA ls_extensionin TYPE bapiparex.
  DATA lt_extensionin TYPE TABLE OF bapiparex.
  DATA lt_return      LIKE bapiret2         OCCURS 0 WITH HEADER LINE.

  DATA i_maxno  TYPE num5.
  DATA i_step   TYPE bapimepoitem-po_item VALUE '00010'.
*     Текущий номер пакета для создания цепочки услуг
  DATA g_current_pckg_no TYPE bapimepoitem-pckg_no VALUE 0.
*     Текущий номер контировки для позиции заказа
  DATA assignment_serial_no TYPE bapiesklc-serial_no VALUE 1.
*     Текущий номер строки в цепочке услуг
  DATA service_line_no TYPE bapiesllc-line_no VALUE 1.
  DATA l_answer(1).
  Data: v_EXT_LINE type bapiesllc-EXT_LINE.
  DATA: knttp_doc TYPE ekpo-knttp.
  DATA: ls_BAPIESKLC TYPE BAPIESKLC,
        lt_BAPIESKLC TYPE TABLE OF BAPIESKLC.

********************************************************
* Заполнение данных заголовка
********************************************************
  CLEAR lt_poheader.

  lt_poheader-creat_date  = sy-datum.
  lt_poheader-doc_date    = p_bedat. "sy-datum.
  lt_poheader-doc_type    = p_bsart.
  lt_poheader-comp_code   = p_bukrs.
  lt_poheader-vper_start  = p_vpst.
  lt_poheader-vper_end    = p_vpend.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = p_lifnr
    IMPORTING
      output = lt_poheader-vendor.

  lt_poheader-created_by  = sy-uname.
  lt_poheader-currency    = 'RUB'.
* закупочная организация  и группа
  lt_poheader-purch_org   = p_ekorg.
  lt_poheader-pur_group   = p_ekgrp.

  data zterm like ekko-zterm.
  select single zterm into zterm from ekko
          where ebeln = dog_num.
  lt_poheader-PMNTTRMS = zterm.
  lt_poheader-agreement = DOG_NUM.

*   Маска полей заголовка заказа
  CLEAR lt_poheaderx.
  lt_poheaderx-comp_code   = 'X'.
  lt_poheaderx-doc_date    = 'X'.
  lt_poheaderx-doc_type    = 'X'.
  lt_poheaderx-purch_org   = 'X'.
  lt_poheaderx-pur_group   = 'X'.
  lt_poheaderx-agreement   = 'X'.
  lt_poheaderx-vendor      = 'X'.
  lt_poheaderx-created_by  = 'X'.
  lt_poheaderx-currency    = 'X'.
  lt_poheaderx-status      = 'X'.
  lt_poheaderx-vper_start  = 'X'.
  lt_poheaderx-vper_end    = 'X'.
  lt_poheaderx-PMNTTRMS    = 'X'.

  lt_poheaderx-agreement = 'X'.

********************************************************
* Конец Заполнение данных заголовка
********************************************************

********************************************************
* Заполнение позиций
********************************************************

*   Создание цепочки услуг

  Data: line_num TYPE bapiesllc-line_no,
        po_num   TYPE bapiesllc-line_no,
        t        TYPE bapiesllc-line_no,
        k        TYPE bapiesllc-line_no,
        v_curr   TYPE bapiesllc-line_no,
        po_num_1 type p decimals 3,
        po_num_2 type p decimals 3.

  Constants: con_line TYPE bapiesllc-line_no value '99'.
  Describe table gt_list lines line_num.

  po_num = line_num div con_line.

  po_num_2 = line_num / con_line.
  po_num_1 = frac( po_num_2 ).

  if po_num_1 is not initial.
    Add 1 to po_num.
  endif.

  Clear t.
  Do po_num times.
*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    CLEAR i_maxno.

    Add 1 to g_current_pckg_no.

    CLEAR lt_poitem.
    REFRESH lt_poitem.

* номер позиции
      lt_poitem-po_item = i_maxno.
      ADD i_step TO lt_poitem-po_item.

* тип контировки
    CLEAR knttp_doc.
    Read table gt_list index 1.
    IF gt_list-knttp = 'V' .
     lt_poitem-acctasscat = gt_list-knttp.
     knttp_doc = gt_list-knttp.
    else.
     lt_poitem-acctasscat = 'U'.
     knttp_doc = 'U'.
    ENDIF.

    lt_poitem-pckg_no    = g_current_pckg_no.
    lt_poitem-short_text = p_txmtr.

* группа материалов
    lt_poitem-matl_group = p_grmtr.
* завод
    lt_poitem-plant      = p_werks.
* тип позиции в акте закупки
    lt_poitem-item_cat = 'У'. " Услуги

    lt_poitem-AGREEMENT = dog_num.
    If p_item is not initial.
      lt_poitem-AGMT_ITEM = p_item.
      lt_poitemx-AGMT_ITEM = 'X'.
    Else.
      lt_poitem-AGMT_ITEM = '00010'.
      lt_poitemx-AGMT_ITEM = 'X'.
    EndIf.
    lt_poitem-ACKN_REQD  = 'X'.
    lt_poitem-AGREEMENT  = dog_num.

    APPEND lt_poitem.

    CLEAR gt_list.

*   Маска полей позиции заказа
    REFRESH lt_poitemx.

    lt_poitemx-po_item    = lt_poitem-po_item.
    lt_poitemx-po_itemx   = 'X'.
    lt_poitemx-item_cat   = 'X'.
    lt_poitemx-acctasscat = 'X'.
    lt_poitemx-matl_group = 'X'.
    lt_poitemx-plant      = 'X'.
    lt_poitemx-pckg_no    = 'X'.
    lt_poitemx-short_text = 'X'.
    lt_poitemx-AGREEMENT = 'X'.

    lt_poitemx-ACKN_REQD  = 'X'.
    lt_poitemx-agreement  = 'X'.
    APPEND lt_poitemx.

    REFRESH lt_poservices.
    CLEAR lt_poservices.
    Refresh: lt_poservices,
             lt_poaccount,
             lt_BAPIESKLC .

      lt_poservices-pckg_no = g_current_pckg_no.

      ADD 1 TO g_current_pckg_no.

      lt_poservices-subpckg_no = g_current_pckg_no.

      lt_poservices-line_no = service_line_no.
      lt_poservices-outl_ind = 'X'.

      APPEND lt_poservices.

Data: SERIAL_NO TYPE BAPIMEPOACCOUNT-SERIAL_NO VALUE 1.
      ADD 1 TO service_line_no.

      Clear k.
*      Refresh lt_poservices.
      Do con_line times.
        add 1 to k.
        v_curr = con_line * t + k.
        Read table gt_list index v_curr.
        If sy-subrc <> 0.
          Exit.
        EndIf.

        CLEAR lt_poservices.
        Add 10 to v_EXT_LINE.
          lt_poservices-pckg_no    = g_current_pckg_no.
          lt_poservices-line_no    = service_line_no.
          lt_poservices-EXT_LINE   = v_EXT_LINE.
          lt_poservices-short_text = gt_list-ktext1.
          lt_poservices-quantity   = gt_list-menge.
          lt_poservices-base_uom   = gt_list-meins.
          lt_poservices-gr_price   = gt_list-tbtwr.

        APPEND lt_poservices.

        CLEAR lt_poaccount.
        IF knttp_doc = 'V'.
          lt_poaccount-po_item = lt_poitem-po_item. "Номер позиции документа закупки
          lt_poaccount-SERIAL_NO = SERIAL_NO.
          lt_poaccount-COSTCENTER = gt_list-MVZ. "МВЗ
          lt_poaccount-ORDERID = gt_list-ORDER. "Заказ
          lt_poaccount-GL_ACCOUNT = gt_list-sakto. "Номер Основного Счета
          lt_poaccount-CO_AREA = '1000'. "Контролинг единица
          lt_poaccount-WBS_ELEMENT = gt_list-PS_PSP_PNR. "СПП-элемент
          APPEND lt_poaccount.

          CLEAR lt_POACCOUNTX.
          lt_POACCOUNTX-po_item = lt_poitem-po_item. "Номер позиции документа закупки
          lt_POACCOUNTX-SERIAL_NO = SERIAL_NO.
          lt_POACCOUNTX-SERIAL_NOX = 'X'.
          lt_POACCOUNTX-PO_ITEMX = 'X'.
          lt_POACCOUNTX-ORDERID = 'X'. "Заказ
          lt_POACCOUNTX-COSTCENTER = 'X'. "МВЗ
          lt_POACCOUNTX-GL_ACCOUNT = 'X'. "Номер Основного Счета
          lt_POACCOUNTX-CO_AREA = 'X'. "Контролинг единица
          lt_POACCOUNTX-WBS_ELEMENT = 'X'. "СПП-элемент
          APPEND lt_POACCOUNTX.


*    "Номер пакета
          ls_BAPIESKLC-pckg_no = g_current_pckg_no.
*    "Номер строки
          ls_BAPIESKLC-line_no = service_line_no.
* "ТекущийНомерПрисвоенияКонтировки/сторокаУслуг
          ls_BAPIESKLC-serno_line = SERIAL_NO.
* "%ставка: распред. стоимости при контировке
          ls_BAPIESKLC-percentage = 100.
* "Текущий номер контировки
          ls_BAPIESKLC-serial_no  = SERIAL_NO.
* "Количество со знаком +/-
          ls_BAPIESKLC-quantity  = gt_list-menge.
* "Стоимость нетто позиции
          ls_BAPIESKLC-net_value = gt_list-tbtwr.

          APPEND ls_BAPIESKLC TO lt_BAPIESKLC.

        ENDIF.

        gt_list-EXT_LINE = v_EXT_LINE.
        Modify gt_list index v_curr.

        ADD 1 TO service_line_no.
        ADD 1 TO assignment_serial_no.
        add 1 to SERIAL_NO.
      EndDo.

      If lt_poservices[] is initial.
        Exit.
      EndIf.

*& Пользовательские поля
    CLEAR zzdog_head.
    SELECT SINGLE *
       FROM zzdog_head
      WHERE dog_num = dog_num.

    ls_bapi_te_mepoheader-reg_number = zzdog_head-reg_number.
    ls_bapi_te_mepoheaderx-reg_number = 'X'.

    ls_bapi_te_mepoheader-reg_data_ot = zzdog_head-reg_data_ot.
    ls_bapi_te_mepoheaderx-reg_data_ot = 'X'.

    ls_bapi_te_mepoheader-pernr = zzdog_head-pernr.
    ls_bapi_te_mepoheaderx-pernr = 'X'.

    ls_bapi_te_mepoheader-dog_type = zzdog_head-dog_type.
    ls_bapi_te_mepoheaderx-dog_type = 'X'.

    ls_bapi_te_mepoheader-orgeh = zzdog_head-orgeh.
    ls_bapi_te_mepoheaderx-orgeh = 'X'.

    REFRESH lt_extensionin.

    ls_extensionin-structure = 'BAPI_TE_MEPOHEADER'.

    APPEND ls_extensionin TO lt_extensionin.

    ls_extensionin-structure = 'BAPI_TE_MEPOHEADERX'.
    MOVE ls_bapi_te_mepoheaderx TO ls_extensionin+c_lenstruc.
    APPEND ls_extensionin TO lt_extensionin.

    REFRESH lt_return.

    CLEAR lt_expheader.

    SET UPDATE TASK LOCAL.
    IF lt_poitem is not initial.
      IF knttp_doc = 'V'.
        CALL FUNCTION 'BAPI_PO_CREATE1'
             EXPORTING
                  poheader    = lt_poheader
                  poheaderx   = lt_poheaderx
*              testrun     = 'X'
             IMPORTING
                  expheader   = lt_expheader
             TABLES
                  return      = lt_return[]
                  poitem      = lt_poitem[]
                  poitemx     = lt_poitemx[]
                  poservices  = lt_poservices[]
                  POACCOUNT = lt_poaccount[]
                  POACCOUNTX = lt_POACCOUNTX[]
                  POSRVACCESSVALUES = lt_BAPIESKLC[]
                  extensionin = lt_extensionin
                  .


Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Добрый день! При создании заказа с контировкой 'V' возникает ошибка:
Ну начнем с того, что я не знаю в стандарте типа контировки - V, т.е. это какая-то созданная вашими консультантами отдельная контировка. Так что давайте начнем с того что это за контировка? Далее это позиции у вас типа услуги которые вы там как-то хитро заполняете по тексту по своей логике. Текст программы ниже вряд ли сильно поможет, так как там куча переменных которые вряд ли кто-то кроме вас знает зачем вы используете и как считаете.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Далее по коду, у меня вообще ощущение, что был взять какой-то код из другой программы и из него постарались сделать что-то новое.