Автор Тема: Ошибочное сторнирование движения материала к поставке через MIGO  (Прочитано 17024 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 758
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Ошибочное сторнирование движения материала к поставке через MIGO. В общем-то если используется входящая/исходящая поставка, то сторнировать движение материала через транзакцию MIGO очень не рекомендуется, так как при такой операции не обновляются данные статуса поставки. Для такой операции существует специальная транзакция VL09 - сторно движения материала к поставке. Однако, как это бывает, SAP почему-то не сделал проверки в MIGO на операцию сторно к поставке, поэтому пользователи иногда забывает о такой особенности сторнирования движения поступления и сторнируют документы, что приводит к переклиниванию данных поставки и невозможности последующих операций с ней.
На третьем случае, я как-то чуток подустал от такой проблемы, поэтому набросал программку, которая корректирует проблему рихтовкой таблиц SAP. На вход подаем номер неправильного документа сторно, а остальное типа программа сделает сама, опять же никаких гарантий не даю, перед тем как использовать проверьте это на тестовых данных. В общем виде нужно удалить ссылочные данные в таблице потока документов VBFA и откорректировать статус поступления материала к поставке в таблице VBUP. У меня, по крайней мере, после работы программы поставка не видит что было поступление запаса и дает выполнить операцию поступления еще раз. А то что был приход/сторно/приход видно по истории документа заказа ММ (ну если речь идет о входящей поставке, а у меня была именно эта проблема).

В общем по коду типа должно быть ясно что и как делается, если будут какие проблемы у кого, велкам с комментариями.
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  YUUK_CORRECT_BADMBST
*&
*&---------------------------------------------------------------------*
*& Однако корретировка поставок при сторнировании движения
*& через транзакцию MIGO, а надо бы делать было через VL09
*&---------------------------------------------------------------------*
REPORT  yuuk_correct_badmbst.
TABLES: mkpf.

PARAMETERS: p_mblnr LIKE mkpf-mblnr,   "Документ ММ
            p_mjahr LIKE mkpf-mjahr.   "Год документа ММ
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_commit AS CHECKBOX.      "X - COMMIT WORK

************************************************************************
DATA: lt_mseg LIKE mseg OCCURS 1 WITH HEADER LINE,
      lt_ekes LIKE ekes OCCURS 1 WITH HEADER LINE,
      lt_vbfa LIKE vbfa OCCURS 1 WITH HEADER LINE,

      ls_lips LIKE lips,
      l_wbsta LIKE vbup-wbsta.


************************************************************************
SELECT * INTO TABLE lt_mseg
FROM mseg WHERE mblnr = p_mblnr AND
                mjahr = p_mjahr.
IF sy-subrc = 0.
* Позиции должны быть документы сторно к заказу на закупку ММ
  LOOP AT lt_mseg WHERE shkzg = 'H' AND ebeln <> space.
    WRITE: / 'Позиция документа ММ:', 40 lt_mseg-mblnr, lt_mseg-mjahr, lt_mseg-zeile.
    SELECT * INTO TABLE lt_ekes
    FROM ekes WHERE ebeln = lt_mseg-ebeln AND
                    ebelp = lt_mseg-ebelp.
    WRITE: / 'Список поставок к заказу ММ:', 40 lt_mseg-ebeln, lt_mseg-ebelp.
    LOOP AT lt_ekes.
      SELECT * INTO TABLE lt_vbfa
      FROM vbfa WHERE vbelv = lt_ekes-vbeln AND
                      posnv = lt_ekes-vbelp AND
                      vbtyp_n = 'R'.
      LOOP AT lt_vbfa.
        WRITE: / 'Удаление данных потока документов:',  40 lt_vbfa-vbelv, lt_vbfa-posnv.
        WRITE: / 'Удалены данные для документа ММ:',  40 lt_vbfa-vbeln, lt_vbfa-posnn, lt_vbfa-mjahr.
        DELETE FROM vbfa WHERE vbelv = lt_vbfa-vbelv AND
                               posnv = lt_vbfa-posnv AND
                               vbeln = lt_vbfa-vbeln AND
                               posnn = lt_vbfa-posnn.
        SELECT SINGLE * INTO ls_lips
        FROM lips WHERE vbeln = lt_vbfa-vbelv AND
                        posnr = lt_vbfa-posnv.
        WRITE: / 'Обновление статуса поставки:'.
        IF lt_mseg-erfmg = ls_lips-lfimg.
          l_wbsta = 'A'.
          WRITE: AT 40 'A - полное сторно'.
        ELSE.
          l_wbsta = 'B'.
          WRITE: AT 40 'B - частичное сторно'.
        ENDIF.
        UPDATE vbup SET wbsta = l_wbsta
        WHERE vbeln = lt_vbfa-vbelv AND
              posnr = lt_vbfa-posnv.
      ENDLOOP.
    ENDLOOP.
  ENDLOOP.
  IF p_commit = 'X'.
    COMMIT WORK.
    WRITE: / 'Продуктивный прогон программы' COLOR COL_POSITIVE.
  ELSE.
    ROLLBACK WORK.
    WRITE: / 'Тестовый прогон программы' COLOR COL_NEGATIVE.
  ENDIF.
ELSE.
  WRITE: / 'Документ материала:', p_mblnr, p_mjahr, 'не найден!'.
ENDIF.

Greed

  • Гость
спасибо, помогло. Вроде все ок работает, как и написано в потоке документов ничего нет, в заказе на поставку документ материала и документ сторно в истории видны.

Greed

  • Гость
и еще:
>WRITE: / 'Удалены данные для документа ММ:',  40 lt_vbfa-vbeln, lt_vbfa-posnn, lt_vbfa-mjahr.
тут не та табл указана ;)

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
You are not allowed to view links. Register or Login
и еще:
>WRITE: / 'Удалены данные для документа ММ:',  40 lt_vbfa-vbeln, lt_vbfa-posnn, lt_vbfa-mjahr.
тут не та табл указана ;)
Возможно (не проверял), молодец, рад за тебя, что заметил, завтра можно будет посмотреть, .... может г-н Уукрул точно ошибся  :)
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login