Joshua's profile日落之后( After the Sunset )PhotosBlogListsMore Tools Help

Joshua K

Occupation
Interests
We are all souls who have spent time on this Earth in order to learn lessons and share information with our fellow beings. My MSN:
kongxiangshuai@hotmail.com
Photo 1 of 8

日落之后( After the Sunset )

做有意义的事情,时间才有意义!
12/2/2006

如何有效地提问?

[本文根据互联网上“如何有效提问?”等文章编辑改写(2006/11/23 晚)]

    技术性的论坛里,帖子大体上分两类,一类是知识共享帖,另一类则是提问帖。对于知识共享帖,越多的回复越能鼓励共享人共享的积极性,同时也表达了我们对共享人的深深谢意,毕竟他们没有得到任何来之我们的经济酬劳。而对于提问贴来说,一味的"UP","UP",再"UP"是没有任何意义的,如果没有得到回答,更多的时候不是因为没有被人看到,而往往是因为你问得不够好。想得到有效回答的人应该想想如何才能够有效地提问?

   在论坛里,当提出一个问题时,你能得到怎样的回答(是否快速?是否完备?是否能解决问题?)?这取决于挖出答案的难度,同样也取决于你提问的方法。

    首先你必须明白,好问题是激励,是厚礼,好问题可以提高我们的理解力,而且通常会暴露我们以前从没意识到或者思考过的问题。能被人称作“问得好!”,那则是回复者发自内心的大力称赞。

    我们不想掩饰对这样一些人的蔑视——他们不愿思考,或者在发问前不去完成他们应该做的事,别说解决问题,连问题本身都没有搞清楚。这种人只会谋杀时间——他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。我们称这样的人为“失败者”。

    我们在很大程度上属于志愿者和参与者,来这里希望获得愉悦和交流,也从繁忙的生活中抽出时间来解惑答疑,而且时常被提问淹没,我现在一上MSN不是和朋友聊天,而是回答来之五湖四海的问题,因为不是随时有空,通常我建议朋友们将问题发到论坛上来,这里藏龙卧虎,会更快地得到回复。很多ABAP FANS一有空就会来看看,我也不例外,在回答朋友们问题的时候,经常能让我检验自己对ABAP的知识是否扎实,看到自己熟视无睹的好比处在盲点处的东西。

    但我有三种问题不回答:
    一.别人已把我要回答的回答了的。
    二.我不会的。
    三.我看不明白的。

    我们无情的滤掉一些话题,特别是抛弃那些看起来象失败者的家伙,以便更高效的利用时间来回答胜利者的问题。

     如果你觉得我们过于傲慢的态度让你不爽,让你委屈,不妨设身处地想想。我们并没有要求你向我们屈服——事实上,我们中的大多数人最喜欢公平交易不过了,只要你付出小小努力来满足最起码的要求,我们就会欢迎你加入到我们的文化中来。但让我们帮助那些不愿意帮助自己的人是没有意义的。如果你不能接受这种“歧视”,我们建议你花点钱买书看得了,别向论坛乞求帮助。

     如果你决定向我们求助,当然不希望被视为失败者,更不愿成为失败者中的一员。立刻得到有效答案的最好方法,就是象胜利者那样提问--聪明、自信、有解决问题的思路,只是偶尔在特定的问题上需要获得一点帮助。

    在提出技术问题前,检查你有没有做到:

    1. 查看SAP系统帮助,试着自己找答案;

    2. 在论坛里检索以往有无类似的问题;

    3. 在网上搜索(个人推荐google);

    4. 向你身边精于此道的朋友打听。

    当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你的形象:你不是一个妄图不劳而获的乞讨者,不愿浪费别人的时间。如果提问者能从答案中学到东西,我们更乐于回答他的问题。

    周全的思考,准备好你的问题,草率的发问只能得到草率的回答,或者根本得不到任何答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。

    决不要自以为够资格得到答案,你没这种资格。毕竟你没有为这种服务支付任何报酬。你要自己去“挣”回一个答案,靠提出一个有内涵的,有趣的,有思维激励作用的问题——一个对论坛的积累有潜在贡献的问题,而不仅仅是被动的从他人处索要知识。记住要自己去挣回一个答案。

    另一方面,表明你愿意在找答案的过程中做点什么,是一个非常好的开端。“谁能给点提示?”、“我这张抓图里缺了什么?”以及“我应该注意什么地方?”比“请把确切的做法贴出来”更容易得到答复。因为你显得只要有人指点正确的方向,你就有完成它的能力和决心。

    人生充满疑问,有些一辈子都得不到答案,而有些只需我们聪明地、有内涵地、提出就能得到圆满答复,我们何乐而不为呢?

ABAP筑基宝典(11)-- ALV输出事例02(系统参照调用ALV输出项目事例)

该事例通过参照SAP系统中存在的DB结构将系统结构的项目输出到ALV报表中,
为了能让初学者清晰地掌握处理必要流程,该程序写得尽可能简单化,
所以很多ALV功能都未使用,参看时请注意,附件中是该程序已调通的源代码。

*==========================================================*
*  ZTEST  ALV事例程序02                                    *
*==========================================================*
*  作成者: 莫怀远                                         *
*  作成日期: 2006/11/29                                   *
*  变更履历: yyyy/mm/dd xxx                               *
*             text                                         *
*             yyyy/mm/dd xxx                               *
*             text                                         *
*  概要内容:系统参照调用ALV输出项目事例                   *
*----------------------------------------------------------*
REPORT ZTEST NO STANDARD PAGE HEADING.

*==========================================================*
* TYPE-POOLS
*==========================================================*
TYPE-POOLS SLIS.

*==========================================================*
* TABLES
*==========================================================*
TABLES: EKPO.

*==========================================================*
* 定义变量和字段组
*==========================================================*
DATA: G_REPID TYPE SY-REPID,
      GS_LAYOUT TYPE SLIS_LAYOUT_ALV.

*==========================================================*
* 定义内部表和工作区
*==========================================================*
DATA: WA_FIELD TYPE SLIS_FIELDCAT_ALV,
      IT_FIELD TYPE SLIS_T_FIELDCAT_ALV.

DATA : IT_EKPO TYPE STANDARD TABLE OF EKPO.     "系统参照

*==========================================================*
* SELETION-SCREEN
*==========================================================*
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME .
  SELECT-OPTIONS: S_AEDAT FOR  EKPO-AEDAT.
SELECTION-SCREEN END OF BLOCK BLOCK1.

*==========================================================*
* START-OF-SELECTION
*==========================================================*
START-OF-SELECTION.
  PERFORM FRM_GET_DATA.

*==========================================================*
* END-OF-SELECTION
*==========================================================*
END-OF-SELECTION.
  PERFORM FRM_OUTPUT_ALV.

*&---------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------*
*       读取数据
*----------------------------------------------------------*
FORM FRM_GET_DATA.

  SELECT *
    INTO TABLE IT_EKPO
    FROM EKPO
   WHERE AEDAT IN S_AEDAT.

  IF SY-SUBRC <> 0.
    MESSAGE S208(00) WITH 'NO GET DATA!'.
    LEAVE LIST-PROCESSING.
  ENDIF.

ENDFORM.                    " FRM_GET_DATA
*
*&---------------------------------------------------------*
*&      Form  OUT_BY_ALV
*&---------------------------------------------------------*
*       ALV样式输出
*----------------------------------------------------------*
FORM FRM_OUTPUT_ALV.

G_REPID = SY-REPID.
GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
GS_LAYOUT-WINDOW_TITLEBAR   = TEXT-102.     "TITLE
*TEXT-102(系统参照调用ALV输出项目事例)

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    I_CALLBACK_PROGRAM = G_REPID
    I_STRUCTURE_NAME   = 'EKPO'          "系统参照调用方法
*    IT_FIELDCAT        = IT_FIELD       "自定义调用方法
    IS_LAYOUT          = GS_LAYOUT       "输出式样
    I_SAVE             = 'A'             "报表可保存状态设定
  TABLES
    T_OUTTAB           = IT_EKPO.        "报表输出明细数据

ENDFORM.                    " FRM_OUTPUT_ALV

源代码下载

ABAP筑基宝典(10)-- ALV输出事例01(自定义ALV输出项目事例)

该事例将用户在程序中自定义的内表中的项目输出到ALV报表中,
为了能让初学者清晰地掌握处理必要流程,该程序写得尽可能简单化,
所以很多ALV功能都未使用,参看时请注意,附件中是该程序已调通的源代码。

*==========================================================*
*  ZTEST  ALV事例程序01                                    *
*==========================================================*
*  作成者: 莫怀远                                         *
*  作成日期: 2006/11/29                                   *
*  变更履历: yyyy/mm/dd xxx                               *
*             text                                         *
*             yyyy/mm/dd xxx                               *
*             text                                         *
*  概要内容:自定义ALV输出项目事例                         *
*----------------------------------------------------------*
REPORT ZTEST NO STANDARD PAGE HEADING.

*==========================================================*
* TYPE-POOLS
*==========================================================*
TYPE-POOLS SLIS.

*==========================================================*
* TABLES
*==========================================================*
TABLES: EKPO.

*----------------DEFINE MACRO------------------------------*
DEFINE ADD_FIELD.
  WA_FIELD-FIELDNAME = &1.
  WA_FIELD-REPTEXT_DDIC = &2.
  APPEND WA_FIELD TO IT_FIELD.
END-OF-DEFINITION.

*==========================================================*
* 定义变量和字段组
*==========================================================*
DATA: G_REPID TYPE SY-REPID,
      GS_LAYOUT TYPE SLIS_LAYOUT_ALV.

*==========================================================*
* TYPES定义
*==========================================================*
TYPES : BEGIN OF TY_EKPO,
          EBELN LIKE EKPO-EBELN,
          AEDAT LIKE EKPO-AEDAT,
          TXZ01 LIKE EKPO-TXZ01,
          MENGE LIKE EKPO-MENGE,
          MEINS LIKE EKPO-MEINS,
          NETWR LIKE EKPO-NETWR,
        END OF TY_EKPO.

*==========================================================*
* 定义内部表和工作区
*==========================================================*
DATA: WA_FIELD TYPE SLIS_FIELDCAT_ALV,
      IT_FIELD TYPE SLIS_T_FIELDCAT_ALV.

DATA : WA_EKPO TYPE TY_EKPO,
       IT_EKPO TYPE STANDARD TABLE OF TY_EKPO. "自定义用

*==========================================================*
* 抬头设置(自定义用)
ADD_FIELD 'EBELN' '订单编号'.
ADD_FIELD 'AEDAT' '订单日期'.
ADD_FIELD 'TXZ01' '物料名称'.
ADD_FIELD 'MENGE' '数    量'.
ADD_FIELD 'MEINS' '单    位'.
ADD_FIELD 'NETWR' '金    额'.

*==========================================================*
* SELETION-SCREEN
*==========================================================*
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME .
  SELECT-OPTIONS: S_AEDAT FOR  EKPO-AEDAT.
SELECTION-SCREEN END OF BLOCK BLOCK1.

*==========================================================*
* START-OF-SELECTION
*==========================================================*
START-OF-SELECTION.
  PERFORM FRM_GET_DATA.

*==========================================================*
* END-OF-SELECTION
*==========================================================*
END-OF-SELECTION.
  PERFORM FRM_OUTPUT_ALV.

*&---------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------*
*       读取数据
*----------------------------------------------------------*
FORM FRM_GET_DATA.

  SELECT EBELN
         AEDAT
         TXZ01
         MENGE
         MEINS
         NETWR
    INTO TABLE IT_EKPO
    FROM EKPO
   WHERE AEDAT IN S_AEDAT.

  IF SY-SUBRC <> 0.
    MESSAGE S208(00) WITH 'NO GET DATA!'.
    LEAVE LIST-PROCESSING.
  ENDIF.

ENDFORM.                    " FRM_GET_DATA
*
*&---------------------------------------------------------*
*&      Form  OUT_BY_ALV
*&---------------------------------------------------------*
*       ALV样式输出
*----------------------------------------------------------*
FORM FRM_OUTPUT_ALV.

G_REPID = SY-REPID.
GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
GS_LAYOUT-WINDOW_TITLEBAR   = TEXT-101.     "TITLE
*TEXT-101(自定义ALV输出项目事例)

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    I_CALLBACK_PROGRAM = G_REPID
*    I_STRUCTURE_NAME         = 'EKPO'    "系统参照调用方法
    IT_FIELDCAT        = IT_FIELD        "自定义调用方法
    IS_LAYOUT          = GS_LAYOUT       "输出式样
    I_SAVE             = 'A'             "报表可保存状态设定
  TABLES
    T_OUTTAB           = IT_EKPO.        "报表明细数据

ENDFORM.                    " FRM_OUTPUT_ALV

源代码下载

11/23/2006

感恩节快乐!

(南在南方)

    宁可不这样感人


我听着这个声音单薄干净的女声
她说,给你的爱很安静
我就想着是怎么的隐忍
就想着一个怎么的男人
就想着一个怎么的女人
就想着一个很俗的三个人的故事
就想着宁可不这样感人
就想着两个人的相爱
默不做声也是很大声
就算吵一架也是深情 
 
 
     竖起领子
 
秋意深处就是冬了,或许要有一场雪。
女人说,天冷了,把大衣领子竖起来。
男人说,你也把围巾围紧。
很平常的语言,然后在渐冷的早晨出了一团白气,挥一下手便融进了人群。
有多少人就有多少种关心,有多少爱就有爱面对。
冥冥中的情感,写在纸上很肤浅。
人住在某个房子里是有缘,其实那房子也是有缘,房子不会说话,会说的话就会说:是我收藏了你!那么人呢,两个人,一句简单的话是温存,也是感激。


------------------------------------------------------------
“有许多事,在你还不懂得珍惜之前已成往事;
有许多人,在你还来不及用心之前已成故人;
时间让我们老的太快,却聪明的太迟.........
天地间有一种东西叫雪,从天而降,落地而化;
人世间有一种东西叫爱,自吸引中诞生,升华中融洽;
朋友中有一个人是你,识于偶然,止于永久。
感恩节快乐!”

11/19/2006

ABAP筑基宝典(9)——ALV报表入门

一 .什么是ALV

      SAP提供一套ALV(Application List viewer.)的功能模块,可以对输出报表的样式作修饰,提高报表输出的可读性和功能性,对于动态报表程序是一个很有效率的工具。一般的ALV报表有一个表头,再加上表内容,并附加一些如排序,分类汇总,合计或下载为本地文件等预设功能。ALV报表显示方式基本上有2种,一种是Grid方式,一种是List方式,分别调用不同的Function来实现。

二.ALV式样

1. REUSE_ALV_GRID_DISPLAY

2. REUSE_ALV_LIST_DISPLAY

3.ALV工具栏

三.ALV函数的调用
      当完成从数据库抽取数据或上传数据,并将数据存放到内部表(IT_ABC)后,开始调用下面的ALV函数模块。

1.指定数据类型组

TYPE-POOLS: SLIS.
DATA:
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,    "ALV输出项目编辑用
WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,     "ALV输出项目编辑用
WA_LAYOUT   TYPE SLIS_LAYOUT_ALV.         "ALV样式设定用

2.调出函数模块

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
   EXPORTING
       IS_LAYOUT     = WA_LAYOUT
       IT_FIELDCAT   = IT_FIELDCAT
   TABLES
       T_OUTTAB      = IT_TAB.
   ......

 3. 函数的各项说明

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
   EXPORTING
       I_STRUCTURE_NAME                       =   已经存在SAP系统中的结构
       IS_LAYOUT                                     =   布局              
       IT_FIELDCAT                                  =   自定义
       IT_SORT                                        =   对项目的一个排序
       IT_EVENTS                                    =   标题部分
   ......

四.使用ALV的注意事项

1.在ALV中,需要注意所有添加的需要显示的列,都必须在相应的内表中有对应的字段,否则,只要使用合计或者分类汇总都会导致程序的崩溃。

2.在SAP ABAP程序中,字符串的大小写很重要,在单引号包围的字符串中,一般来说都应该用大写,特别是在调用一些系统的方法时传入字符串参数时,例如在ALV中,
Call Function ‘REUSE_ALV_GRID_DISPLAY’时,
传入的下面的两个参数:
i_callback_pf_status_set = ‘SET_PF_STATUS’
i_callback_user_command  = ‘USER_COMMAND’
就必须使用大写字符串,否则就会出现Perform_not_found的系统错误。

3.另外,传入到ALV中的列对应的字段名称也必须使用大写字母,否则数据不会显示出来。

五.相关参数说明

1.构造SLIS_FIELDCAT_ALV常用参数说明
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME        = ‘MTART‘.      “指定从内表中的输出的数据项目
WA_FIELDCAT-SELTEXT_L         = ‘品目タイプ‘.    “上面指定项目显示时的名称(长文本)
WA_FIELDCAT-SELTEXT_M        = ‘品目タイプ‘.    “上面指定项目显示时的名称(中文本)
WA_FIELDCAT-SELTEXT_S        = ‘品目タイプ‘.    “上面指定项目显示时的名称(短文本)
WA_FIELDCAT-REPTEXT_DDIC  = ‘品目タイプ‘.    “上面指定项目显示时的名称(定义文本)
WA_FIELDCAT-OUTPUTLEN        = 15.               “列的显示宽度
WA_FIELDCAT-HOTSPOT           = ‘X’.              “设置热点状态
   ......

  APPEND WA_FIELDCAT TO IT_FIELDCAT.
注意:有多少个项目列要显示就要这样向内部表IT_FIELDCAT中追加记录多少次。

2.构造SLIS_LAYOUT_ALV常用参数说明

 LAYOUT-ZEBRA                       = ‘X’.                        “斑马线样式
 LAYOUT-COLWIDTH_OPTIMIZE = 'X'.                        “列宽度自动根据内容优化
 LAYOUT-NO_COLHEAD             = ‘X’.                        “列名称不显示
 LAYOUT-NO_VLINE                  = ‘X’.                        “不表示区分用的垂直线
 LAYOUT-EDIT                          = ‘X’.                        “列值可编辑,只用于GRID
 LAYOUT-WINDOW_TITLEBAR    = ‘ALV窗体的标题’.     “一行
   ......

六.通常调用所使用参数

  CALL FUNCTION'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
      IT_FIELDCAT           = IT_FIELDCAT            "输出项目列文本信息(表头)
      IS_LAYOUT              = L_LAYOUT                "输出列表样式信息
    TABLES
      T_OUTTAB               = IT_ALVOUT               "输出的数据信息(明细)
    EXCEPTIONS
      PROGRAM_ERROR    = 1                   
      OTHERS                  = 2.    

另一种简便的方法:
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
       I_STRUCTURE_NAME         = 'TY_OUT_FILE'         "输出项目列文本信息(表头)
       IS_LAYOUT                       = L_LAYOUT                "输出列表样式信息
      TABLES
       T_OUTTAB                         = TAB_OUT_FILE        "输出的数据信息(明细)
     EXCEPTIONS
       PROGRAM_ERROR              = 1
       OTHERS                            = 2.

注:TY_OUT_FILE构造必须是数据字典中已经存在的对象。
输出项目繁多时,建议先在数据字典系统中创建构造,然后使用后一种调用方法,这样可免去对输出列表头信息的繁琐编辑处理,使代码行也缩短。