我们选择客户的三大标准(转)

2007-06-28 10:58  来源:中国管理培训网

  营销上有两个名词叫做“坐商”与“行商”,顾名思义,坐商就是指坐等客户上门,而行商则是主动出击。通常的观点是,要变“坐商”为“行商”,要主动出击争取客户。也就是说,坐商相对行商来说是落后的营销模式。

  那么,为企业出谋划策的营销策划公司们,对于自己的营销模式,又是如何选择的呢?这是一个很有趣的问题,大家可以自己思考一下。

  营销的最高境界是供不应求,客户们争着抢着排队甚至走后门地购买你的产品。这种商人们梦寐以求的圣况,曾经在营销的最低级状态计划经济的年代里发生过,而在如今这个竞争过剩的时代,大家都在为仓库里的货物而发愁。
 
  作为营销策划界领航者的采纳,我们在面对自己的营销模式时,采取的是反其道而行之:创造供不应求的局面,从“行商”转为“坐商”,坐望天下客。

  首先,我们控制了自己的发展速度。知识不像产品那么容易复制,那么容易批量生产,因而我们奉行了该蹲的时候就不要站起来、该站的时候就不要急着走、该走的时候就不要忙着跑的发展原则,严格控制了自我的发展速度。
  
  其次,我们控制了自己的团队扩张。策划行业说到底,还是一个人才需求高密度的行业,而人才的储备与团队的建设,直接决定了服务客户的实效性。因而,采纳历经十二年的发展,一直在夯实基础,构建知识平台,磨练服务团队,控制着团队的扩张。

  最后,我们控制了自己的客户数量。为了保证服务的有效性,我们采取了最实战也最辛苦投入人力及资源也最大的贴身式全程营销服务,同时我们限定服务客户的数量,以保证每个客户都能获得足量的支持。
于是我们形成了供不应求的局面,深圳北京上海三地共近200人的队伍,全年服务客户的数量也就20来个,而全年上千家主动找上门的客户,想不坐商都困难。

  同时,我们在坐商的基础上,进一步变本加厉,打破了客户选择策划公司的传统,提出了我们选择客户的3大标准:

  一、潜力

  客户的品牌及产品是否具有潜在的增长价值?如果不具有,作为品牌公司的采纳是不会用自己的品牌去冒险的。

  好的策划能让好产品快速成长,也能让坏产品死得更快。有些客户总不以为然,认为通过策划可以把石头也卖个黄金价,殊不知,产品的品质才是品牌成长的真正因素,策划更多的是建立品牌印象,解决产品的首次购买问题。这样的客户,我们一概拒之门外。

  二、胸怀

  我们认为,企业成长的关键因素不在于实力,而在于胸怀。
  采纳12年前诞生时,就喻意“china”,代表着中国营销策划,所以采纳能成为中国营销策划界的领航者,持续12年谱写中国营销传奇,持续12年引领中国营销智慧。

  只有那些立志改变行业格局、立志争当第一、具有大胸怀的企业才是我们选择的对象,哪怕实现这个历程需要10年,20年,甚至更多时间。
  
  什么样的胸怀,决定了企业什么样的高度。

  对于那些只想获得点销量的提升,对于那些只想解决下生存的困难,对于那些梦想不劳而获好高骛远不切实际不愿投资只求回报缺乏胸怀的企业们,最好连采纳的门都不要踏入,任何的洽谈都是在浪费我们双方的时间,那些采纳的跟随者们才是你们的选择,那些和你们门当户对的策划公司才是你们的选择。

  三、信任

  信任采纳。只有在相信我们能够解决企业面临问题的前提下,合作才会成功。每一个客户,在正式签约后都将先行支付一笔不菲的费用,如果缺乏基本的信任是很难想象的。

  要产生信任就需要了解采纳、熟悉采纳,了解我们公司的成长历程,了解我们过往的案例,了解我们的策划思想,了解我们的营销观点,了解我们认识问题以及解决问题的方法论……唯有如此,信任才会产生。
  反观有些客户,不切实际地急于让策划公司为自己提思路、出良策、写方案,大脚就不相信,左右企业前程的策略和创意,就在这既没有经过企业内访,也没有经过市场调查研究的短短个把星期甚至几天内就出来了,更不敢相信有的企业居然就看重这个。我们在服务客户时,少则一月,多则两三个月的问题研究期是免不了的,期间无数次的研讨论证争执反复更是家常便饭。对于这些急于要方案,无心对我们进行深入了解的客户,我们的态度是拒绝。

  只有符合以上三大标准的客户,我们才会请进门,泡上一壶清茶,大处着眼,小处着手,从长计议,共同谱写营销传奇。
  
  正所谓,道不同,不相为谋。

金蝶EAS研究

金蝶EAS推出已有2年多,我有些问题需要得到解答:

1)功能涵盖哪些?对实际业务的支持力度如何?

2)稳定性如何?

3)并发处理能力如何? 

4)实施效果如何?如果不好,原因包含哪些,最主要的原因是什么?

5)网上有些针对金蝶EAS的文章说其如何如何不好用,这些文章究竟是实情还是其竞争对手的枪手写的?

门店预算管理简析(转)

门店预算管理简析

时间:2006-6-23 14:56:06   

    企业管理的第一项职能就是计划和预算。推行预算管理对提高企业经营管理水平,加强财务监控,提高企业经济效益,有着积极的作用。

    门店作为苏果超市基本业务单元,预算主要包括门店损益、资本性支出两大内容。

    门店损益预算是以门店为单位、按月预测门店未来一段时间内的经营业绩。它主要包括门店基本资料(如租赁面积、自营面积、出租面积、员工人数等)、业务数据(如销售净额、销售成本、采购收入、费用、利润等)、指标比例比率(销售毛利率、采购收入率、费用率等)三大部分,通过预算数与实际完成数的对比发现问题,以确保经营活动不偏离企业发展战略。

    门店损益预算首先反映的是门店经营规模,从收入(销售收入、采购收入、租金收入、其他业务收入)、费用(员工成本、折旧和摊销、租金支出、水电费、耗用品等)、利润(经营利润、EBITDA)三个方面完整地反映了门店的经营业绩。通过这些数据的分析,要求门店负责人不仅要关注销售规模,也要关心商品结构、销售毛利、可控费用、不可控费用等经营活动的各个环节。

    门店损益预算通过各项比率分析,反映出门店业绩质量的好坏。

    下面我们就门店日常经营活动中必须关注的几个指标作简要分析:

    (1)销售毛利率,它反映了门店获利能力的高低,以社区店为例,最高的销售毛利率可达12%,而最低的则不足10%,在销售、费用相同的前提下,销售毛利率越高表示了该店盈利能力越强。与之类似的指标还有采购收入率、租金收入率等。

    (2)营业费用率,它反映了门店经营管理能力的高低,以社区店为例,最高的营业费用率近20%,而最低不足10%,在同等规模销售的前提下,营业费用率越低表示了经营管理能力越高。与此类似的指标还有可控费用率、不可控费用率等。

    (3)库存周转天数,简单的说该指标反映的是实现一定规模的销售需要投入多少存货,库存周转天数越短表示其存货管理能力越强,花同样的钱办更多的事,或者说办同样的事花更少的钱。

    资本性支出预算是门店对固定资产、装修改造方面投资的预测。它不仅仅是一个孤立的投资预测,同时影响到门店损益预算。例如装修改造完成后,应在损益预算中反映出销售业绩提升的促进,同时在费用中反映折旧摊销的增加,进而影响到门店盈利情况的变化。

    要使预算目标成为现实,控制是关键。预算控制的重点是分析预算与实际的差异因素,找出差异的主要环节,制定、实施解决方案,在实施过程中注意信息的收集,确保经营活动不偏离预算目标。当然,预算作为企业发展战略的具体化,为企业日常经营活动制定了一个标杆,但它绝不是一个桎梏,不能僵化我们的思想。门店在实践过程中,围绕实现预算目标的同时,应根据企业内、外因素的变化,不断调整,实现预算目标的同时,更应大胆地超越预算,以实现更大的经营业绩。

来源:http://article.funbuy.cn/20066/23/1456692896.shtml

千M网络-实际应用中传输速度测试

千M网络在实际应用中究竟能给我们的传输速度带来多大的提高呢?

理论上千M网络的速度可以达到1000M bit (大约100M byte)的速度,以下的讨论中,如果不做特别说明速度均是针对Byte而言的。也就是说千M网络的传输速度上限是100M/秒。

在实际应用中受各种因素(包括硬盘读写速度,操作系统文件读写处理,传输软件本身的设计等等)的影响,速度要大打折扣。我们这里做了几个试验来看看效果:

继续阅读“千M网络-实际应用中传输速度测试”

虚拟机性能优化小结

虚拟机性能优化小结

1、使用预分配的vmdk虚拟硬盘,速度不比物理分区慢。一定要使用预分配的,如果是动态增长的vmdk那速度是比预分配的vmdk 差一个数量级的。

 2、给Host机器适当留些内存,不要以为把Host上的几乎所有内存否分配给Guest机,Guest机就会跑得最快。要考虑vmware 本身也是在Host机上运行的,一般建议至少给Host机留600M内存(Linux Host 图形模式)

3、按照vmware 手册中的Performance tunning 指导进行操作,主要包括:

       3.1  vmware settings ->options->Advanced: Disable memory page trimming

      3.2  在vmx 中添加配置:sched.mem.pshare.enable=”FALSE”

      3.3  在edit ->Perferences ->Memory :Fit all virtual machine memory into reserved host RAM

      3.4  尽量去掉虚拟机上不不要的设备,比如对于运行EBS的虚拟机而言,软驱、光驱、声卡都不需要。去掉。

经过上述优化后的虚拟机的磁盘IO性能测试结果如下:

     DELL PE800 + segate Sata 250G   , 使用hdparm -t 进行测试, Host 可达到74M/s  ;  虚拟机可达到 70M/s  基本与Host相当。

     另外发现在DELL PE800 + segate Sata 250G 上运行 EBS 运行时,CPU经常出现 wa  >50%的情况,说明IO是瓶颈。

     DELL PE800 + segate Sata 250 没有做Raid的情况下:hdparm -t 测试 74M/s ; DELL PE2950 + sas 硬盘 ,没有Raid的情况下hdparm -t 测试 125M/s ;Riad0 的情况下 225M/s;   可见 riad 0 的情况下,IO 速度基本是 2倍于非Raid的磁盘。

     在Host = DELL PE800 + segate Sata 250G +4G内存 + P43.0  的情况下,给Guest 分配2.8G内存;数据库Pga 设置750M , db cache 300M +  shared pool  600M +java pool 100M  ,启动后的SGA 打开1.2G;  运行ebs115102时,数据库 和应用启动后,连接一个用户,访问部分模块后,内存消耗大概在2.1G ; 访问部分页面存在等待现象,主要原因在于IO瓶颈;CPU 和 内存还暂时没有问题。 如果要改进,需要使用Raid 0;

     在vmware  中使用软Raid; vmdk分别创建在不同的物理磁盘上,IO效果是否会增强呢? (有关如何创建软raid请参考:http://net.csai.cn/store_Raid/200707251026451937.htm

    测试过程:在笔记本电脑的虚拟机上,使用4块vmdk 构成riad0 ; 其中2块vmdk在物理磁盘1上,另外2块vmdk 在屋里磁盘2上。riaid 的速度是17.5M/s , 非raid的速度是: 16M/S ; 可见 软raid0的速度提升很小。

系统规划的复杂度和精细度的考虑

大凡上系统的时候,客户管理层就会想:“借此机会,把管理好好规范一下,管理的更加精细一点”

当客户在提需求的时候,我们要问客户“这个需求会增加管理的精细度和复杂度,原来有这么做吗?” 如果客户回答:“没有,想借本次项目做点改进” ;那我们要接着问“管理更严格、更精细了,我们认为人力资源要配合增加,请问您有此计划吗?”

客户回答:“没有,我们考虑上系统后应该是可以减少人员吧,至少不会增加人员!”

那么我们要说:“要考虑落地的可行性,如果没有人力资源增加计划,那么管到这么细是做不到的。系统设计的太复杂,会导致无法落地,这方面我们有血的教训。

客户又说:“那你把一些不确定的管理节点做成可配置的”,如果推进困难,我们就把这些功能关闭,这不就解决问题了吗“

我们则要向客户解释”这是一个项目,不是开发产品,开发产品的资源投入一般是项目的10倍以上。所以应该是实际需要什么功能就做什么功能,我们没有资源去开发很多“当前用不到,将来可能用到的功能”。所以我们要把精力放在重点管控点上。

使用IPMI 对PE800远程开关机

1、配置服务器可接受IPMI管理

2、下载IPMI客户端工具
http://ipmiutil.sourceforge.net/FILES/ipmiutil-2.4.3-win32.zip

3、假设要控制192.168.1.80这台服务器:
远程开机命令:
ipmiutil-2.4.3-win32>hwreset -u -N 192.168.1.80 -U root -P

关机命令:
ipmiutil-2.4.3-win32>hwreset -d -N 192.168.1.80 -U root -P

相关参考资料:

http://www.oschina.net/discuss/thread/715

http://www.donglirong.com/?action=show&id=71

DELL PE800系统设置手册:http://support.dell.com/support/edocs/systems/pe800/en/UG/k3843c30.htm#wp1055571

备注:

1、BIOS集成设备配置NIC : enable without PXE

2、Ctrl + S : 

        preboot with wake on lan

        VLan 不设置。

3、BMC IP地址 与操作系统IP 应该不一样。

上海小城镇医保VS城镇医保

城镇医保:

2000年12月31日以前参加工作1966年1月1日以后出生(中人 3)

 

小城镇医保:

上海市小城镇基本医疗保险 从业人员

 

说明:

两种医保差别之大,简直是天上地下。打个比方,退休后,如果得了恶性肿瘤,那么小城镇保险就基本上是全部自己支付,假设要花50万。那么自己要付40万以上。而如果是城镇保险,则自己支付的费用<10万。 可见城镇医疗保险才真有保障,而小城镇医疗保险没有保障。

来源信息参考:上海医保网  http://222.66.164.74/xxcx/zgdy.jsp?lm=3

产销“联营扣点”商家如何纳税

发布:2008-8-06 10:15 | 作者:webmaster | 来源:转载

 

我是深圳的一家大型零售企业,主要经营3个综合商场。在具体经营过程中,我们一方面实行自营,即自己组织商品,自己组织销售;另一方面,将部分柜台出租给生产厂家,由他们派人组织销售活动,我公司只负责现场管理。在具体操作过程中,我们采用了如下操作模式:商场与生产厂家签署租赁合同,规定,一是商场出租200平方米的柜台给厂商作为销售产品的场地;二是厂商自派员工到商场销售和管理自己的商品;三是厂商每月向商场支付按销售额的18.5%(但是不得低于20万元)的租金;四是厂商的销售额由商场统一收取,月末结算时租金直接在销售额扣除;五是商场向厂商每月收取8万元的进场费和宣传费。
  2005年11月28日,当地主管国税局稽查局的税务人员对我公司2004年度的经营情况进行了检查,他们发现我公司2004年度的“其他业务收入”存在问题,认为公司从10月份开始通过“联营扣点”形式取得的租金收入2360万元应当计算缴纳增值税。对此我们很不理解,根据现行税收法规,我们取得的收入应当按租金收入计算缴纳营业税,为什么要我们缴纳增值税呢?要知道,两者税率相差12个百分点啊!请专家给我们指点迷津。
        深圳市某公司财务总监 李红

继续阅读“产销“联营扣点”商家如何纳税”

美廉美朱幼农-为什么采用以联营为主的生鲜经营模式

  
    来源: 作者: 发布时间:2007-08-28 

  北京美廉美连锁商业有限公司总裁 朱幼农

  2007超市生鲜经营研讨会系列报道之——

  美廉美朱幼农:为什么采用以联营为主的生鲜经营模式?

继续阅读“美廉美朱幼农-为什么采用以联营为主的生鲜经营模式”

视同销售会计处理总结

2009-06-12 源自:价值中国网

    税法中规定企业的八种视同销售行为需要计算缴纳增值税:
 
  (1)自产或委托加工货物用于非应税项目的会计处理:企业将自产或委托加工的货物用于非应税项目,属于自产自用性质,不得开具增值税专用发票,但需按规定计算销售额和应纳税额。

  借:在建工程

    贷:库存商品

      应交税金——应交增值税(销项税额)

继续阅读“视同销售会计处理总结”

行业发展的一些想法

2007年老范确定了行业发展思路。

2007 – 2009 本人参与的项目基本集中在零售行业,包括协亨手机,旭硝子零售公司、达芙妮。

2009年8月30日,我们与Oracle 北区总经理一起讨论的时候,Oracle也重点强调了实施伙伴行业发展 更深入,更彻底。他认为Hand 有300多个Oracle客户,积累了丰富的、各行各业的解决方案,是个大金库。只是现在对这些金矿的开发还很不够。需要加大力度。

继续阅读“行业发展的一些想法”

Gforge 全文检索攻略

=====================
Step0  准备工作:  安装sphinx + Sphinx分词补丁 + 中文分词
=====================
详细步骤请参考:

http://blog.retailsolution.cn/index.php/sphinx-pgsql-chinese-word-seg

=====================
Step1  创建增量索引计数表
=====================
# In Pgsql ,Create table for form_message
CREATE TABLE sph_counter
(
counter_id INTEGER PRIMARY KEY NOT NULL,
max_doc_id INTEGER NOT NULL
)

— for forum message
insert into sph_counter (1,100);
— for tracker item
insert into sph_counter (2,100);

继续阅读“Gforge 全文检索攻略”

Sphinx+Pgsql+中文分词安装

一、安装所需文件
mmseg-0.7.3.tar.gz  中文分词

http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz

sphinx-0.9.8-rc2.tar.gz sphinx-0.9.8-rc2源代码
http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz 

sphinx-0.98rc2.zhcn-support.patch sphinx支持分词补丁
http://www.coreseek.com/uploads/sources/sphinx-0.98rc2.zhcn-support.patch

fix-crash-in-excerpts.patch sphinx支持分词防crash补丁
http://www.coreseek.com/uploads/sources/fix-crash-in-excerpts.patch

 

继续阅读“Sphinx+Pgsql+中文分词安装”

传统软件日渐乏力 国内SaaS应用前景探析

传统软件日渐乏力 国内SaaS应用前景探析
1
输入分数1- 2009-05-21 18:50 作者 康斯坦丁 发布 网虫 评论 0 访问次数 96 分类 SaaS SaaS是随着互联网技术的发展和应用软件的成熟,而在21世纪开始兴起的一种完全创新的软件应用模式。在这种模式下,客户不再像传统模式那样花费大量投资用于硬件、软件、人员,而只需要支出一定的租赁服务费用,通过互联网便可以享受到相应的硬件、软件和维护服务,享有软件使用权和不断升级,这是网络应用最具效益的营运模式。

继续阅读“传统软件日渐乏力 国内SaaS应用前景探析”

中国SaaS前景可观 仍不可回避四大挑战

SaaS已经成为软件业发展的新趋势,甚至将成为未来软件业的至高点。因为,与传统软件模式相比,SaaS具有低建设成本、低维护成本、低投入风险和低应用门槛等四大特点。同时,2006年是中国软件运营服务市场从导入期进入发展期的分界点,而未来十年将是SaaS市场的黄金时期,市场规模将保持高速增长的态势。

继续阅读“中国SaaS前景可观 仍不可回避四大挑战”

On-Off-line混合模式应用实例-销售线索跟踪(Flex+Gears)

salesbuilder.png

As a follow up to my previous post, here is the sample Sales Force Automation application I built to demonstrate the Flex/Google Gears integration, and that Kevin Lynch demonstrated during the Google Developer Day keynote last week in San Jose.

SalesBuilder uses the Google Gears Database API to save data to an embedded SQLite database, and the LocalServer API to enable offline access to the application.

  继续阅读“On-Off-line混合模式应用实例-销售线索跟踪(Flex+Gears)”

2008-2012年中国女鞋市场深度调查与发展前景分析报告

【报告名称】 2008-2012年中国女鞋市场深度调查与发展前景分析报告
【出版日期】 2009年2月
【报告页码】 103页 
【交付方式】 email、EMS特快专递
【报告价格】 纸版价 RMB6500元  电子版价 RMB 6800元  纸版价+电子版价 RMB 7000 元

前言
    我国人口总数超过13亿人,其中女性人口数量6.24 亿,约占人口总数的48%。这是一个蕴涵着巨大的商机的市场。然而,巨大的市场商机中也暗藏着巨大的竞争。市场中有80%都属于地方品牌。目前,我国从事鞋业生产的企业7200多家,加上国外企业针对中国推出的品牌和已经成名的国际品牌以及贴牌生产的皮鞋品牌,品牌数量不下万余。

继续阅读“2008-2012年中国女鞋市场深度调查与发展前景分析报告”

数据仓库-多维数据库-关系型数据库-利弊分析

数据仓库-多维数据库-关系型数据库-利弊分析

 

ROLAP优缺点

http://en.wikipedia.org/wiki/ROLAP

 

MOLAP优缺点

http://en.wikipedia.org/wiki/ROLAP

 

ROLAP查询性能较MOLAP差,存储却较MOLAP节剩

既然ROLAP和MOLAP各有优缺点,就自然提出HOLAP , 即部分使用ROLAP,另一部分使用MOLAP 以充分利用两种OLAP的优点,避其缺点。一般认为HOLAP是趋势。

 

我们应该如何来评价这个问题呢?

美国著名的数据仓库工程专家Pieter R. Mimno先生认为,除非业务环境的确要求采用专用的数据库才能解决业务需求,或者需要采用专用的数据库管理系统才能达到业务所需要的性能指标,否则,从节省成本和降低复杂性的角度出发,一般情况下,应优先考虑采用传统的关系型数据库管理系统,这个中肯的意见值得我们在选择数据仓库的数据库时认真考虑。

 

我们将继续对这个问题进行调研和实践,以得出一个科学的结论。。。

系统集成MSN提醒的问题

系统集成MSN提醒的问题

如果有需求:每当网上有人下了订单,有些人需要得到MSN提醒。这个能否实现?

google了一下,发现有MSN 的 java API应该是可以做到这一点的。 不过要做的好,可能还是需要花点时间的。这里对网上提供的一些方法做了可行性测试,抛砖引玉。给需要的人一个开头:

首先找到了这么一段程序:

连接:http://bbs.star-bbs.net/thread-31120-1-51.html

MSNDaemon.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
* Created on 2003-11-21 by Liudong
*/
import rath.msnm.MSNMessenger;
import rath.msnm.SwitchboardSession;
import rath.msnm.UserStatus;
import rath.msnm.entity.MsnFriend;
import rath.msnm.event.MsnAdapter;
import rath.msnm.msg.MimeMessage;
/**
* MSN演示程序
* @author Liudong
*/
public class MSNDaemon extends Thread {
private static MSNMessenger msn;
 
public static void main(String[] args) {
msn = new MSNMessenger(&quot;retailsolution@live.cn&quot;, &quot;hello1&quot;);
msn.setInitialStatus(UserStatus.ONLINE);
msn.addMsnListener(new MSNAdapter(msn));
msn.login();
System.out.println(&quot;Waiting for the response....&quot;);
//捕捉Ctrl+C的输入以便注销MSN的登录
Runtime.getRuntime().addShutdownHook(new MSNDaemon());
}
/**
* 用户中止程序执行
*/
public void run() {
msn.logout();
System.out.println(&quot;MSN Logout OK&quot;);
}
}
/**
* MSN消息事件处理类
* @author Liudong
*/
 
class MSNAdapter extends MsnAdapter {
MSNMessenger messenger;
 
public MSNAdapter(MSNMessenger messenger) {
this.messenger = messenger;
}
/**
* 某人正在输入信息
*/
public void progressTyping(
SwitchboardSession ss,
MsnFriend friend,
String typingUser) {
System.out.println(friend.getLoginName() + &quot;正在输入信息...&quot;);
}
/**
* 收到消息的时候执行该方法
*/
public void instantMessageReceived(
SwitchboardSession ss,
MsnFriend friend,
MimeMessage mime) {
System.out.print(&quot;接收到消息:&quot; + friend.getFriendlyName() + &quot;-&gt;&quot;);
System.out.println(mime.getMessage());
try {
//发送相同的回复信息给发送者
messenger.sendMessage(friend.getLoginName(), mime);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 登录成功后执行该方法
*/
public void loginComplete(MsnFriend own) {
System.out.println(own.getLoginName() + &quot; Login OK&quot;);
}
/**
* 登录失败后执行该方法
*/
public void loginError(String header) {
System.out.println(&quot;Login Failed: &quot; + header);
}
/**
* 好友离线时执行该方法
*/
public void userOffline(String loginName) {
System.out.println(&quot;USER &quot; + loginName + &quot; Logout.&quot;);
}
/**
* 好友上线时执行该方法
*/
public void userOnline(MsnFriend friend) {
System.out.println(&quot;USER &quot;+friend.getFriendlyName()+&quot; Login.&quot;);
}
/**
* 有人加我为好友时执行
*/
public void whoAddedMe(MsnFriend friend) {
System.out.println(&quot;USER &quot; + friend.getLoginName() + &quot; Addme.&quot;);
try {
messenger.addFriend(friend.getLoginName());
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 有人把我从好友列表中删除时执行
*/
public void whoRemovedMe(MsnFriend friend) {
System.out.println(&quot;USER &quot;+friend.getLoginName()+&quot; Remove me.&quot;);
try {
messenger.removeFriend(friend.getLoginName());
} catch (Exception e) {
e.printStackTrace();
}
}
}

如何运行这个程序?步骤如下

1、下载 MSN API : http://sourceforge.net/project/showfiles.php?group_id=47932

2、如果还没有jdk ? 下载jdk ,比如 jdk1.5.0_16 (下载地址很多,google一下)

3、设置java运行编译环境:比如下文注意点中的 javaenv.env; 然后source javaenv.env

4、编辑:MSNDaemon.java ,把其中的msn帐号换成你的测试帐号

4、编译:javac MSNDaemon.java

5、运行:java MSNDaemon

运行效果如下:

image

想像一下

把MSN API 这个集成到我们的系统中去,就可以实现MSN提醒了!

注意点

1:if You are on a Unix system running as root, using the 1.4.2 GCJ version? The GJC version may not

have the com.sun.net.ssl.internal.ssl.Provider ,it will cause an error, you may download new version jdk from sun,

then will be ok;

2: 编译前先运行环境变量,比如你可以建立如下的env 文件:

[root@retailsolution d01]# more javaenv.env

JAVA_HOME=/d01/jdk1.5.0_16      
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin      
CLASSPATH=.:$JAVA_HOME/jre/lib/:$JAVA_HOME/jre/lib/jsse.jar:$JAVA_HOME/lib:/d01/MSN_Java/msnm.jar      
export     JAVA_HOME     J2EE_HOME     PATH     CLASSPATH 
[root@retailsolution d01]#

3:我这边测试可以和其他MSN用户通讯,但在测试前,我是先用标准的MSN客户端,把MSN机器人的MSN帐号进行一次登陆,并加另外一个MSN帐号为好友。然后再回到这个程序进行测试

4:程序做的MSN机器人很容易断线,我这边测试情况是:MSN机器人登录并与好友聊天后1分钟之后就断线了,这个程序需要改进。

5:相关链接:

   5.1 MSN机器人源程序连接:http://bbs.star-bbs.net/thread-31120-1-51.html

   5.2 MSN java Api 下载链接:http://sourceforge.net/project/showfiles.php?group_id=47932

本站文章编辑技巧

本站文章编辑技巧

一、分页功能

如果一篇文章很长,则一次加载所需时间太长,要考虑分页;

操作方法:在要分页的地方插入分页符即可,如下图:

image

二、上传附件

一般来说,我们建议尽量不要使用附件方式发表文章,但是如果文章涉及代码(package),或者文章很长,在发表以后希望同时提供pdf或者word压缩版则也可以适当考虑附件方式作为备选项。

上传附件很简单,点附件上传按钮,如下图:

image

附件就是媒体。

 

三、代码高亮显示

文章中如果使用到代码 ,并且希望代码在文章中具有很好的可读性,则可以使用<pre lang="lang" colla="+"></pre>标记。(注意在HTML模式下,而非可视化模式下添加这对标记,发布的时候也要在HTML模式下进行) 比如下面的一段代码是java代码,显示行号(line="1") ,可折叠(colla="+") 。

<pre lang="java"  colla="+" line="1">  
    public class Hello {
      public static void main(String[] args) {
        System.out.println("Hello World!");
      }
    }
</pre>

效果如下

    public class Hello {
      public static void main(String[] args) {
        System.out.println("Hello World!");
      }
    }

四、高清晰的图象

 
如果全篇文章(包括图片)都从Word文档拷贝到Windows Live Write(选择性粘贴),那么即使word中图片的清晰度还可以,但是到了Live Write后质量很差,解决办法可以是: 使用抓图软件(比如SnagIt)从源头或者Word文档中再抓一次,放到live Write中.

五、表格的制作

 
目前表格制作最方便的就是Excel了,live Write也可以插入表格,但是制作的表格没有Excel方便,漂亮。而在线

编辑模式下没有提供表格编辑,所以比较好的方法是使用Excel编辑表格,然后以在线编辑模式,粘贴表格,效果比较好。Live Write中无法使用Ctrl+V 直接粘贴Excel表格, 但可以击邮件选择“选择性粘贴”,然后选择“保留格式”来粘贴Excel  表格。

订单行在订单关闭后未能生成AR发票行的原因追查日志

/*******************************************************************************
date : 2007-05-08
处理者: yunfang.shang
*******************************************************************************/

/*
现象: 顾问做了一张订单,在登记并完成“后台工作流程序” 后,订单及订单行关闭;
但是有一行 在AR中未找到对应的发票行(总共有6行,5行到了AR,有一行没有到AR)
*/

— 查订单行(由于订单行及发票行的attribute2 都用于存放 POS小票号,所以可以根据POS小票号来查
select  * from  oe_order_lines_all   where attribute2 = ‘ZCXSS111202800000035’
–返回6条记录
–查发票接口
select  * from  RA_INTERFACE_LINES_ALL  where attribute2 = ‘ZCXSS111202800000035’
–返回 0 条记录,说明已经全部被处理
–查发票行
select  * from  RA_CUSTOMER_TRX_LINES_ALL  where attribute2 = ‘ZCXSS111202800000035’
–返回 5 条记录
–说明肯定有一条根本就没有生成到AR接口表中

— AR 行 和订单行的差异,发现没有过来的一条记录,其发票接口状态字段异常 INVOICE_INTERFACE_STATUS_CODE =  NOT_ELIGIBLE
— 所以直接原因是 因为订单行不合法导致未能开票。 那么具体是什么原因呢?
— 打开 OM   行流 工作流定义 ,根据返回状态为NOT_ELIGIBLE 进行代码追踪 ;
— 从 行开票接口节点开始  OE_INVOICE_WF.INVOICE_INTERFACE->OE_Invoice_PUB.Interface_Line  – >OE_Invoice_PUB.Interface_Single_Line->OE_Invoice_PUB.Line_Invoiceable
— Line_Invoiceable 这个函数是最终的可能提供详细原因的函数。看代码后发现 导致行不可开票的原因有很多种,究竟是哪一种呢?
— 启用Debug ,准备做一次调试,看具体的debug原因就可以确定了明确的不可开票原因了。

— 在用户层设置  系统配置文件  “OM: 调试级别”      把值设置为5
— 在用户层设置  系统配置文件  OM:调试日志目录”      把值设置为   /usr/tmp
— demo  环境应用服务器:
— 删除 usr/tmp/  *.dbg  文件
— 再作一张订单,登记,运行工作流后台程序 ,直到订单关闭
— 在usr/tmp 目录下去看日志文件。
— 郁闷,这里的日志文件 只是跟踪到订单界面上的操作。根本就未能跟到  Line_Invoiceable 这个函数。所以从这个日志文件也看不出什么名堂。
— 那么是否信息被debug 到  fnd_log_message 表中去了呢? 去找了一把也没有找到。
— 再去读  oe_debug_pub 程序,也就是记录日志的那个程序包。 发现它会判断:如果从系统配置文件中获取的当前 并发请求Id 不是 -1 ,
— 并且不是在 UI模式的话则会把日志的输出文件输出到 并发程序的log中去
— 想想,虽然我们是在界面上录入,登记订单。 但是真正启动   Line_Invoiceable 这个函数 的人应该是” 工作流后台流程” 这个并发程序。
— 是不是log信息被记录到这个” 工作流后台流程” 的log中了呢?
— 看刚才运行的 ” 工作流后台流程” 的log ,果来是这样。其中有句log 应该是 Line_Invoiceable 输出的

— 日志 ENTERING LINE_INVOICEABLE 应该是进入  Line_Invoiceable 函数的 标志性的日志语句
/*
ENTERING LINE_INVOICEABLE
。。。。。。
ITEM NOT INVOICEABLE ( 2 )
l_freight_count: 0
Handling non-invoiceable lines with no freight or automatic numbering*/

— 根据错误日志 “Handling non-invoiceable lines with no freight or automatic numbering”  到OE_Invoice_PUB 包中查找,,发现这个错误是由
— Interface_Line 函数抛出的,而且这句话是在调用line_invoiceabel 返回结果 false  并且
— 在  FND_PROFILE.VALUE(‘WSH_INVOICE_NUMBERING_METHOD’) = ‘A’ 的情况下设置的。

— ITEM NOT INVOICEABLE(2) 是 Line_Invoiceable 函数抛出的日志,在程序中有如下判断:

     IF (l_invoiceable_item_flag = ‘N’) OR
        (l_invoice_enabled_flag = ‘N’) OR
        (p_line_rec.item_type_code = ‘SERVICE’ AND l_serviceable_product_flag = ‘N’) THEN
           IF l_debug_level  > 0 THEN
               oe_debug_pub.add(  ‘ITEM NOT INVOICEABLE ( 2 ) ‘ , 1 ) ;
           END IF;
           RETURN FALSE;
     END IF;
    
—  而l_invoiceable_item_flag 和 l_invoice_enabled_flag 都是从物料信息表获取的:

        SELECT INVOICEABLE_ITEM_FLAG, INVOICE_ENABLED_FLAG
        INTO   l_invoiceable_item_flag, l_invoice_enabled_flag
        FROM   mtl_system_items
        WHERE  inventory_item_id = p_line_rec.inventory_item_id
        AND    organization_id = nvl(p_line_rec.ship_from_org_id, oe_sys_parameters.value(‘MASTER_ORGANIZATION_ID’, p_line_rec.org_id));
    
    
— 可见本次问题发生的真正原因就找到了: 就是物料属性设置不对,不可开票阿!!!。

DATAFIX_接收事务处理接口错误处理日志

/*******************************************************************************
date : 2007-07-03
处理者: yunfang.shang
*******************************************************************************/
     –查接收接口中来自销售订单退货的记录(error_message是错误信息提示)
         SELECT rti.processing_request_id, rti.creation_date,
                rti.transaction_date, rti.group_id, oeh.order_number,
                rti.item_id, item_description, rti.unit_of_measure,
                rti.quantity, rti.source_document_code, rti.subinventory,
                oel.flow_status_code, pie.error_message
         FROM rcv_transactions_interface rti, oe_order_headers_all oeh,
              oe_order_lines_all oel, PO_INTERFACE_ERRORS pie
         WHERE rti.oe_order_header_id = oeh.header_id
         AND rti.oe_order_line_id = oel.line_id
         AND rti.oe_order_header_id = oel.header_id
         AND rti.interface_transaction_id = pie.interface_line_id(+)
         ORDER BY group_id   — oeh.order_number
                  —       
                  /*
1 449172 2007-6-30 2:01:20 2007-6-29 5340 1000002863 37581 天语B922手机(黑) 部 1 RMA 111218201 AWAITING_RETURN “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
ORA-01653: 表ASO.ASO_ORDER_FEEDBACK_T无法通过16(在表”
2 449173 2007-6-30 2:01:20 2007-6-29 5341 1000002863 2128 磐正H200蓝牙 个 1 RMA 111218201 AWAITING_RETURN “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
ORA-01653: 表ASO.ASO_ORDER_FEEDBACK_T无法通过16(在表”
3 449174 2007-6-30 2:01:22 2007-6-29 5342 1000002866 36593 金鹏V2168手机(黑) 部 1 RMA 111218501 AWAITING_RETURN “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
ORA-01653: 表ASO.ASO_ORDER_FEEDBACK_T无法通过16(在表”
4 449175 2007-6-30 2:01:22 2007-6-29 5343 1000002866 2095 万禧通万能充 个 1 RMA 111218501 AWAITING_RETURN “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
ORA-01653: 表ASO.ASO_ORDER_FEEDBACK_T无法通过16(在表”
5 449177 2007-6-30 2:01:22 2007-6-29 5345 1000002866 1608 天语S658手机(黑) 部 1 RMA 111218501 AWAITING_RETURN “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
ORA-01653: 表ASO.ASO_ORDER_FEEDBACK_T无法通过16(在表”
6 449176 2007-6-30 2:01:22 2007-6-29 5344 1000002866 2387 PQI TF卡      256MB 张 1 RMA 111218501 AWAITING_RETURN “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
ORA-01653: 表ASO.ASO_ORDER_FEEDBACK_T无法通过16(在表”
7 449178 2007-6-30 2:01:22 2007-6-29 5346 1000002866 2062 亚比仕普通电 块 1 RMA 111218501 AWAITING_RETURN “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
ORA-01653: 表ASO.ASO_ORDER_FEEDBACK_T无法通过16(在表”
8  449179  2007-6-30 2:01:22  2007-6-29  5347  1000002867  458  诺基亚N7610 手机(黑红)  部  1  RMA  111218401  AWAITING_RETURN  “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
ORA-01653: 表ASO.ASO_ORDER_FEEDBACK_T无法通过16(在表”
9  449183  2007-6-30 2:01:26  2007-6-29  5351  1000002867  2143  SanDisk TF卡  512MB  张  1  RMA  111218401  AWAITING_RETURN  “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
ORA-01653: 表ASO.ASO_ORDER_FEEDBACK_T无法通过16(在表”
10  449188  2007-6-30 2:01:26  2007-6-29  5356  1000002867  39581  三星SGH-E838手机(金黄)  部  1  RMA  111218401  AWAITING_RETURN  “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
ORA-01653: 表ASO.ASO_ORDER_FEEDBACK_T无法通过16(在表”
11  449187  2007-6-30 2:01:26  2007-6-29  5355  1000002867  3459  SD卡读卡器  个  1  RMA  111218401  AWAITING_RETURN  “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
ORA-01653: 表ASO.ASO_ORDER_FEEDBACK_T无法通过16(在表”
12  449186  2007-6-30 2:01:26  2007-6-29  5354  1000002867  2132  国产H-200蓝牙耳机  个  1  RMA  111218401  AWAITING_RETURN  “RVTPT-&ERR_NUMBER:子例行程序 rvtoe_RmaPushApi() – E程序包 ASO_ORDER_FEEDBACK_UPDATE_PVT 过程 UPDATE_NOTICE 中出现错误 ORA-00604: 递归 SQL 层 1 出现错误
              */

/*
在用户层打开如下系统配置文件:
a. RCV: Debug Mode=Yes  (不需要更改)
b. PO:Enable Sql Trace for Receiving Processor=Yes
c. FND: Debug Log Enabled=Yes (不需要更改)
d. FND: Debug Log Level=Statement
e. FND: Debug Log Module=%  (不需要更改)
*/

select * from rcv_transactions_interface where group_id =5342

— 查看PO接收接口处理器的错误方法 :参见Metalink Note : Note:299497.1   [ (老版本 Note:50903.1)]
— 更改因为事务处理日期不在打开的会计期内的错误,可以更改事务处理日期
— 然后提交接口处理程序。如下面的Sql
declare
    l_request_id       number;
    X_Group_Id         number := 5340; — 输入接口表中出错记录的 group_id
    –X_Transaction_date date := to_date(‘2007-4-29’, ‘YYYY-MM-DD’); — 输入一个打开会计期内的日期:比如 to_date(‘2007-4-29′,’YYYY-MM-DD’);
begin

    –注意,这里的user_id,resp_id,resp_appl_id 在不同的环境可能不同。
    fnd_global.APPS_INITIALIZE(user_id => 1111, resp_id => 50260,
                               resp_appl_id => 660);

    UPDATE rcv_transactions_interface
    SET processing_status_code = ‘PENDING’,
        transaction_status_code = ‘PENDING’, processing_request_id = NULL
        –,transaction_date = X_Transaction_date
       — ,expected_receipt_date = X_Transaction_date
    WHERE group_id = X_Group_Id;

    l_request_id := fnd_request.submit_request(‘PO’, ‘RVCTP’, ”,
                                               to_char(sysdate + 0.0003,
                                                        ‘YYYY/MM/DD HH24:MI:SS’),
                                               false, ‘IMMEDIATE’, X_Group_Id,
                                               chr(0));
    dbms_output.put_line(to_char(l_request_id));
end;

–得到的request_id
–查request的运行结果
SELECT request_id, last_update_date, requested_start_date, phase_code,
       status_code, argument_text
FROM fnd_concurrent_requests
WHERE request_id = &p_request_id

— 成功运行通过
— Phase_code = C    并且  Status_code = C  表示 成功运行通过 
— 查看PO接收接口处理器的错误方法 :参见Metalink Note : Note:299497.1   [ (老版本 Note:50903.1)]
— 更改因为事务处理日期不在打开的会计期内的错误,可以更改事务处理日期
— 然后提交接口处理程序。如下面的Sql
–5341 –
/* ****************************************************************
继续  5341 开始 ,按顺序进行

******************************************************************/

declare
    l_request_id       number;
    X_Group_Id         number := 5342; — 输入接口表中出错记录的 group_id
    –X_Transaction_date date := to_date(‘2007-4-29’, ‘YYYY-MM-DD’); — 输入一个打开会计期内的日期:比如 to_date(‘2007-4-29′,’YYYY-MM-DD’);
begin

    –注意,这里的user_id,resp_id,resp_appl_id 在不同的环境可能不同。
    fnd_global.APPS_INITIALIZE(user_id => 1111, resp_id => 50260,
                               resp_appl_id => 660);

    UPDATE rcv_transactions_interface
    SET processing_status_code = ‘PENDING’,
        transaction_status_code = ‘PENDING’, processing_request_id = NULL
        –,transaction_date = X_Transaction_date
       — ,expected_receipt_date = X_Transaction_date
    WHERE group_id = X_Group_Id;

    l_request_id := fnd_request.submit_request(‘PO’, ‘RVCTP’, ”,
                                               to_char(sysdate + 0.0003,
                                                        ‘YYYY/MM/DD HH24:MI:SS’),
                                               false, ‘IMMEDIATE’, X_Group_Id,
                                               chr(0));
    dbms_output.put_line(to_char(l_request_id));
end;

–得到的request_id
–查request的运行结果
–一分钟后查询并发请求运行结果
SELECT request_id, last_update_date, requested_start_date, phase_code,
       status_code, argument_text
FROM fnd_concurrent_requests
WHERE request_id = &p_request_id

— Phase_code = C    并且  Status_code = C  表示 成功运行通过 

 

 

–如果有错误,查错误日志
    SELECT to_char(TIMESTAMP, ‘DD-MON-YY HH24:MI:SS’),
           SUBSTR(message_text, 1, 300), SUBSTR(module, 1, 30),
           log_sequence
         FROM fnd_log_messages
         WHERE trunc(TIMESTAMP) = trunc(SYSDATE)
         AND process_id = (SELECT os_process_id
                          FROM fnd_concurrent_requests
                          WHERE request_id = &p_request_id)
         AND module NOT LIKE ‘fnd%’
         ORDER BY log_sequence;

Gforege用户注册指南

Gforege用户注册指南

 

一、点击右上角的[注册新用户]

image

 

二、录入用户信息

image

      打*的是必须填写的,特别说明:

      2.1 Unix用户名:就是你登陆本网站使用的用户名
      2.2 语言:选择 Simplified Chinese

完成后点[提交]按纽

大约2分钟以后,你会收到邮件:

主题=MyGforge 帐号注册 ,内容如下:

image

点第一个连接:

image      

输入刚才注册的用户名,密码 ;然后点[登入] 即可

image

登入后选择右边[新注册的项目] 下面的项目,即跳转到我们要参与的项目:

image

点击讨论:[Forum post:需求提出头脑风暴] 参与讨论

image

输入信息后按下面的[张贴消息] 按纽即可

结束。

Oracle Retail RMS 客户化开发文档

概述

本文是在学习了retail rms下开发form的一点点心得。主要涉及内容是Form和Reports的开发。本文是在商云方经理的retail blog上取得原始资料,吸取了项目组很多同事的经验,非常感谢他们。本文档所描述的内容,可能只是Retail客户化开发的冰山一角,形如管中窥豹,希望后面有机会开发rms 的同事能从这篇文档里获得一些帮助,并对rms客户化开发文档进一步完善。

商云方经理的blog地址:http://blog.retailsolution.cn/

Retail 为Form开发提供了一个模板 fm_temp1.fmb ,本项目在/d01/app/retail/rms/app/rms/forms/src目录下,该模板基本上已经将retail form涉及到的底层代码写好(比如实现多语言的调用等),我们在开发一个新的form的时候,只要在该模板的基础上实现自己的业务逻辑就行了。

另外,还有一个模板fm_date.fmb,用来做和日期相关的操作,最常见的是做LOV。比如,和EBS一样,我们需要选择日期,弹出一个选则日期的LOV,就要用到这个文件。

Retail的form界面风格和EBS有点不同,给我的总体感觉是布局比较灵活,比较接近我们客户化的风格。它的一个block在界面上显示出来的字段一般比较少,现在还没有发现使用folder的情况。很可惜,也没有类似EBS的弹性域,因为其数据库表结构没有弹性域字段,我认为这是Retail需要改进的一个地方。

注:有的地方叫法为Retek,实际上也是指的retail。

开发背景与基础

读者基础要求

1. 有EBS的使用经验,尤其是Form的使用经验

2. 熟悉PL/SQL

3. 熟悉Telnet和FTP工具,熟悉Windows常规操作

4. 理解或开发过数据库应用系统

5. 有Form(EBS Form)开发经验则更佳

准备工作
用户

1. OS用户:包括超级用户root,用于上传编译开发的form

2. 数据库开发用户,比如本项目中rms12dev,用于数据库的操作,比如使用pl/sql developer开发package等

3. Rms开发管理用户,比如本项目的rms12dev,用于在rms系统中调试

注: 关于Rms用户,将在“新增RMS”用户讲到

工具

1. telnet工具 :如SecureCRT登录服务器,编译form和pll;连接服务器,SecureFX下载必要文件、上传开发的Form

2. Form builder: 安装developer10gr2(安装好后包括Form builder/Reports builder/Sql*pls/Jdeveloper)

3. 配置Form编辑环境:

客户端:

在D盘建立 retail_resource 目录

从服务器下载 /d01/app/retail/rms/app/rms/forms 目录

从服务器下载 /d01/app/retail/rms/app/toolsets 目录

Regedit

hkey_local_machine/software/oracle/KEY_DevSuiteHome1

编辑item : forms_path

添加

D:\Retail_Resource\forms\src;D:\Retail_Resource\toolset\src;D:\Retail_Resource\toolset\bin;
D:\Retail_Resource\forms\bin

服务器端配置

建立一个环境变量文件:rmsformsvr.env (创建在/home/oracle/),其内容如下:(环境不同,有些变量名称、路径不同)
ORACLE_HOME=/d01/app/oracleas/OraHome_1
export ORACLE_HOME 
DISPLAY=syfr12:1.0
INSTALL_DIR=/d01/app/retail/rms/app
export INSTALL_DIR  

PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$INSTALL_DIR/
forms10gr2_scripts:$PATH
CLASSPATH=$ORACLE_HOME/jlib/importer:$ORACLE_HOME/jlib/debugger.jar:$ORACLE_HOME/
jlib/utj.jar:$ORACLE_HOME/jlib/ewt3.jar:$ORACLE_HOME/jlib/share.jar:$ORACLE_HOME/
jlib/dfc.jar:$ORACLE_HOME/jlib/help4.jar:$ORACLE_HOME/jlib/oracle_ice.jar:$ORACLE_HOME/
jlib/jewt4.jar

FORMS_BUILDER_CLASSPATH=$CLASSPATH
FORMS_PATH=$INSTALL_DIR/toolset/bin:$INSTALL_DIR/rms/forms/bin:$ORACLE_HOME/forms
REPORTS_PATH=$INSTALL_DIR/rms/reports/bin:$ORACLE_HOME/forms
TK_UNKNOWN==$ORACLE_HOME/guicommon/tk/admin
UP=rms12dev/rms12dev@RETL

LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/jdk/jre/lib/sparc:$ORACLE_HOME/jdk/jre/lib
/sparc/native_threads

export DISPLAY PATH CLASSPATH FORMS_BUILDER_CLASSPATH FORMS_PATH REPORTS_PATH TK_UNKNOWN UP LD_LIBRARY_PATH

注:本小节资料由商云方提供 http://blog.retailsolution.cn/blog/index.php/rms-form-compile

感性认识

下面用几张图片来感性认识下rms form界面风格

clip_image004

<图1-1> rms登录界面

clip_image006

<图1-2> 用rms12dev登录后的主界面(rms12dev为开发管理员)

clip_image008

<图1-3> 查询界面以及LOV,查询界面类似ebs中点击“手电筒”后的查询窗口,区别是这里是一个单独的Form。

clip_image010

<图1-4> 主要业务逻辑处理界面,布局比较灵活。

clip_image012

<图1-5> 打印报表,点击“打印”后会显示<图1-6>所示画面。

clip_image014

<图1-6> 在运行报表前,需要再登录一次

clip_image016

<图1-7> 报表参数输入

clip_image018

<图1-8> 报表运行结果

Form获取

如果要修改一个Form,怎么知道它的名称呢?从界面上可以看到form的名字。比如下图中的recutadj,然后在/d01/app/retail/rms/app/rms/forms/src目录下(不同项目此目录可能目录不同)找到recutadj.fmb,下载之。

clip_image020

<图1-9> 通过界面查看Form名称

基于rms form开发过程

按Retail的习惯,开发一个新的form,一般需要开发下面4个文件,但不是所有的都是必须的。

fm_XXX_find.fmb[可选]

查找form,在打开“真正”的业务处理form fm_XXX.fmb之前,需要打开这个查找form,该form的作用是选择本次操作的类型查询出数据,一般操作类型有三种,“查看”,“编辑”,“新建”。如果是“新建”,则直接打开form_XXX来新建业务;如果是“查看”,则通过该form查到到业务记录,调用fm_XXX查看业务细节,fm_XXX的项都是不可编辑的;如果是“编辑”,则调用fm_XXX查看业务细节,并可对业务细节数据进行编辑。 当在RMS主界面上双击rms菜单项时,一般是打开该form,再由该Form调用fm_XXX。

使用fm_XXX_find,是因为Retail form中没有EBS的 F11,Ctl+F11等快捷键,也没有EBS中“查找”窗体。我们也可以不使用这个form,只要在打开form fm_XXX.fmb的时候能够确定本次操作是查看,编辑或者新建就好了。比如,同一个form我们需要不同权限的人来打开,有的权限是查看,有的是编辑,有的是新建。这时候,我们只要在菜单上给每个权限挂不同的菜单项,并对每个菜单项设置打开form的默认模式即可。

clip_image022

<图2-1>

clip_image024

<图2-2> 在<图2-1>所示界面点击“搜索”后,显示Form的另一个Canvases。

fm_XXX.fmb

这是实现业务逻辑的主要form。该form由fm_XXX_find.fmb调用open_form打开,open_form会使用一些参数,比如打开新form的状态是view,edit或者是new;或者是业务自己规定的一些变量。

clip_image026

<图2-3>

Me_XXX.mmb[可选]

fm_XXX.fmb所对应的主菜单。一般情况下,新开发的form不需要新建菜单,直接使用系统默认的菜单。除非业务功能特别多,需要菜单来实现。

clip_image028

<图2-4>

XXX.pls[可选]

fm_XXX.fmb处理业务逻辑所调用的package。如果业务逻辑比较复杂,建议建立一个这样的package,来实现业务逻辑,这样可以简化form的复杂度。

基于RMS form开发简单例子

先看一个简单例子,来演示一下RMS form的开发过程。

gmlsupreconfind.fmb

建立gmlsupreconfind.fmb。实现

界面

clip_image030

<图3-1>

clip_image032

<图3-2>

实现过程

1. 打开fm_temp1,将Module(FM_TEMPL)改为FM_GMLSUPRECONFIND,另存为gmlsupreconfind.fmb。

2. 新建一个data block,名称为B_MAIN,非数据库block。

3. 在B_MAIN下建立如下图界面(红线圈内)所示的非数据库Item,和ebs下步骤一样,就不多说了。这里只是演示建立block,其Canvas后面建立。(红线内的按钮先不管,后面将LOV的时候会讲到)

clip_image034

<图3-3>

4. 新建一个data block,名称为B_ACTION,非数据库block。

5. 在B_ACTION下建立如下界面(红线圈内)所示的非数据库Item,都是push button类型的。

clip_image036

<图3-4>

6. 新建一个data block,名称为B_SUPRECON,数据库block,基于表GML_INVC_STM_HEAD。其上的Item都不能insert、update、delete。因为这里只是将数据显示出来。将实现的效果如下:

clip_image038

<图3-5>

clip_image040

<图3-6>

7. 新建一个data block,名称为B_COL_HEAD,在B_COL_HEAD下建立如下界面(红线圈内)所示的非数据库Item,主要是按钮,一方面用来做上一步中建立的Item的标题,另一个用途主要是排序(点击某列上的按钮,则按该列排序,实际上是加上order by重新查询一次)。

clip_image042

<图3-7>

8. 建立Canvas: C_MAIN,type 为content。

9. 建立Canvas: C_SUPRECON,type为stacked。

10. 将B_MAIN上的Item放在C_MAIN上(见图3),将B_SUPPECON上的Item放在C_SUPPECON上(见图6),B_ACTION上的Item放C_MAIN上(见图4)。如

11. 建立W_MAIN,将C_MAIN和C_SUPPECON的window属性都设成W_MAIN,注意调整C_SUPPECON的位置和大小。需调整位置的大小和原因见下一步。

12. 建立:B_ACTION.PB_SEARCH(那个Search按钮)的WHEN-BUTTON-PRESSED事件:

BEGIN

    if not FORM_SUCCESS then

        raise FORM_TRIGGER_FAILURE;

    end if;

    show_View(‘C_SUPRECON’);–C_SUPRECON

    P_MULTIVIEW.GO_MULTIVIEW_BLOCK(‘C_SUPRECON’);–已有的form是这样写的,但我这样写的时候会报一大堆错。记住这里实现的就是显示C_SUPRECON,代码可以自己重写

    RWIDGET.TURN_OFF(‘B_main.LI_action’);

    RWIDGET.TURN_ON(‘B_action.PB_back’);

    RWIDGET.TURN_ON(‘B_action.PB_ok’);

    RWIDGET.TURN_ON(‘B_action.PB_REFRESH’);–retail标准的函数RWID.TRUN_OFF,RWID.TRUN_OFF,实现Item的enabled属性

EXCEPTION

    when FORM_TRIGGER_FAILURE then

      Raise;

    when OTHERS then

      emessage(SQLERRM);

      Raise FORM_TRIGGER_FAILURE;

    END;

13. 建立:B_ACTION.PB_OK(OK按钮)的WHEN-BUTTON-PRESSED事件:

该事件实现:在C_SUPPECON界面上,点击“OK”按钮,打开fm_SUPPECON。

DECLARE

    L_action VARCHAR2(10) := :B_main.LI_action;

BEGIN

    Issue_Savepoint(‘CALL_FORM’);

    if L_action = ‘NEW’ then

        P_CALL_FORM(‘NEW’);

    elsif L_action = ‘VIEW’ then

        P_CALL_FORM(‘VIEW’);

    elsif L_action = ‘EDIT’ then

    P_CALL_FORM(‘EDIT’);

    end if;

EXCEPTION

    when FORM_TRIGGER_FAILURE then

        Issue_Rollback(‘CALL_FORM’);

        raise;

    when OTHERS then

        emessage(SQLERRM);

        raise FORM_TRIGGER_FAILURE;

END;

14. P_CALL_FORM

PROCEDURE P_CALL_FORM(p_action varchar2) IS

    L_action VARCHAR2(10) := :B_main.LI_action;

    PARAM_LIST PARAMLIST;

    PL_id VARCHAR2(9) := ‘gml_supreconfind’;

    L_exists VARCHAR2(1) := ‘N’;

    L_settlement_id GML_INVC_STM_HEAD.SETTLEMENT_ID%TYPE;

BEGIN

    — destroy the parm list if still present

    P_DESTROY_PARAMETER_LIST(PL_id);

    PARAM_LIST := Create_Parameter_List(PL_id);

    — add parameters

    add_parameter(PARAM_LIST,

                          ‘PM_MODE’,

                          TEXT_PARAMETER,

                          L_action);

    add_parameter(PARAM_LIST,

                         ‘PM_settlement_id’,

                         TEXT_PARAMETER,

                         L_settlement_id);

    — call the program

     open_form(‘gmlsuprecom’,

                    ACTIVATE,

                    SESSION,

                    PARAM_LIST);

EXCEPTION

    when FORM_TRIGGER_FAILURE then

        Raise;

END P_CALL_FORM;

fm_SUPPECON建立完毕。

15. 现在开始写fm_XXX.fmb,其开发过程和fm_XXX_find一样,也是从fm_temp1来。主要要建立三个习惯上的Block:

B_ACTION:和fm_XXX.fmb一样,用于放下面的一排按钮。

B_XXX:基于表的一个block。和ebs下一样。当然,可能还有主从结构的。

clip_image044

<图3-8>

16. B_APPLYS:类似EBS下的“Control”block,控制块。

其他的可以自由发挥,只要便于后面的人维护就好。这里,不再详细叙述。

17. me_XXX.mmb菜单我们在后面专门来叙述。

18. 如果form fm_XXX.fmb要用到package,需要在数据库中建立package。

到此,开发一个form的基本流程基本演示完毕,用户在使用的时候,会一次看到以下的画面。

<图3-1>

<图3-2>

<图3-8>

基于rms form开发常用技巧

下面看一看retail开发的一些函数和技巧,这些多是retail标准的。

命名规则

Form:Retail没有统一规则,一般以客户名简写加通俗易懂的字母/单词(比如:gmlgmlsuprecom.fmb,gml为客户名称简写)下面我们自己取名将以XXX替代。

Module:一般命名为FM_XXX(比如:FM_GMLCONSMRGN);

Block:一般命名为 B_XXX(比如:B_ACTION);

Cavans::一般命名为C_XXX(比如:C_CONSMRGN);

Window:一般命名为W_XXX(比如:W_CONSMRGN);

Item:一般是Text Item命名为TI_XXX,List Item命名为LI_XXX,Check Box命名为CB_XXX,按钮命名为PB_XXX…按此规律命名即可;只要大家一看都能明白就好。

多语言的实现

Retail的多语言,和EBS不同。EBS是在不同的语言环境放置不同语言的form程序,retail则只有一个form程序,它将需要显示给用户看的项的label,存放在数据库的特定表里,如果一个可视项有多种语言,则一个项在表里就有多条记录,当form启动的时候,在Form级WHEN-NEW-FORM-INSTANCE 触发器中,通过P_FORM_STARTUP->P_INITIALIZE 将Form中的每个Item和Item对应Label项取出来(该逻辑在fm_temp1中已经写好了),我们要做的是将这些项和它们对应的语言手工取出来,放入数据库的特定表中。

Form的多语言:

Form的语言是放在表form_elements_langs和form_elements中的。

其获取语言的sql如下:

select fe.block_name,
          fe.item_name,
          fe.sub_item_name,
          fe.item_type,
          nvl(fel.lang_label_prompt, fe.default_label_prompt) label_prompt,
          nvl(fel.lang_access_key,fe.default_access_key) access_key ,fel.lang
     from form_elements_langs fel,
          form_elements fe
    where fe.fm_name = ‘FM_ORDHEAD’/*I_form*/–by Form
      and upper(fe.fm_name) = upper(fel.fm_name(+))
      and upper(fe.block_name) = upper(fel.block_name(+))
      and upper(fe.item_name) = upper(fel.item_name(+))
      and upper(fe.sub_item_name) = upper(fel.sub_item_name(+))
      and 8/*L_user_lang*/ = fel.lang(+)–by user Language
      and fe.default_label_prompt is not NULL;

所以,需要向表form_elements_langs和form_elements中插入每个需要显示的项的信息。比如,在供应商维护form(SUPVWEDT)中有一个供应商代码(SUPPLIER)字段,查询这两个表

select * from  form_elements where fm_name=’FM_SUPVWEDT’ and item_name=’SUPPLIER’

FM_NAME    BLOCK_NAME    ITEM_NAME    ITEM_TYPE    SUB_ITEM_NAME    DEFAULT_LABEL_PROMPT    DEFAULT_ACCESS_KEY    BASE_IND
FM_SUPVWEDT    B_SUPS    SUPPLIER    Text Item    NONE    Supplier        Y

字段描述

FM_NAME: FM_||Form文件的名字

BLOCK_NAME: 该项(SUPPLIER)所在的block名字,如没有,就写”NONE”

ITEM_NAME: 该项(SUPPLIER)名

ITEM_TYPE: 项的类型,这里是 Text Item,还有Push Button,Window,LOV等,这里一定要写正确项的类型

SUB_ITEM_NAME: 子项,目前我写的还没用到

DEFAULT_LABEL_PROMPT: 如果表form_elements_langs中没有设置语言标签,则用这个

DEFAULT_ACCESS_KEY : 快捷键

BASE_IND: 目前还没搞清是什么意思,表里设置的都是’Y’

上面这个表里,是设置form拥有的元素,要实现多语言,还需要在表form_elements_langs中插入数据。这个表结构和form_elements差不多,只不过少了字段ITEM_TYPE,多了Lang字段,Lang字段就是语言的种类。目前取值有8(中文)和1(英文)。如果要设置两种语言,则要插入2笔数据。

这样,一个form可视项的多语言就设置成功了。

Retail这样设置多语言,感觉太麻烦,每一个项都这样设置一遍,一个form的工作量很大的。

Menu的多语言:

和form差不多,它的表示menu_elements和menu_elements_langs。

注:form的多语言是指form上的提示信息,如Item标题,message,Lov标题等,不能像ebs的表fnd_lookup一样,表里的数据是多语言的。

Form初始化

Form的初始化,写在Form的WHEN-NEW-FORM-INSTANCE触发器中。调用的主要过程有:

P_FORM_STARTUP->P_INITIALIZE、P_BOILERPLATE,这几个procedure都是fm_temp1中写好的,我们不用改变。我们需要添加的是自己的逻辑。

A. 初始化List Item

初始化List Item,要调用P_POPULATE_LIST(p_item_name varchar2,p_para varchar2),这个过程(该过程原型在stand45中),比如:P_POPULATE_LIST(‘B_apply.LI_cons_rev_freq’, ‘GCRF’)中,’B_apply.LI_cons_rev_freq’指List Item的名(一定要加上block的名),’GCRF’是表code_detail里的code_type字段。基本原理是该过程先定义一个cursor:

select code,code_desc from code_detail where code_type=’GCRF’

然后把code和code_desc赋给List Item,所以,List Item的动态值都来源于code_detail,做一个新的List Item之前,需要向这个表里插入数据。当然,也可以在程序里面写死

Show错误提示

显示错误提示,使用函数emessage(p_msg varchar2),如:

     emessage(‘This_is_a_err_msg’);

     raise form_trigger_failure;

错误提示也是分多语言的。所有的提示信息都放在rtk_errors表中,表里有一个三个重要字段

rtk_key: 比如这里的’This_is a err_msg’

rtk_lang: 语言

rtk_text:  提示信息;

比如在这个表里存在下面两条记录,则根据不同语言环境提示rtk_text的内容:

rtk_key                           rtk_lang                        rtk_text

This_is_a_err_msg          1                                  This is a err msg

This_is_a_err_msg          8                                  这个是错误信息

如果表里没有对应的提示信息,则直接显示emessage(‘This_is_a_err_msg’)中的参数,即’This_is_a_err_msg’

注:该过程原型:

PROCEDURE EMESSAGE     (I_key varchar2,
            I_txt_1 varchar2 := null,
            I_txt_2 varchar2 := null,
            I_txt_3 varchar2 := null) IS
            l_ret_val    BOOLEAN;
        BEGIN
           L_ret_val := RMESSAGE.SHOW (‘ALT_ERROR’, I_key, I_txt_1, I_txt_2, I_txt_3);
        END;

Lov设计

Retail的Lov的展现一般不会像ebs中,ebs中,一般是鼠标落在某个text item的项上,弹出某个lov,retail是在这个项的后面有一个按钮,当点击这个按钮的时候,会弹出一个lov,选择lov中的东西,再把选择的东西赋值给该item。

clip_image046

创建一个Lov的过程:

Step1. 建立一个Lov,指定其返回给那些项。

Step2. 在需要Lov的Text Item的后面加一个按钮项(按钮项的图标:日期按钮的图标名称 calendsm,一般Lov 按钮的图标名称 listval,备注按钮的图标名称 smaltalk)

Step3. 在按钮下写如下代码:

Go_Item(‘B_ordhead.supplier’);–先把光标移到Text Item上

Do_Key(‘List_Values’);–显示Lov

特别,创建弹出日期的Lov过程:

Step1. 打开我们自己写的form的同时,打开fm_date.fmb(这个文件是标准程式)。

Step2. 将fm_date下Object Group下的OG_DATE,拖动到自己的Object Group下,将弹出提示,这时选择“复制”。

Step3. 将calend45.pll添加进来。

Step4. 添加显示日期的text Item的when-new-item-instance事件:

另外,有一种情况也需要注意:

当需要根据不同的情况,动态显示不同的LOV。比如一个Text Item项里,但参数Para1为’学生’时,调用’学生’Lov(LOV_STUDENT),当Para1为’教师’时候,显示’教师’LOV(LOV_TEACHER)。这种情况,需要在Text Item的KEY-LISTVAL触发器中添加如下代码:

if :Para1= ‘学生’ then

    if F_SHOW_LOV(LOV_STUDENT’) then

        Do_Key(‘Next_Item’);

    end if;

elsif :Para1= ‘教师’ then

    if F_SHOW_LOV(LOV_TEACHER’) then
         Do_Key(‘Next_Item’);
    end if;

end if;

F_SHOW_LOV函数定义在标准package stand45中。

BEGIN
   Validate(Item_Scope);
   if not FORM_SUCCESS then
      raise FORM_TRIGGER_FAILURE;
   end if;

   if (P_CALENDAR.LP_date_ok is not NULL) then
      if (P_CALENDAR.LP_date_ok = ‘Y’) then
         :B_MAIN.TI_SETTLEMENT_DATE := P_CALENDAR.LP_current_date;
         P_CALENDAR.LP_date_ok := NULL;
         Do_Key(‘Next_Item’);
      else
         P_CALENDAR.LP_date_ok := NULL;
      end if;
   end if;
EXCEPTION
   when FORM_TRIGGER_FAILURE then
      raise;
   when OTHERS then
      emessage(SQLERRM);
      raise FORM_TRIGGER_FAILURE;
END;

Step5. 添加显示日期的text Item的key-listval事件:

DECLARE

L_return_to     VARCHAR(256) := ‘B_main.TI_settlement_date’;
   L_min_date      DATE := NULL;
   L_max_date      DATE := INTERNAL_VARIABLES.GP_vdate;
   L_default_date  DATE := INTERNAL_VARIABLES.GP_vdate;
BEGIN
   Validate(Item_Scope);
   if not FORM_SUCCESS then
      raise FORM_TRIGGER_FAILURE;
   end if;

   P_CALENDAR.SHOW_CALENDAR(L_return_to    => L_return_to,
                            L_default_date => L_default_date,
                            L_min_date     => L_min_date,
                            L_max_date     => L_max_date);
EXCEPTION
   when FORM_TRIGGER_FAILURE then
      raise;
   when OTHERS then
      emessage(SQLERRM);
      raise FORM_TRIGGER_FAILURE;
END;

Step6. 在按钮WHEN-BUTTON-PRESSED事件下写如下代码:

Go_Item (‘B_main.TI_settlement_date’); — B_main.TI_settlement_date是需要得到LOV值得Text Item
Do_Key (‘List_Values’);

菜单

Retail的菜单是通过菜单文件(.mmb)来实现的。其真正的事件是代码是在form中,菜单只调用form中的代码。下面以一个例子来说明:

这个例子演示的是增加 供应商维护–〉选项 菜单中,增加“联营保底”,其form文件是supvwedt.fmb,菜单文件是supplier.mmb.。

Step 1. 新建(修改)Menu (我们以supplier.mmb来说明,这个文件已经存在,我们来修改它既可) 在菜单OPTIONS_MENU下新增一个项:

name:  GML_CONS_MARGIN

lable: &Consignment Attributes–其实这里的不准,因为我们后面还会改变它的lable
Menu Item Type: Plain

Step 2. 在该Menu下写事件

Execute_Trigger(‘T_cons_margin’);–T_cons_margin是在form中定义的

Step 3. 在Form中写事件 ,注意将form的menu Module属性设置为supplier

在 supplier.mmb 中增加form级trigger

name: T_CONS_MARGIN

execution Hierarchy:Override

其他默认

事件代码:

declare
         …………
begin
         ………. –你自己的事件就写到这里就行了。
      Open_Form(‘gmlconsmrgn’,
                ACTIVATE,
                SESSION,
                L_pl_id);
         ………..
exception ….
         …
end;

Step 4. 编译form和Menu

(编译方法参见下一节)

编译好后,将生成的.fmx和.mmx放到bin目录下去
注意:如果没有编译菜单文件生成.mmx并放入bin目录下,则菜单虽然会挂上去,但点击所有的菜单都没有任何事件响应。

Step 5. 支持多语言

首先,执行
        select * from menu_elements where menu_filename=’supplier’ for update;
可以看到,菜单选项就是放这个表里的。
字段含义:
        menu_filename            菜单文件名
        menu_name                菜单名
        menu_item_name            菜单选项名,这里我们一般使用英文,随便取一个名字,假设我们取 GML_CONS_MARGIN
        default_lable            默认提示标签,如果语言设置里没有找到对应语言的标签,就会用这个
        base_ind                目前我也不知道是什么含义,把它设为’Y’
所以,在上面的表里增加一行menu_name 取OPTIONS_MENU(因为我们要挂在“选项”下),menu_item_name 取 GML_CONS_MARGIN,default_lable 取&GML_CONS_MARGIN

其次,在执行
        select * from form_menu_link where menu_filename=’supplier’ for update
可以看到,这个表里存放的是menu和form的关系。因为这form和menu的关系已经存在,我们不去修改它。

再次,执行
        select * from menu_elements_langs where menu_filename=’supplier’ for update
这个表就是存放多菜单语言的关系表了。它和menu_elements的字段含义差不多,只不过多了一个语言
我们增加一行,语言设置成中文(字段值为8)

最后运行下边的sql检查多语言是否设置成功

select me.menu_name,
          me.menu_item_name,
          nvl(mel.lang_label, me.default_label) label
     from menu_elements_langs mel,
          menu_elements me,
          form_menu_link fml
    where upper(fml.fm_name) = upper(‘fm_supvwedt’)—form名
      and upper(fml.menu_filename) = upper(me.menu_filename)
      and upper(me.menu_filename) = upper(mel.menu_filename(+))
      and upper(me.menu_name) = upper(mel.menu_name(+))
      and upper(me.menu_item_name) = upper(mel.menu_item_name(+))
      and 8/*L_user_lang*/ = mel.lang(+)–语言
      and mel.menu_item_name = ‘GML_CONS_MARGIN’–菜单选项
      and mel.menu_name = ‘OPTIONS_MENU’;–菜单名

如果能查到一条数据,就说明菜单多语言设置已经成功了。

编译Form/Menu

根据前面建立的环境变量,Form的编译语句如下:

假如要编译trv.fmb

oracle 用户登录

source rmsformsvr.env

cd $INSTALL_DIR/rms/forms/src

cp rtv.fmb rtv.fmb.bak

frmcmp.sh userid=$UP module=rtv module_type=form

cp $INSTALL_DIR/rms/forms/bin/rtv.fmx $INSTALL_DIR/rms/forms/bin/rtv.fmx.bak

cp -f $INSTALL_DIR/rms/forms/src/rtv.fmx $INSTALL_DIR/rms/forms/bin/

注:后面两句的意思是将原来的.fmx备份,再将编译后生成的文件放到bin目录下,这样才能运行。

编译menu,比如menu名称supplier.mmb,将上面的frmcmp.sh userid=$UP module=rtv module_type=form

换成frmcmp.sh userid=$UP module=supplier module_type=menu,即改变module=menu名,module_type=menu

注:本小节资料有商云方提供 http://blog.retailsolution.cn/blog/index.php/rms-form-compile

将客户化Form挂到rms上

和Form上菜单项有关的sql语句
一级菜单(folder)

SELECT * FROM NAV_FOLDER WHERE parent_folder IS NULL

二级菜单(folder)

SELECT * FROM NAV_FOLDER WHERE parent_folder =’ORDER_RELATED’ –比如 订购

菜单项(Form)

SELECT * FROM NAV_ELEMENT where element=’cux_jeffdemo’ –Form名是 FM_cux_jeffdemo

SELECT * FROM NAV_ELEMENT_MODE WHERE folder=’ORDER_RELATED’ –Form 挂哪个Menu(folder)下

Menu和 Form对应关系

(头上显示的菜单,不是菜单项)

SELECT * FROM FORM_MENU_LINK WHERE fm_name =’FM_’||upper(‘cux_jeffdemo’) for update

Form和角色的关系

即哪个角色可以看某个Form

SELECT * from NAV_ELEMENT_MODE_ROLE where element = ‘cux_jeffdemo’

用户和角色的关系

SELECT * FROM USER_ROLE_PRIVS WHERE USERNAME = ‘RMS12DEV’

所以,这里存在两种关系:

1. User->Role->Form(一个用户可以看见哪些Form)

       User

         |

      Role1 – Role2

               |

Form1-Form2-…FormN

2. Folder->Form (一个Form挂在哪个地方)

     Folder

        |

Folder-Folder…

      |

      .

      .

      .

    Folder-Folder…

        |

Form1-Form2…

实例挂Form

下面以一个实例说明:

将form FM_cux_jeffdemo2 挂在rms系统的“订购”–>“固定交易” 菜单下

Step 1.建立菜单

向 table NAV_FOLDER 中加入一行(“订购”和“固定交易”两个菜单都有,所以不用建立)

Step 2.

向 table NAV_ELEMENT 中加入一行

ELEMENT ELEMENT_TYPE COMPONENT

cux_jeffdemo2 F RMS

–ELEMENT Form 名

–ELEMENT_TYPE 类型 F表示Form

–COMPONENT 挂在RMS下

Step 3.

向 table FORM_MENU_LINK 中加入一行

FM_NAME MENU_FILENAME

FM_CUX_JEFFDEMO2 cux_jeffdemo2

–FM_NAME ‘FM_’ + Form名

–MENU_FILENAME Form名

Step 4.

向 table NAV_ELEMENT_MODE 中加入一行

ELEMENT NAV_MODE FOLDER ELEMENT_MODE_NAME

cux_jeffdemo2 –DEFAULT– FIX_DEAL 客户化Form Demo

–ELEMENT Form名

–NAV_MODE 打开Form的状态 查看(VIEW)-编辑(EDIT)-默认(–DEFAULT–)

–FOLDER Form放哪一个菜单(folder)下

–ELEMENT_MODE_NAME 菜单上显示的 prompt

Step 5.

向 table NAV_ELEMENT_MODE _ROLE中加入一行

ELEMENT NAV_MODE FOLDER ROLE

cux_jeffdemo2 –DEFAULT– FIX_DEAL DEVELOPER

–ELEMENT Form名

–NAV_MODE 打开Form状态,需与上一步一致,否则建立不了(与上一步的table设置了外键)

–FOLDER 同上一步

–Role 该Form分给哪个Role

可以查看表 USER_ROLE_PRIVS 知道用户和Role的对应关系

至此,就可以在rms的菜单项中,看到我们增加的这个菜单了(“客户化Form Demo”)。

Retail Report开发简要说明

Retail报表采用Reports builder开发。和6i下开发EBS报表基本没有区别。使用过6i的话,很快就能开发报表。需要提到的一点就是,根据不同输入参数,报表显示不同格式。

例如下面的报表,输入不同的参数,输出不容的布局。

clip_image048

<图4-1> 参数一

clip_image050

<图4-2> 布局一

clip_image052

<图4-3> 参数二

clip_image054

<图4-4>布局二

该类型的报表开发逻辑是:根据需要,用Reports builder建立两个不同的布局,根据参数显示不同的布局。

上面的这个例子在开发的时候,建立了两个循环框。分别在两个循环框里写如下代码如下:

function R_2FormatTrigger return boolean is

begin

    if :P_layout=’1′ then

        return (false);

    else

        return (true);

    end if;

end;

function R_1FormatTrigger return boolean is

begin

    if :P_layout=’1′ then

        return (TRUE);

    else

        return (false);

    end if;

end;

仅需这样,就可以实现上面的效果。以前6i里面直接这样写是不行的,还的在布局里建立一个过程。

将客户化Report挂到rms上

Rms下,报表管理做得比较粗劣,下面用一个实例来了解Rms挂报表的方法。Rms报表的运行结果是一个浏览器打开的pdf格式的文件,很遗憾,不能像ebs中的并发请求那样,将结果保存在服务器上,只能保存到本地。

一个例子
生成格式文件.rep文件

利用写好的报表CUX_GouBaoRep_Demo.rdf生成CUX_GouBaoRep_Demo.rep

(6i开发rdf报表公司资料库有很多资料介绍,10 report builder建立rdf文件和6i差不多,这里不详细介绍了)

1. 将本地编译通过的CUX_GouBaoRep_Demo.rdf文件,上传到 /d01/app/retail/rms/app/rms/reports/src

2. 运行下面的命令

cd /home/oracle

su oracle

source rmsformsvr.env

cd /d01/app/retail/rms/app/rms/reports/src

rwconverter.sh source=CUX_GouBaoRep_Demo.rdf userid=$UP dest=CUX_GouBaoRep_Demo.rep stype=RDFFILE dtype=REPFILE batch=yes

上面的命令会在 /d01/app/retail/rms/app/rms/reports/src 目录下生成 CUX_GouBaoRep_Demo.rep,再将 CUX_GouBaoRep_Demo.rep 剪贴到

/d01/app/retail/rms/app/rms/reports/bin下

注意:生成的.rep文件名如果含有字母,则字母必须是全小写,否则在运行的时候会报找不到报表

在rms中设置报表可用

在后台表RTK_REPORTS添加如下记录

MODULE REPORT_NAME REPORT_DESC PARAMETER_IND PRINTFRM_IND PRINT_MODE SELECT_IND

CUX_GouBaoRep_Demo CUX_GouBaoRep_Demo CUX_GouBaoRep_Description_Demo Y Y A

table RTK_REPORTS 字段说明:

1. MODULE 应该类似于EBS中的模组,但这里随便输入都可以

2. REPORT_NAME 报表名,这个须是报表文件名,比如CUX_GouBaoRep_Demo

3. REPORT_DESC 报表描述,随便取一个用户容易看懂的

4. PARAMETER_IND 只能选择’Y’/’N’,目前还不知道作用,从意义上来看应该和参数有关,但我测试输入’Y’或’N’好像没有什么区别

5. PRINTFRM_IND 只能选择’Y’/’N’,在form上可以打印的时候是否可以选择到该报表,选择’Y’,可在rms form中选择到,否则选不到

6. PRINT_MODE 只能选择’A’/’S’,同PARAMETER_IND,目前也不确定

7. SELECT_IND 不确定,目前系统里都为空

可以看到客户化的报表已经可以运行了。

效果图见:<图1-5>-<图1-8>

新增rms用户

RMS系统用户的用户为DB用户,创建非常繁琐,而且需要后台处理,这里总结步骤如下:

1. 在数据库后台创建DB用户。

2. 对创建的用户授予角色权限、系统权限。

/*==================================================

 

  Copyright (C) HAND Enterprise Solutions Co.,Ltd.

 

             AllRights Reserved

 

  ==================================================*/

 

/*==================================================

 

  Program Name:

 

      CREATE RMS USER

 

  Description:

 

      This program create Oracle rms db user and grant all privileges .

 

  History:

 

      1.00  2008-11-10  Kenneth.shao    Creation

 

      2.00  2008-11-10  Kenneth.shao    Modified

 

            修改角色授权,增加选择角色功能,可以支持授权多个角色,用“,”号分割

 

            如:developer,select_catalog_role

 

  Version:

 

      2.00

 

  ==================================================*/

 

DECLARE

 

  l_user_name VARCHAR2(30) := '&amp;USER_NAME' ;

 

  l_roles     VARCHAR2(400) := '&amp;ROLE' ;

 

  l_crt_user varchar2(300) := 'create user '|| l_user_name ||'

 

  identified by "' || l_user_name || '"

 

  default tablespace RETEK_DATA

 

  temporary tablespace TEMP

 

  profile DEFAULT

 

  quota unlimited on lob_data

 

  quota unlimited on retek_data

 

  quota unlimited on retek_index';

 

  l_grant VARCHAR2(4000) ;

 

BEGIN

 

  --Create user

 

  EXECUTE IMMEDIATE l_crt_user ;

 

 

 

  --Grant directory

 

  l_grant := 'grant read on directory SYS.OUTPUT_WORKING to '||l_user_name;

 

  EXECUTE IMMEDIATE l_grant ;

 

  l_grant := 'grant read on directory SYS.UTL_FILE_DIR to '||l_user_name||'
              with grant option';

 

  EXECUTE IMMEDIATE l_grant ;

 

 

 

  --Grant role privileges

 

  l_grant := 'grant ' || l_roles || ' to '||l_user_name ;

 

  EXECUTE IMMEDIATE l_grant ;

 

 

 

  --Grant system privileges

 

  l_grant := 'grant alter session

 

    , analyze any

 

    , create any context

 

    , create any procedure

 

    , create any synonym

 

    , create any table

 

    , create any type

 

    , create database link

 

    , create library

 

    , create materialized view

 

    , create procedure

 

    , create public database link

 

    , create public synonym

 

    , create sequence

 

    , create session

 

    , create synonym

 

    , create table

 

    , create trigger

 

    , create view

 

    , debug connect session

 

    , delete any table

 

    , drop any procedure

 

    , drop any synonym

 

    , drop any table

 

    , execute any procedure

 

    , execute any type

 

    , insert any table

 

    , query rewrite

 

    , select any sequence

 

    , select any table

 

    , update any table to '||l_user_name ;

 

  EXECUTE IMMEDIATE l_grant ;

 

END ;

3. 为新建DB用户创建RMS12DEV(现行环境下的用户)下对象的同义词

/*==================================================

 

  Copyright (C) HAND Enterprise Solutions Co.,Ltd.

 

             AllRights Reserved

 

  ==================================================*/

 

/*==================================================

 

  Program Name:

 

      CREATE RMS SYNONYM

 

  Description:

 

      This program create all synonym for rms12dev to rms new user .

 

  History:

 

      1.00  2008-11-10  Kenneth.shao    Creation

 

  Version:

 

      1.00

 

  ==================================================*/

 

DECLARE

 

  l_user VARCHAR2(30) := '&amp;USER_NAME';

 

BEGIN

 

  FOR syn_r IN (SELECT DISTINCT 'create or replace synonym '|| l_user || '.' ||
              object_name ||  ' for rms12dev.' || object_name   syn

 

                  FROM dba_objects

 

                 WHERE owner = 'RMS12DEV'

 

                   AND object_name NOT LIKE 'BIN$%'

 

                   AND object_type IN ('SEQUENCE'

 

                                      ,'PROCEDURE'

 

                                      ,'PACKAGE'

 

                                      ,'LOB'

 

                                      ,'LIBRARY'

 

                                      ,'MATERIALIZED VIEW'

 

                                      ,'TABLE'

 

                                      ,'VIEW'

 

                                      ,'FUNCTION'

 

                                      ,'TYPE')

 

                ) LOOP

 

    BEGIN

 

    EXECUTE IMMEDIATE syn_r.syn ;

 

    EXCEPTION

 

      WHEN OTHERS THEN

 

        dbms_output.put_line(syn_r.syn||'-----'||SQLERRM) ;

 

    END ;

 

  END LOOP;              

 

END ;

4. 在RMS系统中设置用户属性,位置:启动->控制->设置->用户属性->新建

选择语言

clip_image056

注:如果没有创建用户,Step4中会提示用户无效。如果没有创建同义词,则用新建的用户进系统的时候会提示对表操作没有权限。

5. 设置用户组,位置:启动->控制->系统->地点/产品安全性->用户/组链接->编辑。(设置之前必须保证组已经建立并赋予一定的权限,这里不详细讲述)。添加一行新的。

clip_image058

到这里为止,用户已经成功创建,只要组已经设置并赋权,用户便可以使用。

可以看出,其实RMS用户是在DB层建立的用户。

注:本小节资料有邵志国提供 http://blog.retailsolution.cn/blog/index.php/retail-rms-user-create

报表服务器的一个特殊设置

在oracleias 10g中,已经没有report server,被整合到OC4J里,所以,要启动10AS的“Report Server”,只有启动OC4J就可以了。

通过下面命令:

opmnctl status

得到如下输出:

Processes in Instance: formreportsvr.syfr12

——————-+——————–+———+———

ias-component | process-type | pid | status

——————-+——————–+———+———

DSA | DSA | N/A | Down

LogLoader | logloaderd | 11895 | Alive

HTTP_Server | HTTP_Server | 5298 | Alive

dcm-daemon | dcm-daemon | N/A | Down

WebCache | WebCache | 5305 | Alive

WebCache | WebCacheAdmin | 5294 | Alive

OC4J | home | 13643 | Alive

OC4J | OC4J_BI_Forms | 13644 | Alive

可以看到OC4J已经起来了,但在运行报表的时候如下错误:

“http 404”的错误,或者找不到网页的错误

Case

Report Server的配置问题。

Solution

1. 修改rms.env(/d01/app/oracleas/OraHome_1/forms/server/目录下),在后面追加一下内容

具体请参考(Detail请参考 /d01/app/retail/rms/12.0.1下rms-1201-ig.pdf 【Configure Oracle Application Server 10 for RMS Reports】)

/*****************************************************

ORACLE_RMS_REPORTS_HOST=http://syfr12:7778/

ORACLE_RMS_REPORTS_SERVER=rep_syfr12_oracleas1+envid=rms12arep

ORACLE_RMS_RWSERVER=reports/rwservlet

*****************************************************/

注:ORACLE_RMS_REPORTS_HOST=http://<server>:<Listen port>

ORACLE_RMS_REPORTS_SERVER is the value of the reports configuration file without the .conf plus a standard envid (“envid” must be used) and the name of the header inside the configuration file that defines the variable REPORTS_PATH.

2. 修改rep_syfr12_oracleas1.conf(/d01/app/oracleas/OraHome_1/reports/conf目录下)

在标签</server>前添加以下内容(Detail请参考metalink 559039.1)

/*******************************************************

<environment id=”rms12arep”>

<envVariable name=”REPORTS_PATH”

value=”/appl/acc/ah01/rt12/rms/reports/bin:/appl/acc/ise/oras/aoasgm02/reports/reports/
templates:/appl/acc/ise/oras/aoasgm02/reports/reports/samples/demo:/appl/acc/ise/oras/
aoasgm02/reports/integ:/appl/acc/ise/oras/aoasgm02/reports/printers”/>

<envVariable name=”NLS_LANG” value=”AMERICAN_AMERICA.UTF8″/>

</environment>

*******************************************************/

Open Issues

从Retail标准Form来看,新增一个Form,需在SCREEN_SQL中增加一个函数,在Form的初始化过程P_INITIALIZE中会调用SCREEN_SQ.GET_SCREENTEXT,进而调用的新增的函数。一直没弄明白该函数的作用,我自己新建的一个Form,没有做这一个动作,仍然可以运行。

Closed Issues

———————————————————————————————————

未命名

作者 黄鸿

组别 广州技术一组

2006年正式参加工作,热衷ERP事业,曾在liteonit(广州)实施SFC系统和EBS的二次开发和流程优化工作。2008年6月进入Hand,先后在温州天正协同制造项目,上海购宝零售项目做技术支持工作。对EBS制造、分销方面有开发经验,熟悉的开发工具有form/report/pl sql/discover/xml report 这篇文章是在上海购宝项目期间,做客户化开发过程中所写下的。

要学习的还有很多,同志仍需努力

RMS系统用户创建

RMS系统用户的创建非常繁琐,而且需要后台处理,这里总结步骤如下:

1、在数据库后台创建DB用户。

2、对创建的用户授予角色权限、系统权限。

以上两步可使用以下SQL脚本完成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*==================================================
  Copyright (C) HAND Enterprise Solutions Co.,Ltd.
             AllRights Reserved
  ==================================================*/
/*==================================================
  Program Name:
      CREATE RMS USER
  Description:
      This program create Oracle rms db user and grant all privileges .
  History:
      1.00  2008-11-10  Kenneth.shao    Creation
      2.00  2008-11-10  Kenneth.shao    Modified
            修改角色授权,增加选择角色功能,可以支持授权多个角色,用“,”号分割
            如:developer,select_catalog_role
  Version:
      2.00
  ==================================================*/
DECLARE
  l_user_name VARCHAR2(30) := '&amp;USER_NAME' ;
  l_roles     VARCHAR2(400) := '&amp;ROLE' ;
  l_crt_user varchar2(300) := 'create user '|| l_user_name ||'
  identified by "' || l_user_name || '"
  default tablespace RETEK_DATA
  temporary tablespace TEMP
  profile DEFAULT
  quota unlimited on lob_data
  quota unlimited on retek_data
  quota unlimited on retek_index';
  l_grant VARCHAR2(4000) ;
BEGIN
  --Create user
  EXECUTE IMMEDIATE l_crt_user ;
 
  --Grant directory
  l_grant := 'grant read on directory SYS.OUTPUT_WORKING to '||l_user_name;
  EXECUTE IMMEDIATE l_grant ;
  l_grant := 'grant read on directory SYS.UTL_FILE_DIR to '||l_user_name||' with grant option';
  EXECUTE IMMEDIATE l_grant ;
 
  --Grant role privileges
  l_grant := 'grant ' || l_roles || ' to '||l_user_name ;
  EXECUTE IMMEDIATE l_grant ;
 
  --Grant system privileges
  l_grant := 'grant alter session
    , analyze any
    , create any context
    , create any procedure
    , create any synonym
    , create any table
    , create any type
    , create database link
    , create library
    , create materialized view
    , create procedure
    , create public database link
    , create public synonym
    , create sequence
    , create session
    , create synonym
    , create table
    , create trigger
    , create view
    , debug connect session
    , delete any table
    , drop any procedure
    , drop any synonym
    , drop any table
    , execute any procedure
    , execute any type
    , insert any table
    , query rewrite
    , select any sequence
    , select any table
    , update any table to '||l_user_name ;
  EXECUTE IMMEDIATE l_grant ;
END

3、为新建DB用户创建RMS12DEV(现行环境下的用户)下对象的同义词。可使用如下脚本执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*==================================================
  Copyright (C) HAND Enterprise Solutions Co.,Ltd.
             AllRights Reserved
  ==================================================*/
/*==================================================
  Program Name:
      CREATE RMS SYNONYM
  Description:
      This program create all synonym for rms12dev to rms new user .
  History:
      1.00  2008-11-10  Kenneth.shao    Creation
  Version:
      1.00
  ==================================================*/
DECLARE
  l_user VARCHAR2(30) := '&amp;USER_NAME';
BEGIN
  FOR syn_r IN (SELECT DISTINCT 'create or replace synonym '|| l_user || '.' || object_name ||  ' for rms12dev.' || object_name   syn
                  FROM dba_objects
                 WHERE owner = 'RMS12DEV'
                   AND object_name NOT LIKE 'BIN$%'
                   AND object_type IN ('SEQUENCE'
                                      ,'PROCEDURE'
                                      ,'PACKAGE'
                                      ,'LOB'
                                      ,'LIBRARY'
                                      ,'MATERIALIZED VIEW'
                                      ,'TABLE'
                                      ,'VIEW'
                                      ,'FUNCTION'
                                      ,'TYPE')
                ) LOOP
    BEGIN
    EXECUTE IMMEDIATE syn_r.syn ;
    EXCEPTION
      WHEN OTHERS THEN
        dbms_output.put_line(syn_r.syn||'-----'||SQLERRM) ;
    END ;
  END LOOP;                
END ;

4、在RMS系统中设置用户属性,位置:启动->控制->设置->用户属性->新建。

5、设置用户组,位置:启动->控制->系统->地点/产品安全性->用户/组链接->编辑。(设置之前必须保证组已经建立并赋予一定的权限,这里不详细讲述)。

到这里为止,用户已经成功创建,只要组已经设置并赋权,用户便可以使用。

讨论:24*7营业店的日结处理

从DPOS项目中,我了解到零售行业存在门店日结的业务特点。我对门店日结的理解:将门店在每一个业务日期中所发生的库存事务、销售事务(包括财务事务)数据固化下来,使这些数据能和总部后台(通常是ERP系统)的数据对应,有点类似子模块和库存/总帐在一个会计期内的数据发生和数据收集关系。

门店日结还有一个特点,日结完成后门店的当前的业务日期自动关闭并自动打开下一业务日期,之后的业务统统记录到下一日期。这个特点对每天晚上定时关门的门店来说影响不大,但对24小时营业店来说就有影响。我们知道ORACLE ERP系统中库存模块不允许创建未来日期的库存事务,当24小时营业店日结后,门店的业务日期已经跳转至下一天,之后发生的库存业务将不能被顺利导入ORACLE ERP库存模块。这些数据只能停留在接口表中,直到第二天才能被导入。这样对门店的POS系统来说,日结完成后到当前自然日结束这段时间内,ORACLE ERP库存现有量将和门店的实际情况对应不上。

在ARG项目中,我们通过库存现有量外加接口数量来解决这个问题。 我觉得这个方法比较别扭,欢迎大家探讨一下有什么好办法解决这一问题。 另外也想向老商打听一下,ORACLE RETAIL需要日结吗?如果需要,那么是ORACLE是如何处理日结的。

有关RMS系统中每个字段的详细意义解释.

有关RMS系统中每个字段的详细意义解释.

  RMS系统中的帮助文件及用户指南基本只涉及界面导航路径. 没有对每个界面字段意义的详细解释. 目前,只有数据字典文档上对每个字段的意义解释最为详细. 有需要了解者可以查看: rms-1208-dm.pdf

下面举一例说明:

NAV: 货品->货品->地点->货品-单个地点特性

image

启动日期是什么意义呢?

首先,通过技术手段可知这个Item对应数据库中的字段是 Item_Loc_Traits.LAUNCH_DATE; 
其次,查rms-1208-dm.pdf, 在page 903 有此字段的详细解释:

30     LAUNCH_DATE :
Holds the date that they item should first be sold at the location. This value
will be downloaded to the POS. No internal processing occurs from this field.

可见,此字段是需要下载个POS门店, 用于控制某种商品在某个门店的最早销售日期的, 如果早于此日期,那么该商品在该门店不能销售.

财政部 国家税务总局关于连锁经营企业有关税收问题的通知

财政部 国家税务总局关于连锁经营企业有关税收问题的通知

                       财政部 国家税务总局关于连锁经营企业有关税收问题的通知

各省、自治区、直辖市、计划单列市财政厅(局)、国家税务局、地方税务局:
      为贯彻落实《国务院办公厅转发国务院体改办、国家经贸委关于促进连锁经营发展若干意见的通知》(国办发[2002]49号)的精神,支持连锁经营的发展,现将连锁经营企业实行统一缴纳增值税、所得税的有关问题进一步明确如下:

    一、  在省、自治区、直辖市、计划单列市内跨区域经营的统一核算的连锁企业,需要实行由总机构向其所在地主管税务机关统一申报缴纳增值税的,按照财政部、国家税务总局《关于连锁经营企业增值税纳税地点问题的通知》(财税字[1997]97号)的有关规定办理。

    二、 根据《中华人民共和国企业所得税暂行条例》和《中华人民共和国企业所得税暂行条例实施细则》的有关规定,对内资连锁企业省内跨区域设立的直营门店,凡在总部领导下统一经营、与总部微机联网、并由总部实行统一采购配送、统一核算、统一规范化管理,并且不设银行结算帐户、不编制财务报表和账簿的,由总部向其所在地主管税务机关统一缴纳企业所得税。依照《中华人民共和国外商投资和外国企业所得税法》和《中华人民共和国外商外资和外国企业所得税法实施细则》的有关规定,对从事跨区域连锁经营的外商投资企业,由总机构向其所在地主管税务机关统一缴纳企业所得税。

     三、 上述跨区域经营的连锁企业实行统一缴纳增值税、所得税后,各级财政部门要认真贯彻执行国办发[2002]49号文件的精神,及时制定统一纳税后所属地区间财政利益调整办法,妥善处理好各级财政利益分配关系,以确保连锁企业门店所在地的财政利益在纳税地点变化后不受影响,以利于连锁经营的发展。
二00三年二月二十七日

物流的税务问题讨论帖

物流的税务问题

 

源文地址: http://www.em-leading.info/forum/index.php 

引用自: http://www.logclub.com/redirect.php?goto=newpost&tid=275

———————————-

steve 第1楼  物流的税务问题,请指教

———————————–
咨询过几家3PL(第三方物流) ,他们不同仓库(异地)之间货物的移动,不交纳税务;
而我们所在的企业,异地仓库之间的转储,还要纳税。
这是什么原因?请指教

———————————–
游客(当年风云人物)第2楼 中国特色啊!

———————————–
这的确是一个非常好的、却又是实际工作中不可避免却非得处理的问题。在90年代中后期,就已经存在了,现在好像更厉害了。
所涉及到的税种主要是VAT(产品的增值税)。是这样,产品在买卖过程中,企业是要上缴国家增值税,即每月企业的销项税(当月销售额x增值税率)-当月的进项税(当月的采购额x增值税率)。大部分的商品的增值税率是17%,也有10%和6%的一些。简单并近似地,增值税就是商品的进销差价的17%。
对于一个全国性或跨地区经营的企业,就会遇到这样的情况:比如,工厂在北京,货物销往上海。如果该企业在上海是有分支机构的话(比如销售分公司),则上海的分支机构就得根据前面说的每月向上海的地方国税局申报并缴纳增值税。而如果在上海是通过经销商,则该经销商则是纳税人。有人说,我在上海仅设为办事处,不是公司法人,是否就不用缴纳增值税了呢?这得看情况,初期业务量小的话,当地税务局不知道,可能就没人管;而一旦他们知道这个公司在上海有业务,就会找上门来。当然首先是让你做税务登记。如果分支机构帐目清楚,且定期如实地申报的话,是应该按我上面说的那种办法缴税。注意,其中有库存的缓冲影响,即当月的进货可能不一定在当月全部卖出去。但如果你被税务局认为不扎实,则他们可能断然地以你当月的进货作为全月的销售量计算。最极端的,曾有税务局封了我的仓库的例子。
至于,3PL,因为是服务商,不是货物的法定主人,且并不参与销售活动(没有哪个3PL开增值税发票的),也就不用缴纳增值税了。
另外,有人可能会说,那个在北京的工厂不是已经缴纳了增值税了吗,为什么到上海还要缴纳呢?这就是中国特色了,我个人理解是,虽然增值税是国税即最后是进入国库的,但别忘了,每个当地的国税局也还是有他们各自的任务指标的。
在实际工作中,解决好这个问题,需要全盘统筹考虑,发货的原地与目的地(如果都是公司内部的话)之间按什么价格结算,将决定公司在两地的纳税比例。
我本想在miaorun的那个仓库选址的帖子里提这个问题的,但又不好意思打消他们建模的积极性。谢了,让我说出一直憋在心里的话。

————————————
第3楼

————————————-
那如果是我们企业自己有自己的物流部门专门运作呢?

————————————
游客 第4楼 入乡随俗

————————————
抱歉,可能是我前面没讲清楚。如果是对于我们前面说到的那部分增值税,谁来做都是一样的。从税务的角度,是看你的货物的权益是否发生了变化。还是上面的那个例子,货物从北京的工厂运往上海(当然,偏爱上海的同志就理解成上海运往北京好了),货到了上海先在上海的仓库歇着。如果没有出你们公司,理论上就不缴税。但请注意,这里说的公司的概念是法律上的概念(集团公司在这不好使),即纳税主体。如果你在上海是注册的分公司,则货物在出北京库的那一刻,北京的公司就有了纳税的义务;而如果上海注册的仅是北京公司的办事处,则货物出北京时可不纳税,因为该货物直到在上海卖出去之前,在你们财务的帐上还是算北京公司的资产。这样僵持着,到货物真正从上海卖出去,北京财务则记为销售,在北京开始有纳税义务;但,如果你来我往地,上海税务局一旦微笑着请侬去做做税务登记,撒宁敢不去?
还有一种情况是,货物从北京先到上海,再辗转奔波到宁波,直到宁波才售给客户。在上海到底是否要纳税呢?我个人认为,理论上是不要的,但前提是上海税务局不来捣浆糊,或你得证明从公司上海库到宁波库是公司(法律上的一个纳税法人啊)内部调拨。不知我港清楚了没有?

——————————-
第6楼 谢谢

——————————-
呵呵,国家没有相关的税法规定?
比如我的工厂在北京,上海有我的仓库、广州也有我的仓库,但都不是独立法人,这样的话,我北京运到上海,再从上海运到广州,只属于公司仓库间的调拨,根本没有实现销售,理论上应该不纳税。但为什么税务机关要差呢?难道真的无法可依?也就是说,如果我开具库存调拨单的证明,即可不纳税?
游客 第8楼 千万不要忘记阶级斗争!
看来,税务战线的同志说的是对的,斗争一直是存在着。空子是肯定有的,关键看是合法的避税还是偷漏税,前者是人民内部矛盾,后者,嘿嘿!
1)北京公司=》北京公司上海分公司=》北京公司上海分公司宁波办事处
2)北京公司=》北京公司上海分公司=》北京公司宁波分公司
3)北京公司=》北京公司上海仓库(或上海某3PL仓库)=》北京公司宁波分公司
对于1),在上海到宁波的环节使用调拨单,当时不用缴税,待宁波方面实现销售时的月份缴纳;
对于2),在那个环节使用调拨单,对税没有影响,哪个环节都视为销售,都要在当月缴纳;
对于3),在上海与宁波之间,使用调拨单,我认为是不用缴税的。因为,货物试同过境,而且动和静本来就是相对的,要不我的从北京去上海的卡车还不得先在天津缴,再是山东、江苏?但我又算老几呢?关键是看上海国税局怎么认定了。对于3)中的自己干的情况,税务局可能会说你有那么一帮身份不明的人们在仓库里玩耍,不就是销售活动的一部分吗,难道咱们说:“咱们大家先别争,先坐下来谈谈物流吧?”而且,还会牵扯到当地的工商和劳动部门(即在当地没有组织的情况,撮合一帮人干;得看当地的法规了)反正,我当年是请客吃饭还得交一些。而如果用3PL可能会稍微好一点儿。
当然,这里面还是有空子钻,比如偷梁换柱?但但凡是稍微大一点儿的公司,可能都会有所顾忌,因为纸是包不住火的,公司里知道那事儿的肯定不会就一个人,如果以后员工不愉快,给告了,嘿嘿!
对了,Steve,既然说得性起,我问你,你是否想过,假如都是合法的情况,谁支付运费对税务上有好处,是始发站呢,还是终点站呢?

————————————–
第9楼 致6楼

————————————–
对不起,Steve, 我刚才没看见你在6楼的发言。
即使在某地的机构不是独立法人,哪怕是办事处,有了一点的量的话,当地的税务机构都会邀请你去做税务登记的。国家级的法律,往往是这样说的:“具体的操作事宜以当地的法规和规定为准啊!”所以,开仓库之前,可得想仔细,并向当地的财务人员、税务机关或google查询。当然,我们必须看来未来是充满希望的,即WTO以后,且大家都团结在胡总书记的周围,情况会越来越好的。
另,hibing,本是午茶时分的闲聊,你怎么又给顶起来啦,你可真像董存瑞啊!

————————————–
miaorun2001 第10楼

————————————–
我觉得终点支付比较对企业有好处。
既然终点已经是销售,那么可以将运费算为货品相关成本的一部分,你认为呢?

第12楼 好像是税法的东西,呵
如上所述只要货物在公司之间(帐上)有进出就要计VAT(各计进、销),所以问题来了:
1、(北京)公司只在(上海)当地设办事处,不设分公司。而从税法上讲(上海)办事处是(北京)公司的一部分,所以不计VAT。届个漏洞如游客所说当地税务局不是傻子~~~~但办事处在法律上是什么地位,俺也学过税法,但不太清楚。
2、设(上海)分公司,但调拨后货物仍计在北京帐上这样在调拨环节就不用计VAT了~客户购买是直接和北京公司发生业务(各计进、销项税)。是否可以???或者换句话说国家是否有相关规定堵这个漏洞。
3、再不行的话,也就是说只要我把货物存在3PL的库里就不用交北京公司——〉上海分公司的VAT了,是吗?
谢谢!
最后,古代有句话叫“法令滋彰,盗贼多有”,所以是法令就一定有漏洞,哪位同志再帮咱开阔一下“盗贼”的思路再?
游客 第13楼 致10楼、11楼
10楼的答案,我个人认为是正确的;当然,具体操作时可能会麻烦些,比如合同的签订、单据的审核和款项的支付。
11楼的答案,也是正确的,能否给出稍微详细一些的道理?
另外,既然题目给出了,不知在退、换货以及货物报废和销毁时,有无税务的问题呢?

———————————–
第14楼

———————————–
我觉得退、换和货物报废存在税务问题。但对企业还是比较公平的,因为在采购原料、加工时,企业存在进项税,销售时要交纳增殖税。退货时,增值税不会退还给企业.
———————————–
第15楼

———————————–
不太明白
退货的增值税不会退回企业吗?
供应商向厂家退货是要冲红发票的。这是不是一回事啊?
退货品如果报损或折旧的话,厂家又该怎么处理?
风清杨-不是我  第16楼
企业国内采购的货物,按照专用发票上注明的增值税额,借记“应交税金--应交增值税(进项税额)”科目,按照专用发票上记载的应计入采购成本的金额,借记“材料采购”“商品采购”“原材料”“制造费用”“管理费用”“经营费用”“其他业务支出”等科目,按照应付或实际支付的金额,贷记“应付帐款”“应付票据”“银行存款”等科目。购入货物发生的退货,作相反的会计分录。

———————————
第17楼

———————————
总机构向不在同一县(市)的分支机构调拨商品,应视同销售货物。总、分支机构间可开具增值税专用发票,并分别作销(进)项税处理;如不开发票,则分支机构不能抵扣进项税。其纳税义务发生时间为:总机构为货物移送时,分支机构视其销售结算方式而定。
游客 第18楼 谢16、17楼对有关会计准则和税法的复述
我注意到17楼说“总、分支机构间可开具增值税专用发票”其中,用了可开具。问题就在这儿呀,什么时候可开具,什么时候可不开具呢?这恐怕就得见仁见智了。经常遇见的情况是,当地税局认为是“可”,而我们往往想颤颤危危地去问:“可不?”
我还必须说明一下的是,本单元讨论的问题一般是不会增加企业的税负的,只是在不同的地方拆开;但往往就是这样,会给工作造成很多的麻烦,也打破了在本地的原本的与税局相亲相爱的良好局面,因为另地的税局看来是插足了。
另,12楼的“l哪位同志再帮咱开阔一下“盗贼”的思路再?”,好像有些请君入瓮的嫌疑啊,谁敢呢?

—————————–
第19楼 竞价中的比较

——————————
这两天遇到这样一个问题:
从港口(或机场)deliver到工厂(或仓库),有3种人老搅和:
1)货代,服务发票(5.5%)
2)3PL,3%?or 5.5%?
3)运输公司,运输发票,可抵扣VAT10%
对于投标和货主来说,在考虑竞价的时候,是否要考虑税负呢?恳请熟悉的同仁指教一二?谢!

—————————-
第22楼

—————————-
纳税义务的主体是“纳税人”,纳税人是独立的法人实体(不过是否为一个集团公司或者其股权结构如何),只有当纳税人发生了货物销售或提供了应税劳务时(一般情况下以开具发票为准)时,才发生纳税义务,也就是需要交纳增值税,它与货物的移动或者存放地点没有直接的联系(当然涉及到境外业务例外),并且在实际的商业活动中,物流和商流大多不是同时发生,而纳税义务发生的期间以商流为准,比如大量存在的代销,分期付款发出商品,第三方采购(直运)等各种业务形式,均存在物流和业务流不同时发生。
具体的来说,不管总,分支机构是否在同一地区,若是不同的法人实体(纳税人),他们直接的业务关系均是“买卖关系”,需要各自根据销售情况分别履行纳税义务。但各自的纳税业务究竟发生在什么期间,则由各自直接的销售发生的期间而定。在实际操作中,为了推迟纳税义务(相当与企业获得的无息贷款),可以有两种处理办法:
1. 总-分 之间采用“代销”的销售方式,只有当“分”发生了销售,并提供给“总”销售清单,“总” 再开具增值税发票给 “分”,这样“总”就推迟了纳税时期。
2.总 首先“发出商品”,认为商品的所有权仍然归 总,在会计帐务上:借:库存商品,贷:分期付款发出商品,只有当 分发生了销售,再由 总开具发票,履行纳税义务。
尽管各地税务部门有各自的规定,但大的原则是一致的,关键是你如何处理帐务,确定在“什么期间”发生销售,从总的来说,对于国家,纳税的总额是一致的,但存在两个问题:1.纳税的时间,2.由于增值税(国税)是由国家和地方按照一定的比例来分配(7/3),所以各地方的税务部门还是想把税款留在本地。
我的20楼的发言不妥,收回! 本楼的发言请大家批评指正,“理不辨不明”嘛。

——————————-
第23楼

——————————–
还有一点非常重要,税法规定,若要开具“退货发票”(红字发票),必须首先得到购货方的税务证明,否则不允许,这在一定程度上可以防止企业乱开“红字发票”而逃避纳税义务,但给实际的义务操作带来了非常大的麻烦,因为要我们的“公仆”们办点正事是太麻烦了,特别是在“异地”业务,等你办下“税务证明”并且邮寄到发货方,黄花菜都凉了,所以,各种企业处理的办法就不同了,有的采取“反销售”,就是由够货方向发货方开具增值税票,相当与把货物卖给了原主,有的采取了用其他货物的发票来“低”,但这样给实际的管理中带来了很大的麻烦,需要多次调整库存才能达到帐实相符。(没有办法,中国特色啊)。
但有一点,想尽一切办法推迟纳税,对于企业不光获得了无息贷款,同时避免了多纳税的风险(若你已经贡献了,想退回企业是不可能的了)。

——————————–
第24楼 致22楼

——————————–
不知是不是我们在15楼以前没有说得很清楚,而造成了您直接坐电梯到22楼了呢?
1。非常赞同你用标准的语言阐述了有关规定和理论,这肯定会让至少是我,能更加坚定地在日后与税官觥畴交错时酒壮怂人胆地向他们传达
2。没人说货物的移动和存放地点与纳税有直接关系啊?但说的是移动和存放点的确立应考虑到对纳税的影响(直接还是间接呢?)以及对税官的看法的影响。
3。不同的法人之间的买卖关系,大家都心知肚明了。问题是(正如我们15楼以前讨论的),比如北京的公司在上海和宁波都是办事处的情况。当地的税务局知道了,可不会愿意认同北京与上海、宁波,上海与宁波之间不是买卖关系。实例,我当年在沈阳和上海,均曾因此被封过库。另外,还是上面的例子,就是我在上海什么也不设,就撮合了一伙人(由宁波办事处或北京公司直接发工资以示清白),在上海忙活一摊儿仓库,货物从北京到上海再集散到诸如宁波等地,你说,上海税官会放过我吗?

———————————
第25楼

———————————
致游客兄:
我在22楼的表述,重复某些问题的目的在于阐述我的看法,并不假定这些大家不知道,也没有就这些问题和大家辩论的意思。
对于办事处,因为他不是一个法人实体,仅仅是企业为了方便地服务于客户或者监督一些业务而设立的一个临时性机构,一般规定,办事处不能对外发生销售业务,若当地税务部门认定你进行了事实销售,当然会对你进行制裁了。但究竟如何认定“事实销售”呢?可能存在主观上的一些判断,比如:你拥有仓库,把货物从仓库发给分销商或者直接给消费者。一般情况下,在某地建立中转库,并不构成纳税义务,就是上面的例子,
就是我在上海什么也不设,就撮合了一伙人(由宁波办事处或北京公司直接发工资以示清白),在上海忙活一摊儿仓库,货物从北京到上海再集散到诸如宁波等地,你说,上海税官会放过我吗?
按照规定,这个与增值税是无关的,他可能认为你在上海进行了业务而没有相应的实体,要你成立机构等。
实际上成立公司也没有关系,反正进项、销项还不是控制在自己手里?另外还有代销(寄售)等各种方式,仅仅化些费用,实际的增值税还是不会多交(甚至不交)的。他也拿你没有办法。
或者你成立一个物流公司,专门负责货物的中转,发运,他难道要你交货物的增值税?当然这时另外一个话题了。
最后由 headchen 在 2003-07-12 04:39 AM 编辑

———————————-
第26楼

———————————-
公司内总分支机构之间跨税收管辖区域的货物移动都要缴纳增值税,不管你是否是独立法人,相关法规参见增值税暂行条例和实施细则。
举例:如果你从北京发往非独立的上海办事处货物价值¥1000(不含税价),北京公司交纳税款¥170,当上海办事处将货物按¥1200出售的时候,如果上海办不出具发票,那么在北京出具发票确认销售的时候,北京需要补交200*17%的增值税。
如果上海税务强行要求你缴纳¥1200的增值税,那么你可以让北京总部到税务去办理外出经营证明,你在上海出示外出经营证明后有两种可能,一是上海方面让你回北京交,二是在上海交,缴完税后,你只要将完税凭证交回北京入账就可以了。这样的税款,北京和上海的税务他们自己会分各自该拿多少,也就说,如果出具了外出经营证明,上海税务强行让你缴税的动力就会小很多了。
如果你在上海已经办理一般纳税人税务登记(注意不是注册税务登记),那么上海税务就不会理会你的外出经营证明了,但这种情况下北京可以向上海开具增值税发票,上海出售货物的时候则可以据此抵扣,总体税负不会增加。还有一种状况就是你在上海办的是小规模纳税人登记,这就不可避免会重复征税了,因为你在上海是按固定税率纳税,不能抵扣。不过这种情况也有办法,你可以通过北京向上海适当平开或低开价格来少缴增值税,达到平衡总体税负的目的。
如果你是全国性或区域性的大公司,你可以经过国家税务总局或国家税务总局认可的省级国税局批准,取得在总机构统一纳税的资格,这样也可避免多地纳税。但是,这种方式其实是有不利一面的,因为各地都会有不同税收优惠,在总机构统一纳税反而失去利用各地税收政策通过转移价格等手段合理避税的机会。
通过第三方物流来规避货物出库就要纳税的办法,很早前就被人们运用了。3PL不是货物所有者,也就不是增值税的纳税人,他只须依据营业额缴纳服务税,如果你的公司有3PL的业务还要交增值税,就说明你们的税务处理有问题,没有作好兼营业务的税务处理。一般在当你把货物交给3PL后,你将其视作一个虚拟仓库就可以了,他起的作用仅仅是让你延迟纳税,即在货物没卖出去之前先不缴纳税款,这样可以节约部分营运资金。但要注意在月末或年末账面反应的时候,这部分存货金额不能太大,太大会引起税务关注。平时要注意销售后即时转出。一旦税务查起来,你就告诉他你把货物放到租用的仓库中就可以了。通过3PL进行异地的库存转移和存储是税法的一个盲点,目前还没有明确的规定,属于擦边球。
至于退货,只要你们财务把退货记入库存账了,就当然可以抵减增值税,因为流转税的征收原则就是基于物权转移,你的客户向你退货会减少它的进项税抵扣,那么你理所当然就应该可以减少你的销项税了,否则就是重复纳税了,避免重复纳税也是税收的原则。税务法规和实务中为了防范税款流失,往往会采用源泉控制的办法,异地的库存转移要缴纳税款就是源泉控制的运用。
当你把退回货物报废的时候,就一定要缴纳增值税了,因为物权已经被消灭,等同于你自己消费自己的货物,否则原材料购进时候的税款就白被你抵扣了。国家可不会吃着这个亏。所以只要你在增值税的纳税范围之内,任何账面货物的减少,不管你用于何种用途,都会引起税务的关注。
我认为运费应该不存在起点或终点支付的问题,只存在买方支付或者卖方支付的情况,无论谁支付,税务只认你运费发票上注明的那一方,因为只有这一方才能使用运费抵扣。比如合同约定你代垫运费,但如果运费发票是开给你的,你就可以抵扣,你再要问交易对方收取代垫运费,就会需要缴纳增值税;如果运费是开给对方的,你收取代垫运费就不会缴纳增值税。在总分支机构的库存划转业务中,我的观点是把运费发票开给内部结算利润空间高的一方,而不论是谁要支付这笔运费。

——————————–

第27楼 致25楼

——————————–
代销的方式在现在是不合适的,因为按照现行税法,代销方式虽然可以延迟缴税,但会加重企业税负,因为作为代销方,需要缴纳营业税。
另外,通过“发出商品”处理虽然可以部分延迟缴税,但是需要法律合同的支持,比如合同注明约定收款日期和金额,这对非独立核算的分支机构不适用,税务一般不予承认。独立的分支机构实际操作中也会有难度,因为货物是一般是被逐渐卖出的,你需要和分支机构确定一个合理的收款日期开具发票。当你开具发票时,分支机构必须把资金转给你,以利于他自己的抵扣,但这会影响企业的资金运用,尤其资金不是集中管理的公司。如果分支机构不及时给你汇款,他就无法抵扣你的发票,而到月底他的销售却要缴纳税款,这会造成在月底那个时点上的整体税款多交。
一般的解决方案是,不管发出商品是否已经卖出,当月发出商品都在下月初或预定的某月初和分支机构开票结算(有人会采用分割开票方式,便于分公司作付款抵扣选择),分支机构则可以有充足的时间在月底前视销售回款状况决定需要抵扣的发票金额,并划款给总公司。这在分支机构回款快压货少的情况下还是可行的。当然,这些的前提是你的分支机构属于非生产型的商业企业。
代销方式和赊销及分期收款方式是以前一些增值税收筹划常举的经典例子。不过实际情况千变万化,企业内部财务管理的要求也不尽相同,需要有选择使用。

———————————

第29楼 致25~27楼

———————————
谢谢你们的深入讲解,让我等搞物流管理的人着实地出了身冷汗:要是不懂得财务和税务知识,可就麻烦了,税务、工商、额外的成本。见两位在这方法有很深的心得,我索性把原来脑海里的混沌(不是叫抄手的那种啊)拿出来向你们请教:
1. 26楼第2段(北京=》上海的例子):1000元货物转给上海办的时候,北京要缴170元VAT,由于北京尚未出具发票(货物还为真正售出),北京应该出具什么凭证呢?物流部门的调拨单(或北京仓库的出库单)?
2. 有关3PL延迟VAT的手法,是否验证了我的猜测:象美的(安得)、科龙加小天鹅(安泰达)和海尔(安尔?)都开办了3PL公司,大多数承办的业务还都是母公司的。对于这些年销售额在100亿元以上的企业,延迟支付的税款可真不少。而且,原地的税务局要是没有与全面的同行合作,可怎么查证啊?
3. 27楼第2段,“当你开具发票时,分支机构必须把资金转给你,以利于他自己的抵扣”。是否可以这样理解,进货方即使收到了货物的增值税发票,如没有支付对应的款项,当月还是不能作为进项税抵扣?我以前的抄手是这样的:比如供应双方是有帐期的(如45天),进货方只要收到发票挂在应付帐款,便可抵扣当月的进项税。而且,我记得我以前去北京税局报税的时候,就给过他们申报表和财务报表,没有给过银行的对帐单。看来我违法了?
4. 有关退货的问题,我原本是想说这样一个例子:某企业在北京和上海都注册了制造型企业生产不同的产品,武汉办事处(当地做了一般纳税人登记)和DC法律上隶属上海公司,并同时销售来自北京和上海的产品。由于货物过期,要拉回北京销毁,对于从武汉退回北京的货物中的上海产品,在财务上和物流部门应出怎样的单据?视为上海的武汉往北京的销售(垃圾)?
5. 有关退货的报废(26楼第7段),“否则原材料购进时候的税款就白被你抵扣了。”是否可以这样理解,即我所补缴的VAT应等于我原来抵扣的原材料部分?我该出什么单据呢?报废清单+BOM+啥时的进货价格(很难对应啊)?税局肯定不认吧,特别是后两项?
6. 有关起点还是终点支付运费,我提问时是考虑下面的几种情况
a)我先承认我原先疏忽了代垫运费的情况,所以均指收到运费发票方(再严格点儿,指被抬头方)。我以前是这样考虑的(特别是在95年时),好像当时对运费抵扣的部分是规定为企业获得产品(或原料)的运费部分;而因销售产生的运费,作为销售费用,而不抵扣其运费的10%(?)。看来是我当时就理解错了,而不会是规则变了。
b) 如终点是小规模纳税人,咋办?不知他能抵扣运费吗?
c)货物成本100元,从甲地卖到乙地110元,均指不含税,运费5元。甲地支付运费,VAT=1.7-0.5=1.2元;如果乙地支付呢?咳,当然也是1.2,但!两地的税收政策不同呢?
d)如果我上面的成立,就会有我在19楼的考虑?
总之,有关这方面的谈论,让我觉得,在全民皆物流的大环境下,也应该掀起一股全物流学财务的风,风,风。

—————————
第30楼

——————————
1.北京缴纳税金的依据是你们公司内部的调拨出库单,因为调拨单造成因向异地调拨而造成财务帐面库存减少。实务中,只需考虑月底这个时点已经调拨异地而未完成销售的货物,并按同期货物平均售价计算税金。
2 从理论上讲,统一核算的纳税人异地机构调拨库存纳税是不合理的,因为物权尚未转移,你怎么可以要人家缴纳税款?如果如你所说税务当局真要建立起了很强的跨区域协作能力,他还怕什么异地库存逃税?那时就反而不应该对库存调拨征税了。事实上税务局不怕大企业延迟纳税,而怕大量的中小企业逃税,如果没有这条规定,中小企业本来每年被稽查的可能就小,要是他往异地库存上挂一笔其实已经卖掉的库存,你在当地盘点根本没法发现,异地盘点则稽查成本太高,在跨区协作无法实现的现状下,税务也只好这么采取控制了。
3 这是针对商业性企业的,商业企业必须付款才能抵扣。增值税实行早期没有这一条,后来发现增值税问题主要出现在一些小型商业公司身上,因此提出了两条对商企进行控制,其中一条就是付款抵扣。记忆中好像是98,99年以后才执行的。
4 退货的时候,首先武汉向税务申请退货证明,依据这个上海和北京才开出红字发票,这就保证了武汉逃不掉要红字入账减少进项抵扣。因此,不管你实物发到了哪里,税务上都认定你要退给上海一批货,对此北京不应该收货入账,实物可以暂收,但财务不能入账,然后再发还给上海就行了。如果北京财务入了账,那就等于上海把这批货物卖给北京,上海和北京之间需要另行结算交税了。
5 任何货物的非正常损失(包括报废)都被看作进项税额的退减,抵减价值的确定则依赖于财务的存货成本计价方法(要符合税法规定),税务则按照当月的财务成本来计算进项税额的抵减额,而不会再向追溯到原材料。一般来说,即便是制造企业,产品成本也主要来自原料,其他费用中,除折旧和人工外,动力,维修等也大多能抵扣,所以按成本计算大致上是合理的。
6 a) 站在税务角度,只要保证同一笔运费只能被抵扣一次,他就不必管销方还是购方抵扣了。早期好像曾经有过你所说的规定,我当年做财务的时候也有这个印象,不过我不管具体报税,记不大清楚了。
b)小规模纳税人当然不能抵扣,他没有抵扣权限。
c) 增值税的计税规则肯定是全国统一的,否则问题就大了:)
政策的不同一般仅体现在税收优惠上,比如税收返还,但所得税方面的比较多,增值税方面比较少。
从这角度出发,你所说的问题可能会存在,但是需要视实际情况,权衡多方面因素来考虑。

——————————
第31楼 三人行必有我师!

——————————-
近日剧忙,除了30楼的2和6(a)、6(b)我已经没问题之外,感觉,如果其它点were correct,由于这些个财务和税务的规定,使得在物流管理的操作上有很多的问题要注意了。既然,遇上了有心得的人,我会不耻下问的,在周3后。如其他同学也感觉到那些点所带来的物流操作上的问题(需要解决的),请先说说吧。
十分感谢!

———————————
第32楼 难得清闲

———————————
1.对于30楼的1中的规定,是按已经销售的单子的价格的加权平均吗?而对于像手机、电脑或电脑一些配件那些产品价格随时间递减的公司,是否应该少采用调拨单的形式而多采用直接销售的形式呢?
2.对于3PL们,目前经常说是提供附加服务,如再包装、贴签等业务,从而存在着一个3PL自己采购原辅材料还是由客户采购的问题;由于30楼的3和6(b)
3.对于30楼的4,“对此北京不应该收货入账,实物可以暂收,但财务不能入账”,由此要求仓库管理时要注意?比如,是否在系统中要设多location以便接受诸如此类的退货?仓库实收时,是否要用特别的入库单呢?盘点时还得区分?
4.有关30楼的5,“税务则按照当月的财务成本来计算进项税额的抵减额”,想请教一下所说的财务成本具体是指什么?由于原料、动力、维修等项目的抵扣税率可能不一样,即使有了上面说的财务成本的数值,不知税局是咋计算呢?
5.有关谁结算运费的问题,是否可以这么理解,还要考虑两地的所得税率?
第33楼
1.为平均价格,而非加权平均价格
2.增值税的纳税范围是销售货物和提供加工维修劳务,增值加工在纳税范围之内,但3pl应为服务企业,缴纳营业税为主,不是增值税一般纳税人,税法规定可以把增值加工此类视作混合经营,不缴纳增值税。如果不交VAT,也就没有谁采购的问题了。
3.如果用仓库管理系统,不管物理上是不是有专门的location,逻辑上一定要能够分清实际退货和错发暂收,如果你是3pl,你要有入库手续,如你是货主,库存系统和财务集成的话,则不应该入库,所以我认为不需要考虑专门入库单,也不要盘点。
4.就是报废存货的账面价值,而不管存货的成本的组成分别计算。这是简化的办法。
5.对,如果一方免征所得税,为什么不把物流费用计入不能免交的一方呢?
第34楼
1. 平均价格不合理;但要是非哭着喊着说那是规定,也没办法,只是以后遇上这类事儿,还真得从长计议了。
2. 如,3PL采购的原辅材料金额为x(不含税),提供的包装服务为y;则客户实际付出(1.17x + y)*105.5%;若由客户采购呢?因此,即使3pl不用缴VAT,还是存在谁采购的问题。
3. 不入库,则有一个管理的问题;应是不入财务帐(北京的库存)?但对于物流部门来说,不管是不是天王老子的货,进了库门,就得乖乖地听管并登记在册,否则说不清;另,盘点的事儿,是指实物与帐不符的处理问题。再另,我前面说的location指的就是逻辑上,当然物理上也该是单放一区,仓库容易管理。
4. 如是真的,谢了,又学了一点儿。税局是同意这简化的方法,对吧?
5. 还不如正面地把这点结了:要考虑两地的税率。

——————————–
第35楼

——————————–
1、平均价格的确是规定,考虑到增值税价格不是很敏感,降低税务稽查成本。消费税就要采用加权平均价格或最高售价了。
2、5.5%是什么?服务税及附加?若是客户采购,当然是y*105.5%了,不过我想我们讨论材料应该仅限于加工辅料,不包括加工对象。所以客户采购,未必能有3pl 的批量价格优惠。
3、有的ERP的库存系统应该能够入库而不做财务反应,在此情况下当然应该入库收货处理。还有一个问题,即便收货也是无订单收货,我想肯定会要一个特殊的收货类型,至少SAP是这样。如果收货了,当然也应该可以盘点。
4、别老想着把卖出去的存货用报废处理,因为报废也需要手续,并由税务核准的。另,正常的生产经营损耗不用作此类处理。
5、完全同意

Retail-遗留系统 接口开发讨论帖

Retail-遗留系统接口开发讨论

有关Retail-遗留系统接口开发过程中所有需要讨论的问题,都在本帖讨论.

接口的联系人信息请参考:
http://blog.retailsolution.cn/blog/index.php/gb-retail-interface-contact

接口规格请参考:

NO. 接口描述 版本 接口规格文件 接口例子文件
IF000 接口概要 v0.4 if000-general-interface-description-v04 
    v0.6 if000-general-interface-description-v06
    v0.7 if000-general-interface-description-v07 无,更改:Page9
IF001 店/仓资料 v0.4 if001-location-interface-spec_v04  
    v0.5 if001-location-interface-spec_v05 if001-v05_sample
IF002 商品层次 v0.3 if002_merchhierarchy-interface-spec-v03  
    v0.5 if002_merchhierarchy-interface-spec-v05 if002-v05_sample
IF003 供应商资料 v0.3 if003-supplier-interface-spec-v03 if003-v03_sample
IF004 商品资料 v0.4 if004-itemmaster-interface-spec-v04 if004-v04_sample
IF005 供应商进价 v0.4 if005-itemsupplier-interface-spec-v04 if005-v04_sample
IF006        
IF007        
IF008 商品变价 v0.6 if008-price-change-interface-spec-v06  
    v0.9 if008-price-change-interface-spec-v09 if008-v09_sample
IF009 简单促销 v0.3 if009-promotion-interface-spec-v03  
IF011 店/仓采购单 v0.6 if011-po-interface-spec-v06 if011-v06_sample
IF012 采购接收单 v0.6 if012_po-receiving-interface-spec-v06 if012-v06_sample
IF014 调拨接收单 v0.5 if014_transfer-receiving-interface-spec-v05  
IF015 退货供应商 v0.2 if015-rtv-interface-spec-v02 if015-v02_sample
IF016 调拨出库 v0.5 if016-shipment-interface-spec-v05 if016-v05_sample
IF019 存货调整 v0.3 if019_invadj-interface-spec-v03  
    v0.4 if019_invadj-interface-spec-v04 if019-v04_sample

Retail 12 功能验证讨论帖

Retail12 功能讨论贴,Retail功能验证

 

如无特殊说明,本讨论贴针对Retail 12版.

Retail  12 能做到哪些, Retail 12 明确做不到那些?  一系列功能上的疑问都可以在本贴进行提问,大家一起来解答.

这里先提一个问题, 抛砖引玉,其他问题请跟贴.

1、在 resa-120-ug.pdf  第83页,看到销售记录的Transaction Detail 界面上有两个日期:Business Day  和 Tran Data/Time , 我的问题是:
       a)  Buisiness Day   与   Tran Data/Time 分别指什么?哪个日期是描述的事务处理日期(业务的实际发生日期);
       b) 在rms-120-og1.pdf 第193页有对 store day  的定义,那么Buisiness Day   或者 Tran Data/Time 与Store Day有什么关系?

置顶:讨论帖索引

讨论贴

1、Retail系统验证&问题&解决
2、Retail功能讨论帖(标准能做到到什么?不能做到什么?)
3、Retail数据转换开发讨论帖
4、Retail本土化开发讨论帖
5、Retail-遗留系统接口开发讨论帖
6、Retail-EBS-BPEL-RIB-接口开发-配置讨论帖
7、Retail-RDW-讨论帖
8、Retail-AppWorx讨论帖

;;;; ;;;;;;;;;”>Mail to hand Retail ProjectTeam

初步了解MicroStragey8

MicroStrategy 8由MicroStrategy 7架构发展而来。它继承已成为MicroStrategy技术标志的企业级强度特性—包括最高的用户扩展性、最高的数据扩展性,以即插即用组件方式支持5种商务智能应用,以及不间断操作和强大的用户管理功能。有了MicroStrategy 8,MicroStrategy商务智能产品的强大功能可以扩展到更多的业务人员,管理更多方面的业务绩效。
一.技术突破与优点:

1. 改进的MicroStrategy 8 Web接口: MicroStrategy 8使用了新的优化的用户接口。新的用户接口包含生动的“一键”式操作,通过此接口可以使业务人员在浏览和查看数据时更有效率。它使用一个全新设计的简洁的界面,使用了更多的类似于Windows对话框、浮动提示、取消/重新执行按钮等规范,使得业务人员不通过预先培训就能很容易的使用软件。

2.完全交互式的报表: MicroStrategy 8通过完全交互式的报表和计分卡,增强了MicroStrategy的报表功能。业务用户无需IT人员的支持就可以通过简单的拖拽式操作或点击工具栏图标,查看新的数据或者重新排列与组织报表。

3.在日常报表和计分卡中无缝整合分析内容: 使用MicroStrategy 8可将强大的分析功能直接用于企业报表或计分卡。MicroStrategy 8以两种方式整合分析。第一种方式通过向文档中的报表提供OLAP功能,使业务人员在分析数据时可停留在一定的上下文环境。第二种方法是允许用户从报表文档“钻取”到一个分析视图,此视图可以为详单级数据。这两种方式的分析整合对于业务人员都是自动的和完全无缝的。

4.所见即所得的报表设计: MicroStrategy 8扩展了报表设计功能,在高级用户和报表设计者之外还支持业务人员。MicroStrategy 8在业界第一次实现了在一个零脚本下载的Web界面下,业务用户完全以自定义的所见即所得方式设计报表。所见即所得设计代表了一种简便的设计报表模式,使得普通业务人员可以按照他们想要的方式“调整”报表,而不用费时费力的与报表设计人员反复讨论设计。

5.直接访问 SAP BW: MicroStrategy 8架构中增加了一个新的数据访问引擎。这个新的引擎用于访问多维数据库(MDDB或者OLAP Cube),这个新的动态MDX引擎使用SAP BW的高性能BAPI接口,产生优化的MDX语法。因为MicroStrategy的MDX是在访问SAP InfoCube、QueryCube和ODS的多维模型时动态产生的,所以用户可以透明的钻取到SAP BW取得更多的数据,无需预先编程规划或设计钻取路径。MicroStrategy 8可以合并SAP BW InfoCube和QueryCube数据,包括访问SAP BW的多个实例。

6.直接访问运营数据 (ERP系统): MicroStrategy 8扩展了MicroStrategy的元数据库架构,完全建立在查询基础上的实体和事实可以来自于非模型化数据库。MicroStrategy 8的SQL引擎可以完全使用自定义SQL语句,包括使用存储过程与视图从任意运营系统提取数据展示在MicroStrategy报表中。这些实体与事实完全存放在MicroStrategy元数据库中,能够使用MicroStrategy的安全架构和其他可重用的对象,例如提示等。

7.合并企业的异构数据: MicroStrategy 8扩展了数据建模的灵活性,包括从异构数据存储中整合数据。通过MicroStrategy对象模型中的统一维度,MicroStrategy 8可以在一张报表文档中自动合并不同数据源数据,包括数据仓库、数据集市、SAP BW和其它一些运营型数据库。

8.整合数据挖掘到日常报表或分析: MicroStrategy 8使用“Data Mining Services”扩展了其分析引擎,允许在日常MicroStrategy报表和分析中包含趋势预测功能。MicroStrategy 8的分析引擎包含有四种基本的数据挖掘函数,包括神经网络算法、聚类算法、回归算法和决策树算法,同时也可以从其它的数据挖掘产品比如IBM、SAS和SPSS等使用PMML标准导入数据挖掘模型。有了这项功能,任何数据挖掘算法均可以导入到MicroStrategy中,作为标准的度量使用,象其它度量一样自由地应用于报表、分析和预警。

二.服务模块

1.MicroStrategy OLAP Services MicroStrategy智能服务器的一个选项,允许MicroStrategy Desktop、Office和Web用户操作智能立方体™ .

2.MicroStrategy Report Service , MicroStrategy商务智能平台的企业级报表引擎,分发企业报表

三.用户界面

1.MicroStrategy Desktop 在个人桌面端集成查询、报表、分析与决策支持工作流的商务智能软件组件.

2.MicroStrategy Office 为业务用户访问MicroStrategy平台提供直接开放的访问接口,是MicroStrategy平台的一个选项.

3.MicroStrategy Web 用于监控,报表和分析的高度交互,简便易用的接口.

四.辅助工具

1.MicroStrategy Administrator 提供全面的对商务智能环境系统管理的工具.

2.MicroStrategy Architect 一个快速的开发工具,用于映射数据库的物理结构与逻辑业务模型,并将其存储到集中的元数据库中.

3.MicroStrategy SDK 全面的开发环境,允许快速简便的实现客户化,以及将MicroStrategy平台整合到其它应用.

4.MicroStrategy BI Development Kit CPM起步包,帮助业务用户快速实现制作报表,分析与监控企业绩效。 绩效管理起步包用于解决特定的业务问题,并提供一个理想的框架以快速启动应用。每一个起步包都包括了一个数据模型样例,以及一系列报表和分析,能够运行在现有的数据仓库之上,充分利用已有的企业投资,不需要增加额外的数据抽取和加载.

五.关于项目开发

最简单项目开发流程 
0.介绍元数据库 
1.准备空的RDB,并定义ODBC 2
2.配置元数据库 
3.连接项目源 
4.创建项目 
5.定义数据库实例 
6.选择数据仓库表 1
7.定义事实 
8.定义实体 
(1)定义Item实体 
(2)定义Day实体 
(3)定义Year实体 
9.更新框架 
10.创建度量 
11.创建报表 
12.设置I-SERVER 
13.Web浏览 

完整项目开发 
0.Tutorial DW及项目介绍 
1.以服务器方式连接元数据库 
2.添加数据仓库表 
3.修改事实 
(1)修改QTY(销售数量)事实 
(2)修改AMT(销售金额)事实 
(3)修改COST(成本)事实 
4.修改实体 
(1)Item(商品)实体 
(2)Day(日期)实体 
(3)Year(年)实体 
5.创建新实体 
用实体创建向导创建实体 
修改Customer实体 
修改Emp实体 
6.创建0 base report 
7.报表1 derived metric 
8.报表2 阈值

启动10AS的"Report Server"问题

在oracleias 10g中,已经没有report server,被整合到OC4J里,所以,要启动10AS的”Report Server”,只有启动OC4J就可以了。

命令如下:

./opmnctl startproc ias-component=OC4J

./opmnctl restartproc ias-component=OC4J–重启

类似还有:

opmnctl startproc ias-component=HTTP_Server

opmnctl stopproc ias-component=WebCache     等

opmnctl startall

opmnctl stoptall 等

查看各组件状态:

opmnctl status

输出如下:

Processes in Instance: formreportsvr.syfr12
——————-+——————–+———+———
ias-component      | process-type       |     pid | status 
——————-+——————–+———+———
DSA                | DSA                |     N/A | Down   
LogLoader          | logloaderd         |   11895 | Alive  
HTTP_Server        | HTTP_Server        |    5298 | Alive  
dcm-daemon         | dcm-daemon         |     N/A | Down   
WebCache           | WebCache           |    5305 | Alive  
WebCache           | WebCacheAdmin      |    5294 | Alive  
OC4J               | home               |   13643 | Alive  
OC4J               | OC4J_BI_Forms      |   13644 | Alive

很遗憾的是,虽然OC4J 已经启动起来,但在rms中,仍然打不开报表,出现 “http 404″的错误,希望有高人指点一二。

——————————————————————————————————

2008-10-14 问题已经解决

case:

  Report Server的配置问题。

solution:

 按以下步骤操作

 1.修改rms.env(/d01/app/oracleas/OraHome_1/forms/server/目录下),在后面追加一下内容

  (Detail请参考 /d01/app/retail/rms/12.0.1下rms-1201-ig.pdf 【Configure Oracle Application Server 10 for RMS Reports】)

  /*****************************************************

  ORACLE_RMS_REPORTS_HOST=http://syfr12:7778/

  ORACLE_RMS_REPORTS_SERVER=rep_syfr12_oracleas1+envid=rms12arep

  ORACLE_RMS_RWSERVER=reports/rwservlet

*****************************************************/

   注:ORACLE_RMS_REPORTS_HOST=http://<server>:<Listen port>

         ORACLE_RMS_REPORTS_SERVER is the value of the reports configuration file
            without the .conf plus a standard envid (“envid” must be used) and the name of
            the header inside the configuration file that defines the variable
            REPORTS_PATH.

2.修改rep_syfr12_oracleas1.conf(/d01/app/oracleas/OraHome_1/reports/conf目录下)

在标签</server>前添加以下内容(Detail请参考metalink 559039.1)

/*******************************************************

<environment id=”rms12arep”>

<envVariable name=”REPORTS_PATH”

value=”/appl/acc/ah01/rt12/rms/reports/bin:/appl/acc/ise/oras/aoasgm02/reports/reports/templates:/appl/acc/ise/oras/aoasgm02/reports/reports/samples/demo:/appl/acc/ise/oras/aoasgm02/reports/integ:/appl/acc/ise/oras/aoasgm02/reports/printers”/>

<envVariable name=”NLS_LANG” value=”AMERICAN_AMERICA.UTF8″/>

</environment>

*******************************************************/

 

在rms中 –“Reports”按钮,[模块]选择 “Jeff_Demo1”,[报表]选择“Jeff_rep_Description_Demo1”,点击“打印”按钮可以看到报表可以运行(其他报表暂无数据)。

Retail接口开发概述

本文简单说明Orecle Retail的接口开发

Retail的接口主要包括两种:一、Retail与ERP的接口;二、Retail与遗留POS系统的接口;

Retail与ERP的接口一般采用RIB方式,有关Retail 与ERP的集成方法可参考:
RIB指南  这里不多讲了。

下面主要谈谈Retail与遗留系统的接口。

Retail与遗留系统的接口,在技术上主要采用批处理(Batch)方式,并根据需要部分采用RIB技术。这两种方式说明如下:

方式1:利用RIB的标准进行接口开发
>Oracle Retail 系统按照基本接口产生Message,传递到RIB;
>RIB将Message转发到相应的订阅程序(通常是遗留系统)
>订阅程序负责把数据从Message中抽取出来,并进行格式的转换和上载到遗留系统

方式2:利用Pro*C或PL SQL进行接口开发
>Pro*C或PL SQL程序 从Oracle Retail 系统按照接口定义抽取数据;
>Pro*C或PL SQL程序将数据转换成所需要的文件格式,放到指定目录;
>文件传输程序(FTP)将数据文件传送到遗留系统
>遗留系统根据接口格式读取接口文件,并进行格式的转换和上载到遗留系统

对于方式二,Retail系统与遗留系统之间跨互联网可以通过FTP传送文件;文件格式为Oracle要求的格式,如销售为RTLOG格式;

 

接口开发相关参考资料说明:
1、RMS框架下每个batch的用途请参考:
     /d01/app/retail/rms/12.0.1/rms_1201_docs/Operations Guide/Volume 1 – Batch Overviews and Designs
2、RMS如何向RIB发布信息和订阅信息请参考:
     /d01/app/retail/rms/12.0.1/rms_1201_docs/Operations Guide/Volume 2 – Message Publication and Subscription Designs
3、RMS框架下的Pro*C开发请参考:
     /d01/app/retail/rms/12.0.1/rms_1201_docs/Operations Guide/Volume 3 – Backend Configuration and Operations
4、RPM其其他模块(或系统)的接口开发请参考:
   /d01/app/retail/rpm/12.0.1/rms_12.0.1_docs/Operations Guide/
   具体章节: Integration Methods and Communication Flow

使用windows live write 向本站发布文章

本文介绍如何使用windows live write 向http://syfr12.vicp.net/blog/ 发布文章

windows live write 是个离线写作工具,写完后的文章可以向多种web系统发布, 这些web系统中就包括wordpress 系统.  http://blog.retailsolution.cn/blog/就是基于Wrodpress构建的系统.

windows live write 可以在这里下载:  http://get.live.cn/product/writer.html

下载并安装后, 按照如下步骤进行设置

1) 打开界面 ,选择工具->帐户

image

2) 选择日志类型 :  wordpress (注意此图片较老,新版本的live Write 可直接选择到wordpress类型)。

image

3) 在日志主页中输入: http://blog.retailsolution.cn
                               输入你在该网站注册的用户名和密码

                                注意输入的地址应该是:http://blog.retailsolution.cn ,而不是图片中的位置。

image

4)  最后点[完成]即可.

image

5) 使用windows live write 写一篇文章 , 文章可以图文并茂.

image 
6)  写完后填写如下内容:

      6.1) 选择文章分类:选择文章下面的下拉框,如下图的红色部分,将出现分类选择列表,选择一个合适的分类。
      6.2) 关键字:将作为本站的全文索引的关键字使用。
      6.3) 数据域:将作为文章title的一部分,也是这边文章的内部名称,url的组成部分,必须是英文。
      6.4) 摘要:摘要将被联合播报所使用,有利于全球的读者迅速的获取其感兴趣的文章。

image

6) 点击[发布] 按纽即可将文章发布到网站了.

image

Retail系统验证&问题&解决

 Retail R12系统安装后验证

NOTE:427812.1 用于安装成功与否的验证

请按照Testcase 验证系统的可用性, TestCase下载:
oracle_retail_merchandising_installation_test_cases_

 如果大家在流程测试过程中遇到问题可直接回复本贴,大家一起来解决.

 

已知问题: 

测试流程:Test Name: f) RMS to RPM – Store Add 遇到如下问题:

问题1 运行batch storeadd ,在log中报错: Terminated – no threads available ; storeadd 没成功 

解决方法:
     
 Update restart_program_status
 Set program_status = ‘ready for start’
 Where program_name = ‘storeadd’