共用方式為


庫存能見度現有變更時間表和可承諾量

本文說明如何設定現有變更時間表功能以安排未來的現有變更並計算可承諾 (ATP) 數量。 ATP 是可以在下一個時期向客戶承諾的可用項目數量。 使用此計算可以大大提高您的訂單履行能力。

對於許多製造商、零售商,或銷售商而言,僅僅知道現在有多少庫存是不夠的。 他們必須全面了解未來的能見度。 這種未來能見度應考慮未來供應、未來需求和 ATP。

ATP 數量的計算量值

ATP 計算量值是一種預先定義的計算量值,通常是用來尋找目前可用的現有數量。 供應數量是修飾符類型為加法的實體量值的數量總和,而需求數量 是修飾符類型為 減法的實體量值的數量總和。

您可以新增多個計算的測量來計算多個 ATP 數量。 但是,所有 ATP 計算測量中不同實體測量的總數應少於九個。

重要

計算測量是實體測量的組合。 其公式只能包含沒有重複項的實體量值,不能有計算量值。

例如,您可以設定下列計算量值:

現有可用=( 物理發明現有 + 無限制 + 質量檢驗 + 入庫 + )–(保留物理軟儲存物理 + 出庫 +

總和 (PhysicalInvent + OnHand + Unrestricted + QualityInspection + Inbound) 代表供應,而總和 (ReservPhysical + SoftReservePhysical + Outbound) 代表需求。 因此,計算量值可以這樣理解:

現有 =

然後,您可以新增另一個計算量值以計算現有實體 ATP 數量。

現有物理=( 物理發明手頭 + 不受限制 + 的質量檢驗 + 入庫 + )–(出庫

在這兩個 ATP 計算量值之間,有八個不同的實體量值:PhysicalInventOnHandUnrestrictedQualityInspectionInboundReservPhysicalSoftReservePhysicalOutbound

有關計算測量的更多資訊,請參閱 計算測量

在 UI 版本 2 中開啟並設定現有變更排程和 ATP

本部分適用於使用庫存能見度 UI 版本 2 時,。

在使用 ATP 之前,您必須設定一或多項計算量值來計算 ATP 數量。 您還必須開啟該功能並在 Microsoft Power Apps中配置 ATP 設定。

請依照下列步驟開啟 Power Apps 中的現有變更時間表功能並配置 ATP 設定。

  1. 登入 Power Apps,並開啟庫存能見度應用程式。

  2. 請在瀏覽窗格上,選取功能管理

  3. 可供承諾 圖格上,選取管理

  4. 啟用功能選項設為 True 以啟用 ATP 功能。

  5. 180 天的排程選項設為 True 以支援較長的 ATP 排程週期 (180 天)。

    重要

    根據預設,ATP 功能僅限 7 天。 7 天的 ATP 和 180 天的 ATP 功能是分開且相互獨立的。 當您開啟 180 天的 ATP 功能時,您使用 7 天的 ATP 功能建立或修改的排程變更將不會生效。 如果您已使用 7 天的 ATP 功能並希望遷移到 180 天的功能,我們建議您在啟用 180 天的功能後刪除舊資料並重新發布現有變更排程。

  6. 最大排程週期 (天) 欄位設定為使用者可以查看和提交排程的現有變更天數。 查詢庫存資訊的使用者將獲得從當前日期開始定義的時間區段中,每一天的現有數量、排程的現有變更以及 ATP。 此欄位的最大值為 180 天。 根據預設,它是設定為 30 天。 因此,您可以排程從今天起最多 30 天內的變更。

    重要

    排程期間包括當前日期。 因此,使用者可以安排從當前日期 (提交變更之日) 到未來 (排程週期–1) 天內的任何時間進行現有更改。

  7. 排程量值部分,設定排程量值。 您可以使用現有的計算量值作為排程量值,也可以建立新的量值。 當您查詢庫存能見度時,將根據元件實體量值的排程變更為定義的計算量值提供 ATP 值。 在排程量值部分,選擇工具列上的 新建現有變更排程設定 V2以為 ATP 新增新的計算結合量值。 計算量值是您要用來尋找目前可用現有數量的量值。 有關如何建立計算量值的資訊,請參閱計算量值

    重要

    預設 ATP 計算公式僅供參考。 您可以修改和新增其他資料來源和實體量值,以為您的業務設定正確的 ATP 計算。

  8. ATP 索引集設定部分,設定您的 ATP 索引。 ATP 索引類似產品索引階層,可讓您依特定維度將查詢結果分組。 例如,如果您將 ColorIdSizeId 設定為 ATP 索引集,則查詢結果將按顏色和尺寸分組。 您可以有多個索引集。

    重要

    預設的 ColorIdSizeId 索引僅供參考。 您可以移除維度並新增其他維度。

  9. 選取 儲存

  10. 配置完所有必要設定後,請選取瀏覽窗格上管理設定底下的更新設定

如需詳細資訊,請參閱完成並更新設定

在 UI 版本 1 中開啟並設定現有變更排程和 ATP

本部分適用於使用庫存能見度 UI 版本 1 時,。

請依照下列步驟開啟 Power Apps 中的現有變更時間表功能並配置 ATP 設定。

  1. 登入 Power Apps,並開啟庫存能見度應用程式。

  2. 開啟設定頁面。

  3. 功能管理索引標籤上,開啟 Available to promise 功能。

  4. 選取 ATP 設定索引標籤。

  5. 當您查詢庫存能見度時,它將提供一個結果,其中包括您在此處新增的每個 ATP 計算量值。 選取新增以新增新的 ATP 計算量值。

  6. 設定下列欄位:

    • 數據源 –選擇與計算度量關聯的數據源。
    • 計算度量 –選擇與所選資料來源關聯的計算度量,以及要用於查找目前可用的現有數量。
    • 計劃期間– 輸入使用所選計算度量時使用者可以查看和提交計劃現有更改的天數。 查詢庫存資訊的使用者將獲得從當前日期開始定義的此區段中,每一天的現有數量、排程的現有變更以及 ATP。 選取 1 到 7 之間的整數。

    重要

    排程期間包括當前日期。 因此,使用者可以安排從當前日期 (提交變更之日) 到未來 (排程週期–1) 天內的任何時間進行現有更改。

  7. 選取 儲存

  8. 重複第 5 步到第 7 步,直到您為 ATP 新增了所有您所需的計算量值。

  9. 完成所有必需設定的設定後,選取更新設定

現有變更排程和 ATP 計算如何運作

現有變更排程會建立排程的現有變更的預計日期和數量。 您可以提交現有變更排程到庫存能見度,前提是其間內的日期使經由排程期間設定定義 (請參閱本文中的啟用和設定功能部分)。 查詢庫存資訊的使用者將獲得該區段中每一天的現有數量、排程的現有變更以及 ATP。

排程的變更最初未提交,因此不會影響系統中的實際現有數量。 若要提交變更,您必須提交現有變更事件,更新實際可用現有數量。 然後,您必須透過提交符合負數量的現有變更排程來還原排程的變更。

例如,您訂購了 10 台自行車並預計明天到達。 因此,您提交了一份現有變更排程,其入庫數量為 10,日期為明天。 當訂單第二天到達時,您將自行車新增到您的實際現有庫存中。 然後,您必須將變更提交至系統以更新實際現有數量。 若要提交變更,您要提交入庫數量為 10 的現有變更事件。 然後,您需透過提交入庫數量為 -10 的現有變更排程來還原排程的變更。

當您查詢庫存能見度以了解現有數量和 ATP 數量時,它會傳回排程期間內每一天的以下資訊:

  • 日期 –結果適用的日期。 時區是國際標準時間
  • 現有數量 –指定日期的實際現有數量。 此計算是根據為庫存能見度設定的 ATP 計算量值進行的。
  • 計劃供應 –截至指定日期尚未實際可用於立即消耗或裝運的所有計劃入庫數量的總和。
  • 計劃需求 –截至指定日期尚未消耗或裝運的所有計劃出庫數量的總和。
  • ATP 數量 –從指定日期到計劃期間結束可用的最小預計現有數量。 此數量包括所有排程的數量調整。 它是當前日期可以承諾交付或該日消費的最大數量。

例如,如果當前日期是 2022 年 2 月 1 日,排定期間為 7,則使用者可以提交預計在 2022 年 2 月 1 日到 2 月 7 日期間發生的排程現有變更。 在這種情況下,例如 2 月 3 日的 ATP 數量就是根據當天的現有數量和 2 月 3 日至 2 月 7 日的排程數量計算的。

範例

以下範例顯示一系列排程數量變更如何影響庫存能見度報告的現有數量和 ATP 數量。 它還展示如何提交排程變更、已提交的排程變更如何影響結果。以及如果不提交排程變更會發生什麼情況。

此範例中的結果顯示預計現有值。 該值包含出於說明目的的所有排程更新,但在您查詢庫存能見度時,實際上並不會報告。

  1. 在 Power Apps 中的庫存能見度應用程式 ATP 設定 頁面上,為您的系統配置了以下設定:

    • 計劃度量 –此處添加了名為 現有 量的計算度量。 其計算方式為現有 = 供應需求
    • 最大計劃期間(天) –值設置為 7
    • ATP 索引集配置 此處添加了 ColorIdSizeId
  2. 也適用於以下條件:

    • 當前日期為 2022 年 2 月 1 日。
    • 當前現有庫存數量為 20。
  3. 對於當前日期 (2022 年 2 月 1 日) ,您向庫存能見度提交了排程需求數量 3。 因此,預期的現有庫存數量為 17。 下表顯示結果。

    日期 現有 排程的供應 排程的需求 預計的現有 ATP
    2022-02-01 20 3 17 17
    2022-02-02 20 17 17
    2022-02-03 20 17 17
    2022-02-04 20 17 17
    2022-02-05 20 17 17
    2022-02-06 20 17 17
    2022-02-07 20 17 17
  4. 在當前日期 (2022 年 2 月 1 日),您提交了 2022 年 2 月 3 日的排程供應數量 10 個。 下表顯示結果。

    日期 現有 排程的供應 排程的需求 預計的現有 ATP
    2022-02-01 20 3 17 17
    2022-02-02 20 17 17
    2022-02-03 20 10 27 27
    2022-02-04 20 27 27
    2022-02-05 20 27 27
    2022-02-06 20 27 27
    2022-02-07 20 27 27
  5. 在當前日期 (2022 年 2 月 1 日),您提交了以下排程數量變更:

    • 2022 年 2 月 4 日的需求量為 15
    • 2022 年 2 月 5 日的供應量為 1
    • 2022 年 2 月 6 日的供應量為 3

    下表顯示結果。

    日期 現有 排程的供應 排程的需求 預計的現有 ATP
    2022-02-01 20 3 17 12
    2022-02-02 20 17 12
    2022-02-03 20 10 27 12
    2022-02-04 20 15 12 12
    2022-02-05 20 1 13 13
    2022-02-06 20 3 16 16
    2022-02-07 20 16 16
  6. 在當前日期 (2022 年 2 月 1 日),您裝運了排程需求數量為 3。 因此,您必須提交此變更,以便將其反映在您的實際現有數量中。 若要提交變更,您要提交出庫數量為 3 的現有變更事件。 然後,您需透過提交出庫數量為 -3 的現有變更排程來還原排程的變更。 下表顯示結果。

    日期 現有 排程的供應 排程的需求 預計的現有 ATP
    2022-02-01 17 0 17 12
    2022-02-02 17 17 12
    2022-02-03 17 10 27 12
    2022-02-04 17 15 12 12
    2022-02-05 17 1 13 13
    2022-02-06 17 3 16 16
    2022-02-07 17 16 16
  7. 第二天 (2022 年 2 月 2 日),排定週期向前移動一天。 下表顯示結果。

    日期 現有 排程的供應 排程的需求 預計的現有 ATP
    2022-02-02 17 17 12
    2022-02-03 17 10 27 12
    2022-02-04 17 15 12 12
    2022-02-05 17 1 13 13
    2022-02-06 17 3 16 16
    2022-02-07 17 16 16
    2022-02-08 17 16 16
  8. 然而兩天後 (2022 年 2 月 4 日),原定 2 月 3 日供應的 10 台仍未到貨。 下表顯示結果。

    日期 現有 排程的供應 排程的需求 預計的現有 ATP
    2022-02-04 17 15 2 2
    2022-02-05 17 1 3 3
    2022-02-06 17 3 6 6
    2022-02-07 17 6 6
    2022-02-08 17 6 6
    2022-02-09 17 6 6
    2022-02-10 17 6 6

    如您所見,排程的 (但未提交的) 現有數量變更不會影響實際現有數量。

透過 API 提交變更排程、變更事件和 ATP 查詢

您可以使用下列應用程式介面 (API) URL 來提交現有變更排程、變更事件和查詢。

路徑 方法 說明
/api/environment/{environmentId}/onhand/changeschedule POST 建立一個已排程的現有變更。
/api/environment/{environmentId}/onhand/changeschedule/bulk POST 創建多個已排程的現有變更。
/api/environment/{environmentId}/onhand POST 建立一個現有變更事件。
/api/environment/{environmentId}/onhand/bulk POST 建立多個變更事件。
/api/environment/{environmentId}/onhand/indexquery POST 使用 POST 方式查詢。
/api/environment/{environmentId}/onhand GET 使用 GET 方式查詢。
/api/environment/{environmentId}/onhand/exactquery POST 使用 POST 方式精確查詢。

如需詳細資訊,請參閱庫存能見度公用 API

建立一個現有變更排程

通過向相關庫存能見度服務 URL 提交 POST 請求來創建現有更改計劃。 您也可以提交批次要求。

只有當排程日期介於當前日期和當前排定期間結束之間時,才能建立現有變更排程。 日期時間格式應為 年-月-日 (例如 2022-02-01)。 時間格式必須準確算到當天。

此 API 建立了單一現有變更排程。

Path:
    /api/environment/{environmentId}/onhand/changeschedule
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    {
        id: string,
        organizationId: string,
        productId: string,
        dimensionDataSource: string, # optional
        dimensions: {
            [key:string]: string,
        },
        quantitiesByDate: {
            [datetime:datetime]: {
                [dataSourceName:string]: {
                    [key:string]: number,
                },
            },
        },
    }

以下範例顯示無 dimensionDataSource 的樣本本文內容。

{
    "id": "id-bike-0001",
    "organizationId": "usmf",
    "productId": "Bike",
    "dimensions": {
        "SiteId": "1",
        "LocationId": "11",
        "ColorId": "Red",
        "SizeId": "Small"
    },
    "quantitiesByDate": {
        "2022-02-01": {
            "pos": {
                "inbound": 10
            }
        }
    }
}

建立多個現有變更排程

此 API 可同時建立多筆記錄。 此 API 與單一事件 API 唯一不同處為 PathBody 的值。 對於此 API,Body 提供了記錄陣列。 記錄數的上限為 512。 因此,現有變更排程批次 API 一次最多可以支援 512 個排程變更。

Path:
    /api/environment/{environmentId}/onhand/changeschedule/bulk
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    [
        {
            id: string,
            organizationId: string,
            productId: string,
            dimensionDataSource: string,
            dimensions: {
                [key:string]: string,
            },
            quantityDataSource: string, # optional
            quantitiesByDate: {
                [datetime:datetime]: {
                    [dataSourceName:string]: {
                        [key:string]: number,
                    },
                },
            },
        },
        ...
    ]

以下範例顯示樣本本文內容。

[
    {
        "id": "id-bike-0001",
        "organizationId": "usmf",
        "productId": "Bike",
        "dimensions": {
            "SiteId": "1",
            "LocationId": "11",
            "ColorId": "Red",
            "SizeId": "Small"
        },
        "quantitiesByDate": {
            "2022-02-01": {
                "pos": {
                    "inbound": 10
                }
            }
        }
    },
    {
        "id": "id-car-0002",
        "organizationId": "usmf",
        "productId": "Car",
        "dimensions": {
            "SiteId": "1",
            "LocationId": "11",
            "ColorId": "Red",
            "SizeId": "Small"
        },
        "quantitiesByDate": {
            "2022-02-05": {
                "pos": {
                    "outbound": 10
                }
            }
        }
    }
]

建立現有變更事件

現有變更事件是通過向相關庫存能見度服務 URL 提交 POST 請求來實現的 (請參閱通過 API 提交變更計劃、變更事件和 ATP 查詢部分的 開頭)。

附註

現有變更事件並非 ATP 功能所獨有,而是標準庫存能見度 API 的一部分。 包含此範例是因為當您使用 ATP 時,事件是相關的。 現有變更事件類似於現有變更保留,但事件訊息必須傳送到不同的 API URL,且事件在訊息本文中使用 quantities 而不是 quantityByDate 。 有關庫存能見度 API 的現有變更事件和其他功能的更多資訊,請參閱庫存能見度公用 API

以下範例顯示包含單一現有變更事件的要求本文。

{
    "id": "id-bike-0001",
    "organizationId": "usmf",
    "productId": "Bike",
    "dimensions": {
        "SiteId": "1",
        "LocationId": "11",
        "SizeId": "Big",
        "ColorId": "Red"
    },
    "quantities": {
        "pos": {
            "inbound": 10.0
        }
    }
}

查詢排定的現有變更和 ATP 結果

您可以透過提交 POST 要求或 GET 要求到適當的 API URL來查詢排定的現有變更和 ATP 結果 (請參閱透過 API 提交變更排程、變更事件和 ATP 查詢部分)。

在您的要求中,如果您想查詢排定的現有變更和 ATP 結果,請將 QueryATP 設為 true。 根據預設,查詢會傳回今天以來的所有 ATP 相關資料。 您可以指定 ATPFromDateATPToDate 以縮小結果範圍。 (「結束」和「開始」日期只是篩選結果。它們不會影響 ATP 的計算方式。)

  • 如果您使用 GET 方法提交要求,請在 URL 中設定該參數。
  • 如果您使用 POST 方法提交要求,請在要求本文中設定該參數。

附註

無論 returnNegative 參數在要求正文中是設為 truefalse,當您查詢排定的現有變更和 ATP 結果時,結果都將包含負值。 將包括這些負值,因為如果僅排程需求訂單,或者如果供應數量小於需求數量,則排定的現有變更數量將為負。 如果未包括負值,結果將令人困惑。 有關此選項及其如何套用在其他類型查詢的更多信資訊,請參閱庫存能見度公用 API

使用 POST 方式查詢

Path:
    /api/environment/{environmentId}/onhand/indexquery
Method:
    Post
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Body:
    {
        dimensionDataSource: string, # Optional
        filters: {
            organizationId: string[],
            productId: string[],
            siteId: string[],
            locationId: string[],
            [dimensionKey:string]: string[],
        },
        groupByValues: string[],
        returnNegative: boolean,
    }

以下範例顯示如何使用 POST 方法建立可提交到庫存能見度的索引查詢要求本文。

{
    // OnHand Index Query fields
    "filters": {
        "organizationId": ["usmf"],
        "productId": ["Bike"],
        "SiteId": ["1"],
        "LocationId": ["11"]
    },
    "groupByValues": ["ColorId", "SizeId"],
    "returnNegative": true,

    // ATP related fields
    "QueryATP":true,
    "ATPFromDate": "2022-02-01",
    "ATPToDate": "2022-02-10",
}

使用 GET 方式查詢

Path:
    /api/environment/{environmentId}/onhand
Method:
    Get
Headers:
    Api-Version="1.0"
    Authorization="Bearer $access_token"
ContentType:
    application/json
Query(Url Parameters):
    groupBy
    returnNegative
    [Filters]

以下範例顯示如何建立索引查詢要求 URL 作為 GET 要求。

https://inventoryservice.{RegionShortName}-il301.gateway.prod.island.powerapps.com/api/environment/{EnvironmentId}/onhand?organizationId=usmf&productId=Bike&SiteId=1&LocationId=11&groupBy=ColorId,SizeId&returnNegative=true&QueryATP=true&ATPToDate=2022-02-01&ATPToDate=2022-02-10

GET 請求的結果與上一示例中的請求結果 POST 完全相同。

使用 POST 方式精確查詢

若要設定精確查詢,請將 ATP 相關欄位新增至查詢本文。 如需詳細資訊,請參閱使用 post 方法精確查詢

{
    // Exact query fields
    // ...

    // ATP related fields
    "QueryATP":true,
    "ATPFromDate": "2022-02-01",
    "ATPToDate": "2022-02-10",
}

查詢結果範例

前面的任何查詢範例都可能產生以下回覆。 對於本範例,系統會用以下設定來設定:

  • ATP 計算度量:iv.現有量 = 位置.入站–位置.出站
  • 計劃週期:7

此為一個回覆本文的範例。

[
    {
        "quantitiesByDate": {
            "2022-02-02T00:00:00": {
                "pos": {
                    "outbound": 5,
                    "inbound": 0,
                },
                "iv": {
                    "onhand": -5,
                },
            },
            "2022-02-06T00:00:00": {
                "pos": {
                    "inbound": 7,
                    "outbound": 0,
                },
                "iv": {
                    "onhand": 7,
                },
            }
        },
        "atpQuantities": {
            "2022-02-01T00:00:00Z": {
                "iv": {
                    "onhand": 5.0
                }
            },
            "2022-02-02T00:00:00Z": {
                "iv": {
                    "onhand": 5.0
                }
            },
            "2022-02-03T00:00:00Z": {
                "iv": {
                    "onhand": 5.0
                }
            },
            "2022-02-04T00:00:00Z": {
                "iv": {
                    "onhand": 5.0
                }
            },
            "2022-02-05T00:00:00Z": {
                "iv": {
                    "onhand": 5.0
                }
            },
            "2022-02-06T00:00:00Z": {
                "iv": {
                    "onhand": 12.0
                }
            },
            "2022-02-07T00:00:00Z": {
                "iv": {
                    "onhand": 12.0
                }
            }
        },
        "productId": "Bike ",
        "dimensions": {
            "ColorId": "Red",
            "SizeId": "Big",
            "siteid": "1",
            "locationid": "11"
        },
        "quantities": {
            "pos": {
                "inbound": 10.0,
                "outbound": 0,
            },
            "iv": {
                "onhand": 10.0,
            }
        }
    }
]