Páginas filhas
  • ER MANCORE1-2901 TOTVS MES ADAPTER ENVIO

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Migration of unmigrated content due to installation of a new plugin

 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
  • Saldos de estoque

 

Abaixo esquema de como a integração foi desenhada. Sistema da TOTVS gera os dados em formato XML. Envia para o PCfactory, que por sua vez processa os dados e deverá retornar se foram processados com sucesso ou se ocorreu algum problema.

 

 

 

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:

BlocoTagDescriçãoObservação
BusinessContentTypeCompanyId Empresa ITEM.COD_EMPRESA
BusinessContentTypeBranchId Filial 
BusinessContentTypeCompanyInternalIdEmpresa+Filial 
BusinessContentTypeCode Código do itemITEM.COD_ITEM
BusinessContentTypeName Descrição do itemITEM.DEN_ITEM
BusinessContentTypeShortName Nome curtoITEM.DEN_ITEM_REDUZ
BusinessContentTypeActive Item ativo?ITEM.IES_SITUACAO
BusinessContentTypeUnitOfMeasureCode Unidade de MedidaITEM.COD_UNID_MED
BusinessContentTypeEconomicLot Lote econômico 
BusinessContentTypeMinimumLot Lote mínimo 
BusinessContentTypeFamilyCode FamíliaITEM.COD_FAMILIA
BusinessContentTypeFamilyDescription Descrição da famíliaFAMILIA.DEN_FAMILIA
BusinessContentTypeSecondUnitOfMeasureCodeSegunda Unidade de medida--
BusinessContentTypeMultiplicationFactorValue Fator de conversãoITEM.FAT_CONVER
BusinessContentTypeProductTypeTipo do ItemITEM_IES_TIP_ITEM
BusinessContentTypePackingQuantity Quantidade Embalagem0
BusinessContentTypeCostCenterCodeCentro de Custo--
 BusinessContentTypeMultipleLotLote Multiplo 
 BusinessContentTypeStockControlTypeTipo Controle de Estoque 
BusinessContentTypeGrossWeightPeso Bruto0
BusinessContentTypeTrailControla LoteITEM.IES_CTR_LOTE
BusinessContentTypeBinControlEndereçoITEM_CTR_GRADE.IES_ENDERECO
BusinessContentTypeDetailDetalhes 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):

 

<?xml version="1.0" encoding="UTF-8" ?>
 <TOTVSMessage>
    <MessageInformation version="3.007">
       <UUID>d3a609a0-738f-2808-9ab9-01ede2fa9a71</UUID>
       <Type>BusinessMessage</Type>
       <Transaction>Item</Transaction>
       <ContextName>LOGIX</ContextName>
       <StandardVersion>1.0</StandardVersion>
       <SourceApplication>ENG</SourceApplication>
        <CompanyId>04</CompanyId>
        <BranchId />
        <UserId>001577</UserId>
        <Product name="man10021" version="12.1.13" />
        <GeneratedOn>2017-01-24T13:47:33</GeneratedOn>
        <DeliveryType>sync</DeliveryType>
        </MessageInformation>

    <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:

<BusinessEvent>
  <Entity>Item</Entity>
  <Event>upsert</Event>
- <Identification>
  <key name="CompanyId">04</key>
  <key name="Code">ACESS</key>
  </Identification>
  </BusinessEvent>

 

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:

 

<CompanyId>04</CompanyId>
  <CompanyInternalId>04</CompanyInternalId>
  <Code>ACESS</Code>
  <InternalId>04|ACESS</InternalId>
  <Name>SEGMENTO:BABY Tipo 1 CASUAL TECHNO TESTE 1</Name>
  <ShortName>TECHNO</ShortName>
  <Active>1</Active>
  <StockGroupCode>3</StockGroupCode>
  <StockGroupInternalId>04|3</StockGroupInternalId>
  <StockGroupDescription>SEMI-ACABADO</StockGroupDescription>
  <UnitOfMeasureCode>UN</UnitOfMeasureCode>
  <UnitOfMeasureInternalId>UN</UnitOfMeasureInternalId>
  <ObtainingType>2</ObtainingType>
  <DeployDate>2010-07-13</DeployDate>
  <ReleaseDate>2010-07-13</ReleaseDate>
  <StandardWarehouseCode>ESTOQUE</StandardWarehouseCode>
  <StandardWarehouseInternalId>04|ESTOQUE</StandardWarehouseInternalId>
  <StandardWarehouseDescription>ESTOQUE</StandardWarehouseDescription>
  <MultipleLot>5</MultipleLot>
  <EconomicLot>0</EconomicLot>
  <MinimumLot>20</MinimumLot>
  <QualityControl>0</QualityControl>
  <ControlType>1</ControlType>
  <StockControlType>2</StockControlType>
  <NetWeight>64</NetWeight>
  <GrossWeight>0</GrossWeight>
  <FamilyCode>CAL</FamilyCode>
  <FamilyInternalId>04|CAL</FamilyInternalId>
  <FamilyDescription>Calçados</FamilyDescription>
  <MultiplicationFactorValue>80.50</MultiplicationFactorValue>
- <Values>
  <PackingQuantity>0</PackingQuantity>
  </Values>
  <ProductType>26</ProductType>
  <Trail>N</Trail>
  <BinControl>TRUE</BinControl>

 

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:

BlocoTagDescriçãoObservação
BusinessContentTypeCompanyIdCódigo da Empresa LOCAL.COD_EMPRESA
BusinessContentTypeBranchIdCódigo da Filial --
BusinessContentTypeCompanyInternalIdInternalId da chave completa de empresa --
BusinessContentTypeCodeCódigo do Local de Estoque(armazém/almoxarifado/depósito)LOCAL.COD_LOCAL
BusinessContentTypeInternalIdInternalId do CodeEmpresa\Local
BusinessContentTypeDescriptionDescriçã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):

 

<?xml version="1.0" encoding="UTF-8" ?>
 <TOTVSMessage>
    <MessageInformation version="1.001">
       <UUID>d3a609a0-738f-2808-9ab9-01ede2fa9a71</UUID>
       <Type>BusinessMessage</Type>
       <Transaction>WareHouse</Transaction>
       <ContextName>LOGIX</ContextName>
       <StandardVersion>1.0</StandardVersion>
       <SourceApplication>ENG</SourceApplication>
        <CompanyId>04</CompanyId>
        <BranchId />
        <UserId>001577</UserId>
        <Product name="sup10002" version="12.1.13" />
        <GeneratedOn>2017-01-24T13:47:33</GeneratedOn>
        <DeliveryType>sync</DeliveryType>
        </MessageInformation>

    <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:

<BusinessEvent>
  <Entity>WareHouse</Entity>
  <Event>upsert</Event>
- <Identification>
  <key name="CompanyId">04</key>
  <key name="Code">99</key>
  </Identification>
  </BusinessEvent>

 

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.

BlocoTagDescriçãoArranjoRecurso
BusinessContentTypeCodeCódigo Máquina REC_ARRANJO.COD_ARRANJORECURSO.COD_RECUR
BusinessContentTypeDescriptionDescrição MáquinaARRANJO.DEN_ARRANJORECURSO.DEN_RECUR
BusinessContentTypeWorkCenterCodeCódigo Centro Trabalho????
BusinessContentTypeWorkCenterDescriptionDescrição Centro Trabalho ????
BusinessContentTypeCostCenterCodeCódigo Centro Custo ----
BusinessContentTypeProcessorType

Tipo de Processamento

1=Monoprocesso;2=Por Batelada;3=Multiplos Processos;4=Manual

--

--
BusinessContentTypeLaborType

Tipo MOD

1=Nao Reporta;2=Operador;3=Equipe

--

--
BusinessContentTypeVolumeMachineQuantityQuantidade Volume Máquina ----
BusinessContentTypeEfficiencyMachineValueEficiência Máquina ----
BusinessContentTypeOperatorMachineQuantityQuantidade Operador Máquina ----
BusinessContentTypeSimultaneousActivityQuantityQuantidade Operações Simultaneas ----
BusinessContentTypeIsSetupPossui Preparação ----
BusinessContentTypeIsOverlapReportSobrepõe Apontamento ----
BusinessContentTypeProductionAreaCodeArea de Produção ----
BusinessContentTypeInitialValidateDateData início validade ----
BusinessContentTypeFinalValidateDateData fim validade ----
ListOfResourcesResourceType

Tipo do Recurso

1=Operador;2=Ferramenta;3=Equipe;4=Equipamento

----
ListOfResourcesResourceCodeCódigo Recurso ----
ListOfResourcesResourceNameNome Recurso ----
ListOfResourcesUnitTimeType

Tipo Medida Tempo

1=Horas;2=Minutos;3=Segundos

--

--
ListOfResourcesStartExpirationDateData Início Validade ----
ListOfResourcesEndExpirationDateData Fim Validade ----
ListOfResourcesCycleQuantityNúmero Ciclos ----
ListOfResourcesIsTimeActivityDetermian tempo ----
ListOfProductionShiftsProductionShiftCodeCódigo Modelo Turno ----
ListOfProductionShiftsProductionShiftDescriptionDescrição Modelo Turno ----
ListOfProductionShiftsBeginDateData Início Validade ----
ListOfProductionShiftsEndDateData Fim Validade ----

 

Criar TAG para identificar se é RECURSO ou ARRANJO

BusinessContentTypeTypeMachinexs:string11= 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):

 

<?xml version="1.0" encoding="UTF-8" ?>
 <TOTVSMessage>
    <MessageInformation version="1.000">
       <UUID>d3a609a0-738f-2808-9ab9-01ede2fa9a71</UUID>
       <Type>BusinessMessage</Type>
       <Transaction>Machine</Transaction>
       <ContextName>LOGIX</ContextName>
       <StandardVersion>1.0</StandardVersion>
       <SourceApplication>ENG</SourceApplication>
        <CompanyId>04</CompanyId>
        <BranchId />
        <UserId>001577</UserId>
        <Product name="MAN10072" version="12.1.13" />
        <GeneratedOn>2017-01-24T13:47:33</GeneratedOn>
        <DeliveryType>sync</DeliveryType>
        </MessageInformation>

    <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:

<BusinessEvent>
  <Entity>Machine</Entity>
  <Event>upsert</Event>
- <Identification>
  <key name="CompanyId">04</key>
  <key name="Code">99</key>
  </Identification>
  </BusinessEvent>

 

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:

 

BlocoTagDescriçãoObservação
BusinessContentTypeNumberNúmero Ordem ProduçãoORDENS.NUM_ORDEM
BusinessContentTypeProductionOrderUniqueIDIdentificador único da ordemEmpresa|OP
BusinessContentTypeItemCodeCódigo ItemORDENS.COD_ITEM
BusinessContentTypeItemDescriptionDescrição ItemITEM.DEN_ITEM_REDUZ
BusinessContentTypeTypeTipo da OrdemFixo 1 (ordem interna)
BusinessContentTypeQuantityQuantidadeORDENS.QTD_PLANEJ
BusinessContentTypeReportQuantityQuantidade ReportadaQTD_PLANEJ - ( QTD_BOAS + QTD_REFUG )
BusinessContentTypeIsStatusOrderReporte Fecha Ordem Produção --
BusinessContentTypeUnitOfMeasureCodeUnidade Medida--
BusinessContentTypeRequestOrderCodeCódigo Pedido Ordem ProduçãoORDENS.NUM_DOCUM
BusinessContentTypeStatusTypeEstado

 

BusinessContentTypeStatusOrderTypeEstado da ordem

Não Iniciada = 1

Liberada = 2

Firme = 10

Aberta = 11

Cancelada = 12

Encerrada Parcial/Total = 7

BusinessContentTypeWarehouseCodeCódigo DepósitoORDENS.COD_LOCAL_PROD
BusinessContentTypeEndOrderDateTimeData Fim Ordem Produção CPORDENS.DAT_ENTREGA
BusinessContentTypeStartOrderDateTimeData Início Ordem Produção CPORDENS.DAT_LIBERAC
BusinessContentTypeAbbreviationProviderNameNome Cliente--
BusinessContentTypeCustomerRequestCodeCódigo Pedido Cliente--
BusinessContentTypeScriptCodeCódigo RoteiroORDENS.COD_ROTEIRO
BusinessContentTypeReportOrderTypeTipo de Reporte

1 = Ordem; 2 = Operações; 3 = Ponto Controle; 4 = Item

ListOfActivityOrdersProductionOrderNumberOrdem de Produção

ORDENS.NUM_ORDEM

ListOfActivityOrdersActivityIDID do RegistroORD_OPER.SEQ_PROCESSO
ListOfActivityOrdersActivityCodeCódigo OperaçãoORD_OPER.COD_OPERAC
ListOfActivityOrdersActivityDescriptionDescrição OperaçãoOPERACAO.DEN_OPERAC
ListOfActivityOrdersSplitDesdobramento da operação--
ListOfActivityOrdersItemCodeCódigo do item

ORDENS.COD_ITEM

ListOfActivityOrdersItemDescriptionDescrição do itemITEM.DEN_ITEM_REDUZ
ListOfActivityOrdersActivityTypeTipo Operação1 = Executa operação; 2 = Não executa.
ListOfActivityOrdersWorkCenterCodeCódigo Centro de TrabalhoORD_OPER.COD_CENT_TRAB
ListOfActivityOrdersWorkCenterDescriptionDescrição Centro de TrabalhoCENT_TRABALHO.DEN_CENT_TRAB
ListOfActivityOrdersUnitTimeTypeTipo Unidade Tempo1 = Horas;2=Minutos;3=Segundos;4=Dias
ListOfActivityOrdersTimeResourceTempo RecursoTempo para fazer um lote. ORD_OPER.QTD_HORAS
ListOfActivityOrdersTimeMachineTempo Máquina

Mult. pela qtd da ordem ( tempo para fazer toda a ordem)

ORD_OPER.QTD_HORAS * ORDENS.QTD_PLANEJ

ListOfActivityOrdersTimeSetupTempo PreparaçãoORD_OPER.QTD_HORAS_SETUP
ListOfActivityOrdersTimeMODTempo Mão de Obra0
ListOfActivityOrdersTimeIndMESIindicador de tempo no MES1 = Tempo Máquina; 2 = Tempo mão-de-obra; 3 = Escolha pelo MES.
ListOfActivityOrdersScriptCodeCódigo RoteiroORDENS.COD_ROTEIRO
ListOfActivityOrdersLaborCodeCódigo Mão de Obra Direta--
ListOfActivityOrdersUnitItemNumberLote PadrãoLote Padrão da operação. ITEM_MAN.PARAMETROS[1,5] (Lote Padrão da operação.)
ListOfActivityOrdersIsActivityEndÚltima OperaçãoNa última operação passar TRUEORD_OPER.IES_OPER_FINAL
ListOfActivityOrdersMachineCodeCódigo MáquinaSG2_RECURSO ou SHY_RECURSO 
ListOfActivityOrdersStartPlanDateTimeData/Hora Início ProgramaçãoSHYORD_OPER.HY_HORAINI ou SC2.C2_DATPRIDAT_INICIO
ListOfActivityOrdersEndPlanDateTimeData/Hora Fim ProgramaçãoSHY.HY_HORAFIM ou SC2.C2_DATPRFORD_OPER.DAT_ENTREGA
ListOfActivityOrdersProductionQuantityQuantidade a produzir na operaçãoSHY.HY_QUANT ou SH8.H8_QUANT ou SC2.C2_QUANTORD_OPER.QTD_PLANEJADA
ListOfActivityOrdersUnitActivityCodeUnidade de medidaSB1ITEM.B1COD_UNID_UMMED
ListOfActivityOrdersSecondUnitActivityCodeSegunda unidade de medida na operação --
ListOfActivityOrdersSecondUnitActivityFactorFator de conversão para segunda un. na operação--
ListOfActivityOrdersResourceQuantityQuantidade de recursos-- 
ListOfMaterialOrdersProductionOrderNumberOrdem de produçãoOP (NUM+ITEM+SEQUEN)ORD_COMPON.NUM_ORDEM
ListOfMaterialOrdersMaterialIDRegistro da reservaRECNO SD4ORD_COMPON.NUM_SEQ
ListOfMaterialOrdersMaterialCodeCódigo Item ReservaSD4.D4_CODORD_COMPON.COD_ITEM_COMPON
ListOfMaterialOrdersScriptCodeCódigo RoteiroSD4 (a partir do pacote 6)MAN_OP_COMPONENTE_OPERACAO.ROTEIRO
ListOfMaterialOrdersActivityCodeCódigo OperaçãoSD4 (a partir do pacote 6) 
ListOfMaterialOrdersWarehouseCodeCódigo DepósitoSD4ORD_COMPON.D4LOCAL_LOCALBAIXA
ListOfMaterialOrdersMaterialDateData ReservaSD4.D4_DATA--
ListOfMaterialOrdersMaterialQuantityQuantidade ReservaSD4ORD_COMPON.D4QTD_QUANTNECESS
 
ListOfMaterialOrders

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 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

 

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

 

##

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):

 

<?xml version="1.0" encoding="UTF-8" ?>
 <TOTVSMessage>
    <MessageInformation version="1.001">
       <UUID>d3a609a0-738f-2808-9ab9-01ede2fa9a71</UUID>
       <Type>BusinessMessage</Type>
       <Transaction>ItemStructure</Transaction>
       <ContextName>LOGIX</ContextName>
       <StandardVersion>1.0</StandardVersion>
       <SourceApplication>ENG</SourceApplication>
        <CompanyId>04</CompanyId>
        <BranchId />
        <UserId>001577</UserId>
        <Product name="man10002" version="12.1.13" />
        <GeneratedOn>2017-01-24T13:47:33</GeneratedOn>
        <DeliveryType>sync</DeliveryType>
        </MessageInformation>

    <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:

<BusinessEvent>
  <Entity>ItemStructure</Entity>
  <Event>upsert</Event>
      <Identification><key name="InternalID">04|ACESS</key></Identification>
  </BusinessEvent>

 

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

 

##

RequestTypeTipo da Requisição 1-Direta, 2-Indireta.
ListOfAllocatedMaterialWarehouseCodeCódigo do DepósitoOP_LOTE.COD_LOCAL_BAIXA
ListOfAllocatedMaterialLotCodeLoteOP_LOTE.NUM_LOTE
ListOfAllocatedMaterialLocationCodeLocalizaçãoOP_LOTE.ENDERECO
ListOfAllocatedMaterialActivityCodeCódigo Operação 
ListOfAllocatedMaterialScriptCodeCódigo do RoteiroORDENS.COD_ROTEIRO
ListOfAllocatedMaterialAllocationQuantityQuantidade alocadaOP_LOTE.QTD_TRANSF
ListOfAllocatedMaterialAllocationTypeTipo de Alocação 1-Soma, 2-Diminui, 3-Absoluto
ListOfAllocatedMaterialSubLoteCodeSub Lote--
ListOfAllocatedMaterialNumberSeriesNúmero de sérieOP_LOTE.NUM_SERIE
ListOfAllocatedMaterialLotDueDateData de validadeOP_LOTE.DAT_HOR_VALID
ListOfQuotaActivityProductionOrderNumber  
ListOfQuotaActivityControlType  
ListOfQuotaActivityActivityID  
ListOfQuotaActivityItemCode  
ListOfQuotaActivityItemDescription  
ListOfQuotaActivityStartActivityDateTime  
ListOfQuotaActivityEndActivityDateTime  
ListOfQuotaActivityApprovedQuantity  
ListOfQuotaActivityScrapQuantity  
ListOfQuotaActivityMachineCode  
ListOfQuotaActivityMachineDescription  
ListOfQuotaActivityActivityQuantity  
ListOfQuotaActivityTimeSetup  
ListOfQuotaActivityTimeMachine  
ListOfQuotaActivityQuotaActivityID  
ListOfQuotaActivityWorkCenterCode  

 

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.
  • A tag AllocationType deve gravar como '3'.
  • 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:

 

BlocoTagDescriçãoObservação
BusinessContentTypeCompanyCodeEmpresa ESTRUT_GRADE.COD_EMPRESA
BusinessContentTypeCompanyInternalIdEmpresa+Filial --
BusinessContentTypeItemInternaIdInternalId do ItemEmpresa|Item Pai
BusinessContentTypeItemCodeCódigo item paiESTRUT_GRADE.COD_ITEM_PAI
BusinessContentTypeItemAmountQuantidade base do item pai1
ItemComponentTypeItemSequenceSequencia do componenteESTRUT_GRADE.COD_POSICAO
ItemComponentTypeItemComponentCodeCódigo item componenteESTRUT_GRADE.COD_ITEM_COMPON
ItemComponentTypeItemComponentInternalIdInternal Id do Item ComponenteEmpresa|Componente
ItemComponentTypeInitialDateData validade inicialESTRUT_GRADE.DAT_VALIDADE_INI
ItemComponentTypeFinalDateData validade finalESTRUT_GRADE.DAT_VALIDADE_FIM
ItemComponentTypeIsGhostMaterialIndica se a relação item x componente é fantasma 
ItemComponentTypeItemComponentAmountQuantidade do item componenteESTRUT_GRADE.QTD_NECESSARIA
ItemComponentTypeLossFactorFator de perda do componente em relação a
quantidade usada
ESTRUT_GRADE.PCP_REFUG
ListOfScriptScriptcodeCódigo do RoteiroMAN_PROCESSO_ITEM.ROTEIRO
ListOfScriptScriptAlternativeAlternativo do RoteiroMAN_PROCESSO_ITEM.ROTEIRO_ALTERNATIVO
ListOfScriptActivityIntenalIDID OperaçãoMAN_ESTRUTURA_OPERACAO.SEQ_PROCESSO
ListOfScriptActivityCodeCódigo da OperaçãoMAN_PROCESSO_ITEM.OPERACAO
ListOfScriptActivityComponentSequenceSequencia do componente na operaçãoESTRUT_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: CamisaCORBRANCOAZULPRETO
    TAMG,HD Z
    PequenoE,FA,B,CY 
    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,H

         Azul 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):

 

<?xml version="1.0" encoding="UTF-8" ?>
 <TOTVSMessage>
    <MessageInformation version="1.001">
       <UUID>d3a609a0-738f-2808-9ab9-01ede2fa9a71</UUID>
       <Type>BusinessMessage</Type>
       <Transaction>ItemStructure</Transaction>
       <ContextName>LOGIX</ContextName>
       <StandardVersion>1.0</StandardVersion>
       <SourceApplication>ENG</SourceApplication>
        <CompanyId>04</CompanyId>
        <BranchId />
        <UserId>001577</UserId>
        <Product name="man10002" version="12.1.13" />
        <GeneratedOn>2017-01-24T13:47:33</GeneratedOn>
        <DeliveryType>sync</DeliveryType>
        </MessageInformation>

    <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:

<BusinessEvent>
  <Entity>ItemStructure</Entity>
  <Event>upsert</Event>
      <Identification><key name="InternalID">04|ACESS</key></Identification>
  </BusinessEvent>

 

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:

 

<ListOfItensStructure>
      <ItemComponent>
      <ItemSequence />
      <ItemComponentCode>INAPEL2</ItemComponentCode>
      <ItemComponentInternalId>9901INAPEL2</ItemComponentInternalId>
      <InitialDate>2016-12-28</InitialDate>
      <FinalDate>2049-12-31</FinalDate>
      <IsGhostMaterial>FALSE</IsGhostMaterial>
      <ItemComponentAmount>1</ItemComponentAmount>
      <ItemComponentProportion />
      <LossFactor>0</LossFactor>
     <ListOfScript>
          <Script>
             <ScriptCode>10</ScriptCode>
             <ScriptAlternative />
             <ActivityInternalID />
             <ActivityCode>10</ActivityCode>
             <ActivityComponentSequence />
               </Script>
          </ListOfScript>

 

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:

 

BlocoTagDescriçãoObservação
BusinessContentTypeItemCodeCódigo itemMAN_PROCESSO_ITEM.ITEM
BusinessContentTypeItemDescriptionDescrição do itemITEM.DEN_ITEM
BusinessContentTypeItemInternalIdInternal Id do ItemEmpresa|Item
BusinessContentTypeScriptCodeCódigo do RoteiroMAN_PROCESSO_ITEM.ROTEIRO
ListOfActivityActivityInternalIDID OperaçãoMAN_PROCESSO_ITEM.SEQ_OPERACAO
ListOfActivityActivityCodeCódigo da OperaçãoMAN_PROCESSO_ITEM.OPERACAO
ListOfActivityActivityDescriptionDescrição OperaçãoOPERACAO.DEN_OPERAC
ListOfActivityMachineCodeCódigo da Máquina 
ListOfActivityToolCodeCódigo Ferramenta--
ListOfActivityActivityTypeTipo Operação1 = Executa operação; 2 = Não executa. Passar fixo "1"
ListOfActivityWorkCenterCodeCódigo Centro TrabalhoMAN_PROCESSO_TEM.CENTRO_TRABALHO
ListOfActivityWorkCenterInternalIdInterna Id Centro de TrabalhoEmpresa|Centro de Trabalho
ListOfActivityUnitItemNumberLote padrão ( quantidade de itens feita no tempo padrão)ITEM_MAN.PARAMETROS[1,5]
ListOfActivityTimeResourceTempo Recurso0
ListOfActivityTimeMachineTempo MáquinaMAN_PROCESSO_ITEM.QTD_TEMPO
ListOfActivityTimeSetupTempo PreparaçãoMAN_PROCESSO_ITEM.QTD_TEMPO_SETUP
ListOfActivityUnitTimeTypeTipo Unidade Tempo1 = Horas;2=Minutos;3=Segundos;4=Dias
ListOfActivityScriptAlternativeAlternativoMAN_PROCESSO_ITEM.ROTEIRO_ALTERNATIVO
ListOfActivityInitialDateData InicialMAN_PROCESSO_ITEM.VALIDADE_INICIAL
ListOfActivityFinalDateData FinalMAN_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: CamisaCORBRANCOAZULPRETO
    TAMG,HD Z
    PequenoE,FA,B,CY 
    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,H

         Azul 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):

 

<?xml version="1.0" encoding="UTF-8" ?>
 <TOTVSMessage>
    <MessageInformation version="1.000">
       <UUID>d3a609a0-738f-2808-9ab9-01ede2fa9a71</UUID>
       <Type>BusinessMessage</Type>
       <Transaction>ItemScript</Transaction>
       <ContextName>LOGIX</ContextName>
       <StandardVersion>1.0</StandardVersion>
       <SourceApplication>ENG</SourceApplication>
        <CompanyId>04</CompanyId>
        <BranchId />
        <UserId>001577</UserId>
        <Product name="man10243" version="12.1.13" />
        <GeneratedOn>2017-01-24T13:47:33</GeneratedOn>
        <DeliveryType>sync</DeliveryType>
        </MessageInformation>

    <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:

<BusinessEvent>
  <Entity>ItemScript</Entity>
  <Event>upsert</Event>
      <Identification><key name="InternalID">04|ACESS|PADRAO</key></Identification>
  </BusinessEvent>

 

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 - Centro de TrabalhoEndereço

O cadastro de centro de trabalho é o MAN10006endereço é o MAN10093 e o SUP1637. Gera a tabela  CENTSUP_ENDERECO_TRABALHOLOCAL.

A Mensagem utilizada será:  WorkcenterAddressStock_1_000

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:as seguintes tags:

 

CENT_TRABALHO.DEN_CENT_TRAB
BlocoTagDescriçãoObservação
BusinessContentTypeCodeCódigo do Centro de TrabalhoCENT_TRABALHO.COD_CENT_TRAB
Observação
BusinessContentTypeWarehouseCodeCódigo do LocalSUP_ENDERECO_LOCAL.LOCAL
BusinessContentTypeLocationCodeEndereçoSUP_ENDERECO_LOCAL.ENDERECO
BusinessContentTypeAddressStockDescriptionDescrição do EndereçoSUP_ENDERECO_LOCAL.DENOMIN_ENDERECO
BusinessContentTypeAddressInternalIdChave completaEmpresa|Local|EndereçoBusinessContentTypeDescriptionDescrição do centro de trabalho

 

 

2.2 Alterações Necessárias

2.2.1 MAN10006MAN10093 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):

 

<?xml version="1.0" encoding="UTF-8" ?>
 <TOTVSMessage>
    <MessageInformation version="1.000">
       <UUID>d3a609a0-738f-2808-9ab9-01ede2fa9a71</UUID>
       <Type>BusinessMessage</Type>
       <Transaction>WorkCenter<AddressStock</Transaction>
       <ContextName>LOGIX</ContextName>
       <StandardVersion>1.0</StandardVersion>
       <SourceApplication>ENG</SourceApplication>
        <CompanyId>04</CompanyId>
        <BranchId />
        <UserId>001577</UserId>
        <Product name="man10006man10093" version="12.1.13" />
        <GeneratedOn>2017-01-24T13:47:33</GeneratedOn>
        <DeliveryType>sync</DeliveryType>
        </MessageInformation>

    <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 “Workcenter”“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 = “MAN10006” “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:

<BusinessEvent>
  <Entity>Workcenter<>AddressStock</Entity>
  <Event>upsert</Event>
      <Identification><key name="InternalID">04|CT1</key></Identification>
  </BusinessEvent>

 

Onde:

  • Entity: Entidade . Gerar fixo “WorkCenter”“AddressStock”
  • Event: Inclusão/Alteração ou exclusão. Pode ser ‘delete’ ou ‘upsert’
  • Identification: Identificação do item. Empresa | Centro de TrabalhoLocal|Endereço

Dentro do BusinessMessage existe o bloco BusinessContent, que contém os dados do processocadastro.

Somente deve gerar os campos necessários conforme descrito na tabela do item 1.1mensagem

 

c) Alterar o cadastro de centro de trabalho (man10006endereço (man10093 e sup1637) para que execute o adapter na inclusão/alteração/exclusão.

Abaixo exemplo do MAN10093.

Criar a função man10006man10093_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: EAIAdapterWorkCenter1 EAIAdapterAddressStock1 e EAIHelperWorkCenter1EAIHelperAddressStock1.

 

Na função MAN10006MAN10093_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 =  'CENTSUP_ENDERECO_TRABALHOLOCAL'). 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 workcenterAddressStock_1_000.  

  • O cabeçalho da mensagem deverá ser gerado manualmente:
    ContextName = 'Logix'
    SourceApplication = 'ENG'
    CompanyId = Empresa logada
    UserId = Usuário Logado
    ProductName = MAN10006MAN10093
    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]  
[MAN10006 - Centro de TrabalhoSUP1637 - 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>.
da ListOfActivityOrders

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.