数据输入表单,有哪些必备的功能和高级的功能

对于数据库类型的的项目,有很多的功能是重复的。
比如,采购系统中的是物料申请,到了加班系统中是加班申请。对用户而言,区别很大。对于程序员而言,区别几乎是零。只是换了个表或者换了一些字段,其余的基本都是面向数据库表的CRUD的开发。
总结一下这些系统的共同点和我认为可以深入挖掘的地方

1  基本的数据输入,修改和删除。
例如,下面的数据输入表格
image 
这个功能是必备的,具备这样的输入功能的程序才可以称作为系统。如果发现数据有问题,还可以修改。如果有错误,可以删除错误的数据。也有的系统,只允许输入,不允许删除,即使删除,通常也是把数据disable或hidden,没有真正意义的文件系统中删除。

2  报表查询,导入导出
既然输入了数据,可以随时查询到自己输入过的数据。如果登陆系统不方便,还应该支持把系统中的数据导出。导出的数据方式要支持常见的格式:CSV,EXCEL,PDF等。如果在上系统之前是用EXCEL作为数据存储方案,大量的用户一时间无法接受和习惯系统的数据输入方式,还应该支持把EXCEL的数据导入到系统中,引导用户逐渐熟悉和接受系统。

3  高级功能
这个比较多,每个小功都要能体现软件的简单方便好用。以我的理解,还需要下面的几个功能
拷贝:数据可以直接在系统中进行拷贝。选中一行数据,点击Copy,就产生了一条新记录,它的值和原来的数据一模一样(需要适当改变一些字段的值,比如LastUpdateTime就不应该拷贝旧有的数据)。
有了这个功能,系统的数据输入能力大大增强。原来一天只能输入40张采购申请单的,现在可以把效率提高几倍。有了这个功能后,EXCEL的优势(COPY功能)就被比下去了,接受系统的人也逐渐增多。
有个小技巧,使用SQL查分析器,可以帮助我们快速写这类的脚本。
比如,选中相应的表,点击右键,选择Script Object to New Windows As
它还有几个子菜单,选择子菜单Insert生成Insert语句,选择子菜单Select生成SELECT语句,然后拼在一起,就写好的数据的拷贝功能的SQL脚本,如下的脚本所示
INSERT INTO [Quotation].[dbo].[dtproperties]([id], [objectid], [property], [value],
[uvalue], [lvalue], [version])

SELECT [id], [objectid], [property], [value], [uvalue], [lvalue], [version]
FROM [Quotation].[dbo].[dtproperties] WHERE ID=1

版本:当面对大量的数据时,有很多数据是重复的。比如,一个报价系统,输入一张报价单,经过老板批准后把价格报给客户,客户不满意,需要重新报价。或者客户认为你的报价过高,把原来打算给你做的订单减少一部分,让你重新根据新的订单来报价;又比如采购系统,开发部申请购买10部电脑,每台电脑的报价是4000RMB,老板觉得报价过高,需要你重新报价。这时,你需要重新填写采购申请单,一级一级的让部门经理批准,让财务经理审批,最后给老板审批。这样,同时会产生两笔同样的数据,如果每次都需要重新输入,用户肯定会觉得你的系统不专业。他的想法就是,直接把原来的数据调出来,重新提交给上司审批。作为系统,你需要把两次的数据关联起来,前一次的版本是A,以后依此递增。这样,老板看到A版本的报价过高,在审批B版本的报价时,它会去参考A版本的报价。采购系统和报价系统对版本的要求比较高。对于采购系统,老板每次审批价格时,他都想看一下,以前买这个物料是花多少钱,现在又需要花多少。当然,价格肯定更便宜老板才行,你要是B版本的报价比A版本的报价还要贵,老板肯定拒绝购买。
报价系统也一样,同一个part会反反复复报几次价,直到客户满意为止。

数据转换:数据可以在系统里,经过一定的流程后,转换为另一种类型的数据。比如,采购申请单经过老板批准后,可以直接转换为采购定单;当生产部门领用仓库的物料时,可以由采购订单直接转换为生产领料单;经过客户确认的客户的报价单,可以直接归结到当月的生产成本中。通常对于这类的数据转换,可以节省用户很多宝贵时间。

自定义字段:通常一个窗体的数据输入量是有限的,过长的输入会加重用户的工作量。有时候用户不愿意输入数据,或者他认为他要输入的数据字段你没有提供,于是会要求以附件的形式输入数据。刚逃脱了EXCEL的牵制,现在又要带上一个EXCEL的附件,让人觉得又回到了EXCEL的时代。这种需求也比较常见,比如采购系统,老板在审批物料采购申请前想要看看待购买的产品的图片,而看图片这个需求对于大部分物料采购申请而言是不需要的。
增加用户上传附件的功能,在附件中放上老板想看的图片是一种解决办法。
还有一种办法就是这里提到的,增加自定义字段。以满足用户的扩展字段的需求。
比如,大家默认的报价系统的货币单位是美金,现在有面向日本客户的保价,只能用日元报价。为了区别,需要增加一个货币字段,标明报价时所用的货币。也可以运用自定义字段的方式实现这个功能。
做ASP.NET的朋友都知道aspnetdb这个数据,他支持在不改变表结构的情况下,扩展字段信息。
比如,我想加一个国籍字段,在不改变表结构的情况下实现这个功能,可以存储用户的国籍信息。
下面是aspnet_Profile表结构的SQL语句
CREATE TABLE [aspnet_Profile] (
    [UserId] [uniqueidentifier] NOT NULL ,
    [PropertyNames] [ntext] COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [PropertyValuesString] [ntext] COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [PropertyValuesBinary] [image] NOT NULL ,
    [LastUpdatedDate] [datetime] NOT NULL ,
     PRIMARY KEY  CLUSTERED
    (
        [UserId]
    )  ON [PRIMARY] ,
     FOREIGN KEY
    (
        [UserId]
    ) REFERENCES [aspnet_Users] (
        [UserId]
    )
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
如果您的机器中没有这个数据,请打开Visual Studio 2008 Command Prompt,输入aspnet_regsql,按照向导的步骤创建这个数据库。
看上面的SQL脚本,PropertyNames是属性名,PropertyValuesBinary是属性值。这是个对应关系。如果属性名中有一个字段是Country,那么对应的PropertyValuesBinary会存储它的值,程序中会将对象的值以进二进制序列化方式写入到数据库中。
这个技巧我以前用过,不过我是用xml格式,设计一个足够长的字符串字段,把自定义的值以xml格式序列化的方式写入。如果数据库是SQL Server 2005,可以直接用xml作为字段类型。二进制的序列化的效率比xml方式要好,但不支持sql谓词操作。

能力有限,做过的系统也有限,只想到了这么多。欢迎大家补充。

posted @ 2010-02-22 20:07  信息化建设  阅读(2366)  评论(4编辑  收藏  举报