---
id: object/table/951
type: object
title: Table 951 "Time Sheet Line"
summary: Table 951 "Time Sheet Line" in Base Application (Microsoft.Projects.TimeSheet). 23 fields, 7 public procedures, 9 events. Present since at least BC23, still in BC30, changed in BC24-25, 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: 4d16c1254f4fa7ceba4db84baae572b0d1498c1c0e9a82ab62e138310d6f6372
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Projects/TimeSheet/TimeSheetLine.Table.al
    title: src/Layers/W1/BaseApp/Projects/TimeSheet/TimeSheetLine.Table.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn:
    - https://learn.microsoft.com/dynamics365/business-central/projects-how-setup-time-sheets
  objects: []
  features: []
  topics:
    - topic/business-central/business-functionality/set-up-business-central/set-up-project-management
  localizations: []
  videos: []
  posts: []
  guidelines: []
object_type: table
object_id: 951
name: Time Sheet Line
namespace: Microsoft.Projects.TimeSheet
app: Base Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "24"
  - "25"
  - "28"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 23
  procedures: 23
  events: 9
  subscribers: 0
relations:
  out: 10
  referenced_by: 10
  pages: 12
  extended_by: 1
  event_subscribers: 3
  calls: 0
  called_by: 0
  implements: 0
---

# Table 951 "Time Sheet Line"

> Table 951 "Time Sheet Line" in Base Application (Microsoft.Projects.TimeSheet). 23 fields, 7 public procedures, 9 events. Present since at least BC23, still in BC30, changed in BC24-25, BC28.

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

Learn documents this table through its pages: [Page 946 "Time Sheet Line List"](../page/946.md) (1 Learn page), [Page 949 "Time Sheet Lines"](../page/949.md) (1).

## Properties

| Property | Value |
|---|---|
| Caption | Time Sheet Line |
| DataClassification | CustomerContent |
| Permissions | TableData Employee = r |

## 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 | Time Sheet No. | Code[20] | Specifies the number of the related document. | TableRelation [Table 950 "Time Sheet Header"](../table/950.md) (Time Sheet Header) |
| 2 | Line No. | Integer | — |  |
| 3 | Time Sheet Starting Date | Date | Specifies the starting date for a time sheet. | not editable |
| 5 | Type | Enum "Time Sheet Line Type" | Specifies the type of time sheet line. | enum [Enum 952 "Time Sheet Line Type"](../enum/952.md) |
| 6 | Job No. | Code[20] | Specifies the number for the project that is associated with the time sheet line. | TableRelation [Table 167 "Job"](../table/167.md) (Job where(Status = filter(Open))) |
| 7 | Job Task No. | Code[20] | Specifies the number of the related project task. | TableRelation [Table 1001 "Job Task"](../table/1001.md) ("Job Task"."Job Task No." where("Job No." = field("Job No."), "Job Task Type" = filter(Posting))) |
| 9 | Cause of Absence Code | Code[10] | Specifies a list of standard absence codes, from which you may select one. | TableRelation [Table 5206 "Cause of Absence"](../table/5206.md) (Cause of Absence) |
| 10 | Description | Text[100] | Specifies a description of the time sheet line. |  |
| 11 | Work Type Code | Code[10] | Specifies which work type the resource applies to. Prices are updated based on this entry. | TableRelation [Table 200 "Work Type"](../table/200.md) (Work Type) |
| 12 | Approver ID | Code[50] | — | TableRelation [Table 91 "User Setup"](../table/91.md) (User Setup); not editable; DataClassification EndUserIdentifiableInformation |
| 13 | Service Order No. | Code[20] | Specifies the service order number that is associated with the time sheet line. |  |
| 14 | Service Order Line No. | Integer | — |  |
| 15 | Total Quantity | Decimal | Specifies the total number of hours that have been entered on a time sheet. | FlowField: sum("Time Sheet Detail".Quantity where("Time Sheet No." = field("Time Sheet No."), "Time Sheet Line No." = field("Line No."))); not editable |
| 17 | Chargeable | Boolean | Specifies if the usage that you are posting is chargeable. |  |
| 18 | Assembly Order No. | Code[20] | Specifies the assembly order number that is associated with the time sheet line. | TableRelation [Table 900 "Assembly Header"](../table/900.md) (if (Posted = const(false)) "Assembly Header"."No." where("Document Type" = const(Order))); not editable |
| 19 | Assembly Order Line No. | Integer | — | not editable |
| 20 | Status | Enum "Time Sheet Status" | Specifies information about the status of a time sheet line. | enum [Enum 950 "Time Sheet Status"](../enum/950.md); not editable |
| 21 | Approved By | Code[50] | — | TableRelation [Table 91 "User Setup"](../table/91.md) (User Setup); not editable; DataClassification EndUserIdentifiableInformation |
| 22 | Approval Date | Date | — | not editable |
| 23 | Posted | Boolean | Specifies whether a time sheet line has been posted completely. | not editable |
| 26 | Comment | Boolean | Specifies that a comment about this document has been entered. | FlowField: exist("Time Sheet Comment Line" where("No." = field("Time Sheet No."), "Time Sheet Line No." = field("Line No."))); not editable |
| 480 | Dimension Set ID | Integer | — | not editable; DataClassification SystemMetadata |
| 8002 | Job Id | Guid | Project Id <small>caption</small> | TableRelation Job.SystemId; DataClassification SystemMetadata |

## Keys

- Key1: Time Sheet No., Line No. (clustered)
- Key2: Type
- Key3: Time Sheet No., Status, Posted
- Key4: Type, Job No.

## Events published

- `OnAfterUpdateApproverID(var TimeSheetLine: Record "Time Sheet Line")` (integration)
- `OnBeforeTestStatus(var IsHandled: Boolean; var TimeSheetLine: Record "Time Sheet Line")` (integration)
- `OnBeforeGetJobApproverID(var ApproverID: Code[50]; var IsHandled: Boolean)` (integration)
- `OnBeforeSetApproverIDFromResource(Resource: Record Resource; var IsHandled: Boolean)` (integration)
- `OnBeforeShowLineDetails(var TimeSheetLine: Record "Time Sheet Line"; var IsHandled: Boolean; ManagerRole: Boolean)` (integration)
  - subscribers: [Codeunit 6451 "Serv. Time Sheet Mgt."](../codeunit/6451.md) OnBeforeShowLineDetails
- `OnAfterGetAllowEdit(FldNo: Integer; ManagerRole: Boolean; var AllowEdit: Boolean)` (integration)
- `OnBeforeCheckWorkType(var TimeSheetLine: Record "Time Sheet Line"; var IsHandled: Boolean)` (integration)
- `OnValidateTypeOnAfterClearFields(var TimeSheetLine: Record "Time Sheet Line")` (integration)
  - subscribers: [Codeunit 6451 "Serv. Time Sheet Mgt."](../codeunit/6451.md) OnValidateTypeOnAfterClearFields
- `OnAfterSetExclusionTypeFilter(var TimeSheetLine: Record "Time Sheet Line")` (integration)
  - subscribers: [Codeunit 6451 "Serv. Time Sheet Mgt."](../codeunit/6451.md) TimeSheetLineOnAfterSetExclusionTypeFilter

## Procedures

- `TestStatus()`
- `UpdateApproverID()`
- `ShowLineDetails(ManagerRole: Boolean)`
- `GetAllowEdit(FldNo: Integer; ManagerRole: Boolean): Boolean`
- `CheckIfTimeSheetLineLinkExist(Job: Record Job)`
- `UpdateJobId()`
- `SetExclusionTypeFilter()`

Plus 7 local procedures.

## Triggers

OnDelete, OnInsert, OnModify

## Relations

- Job Task No.: TableRelation [Table 1001 "Job Task"](../table/1001.md)
- Job No.: TableRelation [Table 167 "Job"](../table/167.md)
- Work Type Code: TableRelation [Table 200 "Work Type"](../table/200.md)
- Cause of Absence Code: TableRelation [Table 5206 "Cause of Absence"](../table/5206.md)
- Assembly Order No.: TableRelation [Table 900 "Assembly Header"](../table/900.md)
- Approved By: TableRelation [Table 91 "User Setup"](../table/91.md)
- Approver ID: TableRelation [Table 91 "User Setup"](../table/91.md)
- Time Sheet No.: TableRelation [Table 950 "Time Sheet Header"](../table/950.md)
- Total Quantity: CalcFormula [Table 952 "Time Sheet Detail"](../table/952.md)
- Comment: CalcFormula [Table 953 "Time Sheet Comment Line"](../table/953.md)

## Referenced by

10 fields in 6 objects relate to this table (TableRelation or CalcFormula).

- [Table 950 "Time Sheet Header"](../table/950.md): Approved Exists, Lines Exist, Open Exists, Rejected Exists, Submitted Exists
- [Table 207 "Res. Journal Line"](../table/207.md): Time Sheet Line No.
- [Table 210 "Job Journal Line"](../table/210.md): Time Sheet Line No.
- [Table 5902 "Service Line"](../table/5902.md): Time Sheet Line No.
- [Table 5991 "Service Shipment Line"](../table/5991.md): Time Sheet Line No.
- [Table 6012 "Service Line Archive"](../table/6012.md): Time Sheet Line No.

## Pages and codeunits on this table

- [Page 946 "Time Sheet Line List"](../page/946.md) (source table)
- [Page 948 "TimeSheet Line Details FactBox"](../page/948.md) (source table)
- [Page 949 "Time Sheet Lines"](../page/949.md) (source table)
- [Page 952 "Manager Time Sheet"](../page/952.md) (source table)
- [Page 954 "Manager Time Sheet by Job"](../page/954.md) (source table)
- [Page 965 "Time Sheet Line Res. Detail"](../page/965.md) (source table)
- [Page 966 "Time Sheet Line Job Detail"](../page/966.md) (source table)
- [Page 967 "Time Sheet Line Service Detail"](../page/967.md) (source table)
- [Page 968 "Time Sheet Line Assemb. Detail"](../page/968.md) (source table)
- [Page 969 "Time Sheet Line Absence Detail"](../page/969.md) (source table)
- [Page 971 "Activity Details FactBox"](../page/971.md) (source table)
- [Page 974 "Time Sheet Lines Subform"](../page/974.md) (source table)

## Extended by

- [Table extension 6464 "Serv. Time Sheet Line"](../tableextension/6464.md)

## Across versions

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

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). 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: "Time Sheet Line")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
