Здесь я создам несколько стандартных сообщений. После проделанной работы, при выполнении программы будут выскакивать стандартные диалоговые сообщения с полезной и не очень информацией. Лучший способ реализации сообщений - это создание и управление ими через Message class. Message class это своего рода контейнер для сообщений, он может использоваться в различных программах и функциональных модулях. Все сообщения хранятся в таблице T100, которую можно просмотреть используя транзакцию SE16.
SAP сообщения - важная часть любой ABAP программы, позволяющие информировать пользователя об ошибках, об успешном выполнении какой-либо операции и др.
Сообщения бывают следующих типов:
I - Information messages
Информационное сообщение, появляющееся в виде выскакивающего окна.
E - Error message
Сообщение об ошибке, отображается с строке статуса.
W - Warning message
Предупреждающее сообщение, отображается также в строке статуса.
S - Success/Status message
Успешное завершение
A - Termination/Abend
Ненормальное завершение
Итак создадим Message class. Можно создать через навигатор объектов SE80, а можно использовать транзакцию SE91.
Вводим краткий текст и сохраняем. Перейдем на вкладку Messages. На этой вкладке собственно и вводится текст сообщений.
Добавим в первую строку программы следующее :
REPORT zkre_hw5 MESSAGE-ID ZKRE_M_HW5.
И добавим MESSAGE i002 в текст программы.
*&---------------------------------------------------------------------*
*& Report ZKRE_HW4
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zkre_hw5 MESSAGE-ID ZKRE_M_HW5.
*&SPWIZARD: DECLARATION OF TABLECONTROL 'ZK_100' ITSELF
CONTROLS: zk_100 TYPE TABLEVIEW USING SCREEN 0100.
TABLES: sscrfields.
DATA: gt_products TYPE zkre_t_hw3,
gs_products LIKE LINE OF gt_products,
it_ran_quant TYPE zkre_r_quant,
wa_ran_quant LIKE LINE OF it_ran_quant.
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
PARAMETERS: p_id TYPE zkre_products-id.
PARAMETERS: p_name TYPE zkre_products-name MODIF ID m1.
SELECT-OPTIONS: p_quant FOR gs_products-quantity.
SELECT-OPTIONS: p_desc FOR gs_products-description NO INTERVALS.
PARAMETERS: p_s1 RADIOBUTTON GROUP uc1,
p_s2 RADIOBUTTON GROUP uc1.
SELECTION-SCREEN END OF BLOCK bl1.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN PUSHBUTTON 1(10) bt1 USER-COMMAND uc2.
INITIALIZATION.
bt1 = text-bt1.
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'UC2'.
CLEAR: p_id, p_name, p_quant[], p_desc[].
ENDCASE.
START-OF-SELECTION.
MESSAGE i002.
CALL SCREEN 100.
INCLUDE zkre_hw5_status_0100o01.
INCLUDE zkre_hw5_dataf01.
INCLUDE zkre_hw5_user_command_0100i01.
END-OF-SELECTION.
Запустим на выполнение программу.
Нажимаем F8. Выскочило наше сообщение.
Теперь добавим еще два выскакивающих сообщения о количестве выбранных строк.
Обьявим переменную amount которая будет в качестве счетчика.
DATA: gt_products TYPE zkre_t_hw3,
gs_products LIKE LINE OF gt_products,
it_ran_quant TYPE zkre_r_quant,
wa_ran_quant LIKE LINE OF it_ran_quant,
amount TYPE n.
Зайдем в INCLUDE zkre_hw5_dataf01 и обнулим новую переменную. Сам подсчет можно организовать написав такой код:
amount = 0.
LOOP AT gt_products INTO gs_products.
amount = amount + 1.
ENDLOOP.
Итоговый код INCLUDE zkre_hw5_dataf01 будет иметь вид:
*----------------------------------------------------------------------*
***INCLUDE ZKRE_HW5_1_DATAF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM data .
REFRESH it_ran_quant.
wa_ran_quant-sign = 'I'.
wa_ran_quant-option = 'EQ'.
wa_ran_quant-low = '555'.
wa_ran_quant-high = ''.
APPEND wa_ran_quant TO it_ran_quant.
IF p_s2 EQ 'X'.
CALL FUNCTION 'ZKRE_FM4'
EXPORTING
ir_quant = it_ran_quant
IMPORTING
er_products = gt_products.
ELSEIF p_s1 EQ 'X'.
SELECT zkre_products~id supply_id name purchase_cost sale_cost quantity description supply_date
INTO CORRESPONDING FIELDS OF TABLE gt_products
FROM ( ( zkre_products INNER JOIN zkre_productst ON zkre_productst~prod_id = zkre_products~id )
INNER JOIN zkre_supply ON zkre_supply~id = zkre_products~supply_id )
WHERE zkre_products~name EQ p_name.
ENDIF.
amount = 0.
LOOP AT gt_products INTO gs_products.
amount = amount + 1.
ENDLOOP.
ENDFORM. " DATA
Теперь зайдем в INCLUDE zkre_hw5_user_command_0100i01. добавим следующий код
*----------------------------------------------------------------------*
***INCLUDE ZKRE_HW5_USER_COMMAND_0100I01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE PROGRAM.
ENDCASE.
IF amount > 0.
MESSAGE i001.
ELSE.
MESSAGE e000.
ENDIF.
ENDMODULE. " USER_COMMAND_0100 INPUT
Не забываемпользоваться кнопкой Pretty Printer. Сохраняем и проверяем на наличие ошибок. В моем случае ругнулся.
Но все равно сохраняем и активируем. Запускаем на выполнение программу. В зависимости от того были выбраны строки появится необходимое сообщение. Выбрано более 1 строки.
Не выбрано ни одной строки.
Добавим сообщение которое выводило бы количество выбранных записей.
Редактируем наш класс сообщений.
&1 место подстановки переменной. Изменим немного код
*----------------------------------------------------------------------*
***INCLUDE ZKRE_HW5_USER_COMMAND_0100I01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE PROGRAM.
ENDCASE.
IF amount > 0.
MESSAGE i003 WITH amount.
ELSE.
MESSAGE e000.
ENDIF.
ENDMODULE. " USER_COMMAND_0100 INPUT
Вот таким образом можно использовать сообщения в SAP. В следующей статье я создам средство поиска Search Help - http://fibed.net/R/.
Александра
Добрый день. Подскажите, а где мы считаем значения переменной amount ?
Просто сначала в hw5 мы ее объявляем. Потом в инклуде INCLUDE zkre_hw5_dataf01 обнуляем.
Следом, в инклуде INCLUDE zkre_hw5_user_command_0100i01 мы пишем условие для переменной amount. Но где мы ее считаем?? у меня она получилась всегда равной нулю и записи в программе перестали выводиться
R K
Подсчет строк реализован в INCLUDE zkre_hw5_dataf01. Я обновил статью, посмотрите.
Александра
Да, спасибо :)