Sapforum.Biz

Логистика => Управление материальными потоками (MM) => Тема розпочата: АртемБар від Травень 17, 2011, 01:59:28 ПП

Назва: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: АртемБар від Травень 17, 2011, 01:59:28 ПП
Добрый день!
Стоит следующая задача:
Необходимо массово менять цены в инфо-записях поставщика, данные о новых ценах будут поступать из файла в формате: материал, поставщик, цена, дата.  Сейчас это делается вручную.
Поскольку опыта маловато, пытался реализовать процедуру через макрос (LSMW), записью транзакции MEKP, попытка не удалась, поскольку в макрос не попадает процедура сохранения сделанных изменений.

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

Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: NachDenken від Травень 17, 2011, 03:54:41 ПП
если понадобиться BAPI вот нам название BAPI_PRICES_CONDITIONS, только это функция ничего не проверяет, все проверки нужно будет сделать до ее вызова

Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: Паганель від Травень 17, 2011, 08:23:52 ПП
Цитата: АртемБар від Травень 17, 2011, 01:59:28 ПП
Поскольку опыта маловато, пытался реализовать процедуру через макрос (LSMW), записью транзакции MEKP, попытка не удалась, поскольку в макрос не попадает процедура сохранения сделанных изменений.
Честно, не пробовал (BAPI удобнее) но если Вам проще LSMW, то чего не попробывать писать макрос по me12
Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: Uukrul від Травень 18, 2011, 12:02:59 ДП
Цитата: АртемБар від Травень 17, 2011, 01:59:28 ПП
Необходимо массово менять цены в инфо-записях поставщика
Кстати условие цены надо одно менять, например PB00 или там может быть группа условий?
Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: АртемБар від Травень 18, 2011, 09:06:57 ДП
Цитата: Uukrul від Травень 18, 2011, 12:02:59 ДП
Кстати условие цены надо одно менять, например PB00 или там может быть группа условий?
нет только "PB00"

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

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

Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: Паганель від Травень 18, 2011, 02:29:34 ПП
Ну примеров масса
http://sapforum.biz/index.php/board,16.0.html
Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: Uukrul від Травень 18, 2011, 03:45:42 ПП
Цитата: Паганель від Травень 18, 2011, 02:29:34 ПП
Ну примеров масса
http://sapforum.biz/index.php/board,16.0.html
В смысле примеров вызова BAPI-функций, а не именно BAPI-функции изменения условия для инфо-записи  ::)
Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: АртемБар від Травень 23, 2011, 01:18:35 ПП
Гм... произошла небольшая неувязочка))), поскольку пока плохо знаю здешний БП, оказывается, заказ делается на основании контракта (а я заказ делал без ссылки на контракт поэтому и цена у меня из инфозаписи подтягивалась). Соответственно условие PB00 меняется в контракте по признакам "контракт", "позиция контракта".

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

Подскажите какой лучше "бапи" использовать для изменения цен к контракту, а лучше подскажите как их искать.
Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: Uukrul від Травень 23, 2011, 02:17:30 ПП
Цитата: АртемБар від Травень 23, 2011, 01:18:35 ПП
Подскажите какой лучше "бапи" использовать для изменения цен к контракту, а лучше подскажите как их искать.
Ну есть транзакция такая BAPI, ну это те, что глобальные ФМ, там можно начинать искать как для начала, а остальное.. ну система поставляется в исходных кодах на языке ABAP, идешь в функциональность изменения инфо-записи закупки и дальше.. уже изучаешь код на предмет поиска подходящих функций.
Назва: Re: Задача массового изменения цен в инфозап&
Відправлено: АртемБар від Травень 26, 2011, 02:28:47 ПП
У меня лузерская проблема  :), сотворил я "нечто" (приведено ниже - написано для теста, чтобы было с чем ковыряться), захотел я посмотреть как работает, запустил, выпадает в ошибку "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.

Назва: Re: Задача массового изменения цен в инфозап&
Відправлено: Uukrul від Травень 26, 2011, 02:47:37 ПП
Цитата: АртемБар від Травень 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 а то вы так далеко в своих проблемах зайдете....
Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: АртемБар від Травень 26, 2011, 03:26:55 ПП
Спасибо за подсказку...  думал, регистр не имеет значения, специально, у более "опытного" человека спрашивал...
... книжка у меня уже такая есть, читаю ...
но ситуация как всегда... время мало, а сделать надо вчера  :'(

Спасибо, что не бросаете!
Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: Uukrul від Травень 26, 2011, 03:31:25 ПП
Цитата: АртемБар від Травень 26, 2011, 03:26:55 ПП
но ситуация как всегда... время мало, а сделать надо вчера  :'(
Ну я еще не встречал ситуации когда делать надо на завтра :-)
Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: АртемБар від Червень 02, 2011, 07:10:11 ДП
Добрый день!
Прошу помощи, не понимаю, почему не получается изменить цену условия? 
Код ниже прошу сильно не "бить".., опыта маловато.

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.

Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: NachDenken від Червень 02, 2011, 10:58:40 ДП
после вызова BAPI
как правило требуется вызвать еще 1 BAPI "закрепляющую эффект"
чтобы изменнеия втсупили в силу

bapi_transaction_commit
Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: АртемБар від Червень 02, 2011, 11:53:27 ДП
NachDenken: спасибо, сейчас попробую.
Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: АртемБар від Червень 02, 2011, 01:33:34 ПП
NachDenken:

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


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

Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: NachDenken від Червень 02, 2011, 01:56:05 ПП
нужно было RETURN после вызова BAPI_CONTRACT_CHANGE посмотреть может там ошибки были указаны
Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: АртемБар від Червень 02, 2011, 02:12:28 ПП
я глянул в отладчике 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
______________________________






Назва: Re: Задача массового изменения цен в инфозаписях поставщика.
Відправлено: АртемБар від Червень 02, 2011, 02:44:48 ПП
что странно, после выполнения ф-ии "BAPI_CONTRACT_CHANGE"
переменная lt_ITEM_CONDITION меняет свое значение на "пусто", а my_ITEM_CONDITIONX сохраняет значение, которое было до выполнения функции.