终于完成了 OO ALV的学习,第一个作品。 一个屏幕上放了2个ALV控件,上面用来显示表头,下面用来显示详细的行项目。

业务背景:
在汽车的售后服务环节,汽车零件在质保期内损坏,维修产生的费用,整车厂会追溯到零件供应商索取。

数据模型简介:
三包索赔单数据从销售系统中传入ERP系统。
对三包索赔原始数据我们设计了2张表来存放,
一张是表头表,存放三包索赔单号及相关信息,另一张是详细项目表,存放详细使用的零件项目。
表头表和详细项目表的关系是一对多,即一条表头表(三包索赔单)对应多条详细项目(结算单)。

ERP系统功能设计:

物流部门需要对三包索赔单数据管理并打印出来发给供应商协商。
1. ABAP程序需要在ERP系统中用2个ALV展示三包索赔数据和行项目,一条三包索赔数据对应多条详细项目。
2. 选中ALV1中的一条三包索赔数据,ALV2中列出相关的详细项目。
3.点击自定义按钮,完成对一个三包索赔单数据的审批和打印单据。

ABAP代码说明:
这次我们要实现一个屏幕放入2个ALV列表控件,点击第一个ALV控件(只能单选),带出数据放入第二个ALV控件中。

使用FUNCTION ALV目前看来已经不能满足要求,需要用OO方式来控制ALV,这样就可以在一个屏幕上画上2个ALV。

所以创建屏幕在所难免,我们创建一个屏幕0100,放2个自定义控件,取名CON1,CON2.


屏幕会带出3个模块,所有这些模块代码,我选择全部放到一个源程序中,这样使用比较方便:

PROCESS BEFORE OUTPUT.MODULE STATUS_0100.MODULE INIT_CON.
PROCESS AFTER INPUT. MODULE USER_COMMAND_0100.

STATUS_0100 模块中,我们设置程序主画面的STAUTS,STAUTS是自己准备的,也可以用标准的。
USER_COMMAND_0100 模块,就是对STAUTS上的绿,黄,红工具条按钮按下的效果。

INIT_CON 模块中,是初始化屏幕和ALV控件,第一个ALV控件,我们会把数据也填充到内表,然后交有ALV显示出来。

该模块中,我们可以看到OO ALV的使用方法,即CREATE OBJECT CON1_REF连接到CON1屏幕控件上,CREATE OBJECT G_GRID1再创建ALV对象,然后我们给ALV对象注册几个事件,
1. HANDLE_TOOLBAR这个事件用于给ALV加自定义的工具条按钮。
2. HANDLE_CLICK用于给ALV点击其中一行后的处理代码段。
3. HANDLE_COMMAND事件用于接收用户按了自定义按钮后,触发的代码段。

ABAP中对于事件的使用我分为4步:

1. 定义事件方法
2. 指定事件的执行方法代码
3. 事件变量实例化
4. 把事件指定到ALV控件中(注册事件)

*&---------------------------------------------------------------------*
*&      Module  INIT_CON  OUTPUT
*&---------------------------------------------------------------------*
*       text 控件初始化模块
*----------------------------------------------------------------------*
MODULE INIT_CON OUTPUT.
"---------第一个ALV控件-----------------IF CON1_REF IS INITIAL.DATA GS_LAYOUT1 TYPE LVC_S_LAYO.GS_LAYOUT1-CWIDTH_OPT = 'X'.GS_LAYOUT1-GRID_TITLE = '三包索赔单'.GS_LAYOUT1-SEL_MODE = 'B'.GS_LAYOUT1-ZEBRA = 'X'.DATA GT_FIELDCAT TYPE LVC_T_FCAT.DATA GS_FIELDCAT TYPE LVC_S_FCAT.GS_FIELDCAT-COL_POS   = 1. GS_FIELDCAT-FIELDNAME = 'BOX'.          GS_FIELDCAT-CHECKBOX = 'X'.    GS_FIELDCAT-HOTSPOT = 'X'.       APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 2. GS_FIELDCAT-FIELDNAME = 'TZNUM'.        GS_FIELDCAT-COLTEXT = '三包索赔单号'.      APPEND GS_FIELDCAT TO GT_FIELDCAT. CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 3. GS_FIELDCAT-FIELDNAME = 'LIFNR'.        GS_FIELDCAT-COLTEXT = '供应商代码'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 4. GS_FIELDCAT-FIELDNAME = 'NAME1'.        GS_FIELDCAT-COLTEXT = '供应商名称'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 5. GS_FIELDCAT-FIELDNAME = 'ERDAT'.        GS_FIELDCAT-COLTEXT = '日期'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 6. GS_FIELDCAT-FIELDNAME = 'EINFR'.        GS_FIELDCAT-COLTEXT = '运费'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.
*        GS_FIELDCAT-COL_POS   = 7. GS_FIELDCAT-FIELDNAME = 'SUMME'.        GS_FIELDCAT-COLTEXT = '总计'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 8. GS_FIELDCAT-FIELDNAME = 'CHUKU'.        GS_FIELDCAT-COLTEXT = '出库'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 9. GS_FIELDCAT-FIELDNAME = 'ISSHEN'.       GS_FIELDCAT-COLTEXT = '审批'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 10. GS_FIELDCAT-FIELDNAME = 'ISDEL'.        GS_FIELDCAT-COLTEXT = '删除'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.CREATE OBJECT CON1_REFEXPORTINGCONTAINER_NAME = 'CON1'.CREATE OBJECT G_GRID1EXPORTINGI_PARENT = CON1_REF."4 注册事件句柄,图标的还必须加在这里,不然不行CREATE OBJECT EVENT_RECEIVER2.SET HANDLER EVENT_RECEIVER2->HANDLE_TOOLBAR FOR G_GRID1."4 注册事件句柄CREATE OBJECT EVENT_RECEIVER.SET HANDLER EVENT_RECEIVER->HANDLE_CLICK FOR G_GRID1."4 注册事件句柄CREATE OBJECT EVENT_RECEIVER3.SET HANDLER EVENT_RECEIVER3->HANDLE_COMMAND FOR G_GRID1.CALL METHOD G_GRID1->SET_TABLE_FOR_FIRST_DISPLAYEXPORTINGIS_LAYOUT =  GS_LAYOUT1CHANGINGIT_OUTTAB = GT_ITAB_HEAD[]IT_FIELDCATALOG = GT_FIELDCAT.ENDIF.

ALV1在非编辑模式单选控制的实现:

用户单击ALV1中的CKECKBOX时,
1. 程序首选清空ALV中的全部CKECKBOX
2. 打上当前用户选的一个CKECKBOX
3. 刷新ALV

全部代码:

*&---------------------------------------------------------------------*
*& Report  ZMMR0093
*& 三包索赔单审批及打印程序 潍柴(重庆)汽车
*&---------------------------------------------------------------------*
*& james_lx
*& 2015.12.10
*&---------------------------------------------------------------------*REPORT ZMMR0093.TYPE-POOLS: ICON.TABLES: ZSDT029,ZSDT030.
DATA GS_ZSDT_LOG029 LIKE ZSDT_LOG029.DATA GT_ZSDT029 LIKE TABLE OF ZSDT029 WITH HEADER LINE.
DATA GT_ZSDT030 LIKE TABLE OF ZSDT030 WITH HEADER LINE.DATA GT_ITAB        LIKE TABLE OF ZSDS045 WITH HEADER LINE.
DATA GT_ITAB_HEAD   LIKE TABLE OF ZSDS045 WITH HEADER LINE.
DATA GS_ITAB_HEAD   LIKE ZSDS045 .
DATA GT_PRINT       LIKE TABLE OF ZSDS045 WITH HEADER LINE.DATA GV_KNUMH LIKE A017-KNUMH.DATA GV_KPEIN LIKE KONP-KPEIN.
DATA GV_KBETR LIKE KONP-KBETR.DATA  CON1_REF TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA  CON2_REF TYPE REF TO CL_GUI_CUSTOM_CONTAINER.DATA  G_GRID1 TYPE REF TO CL_GUI_ALV_GRID.
DATA  G_GRID2 TYPE REF TO CL_GUI_ALV_GRID."-------------------------------------
"-----------ALV1的HOTSPOT单击事件------------
"-------------------------------------
"1 定义ALV1的事件CLASS LCL_EVENT_RECEIVER DEFINITION.PUBLIC SECTION.METHODS  HANDLE_CLICKFOR EVENT HOTSPOT_CLICKOF CL_GUI_ALV_GRIDIMPORTINGE_ROW_IDE_COLUMN_IDES_ROW_NO.ENDCLASS."2 事件的执行方法
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.METHOD HANDLE_CLICK.MESSAGE E_ROW_ID  TYPE 'S'."清空原来的XLOOP AT GT_ITAB_HEAD INTO GS_ITAB_HEAD.GS_ITAB_HEAD-BOX = ''.MODIFY GT_ITAB_HEAD FROM GS_ITAB_HEAD.ENDLOOP."补上当前行的XREAD TABLE GT_ITAB_HEAD INTO GS_ITAB_HEAD INDEX E_ROW_ID.   "读取当前行GS_ITAB_HEAD-BOX = 'X'.MODIFY GT_ITAB_HEAD FROM GS_ITAB_HEAD INDEX E_ROW_ID."刷新XDATA: LS_STABLE TYPE LVC_S_STBL.LS_STABLE-ROW = 'X'.LS_STABLE-COL = 'X'.CALL METHOD G_GRID1->REFRESH_TABLE_DISPLAYEXPORTINGIS_STABLE = LS_STABLEI_SOFT_REFRESH = 'X'."准备和显示第二个ALV的数据DATA GV_TZNUM LIKE  GT_ZSDT030-TZNUM."得到用户选的一个数据LOOP AT GT_ITAB_HEAD INTO GS_ITAB_HEAD.IF GS_ITAB_HEAD-BOX = 'X'.GV_TZNUM = GS_ITAB_HEAD-TZNUM.ENDIF.ENDLOOP.IF GV_TZNUM IS NOT INITIAL.SELECT *INTO CORRESPONDING FIELDS OF TABLE GT_PRINTFROM ZSDT029 AS AINNER JOIN ZSDT030 AS BON A~TZNUM = B~TZNUMWHERE A~TZNUM = GV_TZNUM."填充价格数据LOOP AT GT_PRINT INTO GT_PRINT."物料号补零CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGINPUT              = GT_PRINT-MATNRIMPORTINGOUTPUT             = GT_PRINT-MATNR."供应商补0CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGINPUT         = GT_PRINT-LIFNRIMPORTINGOUTPUT        = GT_PRINT-LIFNR.SELECT SINGLE KNUMH INTO GV_KNUMH FROM A017 WHERE LIFNR = GT_PRINT-LIFNR AND  MATNR = GT_PRINT-MATNR  AND WERKS = '1001' AND DATBI > GT_PRINT-ERDAT AND DATAB < GT_PRINT-ERDAT.IF SY-SUBRC = 0.SELECT SINGLE KBETR KPEIN INTO (GV_KBETR , GV_KPEIN) FROM KONP WHERE KNUMH = GV_KNUMH.GT_PRINT-CURR1 = GV_KBETR / GV_KPEIN."物料号去零CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'EXPORTINGINPUT              = GT_PRINT-MATNRIMPORTINGOUTPUT             = GT_PRINT-MATNR."供应商去0CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'EXPORTINGINPUT         = GT_PRINT-LIFNRIMPORTINGOUTPUT        = GT_PRINT-LIFNR.MODIFY GT_PRINT FROM GT_PRINT.ENDIF.ENDLOOP.LOOP AT GT_PRINT INTO GT_PRINT."求单价(材料单价*1.4 系数)"供应商补0CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGINPUT         = GT_PRINT-LIFNRIMPORTINGOUTPUT        = GT_PRINT-LIFNR.SELECT SINGLE NAME4 INTO GT_PRINT-NAME4 FROM LFA1 WHERE LIFNR = GT_PRINT-LIFNR."供应商去0CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'EXPORTINGINPUT         = GT_PRINT-LIFNRIMPORTINGOUTPUT        = GT_PRINT-LIFNR.IF SY-SUBRC = 0.GT_PRINT-CURR2 = GT_PRINT-CURR1 * GT_PRINT-NAME4 .ENDIF."材料费(单价*数量)GT_PRINT-CURRC =  GT_PRINT-CURR2 * GT_PRINT-ZMENG."合计GT_PRINT-SUMME = GT_PRINT-CURRC + GT_PRINT-CURRG + GT_PRINT-CURRJ + GT_PRINT-CURRQ.MODIFY GT_PRINT FROM GT_PRINT.ENDLOOP.DATA GS_LAYOUT2 TYPE LVC_S_LAYO.GS_LAYOUT2-CWIDTH_OPT = 'X'.GS_LAYOUT2-GRID_TITLE = '详细项目'.GS_LAYOUT2-SEL_MODE = 'B'.GS_LAYOUT2-ZEBRA = 'X'.CALL METHOD G_GRID2->SET_FRONTEND_LAYOUTEXPORTINGIS_LAYOUT =  GS_LAYOUT2.CALL METHOD G_GRID2->REFRESH_TABLE_DISPLAYEXPORTINGIS_STABLE = LS_STABLEI_SOFT_REFRESH = 'X'.ENDIF.ENDMETHOD.
ENDCLASS."3 事件引用变量DATA EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER."-------------------------------------
"-----------ALV1的加图标事件----------
"-------------------------------------
"1 定义ALV1的事件CLASS LCL_EVENT_RECEIVER2 DEFINITION.PUBLIC SECTION.METHODS  HANDLE_TOOLBARFOR EVENT TOOLBAROF CL_GUI_ALV_GRIDIMPORTING    E_OBJECT  E_INTERACTIVE.ENDCLASS."2 事件的执行方法
CLASS LCL_EVENT_RECEIVER2 IMPLEMENTATION.METHOD HANDLE_TOOLBAR.DATA LS_TOOLBAR TYPE STB_BUTTON.CLEAR LS_TOOLBAR.LS_TOOLBAR-BUTN_TYPE = 3.APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.CLEAR LS_TOOLBAR.LS_TOOLBAR-FUNCTION = 'MYSHEN'.LS_TOOLBAR-ICON = ICON_SET_STATE.LS_TOOLBAR-QUICKINFO = '审批确认'.LS_TOOLBAR-TEXT = '审批确认'.LS_TOOLBAR-DISABLED = ''.APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.CLEAR LS_TOOLBAR.LS_TOOLBAR-FUNCTION = 'MYSCAN'.LS_TOOLBAR-ICON = ICON_STORNO.LS_TOOLBAR-QUICKINFO = '取消审批'.LS_TOOLBAR-TEXT = '取消审批'.LS_TOOLBAR-DISABLED = ''.APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.CLEAR LS_TOOLBAR.LS_TOOLBAR-FUNCTION = 'MYPRINT'.LS_TOOLBAR-ICON = ICON_PRINT.LS_TOOLBAR-QUICKINFO = '单据打印'.LS_TOOLBAR-TEXT = '单据打印'.LS_TOOLBAR-DISABLED = ''.APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.ENDMETHOD.
ENDCLASS."3 事件引用变量DATA EVENT_RECEIVER2 TYPE REF TO LCL_EVENT_RECEIVER2."-------------------------------------
"-----------ALV1的加按钮响应事件------
"-------------------------------------
"1 定义ALV1的事件CLASS LCL_EVENT_RECEIVER3 DEFINITION.PUBLIC SECTION.METHODS  HANDLE_COMMANDFOR EVENT USER_COMMANDOF CL_GUI_ALV_GRIDIMPORTING    E_UCOMM.ENDCLASS."2 事件的执行方法
CLASS LCL_EVENT_RECEIVER3 IMPLEMENTATION.METHOD HANDLE_COMMAND.CASE E_UCOMM.WHEN 'MYSHEN'.PERFORM SHENFORM.WHEN 'MYSCAN'.PERFORM  SCANCELFORM .WHEN 'MYPRINT'.PERFORM  PPPFORM .ENDCASE.ENDMETHOD.
ENDCLASS."3 事件引用变量DATA EVENT_RECEIVER3 TYPE REF TO LCL_EVENT_RECEIVER3."选择屏幕
SELECT-OPTIONS GS_TZNUM FOR ZSDT029-TZNUM.  "三包索赔单号
SELECT-OPTIONS GS_JZNUM FOR ZSDT030-JZNUM.  "结算单号
SELECT-OPTIONS GS_LIFNR FOR ZSDT029-LIFNR.  "供应商
SELECT-OPTIONS GS_ERDAT FOR ZSDT029-ERDAT.  "日期
SELECT-OPTIONS GS_MATNR FOR ZSDT030-MATNR.  "配件代码START-OF-SELECTION.SELECT *INTO CORRESPONDING FIELDS OF TABLE GT_ITABFROM ZSDT029 AS AINNER JOIN ZSDT030 AS BON A~TZNUM = B~TZNUMWHERE A~TZNUM IN GS_TZNUMAND A~LIFNR IN GS_LIFNRAND A~ERDAT IN GS_ERDATAND B~JZNUM IN GS_JZNUMAND B~MATNR IN GS_MATNR."为第一个控件准备数据LOOP AT GT_ITAB.MOVE GT_ITAB-TZNUM  TO GT_ITAB_HEAD-TZNUM.MOVE GT_ITAB-LIFNR  TO GT_ITAB_HEAD-LIFNR.MOVE GT_ITAB-NAME1  TO GT_ITAB_HEAD-NAME1.MOVE GT_ITAB-ERDAT  TO GT_ITAB_HEAD-ERDAT.MOVE GT_ITAB-EINFR  TO GT_ITAB_HEAD-EINFR.MOVE GT_ITAB-SUMME  TO GT_ITAB_HEAD-SUMME.MOVE GT_ITAB-CHUKU  TO GT_ITAB_HEAD-CHUKU.MOVE GT_ITAB-ISSHEN TO GT_ITAB_HEAD-ISSHEN.MOVE GT_ITAB-ISDEL  TO GT_ITAB_HEAD-ISDEL.APPEND GT_ITAB_HEAD.CLEAR GT_ITAB_HEAD.ENDLOOP.SORT GT_ITAB_HEAD.
DELETE ADJACENT DUPLICATES FROM GT_ITAB_HEAD.CALL  SCREEN 100.*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.SET PF-STATUS 'TOPS'.
*  SET TITLEBAR 'xxx'.ENDMODULE.                 " STATUS_0100  OUTPUT*&---------------------------------------------------------------------*
*&      Module  INIT_CON  OUTPUT
*&---------------------------------------------------------------------*
*       text 控件初始化模块
*----------------------------------------------------------------------*
MODULE INIT_CON OUTPUT."---------第一个ALV控件-----------------IF CON1_REF IS INITIAL.DATA GS_LAYOUT1 TYPE LVC_S_LAYO.GS_LAYOUT1-CWIDTH_OPT = 'X'.GS_LAYOUT1-GRID_TITLE = '三包索赔单'.GS_LAYOUT1-SEL_MODE = 'B'.GS_LAYOUT1-ZEBRA = 'X'.DATA GT_FIELDCAT TYPE LVC_T_FCAT.DATA GS_FIELDCAT TYPE LVC_S_FCAT.GS_FIELDCAT-COL_POS   = 1. GS_FIELDCAT-FIELDNAME = 'BOX'.          GS_FIELDCAT-CHECKBOX = 'X'.    GS_FIELDCAT-HOTSPOT = 'X'.       APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 2. GS_FIELDCAT-FIELDNAME = 'TZNUM'.        GS_FIELDCAT-COLTEXT = '三包索赔单号'.      APPEND GS_FIELDCAT TO GT_FIELDCAT. CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 3. GS_FIELDCAT-FIELDNAME = 'LIFNR'.        GS_FIELDCAT-COLTEXT = '供应商代码'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 4. GS_FIELDCAT-FIELDNAME = 'NAME1'.        GS_FIELDCAT-COLTEXT = '供应商名称'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 5. GS_FIELDCAT-FIELDNAME = 'ERDAT'.        GS_FIELDCAT-COLTEXT = '日期'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 6. GS_FIELDCAT-FIELDNAME = 'EINFR'.        GS_FIELDCAT-COLTEXT = '运费'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.
*        GS_FIELDCAT-COL_POS   = 7. GS_FIELDCAT-FIELDNAME = 'SUMME'.        GS_FIELDCAT-COLTEXT = '总计'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 8. GS_FIELDCAT-FIELDNAME = 'CHUKU'.        GS_FIELDCAT-COLTEXT = '出库'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 9. GS_FIELDCAT-FIELDNAME = 'ISSHEN'.       GS_FIELDCAT-COLTEXT = '审批'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-COL_POS   = 10. GS_FIELDCAT-FIELDNAME = 'ISDEL'.        GS_FIELDCAT-COLTEXT = '删除'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.CREATE OBJECT CON1_REFEXPORTINGCONTAINER_NAME = 'CON1'.CREATE OBJECT G_GRID1EXPORTINGI_PARENT = CON1_REF."4 注册事件句柄,图标的还必须加在这里,不然不行CREATE OBJECT EVENT_RECEIVER2.SET HANDLER EVENT_RECEIVER2->HANDLE_TOOLBAR FOR G_GRID1."4 注册事件句柄CREATE OBJECT EVENT_RECEIVER.SET HANDLER EVENT_RECEIVER->HANDLE_CLICK FOR G_GRID1."4 注册事件句柄CREATE OBJECT EVENT_RECEIVER3.SET HANDLER EVENT_RECEIVER3->HANDLE_COMMAND FOR G_GRID1.CALL METHOD G_GRID1->SET_TABLE_FOR_FIRST_DISPLAYEXPORTINGIS_LAYOUT =  GS_LAYOUT1CHANGINGIT_OUTTAB = GT_ITAB_HEAD[]IT_FIELDCATALOG = GT_FIELDCAT.ENDIF."---------第二个ALV控件-----------------IF CON2_REF IS INITIAL.DATA GS_LAYOUT2 TYPE LVC_S_LAYO.GS_LAYOUT2-CWIDTH_OPT = 'X'.GS_LAYOUT2-GRID_TITLE = '详细项目'.GS_LAYOUT2-SEL_MODE = 'B'.GS_LAYOUT2-ZEBRA = 'X'.DATA GT_FIELDCAT2 TYPE LVC_T_FCAT.DATA GS_FIELDCAT2 TYPE LVC_S_FCAT.GS_FIELDCAT2-COL_POS   = 2. GS_FIELDCAT2-FIELDNAME = 'JZNUM'.        GS_FIELDCAT2-COLTEXT = '结算单号'.      APPEND GS_FIELDCAT2 TO GT_FIELDCAT2. CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 3. GS_FIELDCAT2-FIELDNAME = 'MAKTX'.        GS_FIELDCAT2-COLTEXT = '配件名称'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 4. GS_FIELDCAT2-FIELDNAME = 'MATNR'.        GS_FIELDCAT2-COLTEXT = '配件代码'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 5. GS_FIELDCAT2-FIELDNAME = 'MEINS'.        GS_FIELDCAT2-COLTEXT = '单位'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 6. GS_FIELDCAT2-FIELDNAME = 'ZMENG'.        GS_FIELDCAT2-COLTEXT = '数量'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 7. GS_FIELDCAT2-FIELDNAME = 'CURR1'.        GS_FIELDCAT2-COLTEXT = '材料单价'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 7. GS_FIELDCAT2-FIELDNAME = 'NAME4'.        GS_FIELDCAT2-COLTEXT = '系数'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 8. GS_FIELDCAT2-FIELDNAME = 'CURR2'.        GS_FIELDCAT2-COLTEXT = '单价(材料单价*1.4) '.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 9. GS_FIELDCAT2-FIELDNAME = 'CURRC'.        GS_FIELDCAT2-COLTEXT = '材料费(单价*数量)'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'CURRG'.        GS_FIELDCAT2-COLTEXT = '工时费'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'CURRJ'.        GS_FIELDCAT2-COLTEXT = '救援费'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'CURRQ'.        GS_FIELDCAT2-COLTEXT = '其它费用'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'SUMME'.        GS_FIELDCAT2-COLTEXT = '合计'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'OTHER'.        GS_FIELDCAT2-COLTEXT = '备注'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'TZNUM'.        GS_FIELDCAT2-NO_OUT = 'X'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'LIFNR'.        GS_FIELDCAT2-NO_OUT = 'X'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'NAME1'.        GS_FIELDCAT2-NO_OUT = 'X'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'ERDAT'.        GS_FIELDCAT2-NO_OUT = 'X'.       APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'EINFR'.        GS_FIELDCAT2-NO_OUT = 'X'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'CHUKU'.        GS_FIELDCAT2-NO_OUT = 'X'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'ISSHEN'.        GS_FIELDCAT2-NO_OUT = 'X'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'ISDEL'.        GS_FIELDCAT2-NO_OUT = 'X'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'BOX'.        GS_FIELDCAT2-NO_OUT = 'X'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.CREATE OBJECT CON2_REFEXPORTINGCONTAINER_NAME = 'CON2'.CREATE OBJECT G_GRID2EXPORTINGI_PARENT = CON2_REF.CALL METHOD G_GRID2->SET_TABLE_FOR_FIRST_DISPLAYEXPORTINGI_STRUCTURE_NAME = 'ZSDS045'IS_LAYOUT =  GS_LAYOUT2CHANGINGIT_OUTTAB = GT_PRINT[]IT_FIELDCATALOG = GT_FIELDCAT2.ENDIF.ENDMODULE.                 " INIT_CON  OUTPUT*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text 这个用户命令,是最上面的 【标准工具条】上的按钮
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.CASE SY-UCOMM.WHEN 'BACK'.LEAVE TO SCREEN 0.WHEN 'EXIT'.LEAVE PROGRAM.WHEN 'SCAN'.LEAVE TO SCREEN 0.WHEN OTHERS.ENDCASE.ENDMODULE.                 " USER_COMMAND_0100  INPUT"------------取消审批的FORM--------------------
FORM SCANCELFORM .DATA  GV_ANSWER TYPE C.
CALL FUNCTION 'POPUP_TO_CONFIRM'EXPORTINGTEXT_QUESTION         = '取消审批?'DEFAULT_BUTTON              = '2'DISPLAY_CANCEL_BUTTON       = ''IMPORTINGANSWER                = GV_ANSWER.IF GV_ANSWER <> 1.RETURN.ENDIF."处理保存到LOG表
LOOP AT GT_ITAB_HEAD.IF GT_ITAB_HEAD-BOX = 'X'.GS_ITAB_HEAD = GT_ITAB_HEAD.IF GS_ITAB_HEAD-BOX = 'X' AND GS_ITAB_HEAD-ISSHEN = 'X' AND GS_ITAB_HEAD-ISDEL <> 'X' AND GS_ITAB_HEAD-CHUKU <> 'X'.GS_ZSDT_LOG029-USRID = SY-UNAME. "用户名GS_ZSDT_LOG029-CRDAT = SY-DATUM. "日期GS_ZSDT_LOG029-ANUZT = SY-UZEIT. "时间CALL FUNCTION 'NUMBER_GET_NEXT'EXPORTINGNR_RANGE_NR                   = 'A1'OBJECT                        = 'ZSDFM020'IMPORTINGNUMBER                         = GS_ZSDT_LOG029-AUTONUMBER.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'  "去掉前导零EXPORTINGINPUT         = GS_ZSDT_LOG029-AUTONUMBERIMPORTINGOUTPUT        =  GS_ZSDT_LOG029-AUTONUMBER.MOVE-CORRESPONDING GS_ITAB_HEAD TO GS_ZSDT_LOG029."写业务数据表UPDATE ZSDT029SET  ISSHEN = ''WHERE TZNUM = GS_ITAB_HEAD-TZNUM.COMMIT WORK .IF SY-SUBRC = 0.DATA GV_TABIX LIKE SY-TABIX."改一下控件的内表X数据LOOP AT GT_ITAB_HEAD.IF GT_ITAB_HEAD-BOX = 'X'.GV_TABIX = SY-TABIX.ENDIF.ENDLOOP."补上当前行的XREAD TABLE GT_ITAB_HEAD INTO GS_ITAB_HEAD INDEX GV_TABIX.   "读取当前行GS_ITAB_HEAD-ISSHEN = ''.MODIFY GT_ITAB_HEAD FROM GS_ITAB_HEAD INDEX GV_TABIX."刷新XDATA: LS_STABLE TYPE LVC_S_STBL.LS_STABLE-ROW = 'X'.LS_STABLE-COL = 'X'.CALL METHOD G_GRID1->REFRESH_TABLE_DISPLAYEXPORTINGIS_STABLE = LS_STABLEI_SOFT_REFRESH = 'X'."传给EAIDATA GT_HEADER LIKE TABLE OF ZSDS043 WITH HEADER LINE.DATA GT_RETURN LIKE TABLE OF BAPIRET2 WITH HEADER LINE.DATA RESULT LIKE TREXS_CONNECTION_CHECK_RESULT.GT_HEADER-TZNUM = GT_ITAB_HEAD-TZNUM.GT_HEADER-USRID = SY-UNAME.GT_HEADER-CRDAT = SY-DATUM.GT_HEADER-ISSHEN = ''.APPEND GT_HEADER.CALL FUNCTION 'TREX_RFC_CONNECT_CHECK_LOCAL'EXPORTINGTREX_DESTINATION        = 'SAPEAI'IMPORTINGLOCAL_RESULT            = RESULTEXCEPTIONSSYSTEM_FAILURE          = 1COMMUNICATION_FAILURE   = 2AUTHORITY_NOT_AVAILABLE = 3SEND_ERROR              = 4OTHERS                  = 5.IF RESULT-ERROR_CODE <> 0."无响应MESSAGE '连接错误,请检查EAI服务是否注册成功' TYPE 'E'.ELSE.CALL FUNCTION 'ZSD_IF_FM023' DESTINATION 'SAPJCO'TABLESHEADER = GT_HEADERRETURN = GT_RETURN.IF GT_RETURN[] IS NOT INITIAL.READ TABLE GT_RETURN INDEX 1.IF GT_RETURN-TYPE <> 'S'.GS_ZSDT_LOG029-MESSAGE = ' [EAI接收失败] '.ELSEIF GT_RETURN-TYPE = 'S'.GS_ZSDT_LOG029-MESSAGE = ' [EAI接收成功] '.ENDIF.ENDIF.CLEAR:GT_HEADER,GT_RETURN,GT_HEADER[],GT_RETURN[].ENDIF.GS_ZSDT_LOG029-ISSHEN = ''.      "GS_ZSDT_LOG029-ERPDO = 'X'.      "ERP处理标志GS_ZSDT_LOG029-EDATS = SY-DATUM. "ERP处理日期GS_ZSDT_LOG029-ETIMS = SY-UZEIT. "ERP处理时间GS_ZSDT_LOG029-MESSAGE = GS_ZSDT_LOG029-MESSAGE && '取消审批'."写日志表INSERT ZSDT_LOG029 FROM GS_ZSDT_LOG029.COMMIT WORK .CLEAR  GS_ZSDT_LOG029.ENDIF.ELSE.MESSAGE '操作失败,不满足条件!' TYPE 'E'.ENDIF.ENDIF.ENDLOOP.ENDFORM ."------------SHENFORM的FORM--------------------
FORM SHENFORM .DATA  GV_ANSWER TYPE C.
CALL FUNCTION 'POPUP_TO_CONFIRM'EXPORTINGTEXT_QUESTION         = '确认审批?'DEFAULT_BUTTON              = '2'DISPLAY_CANCEL_BUTTON       = ''IMPORTINGANSWER                = GV_ANSWER.IF GV_ANSWER <> 1.RETURN.ENDIF."处理保存到LOG表
LOOP AT GT_ITAB_HEAD.IF GT_ITAB_HEAD-BOX = 'X'.GS_ITAB_HEAD = GT_ITAB_HEAD.IF GS_ITAB_HEAD-BOX = 'X' AND GS_ITAB_HEAD-ISSHEN <> 'X' AND GS_ITAB_HEAD-ISDEL <> 'X' AND GS_ITAB_HEAD-CHUKU <> 'X'.GS_ZSDT_LOG029-USRID = SY-UNAME. "用户名GS_ZSDT_LOG029-CRDAT = SY-DATUM. "日期GS_ZSDT_LOG029-ANUZT = SY-UZEIT. "时间CALL FUNCTION 'NUMBER_GET_NEXT'EXPORTINGNR_RANGE_NR                   = 'A1'OBJECT                        = 'ZSDFM020'IMPORTINGNUMBER                         = GS_ZSDT_LOG029-AUTONUMBER.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'  "去掉前导零EXPORTINGINPUT         = GS_ZSDT_LOG029-AUTONUMBERIMPORTINGOUTPUT        =  GS_ZSDT_LOG029-AUTONUMBER.MOVE-CORRESPONDING GS_ITAB_HEAD TO GS_ZSDT_LOG029."写业务数据表UPDATE ZSDT029SET  ISSHEN = 'X'WHERE TZNUM = GS_ITAB_HEAD-TZNUM.COMMIT WORK .IF SY-SUBRC = 0.DATA GV_TABIX LIKE SY-TABIX."改一下控件的内表X数据LOOP AT GT_ITAB_HEAD.IF GT_ITAB_HEAD-BOX = 'X'.GV_TABIX = SY-TABIX.ENDIF.ENDLOOP."补上当前行的XREAD TABLE GT_ITAB_HEAD INTO GS_ITAB_HEAD INDEX GV_TABIX.   "读取当前行GS_ITAB_HEAD-ISSHEN = 'X'.MODIFY GT_ITAB_HEAD FROM GS_ITAB_HEAD INDEX GV_TABIX."刷新XDATA: LS_STABLE TYPE LVC_S_STBL.LS_STABLE-ROW = 'X'.LS_STABLE-COL = 'X'.CALL METHOD G_GRID1->REFRESH_TABLE_DISPLAYEXPORTINGIS_STABLE = LS_STABLEI_SOFT_REFRESH = 'X'."传给EAIDATA GT_HEADER LIKE TABLE OF ZSDS043 WITH HEADER LINE.DATA GT_RETURN LIKE TABLE OF BAPIRET2 WITH HEADER LINE.DATA RESULT LIKE TREXS_CONNECTION_CHECK_RESULT.GT_HEADER-TZNUM = GT_ITAB_HEAD-TZNUM.GT_HEADER-USRID = SY-UNAME.GT_HEADER-CRDAT = SY-DATUM.GT_HEADER-ISSHEN = 'X'.APPEND GT_HEADER.CALL FUNCTION 'TREX_RFC_CONNECT_CHECK_LOCAL'EXPORTINGTREX_DESTINATION        = 'SAPEAI'IMPORTINGLOCAL_RESULT            = RESULTEXCEPTIONSSYSTEM_FAILURE          = 1COMMUNICATION_FAILURE   = 2AUTHORITY_NOT_AVAILABLE = 3SEND_ERROR              = 4OTHERS                  = 5.IF RESULT-ERROR_CODE <> 0."无响应MESSAGE '连接错误,请检查EAI服务是否注册成功' TYPE 'E'.ELSE.CALL FUNCTION 'ZSD_IF_FM023' DESTINATION 'SAPJCO'TABLESHEADER = GT_HEADERRETURN = GT_RETURN.IF GT_RETURN[] IS NOT INITIAL.READ TABLE GT_RETURN INDEX 1.IF GT_RETURN-TYPE <> 'S'.GS_ZSDT_LOG029-MESSAGE = ' [EAI接收失败] '.ELSEIF GT_RETURN-TYPE = 'S'.GS_ZSDT_LOG029-MESSAGE = ' [EAI接收成功] '.ENDIF.ENDIF.CLEAR:GT_HEADER,GT_RETURN,GT_HEADER[],GT_RETURN[].ENDIF.GS_ZSDT_LOG029-ISSHEN = 'X'.      "GS_ZSDT_LOG029-ERPDO = 'X'.      "ERP处理标志GS_ZSDT_LOG029-EDATS = SY-DATUM. "ERP处理日期GS_ZSDT_LOG029-ETIMS = SY-UZEIT. "ERP处理时间GS_ZSDT_LOG029-MESSAGE = GS_ZSDT_LOG029-MESSAGE && '确认审批'."写日志表INSERT ZSDT_LOG029 FROM GS_ZSDT_LOG029.COMMIT WORK .CLEAR  GS_ZSDT_LOG029.ENDIF.ELSE.MESSAGE '操作失败,不满足条件!' TYPE 'E'.ENDIF.ENDIF.ENDLOOP.ENDFORM ."-------------打印FORM-----------------
FORM PPPFORM .DATA  GV_FORMNAME TYPE RS38L_FNAM .DATA GS_CONTROL_PARAMS TYPE SSFCTRLOP.GS_CONTROL_PARAMS-NO_DIALOG = 'X'.GS_CONTROL_PARAMS-PREVIEW = 'X'.CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'EXPORTINGFORMNAME           = 'ZMMR0092'IMPORTINGFM_NAME            = GV_FORMNAME.CALL FUNCTION GV_FORMNAMEEXPORTINGCONTROL_PARAMETERS = GS_CONTROL_PARAMSUSER_SETTINGS      = SPACETABLESGT_TAB         = GT_PRINT[]EXCEPTIONSFORMATTING_ERROR   = 1INTERNAL_ERROR     = 2SEND_ERROR         = 3USER_CANCELED      = 4OTHERS             = 5.ENDFORM.


SAP OO ALV 一个屏幕上使用2个ALV相关推荐

  1. 【转载】SAP OO ALV 在自定义屏幕上添加ALV控件 一个屏幕上使用2个ALV

    终于完成了 OO ALV的学习,第一个作品. 一个屏幕上放了2个ALV控件,上面用来显示表头,下面用来显示详细的行项目. 业务背景: 在汽车的售后服务环节,汽车零件在质保期内损坏,维修产生的费用,整车 ...

  2. 如何在python中显示电脑中的图片-python如何实现多个图片显示在屏幕上?

    pygame的三个方法(屏幕上显示需要的图片) yuhu102319582018-12-16 python将多幅图片显示在一张图片上 wugui1111116282018-06-15 iOS 图片显示 ...

  3. 如何在Android主屏幕上添加热点快捷方式

    Portable Wi-Fi hotspots on your Android phone are great, because hotel Wi-Fi usually isn't, but togg ...

  4. 多屏幕切换到但屏幕,有软件无法在当前屏幕上无法显示

    长春子问: 多屏幕切换到但屏幕,有软件无法在当前屏幕上无法显示,重启也不好用.咋办? 释然答: 参看 ​​​​​​双屏切换单屏,之前在另一显示器显示的软件窗口现无法显示解决最简单的方法_Yum_Lon ...

  5. iphone屏幕上的圆圈怎么设置_iphone桌面上的圆圈怎么设置

    一.苹果手机设置"屏幕小圆点"方法:1.设置-通用-辅助功能-AssistiveTouch-打开"AssistiveTouch".2.更改图标:设置-通用-辅助 ...

  6. ABAP--如何在选择屏幕上输出ALV GRID报表

    有些客户希望某些功能性的报表在输出报表内容时,能同时看到选择屏幕上的输入参数,并 希望能反复地输入选择条件进行查询.实现这个功能的办法就是在选择屏幕上输出报表内容. 一般情况下,大家都是直接从SAP的 ...

  7. 如何在 SAP 轻松访问屏幕上以不同的布局创建不同的启动板

    目的 您将了解如何在 SAP 轻松访问屏幕上以不同的布局创建不同的启动板. 在脚本文件夹中创建此文件,用于自定义 SAP 轻松访问屏幕:SAPLSMTR_NAVIGATION.E0100.sjs // ...

  8. 授人以渔-在 SAP MM 物料显示界面上看到一个字段,如何查找哪张数据库表的哪个字段进行的存储

    在进行 SAP 项目实施时,经常遇到这种需求:用户给定一个 SAP 应用的屏幕上的某个字段,比如下图高亮的库存 1567. 我们需要开发一些围绕这个字段进行的 ABAP 报表,因此首要目标,就是搞清楚 ...

  9. 编写程序创建一个通讯录文件,在其中存入10位同学的姓名、年龄、电话号码,并在屏幕上输出第2、4、6、8、10位同学的信息

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p257 习题8 8.编写程序创建一个通讯录文件,在其中存入10位同学的姓名.年龄.电话号码,并在屏幕上 ...

最新文章

  1. Python Open Source Project List
  2. zabbix服务器没有.pid文件,PID file /run/zabbix/zabbix_server.pid not readable (yet?) after start. 报错解决...
  3. [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
  4. 扫盲:php session缓存至memcached中的方法
  5. terminated 线程_深入并发,线程相关知识全解析
  6. Go入门之——GOROOT、GOPATH、GOBIN 、Project目录
  7. 鲨鱼 抓包 oracle,抓包工具wireshark的操作使用
  8. html绝对定位怎么页面居中,html – 如何将绝对定位的元素居中?
  9. JAVA面试题(2018)
  10. 法庭智能语音系统_法庭智能语音识别系统_法庭智能语音系统解决方案_深圳市亚讯威视数字技术有限公司...
  11. mysql 并行操作_将MySQL去重操作优化到极致之三弹连发(二):多线程并行执行...
  12. python中引用javascript代码块
  13. 论文笔记:PaintsTorch: a User-Guided Anime Line Art Colorization Tool
  14. 前端初学者的痛,没学历没工作经验如何找工作?
  15. 推荐一款十分强大的富文本编辑器
  16. Keithley 2400和Keithley 2450 FET(场效应管)的输出特性测量 软件
  17. Vue中为对象添加字段
  18. 2022-2028年中国应急管理行业市场调查研究及发展前景展望报告
  19. 计算机系统结构(计算机系统结构的分类)
  20. 公司分立原公司账务要怎么处理

热门文章

  1. 【推荐】34个网站消遣的好去处
  2. MyBatis快速上手与知识总结
  3. 如何选购合适的研发管理软件
  4. ElasticSearch04--批量操作bulk--mysql数据导入ES
  5. python range转list
  6. 1300平办公室无线覆盖解决方案
  7. iapp裕v3登录界面教程
  8. 多屏互动方案 android,智慧教室多屏互动教学方案
  9. 【云原生】阿里云Kubernetes(ACK)简介
  10. Sketch设计稿预览快捷工具以及设置方法