Текущее время: Вс, авг 03 2025, 23:18

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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