Текущее время: Пн, июн 23 2025, 02:39

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Ср, апр 01 2015, 12:32 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, авг 01 2012, 11:57
Сообщения: 87
Откуда: Минск, РБ
Пол: Женский
МОжет быть кто-то с таким сталкивался и знает, как победить такую проблему.

Загружается файл, на основе данных из файла формируется заказ, по которому автоматически создается поставка.
Затем транзакция SNPM ( это такая беда, реализация учета по серийным номерам) обрабатывает эти поставки и формирует по ним отпуск. Проблема в том, что эта SNPM-транзакиця изменяет даты в поставке, чего делать нельзя. Эксперименты и наблюдения показали, что если поставку сначала изменить (в принципе, чтобы было заполнено дата изменения), а потом уже обрабатывать SNPM-транзакцией, то даты не изменяются. Причем этот эффект не зависит, запускается SNPM-транзакция вручную или в программе как ФМ.
Поэтому решили перед SNPM-транзакцией обрабатывать поставки ФМ WS_DELIVERY_UPDATE, устанавливая дату фактического отпуска материала.
И все бы хорошо, когда поставка одна обрабатывается этой ФМ. Но когда в цикле - во всех обработанных поставках, кроме последней, почти все даты, кроме даты фактического отпуска материала, пустые! Проверяла в дебаггере - создается поставка нормально, все даты есть.
В структуре, которая передается в WS_DELIVERY_UPDATE, задала явно все даты и установила признаки соответствующие - никакого эффекта.

CLEAR: lw_vbkok, lc_vbupd_err.
lw_vbkok-vbeln_vl = <lw_sertxt>-vbeln_vl.
lw_vbkok-vbtyp_vl = 'J'.
lw_vbkok-borgr_kzwad = 'X'.
lw_vbkok-wadat_ist = <lw_billing>-date.
lw_vbkok-wadat = <lw_billing>-date.
lw_vbkok-kzwad = 'X'. "Confirm planned goods issue date
lw_vbkok-lddat = <lw_billing>-date.
lw_vbkok-KZLDDAT = 'X'. " Change Loading Date

CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
VBKOK_WA = lw_vbkok
SYNCHRON = 'X'
COMMIT = 'X'
IMPORTING
EF_ERROR_ANY_0 = lc_vbupd_err

Порылась в интернетах - тоже нигде не нашла, чтобы кто-то сталкивался с такой проблемой.
ЧТО я не так делаю??? :?

Единственное, что нашла - в примерах нескольких не передают COMMIT = 'X', а используют после вызова, если нет ошибок
COMMIT WORK AND WAIT.

_________________
Нам не дано предугадать, как слово наше отзовется.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Ср, апр 01 2015, 12:33 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, авг 01 2012, 11:57
Сообщения: 87
Откуда: Минск, РБ
Пол: Женский
Да, с WS_DELIVERY_UPDATE_2 - такая же ерунда

Упс, я видимо не в том разделе тему создала, нужно было в программировании?

_________________
Нам не дано предугадать, как слово наше отзовется.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Ср, апр 01 2015, 14:53 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, авг 01 2012, 11:57
Сообщения: 87
Откуда: Минск, РБ
Пол: Женский
проверила
COMMIT WORK AND WAIT не помогает

_________________
Нам не дано предугадать, как слово наше отзовется.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Ср, апр 01 2015, 15:56 
Гуру-маршал
Гуру-маршал
Аватара пользователя

Зарегистрирован:
Пт, янв 30 2009, 09:59
Сообщения: 1594
Откуда: Москва, Минск
Пол: Мужской
Добрый день.
ЧТо есть SNPM - Транзакция?
Это ваша собственная разработка?

_________________
Лучше быть умным и иногда тупить, чем быть тупым и постоянно умничать!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Ср, апр 01 2015, 17:26 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, авг 01 2012, 11:57
Сообщения: 87
Откуда: Минск, РБ
Пол: Женский
DED_MOROZ написал:
Добрый день.
ЧТо есть SNPM - Транзакция?
Это ваша собственная разработка?

Нет, не наша... Это вариант реализации учета по серийным номерам, разработка не наша и не САП (фаарон). Заменить не можем, обсуждать, почему оно - тоже бессмысленно. Это было решено свыше, головной организацией.

----

В порыве отчаяния вынесла вызов WS_DELIVERY_UPDATE в отдельную процедуру. Не помогло...

_________________
Нам не дано предугадать, как слово наше отзовется.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Ср, апр 01 2015, 18:52 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 479
Похажая проблема у меня решилась проверкой на блокировку.
ФМ может возвращать о том, какая ошибка была.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Чт, апр 02 2015, 09:01 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, авг 01 2012, 11:57
Сообщения: 87
Откуда: Минск, РБ
Пол: Женский
olegbash написал(а):
Похажая проблема у меня решилась проверкой на блокировку.
ФМ может возвращать о том, какая ошибка была.


А можно подробнее?

И если блокировка, то как одна дата устанавливается, а все остальные зачищаются (в пустое поле)? и устанавлюваются признаки изменения поставки (имя пользователя и дата изменения)?

ФМ у меня возвращает в EF_ERROR_ANY = space

_________________
Нам не дано предугадать, как слово наше отзовется.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Чт, апр 02 2015, 09:58 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, авг 01 2012, 11:57
Сообщения: 87
Откуда: Минск, РБ
Пол: Женский
:oops:
Решила сегодня еще раз протестировать, чтобы определить, на каком все же этапе "портится" поставка. Так как видела, что сразу после изменения - все замечательно, портится она потом, где то на следующих шагах.
И вот.
Портится поставка после отработки BAPI_SALESORDER_CREATEFROMDAT2, которая создает новый заказ. Так что пойду смотреть, что там напрограммировали до меня, попробую почистить все таблицы и переменные, которые передаются этой бапишке.

--------
Зачистка всех передаваемых параметров не помогла.
Поставка по заказу создается автоматически. И вот когда создан новый заказ, все хорошо, выполняется BAPI_TRANSACTION_COMMIT, на этом этапе и "портится" предыдущая поставка.

Причем в другой аналогичной программе, в которой просто создаются заказы - поставки, и после этого поставка уже не изменяется, даты в поставках нормальные. (но там дата фактуры не подходит, с чего все началось)

_________________
Нам не дано предугадать, как слово наше отзовется.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Чт, апр 02 2015, 12:26 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, фев 02 2009, 10:20
Сообщения: 89
Пол: Мужской
Когда-то давно тоже использовал WS_DELIVERY_UPDATE_2. Если не путаю, тоже были проблемы с очисткой данных, пришлось написать отдельный отчет, в котором вызывается этот ФМ, а отчет вызывается из основной программы через submit. Можно как вариант завернуть в RFC-обертку и вызывать с destination 'NONE' (+ 'RFC_CONNECTION_CLOSE').

_________________
периодически играю в песочнице :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Чт, апр 02 2015, 13:19 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 479
Fotina написала:
olegbash написал(а):
Похажая проблема у меня решилась проверкой на блокировку.
ФМ может возвращать о том, какая ошибка была.


А можно подробнее?

И если блокировка, то как одна дата устанавливается, а все остальные зачищаются (в пустое поле)? и устанавлюваются признаки изменения поставки (имя пользователя и дата изменения)?

ФМ у меня возвращает в EF_ERROR_ANY = space


пример кода, который обрабатывает несколько поставок в цикле

Code:
LOOP AT ltm_alv_main_tmp ASSIGNING <fs_alv_main>.

        l_wait2 = 1. l_wait1 = 1.
        l_step = 0.

        ls_VBKOK-VBELN_VL = <fs_alv_main>-vbeln.
        ls_VBKOK-VBTYP_VL = 'J'.
        ls_VBKOK-WABUC = 'X'.
        ls_VBKOK-WADAT_IST = <fs_alv_main>-LIKP_WADAT_IST.

        ls_VBKOK-BOLNR = <fs_alv_main>-LIKP_BOLNR.
        ls_VBKOK-TRAID = <fs_alv_main>-LIKP_TRAID.

        CALL FUNCTION 'DEQUEUE_ALL'
          EXPORTING
            _SYNCHRON = 'X'.

        CALL FUNCTION 'DEQUEUE_ALL'
          EXPORTING
            _SYNCHRON = ' '.


        CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
          EXPORTING
            VBKOK_WA                  = ls_VBKOK
*           SYNCHRON                  = ' '
*           NO_MESSAGES_UPDATE_1      = ' '
            COMMIT                    = 'X' """
            DELIVERY                  = <fs_alv_main>-vbeln
            UPDATE_PICKING            = 'X' """
*           NICHT_SPERREN_1           = ' '
*           IF_CONFIRM_CENTRAL        = ' '
*           IF_WMPP                   = ' '
*           IF_GET_DELIVERY_BUFFERED  = ' '
*           IF_NO_GENERIC_SYSTEM_SERVICE       = ' '
            IF_DATABASE_UPDATE_1      = '1' """""
*           IF_NO_INIT_1              = ' '
*           IF_NO_READ_1              = ' '
            IF_ERROR_MESSAGES_SEND    = 'X' """"""
*           IF_NO_BUFFER_REFRESH      = ' '
*           IT_PARTNER_UPDATE         =
*           IT_SERNR_UPDATE           =
*           IF_NO_REMOTE_CHG_1        = ' '
*           IF_NO_MES_UPD_PACK        = ' '
*           IF_LATE_DELIVERY_UPD      = ' '
*           IF_TXT_REINITIALIZE       =
*           IF_BOR_INIT               = ' '
*           SPE_MES_NO_SEND_NODIAL    =
*           IT_LECOMP_1               =
*           IF_BOR_REINITIALIZE       =
*           IF_REPLACE_HUS            = ' '
          IMPORTING
            EF_ERROR_ANY              = l_error_any
            EF_ERROR_IN_ITEM_DELETION = l_ERROR_IN_ITEM_DELETION
            EF_ERROR_IN_POD_UPDATE    = l_ERROR_IN_POD_UPDATE
            EF_ERROR_IN_INTERFACE     = l_ERROR_IN_INTERFACE
            EF_ERROR_IN_GOODS_ISSUE   = l_ERROR_IN_GOODS_ISSUE
            EF_ERROR_IN_FINAL_CHECK   = l_ERROR_IN_FINAL_CHECK
            EF_ERROR_PARTNER_UPDATE   = l_ERROR_PARTNER_UPDATE
            EF_ERROR_SERNR_UPDATE     = l_ERROR_SERNR_UPDATE
          TABLES
*           VBPOK_TAB                 =
            PROT                      = lt_PROTT
*           VERKO_TAB                 =
*           VERPO_TAB                 =
*           VBSUPCON_TAB_1            =
*           IT_VERPO_SERNR            =
*           IT_PACKING                =
*           IT_PACKING_SERNR          =
*           IT_REPACK                 =
*           IT_HANDLING_UNITS_1       =
*           IT_OBJECTS                =
*           ET_CREATED_HUS            =
*           TVPOD_TAB                 =
*           IT_TEXTH                  =
*           IT_TEXTL                  =
*           IT_TMSTMP                 =
*           IT_OBJ_QUAN_CHG           =
*           IT_VBPOK_SPLIT            =
*           IT_BAPIADDR1              =
*           IT_HU_HEADER_EPC          =
*           IT_HU_ITEMS_EPC           =
*           IT_AAC_ITEM_BLOCK         =
*           IT_ORMNG_TABLE            =
*           SERNR_TAB                 =
*           IT_VBPOK_PICK             =
*           IT_HURES                  =
          .

        IF l_error_any is INITIAL.
          " ошибок нет
          COMMIT WORK.

          WHILE l_wait2 eq l_wait1.

            IF l_step le 12.

              CALL FUNCTION 'ENQUEUE_EVVBLKE'
                EXPORTING
                  MODE_LIKP      = 'E'
                  MANDT          = SY-MANDT
                  VBELN          = ls_VBKOK-VBELN_VL
*                 X_VBELN        = ' '
*                 _SCOPE         = '2'
*                 _WAIT          = ' '
*                 _COLLECT       = ' '
                EXCEPTIONS
                  FOREIGN_LOCK   = 1
                  SYSTEM_FAILURE = 2
                  OTHERS         = 3.
              IF SY-SUBRC <> 0.
* Implement suitable error handling here
                wait UP TO 3 SECONDS.
                l_wait2 = l_wait1 = 1.
              else.
                l_wait2 = 2.
                l_wait1 = 1.

                CALL FUNCTION 'DEQUEUE_EVVBLKE'
                  EXPORTING
                    MODE_LIKP = 'E'
                    MANDT     = SY-MANDT
                    VBELN     = ls_VBKOK-VBELN_VL
*                   X_VBELN   = ' '
*                   _SCOPE    = '3'
*                   _SYNCHRON = ' '
*                   _COLLECT  = ' '
                  .
                wait UP TO 2 SECONDS.
              ENDIF.
              l_step = l_step + 1.
            else.
              l_wait2 = 2.
              l_wait1 = 1.
            ENDIF.

          ENDWHILE.

        else.
          LOOP at lt_PROTT ASSIGNING <fs_prott> where msgid is NOT INITIAL.
            MESSAGE id <fs_prott>-msgid TYPE <fs_prott>-MSGTY NUMBER <fs_prott>-MSGNO
                with <fs_prott>-MSGV1 <fs_prott>-MSGV2 <fs_prott>-MSGV3 <fs_prott>-MSGV4
                .
          endloop.
        ENDIF.


        clear: ls_VBKOK, l_error_any.

        CALL FUNCTION 'DEQUEUE_ALL'
          EXPORTING
            _SYNCHRON = 'X'.

        CALL FUNCTION 'DEQUEUE_ALL'
          EXPORTING
            _SYNCHRON = ' '.

        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
          EXPORTING
            PERCENTAGE = 10
            TEXT       = text-p02.
        wait UP TO 1 SECONDS.

      ENDLOOP.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Чт, апр 02 2015, 14:45 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, авг 01 2012, 11:57
Сообщения: 87
Откуда: Минск, РБ
Пол: Женский
SU53 написал:
Когда-то давно тоже использовал WS_DELIVERY_UPDATE_2. Если не путаю, тоже были проблемы с очисткой данных, пришлось написать отдельный отчет, в котором вызывается этот ФМ, а отчет вызывается из основной программы через submit. Можно как вариант завернуть в RFC-обертку и вызывать с destination 'NONE' (+ 'RFC_CONNECTION_CLOSE').

Спасибо. Я уже тоже стала думать о чем-то таком. Но ведь это не-нор-маль-но! "Это же САП, детка!"

olegbash, спасибо!

а чем вообще чреваты пустые даты, если вся сбытовая цепочка при этом сформирована?
(может я просто в данном случае плюну на это дело и оставлю так, как есть)

_________________
Нам не дано предугадать, как слово наше отзовется.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле  Тема решена
СообщениеДобавлено: Чт, апр 02 2015, 15:16 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, авг 01 2012, 11:57
Сообщения: 87
Откуда: Минск, РБ
Пол: Женский
Очень смешно.
Я собрала номера поставок и даты к ним в таблицу. ФМ WS_DELIVERY_UPDATE_2 вынесла в процедуру (это я раньше сделала, просто оставила так). После того, как создала все заказы, прошлась по этой таблице и изменила даты в поставках. И все хорошо.

"Это САП, детка!" ....

_________________
Нам не дано предугадать, как слово наше отзовется.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: WS_DELIVERY_UPDATE обработка поставок в цикле
СообщениеДобавлено: Чт, апр 02 2015, 15:43 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 479
Цитата:
а чем вообще чреваты пустые даты, если вся сбытовая цепочка при этом сформирована?
(может я просто в данном случае плюну на это дело и оставлю так, как есть)

покажет тест и зависит от Вашего решения. :D


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

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


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

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


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

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