Histórico da Página
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|
(Obrigatório)
Informações Gerais
Especificação | |||
Produto | Protheus | Módulo | SIGAPCP |
Segmento Executor |
| ||
Projeto1 | M_MAN_PCP002 | IRM1Epic | PCREQMANCORE1-957935 |
Requisito1Story | PCRQMANCORE1-10097130 | 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
Enviar o saldo de estoque do Protheus para o PC-Factory, por meio de solicitação do PC-Factory.
Enviar registros de saldo de estoque quando ocorrer alguma movimentação.
(Obrigatório)
Definição da Regra de Negócio
Gerenciar o envio de saldos em estoque do Protheus para o PC-Factory. Será criado duas opções de envio. A primeira será via Request, onde o PC-Factory solicita um saldo. A segunda startada via alguma movimentação que atualiza o saldo.
- Request
Para este tipo de atualização o PC-Factory solicita o saldo ao Protheus.
Será a usada a mensagem StockLevel_2_00. A mensagem possui duas partes. A parte de Request , onde são passados os parâmetros para o consulta do saldo, e a parte do Return, que contem o retorno do saldo.
O Request da mensagem possui as seguintes tags que serão usadas para o Protheus:
Bloco | Tag | Descrição | Observação |
RequestItemListOfRequest | ItemInternalId | Código do produto | |
ListOfRequest | ReferenceCode | Referência | Não usa |
ListOfRequestRequestItem | WarehouseInternalId | Código do depósito/local de estoque/Armazém | |
RequestItemListOfRequest | LotNumber | Lote | |
RequestItemListOfRequest | SubLotCode | SubLote | |
RequestItemListOfRequest | SerialNumber | Número de Série | |
RequestItemListOfRequest | Address | Localização | |
RequestItemListOfRequest | LotExpirationDate | Data de Validade |
A busca pode ocorrer das seguintes formas:
Por Produto: Retorna informação de todos os locais de estoque do produto.
Por Local de Estoque(Armazém): Retorna informação de todos os produtos no local de estoque.
Por Local de Estoque(Armazém) e Produto: Retorna informação sobre o Produto no Local de Estoque definido.
Para os demais campos, Lote, sub-Lote, número de série, localização e data de validade considerar somente se informar o código do produto. Se enviar estes campos sem o código do produto deve retornar mensagem de erro.
O Request poderá ser uma lista de solicitação.
O Return da mensagem possui as seguintes tags para o Protheus:
Bloco | Tag | Descrição | Observação | ||
ReturnContentType | ClosingStockDate | Data fechamento estoque | Não usa | ||
ListOfReturnItemReturnItem | CompanyId | Empresa | |||
ReturnItemListOfReturnItem | BranchId | Filial | |||
ReturnItemListOfReturnItem | CompanyInternalId | Empresa|Filial | |||
ReturnItemListOfReturnItem | ItemInternalId | Código do produto | SB2.B2_COD | ||
ListOfReturnItemReturnItem | ReferenceCode | Referencia | Não usa | ||
ListOfStockBalance | WarehouseInternalId | Local de Estoque(Armazém/Depósito) | SB2.B2_LOCAL | ||
ListOfStockBalance | UnitItemCostLotNumber | Custo unitário Número do ProdutoLote | SB8.B8_LOTECTL | ||
ListOfStockBalance | AverageUnitItemCost | Custo médio do Produto | LotExpirationDate | Data de validade | SB8.B8_DTVALID |
ListOfStockBalance | CurrentStockAmount | Saldo do Produto em quantidade no ERP | SerialNumber | Número de série | SBF.BF_NUMSERI |
ListOfStockBalance | AvailableStockAmount | Saldo disponível do Produto em quantidade no ERP | SubLotCode | SubLote | SB8.B8_NUMLOTE |
ListOfStockBalance | BookedStockAmount | Quantidade reservada em Estoque | Address | Localização | SBF.BF_LOCALIZ |
ListOfStockBalance | ValueOfCurrentStockAmountCurrentStockAmount | Saldo atual do estoque do produto Produto em valor | |||
ListOfStockBalance | LotNumber | Número do Lote | |||
ListOfStockBalance | LotExpirationDate | Data de validade | |||
ListOfStockBalance | SerialNumber | Número de série | |||
ListOfStockBalance | SubLotCode | SubLote | |||
ListOfStockBalance | Address | Localização | |||
quantidade | SB2.B2_QATU SB8.B8_SALDO SBF.BF_QUANT | ||||
ListOfStockBalance | BookedStockAmount | Quantidade reservada em Estoque | SB2.B2_RESERVA SB8.B8_EMPENHO SBF.BF_EMPENHO | ||
ListOfStockBalance | AvailableStockAmount | Saldo disponível do Produto em quantidade | SB2.B2_QATU - SB2.B2_RESERVA SB8.B8_SALDO - SB8.B8_EMPENHO SBF.BF_QUANT - SBF.BF_EMPENHO | ||
ListOfStockBalance | UnitItemCost | Custo unitário do Produto | --- | ||
ListOfStockBalance | AverageUnitItemCost | Custo médio do Produto | --- | ||
ListOfStockBalance | ValueOfCurrentStockAmount | Saldo atual do estoque do produto em valor | --- |
Alterar mensagem StockLevel, Alterar mensagem StockLevel, gerando a versão 2_000. A mensagem terá o formato abaixo:
RequestItemListOfRequest | ItemInternalId | Código do Item | xs:string | 15 |
ListOfRequest | ReferenceCode | Referância | xs:string | 20 |
ListOfRequestRequestItem | WarehouseInternalId | Código do depósito/local de estoque/Armazém | xs:string | 10 |
RequestItemListOfRequest | LotNumber | Número do Lote | xs:string | 10 |
RequestItemListOfRequest | SubLotCode | Sub Lote | xs:string | 10 |
RequestItemListOfRequest | SerialNumber | Número de Série | xs:string | 20 |
RequestItemListOfRequest | Address | Localização/Endereço | xs:string | 15 |
RequestItemListOfRequest | LotExpirationDate | Data de validade | xs:date | |
ReturnItemListOfReturnItem | CompanyId | Empresa | xs:string | |
ReturnItemListOfReturnItem | BranchId | Filial | xs:string | 2 |
ReturnItemListOfReturnItem | ItemInternalId | Código do Item | xs:string | |
ReturnItemListOfReturnItem | CompanyInternalId | Empresa|Filial | xs:string | |
ReturnItemListOfReturnItem | ReferenceCode | Referência | xs:string | 20 |
ListOfStockBalance | ||||
ListOfStockBalance | WarehouseInternalId | Código do depósito/local de estoque/Armazém | xs:string | 10 |
ListOfStockBalance | UnitItemCost | Custo unitário do Produto | xs:decimal | 17,4 |
ListOfStockBalance | AverageUnitItemCost | Custo médio do Produto | xs:decimal | 17,4 |
ListOfStockBalance | CurrentStockAmount | Saldo do Produto em quantidade | xs:decimal | 17,4 |
ListOfStockBalance | AvailableStockAmount | Saldo disponível do Produto em quantidade | xs:decimal | 17,4 |
ListOfStockBalance | BookedStockAmount | Quantidade reservada em Estoque | xs:decimal | 17,4 |
ListOfStockBalance | ValueOfCurrentStockAmount | Saldo atual do estoque do produto em valor | xs:decimal | 17,4 |
ListOfStockBalance | LotNumber | Número do Lote | xs:string | 10 |
ListOfStockBalance | SubLotCode | Sub Lote | xs:string | 10 |
ListOfStockBalance | LotExpirationDate | Data de Validade | xs:date | |
ListOfStockBalance | SerialNumber | Número de Série | xs:string | 20 |
ListOfStockBalance | Address | Localização/Endereço | xs:string | 15 |
1.1 MATI225
O Webservice deverá ser alterado para executar o adapter MATI225
Do Case
..........
Case cTransac == "STOCKLEVEL" //Saldo de estoque
changeEmp(cEmpIntg,cFilIntg)
aAdapter := MATI225(oXml, TRANS_RECEIVE, EAI_MESSAGE_BUSINESS)
aAdd(aAdapter, cEmpIntg)
aAdd(aAdapter, cFilIntg)
aAdd(aAdapter, "MATI225")
Será alterado o adapter do saldo, MATI225 para tratar a nova versão da mensagem e também a integração com o PC-Factory. Criar funções v1000 e v2000 para tratar o xml de acordo com a versao
// Trata recebimento de mensagens
Case ( nTypeTrans == TRANS_RECEIVE )
Do Case
// Recebimento da WhoIs
Case ( cTypeMessage == EAI_MESSAGE_WHOIS )
cXmlRet := '1.000'
// Recebimento da Response Message
Case ( cTypeMessage == EAI_MESSAGE_RESPONSE )
cXmlRet := 'Mensagem processada'
// Receipt Message (Aviso de receb. em transmissoes assincronas)
Case ( cTypeMessage == EAI_MESSAGE_RECEIPT )
cXmlRet := 'Mensagem recebida'
// Recebimento da Business Message
Case ( cTypeMessage == EAI_MESSAGE_BUSINESS )
CASE VERSAO = 1 OR VERSAO = ' ' OR VERSAO NULA
aRet := v1000(cXml, nTypeTrans, cTypeMessage)
CASE VERSAO = 2
aRet := v1000v2000(cXml, nTypeTrans, cTypeMessage)
..................
................
A função v1000 deve executar o processo ATUAL, ou seja, tratando a versão 1 da mensagem.
A função v2000 deve executar o processo considerando as alterações da mensagem para atender a integração com o PC-Factory.
Na v2000 deve considerar as mesmas regras de seleção dos campos, o que vai mudar é somente o formato do XML.
Após executar a geração da mensagem de retorno o WebService já está preparado para enviar a resposta, que será o saldo. A resposta conterá apenas um XML. Este XML pode ter um ou vários REQUEST.
Exemplo de XML Request:
<?xml version="1.0" encoding="UTF-8"?>
<TOTVSMessage xsi:noNamespaceSchemaLocation=""
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<MessageInformation version="1.000">
<UUID>459491c6-83bc-4bdf-9c49-71caac25de61</UUID>
<Type>BusinessMessage</Type>
<Transaction>stocklevel</Transaction>
<StandardVersion>1.0</StandardVersion>
<SourceApplication>PPI</SourceApplication>
<CompanyId>99</CompanyId>
<BranchId>01</BranchId>
<Product version="12" name="PPI" />
<GeneratedOn>2016-04-14T09:34:11.3137323-03:00</GeneratedOn>
</MessageInformation>
<BusinessMessage>
<BusinessEvent>
<Entity>stocklevel</Entity>
<Event>upsert</Event>
</BusinessEvent>
<BusinessContent>
<RequestItem>
<WarehouseInternalId>01</WarehouseInternalId>
<ItemInternalId>CRG01</ItemInternalId>
</RequestItem>
</BusinessContent>
</BusinessMessage>
</TOTVSMessage>
2. Movimentação
A integração deverá atualizar o saldo, sem que seja necessário realizar um request. Para atender essa necessidade deverá alterar as funções que atualizam saldo para gerar a mensagem.
Será a usada a mensagem ItemStockLevel_1_000.
Bloco | Tag | Descrição | Observação |
BusinessContentType | ItemCode | Código do produto | SB2.B2_COD |
BusinessContentType | ItemDescription | Descrição do item | SB1.B1_DESC |
ListOfStock | |||
ListOfStock | ReferenceCode | Referência | ------ |
ListOfStock | WarehouseCode | Depósito/Local de estoqe/Armazem | SB2.B2_LOCAL |
ListOfStock | LotCode | Número do Lote | SB8.B8_LOTECTL |
ListOfStock | SubLotCode | Sub-Lote | SB8.B8_NUMLOTE |
ListOfStock | NumberSeries | Número de Série | SBF.BF_NUMSERI |
ListOfStock | AddressCode | Endereço/Localização | SBF.BF_LOCALIZ |
ListOfStock | LotDueDate | Data de Validade | SB8.B8_DTVALID |
ListOfStock | CurrentStockAmount | Saldo de estoque | SB2.B2_QATU SB8.B8_SALDO SBF.BF_QUANT |
2.1 Criar a mensagem
Incluir a nova mensagem ItemStockLevel contendo os seguintes campos:
ListOfStock | BookedStockAmount | Quantidade Reservada | SB2.B2_RESERVA SB8.B8_EMPENHO SBF.BF_EMPENHO |
ListOfStock | AvailableStockAmount | Saldo disponível | SB2.B2_QATU - SB2.B2_RESERVA SB8.B8_SALDO - SB8.B8_EMPENHO SBF.BF_QUANT - SBF.BF_EMPENHO |
ListOfStock | QuantityUpdated | Quantidade Atualizada | |
ListOfStock | InputOutput | Entrada ou Saída | 1 = Entrada ou 2 = Saída |
2.1 Criar a mensagem
Incluir a nova mensagem ItemStockLevel contendo os seguintes campos:
BusinessContentType | ItemCode | Código Item | xs:string | 30 |
BusinessContentType | ItemDescription | Descrição Item | xs:string | |
BusinessContentType | ItemCode | Código Item | xs:string | 30 |
BusinessContentType | ItemDescription | Descrição Item | xs:string | 40 |
ListOfStock | ||||
ListOfStock | ReferenceCode | Referência | xs:string | 20 |
ListOfStock | WarehouseCode | Depósito/Local de estoqe/Armazem | xs:string | 10 |
ListOfStock | LotCode | Número do Lote | xs:string | 10 |
ListOfStock | SubLotCode | Sub Lote | xs:string | 10 |
ListOfStock | NumberSeries | Número de Série | xs:string | 20 |
ListOfStock | AddressCode | Endereço/Localização | xs:string | 15 |
ListOfStock | LotDueDate | Data de Validade | xs:date | |
ListOfStock | CurrentStockAmount | Saldo de estoque | xs:decimal | 17,4 |
ListOfStock | BookedStockAmount | Quantidade Reservada | xs:decimal | 17,4 |
ListOfStock | AvailableStockAmount | Saldo disponível | xs:decimal | 17,4 |
ListOfStock | QuantityUpdated | Quantidade atualizada | xs:decimal | 17,4 |
ListOfStock | InputOutput | Entrada ou Saída | xs:string | 1 |
2. 2,2 Atualização do saldo ( inlcusão do lote )
Quando incluir ou atualizar um saldo novo no ERP, deverá enviar a mensagem ao PC-Factory.
Todos os pontos que executam uma movimentação de estoque executam rotinas de atualização de saldo.
- NF de Entrada - Função B2ATUCOMD1
- NF de Venda - Função B2ATUCOMD2
- Mov. Internas - Função B2ATUCOMD3
Estas funções serão alteradas para executar o adapter com a opção de envio TRANS_SEND.
A execução do adapter nestas funções está condicionada a parametrização no PCPA109, do folder Saldo de Estoque. No PCPA109 também será definido o filtro sobre a tabela SB2.
2.2.1 Alterar Adapter MATI225 e MATA225PPIe MATA225 e funções de atualizações de saldo
Alterar as funções B2ATUCOMD1, B2ATUCOMD2 e B2ATUCOMD3 para executar a integração. Como será possível realizar filtros e algumas outras tratativas, deverá executar a função MATA225PPI que, depois de satisfazer os filtros deverá executar o adapter. Somente se o saldo for atualizado corretamente executar o adapter.
Exemplo:
If l PCPIntgPPI()
lRet := MATA225PPI()
EndIf
Mesmo modelo do MATA010 MATI010.
Criar a função MATA225PPI. Nesta função deverá executar a geração.
aRet := MATI225(cXml, nTypeTrans, cTypeMessage)
Onde: nTypeTrans=TRANS_SEND
<função para enviar o XML para o WebService da PPI e recuperar o retorno> : PCPWebsPPI
Se o retorno for positivo poderá prosseguir com a inclusão/alteração e geração do XML nos diretórios correspondentes.
<função para gerar o XML nos diretórios> : PCPXmlPPI
<função para gerar tabela de integração SOF> : PCPCriaSOF
IMPORTANTE: Considerar a parametrização do PCPA109 que indica quais dessas funções deverá gerar a mensagem. Considerar a seguinte regra:
- Caso SOE.OE_VAR1 = 'S1' a Função B2ATUCOMD1 deverá executar o MATA225PPI.
- Caso SOE.OE_VAR2 = 'S1' a Função B2ATUCOMD2 deverá executar o MATA225PPI.
- Caso SOE.OE_PARINTG = 'S1' a Função B2ATUCOMD3 deverá executar o MATA225PPI.
Exemplo Exemplo na B2ATUCOMD1 :
If l PCPIntgPPI() AND SOE.OE_VAR1 = 'S1'
lRet := MATA225PPI()
EndIf
A função MATI225 será responsável pela geração do XML. Somente o envio - TRANS_SEND.
Cabeçalho:
Quando for executado via integração com PCFactory deverá montar o cabeçalho da mensagem que consta com as tags TOTVSMessage e MessageInformation.
Abaixo modelo:
<?xml version="1.0" encoding="UTF-8" ?>
<TOTVSMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="xmlschema/general/events/ItemStockLevel_1_000.xsd">
<MessageInformation version="1.000">
<UUID>d97aeb6f-1440-8c81-fc13-ec8cf87b82ad</UUID>
<Type>BusinessMessage</Type>
<Transaction>ItemStockLevel</Transaction>
<StandardVersion>1.0</StandardVersion>
<SourceApplication>dts11cordas8480</SourceApplication>
<CompanyId>10</CompanyId>
<BranchId>10</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>
TOTVSMessage xmlns:xsi Indica o xsd para gerarção do XML. Usar o conteúdo do modelo.
MessageInformation version Indica a versão da mensagem. Usar “1.000”
UUID : Sequencial usado pelo EAI. Gerar fixo “1’.
Type: Tipo da mensagem. Gerar fixo “BusinessMessage”
Transaction: Indica o que está sendo enviado. Gerar fixo “ItemStockLevel”
StandardVersion: Versão. Gerar fixo “1.0”
SourceApplication: Aplicação que está executando. Gerar fixo “SIGAPCP”
CompanyId: Código da empresa. Empresa que estiver logada
BranchId: Código da filial. Filial logada.
UserId: Usuário. Usuário logado.
Product: Nome do produto. Name = Rotina que foi executada pelo menu | version = versão do programa.
GenerateOn = Data e hora da geração da mensagem
ContextName = Protheus
DeliveryType:Tipo de envio da mensagem. Gerar fixo “Sync”.
Dentro do BusinessMessage existe o bloco BusinessEvent com as seguintes tags:
<BusinessEvent>
<Entity>ItemStockLevel</Entity>
<Event>upsert</Event>
<Identification>
<key name="InternalId">651140049</key>
</Identification>
</BusinessEvent>
Entity: Entidade . Gerar fixo “ItemStockLevel”
Event: Inclusão/Alteração ou exclusão. Pode ser ‘delete’ ou ‘upsert’
Identification: Código do item
Usar key name="InternalID" : gerar com o código do item B2_COD
Dentro do BusinessMessage existe o bloco BusinessContent, que contém os dados do saldo do item. Ver na tabela da mensagem.
Filtros e geração do XML ():
No cadastro de parâmetros PCPA109, é definido se gera o arquivo XML nos diretórios. Quando este indicador, OD_GERAXML, estiver como 2('N') não será gravado o arquivo XML nos diretórios correspondentes. Será gravado apenas o conteúdo em tabela (SOF).
Caso o indicador , OD_GERAXML, estiver como 1('S') deverá seguir a seguinte regra de geração:
- Processados com sucesso : XML processado pelo PPI com retorno do PCFactory OK. XML será gravado no diretório cadastrado no campo Enviados(OD_DIRENV) do PCA109.
- Processados sem sucesso : XML processado pelo PPI com retorno de ERRO pelo PCFactory ou WebService desligado ( não conseguiu enviar o XML).
XML será gravado no diretório definido no campo Pendência (OD_DIRPEND) do PCA109. Caso gerar pendência, não deverá ser questionado se deseja salvar os dados, sempre deverá gerar pendência.
Importante: Os arquivos XML´s gerados e dados da tabela SOF somente serão gerados se a inclusão/alteração/exclusão do saldo for comitada no banco.
Os nomes do arquivos seguirão o seguinte padrão:
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 - ITEMSTOCKLEVEL
DATAHORA: Data e Hora do envio
REGISTRO: Código do item
Transação : Nome da tabela (SB2)
Registro : 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
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
IMPORTANTE:
Filtros:
No PCPA109 são definidos os filtros que indicam quais registros serão enviados ao PCFactory.
Para o saldo em estoque poderá ter até 3 filtros. Filtro da tabela SB2, SB8 e SBF.
Deverá ler os dados da tabelas SOE onde o campo OE_TABELA seja = 'SB2', OE_TABELA seja = 'SB8' e OE_TABELA seja = 'SBF'. Deverá fazer o JOIN destas tabelas para montar o filtro.O campo OE_FILTRO conterá o filtro que deverá ser aplicado ao registro que está sendo enviado. Somente poderá enviar(gerar xml) se satisfazer a condição do PCPA109.
Observação
<Regra de negócio é o que define a forma de fazer o negócio, o processo definido e/ou as regras que devem ser contempladas. Devem ser descritas restrições, validações, condições e exceções do processo. Caso necessário, incluir neste capítulo também regras de integridade que devem ser observadas no momento do desenvolvimento>.
<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 |
[ACAA040 – Parâmetros] | [Alteração] | [Atualizações -> Acadêmico-> Tesouraria] | - |
[ACAA050 – Negociação Financeira] | [Envolvida] | [Atualizações -> Acadêmico-> Tesouraria] | - |
[ACAA060 – Cadastro de Pedidos] | [Criação] | [Atualizações -> Acadêmico-> Cadastros] | - |
Exemplo de Aplicação:
- Criar o campo “% Mínimo Espécie” (AAA_PERESP) onde o usuário informará o % que o aluno pagará em dinheiro. Esse % poderá ser alterado durante a negociação.
- Criar o campo “Referência Mínima para Cálculo” (AAA_REFCAL) onde o usuário informará um dos 4 valores disponíveis para pagamento das mensalidades como a referência mínima para calcular o débito total do aluno.
- Criar o parâmetro MV_ACPARNE que definirá se as informações de “% Mínimo Espécie” e “Referência Mínima para Cálculo” serão obrigatórias.
- O parâmetro MV_ACPARNE deve ter as seguintes opções: 1=Obrigatório e 2=Opcional. Deve ser inicializado como opcional>.
Tabelas Utilizadas
- SE2 – Cadastro de Contas a Pagar
- FI9 – Controle de Emissão de DARF>.
Opcional
Protótipo de Tela
<Caso necessário inclua protótipos de telas com o objetivo de facilitar o entendimento do requisito, apresentar conceitos e funcionalidades do software>.
Protótipo 01
Opcional
Fluxo do Processo
<Nesta etapa incluir representações gráficas que descrevam o problema a ser resolvido e o sistema a ser desenvolvido. Exemplo: Diagrama - Caso de Uso, Diagrama de Atividades, Diagrama de Classes, Diagrama de Entidade e Relacionamento e Diagrama de Sequência>.
Opcional
Dicionário de Dados
Arquivo ou Código do Script: AAA – Negociação Financeira / *Versao=CP.2014.12_03*/
Índice | Chave |
01 | <FI9_FILIAL+FI9_IDDARF+FI9_STATUS> |
02 | <FI9_FILIAL+FI9_FORNEC+ FI9_LOJA+FI9_EMISS+FI9_IDDARF> |
03 | <FI9_FILIAL+FI9_FORNEC+ FI9_LOJA+FI9_PREFIX+FI9_NUM+FI9_PARCEL+FI9_TIPO> |
Campo | <AAA_PERESP> |
Tipo | <N> |
Tamanho | <6> |
Valor Inicial | <Varia de acordo com o tipo informado. Por exemplo, quando o campo “tipo” for date, neste campo pode ser informado uma data>. |
Mandatório | Sim ( ) Não ( ) |
Descrição | <Referência Mínima para Cálculo> |
Título | <Ref.Calc.> |
Picture | <@E999.99> |
Help de Campo | <Informar o % que o aluno pagará em dinheiro. Esse % poderá ser alterado durante a negociação> |
(Opcional)
Grupo de Perguntas
<Informações utilizadas na linha Protheus>.
Nome: FINSRF2
X1_ORDEM | 01 |
X1_PERGUNT | Emissão De |
X1_TIPO | D |
X1_TAMANHO | 8 |
X1_GSC | G |
X1_VAR01 | MV_PAR01 |
X1_DEF01 | Comum |
X1_CNT01 | '01/01/08' |
X1_HELP | Data inicial do intervalo de emissões das guias de DARF a serem consideradas na seleção dos dados para o relatório |
(Opcional)
Consulta Padrão
<Informações utilizadas na linha Protheus>
Consulta: AMB
Descrição | Configurações de Planejamento |
Tipo | Consulta Padrão |
Tabela | “AMB” |
Índice | “Código” |
Campo | “Código”; ”Descrição” |
Retorno | AMB->AMB_CODIGO |
EndIf
- Quando o saldo for atualizado por uma atualização do PC-Factory não deverá enviar mensagem de atualização de saldo. Deve validar a origem da atualização.
Na mensagem de apontamento de produção usa-se "Product name" que indica quem está enviado o registro. No caso do TOTVS MES essa informação é gravada na SH6.H6_OBSERVA = 'TOTVSMES'.
Quando for movimentação interna é registrado na SD3.D3_OBSERVA = 'TOTVSMES'. Desta forma somente executar as funções B2AtuComD1,B2AtuComD2 ou B2AtuComD3 se não for movimentação da PPI, ou seja, D3_OBSERVA diferente e TOTVSMES. - Na mensagem o campo QuantityUpdated corresponde a quantidade atualizada, ou seja, a quantidade que esta sendo movimentada.
Exemplo(B2AtuComD3): Replace B2_QATU With B2_QATU + (SD3->D3_QUANT * nMultiplic) .
Usar D3_QUANT para gerar a quantidade atualizada - Na mensagem o campo InputOutput indica se a movimentação é uma entrada ou saída.
Exemplo(B2AtuComD3): Replace B2_QATU With B2_QATU + (SD3->D3_QUANT * nMultiplic) .
Usar a variável nMultiplic para registrar. Se for menor que zero gravar 2 (Saída), senão gravar 1 (Entrada).
A função MATI225 será responsável pela geração do XML. Somente o envio - TRANS_SEND.
Cabeçalho:
Quando for executado via integração com PCFactory deverá montar o cabeçalho da mensagem que consta com as tags TOTVSMessage e MessageInformation.
Abaixo modelo:
<?xml version="1.0" encoding="UTF-8" ?>
<TOTVSMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="xmlschema/general/events/ItemStockLevel_1_000.xsd">
<MessageInformation version="1.000">
<UUID>d97aeb6f-1440-8c81-fc13-ec8cf87b82ad</UUID>
<Type>BusinessMessage</Type>
<Transaction>ItemStockLevel</Transaction>
<StandardVersion>1.0</StandardVersion>
<SourceApplication>dts11cordas8480</SourceApplication>
<CompanyId>10</CompanyId>
<BranchId>10</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>
Onde:
TOTVSMessage xmlns:xsi Indica o xsd para gerarção do XML. Usar o conteúdo do modelo.
MessageInformation version Indica a versão da mensagem. Usar “1.000”
UUID : Sequencial usado pelo EAI. Gerar fixo “1’.
Type: Tipo da mensagem. Gerar fixo “BusinessMessage”
Transaction: Indica o que está sendo enviado. Gerar fixo “ItemStockLevel”
StandardVersion: Versão. Gerar fixo “1.0”
SourceApplication: Aplicação que está executando. Gerar fixo “SIGAPCP”
CompanyId: Código da empresa. Empresa que estiver logada
BranchId: Código da filial. Filial logada.
UserId: Usuário. Usuário logado.
Product: Nome do produto. Name = Rotina que foi executada pelo menu | version = versão do programa.
GenerateOn = Data e hora da geração da mensagem
ContextName = Protheus
DeliveryType:Tipo de envio da mensagem. Gerar fixo “Sync”.
Dentro do BusinessMessage existe o bloco BusinessEvent com as seguintes tags:
<BusinessEvent>
<Entity>ItemStockLevel</Entity>
<Event>upsert</Event>
<Identification>
<key name="InternalId">651140049</key>
</Identification>
</BusinessEvent>
Onde:
Entity: Entidade . Gerar fixo “ItemStockLevel”
Event: Inclusão/Alteração ou exclusão. Pode ser ‘delete’ ou ‘upsert’
Identification: Código do item
Usar key name="InternalID" : gerar com o código do item B2_COD
Dentro do BusinessMessage existe o bloco BusinessContent, que contém os dados do saldo do item. Ver na tabela da mensagem.
Filtros e geração do XML ():
No cadastro de parâmetros PCPA109, é definido se gera o arquivo XML nos diretórios. Quando este indicador, OD_GERAXML, estiver como 2('N') não será gravado o arquivo XML nos diretórios correspondentes. Será gravado apenas o conteúdo em tabela (SOF).
Caso o indicador , OD_GERAXML, estiver como 1('S') deverá seguir a seguinte regra de geração:
- Processados com sucesso : XML processado pelo PPI com retorno do PCFactory OK. XML será gravado no diretório cadastrado no campo Enviados(OD_DIRENV) do PCA109.
- Processados sem sucesso : XML processado pelo PPI com retorno de ERRO pelo PCFactory ou WebService desligado ( não conseguiu enviar o XML).
XML será gravado no diretório definido no campo Pendência (OD_DIRPEND) do PCA109. Caso gerar pendência, não deverá ser questionado se deseja salvar os dados, sempre deverá gerar pendência.
Em ambos os casos(sucesso ou erro/pendencia), ocorrendo o commit, será gerada a tabela SOF.
Importante: Os arquivos XML´s gerados e dados da tabela SOF somente serão gerados se a inclusão/alteração/exclusão do saldo for comitada no banco.
Os nomes do arquivos seguirão o seguinte padrão:
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 - ITEMSTOCKLEVEL
DATAHORA: Data e Hora do envio
REGISTRO: Código do item+ R_E_C_N_O+Tabela. A tabela pode ser SB2, SB8 ou SBF, dependendo da origem do saldo.
A tabela SOF conterá os seguintes campos:
Transação : Nome da tabela (SB2,SB8 ou SBF)
Registro : Código do item+ R_E_C_N_O+Tabela
Status: 1 - OK; 2 - Pend; 3 - Erro
Gerou XML : Sim ou não
Nome arquivo XML
Data Envio
Hora de envio
Usuário
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
IMPORTANTE:
- Só poderá ter uma pendência para o registro.
- Para gerar o XML e gravar a tabela SOF 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 pendencia deverá ser excluída e trabalhar somente com a última mensagem, que poderá ser enviada sem problemas ou gerar nova pendência.
Filtros:
No PCPA109 são definidos os filtros que indicam quais registros serão enviados ao PCFactory.
Para o saldo em estoque poderá ter até 3 filtros. Filtro da tabela SB2, SB8 e SBF.
Deverá ler os dados da tabelas SOE onde o campo OE_TABELA seja = 'SB2', OE_TABELA seja = 'SB8' e OE_TABELA seja = 'SBF'.Deverá seguir a regra abaixo:
- Se o item controlar endereço (B1-LOCALIZ) deverá usar somente o filtro SBF
- Se o item controlar rastro (B1_rastro) deverá usar somente o filtro SB8
- Não usando as parametrizações acima usar filtro da SB2
O campo OE_FILTRO conterá o filtro que deverá ser aplicado ao registro que está sendo enviado. Somente poderá enviar(gerar xml) se satisfazer a condição do PCPA109.
Observação
- Se não existir filtro na SOE , OE_FILTRO, enviará todos os registros.
Endereçamento:
Quando o item controla endereçamento(B1_LOCALIZ), existe a rotina MATA265 que efetiva o endereçamento. Nesse caso as rotinas que geram/atualizam saldo não deverão enviar a mensagem, pois atualizam somente a SB2,. A mensagem será gerada somente na confirmação do MATA265.
Desta forma tem que realizar a chamada da função MATA225PPI na Function GravaSBF.
2.3 Inclusão de saldo
As rotinas de inclusão de saldo não executam as função de atualização da SB2 (B2ATUCOMD1,B2ATUCOMD2 e B2ATUCOMD3) .
Serão alteradas as rotinas de saldo inicial do PCP e Estoque:
- MATA220
- MATA805
Verificar os controles dos itens:
- Se o item controlar endereço (B1-LOCALIZ) deverá gerar a mensagem usando a tabela SBF
- Se o item controlar rastro (B1_rastro) deverá gerar a mensagem usando a tabela SB8
- Não usando as parametrizações acima gerar usando a tabela SB2
IMPORTANTE: Considerar a parametrização do PCPA109 que indica se na inclusão de saldo deverá ser integrada.Considerar a seguinte regra:Somente integrar(executar o MATA225PPI) se o campo SOE.OE_VAR3 = '1'.
Exemplo:
If PCPIntgPPI() AND SOE.OE_VAR3= '1'
lRet := MATA225PPI()
EndIf
Deve seguir a mesma regra de geração do XML, geração de pendências, utilização de filtros conforme tópico 2.2 desta especificação.
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
(Opcional)
Grupo de Perguntas
<Informações utilizadas na linha Protheus>.
(Opcional)
Consulta Padrão
<Informações utilizadas na linha Protheus>
(Opcional)
Estrutura de Menu
<Informações utilizadas na linha Datasul>.
(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*
[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. |
---|