一个气体公司的进销存系统。产品有很多中,如图中的氧气、氩气等等,产品是动态添加的。
有产品表、客户表、销售表、销售明细表、回收表、回收明细表,要在一张报表上显示。弱弱的问一句,这功能能实现不?
数据库代码,字段中无关的可以删掉,只要能显示图中的效果就行。
期待哪位牛人能给一个思路,
我第一次做这东西,都不知道从哪开始。我现在的做法是把数据都存入一个datatable中,再用gridview与datatable绑定。但产品是动态添加的, 我就不会弄了。
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_EnterGas_Customer]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[EnterGas] DROP CONSTRAINT FK_EnterGas_Customer
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_RecycleStock_Customer]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[RecycleStock] DROP CONSTRAINT FK_RecycleStock_Customer
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Sale_Customer]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[Sale] DROP CONSTRAINT FK_Sale_Customer
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_EnterStock_Detail_Product]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[EnterStock_Detail] DROP CONSTRAINT FK_EnterStock_Detail_Product
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StockPile_Product]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[StockPile] DROP CONSTRAINT FK_StockPile_Product
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_RecycleStock_Detail_RecycleStock]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[RecycleStock_Detail] DROP CONSTRAINT FK_RecycleStock_Detail_RecycleStock
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Sale_Detail_Sale]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[Sale_Detail] DROP CONSTRAINT FK_Sale_Detail_Sale
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Customer]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Customer]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Product]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Product]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[RecycleStock]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[RecycleStock]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[RecycleStock_Detail]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[RecycleStock_Detail]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Sale_Detail]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Sale_Detail]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Sale]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Sale]
GO/*客户表*/
CREATE TABLE [dbo].[Customer] (
[CustomerId] [int] IDENTITY (1, 1) NOT NULL , /*客户ID*/
[CustomerName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL , /*客户名称*/
[CustomerPhone] [varchar] (25) COLLATE Chinese_PRC_CI_AS NULL ,
[CustomerFax] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[CustomerContact] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[CustomerAddress] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO/*产品表*/
CREATE TABLE [dbo].[Product] (
[ProductID] [int] IDENTITY (1, 1) NOT NULL ,/*产品ID*/
[ProductName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,/*产品名称*/
[ProductCapacity] [float] NULL 
) ON [PRIMARY]
GO/*回收表*/
CREATE TABLE [dbo].[RecycleStock] (
[RecycleStockID] [int] IDENTITY (1, 1) NOT NULL ,/*回收瓶子ID*/
[RecycleDate] [datetime] NOT NULL ,/*回收时间*/
[CustomerID] [int] NOT NULL ,/*客户ID*/
[InvoiceNum] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,/*发票号*/
[Description] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL /*说明*/
) ON [PRIMARY]
GO/*回收明细表*/
CREATE TABLE [dbo].[RecycleStock_Detail] (
[DetailID] [int] IDENTITY (1, 1) NOT NULL , /*回收详细ID*/
[RecycleStockID] [int] NOT NULL , /*回收瓶子ID*/
[ProductID] [int] NOT NULL , /*产品ID*/
[Price] [money] NULL , 
[Quantity] [int] NOT NULL , /*回收数*/
[BottleType] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[Description] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL  /*说明*/
) ON [PRIMARY]
GO/*销售明细表*/
CREATE TABLE [dbo].[Sale_Detail] (
[DetailID] [int] IDENTITY (1, 1) NOT NULL , /*销售明细ID*/
[SaleID] [int] NOT NULL , /*销售ID*/
[ProductID] [int] NOT NULL ,/*产品ID*/
[SaleQuantity] [int] NULL , /*送气数*/
[ZiQuantity] [int] NULL ,/*自提数*/
[ReturnQuantity] [int] NULL , /*退瓶数*/
[BottleType] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[Description] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL /*说明*/
) ON [PRIMARY]
GO/*销售表*/
CREATE TABLE [dbo].[Sale] (
[SaleID] [int] IDENTITY (1, 1) NOT NULL , /*销售ID*/
[SaleDate] [datetime] NOT NULL , /*销售时间*/
[CustomerID] [int] NOT NULL ,/*客户ID*/
[TotalPrice] [money] NULL ,
[InvoiceNum] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,/*发票号*/
[Description] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL /*说明*/
) ON [PRIMARY]
GO

解决方案 »

  1.   

    1.你的图片看不到
    2.用sql可以实现
      

  2.   

    先用视图组织你的数据再对数据进行分组统计,如果报表是动态的,就用可能用到行转列分组统计用到的有group by fieldX, with rollup,grouping(fieldX) 
      

  3.   


    报表是报表,跟web页面显示不要混为一团。
      

  4.   

    (1)好长看的很累
    (2)如果是多表连接的话
    就用视图,proc将结构查询出来
      

  5.   


    并不是所有的报表都同于报表,有些为了实现格式,用的Table显示与打印,同样叫报表!
      

  6.   

    图片补上, 还是google 的产品好, 支持外链。
      

  7.   

    主要是报表的实现,可实现行转列,通过报表控件,WORD,XML等实现
      

  8.   

    如果用MVC框架的话,可以传一个数据model进页面,model里面可以放N个表数据,
    然后自己用代码逐一绑定到标签或控件上。
    我没觉得这有什么难度。
    也许是我理解能力不足,没有理解LZ的意思。