(Obrigatório)
Definição da Regra de Negócio
Desenvolver rotinas para realizar o processamento dos apontamentos de produção realizados pelo PC-Factory no Protheus. Serão desenvolvidos os seguintes requisitos:
a) - WebService
b) - Reporte de produção - Quantidade - Tempo - Estorno
c) - Reporte de parada de produção
Quando o PC Factory for o produto gerador da informação no caso do reporte de produção o fluxo da integração será o seguinte:
a. Operador efetua reporte normalmente conforme sua operação no PC-Facotry.
b. Em um processo batch ou disparado paralelamente no sistema, há a montagem do XML conforme XML Schema de Mensagem Única TOTVS e o envio desse XML para o ERP TOTVS, que validará o XML contra o XSD e encaminhará ao respectivo adapter de negócio para processamento.
c. Em caso de erros, esse reporte ficará com um status de pendente para envio dentro do software MES e o usuário poderá tomar ações no próprio PC Factory (o ERP TOTVS não manterá rastreabilidade das mensagens recebidas).
1. Mensagem
A mensagem será gerada pelo PC-Factory, e possui cabeçalho padrão TOTVSMessage:
Abaixo modelo de como será a mensagem para o cabeçalho:
<?xml version="1.0" encoding="UTF-8" ?>
<TOTVSMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xmlschema/general/events/ProductionAppointment_1_001.xsd">
<MessageInformation version="1.001">
<UUID>d97aeb6f-1440-8c81-fc13-ec8cf87b82ad</UUID>
<Type>BusinessMessage</Type>
<Transaction>ProductionAppointment</Transaction>
<StandardVersion>1.0</StandardVersion>
<SourceApplication>dts11cordas8480</SourceApplication>
<CompanyId>10</CompanyId>
<BranchId>01</BranchId>
<UserId>xxx</UserId>
<Product name="Datasul" version="11.5.X"/>
<GeneratedOn>2015-07-10T16:25:21.971-03:00</GeneratedOn>
<ContextName>PROTHEUS</ContextName>
<DeliveryType>Sync</DeliveryType>
</MessageInformation>
<BusinessMessage>
<BusinessEvent>
......................
</BusinessEvent>
....................
....................
<\BusinessMessage>
O que espera-se:
- TOTVSMessage xmlns:xsi Indica o xsd para gerarção do XML. O nome da mensagem deverá ser: ProductionAppointment_1_001 quando apontamento ou StopReport_1_000 quando parada
- MessageInformation version Indica a versão da mensagem. A versão deverá ser “1.001” quando apontamento ou 1.000 quando parada
- UUID : Sequencial usado pelo EAI. Gerar fixo “1’. Não será validado pelo Protheus
- Type: Tipo da mensagem. Gerar fixo “BusinessMessage”
- Transaction: Indica o que está sendo enviado. A transação deverá ser:“ProductionAppointment” quando apontamento ou "StopReport" quando parada
- StandardVersion: Versão. Deverá ser “1.001” quando apontamento ou "1.000" quando parada
- SourceApplication: Aplicação que está executando. Não será validado pelo Protheus
- CompanyId: Código da empresa. Deverá retornar a empresa em que será processado o apontamento
- BranchId: Código da filial. Deverá retornar a filial em que será processado o apontamento
- UserId: Usuário. Não será validado pelo Protheus
- Product: Name. Nome do produto. O Nome deverá ser PPI
- GenerateOn = Data e hora da geração da mensagem. Não será validado pelo Protheus
- ContextName = Sistema que gerou. Não será validado pelo Protheus
- DeliveryType:Tipo de envio da mensagem. Gerar fixo “Sync”. Tem que ser Sync, pois faremos o retorno.
Dentro do BusinessMessage existe o bloco BusinessEvent com as seguintes tags:
<BusinessEvent>
<Entity>Item</Entity>
<Event>upsert</Event>
</BusinessEvent>
Onde:
- Entity: Entidade . Gerar fixo “ProductionAppointment” quando apontamento ou "StopReport"quando parada
- Event: Inclusão/Alteração ou exclusão. Pode ser ‘delete’ ou ‘upsert’. No caso do apontamento deverá ser upsert.
Dentro do BusinessMessage existe o bloco BusinessContentType, que contém os dados do apontamento.
A mensagem possui vários tags, porém serão descritas somente as tags usadas na integração com o PCFactory:
- Mensagem de apontamento quantidade, tempo e estorno
Bloco | Tag | Descrição | Observação |
BusinessContentType | MachineCode | Máquina | SH6.H6_RECURSO |
BusinessContentType | ProductionOrderNumber | Ordem de Produção | SH6.H6_OP |
BusinessContentType | ActivityCode | Operação | SH6.H6_OPERAC |
BusinessContentType | ItemCode | Produto | SH6.H6_PRODUTO |
BusinessContentType | ApprovedQuantity | Quantidade Aprovada | SH6.H6_QTDPROD |
BusinessContentType | ScrapQuantity | Quantidade Refugada | SH6.H6_QTDPERD |
BusinessContentType | StartReportDateTime | Data/Hora Início Reporte | SH6.H6_DATAINI SH6.H6_HORAINI |
BusinessContentType | StartCentReportTime | Hora Centesimal Início Reporte | |
BusinessContentType | EndReportDateTime | Data/Hora Fim Reporte | SH6.H6_DATAFIN SH6.H6_HORAFIN |
BusinessContentType | EndCentReportTime | Hora Centesimal Fim Reporte | |
BusinessContentType | ReversedReport | Estorno do Apontamento | |
BusinessContentType | ReversalDate | Data do estorno | |
BusinessContentType | ReportDateTime | Data/Hora Reporte | SH6.H6_DTAPONT |
BusinessContentType | WarehouseCode | Código Depósito | SH6.H6_LOCAL |
BusinessContentType | LotCode | Lote/Série | SH6.H6_LOTECTL |
BusinessContentType | LotDueDate | Data Validade Lote | SH6.H6_DTVALID |
BusinessContentType | IntegrationReport | Registro a ser estornado | |
BusinessContentType | CloseOperation | Encerra Operação | SH6.H6_PT |
| | | |
Bloco | Tag | Descrição | Observação |
BusinessContentType | MachineCode | Código Máquina | SH6.H6_RECURSO |
BusinessContentType | MachineDescription | Descrição Maquina | |
BusinessContentType | StopReasonCode | Código Motivo Parada | SH6.H6_MOTIVO |
BusinessContentType | StopReasonDescription | Descrição Motivo Parada | SX5.X5_DESCRI * |
BusinessContentType | StartDateTime | Data/Hora Início | SH6.H6_DATAINI SH6.H6_HORAINI |
BusinessContentType | EndDateTime | Data/Hora Fim | SH6.H6_DATAFIN SH6.H6_HORAFIN |
BusinessContentType | OperatorCode | Código Operador | SH6.H6_OPERADO |
BusinessContentType | OperatorName | Nome do Operador | |
BusinessContentType | ReportDateTime | Data/Hora Reporte | SH6.H6_DTAPONT |
2. O que será desenvolvido:
2.1 - WebService
Desenvolver WebService para o PCP,chamado WSPCP. Essa rotina será a que recebe a mensagem XML e executa os adapters de apontamento de produção e apontamento de parada.
Este serviço fará a execução online com retorno neste mesmo momento, portanto, não haverá gerenciamento de fila. As mensagens que não estão listadas neste documento deverão ser recusadas.
Abaixo modelo de fonte WebService Protheus:
Static Function execInteg()
Local cTransac := ""
Local aAdapter := {.T.,"OK"}
If Type("oXml:_TotvsMessage:_MessageInformation:_Transaction:Text") != "U"
cTransac := AllTrim(Upper(oXml:_TotvsMessage:_MessageInformation:_Transaction:Text))
Do Case
Case cTransac == "PRODUCTIONAPPOINTMENT" //Apontamento da produção
aAdapter := MATI681(oXml, TRANS_RECEIVE, EAI_MESSAGE_BUSINESS)
Case cTransac == "STOPREPORT" //Apontamento de parada
aAdapter := MATI682(oXml, TRANS_RECEIVE, EAI_MESSAGE_BUSINESS)
Otherwise
aAdapter[1] := .F.
aAdapter[2] := 'Transação "' + cTransac + '" não implementada.'
EndCase
Else
aAdapter[1] := .F.
aAdapter[2] := 'Não foi possível identificar a transação da mensagem.'
EndIf
Return aAdapter
Nota-se que no exemplo já executa os adapters de apontamentos de produção e parada, MATI681 e MATI682 que serão descritos nos itens 2.2 e 2.3 .
Importante:
A configuração do WebService deve ser feita no Appserver.ini na sessão [WebServices]
2.2 - Reporte de produção - Quantidade - Tempo - Estorno
O apontamento de produção padrão para essa integração será o MATA681. Desenvolver adapter de apontamento de produção MATI681.
O Adapter fará a leitura do XML para gerar os dados que serão passados automaticamente para a rotina de apontamento MATA681. O XML contém inúmeros campos, porém para a integração Protheus com o PC-Factory vamos usar somente os descritos na tabela da mensagem do apontamento de quantidade, tempo e estorno no item 1.
O Adpater será desenvolvido usando padrão EAI. No caso dos apontamentos desenvolver apenas o processo de recebimento da mensagem - TRANS_RECEIVE. Usar como modelo o MATI010.
Function MATI681(cXml, nTypeTrans, cTypeMessage)
//Mensagem de Entrada
If nTypeTrans == TRANS_RECEIVE
....
If cVersao == "1"
aRet := v1000(cXml, nTypeTrans, cTypeMessage)
Else
lRet := .F.
cXmlRet := STR0007 //"A versão da mensagem informada não foi implementada!"
Return {lRet, cXmlRet}
EndIf
.........
.........
Na função v1000 tratar somente o recebimento:
Static Function v1000( cXML, nTypeTrans, cTypeMessage )
........
........
//Tratamento do recebimento de mensagens
If ( nTypeTrans == TRANS_RECEIVE )
{VALIDAÇÕES}
........
//Operação de inclusão de apontamento
nOperation := 3
aSH6 := {}
//Carrega o array com os valores necessários para o apontamento.
aSH6 := {{"H6_OP" ,cNumOp , NIL },;
{"H6_RECURSO" ,cMaquina , NIL },;
{"H6_OPERAC" ,cOperacao , NIL },;
{"H6_PRODUTO" ,cProduto , NIL },;
{"H6_QTDPROD" ,nQtdApr , NIL },;
{"H6_QTDPERD" ,nQtdRef , NIL },;
{"H6_DATAINI" ,dDateIni , NIL },;
{"H6_HORAINI" ,nHoraIni , NIL },;
{"H6_DATAFIN" ,dDateFim , NIL },;
{"H6_HORAFIN" ,nHoraFim , NIL },;
{"H6_DTAPONT" ,dReportDat , NIL },;
{"H6_LOCAL" ,cLocal , NIL },;
{"H6_LOTECTL" ,cLoteCtl , NIL },;
{"H6_DTVALID" ,dDtValid , NIL }}
MSExecAuto({|x,y| mata681(x,y)},aSH6,nOperation)
If lMsErroAuto
aErroAuto := GetAutoGRLog()
For nCount := 1 To Len(aErroAuto)
Conout(" "+aErroAuto[nCount])
If AT('HELP:',aErroAuto[nCount]) > 0 .Or. AT('< --',aErroAuto[nCount]) > 0
//Retorna somente a mensagem de erro (Help) e o valor que está inválido, sem quebras de linha e sem tags '<>'
cLogErro += StrTran( StrTran( StrTran( StrTran( StrTran( aErroAuto[nCount], "/", "" ), "<", "" ), ">", "" ), CHR(10), " "), CHR(13), "") + ("|")
EndIf
Next nCount
lRet := .F.
cXMLRet := cLogErro
Return {lRet,cXmlRet}
Else
lRet := .T.
cXmlRet := cValToChar(SH6->(Recno()))
EndIf
EndIf
O Adapter fará as seguintes validações antes de executar a rotina de apontamento MATA681.
- Irá validar se a mensagem é ProductionAppointment.
- Irá validar se a versão é 1.001
- Quando o nome do produto(Product: Name) for PPI, deverá verificar se a integração Protheus x PC-Factory está ativa(SOD.OD_ATIVO). Somente processar se estiver ativa, senão irá dar mensagem de retorno que a integração não foi realizada.
- Quando as tags CompanyId e BranchId não forem enviados pelo XML será utilizado o que estiver registrados nos parâmetros de configuração(appserver.ini) na configuração do WEBSERVICE. Abaixo exemplo no campo PREPAREIN.
[WebServices]
Enable=1
Environment=p12_gestao
Conout=1
Trace=1
PrepareIn=99,01
NameSpace=http://10.80.62.136:8090
URLLocation=http://10.80.62.136
Mais detalhes sobre a configuração do appserver.ini WEBSERVICE deverá ser verificado no manual de instalação.
- Os campos Máquina,Ordem de Produção,Operação,Produto e Data/Hora Reporte serão obrigatórios.
Caso o campo código do depósito vier sem preenchimento deverá usar o local padrão do cadastro de item(SB1.B1_LOCPAD).
- Se precisar fazer alguma validação deverá usar o ponto de entrada MT680VAL. Ponto de entrada útil para validar se alguma informação deverá ser obrigatória como tempo , quantidade, entre outros. Estas validações ficarão a cargo dos clientes, pois cada um terá sua regra.
Não necessita retornar componentes nem ferramentas.
- O campo CloseOperation vai indicar se o apontamento é TOTAL ou PARCIAL. Caso envie true deverá ser T=total. Caso false será considerado como P=Parcial.
Quando for apontado Refugo/Perda(ScrapQuantity for maior que zero), não será registrado o motivo de refugo tags do ListOfWasteAppointments. A rotina MATA681 não registra dados da tabela SBC quando a execução for decorrente de processamentos automáticos.
Quando for apontamento quantidade/tempo/recurso o SH6.H6_TIPO = 'P'.
Como o padrão é MATA681, se precisar validar informações do carga máquina na tabela SH8, deverá usar o ponto de entrada MT680VAL.
2.2.1 Mensagem de Retorno
Todo apontamento deverá enviar uma mensagem de retorno, indicando possíveis problemas ou processamento efetuado com sucesso.
A mensagem de retorno será a mesma do envio - ProductionAppointment. No caso do retorno deverá enviar somente a parte do ReturnContent(quando OK) ou ListOfMessages(quando erro). Abaixo exemplo:
a) OK
<TOTVSMessage
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="">
<MessageInformation version="1.001">
<UUID>e0d43a18-ffc5-7bbd-e511-7a6794df2a3b</UUID>
<Type>Response</Type>
<Transaction>productionappointment</Transaction>
<StandardVersion>1.0</StandardVersion>
<SourceApplication>dts11cordas8480</SourceApplication>
<CompanyId>10</CompanyId>
<BranchId>10</CompanyId>
<Product name="Datasul" version="11.5.X"/>
<GeneratedOn>2015-09-30T10:50:38.123-03:00</GeneratedOn>
</MessageInformation>
<ResponseMessage>
<ReceivedMessage>
<SentBy>PPI</SentBy>
<UUID>44e8a200-461d-4f04-a7ce-953b15fb7075</UUID>
</ReceivedMessage>
<ProcessingInformation>
<ProcessedOn>2015-09-30T10:50:38.123-03:00</ProcessedOn>
<Status>OK</Status>
</ProcessingInformation>
<ReturnContent>
<ListOfInternalId>
<InternalId>
<Name>ProductionAppointmentInternalId</Name>
<Origin/>
<Destination>146284</Destination>
</InternalId>
</ListOfInternalId>
</ReturnContent>
</ResponseMessage>
</TOTVSMessage>
b) ERROR
A mesma mensagem, sem o ReturnContent. Vai usar a tag ListOfMessages para retornar a mensagem de erro.
<ProcessingInformation>
<ProcessedOn>2015-09-30T14:38:44</ProcessedOn>
<Status>ERROR</Status>
<ListOfMessages>
<Message type="ERROR" code="1">ItemCode nao cadastrado no protheus.</Message>
</ListOfMessages>
</ProcessingInformation>
Onde:
- TOTVSMessage xmlns:xsi Indica o xsd para gerarção do XML. O nome da mensagem deverá ser: ProductionAppointment_1_001
- MessageInformation version Indica a versão da mensagem. A versão deverá ser “1.001”
- UUID : Usar a mesma informação que veio na mensagem de apontamento
- Type: Tipo da mensagem. Gerar fixo “Response”
- Transaction: Indica o que está sendo enviado. A transação deverá ser:“ProductionAppointment”
- StandardVersion: Versão. Deverá ser “1.001”
- SourceApplication: Aplicação que está executando. Enviar SIGAPCP
- CompanyId: Código da empresa. Deverá retornar a empresa em que foi processado o apontamento
- BranchId: Código da filial. Deverá retornar a filial em que foi processado o apontamento
- Product: Name. Nome do produto. O Nome deverá ser WSPCP Version: Versão do RPO
- GenerateOn = Data e hora da geração da mensagem.
- ContextName = Sistema que gerou. Enviar Protheus
- SentBy = Quem originou a mensagem. No caso deverá ser PPI
- ProcessedOn = GenerateOn
- Status. Pode ser OK ou ERROR. Quando OK vai gerar o ReturnContent. Quando ERROR vai gerar ListOfMessages
- Name = ProductionAppointmentInternalId
- Destination: Registro do apontamento. R_E_C_N_O
- Message type : Mensagem de erro.
Observações:
- O número do apontamento é enviado ao Pc-Factory pelo Protheus na mensagem de retorno da ProductionAppointment e corresponde ao RECNO da SH6. Este mesmo número será utilizado quando precisar registrar um estorno(IntegrationReport).
2.2.2 Estorno
Os estornos dos apontamentos deverão seguir os procedimentos abaixo:
- O estorno ocorre quando o campo o campo ReversedReport (Estorno do apontamento) possuir o conteúdo TRUE.
Quando for estorno deverá, obrigatoriamente ter o número do apontamento, campo IntegrationReport. - Devido ao Protheus pesquisar os registros somente pelo índice e e não existir um índice na SH6¨com o nr. do registro (RECNO) deverá ser alterada a função MATA680(A680Delata) para fazer um pesquisa pelo RECNO que foi enviado no XML.
- O estorno pode ser gerado de duas formas no arquivo: somente o estorno ou estorno + apontamento. Quando a mensagem possuir o estorno e o apontamento só pode commitar as movimentações quando ambas forem concluídas.
Para identificar se a mensagem possui somente estorno ou estorno + apontamento deverá verificar as seguintes situações:
Somente estorno: possui quantidade aprovada e refugado zerado ( ou sem conteúdo) e dados do ReversedReport.
Estorno + apontamento: possui ReversedReport informado e dados da ordem e quantidade aprovada ou refugada maior que zero.
2.2.3 Ponto de Entrada - MATI681CRG
Antes de executar a rotina de apontamento MATA681( MSExecAuto({|x,y| mata681(x,y)},aSH6,nOperation) ) será implementado um ponto de entrada para atribuir valores a tabela SH6. Este ponto será útil para atribuir algum valor para
campos que a integração não trata, ou algum campo específico utilizado pelo cliente. Será passado como parâmetro a variável aSH6.
Observação:
Nenhum campo da aSH6 que estiver no XML poderá ser alterado. Caso o ponto de entrada altere o conteúdo desses campos a rotina vai utilizar o conteúdo original.
2.3 Reporte de parada de produção
O apontamento de parada padrão para essa integração será o MATA682. Desenvolver adapter de apontamento de produção MATI682.
O Adapter fará a leitura do XML para gerar os dados que serão passados automaticamente para a rotina de apontamento MATA682. O XML contém inúmeros campos, porém para a integração Protheus com o PC-Factory vamos usar somente os descritos na tabela da mensagem do apontamento de parada no item 1.
O Adpater será desenvolvido usando padrão EAI. No caso dos apontamentos desenvolver apenas o processo de recebimento da mensagem - TRANS_RECEIVE. Usar como modelo o MATI010.
IMPORTANTE: Usar o mesmo desenvolvimento do ITEM 2.2. As duas rotinas de apontamento (produção e parada) geram a mesma tabela SH6, o que muda são os campos da mensagem.
O Adapter fará as seguintes validações antes de executar a rotina de apontamento MATA682.
- Irá validar se a mensagem é StopReport.
- Irá validar se a versão é 1.001
- Quando o nome do produto(Product: Name) for PPI, deverá verificar se a integração Protheus x PC-Factory está ativa(SOD.OD_ATIVO). Somente processar se estiver ativa, senão irá dar mensagem de retorno que a integração não foi realizada.
- Quando as tags CompanyId e BranchId não forem enviados pelo XML será utilizado o que estiver registrados nos parâmetros de configuração(appserver.ini) na configuração do WEBSERVICE. Abaixo exemplo no campo PREPAREIN.
- Os campos Máquina,Motivo de Parada, Data/Hora Inicio e Fim e Data/Hora Reporte serão obrigatórios.
Se precisar fazer alguma validação deverá usar o ponto de entrada MT680VAL. Ponto de entrada útil para validar se alguma informação deverá ser obrigatória. Estas validações ficarão a cargo dos clientes, pois cada um terá sua regra. Este ponto de entrada é usado tanto para apontamento de produção quanto para o apontamento de parada. Controlado pelas variáveis l682 e l681 (sendo .T. ou .F.)
Quando for apontamento de parada setar o SH6.H6_TIPO = 'I'.
O produto deverá ser a mão de obra. Gerado pelo sistema. Exemplo: SH6.H6_PRODUTO = MOD001
- A quantidade perda será gerada pelo sistema. SH6.H6_QTDPERD
- O campo SH6.H6_IDENT também é gerado pelo sistema
- O campo SH6.H6_TEMPO deve ser calculado pelo adapter. Deve ser o tempo total da parada.
Motivo de Parada
O motivo poderá ser cadastrado via integração. Deverá verificar se o motivo de parada está cadastrado. Caso não esteja deverá ser incluído o motivo utilizado no apontamento na tabela SX5.
O motivo de parada é cadastrado em tabela genérica - SX5.
Deverá pesquisar na tabela SX5 da seguinte maneira:
select X5_CHAVE from sx5990 where X5_TABELA = '44'
Onde:
- O código do motivo é X5_CHAVE
- A tabela do motivo é '44'.
Se não encontrar o motivo deverá incluir na SX5 usando código e descrição. Nesse caso a descrição deve ser obrigatória.
2.3.1 Mensagem de Retorno
Todo apontamento deverá enviar uma mensagem de retorno, indicando possíveis problemas ou processamento efetuado com sucesso.
A mensagem de retorno será a mesma do envio - StopReport. No caso do retorno deverá enviar somente a parte do ReturnContent(quando OK) ou ListOfMessages(quando erro). Da mesma forma que o apontamento de produção. Abaixo exemplo:
a) OK
<TOTVSMessage
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="">
<MessageInformation version="1.001">
<UUID>e0d43a18-ffc5-7bbd-e511-7a6794df2a3b</UUID>
<Type>Response</Type>
<Transaction>productionappointment</Transaction>
<StandardVersion>1.0</StandardVersion>
<SourceApplication>dts11cordas8480</SourceApplication>
<CompanyId>10</CompanyId>
<BranchId>10</CompanyId>
<Product name="Datasul" version="11.5.X"/>
<GeneratedOn>2015-09-30T10:50:38.123-03:00</GeneratedOn>
</MessageInformation>
<ResponseMessage>
<ReceivedMessage>
<SentBy>PPI</SentBy>
<UUID>44e8a200-461d-4f04-a7ce-953b15fb7075</UUID>
</ReceivedMessage>
<ProcessingInformation>
<ProcessedOn>2015-09-30T10:50:38.123-03:00</ProcessedOn>
<Status>OK</Status>
</ProcessingInformation>
<ReturnContent>
<ListOfInternalId>
<InternalId>
<Name>ProductionAppointmentInternalId</Name>
<Origin/>
<Destination>146284</Destination>
</InternalId>
</ListOfInternalId>
</ReturnContent>
</ResponseMessage>
</TOTVSMessage>
b) ERROR
A mesma mensagem, sem o ReturnContent. Vai usar a tag ListOfMessages para retornar a mensagem de erro.
<ProcessingInformation>
<ProcessedOn>2015-09-30T14:38:44</ProcessedOn>
<Status>ERROR</Status>
<ListOfMessages>
<Message type="ERROR" code="1">ItemCode nao cadastrado no protheus.</Message>
</ListOfMessages>
</ProcessingInformation>
Onde:
- TOTVSMessage xmlns:xsi Indica o xsd para gerarção do XML. O nome da mensagem deverá ser: StopReport_1_000
- MessageInformation version Indica a versão da mensagem. A versão deverá ser “1.001”
- UUID : Usar a mesma informação que veio na mensagem de apontamento
- Type: Tipo da mensagem. Gerar fixo “Response”
- Transaction: Indica o que está sendo enviado. A transação deverá ser:“StopReport”
- StandardVersion: Versão. Deverá ser “1.001”
- SourceApplication: Aplicação que está executando. Enviar SIGAPCP
- CompanyId: Código da empresa. Deverá retornar a empresa em que foi processado o apontamento
- BranchId: Código da filial. Deverá retornar a filial em que foi processado o apontamento
- Product: Name. Nome do produto. O Nome deverá ser WSPCP Version: Versão do RPO
- GenerateOn = Data e hora da geração da mensagem.
- ContextName = Sistema que gerou. Enviar Protheus
- SentBy = Quem originou a mensagem. No caso deverá ser PPI
- ProcessedOn = GenerateOn
- Status. Pode ser OK ou ERROR. Quando OK vai gerar o ReturnContent. Quando ERROR vai gerar ListOfMessages
- Name = StopReportInternalId
- Destination: Registro do apontamento. R_E_C_N_O
- Message type : Mensagem de erro.
Observações:
- O número do apontamento é enviado ao Pc-Factory pelo Protheus na mensagem de retorno da StopReport é corresponde ao RECNO da SH6. Este mesmo número será utilizado quando precisar registrar um estorno(IntegrationReport)
Para anteder esse processo deverá ser alterada a mensagem StopReport_1_000, criando a versão StopReport_1_001. Criar os seguintes campos:
- Adicionada a tag ReturnContent, que irá retornar o ID do apontamento de parada, para que seja possível realizar o estorno deste apontamento posteriormente.
- Adicionada a tag ReversedReport, que identifica que a mensagem está se tratando de um estorno de apontamento.
- Adicionada a tag IntegrationReport, que identifica qual é o registro que será estornado.
2.3.2 Estorno
Os estornos dos apontamentos de parada deverão seguir os procedimentos abaixo( mesmo formato do apontamento de produção):
- O estorno ocorre quando o campo o campo ReversedReport possuir o conteúdo TRUE.
Quando for estorno deverá, obrigatoriamente ter o número do apontamento, campo IntegrationReport. - Deverá executar a função A682Deleta. O estorno deverá se absear no nr. do registro (RECNO) da SH6 (IntegrationReport) que foi enviado no XML.
- O estorno pode ser gerado de duas formas no arquivo: somente o estorno ou estorno + apontamento. Quando a mensagem possuir o estorno e o apontamento só pode commitar as movimentações quando ambas forem concluídas.
Para identificar se a mensagem possui somente estorno ou estorno + apontamento deverá verificar as seguintes situações:
Somente estorno: possui somente as informações do ReversedReport e IntegrationReport com a demais tags sem dados.
Estorno + apontamento: possui ReversedReport e IntegrationReport informados e os demais dados obrigatórios (Máquina,Motivo de Parada, Data/Hora Inicio e Fim e Data/Hora Reporte ) preenchidos.
2.2.3 Ponto de Entrada - MATI681CRG
Antes de executar a rotina de apontamento MATA682( MSExecAuto({|x,y| mata682(x,y)},aSH6,nOperation) ) será implementado um ponto de entrada para atribuir valores a tabela SH6. Este ponto será útil para atribuir algum valor para
campos que a integração não trata, ou algum campo específico utilizado pelo cliente. Será passado como parâmetro a variável aSH6.
Observação:
Nenhum campo da aSH6 que estiver no XML poderá ser alterado. Caso o ponto de entrada altere o conteúdo desses campos a rotina vai utilizar o conteúdo original.
Vai usar o mesmo ponto de entrada que o MATA681. A rotina que chama a função pode ser verificada por meio de variáveis de controles.
<Na tabela abaixo informe quais são as rotinas envolvidas, o tipo de operação, a opção de menu e se necessário uma breve descrição das regras de negócio relacionadas a rotina>.
Rotina | Tipo de Operação | Opção de Menu | Regras de Negócio |
[MATA681 – Producao PCP Mod2] | [Alteração] | [Atualizações -> Movimentações -> Produção] | - |
[MATA682 – Apontar Hrs.improd] | [Alteração] | [Atualizações -> Movimentações-> Produção] | - |