{
  "title": "Codeunit 1002 Job Create-Invoice",
  "url": "https://jonas-paprotka.de/ref/codeunit/1002-job-create-invoice/",
  "author": "Jonas Paprotka",
  "license": "Content © 2026 Jonas Paprotka. Quote freely with attribution and a link.",
  "subject": "Microsoft Dynamics 365 Business Central",
  "checked": "2026-09-20",
  "source": {
    "feed": "https://dynamicssmb2.pkgs.visualstudio.com/DynamicsBCPublicFeeds/_packaging/MSSymbols/nuget/v3/index.json",
    "package": "Microsoft.BaseApplication.symbols.437dbf0e-84ff-417a-965d-ed2bb9650972",
    "build": "28.5.54151.54365",
    "code": {
      "29": {
        "url": "https://jonas-paprotka.de/ref/codeunit/1002-job-create-invoice/source/29/",
        "repo": "https://github.com/microsoft/BCApps",
        "branch": "releases/29.x",
        "commit": "a66254c3b8b5bb1cea290dc8f9d097aec4381153",
        "path": "src/Layers/W1/BaseApp/Projects/Project/Planning/JobCreateInvoice.Codeunit.al",
        "license": "MIT"
      }
    },
    "note": "Presence per major, highest build of each; 17 is the oldest major on the feed. Local procedures are not listed."
  },
  "object": {
    "type": "codeunit",
    "id": 1002,
    "name": "Job Create-Invoice",
    "app": "Base Application",
    "appByVersion": [
      {
        "app": "Base Application",
        "from": 17
      }
    ],
    "nameByVersion": [
      {
        "name": "Job Create-Invoice",
        "from": 17
      }
    ],
    "namespace": "Microsoft.Projects.Project.Planning",
    "versions": "17-28",
    "majors": [
      17,
      18,
      19,
      20,
      21,
      22,
      23,
      24,
      25,
      26,
      27,
      28
    ],
    "extends": null,
    "sourceTable": null,
    "sourceFile": "Projects/Project/Planning/JobCreateInvoice.Codeunit.al",
    "obsolete": null,
    "obsoleteSeenFrom": null,
    "byVersion": {
      "17": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 45,
          "values": 0
        },
        "stub": false
      },
      "18": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 50,
          "values": 0
        },
        "stub": false
      },
      "19": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 50,
          "values": 0
        },
        "stub": false
      },
      "20": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 53,
          "values": 0
        },
        "stub": false
      },
      "21": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 58,
          "values": 0
        },
        "stub": false
      },
      "22": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 62,
          "values": 0
        },
        "stub": false
      },
      "23": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "Microsoft.Projects.Project.Planning",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 64,
          "values": 0
        },
        "stub": false
      },
      "24": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "Microsoft.Projects.Project.Planning",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 68,
          "values": 0
        },
        "stub": false
      },
      "25": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "Microsoft.Projects.Project.Planning",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 75,
          "values": 0
        },
        "stub": false
      },
      "26": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "Microsoft.Projects.Project.Planning",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 72,
          "values": 0
        },
        "stub": false
      },
      "27": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "Microsoft.Projects.Project.Planning",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 75,
          "values": 0
        },
        "stub": false
      },
      "28": {
        "app": "base-application",
        "name": "Job Create-Invoice",
        "ns": "Microsoft.Projects.Project.Planning",
        "obsolete": null,
        "target": "",
        "sourceTable": "",
        "counts": {
          "fields": 0,
          "keys": 0,
          "methods": 75,
          "values": 0
        },
        "stub": false
      }
    },
    "fields": [],
    "keys": [],
    "procedures": [
      {
        "name": "CreateSalesInvoice",
        "sig": "(var Record Job Planning Line, Boolean)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "CreateSalesInvoiceLines",
        "sig": "(Code[20], var Record Job Planning Line, Code[20], Boolean, Date, Boolean)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": {
          "state": "Pending",
          "reason": "Replaced by CreateSalesInvoiceLines(JobNo: Code[20]; var JobPlanningLineSource: Record \"Job Planning Line\"; InvoiceNo: Code[20]; NewInvoice: Boolean; PostingDate: Date; DocumentDate: Date; CreditMemo: Boolean)",
          "tag": "23.0"
        },
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25
        ],
        "range": "17-25",
        "first": 17,
        "last": 25,
        "obsoleteSince": 23,
        "spans": [
          {
            "from": 17,
            "to": 22,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          },
          {
            "from": 23,
            "to": 25,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": {
              "state": "Pending",
              "reason": "Replaced by CreateSalesInvoiceLines(JobNo: Code[20]; var JobPlanningLineSource: Record \"Job Planning Line\"; InvoiceNo: Code[20]; NewInvoice: Boolean; PostingDate: Date; DocumentDate: Date; CreditMemo: Boolean)",
              "tag": "23.0"
            }
          }
        ]
      },
      {
        "name": "DeleteSalesInvoiceBuffer",
        "sig": "()",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "CreateSalesInvoiceJobTask",
        "sig": "(var Record Job Task, Date, Boolean, var Integer, var Code[20], var Code[20], Boolean)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": {
          "state": "Pending",
          "reason": "Replaced by CreateSalesInvoiceJobTask(var JobTask2: Record \"Job Task\"; PostingDate: Date; DocumentDate: Date; InvoicePerTask: Boolean; var NoOfInvoices: Integer; var OldJobNo: Code[20]; var OldJobTaskNo: Code[20]; LastJobTask: Boolean)",
          "tag": "23.0"
        },
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25
        ],
        "range": "17-25",
        "first": 17,
        "last": 25,
        "obsoleteSince": 23,
        "spans": [
          {
            "from": 17,
            "to": 22,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          },
          {
            "from": 23,
            "to": 25,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": {
              "state": "Pending",
              "reason": "Replaced by CreateSalesInvoiceJobTask(var JobTask2: Record \"Job Task\"; PostingDate: Date; DocumentDate: Date; InvoicePerTask: Boolean; var NoOfInvoices: Integer; var OldJobNo: Code[20]; var OldJobTaskNo: Code[20]; LastJobTask: Boolean)",
              "tag": "23.0"
            }
          }
        ]
      },
      {
        "name": "DeleteSalesLine",
        "sig": "(Record Sales Line)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "FindInvoices",
        "sig": "(var Record Job Planning Line Invoice, Code[20], Code[20], Integer, Option)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "GetJobPlanningLineInvoices",
        "sig": "(Record Job Planning Line)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OpenSalesInvoice",
        "sig": "(Record Job Planning Line Invoice)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "CreateSalesInvoiceLines",
        "sig": "(Code[20], var Record Job Planning Line, Code[20], Boolean, Date, Date, Boolean)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "23-28",
        "first": 23,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 23,
            "to": 28,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "CreateSalesInvoiceJobTask",
        "sig": "(var Record Job Task, Date, Date, Boolean, var Integer, var Code[20], var Code[20], Boolean)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "23-28",
        "first": 23,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 23,
            "to": 28,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "CreateNewInvoice",
        "sig": "(var Record Job Task, Boolean, var Code[20], var Code[20], Boolean)",
        "returns": "Boolean",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          25,
          26,
          27,
          28
        ],
        "range": "25-28",
        "first": 25,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 25,
            "to": 28,
            "returns": "Boolean",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "CreateSalesHeader",
        "sig": "(Record Job, Record Job Planning Line, Date, Date)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          25,
          26,
          27,
          28
        ],
        "range": "25-28",
        "first": 25,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 25,
            "to": 28,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "CreateSalesLine",
        "sig": "(var Record Job Planning Line)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          25,
          26,
          27,
          28
        ],
        "range": "25-28",
        "first": 25,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 25,
            "to": 28,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "TransferLine",
        "sig": "(var Record Job Planning Line)",
        "returns": "Boolean",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          25,
          26,
          27,
          28
        ],
        "range": "25-28",
        "first": 25,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 25,
            "to": 28,
            "returns": "Boolean",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "TestExchangeRate",
        "sig": "(var Record Job Planning Line, Date)",
        "returns": "",
        "kind": "procedure",
        "access": "public",
        "obsolete": null,
        "majors": [
          25,
          26,
          27,
          28
        ],
        "range": "25-28",
        "first": 25,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 25,
            "to": 28,
            "returns": "",
            "kind": "procedure",
            "access": "public",
            "obsolete": null
          }
        ]
      }
    ],
    "events": [
      {
        "name": "OnAfterCreateSalesInvoiceLines",
        "sig": "(Record Sales Header, Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24
        ],
        "range": "17-24",
        "first": 17,
        "last": 24,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 24,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeCreateSalesHeader",
        "sig": "(Record Job, Date, var Record Sales Header, Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19
        ],
        "range": "17-19",
        "first": 17,
        "last": 19,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 19,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeCreateSalesLine",
        "sig": "(var Record Job Planning Line, var Record Sales Header, var Record Sales Header, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnAfterCreateSalesLine",
        "sig": "(var Record Sales Line, Record Sales Header, Record Job, var Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeCreateNewInvoice",
        "sig": "(var Record Job Task, Boolean, var Code[20], var Code[20], Boolean, var Boolean, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24
        ],
        "range": "17-24",
        "first": 17,
        "last": 24,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 24,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeCreateSalesInvoiceLines",
        "sig": "(var Record Job Planning Line, Code[20], Boolean, Date, Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21
        ],
        "range": "17-21",
        "first": 17,
        "last": 21,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 21,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeCreateSalesInvoiceJobTask",
        "sig": "(var Record Job Task, Date, Boolean, var Integer, var Code[20], var Code[20], Boolean, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeDeleteSalesLine",
        "sig": "(var Record Sales Line, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeGetInvoiceNo",
        "sig": "(var Record Job Planning Line, Boolean, Boolean, Date, var Code[20], var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeGetCrMemoNo",
        "sig": "(var Record Job Planning Line, Boolean, Boolean, Date, var Code[20], var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeInsertSalesHeader",
        "sig": "(var Record Sales Header, Record Job, Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeModifySalesHeader",
        "sig": "(var Record Sales Header, Record Job, Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeInsertSalesLine",
        "sig": "(var Record Sales Line, var Record Sales Header, Record Job, Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21
        ],
        "range": "17-21",
        "first": 17,
        "last": 21,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 21,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeModifySalesLine",
        "sig": "(var Record Sales Line, Record Sales Header, Record Job, Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeOpenSalesInvoice",
        "sig": "(var Record Job Planning Line Invoice, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeTestSalesHeader",
        "sig": "(var Record Sales Header, Record Job, var Boolean, Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19
        ],
        "range": "17-19",
        "first": 17,
        "last": 19,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 19,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeTransferLine",
        "sig": "(var Record Job Planning Line, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21
        ],
        "range": "17-21",
        "first": 17,
        "last": 21,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 21,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeUpdateSalesHeader",
        "sig": "(var Record Sales Header, Record Job, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnAfterOpenSalesInvoice",
        "sig": "(var Record Job Planning Line Invoice)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnAfterTestSalesHeader",
        "sig": "(var Record Sales Header, Record Job, Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeFindInvoices",
        "sig": "(var Record Job Planning Line Invoice, Code[20], Code[20], Integer, Option, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeShowMessageLinesTransferred",
        "sig": "(var Record Job Planning Line, Boolean, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeTestExchangeRate",
        "sig": "(var Record Job Planning Line, Date, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17
        ],
        "range": "17",
        "first": 17,
        "last": 17,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 17,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeTestTransferred",
        "sig": "(var Record Job Planning Line, Record Sales Header, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesHeaderOnBeforeUpdateSalesHeader",
        "sig": "(var Record Sales Header, var Record Job, var Boolean, Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnAfterValidateJobPlanningLine",
        "sig": "(var Record Job Planning Line, var Text)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnBeforeJobPlanningLineModify",
        "sig": "(var Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnBeforeCreateSalesLine",
        "sig": "(var Record Job Planning Line, Record Sales Header, Record Sales Header, Boolean, var Integer)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26
        ],
        "range": "17-26",
        "first": 17,
        "last": 26,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 26,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnBeforeGetCustomer",
        "sig": "(Record Job Planning Line, var Record Customer, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": {
          "state": "Pending",
          "reason": "Replaced with OnBeforeCheckJobBillToCustomer",
          "tag": "21.0"
        },
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25
        ],
        "range": "17-25",
        "first": 17,
        "last": 25,
        "obsoleteSince": 20,
        "spans": [
          {
            "from": 17,
            "to": 19,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          },
          {
            "from": 20,
            "to": 25,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": {
              "state": "Pending",
              "reason": "Replaced with OnBeforeCheckJobBillToCustomer",
              "tag": "21.0"
            }
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnBeforeTestJob",
        "sig": "(var Record Job)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceJobTaskOnAfterLinesCreated",
        "sig": "(var Record Sales Header, var Record Job)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23
        ],
        "range": "17-23",
        "first": 17,
        "last": 23,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 23,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceJobTaskOnBeforeTempJobPlanningLineFind",
        "sig": "(var Record Job Task, var Record Sales Header, Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20
        ],
        "range": "17-20",
        "first": 17,
        "last": 20,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 20,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceJobTaskOnBeforeCreateSalesLine",
        "sig": "(var Record Job Planning Line, Record Sales Header, Record Sales Header, var Integer)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceJobTaskTestJob",
        "sig": "(var Record Job)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17
        ],
        "range": "17",
        "first": 17,
        "last": 17,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 17,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnDeleteSalesLineOnBeforeJobPlanningLineModify",
        "sig": "(var Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceOnBeforeRunReport",
        "sig": "(var Record Job Planning Line, var Boolean, var Boolean, var Date, var Code[20], var Boolean, Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnFindInvoicesOnBeforeTempJobPlanningLineInvoiceInsert",
        "sig": "(var Record Job Planning Line Invoice, Record Job Planning Line Invoice)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "17-28",
        "first": 17,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 17,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeTestExchangeRate",
        "sig": "(var Record Job Planning Line, Date, var Boolean, var Record Currency Exchange Rate)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "18-28",
        "first": 18,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 18,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesLineOnBeforeSalesCheckIfAnyExtText",
        "sig": "(var Record Job Planning Line, var Record Sales Line, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "18-28",
        "first": 18,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 18,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesLineOnBeforeValidateSalesLineNo",
        "sig": "(var Record Job Planning Line, var Record Sales Line, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "18-28",
        "first": 18,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 18,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceJobTaskTestJob",
        "sig": "(var Record Job, var Record Job Planning Line, Date)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "18-28",
        "first": 18,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 18,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnFindInvoicesOnBeforeTempJobPlanningLineInvoiceModify",
        "sig": "(var Record Job Planning Line Invoice, Record Job Planning Line Invoice)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "18-28",
        "first": 18,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 18,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesHeaderOnBeforeCheckBillToCustomerNo",
        "sig": "(var Record Sales Header, Record Job, Record Job Planning Line, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "18-28",
        "first": 18,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 18,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnBeforeJobPlanningLineCopy",
        "sig": "(Record Job, var Record Job Planning Line, Date)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          18,
          19,
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "18-28",
        "first": 18,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 18,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeCreateSalesHeader",
        "sig": "(Record Job, Date, var Record Sales Header, var Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "20-28",
        "first": 20,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 20,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeTestSalesHeader",
        "sig": "(var Record Sales Header, Record Job, var Boolean, var Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "20-28",
        "first": 20,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 20,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeCheckJobBillToCustomer",
        "sig": "(Record Job Planning Line, Record Job, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "20-28",
        "first": 20,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 20,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceJobTaskOnBeforeJobPlanningLineInvoiceInsert",
        "sig": "(var Record Job Planning Line Invoice)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "20-28",
        "first": 20,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 20,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeUpdateSalesLineDimension",
        "sig": "(var Record Sales Line, Record Job Planning Line, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          20,
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "20-28",
        "first": 20,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 20,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnAfterUpdateSalesHeader",
        "sig": "(var Record Sales Header, Record Job)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "21-28",
        "first": 21,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 21,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesLineOnAfterCalcShouldUpdateCurrencyFactor",
        "sig": "(var Record Job Planning Line, var Record Job, var Record Sales Header, var Record Sales Header, var Boolean, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "21-28",
        "first": 21,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 21,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesLineOnAfterSalesLineModify",
        "sig": "(var Record Sales Line, Record Sales Header, Record Job, Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "21-28",
        "first": 21,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 21,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnBeforeJobPlanningLineFindSet",
        "sig": "(var Record Job Planning Line, Code[20], Boolean, Date, Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "21-28",
        "first": 21,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 21,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceJobTaskOnBeforeTempJobPlanningLineFind",
        "sig": "(var Record Job Task, var Record Sales Header, Boolean, var Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          21,
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "21-28",
        "first": 21,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 21,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeCheckJobPlanningLineIsNegative",
        "sig": "(Record Job Planning Line, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": {
          "state": "Pending",
          "reason": "Has no purpose in procedure CheckJobPlanningLineIsNegative anymore",
          "tag": "24.0"
        },
        "majors": [
          21,
          22,
          23,
          24,
          25,
          26
        ],
        "range": "21-26",
        "first": 21,
        "last": 26,
        "obsoleteSince": 24,
        "spans": [
          {
            "from": 21,
            "to": 23,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          },
          {
            "from": 24,
            "to": 26,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": {
              "state": "Pending",
              "reason": "Has no purpose in procedure CheckJobPlanningLineIsNegative anymore",
              "tag": "24.0"
            }
          }
        ]
      },
      {
        "name": "OnBeforeCreateSalesInvoiceLines",
        "sig": "(var Record Job Planning Line, Code[20], Boolean, Date, Boolean, var Integer)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          22,
          23,
          24,
          25,
          26
        ],
        "range": "22-26",
        "first": 22,
        "last": 26,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 22,
            "to": 26,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeInsertSalesLine",
        "sig": "(var Record Sales Line, var Record Sales Header, Record Job, Record Job Planning Line, Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "22-28",
        "first": 22,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 22,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeTransferLine",
        "sig": "(var Record Job Planning Line, var Boolean, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "22-28",
        "first": 22,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 22,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnAfterSetJobInvCurrency",
        "sig": "(Record Job, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "22-28",
        "first": 22,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 22,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesLineOnBeforeValidateCurrencyCode",
        "sig": "(var Boolean, Record Sales Line, Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "22-28",
        "first": 22,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 22,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnAfterSetSalesDocumentType",
        "sig": "(var Record Sales Header)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "22-28",
        "first": 22,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 22,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeGetJobPlanningLineInvoices",
        "sig": "(Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "public",
        "obsolete": null,
        "majors": [
          22,
          23,
          24,
          25,
          26,
          27,
          28
        ],
        "range": "22-28",
        "first": 22,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 22,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "public",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceJobTaskOnAfterLinesCreated",
        "sig": "(var Record Sales Header, var Record Job, Boolean, Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          24,
          25,
          26,
          27,
          28
        ],
        "range": "24-28",
        "first": 24,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 24,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceJobTaskOnAfterJobPlanningLineSetFilters",
        "sig": "(var Record Job Planning Line, var Record Job Task)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          24,
          25,
          26,
          27,
          28
        ],
        "range": "24-28",
        "first": 24,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 24,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesLineOnBeforeCheckPricesIncludingVATAndSetJobInformation",
        "sig": "(var Record Sales Line, Record Job Planning Line, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          24,
          25,
          26,
          27,
          28
        ],
        "range": "24-28",
        "first": 24,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 24,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnDeleteSalesLineOnBeforeGetJobPlanningLine",
        "sig": "(Record Job Planning Line Invoice)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          24,
          25,
          26,
          27,
          28
        ],
        "range": "24-28",
        "first": 24,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 24,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeGetCustomerNo",
        "sig": "(var Record Job, var Record Job Planning Line, Boolean, var Code[20])",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          24,
          25,
          26,
          27,
          28
        ],
        "range": "24-28",
        "first": 24,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 24,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnAfterCreateSalesInvoiceLines",
        "sig": "(var Record Sales Header, Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          25,
          26,
          27,
          28
        ],
        "range": "25-28",
        "first": 25,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 25,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeCreateNewInvoice",
        "sig": "(var Record Job Task, Boolean, var Code[20], var Code[20], Boolean, var Boolean, var Boolean, var Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          25,
          26,
          27,
          28
        ],
        "range": "25-28",
        "first": 25,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 25,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnTestExchangeRateOnBeforeValidateCurrencyDate",
        "sig": "(var Record Job Planning Line, Date, var Record Currency Exchange Rate, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          25,
          26,
          27,
          28
        ],
        "range": "25-28",
        "first": 25,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 25,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeFindJobPlanningLineInvoice",
        "sig": "(Record Job Task, var Record Job Planning Line Invoice, var Record Sales Header, var Boolean, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          25,
          26,
          27,
          28
        ],
        "range": "25-28",
        "first": 25,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 25,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnBeforeCreateSalesInvoiceLines",
        "sig": "(var Record Job Planning Line, Code[20], Boolean, Date, Boolean, var Integer, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          27,
          28
        ],
        "range": "27-28",
        "first": 27,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 27,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnBeforeCreateSalesLine",
        "sig": "(var Record Job Planning Line, Record Sales Header, Record Sales Header, Boolean, var Integer, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          27,
          28
        ],
        "range": "27-28",
        "first": 27,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 27,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnBeforeNoSalesLineCreatedError",
        "sig": "(var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          27,
          28
        ],
        "range": "27-28",
        "first": 27,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 27,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceLinesOnBeforeJobPlanningLineInvoiceInsert",
        "sig": "(var Record Job Planning Line Invoice)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          27,
          28
        ],
        "range": "27-28",
        "first": 27,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 27,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceOnBeforeFindJobPlanningLines",
        "sig": "(var Record Job Planning Line)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          27,
          28
        ],
        "range": "27-28",
        "first": 27,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 27,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      },
      {
        "name": "OnCreateSalesInvoiceOnBeforeCommit",
        "sig": "(var Record Job Planning Line, var Boolean)",
        "returns": "",
        "kind": "integrationevent",
        "access": "local",
        "obsolete": null,
        "majors": [
          27,
          28
        ],
        "range": "27-28",
        "first": 27,
        "last": 28,
        "obsoleteSince": null,
        "spans": [
          {
            "from": 27,
            "to": 28,
            "returns": "",
            "kind": "integrationevent",
            "access": "local",
            "obsolete": null
          }
        ]
      }
    ],
    "values": []
  }
}