今天继续聊下报表,还是以一个普通的进销存报表为例。
情景:
1、 销售一台手机则往销售记录表插入一条记录,状态为U。库存记录表该记录移至库存历史表。
2、用户退机则在库存记录表里面新增一笔记录,状态为退机,同时把以前的那条销售记录置为E(失效), 同时把库存历史表该记录删除。
3、如果门店把手机退给供货商,则把库存记录表中该记录状态修改为退机在途,同时在出入库表中新增一笔出库记录,状态为出库完成。
4、供货商收到退的手机,则把库存记录表的归属组织改为供货商,状态改为供货商入库,同时在出入库表中新增一笔入库记录,状态为入库完成。
如果按上面的情景写一张门店进销存报表,怎么写呢?
如果你写成这样:
门店名称 开始库存 销售量 退机量 库存结余
测试门店 5 2 1 4
一开始我也是这么写的,但是你没有考虑下面的情况
1、我怎么知道是什么时候统计的?所以得加上统计时间列。
2、我想知道手机如三星 G100今天的进销存情况怎么办,统计精度得具体到手机的机型
3、我怎么区分用户退机和退给供货商,退机量得分为用户退和返厂量。
4、退机已出库,为什么看不到退机数? 在供货商没入库之前,该库存一直属于门店,所以为了直观的表示今天我退了3台手机给供货商,但供货商没入库,得加上退机在途。
综合上述,报表的这样:
统计时间 门店名称 机型名称 开始库存 销售量 用户退 返厂量 退机在途 库存结余
2014-07-18 XX XX 5 2 1 0 1 4
你以为这样就完了。还有什么情况?
这里要重点分析下销售和退机,销售量不就是
select count(*) from 销售记录表 where 状态='U' and record_date=统计时间
退机量不就是:
select count(*) from 库存记录表 where 状态=用户退 and 记录时间=统计时间
下面我分以下情况:
1、当天卖了台三星G100,且用户当天没有退,也就是无退机记录,销售量=
select count(*) from 销售记录表 where 状态='U' and record_date=统计时间
2、当天用户把昨天买的三星G100退了,没有在买其他手机,则用户退=。
select count(*) from 库存记录表 where 状态=用户退 and 记录时间=统计时间
3、当天上午用户买了台三星G99,下午用户又把它退了,换了台三星G99,则销售量=
select count(*) from 销售记录表 where 状态='U' and record_date=统计时间
用户退=
select count(*) from 库存记录表 where 状态=用户退 and 记录时间=统计时间
这样算还是有问题,如开始库存为2,上午卖了一台,销售为1,下午用户换了台手机,则用户退=1,销量=1,库存结余=2-1+1=2,实际库存为1,所以的减掉换机数
select count(*) from 销售记录表 a,库存记录表 b where a.状态=E and b.状态=用户退 and exists(select 1 from 销售记录表 b where b.状态='U' and b.销售时间>=a.销售时间 and b.销售时间<统计时间+1 and b.机型=a.机型) and a.销售时间=统计时间
这里的换机数视为销售量。
4、当天上午用户买了台三星G100,下午又退掉了,没买其他手机。则时候销售量=0,退机数=1,库存=开始库存2+退机数=3,凭空多了一台手机,也是不对的。
还得统计当天买了又退了且没有再买的数量视为销售量。
select count(*) from 销售记录表 a,库存记录表 b where a.状态=E and b.状态=用户退 and a.销售时间=统计时间 and not exists( select 1 from 销售记录表 t where t.机型=a.机型 and t.销售时间=统计时间 and t.客户姓名=a.客户姓名)
综合上面的4种情况,写出来的才是正确的。我也只考虑了上面4中情况,欢迎提出更好的方法。
-------------------------------------7.19修改----------------------------------
第三和第四种情况可以合并,只需要统计卖了又退了的数量,不用管是否还有后继操作,如再销售。
最终的报表可能是这样子的:
统计时间 门店名称 机型名称 开始库存 销售量 用户退 返厂量 退机在途 库存结余
2014-07-18 XX 三星G1 2 1 0 0 0 1(情况1)
2014-07-18 XX 三星G2 2 0 1 0 0 3(情况2)
2014-07-18 XX 三星G3 2 2 1 0 0 1(情况3)
2014-07-18 XX 三星G4 2 1 1 0 0 2(情况4)
上面的报表只是写了一部分,还得考虑退给供货商的数量,1,当天退供货商当天入库 2,当天退供货商当天没有入库。
啰啰嗦嗦写了这么多,不写了,Iteye的文本编辑器JS代码没写好,多写了几行就很卡,卡的编辑器变形了,按钮都不见了。
全文完。
相关推荐
本文档“建筑工程用的技术交底记录_工程施工土建监理资料建筑监理工作规划方案报告_技术交底.doc”将深入探讨土建工程中模板安装的技术细节,涉及施工准备、材质要求、工器具选择、操作工艺以及模板拆除等多个关键...
合成地震记录是地震勘探领域中的一个重要技术,它主要用于提高地震数据的质量和解析能力。在"hechengjilu.rar_worthc7x_共中心点_合成地震记录_地震记录_地震记录合成"这个压缩包中,我们关注的核心概念是"共中心点...
这些信息对于构建新系统时的集成和兼容性问题至关重要,有助于团队提前规划系统架构,避免后期出现技术瓶颈。 第五章“相关问题”可能包含更具体或复杂的议题,例如法规遵从性、数据迁移等,这些议题在软件设计时都...
然而,这里需要特别强调的是,键盘记录程序的开发和使用必须得到用户的许可,特别是在非公开或非授权的情况下,记录键盘输入可能侵犯用户的隐私权,这在道德和法律上都是不允许的。因此,在开发键盘记录功能时,...
从标签“delphi_键盘记录 keylogger keylogger_delphi”中我们可以进一步理解,这个项目专注于Delphi平台下的键盘记录技术,keylogger是其核心功能。Delphi是一个强大的面向对象的 Pascal 编程环境,因其快速编译和...
通过【维修工作记录表】的规范使用,不仅可以提高设备的运行效率,还能帮助管理层优化维护策略,减少非计划停机时间,降低维修成本,并且能够对工作人员的技能和效率进行有效评估,从而提升整体的设备管理水平。...
为了更好地理解和预测地震,科学家们通过收集、分析地震记录数据来研究地震活动,其中地震反演是关键的技术手段。本文将详细探讨地震记录数据及其在地震反演中的应用。 地震记录数据是地震发生时,地震波在地壳中...
3. 合成的地震记录包含了地层信息,可以通过分析这些记录来推断地下结构。 压缩包中的"matlab编程合成地震记录.doc"文件很可能提供了MATLAB实现这一过程的详细代码和步骤。使用MATLAB进行编程,可以方便地进行数值...
在本案例中,“程序及结果_influencecja_Windows编程_地震记录_地震_seismic_”这一标题揭示了我们关注的是一个利用Windows编程技术处理地震数据的应用。描述中提到的“通过一组地震动加速度记录,计算其加速度反应...
总结来说,"rk.zip"压缩包中的内容是地震勘探领域的核心工具,涉及了地震子波特别是雷克子波的使用,以及合成地震记录的技术。这些知识对于理解和解析地震数据,进而揭示地下的地质构造和潜在的矿产资源具有极其重要...
"V2_seismic"再次强调了这是地震领域的第二版,而"源码"表明包含的是编程语言编写的原始代码,而非可执行文件。 在描述中,同样重复了标题的信息,没有提供额外的细节,但可以理解为这个压缩包包含的源代码是用于...
3. **合同关系**:建设单位与施工单位之间、建设单位与监理单位之间存在合同关系,而监理单位与施工单位是监理与被监理的关系,非合同关系。 4. **施工单位职责**: - 进场资格审查:施工单位需提交相关报表供监理...
这需要开发者掌握多种前端技术,并深入理解浏览器的工作原理,而非技术人员往往难以把握这些技术细节。 ### 3. 数据存储与管理 数据存储与管理是软件开发中的核心问题之一。如何高效、安全地存储数据,以及如何在...
通常,非技术类的个人整理资料可能包括日程管理、笔记、报告、个人发展计划等,但这些内容并不符合我们在这里讨论的IT知识范畴。 如果您的目的是寻找关于如何整理非技术类个人资料的方法或工具,我可以提供以下几点...
例如,数字摄影和三维信息获取技术能够将非物质文化遗产的形态精确记录和还原,而虚拟现实技术则能够在沉浸式环境中重现历史场景,增强公众的参与感与体验感。多媒体与宽带网络技术的结合,则大大提升了非物质文化...
在IT领域,非线性分析和多变量统计技术在各个科学和工程学科中都有广泛应用,尤其是在数据挖掘、信号处理和机器学习中。本压缩包文件"DiscordancyTest_非线性_多站点两变量线性协矩_非一致性分析_源码"提供了一个用...
"w7非gh"标签可能是指gh0st经过特殊优化,能在不支持的Win7环境下也能正常工作。"gh0st开"可能指的是启动或配置gh0st的过程,这通常涉及设置服务器端和客户端,确保网络连接和通信的稳定。 压缩包中的文件包括: 1....
《动态WEB技术_JSP_》非笔试考试实施方案旨在评估学生在JSP技术方面的综合应用能力,包括B/S架构的开发技能、JSP与Java及数据库的整合能力、系统需求分析和设计能力,以及动态网站的界面设计技巧。考试采取设计项目...
1. **可视化编程**:图形化编程方式降低了编程难度,使得非专业程序员也能快速上手。 2. **并行处理**:数据流编程模型支持并行处理,提高了程序运行效率。 3. **兼容性**:支持多种硬件接口,方便与其他设备集成。 ...