ST_LOTENEGATIVO — Permite Lote com Quantidade Negativa
Tela de configuração: MEQ001 — Parâmetros de Estoque Tabela:
PARMESTOQUE.ST_LOTENEGATIVOValor padrão:N(Não) Tipo: Combobox (Sim/Não) Aba: &Estoque
Comportamento Geral
Controla se o sistema permite que lotes de sementes (LOTESEMENTE) operem com quantidade zero ou negativa. Quando desabilitado (N), o sistema filtra lotes sem saldo disponível nas consultas e bloqueia a digitação de quantidades <= 0, impedindo que o estoque de lotes fique negativo. Quando habilitado (S), todos os lotes são exibidos e quantidades negativas são aceitas.
Telas impactadas
| Tela | Arquivo | Descrição |
|---|---|---|
| Entrada de Lotes | source/jLoteProducao/ULoteEntrada.pas | Consulta e validação de lotes na entrada |
| Saída de Lotes | source/jLoteProducao/ULoteSaida.pas | Consulta e validação de lotes na saída |
| Saída Agrupada | source/jLoteProducao/ULoteSaidaAgrupado.pas | Consulta e validação de lotes na saída agrupada |
| Lote Selo | source/jLoteProducao/ULoteSelo.pas | Validação de lotes com selo |
Campos envolvidos
| Campo | Tabela | Observação |
|---|---|---|
QT_LOTE | LOTESEMENTE | Quantidade do lote — validação e filtro afetados |
QT_PERDA | LOTESEMENTE | Quantidade de perda — validação afetada na saída |
Opções disponíveis
N — Não Permite Lote Negativo (Padrão)
| O que faz | Detalhe |
|---|---|
| Filtra lotes na consulta | Adiciona AND L.QT_LOTE > 0 ao SQL — oculta lotes sem saldo |
Validação de QT_LOTE | Bloqueia digitação <= 0 — lança exceção W-0092 |
Validação de QT_PERDA | Bloqueia digitação <= 0 — lança exceção W-0107 |
| Botão "Novo Lote" | Oculto na tela de entrada e saída |
| Validação de saldo | Bloqueia saída quando QT_LOTE + QT_PERDA > QT_SALDO |
Simulação passo a passo
- Acesse MEQ001 → aba &Estoque
- No campo Lote Negativo, selecione Não
- Salve o parâmetro
- Abra uma tela de entrada ou saída de lotes para um produto
- Observe que a listagem exibe apenas lotes com
QT_LOTE > 0 - Observe que o botão Novo Lote está oculto
- Tente digitar
0ou um valor negativo no campo Quantidade do lote - O sistema exibe a mensagem de erro W-0092 e impede a gravação
Resultado esperado: Somente lotes com saldo positivo aparecem na listagem. Não é possível criar novos lotes nem informar quantidades zero ou negativas. O botão "Novo Lote" fica oculto.
Excecao / Importante: Em algumas rotinas de saída, a validação de
QT_LOTE <= 0é desconsiderada quando o parâmetroST_PRODUCAO(Parametros[11]) está preenchido, permitindo que operações de produção ignorem essa restrição.
S — Permite Lote Negativo
| O que faz | Detalhe |
|---|---|
| Filtra lotes na consulta | Remove o filtro QT_LOTE > 0 — exibe todos os lotes, inclusive sem saldo |
Validação de QT_LOTE | Permite valores <= 0 sem erro |
Validação de QT_PERDA | Permite valores <= 0 sem erro |
| Botão "Novo Lote" | Visível na tela de entrada e saída |
| Validação de saldo | Não bloqueia saída por saldo insuficiente |
Simulação passo a passo
- Acesse MEQ001 → aba &Estoque
- No campo Lote Negativo, selecione Sim
- Salve o parâmetro
- Abra uma tela de entrada ou saída de lotes para um produto
- Observe que a listagem exibe todos os lotes cadastrados, mesmo com
QT_LOTE = 0ou negativa - Observe que o botão Novo Lote está visível
- Digite uma quantidade negativa no campo Quantidade do lote
- O sistema aceita sem erro
Resultado esperado: Todos os lotes são exibidos, independentemente do saldo. É possível criar novos lotes e informar quantidades zero ou negativas. O botão "Novo Lote" fica visível.
Excecao / Importante: Quando
ST_LOTENEGATIVO = 'S', a mesma lógica de remoção do filtro se aplica às telas de Saída Agrupada e Lote Selo, permitindo selecionar lotes sem saldo em todos os contextos.
Regra Geral
- O parâmetro é lido via
parmEstoque.Values['ST_LOTENEGATIVO']nas rotinas de entrada e saída de lotes - O valor é carregado automaticamente ao abrir as telas de lotes, a partir dos Parâmetros de Estoque da empresa
- A tabela
PARMESTOQUEarmazena um registro por empresa (CD_EMPRESA); o parâmetro se aplica globalmente a todos os lotes da empresa - O valor padrão
'N'é atribuído automaticamente ao inserir um novo registro emPARMESTOQUE - Quando
'N', o filtroAND L.QT_LOTE > 0(ouAND COALESCE(L.QT_LOTE,0) > 0) é injetado dinamicamente no SQL de consulta de lotes, tanto na entrada quanto na saída - As validações ocorrem nos eventos
ValidateeBeforePostdos camposQT_LOTEeQT_PERDA
Tabela Comparativa
| Aspecto | N (Não) | S (Sim) |
|---|---|---|
| Lotes exibidos na consulta | Apenas com saldo > 0 | Todos |
| Botão "Novo Lote" | Oculto | Visível |
Aceita QT_LOTE <= 0 | Não (exceção W-0092) | Sim |
Aceita QT_PERDA <= 0 | Não (exceção W-0107) | Sim |
| Validação de saldo insuficiente | Ativa | Desativada |
| Valor padrão | ✓ | — |
Procedures impactadas
Rotinas Delphi com referência direta ao campo
| Rotina | Arquivo | Linha | Evidência |
|---|---|---|---|
TdmMEQ001.tabPARMESTOQUEAfterInsert | UdmMEQ001.pas | 291 | Atribui valor padrão 'N' ao inserir novo registro |
CarregarLoteEntrada | ULoteEntrada.pas | 224, 247 | Adiciona filtro AND L.QT_LOTE > 0 quando = 'N' |
TfrmLoteEntrada.tabLoteQT_LOTEValidate | ULoteEntrada.pas | 629 | Valida QT_LOTE <= 0 quando = 'N' (exceção W-0092) |
TfrmLoteEntrada.FormShow | ULoteEntrada.pas | 811 | Oculta botão "Novo Lote" quando = 'N' |
CarregarLoteSaida | ULoteSaida.pas | 228, 415, 489, 525, 554, 602, 678, 707 | Adiciona filtro QT_LOTE > 0 / HAVING ... > 0 quando = 'N' |
TfrmLoteSaida.tabLoteBeforePost | ULoteSaida.pas | 967, 982, 989 | Valida QT_LOTE e QT_PERDA quando = 'N' |
TfrmLoteSaida.tabLoteQT_LOTEValidate | ULoteSaida.pas | 1024, 1027 | Valida quantidade e saldo quando = 'N' |
TfrmLoteSaida.FormShow | ULoteSaida.pas | 1146 | Oculta botão "Novo Lote" quando = 'N' |
TfrmLoteSaida.tabLoteQT_PERDAValidate | ULoteSaida.pas | 1399, 1402 | Valida perda e saldo quando = 'N' |
CarregarSaidaAgrupada | ULoteSaidaAgrupado.pas | 177 | Consulta PE.ST_LOTENEGATIVO |
TfrmLoteAgrupado.btnOKClick | ULoteSaidaAgrupado.pas | 400 | Valida QT_LOTE quando = 'N' |
TfrmLoteAgrupado.tabLoteBeforePost | ULoteSaidaAgrupado.pas | 440 | Valida QT_LOTE quando = 'N' |
TfrmLoteAgrupado.tabITEMAfterScroll | ULoteSaidaAgrupado.pas | 815 | Adiciona filtro AND COALESCE(L.QT_LOTE,0) > 0 quando = 'N' |
TfrmLoteSelo.tabLoteQT_LOTEValidate | ULoteSelo.pas | 422 | Valida QT_LOTE quando = 'N' |
TfrmLoteSelo.FormShow | ULoteSelo.pas | 514 | Oculta botão "Novo Lote" quando = 'N' |
Referências SQL diretas ao campo em Scripts/
Não foi encontrada referência direta ao campo ST_LOTENEGATIVO em procedures/views SQL localizadas em Scripts/. As consultas que utilizam o parâmetro constroem o filtro dinamicamente via Delphi (parmEstoque.Values['ST_LOTENEGATIVO']), não em SQL estático.
Candidatas por uso da tabela PARMESTOQUE
Procedures/views que consultam a tabela PARMESTOQUE mas não citam o campo ST_LOTENEGATIVO diretamente. Sem impacto funcional direto identificado no código.
| Procedure/View | Arquivo |
|---|---|
AJUSTA_ORDEMPRODPEDANTECIPADO | Scripts/AJUSTA_ORDEMPRODPEDANTECIPADO.sql |
ALTERACAO_BANDA | Scripts/ALTERACAO_BANDA.sql |
ATUALIZA_CONSUMOMEDIO | Scripts/ATUALIZA_CONSUMOMEDIO.sql |
ATUALIZA_ESTOQUEDIAPESSOA | Scripts/ATUALIZA_ESTOQUEDIAPESSOA.sql |
CALCULA_FORMACAOPRECOVENDA | Scripts/CALCULA_FORMACAOPRECOVENDA.sql |
CANCELA_ESTOQUE | Scripts/CANCELA_ESTOQUE.sql |
CONFIRMA_ORDEMSERVICO | Scripts/CONFIRMA_ORDEMSERVICO.sql |
CONFIRMA_ORDEMSERVICOMETAL | Scripts/CONFIRMA_ORDEMSERVICOMETAL.sql |
GERA_ESTOQUE | Scripts/GERA_ESTOQUE.sql |
GERA_ESTOQUE_NOTAFISCAL | Scripts/GERA_ESTOQUE_NOTAFISCAL.sql |
GERA_ESTOQUEPSALT | Scripts/GERA_ESTOQUEPSALT.sql |
GERA_NOTAFISCALESTOQUE | Scripts/GERA_NOTAFISCALESTOQUE.sql |
GERA_ORDEMPRODUCAO | Scripts/GERA_ORDEMPRODUCAO.sql |
GERA_PRODENVELOPAMENTO | Scripts/GERA_PRODENVELOPAMENTO.sql |
GERA_PRODLOTEPRODUCAO | Scripts/GERA_PRODLOTEPRODUCAO.sql |
GERA_PRODMONTAGEMRECAP | Scripts/GERA_PRODMONTAGEMRECAP.sql |
GERA_PRODVULCANIZACAO | Scripts/GERA_PRODVULCANIZACAO.sql |
GERA_SPEDBLOCOL | Scripts/GERA_SPEDBLOCOL.sql |
GERA_SPEDECFBLOCOL | Scripts/GERA_SPEDECFBLOCOL.sql |
GRAVA_AVISOS | Scripts/GRAVA_AVISOS.sql |