Histórico da Página
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 | LOGIX | Módulo | ENG |
Segmento Executor | |||
Projeto1 | MANCORE1-996 | IRM/EPIC1 | MANCORE1-2901 |
Requisito/Story/Issue1 | Subtarefa1 | ||
Chamado2 | |||
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 funções (adapters) que serão executadas nas rotinas de cadastro de itens, cadastro de local de estoque, cadastro de recurso, estrutura, processos, rotinas de inclusão/alteração de ordens de produção, endereços de estoque e saldos para que os dados sejam enviados via mensagem XML ao PCFactory. O envio das mensagens se dará via WEBSERVICE.
(Obrigatório)
Definição da Regra de Negócio
Desenvolver rotinas para realizar o envio dos dados do LOGIX para o PCFactory usando Adapters que irão gerar os XML´s que serão enviados ao Webservice da PPi MultTask.
Serão integrados os seguintes dados :
- Cadastro de Itens
- Cadastro de Local de Estoque ( depósitos)
- Centro de trabalho
- Cadastro de Recurso
- Ordens de produção ( Operações, Roteiros, Componentes )
- Estrutura
- Processos
- Endereços de estoque
A integração entre os dois sistemas ocorrerá utilizando o conceito de troca de mensagens XML trafegadas sobre o protocolo HTTP ou HTTPS – com o uso do padrão SOAP (WebServices). A mensagem será enviada para o Webservice disponibilizado pelo PCFactory (software MES da PPI Multitask), caracterizando o envio como síncrono.
Conforme o padrão da TOTVS, todas as mensagens trafegadas usarão o conceito de Mensagem Única – sob o layout da TOTVSMessage (que pode ser conferido em $/STABLE/xmlschema/general/totvsmsg.xsd).
Segue regra de envio (TOTVS-> PPI) usada para todos os arquivos(utilizando o exemplo do cadastro de produto):
- No momento da criação, alteração ou exclusão de um Item, o WebService será avisado de forma síncrona antes da efetivação no próprio TOTVS.
- O PC Factory, ao receber a mensagem já irá executar a rotina de efetivação no mesmo momento, permitindo retornar ao TOTVS se o ITEM foi incluído, alterado ou excluído com sucesso ou se há alguma inconsistência de negócio.
- Caso não ocorra erro, o procedimento é concluído e a sessão do usuário já é liberada.
Em caso de exceção (erros de transporte ou inconsistências de negócio), o usuário será avisado no mesmo momento que o ITEM não foi efetivado no PC Factory, e gerando a pendência de integração em banco de dados, para que um usuário responsável consiga visualizar as informações que não foram enviadas e possa tomar alguma ação sobre ela(controle de pendências).
Abaixo vamos detalhar o envio de cada mensagem. A criação/alteração dos adpaters bem como a alteração dos pontos de geração e alteração dos dados que deverão startar o envio das mensagens.
Mensagens TOTVS enviadas:
1 - Item
O cadastro de itens é o MAN10021. Gera a tabela ITEM.
A Mensagem utilizada será: Item_3_007
1.1 Mensagem:
A mensagem possui vários tags, porém serão usadas algumas para o PCFactory:
Bloco | Tag | Descrição | Observação |
BusinessContentType | CompanyId | Empresa | ITEM.COD_EMPRESA |
BusinessContentType | BranchId | Filial | |
BusinessContentType | CompanyInternalId | Empresa+Filial | |
BusinessContentType | Code | Código do item | ITEM.COD_ITEM |
BusinessContentType | Name | Descrição do item | ITEM.DEN_ITEM |
BusinessContentType | ShortName | Nome curto | ITEM.DEN_ITEM_REDUZ |
BusinessContentType | Active | Item ativo? | ITEM.IES_SITUACAO |
BusinessContentType | UnitOfMeasureCode | Unidade de Medida | ITEM.COD_UNID_MED |
BusinessContentType | EconomicLot | Lote econômico | |
BusinessContentType | MinimumLot | Lote mínimo | |
BusinessContentType | FamilyCode | Família | ITEM.COD_FAMILIA |
BusinessContentType | FamilyDescription | Descrição da família | FAMILIA.DEN_FAMILIA |
BusinessContentType | SecondUnitOfMeasureCode | Segunda Unidade de medida | -- |
BusinessContentType | MultiplicationFactorValue | Fator de conversão | ITEM.FAT_CONVER |
BusinessContentType | ProductType | Tipo do Item | ITEM_IES_TIP_ITEM |
BusinessContentType | PackingQuantity | Quantidade Embalagem | 0 |
BusinessContentType | CostCenterCode | Centro de Custo | -- |
BusinessContentType | MultipleLot | Lote Multiplo | |
BusinessContentType | StockControlType | Tipo Controle de Estoque | |
BusinessContentType | GrossWeight | Peso Bruto | 0 |
BusinessContentType | Trail | Controla Lote | ITEM.IES_CTR_LOTE |
BusinessContentType | BinControl | Endereço | ITEM_CTR_GRADE.IES_ENDERECO |
BusinessContentType | Detail | Detalhes do item |
Observação:
- Para a tag Productype deverá ser acrescentado os seguintes valores:
22 = Produzido
23 = Comprado
24 = Fantasma
25 = Beneficiado
26 = Final
A tag Productype deve ser alterada, pois o PC-Factory não lê a a tag ObtainingType que já possui as opções.
Para a tag StockControlType:
StockControlType : 1 - Endereço; 2 - Serie; 3-Lote.
Deverá verificar se controla nr. de série (ITEM_CTR_GRADE.RESERVADO_2), se controlar gravar = '2'.
Se não controlar série, verificar se controla endereço (ITEM_CTR_GRADE.IES_ENDERECO), se controlar gravar '1'.
Por último verificar se controla Lote, se controlar gravar = '3'. Caso não possuir nenhum desses controles a tag não será gerada.A tag EconomicLot, existe somente para itens comprados. Se existir informa na ITEM_SUP buscar da "item_sup.qtd_lote_economic"
A tag MinimumLot deve seguir a seguinte regra: Se ies_tip_item = 'F' ou 'P' buscar da "item_man.qtd_prog_minima", senão buscar da "item_sup.qtd_lote_minimo"
A tag MultipleLot deve seguir a seguinte regra: Se ies_tip_item = 'P' ou 'F' buscar da "item_man.qtd_prog_multipla", senão buscar da "item_sup.qtd_lote_multiplo"
Utilizando GRADE:
Quando usa o conceito grade (parâmetro: utiliza_grade) e o item controlar grade (item_ctr_grade) o sistema terá um tratamento diferenciado para o envio dos itens.
No XML, o código do item será composto pelo código do item, mais um ID (número sequencial) gerado pelo sistema para identificar a grade. Esta geração do ID é necessário pois o PC-Factory não possui o conceito grade. Criara a função
MAN72030_IDENTIFICA_ITEM_MES
Exemplo: ITEM = CAMISA. Grade 1 : Cor = Branca. Grade 2: Tamanho: P (pequeno)
O código do item passado para o PC-Factory será: CAMISA1, onde 1 é um número sequencial gerado pelo Logix.
Exemplo: ITEM = CAMISA. Grade 1 : Cor = Preta. Grade 2: Tamanho: P (pequeno)
O código do item passado para o PC-Factory será: CAMISA2, onde 2 é um número sequencial gerado pelo Logix.
Estes IDS gerados serão registrados na seguinte tabela: MAN_ITEM_MES. Serão gravados os seguintes campos:
- item_mes : Item com sequencial. Sequencial é gerado com base no o último sequencial do item mais um(+1).
- item : Item Logix
- grade_1
- grade_2
- grade_3
- grade_4
- grade_5
Quando o item usa grade, o XML não deverá ser gerado pelo cadastro de item (MAN10021). O XML do item será gerado nas rotinas que possuem grade, como por exemplo MAN10002, MAN10243 entre outros. Para o cadastro do item, temos algumas exceções:
1 - No MAN10021 a inclusão inicia pelo folder básico, e neste momento não é possível definir se o item usará grade e o envio do XML será executado.
2 - Caso o item seja alterado para controlar grade no folder Grades e Dimensionais, deverá verificar se já existe estrutura ou processo. Se não existir deverá enviar uma mensagem de DELETE para o item.O XML do item com o ID correto será gerado quando for efetuado o cadastro no MAN10002 ou MAN10243. Se alterar para controlar grade e já existir estrutura ou processo, não deverá enviar nenhum XML, sendo que, o produto sem grade ficará na base do PC-Factory, porém não será utilizado.
3 - Ao enviar um item que não controla grade, deverá verificar se o código não terá conflitos com o código gerado pelo sistema. Se já existir o código na tabela MAN_ITEM_MES, deverá gerar um sequencial para o item sem grade. Exemplo: Item Camisa, Cor: Branca, Tamanho: M - Item MES (ID) = CAMISA1. Se for cadastrado pelo MAN10021 o item CAMISA1, o sistema deverá gerar um novo ID. No exemplo será : CAMISA11. Da mesma forma, ao gerar o ID do item, se este código for um item cadastrado no Logix deverá buscar outro sequencial. Estas validações serão utiizadas para que não tenha o mesmo código do item no Logix e PC-Factory representando coisas diferentes.
4 - Em caso de exclusão do item, deverá enviar XML de DELETE para todos os itens que estão na MAN_ITEM_MES onde o item Logix seja igual ao item que está sendo excluído. Deverá também enviar o XML de DELET das estruturas e processos dos itens excluídos.
Tag Detail:
A tag DETAIL terá um tratamento especial quando o sistema estiver parametrizado para usar o conceito grade. Deverá gerar com a descrição da grade, o código da grade e o conteúdo da grade, separados por pipe |.
Exemplo: ITEM = CAMISA. Grade 1 : Cor = Branca. Grade 2: Tamanho: P (pequeno). Gravar como: COR:01-BRANCA|TAMANHO:01-P. ( Usar a função man_grade_monta_texto_grades_item )
A tag DETAIL é gerada com base na rotina que estiver sendo executada,conforme descrito abaixo:
- ESTRUTURA - MAN10002
Usar a tabela estrut_grade.
Exemplo: ITEM = CAMISA. Grade 1 : Cor = Branca. Grade 2: Tamanho: P (pequeno). Resultado: COR:01-BRANCA|TAMANHO:01-P.
Descrição da grade: Na tabela ITEM_CTR_GRADE, verifica-se qual a grade o item controla. Grade 1 = NUM_GRADE_1; Grade 2 = NUM_GRADE_2; Grade 3 = NUM_GRADE_3; Grade 4 = NUM_GRADE_4; Grade 5 = NUM_GRADE_5
A descrição da grade é da tabela CTR_GRADE, campo.DESCR_CABEC_ZOOM
Código da grade: Pai: ESTRUT_GRADE, campos:COD_GRADE_1, COD_GRADE_2,COD_GRADE_3,COD_GRADE_4,COD_GRADE_5
Componente: ESTRUT_GRADE, campos:COD_GRADE_COMP_1,COD_GRADE_COMP_2,COD_GRADE_COMP_3,COD_GRADE_COMP_4,COD_GRADE_COMP_5
Conteúdo da grade: O conteúdo da grade deverá ser pesquisado com base na tabela cadastrada na CTR_GRADE.NOM_TABELA_ZOOM. Fazer pesquisa usando os campos: CTR_GRADE..NOM_TABELA_ZOOM, CTR_GRADE.DESCR_COL_1_ZOOM e CTR_GRADE.DESCR_COL_2_ZOOM - PROCESSO- MAN10243
Usar a tabela man_processo_item
Exemplo: ITEM = CAMISA. Grade 1 : Cor = Branca. Grade 2: Tamanho: P (pequeno). Resultado: COR:01-BRANCA|TAMANHO:01-P.
Descrição da grade: Na tabela ITEM_CTR_GRADE, verifica-se qual a grade o item controla. Grade 1 = NUM_GRADE_1; Grade 2 = NUM_GRADE_2; Grade 3 = NUM_GRADE_3; Grade 4 = NUM_GRADE_4; Grade 5 = NUM_GRADE_5
A descrição da grade é da tabela CTR_GRADE, campo.DESCR_CABEC_ZOOM
Código da grade: Pai: ESTRUT_GRADE, campos:COD_GRADE_1, COD_GRADE_2,COD_GRADE_3,COD_GRADE_4,COD_GRADE_5
Componente: MAN_PROCESSO_ITEM, campos:CONTEUDO_GRADE_1,CONTEUDO_GRADE_2,CONTEUDO_GRADE_3, CONTEUDO_GRADE_4, CONTEUDO_GRADE_5
Conteúdo da grade: O conteúdo da grade deverá ser pesquisado com base na tabela cadastrada na CTR_GRADE.NOM_TABELA_ZOOM. Fazer pesquisa usando os campos: CTR_GRADE..NOM_TABELA_ZOOM, CTR_GRADE.DESCR_COL_1_ZOOM e CTR_GRADE.DESCR_COL_2_ZOOM
1.2 Alterações necessárias:
1.2.1 MAN10021 e MAN72030
a) Criar MAN7230, função genérica que será usada para controlar as informações da integração do TOTVSMES. Esta função terá as seguintes funcionalidades:
- MAN72030_INTEGRACAO_ATIVA
Retorna se a integração está ativa ou não.Validar a man_parametro_mes.ativo.O indicador de ativo é cadastrado no MAN10538. - MAN72030_EXECUTA_FILTRO
Executa o filtro cadastrado para a tabela que está sendo integrada.O filtro está cadastrado no MAN10568 - man_filtro_mes. - MAN72030_ENVIA_MENSAGEM
Envia a mensagem ao Webservice. Após o XML gerado, deverá conectar o webservice cadastrado no MAN10568 - man_parametro_mes.caminho e enviar o XML. - MAN72030_GRAVA_PENDENCIA
Gera os dados na tabela de pendência/histórico- Empresa : Empresa Logada
- Transação : Nome da tabela
- Registro : código do registro que está sendo processado. Exemplo: Item = código do item
- Status: 1 - OK; 2 - Pend; 3 - Erro
- Gerou XML : Sim ou não
- Nome arquivo XML
- Data Envio
- Hora de envio
- Usuário : Usuário logado
- Mensagem de retorno do PCFactory
- Xml : Conteúdo do XML
- Programa: Rotina que gerou o registro
- Data Reprocessamento : Quando reprocessado pela rotina de pendências
- Hora Reprocessamento : Quando reprocessado pela rotina de pendências
Observação: O nome do arquivo XML deverá respeitar a seguinte regra:
OK_<MSG>_<DATAHORA>_<REGISTRO>
PEND_<MSG>_<DATAHORA>_<REGISTRO>
ERR_<MSG>_<DATAHORA>_<REGISTRO>
Onde: OK - Se mensagem entregue sem problemas
PEND- Se mensagem não foi enviada
ERR - Se mensagem enviada, porém retornou erro.
MSG - Nome da tabela que está sendo processado. Exemplo : ITEM
DATAHORA: Data e Hora do envio
REGISTRO: Código do registro que está sendo enviado.
- MAN72030_SALVA_ARQUIVO_XML
No cadastro de parâmetros MAN10568, é definido se gera o arquivo XML nos diretórios. Quando este indicador, MAN_PARAMETRO_MES.GERAXML, estiver como 2 ('N') não será gravado o arquivo XML nos diretórios correspondentes. Será gravado apenas o conteúdo em tabela (man_pend_integracao_mes).
Caso o indicador , GERAXML, estiver como 1('S') deverá seguir a seguinte regra de geração:
Salvar os XMls nos diretório cadastrados no MAN10568, conforme resultado do processamento - man_parametro_mes.diretorio_enviados(status = 1) ou man_parametro_mes.diretorio_pendentes
O nome do arquivo é definido conforme regra acima.
b) Montagem do XML a rotina gera a partir do BusinessEvent (que fica dentro da tag BusinessMessage). Para integração com PCFactory deverá montar o cabeçalho da mensagem que consta com as tags TOTVSMessage e MessageInformation.
- O cabeçalho da mensagem deverá ser gerado manualmente:
Transaction: Tabela
ContextName = 'Logix'
SourceApplication = Módulo
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = Nome do programa
ProductVersion = Versão do RPO
Abaixo modelo(seguindo padrão de integração entre PCFactory a Datasul):
<BusinessMessage>
<BusinessEvent>
......................
</BusinessEvent>
....................
....................
<\BusinessMessage>
Onde:
- MessageInformation version Indica a versão da mensagem. Usar “3.007”
- UUID : Sequencial usado pelo EAI.
- Type: Tipo da mensagem. Gerar fixo “BusinessMessage”
- Transaction: Indica o que está sendo enviado. Gerar fixo “Item”
- StandardVersion: Versão. Gerar fixo “1.0”
- SourceApplication: Aplicação que está executando. Gerar fixo “ENG”
- CompanyId: Código da empresa. Empresa que estiver logada
- BranchId: Código da filial. Não gravar
- UserId: Usuário. Usuário logado.
- Product: Nome do produto. Name = “MAN10021” version = versão do RPO
- GenerateOn = Data e hora da geração da mensagem
- ContextName = Logix
- DeliveryType:Tipo de envio da mensagem. Gerar fixo “Sync”.
Dentro do BusinessMessage existe o bloco BusinessEvent com as seguintes tags:
Onde:
- Entity: Entidade . Gerar fixo “Item”
- Event: Inclusão/Alteração ou exclusão. Pode ser ‘delete’ ou ‘upsert’
- Identification: Identificação do item.
key name="Company" : Gerar com a empresa logada
key name="Code" : Gerar com a código do produto
Dentro do BusinessMessage existe o bloco BusinessContent, que contém os dados do item.
Somente deve gerar os campos necessários conforme descrito no item 1.1
Exemplo:
c) Alterar o cadastro de itens para que execute o adapter na inclusão/alteração/exclusão do item. Para integração Logix x PC-Factory não será usado o EAI.
Criar a função man10021_integra_mes, para fazer as validações referentes ao MES.
Exemplo:
IF NOT man10021_before_process_commit() THEN
RETURN FALSE
END IF
CALL man10021_integra_mes(mr_item.cod_item,m_operacao,TRUE,TRUE,NULL)
WHENEVER ERROR CONTINUE
CALL log085_transacao("COMMIT")
WHENEVER ERROR STOP
..........
FUNCTION man10021_integra_mes(l_cod_item,l_operacao,l_exibe_mensagem,l_filtra,l_xml)
#Verifica se a integração está ativada
IF NOT man72030_integracao_ativa(p_cod_empresa) THEN
RETURN TRUE
END IF
#Realiza o filtro, para verificar se o item será integrado
IF l_filtra THEN
IF NOT man72030_executa_filtro(p_cod_empresa,l_cod_item,"item") THEN
RETURN TRUE
END IF
END IF
IF l_xml IS NOT NULL AND l_xml <> ' ' THEN
LET l_status = TRUE
ELSE
CALL man10021_gera_xml_integracao_mes(l_operacao)
RETURNING l_status, l_xml
END IF
IF NOT l_status OR l_xml IS NULL OR l_xml = ' ' THEN
IF l_exibe_mensagem THEN
CALL log0030_mensagem("Não foi possível gerar o xml para integrar este item com o Totvs MES. Integração não realizada.","excl")
END IF
RETURN FALSE
END IF
CALL man72030_envia_mensagem(p_cod_empresa,l_xml)
RETURNING l_status, l_msg, l_tipo
#Criar arquivo XML fisicamente
CALL man72030_limpa_dados()
CALL man72030_set_empresa(p_cod_empresa)
CALL man72030_set_status_integracao(l_tipo)
CALL man72030_set_transacao("item")
CALL man72030_set_registro(l_cod_item)
CALL man72030_set_data_envio(_ADVPL_man72030_get_data_envio(l_xml))
CALL man72030_set_hora_envio(_ADVPL_man72030_get_hora_envio(l_xml))
CALL man72030_set_xml_enviado(l_xml)
CALL man72030_salva_arquivo_xml()
RETURNING l_status, l_arquivo
#Gerar tabela de pendências
IF NOT l_status OR l_arquivo = ' ' THEN
CALL man72030_set_gera_xml("2")
CALL man72030_set_nome_xml("")
ELSE
CALL man72030_set_gera_xml("1")
CALL man72030_set_nome_xml(l_arquivo)
END IF
CALL man72030_set_data_reprocessamento(NULL)
CALL man72030_set_hora_reprocessamento(NULL)
CALL man72030_set_programa(man554_num_programa())
CALL man72030_set_retorno(l_msg)
CALL man72030_set_usuario(p_user)
CALL man72030_grava_pendencia()
IF l_tipo <> '1' THEN
CALL log0030_mensagem("Atenção! Ocorreram erros na integração Totvs MES.\n"||
"Foi gerada uma pendência de integração para o item '"||l_cod_item CLIPPED||"'."||
"\nErro: "||l_msg clipped||".","info")
END IF
RETURN TRUE
END FUNCTION
Na função MAN10021_INTEGRA_MES deverá validar:
- Se o TOTVS MES está ativo (ver MAN72030_INTEGRACAO_ATIVA), deve continuar o processamento da integração, caso contrário, somente fazer o commit do item.
- Deverá aplicar o filtro do item(MAN_FILTRO_MES.TABELA = 'ITEM'). O filtro vai indicar se o item será integrado ou não.Usar a função MAN72030(man72030_executa_filtro).
- Se a condição do filtro for satisfeita, deverá gerar o XML, conforme mensagem item_3_007. Criar função man10021_gera_xml_integracao_mes. Nesta função executará o man9907. O MAN9907 executará o Adpater para geração do XML.
- A função MAN9907 executa o adapter do item para geração do XML. Executa as funções EAIAdapterItem3_SendBusinessMessage e EAIHelperItem3_envia_mensagem_eai_adapter.O XML é gerado na EAIAdapterItem3_LoadUpsertContent ou EAIAdapterItem3_LoadDeleteContent. Na função EAIHelperItem3, deverá ser feito um tratamento para não executar o EAI quando a rotina for executada pelo TOTVS MES ( tratar via variável m_integração_totvs_mes)
- O cabeçalho da mensagem deverá ser gerado manualmente:
ContextName = 'Logix'
SourceApplication = 'ENG'
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = MAN10021
ProductVersion = Versão do RPO - Depois de gerado o XML, deverá ser feito o envio. Criar o WSPCFactory que será executado no MAN72030 (man72030_envia_mensagem)
- Após o envio da mesagem deverá gerar o LOG do processamento. Gerar a tabela man_pend_integracao_mes.Usar a MAN72030 - man72030_grava_pendencia. Caso o xml não for enviado deverá ser emitida uma mensagem de aviso que o registro não foi integrado e gerar a pendência de envio. Nesta situação será gravado um arquivo de ERRO ou PEND, conforme a situação que impossibilitou o envio ao PCFactory.
- Só poderá ter uma pendência para o registro.Para gerar o XML e gravar a tabela man_pend_integracao_mes terá que respeitar as pendencias geradas. Se existir uma pendência de envio de algum registro e for gerada uma nova mensagem para o mesmo registro a pendência deverá ser excluída e trabalhar somente com a última mensagem, que poderá ser enviada sem problemas ou gerar nova pendência.
Outras funções que devem ser verificadas:
- Cópia do item : man1002132 e man_copia_item
- Replica do item.
Observação: MAN10081 e rotinas da engenharia grade(klin) não serão considerados no TOTVSMES.
2 - Local de Estoque
O cadastro de itens é o SUP10002. Gera a tabela LOCAL.
A Mensagem utilizada será: Warehouse_1_001
2.1 Mensagem:
A mensagem possui vários tags, porém serão usadas algumas para o PCFactory:
mensagem possui vários tags, porém serão usadas algumas para o PCFactory:
Bloco | Tag | Descrição | Observação |
BusinessContentType | CompanyId | Código da Empresa | LOCAL.COD_EMPRESA |
BusinessContentType | BranchId | Código da Filial | -- |
BusinessContentType | CompanyInternalId | InternalId da chave completa de empresa | -- |
BusinessContentType | Code | Código do Local de Estoque(armazém/almoxarifado/depósito) | LOCAL.COD_LOCAL |
BusinessContentType | InternalId | InternalId do Code | Empresa\Local |
BusinessContentType | Description | Descrição do Local de Estoque(armazém/almoxarifado/depósito) | LOCAL.DEN_LOCAL |
2.2 Alterações Necessárias
2.2.1 SUP10002
a)Deverá usar a função MAN72030, da mesma forma que o cadastro de item - MAN10021 ( ver item 1.1.2).
- MAN72030_INTEGRACAO_ATIVA
- MAN72030_EXECUTA_FILTRO
- MAN72030_ENVIA_MENSAGEM
- MAN72030_GRAVA_PENDENCIA
- MAN72030_SALVA_ARQUIVO_XML
b) Montagem do XML a rotina gera a partir do BusinessEvent (que fica dentro da tag BusinessMessage). Para integração com PCFactory deverá montar o cabeçalho da mensagem que consta com as tags TOTVSMessage e MessageInformation.
- O cabeçalho da mensagem deverá ser gerado manualmente:
Transaction: Tabela
ContextName = 'Logix'
SourceApplication = Módulo
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = Nome do programa
ProductVersion = Versão do RPO
Abaixo modelo(seguindo padrão de integração entre PCFactory a Datasul):
<BusinessMessage>
<BusinessEvent>
......................
</BusinessEvent>
....................
....................
<\BusinessMessage>
Onde:
- MessageInformation version Indica a versão da mensagem. Usar “1.001”
- UUID : Sequencial usado pelo EAI.
- Type: Tipo da mensagem. Gerar fixo “BusinessMessage”
- Transaction: Indica o que está sendo enviado. Gerar fixo “WareHouse”
- StandardVersion: Versão. Gerar fixo “1.0”
- SourceApplication: Aplicação que está executando. Gerar fixo “ENG”
- CompanyId: Código da empresa. Empresa que estiver logada
- BranchId: Código da filial. Não gravar
- UserId: Usuário. Usuário logado.
- Product: Nome do produto. Name = “SUP10002” version = versão do RPO
- GenerateOn = Data e hora da geração da mensagem
- ContextName = Logix
- DeliveryType:Tipo de envio da mensagem. Gerar fixo “Sync”.
Dentro do BusinessMessage existe o bloco BusinessEvent com as seguintes tags:
Onde:
- Entity: Entidade . Gerar fixo “WareHouse”
- Event: Inclusão/Alteração ou exclusão. Pode ser ‘delete’ ou ‘upsert’
- Identification: Identificação do Local de estoque.
key name="Company" : Gerar com a empresa logada
key name="Code" : Gerar com a código do local
Dentro do BusinessMessage existe o bloco BusinessContent, que contém os dados do item.
Exemplo:
<BusinessContent>
<CompanyId>04</CompanyId>
<Code>99</Code>
<InternalId>04|99</InternalId>
<Description>Local 99</Description>
</BusinessContent>
c) Alterar o cadastro de local para que execute o adapter na inclusão/alteração/exclusão do Local. Para integração Logix x PC-Factory não será usado o EAI. Usar o mesmo conceito do cadastro do item
Criar a função sup10002_integra_mes, para fazer as validações referentes ao MES. Como o sup10002 é uma rotina metadados, deverá alterar/criar o frm0001 para cadastrar o after_confirm para executar a função de integração MES.
A função sup10002_integra_mes deve funcionar da mesma forma que man10021_integra_mes.
FUNCTION sup10002_integra_mes(l_cod_local,l_operacao,l_exibe_mensagem,l_filtra,l_xml)
#Verifica se a integração está ativada
IF NOT man72030_integracao_ativa(p_cod_empresa) THEN
RETURN TRUE
END IF
#Realiza o filtro, para verificar se o local será integrado
IF l_filtra THEN
IF NOT man72030_executa_filtro(p_cod_empresa,l_cod_local,"warehouse") THEN
RETURN TRUE
END IF
END IF
IF l_xml IS NOT NULL AND l_xml <> ' ' THEN
LET l_status = TRUE
ELSE
CALL sup10002_gera_xml_integracao_mes(l_operacao)
RETURNING l_status, l_xml
END IF
IF NOT l_status OR l_xml IS NULL OR l_xml = ' ' THEN
IF l_exibe_mensagem THEN
CALL log0030_mensagem("Não foi possível gerar o xml para integrar este local com o Totvs MES. Integração não realizada.","excl")
END IF
RETURN FALSE
END IF
CALL man72030_envia_mensagem(p_cod_empresa,l_xml)
RETURNING l_status, l_msg, l_tipo
#Criar arquivo XML fisicamente
CALL man72030_limpa_dados()
CALL man72030_set_empresa(p_cod_empresa)
CALL man72030_set_status_integracao(l_tipo)
CALL man72030_set_transacao("WAREHOUSE")
CALL man72030_set_registro(l_cod_local)
CALL man72030_set_data_envio(_ADVPL_man72030_get_data_envio(l_xml))
CALL man72030_set_hora_envio(_ADVPL_man72030_get_hora_envio(l_xml))
CALL man72030_set_xml_enviado(l_xml)
CALL man72030_salva_arquivo_xml()
RETURNING l_status, l_arquivo
#Gerar tabela de pendências
IF NOT l_status OR l_arquivo = ' ' THEN
CALL man72030_set_gera_xml("2")
CALL man72030_set_nome_xml("")
ELSE
CALL man72030_set_gera_xml("1")
CALL man72030_set_nome_xml(l_arquivo)
END IF
CALL man72030_set_data_reprocessamento(NULL)
CALL man72030_set_hora_reprocessamento(NULL)
CALL man72030_set_programa(man554_num_programa())
CALL man72030_set_retorno(l_msg)
CALL man72030_set_usuario(p_user)
CALL man72030_grava_pendencia()
IF l_tipo <> '1' THEN
Neste ponto deve exibir uma tela com as pendências. Por se tratar de um array, a integração vai enviar todos os dados que estão na tela.
END IF
RETURN TRUE
END FUNCTION
....
A função sup10002_gera_xml_integracao_mes deve seguir o seguinte modelo ( man9907_executa_operacao ). Diferente do MAN10021, o local não necessita da função intermediária como o MAN9907.
FUNCTION sup10002_gera_xml_integracao_mes(l_operacao)
CALL EAIMapper_set("local.cod_empresa" ,mr_dados.cod_empresa)
CALL EAIAdapterWareHouse1_SendBusinessMessage(mr_dados.operacao) RETURNING l_status
IF l_status = FALSE THEN
LET l_msg = 'Erro ao enviar mensagem para o Adapter "EAIAdapterWareHouse1" (Local).'
RETURN FALSE, l_msg
END IF
RETURN l_status, l_xml
END FUNCTION
Na função SUP10002_INTEGRA_MES deverá validar:
- Se o TOTVS MES está ativo (ver MAN72030_INTEGRACAO_ATIVA), deve continuar o processamento da integração, caso contrário, somente fazer o commit do local.
- Deverá aplicar o filtro do item(MAN_FILTRO_MES.TABELA = 'LOCAL'). O filtro vai indicar se o local será integrado ou não.Usar a função MAN72030(man72030_executa_filtro).
- Se a condição do filtro for satisfeita, deverá gerar o XML, conforme mensagem warehouse_1_001. Criar função sup10002_gera_xml_integracao_mes e esta função executará o Adpater para geração do XML.
- Criar os adapters EAIAdapterWareHouse1 e o EAIHelperWareHouse1. Usar o EAI0032 para criar esse adapter (FRM0000).
- Na função EAIHelperWareHouse1, deverá ser feito um tratamento para não executar o EAI quando a rotina for executada pelo TOTVS MES ( tratar via variável m_integração_totvs_mes)
- O cabeçalho da mensagem deverá ser gerado manualmente:
ContextName = 'Logix'
SourceApplication = 'ENG'
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = SUP10002
ProductVersion = Versão do RPO - Depois de gerado o XML, deverá ser feito o envio via o WSPCFactory que será executado no MAN72030 (man72030_envia_mensagem)
- Após o envio da mesagem deverá gerar o LOG do processamento. Gerar a tabela man_pend_integracao_mes.Usar a MAN72030 - man72030_grava_pendencia. Caso o xml não for enviado deverá ser exibida uma tela de aviso informando os registros não integrados, gerando assim a pendência de envio( No caso do local que pode ter várias pendências - array - será mostrada em tela). Nesta situação será gravado um arquivo de ERRO ou PEND, conforme a situação que impossibilitou o envio ao PCFactory.
- Só poderá ter uma pendência para o registro.Para gerar o XML e gravar a tabela man_pend_integracao_mes terá que respeitar as pendencias geradas. Se existir uma pendência de envio de algum registro e for gerada uma nova mensagem para o mesmo registro a pendência deverá ser excluída e trabalhar somente com a última mensagem, que poderá ser enviada sem problemas ou gerar nova pendência.
3. Recurso/Equipamento/Ferramenta
Os recursos, para o TOTVS MES, podem ser cadastrados na rotina de ARRANJO - MAN10072 ou no cadastro de RECURSOS - MAN10078. Serão alteradas as duas rotinas para gerar realizar a integração.
A Mensagem utilizada será: Machine_1_000
1. Mensagem:
A mensagem possui vários tags, porém serão usadas algumas para o PCFactory.
Bloco | Tag | Descrição | Arranjo | Recurso |
BusinessContentType | Code | Código Máquina | REC_ARRANJO.COD_ARRANJO | RECURSO.COD_RECUR |
BusinessContentType | Description | Descrição Máquina | ARRANJO.DEN_ARRANJO | RECURSO.DEN_RECUR |
BusinessContentType | WorkCenterCode | Código Centro Trabalho | ?? | ?? |
BusinessContentType | WorkCenterDescription | Descrição Centro Trabalho | ?? | ?? |
BusinessContentType | CostCenterCode | Código Centro Custo | -- | -- |
BusinessContentType | ProcessorType | Tipo de Processamento 1=Monoprocesso;2=Por Batelada;3=Multiplos Processos;4=Manual | -- | -- |
BusinessContentType | LaborType | Tipo MOD 1=Nao Reporta;2=Operador;3=Equipe | -- | -- |
BusinessContentType | VolumeMachineQuantity | Quantidade Volume Máquina | -- | -- |
BusinessContentType | EfficiencyMachineValue | Eficiência Máquina | -- | -- |
BusinessContentType | OperatorMachineQuantity | Quantidade Operador Máquina | -- | -- |
BusinessContentType | SimultaneousActivityQuantity | Quantidade Operações Simultaneas | -- | -- |
BusinessContentType | IsSetup | Possui Preparação | -- | -- |
BusinessContentType | IsOverlapReport | Sobrepõe Apontamento | -- | -- |
BusinessContentType | ProductionAreaCode | Area de Produção | -- | -- |
BusinessContentType | InitialValidateDate | Data início validade | -- | -- |
BusinessContentType | FinalValidateDate | Data fim validade | -- | -- |
ListOfResources | ResourceType | Tipo do Recurso 1=Operador;2=Ferramenta;3=Equipe;4=Equipamento | -- | -- |
ListOfResources | ResourceCode | Código Recurso | -- | -- |
ListOfResources | ResourceName | Nome Recurso | -- | -- |
ListOfResources | UnitTimeType | Tipo Medida Tempo 1=Horas;2=Minutos;3=Segundos | -- | -- |
ListOfResources | StartExpirationDate | Data Início Validade | -- | -- |
ListOfResources | EndExpirationDate | Data Fim Validade | -- | -- |
ListOfResources | CycleQuantity | Número Ciclos | -- | -- |
ListOfResources | IsTimeActivity | Determian tempo | -- | -- |
ListOfProductionShifts | ProductionShiftCode | Código Modelo Turno | -- | -- |
ListOfProductionShifts | ProductionShiftDescription | Descrição Modelo Turno | -- | -- |
ListOfProductionShifts | BeginDate | Data Início Validade | -- | -- |
ListOfProductionShifts | EndDate | Data Fim Validade | -- | -- |
Criar TAG para identificar se é RECURSO ou ARRANJO
BusinessContentType | TypeMachine | xs:string | 1 | 1= Recurso; 2=Arranjo |
Observação:
- Se a tag TypeMachine for gerada pelo MAN10072 deve gravar como 2. Se for gerada pelo MAN10078 gravar como 1.
- Se a mensagem for gerada pelo MAN10078, considerar somente recurso = equipamento. Onde: IES_TIP_RECUR = 2
2 Alterações Necessárias
2.1 MAN10072 e MAN10078
Alterar rotina de cadastro de arranjo MAN10072 e recurso MAN10078 para gerar a mensagem MACHINE, na na inclusão/alteração/exclusão do recurso/arranjo.
a)Deverá usar a função MAN72030, da mesma forma que o cadastro de item - MAN10021 ( ver item 1.1.2).
- MAN72030_INTEGRACAO_ATIVA
- MAN72030_EXECUTA_FILTRO
- MAN72030_ENVIA_MENSAGEM
- MAN72030_GRAVA_PENDENCIA
- MAN72030_SALVA_ARQUIVO_XML
b) Montagem do XML a rotina gera a partir do BusinessEvent (que fica dentro da tag BusinessMessage). Para integração com PCFactory deverá montar o cabeçalho da mensagem que consta com as tags TOTVSMessage e MessageInformation.
- O cabeçalho da mensagem deverá ser gerado manualmente:
Transaction: Tabela
ContextName = 'Logix'
SourceApplication = Módulo
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = Nome do programa
ProductVersion = Versão do RPO
Abaixo modelo(seguindo padrão de integração entre PCFactory a Datasul):
<BusinessMessage>
<BusinessEvent>
......................
</BusinessEvent>
....................
....................
<\BusinessMessage>
Onde:
- MessageInformation version Indica a versão da mensagem. Usar “1.000”
- UUID : Sequencial usado pelo EAI.
- Type: Tipo da mensagem. Gerar fixo “BusinessMessage”
- Transaction: Indica o que está sendo enviado. Gerar fixo “Machine”
- StandardVersion: Versão. Gerar fixo “1.0”
- SourceApplication: Aplicação que está executando. Gerar fixo “ENG”
- CompanyId: Código da empresa. Empresa que estiver logada
- BranchId: Código da filial. Não gravar
- UserId: Usuário. Usuário logado.
- Product: Nome do produto. Name = “MAN10072” ou "MAN10078" version = versão do RPO
- GenerateOn = Data e hora da geração da mensagem
- ContextName = Logix
- DeliveryType:Tipo de envio da mensagem. Gerar fixo “Sync”.
Dentro do BusinessMessage existe o bloco BusinessEvent com as seguintes tags:
Onde:
- Entity: Entidade . Gerar fixo “Machine”
- Event: Inclusão/Alteração ou exclusão. Pode ser ‘delete’ ou ‘upsert’
- Identification: Identificação do Local de estoque.
key name="Company" : Gerar com a empresa logada
key name="Code" : Gerar com a código do local
Dentro do BusinessMessage existe o bloco BusinessContent, que contém os dados da mensagem.
Exemplo:
<BusinessContent>
<CompanyId>04</CompanyId>
<Code>99</Code>
<InternalId>04|99</InternalId>
<Description>Local 99</Description>
</BusinessContent>
c)Para integração Logix x PC-Factory não será usado o EAI. Usar o mesmo conceito do cadastro do item
Criar a função man10078_integra_mes/man10072_integra_mes, para fazer as validações referentes ao MES. Essas rotinas são metadados, deverá alterar/criar o frm0001 para cadastrar o after_confirm para executar a função de integração MES.
A função integra_mes deve funcionar da mesma forma que man10021_integra_mes.
FUNCTION man10072_integra_mes(l_recurso,l_operacao,l_exibe_mensagem,l_filtra,l_xml)
#Verifica se a integração está ativada
IF NOT man72030_integracao_ativa(p_cod_empresa) THEN
RETURN TRUE
END IF
#Realiza o filtro, para verificar se o recurso será integrado
IF l_filtra THEN
IF NOT man72030_executa_filtro(p_cod_empresa,l_recurso,"rec_arranjo") THEN
RETURN TRUE
END IF
END IF
IF l_xml IS NOT NULL AND l_xml <> ' ' THEN
LET l_status = TRUE
ELSE
CALL man10072_gera_xml_integracao_mes(l_recurso)
RETURNING l_status, l_xml
END IF
IF NOT l_status OR l_xml IS NULL OR l_xml = ' ' THEN
IF l_exibe_mensagem THEN
CALL log0030_mensagem("Não foi possível gerar o xml para integrar este recurso com o Totvs MES. Integração não realizada.","excl")
END IF
RETURN FALSE
END IF
CALL man72030_envia_mensagem(p_cod_empresa,l_xml)
RETURNING l_status, l_msg, l_tipo
#Criar arquivo XML fisicamente
CALL man72030_limpa_dados()
CALL man72030_set_empresa(p_cod_empresa)
CALL man72030_set_status_integracao(l_tipo)
CALL man72030_set_transacao("MACHINE")
CALL man72030_set_registro(l_recurso)
CALL man72030_set_data_envio(_ADVPL_man72030_get_data_envio(l_xml))
CALL man72030_set_hora_envio(_ADVPL_man72030_get_hora_envio(l_xml))
CALL man72030_set_xml_enviado(l_xml)
CALL man72030_salva_arquivo_xml()
RETURNING l_status, l_arquivo
#Gerar tabela de pendências
IF NOT l_status OR l_arquivo = ' ' THEN
CALL man72030_set_gera_xml("2")
CALL man72030_set_nome_xml("")
ELSE
CALL man72030_set_gera_xml("1")
CALL man72030_set_nome_xml(l_arquivo)
END IF
CALL man72030_set_data_reprocessamento(NULL)
CALL man72030_set_hora_reprocessamento(NULL)
CALL man72030_set_programa(man554_num_programa())
CALL man72030_set_retorno(l_msg)
CALL man72030_set_usuario(p_user)
CALL man72030_grava_pendencia()
....
A função man10072_gera_xml_integracao_mes/man10078_gera_xml_integracao_mes deve seguir o seguinte modelo ( man9907_executa_operacao ).
FUNCTION man10072_gera_xml_integracao_mes(l_operacao)
CALL EAIMapper_set("rec_arranjo.cod_empresa" ,mr_dados.cod_empresa)
CALL EAIAdapterMachine1_SendBusinessMessage(mr_dados.operacao) RETURNING l_status
IF l_status = FALSE THEN
LET l_msg = 'Erro ao enviar mensagem para o Adapter "EAIAdapterMachine1" (Recurso).'
RETURN FALSE, l_msg
END IF
RETURN l_status, l_xml
END FUNCTION
Para os recursos deverácriar os adapters: EAIAdapterMachine1 e EAIHelperMachine1. Se basear nos adapters do Item.
Na função _INTEGRA_MES deverá validar:
- Se o TOTVS MES está ativo (ver MAN72030_INTEGRACAO_ATIVA), deve continuar o processamento da integração, caso contrário, somente fazer o commit do arranjo\local.
- Deverá aplicar o filtro do item(MAN_FILTRO_MES.TABELA = 'REC_ARRANJO' ou 'RECURSO'). O filtro vai indicar se o recurso será integrado ou não.Usar a função MAN72030(man72030_executa_filtro).
- Se a condição do filtro for satisfeita, deverá gerar o XML, conforme mensagem machine_1_000. Criar função man10072\man10078_gera_xml_integracao_mes e esta função executará o Adpater para geração do XML.
- Criar os adapters EAIAdapterMachine1 e o EAIHelperMachine1. Usar o EAI0032 para criar esse adapter (FRM0000).
- Na função EAIHelperMachine1, deverá ser feito um tratamento para não executar o EAI quando a rotina for executada pelo TOTVS MES ( tratar via variável m_integração_totvs_mes)
- O cabeçalho da mensagem deverá ser gerado manualmente:
ContextName = 'Logix'
SourceApplication = 'ENG'
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = MAN10072 ou MAN10078
ProductVersion = Versão do RPO - Depois de gerado o XML, deverá ser feito o envio via o WSPCFactory que será executado no MAN72030 (man72030_envia_mensagem)
- Após o envio da mesagem deverá gerar o LOG do processamento. Gerar a tabela man_pend_integracao_mes.Usar a MAN72030 - man72030_grava_pendencia. Caso o xml não for enviado deverá ser exibida uma tela de aviso informando os registros não integrados, gerando assim a pendência de envio( No caso do local que pode ter várias pendências - array - será mostrada em tela). Nesta situação será gravado um arquivo de ERRO ou PEND, conforme a situação que impossibilitou o envio ao PCFactory.
- Só poderá ter uma pendência para o registro.Para gerar o XML e gravar a tabela man_pend_integracao_mes terá que respeitar as pendencias geradas. Se existir uma pendência de envio de algum registro e for gerada uma nova mensagem para o mesmo registro a pendência deverá ser excluída e trabalhar somente com a última mensagem, que poderá ser enviada sem problemas ou gerar nova pendência.
4. Ordem de Produção
4.1 Mensagem
A Mensagem utilizada será: ProductionOrder_2_005
A mensagem possui vários tags, porém serão usadas algumas para o PCFactory:
Bloco | Tag | Descrição | Observação |
BusinessContentType | Number | Número Ordem Produção | ORDENS.NUM_ORDEM |
BusinessContentType | ProductionOrderUniqueID | Identificador único da ordem | Empresa|OP |
BusinessContentType | ItemCode | Código Item | ORDENS.COD_ITEM |
BusinessContentType | ItemDescription | Descrição Item | ITEM.DEN_ITEM_REDUZ |
BusinessContentType | Type | Tipo da Ordem | Fixo 1 (ordem interna) |
BusinessContentType | Quantity | Quantidade | ORDENS.QTD_PLANEJ |
BusinessContentType | ReportQuantity | Quantidade Reportada | QTD_PLANEJ - ( QTD_BOAS + QTD_REFUG ) |
BusinessContentType | IsStatusOrder | Reporte Fecha Ordem Produção | -- |
BusinessContentType | UnitOfMeasureCode | Unidade Medida | -- |
BusinessContentType | RequestOrderCode | Código Pedido Ordem Produção | ORDENS.NUM_DOCUM |
BusinessContentType | StatusType | Estado |
|
BusinessContentType | StatusOrderType | Estado da ordem | Não Iniciada = 1 Liberada = 2 Firme = 10 Aberta = 11 Cancelada = 12 Encerrada Parcial/Total = 7 |
BusinessContentType | WarehouseCode | Código Depósito | ORDENS.COD_LOCAL_PROD |
BusinessContentType | EndOrderDateTime | Data Fim Ordem Produção CP | ORDENS.DAT_ENTREGA |
BusinessContentType | StartOrderDateTime | Data Início Ordem Produção CP | ORDENS.DAT_LIBERAC |
BusinessContentType | AbbreviationProviderName | Nome Cliente | -- |
BusinessContentType | CustomerRequestCode | Código Pedido Cliente | -- |
BusinessContentType | ScriptCode | Código Roteiro | ORDENS.COD_ROTEIRO |
BusinessContentType | ReportOrderType | Tipo de Reporte | 1 = Ordem; 2 = Operações; 3 = Ponto Controle; 4 = Item |
ListOfActivityOrders | ProductionOrderNumber | Ordem de Produção | ORDENS.NUM_ORDEM |
ListOfActivityOrders | ActivityID | ID do Registro | ORD_OPER.SEQ_PROCESSO |
ListOfActivityOrders | ActivityCode | Código Operação | ORD_OPER.COD_OPERAC |
ListOfActivityOrders | ActivityDescription | Descrição Operação | OPERACAO.DEN_OPERAC |
ListOfActivityOrders | Split | Desdobramento da operação | -- |
ListOfActivityOrders | ItemCode | Código do item | ORDENS.COD_ITEM |
ListOfActivityOrders | ItemDescription | Descrição do item | ITEM.DEN_ITEM_REDUZ |
ListOfActivityOrders | ActivityType | Tipo Operação | 1 = Executa operação; 2 = Não executa. |
ListOfActivityOrders | WorkCenterCode | Código Centro de Trabalho | ORD_OPER.COD_CENT_TRAB |
ListOfActivityOrders | WorkCenterDescription | Descrição Centro de Trabalho | CENT_TRABALHO.DEN_CENT_TRAB |
ListOfActivityOrders | UnitTimeType | Tipo Unidade Tempo | 1 = Horas;2=Minutos;3=Segundos;4=Dias |
ListOfActivityOrders | TimeResource | Tempo Recurso | Tempo para fazer um lote. ORD_OPER.QTD_HORAS |
ListOfActivityOrders | TimeMachine | Tempo Máquina | Mult. pela qtd da ordem ( tempo para fazer toda a ordem) ORD_OPER.QTD_HORAS * ORDENS.QTD_PLANEJ |
ListOfActivityOrders | TimeSetup | Tempo Preparação | ORD_OPER.QTD_HORAS_SETUP |
ListOfActivityOrders | TimeMOD | Tempo Mão de Obra | 0 |
ListOfActivityOrders | TimeIndMES | Iindicador de tempo no MES | 1 = Tempo Máquina; 2 = Tempo mão-de-obra; 3 = Escolha pelo MES. |
ListOfActivityOrders | ScriptCode | Código Roteiro | ORDENS.COD_ROTEIRO |
ListOfActivityOrders | LaborCode | Código Mão de Obra Direta | -- |
ListOfActivityOrders | UnitItemNumber | Lote Padrão | ITEM_MAN.PARAMETROS[1,5] (Lote Padrão da operação.) |
ListOfActivityOrders | IsActivityEnd | Última Operação | ORD_OPER.IES_OPER_FINAL |
ListOfActivityOrders | MachineCode | Código Máquina | |
ListOfActivityOrders | StartPlanDateTime | Data/Hora Início Programação | ORD_OPER.DAT_INICIO |
ListOfActivityOrders | EndPlanDateTime | Data/Hora Fim Programação | ORD_OPER.DAT_ENTREGA |
ListOfActivityOrders | ProductionQuantity | Quantidade a produzir na operação | ORD_OPER.QTD_PLANEJADA |
ListOfActivityOrders | UnitActivityCode | Unidade de medida | ITEM.COD_UNID_MED |
ListOfActivityOrders | SecondUnitActivityCode | Segunda unidade de medida na operação | -- |
ListOfActivityOrders | SecondUnitActivityFactor | Fator de conversão para segunda un. na operação | -- |
ListOfActivityOrders | ResourceQuantity | Quantidade de recursos | -- |
ListOfMaterialOrders | ProductionOrderNumber | Ordem de produção | ORD_COMPON.NUM_ORDEM |
ListOfMaterialOrders | MaterialID | Registro da reserva | ORD_COMPON.NUM_SEQ |
ListOfMaterialOrders | MaterialCode | Código Item Reserva | ORD_COMPON.COD_ITEM_COMPON |
ListOfMaterialOrders | ScriptCode | Código Roteiro | MAN_OP_COMPONENTE_OPERACAO.ROTEIRO |
ListOfMaterialOrders | ActivityCode | Código Operação | |
ListOfMaterialOrders | WarehouseCode | Código Depósito | ORD_COMPON.LOCAL_BAIXA |
ListOfMaterialOrders | MaterialDate | Data Reserva | -- |
ListOfMaterialOrders | MaterialQuantity | Quantidade Reserva | ORD_COMPON.QTD_NECESS |
ListOfMaterialOrders | RequestType | Tipo da Requisição | 1-Direta, 2-Indireta. |
ListOfAllocatedMaterial | WarehouseCode | Código do Depósito | OP_LOTE.COD_LOCAL_BAIXA |
ListOfAllocatedMaterial | LotCode | Lote | OP_LOTE.NUM_LOTE |
ListOfAllocatedMaterial | LocationCode | Localização | OP_LOTE.ENDERECO |
ListOfAllocatedMaterial | ActivityCode | Código Operação | |
ListOfAllocatedMaterial | ScriptCode | Código do Roteiro | ORDENS.COD_ROTEIRO |
ListOfAllocatedMaterial | AllocationQuantity | Quantidade alocada | OP_LOTE.QTD_TRANSF |
ListOfAllocatedMaterial | AllocationType | Tipo de Alocação | -- |
ListOfAllocatedMaterial | SubLoteCode | Sub Lote | -- |
ListOfAllocatedMaterial | NumberSeries | Número de série | OP_LOTE.NUM_SERIE |
ListOfAllocatedMaterial | LotDueDate | Data de validade | OP_LOTE.DAT_HOR_VALID |
ListOfQuotaActivity | ProductionOrderNumber | ||
ListOfQuotaActivity | ControlType | ||
ListOfQuotaActivity | ActivityID | ||
ListOfQuotaActivity | ItemCode | ||
ListOfQuotaActivity | ItemDescription | ||
ListOfQuotaActivity | StartActivityDateTime | ||
ListOfQuotaActivity | EndActivityDateTime | ||
ListOfQuotaActivity | ApprovedQuantity | ||
ListOfQuotaActivity | ScrapQuantity | ||
ListOfQuotaActivity | MachineCode | ||
ListOfQuotaActivity | MachineDescription | ||
ListOfQuotaActivity | ActivityQuantity | ||
ListOfQuotaActivity | TimeSetup | ||
ListOfQuotaActivity | TimeMachine | ||
ListOfQuotaActivity | QuotaActivityID | ||
ListOfQuotaActivity | WorkCenterCode |
Falta os campos na ListOfAllocatedMaterial: NUM_VOLUME, DAT_HOR_PRODUCAO, NUM_PECA, COMPRIMENTO, LARGURA, ALTURA, DIAMETRO
Observações:
- Criar a revisão da mensagem, ProductionOrder_2_005. Incluir novas opções de situação da ordem para atender o ERP Logix.
Para o Logix deve tratar as seguintes situações: Não Iniciada = 1;Liberada = 2;Firme = 10;Aberta = 11;Cancelada = 12;Encerrada Parcial/Total = 7
- A tag ReportOrderType deverá respeitar a parametrização da ordem. Se ordens.ies_apontamento = 1 (aponta por operação) gerar '2', senão deverá validar na item_man.ies_tip_apont (tipo de apontamento). Se for 1(item) gera como '4', senão gerar como '1'(ordem).
- A tag ActivityType da ListOfActivityOrders deve ser gerada da seguinte forma: Se ORD_OPER.IES_APONTAMENTO = 'S' deve gerar como '1', senão deverá gerar como '2'.
- A tag UnitTimeType da ListOfActivityOrders deve verificar o parâmetro: par_pcp1.parametros[4,1] - Pode ser Hora, Minuto, ou Segundo
- A tag IsActivityEnd da ListOfActivityOrders, deverá ser gerada como TRUE quando o campo ORD_OPER.IES_OPER_FINAL for = 'S'
- A tag MachineCode da ListOfActivityOrders, deverá ser gerada conforme validações:Se existir Arranjo, deverá usar o campo ORD_OPER.COD_ARRANJO. Se estiver nulo, buscar o recurso da man_recurso_operacao_ordem. Seguir a regra: Pesquisar por recurso critico. Se encontrar mais de um ou nenhum, buscar o primeiro recurso da man_recurso_operacao_ordem.
- A tag TimeIndMES da ListOfActivityOrders deverá ser gerada com o valor '3'.
- A tag RequestType da ListOfMaterialOrders deve ser gerado da seguinte forma: Se o item sofre baixa (item_man.ies_sofre_baixa = 'S') gera como '2', senão gera como '1'
A tag ActivityCode da ListOfMaterialOrders deverá usar a tabela man_op_componente_operacao para pesquisar na ord_compon. Se não existir dados na man_op_componente_operação deverá usar a operação final. - A ListOfAllocatedMaterial deve usar a OP_LOTE. Se não possuir OP_LOTE, não gerar a ListOfAllocatedMaterial. Se não encontrar registros de qual operação o componente deve ser baixado, deverá usar a operação final.
- As tags da ListOfQuotaActivity são geradas pelo man10500. Tabelas: man_prog_prod_eqpto_mestre,man_prog_prod_eqpto_detalhe e man_prog_prod_eqpto_item.
4.2 Alterações Necessárias
Rotinas
- MAN0515 - Manutenção de Ordens
- MAN10255 - MRP
- MAN10028 - Necessidades
- MAN10500 - Planejamento por Equipamento
- MAN10030 - Operações da Ordem
- MAN10029 - Componentes da Ordem
- MAN10055 - Alteração do Status
- MAN10034 - Desmembramento
- MAN10031 - Criação Manual OP
- MANR79 - Função de criação de ordens
- MAN10032 - Abertura Automática
- MAN0860 - Liberação Automática
- MAN0730 - Encerramento de ordens
Para todas as rotinas deve-se usar a função padrão MAN72030, conforme demais requisitos.
- MAN72030_INTEGRACAO_ATIVA
- MAN72030_EXECUTA_FILTRO
- MAN72030_ENVIA_MENSAGEM
- MAN72030_GRAVA_PENDENCIA
- MAN72030_SALVA_ARQUIVO_XML
A Montagem do XML, deve seguir o padrão das demais mensagens, apenas considerando a rotina que está gerando a informação.
5. Estrutura
O cadastro da estrutura é o MAN10002. Gera a tabela estrut_grade.
A Mensagem utilizada será: ItemStructure_1_001
1.1 Mensagem:
A mensagem possui várias tags, porém serão usadas algumas para o PC-Factory:
Bloco | Tag | Descrição | Observação |
BusinessContentType | CompanyCode | Empresa | ESTRUT_GRADE.COD_EMPRESA |
BusinessContentType | CompanyInternalId | Empresa+Filial | -- |
BusinessContentType | ItemInternaId | InternalId do Item | Empresa|Item Pai |
BusinessContentType | ItemCode | Código item pai | ESTRUT_GRADE.COD_ITEM_PAI |
BusinessContentType | ItemAmount | Quantidade base do item pai | 1 |
ItemComponentType | ItemSequence | Sequencia do componente | ESTRUT_GRADE.COD_POSICAO |
ItemComponentType | ItemComponentCode | Código item componente | ESTRUT_GRADE.COD_ITEM_COMPON |
ItemComponentType | ItemComponentInternalId | Internal Id do Item Componente | Empresa|Componente |
ItemComponentType | InitialDate | Data validade inicial | ESTRUT_GRADE.DAT_VALIDADE_INI |
ItemComponentType | FinalDate | Data validade final | ESTRUT_GRADE.DAT_VALIDADE_FIM |
ItemComponentType | IsGhostMaterial | Indica se a relação item x componente é fantasma | |
ItemComponentType | ItemComponentAmount | Quantidade do item componente | ESTRUT_GRADE.QTD_NECESSARIA |
ItemComponentType | LossFactor | Fator de perda do componente em relação a quantidade usada | ESTRUT_GRADE.PCP_REFUG |
ListOfScript | Scriptcode | Código do Roteiro | MAN_PROCESSO_ITEM.ROTEIRO |
ListOfScript | ScriptAlternative | Alternativo do Roteiro | MAN_PROCESSO_ITEM.ROTEIRO_ALTERNATIVO |
ListOfScript | ActivityIntenalID | ID Operação | MAN_ESTRUTURA_OPERACAO.SEQ_PROCESSO |
ListOfScript | ActivityCode | Código da Operação | MAN_PROCESSO_ITEM.OPERACAO |
ListOfScript | ActivityComponentSequence | Sequencia do componente na operação | ESTRUT_GRADE.COD_POSICAO |
Observação:
- IsGhostMaterial : Deverá verificar o tipo do item ( item.ies_tip_item). Se for Fantasma, passar TRUE, senão passar FALSE
- Para gerar a ListOfScript deverá usar a tabela MAN_ESTRUTURA_OPERACAO para verificar se existe informações para o item.
Lembrando que: ESTRUT_GRADE.NUM_SEQUENCIA = MAN_ESTRUTURA_OPERACAO.SEQ_COMPONENTE
MAN_PROCESSO_ITEM.SEQ_PROCESSO = MAN_ESTRUTURA_OPERACAO.SEQ_PROCESSO - O item pode ter vários roteiros de procdução. Para não repetir as informações, os dados do roteiro e operações serão gerados como lista. Gerar a ListOfScript, quando o item controlar estrutura por operação. Quando o item controla estrutura por operação o MAN10002 será usado somente para consulta das estruturas, sendo que, a manutenção será via MAN10243.
Quando o item controlar grade deverá gerar o ID conforme descrito na especificação do item. Considerar item pai e componente.
Quando usa grade a integração deverá considerar a estrutura por composição. Exemplo: Item, controla 2 grades. COR e TAMANHO.
Abaixo tabela com exemplo da estrutura do item CAMISA.Produto: Camisa COR BRANCO AZUL PRETO TAM G,H D Z Pequeno E,F A,B,C Y Médio X Grande P Existe a possibilidade de manutenção dessa estrutura nas seguintes situações:
1 - Estrutura da CAMISA, cor branco e tamanho P. Deve gerar XML somente da estrutura branco e P, considerando os componentes A,B,C,D,E,F,G,H
2 - Estrutura da CAMISA, somente da cor branco. Deve gerar XML de todas as camisas brancas e todos tamanhos. Branco e P:considerando os componentes A,B,C,D,E,F,G,H. Branco e M: considerando os componentes X,D,G,H
3 - Estrutura da CAMISA, somente do tamanho P. Deve gerar XML de todas as camisas de tamanho P e todas cores.Branco e P:considerando os componentes A,B,C,D,E,F,G,H.Azul e P: considerando os componentes Y,E,F,G,H
4 - Estrutura sem cor e tamanho. Deve gerar XML de todas as camisas.
Branco e P: componentes A,B,C,D,E,F,G,H . Branco e M: componentes X,D,G,H. Branco e G: componentes A,B,C,D,G,HAzul e P: componentes Y,E,F,G,H . Azul e M: componentes G,H. Azul e G: componentes G,H
Preto e P: componentes Z,G,H . Preto e M: componentes Z,G,H. Preto e G: componentes P,Z,G,H
5 - Além de enviar o XML da estrutura deverá enviar o XML do item, conforme descrita na especificação do item 1.
1.2 Alterações necessárias:
1.2.1 MAN10002
a)Deverá usar a função MAN72030, da mesma forma que o cadastro de item - MAN10021 ( ver item 1.1.2).
- MAN72030_INTEGRACAO_ATIVA
- MAN72030_EXECUTA_FILTRO
- MAN72030_ENVIA_MENSAGEM
- MAN72030_GRAVA_PENDENCIA
- MAN72030_SALVA_ARQUIVO_XML
b) Montagem do XML a rotina gera a partir do BusinessEvent (que fica dentro da tag BusinessMessage). Para integração com PCFactory deverá montar o cabeçalho da mensagem que consta com as tags TOTVSMessage e MessageInformation.
- O cabeçalho da mensagem deverá ser gerado manualmente:
Transaction: Tabela
ContextName = 'Logix'
SourceApplication = Módulo
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = Nome do programa
ProductVersion = Versão do RPO
Abaixo modelo(seguindo padrão de integração entre PCFactory a Datasul):
<BusinessMessage>
<BusinessEvent>
......................
</BusinessEvent>
....................
....................
<\BusinessMessage>
Onde:
- MessageInformation version Indica a versão da mensagem. Usar “1.001”
- UUID : Sequencial usado pelo EAI.
- Type: Tipo da mensagem. Gerar fixo “BusinessMessage”
- Transaction: Indica o que está sendo enviado. Gerar fixo “ItemStructure”
- StandardVersion: Versão. Gerar fixo “1.0”
- SourceApplication: Aplicação que está executando. Gerar fixo “ENG”
- CompanyId: Código da empresa. Empresa que estiver logada
- BranchId: Código da filial. Não gravar
- UserId: Usuário. Usuário logado.
- Product: Nome do produto. Name = “MAN10002” version = versão do RPO
- GenerateOn = Data e hora da geração da mensagem
- ContextName = Logix
- DeliveryType:Tipo de envio da mensagem. Gerar fixo “Sync”.
Dentro do BusinessMessage existe o bloco BusinessEvent com as seguintes tags:
Onde:
- Entity: Entidade . Gerar fixo “ItemStructure”
- Event: Inclusão/Alteração ou exclusão. Pode ser ‘delete’ ou ‘upsert’
- Identification: Identificação do item pai. Empresa | Item pai
Dentro do BusinessMessage existe o bloco BusinessContent, que contém os dados da estrutura.
Somente deve gerar os campos necessários conforme descrito no item 1.1
Exemplo:
<CompanyInternalId>99</CompanyInternalId>
<CompanyCode>99|01</CompanyCode>
<ItemInternalId>99|01|BOLA-PLASTICO </ItemInternalId>
<ItemCode>BOLA-PLASTICO </ItemCode>
<ItemAmount>0</ItemAmount>
<ListOfItensStructure>
<ItemComponent>
<ItemSequence> </ItemSequence>
<ItemComponentCode>REBARBAB </ItemComponentCode>
<ItemComponentInternalId>9901REBARBAB </ItemComponentInternalId>
<InitialDate>2016-12-05</InitialDate>
<FinalDate>2049-12-31</FinalDate>
<IsGhostMaterial>FALSE</IsGhostMaterial>
<ItemComponentAmount>-1</ItemComponentAmount>
<ItemComponentProportion />
<LossFactor>0</LossFactor>
<ListOfScript />
</ItemComponent>
<ItemComponent>
<ItemSequence> </ItemSequence>
<ItemComponentCode>BORRACHA </ItemComponentCode>
<ItemComponentInternalId>9901BORRACHA </ItemComponentInternalId>
<InitialDate>2016-12-05</InitialDate>
<FinalDate>2049-12-31</FinalDate>
<IsGhostMaterial>FALSE</IsGhostMaterial>
<ItemComponentAmount>1</ItemComponentAmount>
<ItemComponentProportion />
<LossFactor>0</LossFactor>
<ListOfScript />
</ItemComponent>
</ListOfItensStructure>
OBS: As tags da ListOfScript são geradas quando existir estrutura por operação. Exemplo:
c) Alterar o cadastro de estrutura para que execute o adapter na inclusão/alteração/exclusão das estruturas.
Criar a função man10002_integra_mes, para fazer as validações referentes ao MES.
Exemplo:
IF log0850_transacao_ativa() THEN
CALL log085_transacao("COMMIT")
IF sqlca.sqlcode <> 0 THEN
CALL log0030_processa_err_sql("COMMIT","man10002_confirm_event_create",0)
RETURN FALSE
END IF
END IF
CALL man10002_integra_mes(mr_estrutura.cod_item_pai,m_operacao,TRUE,TRUE,NULL)
..........
FUNCTION man10002_integra_mes(l_cod_item,l_operacao,l_exibe_mensagem,l_filtra,l_xml)
#Verifica se a integração está ativada
IF NOT man72030_integracao_ativa(p_cod_empresa) THEN
RETURN TRUE
END IF
#Realiza o filtro, para verificar se a estrutura será integrada
IF l_filtra THEN
IF NOT man72030_executa_filtro(p_cod_empresa,l_cod_item,"estrut_grade") THEN
RETURN TRUE
END IF
END IF
IF l_xml IS NOT NULL AND l_xml <> ' ' THEN
LET l_status = TRUE
ELSE
CALL man10002_gera_xml_integracao_mes(l_operacao)
RETURNING l_status, l_xml
END IF
IF NOT l_status OR l_xml IS NULL OR l_xml = ' ' THEN
IF l_exibe_mensagem THEN
CALL log0030_mensagem("Não foi possível gerar o xml para integrar esta estrutura com o Totvs MES. Integração não realizada.","excl")
END IF
RETURN FALSE
END IF
CALL man72030_envia_mensagem(p_cod_empresa,l_xml)
RETURNING l_status, l_msg, l_tipo
#Criar arquivo XML fisicamente
CALL man72030_limpa_dados()
CALL man72030_set_empresa(p_cod_empresa)
CALL man72030_set_status_integracao(l_tipo)
CALL man72030_set_transacao("ItemStructure")
CALL man72030_set_registro(l_cod_item)
CALL man72030_set_data_envio(_ADVPL_man72030_get_data_envio(l_xml))
CALL man72030_set_hora_envio(_ADVPL_man72030_get_hora_envio(l_xml))
CALL man72030_set_xml_enviado(l_xml)
CALL man72030_salva_arquivo_xml()
RETURNING l_status, l_arquivo
#Gerar tabela de pendências
IF NOT l_status OR l_arquivo = ' ' THEN
CALL man72030_set_gera_xml("2")
CALL man72030_set_nome_xml("")
ELSE
CALL man72030_set_gera_xml("1")
CALL man72030_set_nome_xml(l_arquivo)
END IF
CALL man72030_set_data_reprocessamento(NULL)
CALL man72030_set_hora_reprocessamento(NULL)
CALL man72030_set_programa(man554_num_programa())
CALL man72030_set_retorno(l_msg)
CALL man72030_set_usuario(p_user)
CALL man72030_grava_pendencia()
IF l_tipo <> '1' THEN
CALL log0030_mensagem("Atenção! Ocorreram erros na integração Totvs MES.\n"||
"Foi gerada uma pendência de integração para a estrutura '"||l_cod_item CLIPPED||"'."||
"\nErro: "||l_msg clipped||".","info")
END IF
RETURN TRUE
END FUNCTION
...
A função man10002_gera_xml_integracao_mes deve seguir o seguinte modelo ( man9907_executa_operacao /sup10002_gera_xml_integração ). A função terá o papel de setar o conteúdo das variáveis para o adapter gerar o XML.
FUNCTION man10002_gera_xml_integracao_mes(l_operacao)
CALL EAIMapper_set("estrutut_grade.cod_empresa" ,mr_dados.cod_empresa)
CALL EAIAdapterItemStructure1_SendBusinessMessage(mr_dados.operacao) RETURNING l_status
IF l_status = FALSE THEN
LET l_msg = 'Erro ao enviar mensagem para o Adapter "EAIAdapterItemStructure1" (Estrutura).'
RETURN FALSE, l_msg
END IF
RETURN l_status, l_xml
END FUNCTION
Na função MAN10002_INTEGRA_MES deverá validar:
- Se o TOTVS MES está ativo (ver MAN72030_INTEGRACAO_ATIVA), deve continuar o processamento da integração, caso contrário, somente fazer o commit do item.
- Deverá aplicar o filtro do item(MAN_FILTRO_MES.TABELA = 'ESTRUT_GRADE'). O filtro vai indicar se a estrutura será integrado ou não.Usar a função MAN72030(man72030_executa_filtro).
- Se a condição do filtro for satisfeita, deverá gerar o XML, conforme mensagem itemstructure_1_001. Criar função man10002_gera_xml_integracao_mes, e esta função executará o Adpater para geração do XML.
- As funções EAIAdapterItemStructure1 e EAIHelperItemStructure1 já existem, só devem ser adaptadas para o TOTVSMES, ou seja, deverá ser feito um tratamento para não executar o EAI quando a rotina for executada pelo TOTVS MES ( tratar via variável m_integração_totvs_mes).
- O cabeçalho da mensagem deverá ser gerado manualmente:
ContextName = 'Logix'
SourceApplication = 'ENG'
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = MAN10002
ProductVersion = Versão do RPO - Depois de gerado o XML, deverá ser feito o envio via WSPCFactory(man72030_envia_mensagem)
- Após o envio da mesagem deverá gerar o LOG do processamento. Gerar a tabela man_pend_integracao_mes.Usar a MAN72030 - man72030_grava_pendencia. Caso o xml não for enviado deverá ser emitida uma mensagem de aviso que o registro não foi integrado e gerar a pendência de envio. Nesta situação será gravado um arquivo de ERRO ou PEND, conforme a situação que impossibilitou o envio ao PCFactory.
- Só poderá ter uma pendência para o registro.Para gerar o XML e gravar a tabela man_pend_integracao_mes terá que respeitar as pendencias geradas. Se existir uma pendência de envio de algum registro e for gerada uma nova mensagem para o mesmo registro a pendência deverá ser excluída e trabalhar somente com a última mensagem, que poderá ser enviada sem problemas ou gerar nova pendência.
Outros pontos:
- No processo de cópia de item, MAN10021, também deverá executar a rotina de integração da estrutura.
- Quando usa estrutura por operação a rotina que gera a estrutura é MAN10243, que também deverá executar a rotina de integração da estrutura.
- No Wizard de alteração de estrutura, MAN10087, também deverá executar a rotina de integração da estrutura.
- Processo de replicação
6. Processos
O cadastro dos processos é o MAN10243. Gera a tabela man_processo_item.
A Mensagem utilizada será: ItemScript_1_000
1.1 Mensagem:
A mensagem possui várias tags, porém serão usadas algumas para o PC-Factory:
Bloco | Tag | Descrição | Observação |
BusinessContentType | ItemCode | Código item | MAN_PROCESSO_ITEM.ITEM |
BusinessContentType | ItemDescription | Descrição do item | ITEM.DEN_ITEM |
BusinessContentType | ItemInternalId | Internal Id do Item | Empresa|Item |
BusinessContentType | ScriptCode | Código do Roteiro | MAN_PROCESSO_ITEM.ROTEIRO |
ListOfActivity | ActivityInternalID | ID Operação | MAN_PROCESSO_ITEM.SEQ_OPERACAO |
ListOfActivity | ActivityCode | Código da Operação | MAN_PROCESSO_ITEM.OPERACAO |
ListOfActivity | ActivityDescription | Descrição Operação | OPERACAO.DEN_OPERAC |
ListOfActivity | MachineCode | Código da Máquina | |
ListOfActivity | ToolCode | Código Ferramenta | -- |
ListOfActivity | ActivityType | Tipo Operação | 1 = Executa operação; 2 = Não executa. Passar fixo "1" |
ListOfActivity | WorkCenterCode | Código Centro Trabalho | MAN_PROCESSO_TEM.CENTRO_TRABALHO |
ListOfActivity | WorkCenterInternalId | Interna Id Centro de Trabalho | Empresa|Centro de Trabalho |
ListOfActivity | UnitItemNumber | Lote padrão ( quantidade de itens feita no tempo padrão) | ITEM_MAN.PARAMETROS[1,5] |
ListOfActivity | TimeResource | Tempo Recurso | 0 |
ListOfActivity | TimeMachine | Tempo Máquina | MAN_PROCESSO_ITEM.QTD_TEMPO |
ListOfActivity | TimeSetup | Tempo Preparação | MAN_PROCESSO_ITEM.QTD_TEMPO_SETUP |
ListOfActivity | UnitTimeType | Tipo Unidade Tempo | 1 = Horas;2=Minutos;3=Segundos;4=Dias |
ListOfActivity | ScriptAlternative | Alternativo | MAN_PROCESSO_ITEM.ROTEIRO_ALTERNATIVO |
ListOfActivity | InitialDate | Data Inicial | MAN_PROCESSO_ITEM.VALIDADE_INICIAL |
ListOfActivity | FinalDate | Data Final | MAN_PROCESSO_ITEM.VALIDADE_FINAL |
Observações:
- A tag MachineCode será gerada da seguinte forma:
Usar o campo MAN_PROCESSO_ITEM.ARRANJO. Se não possuir arranjo usar o recurso da MAN_RECURSO_PROCESSO.RECURSO (pesquisar por recurso critico). Se encontrar mais de um ou nenhum, buscar o primeiro recurso da MAN_RECURSO_PROCESSO. Para pesquisar a MAN_RECURSO_PROCESSO fazer o seguinte "join":
man_processo_item.seq_processo = man_recurso_processo.seq_processo AND man_processo_item.empresa = man_recurso_processo.empresa - A tag ToolCode não será gerada.
- A tag TimeMachine é o tempo para fazer uma peça
- A tag UnitTimeType deve verificar o parâmetro: par_pcp1.parametros[4,1] - Pode ser Hora, Minuto, ou Segundo
- Quando o item controlar grade deverá gerar o ID conforme descrito na especificação do item.
- Da mesma forma que a estrutura, o cadastro de processos deverá considerar a grade por composição:
Quando usar grade, a integração deverá considerar a estrutura de processos por composição. Exemplo: Item, controla 2 grades. COR e TAMANHO.Abaixo tabela com exemplo da estrutura de Processos do item CAMISA.
Produto: Camisa COR BRANCO AZUL PRETO TAM G,H D Z Pequeno E,F A,B,C Y Médio X Grande P Existe a possibilidade de manutenção dos processos nas seguintes situações:
1 - Processo da CAMISA, cor branco e tamanho P. Deve gerar XML somente da estrutura branco e P, considerando os processos A,B,C,D,E,F,G,H
2 - Processo da CAMISA, somente da cor branco. Deve gerar XML de todas as camisas brancas e todos tamanhos. Branco e P:considerando os processos A,B,C,D,E,F,G,H. Branco e M: considerando os processos X,D,G,H
3 - Processo da CAMISA, somente do tamanho P. Deve gerar XML de todas as camisas de tamanho P e todas cores.Branco e P:considerando os processos A,B,C,D,E,F,G,H.Azul e P: considerando os processos Y,E,F,G,H
4 - Processos da CAMISA, sem cor e tamanho. Deve gerar XML de todas as camisas.
Branco e P: processos A,B,C,D,E,F,G,H . Branco e M: processos X,D,G,H. Branco e G: processos A,B,C,D,G,HAzul e P: processos Y,E,F,G,H . Azul e M: processos G,H. Azul e G: processos G,H
Preto e P: processos Z,G,H . Preto e M: processos Z,G,H. Preto e G: processos P,Z,G,H
5 - Além de enviar o XML da estrutura deverá enviar o XML do item, conforme descrita na especificação do item 1.
1.2 Alterações necessárias:
1.2.1 MAN10243
a) Deverá usar a função MAN72030, da mesma forma que o cadastro de item - MAN10021 ( ver item 1.1.2).
- MAN72030_INTEGRACAO_ATIVA
- MAN72030_EXECUTA_FILTRO
- MAN72030_ENVIA_MENSAGEM
- MAN72030_GRAVA_PENDENCIA
- MAN72030_SALVA_ARQUIVO_XML
b) Montagem do XML a rotina gera a partir do BusinessEvent (que fica dentro da tag BusinessMessage). Para integração com PCFactory deverá montar o cabeçalho da mensagem que consta com as tags TOTVSMessage e MessageInformation.
- O cabeçalho da mensagem deverá ser gerado manualmente:
Transaction: Tabela
ContextName = 'Logix'
SourceApplication = Módulo
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = Nome do programa
ProductVersion = Versão do RPO
Abaixo modelo(seguindo padrão de integração entre PCFactory a Datasul):
<BusinessMessage>
<BusinessEvent>
......................
</BusinessEvent>
....................
....................
<\BusinessMessage>
Onde:
- MessageInformation version Indica a versão da mensagem. Usar “1.000”
- UUID : Sequencial usado pelo EAI.
- Type: Tipo da mensagem. Gerar fixo “BusinessMessage”
- Transaction: Indica o que está sendo enviado. Gerar fixo “ItemScript”
- StandardVersion: Versão. Gerar fixo “1.0”
- SourceApplication: Aplicação que está executando. Gerar fixo “ENG”
- CompanyId: Código da empresa. Empresa que estiver logada
- BranchId: Código da filial. Não gravar
- UserId: Usuário. Usuário logado.
- Product: Nome do produto. Name = “MAN10243” version = versão do RPO
- GenerateOn = Data e hora da geração da mensagem
- ContextName = Logix
- DeliveryType:Tipo de envio da mensagem. Gerar fixo “Sync”.
Dentro do BusinessMessage existe o bloco BusinessEvent com as seguintes tags:
Onde:
- Entity: Entidade . Gerar fixo “ItemScript”
- Event: Inclusão/Alteração ou exclusão. Pode ser ‘delete’ ou ‘upsert’
- Identification: Identificação do item. Empresa | Item|Roteiro
Dentro do BusinessMessage existe o bloco BusinessContent, que contém os dados do processo.
Somente deve gerar os campos necessários conforme descrito na tabela do item 1.1
c) Alterar o cadastro de processo para que execute o adapter na inclusão/alteração/exclusão.
Criar a função man10243_integra_mes, para fazer as validações referentes ao MES.
Exemplo:
IF log0850_transacao_ativa() THEN
CALL log085_transacao("COMMIT")
IF sqlca.sqlcode <> 0 THEN
CALL log0030_processa_err_sql("COMMIT","man10243_confirm_event_create",0)
RETURN FALSE
END IF
END IF
CALL man10243_integra_mes(mr_tela_aux.cod_item ,mr_tela_aux.roteiro,TRUE,TRUE,NULL)
..........
FUNCTION man10243_integra_mes(l_cod_item,l_roteiro,l_exibe_mensagem,l_filtra,l_xml)
#Verifica se a integração está ativada
IF NOT man72030_integracao_ativa(p_cod_empresa) THEN
RETURN TRUE
END IF
#Realiza o filtro, para verificar se o roteiro será integrado
IF l_filtra THEN
IF NOT man72030_executa_filtro(p_cod_empresa,l_cod_item,l_roteiro,"man_processo_item") THEN
RETURN TRUE
END IF
END IF
IF l_xml IS NOT NULL AND l_xml <> ' ' THEN
LET l_status = TRUE
ELSE
CALL man10243_gera_xml_integracao_mes(l_operacao)
RETURNING l_status, l_xml
END IF
IF NOT l_status OR l_xml IS NULL OR l_xml = ' ' THEN
IF l_exibe_mensagem THEN
CALL log0030_mensagem("Não foi possível gerar o xml para integrar o roteiro com o Totvs MES. Integração não realizada.","excl")
END IF
RETURN FALSE
END IF
CALL man72030_envia_mensagem(p_cod_empresa,l_xml)
RETURNING l_status, l_msg, l_tipo
#Criar arquivo XML fisicamente
CALL man72030_limpa_dados()
CALL man72030_set_empresa(p_cod_empresa)
CALL man72030_set_status_integracao(l_tipo)
CALL man72030_set_transacao("ItemScript")
CALL man72030_set_registro(l_cod_item)
CALL man72030_set_data_envio(_ADVPL_man72030_get_data_envio(l_xml))
CALL man72030_set_hora_envio(_ADVPL_man72030_get_hora_envio(l_xml))
CALL man72030_set_xml_enviado(l_xml)
CALL man72030_salva_arquivo_xml()
RETURNING l_status, l_arquivo
#Gerar tabela de pendências
IF NOT l_status OR l_arquivo = ' ' THEN
CALL man72030_set_gera_xml("2")
CALL man72030_set_nome_xml("")
ELSE
CALL man72030_set_gera_xml("1")
CALL man72030_set_nome_xml(l_arquivo)
END IF
CALL man72030_set_data_reprocessamento(NULL)
CALL man72030_set_hora_reprocessamento(NULL)
CALL man72030_set_programa(man554_num_programa())
CALL man72030_set_retorno(l_msg)
CALL man72030_set_usuario(p_user)
CALL man72030_grava_pendencia()
IF l_tipo <> '1' THEN
CALL log0030_mensagem("Atenção! Ocorreram erros na integração Totvs MES.\n"||
"Foi gerada uma pendência de integração para o roteiro '"||l_cod_item CLIPPED||"'."||
"\nErro: "||l_msg clipped||".","info")
END IF
RETURN TRUE
END FUNCTION
...
A função man10243_gera_xml_integracao_mes deve seguir o seguinte modelo ( man9907_executa_operacao /sup10002_gera_xml_integração ). A função terá o papel de setar o conteúdo das variáveis para o adapter gerar o XML.
FUNCTION man10243_gera_xml_integracao_mes(l_operacao)
CALL EAIMapper_set("man_processo_item.cod_empresa" ,mr_dados.cod_empresa)
CALL EAIAdapterItemScript1_SendBusinessMessage(mr_dados.operacao) RETURNING l_status
IF l_status = FALSE THEN
LET l_msg = 'Erro ao enviar mensagem para o Adapter "EAIAdapterItemScript1" (Roteiro).'
RETURN FALSE, l_msg
END IF
RETURN l_status, l_xml
END FUNCTION
Para os processos deverá criar os adapters: EAIAdapterItemScript1 e EAIHelperItemScript1. Se basear nos adapters da Estrutura.
Na função MAN10243_INTEGRA_MES deverá validar:
- Se o TOTVS MES está ativo (ver MAN72030_INTEGRACAO_ATIVA), deve continuar o processamento da integração, caso contrário, somente fazer o commit.
- Deverá aplicar o filtro do item(MAN_FILTRO_MES.TABELA = 'MAN_PROCESSO_ITEM'). O filtro vai indicar se a processo será integrado ou não.Usar a função MAN72030(man72030_executa_filtro).
- Se a condição do filtro for satisfeita, deverá gerar o XML, conforme mensagem itemscript_1_000. Criar função man10243_gera_xml_integracao_mes, e esta função executará o Adpater para geração do XML.
- O cabeçalho da mensagem deverá ser gerado manualmente:
ContextName = 'Logix'
SourceApplication = 'ENG'
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = MAN10243
ProductVersion = Versão do RPO - Depois de gerado o XML, deverá ser feito o envio via WSPCFactory(man72030_envia_mensagem)
- Após o envio da mesagem deverá gerar o LOG do processamento. Gerar a tabela man_pend_integracao_mes.Usar a MAN72030 - man72030_grava_pendencia. Caso o xml não for enviado deverá ser emitida uma mensagem de aviso que o registro não foi integrado e gerar a pendência de envio. Nesta situação será gravado um arquivo de ERRO ou PEND, conforme a situação que impossibilitou o envio ao PCFactory.
- Só poderá ter uma pendência para o registro.Para gerar o XML e gravar a tabela man_pend_integracao_mes terá que respeitar as pendencias geradas. Se existir uma pendência de envio de algum registro e for gerada uma nova mensagem para o mesmo registro a pendência deverá ser excluída e trabalhar somente com a última mensagem, que poderá ser enviada sem problemas ou gerar nova pendência.
Outros pontos:
- No processo de cópia do item, no MAN10021, também deverá executar a rotina de integração dos processos.
- Quando usa estrutura por operação a rotina que gera a estrutura é MAN10243, que também deverá executar a rotina de integração da estrutura.
- Processo de replicação
7 - Endereço
O cadastro de endereço é o MAN10093 e o SUP1637. Gera a tabela SUP_ENDERECO_LOCAL.
A Mensagem utilizada será: AddressStock_1_000
2.1 Mensagem:
A mensagem possui as seguintes tags:
Bloco | Tag | Descrição | Observação |
BusinessContentType | WarehouseCode | Código do Local | SUP_ENDERECO_LOCAL.LOCAL |
BusinessContentType | LocationCode | Endereço | SUP_ENDERECO_LOCAL.ENDERECO |
BusinessContentType | AddressStockDescription | Descrição do Endereço | SUP_ENDERECO_LOCAL.DENOMIN_ENDERECO |
BusinessContentType | AddressInternalId | Chave completa | Empresa|Local|Endereço |
2.2 Alterações Necessárias
2.2.1 MAN10093 e SUP1637
a) Deverá usar a função MAN72030, da mesma forma que o cadastro de item - MAN10021 ( ver item 1.1.2).
- MAN72030_INTEGRACAO_ATIVA
- MAN72030_EXECUTA_FILTRO
- MAN72030_ENVIA_MENSAGEM
- MAN72030_GRAVA_PENDENCIA
- MAN72030_SALVA_ARQUIVO_XML
b) Montagem do XML a rotina gera a partir do BusinessEvent (que fica dentro da tag BusinessMessage). Para integração com PCFactory deverá montar o cabeçalho da mensagem que consta com as tags TOTVSMessage e MessageInformation.
- O cabeçalho da mensagem deverá ser gerado manualmente:
Transaction: Tabela
ContextName = 'Logix'
SourceApplication = Módulo
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = Nome do programa
ProductVersion = Versão do RPO
Abaixo modelo(seguindo padrão de integração entre PCFactory a Datasul):
<BusinessMessage>
<BusinessEvent>
......................
</BusinessEvent>
....................
....................
<\BusinessMessage>
Onde:
- MessageInformation version Indica a versão da mensagem. Usar “1.000”
- UUID : Sequencial usado pelo EAI.
- Type: Tipo da mensagem. Gerar fixo “BusinessMessage”
- Transaction: Indica o que está sendo enviado. Gerar fixo “AddressStock”
- StandardVersion: Versão. Gerar fixo “1.0”
- SourceApplication: Aplicação que está executando. Gerar fixo “ENG”
- CompanyId: Código da empresa. Empresa que estiver logada
- BranchId: Código da filial. Não gravar
- UserId: Usuário. Usuário logado.
- Product: Nome do produto. Name = “MAN10093” version = versão do RPO
- GenerateOn = Data e hora da geração da mensagem
- ContextName = Logix
- DeliveryType:Tipo de envio da mensagem. Gerar fixo “Sync”.
Dentro do BusinessMessage existe o bloco BusinessEvent com as seguintes tags:
Onde:
- Entity: Entidade . Gerar fixo “AddressStock”
- Event: Inclusão/Alteração ou exclusão. Pode ser ‘delete’ ou ‘upsert’
- Identification: Identificação do item. Empresa | Local|Endereço
Dentro do BusinessMessage existe o bloco BusinessContent, que contém os dados do cadastro.
Somente deve gerar os campos necessários conforme descrito na mensagem
c) Alterar o cadastro de endereço (man10093 e sup1637) para que execute o adapter na inclusão/alteração/exclusão.
Abaixo exemplo do MAN10093.
Criar a função man10093_integra_mes, para fazer as validações referentes ao MES. Desenvolver conforme demais integrações descritas acima.
Para os centro de trabalho deverá criar os adapters: EAIAdapterAddressStock1 e EAIHelperAddressStock1.
Na função MAN10093_INTEGRA_MES deverá validar:
- Se o TOTVS MES está ativo (ver MAN72030_INTEGRACAO_ATIVA), deve continuar o processamento da integração, caso contrário, somente fazer o commit.
- Deverá aplicar o filtro (MAN_FILTRO_MES.TABELA = 'SUP_ENDERECO_LOCAL'). O filtro vai indicar se o centro de trabalho será integrado ou não.Usar a função MAN72030(man72030_executa_filtro).
- Se a condição do filtro for satisfeita, deverá gerar o XML, conforme mensagem AddressStock_1_000.
- O cabeçalho da mensagem deverá ser gerado manualmente:
ContextName = 'Logix'
SourceApplication = 'ENG'
CompanyId = Empresa logada
UserId = Usuário Logado
ProductName = MAN10093
ProductVersion = Versão do RPO - Depois de gerado o XML, deverá ser feito o envio via WSPCFactory(man72030_envia_mensagem)
- Após o envio da mensagem deverá gerar o LOG do processamento. Gerar a tabela man_pend_integracao_mes.Usar a MAN72030 - man72030_grava_pendencia. Caso o xml não for enviado deverá ser emitida uma mensagem de aviso que o registro não foi integrado e gerar a pendência de envio. Nesta situação será gravado um arquivo de ERRO ou PEND, conforme a situação que impossibilitou o envio ao PCFactory.
- Só poderá ter uma pendência para o registro.Para gerar o XML e gravar a tabela man_pend_integracao_mes terá que respeitar as pendências geradas. Se existir uma pendência de envio de algum registro e for gerada uma nova mensagem para o mesmo registro a pendência deverá ser excluída e trabalhar somente com a última mensagem, que poderá ser enviada sem problemas ou gerar nova pendência.
Rotina | Tipo de Operação | Opção de Menu | Regras de Negócio |
[MAN10021– Item] | [Alteração] | - | |
[MAN72030– Função TOTVS MES] | [Criação] | - | |
[SUP10002 – Local] | [Alteração] | - | |
[MAN10093 - Endereço] | [Alteração] | ||
[SUP1637 - Endereço] | [Alteração] | ||
Exemplo de Aplicação:
- Criar o campo “% Mínimo Espécie” (AAA_PERESP) onde o usuário informará o % que o aluno pagará em dinheiro. Esse % poderá ser alterado durante a negociação.
- Criar o campo “Referência Mínima para Cálculo” (AAA_REFCAL) onde o usuário informará um dos 4 valores disponíveis para pagamento das mensalidades como a referência mínima para calcular o débito total do aluno.
- Criar o parâmetro MV_ACPARNE que definirá se as informações de “% Mínimo Espécie” e “Referência Mínima para Cálculo” serão obrigatórias.
- O parâmetro MV_ACPARNE deve ter as seguintes opções: 1=Obrigatório e 2=Opcional. Deve ser inicializado como opcional>.
Tabelas Utilizadas
- SE2 – Cadastro de Contas a Pagar
- FI9 – Controle de Emissão de DARF>.
Opcional
Protótipo de Tela
<Caso necessário inclua protótipos de telas com o objetivo de facilitar o entendimento do requisito, apresentar conceitos e funcionalidades do software>.
Protótipo 01
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
Arquivo ou Código do Script: AAA – Negociação Financeira / *Versao=CP.2014.12_03*/
Índice | Chave |
01 | <FI9_FILIAL+FI9_IDDARF+FI9_STATUS> |
02 | <FI9_FILIAL+FI9_FORNEC+ FI9_LOJA+FI9_EMISS+FI9_IDDARF> |
03 | <FI9_FILIAL+FI9_FORNEC+ FI9_LOJA+FI9_PREFIX+FI9_NUM+FI9_PARCEL+FI9_TIPO> |
Campo | <AAA_PERESP> |
Tipo | <N> |
Tamanho | <6> |
Valor Inicial | <Varia de acordo com o tipo informado. Por exemplo, quando o campo “tipo” for date, neste campo pode ser informado uma data>. |
Mandatório | Sim ( ) Não ( ) |
Descrição | <Referência Mínima para Cálculo> |
Título | <Ref.Calc.> |
Picture | <@E999.99> |
Help de Campo | <Informar o % que o aluno pagará em dinheiro. Esse % poderá ser alterado durante a negociação> |
(Opcional)
Grupo de Perguntas
<Informações utilizadas na linha Protheus>.
Nome: FINSRF2
X1_ORDEM | 01 |
X1_PERGUNT | Emissão De |
X1_TIPO | D |
X1_TAMANHO | 8 |
X1_GSC | G |
X1_VAR01 | MV_PAR01 |
X1_DEF01 | Comum |
X1_CNT01 | '01/01/08' |
X1_HELP | Data inicial do intervalo de emissões das guias de DARF a serem consideradas na seleção dos dados para o relatório |
(Opcional)
Consulta Padrão
<Informações utilizadas na linha Protheus>
Consulta: AMB
Descrição | Configurações de Planejamento |
Tipo | Consulta Padrão |
Tabela | “AMB” |
Índice | “Código” |
Campo | “Código”; ”Descrição” |
Retorno | AMB->AMB_CODIGO |
(Opcional)
Estrutura de Menu
<Informações utilizadas na linha Datasul>.
Procedimentos
Procedimento |
|
|
|
Descrição | (Max 40 posições) | (Max 40 posições) | (Max 40 posições) |
Módulo |
|
|
|
Programa base |
|
|
|
Nome Menu | (Max 32 posições) | (Max 32 posições) | (Max 32 posições) |
Interface | GUI/WEB/ChUI/Flex | GUI/WEB/ChUI/Flex | GUI/WEB/ChUI/Flex |
Registro padrão | Sim | Sim | Sim |
Visualiza Menu | Sim/Não | Sim/Não | Sim/Não |
Release de Liberação |
|
|
|
Programas
Programa |
|
|
|
Descrição | (Max 40 posições) | (Max 40 posições) | (Max 40 posições) |
Nome Externo |
|
|
|
Nome Menu/Programa | (Max 32 posições) | (Max 32 posições) | (Max 32 posições) |
Nome Verbalizado[1] | (Max 254 posições) | (Max 254 posições) | (Max 254 posições) |
Procedimento |
|
|
|
Template | (Verificar lista de opções no man01211) | (Verificar lista de opções no man01211) | (Verificar lista de opções no man01211) |
Tipo[2] | Consulta/Manutenção/ Relatório/Tarefas | Consulta/Manutenção/ Relatório/Tarefas | Consulta/Manutenção/ Relatório/Tarefas |
Interface | GUI/WEB/ChUI/Flex | GUI/WEB/ChUI/Flex | GUI/WEB/ChUI/Flex |
Categoria[3] |
|
|
|
Executa via RPC | Sim/Não | Sim/Não | Sim/Não |
Registro padrão | Sim | Sim | Sim |
Outro Produto | Não | Não | Não |
Visualiza Menu | Sim/Não | Sim/Não | Sim/Não |
Query on-line | Sim/Não | Sim/Não | Sim/Não |
Log Exec. | Sim/Não | Sim/Não | Sim/Não |
Rotina (EMS) |
|
|
|
Sub-Rotina (EMS) |
|
|
|
Localização dentro da Sub Rotina (EMS) |
|
|
|
Compact[4] | Sim/Não | Sim/Não | Sim/Não |
Home[5] | Sim/Não | Sim/Não | Sim/Não |
Posição do Portlet[6] | 0 – Top Left 1 – Top Right 2 – Bottom Left 3 – Bottom Right | 0 – Top Left 1 – Top Right 2 – Bottom Left 3 – Bottom Right | 0 – Top Left 1 – Top Right 2 – Bottom Left 3 – Bottom Right |
Informar os papeis com os quais o programa deve ser vinculado |
|
|
|
Cadastro de Papéis
<O cadastro de papéis é obrigatório para os projetos de desenvolvimento FLEX a partir do Datasul 10>.
<Lembrete: o nome dos papeis em inglês descrito neste ponto do documento, devem ser homologados pela equipe de tradução>.
Código Papel | (máx 3 posições) |
Descrição em Português* |
|
Descrição em Inglês* |
|
[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. |
---|