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

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

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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

Sapforum.Biz