iw31/iw32 - user-exit podpiety pod przycisk SAVE

A tu dla odmiany podyskutować możesz na tematy logistyczne SAP. Jeśli pojawią się jakieś pytania, nie zwlekaj, zadaj je natychmiast.
ODPOWIEDZ
ldzierza
Posty: 14
Rejestracja: pt cze 18, 2010 4:16 pm
Been thanked: 2 times

iw31/iw32 - user-exit podpiety pod przycisk SAVE

Post autor: ldzierza »

witam
pilnie poszukuje user-exita odpalanego po nacisnieciu przycisku SAVE w transakcjach IW31/32 modyfikujacego tablice z danymi operacji (afvu, afvg).

dzieki za pomoc.

pozdrawiam,
Leszek
dominik.tylczynski
Posty: 8356
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1924 times
Been thanked: 1478 times
Kontakt:

Re: iw31/iw32 - user-exit podpiety pod przycisk SAVE

Post autor: dominik.tylczynski »

BADI WORKORDER_CHANGE, metoda IN_UPDATE jest wywoływana podczas zapisywania zleceń, również remontowych. Co prawda ta metoda nie pozwala na aktualizację danych operacji, jednak możesz je tak zaimplementować, aby wywołać w implementacji BAPI_ALM_ORDER_MAINTAIN lub zmienić dane operacji bezpośrednio w tablicach. Pamiętaj jednak, aby wywołanie BAPI czy aktualizację tablic z operacjami wykonywać w oddzielnej LUW, tak aby zlecenie zdążyło się zapisać w bazie danych.
ldzierza
Posty: 14
Rejestracja: pt cze 18, 2010 4:16 pm
Been thanked: 2 times

Re: iw31/iw32 - user-exit podpiety pod przycisk SAVE

Post autor: ldzierza »

czesc,
dzieki za odpowiedz.

znalazlem w koncu rozwiazanie swojego problemu. Skorzystalem z user-exita IWO10009.

Zaimplementowalem w nim nastepujacy kod programu:

Kod: Zaznacz cały

    DATA: usr00       TYPE usrchar20,
              usr04       TYPE usrquan13,
              use04       TYPE usrunit,
             tabix       LIKE sy-tabix.

    DATA: BEGIN OF i_afvg_bt OCCURS 0.
            INCLUDE STRUCTURE zafvg_bt.
    DATA: END OF i_afvg_bt.

    FIELD-SYMBOLS: <fs1>            TYPE ANY TABLE,
                   <fs1_line>       LIKE LINE OF i_afvg_bt,
                   <fs1_line_tabix> LIKE LINE OF i_afvg_bt.

    DATA: BEGIN OF i_afvu_bt_old OCCURS 0.
            INCLUDE STRUCTURE aafvu.
    DATA: END OF i_afvu_bt_old.

    FIELD-SYMBOLS: <fs1_old>      TYPE ANY TABLE,
                   <fs1_old_line> LIKE LINE OF i_afvu_bt_old.

      IF sy-tcode = 'IW31'.
    * Retrieve values from calling program
        ASSIGN ('(SAPLCOBP)AFVG_BT[]') TO <fs1>.

        LOOP AT <fs1> ASSIGNING <fs1_line>.
          IF sy-tabix = 1.

            usr04       = <fs1_line>-usr04.
            use04       = <fs1_line>-use04.
            usr00       = <fs1_line>-usr00.

          ELSE.

            IF <fs1_line>-usr00 IS INITIAL.
              <fs1_line>-usr00 = usr00.
            ELSE.
              usr00 = <fs1_line>-usr00.
            ENDIF.

            IF  <fs1_line>-use04 IS INITIAL.
              <fs1_line>-use04 = use04.
            ELSE.
              use04 = <fs1_line>-use04.
            ENDIF.

            IF  <fs1_line>-usr04 IS INITIAL.
              <fs1_line>-usr04 = usr04.
            ELSE.
              usr04 = <fs1_line>-usr04.
            ENDIF.

          ENDIF.
        ENDLOOP.
      ENDIF.

      IF sy-tcode = 'IW32'.

        ASSIGN ('(SAPLCOBP)AFVU_BT_OLD[]') TO <fs1_old>.

        ASSIGN ('(SAPLCOBP)AFVG_BT[]') TO <fs1>.


        CLEAR i_afvu_bt_old. REFRESH i_afvu_bt_old.

        APPEND LINES OF <fs1_old> TO i_afvu_bt_old.

        LOOP AT <fs1> ASSIGNING <fs1_line>.
          READ TABLE i_afvu_bt_old WITH KEY aufpl = <fs1_line>-aufpl aplzl = <fs1_line>-aplzl ASSIGNING <fs1_old_line>.
          IF sy-subrc IS INITIAL AND <fs1_old_line> IS ASSIGNED.
    * aktualizacja pola kat. obchodu - user field in operations table
            IF NOT <fs1_line>-usr00 = <fs1_old_line>-usr00.
              usr00 = <fs1_line>-usr00.
            ELSE.
              IF NOT <fs1_line>-usr00 = usr00 AND NOT usr00 IS INITIAL.
                <fs1_line>-usr00 = usr00.
              ENDIF.
            ENDIF.

    * aktualizacja pola jednostka miary - user field in operations table
            IF NOT <fs1_line>-use04 = <fs1_old_line>-use04.
              use04 = <fs1_line>-use04.
            ELSE.
              IF NOT <fs1_line>-use04 = use04 AND NOT use04 IS INITIAL.
                <fs1_line>-use04 = use04.
              ENDIF.
            ENDIF.

    * aktualizacja pola trasa (przejechana odleglosc) - user field in operations table
            IF NOT <fs1_line>-usr04 = <fs1_old_line>-usr04.
              usr04 = <fs1_line>-usr04.
            ELSE.
              IF NOT <fs1_line>-usr04 = usr04 AND NOT usr04 IS INITIAL.
                <fs1_line>-usr04 = usr04.
              ENDIF.
            ENDIF.
          ELSE.
    **********************************************************************
    * sytuacja, kiedy dodano nowy wiersz do istniejacej struktury - new row/rows added to operations table
    **********************************************************************
            tabix = <fs1_line>-aplzl - 1.

    * aktualizacja pola kat. obchodu - user field in operations table
            IF <fs1_line>-usr00 IS INITIAL AND NOT usr00 IS INITIAL.
              <fs1_line>-usr00 = usr00.
            ENDIF.

    * aktualizacja pola jednostka miary - user field in operations table
            IF <fs1_line>-use04 IS INITIAL AND NOT use04 IS INITIAL.
              <fs1_line>-use04 = use04.
            ENDIF.

    * aktualizacja pola trasa (przejechana odleglosc) - user field in operations table
            IF <fs1_line>-usr04 IS INITIAL AND NOT usr04 IS INITIAL.
              <fs1_line>-usr04 = usr04.
            ENDIF.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDIF.
Aby wszytko dzialalo tak jak trzeba, zmuszony bylem do stworzenia w SE11 struktury zafvg_bt (Struktura na potrzeby modyfikcji listy operacji w IW31/IW32):

Kod: Zaznacz cały

.INCLUDE	AFVGB		0	0	Zlecenie: struktura operacji dla tabeli bufora
INDOLD	SYTABIX	INT4	10	0	Indeks tabeli wewnętrznej
Z mojego punktu widzenia uzywanie FM BAPI_ALM_ORDER_MAINTAIN (i jej podobnych) do tego celu nie ma sensu. Nie zawsze konsultant jest w stanie przekazac informacje co z czego wynika, a co za tym idzie mozna spotkac sie z duzymi problemami przy prawidlowym wypelnieniu struktur niezbednych do osiagniecia zakladanego celu.

Dodatkowo mozna skorzystac z nastepujacych tabel przy wykonywaniu operacji na wspomnianym wyzej user-exicie:
  • (SAPLMATL)MARA_TAB[]
    (SAPLMG21)IMARA[]
    (SAPLMG21)TMARA[]
    (SAPLBSVA)JEST_BUF[]
    (SAPLBSVA)JSTO_BUF[]
    (SAPLMATL)IMARC[]
    (SAPLMG22)IMARC[]
    (SAPLEBNE)BSN[] (Purch reqs)
    (SAPLIPAR)HEADER_TAB[]
    (SAPLV08D)GT_KNA1[]
    (saplcoih)iloa
    (saplcoih)afvgd
    (saplCOBP)AFVG_BT[]
pozdrawiam,
Lechoo
ODPOWIEDZ