---
id: object/codeunit/20505
type: object
title: Codeunit 20505 "Subcontracting Management"
summary: Codeunit 20505 "Subcontracting Management" in Subcontracting (Microsoft.Manufacturing.Subcontracting). 15 public procedures, 1 events. Introduced in BC29, still in BC30.
tier: official
language: en
tags:
  - codeunit
  - subcontracting
versions:
  introduced: "29"
  last_changed: null
  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: ed85e1fe27677c6e902b9d001236424431e304e4da5c11270de25528cb98d8c7
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/W1/Subcontracting/app/src/General/SubcontractingManagement.Codeunit.al
    title: src/Apps/W1/Subcontracting/app/src/General/SubcontractingManagement.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
  changes:
    - change/bcapps/9892
    - change/bcapps/10206
object_type: codeunit
object_id: 20505
name: Subcontracting Management
namespace: Microsoft.Manufacturing.Subcontracting
app: Subcontracting
extends: null
first_version: "29"
last_version: "30"
present_in:
  - "29"
  - "30"
changed_in: []
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 18
  events: 1
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
  calls: 0
  called_by: 0
  implements: 0
---

# Codeunit 20505 "Subcontracting Management"

> Codeunit 20505 "Subcontracting Management" in Subcontracting (Microsoft.Manufacturing.Subcontracting). 15 public procedures, 1 events. Introduced in BC29, still in BC30.

Subcontracting · Microsoft.Manufacturing.Subcontracting · BC29-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/W1/Subcontracting/app/src/General/SubcontractingManagement.Codeunit.al) · facts from BC29

## Events published

- `OnBeforeGetSubcontractor(WorkCenterNo: Code[20]; var Vendor: Record Vendor; var HasSubcontractor: Boolean; var IsHandled: Boolean)` (internal)

## Procedures

- `ChangeLocationOnProdOrderComponent(var ProdOrderComponent: Record "Prod. Order Component"; VendorSubcontrLocation: Code[10]; OriginalLocationCode: Code[10]; OriginalBinCode: Code[20])`
- `ValidateProdOrderCompLocationPreservingFlushingMethod(var ProdOrderComponent: Record "Prod. Order Component"; NewLocationCode: Code[10])` (internal)
- `ChangeLocationOnPlanningComponent(var PlanningComponent: Record "Planning Component"; VendorSubcontrLocation: Code[10]; OriginalLocationCode: Code[10]; OriginalBinCode: Code[20])`
- `DelLocationLinkedComponents(ProdOrderRoutingLine: Record "Prod. Order Routing Line"; ShowMsg: Boolean)`
- `GetSubcontractor(WorkCenterNo: Code[20]; var Vendor: Record Vendor): Boolean`
- `CheckSubcontractingWorkCenter(WorkCenterNo: Code[20])` (internal)
- `CheckProdNotBlockedForOutput(ItemNo: Code[20]; VariantCode: Code[20])` (internal)
- `UpdateSubcontractorPriceForRequisitionLine(var RequisitionLine: Record "Requisition Line")`
- `UpdateLinkedComponentsAfterRoutingTransfer(var ProdOrderLine: Record "Prod. Order Line"; var RoutingLine: Record "Routing Line"; var ProdOrderRoutingLine: Record "Prod. Order Routing Line")`
- `UpdateComponentSupplyMethodForPlanningComponent(var PlanningComponent: Record "Planning Component")`
- `UpdateComponentSupplyMethodForProdOrderComponent(var ProdOrderComponent: Record "Prod. Order Component")`
- `UpdLinkedComponents(ProdOrderRoutingLine: Record "Prod. Order Routing Line"; ShowMsg: Boolean)`
- `GetComponentsLocationCode(PurchaseLine: Record "Purchase Line"): Code[10]`: Gets the location code for production order components based on the setup field "Subc. Default Comp. Location". The location code is retrieved from the purchase line, company information, or manufacturing setup.
- `IsSubcontractingPurchaseDocument(PurchaseHeader: Record "Purchase Header"): Boolean` (internal)
- `IsSubcontractingPurchaseLine(PurchaseLine: Record "Purchase Line"): Boolean` (internal)

Plus 2 local procedures.

## Recent changes

- 2026-08-18 [#9892 [main] Bug 644283: Renumber Subcontracting app object ids as it clashes with partner range](../../changes/bcapps/9892.md) (main, BC30, refactor)
- 2026-08-13 [#10206 Bug 646576: Preserve manually changed component Flushing Method on subcontracting transfers](../../changes/bcapps/10206.md) (main, BC30, fix)

## Across versions

- Present in: BC29-30
- Changed (declaration) in: none

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: "codeunit", object_name: "Subcontracting Management")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
