Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Uukrul от Май 19, 2008, 12:27:44 pm

Название: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Uukrul от Май 19, 2008, 12:27:44 pm
Пример создания заказа ММ. В качестве данных для начальной работы берется информация из файла. Пример использования данной BAPI схематичный и простой. В случае если кому будут какие либо непонятки по заполнению каких-то особенных данных при вызове данного ФМ, спрашиваем, не стесняемся... будет время ответят. Пример работает путем получения части данных с экрана, а часть загружается из файла данных. Пример файла в атачменте, остальное ясно из кода.
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  YUUK_ME21N
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT  yuuk_me21n MESSAGE-ID yy.
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
PARAMETERS: p_lifnr LIKE ekko-lifnr DEFAULT '5200',
            p_werks LIKE mseg-werks DEFAULT '1200',
            p_lgort LIKE mseg-lgort DEFAULT '0088'.
SELECTION-SCREEN END OF BLOCK block1.

PARAMETERS: p_file LIKE rlgrap-filename DEFAULT 'C:\text_ord.txt'.


DATA: BEGIN OF lt_tab OCCURS 10,
  matnr LIKE ekpo-matnr,
  menge LIKE ekpo-menge,
  meins LIKE ekpo-meins,
  net_price LIKE ekpo-netwr,
END OF lt_tab.

DATA: l_bukrs         LIKE ekko-bukrs,
      s_datum(10)     TYPE c,
      bapi_number     LIKE bapimepoheader-po_number VALUE space,
      po_header       LIKE bapimepoheader,
      po_headerx      LIKE bapimepoheaderx,
      po_return       LIKE bapiret2           OCCURS 5 WITH HEADER LINE,
      po_items        LIKE bapimepoitem       OCCURS 5 WITH HEADER LINE,
      po_itemsx       LIKE bapimepoitemx      OCCURS 5 WITH HEADER LINE,
      po_schedule     LIKE bapimeposchedule   OCCURS 5 WITH HEADER LINE,
      po_schedulex    LIKE bapimeposchedulx   OCCURS 5 WITH HEADER LINE,
      po_account      LIKE bapimepoaccount    OCCURS 5 WITH HEADER LINE,
      po_accountx     LIKE bapimepoaccountx   OCCURS 5 WITH HEADER LINE.


*&---------------------------------------------------------------------*
*&      START-OF-SELECTION.
*&---------------------------------------------------------------------*
START-OF-SELECTION.

  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      filename                = p_file
      filetype                = 'DAT'
    TABLES
      data_tab                = lt_tab
    EXCEPTIONS
      conversion_error        = 1
      file_open_error         = 2
      file_read_error         = 3
      invalid_type            = 4
      no_batch                = 5
      unknown_error           = 6
      invalid_table_width     = 7
      gui_refuse_filetransfer = 8
      customer_error          = 9
      no_authority            = 10
      OTHERS                  = 11.
  IF sy-subrc <> 0. MESSAGE i000 WITH sy-subrc. ENDIF.

  CLEAR: po_items[],  po_schedule[],  po_account[],
         po_itemsx[], po_schedulex[], po_accountx[].

* Код БЕ по коду завода
  CALL FUNCTION 'CJCK_CHECK_BUKRS_WERKS'
    EXPORTING
      i_bukrs = space
      i_werks = p_werks
    IMPORTING
      e_bukrs = l_bukrs.

  CLEAR po_header.
  po_header-comp_code  = l_bukrs.        "БЕ
  po_header-doc_type   = 'NB'.           "Вид документа закупки
  po_header-creat_date = sy-datum.       "Дата создания записи
  po_header-created_by = sy-uname.       "Имя исполнителя
  po_header-vendor     = p_lifnr.        "Номер счета поставщика
  po_header-langu      = sy-langu.       "Код языка
  po_header-purch_org  = '1000'.         "Закупочная организация
  po_header-pur_group  = '004'.          "Группа закупок
  po_header-currency   = 'USD'.          "Код валюты
  po_header-doc_date   = sy-datum.       "Дата документа закупки
  po_header-ref_1      = 'REF 1'.        "ваш код
  po_header-our_ref    = 'REF 2'.        "наш номер

  CLEAR po_headerx.
  po_headerx-comp_code  = 'X'.
  po_headerx-doc_type   = 'X'.
  po_headerx-creat_date = 'X'.
  po_headerx-created_by = 'X'.
  po_headerx-vendor     = 'X'.
  po_headerx-langu      = 'X'.
  po_headerx-purch_org  = 'X'.
  po_headerx-pur_group  = 'X'.
  po_headerx-currency   = 'X'.
  po_headerx-doc_date   = 'X'.
  po_headerx-ref_1      = 'X'.
  po_headerx-our_ref    = 'X'.

  LOOP AT lt_tab.
* Позиция,поставка,контировка
    CLEAR po_items.
    po_items-po_item    = sy-tabix * 10.
    po_items-material   = lt_tab-matnr.
    po_items-plant      = p_werks.
    po_items-stge_loc   = p_lgort.
    po_items-quantity   = lt_tab-menge. "Объем заказа на поставку
    po_items-po_unit    = lt_tab-meins. "ЕИ заказа на поставку
    po_items-qual_insp  = ' '.                "Вид запаса
    po_items-item_cat   = ' '.                "Тип позиции
    po_items-net_price  = lt_tab-net_price.   "Цена за единицу
    po_items-info_rec   = space.
    APPEND po_items.

    CLEAR po_itemsx.
    po_itemsx-po_item    = sy-tabix * 10.
    po_itemsx-po_itemx   = 'X'.
    po_itemsx-material   = 'X'.
    po_itemsx-plant      = 'X'.
    po_itemsx-stge_loc   = 'X'.
    po_itemsx-quantity   = 'X'.
    po_itemsx-po_unit    = 'X'.
    po_itemsx-qual_insp  = 'X'.
    po_itemsx-item_cat   = 'X'.
    po_itemsx-net_price  = 'X'.              "Цена за единицу
    po_itemsx-info_rec   = 'X'.


    APPEND po_itemsx.

    CLEAR po_schedule.
    WRITE sy-datum TO s_datum DD/MM/YYYY.
    po_schedule-po_item        = sy-tabix * 10.
    po_schedule-del_datcat_ext = 'D'.              "Тип даты поставки
    po_schedule-delivery_date  = s_datum.          "Дата поставки
    po_schedule-quantity       = lt_tab-menge.
    APPEND po_schedule.

    CLEAR po_schedulex.
    po_schedulex-po_item        = sy-tabix * 10.
    po_schedulex-del_datcat_ext = 'X'.
    po_schedulex-delivery_date  = 'X'.
    po_schedulex-quantity       = 'X'.
    APPEND po_schedulex.
  ENDLOOP.

  CLEAR po_return[].
  CALL FUNCTION 'BAPI_PO_CREATE1'
    EXPORTING
      poheader         = po_header
      poheaderx        = po_headerx
    IMPORTING
      exppurchaseorder = bapi_number
    TABLES
      return           = po_return
      poitem           = po_items
      poitemx          = po_itemsx
      poschedule       = po_schedule
      poschedulex      = po_schedulex.

  LOOP AT po_return WHERE type = 'E' OR type = 'A'.
    ROLLBACK WORK.
    MESSAGE ID po_return-id TYPE po_return-type NUMBER po_return-number
                           WITH po_return-message_v1
                                po_return-message_v2
                                po_return-message_v3
                                po_return-message_v4.
  ENDLOOP.
  COMMIT WORK AND WAIT.


*&---------------------------------------------------------------------*
*&      AT SELECTION-SCREEN ON VALUE-REQUEST
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM query_filename USING p_file.


*&---------------------------------------------------------------------*
*&      Form  query_filename
*&---------------------------------------------------------------------*
*      Диалог выбора файла
*----------------------------------------------------------------------*
FORM query_filename USING p_file LIKE rlgrap-filename.
  CLEAR p_file.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = p_file
      def_path         = 'C:\'
      mask             = ',*.*,*.*.'
      mode             = '0'
      title            = 'Позиции заказа'
    IMPORTING
      filename         = p_file
    EXCEPTIONS
      inv_winsys       = 01
      no_batch         = 02
      selection_cancel = 03
      selection_error  = 04.
ENDFORM.                    " query_filename

Вообще-то данный пример тут помещен из-за одной хитрости, не знаю правда может это для меня была хитрость и новость (а так же для ряда товарищей), но если вы сами попытаетесь использовать данную BAPI, то обнаружите, что цена нетто, позиции материала из файла всегда замещается ценой из инфо-записи закупки (если инфо-записи ведутся в системе, а это обычно так и есть) и чтобы не делалось система всегда жестко переписывает переданную в функции цену. Так вот чтобы этого не происходило и цена действительно бралась из файла, путем ночного бодания с данной бапишкой одного хорошего человека, выяснилось, что нужно обязательно передать в позиции заказа следующую комбинацию полей:

po_items-info_rec   = space. "Номер инфо-записи
и
po_itemsx-info_rec   = 'X'.   "Признак обновления поля

И вот только при этой комбинации, цена нетто будет действительно взята так которую вы зададите при вызове этой BAPI (в данном случае цена из файла данных). В других случаях система автоматически перезапишет эту цену, данными из инфо-записи.
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Uukrul от Июнь 30, 2008, 10:56:29 pm
Кстати, у некоторых иногда возникает желание или просто от незнания, воспользоваться методом BAPI_PO_CREATE, казалось бы подумаешь в 14 знаке расхождение, но поверьте что таки оно может быть  для вас критическим. Как например вот тут: http://sapforum.biz/index.php/topic,214.0.html у человека были приятные минуты в определение расхождения между BAPI_PO_CREATE и BAPI_PO_CREATE1.

Кстати анекдот по этому случаю:
Цитировать
Звонок по телефону:
- Здравствуйте, это квартира Иванова Сергея Петровича?
- Нет, это квартира Катца Арона Самуиловича.
- Простите, это 550-3310?
- Нет, это 550-3311.
- Надо же, в седьмом знаке ошибка, а какой эффект...
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: DEAD_MOROZ от Июль 22, 2009, 10:48:48 am
Что-то у меня не получается чтобы цена бралась из файла а не из инфо-записи.....
Создаю контированную заявку(контировка K)  :(
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Uukrul от Июль 22, 2009, 12:05:36 pm
You are not allowed to view links. Register or Login
Что-то у меня не получается чтобы цена бралась из файла а не из инфо-записи.....
Создаю контированную заявку(контировка K)  :(
Я что немного не понял... заявка это BAPI_REQUISITION_CREATE, а то что тут обсуждалось это заказ на закупку...
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Паганель от Июль 22, 2009, 12:06:46 pm
You are not allowed to view links. Register or Login
Что-то у меня не получается чтобы цена бралась из файла а не из инфо-записи.....
Создаю контированную заявку(контировка K)  :(

приведи пример кода, посмотрим ....
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: DEAD_MOROZ от Июль 22, 2009, 12:49:50 pm
Код прилагаеццо...
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Паганель от Июль 22, 2009, 01:42:04 pm
Посмотрел, вроде бы все нормально ...вечером проиграюсь может.... может с параметром evo попробуешь?
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Паганель от Июль 22, 2009, 01:58:59 pm
Еще попробуй - po_price = 'X'

http://sapforum.biz/index.php/topic,603.msg3582.html#msg3582 (http://sapforum.biz/index.php/topic,603.msg3582.html#msg3582)

Должно помочь, судя по описанию - самое оно.
(Индикатор копирования цены: 1 = брутто, 2 = нетто
Диапазон значений:
    Не копировать
1   Как цену брутто
2   Как цену нетто
)

Только не забудь в BAPIMEPOITEMX поставить 'X'  ;-)
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: DEAD_MOROZ от Июль 22, 2009, 06:08:29 pm
Как понять po_price = 'X' ???? Там же доступные значения -  пусто,1,2.....  :)

Кароч помог параметр EVO, для него прописал значение в котором утсановил галку Цена вручную как цена Брутто.

Вроде палит.
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Uukrul от Июль 22, 2009, 06:11:19 pm
You are not allowed to view links. Register or Login
Как понять po_price = 'X' ???? Там же доступные значения -  пусто,1,2.....  :)
Ну это он ошибся поставить надо было = space. С параметром это как-то не красиво, я на днях помучаю твой код, посмотрим чего оно не хочет работать как у людей.
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: DEAD_MOROZ от Июль 22, 2009, 06:18:45 pm
Цитата: Uukrul  link=topic=176.msg4511#msg4511 date=1248253536
Я что немного не понял... заявка это BAPI_REQUISITION_CREATE, а то что тут обсуждалось это заказ на закупку...
Извиняюсь, описался... :)
Кстати для создания заявок есть более новая бапиха BAPI_PR_CREATE. Выложу образец использования.
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Паганель от Июль 22, 2009, 08:55:17 pm
Цитата: Uukrul  link=topic=176.msg4530#msg4530 date=1248275479
Ну это он ошибся поставить надо было = space. С параметром это как-то не красиво, я на днях помучаю твой код, посмотрим чего оно не хочет работать как у людей.

Ссори, действительно - ошибся.
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Uukrul от Июль 23, 2009, 12:28:34 pm
You are not allowed to view links. Register or Login
Кстати для создания заявок есть более новая бапиха BAPI_PR_CREATE. Выложу образец использования.
Ну я в четверке смотрел  ::) кстати как помогло решить проблему po_price = space?
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: DEAD_MOROZ от Август 07, 2009, 10:50:44 am
Цитата: Uukrul  link=topic=176.msg4537#msg4537 date=1248341314
Ну я в четверке смотрел  ::) кстати как помогло решить проблему po_price = space?

Добрый день.
Насколько я понял po_price = space отвечает за копирование цены из заявки в заказ, я же создаю заказ без ссылки на заявку...
Кароч не помогает po_price = space  :(

Единственный вариант, который нашел - использование параметра EVO(описано выше).
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Паганель от Август 07, 2009, 11:01:04 am
You are not allowed to view links. Register or Login
Добрый день.
Насколько я понял po_price = space отвечает за копирование цены из заявки в заказ, я же создаю заказ без ссылки на заявку...
Кароч не помогает po_price = space  :(

Единственный вариант, который нашел - использование параметра EVO(описано выше).


Ну po_price = space было только предположение ......
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Uukrul от Август 07, 2009, 11:29:54 am
You are not allowed to view links. Register or Login
Ну po_price = space было только предположение ......
Ну значит надо дальше копать... параметр EVO это все таки не выход.
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: demst от Апрель 21, 2010, 11:24:46 am
You are not allowed to view links. Register or Login
Кароч помог параметр EVO, для него прописал значение в котором утсановил галку Цена вручную как цена Брутто.

Вроде палит.

Подскажите, что за параметр такой EVO?
перебробовал все варианты уже, и с po_price, и без него и info_rec....
не переносится цена... ((
може тесть еще какие поля необходимые? обязательно ли заполнение таблицы shedule&?

Спасибо.
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Uukrul от Апрель 21, 2010, 02:02:27 pm
You are not allowed to view links. Register or Login
Подскажите, что за параметр такой EVO?
Ну это настройка работы закупок ММ, выложил тут: http://sapforum.biz/index.php/topic,1121.msg6908.html#msg6908
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: demst от Апрель 21, 2010, 03:13:42 pm
Цитата: Uukrul  link=topic=176.msg6909#msg6909 date=1271847747
Ну это настройка работы закупок ММ, выложил тут: http://sapforum.biz/index.php/topic,1121.msg6908.html#msg6908
Спасибо, почитал. Но думаю это не выход (
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Uukrul от Апрель 21, 2010, 03:55:46 pm
You are not allowed to view links. Register or Login
Спасибо, почитал. Но думаю это не выход (
Ну у меня пока времени играться небыло, хотя думаю, что выход раз по другому DEAD_MOROZ пока не накопал, а этот способ работает, то почему бы и нет.
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: demst от Апрель 21, 2010, 04:28:21 pm
Цитата: Uukrul  link=topic=176.msg6911#msg6911 date=1271854546
Ну у меня пока времени играться небыло, хотя думаю, что выход раз по другому DEAD_MOROZ пока не накопал, а этот способ работает, то почему бы и нет.
Попробовал этот способ - не работает (
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: DEAD_MOROZ от Апрель 22, 2010, 12:55:34 pm
Вот настройка для параметра EVO.
Попробуйте с такой настройкой осуществить создание заказа.
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Паганель от Декабрь 27, 2010, 11:36:53 am
Про EVO и некопирование цен http://sapforum.biz/index.php/topic,603.msg8239.html#msg8239 (нота 675523) - NO_PRICE_FROM_PO
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: fudome от Декабрь 11, 2017, 01:29:00 pm
Вот и я столкнулась с этой проблемой: Создаю заказ на поставку (приходит IDOC-ом)  с типом контировки Q и цену бапишка мне тянет из сетевого графика. С заказами без контировки такой проблемы нет. Может быть кто-нибудь сталкивался с этой проблемой?
Название: Re: BAPI_PO_CREATE1 - Создание заказа ММ
Отправлено: Uukrul от Декабрь 12, 2017, 07:38:21 pm
You are not allowed to view links. Register or Login
Вот и я столкнулась с этой проблемой: Создаю заказ на поставку (приходит IDOC-ом)  с типом контировки Q и цену бапишка мне тянет из сетевого графика. С заказами без контировки такой проблемы нет. Может быть кто-нибудь сталкивался с этой проблемой?
Если честно, то сейчас даже негде посмотреть такую ситуацию, так что могу только попробовать смоделировать такую ситуацию. В ручном режиме создания заказа, я так понял у вас тоже цена тянется из сетевого графика, ну в принципе это как бы правильно. Попробуйте зайти в создание заказа и когда цена подтянется перейдите в анализ условий ценообразования заказа для позиции. Закладка "Условия" и там внизу закладки есть кнопка "Анализ". Нажмите ее и приведите тут раскрытый список (скришот) для условия PB00, чтобы понять как берется цена в вашем случае.