<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>moonfly2004</title>
    <description>渴望技术，喜欢Java</description>
    <link>http://moonfly2004.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>SAP 中如何寻找增强</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/228757" style="color:red;">http://moonfly2004.javaeye.com/blog/228757</a>&nbsp;
          发表时间: 2008年08月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>方法一、利用TCODE寻找增强（第二代的增强）<br />
执行一个程序（源代码后附），在选择屏幕处输入你所需要增强的程序TCODE，执行後，就会出现一个列表，那里就有关于如何增强这个的绝大部分SMOD增强。</p>
<p>点击进去，自己手动寻找需要的增强。</p>
<p>这是第二代增强</p>
<p>&nbsp;</p>
<p>方法二、利用系统函数寻找</p>
<p>MODX_FUNCTION_ACTIVE_CHECK</p>
<p>在
这个FUNCTION的代码最后添加一个断点。执行需要增强的TCODE，如果有增强，就会自动跳入DEBUG界面。在DEBUG界面，查看f_tab字
段，这里面所显示的Smod就是关于这个TCODE所有的增强项目的列表。这些增强都是属于EXIT_XXXXXX_XXX这种形式。</p>
<p>至于如何查看这个增强是属于哪个SMOD，可以自己查阅 MODSAP这个表（SAP Enhancements）.</p>
<p>这是第二代增强。</p>
<p>还有一些FUNCTION供参考：</p>
<p>[1].DYNP_VALUES_READ</p>
<p>[2]. MODX_ALL_ACTIVE_MENUENTRIES(菜单增强)</p>
<p>[3].MODX_FUNCTION_ACTIVE_CHECK(出口函数增强)</p>
<p>[4].MODX_MENUENTRY_ACTIVE_CHECK(菜单增强)</p>
<p>[5].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强)</p>
<p>这些的使用方法和上述的一样，可以针对各种情况寻找增强。</p>
<p>&nbsp;</p>
<p>方法三、从程序代码中找<br />
在需要增强的事务里面，打开SYSTEM&mdash;&mdash;》status，双击进入PROGRAM，查看所有的subroutines， 重点观察所有形似 userexit_******* 这种，由描述来确定合适的需要增强的FORM。这里是第一代的增强。</p>
<p>&nbsp;</p>
<p>方法四、针对BADI的增强<br />
转摘自网上</p>
<p>1、badi对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中。</p>
<p>2、sap程序都会调用cl_exithandler=&gt;get_instance来判断对象是否存在，并返回实例；其实get_instance就是对上述几个表和他们的视图（V_EXT_IMP 和 V_EXT_ACT）进行查询和搜索。</p>
<p>3、基于这个机理，我查用ST05来监控一个TCODE来跟踪，然后选择查找有关上述几个表和视图的操作，就可获得相关BADI。</p>
<p>&nbsp;4、se18 查找接口，se19 实现接口就可以实现用户增强。</p>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/228757#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 16 Aug 2008 19:55:21 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/228757</link>
        <guid>http://moonfly2004.javaeye.com/blog/228757</guid>
      </item>
      <item>
        <title>SAP-R/3出口（增强）</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/228514" style="color:red;">http://moonfly2004.javaeye.com/blog/228514</a>&nbsp;
          发表时间: 2008年08月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-family: 宋体;">首先来讲解一下什么是出口，顾名思义，就是一段程序执行到最后必经的一段程序。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">为什么会有出口呢？因为正常的业务系统不能满足实际需求，这时可以在出口中增加一些功能，来达到要求，这也就是为什么它还叫增强。我感觉它跟给操作系统打补丁差不多。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">在</span>
<span lang="EN-US"><span style="font-family: Times New Roman;"><a href="javascript:;" onclick="javascript:tagshow(event, 'Sap');" target="_self"><span style="text-decoration: underline;"><strong>Sap</strong>
</span>
</a>
</span>
</span>
<span style="font-family: 宋体;">中出口就是标准程序最后要调用的一个函数或者功能模块，这个函数或功能模块的输入已经由</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">Sap</span>
</span>
<span style="font-family: 宋体;">定义好。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-family: Times New Roman;">&nbsp;</span>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span><span style="font-family: Times New Roman;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</span>
</span>
<span style="font-family: 宋体;">自己写的</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">SAP</span>
</span>
<span style="font-family: 宋体;">出口程序在系统升级的时候会被保留，而如果更改标准程序在</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">SAP</span>
</span>
<span style="font-family: 宋体;">系统升级的时候会被覆盖。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-family: Times New Roman;">&nbsp;</span>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span><span style="font-family: Times New Roman;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</span>
</span>
<span style="font-family: 宋体;">下面介绍一下什么时候需要使用出口以及出口的种类：</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-family: Times New Roman;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
1</span>
</span>
<span style="font-family: 宋体;">：在业务检查时，比如在某个工厂发货，可以设定在某个库位的出货只能使用某种移动类型。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-family: Times New Roman;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
2</span>
</span>
<span style="font-family: 宋体;">：在需要界面增强时，比如用户对某个字段要求大写，但是最终用户不按规范操作，这也可以在出口中自动转换，有些模块甚至能自定义<a href="javascript:;" onclick="javascript:tagshow(event, '%CA%FD%BE%DD%BF%E2');" target="_self"><span style="text-decoration: underline;"><strong>数据库</strong>
</span>
</a>
字段，并且可以在出口中增加字段输入。还有的模块能对输入数据检查，甚至实现自动替代等功能。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-family: Times New Roman;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
3</span>
</span>
<span style="font-family: 宋体;">：有不规则业务时，比如按某种条件定价，可以设定从自己定义的表中按某种条件取值</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-family: Times New Roman;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
4</span>
</span>
<span style="font-family: 宋体;">：搜索帮助的出口，可以对</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">Sap</span>
</span>
<span style="font-family: 宋体;">标准的搜索帮助做权限控制。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">等等。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN-US"><span style="font-family: Times New Roman;">SAP</span>
</span>
<span style="font-family: 宋体;">有四种基本用户出口的类型：</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN-US"><span style="font-family: Times New Roman;">1.</span>
</span>
<span style="font-family: 宋体;">菜单出口</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">-Menu Exits</span>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-family: Times New Roman;"><span>&nbsp;</span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span>&nbsp;</span>
</span>
</span>
<span style="font-family: 宋体;">定义自己的菜单</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN-US"><span style="font-family: Times New Roman;">2.</span>
</span>
<span style="font-family: 宋体;">屏幕出口</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">-Screen Exits</span>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN-US"><span><span style="font-family: Times New Roman;">&nbsp;</span>
</span>
</span>
<span style="font-family: 宋体;">定义自己的屏幕</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN-US"><span style="font-family: Times New Roman;">3.</span>
</span>
<span style="font-family: 宋体;">功能模块出口</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">-Function Module Exits</span>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN-US"><span><span style="font-family: Times New Roman;">&nbsp;</span>
</span>
</span>
<span style="font-family: 宋体;">在</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">SAP</span>
</span>
<span style="font-family: 宋体;">应用程序中添加功能</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span lang="EN-US"><span style="font-family: Times New Roman;">4.</span>
</span>
<span style="font-family: 宋体;">关键字出口</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">-Keyword Exits</span>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: 11.25pt;"><span style="font-family: 宋体;">在</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">ABAP/4</span>
</span>
<span style="font-family: 宋体;">字典中的关键字数据元素添加文档。结果是你在使用这些数据元素的字段处按</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">F1</span>
</span>
<span style="font-family: 宋体;">后会出现你自定义的说明文档</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-family: Times New Roman;">&nbsp;</span>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span><span style="font-family: Times New Roman;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</span>
</span>
<span style="font-family: 宋体;">因为出口都是被</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">Sap</span>
</span>
<span style="font-family: 宋体;">预先定义好的，那么怎么寻找自己需要的出口呢？</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-family: Times New Roman;">1</span>
</span>
<span style="font-family: 宋体;">：可以通过配置文档的帮助和</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">SAP library</span>
</span>
<span style="font-family: 宋体;">寻找业务系统的出口，</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">sap library</span>
</span>
<span style="font-family: 宋体;">在&lsquo;</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">implementation guide</span>
</span>
<span style="font-family: 宋体;">&rsquo;中寻找出口，在配置功能执行按钮左边一般都有一个说明文档，描述相关的出口。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-family: Times New Roman;">&nbsp;</span>
</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-family: Times New Roman;">2</span>
</span>
<span style="font-family: 宋体;">：为了方便我们把所有的出口名称及其描述列在文章的后面。</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">下面具体介绍怎样写出口程序：</span>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">为了对出口程序的修改进行管理，</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">sap</span>
</span>
<span style="font-family: 宋体;">提供了专门用来管理出口程序的事务，事务代码是</span>
<span lang="EN-US"><span style="font-family: Times New Roman;">CMOD</span>
</span>
<span style="font-family: 宋体;">。</span>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/228514#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 15 Aug 2008 20:53:17 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/228514</link>
        <guid>http://moonfly2004.javaeye.com/blog/228514</guid>
      </item>
      <item>
        <title>T4中树的例子代码</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/209733" style="color:red;">http://moonfly2004.javaeye.com/blog/209733</a>&nbsp;
          发表时间: 2008年06月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>T4中树的例子代码&nbsp;&nbsp; CstMtrlHeadTree.java是使用的例子。具体的详细信息带有时间后在详细的写一个文档。</p>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/209733#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 30 Jun 2008 13:21:56 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/209733</link>
        <guid>http://moonfly2004.javaeye.com/blog/209733</guid>
      </item>
      <item>
        <title>两内表关联删除操作</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/204663" style="color:red;">http://moonfly2004.javaeye.com/blog/204663</a>&nbsp;
          发表时间: 2008年06月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div id="msgcns!9BBA60FE7660AD3D!530">
<p>有两个内部表：IT_TAB1（假设N条记录）,I T_TAB2（假设M条记录）。<br />
I T_TAB1的结构如下<br />
ID &nbsp;BUKRS&nbsp;&nbsp;BELNR&nbsp;&nbsp;DMBTR<br />
001&nbsp;A001&nbsp;&nbsp;1000000010&nbsp;10000<br />
002&nbsp;A001&nbsp;&nbsp;1000000020&nbsp;20000<br />
&hellip;&hellip;&nbsp;&hellip;&hellip;&nbsp;&hellip;&hellip;&nbsp;&hellip;&hellip;<br />
I T_TAB2的结构如下<br />
BUKRS&nbsp;&nbsp;BELNR<br />
A001&nbsp;&nbsp;1000000010<br />
A001&nbsp;&nbsp;1000000050<br />
&hellip;&hellip;&nbsp;&hellip;&hellip;<br />
要求是根据内部表ITAB2对内部表ITAB1进行删除处理，ITAB1中BELNR项与ITAB2中BELNR项相同的全部删除掉，该事例中所得结果应为：<br />
I T_TAB1的结构如下<br />
ID &nbsp;BUKRS&nbsp;&nbsp;BELNR&nbsp;&nbsp;DMBTR<br />
002&nbsp;A001&nbsp;&nbsp;1000000020&nbsp;20000<br />
&hellip;&hellip;&nbsp;&hellip;&hellip;&nbsp;&hellip;&hellip;&nbsp;&hellip;&hellip;</p>
<p>方法一：循环套循环<br />
外层循环IT_TAB2，里层循环IT_TAB1。<br />
此种方法被一般ABAP开发规约所禁止。<br />
三种方法中，执行时间排第二。<br />
<img src="http://www.sapsh.com/bbsxp/images/upfile/2006-3/200632591610.jpg" alt="" />
 </p>
<p>方法二：利用RANGE TABLE<br />
将IT_TAB2导入RANGE TABLE，<br />
在条件中使用IN语句来删除IT_TAB1.<br />
此种方法，由于RANGE TABLE的做成使用了一回循环，<br />
再加上用IN 语句删除，相当于使用了两次循环，所以速度比较慢，<br />
三种方法中，执行时间排第三。<br />
另外此法只适用于比较项目（例如IT_TAB2-BELNR）只有一项时，<br />
而且，作为比较项目的该项值被反复使用时(假设还有内部表IT_TAB3,IT_TAB4&hellip;都需要根据IT_TAB2中的BELNR项来作相应处理时)，<br />
采用该法，才更显效率。<br />
如果比较项目为复数项时，请使用其他两种方法。<br />
<img src="http://www.sapsh.com/bbsxp/images/upfile/2006-3/200632591622.jpg" alt="" />
 </p>
<p>方法三：并行算法<br />
使用该算法，要事先对两个内部表进行排序，<br />
然后两层循环嵌套，<br />
外层是IT_TAB2，里层是IT_TAB1。<br />
与方法一不同的是，<br />
方法一的执行次数为（N * M），方法三的执行次数为( N + M )。<br />
所以该方法在三种方法中，执行时间排第一。<br />
但使用该算法有一个条件限制，<br />
就是IT_TAB1中的记录一定要在IT_TAB2所包含的记录范围内。<br />
嵌套循环时推荐尽可能使用该平行算法。<br />
该法缺点是：1．使用限制条件要判断准确。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;2．代码可读性差。</p>
<div>&nbsp; <img src="http://www.sapsh.com/bbsxp/images/upfile/2006-3/200632591713.jpg" alt="" />
 </div>
<div>
<pre>*&amp;---------------------------------------------------------------------*
*&amp; 作成者　　 : KONGXIANGSHUAI
*&amp; 作成日　　 : 2006/03/20
*&amp; 機能概要   :
*&amp;     内部テーブルIT_TAB2により、内部テーブルIT_TAB1から
*&amp;     同じのレコードを削除する例。
*&amp;---------------------------------------------------------------------*
REPORT ZZTEST4 NO STANDARD PAGE HEADING.

*----------------------------------------------------------------------*
*    構造宣言
*----------------------------------------------------------------------*
*　内部テーブル１
TYPES: BEGIN OF T_TAB1,
         ID    TYPE I,             &quot;番号
         BUKRS TYPE BSID-BUKRS,    &quot;会社コード
         BELNR TYPE BSID-BELNR,    &quot;会計伝票番号
         DMBTR TYPE BSID-DMBTR,    &quot;国内通貨額
       END OF T_TAB1.

*　内部テーブル２
TYPES: BEGIN OF T_TAB2,
         BUKRS TYPE BSID-BUKRS,    &quot;会社コード
         BELNR TYPE BSID-BELNR,    &quot;会計伝票番号
       END OF T_TAB2.

*----------------------------------------------------------------------*
*    内部テーブルと項目列宣言
*----------------------------------------------------------------------*
*　内部テーブル１
DATA : IT_TAB1 TYPE STANDARD TABLE OF T_TAB1 INITIAL SIZE 0,
       WA_TAB1 TYPE T_TAB1.

*　内部テーブル２
DATA : IT_TAB2 TYPE STANDARD TABLE OF T_TAB2 INITIAL SIZE 0,
       WA_TAB2 TYPE T_TAB2.

*　方法１用
DATA : IT_TAB11 TYPE STANDARD TABLE OF T_TAB1 INITIAL SIZE 0,
       WA_TAB11 TYPE T_TAB1.

*　方法２用
DATA : IT_TAB12 TYPE STANDARD TABLE OF T_TAB1 INITIAL SIZE 0,
       WA_TAB12 TYPE T_TAB1.

*　方法３用
DATA : IT_TAB13 TYPE STANDARD TABLE OF T_TAB1 INITIAL SIZE 0,
       WA_TAB13 TYPE T_TAB1.

* RANGES TABLE
RANGES IT_BELNR FOR BSID-BELNR.
DATA WA_BELNR LIKE IT_BELNR.

*----------------------------------------------------------------------*
*    変数宣言
*----------------------------------------------------------------------*
DATA :
  V_T1    TYPE I,     &quot;RUNTIME1
  V_T2    TYPE I,     &quot;RUNTIME2
  V_TIME1 TYPE I,     &quot;方法１RUNTIME
  V_TIME2 TYPE I,     &quot;方法２RUNTIME
  V_TIME3 TYPE I.     &quot;方法３RUNTIME

*----------------------------------------------------------------------*
*    START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.

* テストデータの設定
  PERFORM FRM_SET_DATA.

* テスト処理
  PERFORM FRM_EDIT_DATA.

* 結果の出力
  PERFORM FRM_OUTPUT_DATA.

*&amp;---------------------------------------------------------------------*
*&amp;      Form  FRM_SET_DATA
*&amp;---------------------------------------------------------------------*
*       テストデータの設定
*----------------------------------------------------------------------*
*       --&gt;  なし
*       &lt;--  なし
*----------------------------------------------------------------------*
FORM FRM_SET_DATA.

* 内部テーブル１のデータの設定
  CLEAR WA_TAB1.
  WA_TAB1-ID = 1.
  WA_TAB1-BUKRS = 'A001'.
  WA_TAB1-BELNR = '1000000010'.
  WA_TAB1-DMBTR = 10000.
  APPEND WA_TAB1 TO IT_TAB1.

  CLEAR WA_TAB1.
  WA_TAB1-ID = 2.
  WA_TAB1-BUKRS = 'A001'.
  WA_TAB1-BELNR = '1000000020'.
  WA_TAB1-DMBTR = 20000.
  APPEND WA_TAB1 TO IT_TAB1.

  CLEAR WA_TAB1.
  WA_TAB1-ID = 3.
  WA_TAB1-BUKRS = 'A001'.
  WA_TAB1-BELNR = '1000000030'.
  WA_TAB1-DMBTR = 30000.
  APPEND WA_TAB1 TO IT_TAB1.

  CLEAR WA_TAB1.
  WA_TAB1-ID = 4.
  WA_TAB1-BUKRS = 'A001'.
  WA_TAB1-BELNR = '1000000040'.
  WA_TAB1-DMBTR = 40000.
  APPEND WA_TAB1 TO IT_TAB1.

  CLEAR WA_TAB1.
  WA_TAB1-ID = 5.
  WA_TAB1-BUKRS = 'A001'.
  WA_TAB1-BELNR = '1000000050'.
  WA_TAB1-DMBTR = 10000.
  APPEND WA_TAB1 TO IT_TAB1.

  CLEAR WA_TAB1.
  WA_TAB1-ID = 6.
  WA_TAB1-BUKRS = 'A001'.
  WA_TAB1-BELNR = '1000000060'.
  WA_TAB1-DMBTR = 20000.
  APPEND WA_TAB1 TO IT_TAB1.

  CLEAR WA_TAB1.
  WA_TAB1-ID = 7.
  WA_TAB1-BUKRS = 'A001'.
  WA_TAB1-BELNR = '1000000070'.
  WA_TAB1-DMBTR = 30000.
  APPEND WA_TAB1 TO IT_TAB1.

  CLEAR WA_TAB1.
  WA_TAB1-ID = 8.
  WA_TAB1-BUKRS = 'A001'.
  WA_TAB1-BELNR = '1000000080'.
  WA_TAB1-DMBTR = 40000.
  APPEND WA_TAB1 TO IT_TAB1.

* 内部テーブル２のデータの設定
  CLEAR WA_TAB2.
  WA_TAB2-BUKRS = 'A001'.
  WA_TAB2-BELNR = '1000000010'.
  APPEND WA_TAB2 TO IT_TAB2.

  CLEAR WA_TAB2.
  WA_TAB2-BUKRS = 'A001'.
  WA_TAB2-BELNR = '1000000030'.
  APPEND WA_TAB2 TO IT_TAB2.

ENDFORM.                    &quot;FRM_SET_DATA

*&amp;---------------------------------------------------------------------*
*&amp;      Form  FRM_EDIT_DATA
*&amp;---------------------------------------------------------------------*
*         　テスト処理
*----------------------------------------------------------------------*
*       --&gt;  なし
*       &lt;--  なし
*----------------------------------------------------------------------*
FORM FRM_EDIT_DATA.

  SORT IT_TAB1 ASCENDING BY BELNR.
  SORT IT_TAB2 ASCENDING BY BELNR.

* 方法１
  IT_TAB11 = IT_TAB1.
  GET RUN TIME FIELD V_T1.            &quot;実行時間比較用
  SORT IT_TAB11 ASCENDING BY BELNR.
  LOOP AT IT_TAB2 INTO WA_TAB2.
    LOOP AT IT_TAB11 INTO WA_TAB11 WHERE BELNR = WA_TAB2-BELNR.
      DELETE TABLE IT_TAB11 FROM WA_TAB11.
    ENDLOOP.
  ENDLOOP.
  GET RUN TIME FIELD V_T2.            &quot;実行時間比較用
  V_TIME1 = V_T2 - V_T1.              &quot;実行時間

* 方法２
  IT_TAB12 = IT_TAB1.
  GET RUN TIME FIELD V_T1.            &quot;実行時間比較用
  SORT IT_TAB12 ASCENDING BY BELNR.
  LOOP AT IT_TAB2 INTO WA_TAB2.
    WA_BELNR-LOW    = WA_TAB2-BELNR.
    WA_BELNR-SIGN   = 'I'.
    WA_BELNR-OPTION = 'EQ'.
    APPEND WA_BELNR TO IT_BELNR.
  ENDLOOP.
  DELETE IT_TAB12 WHERE BELNR IN IT_BELNR.
  GET RUN TIME FIELD V_T2.            &quot;実行時間比較用
  V_TIME2 = V_T2 - V_T1.              &quot;実行時間

* 方法３
  IT_TAB13 = IT_TAB1.
  SORT IT_TAB13 ASCENDING BY BELNR.
  GET RUN TIME FIELD V_T1.            &quot;実行時間比較用
  DATA V_I TYPE I.
  V_I = 1.
  LOOP AT IT_TAB2 INTO WA_TAB2.
    LOOP AT IT_TAB13 INTO WA_TAB13 FROM V_I.
      IF WA_TAB13-BELNR = WA_TAB2-BELNR.
        DELETE TABLE IT_TAB13 FROM WA_TAB13.
        V_I = V_I + 1.
      ELSE.
        EXIT.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
  GET RUN TIME FIELD V_T2.            &quot;実行時間比較用
  V_TIME3 = V_T2 - V_T1.              &quot;実行時間

ENDFORM.                    &quot;FRM_EDIT_DATA

*&amp;---------------------------------------------------------------------*
*&amp;      Form  FRM_OUTPUT_DATA
*&amp;---------------------------------------------------------------------*
*           結果の出力
*----------------------------------------------------------------------*
*       --&gt;  なし
*       &lt;--  なし
*----------------------------------------------------------------------*
FORM FRM_OUTPUT_DATA.

  WRITE '内部テーブル１'.
  LOOP AT IT_TAB1 INTO WA_TAB1.
    WRITE : / WA_TAB1-ID,
              WA_TAB1-BUKRS,
              WA_TAB1-BELNR,
              WA_TAB1-DMBTR.
  ENDLOOP.
  ULINE.
  WRITE '内部テーブル２'.
  LOOP AT IT_TAB2 INTO WA_TAB2.
    WRITE : / WA_TAB2-BUKRS,
              WA_TAB2-BELNR.
  ENDLOOP.
  ULINE.
  WRITE : '方法１の結果',
          'RUNTIME:',
          V_TIME1.

  LOOP AT IT_TAB11 INTO WA_TAB11.
    WRITE : / WA_TAB11-ID,
              WA_TAB11-BUKRS,
              WA_TAB11-BELNR,
              WA_TAB11-DMBTR.
  ENDLOOP.
  ULINE.
  WRITE : '方法２の結果',
          'RUNTIME:',
          V_TIME2.

  LOOP AT IT_TAB12 INTO WA_TAB12.
    WRITE : / WA_TAB12-ID,
              WA_TAB12-BUKRS,
              WA_TAB12-BELNR,
              WA_TAB12-DMBTR.
  ENDLOOP.
  ULINE.
  WRITE : '方法３の結果',
          'RUNTIME:',
          V_TIME3.

  LOOP AT IT_TAB13 INTO WA_TAB13.
    WRITE : / WA_TAB13-ID,
              WA_TAB13-BUKRS,
              WA_TAB13-BELNR,
              WA_TAB13-DMBTR.
  ENDLOOP.

ENDFORM.                    &quot;FRM_OUTPUT_DATA
</pre>
</div>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/204663#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Jun 2008 13:23:29 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/204663</link>
        <guid>http://moonfly2004.javaeye.com/blog/204663</guid>
      </item>
      <item>
        <title>BAPI_GOODSMVT_CREATE --mb01,mb1A</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/204661" style="color:red;">http://moonfly2004.javaeye.com/blog/204661</a>&nbsp;
          发表时间: 2008年06月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>
    * BAPI TO Upload Inventory Data<br />
*<br />
* GMCODE Table T158G - 01 - MB01 - Goods Receipts for Purchase Order<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 02 - MB31 - Goods Receipts for Prod Order<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 03 - MB1A - Goods Issue<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 04 - MB1B - Transfer Posting<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 05 - MB1C - Enter Other Goods Receipt<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 06 - MB11<br />
*<br />
* Domain: KZBEW - Movement Indicator<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Goods movement w/o reference<br />
*&nbsp; B - Goods movement for purchase order<br />
*&nbsp; F - Goods movement for production order<br />
*&nbsp; L - Goods movement for delivery note<br />
*&nbsp; K - Goods movement for kanban requirement (WM - internal only)<br />
*&nbsp; O - Subsequent adjustment of &quot;material-provided&quot; consumption<br />
*&nbsp; W - Subsequent adjustment of proportion/product unit material<br />
*<br />
report zbapi_goodsmovement.<br />
<br />
parameters: p-file like rlgrap-filename default<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'c:\sapdata\TEST.txt'.<br />
parameters: e-file like rlgrap-filename default<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'c:\sapdata\gdsmvterror.txt'.<br />
<br />
parameters: xpost like sy-datum default sy-datum.<br />
<br />
data: begin of gmhead.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include structure bapi2017_gm_head_01.<br />
data: end of gmhead.<br />
<br />
data: begin of gmcode.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include structure bapi2017_gm_code.<br />
data: end of gmcode.<br />
<br />
data: begin of mthead.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include structure bapi2017_gm_head_ret.<br />
data: end of mthead.<br />
<br />
data: begin of itab occurs 100.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include structure bapi2017_gm_item_create.<br />
data: end of itab.<br />
<br />
data: begin of errmsg occurs 10.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include structure bapiret2.<br />
data: end of errmsg.<br />
<br />
data: wmenge like iseg-menge,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errflag.<br />
<br />
data: begin of pcitab occurs 100,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext_doc(10),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;External Document Number<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mvt_type(3),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Movement Type<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc_date(8),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Document Date<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post_date(8),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Posting Date<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plant(4),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Plant<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; material(18),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Material Number<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; qty(13),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Quantity<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recv_loc(4),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Receiving Location<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; issue_loc(4),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Issuing Location<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pur_doc(10),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Purchase Document No<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; po_item(3),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Purchase Document Item No<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; del_no(10),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Delivery Purchase Order Number<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; del_item(3),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Delivery Item<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prod_doc(10),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Production Document No<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scrap_reason(10),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Scrap Reason<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; upd_sta(1),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Update Status<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end of pcitab.<br />
<br />
call function 'WS_UPLOAD'<br />
&nbsp; exporting<br />
&nbsp;&nbsp;&nbsp; filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = p-file<br />
&nbsp;&nbsp;&nbsp; filetype&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 'DAT'<br />
* IMPORTING<br />
*&nbsp;&nbsp; FILELENGTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br />
&nbsp; tables<br />
&nbsp;&nbsp;&nbsp; data_tab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = pcitab<br />
* EXCEPTIONS<br />
*&nbsp;&nbsp; FILE_OPEN_ERROR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 1<br />
*&nbsp;&nbsp; FILE_READ_ERROR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 2<br />
*&nbsp;&nbsp; NO_BATCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3<br />
*&nbsp;&nbsp; GUI_REFUSE_FILETRANSFER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 4<br />
*&nbsp;&nbsp; INVALID_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 5<br />
*&nbsp;&nbsp; OTHERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 6<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .<br />
if sy-subrc &lt;&gt; 0.<br />
&nbsp; message id sy-msgid type sy-msgty number sy-msgno<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.<br />
&nbsp; exit.<br />
endif.<br />
<br />
gmhead-pstng_date = sy-datum.<br />
gmhead-doc_date = sy-datum.<br />
gmhead-pr_uname = sy-uname.<br />
gmcode-gm_code = '01'.&nbsp;&nbsp; &quot;01 - MB01 - Goods Receipts for Purchase Order<br />
<br />
loop at pcitab.<br />
&nbsp; itab-move_type&nbsp; = pcitab-mvt_type.<br />
&nbsp; itab-mvt_ind&nbsp;&nbsp;&nbsp; = 'B'.<br />
&nbsp; itab-plant&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = pcitab-plant.<br />
&nbsp; itab-material&nbsp;&nbsp; = pcitab-material.<br />
&nbsp; itab-entry_qnt&nbsp; = pcitab-qty.<br />
&nbsp; itab-move_stloc = pcitab-recv_loc.<br />
&nbsp; itab-stge_loc&nbsp;&nbsp; = pcitab-issue_loc.<br />
&nbsp; itab-po_number&nbsp; = pcitab-pur_doc.<br />
&nbsp; itab-po_item&nbsp;&nbsp;&nbsp; = pcitab-po_item.<br />
&nbsp; concatenate pcitab-del_no pcitab-del_item into itab-item_text.<br />
&nbsp; itab-move_reas&nbsp; = pcitab-scrap_reason.<br />
<br />
&nbsp; append itab.<br />
endloop.<br />
<br />
loop at itab.<br />
&nbsp; write:/ itab-material, itab-plant, itab-stge_loc,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itab-move_type, itab-entry_qnt, itab-entry_uom,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itab-entry_uom_iso, itab-po_number, itab-po_item,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcitab-ext_doc.<br />
endloop.<br />
<br />
call function '<span class="hilite1">BAPI_GOODSMVT_CREATE</span>
'<br />
&nbsp; exporting<br />
&nbsp;&nbsp;&nbsp; goodsmvt_header&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = gmhead<br />
&nbsp;&nbsp;&nbsp; goodsmvt_code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = gmcode<br />
*&nbsp;&nbsp; TESTRUN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = ' '<br />
* IMPORTING<br />
&nbsp;&nbsp;&nbsp; goodsmvt_headret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = mthead<br />
*&nbsp;&nbsp; MATERIALDOCUMENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br />
*&nbsp;&nbsp; MATDOCUMENTYEAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br />
&nbsp; tables<br />
&nbsp;&nbsp;&nbsp; goodsmvt_item&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = itab<br />
*&nbsp;&nbsp; GOODSMVT_SERIALNUMBER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br />
&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = errmsg<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .<br />
clear errflag.<br />
loop at errmsg.<br />
&nbsp; if errmsg-type eq 'E'.<br />
&nbsp;&nbsp;&nbsp; write:/'Error in function', errmsg-message.<br />
&nbsp;&nbsp;&nbsp; errflag = 'X'.<br />
&nbsp; else.<br />
&nbsp;&nbsp;&nbsp; write:/ errmsg-message.<br />
&nbsp; endif.<br />
endloop.<br />
<br />
if errflag is initial.<br />
&nbsp; commit work and wait.<br />
&nbsp; if sy-subrc ne 0.<br />
&nbsp;&nbsp;&nbsp; write:/ 'Error in updating'.<br />
&nbsp;&nbsp;&nbsp; exit.<br />
&nbsp; else.<br />
&nbsp;&nbsp;&nbsp; write:/ mthead-mat_doc, mthead-doc_year.<br />
&nbsp;&nbsp;&nbsp; perform upd_sta.<br />
&nbsp; endif.<br />
endif.<br />
<br />
*---------------------------------------------------------------------*<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FORM UPD_STA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br />
*---------------------------------------------------------------------*<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ........&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br />
*---------------------------------------------------------------------*<br />
form upd_sta.<br />
&nbsp; loop at pcitab.<br />
&nbsp;&nbsp;&nbsp; pcitab-upd_sta = 'X'.<br />
&nbsp;&nbsp;&nbsp; modify pcitab.<br />
&nbsp; endloop.<br />
<br />
&nbsp; call function 'WS_DOWNLOAD'<br />
&nbsp;&nbsp;&nbsp; exporting<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = p-file<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filetype&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 'DAT'<br />
* IMPORTING<br />
*&nbsp;&nbsp; FILELENGTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =<br />
&nbsp;&nbsp;&nbsp; tables<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data_tab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = pcitab<br />
* EXCEPTIONS<br />
*&nbsp;&nbsp; FILE_OPEN_ERROR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 1<br />
*&nbsp;&nbsp; FILE_READ_ERROR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 2<br />
*&nbsp;&nbsp; NO_BATCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3<br />
*&nbsp;&nbsp; GUI_REFUSE_FILETRANSFER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 4<br />
*&nbsp;&nbsp; INVALID_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 5<br />
*&nbsp;&nbsp; OTHERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 6<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .<br />
<br />
endform.<br />
<br />
*--- End of Program</p>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/204661#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Jun 2008 13:22:35 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/204661</link>
        <guid>http://moonfly2004.javaeye.com/blog/204661</guid>
      </item>
      <item>
        <title>System Fields for Current Date and Time </title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/202051" style="color:red;">http://moonfly2004.javaeye.com/blog/202051</a>&nbsp;
          发表时间: 2008年06月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>The following system fields are always set automatically.&nbsp; </p>
<p>The GET TIME statement synchronizes the time on the application server with the time on the database server and writes it to the field SY-UZEIT. SY-DATUM and the system fields for the local timezone (SY-TIMLO, SY-DATLO, and SY-ZONLO) are also reset.&nbsp; </p>
<p>SY-DATLO </p>
<p>User&rsquo;s local date, for example 19981129, 19990628, &hellip; </p>
<p>SY-DATUM </p>
<p>Current application server date, for example 19981130, 19990627, &hellip; </p>
<p>SY-DAYST </p>
<p>X during summertime, otherwise space.&nbsp; </p>
<p>SY-FDAYW </p>
<p>Factory calendar day of the week: Monday = 1 &hellip; Friday = 5. </p>
<p>SY-TIMLO </p>
<p>User&rsquo;s local time, for example 154353, 225312, &hellip; </p>
<p>SY-TZONE </p>
<p>Time difference in seconds between local time and Greenwich Mean Time (UTC), for example,&nbsp; <br />360, 10800. </p>
<p>SY-UZEIT </p>
<p>Current application server time. for example 164353, 215312, &hellip; </p>
<p>SY-ZONLO </p>
<p>User&rsquo;s time zone, for example, EST, UTC, &hellip; </p>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/202051#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Jun 2008 10:47:43 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/202051</link>
        <guid>http://moonfly2004.javaeye.com/blog/202051</guid>
      </item>
      <item>
        <title>屏幕字段属性结构scrren里的字段含义 </title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/200813" style="color:red;">http://moonfly2004.javaeye.com/blog/200813</a>&nbsp;
          发表时间: 2008年06月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>screen结构里的字段是赋予加到屏幕的字段的属性，可以这样子说屏幕上的一个字段就如其它开发语言的一个控件，而screen里的字段就是这个控件的属性。<br />screen主要包括以下属性：<br />名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 长度&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 说明<br />NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;屏幕字段的名称<br />GROUP1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属于字段组1的字段<br />GROUP2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属于字段组2的字段<br />GROUP3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属于字段组3的字段<br />GROUP4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 属于字段组4的字段<br />ACTIVE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可见并准备输入的字段<br />REQUIRED&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;字段输入是强制的，即该值为X是表示该字段必须输入<br />INPUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字段准备输入<br />OUTPUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字段仅用于显示<br />INTENSIFIED&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;高亮显示字段<br />INVISIBLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 禁用字段<br />LENGTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 减少字段输出长度<br />DISPLAY_3D&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以三维框架显示字段<br />VALUE_HELP&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示有值帮助的字段&nbsp;</p>
<p>&nbsp;上述长度为1的字段，值为"1"时表示启用该功能，值为"0"时是该功能的相反。</p>
<p>如定义了屏幕字段parameters:s_wers LIKE t001w-werks MODIF ID mod.<br />name字段是指屏幕字段s_werks的的名字，即name的值为s_werks。<br />但在屏幕里不能使用name来控制字段s_werks，需要使用GROUP1这四个字段的值来控制；<br />如上述定义了s_werks的group1为mod，当需要控制字段s_werks在屏幕上是否显示或其它时，可使用以下代码：<br />LOOP AT SCREEN.<br />&nbsp; CHECK SCREEN-GROUP1 = 'mod'.<br />&nbsp; SCREEN-INPUT = '0'. "表示字段s_werks只用于显示不能输入<br />&nbsp; ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "同样其它属性也是同上面来控制<br />&nbsp; MODIFY SCREEN.<br />ENDLOOP.<br />对于group1属性可以同时定义多个屏幕字段为同一个id，如：<br />parameters:s_werks LIKE t001w-werks MODIF ID mod,<br />&nbsp;&nbsp;&nbsp;&nbsp; s_matnr LIKE marc-matnr MODIF ID mod.<br />当控制"mod"的属性时即是指同时控制这两个字段。</p>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/200813#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Jun 2008 10:42:12 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/200813</link>
        <guid>http://moonfly2004.javaeye.com/blog/200813</guid>
      </item>
      <item>
        <title> ABAP 表格控制(Table Control)和步循环</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/200328" style="color:red;">http://moonfly2004.javaeye.com/blog/200328</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div><strong><span style="font-size: 12pt; color: blue;">表格控制(Table Control)和步循环</span>
</strong>
</div>
<div><strong>&nbsp;</strong>
</div>
<div><strong>&nbsp;</strong>
</div>
<div style="margin-left: 17.85pt; text-indent: -17.85pt; line-height: 15pt; text-align: left;"><strong><span style="color: blue;">1.</span>
</strong>
<strong><span style="color: blue;">两个标准Demo: SAPMTZ60,</span>
</strong>
<strong><span style="color: blue;">SAPMTZ61</span>
</strong>
</div>
<div style="margin-left: 17.85pt; text-indent: -17.85pt; line-height: 15pt; text-align: left;"><strong><span style="color: blue;">2.</span>
</strong>
<strong><span style="color: blue;">简介</span>
</strong>
</div>
<div style="margin-left: 17.85pt; text-indent: -17.85pt; line-height: 15pt; text-align: left;"><strong><span style="color: blue;">3.</span>
</strong>
<strong><span style="color: blue;">建立Table Control程序的基本流程</span>
</strong>
</div>
<div style="margin-left: 17.85pt; text-indent: -17.85pt; line-height: 15pt; text-align: left;"><strong><span style="color: blue;">4.</span>
</strong>
<strong><span style="color: blue;">使用步循环</span>
</strong>
</div>
<div style="margin-left: 17.85pt; text-indent: -17.85pt; line-height: 15pt; text-align: left;"><strong><span style="color: blue;">5.</span>
</strong>
<strong><span style="color: blue;">表格控制(Table Control)和步循环注意事项</span>
</strong>
</div>
<div style="margin-left: 17.85pt; text-indent: -17.85pt; line-height: 15pt;"><strong><span style="color: blue;">6.</span>
</strong>
<strong><span style="color: blue;">在屏幕表格中循环和在内表与屏幕表格中同时循环的区别</span>
</strong>
</div>
<div style="margin-left: 17.85pt; text-indent: -17.85pt; line-height: 15pt;"><strong><span style="color: blue;">7.</span>
</strong>
<strong><span style="color: blue;">确定屏幕循环的记录条目</span>
</strong>
</div>
<div style="margin-left: 17.85pt; text-indent: -17.85pt; line-height: 15pt;"><strong><span style="color: blue;">8.</span>
</strong>
<strong><span style="color: blue;">MODIFY</span>
</strong>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><span style="font-size: 12pt; color: #4b4b4b;">2. </span>
<span style="font-size: 12pt; color: #4b4b4b;">简介</span>
</div>
<div>&nbsp;</div>
<div style="text-indent: 18pt;"><span style="font-size: 12pt; color: blue;">表格控制</span>
<span style="font-size: 12pt; color: black;">和步循环是用于屏幕表格显示的对象。表格控制只是增强了的步循环,它可以使用桌面应用程序中表格工具的&ldquo;Look&rdquo; 和&ldquo;Feel&rdquo;来显示数据 。表格控制还提供使表格易于查看和使用的专用格式化功能</span>
</div>
<div style="text-indent: 18pt;"><span style="font-size: 12pt; color: blue;">步循环的</span>
<span style="font-size: 12pt; color: black;">一个特点是它们的表行能够在屏幕上跨越多行。 相反，表格控制中的行总是单行，但可以很长。（表格控制的行能够滚动。）</span>
</div>
<div><span style="font-size: 12pt; color: black;">通常表格控制所提供的许多特征由系统的 SAPGUI 前端操纵， 因此，不必在ABAP/4 事务中编制 任何特征（ 除了竖直滚 动）。</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: blue;">LOOP </span>
<span style="font-size: 12pt; color: blue;">语句的任务</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">LOOP </span>
<span style="font-size: 12pt; color: black;">语句负责读取往返传递于屏幕和 ABAP/4 程序之间的屏幕表格值 。</span>
<span style="font-size: 12pt; color: blue;">因此必须同时在 PBO 和 PAI 事件中为屏幕中的每一个表格编制LOOP语句。至少在此应有一个空LOOP...ENDLOOP语句。</span>
<span style="font-size: 12pt; color: black;">LOOP </span>
<span style="font-size: 12pt; color: black;">语
句还用于驱动滚动。在PBO事件中，LOOP使用一个参数告诉从表格的何处开
始循环。该参数因此导致下一个屏幕表格显示的更新（对于表格控制,该参数是表格控制结构中的TOP_LINE
字段；对于步循环，该参数为用于LOOP语句的CURSOR参数。）。ABAP/4 程序和系统都可以设置该参数。</span>
</div>
<div><span style="font-size: 12pt; color: black;">注意，屏幕表格中所显示的行数可以改变。当屏幕表格可调整并且用户更改窗口的高度时就会出现这种情况。在这种情况下，PAI中的下一个LOOP就更改PAI中传到ABAP/4程序的表格行数。</span>
</div>
<div><span style="font-size: 12pt; color: black;">LOOP </span>
<span style="font-size: 12pt; color: black;">语句有两种重要的格式 ：</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: blue;">LOOP</span>
</div>
<div><span style="font-size: 12pt;">如果正在使用表格控制，就必须包括附加的 WITH CONTROL参数：</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: blue;">LOOP WITH CONTROL &lt;table-control&gt;. </span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: blue;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;actions&gt;...</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: blue;">ENDLOOP</span>
<span style="font-size: 12pt; color: black;">.</span>
</div>
<div><span style="font-size: 12pt; color: black;">该语句在屏幕表格行中循环(</span>
<strong><span style="font-size: 12pt; color: blue;">Table Control</span>
</strong>
<strong><span style="font-size: 12pt; color: blue;">有多少行就循环多少次)</span>
</strong>
<span style="font-size: 12pt; color: black;">，同时在每个块和程序的对应 ABAP/4 字段之间往复传送数据 。可以在 ABAP/4 中将屏幕表格字段声明为任何类型（数据库表 格、结构或 单个字段） ，内表字段除外。</span>
</div>
<div><span style="font-size: 12pt; color: black;">对于步循环，如果正在执行本身的滚动（例如，使用 F21－F24） ，则必须使用该语句。</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: blue;">LOOP AT &lt;internal table&gt;.</span>
</div>
<div><span style="font-size: 12pt; color: black;">该语句可同时在内表和屏幕表格行中循环。常常将此屏幕表格字段声明为内表字段，但不是非得如此。</span>
</div>
<div><span style="font-size: 12pt; color: black;">对于该 LOOP，步循环显示都带有滚动条。该滚动由系统自动操纵。</span>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><span style="font-size: 12pt; color: black;">7.</span>
<span style="font-size: 12pt; color: black;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt; color: red;">在</span>
<span style="font-size: 12pt; color: red;">controls</span>
<span style="font-size: 12pt; color: red;">声明的时候对应的</span>
<span style="font-size: 12pt; color: red;">screen</span>
<span style="font-size: 12pt; color: red;">中可以对</span>
<span style="font-size: 12pt; color: red;">controls</span>
<span style="font-size: 12pt; color: red;">定义的对象进行操作</span>
</div>
<div style="margin-left: 18pt;"><span style="font-size: 12pt; color: red;">Eg.</span>
</div>
<div>&nbsp;</div>
<div><span style="font-size: 12pt; color: blue;">在屏幕表格中直接循环</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">在 ABAP/4 模块中，使用</span>
<span style="font-size: 12pt; color: blue;"> SY-STEPL </span>
<span style="font-size: 12pt; color: black;">以查找当前正在处理的屏幕表格行的索引。每循环一次，系统就设置一次该变量。SY-STEPL 的值总是介于 1与当前所显示的行数之间。您可以在程序中声明表格偏移量（常称为 BASE，并通常用 </span>
<span style="font-size: 12pt; color: blue;">SY-LOOPC</span>
<span style="font-size: 12pt; color: black;">初始化）并用它同SY-STEPL 一起获得与当前屏幕表格行相对应的内表行。(IND = BASE + SY-STEPL - 1.)</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">请记住，SY-STEPL只在LOOP...ENDLOOP处理的范围之内才有意义。</span>
</div>
<div><span style="font-size: 12pt; color: blue;">在内表中循环</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">LOOP AT &lt;internal table&gt; [CURSOR &lt;scroll-var&gt;]</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [WITH CONTROL &lt;table-control&gt;]</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [FROM &lt;line1&gt;]&nbsp;[TO &lt;line2&gt;]. </span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">&nbsp;&nbsp;&nbsp; ...&lt;actions&gt;...</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">&nbsp;&nbsp;&nbsp; ENDLOOP.</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">表示同时在内表和屏幕表格中循环。</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">该形式的 LOOP语句在内表中循环，对每行都执行 &lt;actions&gt;。对于每个内表行，系统将相应程序 字段传送到对应的屏幕表格行，或将相应的屏幕表格行传送回对应的程序字段。</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">使用步循环时，在PAI事件中省略CURSOR 参数。FROM和TO参数只能用于步循环。WITH CONTROL参数只能用于表格控制。</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">设置</span>
<span style="font-size: 12pt; color: blue;">&lt;scroll-var&gt;</span>
<span style="font-size: 12pt; color: black;">以</span>
<span style="font-size: 12pt; color: blue;">告诉系统从何处开始显示</span>
<span style="font-size: 12pt; color: black;">。对于表格控制，&lt;scroll-var&gt; 是TABLEVIEW 结构中的TOP_LINE字段(省略的话系统会自动设置)。对于步循环，请声明局部程序变量以用作CURSOR参数。</span>
</div>
<div style="text-indent: 21pt;">&nbsp;</div>
<div style="text-indent: 21pt;">&nbsp;</div>
<div><span style="font-size: 12pt; color: blue;">建立Table Control程序的基本流程.</span>
</div>
<div><span style="font-size: 12pt; color: #4b4b4b;">//</span>
<span style="font-size: 12pt; color: #4b4b4b;">主程序</span>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><span style="font-size: 12pt; color: #4b4b4b;">1.</span>
<span style="font-size: 12pt; color: #4b4b4b;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt; color: #4b4b4b;">声明表格控制</span>
</div>
<div style="text-indent: 18pt;"><span style="font-size: 12pt; color: #4b4b4b;">Eg. CONTROLS: CTRL1 TYPE TABLEVIEW USING SCREEN 0901.</span>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><span style="font-size: 12pt; color: #4b4b4b;">2.</span>
<span style="font-size: 12pt; color: #4b4b4b;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt; color: #4b4b4b;">定义要show出来的itab</span>
</div>
<div style="margin-left: 18pt;"><span style="font-size: 12pt; color: #4b4b4b;">DATA SP1 LIKE SPFL1 OCCURS 0 WITH HEADER LINE.</span>
</div>
<div style="margin-left: 18pt;"><span style="font-size: 12pt; color: #4b4b4b;">DATA SP1 LIKE TABLE OF SPFL1 WITH HEADER LINE.(</span>
<span style="font-size: 12pt; color: #4b4b4b;">等价)</span>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><span style="font-size: 12pt; color: #4b4b4b;">3.</span>
<span style="font-size: 12pt; color: #4b4b4b;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt; color: #4b4b4b;">增加itab数据</span>
</div>
<div><span style="font-size: 12pt; color: #4b4b4b;">//</span>
<span style="font-size: 12pt; color: #4b4b4b;">逻辑流</span>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><span style="font-size: 12pt; color: #4b4b4b;">4.</span>
<span style="font-size: 12pt; color: #4b4b4b;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt; color: #4b4b4b;">循环读取itab逐行写入Table Control当前行.(BPO)</span>
</div>
<div style="margin-left: 63pt;"><span style="font-size: 12pt; color: #4b4b4b;">LOOP WITH CONTROL &lt;table-control&gt; [cursor tab1-CURRENT_LINE]. </span>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><span style="font-size: 12pt; color: #4b4b4b;">5.</span>
<span style="font-size: 12pt; color: #4b4b4b;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt; color: #4b4b4b;">当数据有改变时更新itab</span>
</div>
<div style="margin-left: 18pt;"><span style="font-size: 12pt; color: #4b4b4b;">LOOP</span>
<span style="font-size: 12pt; color: #4b4b4b;"> AT &lt;ITAB&gt;</span>
</div>
<div style="margin-left: 18pt;"><span style="font-size: 12pt; color: #4b4b4b;">&nbsp;CHAIN.</span>
</div>
<div style="margin-left: 18pt; text-indent: 23.25pt;"><span style="font-size: 12pt; color: #4b4b4b;">FIELD SP1-CARRID.</span>
</div>
<div style="margin-left: 18pt; text-indent: 23.25pt;"><span style="font-size: 12pt; color: #4b4b4b;">&hellip;</span>
</div>
<div><span style="font-size: 12pt; color: #4b4b4b;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MODULE TAB1_MODIFY ON CHAIN-REQUEST.</span>
</div>
<div><span style="font-size: 12pt; color: #4b4b4b;">&nbsp;&nbsp;&nbsp; &nbsp;ENDCHAIN.</span>
</div>
<div><span style="font-size: 12pt; color: #4b4b4b;">&nbsp;&nbsp; ENDLOOP.</span>
</div>
<div><span style="font-size: 12pt; color: blue;">使用步循环.</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: #4b4b4b;">步循环分为两类：静态的和动态的。静态步循环有固定的大小，运行时无法更改。动态步循环大小可变 。如果用户重置窗口的大小，系统就会自动地增加或减小所显示的步循环块的个数。可以定义任意数量的静态步循环，但动态步循环只能有一个。</span>
</div>
<div><span style="font-size: 12pt; color: #4b4b4b;">可
以在屏幕制作器中指定步循环的类型。屏幕中的每一个循环都有&ldquo;循环类型&rdquo;（fixed＝ 静态, variable＝ 动态）和&ldquo; 循环次数&rdquo;
属性。如果循环是固定的，&ldquo;循环次数&rdquo;告诉 系统用于显
示的循环块的数量。该数值可以永久不变。编制动态和静态步循环的方法完全一样。两种类型都可以使用 LOOP 和 LOOP AT 语句。</span>
</div>
<div><span style="font-size: 12pt; color: #4b4b4b;">屏幕操作如图</span>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><span style="font-size: 12pt; color: #4b4b4b;">1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-size: 12pt; color: #4b4b4b;">放入field</span>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><span style="font-size: 12pt; color: #4b4b4b;">2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-size: 12pt; color: #4b4b4b;">选择要编组的field,将field定义组</span>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/long2006sky/9af6447654504278a506f9883675cfeb.png" height="446" alt="" width="750" />
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><br />
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;">
<div><strong><span style="font-size: 12pt; color: blue;">表格控制(Table Control)和步循环注意事项</span>
</strong>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><span style="font-size: 12pt; color: #4b4b4b;">1.</span>
<span style="font-size: 12pt; color: #4b4b4b;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt; color: #4b4b4b;">在layout设计器中放置的I/O field可以是来自dbtab,也可以是来自itab,其实是个screen可以识别的&lt;work area&gt;</span>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><span style="font-size: 12pt; color: #4b4b4b;">2.</span>
<span style="font-size: 12pt; color: #4b4b4b;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt; color: #4b4b4b;">screen</span>
<span style="font-size: 12pt; color: #4b4b4b;">上放置的I/O field和其它控件如Table Control一定要和主程序中声明的名称一致,如果放置之前没有定义的field,将会出现runtime error或者根本无法激活.</span>
</div>
<div style="margin-left: 18pt; text-indent: -18pt; text-align: left;"><span style="font-size: 12pt; color: #4b4b4b;">3.</span>
<span style="font-size: 12pt; color: #4b4b4b;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt; color: #4b4b4b;">无论是触发滚动条还是向下按钮,都会触发PBO/PAI逻辑流.</span>
</div>
<div>&nbsp;</div>
<div><span style="font-size: 12pt;">4.</span>
<span style="font-size: 12pt; color: blue;">在屏幕表格中循环和在内表与屏幕表格中同时循环的区别</span>
</div>
<div><span style="font-size: 12pt; color: blue;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt;">只在屏幕表格中循环,会以屏幕表格为主,在显示的时候需要使所要显示的内表适应屏幕,<span style="color: #3366ff;">如果屏幕表格的行数比内表的行数多的话仍然会显示一些空行</span>
如</span>
</div>
<div><span style="font-size: 12pt;">//</span>
<span style="font-size: 12pt;">逻辑流</span>
</div>
<div><span style="font-size: 12pt; color: black;">LOOP WITH CONTROL CTRL1.</span>
</div>
<div><span style="font-size: 12pt; color: black;">&nbsp;&nbsp; MODULE DISPLAY_CTRL1_101 .</span>
</div>
<div><span style="font-size: 12pt; color: black;">ENDLOOP.</span>
</div>
<div><span style="font-size: 12pt; color: black;">//</span>
<span style="font-size: 12pt; color: black;">程序</span>
</div>
<div><span style="font-size: 12pt; color: black;">READ TABLE IMAKT INDEX CTRL1-CURRENT_LINE.</span>
</div>
<div><span style="font-size: 12pt; color: black;">&nbsp;IF SY-SUBRC = 0.</span>
</div>
<div><span style="font-size: 12pt; color: black;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt; color: black;">MAKT-SPRAS = IMAKT-SPRAS.</span>
</div>
<div><span style="font-size: 12pt; color: black;">&nbsp;&nbsp;&nbsp; MAKT-MAKTX = IMAKT-MAKTX.</span>
</div>
<div><span style="font-size: 12pt; color: black;">&nbsp;&nbsp;&nbsp; CTRL1-FLAG = IMAKT-CKBOX.</span>
</div>
<div><span style="font-size: 12pt; color: black;">&nbsp;ENDIF.</span>
</div>
<div><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt;">在内表与屏幕表格中同时循环可以使屏幕表格和内表同时循环.不必严格控制内表要读取那一行(个人效率较前者要高,因为不用再次搜索和判断),而且,不会显示多于的空白行.</span>
</div>
<div><span style="font-size: 12pt;">//</span>
<span style="font-size: 12pt;">逻辑流</span>
</div>
<div><span style="font-size: 12pt; color: black;">LOOP AT IMAKT WITH CONTROL CTRL1 CURSOR CTRL1-TOP_LINE.</span>
</div>
<div><span style="font-size: 12pt; color: black;">&nbsp;&nbsp; MODULE DISPLAY_CTRL1_101 .</span>
</div>
<div><span style="font-size: 12pt; color: black;">ENDLOOP.</span>
</div>
<div><span style="font-size: 12pt; color: black;">//</span>
<span style="font-size: 12pt; color: black;">程序</span>
</div>
<div><span style="font-size: 12pt; color: black;">&nbsp;&nbsp;&nbsp; MAKT-SPRAS = IMAKT-SPRAS.</span>
</div>
<div><span style="font-size: 12pt; color: black;">&nbsp;&nbsp;&nbsp; </span>
<span style="font-size: 12pt; color: black;">MAKT-MAKTX = IMAKT-MAKTX.</span>
</div>
<div style="text-indent: 23.25pt;"><span style="font-size: 12pt; color: black;">CTRL1-FLAG = IMAKT-CKBOX.</span>
</div>
<div><span style="font-size: 12pt; color: blue;">5.</span>
<span style="font-size: 12pt; color: blue;">在屏幕表格中放入内表</span>
<span style="font-size: 12pt; color: blue;">(</span>
<span style="font-size: 12pt; color: blue;">工作区</span>
<span style="font-size: 12pt; color: blue;">).</span>
<span style="font-size: 12pt; color: blue;">是屏幕表格和程序内表关联</span>
<span style="font-size: 12pt; color: blue;">.</span>
</div>
<div style="margin-left: 21pt; text-indent: -21pt;"><span style="font-size: 12pt;">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-size: 12pt;">&nbsp;</span>
<span style="font-size: 12pt;">所要放入的itab一定要使有表头的(其实屏幕要的是wa)</span>
</div>
<div style="margin-left: 21pt; text-indent: -21pt;"><span style="font-size: 12pt;">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-size: 12pt;">注意选择的时候要写入内表名称,选择后面的按钮</span>
</div>
<div style="margin-left: 21pt; text-indent: -21pt;"><span style="font-size: 12pt;">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-size: 12pt;">操作的时候直接modify那个内表系统就能自动识别user的更新.只是循环的时候要注意指针的运动,尽量使屏幕和内表一起循环.</span>
</div>
<div style="margin-left: 21pt; text-indent: -21pt;"><span style="font-size: 12pt;">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-size: 12pt;">由于屏幕表格和程序内表关联,所以在PAI中LOOP AT &lt;ITAB&gt;的时候仍然可以使用屏幕表格的各种参数eg.<span style="color: #3366ff;"> <span style="color: red;">index ctrl1-current_line</span>
</span>
</span>
</div>
<div><span style="font-size: 12pt; color: #3366ff;">//</span>
<span style="font-size: 12pt; color: #3366ff;">逻辑流(PAI)</span>
</div>
<div><span style="font-size: 12pt; color: #3366ff;">LOOP AT IMAKT.</span>
</div>
<div><span style="font-size: 12pt; color: #3366ff;">&nbsp;&nbsp;&nbsp; MODULE SET_LINE_COUNT_0901.</span>
</div>
<div><span style="font-size: 12pt; color: #3366ff;">ENDLOOP.</span>
</div>
<div><span style="font-size: 12pt; color: #3366ff;">//</span>
<span style="font-size: 12pt; color: #3366ff;">程序</span>
</div>
<div><span style="font-size: 12pt; color: #3366ff;">module SET_LINE_COUNT_0901 input</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: #3366ff;">MODIFY IMAKT&nbsp;index ctrl1-current_line.</span>
</div>
</div>
<div><span style="font-size: 12pt; color: #3366ff;">endmodule. </span>
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/long2006sky/eaf98a25855f4d5db6ab17e38c004846.png" height="663" alt="" width="750" />
</div>
<div><br />
</div>
<div>
<div><span style="font-size: 12pt; color: blue;">再说表格控制器</span>
</div>
<div style="margin-left: 42pt; text-indent: -21pt; text-align: left;"><span style="font-size: 12pt; color: black;">1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-size: 12pt; color: black;">在layout中设置的表格控制器和.net中的gridview有点类似</span>
<span style="font-size: 12pt; color: blue;">,</span>
<span style="font-size: 12pt; color: blue;">其中的各个列必须和要和与之关联的内表的字段名称一样,</span>
<span style="font-size: 12pt; color: black;">否则将无法访问,或者是置无法取出.</span>
</div>
<span style="font-size: 12pt; color: black;">2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
<span style="font-size: 12pt; color: black;">另外,那个 </span>
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/long2006sky/b4c00f0e60d2410286ec4ce9c5ca9616.png" height="79" alt="" width="204" />
<span style="font-size: 12pt; color: black;">/SelColumn选项可以和itab中的一个C类型的字段关联以判断表格行的选中情况.</span>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><span style="font-size: 12pt; color: blue;">ABAP---</span>
<span style="font-size: 12pt; color: blue;">读取DB中前n行</span>
</div>
<div><span style="font-size: 12pt; color: black;">&nbsp;&nbsp;&nbsp; SELECT * UP TO &lt;N&gt; ROWS</span>
<span style="font-size: 12pt; color: black;">&hellip;&hellip;&hellip;</span>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
</div>
<div><span style="font-size: 12pt; color: blue;">在屏幕编辑器中设置必须输入的栏位</span>
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/long2006sky/611b34af2637489cb2e42f1ced4f509c.gif" height="216" alt="" width="209" />
</div>
<div>
<div><span style="color: blue;">确定屏幕循环的记录条目</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: black;">使用</span>
<span style="font-size: 12pt; color: blue;"> SY-STEPL </span>
<span style="font-size: 12pt; color: black;">以查找当前正在处理的屏幕表格行的索引。每循环一次，系统就设置一次该变量。SY-STEPL 的值总是介于 1与当前所显示的行数之间。您可以在程序中声明表格偏移量（常称为 BASE，并通常用 </span>
<span style="font-size: 12pt; color: blue;">SY-LOOPC</span>
<span style="font-size: 12pt; color: black;">初始化）并用它同SY-STEPL 一起获得与当前屏幕表格行相对应的内表行。(IND = BASE + SY-STEPL - 1.)</span>
</div>
<div style="text-indent: 21pt;"><span style="color: blue;">MODIFY</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt;">MODIFY &lt;itab&gt; [FROM &lt;wa&gt;] [INDEX &lt;idx&gt;].</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt;">FROM </span>
<span style="font-size: 12pt;">选项中指定的工作区域</span>
<span style="font-size: 12pt;">&lt;wa&gt;</span>
<span style="font-size: 12pt;">代替</span>
<span style="font-size: 12pt;"> &lt;itab&gt; </span>
<span style="font-size: 12pt;">中的行。如果表格有表头行，可以忽略</span>
<span style="font-size: 12pt;"> FROM </span>
<span style="font-size: 12pt;">选项。这样，表格工作区域就代替</span>
<span style="font-size: 12pt;">行。</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt;">如果使用</span>
<span style="font-size: 12pt;">INDEX</span>
<span style="font-size: 12pt;">选项，则新</span>
<span style="font-size: 12pt;">行代替索引为</span>
<span style="font-size: 12pt;"> &lt;idx&gt; </span>
<span style="font-size: 12pt;">的现有行。如果替换成功，则将</span>
<span style="font-size: 12pt;"> SY-SUBRC </span>
<span style="font-size: 12pt;">设置为</span>
<span style="font-size: 12pt;">0</span>
<span style="font-size: 12pt;">。</span>
<span style="font-size: 12pt;">如果内表包含的行少于</span>
<span style="font-size: 12pt;"> &lt;idx&gt;</span>
<span style="font-size: 12pt;">，则不更改任何行并且</span>
<span style="font-size: 12pt;">SY-SUBRC</span>
<span style="font-size: 12pt;">包含</span>
<span style="font-size: 12pt;">4</span>
<span style="font-size: 12pt;">。</span>
</div>
<div style="text-indent: 21pt;"><span style="font-size: 12pt; color: blue;">如果使用没</span>
<span style="font-size: 12pt; color: blue;">有</span>
<span style="font-size: 12pt; color: blue;">INDEX</span>
<span style="font-size: 12pt; color: blue;">选项的</span>
<span style="font-size: 12pt; color: blue;">MODIFY</span>
<span style="font-size: 12pt; color: blue;">语句，则系统只能在</span>
<span style="font-size: 12pt; color: blue;"> LOOP - ENDLOOP </span>
<span style="font-size: 12pt; color: blue;">块中通过更改当前行（</span>
<span style="font-size: 12pt; color: blue;">例如由</span>
<span style="font-size: 12pt; color: blue;"> SY-TABIX </span>
<span style="font-size: 12pt; color: blue;">返回其索引的行）来处理它。</span>
</div>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/200328#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Jun 2008 08:04:23 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/200328</link>
        <guid>http://moonfly2004.javaeye.com/blog/200328</guid>
      </item>
      <item>
        <title>如何动态改变Table Control的列抬头 </title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/200327" style="color:red;">http://moonfly2004.javaeye.com/blog/200327</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span class="postbody">1、In the screen painter use Input/Output fields
as your column headings and set the attributes to &quot;Output only&quot;. Then
create character data objects in your program with the same name as the
I/O fields you created in the screen painter. .&nbsp;<br />
</span>
&nbsp;2、Finally at PBO time move the correct text to the text field<br />
3、参见MD61</p>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/200327#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Jun 2008 08:00:24 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/200327</link>
        <guid>http://moonfly2004.javaeye.com/blog/200327</guid>
      </item>
      <item>
        <title>SAP常用的function(转)</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/200326" style="color:red;">http://moonfly2004.javaeye.com/blog/200326</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="item-body">
<div class="item-content">
<p>1. <span style="font-family: Arial;">获取每个月的最后一天</span>
</p>
<p><span style="font-family: Arial;">&nbsp;&nbsp; CALL FUNCTION 'LAST_DAY_OF_MONTHS'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; day_in&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = date<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; last_day_of_month = date1.</span>
</p>
<p>2. 字符串前面去掉0</p>
<p>&nbsp;&nbsp;&nbsp;<span style="font-family: Arial;">&nbsp;call function 'CONVERSION_EXIT_ALPHA_OUTPUT'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exporting<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input&nbsp; = &amp;1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;importing<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output = &amp;1.</span>
</p>
<p>3. 字符串前面自动补0</p>
<p>&nbsp;&nbsp;&nbsp;<span style="font-family: Arial;">&nbsp; call function 'CONVERSION_EXIT_ALPHA_INPUT'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exporting<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input&nbsp; = &amp;1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; importing<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output = &amp;1.</span>
</p>
<p>4.&nbsp;<span style="font-family: Arial;">&nbsp;<span style="font-family: Arial;">获取生产定单状态</span>
</span>
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: Arial;">&nbsp;call function 'STATUS_TEXT_EDIT'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flg_user_stat&nbsp;&nbsp;&nbsp; = 'X'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objnr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = LO_OBJNR<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; only_active&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 'X'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spras&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = sy-langu<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; line&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = ls_statu<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXCEPTIONS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object_not_found = 01.</span>
</p>
<p>5. <span style="font-family: Arial;">金额转换成大写</span>
</p>
<p>&nbsp;&nbsp; <span style="font-family: Arial;">CALL FUNCTION 'SPELL_AMOUNT'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AMOUNT&nbsp;&nbsp;&nbsp; = T_AMOUNT10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CURRENCY&nbsp; = 'RMB'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LANGUAGE&nbsp; = '1'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMPORTING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN_WORDS&nbsp; = S_AMWORD2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXCEPTIONS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOT_FOUND = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TOO_LARGE = 2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OTHERS&nbsp;&nbsp;&nbsp; = 3.</span>
</p>
<p>6. <span style="font-family: Arial;">把SAP里的负号放到前面来的函数</span>
</p>
<p><span style="font-family: Arial;">&nbsp;&nbsp; DATA : t(10) TYPE c VALUE '65465-' .</span>
</p>
<p><span style="font-family: Arial;">&nbsp;&nbsp; CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHANGING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value = t. <br />
&nbsp;&nbsp;&nbsp; <br />
write : t .&nbsp;&nbsp;&nbsp; </span>
</p>
<p><span style="font-family: Arial;">7. <span style="font-family: Arial;">通过这个日期得出那天是星期几</span>
</span>
</p>
<p><span style="font-family: Arial;"><span style="font-family: Arial;">&nbsp;&nbsp;&nbsp; DAY_IN_WEEK</span>
</span>
</p>
<p><span style="font-family: Arial;">8.&nbsp; <span style="font-family: Arial;">一组有用的用户交互窗口函数</span>
</span>
</p>
<p><span style="font-family: Arial;">&nbsp;&nbsp; <span style="font-family: Arial;">POPUP_TO_CONFIRM_LOSS_OF_DATA 显示有YES/NO的弹出窗口，提示用户未保存的数据将丢失&nbsp;<br />
&nbsp;&nbsp; POPUP_TO_CONFIRM_STEP 提示是否确认操作的弹出窗口&nbsp;<br />
&nbsp;&nbsp; POPUP_TO_CONFIRM_WITH_MESSAGE 可以显示定制的提示信息的确认窗口&nbsp;<br />
&nbsp;&nbsp; POPUP_TO_CONFIRM_WITH_VALUE 显示确认用户对某个特定对象的操作的弹出窗口&nbsp;<br />
&nbsp;&nbsp; POPUP_TO_DECIDE 将待确认选项以单选按钮的方式显示的弹出窗口&nbsp;<br />
&nbsp;&nbsp; POPUP_TO_DECIDE_WITH_MESSAGE 带消息的确认窗口&nbsp;<br />
&nbsp;&nbsp; POPUP_TO_DISPLAY_TEXT 显示多行信息的窗口&nbsp;<br />
&nbsp;&nbsp; POPUP_TO_SELECT_MONTH 月份选择窗口&nbsp;<br />
&nbsp;&nbsp; POPUP_WITH_TABLE_DISPLAY 有表格对象的确认窗口 </span>
</span>
</p>
<p><span style="font-family: Arial;">9. <span style="font-family: Arial;">判断某天是否是假日 </span>
</span>
</p>
<p><span style="font-family: Arial;">&nbsp; <span style="font-family: Arial;">HOLIDAY_CHECK_AND_GET_INFO</span>
</span>
</p>
<p><span style="font-family: Arial;">10.&nbsp; <span style="font-family: Arial;">在SE38环境下的程序名输入栏输入'DEMO*'后按F4，你可以查到SAP所有的DEMO示例程序</span>
</span>
</p>
<p><span style="font-family: Arial;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: Arial;">运行&ldquo;ABAPDOCU&rdquo;T-cdoe，你可以看到ABAP DOCUMENT及示例程序</span>
</span>
</p>
<p><span style="font-family: Arial;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: Arial;">在SE38环境下的程序名输入栏输入'BCALV*'后按F4，你可以查到很多ALV示例程序</span>
</span>
</p>
</div>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/200326#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Jun 2008 07:59:41 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/200326</link>
        <guid>http://moonfly2004.javaeye.com/blog/200326</guid>
      </item>
      <item>
        <title>教你六项急救措施 拯救受损Windows系统</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/197796" style="color:red;">http://moonfly2004.javaeye.com/blog/197796</a>&nbsp;
          发表时间: 2008年05月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h2>Windows系统在长时间地工作之后，往往会不可避免地出现无法启动或者运行出错的故障，或者如最近的诺顿、卡巴斯基误杀系统文件使系统无法正
常使用，面对这些故障我们是选择将就使用，还是选择重新安装系统？如果将就使用，那Windows系统的运行效率肯定不会很高，甚至还无法正常运行，如果
选择重新安装系统，那不但麻烦不说，而且还会耗费很长的等待时间。事实上，Windows系统一旦遇到无法启动或者运行出错的故障时，我们不妨使用下面的
六项措施，来快速而有效地&ldquo;急救&rdquo;受损的Windows系统，说不定能收获奇效！ <br />
<br />
1、最后一次配置 <br />
<br />
Windows2000
以上版本的操作系统，每次成功启动之后都会对系统注册表进行自动备份，一旦我们发现Windows系统本次不能正常启动时，那多半是我们上一次对系统进行
了错误的操作或者对某些软件进行了错误的安装，从而破坏了系统注册表的相关设置。此时，我们可以尝试使用上一次成功启动时的配置来重新启动一下计算机系
统：只要在重新启动系统的过程中，及时按下F8功能键，调出系统启动菜单，然后选中&ldquo;最后一次正确的配置&rdquo;项目，这样的话Windows系统说不定又能启
动正常了。 <br />
<br />
2、修复系统文件 <br />
<br />
如果Windows系统的某些核心文件不小心被损坏的话，那么即使使用&ldquo;最后一次配
置&rdquo;，Windows系统也很难保证就能启动正常。如果Windows系统只是有少量的系统文件受损的话，那我们不妨借助Windows系统内置的SFC
扫描修复命令，来尝试对那些已经遭受破坏的系统文件进行修复，一旦修复成功后，那Windows系统的启动又会恢复正常状态了。在修复受损系统文件时，只
要依次单击&ldquo;开始&rdquo;/&ldquo;运行&rdquo;命令，在弹出的系统运行对话框中，输入字符串命令&ldquo;sfc/scannow&rdquo;，单击回车键后，该命令程序就会对系统每个角落
处的系统文件进行搜索扫描，一旦发现系统文件的版本不正确或者系统文件已经损坏的话，它就能自动弹出提示界面,要求我们插入Windows系统的安装光
盘，以便从中提取正常的系统文件来替代不正常的系统文件，从而达到修复系统文件的目的。要是系统修复操作成功的话，相信我们重新启动计算机系统时，就不会
看到有什么不正常的现象了。 <br />
<br />
3、注销当前用户 <br />
<br />
如果Windows系统的受损部位只是由于安装了不恰当的软件，或者
是对软件进行了不合适的设置引起的话，那么我们通常可以通过&ldquo;注销当前用户&rdquo;的方法，来对受损的Windows系统进行急救，因为软件对系统设置的影响往
往只能限于当前登录的用户，一旦在当前用户状态下系统不能正常运行的话，我们完全可以注销当前用户，并以其他的用户重新登录系统，这样Windows一般
又能恢复正常运行状态了。 <br />
<br />
在注销当前用户、换用其他用户登录系统之前，我们需要先打开系统的控制面板窗口，然后双击其中的&ldquo;用户账户&rdquo;项目，再单击其后界面中的&ldquo;添加&rdquo;按钮，来重新创建一个新的登录账号，同时为该账号设置一个合适的访问密码，并将对应的账号设置为超级管理员权限。 <br />
<br />
由
于换用其他账号登录Windows系统后，保存在当前用户目录下的一些重要数据可能就访问不到了，为此在注销用户之前，我们有必要打开系统的资源管理器窗
口，找到当前账号所对应的用户目录，例如要是当前登录系统的账号为aaaa的话，那么系统默认的账号目录应该为&ldquo;C:\Windows\
DocumentsandSettings\aaaa&rdquo;，将该目录下面的一些重要数据全部备份到系统分区以外的其他分区目录中。 <br />
<br />
做好
了上面的准备工作后，现在我们就能依次执行&ldquo;开始&rdquo;/&ldquo;注销aaaa&rdquo;命令，来将当前的登录账号注销掉，然后重新用刚刚创建好的账号登录Windows系
统；在用新账号成功登录进Windows系统后，我们再把前面备份好的重要数据恢复到当前账号所对应的新用户目录下面，这样的话受损Windows系统就
能恢复以前的正常运行状态了。<br />
<br />
4、重注册DLL文件 <br />
<br />
Windows系统有时之所以会频繁受到损伤，主要是许多应用程序
常常共享调用一些DLL文件，一旦有的应用程序在使用完毕被自动卸载掉后，这些应用程序所调用的DLL文件往往也会跟着被删除掉了，这么一来
Windows系统或系统中的其他应用程序再次调用那些共享了的DLL文件时，就自然会发生错误现象了。 <br />
<br />
在急救那些由于系统DLL文
件丢失引起的Windows系统运行不正常故障时，我们根本不需要重新安装操作系统，只需要对那些已经丢失了的DLL文件进行一下重新注册，就能让系统恢
复正常运行状态了。考虑到我们并不知道究竟是哪一个或哪几个DLL文件被损坏了或丢失了，我们不妨通过下面的方法，来对系统所有的DLL文件都重新注册一
下，而不需要单独对某一个或某几个DLL文件进行注册： <br />
<br />
首先打开类似记事本这样的文件编辑程序，然后在对应的程序界面中输入如下命令行代码： <br />
<br />
<br />
@echooff<br />
for%1in(%windir%\system32\*.dll)doregsvr32.exe/s%1<br />
 <br />
<br />
<br />
<br />
将上面的命令行代码保存成一个扩展名为BAT的批处理文件，例如这里笔者假设将该代码内容保存为了repair.bat文件； <br />
<br />
其
次为repair.bat文件创建一个快捷图标，并将该快捷图标直接拖放到系统的桌面上，等到日后需要对系统中的所有DLL文件进行重新注册时，我们只需
要双击repair.bat文件的快捷图标，系统就会自动开始对所有的DLL文件执行重新注册操作了。一旦所有DLL文件被重新注册过之后，此时我们不妨
再尝试运行一下Windows系统，相信此时的系统肯定会十分正常了。 <br />
<br />
5、恢复原始文件 <br />
<br />
如果Windows系统不
正常运行的故障是由于系统注册表被意外破坏引起的话，那么我们完全可以借助常规的copy命令，来将系统原始的注册表信息直接复制到系统对应的目录下，这
样可以快速地实现恢复受损系统文件的目的。由于Windows系统第一次被安装成功后，原始的注册表信息都会被自动备份保存到系统安装目录下面的
Repair子目录中，因此我们只要将Repair子目录下面的注册表信息直接复制到系统的配置目录中就可以了： <br />
<br />
如果本地计算机只安装了一个操作系统的话，那我们不妨借助Windows98启动光盘，来将系统先引导到DOS命令行状态；如果本地计算机中安装了两个以上操作系统的话，那只需要将系统切换另外一个能正常运行的系统中就可以了； <br />
<br />
接下来在DOS命令行状态，通过CD命令将当前目录切换到&ldquo;%windir%\Repair&rdquo;子目录状态下，并依次执行如下字符串命令： <br />
<br />
<br />
copysam%windir%\system32\config<br />
copysystem%windir%\system32\config<br />
copysoftware%windir%\system32\config<br />
copydefault%windir%\system32\config<br />
copysecurity%windir%\system32\config<br />
 <br />
<br />
<br />
<br />
一旦在执行上面的字符串命令过程中，系统弹出提示询问是否将以前的文件覆盖掉时，我们直接进行肯定回答就可以了。等到系统的注册表信息被所有原始注册表文件替换掉后，我们再次重新启动一下系统，相信此时系统肯定能正常运行了。 <br />
<br />
6、系统还原功能 <br />
<br />
要是我们的计算机中安装的是WindowsXP系统的话，那除了通过上面的方法来急救受损的系统外，还能借助WindowsXP系统特有的&ldquo;系统还原功能&rdquo;，来将Windows系统的运行状态恢复到正常，下面就是该方法的具体实施步骤： <br />
<br />
依次单击&ldquo;开始&rdquo;/&ldquo;程序&rdquo;/&ldquo;附件&rdquo;/&ldquo;系统工具&rdquo;/&ldquo;系统还原&rdquo;命令，在其后弹出的系统还原设置向导界面中，将&ldquo;恢复我的计算机到一个较早的时间&rdquo;项目选中，然后单击&ldquo;下一步&rdquo;按钮； <br />
<br />
在
其后弹出的系统还原点列表窗口中，我们一般选择一个离当前时间比较近的一个还原点来还原系统，一旦选好目标还原点后，继续单击&ldquo;下一步&rdquo;按钮，
Windows系统就能被自动恢复到以前的正常工作状态了。值得一提的是，在使用该功能之前，我们一定要在Windows系统运行正常的状态下，及时创建
好合适的系统还原点，以便日后恢复系统时所用！ 【赛迪网-IT技术报道】</h2>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/197796#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 28 May 2008 11:44:43 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/197796</link>
        <guid>http://moonfly2004.javaeye.com/blog/197796</guid>
      </item>
      <item>
        <title>程序调用——submit的用法</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/195396" style="color:red;">http://moonfly2004.javaeye.com/blog/195396</a>&nbsp;
          发表时间: 2008年05月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>ABAP程序的启动方式有两种。一种是直接运行，即在事务代码SE38或者SA38中通过执行功能运行程序，
</p>
<div>以及通过系统目录或在命令域中输入代码运行程序；另一种方式是从一个正在运行的程序中调用另一个程</div>
<div>序，这种方式称为内部调用。内部调用另一个可执行程序可以通过SUBMIT语句进行。</div>
<div><br />
&nbsp; 在一个程序内部调用另一个程序时，可能出现两种情况。其一是调用程序将控制完全交给被调用程序，</div>
<div>被调用程序执行结束后，不再返回原来的程序；另一种情况是嵌入式调用，被调用程序结束后返回原程序</div>
<div>。</div>
<div><br />
无返回调用：submit<br />
调用并返回：submit and return</div>
<div>&nbsp;</div>
<div>例子：</div>
<div><br />
&nbsp;程序1<br />
&nbsp; <br />
&nbsp;REPORT z_call_example.<br />
&nbsp;<br />
&nbsp;START-OF-SELECTION.<br />
&nbsp;&nbsp; WRITE 'This program may call another one.'.<br />
&nbsp;&nbsp; SUBMIT z_example.</div>
<div><br />
&nbsp; 程序2</div>
<div>&nbsp;</div>
<div>&nbsp;REPORT z_example.<br />
&nbsp;<br />
&nbsp;DATA text(20) VALUE 'This is an example.'</div>
<div>&nbsp;START-OF-SELECTION.<br />
&nbsp;&nbsp; WRITE text.</div>
<div>&nbsp;</div>
<div>假定程序2已存在，则执行程序1后，将直接输出程序2的列表内容：<br />
&nbsp;&nbsp; This is an example.</div>
<div>&nbsp;</div>
<div>&nbsp; 单击回车键将退出程序运行界面，因为程序2调用在程序1的列表输出处理之前进行，因此程序1中WRITE</div>
<div>语句的内容没有被输出。</div>
<div><br />
&nbsp; 如果该程序中使用submit and return语句代替submit语句，则使用回车键按钮离开z_example后，还会返回调用它的程序，因而在列表屏幕中将再次显示z_call_example的列表输出部分：<br />
&nbsp;&nbsp; This program may call another one.</div>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/195396#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 21 May 2008 18:45:09 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/195396</link>
        <guid>http://moonfly2004.javaeye.com/blog/195396</guid>
      </item>
      <item>
        <title>如何限制自己开发的耗时报表在sap系统中运行的个数，以保证正常业务的进行</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/189672" style="color:red;">http://moonfly2004.javaeye.com/blog/189672</a>&nbsp;
          发表时间: 2008年05月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="content" id="BodyLabel" style="padding: 0px 10px; display: block;">
<p>在SAP
系统中经常有许多用户自行开发的报表，有些报表运行很&nbsp;耗时。如果这种报表被多个用户同时执行，通常会把服务器工作进程资源占用，导致业务操作无法正常进
行。这里提去一个变通的做法，限制自行开发的耗时报表的运行个数，保证服务器工作进程资源对业务操作的响应。具体做法如下：</p>
<p>1、建立耗时报表登记表（zauth0003），结构如下<br />
MANDT&nbsp;&nbsp; 集团<br />
REPORT&nbsp; 耗时程序名</p>
<p>2、建立允许运行耗时报表的同时个数表（ zauth0002），结构如下<br />
MANDT&nbsp;&nbsp; 集团<br />
ZNUM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 个数</p>
<p>3、建立检查函数<br />
function z_auth_cpu.<br />
*&quot;----------------------------------------------------------------------<br />
*&quot;*&quot;Local interface:<br />
*&quot;&nbsp; EXPORTING<br />
*&quot;&nbsp;&nbsp;&nbsp;&nbsp; REFERENCE(Z_RETURN_ERROR) TYPE&nbsp; SY-SUBRC<br />
*&quot;----------------------------------------------------------------------<br />
&nbsp; data: begin of wp_tabl occurs 10.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include structure wpinfo.<br />
&nbsp; data: end of wp_tabl.<br />
&nbsp; data: with_cpu type x value 0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inum type i.<br />
&nbsp; z_return_error = 0.<br />
&nbsp; inum = 0.<br />
&nbsp; refresh wp_tabl.<br />
&nbsp; select single&nbsp; * from zauth0002.<br />
&nbsp; if sy-subrc &lt;&gt; 0 or zauth0002-znum = 0.<br />
&nbsp;&nbsp;&nbsp; zauth0002-znum = 5.<br />
&nbsp; endif.<br />
&nbsp; select single&nbsp; * from zauth0003 where report = sy-cprog.<br />
&nbsp; if sy-subrc = 0.<br />
&nbsp;&nbsp;&nbsp; call function 'TH_WPINFO'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exporting<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with_cpu = with_cpu<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tables<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wplist&nbsp;&nbsp; = wp_tabl<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exceptions<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; others&nbsp;&nbsp; = 0.<br />
&nbsp;&nbsp;&nbsp; loop at wp_tabl.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select single&nbsp; * from zauth0003<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where report = wp_tabl-wp_report.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if sy-subrc = 0.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inum = inum + 1.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endif.<br />
&nbsp;&nbsp;&nbsp; endloop.<br />
&nbsp; endif.<br />
&nbsp; if inum &gt; zauth0002-znum.<br />
&nbsp;&nbsp;&nbsp; z_return_error = 4.<br />
&nbsp; endif.<br />
endfunction.</p>
<p>4、在程序中写入以下代码，检查是否可运行。<br /></p>
<p>&nbsp; data:t_return_code like sy-subrc.</p>
<p>*判断用否可以运算<br />
&nbsp; data:t_return_error like sy-subrc.<br />
&nbsp; call function 'Z_AUTH_CPU'<br />
&nbsp;&nbsp;&nbsp; importing<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z_return_error = t_return_error.<br />
&nbsp; if t_return_error &gt; 0.<br />
&nbsp;&nbsp;&nbsp; message e100 with '服务器达到最大会话数，请稍后再试'.<br />
&nbsp;&nbsp;&nbsp; exit.<br />
&nbsp; endif.</p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/189672#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 05 May 2008 13:02:53 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/189672</link>
        <guid>http://moonfly2004.javaeye.com/blog/189672</guid>
      </item>
      <item>
        <title>源碼下載----批量下载程序和表结构</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/185691" style="color:red;">http://moonfly2004.javaeye.com/blog/185691</a>&nbsp;
          发表时间: 2008年04月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="storytext">
<p>REPORT YGJH003 NO STANDARD PAGE HEADING LINE-SIZE 120 MESSAGE-ID WA.</p>
<p>***************************************************************<br />
***REPNAME: 批量下载程序和表结构 ***<br />
***AUTHOR : ***<br />
***************************************************************<br />
TABLES:TADIR,TRDIRT,TSTC,DD03L,DD02L,DD04L,DD02T,DD03T,DD04T.<br />
DATA: BEGIN OF YTADIR OCCURS 0.<br />
INCLUDE STRUCTURE TADIR. &quot;资源库对象的目录<br />
INCLUDE STRUCTURE TRDIRT.<br />
DATA: END OF YTADIR.<br />
DATA:PROG(72) TYPE C OCCURS 0 WITH HEADER LINE.<br />
*表结构<br />
DATA:BEGIN OF TAB OCCURS 0.<br />
INCLUDE STRUCTURE DD03L.<br />
DATA:TEXT(40).<br />
DATA:END OF TAB.<br />
DATA:BEGIN OF T1 OCCURS 0,<br />
TABNAME LIKE DD02L-TABNAME,<br />
DDTEXT LIKE DD02T-DDTEXT,<br />
END OF T1.<br />
DATA:BEGIN OF ITAB OCCURS 0,<br />
FIELD(15), &quot;字段<br />
KEY(6), &quot;关键字<br />
ELMENT(15), &quot;字段类型<br />
TYPE(10), &quot;数据类型<br />
LENG(8) , &quot;长度<br />
DECIMALS(8) , &quot;小数<br />
CHK(10), &quot;表检查<br />
CAN(10), &quot;参考表<br />
CFI(10), &quot;参考字段<br />
TEXT(40), &quot;字段描述<br />
END OF ITAB.<br />
DATA: YYNAME(128) TYPE C.<br />
DATA: TT TYPE STRING OCCURS 0 WITH HEADER LINE.<br />
DATA: RN(72).<br />
DATA: COUNT TYPE I.<br />
DATA: CCOUNT TYPE C.<br />
DATA:FIELDS(40),<br />
LIN TYPE I,<br />
VAL(30),<br />
REP(40).</p>
<br />
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME .<br />
PARAMETERS:DOW AS CHECKBOX. &quot;是否下载<br />
PARAMETERS:P_DIR(50) DEFAULT 'D:SAP ABAP'. &quot;下载路径<br />
PARAMETERS:STYPE(6) DEFAULT 'RTF'.<br />
PARAMETERS:R1 RADIOBUTTON GROUP R DEFAULT 'X', &quot;不下载表<br />
R2 RADIOBUTTON GROUP R. &quot;下载表<br />
SELECTION-SCREEN END OF BLOCK BLK1.<br />
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME.<br />
SELECT-OPTIONS:AUTHOR FOR TADIR-AUTHOR DEFAULT 'JUNQIU'. &quot;开发人<br />
SELECT-OPTIONS:DEVCLASS FOR TADIR-DEVCLASS. &quot;开发类<br />
SELECT-OPTIONS:OBJ FOR TADIR-OBJ_NAME. &quot;下载程序名称<br />
SELECT-OPTIONS:TABNAME FOR DD02L-TABNAME. &quot;下载表名称
<p>SELECTION-SCREEN END OF BLOCK BLK2.<br />
INITIALIZATION .<br />
START-OF-SELECTION .<br />
IF R1 = 'X'.<br />
PERFORM GET_DATA.<br />
ENDIF.<br />
IF R2 = 'X'.<br />
IF TABNAME IS INITIAL. &quot;检查下载表名是否为空<br />
MESSAGE I009 WITH '请输入要下载的表名!'.<br />
ELSE.<br />
PERFORM GET_TABLE_DATA.<br />
ENDIF.<br />
ENDIF.</p>
<p>AT LINE-SELECTION.<br />
CLEAR: FIELDS, LIN.<br />
GET CURSOR FIELD FIELDS LINE LIN VALUE VAL.<br />
LIN = LIN - 1.<br />
IF LIN &gt;= 1.<br />
READ TABLE YTADIR INDEX LIN.<br />
IF SY-SUBRC = 0.<br />
CLEAR REP.<br />
CLEAR PROG.<br />
REP = YTADIR-OBJ_NAME.<br />
READ REPORT REP INTO PROG.<br />
EDITOR-CALL FOR PROG.<br />
* SET PARAMETER ID 'RID' FIELD REP.<br />
* CALL TRANSACTION 'SE38' AND SKIP FIRST SCREEN.<br />
ENDIF.<br />
ENDIF.<br />
END-OF-SELECTION.</p>
<p>*---------------------------------------------------------------------*<br />
* FORM GET_DATA *<br />
*---------------------------------------------------------------------*<br />
* ........ *<br />
*---------------------------------------------------------------------*<br />
FORM GET_DATA.<br />
SELECT * INTO CORRESPONDING FIELDS OF TABLE YTADIR<br />
FROM TADIR<br />
INNER JOIN TRDIRT<br />
ON TADIR~OBJ_NAME = TRDIRT~NAME<br />
WHERE OBJECT = 'PROG'<br />
AND OBJ_NAME IN OBJ<br />
AND DEVCLASS IN DEVCLASS<br />
AND AUTHOR IN AUTHOR.<br />
SORT YTADIR BY OBJ_NAME.<br />
FORMAT COLOR 1.<br />
WRITE:/3(10)'开发类', (15) '开发人', (30) '程序名称', (58) '程序标题'.<br />
ULINE .<br />
FORMAT COLOR OFF.<br />
LOOP AT YTADIR.<br />
IF DOW = 'X'.<br />
REFRESH TT.<br />
RN = YTADIR-OBJ_NAME.<br />
READ REPORT RN INTO TT.<br />
* CCOUNT = CCOUNT + 1.<br />
* CONCATENATE YTADIR-AUTHOR '_' CCOUNT '.' STYPE<br />
* INTO YYNAME.<br />
CONCATENATE P_DIR YTADIR-AUTHOR '_' YTADIR-OBJ_NAME<br />
'_' YTADIR-TEXT '.' STYPE<br />
INTO YYNAME.<br />
CALL FUNCTION 'WS_DOWNLOAD'<br />
EXPORTING<br />
FILENAME = YYNAME<br />
FILETYPE = 'ASC'<br />
TABLES<br />
DATA_TAB = TT<br />
EXCEPTIONS<br />
FILE_OPEN_ERROR = 1<br />
FILE_WRITE_ERROR = 2<br />
INVALID_FILESIZE = 3<br />
INVALID_TABLE_WIDTH = 4<br />
INVALID_TYPE = 5<br />
NO_BATCH = 6<br />
UNKNOWN_ERROR = 7.<br />
IF SY-SUBRC = 0.<br />
WRITE:/3(10) YTADIR-DEVCLASS, (15) YTADIR-AUTHOR, (30) YTADIR-OBJ_NAME, (50) YTADIR-TEXT.<br />
FORMAT COLOR 5.<br />
WRITE: '已下载'.<br />
FORMAT COLOR OFF.<br />
ELSE.<br />
WRITE:/3(10) YTADIR-DEVCLASS, (15) YTADIR-AUTHOR, (30) YTADIR-OBJ_NAME, (50) YTADIR-TEXT.<br />
FORMAT COLOR 4.<br />
WRITE: '无法下载'.<br />
FORMAT COLOR OFF.<br />
ENDIF.<br />
ELSE.<br />
WRITE:/3(10) YTADIR-DEVCLASS, (15) YTADIR-AUTHOR, (30) YTADIR-OBJ_NAME, (50) YTADIR-TEXT.<br />
ENDIF.<br />
ENDLOOP.<br />
ENDFORM. &quot;GET_DATA<br />
*---------------------------------------------------------------------*<br />
* FORM GET_TABLE_DATA *<br />
*---------------------------------------------------------------------*<br />
* ........ *<br />
*---------------------------------------------------------------------*<br />
FORM GET_TABLE_DATA.<br />
SELECT DISTINCT * INTO CORRESPONDING FIELDS OF TABLE T1<br />
FROM DD02T WHERE TABNAME IN TABNAME<br />
AND DDLANGUAGE EQ '1'.<br />
SELECT * INTO CORRESPONDING FIELDS OF TABLE TAB FROM DD03L AS A<br />
WHERE A~TABNAME IN TABNAME.<br />
SORT TAB BY TABNAME POSITION.<br />
WRITE:/'字段名','关键字','数据元素','数据类型','长度','小数',<br />
'表检查','参考表','参考字段','字段描述'.<br />
ULINE.<br />
LOOP AT T1.<br />
REFRESH ITAB.<br />
CLEAR YYNAME.<br />
IF DOW = 'X'.<br />
ITAB-FIELD = '字段名'.<br />
ITAB-KEY = '关键字'.<br />
ITAB-ELMENT = '数据元素'.<br />
ITAB-TYPE = '数据类型'.<br />
ITAB-LENG = '长度'.<br />
ITAB-DECIMALS = '小数'.<br />
ITAB-TEXT = '字段描述'.<br />
ITAB-CHK = '表检查'.<br />
ITAB-CAN = '参考表'.<br />
ITAB-CFI = '参考字段'.<br />
APPEND ITAB.<br />
CLEAR ITAB.<br />
ENDIF.<br />
CONCATENATE T1-TABNAME '_' T1-DDTEXT '的表结构如下:'<br />
INTO YYNAME.<br />
FORMAT COLOR 3.<br />
WRITE:/ YYNAME.<br />
FORMAT COLOR OFF.</p>
<p>LOOP AT TAB WHERE TABNAME = T1-TABNAME.<br />
ITAB-FIELD = TAB-FIELDNAME.<br />
ITAB-KEY = TAB-KEYFLAG.<br />
ITAB-ELMENT = TAB-ROLLNAME.<br />
ITAB-TYPE = TAB-DATATYPE.<br />
ITAB-LENG = TAB-LENG.<br />
ITAB-CHK = TAB-CHECKTABLE.<br />
ITAB-CAN = TAB-REFTABLE.<br />
ITAB-CFI = TAB-REFFIELD.<br />
ITAB-DECIMALS = TAB-DECIMALS.<br />
IF TAB-ROLLNAME NE SPACE.<br />
SELECT SINGLE * FROM DD04T WHERE ROLLNAME = TAB-ROLLNAME<br />
AND DDLANGUAGE = '1'.<br />
IF SY-SUBRC = 0.<br />
ITAB-TEXT = DD04T-DDTEXT.<br />
ELSE.<br />
CLEAR ITAB-TEXT.<br />
ENDIF.<br />
ELSE.<br />
SELECT SINGLE * FROM DD03T WHERE TABNAME = TAB-TABNAME<br />
AND DDLANGUAGE = '1'<br />
AND FIELDNAME = TAB-FIELDNAME.<br />
IF SY-SUBRC = 0.<br />
ITAB-TEXT = DD03T-DDTEXT.<br />
ELSE.<br />
CLEAR ITAB-TEXT.<br />
ENDIF.<br />
ENDIF.<br />
APPEND ITAB.<br />
WRITE:/ ITAB-FIELD,ITAB-KEY,ITAB-ELMENT,ITAB-TYPE,ITAB-LENG,<br />
ITAB-DECIMALS,ITAB-CHK,ITAB-CAN,ITAB-CFI,ITAB-TEXT.<br />
CLEAR ITAB.<br />
ENDLOOP.<br />
IF DOW = 'X'.<br />
CONCATENATE P_DIR T1-TABNAME '_' T1-DDTEXT '.' STYPE<br />
INTO YYNAME.<br />
CALL FUNCTION 'WS_DOWNLOAD'<br />
EXPORTING<br />
FILENAME = YYNAME<br />
FILETYPE = 'ASC'<br />
TABLES<br />
DATA_TAB = ITAB.<br />
ELSE.<br />
ULINE.<br />
ENDIF.<br />
ENDLOOP.<br />
ENDFORM. &quot;GET_TABLE_DATA</p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/185691#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Apr 2008 07:58:24 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/185691</link>
        <guid>http://moonfly2004.javaeye.com/blog/185691</guid>
      </item>
      <item>
        <title>ABAP/4编程中用到的系统函数</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/185690" style="color:red;">http://moonfly2004.javaeye.com/blog/185690</a>&nbsp;
          发表时间: 2008年04月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>sy-index：做无条件循环是的次数值. <br />
sy-subrc：系统执行后的返回值，如果为0就表示成功，否则为失败。 <br />
sy-fdpos：子字符串在源串中的位置。 <br />
sy-uzeit：获取系统时间。 <br />
sy-datum：获取系统日期。 <br />
shift string：左移字符串。长度减1。 <br />
concatenate：连接字符串。 <br />
split：拆分字符串。 <br />
search：查询字符串。 <br />
replace：替换字符串。 <br />
condense：删除多余的空格。 <br />
translate：转换字符格式，如将'ABC'转换为'abc' <br />
convert text：创建一个可排序的字符串。 <br />
overlay：用一个字符串覆盖另一个字符串。 <br />
strlen：字符串长度。 <br />
abs：取绝对值。 <br />
cos、sin、tan：取三角函数值。 <br />
acos、asin、atan：反三角函数。 <br />
cosh、sinh、tanh：双曲函数。 <br />
exp：e的幂函数。 <br />
Log：底数为e的对数。 <br />
log10：底数为10的对数。 <br />
sqrt：平方根。 <br />
sign：返回参数符号。 <br />
trunc：返回参数的整数部分。 <br />
frac：输入参数的小数部分。 <br />
ceil：返回不小于参数的最小整数。 <br />
floor：返回不大于参数的最小整数。</p>
          <br/>
          <span style="color:red;">
            <a href="http://moonfly2004.javaeye.com/blog/185690#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Apr 2008 07:56:06 +0800</pubDate>
        <link>http://moonfly2004.javaeye.com/blog/185690</link>
        <guid>http://moonfly2004.javaeye.com/blog/185690</guid>
      </item>
      <item>
        <title>sap 函数小结</title>
        <author>moonfly2004</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://moonfly2004.javaeye.com">moonfly2004</a>&nbsp;
          链接：<a href="http://moonfly2004.javaeye.com/blog/185689" style="color:red;">http://moonfly2004.javaeye.com/blog/185689</a>&nbsp;
          发表时间: 2008年04月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="content">函数名 描述 <br />
SD_VBAP_READ_WITH_VBELN 根据销售订单读取表vbap中的信息<br />
EDIT_LINES 把READ_TEXT返回的LINES中的行按照TDFORMAT=&ldquo;*&rdquo;重新组织<br />
VIEW_MAINTENANCE_CALL 维护表视图 <br />
<br />
函数名 描述 <br />
DY_GET_FOCUS 获得屏幕焦点 <br />
DY_GET_SET_FIELD_VALUE 获得或者设置屏幕字段的值 <br />
<br />
函数名 描述 <br />
F4IF_INT_TABLE_VALUE_REQUEST 显示检索help <br />
READ_TEXT 读取长文本<br />
CONVERSION_EXIT_CUNIT_OUTPUT 单位转换<br />
SJIS_DBC_TO_SBC 全角转半角<br />
SJIS_SBC_TO_DBC 半角转换为全角<br />
CO_R0_CHECK_DECIMAL_POINT 根据单位检查数据的小数位<br />
POSTAL_CODE_CHECK 检查邮政编码 </p>
<p><br />
函数名 描述 <br />
CONVERSION_EXIT_ALPHA_INPUT 全数字则在前面补0<br />
CONVERSION_EXIT_ALPHA_INPUT 和上面相反<br />
GET_JOB_RUNTIME_INFO 获得job相关信息<br />
TERMINAL_ID_GET 获得端末id<br />
DATE_CONVERT_TO_FACTORYDATE 把输入日期转为工厂日历日期<br />
MESSAGE_TEXT_BUILD 把消息转为文本 <br />
<br />
函数名 描述 <br />
POPUP_TO_CONFIRM 弹出确认窗口 <br />
<br />
函数名 描述 <br />
CONVERSION_EXIT_MATN1_INPUT 物料号码转换函数<br />
CONVERSION_EXIT_MATN1_OUTPUT 同上相反<br />
CONVERT_TO_LOCAL_CURRENCY 按照指定日期汇率转换金额为指定货币类型<br />
SSF_FUNCTION_MODULE_NAME 根据form名取得对应的函数名(SmartForm) <br />
<br />
函数名 描述 <br />
DATE_CHECK_PLAUSIBILITY 日期CHECK<br />
cl_gui_frontend_services=&gt;gui_upload 上传到服务器<br />
cl_gui_frontend_services=&gt;gui_download 下载到服本地<br />
SSF_FUNCTION_MODULE_NAME SMARTFORMS输出报表时，生成一个函数名称，然后CALL这个名称 <br />
<br />
函数名 描述 <br />
POPUP_TO_DECIDE_LIST 弹出供选择窗口<br />
<br />
ABAP_DOCU_DOWNLOAD &ndash; 以HTML格式下载ABAP文档。<br />
<br />
ARFC_GET_TID &ndash; 以十六进制形式返回终端的IP地址。<br />
<br />
BAL_* -容纳了SAP的应用程序日志所有的函数模块。<br />
<br />
BP_EVENT_RAISE &ndash;在 ABAP/4 程序中触发一个事件。<br />
<br />
BP_JOBLOG_READ &ndash;获得job log的执行结果。<br />
<br />
CLOI_PUT_SIGN_IN_FRONT &ndash; 将负号前置， SAP默认将负号放在数字后面。<br />
<br />
CLPB_EXPORT &ndash;从内表导入到剪贴板。<br />
<br />
CLPB_IMPORT &ndash; 从剪贴板导入内表。<br />
<br />
COMMIT_TEXT -To load long text into SAP 。<br />
<br />
CONVERSION_EXIT_ALPHA_INPUT - 数字串前补0<br />
example:<br />
input = 123<br />
output = 0000000000000。。。000000000000123<br />
<br />
CONVERSION_EXIT_ALPHA_OUTPUT &ndash; 消除数字串前的0<br />
example:<br />
input = 00000000000123<br />
output = 123<br />
<br />
CONVERT_OTF &ndash; 将SAP文档(SAP Scri