Exemplos de consultas SuiteQL do NetSuite
Quando a sua conexão do NetSuite estiver funcionando, esta página leva você rapidamente a relatórios reais: SuiteQL para copiar e colar com os dados financeiros e operacionais com que a maioria das extrações começa — lançamentos contábeis, um razão geral, um balancete, uma DRE, um balanço patrimonial, contas a receber em aberto, pedidos em aberto e estoque disponível.
Cada receita é um ponto de partida. Execute-a, confirme os números com um relatório em que você confia no NetSuite e depois adapte os filtros e as colunas à sua conta.
Como executar uma receita
Seção intitulada “Como executar uma receita”-
Adicione uma etapa Solicitação REST a um fluxo de trabalho e defina Conexão como a sua conexão do NetSuite, Método como
POSTe Endpoint como/services/rest/query/v1/suiteql. -
Coloque a consulta no Corpo como um único objeto JSON — o texto da consulta vai em
q:{"q": "SELECT id FROM account WHERE ROWNUM <= 5"}As receitas abaixo são mostradas como SQL legível, para maior clareza; ao colar uma na etapa, envolva-a como
{"q": "…your query…"}. -
Na guia Resposta, mantenha o destino como Tabela e defina o tipo de cada coluna (consulte a observação “Tipos de coluna” em cada receita). O SuiteQL retorna tudo como texto, portanto são os tipos que fazem os valores somarem e as datas serem ordenadas.
-
Clique em Enviar solicitação de teste para confirmar que ela é executada e depois execute a etapa.
Convenções usadas em todas as receitas
Seção intitulada “Convenções usadas em todas as receitas”Algumas regras valem para todas as receitas financeiras:
transactionaccountingline(TAL) é a verdade do razão geral. Os valores de lançamento, os débitos e os créditos ficam aqui — não emtransactionline. Toda receita financeira faz a junção por meio dela.- Somente lançamentos contábeis efetivos:
tal.posting = 'T'exclui as linhas sem lançamento. - Livro contábil principal:
tal.accountingbook = 1. Altere isso somente se você usa o NetSuite Multi-Book. - Sinal do valor: o NetSuite armazena os valores de lançamento positivos para débito e negativos para crédito. Assim, a receita (um crédito) é um
amountnegativo. As receitas de DRE e de balanço patrimonial invertem o sinal quando se quer uma apresentação natural de “receita positiva”, e cada uma informa isso. - Um
ORDER BYdeterminístico é obrigatório em toda consulta paginada; do contrário, as linhas se duplicam ou são ignoradas entre as páginas sem aviso. - Formate as datas na consulta:
TO_CHAR(t.trandate, 'YYYY-MM-DD')(caso contrário, o SuiteQL retorna as datas no formato de exibição da conta). Defina o tipo dessas colunas comoDate.
Receitas financeiras
Seção intitulada “Receitas financeiras”Lançamentos contábeis
Seção intitulada “Lançamentos contábeis”Todas as linhas de lançamento dos lançamentos contábeis de um período, com conta, débito e crédito.
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_memoFROM 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.accountWHERE 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.idTipos de coluna: debit, credit → Currency; entry_date → Date; todas as demais → Text.
Detalhes do razão geral
Seção intitulada “Detalhes do razão geral”O mesmo formato sem o filtro type = 'Journal' — todas as linhas de lançamento de todos os tipos de transação, que é o seu razão geral do período.
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_memoFROM 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.accountWHERE 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.idTipos de coluna: amount → Currency; posting_date → Date; as demais → Text. amount é positivo para débito e negativo para crédito.
Balancete
Seção intitulada “Balancete”A movimentação líquida de cada conta em um período. Somando todas as contas, o total é zero quando os livros estão equilibrados.
SELECT a.acctnumber AS account_number, BUILTIN.DF(a.id) AS account_name, a.accttype AS account_type, SUM(tal.amount) AS balanceFROM transactionaccountingline tal JOIN transaction t ON t.id = tal.transaction JOIN account a ON a.id = tal.accountWHERE 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.accttypeORDER BY a.acctnumberTipos de coluna: balance → Currency; as demais → Text.
Demonstração do resultado (DRE)
Seção intitulada “Demonstração do resultado (DRE)”O balancete restrito às contas de receita e despesa, com o sinal invertido para que a receita apareça positiva e as despesas negativas — a coluna então soma o lucro líquido.
SELECT a.accttype AS account_type, a.acctnumber AS account_number, BUILTIN.DF(a.id) AS account_name, -SUM(tal.amount) AS amountFROM transactionaccountingline tal JOIN transaction t ON t.id = tal.transaction JOIN account a ON a.id = tal.accountWHERE 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.acctnumberTipos de coluna: amount → Currency; as demais → Text. No seu relatório, agrupe account_type como Receita (Income, OthIncome), CPV (COGS) e Despesa (Expense, OthExpense); receita menos CPV menos despesa é o lucro líquido.
Balanço patrimonial
Seção intitulada “Balanço patrimonial”Saldos acumulados das contas em uma data — todas as linhas de lançamento desde o início até a data de referência, para as contas patrimoniais (tudo o que não é conta de DRE).
SELECT a.accttype AS account_type, a.acctnumber AS account_number, BUILTIN.DF(a.id) AS account_name, SUM(tal.amount) AS balanceFROM transactionaccountingline tal JOIN transaction t ON t.id = tal.transaction JOIN account a ON a.id = tal.accountWHERE 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.acctnumberTipos de coluna: balance → Currency; as demais → Text. Os ativos aparecem positivos (natureza devedora); os passivos e o patrimônio líquido aparecem negativos (natureza credora) — inverta o sinal deles para a apresentação. O ativo deve ser igual ao passivo mais o patrimônio líquido.
Receitas operacionais
Seção intitulada “Receitas operacionais”Contas a receber em aberto (faturas de clientes não pagas)
Seção intitulada “Contas a receber em aberto (faturas de clientes não pagas)”Faturas de clientes pendentes com o valor ainda devido e a data de vencimento — a base de um aging de contas a receber.
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_unpaidFROM transaction tWHERE t.type = 'CustInvc' AND t.foreignamountunpaid <> 0ORDER BY t.tranidTipos de coluna: invoice_total, amount_unpaid → Currency; invoice_date, due_date → Date; as demais → Text. Calcule as faixas de aging a partir de due_date em uma etapa posterior.
Pedidos de venda em aberto
Seção intitulada “Pedidos de venda em aberto”Pedidos de venda ainda não totalmente processados, por cliente.
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_totalFROM transaction tWHERE t.type = 'SalesOrd' AND t.status IN ('SalesOrd:B', 'SalesOrd:D', 'SalesOrd:E')ORDER BY t.tranidTipos de coluna: order_total → Currency; order_date → Date; as demais → Text. Os códigos de status SalesOrd:* (Pending Fulfillment, Partially Fulfilled, Pending Billing) variam conforme a conta — confirme os que significam “em aberto” para você, ou remova o filtro de status e filtre depois.
Pedidos de compra em aberto
Seção intitulada “Pedidos de compra em aberto”Pedidos de compra aguardando recebimento ou faturamento, por fornecedor.
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_totalFROM transaction tWHERE t.type = 'PurchOrd' AND t.status IN ('PurchOrd:B', 'PurchOrd:D', 'PurchOrd:E', 'PurchOrd:F')ORDER BY t.tranidTipos de coluna: po_total → Currency; po_date → Date; as demais → Text. Como nos pedidos de venda, confirme quais códigos de status PurchOrd:* significam “em aberto” na sua conta.
Estoque disponível
Seção intitulada “Estoque disponível”Quantidade em estoque e disponível, em toda a empresa, para itens de estoque.
SELECT i.itemid AS item, BUILTIN.DF(i.id) AS description, i.quantityonhand AS on_hand, i.quantityavailable AS availableFROM item iWHERE i.itemtype = 'InvtPart' AND i.isinactive = 'F'ORDER BY i.itemidTipos de coluna: on_hand, available → Decimal; as demais → Text. Esses são totais de toda a empresa; as quantidades por local vêm dos dados de local de estoque do NetSuite, que dependem do recurso Multi-Location Inventory — verifique o que a sua conta expõe.
Ajustar para a sua conta
Seção intitulada “Ajustar para a sua conta”- Limite durante os testes. Adicione
AND ROWNUM <= 100(ou um intervalo de datas estreito) para que a primeira execução retorne rapidamente e depois remova-o para a extração real. - Rastreie um número errado até a consulta, não até o conector. Um erro de conversão nomeia a coluna e o valor; um total que não fecha quase sempre se deve ao escopo de subsidiária/moeda ou a um filtro de lançamento/período — verifique isso primeiro.
- Toda extração substitui a tabela inteira. Mantenha a cláusula
WHEREna fatia de que você precisa (um período móvel, apenas itens em aberto), em vez de reextrair todo o histórico a cada execução agendada.
Relacionados
Seção intitulada “Relacionados”- Conectar ao NetSuite — configure primeiro a conexão.
- Importar dados financeiros do NetSuite — etapas de importação prontas para saldos, detalhes do razão geral e dados mestres, sem precisar de SuiteQL.
- Conector REST do NetSuite — referência de campos e de SuiteQL.
- Etapa Solicitação REST — a etapa em que essas consultas são executadas.