---
id: object/codeunit/1004
type: object
title: Codeunit 1004 "Job Transfer Line"
summary: Codeunit 1004 "Job Transfer Line" in Base Application (Microsoft.Projects.Project.Journal). 12 public procedures, 20 events. Present since at least BC23, still in BC30, changed in BC25.
tier: official
language: en
tags:
  - codeunit
  - base application
versions:
  introduced: null
  last_changed: "25"
  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: 8af9f0a087142ccda79e240ca0cbdeb4c36e83b156aafaab93290f65520a466f
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Projects/Project/Journal/JobTransferLine.Codeunit.al
    title: src/Layers/W1/BaseApp/Projects/Project/Journal/JobTransferLine.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations:
    - localization/it
  videos: []
  posts: []
  guidelines: []
object_type: codeunit
object_id: 1004
name: Job Transfer Line
namespace: Microsoft.Projects.Project.Journal
app: Base Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "25"
source_major: "29"
obsolete: null
countries:
  - it
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 37
  events: 20
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 9
  calls: 4
  called_by: 7
  implements: 0
---

# Codeunit 1004 "Job Transfer Line"

> Codeunit 1004 "Job Transfer Line" in Base Application (Microsoft.Projects.Project.Journal). 12 public procedures, 20 events. Present since at least BC23, still in BC30, changed in BC25.

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

## Events published

- `OnAfterIsCreatedFromJob(var SalesLine: Record "Sales Line"; var Result: Boolean)` (integration)
- `OnAfterFromJnlLineToLedgEntry(var JobLedgerEntry: Record "Job Ledger Entry"; JobJournalLine: Record "Job Journal Line")` (integration)
  - subscribers: [Codeunit 6456 "Serv. Job Transfer Line"](../codeunit/6456.md) OnAfterFromJnlLineToLedgEntry, [Codeunit 6908 "Expense Event Subscriber"](../codeunit/6908.md) OnAfterFromJnlLineToLedgEntry
- `OnAfterFromJnlToPlanningLine(var JobPlanningLine: Record "Job Planning Line"; JobJournalLine: Record "Job Journal Line")` (integration)
  - subscribers: [Codeunit 6456 "Serv. Job Transfer Line"](../codeunit/6456.md) OnAfterFromJnlToPlanningLine
- `OnAfterFromPlanningSalesLineToJnlLine(var JobJnlLine: Record "Job Journal Line"; JobPlanningLine: Record "Job Planning Line"; SalesHeader: Record "Sales Header"; SalesLine: Record "Sales Line"; EntryType: Enum "Job Journal Line Entry Type")` (integration)
  - subscribers: [Codeunit 6456 "Serv. Job Transfer Line"](../codeunit/6456.md) OnAfterFromPlanningSalesLineToJnlLine
- `OnAfterFromPlanningLineToJnlLine(var JobJournalLine: Record "Job Journal Line"; JobPlanningLine: Record "Job Planning Line")` (integration)
  - subscribers: [Codeunit 6456 "Serv. Job Transfer Line"](../codeunit/6456.md) OnAfterFromPlanningLineToJnlLine
- `OnAfterFromGenJnlLineToJnlLine(var JobJnlLine: Record "Job Journal Line"; GenJnlLine: Record "Gen. Journal Line")` (integration)
  - subscribers: [Codeunit 6262 "Sust. Job Subscriber"](../codeunit/6262.md) OnAfterFromGenJnlLineToJnlLine
- `OnAfterFromJobLedgEntryToPlanningLine(var JobPlanningLine: Record "Job Planning Line"; JobLedgEntry: Record "Job Ledger Entry")` (integration)
  - subscribers: [Codeunit 6456 "Serv. Job Transfer Line"](../codeunit/6456.md) OnAfterFromJobLedgEntryToPlanningLine
- `OnAfterFromPurchaseLineToJnlLine(var JobJnlLine: Record "Job Journal Line"; PurchHeader: Record "Purchase Header"; PurchInvHeader: Record "Purch. Inv. Header"; PurchCrMemoHeader: Record "Purch. Cr. Memo Hdr."; PurchLine: Record "Purchase Line"; SourceCode: Code[10])` (integration)
- `OnAfterFromSalesHeaderToPlanningLine(var JobPlanningLine: Record "Job Planning Line"; SalesLine: Record "Sales Line"; CurrencyFactor: Decimal)` (integration)
- `OnBeforeFromPlanningSalesLineToJnlLine(var JobPlanningLine: Record "Job Planning Line"; var SalesHeader: Record "Sales Header"; var SalesLine: Record "Sales Line"; var JobJnlLine: Record "Job Journal Line"; var EntryType: Enum "Job Journal Line Entry Type")` (integration)
- `OnBeforeFromPurchaseLineToJnlLine(PurchHeader: Record "Purchase Header"; PurchInvHeader: Record "Purch. Inv. Header"; PurchCrMemoHeader: Record "Purch. Cr. Memo Hdr."; PurchLine: Record "Purchase Line"; SourceCode: Code[10]; var JobJnlLine: Record "Job Journal Line"; var IsHandled: Boolean)` (integration)
- `OnBeforeJobJournalLineValidateType(var JobJournalLine: Record "Job Journal Line"; PurchaseLine: Record "Purchase Line"; var IsHandled: Boolean)` (integration)
- `OnFromPurchaseLineToJnlLineOnBeforeValidateNo(var JobJnlLine: Record "Job Journal Line"; var PurchLine: Record "Purchase Line")` (integration)
- `OnFromPurchaseLineToJnlLineOnAfterCalcUnitCostLCY(var JobJnlLine: Record "Job Journal Line"; var PurchLine: Record "Purchase Line")` (integration)
- `OnFromPlanningLineToJnlLineOnBeforeCopyItemTracking(var JobJournalLine: Record "Job Journal Line"; var JobPlanningLine: Record "Job Planning Line"; var IsHandled: Boolean)` (integration)
- `OnFromWarehouseActivityLineToJnlLineOnAfterJobJnlLineInsert(var JobJournalLine: Record "Job Journal Line"; var JobPlanningLine: Record "Job Planning Line"; var WarehouseActivityLine: Record "Warehouse Activity Line")` (integration)
  - subscribers: [Codeunit 6456 "Serv. Job Transfer Line"](../codeunit/6456.md) OnFromWarehouseActivityLineToJnlLineOnAfterJobJnlLineInsert
- `OnFromWarehouseActivityLineToJnlLineOnBeforeJobJnlLineInsert(var JobJournalLine: Record "Job Journal Line"; var JobPlanningLine: Record "Job Planning Line"; var WarehouseActivityLine: Record "Warehouse Activity Line")` (integration)
- `OnFromPlanningSalesLineToJnlLineOnBeforeInitAmounts(var JobJournalLine: Record "Job Journal Line"; var SalesLine: Record "Sales Line"; var SalesHeader: Record "Sales Header"; var JobPlanningLine: Record "Job Planning Line"; var IsHandled: Boolean)` (integration)
- `OnBeforeFromGenJnlLineToJnlLine(var JobJnlLine: Record "Job Journal Line"; GenJnlLine: Record "Gen. Journal Line")` (integration)
- `OnFromWarehouseActivityLineToJnlLineOnAfterSetJobPlanningLineFilters(var JobPlanningLine: Record "Job Planning Line"; WarehouseActivityLine: Record "Warehouse Activity Line")` (integration)
  - subscribers: [Codeunit 6456 "Serv. Job Transfer Line"](../codeunit/6456.md) OnFromWarehouseActivityLineToJnlLineOnAfterSetJobPlanningLineFilters

## Procedures

- `FromJnlLineToLedgEntry(JobJnlLine2: Record "Job Journal Line"; var JobLedgEntry: Record "Job Ledger Entry")`
- `FromJnlToPlanningLine(JobJnlLine: Record "Job Journal Line"; var JobPlanningLine: Record "Job Planning Line")`
- `FromPlanningSalesLineToJnlLine(JobPlanningLine: Record "Job Planning Line"; SalesHeader: Record "Sales Header"; SalesLine: Record "Sales Line"; var JobJnlLine: Record "Job Journal Line"; EntryType: Enum "Job Journal Line Entry Type")`
- `FromPlanningLineToJnlLine(JobPlanningLine: Record "Job Planning Line"; PostingDate: Date; JobJournalTemplateName: Code[10]; JobJournalBatchName: Code[10]; var JobJnlLine: Record "Job Journal Line")`
- `FromWarehouseActivityLineToJnlLine(WarehouseActivityLine: Record "Warehouse Activity Line"; PostingDate: Date; JobJournalTemplateName: Code[10]; JobJournalBatchName: Code[10]; var JobJnlLine: Record "Job Journal Line")`
- `FromGenJnlLineToJnlLine(GenJnlLine: Record "Gen. Journal Line"; var JobJnlLine: Record "Job Journal Line")`
- `FromJobLedgEntryToPlanningLine(JobLedgEntry: Record "Job Ledger Entry"; var JobPlanningLine: Record "Job Planning Line")`
- `JobTransferMarkerFieldNo(): Integer`
- `FromPurchaseLineToJnlLine(PurchHeader: Record "Purchase Header"; PurchInvHeader: Record "Purch. Inv. Header"; PurchCrMemoHeader: Record "Purch. Cr. Memo Hdr."; PurchLine: Record "Purchase Line"; SourceCode: Code[10]; var JobJnlLine: Record "Job Journal Line")`
- `FromSalesHeaderToPlanningLine(SalesLine: Record "Sales Line"; CurrencyFactor: Decimal)`
- `GetCurrencyRounding(CurrencyCode: Code[10])`
- `ValidateUnitCostAndPrice(var JobJournalLine: Record "Job Journal Line"; SalesLine: Record "Sales Line"; UnitCost: Decimal; UnitPrice: Decimal)`

Plus 5 local procedures.

## Triggers

OnRun

## 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 6200 "Non-Deductible VAT"](../codeunit/6200.md) (3 calls: `FromGenJnlLineToJnlLine → CopyNonDedVATFromGenJnlLineToJobJnlLine`, `FromPurchaseLineToJnlLine → Calculate`, `FromPurchaseLineToJnlLine → UseNonDeductibleVATAmountForJobCost`)
- [Codeunit 6500 "Item Tracking Management"](../codeunit/6500.md) (2 calls: `FromPlanningLineToJnlLine → CopyItemTracking`, `FromWarehouseActivityLineToJnlLine → CopyItemTracking`)
- [Codeunit 5402 "Unit of Measure Management"](../codeunit/5402.md) (1 call: `FromPurchaseLineToJnlLine → CalcBaseQty`)
- [Page 456 "No. Series"](../page/456.md) (1 call: `FromPlanningLineToJnlLine → (object)`)

## Called by

- [Codeunit 1001 "Job Post-Line"](../codeunit/1001.md) (4 calls: `InsertPlLineFromLedgEntry → FromJobLedgEntryToPlanningLine`, `PostGenJnlLine → FromGenJnlLineToJnlLine`, `PostJobOnPurchaseLine → FromPurchaseLineToJnlLine`, …)
- [Codeunit 1012 "Job Jnl.-Post Line"](../codeunit/1012.md) (2 calls: `ApplyToMatchingJobPlanningLine → FromJnlLineToLedgEntry`, `CreateJobLedgEntry → FromJnlLineToLedgEntry`)
- [Codeunit 1006 "Copy Job"](../codeunit/1006.md) (1 call: `CopyJLEsToJobPlanningLines → FromJobLedgEntryToPlanningLine`)
- [Codeunit 1638 "Office Jobs Handler"](../codeunit/1638.md) (1 call: `SubmitJobPlanningLine → FromPlanningLineToJnlLine`)
- [Codeunit 7003 "Price Calculation - V15"](../codeunit/7003.md) (1 call: `ApplyPriceSalesHandler → JobTransferMarkerFieldNo`)
- [Codeunit 7324 "Whse.-Activity-Post"](../codeunit/7324.md) (1 call: `PostJobUsage → FromWarehouseActivityLineToJnlLine`)
- [Table 36 "Sales Header"](../table/36.md) (1 call: `UpdateSalesLinesByFieldNo → FromSalesHeaderToPlanningLine`)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC25

## Countries that replace it

[IT](../../localizations/it.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: "codeunit", object_name: "Job Transfer Line")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
