SAP FUNCTION ALV 懒人备忘说明 james_lx
来源:互联网 发布:用什么软件做广告 编辑:程序博客网 时间:2024/05/16 16:19
今天,对使用过的ALV做一个笔记或备忘,以便以后可以快速使用它。
ALV是SAP的列表控件,所有的列表操作都是围绕它展开,只要ALV熟悉了,可以吃掉ABAP很大一片,以后接活干也快。
我倾向于在自己的ABAP程序中轻量级的使用列表控件,要轻量级的使用,就是 FUNCTION 的方式使用ALV。
这篇文章用FUNCTION方式使用ALV实现三个功能:
1、ALV的编辑和CHECKBOX
2、添加自定义的BUTTON
3、点自定义的BUTTON执行自己的代码
功能一、使用ALV显示内表数据。(其中有一个【领用数量】字段可以编辑,另一个【选择】字段是CHECKBOX)
"ALV 输出 DATA: WS_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE, WS_FIELDGROUPS_TAB TYPE SLIS_T_SP_GROUP_ALV, WS_LAYOUT TYPE SLIS_LAYOUT_ALV, WS_SORTFIELDS_TAB TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE, WS_EVENTS TYPE SLIS_T_EVENT. DATA: NN TYPE I VALUE 0. DATA: TITLE TYPE LVC_TITLE. DATA: COLOR TYPE SLIS_T_SPECIALCOL_ALV WITH HEADER LINE. DATA REFFI LIKE MARA-MEINS. DEFINE HOUT. NN = NN + 1. WS_FIELDCAT-COL_POS = NN. WS_FIELDCAT-TABNAME = 'GT_BIG'. WS_FIELDCAT-KEY = &1. WS_FIELDCAT-FIELDNAME = &2. WS_FIELDCAT-SELTEXT_M = &3. WS_FIELDCAT-DECIMALS_OUT = &4. WS_FIELDCAT-EDIT_MASK = &5. WS_FIELDCAT-REF_TABNAME = &6. WS_FIELDCAT-REF_FIELDNAME = &7. WS_FIELDCAT-CHECKBOX = &8. "搞成CHECKBOX WS_FIELDCAT-EDIT = &9. "编辑选型 APPEND WS_FIELDCAT. CLEAR WS_FIELDCAT. END-OF-DEFINITION. HOUT:'' 'EBELN' '采购订单' '' '' '' '' '' '','' 'EBELP' '采购订单项目' '' '' '' '' '' '','' 'LIFNR' '供应商' '' '' '' '' '' '','' 'NAME1' '供应商名称' '' '' '' '' '' '', '' 'MATNR' '成品物料' '' '' '' '' '' '', '' 'MAKTX1' '成品物料名称' '' '' '' '' '' '','' 'WERKS' 'BOM工厂' '' '' '' '' '' '','' 'AEDAT' 'BOM时间' '' '' '' '' '' '','' 'MENGE' '成品采购订单数量' '' '' '' '' '' '', "f1''' 'MENGE101' '直接收货' '' '' '' '' '' '', "f2''' 'MENGE103' '质检收货' '' '' '' '' '' '', "f3' '' 'MENGE1' '还可收货数量' '' '' '' '' '' '', "f=f1-f2-f3' 'X' 'IDNRK' '原材料' '' '' '' '' '' '', 'X' 'MAKTX2' '原材料名称' '' '' '' '' '' '', 'X' 'MENGEBOM' '原材料BOM汇总数量' '' '' '' '' '' '', '' 'MENGE2' '计划数量' '' '' '' '' '' '', '' 'MENGE3' '领用数量' '3' '' '' '' '' 'X', "注意有3位小数 '' 'MENGE4' '已打印数量' '' '' '' '' '' '', '' 'BOX' '选择' '' '' '' '' 'X' 'X'. WS_LAYOUT-ZEBRA = 'X'. WS_LAYOUT-GET_SELINFOS = 'X'. WS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. WS_LAYOUT-DETAIL_POPUP = 'X'.*******排序 WS_SORTFIELDS_TAB-FIELDNAME = 'EBELN'. WS_SORTFIELDS_TAB-UP = 'X'. APPEND WS_SORTFIELDS_TAB. CLEAR WS_SORTFIELDS_TAB. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IS_LAYOUT = WS_LAYOUT IT_FIELDCAT = WS_FIELDCAT[] IT_SPECIAL_GROUPS = WS_FIELDGROUPS_TAB[] IT_SORT = WS_SORTFIELDS_TAB[] I_GRID_TITLE = TITLE I_DEFAULT = 'X' I_SAVE = 'A' TABLES T_OUTTAB = GT_BIG[] EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2.
功能二、添加自定义工具条按钮
用户在点击checkbox后,选中了几条数据,他希望把它们打印出来,或者去干一些其它事情。
我们需要在工具条上添加自己的按钮,这是怎么实现的呢?
首先,ABAP的工具条是放在STATUS里的,所以再怎么简化,创建一个跟随程序的STATUS是不能避免的了。
除了在标准的工具条上添加一个我们自己的BUTTON, 标准的工具条的其它标准按钮,我们还是需要,所以我们从COPY标准的过来。
那么标准的ALV STATUS,怎么找到呢?
首先到一个标准的ALV控件的屏幕:
以标准的STATUS为源,拷贝一个副本到自己的程序中:
………
加上我们自己的一个BUTTON,英文名称随便取一个,最后一定要激和。
上面,程序以外的工作就做完了。
下面在程序的ALV函数调用部分添加代码,把我们的STUTAS显示出来.
这里,要仔细说明一下,ALV控件怎么知道使用我们自己的STUTAS呢?
原来,需要把新的STATUS作为事件传给ALV,ALV就知道在显示的时候,用我们自己的STATUS了。
我们给ALV加上一个设置STATUS的事件:
DATA GS_EVENT TYPE SLIS_ALV_EVENT.DATA GT_EVENT TYPE SLIS_T_EVENT.GS_EVENT-NAME = 'PF_STATUS_SET'.GS_EVENT-FORM = 'ALV_STATUS_SET'.APPEND GS_EVENT TO GT_EVENT. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IS_LAYOUT = WS_LAYOUT IT_FIELDCAT = WS_FIELDCAT[] IT_SPECIAL_GROUPS = WS_FIELDGROUPS_TAB[] IT_SORT = WS_SORTFIELDS_TAB[] IT_EVENTS = GT_EVENT "我们加了 I_GRID_TITLE = TITLE I_DEFAULT = 'X' I_SAVE = 'A' TABLES T_OUTTAB = GT_BIG[]
事件的方法是一个FORM,还要搞一个FORM出来,并在FORM中指定正真的GUI工具条控件的名字:
"------------加载STATUS的FORM-------------------- FORM ALV_STATUS_SET USING PT_EXTAB TYPE SLIS_T_EXTAB. CLEAR: PT_EXTAB[]. SET PF-STATUS 'STANDARD_FULLSCREEN'. ENDFORM.
到现在,执行程序,我们自定义的BOTTON稳稳的出现了。
做其它开发的同学可能要笑了,加了一个 BUTTON都这么麻烦。
是的,这就是ABAP,企业软件没有其它软件那么花哨,有用户自定义的一、两个按钮就能够满足大部分需求了。
功能三、点击自定义的按钮,实现操作。
当用户点击我们的自定义按钮时,我们希望执行一些程序代码,做我们自己想做的事情。
同样,还是在ALV FUNCTION传入参数的方式来唤醒这个功能,居然还叫回调函数,同WINDOWS编程里面一样一样的。
这里,这个I_CALLBACK_USER_COMMAND参数,不需要什么事件了,直接传入一个执行FORM的名称
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IS_LAYOUT = WS_LAYOUT IT_FIELDCAT = WS_FIELDCAT[] IT_SPECIAL_GROUPS = WS_FIELDGROUPS_TAB[] IT_SORT = WS_SORTFIELDS_TAB[] IT_EVENTS = GT_EVENT I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND' "我们加了 I_GRID_TITLE = TITLE I_DEFAULT = 'X' I_SAVE = 'A' TABLES T_OUTTAB = GT_BIG[]
我们自己写这个FORM的代码,B1就是我们的按钮,按进来后做的事情,执行另一个SAVELOG FORM ,前面那几十行代码是为了得到用户在CHECKBOX选了东西后,同步到内表的代码:
"------------ALV_USER_COMMAND的FORM--------------------FORM ALV_USER_COMMAND USING P_UCOMM LIKE SY-UCOMM P_SELFIELD TYPE SLIS_SELFIELD. "P_SELFIELD 用户鼠标选择的一个字段"应用方法将修改ALV的数据保存到内表中 DATA LR_GRID TYPE REF TO CL_GUI_ALV_GRID. DATA L_TABIX LIKE SY-TABIX. "系统参数 行号"此处代码将用户输入读入内表(这一步不可少) CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "自动刷新数据 IMPORTING E_GRID = LR_GRID. CALL METHOD LR_GRID->CHECK_CHANGED_DATA. P_SELFIELD-REFRESH = 'X'. "此处代码阻止'REUSE_ALV_GRID_DISPLAY创建新的屏幕,造成屏幕多层 P_SELFIELD-ROW_STABLE = 'X'. "保证行、列位置在自动刷新时不变 P_SELFIELD-COL_STABLE = 'X'.CASE P_UCOMM. WHEN 'B1'. PERFORM SAVELOG.ENDCASE.ENDFORM.
上面,我们实现了
功能一、ALV的编辑和CHECKBOX
功能二、添加自定义的BUTTON
功能三、点自定义的BUTTON执行自己的代码
而这些功能,没有自己创建屏幕,都写在一个程序里面简单的实现了。
程序代码全文:
*&---------------------------------------------------------------------**& Report ZTEST7*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT ZTEST7.TABLES: EKKO,EKPO.DATA: BEGIN OF GT_ITAB OCCURS 0, EBELN LIKE EKKO-EBELN, "采购订单 EBELP LIKE EKPO-EBELP, "采购订单项目 LIFNR LIKE EKKO-LIFNR, "供应商 NAME1 LIKE LFA1-NAME1, "供应商名称 MATNR LIKE EKPO-MATNR, "成品物料 MAKTX1 LIKE MAKT-MAKTX, "成品物料名称 WERKS LIKE EKPO-WERKS, "BOM工厂 AEDAT LIKE EKKO-AEDAT, "BOM时间 MENGE LIKE EKPO-MENGE, "成品采购订单数量 f1 MENGE101 LIKE EKPO-MENGE, "直接收货 f2 MENGE103 LIKE EKPO-MENGE, "质检收货 f3 MENGE1 LIKE EKPO-MENGE, "还可收货数量 f=f1-f2-f3 END OF GT_ITAB.**DATA: BEGIN OF GT_BIG OCCURS 0,** EBELN LIKE EKKO-EBELN, "采购订单* EBELP LIKE EKPO-EBELP, "采购订单项目* LIFNR LIKE EKKO-LIFNR, "供应商* NAME1 LIKE LFA1-NAME1, "供应商名称* MATNR LIKE EKPO-MATNR, "成品物料* MAKTX1 LIKE MAKT-MAKTX, "成品物料名称* WERKS LIKE EKPO-WERKS, "BOM工厂* AEDAT LIKE EKKO-AEDAT, "BOM时间* MENGE LIKE EKPO-MENGE, "原采购订单数量 f1* MENGE101 LIKE EKPO-MENGE, "直接收货 f2* MENGE103 LIKE EKPO-MENGE, "质检收货 f3** MENGE1 LIKE EKPO-MENGE, "还可收货数量 f=f1-f2-f3** IDNRK LIKE STPO-IDNRK, "原材料* MAKTX2 LIKE MAKT-MAKTX, "原材料名称* MENGEBOM LIKE EKPO-MENGE, "原材料BOM汇总数量** MENGE2 LIKE EKPO-MENGE, """"计划数量* MENGE3 LIKE EKPO-MENGE, """"领用数量* MENGE4 LIKE EKPO-MENGE, """"已打印数量* BOX TYPE C,** END OF GT_BIG.DATA GT_BIG LIKE TABLE OF ZMMS_IF_045 WITH HEADER LINE.DATA GT_BIGX LIKE TABLE OF ZMMS_IF_045 WITH HEADER LINE. DATA GT_STPO LIKE TABLE OF STPO_API02 WITH HEADER LINE. DATA: BEGIN OF GT_TEMP OCCURS 0, MATNR(18) TYPE C, "子物料 AMOUNT TYPE i, "数量 END OF GT_TEMP. DATA: BEGIN OF GT_SUM OCCURS 0, MATNR(18) TYPE C, "子物料 AMOUNT TYPE i, "数量 END OF GT_SUM.DATA STR_DATE LIKE CSAP_MBOM-DATUV.DATA GS_ZMMT_LOG027 LIKE ZMMT_LOG027."选择屏幕SELECT-OPTIONS GS_LIFNR FOR EKKO-LIFNR. "供应商SELECT-OPTIONS GS_EBELN FOR EKKO-EBELN. "采购订单号SELECT-OPTIONS GS_EBELP FOR EKPO-EBELP. "采购订单项目SELECT-OPTIONS GS_MATNR FOR EKPO-MATNR. "成品物料PARAMETERS GV_PRINT AS CHECKBOX. "已打印PARAMETERS GV_NO AS CHECKBOX. "未打印 SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_ITAB FROM EKKO AS A INNER JOIN EKPO AS P ON A~EBELN = P~EBELN WHERE A~BSART = 'PO05' AND A~FRGKE = 'N' AND A~LOEKZ = '' AND P~LOEKZ = '' AND P~ELIKZ = '' AND A~LIFNR IN GS_LIFNR AND A~EBELN IN GS_EBELN AND P~EBELP IN GS_EBELP AND P~MATNR IN GS_MATNR ."计算成品物料,可收货数量LOOP AT GT_ITAB. "-------------------------------- "计算AVAILABLE字段,计算【采购订单】【行项目】中还可以收货数! "-------------------------------- DATA GV_101 LIKE EKPO-MENGE. DATA GV_102 LIKE EKPO-MENGE. DATA GV_103 LIKE EKPO-MENGE. DATA GV_104 LIKE EKPO-MENGE. SELECT SUM( MENGE ) INTO GV_101 FROM EKBE WHERE BWART = '101' AND EBELN = GT_ITAB-EBELN AND EBELP = GT_ITAB-EBELP. "采购订单收货数 101 SELECT SUM( MENGE ) INTO GV_102 FROM EKBE WHERE BWART = '102' AND EBELN = GT_ITAB-EBELN AND EBELP = GT_ITAB-EBELP. "采购订单收货数 102 SELECT SUM( WESBS ) INTO GV_103 FROM EKBE WHERE BWART = '103' AND EBELN = GT_ITAB-EBELN AND EBELP = GT_ITAB-EBELP. "采购订单收货数 103 SELECT SUM( WESBS ) INTO GV_104 FROM EKBE WHERE BWART = '104' AND EBELN = GT_ITAB-EBELN AND EBELP = GT_ITAB-EBELP. "采购订单收货数 104 GT_ITAB-MENGE101 = GV_101 - GV_102. GT_ITAB-MENGE103 = GV_103 - GV_104. GT_ITAB-MENGE1 = GT_ITAB-MENGE - GT_ITAB-MENGE101 - GT_ITAB-MENGE103. CLEAR: GV_101,GV_102,GV_103,GV_104. "物料描述 SELECT SINGLE MAKTX INTO GT_ITAB-MAKTX1 FROM MAKT AS A WHERE A~MATNR = GT_ITAB-MATNR. "供应商描述 SELECT SINGLE NAME1 INTO GT_ITAB-NAME1 FROM LFA1 AS A WHERE A~LIFNR = GT_ITAB-LIFNR. MODIFY GT_ITAB.ENDLOOP."循环GT_ITABLOOP AT GT_ITAB. CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL' "加点 EXPORTING DATE_INTERNAL = GT_ITAB-AEDAT IMPORTING DATE_EXTERNAL = STR_DATE. "物料号补零 CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING INPUT = GT_ITAB-MATNR IMPORTING OUTPUT = GT_ITAB-MATNR. "1.查BOM组件 CALL FUNCTION 'CSAP_MAT_BOM_READ' EXPORTING MATERIAL = GT_ITAB-MATNR PLANT = GT_ITAB-WERKS BOM_USAGE = '1' VALID_FROM = STR_DATE VALID_TO = STR_DATE TABLES T_STPO = GT_STPO EXCEPTIONS ERROR = 1 OTHERS = 2. "2.合计相同物料的数量 LOOP AT GT_STPO. GT_TEMP-MATNR = GT_STPO-COMPONENT. GT_TEMP-AMOUNT = GT_STPO-COMP_QTY. APPEND GT_TEMP. ENDLOOP. SORT GT_TEMP BY MATNR. LOOP AT GT_TEMP. COLLECT GT_TEMP INTO GT_SUM. ENDLOOP. "3.填充到大表中 LOOP AT GT_SUM. MOVE-CORRESPONDING GT_ITAB TO GT_BIG. GT_BIG-IDNRK = GT_SUM-MATNR. GT_BIG-MENGEBOM = GT_SUM-AMOUNT. APPEND GT_BIG. ENDLOOP. CLEAR:GT_STPO,GT_STPO[],GT_TEMP,GT_TEMP[],GT_SUM,GT_SUM[]. CLEAR:GT_ITAB.ENDLOOP.LOOP AT GT_BIG. "物料号补零 CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING INPUT = GT_BIG-IDNRK IMPORTING OUTPUT = GT_BIG-IDNRK. "子物料描述 SELECT SINGLE MAKTX INTO GT_BIG-MAKTX2 FROM MAKT AS A WHERE A~MATNR = GT_BIG-IDNRK. "子物料号去0 CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING INPUT = GT_BIG-IDNRK IMPORTING OUTPUT = GT_BIG-IDNRK. "成品物料号去0 CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING INPUT = GT_BIG-MATNR IMPORTING OUTPUT = GT_BIG-MATNR. "供应商去0 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING INPUT = GT_BIG-LIFNR IMPORTING OUTPUT = GT_BIG-LIFNR. "填充数量(计划,领用) GT_BIG-MENGE2 = GT_BIG-MENGE1 * GT_BIG-MENGEBOM. GT_BIG-MENGE3 = GT_BIG-MENGE1 * GT_BIG-MENGEBOM. MODIFY GT_BIG. CLEAR GT_BIG.ENDLOOP."填充【打印数量】LOOP AT GT_BIG. SELECT SUM( MENGE ) INTO GT_BIG-MENGE4 FROM ZMMT_LOG027 WHERE EBELN = GT_BIG-EBELN AND EBELP = GT_BIG-EBELP AND MATNR2 = GT_BIG-IDNRK. MODIFY GT_BIG. CLEAR GT_BIG.ENDLOOP."ALV 输出 DATA: WS_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE, WS_FIELDGROUPS_TAB TYPE SLIS_T_SP_GROUP_ALV, WS_LAYOUT TYPE SLIS_LAYOUT_ALV, WS_SORTFIELDS_TAB TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE, WS_EVENTS TYPE SLIS_T_EVENT. DATA: NN TYPE I VALUE 0. DATA: TITLE TYPE LVC_TITLE. DATA: COLOR TYPE SLIS_T_SPECIALCOL_ALV WITH HEADER LINE. DATA REFFI LIKE MARA-MEINS. DEFINE HOUT. NN = NN + 1. WS_FIELDCAT-COL_POS = NN. WS_FIELDCAT-TABNAME = 'GT_BIG'. WS_FIELDCAT-KEY = &1. WS_FIELDCAT-FIELDNAME = &2. WS_FIELDCAT-SELTEXT_M = &3. WS_FIELDCAT-DECIMALS_OUT = &4. WS_FIELDCAT-EDIT_MASK = &5. WS_FIELDCAT-REF_TABNAME = &6. WS_FIELDCAT-REF_FIELDNAME = &7. WS_FIELDCAT-CHECKBOX = &8. WS_FIELDCAT-EDIT = &9. APPEND WS_FIELDCAT. CLEAR WS_FIELDCAT. END-OF-DEFINITION. HOUT:'' 'LIFNR' '供应商' '' '' '' '' '' '','' 'NAME1' '供应商名称' '' '' '' '' '' '','' 'EBELN' '采购订单' '' '' '' '' '' '','' 'EBELP' '采购订单项目' '' '' '' '' '' '', '' 'MATNR' '成品物料' '' '' '' '' '' '', '' 'MAKTX1' '成品物料名称' '' '' '' '' '' '','' 'WERKS' 'BOM工厂' '' '' '' '' '' '','' 'AEDAT' 'BOM时间' '' '' '' '' '' '','' 'MENGE' '成品采购订单数量' '' '' '' '' '' '', "f1''' 'MENGE101' '直接收货' '' '' '' '' '' '', "f2''' 'MENGE103' '质检收货' '' '' '' '' '' '', "f3' '' 'MENGE1' '还可收货数量' '' '' '' '' '' '', "f=f1-f2-f3' 'X' 'IDNRK' '原材料' '' '' '' '' '' '', 'X' 'MAKTX2' '原材料名称' '' '' '' '' '' '', 'X' 'MENGEBOM' '原材料BOM汇总数量' '' '' '' '' '' '', '' 'MENGE2' '计划数量' '' '' '' '' '' '', '' 'MENGE3' '领用数量' '3' '' '' '' '' 'X', "注意有3位小数 '' 'MENGE4' '已打印数量' '' '' '' '' '' '', '' 'BOX' '选择' '' '' '' '' 'X' 'X'. WS_LAYOUT-ZEBRA = 'X'. WS_LAYOUT-GET_SELINFOS = 'X'. WS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. WS_LAYOUT-DETAIL_POPUP = 'X'.*******排序 WS_SORTFIELDS_TAB-FIELDNAME = 'LIFNR'. WS_SORTFIELDS_TAB-UP = 'X'. APPEND WS_SORTFIELDS_TAB. CLEAR WS_SORTFIELDS_TAB.DATA GS_EVENT TYPE SLIS_ALV_EVENT.DATA GT_EVENT TYPE SLIS_T_EVENT.GS_EVENT-NAME = 'PF_STATUS_SET'.GS_EVENT-FORM = 'ALV_STATUS_SET'.APPEND GS_EVENT TO GT_EVENT. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IS_LAYOUT = WS_LAYOUT IT_FIELDCAT = WS_FIELDCAT[] IT_SPECIAL_GROUPS = WS_FIELDGROUPS_TAB[] IT_SORT = WS_SORTFIELDS_TAB[] IT_EVENTS = GT_EVENT "我们加了 I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND' "我们加了 I_GRID_TITLE = TITLE I_DEFAULT = 'X' I_SAVE = 'A' TABLES T_OUTTAB = GT_BIG[] EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2."------------SAVELOG的FORM--------------------FORM SAVELOG ."保存到LOG表LOOP AT GT_BIG. IF GT_BIG-BOX = 'X'. GS_ZMMT_LOG027-USRID = SY-UNAME. "用户名 GS_ZMMT_LOG027-ERDAT = SY-DATUM. "日期 GS_ZMMT_LOG027-ANUZT = SY-UZEIT. "时间 CALL FUNCTION 'NUMBER_GET_NEXT' EXPORTING NR_RANGE_NR = 'A1' OBJECT = 'ZSDFM020' IMPORTING NUMBER = GS_ZMMT_LOG027-AUTONUMBER. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' "去掉前导零 EXPORTING INPUT = GS_ZMMT_LOG027-AUTONUMBER IMPORTING OUTPUT = GS_ZMMT_LOG027-AUTONUMBER. GS_ZMMT_LOG027-EBELN = GT_BIG-EBELN. " GS_ZMMT_LOG027-EBELP = GT_BIG-EBELP. " GS_ZMMT_LOG027-MATNR1 = GT_BIG-MATNR. " GS_ZMMT_LOG027-MATNR2 = GT_BIG-IDNRK. " GS_ZMMT_LOG027-MENGE = GT_BIG-MENGE3. " INSERT ZMMT_LOG027 FROM GS_ZMMT_LOG027. CLEAR GS_ZMMT_LOG027. ENDIF. COMMIT WORK .ENDLOOP."调用SMARTFORM MOVE GT_BIG[] TO GT_BIGX[]. DELETE GT_BIGX WHERE BOX =''. 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' EXPORTING FORMNAME = 'ZMMR0089' IMPORTING FM_NAME = GV_FORMNAME. CALL FUNCTION GV_FORMNAME EXPORTING CONTROL_PARAMETERS = GS_CONTROL_PARAMS USER_SETTINGS = SPACE TABLES GT_BIG = GT_BIGX EXCEPTIONS FORMATTING_ERROR = 1 INTERNAL_ERROR = 2 SEND_ERROR = 3 USER_CANCELED = 4 OTHERS = 5.ENDFORM."------------ALV_USER_COMMAND的FORM--------------------FORM ALV_USER_COMMAND USING P_UCOMM LIKE SY-UCOMM P_SELFIELD TYPE SLIS_SELFIELD. "P_SELFIELD 用户鼠标选择的一个字段"应用方法将修改ALV的数据保存到内表中 DATA LR_GRID TYPE REF TO CL_GUI_ALV_GRID. DATA L_TABIX LIKE SY-TABIX. "系统参数 行号"此处代码将用户输入读入内表(这一步不可少) CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "自动刷新数据 IMPORTING E_GRID = LR_GRID. CALL METHOD LR_GRID->CHECK_CHANGED_DATA. P_SELFIELD-REFRESH = 'X'. "此处代码阻止'REUSE_ALV_GRID_DISPLAY创建新的屏幕,造成屏幕多层 P_SELFIELD-ROW_STABLE = 'X'. "保证行、列位置在自动刷新时不变 P_SELFIELD-COL_STABLE = 'X'.CASE P_UCOMM. WHEN 'B1'. PERFORM SAVELOG.ENDCASE.ENDFORM."------------加载STATUS的FORM-------------------- FORM ALV_STATUS_SET USING PT_EXTAB TYPE SLIS_T_EXTAB. CLEAR: PT_EXTAB[]. SET PF-STATUS 'STANDARD_FULLSCREEN'. ENDFORM.
- SAP FUNCTION ALV 懒人备忘说明 james_lx
- SAP ALV 详细说明
- SAP ALV 详细说明 .
- SAP ALV 详细说明
- SAP ALV 详细说明
- SAP ALV 详细说明
- SAP Function ALV 01(样式、排序、筛选、事件)
- SAP Function ALV 02(单、双击设置)
- SAP ALV usage
- SAP ALV Report
- sap icon alv 图标
- SAP ABAP ALV进阶
- Function ALV 自我总结
- FUNCTION ALV 示例模板
- ALV的一些说明
- SAP的ALV输出列表
- SAP: ALV的布局管理
- 实战SAP:【总结】ALV TREE
- 百万用户级游戏服务器架构设计(2)
- js框架为checkbox直接赋值的总结
- 深入理解Linux网络技术内幕-设备注册和初始化(一)
- Android中在Activity中加入其它的XML布局文件
- Android Studio导入github中的项目
- SAP FUNCTION ALV 懒人备忘说明 james_lx
- php 读取csv大文件问题
- 分布式消息系统 Kafka 简介
- android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context r
- less css 教程
- mac图片查看软件
- snprintf和sprintf区别分析
- 创建型:设计模式之抽象工厂模式(二)
- WebView问题集