Pular para o conteúdo principal

RCO001 — Relação de Solicitações

Fonte​

  • Form: source/RCO001/URCO001.pas, source/RCO001/URCO001.dfm
  • DataModule: source/RCO001/UdmRCO001.pas, source/RCO001/UdmRCO001.dfm
  • Package: source/RCO001/RCO001.dpk
  • Título oficial: source/jCommon/jMenu.pas — RCO.add('RCO001', 'Relação de Solicitações', 1, [erpCotacoes])

Objetivo​

Relatório do módulo de Cotacoes/Compras que lista as solicitacoes de compra com seus itens, filtrando por empresa, periodo de solicitacao, periodo desejado, tipo (Normal/Urgente), status do item (Sem Cotacao / Em Cotacao / Em Negociacao / Atendida / Cancelada), numero de solicitacao, orcamento/OS, produtos (multi-selecao) e solicitantes (multi-selecao). A tela serve apenas como formulario de filtros — nao persiste nada no banco; monta SQL dinamico e delega a impressão ao GeraRelatorio do jReport.

Modelos de Relatorio​

Modelo 1: Unico (Relacao de Solicitacoes)​

Quando usado: sempre — a tela nao possui combobox de modelo. O botao "Imprimir <F8>" monta um unico SQL baseado nos filtros preenchidos.

Lista cada item (ITEMSOLICITACAO) de solicitacoes (SOLICITACAO) com dados do produto, solicitante (usuario), quantidade, peso, status do item, tipo (NORMAL/URGENTE), datas (solicitacao e desejada) e numero de orcamento. Ordenado por solicitante, numero de solicitacao e descricao do produto.

SQL Base:

SELECT S.NR_SOLICITACAO, S.ST_SOLICITACAO,
CASE S.TP_SOLICITACAO WHEN 'U' THEN 'URGENTE' ELSE 'NORMAL' END TIPO,
U.CD_USUARIO, U.NM_USUARIO, S.NR_ORCAMENTO,
S.DT_SOLICITACAO, S.DT_DESEJADA,
ITEM.DS_ITEM || ' - ' || I.CD_ITEM DS_ITEM,
I.PS_SOLICITADO, I.QT_SOLICITADA,
I.ST_ITEMSOLICITACAO
FROM SOLICITACAO S
INNER JOIN ITEMSOLICITACAO I ON (S.CD_EMPRESA = I.CD_EMPRESA
AND S.NR_SOLICITACAO = I.NR_SOLICITACAO)
INNER JOIN ITEM ON (I.CD_ITEM = ITEM.CD_ITEM)
INNER JOIN USUARIO U ON (U.CD_USUARIO = S.CD_SOLICITANTE)
WHERE S.CD_EMPRESA = :CD_EMPRESA
/* filtros dinamicos aplicados no btnImprimirClick: */
-- AND S.TP_SOLICITACAO = :TP_SOLICITACAO (se <> 'T')
-- AND I.ST_ITEMSOLICITACAO= :ST_ITEMSOLICITACAO (se <> 'T')
-- AND S.NR_SOLICITACAO = :NR_SOLICITACAO (se informado)
-- AND S.NR_ORCAMENTO = :NR_ORCAMENTO (se informado)
-- AND S.DT_SOLICITACAO >= :DT_INI_SOL (se informado)
-- AND S.DT_SOLICITACAO <= :DT_FIN_SOL (se informado)
-- AND S.DT_DESEJADA >= :DT_INI_DES (se informado)
-- AND S.DT_DESEJADA <= :DT_FIN_DES (se informado)
-- AND I.CD_ITEM IN (:LISTA_PRODUTOS) (grid "Produtos", se preenchido)
-- AND S.CD_SOLICITANTE IN (:LISTA_SOLICITANTES) (grid "Solicitante", se preenchido)
ORDER BY U.NM_USUARIO, S.NR_SOLICITACAO, ITEM.DS_ITEM

Observacao tecnica: o SQL e montado por concatenacao de strings em btnImprimirClick (padrao legado com vulnerabilidade a SQL injection via campos de filtro). Datas sao formatadas como mm/dd/yyyy literal entre aspas.

Filtros​

Campos simples (grupo "Filtros para Consulta"):

  • Empresa (Lista de Empresas cadastradas) F9 — obrigatorio
  • N° Solicitação
  • Data Solicitação De / Até
  • Data Desejada De / Até
  • Orçamento / Ordem Serviço
  • Tipo (Normal / Urgente / Todas) — default "Todas"
  • Status (Sem Cotação / Em Cotação / Em Negociação / Atendida / Cancelada / Todas) — default "Todas"

Filtros de grid (multi-selecao via F9):

  • Solicitante (Lista de Usuarios) F9 — multi-selecao sobre USUARIO, aplica S.CD_SOLICITANTE IN (...)
  • Produtos (Lista de Produtos ativos) F9 — multi-selecao sobre ITEM com ST_ATIVO='S', aplica I.CD_ITEM IN (...)

Parametros que Influenciam​

Nao foram identificados parametros de tabelas PARM*/CONFIG* influenciando este relatorio. O comportamento depende exclusivamente dos filtros informados em tela e do programa.codigo (usado pelo GeraRelatorio para localizar o layout .rtm/.fr3 associado).

Regras de Negocio​

  1. Empresa obrigatoria — antes de imprimir, valida edtCD_EMPRESA.Text &lt;&gt; '', senao lanca JException E-0000: "É Obrigatório Informar a Empresa para Realizar a Consulta!".
  2. Validacao de empresa (tabEMPRESACD_EMPRESAValidate) — ao digitar CD_EMPRESA, consulta EMPRESA; se nao existir, E-0000: "A Empresa não está Cadastrada [ADM002]!".
  3. Validacao de solicitacao (tabEMPRESANR_SOLICITACAOValidate) — exige empresa informada; consulta SOLICITACAO por (NR_SOLICITACAO, CD_EMPRESA); se nao existir, E-0000: "A Solicitação não está Cadastrada para a Empresa X [MCO001]!".
  4. Validacao de produto (tabITEMCD_ITEMValidate) — consulta ITEM; se ST_ATIVO='N', E-0000: "O Produto não está Ativo [TPO001]!"; se nao existir, E-0000: "O Código do Produto não está Cadastrado [TPO001]!".
  5. Validacao de solicitante (tabPESSOACD_SOLICITANTEValidate) — consulta USUARIO; se nao existir, E-0000: "O Solicitante não está Cadastrado [ADM001]!".
  6. Consistencia de periodo — Data Solicitação De nao pode ser maior que Até (e vice-versa); mesma regra para Data Desejada.
  7. Transacao descartada — FormClose sempre faz Rollback; a tela nao persiste dados (os filtros vivem apenas em memoria via tabEMPRESA com Append sem Post).
  8. Controle de acesso — iniciar() oculta btnSalvar, btnExcluir, btnProcurar, btnAtualizar (tela read-only por natureza). Bloco programa.tpAcesso = 2 existe mas sem efeito.
  9. Atalhos de teclado — F4=Limpar (apaga linha do grid navegado), F5=Novo (reinicia filtros), F8=Imprimir, F12=Sair.

Mensagens exibidas​

Levantadas de source/RCO001/ pela camada 0 (commit 96fc51e236).

Mais 11 mensagens com texto literal no código: RCO001.

Datasets e SQL​

DatasetPapelTabela baseObservacao
tabEMPRESABuffer de filtros simples (empresa, datas, numeros)EMPRESAAberto com WHERE CD_EMPRESA = -1 e Append — em memoria. Campos DT_*, NR_SOLICITACAO, NR_ORCAMENTO sao aliases criados via CAST(DT_REGISTRO AS DATE) / CD_EMPRESA so para fornecer campos editaveis.
tabITEMGrid multi-selecao de produtosITEMAberto com WHERE CD_ITEM = -1 — funciona como lista vazia em memoria; F9 chama Pesquisa(..., 'Select DS_ITEM, CD_ITEM From ITEM where ST_ATIVO = ''S''').
tabPESSOAGrid multi-selecao de solicitantesUSUARIO (aliased como CD_SOLICITANTE/DS_SOLICITANTE)Aberto com WHERE CD_USUARIO = '-1'; F9 chama Pesquisa(..., 'Select NM_USUARIO, CD_USUARIO From USUARIO').
btnImprimirClick (SQL ad-hoc)Consulta final do relatorioSOLICITACAO, ITEMSOLICITACAO, ITEM, USUARIOMontado por concatenacao; entregue ao GeraRelatorio(transaction, programa.codigo, isqlSALDO) do jReport.

Perguntas Frequentes​

P: Qual é a finalidade da tela RCO001? R: A tela RCO001 permite consultar as solicitações de compra registradas no sistema e emitir um relatório detalhado. O usuário pode filtrar por empresa, tipo de solicitação (Urgente/Normal), status, número da solicitação, número do orçamento/ordem de serviço, período de solicitação, período desejado, produtos e solicitantes. O relatório exibe os dados da solicitação, itens solicitados, quantidades e status de cada item.

P: O sistema apresenta "É Obrigatório Informar a Empresa para Realizar a Consulta!". O que fazer? R: O campo "Empresa" é obrigatório para emitir o relatório de solicitações de compra. Informe um código de empresa válido no campo correspondente antes de clicar em Imprimir. Utilize a tecla F9 para pesquisar as empresas disponíveis.

P: O sistema apresenta "A Empresa não está Cadastrada [ADM002]!". O que fazer? R: O código de empresa informado não foi encontrado no cadastro. Verifique se o código está correto ou acesse a tela Cadastro de Empresas (ADM002) para verificar as empresas disponíveis.

P: O sistema apresenta "O Produto não está Ativo [TPO001]!". O que fazer? R: O produto informado no grid de Produtos está com o status "Inativo" no cadastro. Para utilizá-lo como filtro, primeiro ative o produto na tela Cadastro de Produtos (TPO001) ou informe outro produto que esteja ativo.

P: O sistema apresenta "O Código do Produto não está Cadastrado [TPO001]!". O que fazer? R: O código do produto informado no grid de Produtos não existe no cadastro do sistema. Verifique o código digitado ou cadastre o produto na tela Cadastro de Produtos (TPO001).

P: O sistema apresenta "A Data Inicial não pode ser Maior que a Data Final!". O que fazer? R: Nos filtros de período (Data Solicitação ou Data Desejada), a data inicial deve ser menor ou igual à data final. Corrija as datas para que formem um intervalo válido.

P: O sistema apresenta "A Data Final não pode ser Menor que a Data Inicial!". O que fazer? R: Nos filtros de período (Data Solicitação ou Data Desejada), a data final deve ser maior ou igual à data inicial. Corrija as datas informadas.

P: O sistema apresenta "É Obrigatório Informar a Empresa para Validação da Solicitação!". O que fazer? R: Para validar o número de uma solicitação, é necessário que o campo "Empresa" esteja preenchido, pois as solicitações são vinculadas a uma empresa específica. Informe o código da empresa antes de preencher o número da solicitação.

P: O sistema apresenta "A Solicitação não está Cadastrada para a Empresa X [MCO001]!". O que fazer? R: O número de solicitação informado não existe para a empresa selecionada. Verifique o número digitado ou consulte as solicitações disponíveis na tela Manutenção de Solicitações de Compra (MCO001).

P: O sistema apresenta "O Solicitante não está Cadastrado [ADM001]!". O que fazer? R: O código de solicitante informado no grid de Solicitantes não foi encontrado no cadastro de usuários do sistema. Verifique o código digitado ou cadastre o usuário na tela Cadastro de Usuários (ADM001).

P: Como filtrar por tipo de solicitação? R: Utilize o campo "Tipo" para selecionar entre solicitações do tipo "Urgente", "Normal" ou "Todas" (sem filtro de tipo).

P: Como filtrar por status da solicitação? R: Utilize o campo "Status / Situação" para selecionar o status desejado dos itens da solicitação.

P: Quais são os atalhos de teclado disponíveis na tela RCO001? R: Os atalhos disponíveis são:

  • F5 - Novo registro (limpa os filtros para nova consulta)
  • F4 - Limpar/Cancelar registro selecionado no grid ativo
  • F8 - Imprimir o relatório
  • F9 - Pesquisar (nos grids de Produtos, Solicitantes e no campo Empresa)
  • F12 - Sair da tela

Tabelas de Escrita (INSERT/UPDATE/DELETE)​

Nenhuma. A tela e um relatorio puro. Os TFDUpdateSQL declarados no DataModule (updEMPRESA, updITEM, updPESSOA) sao templates gerados automaticamente pelo Delphi e nunca sao executados — os datasets operam apenas em memoria (Append/Delete para alimentar grids de filtro) e a transacao sempre termina em Rollback no FormClose.

Tabelas de Leitura (SELECT)​

TabelaOperacoes
EMPRESASELECT
ITEMSELECT
ITEMSOLICITACAOSELECT
SOLICITACAOSELECT
USUARIOSELECT

Procedures Chamadas​

Nenhuma. O relatorio usa SELECT inline com JOINs; nao invoca stored procedures nem selectable procedures.

Tabelas via Procedures (acesso indireto)​

Nao aplicavel (sem procedures).

Dependencias Aferentes (quem alimenta esta tela)​

Telas que escrevem nas tabelas lidas por este relatorio. Limitado a cadastros (T*/ADM*) e movimentacoes (M*) que sao os reais produtores de dados.

TelaTítuloTabelas em Comum
MCO010MCO010 (Manutencao de Solicitacao)ITEM, ITEMSOLICITACAO, SOLICITACAO
MPD004OrcamentoITEM, ITEMSOLICITACAO, SOLICITACAO
MCO001SolicitacaoITEMSOLICITACAO, SOLICITACAO
MCO008COMPRA DE ITENSITEMSOLICITACAO, SOLICITACAO
MCO011MCO011 (Cotacao)ITEMSOLICITACAO, SOLICITACAO
MPD044Orcamento de Produto Sob MedidaITEM, ITEMSOLICITACAO
MCO002Liberacao de SolicitacaoSOLICITACAO
MCO003MCO003 (Itens de Solicitacao)ITEMSOLICITACAO
ADM001Cadastro de UsuariosUSUARIO
TPO001ProdutosITEM
TOF007Cadastro de PecasITEM
TFA006Tabelas de PrecoITEM
TPO027Cadastro de Cod de Barras Por Item na GradeITEM
TPO038Alteracao Codigos de Tributacao Serviços NFS-eITEM
TRC007Cadastro de Serviços de PneuITEM
TRC012Cadastro de Conserto de PneuITEM
MEQ074Simulacao de ProducaoITEM
MPD007Ordem de Serviço - IndustriaITEM
MPD018Orcamento RevendaITEM
MNF001Recebimento de Notas Fiscais de CompraITEM
MNF011Alteracao de ComissoesITEM
MNF016Controle de EntregaITEM
MNF025Emissao de MDFeITEM
MNF031Gerenciamento de Manifesto do DestinatarioITEM
MTR005Consulta / Fechamento de ViagemITEM
TFA066TFA066ITEM
TFA077TFA077ITEM
TPO039TPO039ITEM

+14 telas que escrevem em ITEM via cadastros auxiliares (MEQ010, MEQ073, MNF024, MNF028, MNF030, MPD014, MPD046, MPD059, MPD060, MPD061, MPD073, MPD084, MPD092, TRD025) — nao listadas individualmente por serem produtoras marginais.

Dependencias Eferentes (quem consome dados desta tela)​

Nenhuma. A tela nao escreve em tabela alguma do banco — e um relatorio read-only. Todo output vai para o mecanismo de impressão via GeraRelatorio (ReportBuilder/FastReport).

Modelos de Relatório​

Modelo 1: Unico (Relacao de Solicitacoes)​

Quando usado: sempre — a tela nao possui combobox de modelo. O botao "Imprimir <F8>" monta um unico SQL baseado nos filtros preenchidos.

Lista cada item (ITEMSOLICITACAO) de solicitacoes (SOLICITACAO) com dados do produto, solicitante (usuario), quantidade, peso, status do item, tipo (NORMAL/URGENTE), datas (solicitacao e desejada) e numero de orcamento. Ordenado por solicitante, numero de solicitacao e descricao do produto.

SQL Base:

SELECT S.NR_SOLICITACAO, S.ST_SOLICITACAO,
CASE S.TP_SOLICITACAO WHEN 'U' THEN 'URGENTE' ELSE 'NORMAL' END TIPO,
U.CD_USUARIO, U.NM_USUARIO, S.NR_ORCAMENTO,
S.DT_SOLICITACAO, S.DT_DESEJADA,
ITEM.DS_ITEM || ' - ' || I.CD_ITEM DS_ITEM,
I.PS_SOLICITADO, I.QT_SOLICITADA,
I.ST_ITEMSOLICITACAO
FROM SOLICITACAO S
INNER JOIN ITEMSOLICITACAO I ON (S.CD_EMPRESA = I.CD_EMPRESA
AND S.NR_SOLICITACAO = I.NR_SOLICITACAO)
INNER JOIN ITEM ON (I.CD_ITEM = ITEM.CD_ITEM)
INNER JOIN USUARIO U ON (U.CD_USUARIO = S.CD_SOLICITANTE)
WHERE S.CD_EMPRESA = :CD_EMPRESA
/* filtros dinamicos aplicados no btnImprimirClick: */
-- AND S.TP_SOLICITACAO = :TP_SOLICITACAO (se &lt;&gt; 'T')
-- AND I.ST_ITEMSOLICITACAO= :ST_ITEMSOLICITACAO (se &lt;&gt; 'T')
-- AND S.NR_SOLICITACAO = :NR_SOLICITACAO (se informado)
-- AND S.NR_ORCAMENTO = :NR_ORCAMENTO (se informado)
-- AND S.DT_SOLICITACAO >= :DT_INI_SOL (se informado)
-- AND S.DT_SOLICITACAO &lt;= :DT_FIN_SOL (se informado)
-- AND S.DT_DESEJADA >= :DT_INI_DES (se informado)
-- AND S.DT_DESEJADA &lt;= :DT_FIN_DES (se informado)
-- AND I.CD_ITEM IN (:LISTA_PRODUTOS) (grid "Produtos", se preenchido)
-- AND S.CD_SOLICITANTE IN (:LISTA_SOLICITANTES) (grid "Solicitante", se preenchido)
ORDER BY U.NM_USUARIO, S.NR_SOLICITACAO, ITEM.DS_ITEM

Observacao tecnica: o SQL e montado por concatenacao de strings em btnImprimirClick (padrao legado com vulnerabilidade a SQL injection via campos de filtro). Datas sao formatadas como mm/dd/yyyy literal entre aspas.