Table of Contents

GOB Shipment Date Projection

Properties

Property Value
Object Type Codeunit
Object Subtype Normal
Object ID 5234592
Accessibility Level Public

Procedures

SetSuspendShipmentDateCalcStatusUpdate()

If set, the shipment date calc. status field is not changed when the document line is updated.

Syntax

SetSuspendShipmentDateCalcStatusUpdate(NewSuspendShipmentDateCalcStatusUpdate: Boolean)

Parameters

NewSuspendShipmentDateCalcStatusUpdate
 Type: Boolean

SetHideProgressWindow()

Syntax

SetHideProgressWindow(NewHideProgressWindow: Boolean)

Parameters

NewHideProgressWindow
 Type: Boolean

SetHideDialog()

Syntax

SetHideDialog(NewHideDialog: Boolean)

Parameters

NewHideDialog
 Type: Boolean

UpdateShipmentDate_Single()

Performs a shipment date projection for a single sales line. The shipment date projection is done by calculating the availability, followed by a standard BC CTP if needed. If the shipment date changes, the sales header is also updated.

Syntax

UpdateShipmentDate_Single(var SalesLine: Record "Sales Line")

Parameters

SalesLine
 Type: Record "Sales Line"

A single sales line of type "Item". Returns the updated record.

UpdateShipmentDate()

Performs a shipment date projection for all lines of a single sales header. Behaves exactly like UpdateShipmentDate_Single - only differences are extra steps to handle all lines at once.

Syntax

UpdateShipmentDate(var SalesHeader: Record "Sales Header")

Parameters

SalesHeader
 Type: Record "Sales Header"

A single sales header. Returns the updated record.

CalcEarliestShipmentDate()

Calculates the shipment date projection of a single sales line. The shipment date projection is done by calculating the availability, followed by a standard BC CTP if needed.

Syntax

[Boolean] := CalcEarliestShipmentDate(var SalesLine: Record "Sales Line", var CalculatedEarliestShipmentDate: Date)

Parameters

SalesLine
 Type: Record "Sales Line"

A single sales line of type "Item". This parameter remains unchanged by the calculation.

CalculatedEarliestShipmentDate
 Type: Date

The result of the calculation. If the calculation is not successful, this will be set to document shipment date or WorkDate().

Return

Success: Boolean

Returns if the calculation was successful, i.e. an earliest shipment date could be calculated.

ProcessCalculationResult()

Evaluates the earliest shipment date from the availability calculation and executes standard BC CTP, if unsuccessful. Will also show a message, if the evaluation was not successful. This function can be used to start the shipment date projection with a modified result set.

Syntax

[Boolean] := ProcessCalculationResult(var SalesLine: Record "Sales Line", var TempGOBAvailabilityEntryResult: Record "GOB Availability Entry" temporary, var CalculatedEarliestShipmentDate: Date)

Parameters

SalesLine
 Type: Record "Sales Line"

A single sales line of type "Item".

TempGOBAvailabilityEntryResult
 Type: Record "GOB Availability Entry"

The result set of an availability calculation.

CalculatedEarliestShipmentDate
 Type: Date

The result of the evaluation. If the evaluation is not successful, this will be set to document shipment date or WorkDate().

Return

Success: Boolean

Return variable Success of type Boolean.

CalculateCTPDecision()

Decides, if capable-to-promise should be calculated and calculates it, if needed. The condition is, that the "CalculatedEarliestShipmentDate" lies within the replenishment lead time period (i.e. "if I purchase the item today, when will it be available?").

Syntax

[Boolean] := CalculateCTPDecision(ForDocLineRecID: RecordId, var TempGOBAvailabilityEntryResult: Record "GOB Availability Entry" temporary, var CalculatedEarliestShipmentDate: Date)

Parameters

ForDocLineRecID
 Type: RecordId

The CTP will be calculated for this document line.

TempGOBAvailabilityEntryResult
 Type: Record "GOB Availability Entry"

The result set of an availability calculation.

CalculatedEarliestShipmentDate
 Type: Date

Returns the resulting shipment date (from availability calculation with "GOB Calc Availability by Order" or CTP, if needed)

Return

Success: Boolean

True, if a new shipment date was successfully calculated. Returns false, when availability calculation and CTP each return 0D. "CalculatedEarliestShipmentDate" is then set to either document line due date or workdate.

CalcCTP()

Performs a standard BC CTP (capable-to-promise) calculation.

Syntax

[Date] := CalcCTP(ForAvailabilityEntry: Record "GOB Availability Entry")

Parameters

ForAvailabilityEntry
 Type: Record "GOB Availability Entry"

The availability entry for some document line.

Return

CalculatedEarliestShipmentDate: Date

The earliest shipment date as calculated by CTP.

CalcCTPForATO()

Performs a standard BC CTP (capable-to-promise) calculation for all assembly components of an ATO (assemble-to-order) item. The CTP is only executed if the availability calculation (result contained in "TempGOBAvailabilityEntryResult") does not return a proper result.

Syntax

[Date] := CalcCTPForATO(ForDocLineRecID: RecordId, var TempGOBAvailabilityEntryResult: Record "GOB Availability Entry" temporary)

Parameters

ForDocLineRecID
 Type: RecordId

A sale line with ATO quantity.

TempGOBAvailabilityEntryResult
 Type: Record "GOB Availability Entry"

The result set of an availability calculation.

Return

CalculatedEarliestShipmentDate: Date

The latest availability date of all assembly components of the ATO item.

GetCalculatedEarliestShipmentDate()

Syntax

[Date] := GetCalculatedEarliestShipmentDate(DocLineRecID: RecordId, var TempGOBAvailabilityEntryResult: Record "GOB Availability Entry" temporary)

Parameters

DocLineRecID
 Type: RecordId

TempGOBAvailabilityEntryResult
 Type: Record "GOB Availability Entry"

GetReplenishmentLeadTimePeriod()

Returns the replenishment lead time period for an item at a certain location. The location calender is respected.

Syntax

GetReplenishmentLeadTimePeriod(ItemNo: Code[20], VariantCode: Code[10], LocationCode: Code[10], var ReplenishmentLeadTimeStartingDate: Date, var ReplenishmentLeadTimeEndingDate: Date)

Parameters

ItemNo
 Type: Code[20]

An item number.

VariantCode
 Type: Code[10]

A variant code.

LocationCode
 Type: Code[10]

A location code.

ReplenishmentLeadTimeStartingDate
 Type: Date

Always WorkDate(), but could be overwritten by an event subscriber.

ReplenishmentLeadTimeEndingDate
 Type: Date

Calculates as: "Purchase Lead Time" + "Whse. Inbound Handling Time" + "Safety Lead Time"

GetWhseInBoundHandlingTime()

Returns the warehouse inbound handling time of a certain location.

Syntax

[Code[10]] := GetWhseInBoundHandlingTime(LocationCode: Code[10])

Parameters

LocationCode
 Type: Code[10]

A location code. If empty, Inventory Setup will be queried.

Return

Code[10]

Should actually be of type "DateFormula" instead of Code but BC standard decided to use Code for PurchaseLeadTime and SafetyLeadTime. So we use Code here as well to keep it analogous.

CheckReservedAgainstReceipt()

Syntax

[Boolean] := CheckReservedAgainstReceipt(ForAvailabilityEntry: Record "GOB Availability Entry")

Parameters

ForAvailabilityEntry
 Type: Record "GOB Availability Entry"

CalcReservedQty()

Syntax

[Decimal] := CalcReservedQty(ForAvailabilityEntry: Record "GOB Availability Entry", BaseQty: Boolean)

Parameters

ForAvailabilityEntry
 Type: Record "GOB Availability Entry"

BaseQty
 Type: Boolean

HandleCalculationFailure()

Syntax

HandleCalculationFailure(var SalesLine: Record "Sales Line")

Parameters

SalesLine
 Type: Record "Sales Line"

CheckReservationConflict()

Checks for a sales line, if the reservation, as specified by "ForReservEntry", would lead to a reservation conflict. A reservation conflict happens, if there is a document that would be available before the the reservation is issued, but would not be available anymore after the reservation.

Syntax

CheckReservationConflict(SalesLine: Record "Sales Line", ForReservEntry: Record "Reservation Entry")

Parameters

SalesLine
 Type: Record "Sales Line"

A sales line of type "Item".

ForReservEntry
 Type: Record "Reservation Entry"

A reservation entry that contains the information on a new reservation.

ThrowManualShipmentDateChangeError()

Syntax

ThrowManualShipmentDateChangeError(LocationCode: Code[10])

Parameters

LocationCode
 Type: Code[10]

FilterSalesLines()

Syntax

FilterSalesLines(SalesHeader: Record "Sales Header", var SalesLine_InputDataSet: Record "Sales Line")

Parameters

SalesHeader
 Type: Record "Sales Header"

SalesLine_InputDataSet
 Type: Record "Sales Line"

TestInputDataSet()

Syntax

TestInputDataSet(var SalesLine_InputDataSet: Record "Sales Line")

Parameters

SalesLine_InputDataSet
 Type: Record "Sales Line"

TestSalesLine()

Syntax

TestSalesLine(SalesLine: Record "Sales Line")

Parameters

SalesLine
 Type: Record "Sales Line"

BuildFilters()

Syntax

BuildFilters(var SalesLine_InputDataSet: Record "Sales Line", var ItemNoFilter: Text, var VariantCodeFilter: Text, var LocationFilter: Text)

Parameters

SalesLine_InputDataSet
 Type: Record "Sales Line"

ItemNoFilter
 Type: Text

VariantCodeFilter
 Type: Text

LocationFilter
 Type: Text

UpdateAvailabilityEntriesForInputDataSet()

Simply calls UpdateAvailabilityEntryForSalesLine for multiple sales lines.

Syntax

UpdateAvailabilityEntriesForInputDataSet(var SalesLine_InputDataSet: Record "Sales Line", var TempGOBAvailabilityEntryOutbound: Record "GOB Availability Entry" temporary)

Parameters

SalesLine_InputDataSet
 Type: Record "Sales Line"

Filtered sales line.

TempGOBAvailabilityEntryOutbound
 Type: Record "GOB Availability Entry"

A result set of outbound availability entries, that are going to be used as input in an availability calculation.

UpdateAvailabilityEntryForSalesLine()

Modifies the outbound availability entry set, that will be used as input for an availability calculation. Reduces the allocation priority for a selected sales line and excludes all entries with "Shipment Date Calc. Status"::Initial. This is required to prevent delays of already calculated sales lines.

Syntax

UpdateAvailabilityEntryForSalesLine(SalesLine: Record "Sales Line", var TempGOBAvailabilityEntryOutbound: Record "GOB Availability Entry" temporary)

Parameters

SalesLine
 Type: Record "Sales Line"

A single sales line of type "Item".

TempGOBAvailabilityEntryOutbound
 Type: Record "GOB Availability Entry"

The outbound availability entry set to be modified.

IncreaseReservedQtyBaseForSalesLine()

Syntax

IncreaseReservedQtyBaseForSalesLine(SalesLine: Record "Sales Line", QtyToReserveBase: Decimal, var TempGOBAvailabilityEntryOutbound: Record "GOB Availability Entry" temporary)

Parameters

SalesLine
 Type: Record "Sales Line"

QtyToReserveBase
 Type: Decimal

TempGOBAvailabilityEntryOutbound
 Type: Record "GOB Availability Entry"

InsertTempAvailabilityEntryOutbound()

Inserts a availability entry with reduced allocation priority for a selected sales line. If "Shipment Date Calc. Status"::Initial then the "Shipment Date" is overwritten with WorkDate(). Except for the allocation priority and shipment date part, the created entry is analogous to those created in codeunit 5022210 "GOB Fetch Availability Data".

Syntax

InsertTempAvailabilityEntryOutbound(SalesLine: Record "Sales Line", QtyToReserveBase: Decimal, var TempGOBAvailabilityEntryOutbound: Record "GOB Availability Entry" temporary)

Parameters

SalesLine
 Type: Record "Sales Line"

A single sales line of type "Item".

QtyToReserveBase
 Type: Decimal

A new reserved quantity can be specified here (used for reservation conflict detection).

TempGOBAvailabilityEntryOutbound
 Type: Record "GOB Availability Entry"

The inserted availability entry.

UpdateSalesLine_InputDataSet()

Simply calls UpdateSalesLine in a loop over multiple sales lines.

Syntax

UpdateSalesLine_InputDataSet(var SalesLine_InputDataSet: Record "Sales Line", var TempGOBAvailabilityEntryResult: Record "GOB Availability Entry" temporary)

Parameters

SalesLine_InputDataSet
 Type: Record "Sales Line"

Filtered sales line.

TempGOBAvailabilityEntryResult
 Type: Record "GOB Availability Entry"

The result set of an availability calculation.

UpdateSalesLine()

Takes the result of a shipment date projection and updates the sales line accordingly: "Shipment date" and "Shipment Date Calc. Status" are set. If the sales line exists in the database, a Modify() is called.

Syntax

UpdateSalesLine(var SalesLine: Record "Sales Line", CalculationSuccess: Boolean, CalculatedEarliestShipmentDate: Date)

Parameters

SalesLine
 Type: Record "Sales Line"

A single sales line of type "Item". Returns the updated record.

CalculationSuccess
 Type: Boolean

Specifies if the availability calculation or CTP have been successful.

CalculatedEarliestShipmentDate
 Type: Date

The result of availability calculation or CTP.

UpdateSalesHeader()

This function is to be used after all its lines have been updated. Updates the sales header "shipment date" and "promised delivery date" depending on its shipping advice. "Shipping Advice"::Complete: latest shipment date over all lines "Shipping Advice"::Partial: earliest shipment date over all lines

Can trigger a confirm dialog.

Syntax

UpdateSalesHeader(var SalesHeader: Record "Sales Header")

Parameters

SalesHeader
 Type: Record "Sales Header"

A single sales header. Returns the updated, modified record.

UpdatePromisedDeliveryDate()

Updates the "promised delivery date" of a sales header based on the values of its sales lines and depending on the "shipping advice". Maximum "promised delivery date" in a sales line is later: "Shipping Advice"::Complete: update and apply the maximum date to all lines "Shipping Advice"::Partial: update

Minimum "promised delivery date" in a sales line is earlier: User can choose to apply the date or not. If "Shipping Advice"::Complete, the minimum date is applied to all lines.

Can trigger a confirm dialog and/or string menu.

Syntax

UpdatePromisedDeliveryDate(var SalesHeader: Record "Sales Header")

Parameters

SalesHeader
 Type: Record "Sales Header"

A single sales header. Returns the updated, modified record.

SendUIFeedback()

Syntax

SendUIFeedback(SalesLine: Record "Sales Line", var TempGOBAvailabilityEntryResultWithoutReservation: Record "GOB Availability Entry" temporary, var TempGOBAvailabilityEntryResultWithReservation: Record "GOB Availability Entry" temporary)

Parameters

SalesLine
 Type: Record "Sales Line"

TempGOBAvailabilityEntryResultWithoutReservation
 Type: Record "GOB Availability Entry"

TempGOBAvailabilityEntryResultWithReservation
 Type: Record "GOB Availability Entry"

FindReservationConflict()

Syntax

[Boolean] := FindReservationConflict(SalesLine: Record "Sales Line", var TempGOBAvailabilityEntryResultWithoutReservation: Record "GOB Availability Entry" temporary, var TempGOBAvailabilityEntryResultWithReservation: Record "GOB Availability Entry" temporary)

Parameters

SalesLine
 Type: Record "Sales Line"

TempGOBAvailabilityEntryResultWithoutReservation
 Type: Record "GOB Availability Entry"

TempGOBAvailabilityEntryResultWithReservation
 Type: Record "GOB Availability Entry"

GetMinMaxDateFromLines()

Syntax

[Date] := GetMinMaxDateFromLines(SalesHeader: Record "Sales Header", DateFieldNo: Integer, Minimum: Boolean)

Parameters

SalesHeader
 Type: Record "Sales Header"

DateFieldNo
 Type: Integer

Minimum
 Type: Boolean

RefreshSalesLineAfterHeaderChange()

Syntax

RefreshSalesLineAfterHeaderChange(var SalesLine: Record "Sales Line")

Parameters

SalesLine
 Type: Record "Sales Line"

CheckRecordExists()

Syntax

[Boolean] := CheckRecordExists(SalesLine: Record "Sales Line")

Parameters

SalesLine
 Type: Record "Sales Line"

OnBeforeCalcEarliestShipmentDate()

Syntax

OnBeforeCalcEarliestShipmentDate(var NoFilter: Text, var VariantFilter: Text, var LocationFilter: Text, var SalesLine_InputDataSet: Record "Sales Line", var HideProgressWindow: Boolean, var HideDialog: Boolean)

Parameters

NoFilter
 Type: Text

VariantFilter
 Type: Text

LocationFilter
 Type: Text

SalesLine_InputDataSet
 Type: Record "Sales Line"

HideProgressWindow
 Type: Boolean

HideDialog
 Type: Boolean

OnAfterProcessCalculationResult()

Syntax

OnAfterProcessCalculationResult(SalesLine: Record "Sales Line", var TempGOBAvailabilityEntryResult: Record "GOB Availability Entry" temporary, var CalculatedEarliestShipmentDate: Date, var Success: Boolean)

Parameters

SalesLine
 Type: Record "Sales Line"

TempGOBAvailabilityEntryResult
 Type: Record "GOB Availability Entry"

CalculatedEarliestShipmentDate
 Type: Date

Success
 Type: Boolean

OnBeforeHandleCalculationFailure()

Syntax

OnBeforeHandleCalculationFailure(var SalesLine: Record "Sales Line", var IsHandled: Boolean)

Parameters

SalesLine
 Type: Record "Sales Line"

IsHandled
 Type: Boolean

OnBeforeCheckReservationConflict()

Syntax

OnBeforeCheckReservationConflict(var NoFilter: Text, var VariantFilter: Text, var LocationFilter: Text, var SalesLine_InputDataSet: Record "Sales Line", var HideProgressWindow: Boolean, var HideDialog: Boolean)

Parameters

NoFilter
 Type: Text

VariantFilter
 Type: Text

LocationFilter
 Type: Text

SalesLine_InputDataSet
 Type: Record "Sales Line"

HideProgressWindow
 Type: Boolean

HideDialog
 Type: Boolean

OnBeforeThrowManualShipmentDateChangeError()

Syntax

OnBeforeThrowManualShipmentDateChangeError(GOBAvailabilitySetup: Record "GOB Availability Setup", var SkipError: Boolean)

Parameters

GOBAvailabilitySetup
 Type: Record "GOB Availability Setup"

SkipError
 Type: Boolean

OnAfterFilterSalesLines()

Syntax

OnAfterFilterSalesLines(SalesHeader: Record "Sales Header", var SalesLine_InputDataSet: Record "Sales Line")

Parameters

SalesHeader
 Type: Record "Sales Header"

SalesLine_InputDataSet
 Type: Record "Sales Line"

OnBeforeTestSalesLine()

Syntax

OnBeforeTestSalesLine(SalesLine: Record "Sales Line", var IsHandled: Boolean)

Parameters

SalesLine
 Type: Record "Sales Line"

IsHandled
 Type: Boolean

OnAfterBuildFilters()

Syntax

OnAfterBuildFilters(var SalesLine_InputDataSet: Record "Sales Line", var ItemNoFilter: Text, var VariantCodeFilter: Text, var LocationFilter: Text)

Parameters

SalesLine_InputDataSet
 Type: Record "Sales Line"

ItemNoFilter
 Type: Text

VariantCodeFilter
 Type: Text

LocationFilter
 Type: Text

OnBeforeInsertAvailabilityEntry()

Syntax

OnBeforeInsertAvailabilityEntry(SalesLine: Record "Sales Line", QtyToReserve: Decimal, var TempGOBAvailabilityEntryOutbound: Record "GOB Availability Entry" temporary)

Parameters

SalesLine
 Type: Record "Sales Line"

QtyToReserve
 Type: Decimal

TempGOBAvailabilityEntryOutbound
 Type: Record "GOB Availability Entry"

OnBeforeUpdateSalesLine()

Syntax

OnBeforeUpdateSalesLine(var SalesLine: Record "Sales Line", CalculationSuccess: Boolean, HideDialog: Boolean, var CalculatedEarliestShipmentDate: Date, var IsHandled: Boolean)

Parameters

SalesLine
 Type: Record "Sales Line"

CalculationSuccess
 Type: Boolean

HideDialog
 Type: Boolean

CalculatedEarliestShipmentDate
 Type: Date

IsHandled
 Type: Boolean

OnAfterUpdateSalesLine()

Syntax

OnAfterUpdateSalesLine(var SalesLine: Record "Sales Line", CalculationSuccess: Boolean, HideDialog: Boolean, CalculatedEarliestShipmentDate: Date, var DoModify: Boolean)

Parameters

SalesLine
 Type: Record "Sales Line"

CalculationSuccess
 Type: Boolean

HideDialog
 Type: Boolean

CalculatedEarliestShipmentDate
 Type: Date

DoModify
 Type: Boolean

OnBeforeUpdateSalesHeader()

Syntax

OnBeforeUpdateSalesHeader(var SalesHeader: Record "Sales Header", var IsHandled: Boolean)

Parameters

SalesHeader
 Type: Record "Sales Header"

IsHandled
 Type: Boolean

OnAfterUpdateSalesHeader()

Syntax

OnAfterUpdateSalesHeader(var SalesHeader: Record "Sales Header")

Parameters

SalesHeader
 Type: Record "Sales Header"

OnBeforeSendUIFeedback()

Syntax

OnBeforeSendUIFeedback(SalesLine: Record "Sales Line", var TempGOBAvailabilityEntryResultWithoutReservation: Record "GOB Availability Entry" temporary, var TempGOBAvailabilityEntryResultWithReservation: Record "GOB Availability Entry" temporary, HideDialog: Boolean, var IsHandled: Boolean)

Parameters

SalesLine
 Type: Record "Sales Line"

TempGOBAvailabilityEntryResultWithoutReservation
 Type: Record "GOB Availability Entry"

TempGOBAvailabilityEntryResultWithReservation
 Type: Record "GOB Availability Entry"

HideDialog
 Type: Boolean

IsHandled
 Type: Boolean

OnBeforeGetReplenishLeadTimePeriod()

Syntax

OnBeforeGetReplenishLeadTimePeriod(ItemNo: Code[20], VariantCode: Code[10], LocationCode: Code[10], var ReplenishmentLeadTimeStartingDate: Date, var ReplenishmentLeadTimeEndingDate: Date, var IsHandled: Boolean)

Parameters

ItemNo
 Type: Code[20]

VariantCode
 Type: Code[10]

LocationCode
 Type: Code[10]

ReplenishmentLeadTimeStartingDate
 Type: Date

ReplenishmentLeadTimeEndingDate
 Type: Date

IsHandled
 Type: Boolean

OnAfterCalculateCTPDecision()

Syntax

OnAfterCalculateCTPDecision(ForDocLineRecID: RecordId, var TempGOBAvailabilityEntryResult: Record "GOB Availability Entry" temporary, var CalculatedEarliestShipmentDate: Date, var Success: Boolean)

Parameters

ForDocLineRecID
 Type: RecordId

TempGOBAvailabilityEntryResult
 Type: Record "GOB Availability Entry"

CalculatedEarliestShipmentDate
 Type: Date

Success
 Type: Boolean

OnBeforeGetCalculatedEarliestShipmentDate()

Syntax

OnBeforeGetCalculatedEarliestShipmentDate(DocLineRecID: RecordId, var TempGOBAvailabilityEntryResult: Record "GOB Availability Entry" temporary)

Parameters

DocLineRecID
 Type: RecordId

TempGOBAvailabilityEntryResult
 Type: Record "GOB Availability Entry"