---
id: object/table/950
type: object
title: Table 950 "Time Sheet Header"
summary: Table 950 "Time Sheet Header" in Base Application (Microsoft.Projects.TimeSheet). 28 fields, 6 public procedures, 2 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: e7b176f60c5de09269fd658a61a6b2c13d5552da79fab1c0a55ad0af647d5612
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Projects/TimeSheet/TimeSheetHeader.Table.al
    title: src/Layers/W1/BaseApp/Projects/TimeSheet/TimeSheetHeader.Table.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn:
    - https://learn.microsoft.com/dynamics365/business-central/projects-how-use-time-sheets
  objects: []
  features: []
  topics:
    - topic/business-central/business-functionality/project-management
  localizations: []
  videos: []
  posts: []
  guidelines: []
object_type: table
object_id: 950
name: Time Sheet Header
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"
  - "28"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 28
  procedures: 12
  events: 2
  subscribers: 0
relations:
  out: 17
  referenced_by: 14
  pages: 3
  extended_by: 0
  event_subscribers: 0
  calls: 1
  called_by: 0
  implements: 0
---

# Table 950 "Time Sheet Header"

> Table 950 "Time Sheet Header" in Base Application (Microsoft.Projects.TimeSheet). 28 fields, 6 public procedures, 2 events. Present since at least BC23, still in BC30, changed in BC24, BC28.

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

Learn documents this table through its pages: [Page 951 "Time Sheet List"](../page/951.md) (1 Learn page), [Page 973 "Time Sheet Card"](../page/973.md) (1).

## Properties

| Property | Value |
|---|---|
| Caption | Time Sheet Header |
| 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 | No. | Code[20] | Specifies the number of the involved entry or record, according to the specified number series. |  |
| 3 | Starting Date | Date | Specifies the starting date for a time sheet. |  |
| 4 | Ending Date | Date | Specifies the ending date for a time sheet. |  |
| 5 | Resource No. | Code[20] | Specifies the number of the resource for the time sheet. | TableRelation [Table 156 "Resource"](../table/156.md) |
| 6 | Resource Name | Text[100] | Specifies the name of the resource for the time sheet. | FlowField: lookup(Resource.Name where("No." = field("Resource No."))); not editable |
| 7 | Owner User ID | Code[50] | — | TableRelation [Table 91 "User Setup"](../table/91.md) (User Setup); DataClassification EndUserIdentifiableInformation |
| 8 | Approver User ID | Code[50] | — | TableRelation [Table 91 "User Setup"](../table/91.md) (User Setup); DataClassification EndUserIdentifiableInformation |
| 10 | Description | Text[100] | Specifies the description for a time sheet. |  |
| 11 | Unit of Measure | Code[10] | — | FlowField: lookup(Resource."Base Unit of Measure" where("No." = field("Resource No."))); not editable |
| 12 | Open Exists | Boolean | Specifies if there are time sheet lines with the status Open. | FlowField: exist("Time Sheet Line" where("Time Sheet No." = field("No."), Status = const(Open))); not editable |
| 13 | Submitted Exists | Boolean | Specifies if there are time sheet lines with the status Submitted. | FlowField: exist("Time Sheet Line" where("Time Sheet No." = field("No."), Status = const(Submitted))); not editable |
| 14 | Rejected Exists | Boolean | Specifies whether there are time sheet lines with the status Rejected. | FlowField: exist("Time Sheet Line" where("Time Sheet No." = field("No."), Status = const(Rejected))); not editable |
| 15 | Approved Exists | Boolean | Specifies whether there are time sheet lines with the status Approved. | FlowField: exist("Time Sheet Line" where("Time Sheet No." = field("No."), Status = const(Approved))); not editable |
| 16 | Posted Exists | Boolean | Specifies whether there are time sheet lines with the status Posted. | FlowField: exist("Time Sheet Posting Entry" where("Time Sheet No." = field("No."))); not editable |
| 18 | Lines Exist | Boolean | — | FlowField: exist("Time Sheet Line" where("Time Sheet No." = field("No."))); not editable |
| 20 | Quantity | Decimal | Specifies the total number of hours that are registered on the time sheet. | FlowField: sum("Time Sheet Detail".Quantity where("Time Sheet No." = field("No."), Status = field("Status Filter"), "Job No." = field("Job No. Filter"), "Job Task No." = field("Job Task No. Filter"), Date = field("Date Filter"), Posted = field("Posted Filter"), Type = field("Type Filter"))) |
| 21 | Posted Quantity | Decimal | — | FlowField: sum("Time Sheet Posting Entry".Quantity where("Time Sheet No." = field("No."))) |
| 26 | Comment | Boolean | Specifies that a comment about this document has been entered. | FlowField: exist("Time Sheet Comment Line" where("No." = field("No."), "Time Sheet Line No." = const(0))); not editable |
| 30 | Status Filter | Enum "Time Sheet Status" | — | FlowFilter; enum [Enum 950 "Time Sheet Status"](../enum/950.md) |
| 31 | Job No. Filter | Code[20] | Project No. Filter <small>caption</small> | FlowFilter |
| 32 | Job Task No. Filter | Code[20] | Project Task No. Filter <small>caption</small> | FlowFilter |
| 33 | Date Filter | Date | — | FlowFilter |
| 34 | Posted Filter | Boolean | — | FlowFilter |
| 35 | Type Filter | Enum "Time Sheet Line Type" | — | FlowFilter; enum [Enum 952 "Time Sheet Line Type"](../enum/952.md) |
| 40 | Quantity Open | Decimal | Specifies the total number of hours with the status Open on the time sheet. | FlowField: sum("Time Sheet Detail".Quantity where("Time Sheet No." = field("No."), Status = const(Open))); not editable |
| 41 | Quantity Submitted | Decimal | Specifies the total number of hours with the status Submitted on the time sheet. | FlowField: sum("Time Sheet Detail".Quantity where("Time Sheet No." = field("No."), Status = const(Submitted))); not editable |
| 42 | Quantity Approved | Decimal | Specifies the total number of hours with the status Approved on the time sheet. | FlowField: sum("Time Sheet Detail".Quantity where("Time Sheet No." = field("No."), Status = const(Approved))); not editable |
| 43 | Quantity Rejected | Decimal | Specifies the total number of hours with the status Rejected on the time sheet. | FlowField: sum("Time Sheet Detail".Quantity where("Time Sheet No." = field("No."), Status = const(Rejected))); not editable |

## Keys

- Key1: No. (clustered)
- Key2: Resource No., Starting Date
- Key3: Owner User ID
- Key4: Approver User ID

## Events published

- `OnBeforeCheckTimeSheetLine(TimeSheetLine: Record "Time Sheet Line"; var IsHandled: Boolean)` (integration)
- `OnValidateResourceNoOnBeforeTestFields(Resource: Record Resource; var IsHandled: Boolean)` (integration)

## Procedures

- `CalcQtyWithStatus(Status: Enum "Time Sheet Status"): Decimal`
- `Check()`
- `GetLastLineNo(): Integer`
- `FindLastTimeSheetNo(FilterFieldNo: Integer): Code[20]`
- `FindCurrentTimeSheetNo(FilterFieldNo: Integer): Code[20]`
- `FindTimeSheetList(FilterFieldNo: Integer): Code[20]`

Plus 4 local procedures.

## Triggers

OnDelete, OnInsert, OnModify, OnRename

## Relations

- Resource Name: CalcFormula [Table 156 "Resource"](../table/156.md)
- Resource No.: TableRelation [Table 156 "Resource"](../table/156.md)
- Approver User ID: TableRelation [Table 91 "User Setup"](../table/91.md)
- Owner User ID: TableRelation [Table 91 "User Setup"](../table/91.md)
- Approved Exists: CalcFormula [Table 951 "Time Sheet Line"](../table/951.md)
- Lines Exist: CalcFormula [Table 951 "Time Sheet Line"](../table/951.md)
- Open Exists: CalcFormula [Table 951 "Time Sheet Line"](../table/951.md)
- Rejected Exists: CalcFormula [Table 951 "Time Sheet Line"](../table/951.md)
- Submitted Exists: CalcFormula [Table 951 "Time Sheet Line"](../table/951.md)
- Quantity: CalcFormula [Table 952 "Time Sheet Detail"](../table/952.md)
- Quantity Approved: CalcFormula [Table 952 "Time Sheet Detail"](../table/952.md)
- Quantity Open: CalcFormula [Table 952 "Time Sheet Detail"](../table/952.md)
- Quantity Rejected: CalcFormula [Table 952 "Time Sheet Detail"](../table/952.md)
- Quantity Submitted: CalcFormula [Table 952 "Time Sheet Detail"](../table/952.md)
- Comment: CalcFormula [Table 953 "Time Sheet Comment Line"](../table/953.md)
- Posted Exists: CalcFormula [Table 958 "Time Sheet Posting Entry"](../table/958.md)
- Posted Quantity: CalcFormula [Table 958 "Time Sheet Posting Entry"](../table/958.md)

## Referenced by

14 fields in 9 objects relate to this table (TableRelation or CalcFormula).

- [Table 9042 "Team Member Cue"](../table/9042.md): Approved Time Sheets, New Time Sheets, Open Time Sheets, Rejected Time Sheets, Submitted Time Sheets, Time Sheets to Approve
- [Table 207 "Res. Journal Line"](../table/207.md): Time Sheet No.
- [Table 210 "Job Journal Line"](../table/210.md): Time Sheet No.
- [Table 5902 "Service Line"](../table/5902.md): Time Sheet No.
- [Table 5991 "Service Shipment Line"](../table/5991.md): Time Sheet No.
- [Table 6012 "Service Line Archive"](../table/6012.md): Time Sheet No.
- [Table 951 "Time Sheet Line"](../table/951.md): Time Sheet No.
- [Table 952 "Time Sheet Detail"](../table/952.md): Time Sheet No.
- [Table 958 "Time Sheet Posting Entry"](../table/958.md): Time Sheet No.

## Pages and codeunits on this table

- [Page 951 "Time Sheet List"](../page/951.md) (source table)
- [Page 953 "Manager Time Sheet List"](../page/953.md) (source table)
- [Page 973 "Time Sheet Card"](../page/973.md) (source table)

## 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 950 "Time Sheet Management"](../codeunit/950.md) (3 calls: `FindCurrentTimeSheetNo → FilterTimeSheets`, `FindLastTimeSheetNo → FilterTimeSheets`, `FindTimeSheetList → FilterTimeSheets`)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC24, 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). 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: "Time Sheet Header")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
