Ajean's profile宝兰风雨雪PhotosBlogListsMore Tools Help

Blog


    April 19

    高度警惕美国操纵下的金融危机

     

     

      现在很多国人都很关心人民币升值这个话题,但又不了解美国迫使人民币升值的真正意图何在!
      相信大家对80年代的“日本经济衰退”和90年代的“亚洲金融风暴”及“香港的香港金融保卫战”吧!也许有人会说那是国际投机集团“美国索罗斯财团”搞的,但是,你就没有想过它背后难道就没有美国政府的支持了吗?下面,我仔细分析一下这些事件的前因后果你就会明白了。
      从1980开始的,特别在1990年和1995年,第一名的美国和第二名的日本之间的GDP差距是多少?日本GDP超过美国GDP的一半!这也是目前为止唯一一次其它国家和美国的经济差距缩小到一半的程度。日本人在欢呼:只要超过美国的GDP,日本就可以恢复“正常国家”了!美国人没有吭声。
      按理说,日本还是美国的盟国,其经济也是美国扶持起来的,美国也没有分裂日本的必要(要分裂,二战时就分裂了,也不用等到80-90年代)。美国也不可能对盟国日本使用“颠覆性煽动”,眼看着美国是阻挡不了日本经济的发展前景的了!世界各国都在兴奋的期待着日本GDP超过美国GDP的那个“历史性时刻”!日本企业更加疯狂,美国经济的象征——洛克菲勒广场被日本人买下了!美国的精神象征——好莱坞被日本人买了!美国人民的心情一下子掉到了谷底。“世界第一”就快保不住了!美国人民的荣耀感在急剧下滑,民间开始蔓延仇日情绪。
      1980年,日本的GDP就快到美国的一半了。有一件事情在1985年发生了,1985年美国拉拢其它五国(7国集团)逼迫日本签署了。以“行政手段”迫使日元升值。其实的一个中心思想就是日本央行不得“过度”干预外汇市场。日本当时手头有充足的美元外汇储备,如果日本央行干预,日元升不了值。可惜呀,日本是被去了势的太监。美国驻军、政治渗透、连宪法都是美国人帮它度身定做的,想不签广场协议都不可能。
      日本最后的结局大家也知道了。1985年9月的广场协议至1988年初.美国要求日元升值。根据协议推高日元,日元兑美元的汇率从协议前的1美元兑240 日元上升到1986年5月时的1美元兑160日元。由于美国里根政府坚持认为日元升值仍不到位,通过口头干预等形式继续推高日元。这样,到1988年年初,日元兑美元的汇率进一步上升到1美元兑120日元,正好比广场协议之前的汇率上升了一倍。
    美国人1993年2月至1995年4月,当时克林顿政府的财政部长贝茨明确表示,为了纠正日美贸易的不均衡,需要有20%左右的日元升值,当时的日元汇率大致在1美元兑120日元左右,所以,根据美国政府的诱导目标,日元行情很快上升到1美元兑100日元。以后,由于克林顿政府对以汽车摩擦为核心的日美经济关系采取比较严厉的态度。到了1995年4月,日元的汇率急升至1美元兑79日元,创下历史最高记录。
      日元升值的后果是什么?洛克菲勒广场重新回到了美国人手中,通用汽车在这个广场的一卖一买中净赚4亿美元!日资在艰难度日中大规模亏本退出美国。美国人民胜利了!成功的击退了日本的经济进攻!我们可以从事例中看看1995年之后,日本和美国的GDP之比重新拉开了距离,而且越来越大!
      可能有些网友还是没有明白,日元升值怎么啦?跟我们的谈论有什么关系?日元升值,就是美国对日本的一次经济阻击战!成功的把日本20多年的发展财富大转移到了美国去了。
    下面我给个例子大家就清楚了。
      假设我是美国财团,我当然知道1985会发生什么,假设我在1983年吧,我用100亿美元兑换成24000亿日元,进入日本市场,购买日本股票和房地产,日本经济的蓬勃导致股市和房地产发疯一样的上涨,1985年广场协议签订,日元开始升值,到1988年初,股市和房地产假设我已经赚到了一倍(5年才翻一倍是最低假设了),那就是48000亿日元。
    这时,日元升值到1:120。我把日本的房地产和股票在一年中抛售完,然后兑换回美元,那么,就是400亿美元!在5年时间中,我净赚300亿美元!(还是最低假设)。那么日本呢?突然离开的巨额外资就导致了日本经济的崩溃!经济学用词叫“泡沫经济破灭”。这就是日本常说的:“失去的十年”。而我连本带利的400亿美元回到美国,你想一想,美国经济能不旺盛吗?!!日本“失去的十年”,却正是美国“兴旺的十年”!看看我的上表就知道了。
      我只是美国财团中的一个,其它财团呢?嘿嘿,而且我的假设还只是到1988年,如果是到1995年,日元升值到1:79,你我能想象美国在这场经济战争的胜利中,到底从日本刮走了多少财富?
      美国赚够了,日元现在又重新回到了1:140的位置上,美元的坚挺依然和30年前一样!美元暂时性的贬值,并没有损害到美元的国际地位。这场美日的经济战争,以美国完胜而告终!
      美国人玩上瘾了。1998年,同样的手法在东南亚四小龙四小虎身上又来了一次,这就是亚洲金融风暴!唯一不同的,这次不需要广场协议了。因为亚洲这些小虎小龙的外汇储备们直接阻击就可以大获全胜!但是,还是没有战胜财大气粗、军事强盛、奉行霸权主义的美国,结局大家也看到了,东南亚货币在先升后跌中,经济发展的成果被美国抢掠一空!!
      唯一市场硬挺住了索罗斯的进攻而没有经济崩溃的就只有回归后的香港,保住了香港几十年的发展果实。当时索罗斯发动世界舆论(包括香港舆论),大肆攻击香港政府(中国政府)“行政干预市场”,违反市场经济规则、没有民主自由,要是当时中国屈服于世界的舆论压力而不运用“宏观调控”进行入市干预,那将酿成大祸,又不知道要有多少国人向当年的日本那样因破产而跳楼自杀了!
    当时的曾荫权后来说过:“决定政府入市干预的前一晚,我坐在床头哭了,不是为我自己,而是怕这个决定如果错误了,害了香港,我怎么向中央政府向市民们交代。”大家现在知道为什么美国一再要求他国“新闻自由”、“市场经济”、“民主人权”是建立在自己利益的基础上了吧,知道我国的“宏观调控”政策的正确性和优势所在了吧。
      美国停手了吗?没有,因为我过综合势力的增长国力的增强威胁到了美国的根本利益和“世界第一”的权威,近来“中国公开支持因儿子丑闻陷入困境的安南,指责美国故意借题发挥进行人生攻击。”就是最好的证明。所以美国心里就不痛快了,就要整人了,现在强迫人民币升值就是消弱中国的第一步,各位明白了吗?知道为什么中央政府突然狂力打压上海和北京的房地产市场?知道为什么中国股市那么惨了吗?央行行长周小川在3月还是4月曾说了一件事情:“有一个40亿美元的外资在上海炒房地产,已经退出中国了这样的外资,不要也罢!”明白了吗?中国股市是一个弱势股市,很容易被美国财团利用。
      中央不可能放松对股市的控制,否则中国经济将会在外资的攻击中崩溃!前段时间,也就是今年的12月初又有一个240亿美元的外资财团撤离中国上海。现在,大家对国家的宏观调控的优势有所理解了吧,知道了国家出台那么多针对房地产的政策是多么的明智和及时了吧(文件详文附在后面,有兴趣的可以读读)!
    现在各位知道为什么中国要实行国家外汇管制、汇率控制、打压房地产、控制股市、知道为什么中国要保持巨额外汇储备,为什么最近央行又出台了新的房地产贷款规定,为什么中国政府一直要求进出口贸易平衡,为什么要扩展东南亚贸易市场和欧盟市场,为什么要加WTO了。
      其实中美之间的经济战争,早就已经开场了,而且来来回回过了几百招了。我们大多数网友还懵懵懂懂的只盯着台海,盯着中亚美军又多了一个军事基地。要知道经济崩溃的灾难远比一场军事战争的后果更严重。军事战争不外乎两种:即“侵略战争”和“卫国战争”。而军事上的“侵略战争”的最终目的就是打垮对方的一切(军事力量和经济实力)达到占领对方领土,进行资源掠夺和控制奴役和剥削对方的国民。
      这样的事情中国历史上没有少发生,这里我就不例举事例了。而如今的美国就是以军事上的侵略战争为手段,达到奴役和剥削对方为目的的真实意图(对实力弱小的国家而言),看看如今的“伊拉克”就明白了,美国实际上是侵略占领了伊拉克,控制了伊拉克的石油,以此来满足美国国内巨大的需求量;而对实力强的原苏联(原苏联拥有制对方死地的核力量),美国就只有发动经济进攻来拖垮他们,苏联的分裂就是最好的例子。
      也许有的人要说,那是冷战时期的军备竞赛和当时苏联国内政策导致了原苏联因经济崩溃而解体的。但是,你有没有想过,进行军备竞赛是以经济实力为基础的。当时的美国经济实力比苏联强,所以,美国胜利了而苏联解体了。现在轮到我们了,我国现在的经济和军事实力都没有冷战时期的苏联强大,相同点是我国同样也拥有毁灭美国的核武器,只是数量少了一点而已。那在这一轮中,就要看我国领导人的智慧了,建立合理的政策来规避风险,保护自己是当务之急(可喜的是,现在我国已经在这样做了)。
      可是,美国也没有闲着,而且,作为经济进攻的第一步他们已经早早的迈出了,向美国“凯雷财团”这样的世界性投机财团收购中国的“徐州重工”这样的事情已经发生了很多了,在这里我就不一一例举了。他们的目的很明确,控制中国的核心技术,进行世界性的技术垄断,迫使??量。同时乘汇率没有变化之前以美元套取人民币,迫使中国央行大量发行人民币以应付大量的货币兑换需求,为拖垮中国经济打下伏笔。这还是明的进入,暗地里的就更无法统计了。
      说到这里,也许有很多人不明白大量美元兑换人民币的行为与拖垮中国经济有什么关系。在这里,我解释一下:在没有大量美国财团恶意涌入中国用大量美元换取人民币之前,我国的经济形式是相对稳定的,但是,实际上,我国发行的人民币的数量远没有我国人民积累的财富数量那么多,因为,任何一种货币,只要能保证本国正常的经济活动就行了,??为印刷货币的成本是很高的。
    举个例子:中国有13亿人口,平均每人的财富拥有量为1万元每人,中国总共有13万亿元财富,而现实生活中,每个人不可能把自己的全部财富都带在身上,这里就平均一下,平均每个人身上携带1000元现金(携带量为10%,其实这个量已经是很大了),其余的存在银行,也就是说,在正常情况下的流动现金量(术语为:现金流量)为1千亿元,乘以一定的突变系数,(这里为了便于计算,就理想的取值100%),也就是说在正常的经济活动下,中国只要发行2千亿人民币就可以满足本国的经济活动了。
      而大量的恶意的国外财团的资金涌入中国,表面上是拉动了我国的经济,是国内的消费量变大,也就是使国内的现金流量的需求变大,这样,我国为了满足大众消费的需求,就会大量印刷和发行人民币来满足这种需求(当年的日本就是这样)。据统计,目前在国际上金融市场上的投资有136万亿美元。
      其中只要有1%涌入中国进行投机经营,按现在的汇率,我国就要发行10.895584万亿元人民币   (1.36*7.8644=10.695584+0.2 =10.895584万亿元),货币的发行总量已经超过了我国现有的外汇储备量(1万亿美元)的10倍,算把中国的全部外汇储备都拿来也难对付对手,此时,我国的国有经济就是负9.895584万亿元,不能算上全中国人民的全部财富,因为,国家经济崩溃了,我们手中的财富也就一文不值了。
      如果人民币升值以后,他们再用手头的人民币套取美元,中国国内将会余留大量人民币。那样,国人乃至世界将会对中国失去信心,不再储备和使用甚至抛售手中储备的人民币,使中国的外贸活动受挫,最终导致中国国内的通货膨胀,对外导致信誉危机从而导致金融危机。就向40年代的通货膨胀那样一盒火柴要卖几百块。如果我国政府在这次的人民币汇率这件事上决策错误,那么到时中国近30年来改革开放的经济成果就可能就可能落入他人之手。
      最近,国内的经济形式来看,客观的将,形式是不容乐观的。按理说,人民币升值了,也就是说钱值钱了,应该是以前1块钱的东西现在只要9毛甚至是8毛就可以买到了;可是现在的国内形式,除了工资没有涨外其余的都涨了。
    新华网报道说:自8月份开始,北京市场食用油价格震荡上扬。进入11月份,米价、面价、菜价及副食价格均有不同程度的攀升。报道认为,是受国际大豆市场价格上扬的影响,导致食用油价格上升。但是,米面跟风而涨,25公斤装的富强粉涨幅达12%以上,500克大米上涨了6分钱。据了解,在上海、广州、深圳粮油等生活必需品已是涨升一遍,并持续一个多月,其中面粉、食用油的最高涨幅分别已达一成和二成。
      农副产品涨价说明了我国经济在发展和提高。同时,以农副产品的涨价来增加农民的收入,维护社会的稳定,给国家的发展提供了一个良好的国内环境,对国家的发展是有好处的,因为中国农民的数量毕竟占了总人口比例的70%以上嘛。
    但是,中国的这四大城市生活必需品的涨价决外偶然。持续7个多月的宏观调控并没有稳定房价,相反,导致房价的节节攀升。早有经济学家警告说,地产泡沫将导致通货膨胀,通货膨胀将引发经济危机。然而,这种声音太微弱,现如今的种种迹象表明,通货膨胀正在步步逼近我们。
      对比1996年的东京,1997年的香港,北京、上海、广州,深圳这四大房价居高不下的城市,地产泡沫破灭前的迹象已经显现。试图为了一已私利而继续哄抬房价的地方政府,将迎来经济规律的无情惩罚。因为这一轮的通货膨胀是在毫无防备的情况下发出的,可能还不被官方承认,但它实实在在已经来临了。这种处在萌芽状态的通货膨胀选择了一个导致经济危机的最好时机——2007年的元旦和春节前。因此,危害性和破坏性更大。如果有一天方便面也开始涨价时,这场经济危机已无法遏制了。
      柴米油盐、水电油汽的轮番涨价和全面涨价,对中国的富豪阶层的正常生活不构成任何影响,但是千千万万的普通市民将要付出更多的财富以维持和原来一样的生活水准,也就是说,中国的高房价,间接地是由普通城市居民来买单,日本的国民是花了15年的时间,香港的市民就是花了14年。那么,中国的城市居民要花多少年呢?
      应对即将到来的通货膨胀,国家自然有金融的手段。可是,中国的人民币在国际市场受到美元的攻击,一年之内升值达5%,而且,还有继续升值的空间。中国的贸易顺差将在人民币的升值中逐渐缩小,国际市场的风险已在加剧。而国内市场生活必需品的全面涨价,将直接影响消费。最后,逼迫央行加大人民币的发行量,中国的通货膨胀就此爆发。这种危机也可能近在眼前。
      人民币目前在国际货币市场的遭遇是中国汇制改革以来没有过的事,我们目前已经知道美元要干什么?但是,还由不得我们把国际市场的问题解决好,人民币在国内又是这样的尴尬。在不动产涨价的带动下,生活必需品全面涨价,形成了国际与国内两种迥然不同的市场。从某种意义上来说,这样的市场将走向资本的过度投机。说白了,对内将加剧中国社会的贫富分化,对外给资本大鳄可乘之机。
    如果更深层次的分析,人民币似乎是遭遇来自不同方面的围攻,试图将中国30来年经济发展的成果逐步蚕食。接下来,生活必需品的涨幅将进一步加剧,市民的购买力进一步下降,国内市场进一步缩小,中国的产能将进一步过剩,最后,必然导致大量的中小企业破产,经济危机说来就来。
      我们要清醒地看到高房价的危害性,尤其是对中国社会的破坏更是史无前例。也许现在还不必过于悲观,一切都应该有转机。谁都知道中国经济发生了重大问题,就象一辆出现明显故障的高速列车,轰轰隆隆往前飞奔,不知何时将会出轨或者颠覆。有经济学家预言,2008年中国经济将会硬着陆,届时,社会动荡不可避免。
    那么,出了这么大的问题,而问题的症结究竟何在呢?
      发改委专家马晓河指出:我国正在由某一方面的过剩向全面过剩演变。由于产能过剩,内需不旺,中国产品被迫出口,又导致了大量的贸易摩擦,过分依赖国际市场的风险越来越大。马晓河举例说:中国人向世界上的每一个人提供了一双鞋子,可见鞋的产能过剩多少。11月23日,央行副行长苏宁也表示,中国最终消费占GDP比重已从上世纪80年代超过62%下降到2005的52.1%,居民消费率也从1991年的48.8%下降到2005年的38.2%,均达到历史最低水平。而在中国居民消费率持续下降的同时,世界平均消费率达78%—79%,比较起来差别之大就如天上和地下。
      上面两位,一位是宏观经济的专家,一位是金融权威,但指出的是一个共同问题,就是因为内需不旺而导致产能过剩,一旦国际市场出现大的风险,中国将有成千上万工业企业面临生存的危险。
    让我们再来看看近几年推动中国经济高速发展的动因是什么:如果总揽中国经济全局就可以发现,推动中国经济高速增长的一是投资,二是消费,三是出口,可以说这是并驾齐驱的“三驾马车。”但是,在我国的实践中是“重投资、重出口、轻消费,”这是问题的表象。为什么中国人会“重投资、重出口、轻消费,”呢?明知消费是生产力,没有消费就没有生产力,这是一个浅显的经济学常识,但是在宏观经济发展的布局上,连马克思的剩余价值理论都不顾及了?
      再仔细分析,就会发现很有趣的现象:一是地方政府重投资,前几年表现的是“开发区”热,后来是“基本建设”热,再后来就是现在的“房地产”热;二是大中型企业重工业产品出口,不管是上市公司还是民营企业,只要形成了生产规模,眼光都瞄准了国际市场,大到汽车,家电,小到鞋子,袜子,打火机,一古脑出口。就 “投资”热而言,高房价圈走了老百姓甚至两代人的财富,还有一代人背上了沉重的债务;就“出口”热而言,贸易顺差继续加剧,贸易摩擦不断增多,人民币升值压力越来越大。
      有经济学家分析,人民币自汇率改革以来升值了5%,现在的状况是有可能2007年一年就要升值5%,相当于前10多年的升值总幅度。那么这个后果是什么呢?许多经济学家讳莫如深,我可以大胆的告诉大家,后果就是人民币大量从不同渠道流出境,国际洗黑钱的势力乘机介入,甚至可以把中国贪官的钱都洗白了。
      可以说,在2007年之前,只听说外国人到中国来洗钱,这个局面也将因此而改变,中国人终于到外国去洗钱了。再说得深入一点,就是中国人民创造的财富被别人悄悄地“盗走”了,而“盗匪?发改委专家马晓河先生的话头上,看看如何解决产能过剩的问题。其实,很简单,产能过剩的解决之道是刺激消费,而刺激消费的唯一办法就是降低房价。房价不降,中国人对未来的预期必将产生较大的压力而不敢消费,还有一部分成了房奴无钱消费。马晓河先生说,中国工业品利用率有半数低于50%,所以,为了减少风险,必须扩大内需。而内需如何才能扩大呢?
      中国居民的消费率是38.2%,世界平均消费率是78%—79%;
      中国居民平均房价收入比是一比十,世界平均房价收入比是一比
      两相对照,中国经济问题的症结就暴露出来,是高得离谱的房价将中国居民的财富搜刮一空,还拿什么去消费呢?所以中国人的消费率创下了历史新低。有专家预测,中国房价每下降一个点,将为市场一年增加100亿以上的消费,而中国房价从2006年前三季度的综合平均价位上,至少有30%以上的下降空间,也就是说,只要中国房价下降30%,中国市场一年将增加3000亿的消费总额,中国经济的问题也迎刃而解,中国民众也从此能过上好日子。
      相反,我国要是领导人的决策事物就控制不好这个局面,我国的经济将会崩溃,国内将??我国的国力衰弱后,必将遭受外强的军事打击。我们都清楚我们现在身处的国际环境有多恶劣。面对当前复杂的国际形势,中国一定要具备打赢两场战争的能力,一是军事战争,二是经济战争。
      用战争手段夺取别国别人的财富在人类历史上是很常见的。即使在21世纪的今天也还能看到。为了保护中国人民的生命财产,以及可能爆发的军事冲突,中国一定要建设强大的陆军,强大的海军,强大的空军和强大的天军(太空部队)。
    在人类进入21世纪的今天,谁占领了太空这个制高点,谁就掌握了未来战争的主动权。任何太空非军事化的想法,只能是白日做梦!
    圣人说得好:落后是要挨打的!中国只有具备了彻底摧毁对手的实力,别人才不敢欺负中国。
      同时,在人类进入21世纪的今天,由于国际交流和贸易的全球化,一场新的战争----经济战争,已经取代军事战争,成为当今世界一部  分人夺取另一部分人财产的主要手段
      1997年东南亚的金融风暴就是经济战争的一个例子。落后的东南亚国家经济.在少迟一点的香港金融保卫战中,时任香港政务司司长的曾荫权和财政司司长任志刚,在中国中央政府的支持下,用大量外汇储备干预了香港的股票市场。中国中央政府派出了两名央行副行长到香港,要求香港的全部中资机构,全力以赴支持香港政府的扶盘行动。经过几个月的较量,香港政府成功击退了国际金融炒家把香港当作提款机的企图。那次的斗争是非常激烈的,香港恒指变动1点,期货的买卖就会相差2.3亿港币。
      香港金融保卫战虽然过去好多年了,我一直在想,如果没有强大中国做后盾,会不会发生“八国联军”攻打香港的可能呢?毕竟香港政府干预香港股票市场违反了当今国际主流社会的“规矩”。
      中国航油(新加坡)在国际石油期货市场损失5亿美元和一位中国国资委职员在伦敦同期投资再次被吃表明中国在金融市场方面还有很多东西要学。
      就石油这一项,中国现在每年就要多花几百亿美元。现在是中国需要啥,国际商品市场就涨啥。可以说是“抢你没商量”。
    然而,石油等商品的价格对中国经济的危害并不是最严重的。真正可能对中国经济的造成严重危害是人民币汇率体系和不断高涨的房地产市场
      我总觉得有人要以人民币汇率为突破口,搞垮中国的经济,夺取中国人民的经济成果。从要人民币升值和自由浮动的叫喊声中,我好像闻到了军事战争的火药味。
      现在有一个说得比唱得还好听得说法,让人民币汇率自由浮动,由市场来决定。
      难道市场是有鬼决定的吗?由市场来决定,听起来挺公平的,大家都有权。但仔细分析一下,世界上有哪个市场不是由少数人操中的呢?让人民币汇率由市场来决定,说穿了就是由他们来决定。
      中国政府和人民一定不要忘记1997年东南亚的金融风暴。现在外资的相当一部分是埋下的伏兵。它们就等美国把中国的门撞开(人民币汇价自由浮动),把人民币捧上天,牟取暴利。
      总之,中国一定要建设具有一不怕苦,二不怕死精神的强大的陆军,强大的海军,强大的空军和强大的天军(太空部队)以应对可能军事战争。同时中国一定要建设热爱国家,具有国际视野,精通国际竟争规则的金融“铁军”以应对经济战争。只有这样,中国的安全,人民的财富才会得到保护!

    鸡汤

    1:一朵玫瑰花

      有位绅士在花店门口停了车,他打算向花店订一束花,请他们送去给远在故乡的母亲。 绅士正要走进店门时,发现有个小女孩坐在路上哭,绅士走到小女孩面前问她说: 「孩子,为什么坐在这里哭?」 「我想买一朵玫瑰花送给妈妈,可是我的钱不够。」孩子说。绅士听了感到心疼。 「这样啊……」于是绅士牵著小女孩的手走进花店,先订了要送给母亲的花束,然后给小女孩买了一朵玫瑰花。走出花店时绅士向小女孩提议,要开车送她回家。 「真的要送我回家吗?」 「当然啊!」 「那你送我去妈妈那里好了。可是叔叔,我妈妈住的地方,离这里很远。」 「早知道就不载你了。」绅士开玩笑地说。

      绅士照小女孩说的一直开了过去,没想到走出市区大马路之后,随著蜿蜒山路前行,竟然来到了墓园。小女孩把花放在一座新坟旁边,她为了给一个月前刚过世的母 亲,献上一朵玫瑰花,而走了一大段远路。 绅士将小女孩送回家中,然后再度折返花店。他取消了要寄给母亲的花束,而改买了一大束鲜花,直奔离这里有五小时车程的母亲家中,他要亲自将花献给妈妈。

      一朵玫瑰花

      为逝者举行盛大丧礼, 不如在他在世时, 善尽孝心。

     

    2:没有上锁的门

      乡下小村庄的偏僻小屋里住著一对母女,母亲深怕遭窃总是一到晚上便在门把上连锁三道锁;女儿则厌恶了像风景画般枯燥而一成不变的乡村生活,她向往都市,想去看看自己透过收音机所想象的那个华丽世界。某天清晨,女儿为了追求那虚幻的梦离开了母亲身边。她趁母亲睡觉时偷偷离家出走了。 「妈,你就当作没我这个女儿吧。」可惜这世界不如她想象的美丽动人,她在不知不觉中,走向堕落之途,深陷无法自拔的泥泞中,这时她才领悟到自己的过错。 「妈!」 经过十年后,已经长大成人的女儿拖著受伤的心与狼狈的身躯,回到了故乡。

      她回到家时已是深夜,微弱的灯光透过门缝渗透出来。她轻轻敲了敲门,却突然有种不祥的预感。女儿扭开门时把她吓了一跳。「好奇怪,母亲之前从来不曾忘记把门锁上的。」 母亲瘦弱的身躯蜷曲在冰冷的地板,以令人心疼的模样睡著了。

      「妈……妈……」听到女儿的哭泣声,母亲睁开了眼睛,一语不发地搂住女儿疲惫的肩膀。在母亲怀里哭了很久之后,女儿突然好奇问道:「妈,今天你怎么没有锁门, 有人闯进来怎么办?」 母亲回答说:「不只是今天而已,我怕你晚上突然回来进不了家门,所以十年来门从没锁过。」

      母亲十年如一日,等待著女儿回来,女儿房间里的摆设一如当年。这天晚上,母女回复到十年前的样子,紧紧锁上房门睡著了。

      没有上锁的门

      家人的爱是希望的摇篮, 感谢家的温暖, 给予不断成长的动力。

     

    3:便当里的头发

      在那个贫困的年代里,很多同学往往连带个象样的便当到学校上课的能力都没有, 我邻座的同学就是如此。 他的饭菜永远是黑黑的豆豉,我的便当却经常装著火腿和荷包蛋,两者有著天渊之别。 而且这个同学,每次都会先从便当里捡出头发之后,再若无其事地吃他的便当。这个令人浑身不舒服的发现一直持续著。

      「可见他妈妈有多邋遢,竟然每天饭里都有头发。」同学们私底下议论著。为了顾及同学自尊,又不能表现出来,总觉得好肮脏,因此对这同学的印象,也开始大打折扣。 有一天学校放学之后,那同学叫住了我:「如果没什么事就去我家玩吧。」虽然心中不太愿意,不过自从同班以来,他第一次开口邀请我到家里玩,所以我不好意思拒绝他。

      随朋友来到了位于汉城最陡峭地形的某个贫民村。 「妈,我带朋友来了。」听到同学兴奋的声音之后,房门打开了。他年迈的母亲出现在门口。 「我儿子的朋友来啦,让我看看。」 但是走出房门的同学母亲,只是用手摸著房门外的梁柱。 原来她是双眼失明的盲人。

      我感觉到一阵鼻酸,一句话都说不出来。 同学的便当菜虽然每天如常都是豆豉,却是眼睛看不到的母亲,小心翼翼帮他装的便当,那不只是一顿午餐,更是母亲满满的爱心,甚至连掺杂在里面的头发,也一样是母亲的爱。

      便当里的头发

      先入为主的观念, 往往影响人一生的格局, 多观察、多探讨, 会有更多意外的发现。

     

    4:种花的邮差

      有个小村庄里有位中年邮差,他从刚满二十岁起便开始每天往返五十公里的路程,日复一日将忧欢悲喜的故事,送到居民的家中。就这样二十年一晃而过,人事物几番变迁, 唯独从邮局到村庄的这条道路,从过去到现在,始终没有一枝半叶,触目所及,唯有飞扬的尘土罢了。

      「这样荒凉的路还要走多久呢?」 他一想到必须在这无花无树充满尘土的路上,踩著脚踏车度过他的人生时,心中总是有些遗憾。 有一天当他送完信,心事重重准备回去时,刚好经过了一家花店。 「对了,就是这个!」 他走进花店,买了一把野花的种籽,并且从第二天开始,带著这些种籽撒在往来的路上。 就这样,经过一天,两天,一个月,两个月……,他始终持续散播著野花种籽。

      没多久,那条已经来回走了二十年的荒凉道路,竟开起了许多红、黄各色的小花;夏天开夏天的花,秋天开秋天的花,四季盛开,永不停歇。

      种籽和花香对村庄里的人来说,比邮差一辈子送达的任何一封邮件,更令他们开心。 在不是充满尘土而是充满花瓣的道路上吹著口哨,踩著脚踏车的邮差,不再是孤独的邮差,也不再是愁苦的邮差了。

      种花的邮差

      人生如白驹过隙, 时光飞逝, 何妨留下善行, 提供后人乘凉?

    5:第一百个客人

      中午尖峰时间过去了,原本拥挤的小吃店,客人都已散去,老板正要喘口气翻阅报纸的时候,有人走了进来。那是一位老奶奶和一个小男孩。

      「牛肉汤饭一碗要多少钱呢?」奶奶坐下来拿出钱袋数了数钱,叫了一碗汤饭,热气腾腾的汤饭。奶奶将碗推向孙子面前,小男孩吞了吞口水望著奶奶说: 「奶奶,您真的吃过午饭了吗?」 「当然了。」奶奶含著一块萝卜泡菜慢慢咀嚼。一晃眼功夫,小男孩就把一碗饭吃个精光。

      老板看到这幅景象,走到两个人面前说:「老太太,恭喜您,您今天运气真好,是我们的第一百个客人,所以免费。」 之后过了一个多月的某一天,小男孩蹲在小吃店对面像在数著什么东西,使得无意 间望向窗外的老板吓了一大跳。

      原来小男孩每看到一个客人走进店里,就把小石子放进他画的圈圈里,但是午餐时间都快过去了,小石子却连五十个都不到。

      心急如焚的老板打电话给所有的老顾客 :「 很忙吗?没什么事,我要你来吃碗汤饭,今天我请客。」 像这样打电话给很多人之后,客人开始一个接一个到来。 「八十一,八十二,八十三……」小男孩数得越来越快了。终于当第九十九个小石子被放进圈圈的?

      那一刻,小男孩匆忙拉著奶奶的手进了小吃店。

      「奶奶,这一次换我请客了。」小男孩有些得意地说。 真正成为第一百个客人的奶奶,让孙子招待了一碗热腾腾的牛肉汤饭。而小男孩就像之前奶奶一样,含了块萝卜泡菜在口中咀嚼著。

      「也送一碗给那男孩吧。」老板娘不忍心地说。 「那小男孩现在正在学习不吃东西也会饱的道理哩!」老板回答。 呼噜……吃得津津有味的奶奶问小孙子:「要不要留一些给你?」 没想到小男孩却拍拍他的小肚子,对奶奶说:「不用了,我很饱,奶奶您看……。」

      第一百个客人

      一念善心助长一棵幼苗, 棵棵幼苗可以成林, 人人有爱、社会有情。

    6:世上最美味的泡面

      他是个单亲爸爸,独自抚养一个七岁的小男孩。每当孩子和朋友玩耍受伤回来,他对过世妻子留下的缺憾,便感受尤深,心底不免传来阵阵悲凉的低鸣。 这是他留下孩子出差当天发生的事。 因为要赶火车,没时间陪孩子吃早餐,他便匆匆离开了家门。一路上担心著孩子有没有吃饭,会不会哭,心老是放不下。即使抵达了出差地点,也不时打电话回家。 可孩子总是很懂事地要他不要担心。然而因为心里牵挂不安,便草草处理完事情,踏上归途。 回到家时孩子已经熟睡了,他这才松了一口气。旅途上的疲惫,让他全身无力。正准备就寝时,突然大吃一惊:棉被下面,竟然有一碗打翻了的泡面!

      「这孩子!」他在盛怒之下,朝熟睡中的儿子的屁股,一阵狠打。 「为什么这么不乖,惹爸爸生气?你这样调皮,把棉被弄?要给谁洗?」 这是妻子过世之后,他第一次体罚孩子。 「我没有……」孩子抽抽咽咽地辩解著:「我没有调皮,这……这是给爸爸吃的晚餐。」

      原来孩子为了配合爸爸回家的时间,特地泡了两碗泡面,一碗自己吃,另一碗给爸爸。可是因为怕爸爸那碗面凉掉,所以放进了棉被底下保温。

      爸爸听了,不发一语地紧紧抱住孩子。看著碗里剩下那一半已经泡涨的泡面: 「啊 !孩子,这是世上最…最美味的泡面啊!」

      世上最美味的泡面

      孩子即使再年幼, 也有他们的尊严, 如果父母发现错怪了孩子, 要勇敢向他们说: 「对不起!」。

    SAP技术趋势及建议

     

     

      SAP 作为一个处于领导地位的ERP系统,经历了ORACLE 的竞争,ORACLE对PEOPLE SOFT的兼并,PEOPLE SOFT 对JD EDWARDS的兼并,ORACLE对SIEBLE的兼并,还有美国经济的90年代末期的繁荣,后来的萧条,再复苏,自己从R/2, 到R/3的变化,带给就业市场的变化也很大。

      SAP内部的开发的变化,自R/3以来,第一个是4.0B的确立,是R/3的第一个成熟的版本,

      第二个变化其实是WALLDORF方面反对,而SAP AMERICA坚持的结果,就是R/3的网络化,这是个简单的,初级的ITS,后来被WEB APPLICATION SERVER代替,这个事件上,SAP是落后了,但是靠着强大的开发能力追赶上来。第三个变化,就是SAP认识到一个大中型企业,(FORTUNE 500)是几乎不可能完全放弃LEGACY系统的,这是一个决定,毫无挑战的可能。所以SAP能做的只有拥抱这个决定,就是扩展R/3的功能去主动统一其他系统或者LEGACY系统的功能,所以R/3-SD扩展成了R/3之外的CRM,R/3-MM-PUR扩展成了R/3之外的EBP/SRM,PP扩展成了APO,ECM扩展成了PLM,许多为SAP提供文件管理的软件商进退两难,因为一方面SAP支持他们的同时,开发了自己的RECORDS MANAGEMENT;CTMS演化成了R/3之外的SOLUTION MANAGER,统一了BASIS的管理,所有的MASTER DATA变成了R/3之外的MDM。这一切说明什么?说明SAP认为,所有R/3,非R/3系统,都可以存在,但是销售部分,可以交给CRM来处理…,所有R/3,非R/3系统,都可以存在,但是计划部分,可以交给APO来处理,并实现供应链上的信息共享,GLOBAL ATP, COLLABORATION…,所有R/3,非R/3系统,都可以存在,但是采购部分,可以交给SRM来处理…。用这种方式,SAP正在实现另外一种方式的统一。

      第三个变化,是SAP从R/3中分割出来情报系统,这本来是R/3的一个弱点,R/3长于操作报告,但R是短于分析报告,这是由其关系型数据库决定的。分割出来成立单独的BW后,R/3的资源被解放出来专门用于生产。BW单纯处理分析报告。

      第四个变化,是界面变化,BSP,JAVA的应用,使SAP完全走向了WEB,符合潮流,这最新的进展被包括在NETWEAVER2004S,我对这个开发不是特别熟悉,我了解的仅仅是其用途。

      第五个变化,是SAP进一步优化了与非SAP系统的连接,代表作品就是XI。很多技术迷对XI推崇备至。

      这五个变化,加上经济的复苏,爆发了SAP的就业市场的需求狂涨。

    作为一个SAP职业人员,应该如何获取最大的利益?

      1.不要迷恋大公司,而中小企业里三到五年的经验将为自己积累宝贵的跨模块的经验。由于人力紧张,中小企业愿意上不同模块,但是不能维护多个分析师,常常把不同模块的支持维护工作加给分析师们,从个人职业发展的角度说,这是好事,3-5年后就会发现他们比他们在大公司的同行们有更强大的能力。SAP从设计来说,是分模块设计,从个人的学习来说,也是分模块的,但是实际问题的发生,客户的需求,都是按流程来的,都是跨模块的,所以跨模块,是必须的,也是很多公司追求的人才。一个只懂得采购的,或者只懂得SD的,面临的是同样资历的人的竞争及就业市场的狭窄。

      2.工作中的机会非常重要,不能限于现在的模块的支持维护,必须接触新模块,新知识,新流程,新应用。要学会拒绝公司100%地使用你而不提供学习的机会,理想的比例是60-70%的支持维护,30-40%的学习时间。

      3.知识结构上,高层的结构知识必不可少,但是更重要的是细节知识,因为细节知识不仅仅在于细节本身,更在于其解决问题的方法论,这个方法论是有些独特的,是来自于战后人们对一百多年的德军总参谋部的运行方式的研究,总结。这个方法论是核心,有趣的是,SAP的核心经验,就是来自与此,也是人们为什么对SAP从业年限的合理预期,I.E.如果你做了五年SAP,经验要超过做过一年的人,主要就是指这个经验,对方法论的熟悉程度,能否迅速发现问题,并确定原因及解决方案。这其实是WALLDORF的德国开发者与分析师们的沟通的语言。我在这里设置了说明,但是,你能发现我的说明吗?你能理解我的说明吗?一个优秀的分析师不能解决所有的问题,但是普遍来说,他会花更少的时间,解决更多的问题,提供更有效,更合理的解释及/或解决方案。这,也是SAP最美丽的地方,以至于完全可以成为终生的职业。如果总结一下,就是方法论是SAP的核心,也是求职中技术筛选,面谈的核心。一个掌握了方法论的人,可以使得一个懂得SAP的招聘者,知道如何平衡他对经验的需求和对方法论的需求。方法论的精通可以弥补求职者某个特定模块的经验上的不足,而反之,某个特定模块上的精通却不能同样程度弥补方法论的不足。

    April 14

    tiptop gp 3 权限总结

    资料太少了,要做一些力所能及的事情;

     

    权限的创建的总结:

    下面创建的步骤要一步一步来:

    p_zz创建一个或复制一个模组为"MENU",程序类型为"M:选单",程序画面Style为"sm1:sm1"的菜单;

    p_zm录入一个系统目录程序编号与前面p_zz中编号一样的编号,再在单身上输入“作业编号”;再重新生成menu;

    p_zw先查询-》双击-》录入-》输入权限类型编号,此编号与前面p_zz及p_zm的编号一致,确认;

    p_zy查询,输入前面录入的编号,确认;然后再单击“依MENU成批生成”,些时“MENU编号”与“权限类型”一致,点确认;双击,再点“维护action权限资料”,可以维护更细致的权限,包括打印,删除等权限;

    p_zx录入,重点选择“权限类型”及“用户目录”;

    p_zxy录入营运中心编号;

    April 12

    ERP version detail( tiptop gp)

    4gl version

    gdc version

    version1

    version2

     

    网上TIPTOP的东东太少了,

    现在放一些上来,以作补充。

    ABAP变量可见范围

     

    1、局部可见变量
    在Form和Function中定义的变量,这类变量只在Form和Function可见,当有全局变量与局部变量同名,

    全局变量将被局部变量屏蔽。

    2、全局可见变量
    除去TABLES定义声明的变量以外的所有在程序中定义的变量为全局变量,在程序范围内可访问。

    3、跨程序可见变量
    1、TABLES table_wa.

    2、DATA BEGIN OF COMMON PART [name].
      ...
      DATA ...
      ...
    DATA END OF COMMON PART [name]. 
    TABLES 声明的变量常用于屏幕字段与ABAP程序间的数据传输(PBO/PAI)
    COMMON PART 声明的变量为跨程序可见变量(define a global interface work area, that can be

    used jointly by the programs of a program group. )。SAP常用该变量来传递数据(重点,SAP不同

    程序中传递变量的方式) 。

    Work table areas declared with TABLES behave like the data declared with the addition

    COMMON PART, meaning the data are used by the programs of a program group.

    附:示例

    INCLUDE yxpart.
    DATA: BEGIN OF COMMON PART struc,
            f1 TYPE i,
            f2 TYPE i,
            s  TYPE i,
          END OF COMMON PART struc.

    REPORT  YXPARAM.
    INCLUDE yxpart.
    PARAMETERS:
      p1 TYPE i DEFAULT 20,
      p2 TYPE i DEFAULT 90.
    f1 = p1.
    f2 = p2.
    PERFORM summing IN PROGRAM YXSUM.

    REPORT  YXSUM.
    INCLUDE yxpart.
    FORM summing.
      s = f1 + f2.
      PERFORM display IN PROGRAM YXDISP.
    ENDFORM.

    REPORT  YXDISP.
    INCLUDE yxpart.
    FORM display.
      WRITE: / f1, f2, s.
    ENDFORM.

    运行结果:
    ------------------------------------------------------------------
            20          90         110

    另外注意在abap事件里定义的变量可见分两种
    1、在以下事件定义的变量为全局可见变量
    INITIALIZATION
    START-OF-SELECTION
    END-OF-SELECTION
    TOP-OF-PAGE...
    MODULE
    2、在以下事件定义的变量为局部可见变量
    AT SELECTION-SCREEN...
    GET dbtab...

    在标准应用工具栏添加自定义按钮

     

      SAP的选择屏幕(GUI status)的标准工具栏上系统预先定义了5个按钮,他们对应的功能码是FC01-FC05,默认是不激活的。用户可以使用SELECTION-SCREEN FUNCTION KEY i.来激活这5个按钮(这里的i必须是1-5),这五个按钮的文本放在SSCRFields的对应的Functxt_0i中。当用户按下按钮时,系统将触发AT SELECTION-SCREEN 事件,并将功能码放到sscrfields的ucomm字段中。

    例:

    TABLES sscrfields.                 "定义工作区

    DATA: s_txt_01 LIKE sscrfields-functxt_01 VALUE 'LH',
          S_TXT_02 LIKE sscrfields-functxt_01 VALUE 'UA'.

    PARAMETERS: p_carrid TYPE s_carr_id,
                p_cityfr TYPE s_from_cit.

    SELECTION-SCREEN: FUNCTION KEY 1,   "激活按钮
                      FUNCTION KEY 2.

    INITIALIZATION.
      sscrfields-functxt_01 = s_txt_01.    "定义按钮文本
      sscrfields-functxt_02 = S_TXT_02.

    AT SELECTION-SCREEN.
      CASE sscrfields-ucomm.          "处理按钮命令
        WHEN 'FC01'.
          s_txt_01 = '我点击了'.
      SYSTEM-CALL INITIALIZATION. 再次调用事件  INITIALIZATION
          p_carrid = 'LH'.
          p_cityfr = 'Frankfurt'.
        WHEN 'FC02'.
          p_carrid = 'UA'.
          p_cityfr = 'Chicago'.
      ENDCASE.

    COLOR FOR CELL OF ALV(REUSE_ALV_GRID_DISPLAY)

     

    TABLES :pa0002.

    TYPE-POOLS: slis. "ALV Declarations

    DATA : BEGIN OF it OCCURS 0,
            pernr LIKE pa0001-pernr,
            rufnm LIKE pa0002-rufnm,
            cell_colour TYPE lvc_t_scol, "Cell colour
          END OF it.

    SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME.
    SELECT-OPTIONS :s_pnum FOR pa0002-pernr .
    SELECTION-SCREEN END OF BLOCK main.

    *ALV data declarations
    DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
    gd_layout TYPE slis_layout_alv,
    gd_repid LIKE sy-repid,
    gt_sort TYPE slis_t_sortinfo_alv.

    * To colour a cell.
    DATA ls_cellcolour TYPE lvc_s_scol.

    START-OF-SELECTION.
      PERFORM data_retrieval.
      PERFORM build_fieldcatalog.
      PERFORM build_layout.
      PERFORM display_alv_report.

    END-OF-SELECTION.
      FREE : it.

    *&---------------------------------------------------------------------*
    *&      Form  build_fieldcatalog
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM build_fieldcatalog .
      fieldcatalog-fieldname = 'PERNR'.
      fieldcatalog-seltext_m = 'Personnel No.'.
      fieldcatalog-col_pos = 0.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR fieldcatalog.

      fieldcatalog-fieldname = 'RUFNM'.
      fieldcatalog-seltext_m = 'Name'.
      fieldcatalog-col_pos = 0.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR fieldcatalog.
    ENDFORM.                    "build_fieldcatalog

    *&---------------------------------------------------------------------*
    *&      Form  build_layout
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM build_layout .
      gd_layout-no_input = 'X'.
      gd_layout-colwidth_optimize = 'X'.
      gd_layout-totals_text = 'Totals'(256).
      gd_layout-coltab_fieldname = 'CELL_COLOUR'.

    ENDFORM. " build_layout

    *&---------------------------------------------------------------------*
    *&      Form  display_alv_report
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM display_alv_report .
      gd_repid = sy-repid.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program = gd_repid
          is_layout          = gd_layout
          it_fieldcat        = fieldcatalog[]
          i_save             = 'A'
        TABLES
          t_outtab           = it
        EXCEPTIONS
          program_error      = 1
          OTHERS             = 2.
      IF sy-subrc <> 0.
      ENDIF.
    ENDFORM. " display_alv_report

    *&---------------------------------------------------------------------*
    *&      Form  data_retrieval
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM data_retrieval .
      select pernr rufnm from pa0002 into corresponding fields of table it where pernr in s_pnum.
      LOOP AT it.
    *Now based on the value of the field pernr we can

        IF it-pernr eq '10000000' .
          ls_cellcolour-fname = 'RUFNM'.
          ls_cellcolour-color-col = '5'.
          ls_cellcolour-color-int = '1'.
          ls_cellcolour-color-inv = '0'.
          APPEND ls_cellcolour TO it-cell_colour.
          IF sy-subrc EQ 0.
            MODIFY it.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "data_retrieval

    REUSE_ALV_POPUP_TO_SELECT 使用方法

     

    SELECTION-SCREEN :
    SKIP, BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max.      "#EC NEEDED
    PARAMETERS p_max(2) TYPE n DEFAULT '20' OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    *---------------------------------------------------------------------*
    TYPES:BEGIN OF ty_user_addr,
            bname      TYPE user_addr-bname,        " User name
            name_first TYPE user_addr-name_first,   " First name
            name_last  TYPE user_addr-name_last,    " Last name
            checkbox,
          END OF ty_user_addr.
    TYPE-POOLS: slis.                    " ALV Global types

    DATA:
      l_exit,
      ls_private  TYPE slis_data_caller_exit,
      ls_user     TYPE ty_user_addr,
      ls_fieldcat TYPE slis_fieldcat_alv,
      lt_fieldcat TYPE slis_t_fieldcat_alv.
    *---------------------------------------------------------------------*
    DATA:gt_user TYPE TABLE OF ty_user_addr.
    *---------------------------------------------------------------------*
    INITIALIZATION.
      v_1 = 'Maximum of records to read'.
    *---------------------------------------------------------------------*
    START-OF-SELECTION.
      PERFORM f_read_data.
      PERFORM f_display_data.
    *---------------------------------------------------------------------*
    *      Form  f_read_data
    *---------------------------------------------------------------------*
    FORM f_read_data.
    * Read Users address data
      SELECT bname name_first name_last UP TO p_max ROWS
        INTO CORRESPONDING FIELDS OF TABLE gt_user
        FROM user_addr.
    ENDFORM.                               " F_READ_DATA
    *---------------------------------------------------------------------*
    *      Form  f_display_data
    *---------------------------------------------------------------------*
    FORM f_display_data.
    * Macro definition
      DEFINE m_fieldcat.
        add 1 to ls_fieldcat-col_pos.
        ls_fieldcat-fieldname   = &1.
        ls_fieldcat-ref_tabname = &2.
        append ls_fieldcat to lt_fieldcat.
      END-OF-DEFINITION.

    * Build the field catalog
      m_fieldcat 'BNAME'      'USER_ADDR'.
      m_fieldcat 'NAME_FIRST' 'USER_ADDR'.
      m_fieldcat 'NAME_LAST'  'USER_ADDR'.

    * Optimize column width
      ls_private-columnopt = 'X'.

    * Display data in a POPUP
      CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
        EXPORTING
          i_selection          = 'X'
          i_zebra              = 'X'
          it_fieldcat          = lt_fieldcat
          i_tabname            = 'GT_USER'
          i_checkbox_fieldname = 'CHECKBOX'
          is_private           = ls_private
        IMPORTING
          e_exit               = l_exit
        TABLES
          t_outtab             = gt_user.

      CHECK l_exit = space.

    * What has been selected ?
      LOOP AT gt_user INTO ls_user WHERE checkbox = 'X'.
        MESSAGE i368(00) WITH ls_user-bname 'selected'.
      ENDLOOP.

    ENDFORM.                               " F_DISPLAY_DATA

    TABSTRIP和TABLEVIEW控件的用法-1

     

    一、TABSTRIP控件用法

    1、首先建一个屏幕0100,打开屏幕绘制器,绘制一个TABSTRIP,命名为MYTABSTRIP,同时定义两个选项卡

    页,第一个选项卡页命名为TAB1,文本为“物料信息”,功能码为TAB1_FUN;第二个选项卡页命名为TAB2,

    文本为“其他信息”,功能码为TAB2_FUN.在控件上绘制一个子屏幕范围,命名为SUB,然后建两个子屏幕0110,0120
    2、打开元素清单选项卡页,在屏幕元素类型为OK的名称处填写功能码OK_CODE,用于用户事件的交互
    3、在程序中声明一个与屏幕控件同名的控件
    CONTROLS MYTABSTRIP TYPE TABSTRIP.
    DATA: OK_CODE LIKE SY-UCOMM,
          SAVE_OK LIKE OK_CODE.
    DATA:  dynnr TYPE sy-dynnr.
    4、在逻辑流中写入代码
    PROCESS BEFORE OUTPUT.
      MODULE STATUS_0100."设置PAI STATUS
      MODULE prepare_tabstrip."设置初始活动选项卡页-TAB1_FUN和调用的初始子屏幕0110
    *在当前程序中调用子屏幕dynnr
      CALL SUBSCREEN SUB INCLUDING SY-REPID dynnr.

    PROCESS AFTER INPUT.
      CALL SUBSCREEN SUB.
      MODULE USER_COMMAND_0100."处理用户交互事件

    5、相关的代码实现

    设置GUI STATUS

    打开 SET PF-STATUS '0100' -〉功能键 -〉"Recommended Function Key Settings" -> the F2 function key - enter the PICK keyword.保存并激活,用于处理在TABLEVIEW控件上单元格的双击操作(以后讲)

    MODULE STATUS_0100 OUTPUT.
      SET PF-STATUS '0100'.
    *  SET TITLEBAR 'xxx'.

    ENDMODULE.
    MODULE prepare_tabstrip OUTPUT.
      IF MYTABSTRIP-activetab IS INITIAL OR
         dynnr IS INITIAL.
        MYTABSTRIP-activetab = 'TAB1_FUN'.
        dynnr = '0110'.
      ENDIF.

    ENDMODULE.

    MODULE USER_COMMAND_0100 INPUT.
      SAVE_OK = OK_CODE.
      CLEAR OK_CODE.
      CASE SAVE_OK.
        WHEN 'BACK' OR 'EXIT' OR 'CANC'.
          LEAVE PROGRAM.
        WHEN 'TAB1_FUN'.
          dynnr = '0110'.
          MYTABSTRIP-ACTIVETAB = SAVE_OK.
        WHEN 'TAB2_FUN'.
          dynnr = '0120'.
          MYTABSTRIP-ACTIVETAB = SAVE_OK.
      ENDCASE.
    ENDMODULE. 

    有用的日期FUNCTION

     

    计算两个日期间的工作天数,就是剔除了双休日后的天数.( 待考证)
    DATE_CONVERT_TO_FACTORYDATE
    HR_HK_DIFF_BT_2_DATES
    根据当前时间如何找到上月的第一天和最后一天?
    CALL FUNCTION 'FIMA_DATE_CREATE'
            EXPORTING
                 I_DATE                  = SY-DATUM
                 I_MONTHS                = '-1'
                 I_SET_LAST_DAY_OF_MONTH = 'X'
            IMPORTING
                 E_DATE                  = LASTDATE.
    LASTDATE是上个月最后一天。
    FIRSTDAY是上月第一天
    CONCATENATE LASTDATE+(6) '01' INTO FIRSTDAY.。
    当天是当年的第几周
    DATE_GET_WEEK
    得到该周第一天
    WEEK_GET_FIRST_DAY
    查找当前月份以前的月份(比如现在是4月份,如果我需要知道6个月之前是哪个月)
    CCM_GO_BACK_MONTHS
    RP_CALC_DATE_IN_INTERVAL
    获取两日期之间天数函数:
    FIMA_DAYS_AND_MONTHS_AND_YEARS
    取得当月的第一天和最后一天
    CONCATENATE sy-datum(6) '01' INTO so_date-low.
    CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
       EXPORTING
         i_date = sy-datum
       IMPORTING
         e_date = so_date-high.
    so_date-sign = 'I'. so_date-option = 'BT'. APPEND so_date.
    RP_CALC_DATE_IN_INTERVAL 年月日加减
    DATE_CHECK_PLAUSIBILITY 日期有效性检查
    SD_DATETIME_DIFFERENCE 两日期作差
    DATE_CONVERT_TO_FACTORYDATE 把输入日期转为工厂日历日期
    MONTH_NAMES_GET 获得所有的月和名字
    F4_DATE     弹出一个窗口显示一个日历允许用户选择一个日期。
    RP_LAST_DAY_OF_MONTHS 获得一个月的最后一天
    FIRST_DAY_IN_PERIOD_GET 获得期间首日
    LAST_DAY_IN_PERIOD_GET 获得期间末日
    DATE_GET_WEEK      返回一个日期所在的周数。
    CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES'"获得两个日期的年数
              EXPORTING
                begda   = gdat
                endda   = sy-datum
              IMPORTING
                c_years = l_age.

    关于星期(周)的函数
    FM:GET_WEEK_INFO_BASED_ON_DATE

    输入参数                        值
    DATE                            2008.01.09

    输出参数                        值
    WEEK                            200802      <----2008年第二周
    MONDAY                          2008.01.07  <----这个周周一的日期
    SUNDAY                          2008.01.13  <----周日的日期
    FM:DAY_IN_WEEK(输入日期是星期几)
    输入参数                        值
    DATUM                           2008.01.09

    输出参数                        值
    WOTNR                           3           <----2008-1-9为周三

    *更多关于Week的函数请看Function Group:CADA
    *弹出选择周的对话框
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_week-low.
      PERFORM getweek CHANGING s_week-low.

    FORM getweek CHANGING p_week .
      DATA: begin_date TYPE d .
      CALL FUNCTION 'POPUP_CALENDAR_SDB'
           EXPORTING
                sel_week   = 'X'
                focus_day  = sy-datum
           IMPORTING
                begin_date = begin_date.
      CALL FUNCTION 'GET_WEEK_INFO_BASED_ON_DATE'
           EXPORTING
                date = begin_date
           IMPORTING
                week = p_week.
    ENDFORM.

    TABSTRIP和TABLEVIEW控件的用法-2

     

    TABLEVIEW中如何编程实现搜索帮助

    1、屏幕设计
    在屏幕TC增加一列GT_MARA-BUKRS,勾选输入字段复选框。

    2、在逻辑流中输入以下代码
    PROCESS ON VALUE-REQUEST.
      FIELD GT_MARA-BUKRS MODULE INIT_BUKRS_LIST.

    3、具体MODULE代码

    MODULE INIT_BUKRS_LIST INPUT.
      DATA:
    *.......row number in the table control where F4 is called
         l_row         LIKE sy-tabix,
    *.......flag for display or change mode
         l_display     TYPE char01,
         lt_return_tab TYPE TABLE OF ddshretval.
    * Get row number of table control on which the cursor is set.
      CALL FUNCTION 'DYNP_GET_STEPL'
        IMPORTING
          povstepl = l_row.

    * Set change or display mode for F4-Help
      LOOP AT SCREEN.
        IF screen-name = 'GT_MARA-BUKRS'.
          IF screen-input = '0'.
            l_display = 'X'.
          ELSE.
            l_display = space.
          ENDIF.
          EXIT.
        ENDIF.
      ENDLOOP.

    * Call Multiply F4 Help for bukrs using
      CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
        EXPORTING
          tabname           = 'T001'
          fieldname         = 'BUKRS'
          dynpprog          = SY-REPID
          dynpnr            = '0110'
          dynprofield       = 'GT_MARA-BUKRS'
          stepl             = l_row
          multiple_choice   = ''
          display           = l_display
        TABLES
          return_tab        = lt_return_tab
        EXCEPTIONS
          field_not_found   = 1
          no_help_for_field = 2
          inconsistent_help = 3
          no_values_found   = 4
          OTHERS            = 5.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDMODULE.                 " INIT_BUKRS_LIST  INPUT

    TABSTRIP和TABLEVIEW控件的用法-3

     

    TABLEVIEW中实现环境菜单

    1、屏幕设计
    在屏幕TC增加一列GT_MARA-MAKTX,在Context menu form 处填写MAKTX。

    2、在程序中实现这个回调子例程
    FORM on_ctmenu_MAKTX USING l_menu TYPE REF TO cl_ctmenu.
      DATA calculate_menu TYPE REF TO cl_ctmenu.
      CREATE OBJECT calculate_menu.
      CALL METHOD: calculate_menu->add_function
                          EXPORTING fcode = 'BACK'
                                    text  = 'BACK',
                   calculate_menu->add_function
                           EXPORTING fcode = 'TAB2_FUN'
                                     text  = 'TAB2_FUN',
                   l_menu->add_submenu
                           EXPORTING menu = calculate_menu
                                     text = '请选择第二层'.

    ENDFORM.                    "on_ctmenu_MAKTX

    TABSTRIP和TABLEVIEW控件的用法-4

     

    搜索查询
    1、屏幕设计
    在屏幕0110中添加两个查询按钮,第一个命名为TBLC_FIND,功能码为TBLC_FIND,图标为ICON_SEARCH,

    第二个命名为TBLC_FIND_N,功能码为TBLC_FIND_N,图标名称为ICON_SEARCH_NEXT,同时在屏幕中添加

    一个TABLE控件命名为TBLC
    2、在程序中添加如下声明
    CONTROLS: TBLC TYPE TABLEVIEW USING SCREEN 0110.
    DATA BEGIN OF gt_mara.
            include structure yxsdtest.
    data chk type c.
    DATA: ICON TYPE ICONS-TEXT.
    data end of gt_mara.
    data gt_mara_list LIKE STANDARD TABLE OF gt_mara WITH HEADER LINE.

    3、在逻辑流中输入

    PROCESS AFTER INPUT.
      MODULE MARA_FIND.
    4、实现内表查询
    *&---------------------------------------------------------------------*
    *&      Form  get_next
    *&---------------------------------------------------------------------*
    *      Searches for P_NAME and P_TEXT in
    *      global internal table <TABLE>,
    *      starting from cursor on table control <TABLECONTROL>
    *      and writing next found index in p_index.
    *----------------------------------------------------------------------*
    *----------------------------------------------------------------------*
    *      <-->P_INDEX index of found object (-1 if no objects were found)
    *      <-- P_NAME  name if the searched object (matnr)
    *      <-- P_TEXT  text of the searched object (maktx)
    *----------------------------------------------------------------------*
    FORM get_next USING    p_index TYPE i  "next found item index
                           p_name
                           p_text
                           p_algo          "search algorithm
                .

      DATA: last_index TYPE i.

    *&---------------------------------------------------------------------*
    *&      MACRO SEARCH_MACROS
    *&---------------------------------------------------------------------*
    *       get next index
    * as defult search from cursor
    * for global search from the beginin????
    *----------------------------------------------------------------------*
    *  &1 - table for search
    *  &2 - name field of the table
    *  &3 - text field of the table
    *  &4 - table controll
    *  &5 - search algorithm:
    *      'FROM_CURR_LINE' - search starting from current line,
    *   (from line where cursor is placed). If cursor is not placed on
    *   table control -  search from first visible line in table control
    *      'FROM_NEXT_LINE' - search starting from next line after line
    *   where cursor is placed. If cursor is not placed on
    *   table control -  search from second visible line in table control
    *      'FROM_BEGIN'     - search starting from begining
    *----------------------------------------------------------------------*
      DEFINE search_macros.
    * if search from cursor
        get cursor line p_index.
        if p_index = 0. p_index = 1. endif.
        p_index = p_index + &4-top_line - 1.
        describe table &1 lines last_index.
        loop at &1.
          if &5 = 'FROM_NEXT_LINE'.
            if sy-tabix <= p_index and p_index <> last_index.
              continue.
            endif.
            if p_index = last_index.  p_index = -1. exit. endif.
          elseif &5 = 'FROM_CURR_LINE'.
            if sy-tabix < p_index and p_index <> last_index.
              continue.
            endif.
            if p_index > last_index.  p_index = -1. exit. endif.
          elseif &5 = 'FROM_BEGIN'.
            if p_index > last_index.  p_index = -1. exit. endif.
          endif.

          if p_name ca '*+' and not p_text ca '*+'.
            if &1-&2 cp p_name and &1-&3 cs p_text.
              p_index = sy-tabix.
              exit.
            endif.
          elseif not p_name ca '*+' and  p_text ca '*+'.
            if &1-&2 cs p_name and &1-&3 cp p_text.
              p_index = sy-tabix.
              exit.
            endif.
          elseif  p_name ca '*+' and  p_text ca '*+'.
            if &1-&2 cp p_name and &1-&3 cp p_text.
              p_index = sy-tabix.
              exit.
            endif.
          elseif  not p_name ca '*+' and  not p_text ca '*+'.
            if &1-&2 cs p_name and &1-&3 cs p_text.
              p_index = sy-tabix.
              exit.
            endif.
          endif.
          if sy-tabix = last_index.  p_index = -1. exit. endif.
        endloop.
        if p_index <> -1.
          &4-top_line = p_index.
        endif.
      END-OF-DEFINITION.

    ** if search from cursor
    *    get cursor line p_index.
    *    p_index = p_index + tc_agr-top_line - 1.

      IF sy-dynnr = 0110.
        search_macros gt_mara_list MATNR MAKTX TBLC p_algo.
      ENDIF.

      IF p_index = -1.
    *    MESSAGE s469(s#).                                       "#EC *
      ENDIF.
    ENDFORM.                    "get_next
    *&---------------------------------------------------------------------*
    *&      Module  MARA_FIND  INPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE MARA_FIND INPUT.

      DATA: tab_search TYPE sval OCCURS 0 WITH HEADER LINE.
      DATA: role_to_find TYPE YXSDTEST-MATNR.
      DATA: role_index LIKE sy-index.
      DATA: role_text LIKE YXSDTEST-MAKTX.
      DATA: returncode.
      CLEAR SAVE_OK.
      SAVE_OK = OK_CODE.
      CLEAR OK_CODE.
    * if user clicked the tblc_find_n button
      IF SAVE_OK = 'TBLC_FIND_N'.
        IF role_to_find IS INITIAL AND role_text IS INITIAL.
          SAVE_OK = 'TBLC_FIND'.
        ELSE.
    * result: modifying search control, messages...
          PERFORM get_next USING role_index role_to_find role_text
                                 'FROM_NEXT_LINE'.
        ENDIF.
      ENDIF.
    * if first search
      IF SAVE_OK = 'TBLC_FIND'.
    * display a popup with search options
        CLEAR tab_search. REFRESH tab_search.
        tab_search-tabname = 'YXSDTEST'. "必须DB层的数据库表
        tab_search-fieldname = 'MATNR'.
        tab_search-value = role_to_find.
        tab_search-novaluehlp = 'X'.
        APPEND tab_search.
        tab_search-tabname = 'YXSDTEST'.
        tab_search-value = role_text.
        tab_search-fieldname = 'MAKTX'.
    *    tab_search-NOVALUEHLP = 'X'.
        APPEND tab_search.

        CALL FUNCTION 'POPUP_GET_VALUES'
          EXPORTING
            popup_title     = 'matnr search'
          IMPORTING
            returncode      = returncode
          TABLES
            fields          = tab_search
          EXCEPTIONS
            error_in_fields = 1
            OTHERS          = 2.
        IF returncode = 'A'. EXIT. ENDIF.

        READ TABLE tab_search WITH KEY fieldname = 'MATNR'.
        role_to_find = tab_search-value.
        READ TABLE tab_search WITH KEY fieldname = 'MAKTX'.
        role_text = tab_search-value.

        IF role_to_find IS INITIAL AND role_text IS INITIAL .
          EXIT.
        ENDIF.
    * form for searching
    * result: modifying search control, messages...
    *   role_index = 0. " strt search from the begining
        PERFORM get_next USING role_index role_to_find role_text
                               'FROM_CURR_LINE'.
      ENDIF.

    ENDMODULE.                 " MARA_FIND  INPUT     "on_ctmenu_MAKTX

    TABSTRIP和TABLEVIEW控件的用法-5

     

    TABLEVIEW某列的隐藏和输入状态的动态控制
    1、屏幕设计
    在屏幕0110添加一个TABLE控件命名为TBLC
    2、在程序中添加如下声明
    CONTROLS: TBLC TYPE TABLEVIEW USING SCREEN 0110.
    TYPE-POOLS cxtab.
    DATA BEGIN OF gt_mara.
            include structure yxsdtest.
    data chk type c.
    DATA: ICON TYPE ICONS-TEXT.
    data end of gt_mara.
    data gt_mara_list LIKE STANDARD TABLE OF gt_mara WITH HEADER LINE.
    3、逻辑流中输入如下代码
    PROCESS BEFORE OUTPUT.
      MODULE operation_mode_set.
    4、具体实现
    MODULE operation_mode_set OUTPUT.
      DATA: cols LIKE LINE OF TBLC-cols.

      LOOP AT TBLC-cols INTO cols.
        IF cols-SCREEN-NAME = 'GT_MARA-BWTAR' or cols-screen-name = 'GT_MARA-NAME1'.

    * hide cols bwtar name1
          cols-INVISIBLE = 1.
          cols-VISLENGTH = 0.
        ELSEIF cols-screen-name = 'GT_MARA-BUKRS'.
    * make input impossible
          cols-screen-input =     0.
          cols-screen-output    = 0.
          cols-screen-active    = 0.
          cols-screen-invisible = 1.
        ENDIF.
        MODIFY TBLC-cols FROM cols INDEX sy-tabix.
      ENDLOOP.
    ENDMODULE.                 " operation_mode_set  OUTPUT

    TABSTRIP和TABLEVIEW控件的用法-6

     

    TABLEVIEW的双击操作
    1、屏幕设计
    在屏幕0110添加一个TABLE控件命名为TBLC
    2、在程序中添加如下声明
    CONTROLS: TBLC TYPE TABLEVIEW USING SCREEN 0110.
    3、设置GUI STATUS
    打开 SET PF-STATUS '0100' -〉功能键 -〉"Recommended Function Key Settings" -> the F2

    function key - enter the PICK keyword.保存并激活,
    4、逻辑流中输入如下代码
    PROCESS AFTER INPUT.
      MODULE USER_COMMAND_0110.
    5、具体实现
    MODULE USER_COMMAND_0110 INPUT.
      DATA:   FIELD_NAME LIKE D021S-FNAM,
              SEL_LINE TYPE I,
              BUKRS LIKE yxsdtest-BUKRS.

      SAVE_OK = OK_CODE.

      CASE SAVE_OK.
        WHEN 'PICK'.
          CLEAR: FIELD_NAME,  BUKRS.
          CLEAR c_flag.
    * Get values of cell in selected line
          GET CURSOR FIELD FIELD_NAME VALUE BUKRS.
    * Get number of selected line
          GET CURSOR LINE SEL_LINE.
          IF SY-SUBRC = 0.
            SEL_LINE = SEL_LINE + TBLC-TOP_LINE - 1.
          ENDIF.

          IF FIELD_NAME EQ  'GT_MARA-BUKRS' AND NOT BUKRS IS INITIAL.
            READ TABLE gt_mara_list INTO gt_mara INDEX SEL_LINE.
            IF SY-SUBRC = 0.
              CALL SCREEN 0111
                     STARTING AT 10 1
                     ENDING AT   60  10.
            ENDIF.
          ENDIF.
      ENDCASE.
    ENDMODULE.

    TABLEVIEW控件编程的变量列表

     

    BPO内

    BPO外

    PAI内

    PAI外

    sy-stepl
    从1计,每次循环自动加1
    0
      从1计,每次循环自动加1
    0

    sy-loopc
    tableview可显示最大记录数(自动)
    0
    tableview可显示最大记录数(自动)
    0

    top_line
    起始值为循环外的top_line值,每次循环自动加1,结束置回原值
    最上一行对应记录号 
    新的top_line,值不变
    最上一行对应记录号 (新)

    cuurent_line
    起始值为循环外的top_line值,每次循环自动加1
    最下一行对应记录号 
    置为上一个BPO外的top_line值
    最下一行对应记录号 (新)

    lines
    需要显示的记录总数,一般设为内表的记录数

    TABLEVIEW控件非向导方式练习

     

    实现TABLE中直接输入、维护,搜索帮助输入,全部行选择、取消全部行选择,行添加、行删除,维护内容导入TXT,退出提示
    TYPE-POOLS: cxtab.
    TABLES:  ussystem.

    CONTROLS tc_subsystems  TYPE TABLEVIEW USING SCREEN 210.
    CONSTANTS:  P_TC_NAME TYPE DYNFNAM VALUE 'tc_subsystems',
                P_TABLE_NAME TYPE string VALUE 'g_subsystems',
                P_MARK_NAME TYPE string VALUE 'MARK_COL'. "必须大写

    DATA  g_fill TYPE i.
    DATA  g_loop LIKE sy-stepl.
    DATA: ok-code   LIKE sy-ucomm."(5)
    data: save-ok LIKE sy-ucomm.
    DATA  BEGIN OF g_subsystems OCCURS 30.
    DATA mark_col.      " note  158208
            INCLUDE STRUCTURE ussystem.
    DATA  END   OF g_subsystems.
    DATA  g_subsystems_lin LIKE sy-tabix.
    DATA mark_col.

    DATA: BEGIN OF tab OCCURS 10,
            fcode LIKE rsmpe-func,
          END OF tab.
    DATA  g_maint_for_own_user_only.  " nur Pflege Benutzervorgaben
    DATA  g_system_added TYPE i.
    DATA  g_data_has_changed.
    DATA: f4_system_tab TYPE ussystem OCCURS 0 WITH HEADER LINE.
    DATA FILENAME LIKE RLGRAP-FILENAME.
    DATA  answer.

    START-OF-SELECTION.
      PERFORM INIT_DATA.
      CALL SCREEN 210.
    MODULE subsystems_lin_get OUTPUT.
      DESCRIBE TABLE g_subsystems LINES g_subsystems_lin.
      tc_subsystems-lines = g_subsystems_lin.
    ENDMODULE.                    "subsystems_lin_get OUTPUT
    MODULE operation_mode_set OUTPUT.
      IF g_maint_for_own_user_only IS INITIAL.
        SET PF-STATUS 'MAIN'.
        SET TITLEBAR 'MAIN' WITH SY-UNAME.
      ELSE.

      ENDIF.

    ENDMODULE.                    "operation_mode_set OUTPUT
    MODULE fill_tc_subsystems OUTPUT.
      READ TABLE g_subsystems INDEX tc_subsystems-current_line.
      IF sy-subrc = 0.
        MOVE-CORRESPONDING g_subsystems TO ussystem.
        mark_col = g_subsystems-mark_col.                "note 524310
        LOOP AT SCREEN.
          IF screen-name = 'USSYSTEM-SUBSYSTEM'.
            screen-input = '1'.
            MODIFY SCREEN.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDMODULE.                    "fill_tc_subsystems OUTPUT
    MODULE read_tc_subsystems INPUT.
      MOVE-CORRESPONDING ussystem TO g_subsystems.           " note  158208
      g_subsystems-mark_col = mark_col.    " note  158208
      MODIFY g_subsystems INDEX tc_subsystems-current_line.  " note  158208

      IF NOT g_subsystems IS INITIAL.
        PERFORM SUBSYSTEM_ADD USING g_subsystems." note  158208
      ENDIF.

    ENDMODULE.               " READ_TC_SUBSYSTEMS  INPUT
    MODULE set_loop INPUT.
      g_loop = sy-loopc.
    ENDMODULE.                    "set_loop INPUT
    MODULE subsystems_del INPUT.           " note  158208
      save-ok = ok-code.
      IF save-ok = 'MARA'.    " note  158208/5 26.05.00
        LOOP AT g_subsystems.              "
          g_subsystems-mark_col = 'X'.     "
          MODIFY g_subsystems.             "
        ENDLOOP.                    "
      ELSEIF save-ok = 'MARD'.    "
        LOOP AT g_subsystems.               "
          CLEAR g_subsystems-mark_col.     "
          MODIFY g_subsystems.             "
        ENDLOOP.                    " note  158208/5 26.05.00

      ENDIF.
    ENDMODULE.                    "subsystems_del INPUT
    MODULE SUBSYSTEMS_RESOLVE INPUT.
      LOOP AT f4_system_tab.
        ussystem-subsystem = f4_system_tab-subsystem.
        READ TABLE g_subsystems WITH KEY subsystem = ussystem-subsystem.
        IF sy-subrc NE 0.

          MOVE-CORRESPONDING ussystem TO g_subsystems.
          APPEND g_subsystems.
        ENDIF.
      ENDLOOP.
      CLEAR: f4_system_tab[].
    ENDMODULE.                 " SUBSYSTEMS_RESOLVE  INPUT
    MODULE SUBSYSTEMS_PAGING INPUT.
      DESCRIBE TABLE g_subsystems LINES g_fill.
      CASE ok-code.
        WHEN 'P++ '.
          PERFORM last_page USING tc_subsystems-top_line g_loop g_fill.
        WHEN 'P+  '.
          PERFORM next_page USING tc_subsystems-top_line g_loop g_fill.
        WHEN 'P-- '.
          PERFORM first_page USING tc_subsystems-top_line.
        WHEN 'P-  '.
          PERFORM prev_page USING tc_subsystems-top_line g_loop g_fill.
        WHEN OTHERS.
      ENDCASE.

    ENDMODULE.                 " SUBSYSTEMS_PAGING  INPUT
    FORM NEXT_PAGE USING TOPIX LOOP FILL.
      DATA Z TYPE I.
      Z = TOPIX + LOOP - 1.
      IF Z <= FILL.
        TOPIX = Z.
      ELSE.
        TOPIX = FILL.
      ENDIF.
    ENDFORM.                    "NEXT_PAGE
    FORM PREV_PAGE USING TOPIX LOOP FILL.
      TOPIX = TOPIX - LOOP + 1.
      IF TOPIX < 1.
        TOPIX = 1.
      ENDIF.
    ENDFORM.                    "PREV_PAGE
    FORM LAST_PAGE USING TOPIX LOOP FILL.
      TOPIX = FILL - LOOP + 1.
      IF TOPIX < 1.
        TOPIX = 1.
      ENDIF.
    ENDFORM.                    "LAST_PAGE
    FORM FIRST_PAGE USING TOPIX.
      TOPIX = 1.
    ENDFORM.                    "FIRST_PAGE
    FORM INIT_DATA .

    ENDFORM.                    " INIT_DATA
    MODULE user_command_0210 INPUT.
      save-ok = ok-code.
      CLEAR ok-code.
      CASE save-ok.
        WHEN 'APPE'.
          PERFORM FCODE_INSERT_ROW USING    P_TC_NAME
                                            P_TABLE_NAME.
          CLEAR save-ok.
        WHEN 'DELL'.
          PERFORM FCODE_DELETE_ROW USING    P_TC_NAME
                                                   P_TABLE_NAME
                                                   P_MARK_NAME.
          CLEAR save-ok.
        WHEN 'UPD'.
          CALL FUNCTION 'DOWNLOAD'
            EXPORTING
              FILENAME = FILENAME
            TABLES
              DATA_TAB = g_subsystems.

          CLEAR save-ok.
        WHEN 'BACK'.
          LEAVE to SCREEN 0.

        WHEN OTHERS.

      ENDCASE.

    ENDMODULE.                 " user_command_0210  INPUT
    FORM SUBSYSTEM_ADD USING    PP_SUBSYSTEM like line of G_SUBSYSTEMS.
      data p_subsystem like pp_subsystem.           " note 158208/2

      MOVE-CORRESPONDING PP_SUBSYSTEM to p_subsystem.
      MOVE-CORRESPONDING p_subsystem to g_subsystems.

      READ TABLE G_SUBSYSTEMS WITH KEY SUBSYSTEM = P_SUBSYSTEM-SUBSYSTEM " note 158208
                                  TRANSPORTING NO FIELDS.

      IF SY-SUBRC <> 0.
        APPEND G_SUBSYSTEMS.
        G_DATA_HAS_CHANGED = 'X'.
      ENDIF.

    ENDFORM.                    "SUBSYSTEM_ADD
    FORM SUBSYSTEM_REMOVE  USING    PP_SUBSYSTEM like G_SUBSYSTEMS-subsystem.
      data p_subsystem like PP_SUBSYSTEM.                    " note 158208/2
      p_subsystem = PP_SUBSYSTEM.                            " note 158208/2
      G_SUBSYSTEMS-subsystem = P_SUBSYSTEM.

    *  DELETE G_SUBSYSTEMS WHERE  SUBSYSTEM = P_SUBSYSTEM-SUBSYSTEM. " note
      DELETE G_SUBSYSTEMS WHERE  SUBSYSTEM = P_SUBSYSTEM ." note 158208

      G_DATA_HAS_CHANGED = 'X'.
    ENDFORM.                    " SUBSYSTEM_REMOVE
    MODULE F4_SUBSYSTEM INPUT.
    *  PERFORM f4_subsystem.

    ENDMODULE.                 " F4_SUBSYSTEM  INPUT
    FORM f4_subsystem .
      DATA:
    *.......row number in the table control where F4 is called
            l_row         LIKE sy-tabix,
            l_index       LIKE sy-tabix,
    *.......flag for display or change mode
            l_display     TYPE char01,
    *.......number of lines in the Table Control
            l_lines_on_tc LIKE tc_subsystems-current_line,
    *.......selected via F4 help subsystems
            lt_systems    LIKE dynpread OCCURS 0 WITH HEADER LINE,
            lt_return_tab TYPE TABLE OF ddshretval WITH HEADER LINE.

      l_lines_on_tc =
                  tc_subsystems-current_line - tc_subsystems-top_line + 1.

    * Get cusrosor row number of the table control
      CALL FUNCTION 'DYNP_GET_STEPL'
        IMPORTING
          povstepl = l_row.

    * Set change or display mode
      LOOP AT SCREEN.
        IF screen-name = 'USSYSTEM-SUBSYSTEM'.
          IF screen-input = '0'.
            l_display = 'X'.
          ELSE.
            l_display = space.
          ENDIF.
          EXIT.
        ENDIF.
      ENDLOOP.

    * Call Multiply F4 Help for subsystems
      CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
        EXPORTING
          tabname           = 'USSYSTEM'
          fieldname         = 'SUBSYSTEM'
          dynpprog          = SY-REPID
          dynpnr            = '0210'
          dynprofield       = 'USSYSTEM-SUBSYSTEM'
          stepl             = l_row
          multiple_choice   = 'X'
          display           = l_display
        TABLES
          return_tab        = lt_return_tab
        EXCEPTIONS
          field_not_found   = 1
          no_help_for_field = 2
          inconsistent_help = 3
          no_values_found   = 4
          OTHERS            = 5.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

      CLEAR: lt_systems[], lt_systems.
      CLEAR: f4_system_tab[], f4_system_tab.

    * Put entry to the screen (table lt_systems)
    * If there is more entries than it possible to display
    * in the table control, copy these subsystems to
    * buiffer (internal table  - f4_system_tab) and add them
    * later in PAI subsystems_resolve

      LOOP AT lt_return_tab.
        l_index = lt_return_tab-recordpos + l_row - 1.
        IF l_index <= l_lines_on_tc.
          IF lt_return_tab-fieldname = 'RCVSYSTEM'.
            lt_systems-fieldname = 'USSYSTEM-SUBSYSTEM'.
          ENDIF.
          lt_systems-stepl = l_index.
          lt_systems-fieldvalue = lt_return_tab-fieldval.
          APPEND lt_systems.
          DELETE lt_return_tab.
        ELSE.
          IF lt_return_tab-fieldname = 'RCVSYSTEM'.
            f4_system_tab-subsystem = lt_return_tab-fieldval.
          ENDIF.
          IF    ( NOT f4_system_tab-subsystem IS INITIAL )
            AND ( NOT f4_system_tab-subsystem IS INITIAL ).
            APPEND f4_system_tab.
            CLEAR  f4_system_tab.
          ENDIF.
        ENDIF.
      ENDLOOP.

    * Upadate table control from internal table lt_systems
      CALL FUNCTION 'DYNP_VALUES_UPDATE'
        EXPORTING
          dyname               = SY-REPID
          dynumb               = '0210'
        TABLES
          dynpfields           = lt_systems
        EXCEPTIONS
          invalid_abapworkarea = 1
          invalid_dynprofield  = 2
          invalid_dynproname   = 3
          invalid_dynpronummer = 4
          invalid_request      = 5
          no_fielddescription  = 6
          undefind_error       = 7
          OTHERS               = 8.
      IF sy-subrc <> 0.
      ENDIF.

    ENDFORM.                    " f4_subsystem
    MODULE cancel_screen_0210 INPUT.

    * Only CANCEL command is processed in the module
      IF ok-code <> 'CANC' AND ok-code <> 'EXIT'.
        EXIT.
      ENDIF.

    *   request to submit CANCEL command
      CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
        EXPORTING
          defaultoption  = 'N'
          textline1      = 'Changes will be lost'(021)
          textline2      = 'Do you want to cancel processing?'(022)
          titel          = 'Cancel editing'(020)
          cancel_display = space
        IMPORTING
          answer         = answer
        EXCEPTIONS
          OTHERS         = 1.
      IF sy-subrc <> 0 .
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      IF answer = 'j' OR answer = 'J'.
    *   CANCEL command is submitted
        PERFORM su10_law_clear.
        LEAVE TO SCREEN 0.
      ELSE.

      ENDIF.

    ENDMODULE.                 " cancel_screen_0210  INPUT
    FORM su10_law_clear .

    ENDFORM.                    " su10_law_clear
    FORM fcode_insert_row
                   USING    P_TC_NAME           TYPE DYNFNAM
                            P_TABLE_NAME             .

      DATA L_LINES_NAME       LIKE FELD-NAME.
      DATA L_SELLINE          LIKE SY-STEPL.
      DATA L_LASTLINE         TYPE I.
      DATA L_LINE             TYPE I.
      DATA L_TABLE_NAME       LIKE FELD-NAME.
      FIELD-SYMBOLS <TC>                 TYPE CXTAB_CONTROL.
      FIELD-SYMBOLS <TABLE>              TYPE STANDARD TABLE.
      FIELD-SYMBOLS <LINES>              TYPE I.

      ASSIGN (P_TC_NAME) TO <TC>.

    * get the table, which belongs to the tc                     *
      CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
      ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

    *get looplines of TableControl                        *
      CONCATENATE 'G_' 'LOOP' INTO L_LINES_NAME.
      ASSIGN (L_LINES_NAME) TO <LINES>.

    *get current line                                           *
      GET CURSOR LINE L_SELLINE.
      IF SY-SUBRC <> 0.                   " append line to table
        L_SELLINE = <TC>-LINES + 1.
    *set top line                                               *
        IF L_SELLINE > <LINES>.
          <TC>-TOP_LINE = L_SELLINE - <LINES> + 1 .
        ELSE.
          <TC>-TOP_LINE = 1.
        ENDIF.
      ELSE.                               " insert line into table
        L_SELLINE = <TC>-TOP_LINE + L_SELLINE - 1.
        L_LASTLINE = <TC>-TOP_LINE + <LINES> - 1.
      ENDIF.
    *set new cursor line                                        *
      L_LINE = L_SELLINE - <TC>-TOP_LINE + 1.

    *insert initial line                                        *
      INSERT INITIAL LINE INTO <TABLE> INDEX L_SELLINE.
      <TC>-LINES = <TC>-LINES + 1.
    *set cursor                                                 *
      SET CURSOR LINE L_LINE.

    ENDFORM.                    "fcode_insert_row
    FORM fcode_delete_row
                   USING    P_TC_NAME           TYPE DYNFNAM
                            P_TABLE_NAME
                            P_MARK_NAME   .

      DATA L_TABLE_NAME       LIKE FELD-NAME.

      FIELD-SYMBOLS <TC>         TYPE cxtab_control.
      FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.
      FIELD-SYMBOLS <WA>.
      FIELD-SYMBOLS <MARK_FIELD>.

      ASSIGN (P_TC_NAME) TO <TC>.

    *get the table, which belongs to the tc                     *
      CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
      ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

    *delete marked lines                                        *
      DESCRIBE TABLE <TABLE> LINES <TC>-LINES.

      LOOP AT <TABLE> ASSIGNING <WA>.

    *access to the component 'FLAG' of the table header         *
        ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.

        IF <MARK_FIELD> = 'X'.
          DELETE <TABLE> INDEX SYST-TABIX.
          IF SY-SUBRC = 0.
            <TC>-LINES = <TC>-LINES - 1.
          ENDIF.
        ENDIF.
      ENDLOOP.

    ENDFORM.                    "fcode_delete_row

    逻辑流中代码

    PROCESS BEFORE OUTPUT.
      MODULE SUBSYSTEMS_LIN_GET.
      MODULE OPERATION_MODE_SET.
      LOOP WITH CONTROL TC_SUBSYSTEMS.
    *MODULE OPERATION_MODE_SET.
        MODULE FILL_TC_SUBSYSTEMS.
      ENDLOOP.

    PROCESS AFTER INPUT.
      MODULE CANCEL_SCREEN_0210 AT EXIT-COMMAND.
      LOOP WITH CONTROL TC_SUBSYSTEMS.
        MODULE READ_TC_SUBSYSTEMS.
        MODULE SET_LOOP.
      ENDLOOP.
      MODULE SUBSYSTEMS_DEL.   " note 158208
      MODULE SUBSYSTEMS_PAGING.
      MODULE SUBSYSTEMS_RESOLVE.
      MODULE USER_COMMAND_0210.

    PROCESS ON VALUE-REQUEST.
      FIELD USSYSTEM-SUBSYSTEM MODULE F4_SUBSYSTEM.

    屏幕绘制
    新建屏幕0210 ,在屏幕中放置两个按钮,第一个按钮名字分别为TC_SELECT_ALL,图标为ICON_SELECT_ALL,功能码为MARA;第二个按钮名字为TC_DESELECT_ALL,图标名称为ICON_DESELECT_ALL,功能码为MARD
    在屏幕中放置一个TABLE控件,名称为TC_SUBSYSTEMS,将属性-表类型,调整大小,分隔符复选框全部选中,行选择选择多重,列选择无,选中 带选择列复选框 输入MARK_COL
    输入输出字段为USSYSTEM-SUBSYSTEM,选中从字典修改,退出对话填写ALPHA
    创建GUI STATUS 在应用工具条中新建两个BUTTON,功能代码 DELL, 图标 ICON_DELETE_ROW;功能代码 APPE ,图标 ICON_INSERT_ROW
    在功能键保存按钮输入功能代码UPD,依次输入功能码BACK,EXIT(功能类型 E)CANC(功能类型 E),分页处依次输入P--,P-,P+,P++

    April 11

    最基本财务基础知识,财务知识基础

    【摘要】 六大要素为资产、负债、所有者权益、收入、费用、利润。此六者构成了企业财务的全部。

    六大要素为资产、负债、所有者权益、收入、费用、利润。此六者构成了企业财务的全部。关系具体如下:


    资产由固定资产、流动资产等组成; 
    负债由流动负债、长期负债等组成;
    所有者权益由实收资本、盈余公积等组成;
    收入由主营业务收入、营业外收入等组成;
    费用由制造费用、经营费用、管理费用、财务费用等组成;
    利润由营业利润扣除各项开支后的项目等组成;


    资产=负债+所有者权益;
    所有者权益=资本+利润;
    利润=收入-费用;
    资产+费用(成本)=负债+资本+收入;
    资产类科目余额+成本类科目余额 = 负债类科目余额+所有者权益类科目余额 +损益类科目余额。


    看懂财务报表
      财务信息的主要来源是企业的年度财务报告。这些文件包括资产负债表、收益表和现金流量表。
      在年度财务报告中,会发现,题为管理讨论与分析的部分。这是企业管理者发现管理中出现的问题和机会。
      财务报表附注虽然是以脚注的形式对财务报表所提供的信息进行的解释,但实际上,这与财务报表本身同样重要。这些附注可能会揭示企业的一些重要事项,例如重要的法律诉讼案、会计方法的变更、高级职员组成结构的变化、以及各商业分部的买卖和重组等。
      如何合理地减少纳税 减税同增加收入和营业利润一样,增加了其净利润或称“底线”。通常,企业可以用许多种方法达到合理地减税目的。


    一、企业的结构
      即使一个经济实体是公司,而非合伙或独资企业,不同种类的公司都有不同的所得税税率。在经济实体从一种类型转变为另一种类型时,也会引起纳税款状况的变化,进而影响到企业的收益情况。此外,公司注册地所在的地区税收政策或法律,也会影响企业的税收负担。
    二、购买的时机
      大多数会计活动是建立在权责发生制基础之上的。运用这种方法,经营活动所带来的收入,在其实际发生的会计年度予以确认;反之,如果收入在其实际取得的会计年度予以确认,那么其会计核算便遵循现收现付制。有时,将业务仅仅推迟一天,就会引起收入的确认挪至下一个年度的问题。如果在某一年度获利较多,企业可通过在同一年度冲销各种可扣除的开支而获益,即有效降低其应税收入;反之,如果获利很少,或企业已经在本年度冲销了许多支出,那就可以将购买行为推迟至下一年度,即将其在下一年度扣减。
    三、坏帐冲销的时机
      那些实际已经过期而尚未收回的应收帐款,有时可能收不回。与上述购买的时机完全相似,企业可将冲销坏帐的时间,定在这种扣减能够带来很大好处时候。
    四、折旧
      政府允许企业确认因设备和不动产的磨损或过时所引起的价值减少,进而减少其应缴税金。一般来说,政府可以通过折旧政策的变更,来试图刺激某一特定行业或经济的增长。


    如何看懂报表?
      财务报表是企业向管理者和外界提供和公布企业经营情况的正式文件,因此正确编制会计报表对于企业来说十分重要。
    会计报表中,除财务状况变动表中有些数据来自于分析外,其余各表都来自于帐本。基本报表为资产负债表和损益表,资产负债表资产总数等于负债总数,并且要求数字正确,期期相关;损益表实际上是一张结转利润的会计凭证,通过收入与各项费用的相互抵减可以体现出企业本期的净利润;利润分配表是分配企业净利润去向的会计报表,通过净利润与各项目的抵减,可结算出未分配利润的数额;财务状况变动表是反映企业年度内营运资金增减变化的报表(营运资金就是流动资金减去流动负债后的差额,流动资金是用于企业日常经营的资产,流动负债是企业在一年要偿还的债务)。财务状况变动表可以帮助投资者和企业管理者了解企业资金的使用是不是合理,资金来源的渠道是不是顺畅,企业资金融通有没有困难,进而了解企业的财务政策,分析企业的偿债能力。现金流量表是反映企业在各种经济业务上所发生的现金流量的一张动态报表,现金流量的最后结果是计算出本期新增加的净现金流量。现金流量表可以反映净收益与现金余额的关系,现金余额与企业盈亏并不一定成正向变化,一般认为有现金流量支持的净收益是高质量的,否则反之,现金流量表报告过去一年中的现金流量,可以预测未来的现金流量,评价企业取得和运用现金的能力,确定企业支付利息、股利和到期债务的能力,再者可以表明企业生产性资产组合的变化情况。

     
    各报表的作用用一句话来概括就是:
    1.资产负债表是反映某一时刻的财务状况。
    2.损益表是反映某一时刻的经营成果,该表的最后一个数字“净利润“将列入利润分配表。
    3.利润分配表反映某一时期的利润分配情况,将期初未分配利润调整为期末未分配利润,并列入资产负债表。
    4.现金流量表反映现金变化的结果和财务状况变化的原因。


    一、资产负债表
      首先让我们来看看关于会计的两个重要公式。
      公式1 借方=贷方
      会计的基础课程始于借方和贷方。借方在帐簿的左侧,贷方在帐簿的右侧。在这里,要牢记一条不变的定律:“借方=贷方”,换句话说,在任何交易中,都必须同时登记到帐簿的左右两侧,其原则如下:
    (1)资产增加时,记入左侧;资产减少时,记入右侧。
    (2)负债增加时,记入右侧;负责减少时,记入左侧。
      公式2 资产=负债+股东权益
      会计学上最重要的概念是“平衡”,它的主体就是刚才提过的借方与贷方,简言之,资产增加是借方;负债或股东权益增加是贷方,双方相抵即所谓的“平衡”。
      资产负债表以这两个重要公式为依据,它反映了企业在某一定时间的财务状况,它揭示了公司拥有什么,即公司的资产;公司欠什么人的债,即公司的负债;以及公司净资产价值,即股东的权益。资产负债表上的各帐户在每一新的会计年度开始时,不能被结清而使其余额为零。在资产负债表中,资产是按流动性从大到小的顺序排列,而负债则是按债务到期日由近到远的顺序排列。


    二、收益表
      收益表反映企业在某一段时间内的获利情况。它与资产负债表的一个显著区别是每一新的会计年度开始时,收益表上的各帐户都会被结平,其余额为零。
    该报表的一般关系式可表示为:
    毛收入-总费用=净利润(损失)
    这一表达式可派生出下列表达式:


    营业利润(损失)=销售收入-成本费用合计上式中,成本费用合计包括:
    一、企业偿还能力分析
      企业偿债能力的大小,是衡量企业财务状况好坏的标志之一,是衡量企业运转是否正常,是否能吸引外来资金的重要方法。反映企业偿债能力的指标主要有:
    (1)流动比率。
      流动比率=流动资产总额/流动负债总额×100%流动比率是反映企业流动资产总额和流动负债比例关系的指标。企业流动资产大于流动负债,一般表明企业偿还短期债务能力强。流动比率以2∶1较为理想,最少要1∶1。
    (2)速动比率。
      速动比率=速动资产总额/流动负债总额×100%速动比率是反映企业流动资产项目中容易变现的速动资产与流动负债比例关系的指标。该指标还可以衡量流动比率的真实性。速动比率一般以1∶1为理想,越大,偿债能力越强,但不可低于0.5∶1。
    (3)现金比率
      现金比率=现金类流动资产/流动资产总额×100%现金比率是反映企业流动资产中有多少现金能用于偿债。现金比率越大,流动资产变现损失的风险越小,企业短期偿债的可能性越大。
    (4)变现比率
      变现比率=现金类流动资产/流动负债×100%变现比率反映企业短期的偿债能力,又具有补充现金比率的功能。
    (5)负债流动率
      负债流动率=流动资产/负债总额 × 100%它是衡量企业在不变卖固定资产的情况下,偿还全部债务的能力。该比率越大,偿还能力越高。
    (6)资产负债率(负债比率)
      资产负债率=负债总额/ 资产净值×100%资产净值是指扣除累计折旧后的资产总额。它反映企业单位资产总额中负债所占的比重,用来衡量企业生产经营活动的风险程度和企业对债权的保障程度。该比率越小,企业长期偿债能力越强,承担的风险也越小。
    二、周转能力分析
      周转能力反映企业生产经营资金在获利条件下的周转速度。考核的主要指标有:
    1.应收帐款周转率。
    应收帐款周转率=赊销净额/平均应收帐款余额×100%
    应收帐款周转天数=日历天数/ 应收帐款周转率
    应收帐款周转率是反映企业在一定时期内销售债权(即应收帐款的累计发生额)与期末应收帐款平均余额之比。用来验测企业利用信用环节展销货业务的松紧程度,反映企业生产经营管理状况。
    2.存货周转率。
    存货周转率销售成本额=销售成本额/存货平均占用额 ×100%
    存货周转天数=日历天数/存货周转率
    存货周转率是反映企业存货在一定时期内使用和利用的程度,它可以衡量企业的商品推销水平和销货能力,验证现行存货水平是否适当。
    3.流动资产周转率。
    流动资产周转率=销售收入/ 流动资产平均占用额 ×100%
    该指标用来衡量企业生产产品是否适销对路,存货定额是否适当,应收帐款回笼的快慢。
    4.固定资产周转率。
    固定资产周转率=销售收入/ 固定资产平均占用额 ×100%
    该指标表明固定资产的价值转移和回收速度,比率越大,固定资产的利用率越高,效果越好。

     
    三、获利能力分析
      企业获利能力分析的目的在于观察企业在一定时期实现企业总目标的收益及获利能力。衡量企业获利能力的主要指标有:
    1.资本金利润率
    资本金利润率=企业利润总额/ 注册资本总额 ×100%
    该指标是衡量企业经营成果,反映企业获利水平高低的指标。它越大,说明企业获利能力越大。
    2.销售利润率
    销售利润率=利润总额/产品销售收入×100%
    该指标是反映企业实现的利润在销售收入中所占的比重。比重越大,表明企业获利能力越高,企业的经济效益越好。
    3.成本利润率。
    成本利润率=利润总额/成本费用总额×100%
    该指标是反映企业在产品销售后的获利能力,表明企业在成本降低方面取得的经济效益如何。
    4.资产报酬率。
    资产报酬率=(税后净收益+利息费用)/ 平均资产总额×100%
    该指标是用来衡量企业对所有经济资源的运用效率。


    四、成长能力分析
      企业成长能力分析的目的是为了说明企业的长远扩展能力,企业未来生产经营实力。评价企业成长能力的主要指标有:
    1.股本比重。
    股本比重=股本(注册资金)/ 股东权益总额
    该指标用来反映企业扩展能力的大小。
    2.固定资产比重。
    固定资产比重=固定资产总额/ 资产总额
    该指标用来衡量企业的生产能力,体现企业存在增产的潜能。
    3.利润保留率。
    利润保留率=(税后利润-应发股利)/ 税后利润
    该指标说明企业税后利润的留存程度,反映企业的扩展能力和补亏能力。该比率越大,企业扩展能力越大。
    4.再投资率。
    再投资率=(税后利润-应付利润)/ 股东权益该指标是反映企业在一个经营周期后的成长能力。该比率越大,说明企业在本期获利大,今后的扩展能力强。


      必须指出,上述各指标是从不同角度、以不同方式反映和评价企业的财务状况和经营成果,因此要充分理解各种指标的内涵及作用,并考虑各指标之间的关联性,才能对企业的生产经营状况作出正确合理的判断.

    想转SAP FICO顾问的必看

     

    下面的文章太好了,它为我指明了SAP R/3 FI/CO大致的方向。

     

     

      早就答应给大家写一下我做SAP顾问的一点心得,今日稍稍得闲,想起对诸位的承诺,不如早早动笔,免得日久忘笔食言。
    想来做这个行业时间不长,但感触颇深,在此分享,希望对诸位有所裨益!
    分以下几个话题:
    1. 几个简单概念.
    2. 如何成为一名SAP顾问。
    3. 如何成为一名优秀的FICO顾问。
    4. SAP顾问的生活状态。
    5. FICO顾问在各阶段的任务。
    6. 结语

    一.几个简单概念:KEY USER, IT USER, END USER

      1. KEY USER:在一个SAP项目中,KEY USER是客户方的业务骨干人员,在项目中负责向模块顾问传递企业内部所负责领域的关键需求,也是系统测试阶段的关键测试人员,对FICO来说,通常是一些较为资深的会计人员,财务经理等;KEY USER全面掌握SAP前台操作,负责对END USER的操作培训,是顾问和END USER之间的联系人,收集并负责向顾问解释END USER的需求。

      2. IT USER: 是客户方IT部门的成员,通常计算机基础很好,在项目实施过程中从KEY USER处获得本企业相关领域的业务知识,从顾问处获得相关模块的SAP知识和技能; IT USER全面掌握SAP的前后台操作,负责解决SAP使用过程中的技术问题,项目实施中是顾问的得力助手,项目结束后作为企业内部顾问,对企业新的业务需求进行分析并给出解决方案。

      3. END USER:是企业SAP的最终使用者,一般的业务人员,各层级的经理等等,企业内部SAP使用者只要不是KEY USER,IT USER的都可以称为END USER.END USER是客户需求的初始提出者,SAP系统规划的最终目的也就是满足他们的需求,日常业务中每个END USER仅使用SAP前台的部分相关操作,对FICO 来说,END USER可以分为总账,应收,应付,资产,出纳,成本,财务经理等,每个人通常只有部分前台操作。

      从以上几个概念可以看出,最有可能成为SAP顾问的就是IT USER,随后是KEY USER, 再其次是END USER,从某个网站的统计资料可以看到,FICO顾问中,IT背景和财务背景的各占一半。


    二.如何成为一名SAP顾问:

      1. 可以推理得出,最容易成为顾问的还是IT USER,因为通常IT USER对SAP的技术知识以及相关业务知识,项目实施过程都有所了解,所以应聘为一名初级顾问应该很容易。对于一些对SAP很感兴趣的KEY USER,由于有着丰富的业务知识,对SAP系统前台业务的较多的理解,相对来讲也容易成为一名处级顾问,END USER就很差了。作为END USER,要花费相当大的努力最好先成为一名KEY USER,转为顾问才会轻松些。很多大公司实施SAP后,人员流动非常之快,IT USER和KEY USER的流动率很高,新招的人很难原来就做过KEY USER或者IT USER的,对SAP感兴趣的END USER,这时可以试试。

      2. 没有任何基础,如果接受了SAP顾问学院的培训并获得PA证书,也很容易应聘成为顾问;SAP顾问学院的学费极其高昂,通常是企业出资培训,可以想象此种培训背后的违约协议将是如何严格,并且不见得培训后一定会获得此证书。还有其他各种培训公司对学员的培训,但这种培训如果有项目实习,那将会更好,但没有哪个公司敢保证对学员的项目实习机会,即使有,费用绝对高昂。

      3. 没有任何基础,也没有获得什么PA证书,想成为一名SAP顾问,可以想象就更难了。我想跟大家强调的就是这种情况下如何成为一名SAP 顾问.

      经过了这个课程的培训,感觉上即使SAP应用的水平再差,如果能把我们课堂练习的那些内容作过去,SAP 的前台操作应该没有问题的,和不懂SAP的人相比你们已经很懂,如果稍加练习,然后应聘为一个企业的KEY USER, 绝对不成问题的,好一点的可以直接到一些顾问公司去应聘,当然不要挑选顶尖的公司,那需要你有更多其他方面的实力.

      如今的企业在招聘KEY USER的时候,似乎条件很高,但我相信你只需告诉他们你已经有某公司的KEY USER经验一年以上,而且在面试的时候,他们从前台操作及SAP的概念上无法难倒你,你成为一名KEY USER的可能性很大,做一名SAP的KEY USER实际上是很舒服的,甚至有很多顾问最终都选择了做企业的KEY USER. 当你成为一名KEY USER并且在企业内部也做过实施的话,你就完全具备出来做顾问的条件了,剩下的只是你如何对你所想去的顾问公司表现你对SAP的理解了。

      对于几位从事ABAP的学员,我建议你们以ABAP顾问的身份进入顾问公司,然后在项目中和模块顾问学习,我所在的公司的ABAP顾问很多都是通过这种方式转变为模块顾问的,还有就是,如果能够精通ABAP并且了解SAP业务模块,此种水平的ABAP也很值钱的哟!

      成为一名SAP顾问的途径很多,但前提是你非常渴望在这一行发展,我们常说:有志者事竟成,是的,我非常相信这句话,想做,就能做到。而且我绝对相信,咱们这些学员中肯定会有几人很快走上顾问这行的,要知道,大家的起点曾经是一样!


    三. 如何成为一名优秀的FICO 顾问:

      FICO顾问在几乎所有SAP项目中都要有所参与,并且与几乎所有模块都有所关联,个人认为,FICO顾问的发展潜力是很大的。

      1. FICO的特点:PP是几乎每个项目都不一样,所以做起来又苦又累,而FICO几乎每个项目都差不多,FI没有那么多的灵活性,一切都要按照符合会计制度的方式来设置,操作。CO灵活性很大,但是正是这种灵活性,让顾问有更多的可发挥的空间,也正是客户所感知的价值所在。关于FICO,几乎没有什么可以争论的问题,FI的做法永远都很标准,CO的灵活通常是超过客户的期望的。

      2. 作为一个FICO顾问,首先是其他模块顾问的财务指导,其他模块的业务流程涉及到财务的部分,财务可以最终决定取舍,毕竟,财务是外部要求,很难变通,如果一项后勤的操作的财务影响不符合会计制度,毫无疑问要取消掉.所以很多时候后勤顾问(PP,MM,SD)提出的新流程都要征求财务顾问的意见,这就需要财务顾问对SAP后勤知识有一定的了解,

      3. 作为一个FICO顾问,只跟客户讲SAP是不够的,要与财务经理在业务上进行沟通,客户有些时候对SAP的某种操作提出质疑,我们要从财务原理的角度上去解释;了解客户需求需要顾问有一定基础的财务知识,在项目中,如果让客户方感觉出顾问不懂财务,权威性一旦遭到质疑,那接下来项目一定会做的很辛苦。

      4. 从财务部分延伸出去的SEM以及EIS,BW都是信息系统发展的方向,掌握了财务部分,你会更清晰的理解一个企业运作的原理和目标。

      从以上可以得知,要想做好财务顾问,财务知识,一些常见的SAP后勤模块的知识一定要有的,所以,你需要下的功夫很多哟。这所有的一切,不过是成为一名优秀的FICO顾问所应该具备的,要想做到这一点,还需要态度和努力。

      大家能够见到的顾问形形色色,仅仅很精通SAP某模块知识和优秀的或者说资深的顾问完全是两回事请;SAP模块知识掌握的多少, SAP整体知识的掌握,项目实施经验,客户沟通技巧,对待工作的热情和态度……,如果你想成为一名优秀的顾问,在这些方面都要做得很好才可以哟!


    四.SAP顾问行业的生活状态:

      1. 做好吃苦的准备;是否能吃得了这份辛苦:顾问收入高,但也超级辛苦,华尔街投资顾问以及大公司的咨询顾问动不动就连续三四天平均每天只睡三四个小时的工作,还好,SAP顾问远没有那么辛苦,除了上线阶段外,平时为项目的事情也就加班到八九点钟,但问题是, SAP的博大精深大家一定有所耳闻,从业者对其欲罢不能,尤其是初涉此行业的人,都是把几乎所有的业余时间都用在了系统操练上,越搞感觉不懂的越多,上瘾呀,所以很难罢手,怎不辛苦!?

      2. 要承担巨大的压力:你肯定会经历这个环节,客户的需求很多,而有的你根本就不知道SAP是否能够实现,从他人那里也找不到帮助,所以要自己测试,自己不懂,但不能跟客户讲你不懂,你要读大量的文档,要去在短时间内把一个不熟悉的东西变成自己非常熟悉的。

      3. 凡事靠自己:不要寄希望公司会给你什么帮助,也不要寄希望别人会给你什么主要的帮助,没有谁会耐心地给你讲解SAP内部的种种关联,你对其他资深顾问提出的问题应该以寻求确认的方式去问,比如你可以问:

    A..某种特别的需求可不可以在系统中实现?

    B. 通过某种方式可不可以实现某种功能,有什么潜在的风险?

    C. 通常某种需求在系统中是不是这样实现的?

    D.没有相关的文档(配置文档,操作手册)发来瞧瞧?

      这样的问题让别人在回答你的问题的时候,根据经验很容易做答, 大家时间都宝贵,你需要从他那里获得确认你的某些想法的信息,而不是让他详细地告诉你如何如何去做,所以也就需要你在准备问题的时候自己要多下功夫思考和阅读一定的资料。而且只有这样,你的功力长的才会很快,因为有些时候,依赖过多也会形成习惯的。

      4. 经常出差:很少会有项目就在我们所在的城市进行,因此,出差是家常便饭,如果是附近省份或者省内项目,每周回家不成问题,如果是较远地区需要乘坐飞机,好一点的公司会允许两周一次公费往返,很多公司甚至一个月允许一次公费往返。

      所以大家可以想一想,这样的生活状态是否是你所能人忍受的,你喜欢这么做,还是因为收入高你宁愿这么做?一定要从自己的现实状况去考虑一下!我见过有的顾问因为作这一行,老婆离婚,女友分手的,还有的人父母年迈需要照料,长期出差难以承受的,总之,要先权衡一下,一旦是那样的生活状态,自己是否可以承受。


    五.FICO顾问在各阶段的任务。

      通常来讲,不论采用什么样的项目实施方法论,整体的项目实施过程基本上是一样的,我在课堂上曾给大家做过一定的解释,那就是项目实施的五个阶段:项目准备,蓝图设计,系统实现,上线准备,系统切换及上线支持。下面我分别介绍各个阶段对FICO来讲的任务有哪些:

      1. 项目准备:这个阶段通常来讲算是项目前期工作的一个总结,以项目启动大会为结束标志,它包括了项目计划,项目章程,组织结构,人员职责,项目工作环境等等的设定,这个时候,顾问甚至还没有完全进入项目,通常开项目启动大会的时候,顾问到场出席即可。

      2. 蓝图设计:这个阶段主要完成客户未来流程的设计,作为FICO顾问,你要做的事情主要有如下几点:

    A. 概念培训:对KEY USER和IT USER进行SAP FICO OVERVIEW的一个培训,此培训通常基于IDES系统,主要让客户掌握SAP的基本概念,对SAP的操作和运行方式有个基本的了解。

    B. 现状调研:对总帐,应收,应付,固定资产,成本计划以及核算等财务子职能的现状进行调查,详细了解客户各方面的需求,这个阶段顾问间要经常沟通,从而可以更全面地掌握客户需求。

    C. 蓝图设计:对比现有流程与SAP标准流程间的差距,通常财务流程较为标准,对于特殊需求,特别考虑一下即可。这个阶段的顾问要写出蓝图文档,也是客户与顾问冲突最大的阶段,成功的关键是引导客户需求,降低客户对项目不切实际的期望等等。

      这个阶段对初级顾问来讲,极其痛苦,你不得不在业余花费大量的时间去准备好多未知的东西,让客户相信你,只有充分的准备,而这些需要大量的精力投入。

      3. 系统实现:此阶段要将蓝图设计中涉及到的流程,在SAP系统里给予实现,更多的是技术方面的工作,也就是系统配置,配置结束后要进行顾问内部的测试,将基本流程测试无问题后进行单元测试和集成测试,单元测试过程是IT USER和KEY USER掌握SAP详细功能的起点,针对本业务范围内的所有业务场景进行功能测试, 单元测试文档由KEY USER准备出来,记录测试过程及结果,这个文档也是接下来用户培训阶段培训手册的蓝本。此阶段顾问要着重解决KEY USER提出的各种业务流程在系统中如何表现的问题,也是对KEY USER进行SAP操作培训的最重要的一个步骤。单元测试结束后将进行集成测试,集成测试可先在两两模块之间进行,先解决小范围集成遇到的各种问题,然后再进行大范围的集成,涉及到企业日常运作的主要场景,从销售预测,销售订单,生产计划,采购,库存,生产,销售,收款等等业务循环各阶段的操作的进行,凭证的显示查询,单据的流转等等。此部分内容主要由KEY USER 来进行;本阶段你要负责的事情:

    A. 配置系统并和其他模块顾问进行内部测试。

    B. 与KEY USER一起进行单元测试,并负责解决测试中出现的各种问题

    C. 培训KEY USER和IT USER基本业务流程操作

    D. KEY USER 进行集成测试,负责解释后勤业务部门提出的疑问,并解决接口问题

    E. 权限角色的设定(通常有模板,此模板我也给过大家一份)

    F. 客户需求的各种单据表格的开发测试(和ABAP沟通)

      3. 上线准备:此阶段要做的主要工作是上线数据的准备以及最终用户的培训工作,数据可分静态数据和动态数据,静态数据也可称为主数据,如客户,供应商,物料等等,动态数据为业务产生的数据,如客户余额,物料库存数量等等,对FICO顾问来说,要准备的静态数据无非是总账科目,客户,供应商要对应的统驭科目,银行信息,还有就是物料的价格信息,而动态数据无非是各种类型账户的科目余额,这个阶段作为FICO顾问你需要做的事情是:

    A. 提供数据准备的模板给关键用户,负责解释模板各字段含义

    B. 检查数据准备的质量

    C. KEY USER对END USER进行最终培训,顾问要负责支持

    D. 此阶段仍旧会有客户特定需求的配置,改动等等

    E. 系统上线数据切换策略(我曾经给过大家的DATA CONVERSION STRATEGY)

      4. 系统切换以及上线支持:此阶段实现数据从原有系统到新系统的导入,对于后勤业务来说,物料主数据必须首先导入系统,然后是BOM, ROUNTING, 已经下达尚未收货的采购订单,生产订单,尚未交货的销售订单等等,对于财务部分,最最重要的是将总账和明细账对平:

    A. 导入上线时刻财务数据到新系统:对于总账存货科目余额,一定要和所有物料价值明细对平,允许的差异记录到材料成本差异账户,总帐的固定资产余额要与固定资产明细对平,应收应付预收预付总帐科目要与客户供应商余额明晰对平。通常用CATT就可搞定。

    B. 运行成本估算,从系统内产生物料的标准价,从而后勤物料移动,成本信息准确反映。

    C. 上线后的日清操作:上线后要对所有从后勤业务产生的财务凭证进行检查,从而保证后勤业务和财务的正确集成。一旦发现错误操作,当天发生的,当天解决,财务尤其需要关注的是仓库的收发料操作,错误的物料价格,错误使用的移动类型,常常对财务产生较大的影响,而且此种类型的错误一定要进行纠正,必要时可采取一些奖惩措施。

    D. 上线后月结支持:通常SAP系统上线第一个月的月结需要财务顾问现场指导,而且在月结时候暴露出来的一些业务问题要进行纠正。

    E. 上线后的其他支持:系统上线后两周左右,顾问撤离客户公司,以后的大部分支持是通过电话,EMAIL,VPN远程连接来解决的。END USER的问题传递给KEY USER和IT USER, IT USER作为企业内部顾问将逐渐取代FICO顾问的角色,他们再将自己无法解决的问题传递给顾问,顾问解决不了的再向SAP发送MESSAGE, 请求SAP的全球支持,就是这样一个帮助链条保证SAP系统的正常运行。


    六.结语:

      这段文字开始起笔于4月17日,结束于5月3日上海飞往吉隆坡的飞机上,按理说这点东西完全可以一气呵成,可忙碌的工作让我很少有心情去写,可我还是希望把自己了解的一点关于SAP顾问的东西让大家一起来分享。希望对各位能有所帮助。

      我相信有些同学还在犹豫:自己是否去做顾问?做了顾问的前途是什么?而我一直认为,人一生只要能够认真做好一件事情,实属不易,而企业IT应用这一块的市场一直在发展,所以,想做什么不要犹豫,年轻的时候做什么都有道理,关键是要利用好自己的时间,珍惜每一天,让每一天都过得有意义,你的付出终有回报,相信自己才会成功!

      让自己变得足够专业,这个世界真的会属于你!我在努力,希望我们能一起努力!

      谢谢!