SmartForms——實例


目錄:

一、設計要求:

 

 

 

1、ALV選擇列印盤點卡內容

2、列印內容按盤點號碼分頁、每8筆盤點項次分頁

3、每張盤點卡打印8行數據,不足8行數據要打印空行

二、程序代碼:

1、內文設計

2、代碼:

 

************************************************************************
* Program Name      :
* Descriptions      :  盤點清冊列印
* T-Code            :
* Updates Tables    :
* Input  Parameters :
* Output Parameters :
* Return Codes      :
* Special Logic     :
* Includes          :
************************************************************************
* Modification Log
************************************************************************
*   Date   Ver. Programmer   Descriptions
* -------- ---- ------------ -------------------------------------------
* 2020 2.22   XXX Create
*
************************************************************************
REPORT ZMMRTEST.
***********************************************************************
* Tables Definitions
************************************************************************
TABLES: ikpf,iseg.
*TABLES:.
************************************************************************
* Data Definitions
************************************************************************
DATA: BEGIN OF gt_data OCCURS 0,
  checkbox(1) TYPE c,
  gjahr LIKE ikpf-gjahr,
  zldat LIKE ikpf-zldat,
  iblnr LIKE ikpf-iblnr,
  zeili LIKE iseg-zeili,
  werks LIKE ikpf-werks,
  lgort LIKE ikpf-lgort,
  lgpbe LIKE mard-lgpbe,
  mtart LIKE mara-mtart,
  matnr LIKE iseg-matnr,
  maktx LIKE makt-maktx,
  erfmg LIKE iseg-erfmg,
  erfme LIKE iseg-erfme,
END OF gt_data.

DATA: BEGIN OF gt_header OCCURS 0,
  iblnr LIKE ikpf-iblnr,
  gjahr LIKE ikpf-gjahr,
  werks LIKE ikpf-werks,
  lgort LIKE ikpf-lgort,
  zldat LIKE ikpf-zldat,
END OF gt_header.

DATA: BEGIN OF gt_item OCCURS 0,
  iblnr LIKE iseg-iblnr,
  gjahr LIKE iseg-gjahr,
  zeili LIKE iseg-zeili,
  lgpbe LIKE mard-lgpbe,
  mtart LIKE mara-mtart,
  matnr LIKE iseg-matnr,
  maktx LIKE makt-maktx,
  erfmg LIKE iseg-erfmg,
  erfme LIKE iseg-erfme,
END OF gt_item.

DATA: g_butxt LIKE t001-butxt,
          g_totalpage TYPE i.

TYPE-POOLS: slis.
DATA: gs_layout TYPE slis_layout_alv,
          gt_fieldcat TYPE slis_t_fieldcat_alv,
          wa_fieldcat TYPE slis_fieldcat_alv.

"For Subtotal sorting
CONSTANTS alv_pf_status TYPE slis_formname VALUE 'ALV_PF_STATUS'.
*ALV自定義按鈕
CONSTANTS alv_user_command TYPE slis_formname  VALUE 'ALV_USER_COMMAND'.
************************************************************************
* Includes Module
************************************************************************

************************************************************************
* Selection Screen
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-b01.
  PARAMETERS: p_werks LIKE ikpf-werks DEFAULT '2000'.
  SELECT-OPTIONS: s_lgort FOR ikpf-lgort.
  SELECT-OPTIONS: s_iblnr FOR ikpf-iblnr.
  SELECT-OPTIONS: s_matnr FOR iseg-matnr.
SELECTION-SCREEN END OF BLOCK b1.

************************************************************************
* Initialization
************************************************************************
INITIALIZATION.

************************************************************************
* At Selection Screen
************************************************************************
AT SELECTION-SCREEN.

************************************************************************
* At Selection Screen Output
************************************************************************
AT SELECTION-SCREEN OUTPUT.

************************************************************************
* Report Format
************************************************************************
TOP-OF-PAGE.

END-OF-PAGE.
************************************************************************
* Main Process
************************************************************************
START-OF-SELECTION.
  PERFORM get_data.
  PERFORM display_data.
END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
FORM get_data.
  DATA: BEGIN OF lt_makt OCCURS 0,
      matnr LIKE makt-matnr,
      maktx LIKE makt-maktx,
    END OF lt_makt,

    BEGIN OF lt_mard OCCURS 0,
      matnr LIKE mard-matnr,
      lgort LIKE mard-lgort,
      lgpbe LIKE mard-lgpbe,
    END OF lt_mard.

  DATA: l_idx LIKE sy-tabix.

  "工廠
  SELECT SINGLE butxt INTO g_butxt
             FROM  t001
             WHERE bukrs = p_werks.

  "盤點文件
  SELECT ikpf~gjahr ikpf~zldat ikpf~iblnr
             iseg~zeili ikpf~werks ikpf~lgort iseg~matnr
             iseg~erfmg iseg~erfme mara~mtart
             INTO CORRESPONDING FIELDS OF TABLE gt_data
             FROM ikpf
             INNER JOIN iseg ON ikpf~gjahr = iseg~gjahr
             AND ikpf~iblnr = iseg~iblnr
             INNER JOIN mara ON iseg~matnr = mara~matnr
             WHERE ikpf~werks = p_werks
             AND ikpf~lgort IN s_lgort
             AND ikpf~iblnr IN s_iblnr
             AND iseg~matnr IN s_matnr.

  "物料說明
  SELECT matnr maktx INTO TABLE lt_makt
            FROM makt
            WHERE matnr IN s_matnr.

  "倉庫儲位
  SELECT matnr lgort lgpbe INTO TABLE lt_mard
            FROM mard
            WHERE werks = p_werks
            AND lgort IN s_lgort
            AND matnr IN s_matnr.

  SORT: gt_data BY gjahr iblnr zeili,
    lt_makt BY matnr,
    lt_mard BY matnr lgort.

  LOOP AT gt_data.
    l_idx = sy-tabix.

    "物料說明
    READ TABLE lt_makt WITH KEY
        matnr = gt_data-matnr BINARY SEARCH.
    IF sy-subrc = 0.
      gt_data-maktx = lt_makt-maktx.
    ENDIF.

    "儲位
    READ TABLE lt_mard WITH KEY
      matnr = gt_data-matnr
      lgort = gt_data-lgort BINARY SEARCH.
    IF sy-subrc = 0.
      gt_data-lgpbe = lt_mard-lgpbe.
    ENDIF.

    MODIFY gt_data INDEX l_idx.
  ENDLOOP.
ENDFORM.                "GET_DATA

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
FORM display_data.
  DATA: l_repid TYPE sy-repid,
        l_inclname TYPE trdir-name,
        l_idx LIKE sy-tabix.

  CLEAR: gt_fieldcat[],wa_fieldcat.

  l_repid = l_inclname = sy-cprog.

  "欄位最適寬度
  gs_layout-colwidth_optimize = 'X'.
  "復選框
  gs_layout-box_fieldname     = 'CHECKBOX'.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      I_PROGRAM_NAME         = l_repid
      I_INTERNAL_TABNAME     = 'GT_DATA'
      I_INCLNAME             = l_inclname
    CHANGING
      CT_FIELDCAT            = gt_fieldcat
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      OTHERS                 = 3.

  LOOP AT gt_fieldcat INTO wa_fieldcat.
    l_idx = sy-tabix.


    CASE wa_fieldcat-fieldname.
      WHEN 'CHECKBOX'.
        "技術字段,設置’X’后,該字段不會顯示,也不能輸出,如同MANDT字段一樣的效果
        wa_fieldcat-tech = 'X'.
      WHEN 'LGORT'.
        wa_fieldcat-seltext_s = wa_fieldcat-seltext_m =
        wa_fieldcat-seltext_l = '倉庫'.
        wa_fieldcat-ddictxt = 'S'.
      WHEN 'ERFMG'.
        wa_fieldcat-seltext_s = wa_fieldcat-seltext_m =
        wa_fieldcat-seltext_l = '盤點數量'.
        wa_fieldcat-ddictxt = 'S'.
      WHEN 'ERFME'.
        wa_fieldcat-seltext_s = wa_fieldcat-seltext_m =
        wa_fieldcat-seltext_l = '單位'.
        wa_fieldcat-ddictxt = 'S'.
    ENDCASE.

    MODIFY gt_fieldcat FROM wa_fieldcat INDEX l_idx.
  ENDLOOP.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = sy-repid
      IS_LAYOUT                = gs_layout
      IT_FIELDCAT              = gt_fieldcat[]
      I_CALLBACK_PF_STATUS_SET = 'ALV_PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'ALV_USER_COMMAND'
      I_SAVE                   = 'A'
    TABLES
      T_OUTTAB            =  gt_data
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
ENDFORM.                    "DISPLAY_DATA

*&---------------------------------------------------------------------*
*&      Form  ALV_PF_STATUS
*&---------------------------------------------------------------------*
FORM alv_pf_status USING rt_extab TYPE slis_t_extab.
  SET  PF-STATUS  'STATUS_PRINT' .
ENDFORM.                    " ALV_PF_STATUS

*&---------------------------------------------------------------------*
*&      Form  ALV_USER_COMMAND
*&---------------------------------------------------------------------*
FORM alv_user_command USING  in_ucomm LIKE  sy-ucomm
                         in_selfield TYPE slis_selfield.

  DATA: l_iblnr LIKE ikpf-iblnr,
            l_count TYPE i.

  CASE in_ucomm.
    WHEN '&PRINT'.

      CLEAR: g_totalpage,l_count.
      CLEAR: gt_header[],gt_item[].

      SORT gt_data BY iblnr zeili.

      LOOP AT gt_data WHERE checkbox = 'X'.
        "列印內容
        MOVE-CORRESPONDING gt_data TO gt_header.
        APPEND gt_header. CLEAR gt_header.
        MOVE-CORRESPONDING gt_data TO gt_item.
        APPEND gt_item. CLEAR gt_item.

        "總頁數
        IF gt_data-iblnr <> l_iblnr.  "當盤點號不一樣則頁碼+1
          g_totalpage = g_totalpage + 1.
          l_count = 1.
        ELSE.
          l_count = l_count + 1.
          IF l_count > 8. "盤點項次每次>8則頁碼+1
            g_totalpage = g_totalpage + 1.
            l_count = 1.
          ENDIF.
        ENDIF.
        l_iblnr = gt_data-iblnr.
      ENDLOOP.

      "根據年度和盤點文件去重
      DELETE ADJACENT DUPLICATES FROM gt_header
                COMPARING iblnr gjahr.
*      cl_demo_output=>write( g_butxt ).
*      cl_demo_output=>write( gt_item[] ).
*      cl_demo_output=>display(  ).

      "執行打印
      IF gt_item[] IS NOT INITIAL.
        PERFORM print_data.
      ELSE.
        MESSAGE  TEXT-001 TYPE 'E'.
      ENDIF.
  ENDCASE.

ENDFORM.                    " ALV_USER_COMMAND

*&---------------------------------------------------------------------*
*&      Form  PRINT_DATA
*&---------------------------------------------------------------------*
FORM print_data.
  DATA: l_fnam TYPE rs38l_fnam,
           ls_ssfctrlop TYPE ssfctrlop,
           ls_ssfcrescl TYPE ssfcrescl,
           ls_sscompop TYPE ssfcompop.

  "DATA: l_totalpage TYPE String.

  "填充用戶手工輸入打印彈框參數
  ls_sscompop-tddest = 'FPW1'.
  ls_ssfctrlop-preview = 'X'.
  ls_ssfctrlop-no_dialog = 'X'.
  "ls_sscompop-tdimmed  = 'X'.

  "頁碼格式轉換
  "l_totalpage = g_totalpage.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME             = 'ZMMSTEST'
    IMPORTING
      FM_NAME                = l_fnam
    EXCEPTIONS
      NO_FORM                  = 1
      NO_FUNCTION_MODULE       = 2
      OTHERS                   = 3
            .
  CALL FUNCTION l_fnam
    EXPORTING
      CONTROL_PARAMETERS = ls_ssfctrlop
      OUTPUT_OPTIONS = ls_sscompop
      USER_SETTINGS     = ''
      G_BUTXT = g_butxt
      G_TOTALPAGE = g_totalpage
    IMPORTING
      JOB_OUTPUT_INFO = ls_ssfcrescl
    TABLES
      GT_HEADER = gt_header
      GT_ITEM = gt_item
    EXCEPTIONS
      FORMATTING_ERROR      = 1
      INTERNAL_ERROR            = 2
      SEND_ERROR                  = 3
      USER_CANCELED             = 4
      OTHERS                           = 5
            .
ENDFORM.                    " PRINT_DATA
View Code

 

3、自定義按鈕

三、SmartForms

3.1、樣式:

  表頭資料:標准段落選"段落格式"的S1(這里我想要SmartForms所有的字體內容靠左),其余參數默認

  

  段落格式:

段落格式 說明 對其 縮排-左邊界 行間距 字型集 字型大小 字型樣式
S1 標准樣式靠左 靠左對齊 0.1CM 1LN CHNEI 10pt  
S2 居中 置中 0CM 1LN CHNEI 12pt 粗體
S3 靠右 靠右對齊 0CM 1LN CHNEI 10pt  

  

    

  補充:S1的縮排-左邊界有0.1CM是為了保證字體內容不要與表格線重合

  字元格式:無

3.2、SmartForms:

  3.2.1、通用設定:

  3.2.1.1、表單屬性:

  

  

  

  

  

  

  3.2.1.3、通用定義:

  

  

  3.2.2、頁面和視窗:

  3.2.2.1、視窗設計

  

  3.2.2.2、SmartForms結構

  

  

  3.2.3、SmartForms邏輯流程和代碼

3.3、模板下載:(系統登陸時語言選ZF再導入)

  鏈接:https://pan.baidu.com/s/10XDjhjL-lVUrNApv706e1A
  提取碼:qwcu

  

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM