---
id: object/table/7022
type: object
title: Table 7022 "Price Worksheet Line"
summary: Table 7022 "Price Worksheet Line" in Base Application (Microsoft.Pricing.Worksheet). 41 fields, 20 public procedures, 9 events. Present since at least BC23, still in BC30, changed in BC24, BC28.
tier: official
language: en
tags:
  - table
  - base application
versions:
  introduced: null
  last_changed: "28"
  deprecated: null
review:
  state: derived
  by: null
  at: null
  flags: []
generated:
  at: "2026-10-11T00:31:51.816Z"
  pipeline: 0.2.0
  prompts: {}
  input_hash: 29bb79b9536ab46ee46f6a89779d8d2f338ce747bcde63bc910475400994acda
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Pricing/Worksheet/PriceWorksheetLine.Table.al
    title: src/Layers/W1/BaseApp/Pricing/Worksheet/PriceWorksheetLine.Table.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn:
    - https://learn.microsoft.com/dynamics365/business-central/sales-how-record-sales-price-discount-payment-agreements
  objects: []
  features: []
  topics:
    - topic/business-central/business-functionality/set-up-business-central/set-up-sales
  localizations:
    - localization/au
    - localization/nz
  videos: []
  posts: []
  guidelines: []
object_type: table
object_id: 7022
name: Price Worksheet Line
namespace: Microsoft.Pricing.Worksheet
app: Base Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "24"
  - "28"
source_major: "29"
obsolete: null
countries:
  - au
  - nz
ms_search_form_ids: []
counts:
  fields: 41
  procedures: 45
  events: 9
  subscribers: 0
relations:
  out: 18
  referenced_by: 0
  pages: 1
  extended_by: 2
  event_subscribers: 0
  calls: 1
  called_by: 0
  implements: 0
---

# Table 7022 "Price Worksheet Line"

> Table 7022 "Price Worksheet Line" in Base Application (Microsoft.Pricing.Worksheet). 41 fields, 20 public procedures, 9 events. Present since at least BC23, still in BC30, changed in BC24, BC28.

Base Application · Microsoft.Pricing.Worksheet · BC23-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Pricing/Worksheet/PriceWorksheetLine.Table.al) · facts from BC29

Learn documents this table through its pages: [Page 7022 "Price Worksheet"](../page/7022.md) (1 Learn page).

## Properties

| Property | Value |
|---|---|
| DataClassification | CustomerContent |

## Fields

Explanation: the field's ToolTip in the code; without one, the ToolTip of a page control bound to the field (marked via the page); without that, its Caption (marked caption) when that differs from the name.

| No. | Name | Type | Explanation | Notes |
|---|---|---|---|---|
| 1 | Price List Code | Code[20] | Specifies the unique identifier of the price list. | TableRelation [Table 7000 "Price List Header"](../table/7000.md) (Price List Header) |
| 2 | Line No. | Integer | — | AutoIncrement |
| 3 | Source Type | Enum "Price Source Type" | Assign-to Type <small>caption</small> | enum [Enum 7003 "Price Source Type"](../enum/7003.md) |
| 4 | Source No. | Code[20] | Specifies the entity to which the prices are assigned. The options depend on the selection in the Assign-to Type field. If you choose an entity, the price list will be used only for that entity. |  |
| 5 | Parent Source No. | Code[20] | Specifies the project to which the prices are assigned. If you choose an entity, the price list will be used only for that entity. |  |
| 6 | Source ID | Guid | Assign-to ID <small>caption</small> |  |
| 7 | Asset Type | Enum "Price Asset Type" | Specifies the type of the product. | enum [Enum 7004 "Price Asset Type"](../enum/7004.md) |
| 8 | Asset No. | Code[20] | Specifies the identifier of the product. If no product is selected, the price and discount values will apply to all products of the selected product type for which those values are not specified. For example, if you choose Item as the product type but do not specify a specific item, the price will a... |  |
| 9 | Variant Code | Code[10] | Specifies the variant of the item on the line. |  |
| 10 | Currency Code | Code[10] | Specifies the currency code of the price list line. | TableRelation [Table 4 "Currency"](../table/4.md) |
| 11 | Work Type Code | Code[10] | Specifies the work type code for the resource. | TableRelation [Table 200 "Work Type"](../table/200.md) (Work Type) |
| 12 | Starting Date | Date | Specifies the date from which the price is valid. |  |
| 13 | Ending Date | Date | Specifies the last date that the price is valid. |  |
| 14 | Minimum Quantity | Decimal | Specifies the minimum quantity of the product. |  |
| 15 | Unit of Measure Code | Code[10] | Specifies the unit of measure for the product. |  |
| 16 | Amount Type | Enum "Price Amount Type" | Specifies whether the price list line defines prices, discounts, or both. | enum [Enum 7001 "Price Amount Type"](../enum/7001.md) |
| 17 | Unit Price | Decimal | Specifies the new unit price of the product. |  |
| 18 | Cost Factor | Decimal | Specifies the unit cost factor for project-related prices, if you have agreed with your customer that he should pay certain item usage by cost value plus a certain percent value to cover your overhead expenses. |  |
| 19 | Unit Cost | Decimal | Specifies the unit cost of the resource. |  |
| 20 | Line Discount % | Decimal | Specifies the line discount percentage for the product. |  |
| 21 | Allow Line Disc. | Boolean | Specifies if a line discount will be calculated when the price is offered. |  |
| 22 | Allow Invoice Disc. | Boolean | Specifies if an invoice discount will be calculated when the price is offered. |  |
| 23 | Price Includes VAT | Boolean | Specifies if the price includes VAT. |  |
| 24 | VAT Bus. Posting Gr. (Price) | Code[20] | Specifies the VAT business posting group for customers for whom you want the price (which includes VAT) to apply. <small>via [Page 7022 "Price Worksheet"](../page/7022.md)</small> | TableRelation [Table 323 "VAT Business Posting Group"](../table/323.md) (VAT Business Posting Group) |
| 25 | VAT Prod. Posting Group | Code[20] | — | TableRelation [Table 324 "VAT Product Posting Group"](../table/324.md) (VAT Product Posting Group) |
| 26 | Asset ID | Guid | — |  |
| 27 | Line Amount | Decimal | — | not editable |
| 28 | Price Type | Enum "Price Type" | — | enum [Enum 7009 "Price Type"](../enum/7009.md) |
| 29 | Description | Text[100] | — |  |
| 30 | Status | Enum "Price Status" | Specifies whether the price list line is in Draft status and can be edited, Inactive and cannot be edited or used, or Active and used for price calculations. | enum [Enum 7005 "Price Status"](../enum/7005.md) |
| 31 | Direct Unit Cost | Decimal | Specifies the new direct unit cost of the product. |  |
| 32 | Source Group | Enum "Price Source Group" | — | enum [Enum 7002 "Price Source Group"](../enum/7002.md) |
| 33 | Product No. | Code[20] | Specifies the identifier of the product. If no product is selected, the price and discount values will apply to all products of the selected product type for which those values are not specified. For example, if you choose Item as the product type but do not specify a specific item, the price will a... | TableRelation [Table 15 "G/L Account"](../table/15.md), [Table 152 "Resource Group"](../table/152.md), [Table 156 "Resource"](../table/156.md) (if ("Asset Type" = const(Item)) Item where("No." = field("Product No.")) else if ("Asset Type" = const("G/L Account")) "G/L Account" else if ("Asset Type" = const(Resource)) Resource else if ("Asset Type" = const("Resource Group")) "Resource Group" else if ("Asset Type" = const("Item Discount Group"...) |
| 34 | Assign-to No. | Code[20] | Specifies the entity to which the prices are assigned. The options depend on the selection in the Assign-to Type field. If you choose an entity, the price list will be used only for that entity. | TableRelation [Table 18 "Customer"](../table/18.md), [Table 340 "Customer Discount Group"](../table/340.md), [Table 5050 "Contact"](../table/5050.md) (if ("Source Type" = const(Campaign)) Campaign else if ("Source Type" = const(Contact)) Contact else if ("Source Type" = const(Customer)) Customer else if ("Source Type" = const("Customer Disc. Group")) "Customer Discount Group" else if ("Source Type" = const("Customer Price Group")) "Customer Price ...) |
| 35 | Assign-to Parent No. | Code[20] | Specifies the project to which the prices are assigned. If you choose an entity, the price list will be used only for that entity. | TableRelation [Table 167 "Job"](../table/167.md) (if ("Source Type" = const("Job Task")) Job) |
| 36 | Variant Code Lookup | Code[10] | Specifies the variant of the item on the line. | TableRelation [Table 5401 "Item Variant"](../table/5401.md) (if ("Asset Type" = const(Item)) "Item Variant".Code where("Item No." = field("Asset No."))) |
| 37 | Unit of Measure Code Lookup | Code[10] | Specifies the unit of measure for the product. | TableRelation [Table 204 "Unit of Measure"](../table/204.md), [Table 205 "Resource Unit of Measure"](../table/205.md), [Table 5404 "Item Unit of Measure"](../table/5404.md) (if ("Asset Type" = const(Item)) "Item Unit of Measure".Code where("Item No." = field("Asset No.")) else if ("Asset Type" = const(Resource)) "Resource Unit of Measure".Code where("Resource No." = field("Asset No.")) else if ("Asset Type" = const("Resource Group")) "Unit of Measure") |
| 100 | Existing Line | Boolean | Specifies if the current line is a copy of the existing price list line. | DataClassification SystemMetadata |
| 101 | Existing Unit Price | Decimal | Specifies the current unit price of the product. | not editable |
| 102 | Existing Direct Unit Cost | Decimal | Specifies the current direct unit cost of the product. | not editable |
| 103 | Existing Unit Cost | Decimal | Specifies the current unit cost of the product. | not editable |

## Keys

- PK: Price List Code, Existing Line, Line No. (clustered)
- Key1: Price Type, Source Group

## Events published

- `OnAfterCopyFromPriceAsset(PriceAsset: Record "Price Asset"; var PriceWorksheetLine: Record "Price Worksheet Line")` (integration)
- `OnAfterCopyFromPriceListHeader(PriceListHeader: Record "Price List Header")` (integration)
- `OnAfterCopyFromPriceSource(PriceSource: Record "Price Source")` (integration)
- `OnAfterCopyExistingPrices(var PriceWorksheetLine: Record "Price Worksheet Line"; PriceListLine: Record "Price List Line")` (integration)
- `OnAfterCopyToPriceAsset(var PriceAsset: Record "Price Asset")` (integration)
- `OnAfterCopyToPriceSource(var PriceSource: Record "Price Source")` (integration)
- `OnAfterCopySourceFrom(var PriceWorksheetLine: Record "Price Worksheet Line"; PriceListHeader: Record "Price List Header")` (integration)
- `OnAfterInitHeaderDefaults(PriceListHeader: Record "Price List Header")` (integration)
- `OnAfterIsUOMSupported(PriceWorksheetLine: Record "Price Worksheet Line"; var Result: Boolean)` (integration)

## Procedures

- `IsAssetItem(): Boolean`
- `IsAssetResource(): Boolean`
- `IsEditable(): Boolean`
- `IsHeaderActive(): Boolean`
- `IsLineToVerify(): Boolean`
- `IsUOMSupported(): Boolean`
- `IsAmountMandatory(AmountType: enum "Price Amount Type"): Boolean`
- `IsAmountSupported(): Boolean`
- `IsRealLine(): Boolean`
- `IsSourceNoAllowed(): Boolean`
- `CopyExistingPrices(PriceListLine: Record "Price List Line")`
- `CopySourceFrom(PriceListHeader: Record "Price List Header")`
- `CopyFrom(PriceListHeader: Record "Price List Header")`
- `CopyFrom(PriceAsset: Record "Price Asset")`
- `SetNewRecord(NewRecord: Boolean)`
- `CopyTo(var PriceAsset: Record "Price Asset")`
- `CopyTo(var PriceSource: Record "Price Source")`
- `SyncDropDownLookupFields()`
- `Verify(): Boolean`
- `TryVerify()`

Plus 16 local procedures.

## Triggers

OnInsert

## Relations

- Product No.: TableRelation [Table 15 "G/L Account"](../table/15.md) (conditional)
- Product No.: TableRelation [Table 152 "Resource Group"](../table/152.md) (conditional)
- Product No.: TableRelation [Table 156 "Resource"](../table/156.md) (conditional)
- Assign-to Parent No.: TableRelation [Table 167 "Job"](../table/167.md)
- Assign-to No.: TableRelation [Table 18 "Customer"](../table/18.md) (conditional)
- Work Type Code: TableRelation [Table 200 "Work Type"](../table/200.md)
- Unit of Measure Code Lookup: TableRelation [Table 204 "Unit of Measure"](../table/204.md) (conditional)
- Unit of Measure Code Lookup: TableRelation [Table 205 "Resource Unit of Measure"](../table/205.md) (conditional)
- Product No.: TableRelation [Table 27 "Item"](../table/27.md) (conditional)
- VAT Bus. Posting Gr. (Price): TableRelation [Table 323 "VAT Business Posting Group"](../table/323.md)
- VAT Prod. Posting Group: TableRelation [Table 324 "VAT Product Posting Group"](../table/324.md)
- Assign-to No.: TableRelation [Table 340 "Customer Discount Group"](../table/340.md) (conditional)
- Currency Code: TableRelation [Table 4 "Currency"](../table/4.md)
- Assign-to No.: TableRelation [Table 5050 "Contact"](../table/5050.md) (conditional)
- Assign-to No.: TableRelation [Table 5071 "Campaign"](../table/5071.md) (conditional)
- Variant Code Lookup: TableRelation [Table 5401 "Item Variant"](../table/5401.md)
- Unit of Measure Code Lookup: TableRelation [Table 5404 "Item Unit of Measure"](../table/5404.md) (conditional)
- Price List Code: TableRelation [Table 7000 "Price List Header"](../table/7000.md)

## Pages and codeunits on this table

- [Page 7022 "Price Worksheet"](../page/7022.md) (source table)

## Extended by

- [Table extension 6474 "Serv. Price List Line"](../tableextension/6474.md)
- [Table extension 6475 "Serv. Price Worksheet Line"](../tableextension/6475.md)

## Calls

From the extracted call graph of BC29 (graphify-al on the snapshot checkout): calls whose target is known from a declared type or an `Object::"Name"` argument. Interface dispatch and calls through events are not counted, so the list is not complete.

- [Codeunit 7017 "Price List Management"](../codeunit/7017.md) (2 calls: `IsAllowedEditingActivePrice → IsAllowedEditingActivePrice`, `OnInsert → GetDefaultPriceListCode`)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC24, BC28

## Countries that replace it

[AU](../../localizations/au.md), [NZ](../../localizations/nz.md)

Source: AL metadata extracted from the code (names, ids, signatures, properties); no code bodies (D10).

## Ask your agent

Procedure bodies are not stored here (D10). The call sections above are our own, per object, from the BC29 call graph. For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: `bcatlas_resolve_node(object_type: "table", object_name: "Price Worksheet Line")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
