MEQ008 — Transferência de Local (enriquecimento)
Menu: Estoque > Movimentações > Transferência de Local
Objetivo
A tela Transferência de Local movimenta um produto entre dois locais de armazenagem no estoque, registrando automaticamente um lançamento de saída no local de origem e um de entrada no local de destino via GERA_ESTOQUE. Suporta produtos simples, com controle de lote/semente (rateio automático de lotes) e com grade (rateio por item de grade), e permite transferência entre empresas diferentes quando o parâmetro ST_TRANSFEMPRESAS está habilitado em Parâmetros de Estoque (MEQ001).
Fluxo principal
- Ao abrir a tela, o sistema já inicia um novo registro automaticamente (equivalente a clicar em Novo). (Transferência de Local) —
source/MEQ008/UMEQ008.pas:180-180 (iniciar) - Informa ou pesquisa (F9) o Produto a transferir; o sistema valida se está ativo, se não controla serial e carrega unidade/lote/grade. (Transferência de Local) —
source/MEQ008/UdmMEQ008.pas:163-200 (TdmMEQ008.tabMOVESTOQUECD_ITEMValidate) - Informa a Quantidade a transferir (campo travado quando o produto tem grade, pois é definida pelo rateio). (Transferência de Local) —
source/MEQ008/UMEQ008.pas:289-290 (TfrmMEQ008.btnSalvarClick) - Informa/pesquisa (F9) Tipo de Local e Local de Saída (origem), dentro da empresa de origem. (Transferência de Local) —
source/MEQ008/UMEQ008.pas:735-747 (TfrmMEQ008.edtCD_TIPOLOCALKeyDown) - Se o parâmetro ST_TRANSFEMPRESAS estiver habilitado, informa/pesquisa a Empresa Destino; senão o sistema já usa a empresa da sessão. (Transferência de Local) —
source/MEQ008/UMEQ008.pas:640-679 (TfrmMEQ008.btnNovoClick) - Informa/pesquisa Tipo de Local e Local de Entrada (destino). (Transferência de Local) —
source/MEQ008/UdmMEQ008.pas:274-302 (TdmMEQ008.tabMOVESTOQUECD_LOCALENTValidate) - Informa o Histórico de Saída (e Entrada, quando aplicável), que deve estar ativo e ser do tipo Estoque. (Transferência de Local) —
source/MEQ008/UdmMEQ008.pas:392-413 (TdmMEQ008.tabMOVESTOQUECD_HISTSAIValidate) - Clica em Salvar (F6); o sistema confere campos obrigatórios e gera o movimento de saída e de entrada em GERA_ESTOQUE, exibindo mensagem de sucesso. (Transferência de Local) —
source/MEQ008/UMEQ008.pas:613-620 (TfrmMEQ008.btnSalvarClick)
Campos obrigatórios
| Campo | Condição | Mensagem | Fonte |
|---|---|---|---|
| Produto (CD_ITEM) | sempre obrigatório para salvar | O Produto deve ser Informado! | source/MEQ008/UMEQ008.pas:287-288 (TfrmMEQ008.btnSalvarClick) |
| Quantidade (QT_ESTOQUE) | deve ser maior que zero | A Quantidade deve ser maior que Zero! | source/MEQ008/UMEQ008.pas:289-290 (TfrmMEQ008.btnSalvarClick) |
| Tipo de Local de Saída (CD_TIPOLOCAL) | sempre obrigatório | O Tipo de Local de Saída deve ser Informado! | source/MEQ008/UMEQ008.pas:292-293 (TfrmMEQ008.btnSalvarClick) |
| Local de Saída (CD_LOCAL) | sempre obrigatório | O Local de Saída deve ser Informado! | source/MEQ008/UMEQ008.pas:294-295 (TfrmMEQ008.btnSalvarClick) |
| Tipo de Local de Entrada (CD_TIPOLOCALENT) | sempre obrigatório | O Tipo de Local de Entrada deve ser Informado! | source/MEQ008/UMEQ008.pas:297-298 (TfrmMEQ008.btnSalvarClick) |
| Local de Entrada (CD_LOCALENT) | sempre obrigatório | O Local de Entrada deve ser Informado! | source/MEQ008/UMEQ008.pas:299-300 (TfrmMEQ008.btnSalvarClick) |
| Empresa Origem / Empresa Destino | preenchidas automaticamente com a empresa da sessão quando ST_TRANSFEMPRESAS='N'; editáveis e obrigatórias para validar locais quando ='S' | source/MEQ008/UMEQ008.pas:640-654 (TfrmMEQ008.btnNovoClick) |
Mensagens: causa e ação
A Quantidade deve ser maior que Zero!
Causa: O campo Quantidade está vazio, zero ou negativo ao tentar salvar.
Ação: Informe uma quantidade maior que zero antes de salvar.
Fonte: source/MEQ008/UMEQ008.pas:289-290 (TfrmMEQ008.btnSalvarClick)
O Código da Empresa não está Cadastrada [ADM002]!
Causa: O código de empresa (origem ou destino) informado não existe na tabela de Empresas.
Ação: Verifique o cadastro de empresas em ADM002 ou corrija o código informado.
Fonte: source/MEQ008/UdmMEQ008.pas:336-344 (TdmMEQ008.tabMOVESTOQUECD_EMPRESAORValidate)
O Histórico deve ser do Tipo Estoque [TCB003]!
Causa: O histórico selecionado tem tipo diferente de 'Estoque' no cadastro.
Ação: Selecione ou cadastre um histórico do tipo Estoque em TCB003.
Fonte: source/MEQ008/UdmMEQ008.pas:404-405 (TdmMEQ008.tabMOVESTOQUECD_HISTSAIValidate)
O Histórico não está Ativo [TCB003]!
Causa: O histórico informado está inativo no cadastro TCB003.
Ação: Ative o histórico em TCB003 ou escolha outro.
Fonte: source/MEQ008/UdmMEQ008.pas:402-403 (TdmMEQ008.tabMOVESTOQUECD_HISTSAIValidate)
O Histórico não está Cadastrado [TCB003]!
Causa: O código de histórico digitado não existe na tabela HISTORICO.
Ação: Cadastre o histórico em TCB003 ou use F9 para escolher um existente.
Fonte: source/MEQ008/UdmMEQ008.pas:408-409 (TdmMEQ008.tabMOVESTOQUECD_HISTSAIValidate)
O Local de Entrada deve ser Informado!
Causa: O campo Local de Entrada (destino) está vazio ao salvar.
Ação: Informe o local de entrada antes de salvar.
Fonte: source/MEQ008/UMEQ008.pas:299-300 (TfrmMEQ008.btnSalvarClick)
O Local de Saída deve ser Diferente do Local de Entrada. Verifique!
Causa: Tipo de local e local de saída são iguais ao tipo de local e local de entrada, dentro da mesma empresa.
Ação: Escolha um local de destino diferente do de origem, ou informe uma empresa de destino diferente (se ST_TRANSFEMPRESAS habilitado).
Fonte: source/MEQ008/UMEQ008.pas:302-306 (TfrmMEQ008.btnSalvarClick)
O Local de Saída deve ser Informado!
Causa: O campo Local de Saída (origem) está vazio ao salvar.
Ação: Informe o local de saída antes de salvar.
Fonte: source/MEQ008/UMEQ008.pas:294-295 (TfrmMEQ008.btnSalvarClick)
O Produto %s não está Associado ao Tipo de Local e Local [TPO001] ou o Usuário (%s) não possui acesso ao Local informado [ADM001].
Causa: O produto não está vinculado a esse tipo de local/local no cadastro, ou o usuário logado não tem acesso liberado a esse local.
Ação: Verifique o vínculo do produto ao local em TPO001, ou libere o acesso do usuário ao local em ADM001.
Fonte: source/MEQ008/UdmMEQ008.pas:118-127 (TdmMEQ008.tabMOVESTOQUECD_TIPOLOCALValidate)
O Produto [%s] possui controle de serial [TPO001]. Não é possível fazer lançamento avulso de estoque para produtos que controlam Serial. Verifique! [MNF001]
Causa: O produto está configurado com controle de série no cadastro.
Ação: Use um processo específico para produtos serializados; este módulo não trata transferência avulsa de itens com serial.
Fonte: source/MEQ008/UdmMEQ008.pas:182-184 (TdmMEQ008.tabMOVESTOQUECD_ITEMValidate)
O Produto deve ser Informado!
Causa: O campo Produto está vazio ao tentar salvar.
Ação: Informe o produto antes de salvar.
Fonte: source/MEQ008/UMEQ008.pas:287-288 (TfrmMEQ008.btnSalvarClick)
O Produto não está Ativo [TPO001]!
Causa: O produto informado está inativo no cadastro.
Ação: Ative o produto no cadastro (TPO001) ou escolha outro produto.
Fonte: source/MEQ008/UdmMEQ008.pas:179-180 (TdmMEQ008.tabMOVESTOQUECD_ITEMValidate)
O Produto não está Cadastrado [TPO001]!
Causa: O código de produto digitado não existe na tabela ITEM.
Ação: Cadastre o produto ou use F9 para pesquisar um produto existente.
Fonte: source/MEQ008/UdmMEQ008.pas:262-263 (TdmMEQ008.tabMOVESTOQUECD_ITEMValidate)
O Tipo de Local de Entrada deve ser Informado!
Causa: O campo Tipo de Local de Entrada está vazio ao salvar.
Ação: Informe o tipo de local de entrada antes de salvar.
Fonte: source/MEQ008/UMEQ008.pas:297-298 (TfrmMEQ008.btnSalvarClick)
O Tipo de Local de Saída deve ser Informado!
Causa: O campo Tipo de Local de Saída está vazio ao salvar.
Ação: Informe o tipo de local de saída antes de salvar.
Fonte: source/MEQ008/UMEQ008.pas:292-293 (TfrmMEQ008.btnSalvarClick)
Produto não Cadastrado [TPO001]!
Causa: O código de barras lido não corresponde a nenhum produto retornado por VALIDA_CODIGOBARRA.
Ação: Verifique se o código de barras está corretamente cadastrado no produto em TPO001.
Fonte: source/MEQ008/UdmMEQ008.pas:380-381 (TdmMEQ008.tabMOVESTOQUECD_CODIGOBARRAValidate)
Rateio da Grade do Produto Cancelado!
Causa: O usuário fechou ou cancelou a tela de rateio de grade sem concluir a divisão das quantidades por item da grade.
Ação: Informe o produto novamente e conclua o rateio da grade, informando as quantidades por item.
Fonte: source/MEQ008/UdmMEQ008.pas:248-249 (TdmMEQ008.tabMOVESTOQUECD_ITEMValidate)
Rateio de Lotes Cancelado!
Causa: O usuário cancelou a tela de rateio de lotes/sementes ao tentar salvar a transferência.
Ação: Refaça a transferência e conclua o rateio de lotes antes de salvar.
Fonte: source/MEQ008/UMEQ008.pas:325-326 (TfrmMEQ008.btnSalvarClick)
É Obrigatório informar a Empresa Destino para validar os Tipos de Locais de Armazenagem!
Causa: O usuário tentou informar o tipo de local/local de entrada sem preencher a Empresa Destino.
Ação: Informe a Empresa Destino antes do tipo de local/local de entrada.
Fonte: source/MEQ008/UdmMEQ008.pas:283-284 (TdmMEQ008.tabMOVESTOQUECD_LOCALENTValidate)
É Obrigatório informar a Empresa Origem para validar os Tipos de Locais de Armazenagem!
Causa: O usuário tentou informar o tipo de local/local de saída sem preencher a Empresa Origem.
Ação: Informe a Empresa Origem antes do tipo de local/local de saída.
Fonte: source/MEQ008/UdmMEQ008.pas:115-116 (TdmMEQ008.tabMOVESTOQUECD_TIPOLOCALValidate)
É Obrigatório informar Empresa Origem/Destino para Utilizar a Lista dos Locais de Armazenagem!
Causa: O usuário pressionou F9 para listar tipos de local sem antes informar a empresa correspondente.
Ação: Informe a empresa de origem ou destino antes de usar a lista (F9).
Fonte: source/MEQ008/UMEQ008.pas:192-193 (Lista_TipoLocal)
É Obrigatório informar o Produto para a Validação do Local de Armazenagem!
Causa: O usuário tentou informar/validar o Local sem o Produto preenchido.
Ação: Informe o produto antes do local.
Fonte: source/MEQ008/UdmMEQ008.pas:140-141 (TdmMEQ008.tabMOVESTOQUECD_LOCALValidate)
É Obrigatório informar o Produto para a Validação do Tipo de Local de Armazenagem!
Causa: O usuário tentou informar/validar o Tipo de Local sem o Produto preenchido.
Ação: Informe o produto antes do tipo de local.
Fonte: source/MEQ008/UdmMEQ008.pas:113-114 (TdmMEQ008.tabMOVESTOQUECD_TIPOLOCALValidate)
É Obrigatório informar o Produto para Utilizar a Lista dos Tipos de Locais de Armazenagem!
Causa: O usuário pressionou F9 na lista de tipo de local sem o produto informado.
Ação: Informe o produto antes de usar a lista (F9).
Fonte: source/MEQ008/UMEQ008.pas:190-191 (Lista_TipoLocal)
É Obrigatório informar o Tipo de Local para a Validação do Local de Armazenagem!
Causa: O usuário tentou informar o Local sem o Tipo de Local preenchido antes.
Ação: Informe o tipo de local antes do local.
Fonte: source/MEQ008/UdmMEQ008.pas:144-145 (TdmMEQ008.tabMOVESTOQUECD_LOCALValidate)
É Obrigatório informar o Tipo de Local para Utilizar a Lista dos Locais de Armazenagem!
Causa: O usuário pressionou F9 na lista de locais sem o tipo de local selecionado.
Ação: Informe o tipo de local antes de usar a lista (F9) de locais.
Fonte: source/MEQ008/UMEQ008.pas:223-224 (Lista_Local)
Regras de negócio
MEQ008.R001(verregras/MEQ008/MEQ008.R001.md)MEQ008.R002(verregras/MEQ008/MEQ008.R002.md)MEQ008.R003(verregras/MEQ008/MEQ008.R003.md)MEQ008.R004(verregras/MEQ008/MEQ008.R004.md)MEQ008.R005(verregras/MEQ008/MEQ008.R005.md)MEQ008.R006(verregras/MEQ008/MEQ008.R006.md)MEQ008.R007(verregras/MEQ008/MEQ008.R007.md)MEQ008.R008(verregras/MEQ008/MEQ008.R008.md)MEQ008.R009(verregras/MEQ008/MEQ008.R009.md)MEQ008.R010(verregras/MEQ008/MEQ008.R010.md)MEQ008.R011(verregras/MEQ008/MEQ008.R011.md)MEQ008.R012(verregras/MEQ008/MEQ008.R012.md)MEQ008.R013(verregras/MEQ008/MEQ008.R013.md)MEQ008.R014(verregras/MEQ008/MEQ008.R014.md)MEQ008.R015(verregras/MEQ008/MEQ008.R015.md)MEQ008.R016(verregras/MEQ008/MEQ008.R016.md)MEQ008.R017(verregras/MEQ008/MEQ008.R017.md)MEQ008.R018(verregras/MEQ008/MEQ008.R018.md)MEQ008.R019(verregras/MEQ008/MEQ008.R019.md)
Perguntas frequentes
P: Por que não consigo salvar a transferência mesmo preenchendo o produto?
R: Além do produto, é preciso informar quantidade maior que zero, tipo de local e local de saída, e tipo de local e local de entrada; qualquer um vazio impede salvar.
Fonte: source/MEQ008/UMEQ008.pas:287-300 (TfrmMEQ008.btnSalvarClick)
P: Por que aparece 'O Local de Saída deve ser Diferente do Local de Entrada'?
R: O sistema não permite transferência para o mesmo tipo de local/local dentro da mesma empresa; escolha um local de destino diferente.
Fonte: source/MEQ008/UMEQ008.pas:302-306 (TfrmMEQ008.btnSalvarClick)
P: Por que o sistema diz que o produto não está associado ao Tipo de Local/Local mesmo o local existindo?
R: Pode ser falta de vínculo do produto a esse local no cadastro (TPO001) ou o usuário logado não ter acesso liberado a esse local (ADM001); verifique as duas hipóteses.
Fonte: source/MEQ008/UdmMEQ008.pas:118-127 (TdmMEQ008.tabMOVESTOQUECD_TIPOLOCALValidate)
P: Por que não consigo transferir para outra empresa/filial?
R: A transferência entre empresas só é permitida se o parâmetro ST_TRANSFEMPRESAS estiver habilitado em Parâmetros de Estoque (MEQ001); caso contrário os campos de empresa e histórico de entrada ficam bloqueados na empresa da sessão.
Fonte: source/MEQ008/UMEQ008.pas:640-679 (TfrmMEQ008.btnNovoClick)
P: Por que os campos de Empresa e Histórico de Entrada aparecem cinza/bloqueados?
R: Porque o parâmetro ST_TRANSFEMPRESAS está desabilitado (N) para a empresa; nesse caso a transferência é sempre dentro da mesma empresa.
Fonte: source/MEQ008/UMEQ008.pas:640-659 (TfrmMEQ008.btnNovoClick)
P: Por que recebo mensagem dizendo que o produto controla serial e não consigo lançar a transferência?
R: O módulo de Transferência de Local não trata produtos com controle de série (serial); esse tipo de produto exige outro processo de movimentação.
Fonte: source/MEQ008/UdmMEQ008.pas:182-184 (TdmMEQ008.tabMOVESTOQUECD_ITEMValidate)
P: Por que abre uma tela pedindo para dividir a quantidade entre lotes?
R: O produto informado controla lote/semente (ST_SEMENTE = S ou P) e o sistema exige o rateio automático da quantidade entre os lotes disponíveis antes de salvar.
Fonte: source/MEQ008/UMEQ008.pas:313-326 (TfrmMEQ008.btnSalvarClick)
P: Por que a leitura do código de barras não encontra o produto?
R: A procedure VALIDA_CODIGOBARRA não localizou nenhum item para esse código; confira se o código de barras está cadastrado corretamente no produto (TPO001).
Fonte: source/MEQ008/UdmMEQ008.pas:372-381 (TdmMEQ008.tabMOVESTOQUECD_CODIGOBARRAValidate)
P: Por que a transferência não sai quando o local de origem fica com saldo negativo?
R: Se o local de armazenagem não permite saldo negativo, a procedure GERA_ESTOQUE recusa o movimento de saída quando a quantidade deixaria o saldo negativo na data do lançamento.
Fonte: Scripts/GERA_ESTOQUE.sql:425-444 (GERA_ESTOQUE)
P: Onde configuro a operação de estoque usada na Transferência de Local?
R: Nos Parâmetros de Estoque (MEQ001), campos CD_TRANSFSAI (operação de saída) e CD_TRANSFENT (operação de entrada); sem isso o módulo bloqueia os botões Novo/Salvar.
Fonte: source/MEQ008/UdmMEQ008.pas:89-104 (Busca_Parametros)
P: Por que aparece 'Os Parâmetros do Estoque para a Empresa ... não estão Cadastrados [MEQ001]!' e a tela abre travada?
R: Não existe registro de PARMESTOQUE para a empresa da sessão; cadastre os parâmetros de estoque da empresa em MEQ001 antes de usar a transferência.
Fonte: source/MEQ008/UdmMEQ008.pas:100-103 (Busca_Parametros), source/MEQ008/UMEQ008.pas:154-161 (iniciar)
Dúvidas em aberto (o código não responde)
- Onde é verificada a licença erpEstoque exigida para acessar o módulo? — O briefing informa a licença exigida, mas essa verificação não aparece no código lido de UMEQ008.pas/UdmMEQ008.pas — provavelmente é feita fora do módulo, no carregamento do menu.
- O campo Histórico de Saída (CD_HISTSAI) é realmente obrigatório para salvar? — Não há checagem explícita de CD_HISTSAI vazio em TfrmMEQ008.btnSalvarClick; não está claro se GERA_ESTOQUE aceita histórico nulo ou gera erro de banco.
- Quais critérios exatos o rateio de lotes (RateioLoteProducao) e o rateio de grade (RateioGrade) usam para distribuir a quantidade? — Essas rotinas estão nas units jLote/jGrade, não lidas nesta sessão; só se sabe que cancelamento pelo usuário aborta a operação.
- O que exatamente VALIDA_CODIGOBARRA faz quando o código corresponde a uma caixa/embalagem (múltiplos itens)? — O código só foi inspecionado parcialmente (grep); o corpo completo da lógica de código de barras por caixa não foi lido.