zoukankan      html  css  js  c++  java
  • MM PO 相关配置

    一个叫搅肉机的家伙说,那个杀猪杀鸭的不就一ABAPer吗?搞的很没面子,你说宰SAP跟我村阿毛叔杀猪有什么本质区别不都是为人民币服务吗?

    先是听说有学校要搞什么SAP专业,可能需要一些教师,未知是否开设了屠宰课程,实际上我准备了一大筐猪毛和骨髓准备毛髓自荐去做个首席屠宰教师,简称CZO(首席宰宰官). 我觉得骨髓很重要,听说现在有人经常谈及什么管理精髓,我总觉得他们是否搞错了,哪有啥精髓?我觉得实际应该就是精肉骨髓,简称精髓,你要说精肉骨髓别人说你这人好吃嘴馋.

    clip_image002

    图1-[1]:Tcode:OMH6

    定义PO编号范围,实际上大部分的编号范围都可在Tcode SNRO定义,如果你很熟悉number range object,输入它.一个很头疼的问题是跳号问题,进入SNRO后选EDIT->Set-up buffering->no buffering,可以非常有效地阻止跳号问题但是应该不能杜绝,一些突发情况比如server在远地存取时断电等依旧会有跳号问题.

    一个企业的需求是希望PO的号码前两位和采用内部编号的采购物料相同,你设置它.

    图1-[2]:Tcode:OMEC

    clip_image004

    你需要建立什么PO类型?在图2中根据需求建立了ZPO(normal PO,只允许item category K,L即费用类和外包类PO,将transfer order U拿掉,因为ZITO,ZRIT,ZSTO,ZRST是专门的transfer order类型),ZITO和ZRIT是公司间的转工厂order type,注意到图例2-[2]的T表示使用该order type时,出现的物料供求方不是vendor而是supplying plant.

    如果你将ZPO允许U可以不建立专门的STO类型,建立专门的STO type的一个好处(当然还有个好处就是报表查询可以By PO type分开)是在定价Define Schema Determination时可以分standard purchase orders和stock transport orders给不同的取价方案,这个很有用,我碰到的一个问题是一个运输费用condition在STO是强制输入(Purchase dept经常是忘记输入某些关键condition type,在本书的condition部分有相当多这样的实例),在standard PO是可选的或者根本不需要的,如果没有分开就处理就比较麻烦.

    图1-[3]:Tcode:OMEU

    SE16:T160M可直接将06 207设置为error, 或到Environment Data->Define Attributes of System Message(tcode: OME0,我觉得很奇怪,SAP似乎在SAP47比较喜欢使用那个根本毫意义的SPRO,这个tcode都扔进垃圾箱了,SAP46用的好好的),当PO price和material legal price差异超过一定比例时会显示错误提示,这个价格似乎是PO的actual price(PB00和一些海关运输费用之和再减一些折扣什么的,),不是PB00.

    我觉得这样设置06207 Error不大地道,假设PO价格确实浮动很大经常超过10%,总不能老更改消息况且这是个配置,所以还是采用PO 审批,价格一旦更改到一比例必须重新审批.

    可是审批要几个老大搞来搞去也不方便,还是设置错误吧,可惜通常在PRD里SE16:T160M不能修改,有个方法是使用SE16:V_160M(你要做的是SE16输入TVDIR,TABNAMEV_160M后将该条记录的FLAG打上X,道理很简单,任何后台配置的东西大部分都是View,就是说配置不过是写一些记录到一个或多个表里而已,这些表组成一个view默认flag是空表示不允许修改,打上X就好了,只要有SE16的权限什么配置都可在PRD直接进行,关于此请看本书的专门部分)

    另一个SE表示最大的现金折扣不能超过多少,消息06 231,如有需要你可设置成Error(SE16:T160M)通常我比较喜欢使用百分比而将绝对值差异禁止.

    clip_image006

    图1-[4]:Tcode:CT04|CL02|OMGS

    PO release详细请看本书的实例运用分类系统

    图1-[5]:Tcode:OMF4

    clip_image008

    假设你想让user开PO时价格不能输入,必须从info record PB00带出(PB00也设置不能改,要改就得找负责info record维护的人一般就不能随便修改价格了),为此你在如图4-[1]设置price and price unit为display,虽然是ME21N对ME22N同样有效.

    这时候小庖过来说,我可使用ME22维护,ME22没设置, 我回答说,MD,找漏洞你真是高手,要是让你小子做采购止不定收货后你要提高多少次价格整走公司多少零花钱.

    我不是开玩笑的,我真的碰到过这样的事情,某公司有个非常长期的订货PO,比如vendor答应5.1后开始降价,buyer硬是搞到5.9号才开始修改PO价格你能咋的.话有说回来,这年头有捞谁不捞,白捞谁不捞?

    图1-[6]: Tcode: SPRO|TEFK|SPRO|TEFP

    关于PO文本请看本篇的PO打印编程

    图1-[7] :Tcode: OMGN|OMGP

    比较两种STO

    图1-[8]:

    clip_image010

    如果你觉得人家SAP推荐的NL长的还好看就用着先.

    图1-[9] [10] :

    图1-[11] ::

    图1-[12] ::

    比较两种STO

    Tcode: OMGN|OMGP

    通常有所谓的intra-company(公司间)和cross-company(跨公司)两种库存转移单,为了是读者更清晰了解,我特地在新装的一台SAP测试机上配置这两种类型的STO.

    实际上我都觉得不大好意思讲这个东西,因为超级简单,我见过配置简单的,但是也没见过这么简单的培植,就两步.

    图例1-1[1][2],为了区别开我将其它3步设置成[A][B][C]

    clip_image012

    图例1-[1]:Plant

    clip_image014

    让我们假设这样一个场景,plant 5100|5101同属于中国分公司company code 5100,plant 4100属于集团公司的美国分公司company code 4100,假设plant 5101实际位址在一个美国专业快递公司的仓库,担当company code 5100国外销售的一个中转点.

    产品由plant 5100转向plant 5101(公司内部工厂转移)和plant 4100(跨公司工厂转移),设置如下.

    clip_image016

    为此你必须建立customer 4100和5101 with如图例3的sales org, distib. Channel和division.

    如图例4是customer 5101的一个画面.

    clip_image018

    图例4-[4]特别提示一下shipping condition(01)和General data tab页的country key CN和trans. Zone 0000000001,这个将在route determination用到.

    对于cross-company的STO,还需要建立一个vendor,假设也叫5100,两步要注意.

    (1) 通常我们会专门定义一个customer(比如上面的customer 5100)|vendor account group,这里只说vendor account group表示集团间业务交易的vendor|customer,这个很有必要以区分开其它类型的customer|vendor.

    我比较赞成将集团交易的这类customer,vendor直接建立成和company code同名(设置外部编号),这样在使用OBYA定义公司间清帐也好看一些(详细请看本书的清帐设置和实例).

    SE16:V_T077K 定义account group field 时注意 vendor address tab页的purchase data

    的add. Purchase data的plant不要隐藏,如图例5.

    clip_image020

    (2)如图例6,建立采购组织4100,company code 4100的vendor 5100,并在purchase data的add. Purchasing data的plant assignment填上5100.

    clip_image022

    SAP有个vendor account group 是0007 plant,意思似乎是说用supplying plant做vendor可是这玩意要配置partner,弄的很火,所以就直接参与copy vendor account group 0001了.

    一个公司代码里面似乎你只能将一个vendor assign到同一个plant里.

    图例1-[2]:Assign delivery type/checking

    clip_image024

    为了说明问题,我直接使用SAP default的NB和UB(transfer order类型),plant 5100-plant 5101使用UB(item category 自动带出U),plant 500 transfer to 4100使用NB手工填写PO item category U.

    图例1-[A][B]:Checking rule|Define checking rule

    你可决定是否需要可用性检测而已,[A]你定义一个checknig rule,[B]你将availability check coutrol(OVZ2定义,更详细关于ATP请看本书相关部分)和checking rule连接起来,如8,我们看到图例7-[2]使用的就是checking rule 01.

    clip_image026

    图例1-[C]:Purchasing document type

    clip_image028

    图例1-[A][B][C]实际上可以不管它,这[C]步可设置STO对应的purchase order type 类型,如图例9,在实际业务中可能你有很多PO doc. Types,你家公司做MM的非常粗心经常弄错PO 类型,为此你设置此步,OME0将Message no. 06 674设置成E,这样搞错了PO type就会出现错误.

    图例9-[2]表示STO使用一步过程,我们知道一般没上WM的,STO MM处理的步骤是(1)VL10B (2) VL02N (3)MIGO,(1)(2)是supplying plant做的,选上例9-[2]receiving plant 的MIGO在(2)VL02N就自动做了.

    在本例实际上绝对不允许这样一步就搞定,因为5100做goods delivery好要相当长时间才能到USA,所以不画蛇添足,如果你家企业需要这功能就选上它.

    公司间transfer order

    clip_image030

    如果你在开公司时shipping data tab页没有出现,请检查如下:

    (1) 你是否已经建立company code 5100,sales org 5100,distr. Channel 02建立了STO plant 设置的customer 5101(物料division可以不同,一个物料只能有一个division)

    (2) 需转移的材料raw01是否已经维护了sales org 5100,distr. Channel 02,我觉得应该是plant

    5100的sales视图,如果你觉得搞不清,就同时维护5100/5101的sales view .

    如果还没出现shipping data tab页,不对呀,那就太没天理了,这样都赖着出不来.

    STO的计价方案的RM2000 P101的stastics最好选上,否则公司间的STO的P101带不出来,有个问题是假设plant 5100在先开STO到5101时当时还未维护单价也没有库存,此时P101 0,然后才有收货动作,此时STO已开,buyer为updateP101,完了,5101 0价格收货.

    clip_image032

    VL10B

    clip_image034

    如果是一步STO,做VL02N时就将MIGO顺便做了,这样VL02N和MIGO对应同一张会计凭证.

    clip_image036

    clip_image038

    VL02N

    clip_image040

    公司间PO还要MIRO,是的,goods receipt不用,关税运输费用必须发票校验的,MIRO根据2 planned delivery costs发票校验.

    什么时候使用STO?

    之所以不使用MB1B transfer material而使用intra-company transfer order的原因(

    1) 你要加些运输费用,特别当两个plant属于不同的profit center要单独核算利润时尤其重要

    2) 如你使用MB1B 311是不能实现的,如果你上了CO-PCA,在建立plant时必须考虑这点,如果只建立成storage location,将来再要加运输费什么的到profit center就难.关于如何建立plant你必须结合MM,PP,CO-PCA多方面考虑,请看本书的MM组织架构建立讨论

    跨公司transfer order

    clip_image042

    如果从plant 5100 transfer to 4100跨公司STO的shipping data为出现请按如下检查:

    (1) 是否维护好物料plant 4100的采购视图,plant 5100, sales org 5100, distrib. Channel 02的sales view .

    (2) 必须同时维护plant 4100|5100的相关accounting view否则会显示account assignment什么必须的,想一下也是,如果物料单价都不维护那算那门子事

    (3) 必须维护(XK01)purchase org 4100,company code 4100的vendor 5100,并且该vendor一定要在additional purchase data维护plant assignment 5100

    如果这样搞法shipping data tab页还不出来,估计你就不大适合做MM了,做别的module吧,其它的更简单.

    那个shipping 和route determination也要讲一下.

    最简单的方法是该维护的采购销售view全给弄上.

    KE52 assign profit center to company codes

    Cross-company的STO你必须OBYA定义公司间清帐.

    clip_image044

    clip_image046

    clip_image048

    clip_image050

    clip_image052

    一个村干部5个人主动捐肝.,还退休了,有人愿意舍身取义死而无憾.想现在那么多大小官员在位就有百姓巴不得其倒台,又如何哉?

    就算混到要饭,只要一息尚存,人生就有希望,人生就未失败.

    运用分类系统

    clip_image054

    clip_image056

    clip_image058

    他MD的艾克斯XX,shipping和route hide在logistics execution,好难找.其实配置极其简单.

    小时后我也喜欢到处藏东西,显示自己很厉害,要不大家一看就明白谁还要培训呢?全国人民不都是顾问了?最后邻居家的小凤干脆回家吃饭了,害的我饿着肚子白躲了好几个小时,搞的我很没面子

    我烦恼相同的配置这放一点那放一点的,坦率地讲,要是我将东西这放一点那放一点的,肯定要被LP骂个半死.

    clip_image060

    clip_image062

    如果你家的shipping data的route 没有出现,请按下面排解.

    (1) 检查STO 配置的customer master data的country key和Transportation zone.(General data address tab页),这个是上图的dest. Country /Zone

    (2) 检查customer 主数据的shipping contion(这个可设置为必输),在sales area data的shipping data页上,输入shipping condition,这个对应上图的SC.

    (3) 在上面刚刚讲过, SE16:V_TVST_RF,Maintain Country And Transportation Zone For Shipping Point,就是上图的dep. Country Zone,这样两个zone呀zone的就link上了,你设置一个proposed route.

    如上图,我们看到的proposed route是000001,这就是为什么上面我开公司间和跨公司的STO默认带出的的route是000001,我觉的这个很难看,就改成000043,下次STO带出的就是000043了.

    关于shipping ,route还有啥时到达时间等等,反正也就那些东西,请参考本书相关配置

    还有啥第三方采购,跨公司销售,算了不浪费时间了,也就那些东西改天再说.

    小庖跑过来说,老屠宰一下WM,Kao,再也不搞MM了,太没劲了….

    Super BOM(Configurable material BOM)的应用

    熟悉make-to order之前,先说一下什么是Super BOM,因为一般make-to order和这该死的Super BOM,变式(配置)BOM通常总鬼混在一起.

    降低材料成本(11%-40%)、提高生产率(6%-45%)、加快资金周转(8%-3
    5%)、提高用户服务水平(10%-27%)?要是让我吹,干脆就一口咬定俺家SAP不但能滋阴壮阳关还能延年益寿得啦.

    一 Classification System(分类系统)简介

    clip_image064

    顾名思义,分类系统就是根据一定的特征组合相似对象从而使你能快速查找到所需的对象.SAP预定义了许多对象类型你几乎不要做,实际上应用分类系统基本上不用做任何或很少设置就可直接使用

    首先明白这几概念,请看1[4]-[6] .(MD,自己看帮助去)

    1. Object(对象)

    物料,供应商,客户,批次,BOM等都可作为可分类的对象

    2. Object key(对象关键码)

    3. object type

    4. class

    5. class type

    6. characteristic

    7. class/characteristic group

    [1]Define Default Settings

    状态 1 (released)被预定义给所有的特征(characteristics),除非你有特殊需求,SAP推荐不做任何更改

    [2]Define特征组

    [3]Define特征状态

    clip_image066

    典型的状态如图2

    [4]

    [5]

    [6]

    二 Super BOM和配置BOM应用举例

    我做过的一个CTO的项目是.算了,还是假设你为电脑厂家设计一CTO项目,客户通过网站选定主机,机箱和产品包装材料,假设每种有3中选择,如使用普通的BOM,就有3*3*3中BOM组合,实际上可能是9*9*8或更多选择.

    客户通过网站选定机型后通过程序Link到ERP系统,自动产生material number和相关BOM然后汇集到生产部门生产.

    典型的应用还发生在制鞋制衣行业.

    1.建立特征(Tcode:CT04)

    如图1.

    clip_image068

    Restrictions是做限制的,比如选择了ZST_ZJ特征不能用于某Class type,这很好理解.

    clip_image070

    上面建立了特征ZST_ZJ(主机)包含3个特征值ZZJ1-ZZJ3同样地,建立特征ZST_BOX包含特征值ZBOX1-ZBOX3,特征ZST_PAK包含特征值ZPAK1-ZPAK3.

    建立类(CL01/CL02/CL03)

    clip_image072

    现在的问题是如何将Characteristic/Class和material master data/BOM master data 挂沟.

    为了不混淆视听,通常的做法是各层物料尽量采用class名称,特征值(特征这层似乎不要建立物料)的名称,为了方便理解,假设配置BOM下面再没有可配置子BOM,于是,本例你需要建立的material No是ZST_MODEL(Super BOM top-level material),ZZJ1-ZZJ3,ZBOX1-ZBOX3,

    ZPAK1-ZPAK3 .

    为了方便理解,再假设每个主机,机箱和包装材料都由3个material component,比如ZZJ1由970000-970002组成,ZZJ2由970003-970005组成,ZZJ3由970005-970008组成. 依此类推,机箱ZBOX1-ZBOX3和包装材料ZPAK1-ZPAK3的material component从970009-970026(假设每组件有3component组成).

    建立物料(Tcode:MM01)

    ZST_MODEL

    (1)Basic data2 的Material is configurable一定要选上.表示其是可被配置的物料

    (2) 在Classification view选上分类ZST_MODEL(Class和物料同名),带出上面所设定的三特

    征值.

    (3)MRP1 view 的MRP type可设置成ND不跑MPRRP1 Part,ement rable

    (4)MRP2 view Special procurement 设成50,就是说通常这料是Phantom Part,关于phantom part请看例1-Phantom Part的使用.

    clip_image074

    ZZJ1-ZZJ3,ZBOX1-ZBOX3,ZPAK1-ZPAK3

    根据实际需要,如果你需要进行库存管理,和普通物料一样,如不需要可简称phantom part.

    注意:这层物料并不需要建立Classification .

    建立Super BOM(CS01)

    clip_image076

    从图5-[1]进去维护Object Dependency(注意在创建OD时不要直接双击item进去维护).

    clip_image078

    图6-[2]Rltnship使用BOM material加Item.然后到图6-[1]维护Dependency,Dependency维护如图7.

    clip_image080

    图7-[1]$ROOT表示跟特征,$ROOT.ZST_ZJ表示其下的特征ZST_ZJ(请回顾3-[3]), = ‘ZJJ1’ ,ZJJ1表示特征ZST_ZJ的特征值ZJJ1(请回顾2-[3]),这样就将item component ZZJ1和特征ZST_ZJ的特征值ZZJ1 link上了.

    同样地,建立好图5-[2]的其他component的OD ,比如ZBOX1的SEL. Condition是

    ZST_MODEL_ZBOX1,Dependency是$ROOT.ZST_BOX = ‘ZBOX1’ . ZPAK1 Condition是

    ZST_MODEL_ZPAK1,Dependency是$ROOT.ZST_PAK = ‘ZPAK1’ 等.

    *如需要你也可使用$ROOT.ZST_PAK in ‘ZPK1’.

    至此,一个超级BOM就建立好了,下面假设你做了一电子商务网站,允许用户在3种主机3种机箱3种包装选择.选择好了自动建立Sales part和BOM,为此你建立sales part ZMODEL1.

    建立configurable profile (Tcode:CU41)

    为配置物料建立configurable profile .

    clip_image082

    进去后class type 选300,保存就为configurable material ZST_MODEL建好了configurable profile .

    (1) 建立sales part MM01

    如图8,在basic data2 view中选择Configurable material ZST_MODEL,然后进classification view.

    clip_image084

    到MRP3 view,如图9-[3],只要简单按”copy x-plant configuration”按钮就可,接下来在使用CS40对configurable material ZST_MODEL做个link,sales model物料ZMODEL1的BOM就有了,你必须使用CS11/CS12/CS13等查看而不能使用CS02/CS03查看配置BOM.

    *假设在sales model物料ZMODEL1选特征值是ZZJ1, ZBOX1,ZPAK1,如图8-[5]

    clip_image086

    (2) Link to Super BOM (Tcode: CS40)

    CS40 将ZMODEL1和Configurable material ZST_MODEL link 上

    clip_image088

    如图11-[1],单击按钮’All Allocs to BOM’将ZMODEL1和ZST_MODELlink上.

    clip_image090

    (3) Check with CS12

    使用CS12检查ZMODEL1的BOM,OK .

    clip_image092

    Super BOM应用步骤总结

    (1) 建立特征和特征值(Tcode :CT04)

    在本例你建立了特征ZST_ZJ表示电脑主机包含3特征值(主机类)ZZJ1-ZZJ3,特征ZST_BOX包含3特征类型(机箱)ZBOX1-ZBOX3,特征ZST_PAK包含3特征值(电脑包材)ZPAK1-ZPAK3 .

    (2) 建立类(Tcode:CL01)

    在本例你建立ZST_MODEL类,class type是300(variant)

    (3) 建立物料

    首先建立ZST_MODEL,这是一个configurable material,可建成phantom part,为了便于管理,将它建立和class ZST_MODEL同名称,同样按9个特征值建立物料

    (4) 建立BOM.

    假设物料ZZJ1-ZZJ3,ZBOX1-ZBOX3,ZPAK1-ZPAK3有BOM,这些物料是普通的part(如需要,这些料也可建立成configurable material,这也没什么复杂的,本例只是为了简化实例),BOM也是普通的BOM

    然后为Configurable material ZST_MODEL建立Super BOM包含ZZJ1-ZZJ3,

    ZBOX1-ZBOX3,ZPAK1-ZPAK3,建立OD(Object Dependency)

    (5)建立configurable Profile (Tcode:CU41).

    为configurable material ZST_MODEL建立configurable profile

    (6)建立MTO物料及其从Super BOM派生出配置BOM

    假设客户选择了ZZJ1,ZBOX1,ZPAK1组装电脑,为止产生了物料ZMODEL1,指想ZST_MODEL ,在classification view选取特征值ZZJ1,ZBOX1和ZPAK1.

    (7) Link to configurable material (Tcode:CS41)

    将ZMODEL1 link to ZST_MODEL,就完成了配置BOM的应用.

    *建议测试ZST_MODEL,ZMODEL1,ZZJ1-ZZJ3,ZBOX1-ZBOX3,ZPAK1-ZPAK3建立物料,然后下面component 使用系统里的,希望通过上面你对Super BOM和配置BOM有全面的了解.

    *实际应用中,一Top lever的Super BOM下的component也可能是一Super BOM.

    例1- Phantom Part的使用.

    Phamton part作用

    1. 体现工艺制作流程

    2. 节省存储空间,因为BOM是扁平save在表中的.

    3. 便于成本计算

    例2 配置BOM的成本估算

    PO审批流程

    clip_image094

    PO审批流程同样使用了分类系统,假设你已定义好PO Release Charcteristic和Class(图1-[2][3]),首先讲述下如何定义PO审批流程(图1-[1]),这样方便读者理解.

    Tcode:OMGS

    一定义Release group

    建立PO审批组Z_PUR_DOC_RELEASE,你可以为每个采购组织建立一个Rel. group,也可整个集团使用一个,将采购组织字段CEKKO-EKORG建成特征,这样采购组织就是特征值.

    在本例PO只使用一个审批组.,如图2.

    clip_image096

    二定义Release code

    根据业务需求设置审批流程,比如根据PO金额大小设置审批层次,一个企业可能认为PO金额在200元以下由采购主任审批就可,200-2000的必须经过采购经理,2000以上的需要采购VP,50000以上的必须要让COO看看.

    Workflow就不用了,这东西贼烂,领导Email都看不完不用.

    ,clip_image098

    三定义Release indictor

    clip_image100

    定义Release标志R表示Released,Value change表示允许改变的百分比,通常就不再改变金额了.

    四定义Release Strategy

    clip_image102

    如图5[1]=[3],假设外包PO需由Pur. Manager, Pur. Director和Pur. VP审批,最高3层, 由金额大小决定.

    Release Strategy 36.

    clip_image104

    如果你已经设置了PO release分类系统,按图6-[3]能看到图7显示的分类系统,表示金额在10000USD以下由Pur. Manager审批就可.

    clip_image106

    Release strategy 37.

    clip_image108

    如图8-[1],release prerequisites选PD表示必须由Purchase Director审批PO才生效(如图9),然后单击Release statuses应该能看到图8-[3]的画面

    clip_image110

    点击图8-[2]看到的分类如图10,表示10000-500000万美金必须最终由pur.. director审批才生效.

    clip_image112

    Release 38.

    当外包采购金额>500000USD时需要3人审批.

    clip_image114

    注意图12-[2]的Code elease prerequisite,,Code PD必须先由下级PM release,要Code MD(COO)审批则必须先让采购经理和采购director审批.

    clip_image116

    clip_image118

    五建立分类Z_PUR_DOC_RELEASE

    Check Release Strategy

    clip_image120

    特征

    对应字段

    Z_PUR_DOC_RELEASE_DOC_TYPE

    CEKKO-BSART

    Z_PUR_DOC_RELEASE_PO_AMT

    Z_PUR_DOC_RELEASE_PUR_GRP

    Z_PUR_DOC_RELEASE_PUR_ORG

    clip_image122

    clip_image124

    clip_image126

    GNETW

    EKGRP

    EKORG

  • 相关阅读:
    vs2010中如何编译dll
    EM图解
    二级指针代替二维数组传入参数
    常見算法的穩定性
    Opencv +vs2010的问题之0x000007b
    Linux C程序设计大全之gdb学习
    makefile学习
    python之如何share你的module
    socket与http的区别
    最完美的单例实现
  • 原文地址:https://www.cnblogs.com/chrisrockdl/p/14009648.html
Copyright © 2011-2022 走看看