Documento de API
Produto: | Datasul |
Ocorrência: | Documentação de API |
Nome Físico | cpp/cpapi301.p |
Considerações Gerais
Objetivo
Baseado na temp-table tt-ord-prod, serão criadas ordens de produção, ou então alteradas ou eliminadas ordens já existentes.
Funcionamento
Devem ser passadas 3 temp-tables com informações e parâmetros para a criação de transações.
Todas as temp-tables são passadas como parâmetro por meio do comando INPUT-OUTPUT, pois além de passar parâmetros, elas retornam informações para o programa chamador.
Exemplo de chamada da API.
Run cpp/cpapi301.p (input-output table tt-ord-prod, Input-output table tt-reapro, Input-output table tt-erro, Input l-deleta-erros |
Os três primeiros parâmetros são as temp-tables passadas para o programa. O quarto parâmetro informa se a api irá eliminar os erros já existentes na temp-table tt-erro ou se irá acrescentar aos registros que já fazem parte da temp-table, os seus próprios registros de erros.
Tabelas Temporárias
Nos atributos das tabelas temporárias de entrada e saída:
tt-ord-prod | Entrada/Saída | ||||
Temp-table que possui todos os dados das novas ordens de produção que serão criadas. Também é utilizada para passar as informações de ordens já existentes que serão modificadas ou eliminadas. | Entrada | ||||
Atributo | Tipo | Formato | Valor Inicial | Obrigatório | Evolução |
nr-ord-produ | Integer | >>>,>>>,>>9 | 0 | ||
it-codigo | Char | x(16) | |||
qt-ordem | Deci-4 | >>>>>,>>9.9999 | 0 | ||
qt-produzida | Deci-4 | >>>>>,>>9.9999 | 0 | ||
qt-refugada | Deci-4 | >>>>>,>>9.9999 | 0 | ||
un | Char | xx | |||
dt-inicio | Date | 99/99/9999 | Today | ||
dt-termino | Date | 99/99/9999 | Today | ||
cd-planejado | Char | x(12) | |||
estado | Integer | >9 | 1 | ||
emite-requis | Logi | Sim/Não | Sim | ||
emite-ordem | Logi | Sim/Não | Sim | ||
cod-depos | Char | x(3) | |||
nr-req-sum | Integer | >>>,>>>,>>9 | 0 | ||
dt-emissao | Date | 99/99/9999 | Today | ||
ct-codigo | Char | x(8) | |||
sc-codigo | Char | x(8) | |||
qt-reportada | Deci-4 | >>>>>,>>9.9999 | 0 | ||
qt-requisita | Deci-4 | >>>>>,>>9.9999 | 0 | ||
lote-serie | Char | x(10) | |||
narrativa | Char | x(2000) | |||
nr-linha | Integer | >>9 | 0 | ||
tipo | Integer | >9 | 1 | ||
usuario-alt | Char | x(12) | ? | ||
data-alt | Date | 99/99/9999 | Today | ||
cod-estabel | Char | x(3) | |||
nome-abrev | Char | x(12) | |||
nr-pedido | Char | x(12) | |||
dt-orig | Date | 99/99/9999 | ? | ||
valorizada | Logi | Sim/Não | no | ||
calc-cs-mat | Integer | >9 | 1 | ||
reporte-mob | Integer | >9 | 1 | ||
req-emitida | Logi | Sim/Não | Não | ||
prioridade | Integer | 999 | 0 | ||
val-per | Logi | Sim/Não | Não | ||
cod-refer | Char | x(8) | |||
cod-gr-cli | Integer | >9 | 0 | ||
nr-ult-seq | Integer | >>>9 | 0 | ||
rep-prod | Integer | >9 | 1 | ||
qt-apr-cond | Deci-4 | >>>>>,>>9.9999 | 0 | ||
qt-perda | Deci-5 | >>>>,>>9.99999 | 0 | ||
custeio-prop-mob | Integer | >9 | 1 | ||
qt-inicial | Deci-4 | >>>>>,>>9.9999 | 0 | ||
custeio-prop-mat | Integer | >9 | 1 | ||
prod-repet | Logi | Sim/Não | no | ||
nr-ord-aber | Integer | >>>,>>>,>>9 | 0 | ||
nr-sequencia | Integer | >>,>>9 | 0 | ||
cons-mrp | Logi | Sim/Não | Sim | ||
cons-pmp | Logi | Sim/Não | Sim | ||
ct-desp | Char | x(8) | |||
sc-desp | Char | x(8) | |||
origem | Char | x(2) | |||
sit-aloc | Integer | >9 | 1 | ||
nr-ficha | Integer | >>>>,>>9 | 0 | ||
enc-mensal | Logi | Sim/Não | Não | ||
it-inspec | Char | x(16) | |||
ct-imob | Char | x(8) | |||
sc-imob | Char | x(8) | |||
prototipo | Logi | Sim/Não | Não | ||
num-ord-inv | Integer | >>>,>>>,>>9 | 0 | ||
dest-manut | Integer | >9 | 1 | ||
nr-entrega | Integer | >>>>9 | 0 | ||
nr-ord-refer | Integer | >>>,>>>,>>9 | 0 | ||
conta-ordem | Char | x(17) | |||
conta-despesa | Char | x(17) | |||
conta-imob | Char | x(17) | |||
custeio-prop-ggf | Integer | >9 | 1 | ||
calc-cs-mob | Integer | >9 | 1 | ||
calc-cs-ggf | Integer | >9 | 1 | ||
reporte-ggf | Integer | >9 | 1 | ||
nr-estrut | Integer | >>>>>>9 | 1 | ||
item-cotacao | char | x(16) | |||
sequencia | Integer | >>>>9 | 0 | ||
es-codigo | Char | x(16) | |||
nr-estrut-filha | Integer | >>>>>>9 | 0 | ||
cod-unid-negoc[1] | Char | X(3) | |||
dt-disponibilidade | Date | ? | |||
ind-tipo-movto | Integer | 0 | |||
faixa-numeracao | Integer | 1 | |||
verifica-compras | Logical | No | |||
aloca-reserva | Logical | ? | |||
aloca-lote | Logical | ? | |||
rw-ord-prod | Rowid | ? | |||
gera-relacionamentos | Logical | Yes | |||
gera-reservas | Logical | Yes | |||
prog-Seg | Char | ||||
seg-usuario | Char | ||||
ep-codigo-usuario | Integer | 0 | |||
cod-versao-integracao | Integer | 999 | 0 | ||
Considera-dias-desl | Logical | Não |
Observação: Quando o campo nr-ord-prod é igual a 0 (zero), a api irá automaticamente gerar um número para a ordem de produção. A faixa de numeração utilizada (manual ou automática) é informada através do campo faixa-numeracao (1-manual, 2-automática).
Para efeitos de validação do número, quando este é informado, também é utilizado o campo faixa-numeração, podendo ser informado, além de 1 e 2, também o valor 3, o qual irá ignorar essa validação.
O campo ind-tipo-movto indica o tipo de movimento que será gerado pela API:
1 – Inclusão
2 – Modificação
3 – Eliminação
4 – Cópia
O campo verifica-compras serve apenas para a eliminação de ordens de produção. Quando setado com o valor yes, a rotina de eliminação irá verificar os relacionamentos da ordem com o módulo de compras, antes de realizar a exclusão.
Os campos aloca-reserva e aloca-lote informam se a API irá realizar a alocação das reservas quando da criação da ordem. Se os campos contiverem ?, será utilizado o default existente nos parâmetros da produção.
O campo rw-ord-prod retorna o rowid da tabela ord-prod, quando a api é executada com sucesso, servindo também para receber o rowid da ordem original, quando for selecionada a opção de cópia.
O campo gera-relacionamentos informa à api se além do registro na tabela ord-prod e ext-ord, deverão ser gerados os relacionamentos correspondentes àquela ordem, nas tabelas reservas, oper-ord e pert-ord. Na opção cópia, se o campo for setado como no, os relacionamentos da nova ordem são copiados da ordem de origem. Se for setado como yes, os relacionamentos são regerados.
Os campos prog-seg, seg-usuário e ep-codigo-usuario são utilizados para a integração com o módulo de investimentos e SWS, indicando qual o programa chamador e o usuário ativo no momento.
Vários campos da temp-table podem ser informados com ?, o que irá disparar uma rotina de utilização de dados default, que irá preencher os campos com os defaults adequados, retirados das tabelas item, param-cp, lin-prod e param-cs.
São eles: un, tipo, estado, nr-linha, cod-refer, conta-ordem, rep-prod, sit-aloc, cod-estabel, cod-depos, cd-planejado, dt-orig, dt-emissao, calc-cs-mat, calc-cs-mob, calc-cs-ggf, reporte-mob, reporte-ggf, nr-ult-seq, origem, nome-abrev, cod-gr-cli, nr-pedido, nr-sequencia, lote-serie, prioridade, emite-ordem, emite-requis, narrativa.
O campo gera-reservas será utilizado para release 204 ou superior.
tt-reapro | Entrada/Saída | ||||
Nesta temp-table são informadas as reservas de reaproveitamento que serão passadas para a API. | Entrada | ||||
Atributo | Tipo | Formato | Valor Inicial | Obrigatório | Evolução |
It-codigo | Char | “x(16)” | |||
Cod-refer | Char | “x(8)” | |||
Descricao | Char | “x(36)” | |||
Un | Char | “x(2)” | |||
Quant-Orig | Decimal | “->>>>>,>>9.9999” | 0 |
tt-erro | Entrada/Saída | ||||
Nesta temp-table são armazenados os possíveis erros que ocorreram durante a criação/alteração/eliminação das ordens. | Entrada | ||||
Atributo | Tipo | Formato | Valor Inicial | Obrigatório | Evolução |
i-sequen | Inteiro | 999 | |||
cd-erro | Inteiro | >>>>9 | |||
Mensagem | Character | X(255) |
Execução
Execução: O programa cpapi301.p irá executar estas validações básicas:
1ª Validação: Versão de Integração
O programa irá verificar se o programa chamador está íntegro com a API, e isto ocorre por meio da verificação da versão de integração passada como parâmetro (campo cod-versao-integracao). Caso a versão esteja incompatível, a API abortará a execução retornando o código de erro 3941. A versão atual que deve ser utilizada é a 003.
Outras Validações:
- Número da ordem de produção;
- Ordem de investimentos;
- Quantidade de ordem;
- Código do estabelecimento;
- Estado, Tipo, Nr-Sequencia, Nr-estrut;
- Planejador;
- Conta-Contábil;
- Item;
- Data Início, Data Término;
- Unidade;
- Depósito;
- Linha de Produção;
- Cliente, Pedido.
Parâmetros de Saída
No retorno da execução da cpapi301.p, será retornado um dos valores abaixo (via RETURN-VALUE):
NOK: houveram problemas nas validações ou na execução da API.
OK: execução com sucesso.
Execução Persistente:
Para a execução persistente da CPAPI301, as variáveis e tabelas temporárias devem ser definidas corretamente, conforme especificação.
define variable h-cpapi301 as handle no-undo.
run cpp/cpapi301.p persistent set h-cpapi301 (input-output table tt-ord-prod,
input-output table tt-reapro,
input-output table tt-erro,
input true).
run ativaExecPersistente in h-cpapi301.
run pi-processa-ordens in h-cpapi301 (input-output table tt-ord-prod,
input-output table tt-reapro,
input-output table tt-erro,
input true).
if return-value = "nok":U then do:
for each tt-erro:
end.
end.
run finalizaAPI in h-cpapi301.
if valid-handle(h-cpapi301) then
delete procedure h-cpapi301.
Funções/Includes/Procedures Externas
Algumas includes da API podem ser acrescentadas a um programa e utilizadas, sem a necessidade de chamadas à API. São elas:
- {CPP/CPAPI301.I21} – Validações
- {CPP/CPAPI301.I7} – Gerar Lista de Processos (apesar do nome ela retorna apenas uma consulta de processos do item)
{CPP/CPAPI301.I21} – Validações
Esta Include possui a declaração de uma procedure interna que permite realizar a validação da ordem de produção sem a necessidade de chamar a api. Para que isso aconteça, basta acrescentar essa include ao programa e colocar no local pertinente a chamada para a pi-valida-ord-prod, conforme o exemplo abaixo:
Run pi-valida-ord-prod (input 1,
input yes,
input 0,
output c-erro,
ouput c-texto).
Antes da chamada dessa procedure, é necessária a criação do registro na temp-table tt-ord-prod, além dos respectivos assigns a fim de preencher a temp-table com os dados que serão validados.
O primeiro input parameter indica o tipo de movimento que se deseja validar (1-inclusão, 2-modificação, 3-Eliminação e 4-Cópia).
O segundo input parameter utilizado pela procedure indica se ela irá retornar logo após a ocorrência do primeiro erro, ou se irá acumulando todos os erros apontados, retornando apenas quando terminar todas as validações.
O terceiro input parameter indica o número da ordem de produção.
O retorno da procedure é feito através do “Return-Value”, o qual será “OK” para uma validação perfeita ou “NOK” para uma validação interrompida por qualquer tipo de erro. Os códigos de erros são retornados em forma de lista (separados por vírgulas), no output parâmetro c-erro. O Output parâmetro c-texto retorna um texto acessório que é necessário para a impressão de algumas mensagens. Quando não for necessário, é retornado em branco.
Para a exibição das mensagens, pode ser utilizado o UT-MSGS.P, na forma abaixo:
Run pi-valida-ord-prod (input 1,
input yes,
input 0,
output c-erro,
ouput c-texto)
if return-value = “nok” then do:
do i-cont = 1 to num-entries (c-erro):
run utp/ut-msgs.p (input "show",
input int (entry (i-cont, c-erro)),
input entry (i-cont, c-texto)).
end.
return "adm-error".
end.
Para utilização desta Include, é necessário a declaração das seguintes includes e variáveis ao programa:
{cdp/cdcfgman.i}
{cdp/cdunif001.i}
{cdp/cd0666.i}
{cpp/cpapi301.i}
{cdp/cd9203.i}
DEFINE VARIABLE l-unid-neg AS LOGICAL NO-UNDO.
{cpp/cpapi301.i4}
{cpp/cpapi301.i23}
{cpp/cpapi301.i21}
{CPP/CPAPI301.I20} - F-Gera-Número-Op-Manual / F-Gera-Número-Op-Automática
Possui a declaração de 2 functions que não utilizam parâmetros e tem por objetivo retornar um número de ordem de produção válido. Utilizadas quando da inclusão de novas ordens de produção.
{CPP/CPAPI301.I17} – Calcula tamanho do período, conforme o tipo de período.
{CPP/CPAPI301.I7} – Gerar Lista de Processos
{cpp/cpapi301.i4} /* Definição da tt-proces-item */
{cpp/cpapi301.i7} /* GerarListaProcesItem */
run GerarListaProcesItem (input <Código do Item>, // Item é o único parâmetro Obrigatório
input ?, // Quantidade ou ? - Usado para Regra processo
input ?, // Estabelecimento ou ? - Usado para Regra processo
input "", // Referencia ou vazio "" - Usado para Regra processo
input ?, // Data Validade ou ? - Usado para Regra processo , porém caso a data seja informada, ela também filtra a validade dos Roteiros e Listas de Componente.
input ?, // Linha de Produção ou ? - Usado para Regra processo
input no, // YES - Gera lista com todos os processos, NO - Gera apenas primeiro processo
input ?, // Unidade de Negócio ou ? - Usado para Regra processo
input-output table tt-proces-item).
IMPORTANTE: é necessário que exista ao menos um processo criado, ou seja, se existir roteiros e listas de componentes, porém não foi criado processos para os mesmos, não serão criados automaticamente processos, pois esta procedure é apenas de consulta.
[1] O campo <cod-unid-negoc> existe apenas a partir da release 2.06B do EMS2. Sendo que ele será utilizado apenas quando utilizada a função de Unidade de Negócio no EMS5. Caso não seja informado o valor neste campo, e a função estiver ativa, então buscará a Unidade de Negócio padrão do ItemxEstabelecimentoxDepósito ou no caso de falta da primeira no ItemxEstabelecimento.