コンテンツにスキップ

NetSuite SuiteQL クエリの例

NetSuite 接続が動作したら、このページで実際のレポートをすばやく作成できます。仕訳エントリ、総勘定元帳、試算表、損益計算書、貸借対照表、未回収の売掛金、未処理の受注、手持ち在庫など、多くの取得の出発点となる財務データと業務データ向けの SuiteQL をコピー&ペーストで使えます。

各レシピは出発点です。実行し、NetSuite で信頼しているレポートと数値を照合してから、フィルターと列をお使いのアカウントに合わせて調整してください。

  1. ワークフローに REST リクエストステップを追加し、接続に NetSuite 接続を、メソッドに POST を、エンドポイントに /services/rest/query/v1/suiteql を設定します。

  2. クエリを、単一の JSON オブジェクトとして本文に記述します。クエリのテキストは q に入れます。

    {"q": "SELECT id FROM account WHERE ROWNUM <= 5"}

    以下のレシピは、分かりやすいように読みやすい SQL として示しています。ステップに貼り付けるときは、{"q": "…your query…"} の形式で囲んでください。

  3. レスポンスタブで、出力先をテーブルのままにし、各列の型を設定します(各レシピの下の「Column types」の注記を参照)。SuiteQL はすべてをテキストとして返すため、型を設定することで、金額が合計でき、日付が並べ替えられるようになります。

  4. テストリクエストを送信をクリックして実行を確認し、ステップを実行します。

すべての財務レシピに共通する規則がいくつかあります。

  • transactionaccountingline(TAL)が GL の正です。 転記金額、借方、貸方は transactionline ではなく、ここにあります。すべての財務レシピは、これを経由して結合します。
  • 転記エントリのみ: tal.posting = 'T' で、転記されない明細を除外します。
  • プライマリ会計ブック: tal.accountingbook = 1。NetSuite のマルチブックを使用している場合にのみ変更してください。
  • 金額の符号: NetSuite は転記金額を借方がプラス、貸方がマイナスで保持します。そのため、収益(貸方)は amount がマイナスになります。損益計算書と貸借対照表のレシピでは、「収益がプラス」という自然な表示が望ましい箇所で符号を反転しており、それぞれに明記しています。
  • すべてのページングクエリには、決定的な ORDER BY が必要です。 そうでないと、ページをまたいで行が知らないうちに重複したり、欠落したりします。
  • クエリ内で日付を整形します: TO_CHAR(t.trandate, 'YYYY-MM-DD')(そうしないと、SuiteQL はアカウントの表示形式で日付を返します)。これらの列には Date 型を設定します。

指定した期間の仕訳エントリのすべての転記明細を、勘定科目、借方、貸方とともに取得します。

SELECT
t.tranid AS entry_number,
TO_CHAR(t.trandate, 'YYYY-MM-DD') AS entry_date,
BUILTIN.DF(t.postingperiod) AS period,
a.acctnumber AS account_number,
BUILTIN.DF(tal.account) AS account_name,
tal.debit AS debit,
tal.credit AS credit,
tl.memo AS line_memo
FROM transaction t
JOIN transactionaccountingline tal ON tal.transaction = t.id
JOIN transactionline tl ON tl.transaction = tal.transaction
AND tl.id = tal.transactionline
JOIN account a ON a.id = tal.account
WHERE t.type = 'Journal'
AND tal.posting = 'T'
AND tal.accountingbook = 1
AND t.trandate BETWEEN TO_DATE('2026-01-01', 'YYYY-MM-DD')
AND TO_DATE('2026-01-31', 'YYYY-MM-DD')
ORDER BY t.tranid, tl.id

Column types: debit、credit → Currency、entry_date → Date、それ以外はすべて → Text。

type = 'Journal' フィルターを除いた同じ形式のクエリです。すべての取引タイプにわたるすべての転記明細が、その期間の総勘定元帳になります。

SELECT
TO_CHAR(t.trandate, 'YYYY-MM-DD') AS posting_date,
a.acctnumber AS account_number,
BUILTIN.DF(tal.account) AS account_name,
t.type AS transaction_type,
t.tranid AS document_number,
BUILTIN.DF(t.entity) AS name,
tal.amount AS amount,
tl.memo AS line_memo
FROM transactionaccountingline tal
JOIN transaction t ON t.id = tal.transaction
JOIN transactionline tl ON tl.transaction = tal.transaction
AND tl.id = tal.transactionline
JOIN account a ON a.id = tal.account
WHERE tal.posting = 'T'
AND tal.accountingbook = 1
AND t.trandate BETWEEN TO_DATE('2026-01-01', 'YYYY-MM-DD')
AND TO_DATE('2026-01-31', 'YYYY-MM-DD')
ORDER BY a.acctnumber, t.trandate, t.tranid, tl.id

Column types: amount → Currency、posting_date → Date、残りは → Text。amount は借方がプラス、貸方がマイナスです。

期間における各勘定科目の純増減です。帳簿が合っていれば、全勘定科目の合計はゼロになります。

SELECT
a.acctnumber AS account_number,
BUILTIN.DF(a.id) AS account_name,
a.accttype AS account_type,
SUM(tal.amount) AS balance
FROM transactionaccountingline tal
JOIN transaction t ON t.id = tal.transaction
JOIN account a ON a.id = tal.account
WHERE tal.posting = 'T'
AND tal.accountingbook = 1
AND t.trandate BETWEEN TO_DATE('2026-01-01', 'YYYY-MM-DD')
AND TO_DATE('2026-01-31', 'YYYY-MM-DD')
GROUP BY a.acctnumber, BUILTIN.DF(a.id), a.accttype
ORDER BY a.acctnumber

Column types: balance → Currency、残りは → Text。

試算表を収益と費用の勘定科目に限定し、符号を反転して、収益をプラス、費用をマイナスで表示します。これにより、この列の合計が純利益になります。

SELECT
a.accttype AS account_type,
a.acctnumber AS account_number,
BUILTIN.DF(a.id) AS account_name,
-SUM(tal.amount) AS amount
FROM transactionaccountingline tal
JOIN transaction t ON t.id = tal.transaction
JOIN account a ON a.id = tal.account
WHERE tal.posting = 'T'
AND tal.accountingbook = 1
AND a.accttype IN ('Income', 'COGS', 'Expense', 'OthIncome', 'OthExpense')
AND t.trandate BETWEEN TO_DATE('2026-01-01', 'YYYY-MM-DD')
AND TO_DATE('2026-01-31', 'YYYY-MM-DD')
GROUP BY a.accttype, a.acctnumber, BUILTIN.DF(a.id)
ORDER BY a.accttype, a.acctnumber

Column types: amount → Currency、残りは → Text。レポートでは account_type を、収益(Income、OthIncome)、COGS(COGS)、費用(Expense、OthExpense)にグループ化します。収益から COGS と費用を差し引いたものが純利益です。

指定した日付時点の累積勘定科目残高です。貸借対照表の勘定科目(損益計算書の勘定科目以外のすべて)について、開始から基準日までのすべての転記明細を集計します。

SELECT
a.accttype AS account_type,
a.acctnumber AS account_number,
BUILTIN.DF(a.id) AS account_name,
SUM(tal.amount) AS balance
FROM transactionaccountingline tal
JOIN transaction t ON t.id = tal.transaction
JOIN account a ON a.id = tal.account
WHERE tal.posting = 'T'
AND tal.accountingbook = 1
AND a.accttype NOT IN ('Income', 'COGS', 'Expense', 'OthIncome', 'OthExpense')
AND t.trandate <= TO_DATE('2026-01-31', 'YYYY-MM-DD')
GROUP BY a.accttype, a.acctnumber, BUILTIN.DF(a.id)
ORDER BY a.accttype, a.acctnumber

Column types: balance → Currency、残りは → Text。資産はプラス(借方が通常残高)、負債と資本はマイナス(貸方が通常残高)で表示されるため、表示用には符号を反転してください。資産は、負債と資本の合計に等しくなるはずです。

未回収売掛金(未払いの顧客請求書)

Section titled “未回収売掛金(未払いの顧客請求書)”

未払いの顧客請求書を、残高と支払期日とともに取得します。売掛金のエージングの基礎となります。

SELECT
t.tranid AS invoice_number,
BUILTIN.DF(t.entity) AS customer,
TO_CHAR(t.trandate, 'YYYY-MM-DD') AS invoice_date,
TO_CHAR(t.duedate, 'YYYY-MM-DD') AS due_date,
t.foreigntotal AS invoice_total,
t.foreignamountunpaid AS amount_unpaid
FROM transaction t
WHERE t.type = 'CustInvc'
AND t.foreignamountunpaid <> 0
ORDER BY t.tranid

Column types: invoice_total、amount_unpaid → Currency、invoice_date、due_date → Date、残りは → Text。エージングのバケットは、後続のステップで due_date から計算します。

まだ完全には処理されていない受注を、顧客別に取得します。

SELECT
t.tranid AS order_number,
BUILTIN.DF(t.entity) AS customer,
TO_CHAR(t.trandate, 'YYYY-MM-DD') AS order_date,
BUILTIN.DF(t.status) AS status,
t.foreigntotal AS order_total
FROM transaction t
WHERE t.type = 'SalesOrd'
AND t.status IN ('SalesOrd:B', 'SalesOrd:D', 'SalesOrd:E')
ORDER BY t.tranid

Column types: order_total → Currency、order_date → Date、残りは → Text。SalesOrd:* のステータスコード(出荷待ち、一部出荷済み、請求待ち)はアカウントによって異なります。「未処理」を意味するコードを確認するか、ステータスフィルターを外して後続でフィルターしてください。

入荷待ちまたは請求待ちの発注を、仕入先別に取得します。

SELECT
t.tranid AS po_number,
BUILTIN.DF(t.entity) AS vendor,
TO_CHAR(t.trandate, 'YYYY-MM-DD') AS po_date,
BUILTIN.DF(t.status) AS status,
t.foreigntotal AS po_total
FROM transaction t
WHERE t.type = 'PurchOrd'
AND t.status IN ('PurchOrd:B', 'PurchOrd:D', 'PurchOrd:E', 'PurchOrd:F')
ORDER BY t.tranid

Column types: po_total → Currency、po_date → Date、残りは → Text。受注の場合と同様に、お使いのアカウントで「未処理」を意味する PurchOrd:* ステータスコードを確認してください。

在庫アイテムの、全社の手持ち数量と利用可能数量です。

SELECT
i.itemid AS item,
BUILTIN.DF(i.id) AS description,
i.quantityonhand AS on_hand,
i.quantityavailable AS available
FROM item i
WHERE i.itemtype = 'InvtPart'
AND i.isinactive = 'F'
ORDER BY i.itemid

Column types: on_hand、available → Decimal、残りは → Text。これらは全社の合計です。ロケーション別の数量は NetSuite の在庫ロケーションデータから取得しますが、これは複数ロケーション在庫機能に依存します。お使いのアカウントで何が公開されているかを確認してください。

アカウントに合わせて調整する

Section titled “アカウントに合わせて調整する”
  • テスト中は範囲を限定します。 AND ROWNUM <= 100(または狭い日付範囲)を追加して、最初の実行がすぐに返るようにし、本番の取得では削除します。
  • 誤った数値は、コネクタではなくクエリまでさかのぼって調べます。 変換エラーには列と値が示されます。合計が一致しない場合は、ほぼ間違いなく子会社/通貨の範囲、または転記/期間のフィルターが原因です。まずそれらを確認してください。
  • すべての取得はテーブル全体の置き換えです。 スケジュールされた実行のたびに全履歴を再抽出するのではなく、WHERE 句を必要なスライス(ローリング期間、未処理の項目のみなど)に限定してください。