Disponível a partir da versão 3.5.5.166
O Fechamento Automático de Caixa permite que o sistema feche (e opcionalmente reabra) caixas de forma programada, sem intervenção manual do operador. A funcionalidade utiliza um SQL Server Agent Job que executa periodicamente e verifica quais terminais devem ter seus caixas fechados com base em horários configurados.
+-------------------------------------------------------------+
| Administrador configura horarios na tela do Softpark |
| (Menu > Administracao > Caixa > Fechamento Automatico) |
+-----------------------------+-------------------------------+
|
v
+-------------------------------------------------------------+
| Sistema cria/atualiza o Job no SQL Server Agent |
| (executa a cada 1 minuto) |
+-----------------------------+-------------------------------+
|
v
+-------------------------------------------------------------+
| Job verifica: "Algum terminal atingiu o horario?" |
| - Terminal habilitado? SIM |
| - Horario configurado <= hora atual? SIM |
| - Ja foi processado com sucesso hoje? NAO |
+-----------------------------+-------------------------------+
|
v
+-------------------------------------------------------------+
| Para cada terminal elegivel: |
| - Se tem caixa aberto > Fecha (e reabre se configurado) |
| - Se nao tem caixa aberto > Registra "sem acao" |
| - Se deu erro > Registra erro e continua nos demais |
+-------------------------------------------------------------+
Menu > Administração > Caixa > Fechamento Automático de Caixa
[!] Acesso restrito a administradores.

No topo da tela, uma caixa de texto exibe o status atual:
| Status | Significado |
|---|---|
| Pronto (verde) | SQL Server Agent rodando, permissões OK, Job íntegro |
| Com Pendências (laranja) | Algum problema detectado — detalhes na mensagem |
O sistema tenta corrigir problemas automaticamente (iniciar o Agent, adicionar permissões). Se não conseguir, exibe orientações.
| Coluna | Descrição |
|---|---|
| Terminal | Número do terminal (automático, não editável) |
| Tipo | SOFTPARK ou ATM (automático, não editável) |
| Horário | Horário de fechamento no formato HH:mm (ex: 23:00) |
| Ação | FECHAR = apenas fecha · FECHAR_REABRIR = fecha e abre novo caixa |
| Habilitado | Checkbox — ativa/desativa o fechamento para aquele terminal |
Regras:
2300 > 23:00)Grid com o registro de todas as execuções do Job:
| Coluna | Descrição |
|---|---|
| Terminal | Número do terminal processado |
| Caixa | Número do caixa que foi fechado (ou "-" se sem ação) |
| Data/Hora | Quando a execução ocorreu |
| Ação | FECHAR, FECHAR_REABRIR ou SEM_ACAO |
| Resultado | SUCESSO ou ERRO |
| Erro | Mensagem de erro (se houver) |
Filtros disponíveis:
Botão "Excluir Antigos": Remove registros com mais de 90 dias (com confirmação).
FECHAR)O Job fecha o caixa no horário configurado. O terminal fica sem caixa aberto até que alguém abra manualmente.
Uso típico: Terminais que operam em horário comercial e não precisam de caixa durante a madrugada.
FECHAR_REABRIR)O Job fecha o caixa e imediatamente abre um novo caixa para o mesmo terminal, preservando o tipo (ATM ou SOFTPARK).
Uso típico: Terminais ATM que operam 24h e precisam de um novo caixa diário para fins de fechamento contábil.
O SQL Server Agent deve estar em execução no servidor de banco de dados. O sistema tenta iniciá-lo automaticamente, mas pode falhar se:
Como verificar: No SQL Server Management Studio, o ícone "SQL Server Agent" deve estar com seta verde (rodando).
O usuário de conexão do Softpark precisa da role SQLAgentUserRole no banco msdb. O sistema tenta adicionar automaticamente, mas pode falhar se o usuário não for sysadmin.
Comando manual (se necessário):
USE msdb;
EXEC sp_addrolemember 'SQLAgentUserRole', 'nome_do_usuario';
O Job executa a cada 1 minuto. Em cada execução, verifica quais terminais atingiram o horário configurado.
Se um terminal já foi processado com sucesso no dia corrente, ele não é processado novamente. Isso garante que o caixa é fechado apenas uma vez por dia.
Se o fechamento de um terminal falhar (ex: erro na procedure), o Job:
Se o horário é atingido mas o terminal não tem caixa aberto, o Job registra "SEM_ACAO" com resultado "SUCESSO" e não tenta novamente no dia.
| Tabela | Função |
|---|---|
T_FECHAMENTO_CAIXA_JOB_CONFIG |
Configurações por terminal (horário, ação, habilitado) |
T_FECHAMENTO_CAIXA_JOB_LOG |
Histórico de execuções (auditoria) |
PROC_EXECUTA_FECHAMENTO_CAIXA_AUTOMATICO — Executada pelo Job, itera os terminais elegíveis e chama PROC_FECHA_CAIXA e opcionalmente PROC_INICIA_CAIXA.
| Propriedade | Valor |
|---|---|
| Nome | SOFTPARK_FECHAMENTO_CAIXA_AUTOMATICO |
| Schedule | A cada 1 minuto, 24h |
| Step | Executa PROC_EXECUTA_FECHAMENTO_CAIXA_AUTOMATICO |
| Retry | Sem retry (o próprio schedule garante reexecução) |
modFechamentoCaixaJob.vb — Gerencia o Job (criar, desativar, reativar), executa health check e operações de configuração/histórico.
Causa: O serviço SQL Server Agent está parado.
Solução:
net start SQLSERVERAGENTCausa: O usuário de banco não tem a role necessária para gerenciar Jobs.
Solução: Execute no SSMS com um usuário sysadmin:
USE msdb;
EXEC sp_addrolemember 'SQLAgentUserRole', 'nome_do_usuario';
Causa: Alguém alterou o Job manualmente no SQL Server Agent.
Solução: Clique em "Salvar" na tela de configuração — o sistema recria o Job automaticamente.
Verifique:
P: O que acontece se o servidor reiniciar?
R: O SQL Server Agent reinicia junto com o SQL Server (se configurado como automático). O Job continua executando normalmente.
P: Posso ter horários diferentes para cada terminal?
R: Sim, cada terminal tem sua própria configuração de horário e ação.
P: O que acontece se eu desabilitar todos os terminais?
R: O Job é desativado automaticamente no SQL Server Agent. Ao habilitar novamente, o Job é reativado.
P: O fechamento automático interfere com operações em andamento?
R: O fechamento usa a mesma PROC_FECHA_CAIXA do fechamento manual. Se houver pendências que impeçam o fechamento, a procedure retornará erro e o Job registrará no log.
P: Posso usar em SQL Server Express?
R: Não. O SQL Server Express não inclui o SQL Server Agent. É necessário SQL Server Standard, Developer ou Enterprise.
P: O histórico cresce indefinidamente?
R: Não. O botão "Excluir Antigos" permite limpar registros com mais de 90 dias. Recomenda-se fazer essa limpeza periodicamente.