Текущее время: Пн, авг 04 2025, 02:02

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Создание ведомости BAPI_ENTRYSHEET_CREATE.
СообщениеДобавлено: Пт, авг 22 2008, 07:22 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 06:40
Сообщения: 60
Откуда: Белебей !
Пол: Мужской
Добрый день

Я создаю заказ на услуги. Мне нужно создать на этот заказ ведомость. Создание ведомости в транзакции ML81N. Мне надо создать ведомость через БАПИ BAPI_ENTRYSHEET_CREATE, Подскажите <я не знать русский языка> как правильно подавать параметры и таблицы на вход этой БАПИ ?

Сам закакз на услуги связи создаю через БАПИ BAPI_PO_CREATE1. транзакц me21. С этой БАПИ я разобрался, все работает, заказ создается, все позиции на месте.


Вот мой код использования БАПИ BAPI_ENTRYSHEET_CREATE:
Code:
FORM get_vedom .
  DATA: bapi_essr LIKE bapiessrc.
  DATA: bapi_esll LIKE bapiesllc OCCURS 1
                  WITH HEADER LINE.
  DATA: bapi_eskl LIKE bapiesklc OCCURS 1
                  WITH HEADER LINE.
  DATA: bapi_eskn LIKE bapiesknc OCCURS 1
                  WITH HEADER LINE.
  DATA: bapi_return TYPE bapiret2 OCCURS 1 .

  DATA: serial_no LIKE bapiesknc-serial_no,
        line_no   LIKE bapiesllc-line_no.

  CLEAR:   bapi_essr, bapi_esll, bapi_eskn, bapi_eskl, bapi_return.
  REFRESH: bapi_esll, bapi_eskn, bapi_eskl, bapi_return.

* Entry sheet header
  bapi_essr-po_number = ebeln.
  bapi_essr-po_item   = '0010'.
  bapi_essr-short_text = 'KRATKII TEKST'.
  bapi_essr-accasscat = 'K'.
  bapi_essr-pckg_no = 1.

* Services items
  serial_no = 0.
  line_no = 1.                                      "Outline
  bapi_esll-pckg_no = 1.
  bapi_esll-line_no = line_no.
  bapi_esll-outl_level = '0'.
  bapi_esll-outl_ind = 'X'.
  bapi_esll-subpckg_no = 2.
  APPEND bapi_esll.
  LOOP AT lt_output_data_new INTO ls_output_data_new.
* Service
    line_no = line_no + 1.
    CLEAR bapi_esll.
*    MOVE-CORRESPONDING xesll TO bapi_esll.
    bapi_esll-ext_line = ( line_no - 1 ) * 10.
    bapi_esll-service = '000000000004000012'.
    bapi_esll-SERV_TYPE = '030'.
    bapi_esll-base_uom = 'LE'.
*    bapi_esll-quantity = 1.
    bapi_esll-gr_price = ls_output_data_new-summa.
    bapi_esll-pckg_no = 2.
    bapi_esll-line_no = line_no.
    APPEND bapi_esll.

* Account assignment
    CLEAR bapi_eskl.
    MOVE-CORRESPONDING bapi_esll TO bapi_eskl.
    bapi_eskl-quantity = 1.
    bapi_eskl-serno_line = 1.
    bapi_eskl-percentage = 100.

    READ TABLE bapi_eskn WITH KEY costcenter = ls_output_data_new-mvz1.
    IF sy-subrc <> 0.
      serial_no = serial_no + 1.
*      MOVE-CORRESPONDING xesll TO bapi_eskn.
      bapi_eskn-costcenter = ls_output_data_new-mvz1.
      bapi_eskn-gl_account = '0034001150'.
      bapi_eskn-pckg_no = 1.
      bapi_eskn-serial_no = serial_no.
      APPEND bapi_eskn.
    ENDIF.

    bapi_eskl-serial_no = bapi_eskn-serial_no.
    APPEND bapi_eskl.


  ENDLOOP.

  CALL FUNCTION 'BAPI_ENTRYSHEET_CREATE'
    EXPORTING
      entrysheetheader            = bapi_essr
      testrun                     = ' '
    TABLES
      entrysheetaccountassignment = bapi_eskn
      entrysheetservices          = bapi_esll
      entrysheetsrvaccassvalues   = bapi_eskl
      return                      = bapi_return.

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


* Вывод Журнала
  PERFORM log TABLES bapi_return.


ENDFORM.                    " get_vedom


Результатом работы этого кода: СОздается ведомость в которой две одинаковые позиции услуг, (но в заказе две разные, там LOOP как раз по позициям услуг). В этих двух позиция в каждой количество = 0.
Если раскоментирую строку
Code:
*    bapi_esll-quantity = 1.
,
то выходит ошибочное сообщение что, КОЛИЧЕСТВО 2.000 ПРЕВЫШАЕТ КОЛИЧЕСТВО 1.000 В ЗАКАЗЕ !

Подскажите <я не знать русский языка> где я неправильно заполняю данные??.

Через тр-цию ML81 ведомость создается, значит заказ создан правильно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, авг 22 2008, 14:06 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Честно говоря не очень вдавался в подробности, т.к. своих заморочек сейчас хватает, но у вас в коде напрямую указывается номер услуги, так почему в итоге должны быть разные -то?

Я бы порекомендовал подумать над теми значениями, которые вы передаете как констаты и определиться, а правильно ли это.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, авг 22 2008, 19:25 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Может тут посмотреть?
https://www.sdn.sap.com/irj/sdn/wiki?pa ... accounting

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб, авг 23 2008, 11:14 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 06:40
Сообщения: 60
Откуда: Белебей !
Пол: Мужской
PK написал:
Честно говоря не очень вдавался в подробности, т.к. своих заморочек сейчас хватает, но у вас в коде напрямую указывается номер услуги, так почему в итоге должны быть разные -то?

Я бы порекомендовал подумать над теми значениями, которые вы передаете как констаты и определиться, а правильно ли это.


Услуга '000000000004000012' - это "Услуги связи, спецсвязи"
Позиции отлчаются значением цены и МВЗ.
МВЗ : bapi_eskn-costcenter = ls_output_data_new-mvz1.

При создании через транзакцию, эти все константы тоже ввожу. Все нормально создается ведомость.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб, авг 23 2008, 11:28 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 06:40
Сообщения: 60
Откуда: Белебей !
Пол: Мужской
Jelena написала:
Может тут посмотреть?
https://www.sdn.sap.com/irj/sdn/wiki?pa ... accounting


Пробовал как там описано. Не получилось... :oops:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб, авг 23 2008, 11:57 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Нашел то место в стандартном коде, откуда был взят алгоритм, вроде даже правильно всё. (ну за исключением того что данные услуги заполняются выборочно, а не мув-корреспондингом, но не думаю, что это так уж фатально)

А ваша табличка lt_output_data_new содержит правильные данные?

И касательно услуг, раз уж вы создаете на базе заказа, почему было не загрузить из него услуги и полностью имитировать стандартный алгоритм?
т.е. загрузить услуги

select sub_packno from esll into lv_subpackno
where packno eq ekpo-packno.

select * from esll into table xesll
where packno eq lv_subpackno.

А дальше только подставлять свои значения мвз, если их нет в заказе?

Я пока не в теме, поскольку мне задание на создание ведомости только-только в почту свалилось.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, авг 28 2008, 06:52 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 06:40
Сообщения: 60
Откуда: Белебей !
Пол: Мужской
PK написал:
И касательно услуг, раз уж вы создаете на базе заказа, почему было не загрузить из него услуги и полностью имитировать стандартный алгоритм?
т.е. загрузить услуги


Попробовал так сделать.
Все данные читаю из таблиц заказа.

При выполнении выходит сообщение о том что: Заказ не существует

Все мои попытки ни чего не исправили :(
Все вроде правильно написал.


Вот мой код

Code:
FORM get_vedom .
  TABLES: esll, eskl, ekkn, ekpo.
  DATA: lt_esll TYPE TABLE OF esll WITH HEADER LINE,
        lt_ekkn TYPE TABLE OF ekkn WITH HEADER LINE,
        lt_eskl TYPE TABLE OF eskl WITH HEADER LINE.

  DATA: bapi_essr LIKE bapiessrc.
  DATA: bapi_esll LIKE bapiesllc OCCURS 1
                  WITH HEADER LINE.
  DATA: bapi_eskl LIKE bapiesklc OCCURS 1
                  WITH HEADER LINE.
  DATA: bapi_eskn LIKE bapiesknc OCCURS 1
                  WITH HEADER LINE.
  DATA: bapi_return TYPE bapiret2 OCCURS 1 .

  DATA: serial_no LIKE bapiesknc-serial_no,
        line_no   LIKE bapiesllc-line_no.

  CLEAR:   bapi_essr, bapi_esll, bapi_eskn, bapi_eskl, bapi_return.
  REFRESH: bapi_esll, bapi_eskn, bapi_eskl, bapi_return.

* Собираем данные из таблиц заказа
* Берем пакет из заказа
  SELECT SINGLE * FROM ekpo INTO ekpo WHERE ebeln = ebeln AND ebelp = 10.
* Берем суб-пакет из пакета
  SELECT SINGLE * FROM esll INTO esll WHERE packno EQ ekpo-packno.
* Берем услуги из суб-пакета
  SELECT * FROM esll INTO TABLE lt_esll WHERE packno EQ esll-sub_packno.
* Берем Контировки в документе закупки
  SELECT * FROM ekkn INTO TABLE lt_ekkn WHERE ebeln EQ ebeln AND ebelp = 10.
* Присвоение контировки
  SELECT * FROM eskl INTO TABLE lt_eskl WHERE packno = esll-sub_packno.

* Entry sheet header
  bapi_essr-po_number = ebeln.
  bapi_essr-po_item   = 10.
  bapi_essr-short_text = 'KRATKII TEKST'.
  bapi_essr-accasscat = 'K'.
  bapi_essr-pckg_no = ekpo-packno.

* Services items
  serial_no = 0.
  line_no = 1.                                      "Outline
  bapi_esll-pckg_no = ekpo-packno.
  bapi_esll-line_no = 1.
  bapi_esll-outl_level = '0'.
  bapi_esll-outl_ind = 'X'.
  bapi_esll-subpckg_no = esll-sub_packno.
  bapi_esll-short_text = ekpo-txz01.
  APPEND bapi_esll.

  LOOP AT lt_eskl.
* Service
    READ TABLE lt_esll WITH KEY packno = lt_eskl-packno
                                introw = lt_eskl-introw.
    READ TABLE lt_ekkn WITH KEY ebeln  = ebeln
                                ebelp  = 10
                                zekkn  = lt_eskl-zekkn.

    CLEAR bapi_esll.
*    MOVE-CORRESPONDING xesll TO bapi_esll.
    bapi_esll-line_no  = lt_esll-introw.
    bapi_esll-ext_line = lt_esll-extrow.
    bapi_esll-service = lt_esll-srvpos.
    bapi_esll-serv_type = '030'.
    bapi_esll-base_uom = 'LE'.
    bapi_esll-outl_ind = ''.
    bapi_esll-quantity = lt_esll-menge.
    bapi_esll-gr_price = lt_esll-netwr.
    bapi_esll-pckg_no = esll-sub_packno.
    bapi_esll-short_text = esll-ktext1.
    APPEND bapi_esll.

* Account assignment
    CLEAR bapi_eskl.
    bapi_eskl-pckg_no = lt_eskl-packno.
    bapi_eskl-line_no = lt_eskl-introw.
    bapi_eskl-serno_line = lt_eskl-numkn.
    bapi_eskl-quantity   = lt_eskl-menge.
    bapi_eskl-serial_no  = lt_eskl-zekkn.
    bapi_eskl-percentage = lt_eskl-wproz.
    APPEND bapi_eskl.


    bapi_eskn-costcenter = lt_ekkn-kostl.
    bapi_eskn-gl_account = lt_ekkn-sakto.
    bapi_eskn-order      = lt_ekkn-ebeln.
    bapi_eskn-pckg_no    = ekpo-packno.    "lt_eskl-packno.
    bapi_eskn-serial_no  = lt_ekkn-zekkn.
    APPEND bapi_eskn.


  ENDLOOP.


  CALL FUNCTION 'BAPI_ENTRYSHEET_CREATE'
    EXPORTING
      entrysheetheader            = bapi_essr
      testrun                     = ' '
    TABLES
      entrysheetaccountassignment = bapi_eskn
      entrysheetservices          = bapi_esll
      entrysheetsrvaccassvalues   = bapi_eskl
      return                      = bapi_return.

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

ENDFORM.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, авг 28 2008, 13:29 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Цитата:
* Account assignment
CLEAR bapi_eskl.
bapi_eskl-pckg_no = lt_eskl-packno.
bapi_eskl-line_no = 1. "lt_eskl-introw. <-- Вот.
bapi_eskl-serno_line = lt_eskl-numkn.
bapi_eskl-quantity = lt_eskl-menge.
bapi_eskl-serial_no = lt_eskl-zekkn.
bapi_eskl-percentage = lt_eskl-wproz.
APPEND bapi_eskl.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, авг 29 2008, 06:42 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 06:40
Сообщения: 60
Откуда: Белебей !
Пол: Мужской
Code:
bapi_eskl-line_no = 1. "lt_eskl-introw. <-- Вот.


Исправил. но теперь соообщение
"Услуга 4000012: количество 2,000 превышает количество 1,000 в заказе на поставку" :cry:


Спасибо за ответы.!
Буду пакетником делать... а то уже сдавать надо :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, авг 29 2008, 14:09 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 06:40
Сообщения: 60
Откуда: Белебей !
Пол: Мужской
Сделал через покетник !!! Работает :lol: :pivo:


В самой БАПИ может глюк какой-то,. или все же не правильно что-то делал в ее использовании....


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, авг 29 2008, 15:23 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Ну мне тут сложно уже что-то сказать, т.к. у меня ваш код сработал без предупреждений.
Единственное, что может заказ у меня шибко правильный был в тесте.
А пакетник - это плохой вариант.

upd. может быть два раза прописывается одна и так же услуга?

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB