Текущее время: Пн, июн 23 2025, 22: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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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