Pular para o conteúdo principal

ST_LOTENEGATIVO — Permite Lote com Quantidade Negativa

Tela de configuração: MEQ001 — Parâmetros de Estoque Tabela: PARMESTOQUE.ST_LOTENEGATIVO Valor 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​

TelaArquivoDescrição
Entrada de Lotessource/jLoteProducao/ULoteEntrada.pasConsulta e validação de lotes na entrada
Saída de Lotessource/jLoteProducao/ULoteSaida.pasConsulta e validação de lotes na saída
Saída Agrupadasource/jLoteProducao/ULoteSaidaAgrupado.pasConsulta e validação de lotes na saída agrupada
Lote Selosource/jLoteProducao/ULoteSelo.pasValidação de lotes com selo

Campos envolvidos​

CampoTabelaObservação
QT_LOTELOTESEMENTEQuantidade do lote — validação e filtro afetados
QT_PERDALOTESEMENTEQuantidade de perda — validação afetada na saída

Opções disponíveis​

N — Não Permite Lote Negativo (Padrão)​

O que fazDetalhe
Filtra lotes na consultaAdiciona AND L.QT_LOTE > 0 ao SQL — oculta lotes sem saldo
Validação de QT_LOTEBloqueia digitação <= 0 — lança exceção W-0092
Validação de QT_PERDABloqueia digitação <= 0 — lança exceção W-0107
Botão "Novo Lote"Oculto na tela de entrada e saída
Validação de saldoBloqueia saída quando QT_LOTE + QT_PERDA > QT_SALDO

Simulação passo a passo​

  1. Acesse MEQ001 → aba &Estoque
  2. No campo Lote Negativo, selecione Não
  3. Salve o parâmetro
  4. Abra uma tela de entrada ou saída de lotes para um produto
  5. Observe que a listagem exibe apenas lotes com QT_LOTE > 0
  6. Observe que o botão Novo Lote está oculto
  7. Tente digitar 0 ou um valor negativo no campo Quantidade do lote
  8. 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âmetro ST_PRODUCAO (Parametros[11]) está preenchido, permitindo que operações de produção ignorem essa restrição.

S — Permite Lote Negativo​

O que fazDetalhe
Filtra lotes na consultaRemove o filtro QT_LOTE > 0 — exibe todos os lotes, inclusive sem saldo
Validação de QT_LOTEPermite valores <= 0 sem erro
Validação de QT_PERDAPermite valores <= 0 sem erro
Botão "Novo Lote"Visível na tela de entrada e saída
Validação de saldoNão bloqueia saída por saldo insuficiente

Simulação passo a passo​

  1. Acesse MEQ001 → aba &Estoque
  2. No campo Lote Negativo, selecione Sim
  3. Salve o parâmetro
  4. Abra uma tela de entrada ou saída de lotes para um produto
  5. Observe que a listagem exibe todos os lotes cadastrados, mesmo com QT_LOTE = 0 ou negativa
  6. Observe que o botão Novo Lote está visível
  7. Digite uma quantidade negativa no campo Quantidade do lote
  8. 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 PARMESTOQUE armazena 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 em PARMESTOQUE
  • Quando 'N', o filtro AND L.QT_LOTE > 0 (ou AND 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 Validate e BeforePost dos campos QT_LOTE e QT_PERDA

Tabela Comparativa​

AspectoN (Não)S (Sim)
Lotes exibidos na consultaApenas com saldo > 0Todos
Botão "Novo Lote"OcultoVisível
Aceita QT_LOTE <= 0Não (exceção W-0092)Sim
Aceita QT_PERDA <= 0Não (exceção W-0107)Sim
Validação de saldo insuficienteAtivaDesativada
Valor padrão✓—

Procedures impactadas​

Rotinas Delphi com referência direta ao campo​

RotinaArquivoLinhaEvidência
TdmMEQ001.tabPARMESTOQUEAfterInsertUdmMEQ001.pas291Atribui valor padrão 'N' ao inserir novo registro
CarregarLoteEntradaULoteEntrada.pas224, 247Adiciona filtro AND L.QT_LOTE > 0 quando = 'N'
TfrmLoteEntrada.tabLoteQT_LOTEValidateULoteEntrada.pas629Valida QT_LOTE <= 0 quando = 'N' (exceção W-0092)
TfrmLoteEntrada.FormShowULoteEntrada.pas811Oculta botão "Novo Lote" quando = 'N'
CarregarLoteSaidaULoteSaida.pas228, 415, 489, 525, 554, 602, 678, 707Adiciona filtro QT_LOTE > 0 / HAVING ... > 0 quando = 'N'
TfrmLoteSaida.tabLoteBeforePostULoteSaida.pas967, 982, 989Valida QT_LOTE e QT_PERDA quando = 'N'
TfrmLoteSaida.tabLoteQT_LOTEValidateULoteSaida.pas1024, 1027Valida quantidade e saldo quando = 'N'
TfrmLoteSaida.FormShowULoteSaida.pas1146Oculta botão "Novo Lote" quando = 'N'
TfrmLoteSaida.tabLoteQT_PERDAValidateULoteSaida.pas1399, 1402Valida perda e saldo quando = 'N'
CarregarSaidaAgrupadaULoteSaidaAgrupado.pas177Consulta PE.ST_LOTENEGATIVO
TfrmLoteAgrupado.btnOKClickULoteSaidaAgrupado.pas400Valida QT_LOTE quando = 'N'
TfrmLoteAgrupado.tabLoteBeforePostULoteSaidaAgrupado.pas440Valida QT_LOTE quando = 'N'
TfrmLoteAgrupado.tabITEMAfterScrollULoteSaidaAgrupado.pas815Adiciona filtro AND COALESCE(L.QT_LOTE,0) > 0 quando = 'N'
TfrmLoteSelo.tabLoteQT_LOTEValidateULoteSelo.pas422Valida QT_LOTE quando = 'N'
TfrmLoteSelo.FormShowULoteSelo.pas514Oculta 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/ViewArquivo
AJUSTA_ORDEMPRODPEDANTECIPADOScripts/AJUSTA_ORDEMPRODPEDANTECIPADO.sql
ALTERACAO_BANDAScripts/ALTERACAO_BANDA.sql
ATUALIZA_CONSUMOMEDIOScripts/ATUALIZA_CONSUMOMEDIO.sql
ATUALIZA_ESTOQUEDIAPESSOAScripts/ATUALIZA_ESTOQUEDIAPESSOA.sql
CALCULA_FORMACAOPRECOVENDAScripts/CALCULA_FORMACAOPRECOVENDA.sql
CANCELA_ESTOQUEScripts/CANCELA_ESTOQUE.sql
CONFIRMA_ORDEMSERVICOScripts/CONFIRMA_ORDEMSERVICO.sql
CONFIRMA_ORDEMSERVICOMETALScripts/CONFIRMA_ORDEMSERVICOMETAL.sql
GERA_ESTOQUEScripts/GERA_ESTOQUE.sql
GERA_ESTOQUE_NOTAFISCALScripts/GERA_ESTOQUE_NOTAFISCAL.sql
GERA_ESTOQUEPSALTScripts/GERA_ESTOQUEPSALT.sql
GERA_NOTAFISCALESTOQUEScripts/GERA_NOTAFISCALESTOQUE.sql
GERA_ORDEMPRODUCAOScripts/GERA_ORDEMPRODUCAO.sql
GERA_PRODENVELOPAMENTOScripts/GERA_PRODENVELOPAMENTO.sql
GERA_PRODLOTEPRODUCAOScripts/GERA_PRODLOTEPRODUCAO.sql
GERA_PRODMONTAGEMRECAPScripts/GERA_PRODMONTAGEMRECAP.sql
GERA_PRODVULCANIZACAOScripts/GERA_PRODVULCANIZACAO.sql
GERA_SPEDBLOCOLScripts/GERA_SPEDBLOCOL.sql
GERA_SPEDECFBLOCOLScripts/GERA_SPEDECFBLOCOL.sql
GRAVA_AVISOSScripts/GRAVA_AVISOS.sql