Árvore de páginas

 Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.                                                             

  

(Obrigatório)

Informações Gerais

 

Especificação

Produto

Datasul

Módulo

Compras

Segmento Executor

Manufatura

Projeto1

MANMAT01

IRM1

MANMAT01-1140

Requisito1

MANMAT01-1144

Subtarefa1

MANMAT01-1423

País

(X) Brasil  (  ) Argentina  (  ) Mexico  (  ) Chile  (  ) Paraguai  (  ) Equador

(  ) USA  (  ) Colombia   (  ) Outro _____________.

Outros

<Caso necessário informe outras referências que sejam pertinentes a esta especificação. Exemplo: links de outros documentos ou subtarefas relacionadas>.

   Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos). 

(Obrigatório)

Objetivo

 Desenvolver as telas para gerenciamento de ordens de compra do módulo de compras em HTML.


Requisitos:

  • Listar ordens de compra;
  • Definir comprador para ordem de compra;
  • Manutenir ordem de compra;
  • Gerenciar o Split de ordens de ordens de compra;
  • Consultar ordens de compra;
  • Transferir ordens de compra (HCOR);
  • Validar de inclusão de OC somente para itens que o comprador possui permissão (HCOR);
  • Identificar ordens de compra rejeitadas pelo MLA (TUDPUW);
  • Visualizar follow-up na consulta de ordem de compra (TUGAKZ);
  • Identificar ordens de compra recebidas parcial e total (TUOSSK);
  • Sugerir narrativa da ordem de compra com a narrativa do item (TUVKPU); 


Requisitos que não serão atendidos:

  • Opções na listagem de ordens que dizem respeito a cotações, pacotes e pedidos não serão inseridas neste momento (somente serão colocadas em tela quando os respectivos requisitos forem desenvolvidos);
  • Validação de inclusão de itens que não são de responsabilidade do comprador no progress;
  • Sugestão de narrativa da ordem conforme narrativa do item no progress;
  • Sugestão de requisitante conforme usuário logado no progress;
  • Assim como no Flex que não há tratamento para integração com a Paradigma, no HTML também não será desenvolvida neste momento.

(Obrigatório)

Definição da Regra de Negócio

 

Rotina

Tipo de Operação

Opção de Menu

Regras de Negócio

html.cc0301

Criação

Compras --> Tarefas --> Manter Ordens de compra

Listagem/manutenção de ordens de compra
html.cc0505aCriaçãoCompras --> Consultas --> Consultar Ordens de compraConsulta de ordens de compra
CD1700AlteraçãoCadastros Gerais --> Cadastros --> Manutenção Usuário MateriaisInclusão de parâmetro para validar inclusão de item em OC
html.cc0505 AlteraçãoCompras --> Consultas --> Consultar Ordem de CompraInclusão de consulta de follow-up, informações de ordem recebida parcialmente/total e rejeitada pelo MLA
CC0104AlteraçãoCompras --> Cadastros --> Manutenção Parâmentros ComprasInclusão de parâmetro para sugerir narrativa da ordem conforme o item e sugestão de requisitante



Exemplo de Aplicação:

  • Alguns navegadores deixarão de suportar plug-ins em breve, como é o caso do Flash Player, utilizado para execução das interfaces Flex. Com isso existe a necessidade de migrar as interfaces para uma tecnologia compatível com os navegadores.


Detalhamento das regras de negócio

A solução proposta consiste em desenvolver as telas propostas com o novo Framework HTML da TOTVS, com as mesmas funcionalidades existentes no Flex atualmente, assim como incluir alguns pequenos itens de melhoria sugeridos por clientes e citados nos requisitos. 


1) Listagem de ordens de compra:

 

  • Consiste na conversão da tela existente em Flex, de listagem de ordens de compra para a tecnologia HTML, considerando todas as funcionalidades existentes;
  • A tela de ordens de compra em Flex apresenta somente as ordens que o comprador precisa gerenciar no processo de compra, sem mostrar por exemplo, ordem recebidas ou eliminadas, a nova interface em HTML irá que prever a apresentação e filtros de ordens em qualquer situação;
  • No flex também é possível visualizar apenas as ordens de compra referente ao comprador logado no sistema, no HTML haverá opções de filtro para que tenha acesso a ordens de outros compradores também;
  • Deverá ser respeitada a segurança por estabelecimento para apresentação das ordens;
  • Deverá ser desenvolvida a tela para definição de comprador;
  • Deverão ser previstas buscas para facilitar encontrar as ordens por narrativa e por narrativa do item;
  • A tela de listagem que terá todas as opções para manutenir as ordens de compra será utilizada também para realizar a consulta de ordens, ou seja, deverá funcionar com a listagem/consulta de requisições (html.cd1406), com duas chamadas distintas para menu;
  • Na nova listagem será possível identificar ordens de compra rejeitadas pelo MLA (ou seja, cotação rejeitada) e também se a ordem está recebida parcialmente ou totalmente. Essas opções não existiam no Flex.

O protótipo da tela é apresentado na sequência:


 

Sobre as funcionalidades e informações disponíveis na tela:

  • As ordens serão categorizadas na tela, conforme sua situação (sendo apresentadas com cores diferenciadas), teremos as seguintes situações:
    • Sem Cotação: a ordem está com situação de "Não confirmada", ou seja, ainda não possui nenhuma cotação cadastrada;
    • Em Cotação: a ordem está com situação de "Em cotação", ou seja, já possui cotações cadastradas, porém ainda não foi aprovada nenhuma;
    • Cotada: a ordem está com a situação de "Cotada", ou seja, já possui uma cotação que foi aprovada;
    • Com Pedido: a ordem está com situação de "Confirmada", ou seja, está vinculada a um pedido de compra;
    • Recebida Parcial: a ordem está com situação de "Confirmada", ou seja, está vinculada a algum pedido de compra que já teve algum recebimento, porém ainda não está totalmente recebido;
    • Recebida Total: a ordem está com situação de "Recebida", ou seja, a ordem de compra está totalmente recebida;
    • Eliminada: a ordem está com situação de "Eliminada", ou seja, a ordem de compra estava vinculada a um pedido de compra que já estava impresso e a ordem foi eliminada do mesmo.
  • Sobre as informações apresentadas na listagem, elas serão as seguintes, sendo que variam conforme a situação da ordem:
    • Número da ordem: será a informação principal, que possui um link de detalhe para a tela já existente de consulta de ordem (html.cc0505);
    • Item (código e descrição);
    • Estabelecimento;
    • Prioridade: apresentada a prioridade de aprovação da ordem;
    • Quantidade;
    • Data de entrega: Caso a ordem possua apenas uma entrega, apresenta a data de entrega em questão, caso contrário deve apresentar "Parcelada";
    • UM;
    • Requisitante;
    • Comprador;
    • Pacote;
    • Cotar até: Caso já tenha sido solicitado cotação para a ordem, apresenta a data que foi informada como limite para os fornecedores responderem. Este campo somente deve ser apresentada para as situações "Sem Cotação" e "Em Cotação";
    • Pendente Aprovador: Indica que existe cotação pendente de aprovação para esta ordem. Este campo somente deve ser apresentada para a situação "Em Cotação";
    • Rejeitada: Indica que a cotação da ordem foi rejeitada no processo de aprovação. Este campo somente deve ser apresentada para a situação "Em Cotação";
    • Pedido: Este campo somente deve ser apresentada para as situações "Com Pedido" , "Recebida Parcial", "Recebida Total" e "Eliminada";
    • Fornecedor (código e nome abreviado): Este campo somente deve ser apresentada para as situações "Cotada", "Com Pedido" , "Recebida Parcial", "Recebida Total" e "Eliminada";
    • ContratoEste campo somente deve ser apresentada para as situações "Com Pedido" , "Recebida Parcial", "Recebida Total" e "Eliminada";
    • Informações apresentadas no "Exibir detalhes":
      • Descrição complementar;
      • Narrativa do Item;
      • Quantidade recebida: Apresenta a quantidade total da ordem que já foi recebida. Este campo somente deve ser apresentada para as situações "Recebida Parcial", "Recebida Total";
      • Comprador original: Apresentar somente se houver um comprador original para a ordem.
  • O filtro deverá fazer a busca por:
    • Ordem (igualdade);
    • Item (igualdade);
    • Descrição do Item (inicia com);
  • A ordenação poderá ser feita por:
    • Ordem (padrão da maior para menor);
    • Data de emissão;
    • Data de entrega (quando houver mais de uma considerar a data de entrega da mais antiga);
    • Estab;
    • Situação;
    • Prioridade;
  • Sobre as ações disponíveis na tela:
    • Para cada registro de ordem, serão disponibilizadas as seguintes opções:
      • Detalhar (através do link do número da ordem);
      • Editar (somente para ordens com situação Sem Cotação e Em Cotação);
      • Excluir (somente para ordens com situação Sem Cotação e Em Cotação);
      • Copiar;
      • Definir Comprador (somente para ordens que estiverem sem um comprador informado);
      • Transferir (somente para ordens que já tiverem um comprador definido e situação Sem Cotação, Em Cotação ou Cotada);
      • Follow-up;
    • Na parte superior da tela estarão disponíveis as seguintes ações:
      • Adicionar;
      • Transferir (considera os registros que estiverem selecionados que estejam como Sem Cotação, Em Cotação ou Cotada);
      • Definir comprador (considera os registros que estiverem selecionados que não possuem comprador definido);
  • A tela deverá prever o contador de ordens para os filtros utilizados, assim como paginação de 50 em 50 registros;
  • O filtro avançado deverá prever as seguintes opções:
    • Situação da ordem: 
      • Sem Cotação (por padrão marcado);
      • Em Cotação (por padrão marcado);
      • Cotada (por padrão marcado);
      • Com Pedido;
      • Recebida Parcial;
      • Recebida Total;
      • Eliminada;
    • Prioridade de aprovação (por padrão todas marcadas):
      • Baixa;
      • Média;
      • Alta;
      • Muito Alta;
    • Pendente de aprovação (por padrão marcado);
    • Aprovada (por padrão marcado) - parâmetro aplicado somente para ordens em "Em cotação";
    • Rejeitada (por padrão marcado) - parâmetro aplicado somente para ordens em "Em cotação";
    • Expectativa (por padrão marcado) - parâmetro aplicado somente para ordens em "Em cotação";
    • Faixa de número de ordem;
    • Faixa de data de emissão (por padrão apresenta o período de um mês)
    • Faixa de data de entrega (Se alguma parcela da ordem estiver na faixa deve apresentar a ordem);
    • Faixa de estabelecimento;
    • Faixa de requisitante;
    • Faixa de pacote;
    • Faixa de contrato;
    • Faixa de pedido;
    • Faixa de nome abreviado do fornecedor;
    • Descrição complementar da ordem (conteúdo deve ser buscado como "contém";
    • Faixa de código de item;
    • Faixa de descrição de item;
    • Faixa de código complementar do item;
    • Faixa de informação complementar do item;
    • Narrativa do item (conteúdo deve ser buscado como "contém";
    • Faixa de comprador;
    • Apenas grupos de compra do comprador (Somente deverá ser habilitado em tela caso o sistema esteja configurado para trabalhar por grupo de compra);
    • Faixa de grupo de compra (Somente deverá ser habilitado em tela caso o parâmetro acima esteja como não);
    • Faixa de comprador original;

Protótipo da pesquisa avançada:

Caso a ordem de compra esteja sem um comprador definido (no caso de sido gerada para um grupo de compra) é possível definir o comprador através dessa interface.

 

Como será possível gerar ordens de compra para um comprador alternativo durante o processo de geração de ordens, deverá existir uma rotina para transferência de ordens de compra. Neste caso o usuário procura as ordens de compra a serem transferidas, as seleciona e utiliza a rotina de transferência.

Ao confirmar a transferência, deverá ser verificado se o usuário selecionou alguma ordem de compra que esteja em uma situação diferente de "Sem Cotação", "Em cotação", e "Cotada", ou que tenha o comprador igual ao comprador selecionado para transferência. Se confirmada essa situação, emitir um aviso: "Ordens de compra que estejam em situação diferente de Sem Cotação, Em Cotação, Cotada e que sejam do comprador xxxxxxx foram desconsideradas".

A transferência mudará o comprador das ordens selecionadas (que estejam definidas conforme regra acima), para o comprador informado em tela.

Caso a ordem de compra "transferida" não tenha o campo de comprador original preenchido, o mesmo deverá ser atualizado com o comprador antes da transferência.

Informações técnicas sobre a listagem de ordens:

  • Para carregar as informações de tela, deverá ser criada uma nova API ccp/ccapi360.p, a exemplo da ccp/ccapi354.p criada para o programa html.mcc.cd1406;
  • Em todas as temp-tables que for possível, acrescentar o "epc-value" para seja possível customizar.
  • A tabela base para leitura das informações é a ordem-compra, e tabela de entregas é prazo-compra. Para carregar os dados de tela montar uma query dinâmica com DataSet.
  • Para a segurança por estabelecimentos, deve definir no início do programa o seguinte:

    &scoped-define TTONLY YES 
    {include/i-estab-security.i} 

    Dessa forma a leitura deverá ser feita (sempre considerando a tabela de estabelecimentos como tabela pai): 

    FOR EACH {&ESTAB-SEC-TT} NO-LOCK:
            FOR EACH ordem-compra WHERE ordem-compra.cod-estabel = {&ESTAB-SEC-TT-FIELD}  <demais condições> NO-LOCK:
                   (...)
            END.
    END.

  • Sobre as situações da ordem:
    • Sem Cotação: ordem-compra.situacao = 1
    • Em Cotação: ordem-compra.situacao = 5
    • Cotada: ordem-compra.situacao = 3
    • Com Pedido: ordem-compra.situacao = 2 sordem-compra.qt-acum-receb = 0
    • Recebida Parcial: ordem-compra.situacao = 2 e ordem-compra.qt-acum-receb > 0
    • Recebida Total: ordem-compra.situacao = 6
    • Eliminada: ordem-compra.situacao = 4
  • Sobre as informações apresentadas na listagem:
    • Número da ordem: ordem-compra.numero-ordem
    • Item (código e descrição): ordem-compra.it-codigo e item.desc-item
    • Estabelecimento: ordem-compra.cod-estabel
    • Prioridadeprioridade-aprov (mostrar descrição - Verificar como é feito na fch/fchmat/fchmataddpurchaserequisitions.p)
    • Quantidade: ordem-compra.qt-solic
    • Data de entrega: Caso a ordem possua apenas uma entrega prazo-compra.data-entrega, apresenta a data de entrega em questão, caso contrário deve apresentar "Parcelada";
    • UM: prazo-compra.un (da primeira entrega)
    • Requisitante: ordem-compra.requisitante
    • Comprador: ordem-compra.cod-comprado
    • Pacote: ordem-compra.nr-processo
    • Cotar até: ordem-compra.dat-fim-leilao-rfq e ordem-compra.hra-fim-leilao-rfq
    • Pendente Aprovador: regras abaixo
    • Rejeitada: regras abaixo

Os dois campos "Pendente Aprovador" e "Rejeitada" somente devem ser apresentados caso seja utilizada aprovação para cotação, ou seja (param-compra.log-1 = yes e param-aprov.aprovac-cotac = yes).

Neste caso utilizar a lap/mlaapi015.p (procedure pi-retorna-pendencia) para verificar o status da pendência.


FIND FIRST cotacao-item WHERE cotacao-item.numero-ordem = ordem-compra.numero-ordem AND (cotacao-item.cot-aprovada OR cotacao-item.log-1) NO-LOCK NO-ERROR.

FIND estabelec WHERE estabelec.cod-estabel = ordem-compra.cod-estabel NO-LOCK NO-ERROR.

IF AVAIL estabelec THEN
       run cdp/cd9970.p (input ROWID(estabelec), output i-empresa).

create tt-mla-chave.

assign tt-mla-chave.valor[1] = string(cotacao-item.numero-ordem)
tt-mla-chave.valor[2] = string(cotacao-item.cod-emitente)
tt-mla-chave.valor[3] = cotacao-item.it-codigo
tt-mla-chave.valor[4] = string(cotacao-item.seq-cotac).

RUN  pi-retorna-pendencia IN h-handle(INPUT 5, INPUT i-empresa,INPUT ordem-compra.cod-estabel, INPUT TABLE tt-mla-chave, INPUT NO, INPUT NO, OUTPUT TABLE tt-pendencias).

FIND FIRST tt-pendencias WHERE tt-pendencias.ind-situacao = 3  NO-LOCK NO-ERROR.

IF AVAIL tt-pendencias THEN DO:

     <não pendente, rejeitada>

 

END.

ELSE DO:

    FIND FIRST tt-pendencias WHERE tt-pendencias.ind-situacao = 1  NO-LOCK NO-ERROR.

    IF AVAIL tt-pendencias THEN DO:

        <Pendente, Não rejeitada>

    END.

    ELSE DO:

         <Não pendente, Não rejeitada>

    END.

END.

    • Pedido: ordem-compra.num-pedido
    • Fornecedor (código e nome abreviado): ordem-compra.cod-emitente e emitente.nome-abrev
    • Contrato: ordem-compra.nr-contrato
    • Informações apresentadas no "Exibir detalhes":
      • Descrição complementar: ordem-compra.narrativa
      • Narrativa do Item: item.narrativa
      • Quantidade recebida: ordem-compra.qt-acum-receb
      • Comprador original: ordem-compra.char-1 (posição inicial 195, 12 posições)
  • O filtro avançado deverá prever as seguintes opções:
    • Aprovada (por padrão marcado) - parâmetro aplicado somente para ordens em "Em cotação";
    • Rejeitada (por padrão marcado) - parâmetro aplicado somente para ordens em "Em cotação";
    • Expectativa (por padrão marcado): ordem-compra.expectativa;
    • Faixa de contrato;
    • Faixa de pedido;
    • Faixa de nome abreviado do fornecedor;
    • Descrição complementar da ordem (conteúdo deve ser buscado como "contém";
    • Faixa de código de item;
    • Faixa de descrição de item;
    • Faixa de código complementar do item;
    • Informação complementar do item: 
    • Apenas grupos de compra do comprador: 
      • Sistema configurado para trabalhar por grupo de compra: param-compra.int-2 = 1
      • Verificar se o comprador pertence ao grupo de compra da ordem:
        FIRST gr-cmp-comprad WHERE gr-cmp-comprad.cod-comprado = <comprador> AND gr-cmp-comprad.cod-grp-compra = ordem-compra.cod-grp-compra

    • Grupo de compra (cod-grp-compra);

Comprador original: ordem-compra.char-1 (posição inicial 195, 12 posições)

Incluir pontos de epc progress para listagem conforme as informações da tabela abaixo. Para a parte HTML, incluir os pontos necessários que manipular o preenchimento de campos existentes e também novos (exemplos em: http://tdn.totvs.com.br/pages/viewpage.action?pageId=185738044).

Nome do Evento
Onde deve ser colocado
Parâmetro
Valor do Parâmetro
afterLoadListApós o preenchimento da listaHandle_tt<nome tt>Handle da temp-table <nome tt>

 

  • Ações:
    • Transferir ordens:
      • Criar uma procedure para transferência das ordens na ccp/ccap360.p;
      • A API deverá receber uma lista de ordens (ordem-compra.numero-ordem), o comprador para qual serão transferidas as ordens e deverá retornar uma temp-table de erros (RowErrors);
      • Verificar se o comprador destino existe, se não existir criar um erro na RowErrors e finalizar a execução;
      • Para cada ordem de compra:
        • Verificar se a ordem existe, se não existir criar um erro na RowErrors e continuar o processo;
        • Se a ordem estiver com situação (situacao) como sem cotação (1), em cotação (5) ou cotada (3) e com o comprador (cod-comprador) diferente do comprador destino, efetuar a transferência:
          • Se o comprador origem não estiver informado ordem-compra.char-1 (posição inicial 195, 12 posições) = "", atualizar o campo com o comprador atual da ordem (cod-comprado);
          • Na sequência, atualizar o comprador (cod-comprado) com o comprador destino;
      • Se alguma das ordens não tiver em situação que possa ser transferida, retornar a mensagem: Ordens de compra que estejam em situação diferente de Sem Cotação, Em Cotação, Cotada e que sejam do comprador xxxxxxx foram desconsideradas
    • Definir comprador:
      • Criar uma procedure para definição do comprador na ccp/ccap360.p;
      • A API deverá receber uma lista de ordens (ordem-compra.numero-ordem), o comprador a ser definido e deverá retornar uma temp-table de erros (RowErrors);
      • Verificar se o comprador destino existe, se não existir criar um erro na RowErrors e finalizar a execução;
      • Para cada ordem de compra:
        • Verificar se a ordem existe, se não existir criar um erro na RowErrors e continuar o processo;
        • Se a ordem estiver comprador (cod-comprador) como branco, efetuar a definição:
          • Se o comprador origem não estiver informado ordem-compra.char-1 (posição inicial 195, 12 posições) = "" preencher;
          • Na sequência, atualizar o comprador (cod-comprado) com o comprador;
      • Se alguma das ordens não tiver em situação que possa ser definido o comprador, retornar a mensagem: Ordens de compra que tenham comprador foram desconsideradas.

    • Follow-up:
      • Para o follow-up utilizar a mesma tela que já é chamada na requisição (html.mcc.cd1406), atentar apenas para os parâmetros a serem passados (no caso de dúvidas,verificar as documentações dos parâmetros na boin638.p);

Manutenir ordem de compra:

 

  • Deverá ser prevista a interface de inclusão de ordem de compra, com as mesmas funcionalidades existentes no Flex, ou seja, inclusão, alteração, habilitar/desabilitar campos, validações, integrações com outros módulos, split de ordens, parâmetros para configuração de parcelas, etc;
  • Deverá ser gravado o usuário que incluiu a ordem de compra para se ter um maior controle;

A tela de inclusão/alteração de ordem de compra, deverá ser desenvolvida conforme o protótipo apresentado na sequência, ela conterá alguns agrupadores de informações que virão fechados inicialmente. O usuário poderá abrir um a um, ou todos de uma única vez através da opção "Expandir todos". 

 

 

Sobre os campos em tela:

  • Ordem;
  • Situação (não editável);
  • Origem (não editável);
  • Expectativa (não editável);
  • Item (deverá utilizar o zoom já existente);
  • Quantidade;
  • Unidade de Medida (deverá utilizar o zoom já existente);
  • Entrega Única (Se informado, será gerada uma entrega única para a ordem com essa data. Se forem informadas entregas, a informação deste campo é desconsiderada);
  • Estabelecimento (deverá utilizar o zoom já existente que utiliza segurança por estabelecimento);
  • Depósito (deverá utilizar o zoom já existente no módulo de estoque);
  • Natureza;
  • ICMS;
  • Responsáveis:
    • Requisitante (deverá utilizar o zoom já existente);
    • Comprador (deverá utilizar o zoom construído no requisito anterior - Requisições);
  • Complementos:
    • Estabelecimento Gestor (utilizar o zoom já existente);
    • Imprime ficha Cotação;
    • Ordem emitida;
    • Prioridade de aprovação;
  • Entregas (deverá ser desenvolvido como um componente isolado para ser utilizado no pedido de compra futuramente):
    • Sequência;
    • Data entrega;
    • Quantidade;
    • Referência;
    • Pedido;
    • Ato Concessório;
    • Quantidade Total: Indica a quantidade total das entregas inseridas;
    • Ações (As entregas são editadas/inclusas somente em tela, e são efetivas juntamente com a ordem de compra):
      • Adicionar: Abre a tela para inclusão de uma nova entrega (tela detalhada na sequência);
      • Configurar Regras: Abre a tela para configurar as opções de inclusão de ordem (tela detalhada na sequência);
      • Editar: Abre a tela para alteração da entrega;
      • Excluir: Permite a exclusão da ordem, após apresentação de mensagem de exclusão.
  • Integrações:
    • Ordem de investimento (utilizar o zoom já existente);
    • Empresa: Apresenta a empresa da ordem de investimento selecionada
    • Ordem de serviço (utilizar o zoom já existente); 
    • Operação: Será necessário construir um zoom, com os mesmos campos e filtros existentes no flex (ele deve filtrar por ordem de serviço caso tenha sido informado).
    • Conta contábil (utilizar o zoom já existente);
    • Centro de Custo (utilizar o zoom já existente);
    • Tipo de Despesa: Criar um zoom, apresentando os campos: Código, descrição e tipo. Filtros pelos três campos.
    • Contrato de compra: Criar um zoom de item de contrato, apresentando os campos: Contrato, Fornecedor (código e nome abreviado), Sequência do Item, Item (código e descrição), Tipo controle contrato e Ativo. Filtros: Contrato, código do item e código fornecedor)
    • Sequência do item: Deverá apresentar a sequência do item de contrato selecionado no zoom.
    • Pacote de compra: Criar um zoom, apresentando os campos: número, descrição, comprador, data de início. Deve possuir filtro por todos os campos.
  • Descrição complementar;
  • Unidades de negócio (deverá funcionar da mesma forma que na tela html.mcc.cd1406):
    • Unidade de negócio;
    • Percentual
    • Total: Apresenta o percentual total das unidades de negócio cadastradas inclusas
    • Ações:
      • Adicionar: Permite a inclusão de uma unidade de negócio
      • Eliminar: Elimina uma unidade de negócio

 

Protótipo da tela de inclusão/alteração de entrega:

Sobre os campos:

  • Ordem (campo não editável)
  • Quantidade da Ordem (campo não editável)
  • Quantidade
  • Data Entrega;
  • Referência (deverá utilizar o zoom já existente);
  • Cliente (deverá utilizar o zoom já existente);
  • Pedido (deverá utilizar o zoom já existente);
  • Sequência  (deverá ser criado um zoom com as mesmas opções e informações existentes no flex);

 

Protótipo da tela dos parâmetros para inclusão de entregas:

O padrão de data inicial é a data atual e a data final é o máximo possível. Para os campos lógicos o inicial é não.

 

Protótipo da tela de questionamento de divisão de entrega entre fornecedores:

Essa tela é apresentada, após salvar a ordem de compra, caso deva ser executado o split entre da ordem entre fornecedores.

Por padrão os dois campos devem vir como Sim. No caso de o usuário desejar visualizar o split, deverá ser apresentada a tela da sequência.

 

Protótipo da tela de apresentação da divisão das entregas entre fornecedores, lembrando que neste caso o campo de quantidade é editável:

 


Novas regras para inclusão de ordem compra:


  • Sugestão de narrativa da ordem de compra com a narrativa do item:
    • Deverá ser incluso um parâmetro nos programa de parâmetros de compras CC0104 para se possa sugerir a narrativa da ordem de compra conforme a narrativa do item;
    • Esse parâmetro deverá ser tratado na tela de inclusão de ordens;

 

  • Validação de inclusão de OC somente para itens que o comprador possui permissão:
    • Deverá ser criado um parâmetro no programa de usuário de materiais para indicar se o usuário pode ou não incluir ordens de compra para itens dos quais não é comprador;
    • Esse controle deverá ser feito na inclusão de ordem;
    • A validação deverá funcionar da seguinte forma:
      • Caso o sistema esteja configurado para trabalhar por comprador:
        • Caso o item não pertença ao comprador da ordem de compra, bloquear a inclusão.
      • Caso o sistema esteja configurado para trabalhar por grupo de compra:
        • Caso o comprador da ordem não pertença ao grupo de compra do item, bloquear a inclusão.
    • Para inclusão do novo parâmetro a tela terá que ser re-organizada, conforme abaixo:

Antes:

Depois:

 

Informações técnicas sobre manutenir ordem de compra:

    • Sobre os campos em tela da ordem de compra (ordem-compra):
    • Ordem (numero-ordem);
    • Situação (situacao - Utilizar o descritivo para apresentação);
    • Origem (origem - Utilizar o descritivo para apresentação);
    • Expectativa (expectativa);
    • Item (it-codigo - Utilizar o zoom item.js (módulo men));
    • Quantidade (qt-solic);
    • Unidade de Medida (Somente em tela - Será repassado internamente para todas as entregas prazo-compra.un - Utilizar o zoom tab-unidade.js (módulo mcc));
    • Entrega Única (Somente em tela - Será repassado internamente para prazo-compra.data-entrega, no caso de entrega única);
    • Estabelecimento (cod-estabel - Utilizar o zoom estabelec.js (módulo mpd));
    • Depósito (dep-almoxar - Utilizar o zoom deposito.js (módulo mce));
    • Natureza (natureza - mostrar as opções disponíveis para o campo);
    • ICMS (codigo-icm - mostrar as opções disponíveis para o campo);
    • Responsáveis:
      • Requisitante (requisitante - Utilizar o zoom requisitante.js (módulo mcc));
      • Comprador (cod-comprado - Utilizar o zoom comprador.js (módulo mcc));
    • Complementos:
      • Estabelecimento Gestor (cod-estab-gestor - Utilizar o zoom estabelec.js (módulo mpd));
      • Imprime ficha Cotação (impr-ficha);
      • Ordem emitida (ordem-emitida);
      • Prioridade de aprovação (prioridade-aprov - Apresentar as opções);
    • Entregas (tabele prazo-compra):
      • Sequência (parcela);
      • Data entrega (data-entrega);
      • Quantidade (quantidade);
      • Referência (cod-refer);
      • Pedido (pedido-clien);
      • Ato Concessório (substring(prazo-compra.char-2,11,30));
      • Quantidade Total: Somatório do campo quantidade de todas as entregas;
    • Integrações:
      • Ordem de investimento (num-ord-inv - Utilizar o zoom sub-div-ordem.js (módulo mcc));
      • Empresa (ep-codigo)
      • Ordem de serviço (ordem-servic - Utilizar o zoom ord-prod.js (módulo mcp)); 
      • Operação (op-codigo - Zoom tabela oper-ord - Filtro pelo campo nr-ord-produ = ordem-servic)
      • Conta contábil (ct-codigo - Utilizar o zoom cta-ctbl-integr.js (módulo utb));
      • Centro de Custo (sc-codigo - ccusto.js (módulo utb));
      • Tipo de Despesa: Criar um zoom (tabela tipo-rec-desp, apresentando os campos: Código (tp-codigo), descrição (descricao) e tipo (tipo - apresentar a descrição). Filtros pelos três campos.
      • Contrato de compra: Criar um zoom de item de contrato (item-contrat), apresentando os campos: Contrato (nr-contrato), Fornecedor (cod-emitente e emitente.nome-abrev), Sequência do Item (num-seq-item), Item (it-codigo e item.descricao), Tipo controle contrato (ind-sit-item - mostrar descrição) e Ativo (item-contrat.log-libera). 
      • Sequência do item: num-seq-item
      • Pacote de compra: Criar um zoom (tabela proc-compra), apresentando os campos: número (nr-processo), descrição (descricao), comprador (cod-comprado), data de início (dt-inicio). Deve possuir filtro por todos os campos.
    • Descrição complementar (narrativa);
    • Unidades de negócio (utilizar o mesmo componente da tela html.mcc.cd1406).
  • Sobre os campos em tela da entregas (prazo-compra):
    • Ordem (prazo.compra.numero-ordem)
    • Quantidade da Ordem (ordem-compra.qt-solic)
    • Quantidade (quantidade);
    • Data Entrega (data-entrega) ;
    • Referência (cod-refer - referencia.js (módulo mcc));
    • Cliente (nome-abrev - cliente.js (módulo mpd));
    • Pedido (ped-venda.js (módulo mpd));
    • Sequência (Campo nr-sequencia - Criar o zoom da tabela ped-item - Filtro pelo campo nr-pedcli = pedido-clien)

 

  • Ações:
    • Incluir ordem:
      • Para sugestão dos dados iniciais para inclusão da ordem deverá ser criada uma nova procedure que englobe a execução/retornos das seguintes rotinas:
        • Procedure setDefaultsPurchaseRequisition da fch/fchmat/fchmataddpurchaserequisitions.p para sugerir os dados iniciais para a tela. 
          • Passar "CREATE" para o parâmetro "pType", deixar em branco o valor para o parâmetro "pFieldName".
          • Para a ttPurchaseRequisition e ttGenericBusinessUnitOriginal neste caso passar apenas objetos "novos" e "vazios" (com valores padrões).
          • ttPurchaseRequisitionDefault conterá os campos a serem apresentados em tela referente a ordem de compra. 
          • A ttEnableFields conterá os campos que possuem alguma regra para habilitar ou desabilitar em tela. Utilizar essa informação para habilitar ou não ou campos. Obs.: Verificar como foi feito para inclusão de requisição.
          • A ttGenericBusinessUnit conterá as unidades de negócio a serem apresentadas em tela.
          • O parâmetro "pVisibleBusinessUnit" indica se a unidade de negócio deve ou não ficar habilitada em tela.
        • Procedure, "getIntegrationAccountCostCenterFilter" da fch/fchmat/fchmatintegrationaccountcostcenter.p para obter os "filtros" para conta/centro de custo. Na temp-table de entrada preencher o campo "site" com ttPurchaseRequisitionDefault.cod-estabel e o campo "module" com "CEP". Providenciar o retorno até a interface do HTML, pois essa informações serão necessárias para chamar o zoom de conta e centro de custo posteriormente.
        • Procedure "enableCostCenter" da fch/fchmat/fchmatintegrationaccountcostcenter.p, com o retorno dessa procedure será necessário criar um registro na ttEnableFields com as seguintes informações:
          ttEnableFields.tabela = "ordem-compra"
          ttEnableFields.campo = "sc-codigo"
          ttEnableFields.habilitado = <retorno da procedure acima>.
        • Procedure "getCostCenter" da fch/fchmat/fchmatintegrationaccountcostcenter.p passando ttPurchaseRequisitionDefault.cod-estabel e ttPurchaseRequisitionDefault.ct-codigo, o retorno deve ser atualizado em ttPurchaseRequisitionDefault.sc-codigo.
      • Novas regras de inclusão:
        • Sugere narrativa do item na ordem: 
          • Parâmetro novo: param-compra.char-2 (posição inicial 138, 1 posição) - Gravar como Y/N
          • A sugestão deve ser feita no leave do campo de item, ou seja, boin274sdfx (procedure leaveItCodigo), criar uma nova procedure "setComment" para colocar a nova regra de sugestão;
          • Se o parâmetro novo estiver marcado setar o campo ordem-compra.narrativa com item.narrativa;
        • Inclusão de OC somente para itens do comprador:
          • Parâmetro novo: usuar-mater.char-1 (posição inicial: 22, 1 posição) - Gravar como Y/N
          • As novas validações devem ser inseridas na boin274fx.p (validateRecord - na parte de "create");
          • Para saber como fazer as validações, verificar como exemplo na ccapi100.p
        • Gravar usuário logado na criação da ordem:
          • Na boin274fx.p (beforeCreateRecord) gravar o usuário logado no campo ordem-compra.char-1 (posição inicial: 207 e final 218)
    • Leave de campos:
      • No leave dos campos definidos abaixo deve-se executar o método "setDefaultsPurchaseRequisition" da fch/fchmat/fchmataddpurchaserequisitions.p, passando a ação (criação, alteração), o campo que sofreu o leave, e as temp-tables atualizadas com os valores de tela. O retorno deverá atualizar os dados das temp-tables em tela novamente e também executar a lógica para habilitar/desabilitar campos. Os Campos que devem executar o leave:
        • Item;
        • Estabelecimento;
        • Depósito;
        • Natureza;
        • Ordem de Investimento;
        • Ordem de produção;
        • Conta; 
        • Contrato;

        • Obs.: A chamada do método não deverá ser realizada diretamente, deverá ter uma procedure para fazer essa chamada, pois após a chamada do "setDefaultsPurchaseRequisition" deverá ser chamada também o "enableCostCenter" da fch/fchmat/fchmatintegrationaccountcostcenter.p, com o mesmo tratamento feito para a criação. Se for uma criação, ou leave do campo de conta, executar também o "getCostCenter" da mesma forma que na criação para sugestão dos dados.
      • Atentar que no leave do campo de quantidade, deverá ser refeito ao cálculos para percentual de quantidade apresentado nas entregas;
    • Alterar ordem:
      • Na alteração da ordem deverá ser criada uma procedure para englobar as seguintes rotinas:
        • Procedure "getPurchaseRequisition" da fch/fchmat/fchmataddpurchaserequisitions.p;
        • Procedure, "getIntegrationAccountCostCenterFilter" da fch/fchmat/fchmatintegrationaccountcostcenter.p para obter os "filtros" para conta/centro de custo. Na temp-table de entrada preencher o campo "site" com ttPurchaseRequisitionDefault.cod-estabel e o campo "module" com "CEP". Providenciar o retorno até a interface do HTML, pois essa informações serão necessárias para chamar o zoom de conta e centro de custo posteriormente.
        • Procedure "enableCostCenter" da fch/fchmat/fchmatintegrationaccountcostcenter.p, com o retorno dessa procedure será necessário criar um registro na ttEnableFields com as seguintes informações:
          • ttEnableFields.tabela = "ordem-compra"
            ttEnableFields.campo = "sc-codigo"
            ttEnableFields.habilitado = <retorno da procedure acima>.
    • Copiar ordem:
      • Na cópia da ordem deverá ser criada uma procedure para englobar as seguintes rotinas:
        • Procedure "copyRequisition" da fch/fchmat/fchmataddpurchaserequisitions.p;
        • Procedure, "getIntegrationAccountCostCenterFilter" da fch/fchmat/fchmatintegrationaccountcostcenter.p para obter os "filtros" para conta/centro de custo. Na temp-table de entrada preencher o campo "site" com ttPurchaseRequisitionDefault.cod-estabel e o campo "module" com "CEP". Providenciar o retorno até a interface do HTML, pois essa informações serão necessárias para chamar o zoom de conta e centro de custo posteriormente.
        • Procedure "enableCostCenter" da fch/fchmat/fchmatintegrationaccountcostcenter.p, com o retorno dessa procedure será necessário criar um registro na ttEnableFields com as seguintes informações:
          ttEnableFields.tabela = "ordem-compra"
          ttEnableFields.campo = "sc-codigo"
          ttEnableFields.habilitado = <retorno da procedure acima>.
        • Procedure "getCostCenter" da fch/fchmat/fchmatintegrationaccountcostcenter.p passando ttPurchaseRequisitionDefault.cod-estabel e ttPurchaseRequisitionDefault.ct-codigo, o retorno deve ser atualizado em ttPurchaseRequisitionDefault.sc-codigo.
    • Salvar ordem de compra:  
      • Para salvar a ordem de compra, suas entregas e unidades de negócio, deve ser cria uma procedure para englobar as seguintes rotinas:
        • Procedure "addPurchReqAndChildren" da fch/fchmat/fchmataddpurchaserequisitions.p:
          • Caso não tenha sido informada nenhuma parcela (enviar o pcMode como "Simple", para que seja criada a parcela);
          • Se forem informadas parcelas, enviar pcMode como "Advanced";
          • Na ttParamConfigRules deve ser enviados os parâmetros da tela de configurações da parcela;
        • Procedure "canExecuteSplitPurchaseRequisition" da fch/fchmat/fchmataddpurchaserequisitions.p, que irá retornar se deve ou não ser apresentada a tela de questionamento de split.
    • Tela de pergunta split:
      • Se o usuário "Cancelar": executar a procedure "prepareExecuteSplitPurchaseRequisition" da fch/fchmat/fchmataddpurchaserequisitions.p, passando o número da ordem e NO (para não executar o split);
      • Se confirmar a divisão e visualização: 
        • Abrir a tela de visualização de split de ordens;
      • Se confirmar a divisão, mas não desejar visualizar:
        • Executar a procedure "prepareExecuteSplitPurchaseRequisition" da fch/fchmat/fchmataddpurchaserequisitions.p, passando o número da ordem e YES (para executar o split);
    • Visualização de Split de ordens:
      • Ao abrir a tela executar a procedure "prepareExecuteSplitPurchaseRequisition" da fch/fchmat/fchmataddpurchaserequisitions.p, passando o número da ordem e YES (para executar o split);
      • Se o usuário "Cancelar": executar a procedure "prepareExecuteSplitPurchaseRequisition" da fch/fchmat/fchmataddpurchaserequisitions.p, passando o número da ordem e NO (para não executar o split);
      • Se o usuário confirmar: Executar a procedure "executeSplitPurchaseRequisition" da fch/fchmat/fchmataddpurchaserequisitions.p, passando o número da ordem e YES (para executar o split) e a listagem de informações da tela;
    • Eliminar ordem: Confirmar a eliminação. Utilizar a procedure deleteRequisitions da fch/fchmat/fchmatdetailpurchaserequisitions.p 
    • Incluir entrega
      • Executar a procedure "setDefaultsDeliverySchedule" da fch/fchmat/fchmataddpurchaserequisitions.p, passando o pType = "CREATE", pFieldName = "". Os demais parâmetros funcionam da mesma forma que na inclusão de ordem.
      • A efetivação ocorre juntamente com a ordem de compra.
    • Alterar entrega: Somente altera o objeto de tela (Será efetivado junto com a ordem)
    • Eliminar entrega: Somente elimina o objeto de tela (Será efetivado junto com a ordem)

 

Pesquisar ordens de compra:

A tela de pesquisa de ordens de compra no Flex é uma interface separada da listagem, porém no HTML deverá ser aproveitada a mesma interface para as duas funcionalidades, da mesma forma como foi feito nas requisições.

Neste caso não é apresentada nenhuma opção referente a manutenção de ordens de compra, somente consulta e follow-up.

No menu serão dois programas separados, para que seja possível colocar permissões diferenciadas por programa.

 

 

Visualizar follow-up, ordem recebida total/parcial e ordem rejeitada na consulta de ordem de compra:

Na tela de consulta individual de ordem já existente, serão realizadas algumas alterações para melhoria da mesma:

  • Inclusão do botão para abertura da tela de follow-up;
  • Ao apresentar a situação da ordem de compra, deverá ser prevista a situação de Recebida parcial e Recebida total;
  • Apresentar o comprador original (caso exista);
  • Caso a ordem esteja como rejeitada no processo de aprovação, apresentar também.

 

 

Opcional

Protótipo de Tela

 Apresentados juntamente com as regras de negócio.

Opcional

Fluxo do Processo

<Nesta etapa incluir representações gráficas que descrevam o problema a ser resolvido e o sistema a ser desenvolvido. Exemplo: Diagrama - Caso de Uso, Diagrama de Atividades, Diagrama de Classes, Diagrama de Entidade e Relacionamento e Diagrama de Sequência>. 

Opcional

Dicionário de Dados

Reserva de campos livres:

  • Sugere narrativa do item na ordem: param-compra.char-2 (posição inicial 138, 1 posição)
  • Compra somente itens pré-definidos: usuar-mater.char-1 (posição inicial 22, 1 posição)

 

(Opcional)

Estrutura de Menu

 

<Informações utilizadas na linha Datasul>.

 

Procedimentos

 

Procedimento

 html.cc0301

Descrição

Ordens de Compra

Módulo

 mcc

Programa base

 html.cc0301

Nome Menu

Ordens de Compra

Interface

WEB

Registro padrão

Sim

Visualiza Menu

Sim

Release de Liberação

 12.1.14

 

Programas

 

Programa

 html.cc0301

html.cc0505a

Descrição

Ordens de Compra

Consulta de Ordens de Compra

Nome Externo

 dts/mcc/purchaseorderline

dts/mcc/purchaseorderline/search

Nome Menu/Programa

Ordens de Compra

Consulta Ordens de Compra

Nome Verbalizado[1]

Manter Ordens de Compra

Consultar Ordens de Compra

Procedimento

 html.cc0301

html.cc0505

Template

Programa HTML

Programa HTML

Tipo[2]

Tarefas

Consulta

Interface

WEB

WEB

Executa via RPC

Não

Não

Registro padrão

Sim

Sim

Outro Produto

Não

Não

Visualiza Menu

Sim

Sim

Query on-line

Não

Não

Log Exec.

Não

Não

 


[1] Nome Verbalizado é obrigatório para desenvolvimentos no Datasul 10 em diante.

[2] Tipo é obrigatório para desenvolvimento no Datasul 10 em diante

[3] Categorias são obrigatórias para os programas FLEX.

[4] Obrigatório quando o projeto for FLEX

[5] Obrigatório quando o projeto for FLEX

[6] Obrigatório quando o projeto for FLEX

 Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.