Pular para o conteúdo principal

Obriga Autorizador na Devolução/Cancelamento de Retirada de Locações

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Locações → Parâmetros de Locações → "Obriga Autorizador [MPD046]" Tabela: PARMFATUR.ST_AUTORIZADORLOC Valor padrão: S (Sim - exige autorizador)

Telas impactadas​

MóduloCódigoDescrição
Retirada/Devolução de LocaçãoMPD046Controle de retirada e devolução de produtos locados (única tela consumidora do parâmetro)

Observação: o grep em source/ mostra que este parâmetro só é lido fora de MFA001 pela tela MPD046 (nenhuma outra unit consome ST_AUTORIZADORLOC). As demais referências apenas persistem/carregam o valor na própria PARMFATUR.

Procedures impactadas​

Não foram encontradas referências a ST_AUTORIZADORLOC em nenhum script SQL de Scripts/ (0 ocorrências). O parâmetro é utilizado exclusivamente pelo código Delphi da tela MPD046.

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_AUTORIZADORLOCParâmetro principal (S/N)
AUTORIZADOR.CD_AUTORIZADORUsuário habilitado como autorizador
AUTORIZADOR.ST_ATIVOSe o autorizador está ativo (lido na abertura da MPD046)
FILTROS.CD_USUARIORETIRADALogin digitado na tela de confirmação TfrmMPD046OK
FILTROS.SENHA_RETIRADASenha digitada na tela de confirmação TfrmMPD046OK
FILTROS.ST_RETIRADAFlag de cancelamento de retirada (setado antes da confirmação do autorizador)
FILTROS.DT_DEVOLUCAOData de devolução do item locado
FILTROS.ST_AVARIAIndica se a devolução é com/sem avaria

Opções disponíveis​

S - Sim (exige autorizador)​

O que fazDetalhe
Exige autorizador?SIM, em todas as operações de devolução e cancelamento de retirada na MPD046
Tela exibidaTfrmMPD046OK (login + senha do autorizador)
Fluxos afetados(1) Devolução sem avaria com confirmação; (2) Devolução com avaria / sem data; (3) Cancelamento de retirada
Consequência ao cancelarSe TfrmMPD046OK retornar diferente de mrOk, a operação é abortada

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Locações → "Obriga Autorizador [MPD046]" = Sim
  2. Salve os parâmetros (F6)
  3. Cadastre pelo menos um usuário em AUTORIZADOR com ST_ATIVO = S
  4. Abra MPD046 (Retirada/Devolução de Locação)
  5. Filtre um contrato/locação em aberto
  6. Cenário A - Devolução sem avaria: informe DT_DEVOLUCAO, deixe ST_AVARIA = N, tente salvar (F6) → sistema pergunta "Confirmar Devolução sem Avaria?" → ao confirmar, abre TfrmMPD046OK pedindo login/senha do autorizador
  7. Cenário B - Devolução com avaria ou sem data: informe dados → sistema abre direto TfrmMPD046OK
  8. Cenário C - Cancelamento de retirada: marque itens e confirme cancelamento → tabFILTROSST_RETIRADA = 'S' → abre TfrmMPD046OK
  9. Informe login e senha de autorizador válido → botão Confirmar executa frmMPD046.Confirma() e persiste a operação
  10. Se Cancelar for clicado (BtnCancelar1), os campos CD_USUARIORETIRADA, SENHA_RETIRADA, DT_DEVOLUCAO, DT_RETIRADA, ST_LAVANDERIA, ST_AJUSTE, NM_COSTUREIRA são limpos e a operação é abortada

Resultado esperado: toda devolução ou cancelamento de retirada em MPD046 só se concretiza após validação do autorizador via login/senha, impedindo que um operador comum libere produtos locados sem conferência.


N - Não (não exige autorizador)​

O que fazDetalhe
Exige autorizador?NÃO - operação é confirmada diretamente
Tela exibidaNenhuma - vai direto para confirma()
FluxoedtCD_EMPRESA.Text := '1'; confirma();
Risco operacionalQualquer usuário com acesso à MPD046 pode finalizar devolução/cancelamento

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Locações → "Obriga Autorizador [MPD046]" = Não
  2. Salve os parâmetros (F6)
  3. Abra MPD046
  4. Filtre um contrato/locação em aberto
  5. Informe dados da devolução (ou marque cancelamento de retirada) e salve (F6)
  6. Nenhuma tela de autorizador é exibida - o método confirma() é chamado imediatamente e a operação é persistida
  7. O campo edtCD_EMPRESA.Text é forçado para '1' antes do confirma()

Resultado esperado: operador conclui a devolução/cancelamento sem necessidade de autorização adicional. Útil em cenários onde o próprio operador da MPD046 já é responsável pela conferência, mas diminui o controle de segregação de função.


Tabela Comparativa Resumida​

ValorExige Autorizador?Tela ModalFluxos Afetados em MPD046Fallback se Cancelar
S (padrão)SimTfrmMPD046OKDevolução sem avaria (com confirmação), devolução com avaria/sem data, cancelamento de retiradaAborta operação (Exit)
NNão-Mesmos fluxos seguem direto para Confirma()Não aplicável

Referências no Código Fonte​

Tela de configuração (MFA001)​

  • source/MFA001/UMFA001.dfm:10630 - object pagLocacao: TTabSheet com Caption = 'Locações'
  • source/MFA001/UMFA001.dfm:10646-10659 - Label67 com Caption = 'Obriga Autorizador [MPD046]' (label do combo)
  • source/MFA001/UMFA001.dfm:10785-10811 - object cmbObrigaAutorizadorLoc: TwwDBComboBox com DataField = 'ST_AUTORIZADORLOC' e Items.Strings = ('Sim'#9'S', 'Não'#9'N')
  • source/MFA001/UdmMFA001.pas:201 - declaração tabPARMFATURST_AUTORIZADORLOC: TStringField
  • source/MFA001/UdmMFA001.pas:533 - valor padrão em AfterInsert: tabPARMFATURST_AUTORIZADORLOC.AsString := 'S';
  • source/MFA001/UdmMFA001.dfm:1500-1505 - definição do TStringField (Size = 1, FixedChar = True)
  • source/MFA001/UdmMFA001.dfm:210,2405,2571,2800,3090 - inclusão em SELECT, INSERT, UPDATE da PARMFATUR

Tela consumidora (MPD046)​

  • source/MPD046/UdmMPD046.pas:185 - variável pública iST_AUTORIZADORLOC: String no data module
  • source/MPD046/UMPD046.pas:218 - carga do parâmetro:
    dmMPD046.iST_AUTORIZADORLOC := ExecutaConsulta(dmMPD046.transaction,
    'SELECT P.ST_AUTORIZADORLOC FROM PARMFATUR P WHERE P.CD_EMPRESA = '
    + IntToStr(sessao.empresa.cd_empresa))[0];
  • source/MPD046/UMPD046.pas:1162 - decisão no fluxo de devolução sem avaria com confirmação:
    if(dmMPD046.iST_AUTORIZADORLOC = 'S')then
    if (msgcodigo('C-0000',['Confirmar Devolução sem Avaria?'])) then
    Application.CreateForm(TfrmMPD046OK, frmMPD046OK);
  • source/MPD046/UMPD046.pas:1183 - decisão no fluxo de devolução com avaria / sem data de devolução:
    if(dmMPD046.iST_AUTORIZADORLOC = 'S')then
    begin
    Application.CreateForm(TfrmMPD046OK, frmMPD046OK);
    if ( frmMPD046OK.ShowModal = mrOk ) then ...
    end
    else
    begin
    edtCD_EMPRESA.Text := '1';
    confirma();
    end;
  • source/MPD046/UMPD046.pas:1437 - decisão no fluxo de cancelamento de retirada:
    dmMPD046.tabFILTROS.Edit;
    dmMPD046.tabFILTROSST_RETIRADA.AsString := 'S';
    if(dmMPD046.iST_AUTORIZADORLOC = 'S')then
    begin
    Application.CreateForm(TfrmMPD046OK, frmMPD046OK);
    ...
    end
    else
    begin
    edtCD_EMPRESA.Text := '1';
    confirma();
    end;

Formulário de autorização (TfrmMPD046OK)​

  • source/MPD046/UfrmMPD046OK.pas:12-29 - declaração da classe com edtLogin, edtSenha, btnConfirmar, btnCancelar1
  • source/MPD046/UfrmMPD046OK.pas:42-54 - FormCreate remove a opção "Fechar" do menu de sistema (só saída via botões)
  • source/MPD046/UfrmMPD046OK.pas:65-80 - BtnCancelar1Click limpa CD_USUARIORETIRADA, SENHA_RETIRADA, DT_DEVOLUCAO, DT_RETIRADA, ST_LAVANDERIA, ST_AJUSTE, NM_COSTUREIRA e fecha o formulário
  • source/MPD046/UfrmMPD046OK.pas:83-96 - btnConfirmarClick invoca frmMPD046.Confirma() e, em caso de exceção, relança como JException W-0000

Scripts SQL​

  • Nenhuma ocorrência de ST_AUTORIZADORLOC em Scripts/ - o parâmetro é puramente client-side (regra implementada apenas no Delphi da MPD046).