Текущее время: Вс, июл 27 2025, 16:48

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Вт, мар 09 2010, 19:28 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 16 2007, 19:00
Сообщения: 168
Откуда: город
Добрый день!
У меня есть созданная входящая поставка. Необходимо сделать проводку материала к ней. Использовал WS_DELIVERY_UPDATE_2, но он не всегда срабатывает. Подскажите альтернативу, желательно в виде ввел номер поставки и запустил FM/BAPI.
Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 10:15 
Специалист
Специалист

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
Как это "не всегда срабатывает"? А когда не срабатывает, что пишет?
У меня этот ФМ прекрасно работает.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 11:12 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
Могу предложить более сложный способ.
BAPI_GOODSMVT_CREATE
Примеров в интернете огромное количество, поэтому приводить здесь не буду, тем более у меня код очень громоздкий - огромное количество условий, доп. логики и т.д.
Единственная особенность - в таблице goodsmvt_item нужно заполнять поля:
deliv_numb_to_search = <номер поставки (lips-vbeln)>,
deliv_item_to_search = <позиция поставки (lips-posnr)>

Не самый простой, возможно, способ (не получится ввести номер и запустить), но достаточно гибкий - можно создавать доки материала только отдельные позиции и даже не на полное количество !

Еще - у меня входящая поставка была создана на основе заказа на поставку (me21n), поэтому нет полной гарантии что получится для поставки другого типа.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 12:26 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 16 2007, 19:00
Сообщения: 168
Откуда: город
vakito написал(а):
Как это "не всегда срабатывает"? А когда не срабатывает, что пишет?
У меня этот ФМ прекрасно работает.

Создается входящая поставка с помощью gn_delivery_create. Делается commit work and wait. Затем вызывается ws_delivery_update_2, чтобы сделать проводку материала:
Code:
  ls_vbkok-vbeln_vl = uv_vbeln.
  ls_vbkok-wabuc    = 'X'.
CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
    EXPORTING
      vbkok_wa      = ls_vbkok
      commit        = space
      delivery      = ls_vbkok-vbeln_vl
      synchron      = space
    IMPORTING
      ef_error_any  = lv_error_any
    TABLES
      vbpok_tab     = lt_vbpok
      prot          = lt_prot
    EXCEPTIONS
      error_message = 1
      OTHERS        = 2.

Обычно все отрабатывает и создается goods receipt, но иногда получается так, что ФМ возвращает sy-subrc = 1, а lv_error_any и lt_prot пустые. Хотя если дебажить, то все работает всегда. Такое чувство, что поставка иногда не успевает создаться перед запуском WS_DELIVERY_UPDATE_2. Хотя commit work and wait стоит. Это для меня странно, не смог побороть. Подскажете причины?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 12:29 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
Перед созданием поставки установите
Code:
SET UPDATE TASK LOCAL


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 12:34 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
+1
И еще почитайте здесь.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 13:38 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 16 2007, 19:00
Сообщения: 168
Откуда: город
Rokhay написал:
Перед созданием поставки установите
Code:
SET UPDATE TASK LOCAL

Не помогло. Если поставить точку останова до ws_delivery_update_2 и затем нажать F6, то отрабатывает без ошибок, если поставить точку останова после - sy-subrc = 1 (как я описывал выше).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 13:46 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 16 2007, 19:00
Сообщения: 168
Откуда: город
raaleksandr, спасибо за совет. Если ничего проще не найдется (или моя ошибка не решится), посмотрю в сторону этой BAPI.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 14:10 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
Уже второй человек, которому не помогло SET UPDATE TASK LOCAL :(
Почитайте ссылку, которую я выше оставлял, там обсуждается альтернативный, хоть и некрасивый метод - ставить таймаут. Ставить его можно по-умному, сделав оптимальным время ожидания и 100%-ным результат. А от того, какое BAPI вы вызовете, результат не изменится - ведь причина не в самом BAPI, а в отложенном обновлении. Если ваше BAPI вас устраивает (когда работает), добейтесь того, чтобы оно работало всегда.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 14:23 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 16 2007, 19:00
Сообщения: 168
Откуда: город
raaleksandr написал:
Уже второй человек, которому не помогло SET UPDATE TASK LOCAL :(
Почитайте ссылку, которую я выше оставлял, там обсуждается альтернативный, хоть и некрасивый метод - ставить таймаут. Ставить его можно по-умному, сделав оптимальным время ожидания и 100%-ным результат. А от того, какое BAPI вы вызовете, результат не изменится - ведь причина не в самом BAPI, а в отложенном обновлении. Если ваше BAPI вас устраивает (когда работает), добейтесь того, чтобы оно работало всегда.

Читал, спасибо. Точно такой же случай, как у меня (только БАПИ разные). Мой ФМ меня полностью устраивает (не надо никакой специальной подготовки данных), поэтому думаю, что Вы действительно правы, и мне стоит сделать, как в примере по Вашей ссылке. Если найду красивое решение проблемы - сообщу здесь.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 14:41 
Специалист
Специалист

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
raaleksandr написал:
Могу предложить более сложный способ.BAPI_GOODSMVT_CREATE

Этим методом создастся поступление материала со ссылкой на поставку. Это не то же самое, что нажать кнопку поступдения материала в поставке. Возникает несколько другой поток документов. В частности, не будет записей в VBFA (поставка -- документ материала), не поменяется статус у поставки и много чего еще.

влад
попробуйте перед вызовом второго ФМ написать WAIT UP TO '0.001' SECONDS.
Потому как
Цитата:
Replies to asynchronous calls can only be received if there is a change of roll area (e.g. a screen change) or if you use WAIT (online and in the background). Since the ABAP debugger has its own internal flow logic (just like related roll area changes), this can have a considerable effect on the execution of the WAIT statement in debugging mode.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 15:02 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
Цитата:
Этим методом создастся поступление материала со ссылкой на поставку. Это не то же самое, что нажать кнопку поступдения материала в поставке. Возникает несколько другой поток документов. В частности, не будет записей в VBFA (поставка -- документ материала), не поменяется статус у поставки и много чего еще.

Да, абсолютная правда. vbfa я обновлял доп. ФМ-ником, в общем танцевал с бубном. Тогда, кстати, и статус обновляется (на основе vbfa). Плюс "моего" метода - это возможность приходовать не полностью, попозиционно причем с указанием количества! Для полного приходование всех позиций разом есть более нормальные методы, согласен.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 16:09 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 16 2007, 19:00
Сообщения: 168
Откуда: город
vakito написал(а):
влад
попробуйте перед вызовом второго ФМ написать WAIT UP TO '0.001' SECONDS.
Потому как
Цитата:
Replies to asynchronous calls can only be received if there is a change of roll area (e.g. a screen change) or if you use WAIT (online and in the background). Since the ABAP debugger has its own internal flow logic (just like related roll area changes), this can have a considerable effect on the execution of the WAIT statement in debugging mode.

Именно 0.001 секунды оказалось мало, не всегда работает. Я не нашел красивого решения, поэтому будет что-то вроде:
Code:
  lv_sec = '0.1'.
  DO 10 TIMES. " waiting for the DB to be updated (after del. creation)
    CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
      EXPORTING
        vbkok_wa      = ls_vbkok
        commit        = space
        delivery      = ls_vbkok-vbeln_vl
        synchron      = space
      IMPORTING
        ef_error_any  = lv_error_any
      TABLES
        vbpok_tab     = lt_vbpok
        prot          = lt_prot
      EXCEPTIONS
        error_message = 1
        OTHERS        = 2.

    IF sy-subrc IS NOT INITIAL.
      WAIT UP TO lv_sec SECONDS.
      ADD '0.1' TO lv_sec.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 16:27 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
Раз уж вы выложили код, то позволю себе сделать пару замечаний:
1. Для реальной продуктивной эксплуатации я бы сделал не DO 10 TIMES, а все 100 :) - сервер иногда бывает очень загружен, нескольких секунд может быть мало
2. Я бы советовал обрабатывать не sy-subrc, а определенную ошибку (из таблицы prot), которая возникает именно в вашем случае (когда запись в базе еще не создалась). Потому что если там будет какая-то другая, реальная, ошибка, то ФМ-ник все равно выполнится много раз, что наверное не очень правильно.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Goods receipt posting for a delivery (проводка материала для поставки)
СообщениеДобавлено: Ср, мар 10 2010, 17:06 
Менеджер
Менеджер

Зарегистрирован:
Вт, авг 17 2004, 10:25
Сообщения: 627
vakito написал(а):
Этим методом создастся поступление материала со ссылкой на поставку. Это не то же самое, что нажать кнопку поступдения материала в поставке. Возникает несколько другой поток документов. В частности, не будет записей в VBFA (поставка -- документ материала), не поменяется статус у поставки и много чего еще.


В FAQ ветки ММ можно найти как заставить систему обновлять поток документов настройками.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

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


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

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


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

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