Учебники

SAP ABAP — пользовательские выходы

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

Чтобы получить доступ к тем выходам, которые доступны в каждой области продаж, перейдите к IMG, используя этот путь: IMG → Сбыт → Модификации системы → Выход пользователя. Документация для каждого выхода в области SD подробно объясняется.

Например, если вы хотите найти выходы пользователя в Обработка торгового документа (контракт, предложение или заказ на продажу), следуйте указанному выше пути и продолжайте расширять узел Выход пользователя в Продажи → Выход пользователя. Нажмите на значок документации, чтобы увидеть все пользовательские выходы, доступные в Обработка торгового документа.

S.No. Выход пользователя и описание
1

USEREXIT_FIELD_MODIFICATION

Используется для изменения атрибутов экрана.

2

Userexit_save_document

Помогает в выполнении операций, когда пользователь нажимает Сохранить.

3

USEREXIT_SAVE_DOCUMENT_PREPARE

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

4

USEREXIT_MOVE_FIELD_TO_VBAK

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

5

USEREXIT_MOVE_FIELD_TO_VBAP

Используется, когда изменения пользовательского элемента перемещаются в рабочую область элемента SAP.

USEREXIT_FIELD_MODIFICATION

Используется для изменения атрибутов экрана.

Userexit_save_document

Помогает в выполнении операций, когда пользователь нажимает Сохранить.

USEREXIT_SAVE_DOCUMENT_PREPARE

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

USEREXIT_MOVE_FIELD_TO_VBAK

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

USEREXIT_MOVE_FIELD_TO_VBAP

Используется, когда изменения пользовательского элемента перемещаются в рабочую область элемента SAP.

Пользовательский выход служит для тех же целей, что и клиентские, но они доступны только для модуля SD. Выход реализован как вызов функционального модуля. Пользовательские выходы — это модификации стандартных программ SAP.

пример

REPORT ZUSEREXIT1. 
TABLES:   
   TSTC, TSTCT,
   TADIR, TRDIR, TFDIR, ENLFDIR,
   MODSAPT, MODACT. 
	
DATA:   
   JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE,
   field1(30),
   v_devclass LIKE TADIR-devclass. 
	
PARAMETERS:
   P_TCODE LIKE TSTC-tcode OBLIGATORY. 
	
SELECT SINGLE *
   FROM TSTC
   WHERE tcode EQ P_TCODE. 
	
IF SY-SUBRC EQ 0.
   SELECT SINGLE *
   FROM TADIR
	
   WHERE pgmid = 'R3TR' AND 
         object = 'PROG' AND
         obj_name = TSTC-pgmna.
		
   MOVE TADIR-devclass TO v_devclass.
	
   IF SY-SUBRC NE 0.
   SELECT SINGLE * 
      FROM TRDIR
      WHERE name = TSTC-pgmna.
		
   IF TRDIR-subc EQ 'F'.
      SELECT SINGLE *
         FROM TFDIR
         WHERE pname = TSTC-pgmna.
			
      SELECT SINGLE *
         FROM ENLFDIR 
         WHERE funcname = TFDIR-funcname.
			
      SELECT SINGLE * 
         FROM TADIR
         WHERE pgmid = 'R3TR' AND
               object = 'FUGR' AND 
               obj_name EQ ENLFDIR-area.
         MOVE TADIR-devclass TO v_devclass.
      ENDIF.
   ENDIF.
	
   SELECT *
      FROM TADIR
      INTO TABLE JTAB
		
      WHERE pgmid = 'R3TR' AND
            object = 'SMOD' AND
            devclass = v_devclass.
			
   SELECT SINGLE *
      FROM TSTCT
      WHERE sprsl EQ SY-LANGU AND
            tcode EQ P_TCODE.
			
   FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
   WRITE:/(19) 'Transaction Code - ', 
      20(20) P_TCODE,
      45(50) TSTCT-ttext.
   SKIP.
	
   IF NOT JTAB[] IS INITIAL.
      WRITE:/(95) SY-ULINE.
      FORMAT COLOR COL_HEADING INTENSIFIED ON.
		
      WRITE:/1 SY-VLINE, 
            2 'Exit Name',
            21 SY-VLINE , 
            22 'Description',
            95 SY-VLINE.
			
      WRITE:/(95) SY-ULINE.
      LOOP AT JTAB.
         SELECT SINGLE * FROM MODSAPT
         WHERE sprsl = SY-LANGU AND
               name = JTAB-obj_name.
				
         FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
         WRITE:/1 SY-VLINE,
               2 JTAB-obj_name HOTSPOT ON,
               21 SY-VLINE ,
               22 MODSAPT-modtext,
               95 SY-VLINE.
      ENDLOOP.
		
      WRITE:/(95) SY-ULINE.
      DESCRIBE TABLE JTAB.
      SKIP.
      FORMAT COLOR COL_TOTAL INTENSIFIED ON.
      WRITE:/ 'No of Exits:' , SY-TFILL.
		
   ELSE.
      FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
      WRITE:/(95) 'User Exit doesn’t exist'.
   ENDIF. 
ELSE.

   FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
   WRITE:/(95) 'Transaction Code Does Not Exist'. 
ENDIF.
 
AT LINE-SELECTION.
   GET CURSOR FIELD field1.
   CHECK field1(4) EQ 'JTAB'.
   SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
   CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN. 

Во время обработки введите код транзакции «ME01» и нажмите кнопку F8 (Выполнить). Приведенный выше код производит следующий вывод —