2019-12-27 2019-12-27 查詢(xún)PIR - 3 output_data 輸出數(shù)據(jù)

輸出數(shù)據(jù),分別用子程序處理ALV 相關(guān)的Fieldcat 及Layout. 最后調(diào)用REUSE_ALV_GRID_DISPLAY輸出ALV:
其中:
i_callback_user_command = 'USER_COMMAND' 及
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'有點(diǎn)特別,請(qǐng)見(jiàn)后。
布局部分:
ALV中,欲保存布局,須在REUSE_ALV_GRID_DISPLAY函數(shù)中添加I_SAVE參數(shù)。I_SAVE定義為C數(shù)據(jù)類(lèi)型,值如下:
‘ ‘ = display variants cannot be saved
Defined display variants (e.g. delivered display variants) can be selected for presentation independently of this flag. Changes can not be saved.
‘X’ = standard save
Display variants can be saved as standard display variants. User-specific saving is not possible.
‘U’ = only user-specific saving
The user can only save display variants user-specifically
‘A’ = standard and user-specific saving
The user can save a display variant user-specifically and as standard display variant. The user chooses in the display variant save popup.
為了進(jìn)一步管理布局,則需要加入IS_VARIANT參數(shù),其數(shù)據(jù)結(jié)構(gòu)參考DISVARIANT,一般需要定義其中的REPORT=SY-REPID,VARIANT為布局保存格式。有三個(gè)有用函數(shù)供調(diào)用保存的格式布局,分別為:
REUSE_ALV_VARIANT_DEFAULT_GET 讀取默認(rèn)的布局
REUSE_ALV_VARIANT_EXISTENCE 檢測(cè)指定布局是否存在
REUSE_ALV_VARIANT_F4 顯示布局格式選擇對(duì)話(huà)窗

FORM output_data.
  PERFORM addfield.
  PERFORM layout.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = sy-repid
      i_callback_user_command = 'USER_COMMAND'
*     I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
*     I_GRID_TITLE            = G_TITLE
      it_fieldcat             = gt_fieldcat[]
      is_layout               = gs_layout
      is_variant              = g_variant  ”可調(diào)用變式
      i_save                  = 'A'   “這是保存變式
    TABLES
      t_outtab                = gt_out[]
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 2.
ENDFORM.                    "OUTPUT_DATA

ALV 相關(guān)的Fieldcat : 對(duì)一些字段要求相同的,用FILED_TYPE區(qū)別:

FORM addfield.
  PERFORM e01_fieldcat_init USING:
      'INFNR'    'Info record NO.'      6  '' '' 'Q' '' '',
      'LIFNR'    'Vendor'      6  '' '' 'Q' '' 'X',
      'MATNR'    'Material NO.'      6  '' '' ' ' '' 'X',
      'EKORG'    'Purchasing Org.'      10  '' '' ' ' '' '',
      'WERKS'    'Plant'         25   '' '' ' ' '' '',
      'ESOKZ'    'Infotype'      10  '' '' ' ' '' '',
      'MEINS'    'PO Unit'         25   '' '' ' ' '' '',
      'UMREZ'    'Numerator for conversion'         10   '' '' ' ' '' '',
      'UMREN'    'Denominator for conversion'         10   '' '' ' ' '' '',
      'VABME'    'Var. PO Unit Active'         10   '' '' ' ' '' '',
      'NETPR'    'Net price'      10  '' '' 'C' '' '',
      'WAERS'    'Currency'        10   '' '' ' ' '' '',
      'PEINH'    'Price unit'        6  '' '' ' ' '' '',
      'BPRME'    'Order Price Unit'         18   '' '' ' ' '' '',
*{    SAPCI-2801 Start
      'MM_NETPR'    text-h01    10  space   space   'C'     space   space,
      'MM_PEINH'    text-h02    6   space   space   space   space   space,
      'LMEIN'       text-h03    6   space   space   space   space   space,
*}    SAPCI-2801 End
      'DATAB'    'Valid From'      35  '' '' ' ' '' '',
      'DATBI'    'Valid To'         18   '' '' ' ' '' '',
      'MWSKZ'    'Tax Code' 13   '' '' ' ' '' '',
      'MFRNR'    'Manufacturer' 13   '' '' ' ' '' '',
      'EKGRP'    'Pur. Group' 10   '' '' '' '' '',
      'APLFZ'    'Planned Delivery Days'        10   '' '' ' ' '' '',
      'MINBM'    'Minimum PO Quantity'        6  '' '' ' ' '' '',
      'NORBM'    'Standard PO Quantity' 13   '' '' ' ' '' '',
      'INCO1'    'Incoterms1'        10   '' '' ' ' '' '',
      'INCO2'    'Incoterms2'        6  '' '' ' ' '' '',
      'IDNLF'     'Vendor Material' 13   '' '' ' ' '' '',
      'MFR_CODE'  'Mfr Code' 13   '' '' ' ' '' '',
      'MFR_NAME'  'Mfr Name' 35   '' '' ' ' '' '',
      'MPN_NO'    'MPN number' 20   '' '' ' ' '' '',
      'MFRPN'     'Mfr Part Number' 40   '' '' ' ' '' '',
      'BRAND'     'Brand' 15   '' '' ' ' '' '',
      'BRAND_TYP' 'Brand Type' 45   '' '' ' ' '' '',
      'AENAM'     'Changed By' 12  '' '' ' ' '' '',
      'AEDAT'     'Changed On' 18   '' '' ' ' '' '',
      'AETIM'     'Time of Last Change' 18   '' '' ' ' '' '',
      'RELIF'      'Regular Vendor' 20   '' '' ' ' '' '',
      'POTXT'     'PO text' 13   '' '' ' ' '' '',
      'KSTBM'     'Scale Quantity' 13   '' '' ' ' '' '',
      'KBETR'     'Scale Amount'      10  '' '' 'C' '' '',
      'URZLA'     'country of origin' 13   '' '' ' ' '' '',
      'TELF1'     'telephone' 13   '' '' ' ' '' '',
      'LOEKZ'     'Deletion flag of Purch.org.' 13   '' '' ' ' '' '',
      'LOEVM_KO'  'Deletion flag of Condition' 13   '' '' ' ' '' '',
      'MMSTA'     'Plant-Specific Material Status' 13   '' '' ' ' '' '',

      'KNUMH'     'Condition record no.' 10  '' '' ' ' '' '',
      'KOPOS'     'Sequential number of the condition' 3   '' '' ' ' '' ''.


*      'VOLEH '     'Volume Unit' 13   '' '' 'Q' '' '',
*      'KWMENG2'    'SO Qty in CAR' 13   '' '' 'Q' '' '',
*      'MENGE3'     'STO2 Qty in CAR (3200)' 20   '' '' 'Q' '' '',
*      'VOLUM'      'SO Volume'        10   '' '' ''  '' ''.

ENDFORM.                    "ADDFIELD

中間e01_fieldcat_init部分:Field_type = Q or C or V 或其他分別給值:
no_zero 如果取值為零,則為空,既不輸出零;
just: 對(duì)其方式,R 右對(duì)齊
no_convext,Do not consider conversion exit for output
qfieldname 參考計(jì)量單位的字段名稱(chēng)
qtabname Qfieldname 對(duì)應(yīng)的輸出內(nèi)表名
對(duì)銷(xiāo)售單位及體積單位給了值:

image.png

ALV FIELDCAT詳細(xì)字段值可叁考:分類(lèi)講得很詳細(xì)。
https://blog.csdn.net/champaignwolf/article/details/79662527

FORM e01_fieldcat_init
    USING  field_name      TYPE c
           field_text      TYPE c
           field_lenth     TYPE i
           field_edit      TYPE c
           field_checkbox  TYPE c
           field_type      TYPE c
           field_key       TYPE c
           fix_column      TYPE c.

  DATA: ls_fieldcat TYPE slis_fieldcat_alv.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname = field_name.
  ls_fieldcat-seltext_l = field_text.

  IF field_type EQ 'Q'.
    ls_fieldcat-just     = 'R'.
    ls_fieldcat-no_zero  = 'X'.
    ls_fieldcat-qtabname = 'VBDPA'.
    ls_fieldcat-qfieldname = 'VRKME'.

  ELSEIF field_type EQ 'C'.
    ls_fieldcat-just     = 'R'.
    ls_fieldcat-no_zero  = 'X'.
  ELSEIF field_type EQ 'V'.
    ls_fieldcat-just     = 'R'.
    ls_fieldcat-no_zero  = 'X'.
    ls_fieldcat-qtabname = 'VBDPA'.
    ls_fieldcat-qfieldname = 'VOLEH'.
  ELSE.
    ls_fieldcat-no_convext = 'X'.
    ls_fieldcat-just = 'L'.
  ENDIF.

*  LS_FIELDCAT-CHECKBOX  = FIELD_CHECKBOX.
  ls_fieldcat-outputlen = field_lenth.
  ls_fieldcat-edit      = field_edit.
  ls_fieldcat-key       = field_key.

  APPEND ls_fieldcat TO gt_fieldcat.
  CLEAR ls_fieldcat.
ENDFORM.                    "E01_FIELDCAT_INIT

LAYOUT只是給了優(yōu)化列寬設(shè)置及使ALV表格按斑馬線(xiàn)間隔條碼方式顯示:

FORM layout.
  gs_layout-colwidth_optimize   = 'X'.
  gs_layout-zebra               = 'X'.
*  GS_LAYOUT-BOX_FIELDNAME = 'SEL'.
*  GS_LAYOUT-COLTAB_FIELDNAME = 'COLOR'.
ENDFORM.                    "layout

I_CALLBACK_PF_STATUS_SET:ALV工具欄Subroutine(子程序)
I_CALLBACK_USER_COMMAND:ALV User Command Subroutine(子程序),實(shí)現(xiàn)對(duì)應(yīng)菜單項(xiàng)及相應(yīng)事件功能
詳細(xì)請(qǐng)參考,非常不錯(cuò):https://www.cnblogs.com/hcmy00/p/6524107.html
熱點(diǎn)鏈接
熱點(diǎn)鏈接,即 Fieldcat中 的 hotspot 屬性;
設(shè)置之后,當(dāng)用戶(hù)點(diǎn)擊帶有熱點(diǎn)的字段時(shí),就會(huì)觸發(fā) Subroutine(FRM_USER_COMMAND)中的動(dòng)作;對(duì)于熱點(diǎn)鏈接,所對(duì)應(yīng)的FCode為 “&IC1“;

FORM user_command USING r_ucomm TYPE sy-ucomm
                        rs_selfield TYPE slis_selfield.

  CASE r_ucomm.
    WHEN '&IC1'.


      CASE rs_selfield-fieldname.
        WHEN 'B_NETPR1'.
          CALL FUNCTION 'DSYS_SHOW_FOR_F1HELP'
            EXPORTING
*             APPLICATION      = 'SO70'
              dokclass         = 'TX'
              doklangu         = 'E'
              dokname          = 'Z_B_NETPR1'
*             DOKTITLE         = ' '
*             HOMETEXT         = ' '
*             OUTLINE          = ' '
*             VIEWNAME         = 'STANDARD'
*             Z_ORIGINAL_OUTLINE       = ' '
*             CALLED_FROM_SO70 = ' '
*             SHORT_TEXT       = ' '
*             APPENDIX         = ' '
*   IMPORTING
*             APPL             =
*             PF03             =
*             PF15             =
*             PF12             =
            EXCEPTIONS
              class_unknown    = 1
              object_not_found = 2
              OTHERS           = 3.
          IF sy-subrc <> 0.
* Implement suitable error handling here
          ENDIF.
      ENDCASE.
  ENDCASE.
ENDFORM.                    "USER_COMMAND

如上邏輯僅在點(diǎn)擊字段 Base Net Unit Price時(shí)彈出如下框給出說(shuō)明:


image.png

對(duì)于屏幕上的field,我們通??梢允褂胒1調(diào)出它對(duì)應(yīng)的data element的documention,要維護(hù)data element的文本可在data element修改狀態(tài)勾選那個(gè) change document checkbox,然后點(diǎn)擊documentation就可以修改了。

但是我們?nèi)绾吾槍?duì)屏幕上面任意一個(gè)field去調(diào)用f1 help文檔呢?

首先當(dāng)然要?jiǎng)?chuàng)建f1 help文擋,在se61創(chuàng)建TX document class的文擋并且指定語(yǔ)言
https://blog.csdn.net/feijibin/article/details/9107161

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容