Corrigir downloads de orçamento que falham ou nunca chegam
Descubra por que uma exportação de orçamento em CSV, PDF ou XLSX se recusa a baixar, mostra sucesso sem arquivo ou nunca chega após ser enfileirada.
Os CSVs e PDFs de orçamento são gerados dentro do sistema de arquivos do navegador do aplicativo e entregues ao navegador como um download normal, seguido por um toast 'Successfully downloaded files'. Se o arquivo gerado existir mas estiver vazio, o aplicativo recusa com o toast de erro 'Cannot download empty content' — as causas usuais são uma tabela de orçamento vazia (nada com preço no escopo/filtros atuais) ou uma geração que foi abortada no meio; regenere o orçamento e tente novamente. Duas armadilhas decorrentes: (1) após um download bem-sucedido, o arquivo temporário é excluído do sistema de arquivos do aplicativo e a URL do blob é revogada imediatamente, então usar o 'retry download' do próprio navegador nessa entrada falhará — a exportação deve ser acionada novamente de dentro do aplicativo; (2) os downloads são disparados por um clique de link simulado, então configurações agressivas de bloqueio de download do navegador podem engolir o arquivo enquanto o aplicativo ainda mostra sucesso; peça ao cliente para verificar as permissões de download do navegador para o site. Para exportações XLSX, o nome do arquivo é pricing_quotation.xlsx, ou um output-<timestamp>-<random>.xlsx gerado automaticamente quando nenhum nome é fornecido pelo mecanismo.
Quando o download de um orçamento XLSX falha, as exportações de orçamento em CSV e PDF são ações separadas no navegador e ainda podem ser baixadas.
A saída CSV omite imagens, portanto não substitui quando as imagens são necessárias.
✓ Verificado no produto em 19 de outubro de 2026Toda exportação de orçamento/produção primeiro executa verificações de pré-saída mais uma passagem de violações (o carregador mostra 'Checking for violations...'). As saídas de subconjunto de painéis são uma exceção: pulam a passagem de violações e são encaminhadas para processamento no backend, então nenhum toast de violações aparece para elas. As preferências de administrador podem bloquear o download, cada uma com seu próprio toast de erro que os clientes frequentemente não percebem: (1) Enforce active sales channel — se ativada e o design não tiver um canal de vendas ativo selecionado: 'Downloading output for design without active sales channel preference is not permitted'; (2) No outputs for unapproved designs — bloqueia saídas da classe de reserva de pedidos/ERP/ordem de compra em designs não aprovados; (3) No outputs for unlocked designs — o mesmo para designs desbloqueados; (4) No Outputs For Designs With Violations And Issues — se existirem violações de restrição de catálogo, um toast fixo pede para resolver todas as violações ou desativar a preferência. As exportações de orçamento (o download de orçamento e as exportações de orçamento em CSV/XLSX) estão isentas das preferências de aprovação e bloqueio: apenas as preferências de canal de vendas ativo e de violações podem bloqueá-las. Um design pode ser isento individualmente do bloqueio de violações (toast informativo: 'Design Exempted from blocking output due to violations'). Usuários de marketplace/vendedor contornam todos esses bloqueios, e os bloqueios de aprovação/bloqueio não se aplicam a usuários do MES. Script de triagem: pergunte qual toast apareceu; se nenhum foi visto, reproduza com o cliente e observe o topo da tela, depois verifique as preferências de administrador e o painel de violações daquele design.
As saídas geradas pelo servidor (PDFs de folha de apresentação, saídas de CAM/serra, saídas de design geradas pelo mecanismo) são enfileiradas no backend. O aplicativo envia o trabalho, mostra um toast persistente 'Generating your output' cujo detalhe diz 'Added to the download queue' (e, enquanto aguarda, uma posição na fila ou 'Processing…'), depois consulta o status do trabalho a cada 5 segundos a partir daquela aba do navegador. Ao concluir, mostra 'Your output is ready' e aciona automaticamente o download do arquivo; em caso de falha, aparece um 'Your output could not be generated. Please try again later.' fixo. Regras silenciosas que explicam a maioria dos tickets: (1) o poller existe apenas naquela aba — se o usuário atualizar, navegar para fora ou fechar a aba, o trabalho ainda é concluído no servidor, mas nada será baixado; ele deve acionar a exportação novamente; (2) não há timeout no poller, então um trabalho preso na fila deixa o toast 'Generating your output' (detalhe 'Added to the download queue' ou uma posição na fila) exibido indefinidamente — esse toast permanecer por muitos minutos significa que a fila está atrasada ou o trabalho morreu silenciosamente, e vale a pena verificar a fila de saída no backend; (3) se a própria verificação de status der erro, a consulta para com 'Something went wrong with output generation. Please try again later'. O download automático suprime brevemente o aviso de saída do site do navegador; isso é intencional.