这个会影响销售订单的可用性检查的类别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
另外一个是:
如果选择了X,销售订单的可用性检查就是B,或者A,而如果是空,就是BE.但是这个好像是没有配置的,是系统写死了的。
可用性检查的定义:
销售订单的可用性检查:
1、根据该物料的计划策略中定义的客户需求的需求类型(IMG-生产-物料需求计划-主数据-独立需求参数-计划策略-定义策略)中的需求分类是否定义了可用性检查
2、需求分类(IMG-销售和分销-基本功能-可用性检查和传输需求-传输需求-需求分类)中定义了SD可用量检查的一个按钮(要求-可用量)
以上两步决定了一个策略是否需要做可用性检查,而检查的规则是在以下几步实现的:
1、根据工厂决定检查规则(IMG-销售和分销-基本功能-可用性检查和传输需求-可用性
检查-以ATP逻辑和不按照计划进行的可用性检查-更新拖欠订单的检查规则)
2、结合物料主数据MRP3视图中定义的可用性检查(01/02)来确定可用性检查的具体检
查范围(IMG-销售和分销-基本功能-可用性检查和传输需求-可用性检查-以ATP逻辑和不按照计划进行的可用性检查-执行可用性检查控制)
计划的独立需求的计划和消耗策略:
1、物料主数据MRP3视图中的计划策略决定了物料的需求类型(IMG-生产-生产计划编制-需求管理-已计划的独立需求-计划策略-定义策略)
2、需求类型被分配了需求类别(IMG-生产-生产计划编制-需求管理-已计划的独立需求-需求类型/需求类-定义需求类型并分配需求类别)
3、需求类别决定了改计划策略的计划的独立需求的计划和消耗策略(IMG-生产-生产计划编制-需求管理-已计划的独立需求-需求类型/需求类-维护需求类)
生产订单的物料可用性检查:
1、可以对不同的工厂不同的生产订单类型在订单生产和或下达时期定义可用性是否检查和
检查规则(IMG-生产-车间底价控制-工序-可用性检查-定义检查控制)
2、你可以新增自己的检查规则(IMG-生产-车间底价控制-工序-可用性检查-定义检查规则)
3、你可以定义物料主数据MRP3中可用性检查的可用性检查组(IMG-生产-车间底价控制-工序-可用性检查-定义检查组)
4、针对检查组和检查规则的组合定义不同的检查范围(IMG-生产-车间底价控制-工序-可用性检查-定义检查范围)
(实际生产订单的物料可用性检查是从物料主数据中取出检查组-根据工厂、订单类型、生成和下达时期决定检查规则-根据检查组、检查规则确定检查范围)
可用性检查的定义:
销售订单的可用性检查:
1、根据该物料的计划策略中定义的客户需求的需求类型(IMG-生产-物料需求计划-主数据-独立需求参数-计划策略-定义策略)中的需求分类是否定义了可用性检查
2、需求分类(IMG-销售和分销-基本功能-可用性检查和传输需求-传输需求-需求分类)中定义了SD可用量检查的一个按钮(要求-可用量)
以上两步决定了一个策略是否需要做可用性检查,而检查的规则是在以下几步实现的:
1、根据工厂决定检查规则(IMG-销售和分销-基本功能-可用性检查和传输需求-可用性检查-以ATP逻辑和不按照计划进行的可用性检查-更新拖欠订单的检查规则)
2、结合物料主数据MRP3视图中定义的可用性检查(01/02)来确定可用性检查的具体检查范围(IMG-销售和分销-基本功能-可用性检查和传输需求-可用性检查-以ATP逻辑和不按照计划进行的可用性检查-执行可用性检查控制)
计划的独立需求的计划和消耗策略:
1、物料主数据MRP3视图中的计划策略决定了物料的需求类型(IMG-生产-生产计划编制-需求管理-已计划的独立需求-计划策略-定义策略)
2、需求类型被分配了需求类别(IMG-生产-生产计划编制-需求管理-已计划的独立需求-需求类型/需求类-定义需求类型并分配需求类别)
3、需求类别决定了改计划策略的计划的独立需求的计划和消耗策略(IMG-生产-生产计划编制-需求管理-已计划的独立需求-需求类型/需求类-维护需求类)生产订单的物料可用性检查:
1、可以对不同的工厂不同的生产订单类型在订单生产和或下达时期定义可用性是否检查和检查规则(IMG-生产-车间底价控制-工序-可用性检查-定义检查控制)
2、你可以新增自己的检查规则(IMG-生产-车间底价控制-工序-可用性检查-定义检查规则)
3、你可以定义物料主数据MRP3中可用性检查的可用性检查组(IMG-生产-车间底价控制-工序-可用性检查-定义检查组)
4、针对检查组和检查规则的组合定义不同的检查范围(IMG-生产-车间底价控制-工序-可用性检查-定义检查范围)
(实际生产订单的物料可用性检查是从物料主数据中取出检查组-根据工厂、订单类型、生成和下达时期决定检查规则-根据检查组、检查规则确定检查范围)
可用性检查和需求传递
上一篇/ 下一篇 2008-03-31 22:41:22 / 个人分类:SAP SD
查看( 1029 ) / 评论( 5 ) / 评分( 0 / 0 )
销售订单中的可用性检查Availability Check in the Sales Order
在物料主数据的销售和分销TAB页你能够:在general/plant页的可用性检查字段中输入,应该在订单处理过程中为该物料执行哪个和/或什么类型的可用性检查;
在配置中还有许多的表,可用性检查也依赖于这些表;
销售订单处理中发生可用性检查的条件:
物料需要库存检查;
在配置中为该事务设置了可用性检查;
物料可用日期检查Material Availability Date Check
物料可用日期从交货排程确定;足够的物料需要在该日期可用以在客户要求的交货日期及时地交货给客户;
系统计算该日期,从客户要求的交货日期向后推算;
系统计算捡配,包装,装载和运输货物的时间;
可用性在物料可用日期检查;
工厂检查Plant Check
系统按照下列顺序访问信息以建议标准的交货工厂:
<!--[if !supportLists]-->1.<!--[endif]-->客户-物料信息记录;
<!--[if !supportLists]-->2.<!--[endif]-->Ship-to Party客户主记录;
<!--[if !supportLists]-->3.<!--[endif]-->物料主记录;
如果你在订单输入时手工输入交货工厂,你的输入会覆盖默认值;
在客户-物料信息记录中,你可以为一个客户的某一特定物料维护建议的值;
你可以在物料主数据的销售和分销tab页:Sales Org.1的delivering plant字段找到交货工厂;
你可以在客户主数据的shipping tab页找到交货工厂;
可用性检查控制Control of Availability Check
在配置中,依照你正在使用的事务,你可以设定哪些元素包括在一个可用性检查中;这样,你定义哪种类型的库存(例如,安全库存,转移中的库存或者质量检查中
的库存),哪种向内的移动(例如,采购或者生产订单)以及哪种向外的移动(例
如,销售订单,来自MM的预留)应该包括在检查中;
需求传递Transfer of Requirements
销售和分销与采购之间的交流通过需求来实现;
需求传递的类型能够影响可用性检查;
负责物料计划的员工收到有关系统中的销售订单以及SD需要来交付这些订单的数量的
信息;
订单的物料可以来自内部生产或者外部采购;
如果可用的物料不足,可通过物料计划(Material planning)来创建采购订单;
完全和部分交货Complete and Partial Deliveries
你和客户关于交货达成的协议也会影响可用性检查的结果;
依赖于客户销售订单中的部分/完全交货的协议,你可以交付一张订单用一个完整的交货或者几个部分交货;
在一个完全交货中,所有条目的订购数量都被交付了;
对于部分交货你可以将一张订单的条目或者数量分配到几个交货中;
部分交货协议Partial Delivery Agreement
控制完全/部分交货的指示符从客户主记录中带出;条目层的建议来自客户-物料信息记录,如果那里已经维护了客户和物料的协议的话;这些指示符可以在销售订单
输入过程中手工修改;
客户可能要求,例如,一个完全交货意味着销售订单中的所有条目应该一起被交付;如果客户同意一个部分交货,该订单可以对应几个交货;
如果你选择“完全交货”,你能够确定整张订单中的所有条目必须一起交货;在条目层次,你也可以决定你是否可以分割交货数量;
存在以下部分交货协议:
_允许部分交货;
A输入一个数量不等于0的交货;
B仅创建一个交货(也含数量=0);
C只能执行完全交货;
D首选并发交货;
案例1:确认要求的交货日期Case1:Confirmation on Required Delivery Date 系统使用交货排程来检查货物是否在物料可用日期可用;
可用性检查包括:
当前库存;
计划的向内移动(例如采购订单,采购请求,计划订单);
计划的向外移动(例如存在的销售订单,交货);
在案例1,关于向内移动的情况如下:存在的向内移动有:
库存:100pc;
存在的采购订单有数量50pc和60pc;
下列未来的向外移动也存在:
存在销售订单有数量100pc,40pc,50pc;
在该向外情况中你输入另外一张10pc的销售订单;系统基于客户要求的交货日期执行交货排程(后向排程)并确定物料可用日期;然后为该日期运行可用性检查;案例1的结果:确认要求的交货日期Result for Case 1:Confirmation Required Delivery date 可用性检查显示系统可以为要求的交货日期确认这10pc;
案例2:确认一个稍后的日期Case 2:Confirmation for a Later Date
案例2的最初情况和案例1相同;
然而在本案例中,客户要求完全交货;
在向外的情况你输入另外一张20pc的销售订单;系统基于客户要求的交货日期执行计划排程(后向排程)并且确定物料可用日期;然后为该日期运行可用性检查;案例2的结果:确认一个稍后的日期Result for Case2:Confirmation for a Later Date 在库存不足的事件中,系统使用可用性检查和交货排程来确定下一个可用日期,在该日期可以为客户确认货物;
因为有一个完全交货协议,数量不可以分割;
你需要为稍后的日期确认这20pc;
系统使用基于物料可用日期(前向排程)的交货排程来计算20pc的确认日期;
案例3:部分交货Case 3:Partial Deliveries
如果客户和销售凭证类型允许,要求的销售订单数量也能够被分割到几个部分交货;
案例3的情况与1和2相同:
在案例3,客户要求尽快交货并且允许你必要的话分割交货数量到部分交货中;
案例3的结果:部分交货Result for Case 3:Partial Deliveries
当没有足够的库存,系统使用可用情况和交货排程来确定下一可用日期,在该日期能够确认客户的货物;
“允许部分交货”协议意味着数量能够被分割;
你能够为2个稍后的日期确认这20pc,每个日期10pc;
系统使用物料可用日期和交货排程来计算2个部分交货,每个10pc;
案例4:带补货提前期的检查Case 4:Check With Replenishment Lead Time 你可以考虑所有的向内和向外的移动;推荐的是,你只在补货提前期的末尾执行一个可用性检查;
补货提前期可以为每个物料指定;例如,贸易商品:计划交货时间+收货处理时间;最终产品:内部生产时间;
系统假定物料最晚将会在补货提前期的末尾可用;
可用性检查仅在补货提前期的末尾运行;
如果你在案例4中执行不带补货提前期的可用性检查,结果和案例2一样;客户要求一个完全交货;你不能使20pc可用直到最后那张60pc的采购订单到达(向内移
动)的同一天;
然而,如果系统使用补货提前期执行可用性检查,你可以使20pc在50pc的采购订单到达的日期可用;只有在补货提前期内的向内和向外移动才包含在该检查中;拖欠订单处理Backorder Processing
满足下列条件的订单条目是拖欠订单:
一个订单条目的数量没有完全确认;
订单条目的要求的交货日期不能遵守;
有两种类型的拖欠订单处理:
手工拖欠订单处理:
你可以使用拖欠订单处理来为物料列出销售凭证并且参考确认手动地处理;这意味
着ATP数量能够被重新分配并且任何不足会被清除;
通过重新排程
你能够在自动重新排程中使用交货优先级(为销售订单从客户主记录中带出)作为
一个排序标准;
控制可用性检查和需求传递Controlling Availability Check and Transfer of Requirements 在需求传递和可用性检查中,系统区分定购时间和交货时间;
对两个时间点,物料的可用性检查组决定是独立的还是全部的记录作为需求传递到MRP,如果需求传递执行的话;对特殊库存的需求记录基本上都是独立需求;
系统为两个时间点确定在可用性检查中货物的哪些向外和向内移动会被考虑;包含特殊库存(寄售,可返回包装,按订单库存)的事务被单独立控制;存在哪些特殊
库存通过条目类别确定;在按订单生产的案例中,需求类的科目分配类别E确
定实际上包含按订单库存;
你使用需求类来为SD(orders,deliveries)全局地确定是否将为物料传递需求以及是否将会执行一个可用性检查;两个功能都可以通过计划行类别为相应的事务设置
为非激活;交货专门由需求类控制;
例子:计划的独立需求-在订单中按订单生产Example:Planned independent Requirements- Make-to Order in the Order
分配给物料类型的策略组将计划作为主要策略;如果销售订单中没有协议别的东西,需求根据该策略传递;计划策略确保物料需求是预先计划的(计划的独立需求类
别VSF);后续的计划的独立需求(KSV)针对计划消耗这些预先计划;
如果为需求类激活了可用性检查,可用数量计算来自库存,计划的收货,向内移动的货物和向外移动的货物;可用性检查规则控制在可用性检查中什么被评价为货物
的向内移动和向外移动;
如果在销售的事务处理中设置了计划分配;并且如果可用性检查通过需求类设置为非激
活的,则可用性检查针对生产计划执行;如果物料的计划的独立需求不能覆盖
订单数量,则计划分配(planning assignment)控制销售订单中屏幕的显示;该
屏幕与可用性控制屏幕相同并且相同的规则对采用检查的结果有效(one-time
delivery,delivery proposal,full delivery);
除了计划主策略,策略组还允许你为物料执行按订单生产;为此,你必须到订单的procurement预览屏幕并在相应的条目中替换默认的需求类型KSV为策略(KE)
允许的需求类型;
例子:计划的独立需求-按订单生产/报价单Example:Planned indep.Requirements –Make-to Order/Quotation
相应的流程通过计划行类别影响需求传递和可用性检查;这意味着,例如,通过计划行类别来使需求传递和可用性检查无效;
SD模块概念与术语
拖欠订单(Backorders)超过交货日期还没有交货的订单。
线路(Route)
1.影响运输时间;
2.可以分段:例如,选通过铁路运到港口A.然后通过水
路从港口A运到港口B,然后从港口B运到客户处。
3.也可以不分段。
4.Transit Time:在Route中定义。
5.装卸Time:在Shipping Point 中定义。
6.Lead Time:在route中定义
7.Pick/Pack Time:在Shipping Point中定义
向外交货(Outbound Delivery):P253/430
1.交货日期 Header 向外交付日期:决定Item向外交付date. Item向外交付日期:可以根据实际情况改变。
2.集中创建向外交付集中创建向外交付时,会产生一个向外交付Group.
3.向外交付确认:定制是否需要手工确定。
4.在销售定单中不能直接修改Confirmed Qty.
5.确认向外交付:Pick Qty<向外交付QTY,且不再进行负外交付:销售定单状态为Processing.
Pick Qty<向外交付QTY,且不再进行负外交付:下次再创建一个TO再向外交付,销售定单状态会变为Complete.
SD模块主要功能:P256/430
1.销售支持(Sales Support)
2.销售(Sales)
3.装运和运输(Shipping and Transportation)
4.出具发票(Billing)
5.信用证管理(Credit Management)
6.外贸/关税(Foreign Trade/Customs)
7.销售信息系统(Sales Information System)标准销售订单的业务流程:P257/430
1.创建Quotation: VA21
2.根据Quotation创建Sales order: VA01 3.创建Outbound向外交付:VL01N
4.创建拣配:
4.1执行事务代码VL01N
4.2输入outbound向外交付号码,按回车
4.3点选“拣配”页。
4.4在“Picke quantity”栏输入拣配数量。
4.5单击SAVE
5.过账发货:VL02N
6.创建出具发票document:vf01
退货销售订单的业务流程:
1.根据出具发票Document创建Sales order:va01
1.1执行事务代码:VA01
1.2输入如下栏位资料:
1.2.1Order type:ZRES
1.2.2Sales organization:
1.2.3Distribution channel:
1.2.4Division:
1.2.5Sales office:
1.2.6Sales group:
1.3单击“Create with reference”
1.4点选“Billdoc”页,然后输入出具发票document
号码,再单击“copy”按钮。
1.5输入ORDER reason
1.6从顶端菜单选择:Goto---Header---Partner
1.7输入Sales employee
1.8单击save
2.创建Outbound向外交付:VL01N
3.过账发货:VL02N
4.创建出具发票document:vf01
定制主合同的主要步骤:P261/430
1.定义参照需求。
2.定义参照过程。
3.定义销售单据类型。
4.创建主合同,然后创建层次合同并把它分配给主合同。
5.激活事件联接。
6.维护代理的分配。
定义并分配冻结原因:
1.定义冻结原因:OVAS
2.将冻结原因分配到销售订单类型:OVAL
3.将冻结原因分配到客户主记录:VD05
定制传输需求:P263/430
1.定制步骤:
1.1定义需求分类
1.2定义需求类型
1.3使用事务的需求类型确定:分配需求类型到事务中。
1.4定义每一个计划行类别的过程。
1.5交货冻结中的冻结数量确认。
1.6维护需求传达室输的需求。
1.7维护采购和组装订单的需求。
2.备注:传输需求:把销售订单的交货日期和交货数量传输到物料需求计划的过程叫传输需求。
定制可用性检查:
1.定义检查组。
2.定义其他用户的物料块(应该是物料冻结)
3.定义检查组缺省值。
4.执行可用性检查控制:
4.1检查规则:在IMG---生产---销售与经营计划(SOP)---主数据---指标的有效性规则分配---维护可用性检
查的检查规则中定义。
5.按需求分类定义过程。
6.定义每一个计划类别的过程。
7.确定每一个交货项目类别的过程。
8.更新拖欠订单的检查规则。
9.定义缺省定制。
定制出具发票:
1.出具发票凭证:
1.1定义出具发票类型:IMG---销售和分销---出具发
票---定义出具发票类型
1.2维护开票凭证的复制控制。
1.3发票清单。
2.出具发票计划
2.1定义开票计划类型
2.2定义日期描述
2.3定义和分配日期类型
2.4为开票计划类型维护数据建议。
2.5分配开票计划类型到销售凭证类型。
2.6位项目类型分配开票计划类型。
2.7定义确定日期的规则。
3.回扣处理
3.1定义协议类型
3.2定义条件类型组。
3.3分配条件类型/表到条件类型组。
3.4将定价类型组分配给回扣协议类型。
3.5激活回扣处理。
3.6定义物料回扣组。
3.7重新计算回扣处理的小计。
3.8创建出具发票索引。
3.9比较回扣基数并修正统计收益。
4.公司间出具发票
4.1定义公司间开票的订单类型。
4.2按地点分配组织单位。
4.3按销售组织定义内部客户号。
销售订单的价格确定方法:
1.标准的R/3系统根据碱种价格来确定销售订单的销售价格:
1.1物料价格(Material price)
1.2价格清单类型(price list type)
1.3客户价格(Customer-specific price)
2.在标准的R/3系统中,确定销售订单的价格的方法:2.1首先录找是否有客户价格
2.2然后再寻找有效的价格清单类型;
2.3最后寻找物料价格
3.可以通过定制存取顺序改变标准的确定销售订单价格的方法。
4.物料价格,价格清单类型,客户价格都是通过VK11创建。
5.通过定制不同的关键字组合来区分VK11创建的是物料价格,价格清单类型还是客户价格。
SD--关于销售订单可用性检查控制的检查规则和检查组的确定收藏
1)首先读取物料主数据(MARC)获取可用性检查设置(MTVFP),填写到VBAP-MTVFP
该字段来自物料主数据“销售:一般/工厂”-》“一般数据”-》“可用性检查”
2)首先在单元FV45VF0B_BEDARF_LESEN代码里设置可用性检查的初始(TMVFP-OBVFP)
代码摘抄如下
DA_AUFRUFER = CHARA.
IF TVAK-LISOF NE SPACE. "立即交货
IF XVBUK-VBELN NE VBAK-VBELN.
PERFORM XVBUK_LESEN(SAPFV45K) USING VBAK-VBELN.
ENDIF.
IF XVBUK-LFSTK NE CHARB AND XVBUK-LFSTK NE CHARC.
DA_AUFRUFER = CHARB.
ENDIF.
ENDIF.
在同个这个值调用
CALL FUNCTION 'RV_REQUIREMENT_GET'
EXPORTING
AUFRUFER = DA_AUFRUFER
MATERIAL = US_MATNR
PRUEFGRUPPE = US_MTVFP
WERK = US_WERKS
BELEG = US_VBELN
POSITION = US_POSNR
VPMAT = US_VPMAT
VPWRK = US_VPWRK
PZMNG_LOESCHEN = DA_KORRI
KORR_AKT = US_KORRI
KORR_ALT = DA_KOPIERMODUS
CALL_MODUS = DA_CALL_MODUS
NICHT_SPERREN = DA_NICHT_SPERREN
VBTYP = VBAK-VBTYP
IMPORTING
SUMMIERUNG = SUMBD
MAT_GESPERRT = DA_GESPERRT
TABLES
AVBBD = AVBBD
XMVERF_POS = XMVERF_POS
XQUOT_VB = XQUOT_VB
XQUOT_CH = XQUOT_CH
EXCEPTIONS
MARC_MATNR_GESPERRT = 01
MARC_VPMAT_GESPERRT = 02
ENQUEUE_FEHLER = 03.
3)在RV_REQUIREMENT_GET函数中根据读取的可用性检查设置读取可用性检查控制(TMVF)和可用量检查冻结(TMVFP)
PERFORM TMVF_SELECT USING PRUEFGRUPPE AUFRUFER CHARX SY-SUBRC.
3.1)读取可用量检查冻结(TMVFP)的代码摘抄
代码单元:LV03VFT2
FORM TMVFP_SELECT USING US_MTVFP
US_OBVFP
US_ERROR
US_SUBRC.
US_SUBRC = 0.
IF TMVFP-MTVFP NE SPACE AND TMVFP-OBVFP NE SPACE.
CHECK: US_MTVFP NE TMVFP-MTVFP OR
US_OBVFP NE TMVFP-OBVFP.
ENDIF.
* Wenn in TMVF-ACENQ gesetzt wird TMVFP eigentlich nicht gebraucht,
* verwendet wird allerdings OBVFP als Aufrufer.
* Ebenso wenn VERPN (keine Pr黤ung) gesetzt
IF ( TMVF-ACENQ NE SPACE OR"物料在具有传递需求的可用性检查中冻结TMVF-VERPN NE SPACE ) AND "没有可用性检查
US_MTVFP NE SPACE AND
US_OBVFP NE SPACE.
TMVFP-MTVFP = US_MTVFP.
TMVFP-OBVFP = US_OBVFP.
TMVFP-VFPSP = SPACE.
ENDIF.
CHECK TMVF-ACENQ EQ SPACE AND TMVF-VERPN EQ SPACE.
IF US_MTVFP EQ SPACE.
US_SUBRC = 4.
ELSE.
SELECT SINGLE * FROM TMVFP WHERE MTVFP = US_MTVFP
AND OBVFP = US_OBVFP.
IF SY-SUBRC NE 0.
US_SUBRC = 4.
ENDIF.
ENDIF.
IF US_SUBRC NE 0.
IF US_ERROR NE SPACE.
CLEAR: TMVFP.
MESSAGE I305(VV) WITH US_MTVFP US_OBVFP.
ENDIF.
ENDIF.
ENDFORM. "TMVFP_SELECT
4)、在代码单元LV03VFA7中形成(PRREG)检查可用性检查的规则,代码摘抄如下:
p_atpcs-prreg = tmvfp-obvfp.
p_atpcs-prreg+1(1) = p_mverf_pos-sobkz. "SOBKZ:特殊库存标识
IF p_mverf_pos-sobkz NE space AND
p_mverf_pos-sobkz NE chare AND
p_mverf_pos-sobkz NE charq.
p_atpcs-kunnr = p_mverf_pos-kunnr.
ELSE.
CLEAR p_atpcs-kunnr.
ENDIF.
5)这样可用性的检查控制的两个因素就都决定出来了检查规则和检查组(MTVFP prreg),这样就可以读取T441V表,并用于可用性检查。
6)相关TCODE
OVZ2
OVZ1
OVZ9
本文来自CSDN博客,转载请标明出处:/compassbutton/archive/2009/05/26/4217947.aspx。