Задача массового изменения цен в инфозаписях поставщика.

Автор АртемБар, Травень 17, 2011, 01:59:28 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

АртемБар

Добрый день!
Стоит следующая задача:
Необходимо массово менять цены в инфо-записях поставщика, данные о новых ценах будут поступать из файла в формате: материал, поставщик, цена, дата.  Сейчас это делается вручную.
Поскольку опыта маловато, пытался реализовать процедуру через макрос (LSMW), записью транзакции MEKP, попытка не удалась, поскольку в макрос не попадает процедура сохранения сделанных изменений.

Вопрос, как проще реализовать данную задачу? Опыта BAPI почти нет, только начинаю постигать, поэтому многое не понятно, прошу дать совет и толкнуть в нужном направлении.


NachDenken

если понадобиться BAPI вот нам название BAPI_PRICES_CONDITIONS, только это функция ничего не проверяет, все проверки нужно будет сделать до ее вызова


Паганель

Цитата: АртемБар від Травень 17, 2011, 01:59:28 ПП
Поскольку опыта маловато, пытался реализовать процедуру через макрос (LSMW), записью транзакции MEKP, попытка не удалась, поскольку в макрос не попадает процедура сохранения сделанных изменений.
Честно, не пробовал (BAPI удобнее) но если Вам проще LSMW, то чего не попробывать писать макрос по me12

Uukrul

Цитата: АртемБар від Травень 17, 2011, 01:59:28 ПП
Необходимо массово менять цены в инфо-записях поставщика
Кстати условие цены надо одно менять, например PB00 или там может быть группа условий?

АртемБар

Цитата: Uukrul від Травень 18, 2011, 12:02:59 ДП
Кстати условие цены надо одно менять, например PB00 или там может быть группа условий?
нет только "PB00"

Пакетным вводом через "me12" получилось, спасибо, не знаю почему не воспользовался ей сразу. 

Может кто знает, или даст ссылку на материал, типа введение "BAPI" с примерами.
То что нашел, не дали полного понимания с чего начать и что делать.



Uukrul

Цитата: Паганель від Травень 18, 2011, 02:29:34 ПП
Ну примеров масса
http://sapforum.biz/index.php/board,16.0.html
В смысле примеров вызова BAPI-функций, а не именно BAPI-функции изменения условия для инфо-записи  ::)

АртемБар

Гм... произошла небольшая неувязочка))), поскольку пока плохо знаю здешний БП, оказывается, заказ делается на основании контракта (а я заказ делал без ссылки на контракт поэтому и цена у меня из инфозаписи подтягивалась). Соответственно условие PB00 меняется в контракте по признакам "контракт", "позиция контракта".

По поводу работы с BAPI, поправьте меня если я ошибаюсь в технологии.
Итак,  технология или структура ФМ:
1. Нахожу подходящую функцию BAPI.
2. пишу функцию 
2.1Нахожу входящие параметры, насколько я понимаю блок "IMPORTING".
2.2. Определяю собственную структуру данных согласно входящим параметрам
2.3. Присваиваю входящим параметрам значения (из  источника).
3. Вызываю BAPI.
Запускаю :)

Подскажите какой лучше "бапи" использовать для изменения цен к контракту, а лучше подскажите как их искать.

Uukrul

Цитата: АртемБар від Травень 23, 2011, 01:18:35 ПП
Подскажите какой лучше "бапи" использовать для изменения цен к контракту, а лучше подскажите как их искать.
Ну есть транзакция такая BAPI, ну это те, что глобальные ФМ, там можно начинать искать как для начала, а остальное.. ну система поставляется в исходных кодах на языке ABAP, идешь в функциональность изменения инфо-записи закупки и дальше.. уже изучаешь код на предмет поиска подходящих функций.

АртемБар

#9
У меня лузерская проблема  :), сотворил я "нечто" (приведено ниже - написано для теста, чтобы было с чем ковыряться), захотел я посмотреть как работает, запустил, выпадает в ошибку "bapi_contract_getdetail not found"

Пробовал добавлять ФМ через  include bapi_contract_change.

Подскажите, что нужно сделать, сам догадаться не могу...   



FUNCTION ZAT_CONTRCHPRICE .
*"----------------------------------------------------------------------
*"*"Ëîêàëüíûé èíòåðôåéñ:
*"----------------------------------------------------------------------


data: my_PURCHASINGDOCUMENT like BAPIMEOUTHEADER-NUMBER value '4600000130', "Íîìåð äîãîâîðà
      my_ITEM_DATA like  BAPIFLAG-BAPIFLAG value 'X',
      my_ACCOUNT_DATA like  BAPIFLAG-BAPIFLAG value SPACE,
      my_CONDITION_DATA like  BAPIFLAG-BAPIFLAG value SPACE,
      my_TEXT_DATA like  BAPIFLAG-BAPIFLAG value SPACE,
      my_PARTNER_DATA like  BAPIFLAG-BAPIFLAG value SPACE,
      my_RELEASE_DATA like  BAPIFLAG-BAPIFLAG value SPACE,                  "
      my_HEADER like  BAPIMEOUTHEADER,                                      "Çàãîëîâîê äîãîâîðà
      my_ITEM_CONDITION like BAPIMEOUTCONDITION occurs 10 ,
      ITEM_CONDITION like BAPIMEOUTCONDITION occurs 10.              "Çàïèñü óñëîâèÿ öåíû

call function 'bapi_contract_getdetail'
IMPORTING
  PURCHASINGDOCUMENT = my_PURCHASINGDOCUMENT
  iTEM_DATA = my_iTEM_DATA
  ACCOUNT_DATA = my_ACCOUNT_DATA
  CONDITION_DATA = my_condition_data
  tEXT_DATA = my_tEXT_DATA
  PARTNER_DATA = my_PARTNER_DATA
  RELEASE_DATA = my_RELEASE_DATA
tables
  my_ITEM_CONDITION = ITEM_CONDITION.


call function 'bapi_contract_change'
EXPORTING
PURCHASINGDOCUMENT = my_PURCHASINGDOCUMENT
tables
  ITEM_CONDITION = my_ITEM_CONDITION.

endFUNCTION.


Uukrul

Цитата: АртемБар від Травень 26, 2011, 02:28:47 ПП
захотел я посмотреть как работает, запустил, выпадает в ошибку "bapi_contract_getdetail not found"
Ну да... имя ФМ, которое в скобках, надо писать большими буквами... как говорится это как раз то место, где размер имеет значение.

Цитата: АртемБар від Травень 26, 2011, 02:28:47 ПП
Пробовал добавлять ФМ через  include bapi_contract_change.
Мда.. может начать читать хотя бы с вот этой книжки:  http://sapforum.biz/index.php/topic,117.0.html а то вы так далеко в своих проблемах зайдете....

АртемБар

Спасибо за подсказку...  думал, регистр не имеет значения, специально, у более "опытного" человека спрашивал...
... книжка у меня уже такая есть, читаю ...
но ситуация как всегда... время мало, а сделать надо вчера  :'(

Спасибо, что не бросаете!

Uukrul

Цитата: АртемБар від Травень 26, 2011, 03:26:55 ПП
но ситуация как всегда... время мало, а сделать надо вчера  :'(
Ну я еще не встречал ситуации когда делать надо на завтра :-)

АртемБар

Добрый день!
Прошу помощи, не понимаю, почему не получается изменить цену условия? 
Код ниже прошу сильно не "бить".., опыта маловато.

UNCTION ZAT_CONTRCHPRICE.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"----------------------------------------------------------------------

data: " параметры для функций BAPI_CONTRACT_GETDETAIL
      my_ITEM_DATA      like  BAPIFLAG-BAPIFLAG value 'X',  "Активирует наполнение таблицы ITEM(строки контрактов)
      my_ACCOUNT_DATA   like  BAPIFLAG-BAPIFLAG value SPACE,
      my_CONDITION_DATA like  BAPIFLAG-BAPIFLAG value 'X',  "Активирует наполнение таблицы ITEM_CONDITION(строки условий, строк контрактов)
      my_TEXT_DATA        like  BAPIFLAG-BAPIFLAG value SPACE,
      my_PARTNER_DATA   like  BAPIFLAG-BAPIFLAG value SPACE,
      my_RELEASE_DATA   like  BAPIFLAG-BAPIFLAG value SPACE,                 
      " данные
      my_PURCHASINGDOCUMENT like BAPIMEOUTHEADER-NUMBER value '4600000130',     "Номер договора
      my_HEADER                       like BAPIMEOUTHEADER,                               "Заголовок договора
      my_ITEM_CONDITION          like BAPIMEOUTCONDITION occurs 300 with header line," Таблица условия цен
      LT_ITEM_CONDITION          like BAPIMEOUTCONDITION occurs 300 with header line," Строка таблицы условия цен
      my_ITEM_CONDITIONX        like BAPIMEOUTCONDITIONX occurs 1 with header line, "Таблица изменяемых записей
      my_ITEM                           like BAPIMEOUTITEM occurs 300 with header line,
      my_ITEM_COND_VALIDITY    like  BAPIMEOUTVALIDITY occurs 10,
      my_ITEM_COND_SCALE_VALUE like  BAPIMEOUTITEMSCALEVAL occurs 10,
      my_ITEM_COND_SCALE_QUAN  like  BAPIMEOUTITEMSCALEQUAN occurs 10,
      my_ITEM_TEXT             like  BAPIMEOUTITEMTEXT occurs 10.

* Функция просмотра деталей контракта
call function 'BAPI_CONTRACT_GETDETAIL'
Exporting
PURCHASINGDOCUMENT = my_PURCHASINGDOCUMENT
iTEM_DATA          = my_iTEM_DATA
ACCOUNT_DATA       = my_ACCOUNT_DATA
CONDITION_DATA     = my_condition_data
tEXT_DATA          = my_tEXT_DATA
PARTNER_DATA       = my_PARTNER_DATA
RELEASE_DATA       = my_RELEASE_DATA
Importing
HEADER             = my_HEADER
tables
item                  = my_item
ITEM_CONDITION        = my_ITEM_CONDITION
ITEM_COND_VALIDITY    = my_ITEM_COND_VALIDITY
ITEM_COND_SCALE_VALUE = my_ITEM_COND_SCALE_VALUE
ITEM_COND_SCALE_QUAN  = my_ITEM_COND_SCALE_QUAN
ITEM_TEXT             = my_ITEM_TEXT.
* Находим позицию договора по номеру материала без пометки на удаление.
read table           my_ITEM with key MATERIAL = '80170497' DELETE_IND = space.
* Находим строку таблицы условий для изменения.
read table my_ITEM_CONDITION with key item_no = my_ITEM-ITEM_NO.
*select * from my_ITEM_CONDITION into table lt_item_CONDITION where item_no = my_ITEM-ITEM_NO.
*loop at my_ITEM_CONDITION.
move-corresponding my_ITEM_CONDITION to lt_ITEM_CONDITION. " Копируем запись.
* Присваиваем новое значение цены.
lt_item_CONDITION-cond_VALUE = my_ITEM_CONDITION-cond_VALUE + 35. " Присваиваем новое значение.
append lt_ITEM_CONDITION. "Добавить запись
*endloop

"Задать признаки записи на изменение my_ITEM_CONDITION
my_ITEM_CONDITIONx-ITEM_NO    = my_ITEM_CONDITION-ITEM_NO.
my_ITEM_CONDITIONx-SERIAL_ID  = my_ITEM_CONDITION-SERIAL_ID.
my_ITEM_CONDITIONx-COND_COUNT = my_ITEM_CONDITION-COND_COUNT.
my_ITEM_CONDITIONx-cond_VALUE = 'X'.
append my_ITEM_CONDITIONx. "Добавить запись

* Функция изменения контракта.
call function 'BAPI_CONTRACT_CHANGE'
Exporting
PURCHASINGDOCUMENT = my_PURCHASINGDOCUMENT
Tables
ITEM_CONDITION     = lt_ITEM_CONDITION
ITEM_CONDITIONX    = my_ITEM_CONDITIONX.

write my_ITEM_CONDITION-cond_VALUE.

endFUNCTION.


NachDenken

после вызова BAPI
как правило требуется вызвать еще 1 BAPI "закрепляющую эффект"
чтобы изменнеия втсупили в силу

bapi_transaction_commit

АртемБар


АртемБар

NachDenken:

Добавил следующий код, результат тот же... ???


*Применить изменения
call function 'BAPI_TRANSACTION_COMMIT'
importing
RETURN = my_RETURN.


NachDenken

нужно было RETURN после вызова BAPI_CONTRACT_CHANGE посмотреть может там ошибки были указаны

АртемБар

#18
я глянул в отладчике return, вроде содержание не "криминальное"... (хотя, как выглядят ошибки там, я не знаю)


вот что содержит return:
1   S   BAPI   002   Инстанция 4600000130 типа объекта PurchasingContract изменена.      000000   PurchasingContract   4600000130         HEADER   0   BSART   ATPCLNT100
2   S   06   023   Продукты-СТОИМОСТН 4600000130: изменено      000000   Продукты-СТОИМОСТН   4600000130         HEADER   0   BSART   ATPCLNT100
3   W   MEOUT   018   Для вывода документа закупки сообщение не создано      000000               HEADER   0   BSART   ATPCLNT100
______________________________







АртемБар

что странно, после выполнения ф-ии "BAPI_CONTRACT_CHANGE"
переменная lt_ITEM_CONDITION меняет свое значение на "пусто", а my_ITEM_CONDITIONX сохраняет значение, которое было до выполнения функции.