专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > SAP

一个简略的alv双击行实现smartforms打印

发布时间:2010-06-06 17:05:36 文章来源:www.iduyao.cn 采编人员:星星草
一个简单的alv双击行实现smartforms打印

利用alv显所有查询订单抬头信息,双击行实现一个订单详情的smartforms打印,smartforms实现一个强制分页,里面还有点乱,没怎么规划,主要用到EKKO与EKPO两张表。

*&---------------------------------------------------------------------*
*& Report  Z_SSX_TEST_ALV_01
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_SSX_TEST_ALV_01.

TYPE-POOLSSLIS.
TABLES EKKO.

TYPES:
 BEGIN OF TY_EKKO,
   EBELN    TYPE   EKKO-EBELN,
   BUKRS    TYPE   EKKO-BUKRS,
   WAERS    TYPE   EKKO-WAERS,
   LLIEF    TYPE   EKKO-LLIEF,
   END OF TY_EKKO,

 BEGIN OF TY_EKPO,
   EBELN    TYPE   EKPO-EBELN,
   MATNR    TYPE   EKPO-MATNR,
   MENGE    TYPE   EKPO-MENGE,
   MEINS    TYPE   EKPO-MEINS,
   PEINH    TYPE   EKPO-PEINH,
   END OF TY_EKPO.

DEFINE FIELDCATSET.
  LW_FIELDCAT-FIELDNAME  &1.
  LW_FIELDCAT-SELTEXT_L  &2.
  APPEND LW_FIELDCAT TO GT_FIELDCAT.
  CLEAR LW_FIELDCAT.
END-OF-DEFINITION.

DATA:
    MYREPID LIKE SY-REPID,
GT_OUTPUT   TYPE ZSTB_TEST_PO_INPUT,
GT_EKKO     TYPE STANDARD TABLE OF TY_EKKO,
GT_EKPO     TYPE STANDARD TABLE OF TY_EKPO,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
GW_LAYOUT   TYPE SLIS_LAYOUT_ALV.


SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
*PARAMETERS: P_EBELN TYPE EKKO-EBELN OBLIGATORY.
SELECT-OPTIONS:P_EBELN FOR EKKO-EBELN.
SELECTION-SCREEN END OF BLOCK BLK1.

INITIALIZATION.   "初始值

AT SELECTION-SCREEN OUTPUT" PBO   控制屏幕字段属性

AT SELECTION-SCREEN.        "PAI 检查输入是否正确

START-OF-SELECTION.

  PERFORM FRM_SELECT_DATA.

*  PERFORM FRM_EDIT_DATA.

END-OF-SELECTION.

*  PERFORM FRM_DIS_DATA.
  PERFORM FRM_SHOW_ALV_DATA.


*&---------------------------------------------------------------------*
*&      Form  FRM_SELECT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SELECT_DATA .


  SELECT EBELN
         BUKRS
         WAERS
         LLIEF
    FROM EKKO
    INTO CORRESPONDING FIELDS OF TABLE GT_EKKO
    WHERE EBELN IN P_EBELN.
*
*  CHECK GT_EKKO IS NOT INITIAL.
*  LT_TEMP = GT_EKKO.
*  SORT LT_TEMP BY EBELN.
*  DELETE ADJACENT DUPLICATES FROM LT_TEMP COMPARING EBELN.
*
*  SELECT EBELN
*         MATNR
*         MENGE
*         MEINS
*         PEINH
*    FROM EKPO
*    INTO CORRESPONDING FIELDS OF TABLE GT_EKPO
*    FOR ALL ENTRIES IN LT_TEMP
*    WHERE EBELN = LT_TEMP-EBELN.

ENDFORM.                    " FRM_SELECT_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_EDIT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_EDIT_DATA .

  DATA:
   LW_OUTPUT LIKE LINE OF GT_OUTPUT,
   LT_ITEM TYPE ZSTB_TEST_PO_ITEM,
   LW_ITEM LIKE LINE OF LT_ITEM,
   LW_EKKO TYPE TY_EKKO,
   LW_EKPO TYPE TY_EKPO,
   L_LINE   TYPE I,
   L_BUTXT  TYPE BUTXT.

  DATALV_COUNT TYPE I,   "计数器
      LV_PAGE  TYPE I,   "当前页码
      LV_ALL   TYPE I,   "总页码
      LV_BLANK TYPE I.   "空白行项目数

*  SELECT SINGLE BUTXT
*    FROM T001
*    INTO L_BUTXT
*    WHERE BUKRS = P_BUKRS.

  L_LINE LINESGT_EKKO ).

  LOOP AT GT_EKKO INTO LW_EKKO.

    LV_COUNT 1.  "计数器
    LV_PAGE 0.   "页码

*    LW_PRINT-BUTXT = L_BUTXT.
    LW_OUTPUT-EBELN LW_EKKO-EBELN.
    LW_OUTPUT-BUKRS LW_EKKO-BUKRS.
    LW_OUTPUT-WAERS LW_EKKO-WAERS.
    LW_OUTPUT-LLIEF LW_EKKO-LLIEF.

*    LW_PRINT-CUR_PAGE = SY-TABIX.
*    LW_PRINT-PAGES = L_LINE.

    LOOP AT GT_EKPO INTO LW_EKPO WHERE EBELN LW_EKKO-EBELN.
      MOVE-CORRESPONDING LW_EKPO TO LW_ITEM.
      APPEND LW_ITEM TO LT_ITEM.
      CLEAR:
      LW_EKPO,
      LW_ITEM.

      IF LV_COUNT EQ 6.
        LV_PAGE LV_PAGE + 1.

*        LW_PRINT-pages = lv_page.
        LW_OUTPUT-ITEM LT_ITEM.
        APPEND LW_OUTPUT TO GT_OUTPUT.

        LV_COUNT 0.

        CLEARLT_ITEM,
               LW_OUTPUT-ITEM.
      ENDIF.

      LV_COUNT LV_COUNT + 1.

    ENDLOOP.

    IF LV_COUNT NE 1.

      "添加空白行项目
      LV_COUNT LV_COUNT 1.
      IF LV_COUNT < 6.   "一页7个行项目,不足7行,添加空白行
        LV_BLANK LV_COUNT.
        DO LV_BLANK TIMES.
          CLEARLW_ITEM.
          APPEND LW_ITEM TO LT_ITEM.
        ENDDO.
      ENDIF.

*      lv_page = lv_page + 1.  "当前页码
*      LW_PRINT-pages   = lv_page.
      LW_OUTPUT-ITEM LT_ITEM.
      APPEND LW_OUTPUT TO GT_OUTPUT.
      CLEAR:
      LW_OUTPUT,
      LT_ITEM.
    ENDIF.

    CLEAR:
    LW_OUTPUT,
    LW_EKKO.

  ENDLOOP.


  "计算总页码
  "降序排列的页码,binary search读到的就是最大页码,即为总页码
*  SORT gt_input BY rsnum pages DESCENDING.
*  LOOP AT gt_input INTO gs_input.
*
*    READ TABLE gt_input INTO ls_input WITH KEY rsnum = gs_input-rsnum BINARY SEARCH.
*    gs_input-all_pg = ls_input-pages.
*    MODIFY gt_input FROM gs_input TRANSPORTING all_pg.
*    CLEAR: gs_input,
*           ls_input.
*  ENDLOOP.

ENDFORM.                    " FRM_EDIT_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_PRINT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DIS_DATA .
****Smartforms控制以及属性
  DATALV_FM_NAME             TYPE RS38L_FNAM,
        LS_CONTROL_PARAMETERS  TYPE SSFCTRLOP,
        LS_OUTPUT_OPTIONS      TYPE SSFCOMPOP,
        LS_JOBINFO             TYPE SSFCRESCL.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           'Z_SSX_TEST_PO_03'
    IMPORTING
      FM_NAME            LV_FM_NAME
    EXCEPTIONS
      NO_FORM            1
      NO_FUNCTION_MODULE 2
      OTHERS             3.

  LS_OUTPUT_OPTIONS-TDDEST   'LP01'.  "OutputDevice
  LS_OUTPUT_OPTIONS-TDIMMED  'X'.  "立即打印
  LS_OUTPUT_OPTIONS-TDCOPIES '1'.                         "副本数,1
  LS_OUTPUT_OPTIONS-TDNOPRINT ' '.
  LS_OUTPUT_OPTIONS-TDDELETE ''.   "输出后删除
  LS_CONTROL_PARAMETERS-NO_DIALOG ''.
  LS_CONTROL_PARAMETERS-DEVICE      'PRINTER'.
  LS_CONTROL_PARAMETERS-PREVIEW     'X'.
  LS_CONTROL_PARAMETERS-LANGU       '1'.

  CALL FUNCTION LV_FM_NAME
    EXPORTING
      CONTROL_PARAMETERS LS_CONTROL_PARAMETERS
      OUTPUT_OPTIONS     LS_OUTPUT_OPTIONS
      USER_SETTINGS      ''
    IMPORTING
      JOB_OUTPUT_INFO    LS_JOBINFO
    TABLES
      GT_OUTPUT          GT_OUTPUT.
ENDFORM.                    " FRM_PRINT_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_SHOW_ALV_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SHOW_ALV_DATA .
  DATA:
  LW_FIELDCAT LIKE LINE OF GT_FIELDCAT.
  GW_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
  GW_LAYOUT-ZEBRA 'X'.

*  LW_FIELDCAT-FIELDNAME = 'EBELN'.
*  LW_FIELDCAT-SELTEXT_L = '凭证号'.
*  LW_FIELDCAT-SELTEXT_M = ''.
*  LW_FIELDCAT-SELTEXT_S = ''.
*
* APPEND  LW_FIELDCAT TO GT_FIELDCAT.
*
*  LW_FIELDCAT-FIELDNAME = 'BUKRS'.
*  LW_FIELDCAT-SELTEXT_L = '公司代码'.
*  LW_FIELDCAT-SELTEXT_M = ''.
*  LW_FIELDCAT-SELTEXT_S = ''.
*
*  APPEND  LW_FIELDCAT TO GT_FIELDCAT.
*
*  LW_FIELDCAT-FIELDNAME = 'WAERS'.
*  LW_FIELDCAT-SELTEXT_L = '货币码'.
*  LW_FIELDCAT-SELTEXT_M = ''.
*  LW_FIELDCAT-SELTEXT_S = ''.
*
*  APPEND  LW_FIELDCAT TO GT_FIELDCAT.
*
*  LW_FIELDCAT-FIELDNAME = 'LLIEF'.
*  LW_FIELDCAT-SELTEXT_L = '商品供应商'.
*  LW_FIELDCAT-SELTEXT_M = ''.
*  LW_FIELDCAT-SELTEXT_S = ''.
*
*  APPEND  LW_FIELDCAT TO GT_FIELDCAT.


  FIELDCATSET    'EBELN'  '采购凭证号'.
  FIELDCATSET    'BUKRS'  '公司代码'.
  FIELDCATSET    'WAERS ' '货币码'.
  FIELDCATSET    'LLIEF'  '商品供应商'.


  MYREPID SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      MYREPID
      IS_LAYOUT               GW_LAYOUT
      IT_FIELDCAT             GT_FIELDCAT
      I_CALLBACK_USER_COMMAND 'ALV_USER_COMMAND'
    TABLES
      T_OUTTAB                GT_EKKO
    EXCEPTIONS
      PROGRAM_ERROR           1
      OTHERS                  2.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.



ENDFORM.                    " FRM_SHOW_ALV_DATA
*&---------------------------------------------------------------------*
*&      Form  ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOM       text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                            RS_SELFIELD TYPE SLIS_SELFIELD.


  IF R_UCOMM '&IC1'.
    PERFORM PRINT USING RS_SELFIELD.
  ENDIF.


ENDFORM.                "ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  PRINT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_RS_SELFIELD  text
*----------------------------------------------------------------------*

FORM PRINT  USING  RS_SELFIELD TYPE SLIS_SELFIELD.
DATA:
      LW_EKKO TYPE TY_EKKO.
  READ TABLE GT_EKKO INTO LW_EKKO INDEX RS_SELFIELD-TABINDEX .
  SELECT EBELN
         MATNR
         MENGE
         MEINS
         PEINH
    FROM EKPO
    INTO CORRESPONDING FIELDS OF TABLE GT_EKPO
    WHERE EBELN LW_EKKO-EBELN.

  PERFORM FRM_EDIT_DATA.
  PERFORM FRM_DIS_DATA.


ENDFORM.                    " PRINT

2楼tb176
赞了……现在做SAP的沟通都存在于培训机构,没办法。
1楼someonehere
这边的ABAP东西太少了,哎。。。,况且,我 只对未来智能感兴趣。。。,哎。。。独自思慕不存在的她。。。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • :安装MINI SAP失败

    求救:安装MINI SAP失败! 如题。 怎么办啊? 安装之前已经把SQL2000 2005 VS.NET05 08全都卸载了的。 安装CD1的时候就开始报错...

  • 哪位高手有abap eclipse editor

    谁有abap eclipse editor? 那位哥们有,可以进行资料交换。 ------解决方案-------------------- 这个现在只支持460,好像不支持640...

  • ,关于t-code:sgen的有关问题!

    求助,关于t-code:sgen的问题!急~~~ 昨天刚把sap ecc6装好了 。为了能够快速运行,事先准备用sgen编译一下 非常郁闷的是,在还没有开始...

  • sql查询语句中WHERE条件后面AND的个数解决方案

    sql查询语句中WHERE条件后面AND的个数 sql查询语句中WHERE条件后面AND的个数有没有限制啊! ------解决方案-------------------- ...

  • SAP模块,学哪个模块未来发展比较顺利

    【求助】SAP模块,学哪个模块未来发展比较顺利? 各位大侠,我是SAP新人。最近公司在培训,3周培训后要我们从PS,FI,CO,MM等中选择一个模...

  • 站在十字路口,该怎么处理

    站在十字路口 本人在一个快消公司做IT程序员,主要负责内部系统开发、报表开发、数据库维护等工作。现在公司要上SAP了,我也有幸参与...

  • alv field 是否可以进行日期选择解决方法

    alv field 是否可以进行日期选择 哪位达人知道怎么在ALV报表中实现 日期的选择,就像调整系统日期一样,不用手动收入 ------解决方...

  • 在sap中怎样获取字段所属的表解决思路

    在sap中怎样获取字段所属的表 小弟是SAP初学者,在这里遇到一个问题,由于对sap内部表结构不是很了解,现在要根据一些字段获取所属的表...

  • ABAP list report 输出有关问题

    ABAP list report 输出问题 小弟初学ABAP,苦难重重,望大侠门指点。两个问题: 第一,我做了一个list report,输出deliveray item 和invoi...

  • 在SAP中如何截取字符串

    在SAP中怎么截取字符串 在SAP中怎么截取字符串 比如 DATA:STR(10) LIKE C VALUE '1234567890', STR1(4) LIKE C. 我要取...

热门推荐: