テーブル内のデータの反映

お世話になります。
サービス書アプリ、複合機修理アプリがあり
在庫管理アプリにデータを反映させます。

サービス書アプリ、複合機修理アプリには部品コードというテーブルがあり
サービス書では管理No(在庫管理の管理Noを紐づけ)でルックアップ、
複合機修理アプリでは在庫管理No(前述同様紐づけ)でルックアップし
品番、品名の他、出庫基(在庫管理のplace)をコピーしています。
入力修正という複数選択フィールドも設け使用せずにチェックを入れれば基本在庫数が1になるようにしています。下記にあたります。
基本在庫数という計算フィールドは
IF(CONTAINS(入力修正, “使用せず”), 1, IF(戻り可能性=“なし”, 0, 1))
この動きにしています。
数量フィールドもありこちらは初期値で1が入るようにしておりルックアップにはしていません。
現在、在庫管理への反映は出庫基→placeフィールドへ反映されないほかはうまくいっていると思うのですが、ここの反映がされません。placeは各店舗などの名前と出庫済みが入っているドロップダウンで数が0になれば出庫済みになるJSを組んでいます。
要はテーブルに入れて入力して保存すれば一度目は良いのですが、修正をするときに元の値に戻すことが目的です。
ご教授頂けますと幸いです。特にエラーは出ないのでコードを貼り付けます。

(function() {
“use strict”;

const SERVICE_DOC_APP_ID = 10; 
const REPAIR_APP_ID = 11; 
const INVENTORY_APP_ID = 9; 

kintone.events.on(["app.record.create.submit", "app.record.edit.submit", "app.record.delete.submit"], async function(event) {
    const appId = kintone.app.getId();
    console.log("appId:", appId);

    // サービス書アプリまたは複合機修理アプリの場合のみ処理を行う
    if (![SERVICE_DOC_APP_ID, REPAIR_APP_ID].includes(appId)) return event;

    const record = event.record;
    const parts = record["部品コード"] ? record["部品コード"].value : [];
    console.log("部品コード:", parts);

    const managementNos = parts.map(row => row.value?.["管理No"]?.value).filter(Boolean);

    // レコードが削除された場合、在庫管理から対応するデータも削除
    if (event.type === "app.record.delete.submit") {
        try {
            for (const managementNo of managementNos) {
                const query = `管理No = "${managementNo}"`;
                const res = await kintone.api(kintone.api.url("/k/v1/records", true), "GET", {
                    app: INVENTORY_APP_ID,
                    query: query
                });
                
                for (const inventoryRecord of res.records) {
                    await kintone.api(kintone.api.url("/k/v1/records", true), "DELETE", {
                        app: INVENTORY_APP_ID,
                        ids: [inventoryRecord.$id.value]
                    });
                }
            }
        } catch (err) {
            console.error("Error deleting inventory records:", err);
        }
        return event;
    }

    if (!parts || parts.length === 0) return event;

    const updates = [];
    for (const row of parts) {
        if (!row.value) continue;

        // 複合機修理アプリの場合
        const repairInventoryManagementNo = row.value["在庫管理No"]?.value || row.value["管理No"]?.value;
        let quantity = Number(row.value["数量"]?.value) || 0;
        const baseStock = Number(row.value["基本在庫数"]?.value) || 0;

        // 「使用せず」のチェックが入っている場合、数量を1にする
        const isNotUsed = row.value["入力修正"]?.value?.includes("使用せず");
        if (isNotUsed) {
            quantity = 1;  // 数量を1に設定
        }

        // 複合機修理アプリの不動No,仕入管理No
        const immovableNo = record["不動No"]?.value || ""; // 複合機修理アプリの不動No
        const purchaseManagementNo = record["仕入管理No"]?.value || ""; // 複合機修理アプリの仕入管理No
        
        // サービス書アプリの場合
        const serviceDocManagementNo = record["サービス書管理No"]?.value || ""; // サービス書アプリのサービス書管理No

        const visitOrWorkDate = appId === SERVICE_DOC_APP_ID ? record["訪問日"]?.value || "" : record["作業日"]?.value || "";
        const repairManagementNo = record["複合機修理管理No"]?.value || "";

        // 出庫基フィールドを取得してplaceに反映
        const placeField = appId === SERVICE_DOC_APP_ID ? record["出庫基"]?.value : record["出庫基"]?.value;  // フィールドコード「出庫基」を取得
        const place = placeField || "";  // 出庫基が空なら空文字を設定

        // 在庫管理に必要なデータを設定
        updates.push({
            repairInventoryManagementNo,
            quantity,
            baseStock,
            immovableNo,          // 複合機修理アプリの不動Noを反映
            purchaseManagementNo, // 複合機修理アプリの仕入管理Noを反映
            serviceDocManagementNo,  // サービス書管理Noを反映
            visitOrWorkDate,
            repairManagementNo,
            place // 出庫基の値を反映
        });
    }

    if (updates.length === 0) return event;

    try {
        for (const update of updates) {
            const query = `管理No = "${update.repairInventoryManagementNo}"`;
            const res = await kintone.api(kintone.api.url("/k/v1/records", true), "GET", {
                app: INVENTORY_APP_ID,
                query: query
            });

            if (res.records.length === 0) continue;

            const inventoryRecord = res.records[0];
            const recordId = inventoryRecord.$id.value;
            const currentQuantity = Number(inventoryRecord["数"]?.value) || 0; // 現在の「数」を取得
            const newQuantity = update.quantity - currentQuantity;  // 数量から「数」を引く

            const newPlace = newQuantity === 0 ? "出庫済み" : (inventoryRecord["place"]?.value || "未定");

            console.log("サービス書管理No:", update.serviceDocManagementNo, "不動No:", update.immovableNo, "仕入管理No:", update.purchaseManagementNo);

            // 在庫管理レコードの更新
            await kintone.api(kintone.api.url("/k/v1/record", true), "PUT", {
                app: INVENTORY_APP_ID,
                id: recordId,
                record: {
                    "数": { "value": newQuantity },  // 「数量」から在庫管理の「数」を引いた値を反映
                    "基本在庫数": { "value": update.baseStock },
                    "place": { "value": update.place || newPlace }, // 出庫基または既存のplaceを反映
                    "出庫日1": { "value": update.visitOrWorkDate },
                    "サービス書管理No": { "value": update.serviceDocManagementNo },  // サービス書管理Noを反映
                    "不動No": { "value": update.immovableNo },  // 複合機修理アプリの不動Noを反映
                    "仕入管理No": { "value": update.purchaseManagementNo },  // 複合機修理アプリの仕入管理Noを反映
                    "複合機修理管理No": { "value": update.repairManagementNo }
                }
            });
        }
    } catch (err) {
        console.error("Error updating inventory records:", err);
    }

    return event;
});

})();

何を実現したいのかを書きましょう

お世話になります。
サービス書アプリ、複合機修理アプリがあり
在庫管理アプリにデータを販得させます。

発生した問題やエラーメッセージを具体的に書きましょう

サービス書アプリ、複合機修理アプリには部品コードというテーブルがあり
サービス書では管理No(在庫管理の管理Noを紐づけ)でルックアップ、
複合機修理アプリでは在庫管理No(前述同様紐づけ)でルックアップし
品番、品名の他、出庫基(在庫管理のplace)をコピーしています。
入力修正という複数選択フィールドも設け使用せずにチェックを入れれば基本在庫数が1になるようにしています。下記にあたります。
基本在庫数という計算フィールドは
IF(CONTAINS(入力修正, “使用せず”), 1, IF(戻り可能性=“なし”, 0, 1))
この動きにしています。
数量フィールドもありこちらは初期値で1が入るようにしておりルックアップにはしていません。
現在、在庫管理への反映は出庫基→placeフィールドへ反映されないほかはうまくいっていると思うのですが、ここの反映がされません。placeは各店舗などの名前と出庫済みが入っているドロップダウンで数が0になれば出庫済みになるJSを組んでいます。
要はテーブルに入れて入力して保存すれば一度目は良いのですが、修正をするときに元の値に戻すことが目的です。
ご教授頂けますと幸いです。特にエラーは出ないのでコードを貼り付けます。

実行したコードをコピー&ペーストしましょう

(function() {
“use strict”;

const SERVICE_DOC_APP_ID = 10; 
const REPAIR_APP_ID = 11; 
const INVENTORY_APP_ID = 9; 

kintone.events.on(["app.record.create.submit", "app.record.edit.submit", "app.record.delete.submit"], async function(event) {
    const appId = kintone.app.getId();
    console.log("appId:", appId);

    // サービス書アプリまたは複合機修理アプリの場合のみ処理を行う
    if (![SERVICE_DOC_APP_ID, REPAIR_APP_ID].includes(appId)) return event;

    const record = event.record;
    const parts = record["部品コード"] ? record["部品コード"].value : [];
    console.log("部品コード:", parts);

    const managementNos = parts.map(row => row.value?.["管理No"]?.value).filter(Boolean);

    // レコードが削除された場合、在庫管理から対応するデータも削除
    if (event.type === "app.record.delete.submit") {
        try {
            for (const managementNo of managementNos) {
                const query = `管理No = "${managementNo}"`;
                const res = await kintone.api(kintone.api.url("/k/v1/records", true), "GET", {
                    app: INVENTORY_APP_ID,
                    query: query
                });
                
                for (const inventoryRecord of res.records) {
                    await kintone.api(kintone.api.url("/k/v1/records", true), "DELETE", {
                        app: INVENTORY_APP_ID,
                        ids: [inventoryRecord.$id.value]
                    });
                }
            }
        } catch (err) {
            console.error("Error deleting inventory records:", err);
        }
        return event;
    }

    if (!parts || parts.length === 0) return event;

    const updates = [];
    for (const row of parts) {
        if (!row.value) continue;

        // 複合機修理アプリの場合
        const repairInventoryManagementNo = row.value["在庫管理No"]?.value || row.value["管理No"]?.value;
        let quantity = Number(row.value["数量"]?.value) || 0;
        const baseStock = Number(row.value["基本在庫数"]?.value) || 0;

        // 「使用せず」のチェックが入っている場合、数量を1にする
        const isNotUsed = row.value["入力修正"]?.value?.includes("使用せず");
        if (isNotUsed) {
            quantity = 1;  // 数量を1に設定
        }

        // 複合機修理アプリの不動No,仕入管理No
        const immovableNo = record["不動No"]?.value || ""; // 複合機修理アプリの不動No
        const purchaseManagementNo = record["仕入管理No"]?.value || ""; // 複合機修理アプリの仕入管理No
        
        // サービス書アプリの場合
        const serviceDocManagementNo = record["サービス書管理No"]?.value || ""; // サービス書アプリのサービス書管理No

        const visitOrWorkDate = appId === SERVICE_DOC_APP_ID ? record["訪問日"]?.value || "" : record["作業日"]?.value || "";
        const repairManagementNo = record["複合機修理管理No"]?.value || "";

        // 出庫基フィールドを取得してplaceに反映
        const placeField = appId === SERVICE_DOC_APP_ID ? record["出庫基"]?.value : record["出庫基"]?.value;  // フィールドコード「出庫基」を取得
        const place = placeField || "";  // 出庫基が空なら空文字を設定

        // 在庫管理に必要なデータを設定
        updates.push({
            repairInventoryManagementNo,
            quantity,
            baseStock,
            immovableNo,          // 複合機修理アプリの不動Noを反映
            purchaseManagementNo, // 複合機修理アプリの仕入管理Noを反映
            serviceDocManagementNo,  // サービス書管理Noを反映
            visitOrWorkDate,
            repairManagementNo,
            place // 出庫基の値を反映
        });
    }

    if (updates.length === 0) return event;

    try {
        for (const update of updates) {
            const query = `管理No = "${update.repairInventoryManagementNo}"`;
            const res = await kintone.api(kintone.api.url("/k/v1/records", true), "GET", {
                app: INVENTORY_APP_ID,
                query: query
            });

            if (res.records.length === 0) continue;

            const inventoryRecord = res.records[0];
            const recordId = inventoryRecord.$id.value;
            const currentQuantity = Number(inventoryRecord["数"]?.value) || 0; // 現在の「数」を取得
            const newQuantity = update.quantity - currentQuantity;  // 数量から「数」を引く

            const newPlace = newQuantity === 0 ? "出庫済み" : (inventoryRecord["place"]?.value || "未定");

            console.log("サービス書管理No:", update.serviceDocManagementNo, "不動No:", update.immovableNo, "仕入管理No:", update.purchaseManagementNo);

            // 在庫管理レコードの更新
            await kintone.api(kintone.api.url("/k/v1/record", true), "PUT", {
                app: INVENTORY_APP_ID,
                id: recordId,
                record: {
                    "数": { "value": newQuantity },  // 「数量」から在庫管理の「数」を引いた値を反映
                    "基本在庫数": { "value": update.baseStock },
                    "place": { "value": update.place || newPlace }, // 出庫基または既存のplaceを反映
                    "出庫日1": { "value": update.visitOrWorkDate },
                    "サービス書管理No": { "value": update.serviceDocManagementNo },  // サービス書管理Noを反映
                    "不動No": { "value": update.immovableNo },  // 複合機修理アプリの不動Noを反映
                    "仕入管理No": { "value": update.purchaseManagementNo },  // 複合機修理アプリの仕入管理Noを反映
                    "複合機修理管理No": { "value": update.repairManagementNo }
                }
            });
        }
    } catch (err) {
        console.error("Error updating inventory records:", err);
    }

    return event;
});

})();

続き

            // 在庫管理レコードの更新
            await kintone.api(kintone.api.url("/k/v1/record", true), "PUT", {
                app: INVENTORY_APP_ID,
                id: recordId,
                record: {
                    "数": { "value": newQuantity },  // 「数量」から在庫管理の「数」を引いた値を反映
                    "基本在庫数": { "value": update.baseStock },
                    "place": { "value": update.place || newPlace }, // 出庫基または既存のplaceを反映
                    "出庫日1": { "value": update.visitOrWorkDate },
                    "サービス書管理No": { "value": update.serviceDocManagementNo },  // サービス書管理Noを反映
                    "不動No": { "value": update.immovableNo },  // 複合機修理アプリの不動Noを反映
                    "仕入管理No": { "value": update.purchaseManagementNo },  // 複合機修理アプリの仕入管理Noを反映
                    "複合機修理管理No": { "value": update.repairManagementNo }
                }
            });
        }
    } catch (err) {
        console.error("Error updating inventory records:", err);
    }

    return event;
});

})();



すみません、コードは読んでいないのですが、
JavaScriptと自動計算を一緒に使うとどちらが先に動くんだ!?みたいになって挙動がおかしくなる気がします:thinking:

自動計算しているところをJavaScriptで書き換えてみるとかいかがでしょうか?(changeイベントのときだけだったかも?)

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。