Access 2010 - 将多个产品添加到一个报价ID

时间:2011-10-19 11:16:45

标签: forms ms-access report product

我创建了“商品”数据库的改编版,其中包含报价功能。用户选择客户(客户表),产品(产品表),数量,折扣等。 然后,所选实体将保存到引号表中,并且表单上有一个“打印”功能。


虽然可以保存信息并通过报价单打印报价,但我在寻找将单个报价添加多个产品的方法时遇到了很大困难。


主要目标是能够选择各种产品并将其总价格(添加数量,折扣后的产品)添加到SUB TOTAL

因此,报价总额为公式税+运费+小计

任何接受者? :)

嗨,大家好,

感谢您的回复我真的很感激。至于税收和运输,它们只是在表单中添加,不会从数据库中的任何其他位置推送。它只是一种形式的类型,并在报告类型上显示。正如你在答案中所说,HansUp,销售人员将单独计算它并输入它。

在税收方面,产品将在全球范围内进行管制,因此税收/增值税也应单独计算。 此外,每个表都有自己的唯一ID。

更多关于拥有QuoteProducts的观点。我似乎无法理解它!您是说在QuoteProducts中选择的任何产品都会创建一个QuoteProd_ID,然后该ID的总价格将被添加到报价中吗?

我之前尝试制作子表单但是通过“多个记录”表单,但显然每个选择都有自己的ID。有什么方法可以详细说明报价产品部分以及它如何允许多个记录存储到一个ID?没有理解它我几乎没用。 另外,如何将多个记录相加以使小计也让我感到困惑。这是在报价表格中完成的吗?

修改2

HALLELUJAH。

有效!我在子窗体的页脚上的文本框中创建了一个总和,然后将其推入小计:)

我确实有一个小问题:

我为ListPrice创建了一个查找和关系。我不认为它是正确的方法,因为它提出了每个灯的价格(即10个产品定价10英镑,10英镑显示10倍下拉)。

你们可以帮忙吗?

定价问题

这是我尝试过的:

1)创建>客户端>查询设计

2)显示产品,报价详细信息。出于某种原因,它自动提供ListPrice,ProductID(应该如此)和产品名称链接到产品中的ID

3)删除与ListPrice和ProductName的链接。

4)在quoteDetails(*)

中显示全部内容

5)创建多个项目表单

不起作用!我做错了什么?

我非常感谢你的帮助。如果我能做任何事情,那就大喊吧。

赖安

2 个答案:

答案 0 :(得分:1)

对于评论中提到的前3个表,每个表都应该有一个主键:Customers,customer_id; products,product_id;和员工,employee_id。

引号表将拥有自己的主键quote_id,并将customer_id和employee_id存储为外键。 (我假设您希望employee_id记录哪个客户代表/销售人员创建了报价。)您还可以决定为每个报价添加其他属性;例如,准备日期和时间报价。

报价产品将存储在联合表QuoteProducts中。它将具有quote_id和product_id的外键,报价中提供的每个产品都有一行。这也是您可以存储属性数量和折扣的地方。另外一个字段unit_price可以让您存储在编制报价时有效的产品价格......如果产品价格随时间变化,这将非常有用。我不知道这个表中是否应包含税收(见下文)。

我也不知道如何解决运费问题。如果与报价关联的所有产品都打算在一个货件中交付,则运费可能是报价表的属性。我不知道你打算如何得出这个价值。似乎可能由运输方法,距离和重量决定。如果您让销售人员单独计算该值,然后输入该值,请考虑如何处理在输入运费之后产品选择发生变化的情况。

这种设计有点简单,但对于您描述的情况可能已经足够了。但是,它可能会变得更加复杂。例如,如果您决定保留产品价格变化的历史记录,那么现在最好为此制定规定。此外,我不知道税收如何适用于您的情况 - 是否适用于所有产品的单一税率,因客户所在地而异,因客户类型而异,和/或因产品而异。您需要在架构设计中纳入税务业务规则。

但是,如果该设计适用于您(通过在不使用表单的情况下将虚拟数据输入到表中来测试它),您可以基于带有基于QuoteProducts的子表单的引号创建表单。使用quote_id作为链接主/子属性,子窗体将允许您查看与主窗体的当前quote_id关联的所有产品。您可以使用子表单添加,删除和/或编辑与该引用关联的产品。

我对这份报告说的不多。在前面的描述中存在很多不确定性。但是,如果您的数据库设计允许您构建可行的表单/子表单,它还应该支持收集相同数据的查询。使用该查询作为报告的记录源。并使用报告的排序和分组功能来创建报价总计。

编辑:使用主窗体/子窗体方法,子窗体中的每个新行都应“继承”主窗体中当前记录的quote_id值。您可以通过将链接主/子属性设置为quote_id来确保这一点。 Crystal Long在 Crystal的访问基础知识> PDF file的第5章中详细解释了这一点。向下滚动到第24页的创建主窗体和子窗体标题。

Edit2 :您的策略可能包括在QuoteDetails.ListPrice中存储Products.ListPrice。这对记录为报价提供的当前ListPrice很有用。如果是这样,您可以从Products中获取ListPrice,并在为子窗体中的行选择ProductID时将其存储在QuoteDetails中。您可以在绑定到ProductID字段的控件的更新后事件中使用VBA代码执行此操作。因此,如果该控件是一个名为cboProductID的组合框,并且绑定到QuoteDetails ListPrice字段的子窗体控件是一个名为txtListPrice的文本框,请在更新后对cboProductID使用这样的代码:

Me.txtListPrice = DLookup("ListPrice", "Products", "ProductID = " _
    & Me.cboProductID)

该建议假定Products和QuoteDetails表都包含ProductID字段,其数据类型为数字。并且cboProductID将ProductID作为其绑定字段,并使用查询作为其RowSource,类似于:

SELECT ProductID, ProductName
FROM Products
ORDER BY ProductName;

答案 1 :(得分:1)

除了HansUp的出色答案,您可能对DatabaseAnswers.org感兴趣。他们有许多免费的数据模型,可以为您的情况提供额外的洞察力,并可能为您可能遇到的未来项目提供灵感。

修改1

暂时忘记表单和报告 - 它们很重要但不如数据和存储数据的重要性。

在您当前的设计中,您有一个引号表,大概有一个自动编号关键字段。出于本答案的目的,此字段名为Quote_ID。

如HansUp建议的那样,引号表应该存储诸如Customer_ID,Employee_ID,OrderDate之类的信息,甚至可能存储对BillingAddress和ShippingAddress的引用。

报价表不应存储任何有关客户订购产品的信息。

相反,此信息应存储在名为QuoteProducts或QuoteDetails的表中。 它的结构如下所示:

QuoteDetails_ID --> Primary Key of the table (autonumber field)
Quote_ID --> Foreign key back to the Quotes table
Product_ID --> Foreign key back to Products table
Quantity
UnitPrice

您可能还需要考虑税收字段和报价中每个订单项的单独字段。您将不可避免地遇到某些项目在某些地方而非其他地方需要征税的情况。

此设计允许特定报价将任意数量的产品分配给报价。

返回表单\ reports,您需要更改现有表单和报表以适应此新表设计。通常,人们会使用主要表单作为报价本身,然后使用报表详细信息的子表单(项目,价格,数量等)。 要获得报价总计,您可以将QUoteDetails中的项目汇总为特定的Quote_ID。

您可能还想查看Microsoft的Northwind示例数据库。从我记得Northwind有一个示例订单系统,可以通过查看一个工作示例帮助您更具体地了解这些想法。