Access 2010 - 一个报价 ID 拥有多个产品

Posted

技术标签:

【中文标题】Access 2010 - 一个报价 ID 拥有多个产品【英文标题】:Access 2010 - Having multiple products to one Quote ID 【发布时间】:2011-10-19 11:16:45 【问题描述】:

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

虽然可以保存信息并通过报价报告打印报价,但我很难找到将多个产品添加到单个报价中的方法。

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

因此,报价总额是公式 Tax+Shipping+SubTotal

有接受者吗? :)

大家好,

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

至于税收,产品将在全球范围内发货,因此税收/增值税也应单独计算。 此外,每个表都有自己的唯一 ID。

更重要的是拥有 QuoteProducts。我似乎无法理解它!您是说在 QuoteProducts 中选择的任何产品都会创建一个 QuoteProd_ID,然后该 ID 的总价格将因此添加到 Quote 中?

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

编辑 2

哈利路亚。

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

我确实有一个小问题:

我对 ListPrice 进行了查找和关系。我不认为这是正确的做法,因为它会计算出每盏灯的价格(即 10 种价格为 10 英镑的产品,10 英镑在下拉菜单中显示十次)。

你们能帮忙吗?

标价问题

这是我尝试过的:

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

2) 显示产品,报价详情。出于某种原因,它会自动提供 ListPrice、ProductID(应该如此)和链接到 Products 中 ID 的 Product Name

3) 删除包含 ListPrice 和 ProductName 的链接。

4) 全部显示在quoteDetails (*)

5) 创建多个项目表单

没用!我做错了什么?

我非常感谢您的帮助。如果我能做任何事,就大声喊叫。

瑞恩

【问题讨论】:

感谢您回复我,表格如下:客户、产品、员工、报价。前 3 个与报价表有关系。至于结构我不确定! 就是这样。我不想要组合框,我只想要 ListPrice 出现。我在 quoteDetails 中有 ProductID...我只是“添加现有字段”吗? Argh 有这个问题。我将逐步进行编辑。你能看看我哪里出错了吗?谢谢 从 Products INNER JOIN QuoteDetails ON (Products.ID = QuoteDetails.ListPrice) AND (Products.ID = QuoteDetails.ProductName) AND (Products.ID = QuoteDetails.ProductID) 中选择;这是最初显示的,但我很肯定这是错误的! 我知道如何使用查询设计器,但是我要解决的问题是,当我选择产品和 quoteDetails 表时,它会自动显示 ID(在产品中)与 ProductID 之间的关系(这很好)、ListPrice 和 ProductName 在 quoteDetails.. 【参考方案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

您可能还需要考虑在报价单上设置一个税费字段和一个单独的运费字段。您将不可避免地遇到某些项目在某些地方需要征税而在其他地方不征税等情况。

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

回到您的表单\报告,您需要更改现有的表单和报告以适应这种新的表格设计。通常情况下,报价本身会使用一个主表单,然后是报价细节(项目、价格、数量等)的子表单。 要获得报价总额,您需要对特定 Quote_ID 的 QUoteDetails 中的项目求和。

您可能还想查看 Microsoft 的 Northwind 示例数据库。我记得 Northwind 有一个示例订单系统,通过查看一个工作示例,它可能有助于使这些想法更加具体。

【讨论】:

请看问题的底部,因为我补充了更多,谢谢! 干得好,蒂姆。太糟糕了,我今天不能再给你一个赞成票。 :-)【参考方案2】:

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

quotes 表将有自己的主键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 的 Access Basics 的第 5 章中更详细地解释了这一点:PDF file。向下滚动到第 24 页的标题创建主窗体和子窗体

Edit2:您的策略可能包括将 Products.ListPrice 存储在 QuoteDetails.ListPrice 中。这对于记录为报价提供的当前 ListPrice 很有用。如果是这样,当您为子表单中的一行选择 ProductID 时,您可以从 Products 中获取 ListPrice 并将其存储在 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;

【讨论】:

请看问题的底部,因为我补充了更多,谢谢!

以上是关于Access 2010 - 一个报价 ID 拥有多个产品的主要内容,如果未能解决你的问题,请参考以下文章

Access 2010:报告多打印三页

如何在 Access 2010 中创建自定义 ID

使用 vba 在 Access 2010 中使用不同表单的 ID 打开表单

如何在 MS Access 2010 中的单元格中显示空值

如何在 MS Access 2010 中使用 VBA 选择多值组合框的值?

使用 MS Access 2010,编辑一个表单,3 个表,一个表是“一对多”,并且希望在一行中进行查询