Exemplos de consultas SuiteQL do NetSuite
Depois de a sua ligação ao NetSuite funcionar, esta página leva-o 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 de diário, um razão geral, um balancete, uma demonstração de resultados, um balanço, contas a receber em aberto, encomendas em aberto e inventário disponível.
Cada receita é um ponto de partida. Execute-a, confirme os números com um relatório em que confie no NetSuite e depois adapte os filtros e as colunas à sua conta.
Como executar uma receita
Seção intitulada “Como executar uma receita”-
Adicione um passo Pedido REST a um fluxo de trabalho e defina a Ligação para a sua ligação ao NetSuite, o Método para
POSTe o Endpoint para/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 apresentadas como SQL legível, para maior clareza; ao colar uma no passo, envolva-a como
{"q": "…your query…"}. -
No separador Resposta, mantenha o destino como Tabela e defina o tipo de cada coluna (consulte a nota «Tipos de coluna» em cada receita). O SuiteQL devolve tudo como texto, pelo que são os tipos que fazem os montantes somar e as datas ordenar.
-
Clique em Enviar pedido de teste para confirmar que funciona e, em seguida, execute o passo.
Convenções utilizadas em todas as receitas
Seção intitulada “Convenções utilizadas em todas as receitas”Algumas regras aplicam-se a todas as receitas financeiras:
transactionaccountingline(TAL) é a verdade do razão geral. Os montantes de lançamento, os débitos e os créditos residem aqui — não emtransactionline. Todas as receitas financeiras fazem a junção através dela.- Apenas lançamentos contabilizados:
tal.posting = 'T'exclui as linhas que não são de lançamento. - Livro contabilístico principal:
tal.accountingbook = 1. Altere-o apenas se utilizar o NetSuite Multi-Book. - Sinal do montante: o NetSuite guarda os montantes de lançamento como positivos a débito e negativos a crédito. Assim, a receita (um crédito) é um
amountnegativo. As receitas da demonstração de resultados e do balanço invertem o sinal quando se pretende uma apresentação natural de «rendimento positivo», e cada uma o indica. - É obrigatório um
ORDER BYdeterminista em todas as consultas paginadas, caso contrário as linhas duplicam-se ou são omitidas silenciosamente entre páginas. - Formate as datas na consulta:
TO_CHAR(t.trandate, 'YYYY-MM-DD')(caso contrário, o SuiteQL devolve as datas no formato de apresentação da conta). Atribua a essas colunas o tipoDate.
Receitas financeiras
Seção intitulada “Receitas financeiras”Lançamentos de diário
Seção intitulada “Lançamentos de diário”Todas as linhas de lançamento dos lançamentos de diário 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 outras → Text.
Detalhe do razão geral
Seção intitulada “Detalhe do razão geral”A mesma estrutura 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 restantes → Text. O amount é positivo a débito / negativo a crédito.
Balancete
Seção intitulada “Balancete”O movimento líquido de cada conta num período. Em 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 restantes → Text.
Demonstração de resultados
Seção intitulada “Demonstração de resultados”O balancete restringido às contas de rendimentos e gastos, com o sinal invertido para que a receita seja positiva e os gastos negativos — a coluna soma então o resultado 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 restantes → Text. Agrupe account_type no seu relatório como Rendimentos (Income, OthIncome), CMVMC (COGS) e Gastos (Expense, OthExpense); receita menos CMVMC menos gastos é o resultado líquido.
Balanço
Seção intitulada “Balanço”Saldos acumulados das contas à data de uma data — todas as linhas de lançamento desde o início até à data de referência, para as contas de balanço (tudo o que não é uma conta de demonstração de resultados).
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 restantes → Text. Os ativos surgem positivos (natureza devedora); os passivos e o capital próprio surgem negativos (natureza credora) — inverta-lhes o sinal para apresentação. Os ativos devem ser iguais aos passivos mais o capital próprio.
Receitas operacionais
Seção intitulada “Receitas operacionais”Contas a receber em aberto (faturas de clientes por pagar)
Seção intitulada “Contas a receber em aberto (faturas de clientes por pagar)”Faturas de clientes pendentes com o montante ainda em dívida e a data de vencimento — a base de uma análise de antiguidade das 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 restantes → Text. Calcule os escalões de antiguidade a partir de due_date num passo posterior.
Encomendas de venda em aberto
Seção intitulada “Encomendas de venda em aberto”Encomendas de venda ainda não totalmente processadas, 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 restantes → Text. Os códigos de estado SalesOrd:* (Pending Fulfillment, Partially Fulfilled, Pending Billing) variam consoante a conta — confirme os que significam «em aberto» para si, ou retire o filtro de estado e filtre mais adiante.
Ordens de compra em aberto
Seção intitulada “Ordens de compra em aberto”Ordens de compra a aguardar receção ou faturação, 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 restantes → Text. Tal como nas encomendas de venda, confirme que códigos de estado PurchOrd:* significam «em aberto» na sua conta.
Inventário disponível
Seção intitulada “Inventário disponível”Quantidade em stock e disponível, para toda a empresa, dos artigos de inventário.
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 restantes → Text. Estes são totais para toda a empresa; as quantidades por localização vêm dos dados de localização de inventário do NetSuite, que dependem da funcionalidade Multi-Location Inventory — verifique o que a sua conta expõe.
Ajustar à sua conta
Seção intitulada “Ajustar à sua conta”- Delimite-a durante os testes. Adicione
AND ROWNUM <= 100(ou um intervalo de datas reduzido) para que a primeira execução devolva rapidamente e retire-o na extração real. - Procure a origem de um número errado na consulta, não no conector. Um erro de conversão indica a coluna e o valor; um total que não bate certo é quase sempre um âmbito de subsidiária/moeda ou um filtro de lançamento/período — verifique primeiro esses.
- Cada extração substitui a tabela inteira. Limite a cláusula
WHEREà fatia de que precisa (um período deslizante, apenas itens em aberto) em vez de voltar a extrair todo o histórico em cada execução agendada.
Relacionado
Seção intitulada “Relacionado”- Ligar ao NetSuite — configure primeiro a ligação.
- Importar dados financeiros do NetSuite — passos de importação predefinidos para saldos, detalhe do razão geral e dados mestre, sem SuiteQL.
- Conector REST do NetSuite — referência de campos e de SuiteQL.
- Passo Pedido REST — o passo em que estas consultas são executadas.