Histórico da Página
...
Ponto de entrada
...
que permite a manipulação de informações do MNTNG
Características do Requisito
Linha de Produto: | Microsiga Protheus | ||||
Segmento: | Manufatura | ||||
Módulo: | SIGAMNT - Manutenção de Ativos e Gestão de Frotas | ||||
Rotina: |
| ||||
Países: | Todos | ||||
Bancos de Dados: | Todos | ||||
Sistemas Operacionais: | Todos |
Ponto de Entrada
Descrição: | Ponto de Entrada para utilização no MNT NG que permite customizações nos processos inclusão, validação e cancelamento das ordens de serviço.em processos do MNTNG | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Localização: | SIGAMNT: Atualizações/Controle de Oficina/Ordem de Serviço/Corretiva. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Programa Fonte: | MNTNG.APW | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Função: | MNTNG() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Parâmetros: |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ParamIXB[2] | obejct | Objeto com referência ao webservice. |
| Eventos: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ID | Conteúdo do objeto no 2º parâmetro | CREATED_ORDER / CREATE_VALID_ORDER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bloco de código | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
title | Exemplo do conteúdo |
---|---|
collapse | true |
|
|
|
|
|
|
|
|
|
|
|
title | Exemplo do conteúdo |
---|---|
collapse | true |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Retorno:
O ponto de entrada é chamado em vários momentos dentro do fonte, na 2ª posição da estrutura do vetor é passado um ID que identifica qual é este momento. De acordo com o ID o retorno pode ser diferente, como citado na tabela abaixo:
ID | MOMENTO DE EXECUÇÃO DO PONTO DE ENTRADA | RETORNO |
---|---|---|
CREATED_ORDER | Após a inclusão de uma ordem de serviço | Nulo |
CREATE_VALID_ORDER | Antes da inclusão de uma ordem de serviço | String (retorna string com motivo quando a validação é negativa. Quando é positivo deve retornar vazio) |
UPDATE_VALID_ORDER | Antes da alteração de uma ordem de serviço | String (retorna string com motivo quando a validação é negativa. Quando é positivo deve retornar vazio) |
FINISHED_ORDER | Após a finalização de uma ordem de serviço | Nulo |
FINISH_VALID_ORDER | Validação antes da finalização de uma ordem de serviço | String (retorna string com motivo quando a validação é negativa. Quando é positivo deve retornar vazio) |
CANCEL_VALID | Validação antes do cancelamento de uma ordem de serviço | String (retorna string com motivo quando a validação é negativa. Quando é positivo deve retornar vazio) |
CREATED_PLANNED_INPUT | Após incluir um insumo previsto | Nulo |
COUNTER_VALID_FINISH | Validação de contador na finalização | String (retorna string com motivo quando a validação é negativa. Quando é positivo deve retornar vazio) |
FILTER_PRODUCT | Filtro para produtos | String que será adicionada à cláusura 'where' para produtos (SB1). |
FILTER_EQUIPMENT | Filtro para bens | String que será adicionada à cláusura 'where' para bens (ST9). |
FILTER_SERVICE | Filtro para serviços | String que será adicionada à cláusura 'where' para serviços (ST4). |
FILTER_COSTCENTER | Filtro para centros de custo | String que será adicionada à cláusura 'where' para centros de custo (CTT). |
FILTER_FAMILY | Filtro para famílias de bens | String que será adicionada à cláusura 'where' para famílias de bens (ST6). |
FILTER_TOOL | Filtro para ferramentas | String que será adicionada à cláusura 'where' para ferramentas (SH4). |
FILTER_AREA | Filtro para áreas da manutenção | String que será adicionada à cláusura 'where' para área (STD). |
FILTER_THIRDPART | Filtro para terceiros | String que será adicionada à cláusura 'where' terceiros (SA2). |
DESCRIPTION_LOCALIZATION | Sincronização, ao gerar o arquivo que contém dados dos bens | String que será utilizada para localização do bem. |
|
O ponto de entrada é chamado em vários momentos dentro do fonte, na 2ª posição da estrutura do vetor é passado um ID que identifica qual é este momento. De acordo com o ID o retorno pode ser diferente, como citado na tabela abaixo:
ID | Tipo | Descrição | ||
---|---|---|---|---|
CREATED_ORDER | null | Sem retorno. | ||
CREATE_VALID_ORDER | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. | ||
UPDATE_VALID_ORDER | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. | ||
FINISHED_ORDER | null | Sem retorno. | ||
FINISH_VALID_ORDER | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. | ||
CANCEL_VALID | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. | ||
CREATED_PLANNED_INPUT | null | Sem retorno. | ||
COUNTER_VALID_FINISH | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. | ||
FILTER_PRODUCT | string | Condição SQL que será inclusa na cláusula WHERE para tabela Produtos - SB1. | ||
FILTER_EQUIPMENT | string | Condição SQL que será inclusa na cláusula WHERE para tabela Bens - ST9/Localizações - TAF. | ||
FILTER_SERVICE | string | Condição SQL que será inclusa na cláusula WHERE para tabela Serviços - ST4. | ||
FILTER_COSTCENTER | string | Condição SQL que será inclusa na cláusula WHERE para tabela Centro de Custos - CTT. | ||
FILTER_FAMILY | string | Condição SQL que será inclusa na cláusula WHERE para tabela Família de Bens - ST6. | ||
FILTER_TOOL | string | Condição SQL que será inclusa na cláusula WHERE para tabela Ferramentas - SH4. | ||
FILTER_AREA | string | Condição SQL que será inclusa na cláusula WHERE para tabela Área - STD. | ||
FILTER_THIRDPART | string | Condição SQL que será inclusa na cláusula WHERE para tabela Terceiros - SA2. | ||
DESCRIPTION_LOCALIZATION | string | String que será utilizada para localização do bem. | ||
FILTER_ORDER | string | Condição SQL que será inclusa na cláusula WHERE para tabela Ordens de Serviço - STJ. | ||
FILTER_REQUEST | string | Condição SQL que será inclusa na cláusula WHERE para tabela Solicitações de Serviço - TQB. | ||
FILTER_WAREHOUSE | string | Condição SQL que será inclusa na cláusula WHERE para tabela Saldos físicos - SB2 | ||
FILTER_EXECUTOR | string | Condição SQL que será inclusa na cláusula WHERE e filtrar executantes de S.S. com o usuário logado. | ||
UPDATE_FINISH_ORDER | object | JSON contendo informações da finalização da O.S. | ||
COMPANY_GROUP_REJECT | array | Array com os grupos de empresas que devem ser ignorados pelo app
| ||
SEARCH_FIELD_SB1 | STRING | Nome do campo utilizado para realizar a pesquisa/busca de produto (insumo da ordem de serviço.) |
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#include "PROTHEUS.ch"
User Function MNTNG()
Local cId := PARAMIXB[1] //Indica o momento da chamada do PE
Local oWS
Local oParser
Local aArea
Local aAreaSTJ
Local nInput := 0
Local aDate
Local cType
Local lIsDone
Local cTask
Local cCode
Local nAmount
Local cOrder
Local cPlan
Local aDate
Local lOk
Local cAddress := ""
Local cCodBem := ""
If cId != 'COMPANY_GROUP_IGNORE'
oWS := PARAMIXB[2] //Objeto com referência ao webservice
EndIf
If cId == "CREATE_VALID_ORDER" .OR. cId == "UPDATE_VALID_ORDER" //valida inclusão e alteração da ordem
//Bloco a seguir realiza validações dos insumos
If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
If AttIsMemberOf( oParser, "inputs" ) .And. Len( oParser:inputs ) > 0
cOrder := IIf( AttIsMemberOf( oParser, 'code' ), oParser:code, '' )
cPlan := IIf( AttIsMemberOf( oParser, 'plan' ), oParser:plan, '000000' )
//Bloco abaixo realiza validações nos insumos
For nInput := 1 To Len( oParser:inputs )
oInput := oParser:inputs[ nInput ]
cType := IIf( AttIsMemberOf( oInput , 'type' ), oInput:type, '' )
lIsDone := IIf( AttIsMemberOf( oInput , 'isDone'), oInput:isDone, .F. )
//Neste exemplo haverá validações somente para produtos realizados
If cType != "P" .Or. !lIsDone
Loop
EndIf
aDate := { dDatabase, '08:00' }
lOk := .T.
If AttIsMemberOf( oInput, "startDate" )
aDate := StrTokArr( oInput:startDate, " " )
ElseIf AttIsMemberOf( oInput, "date" )
aDate := StrTokArr( oInput:date, " " )
EndIf
aDate := { STOD( aDate[1] ), aDate[2] }
| ||||||||
Bloco de código | ||||||||
| ||||||||
#include "PROTHEUS.ch" User Function MNTNG() Local cId := PARAMIXB[1] //Indica o momento da chamada do PE Local oWS := PARAMIXB[2] //Objeto com referência ao webservice Local oParser Local aArea Local aAreaSTJ Local nInput := 0 Local aDate Local cType Local lIsDone Local cTask Local cCode Local nAmount Local cOrder Local cPlan Local aDate Local lOk Local cAddress := "" Local cCodBem := "" If cId == "CREATE_VALID_ORDER" .OR. cId == "UPDATE_VALID_ORDER" //valida inclusão e alteração da ordem //Bloco a seguir realiza validações dos insumos If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json If AttIsMemberOf( oParser, "inputs" ) .And. Len( oParser:inputs ) > 0 cOrder := IIf( AttIsMemberOf( oParser, 'code' ), oParser:code, '' ) //Neste exemplo haverá validações somente quando informar data anterior a data atual cPlan := IIf( AttIsMemberOf( oParser, 'plan' ), oParser:plan, '000000' )If aDate[1] >= dDatabase //Bloco abaixo realiza validações nos insumos Loop For nInput := 1 To Len( oParser:inputs )EndIf oInputcTask := oParser:inputs[ nInput ] IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' ) cTypecCode := IIf( AttIsMemberOf( oInput , 'typecode' ), oInput:typecode, '' ) lIsDonenAmount := IIf( AttIsMemberOf( oInput , 'isDoneamount'), oInput:isDoneamount, .F.0 ) //NesteIf exemplocId haverá validações somente para produtos realizados == "CREATE_VALID_ORDER" IflOk cType !:= "P" .OrF. !lIsDone Else Loop EndIf aDate := { dDatabase, '08:00' } /*Trecho abaixo verifica se o insumo já está gravado no lOkbanco := .T. If AttIsMemberOf( oInput, "startDate" ) caso exista não há necessidade de validação*/ aDate := StrTokArr( oInput:startDate, dbSelectArea(" STL" ) ElseIf AttIsMemberOfdbSetOrder( oInput, "date"1 ) If !dbSeek( aDate := StrTokArr( oInput:date, " " )xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; EndIf PADR( cPlan, Len( STL->TL_PLANO aDate) :=) {+ STODPADR( aDate[1] )cTask, aDate[2] } Len( STL->TL_TAREFA ) ) + ; //Neste exemplo haverá validações somente quando informar data anterior a data atualcType + PADR( cCode, Len( STL->TL_CODIGO ) ) ) If aDate[1] >= dDatabase lOk := .F. Loop Else EndIf lOk := .F. cTask := IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' ) //Verificação abaixo para garantir que o cCodeinsumo não existe := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' ) no banco nAmount := IIfWhile !STL->( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 ) Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +; If cId == "CREATE_VALID_ORDER" STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) lOk := .F.)+ ; Else PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ; /*Trecho abaixo verifica se o insumo já está gravado no banco cType + PADR( cCode, Len( STL->TL_CODIGO ) ) caso exista não há necessidade de validação*/ If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é dbSelectArea("STL") insumo realizado dbSetOrder( 1 ) .And. nAmount == STL->TL_QUANTID //comparação de quantidade If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; lOk := .T. //já está gravado e não há necessidade de validar PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ; Exit cType + PADR( cCode, Len( STL->TL_CODIGO ) ) ) EndIf lOk := .F. dbSelectArea("STL") Else dbSkip() lOk := .F. EndDo //Verificação abaixo paraEndIf garantir que o insumo não existe no banco EndIf While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +; If !lOk Return 'Não é permitido realizar insumos do tipo produto com a data STL->TL_TAREFAretroativa. ' + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; ; 'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ; aDate[1] ) EndIf Next nInput EndIf cType + PADR( cCode, Len( STL->TL_CODIGO ) )EndIf ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json If Val( STL->TL_SEQRELA ) >If 0 ; Empty( oParser:message )//verifica secampo observação éfoi insumopassado realizadovazio Return "A observação do cancelamento é obrigatória." EndIf .And. nAmount == STL->TL_QUANTID //comparação de quantidadeEndIf ElseIf cId == "FINISH_VALID_ORDER" If FWJsonDeserialize(oWS:GetContent(), @oParser) If Empty( oParser:observation ) //verifica campo observação foi passado vazio Return "Campo observação deve lOkser := .T. //já está gravado e não há necessidade de validar informado." EndIf EndIf ElseIf cId == "FINISHED_ORDER" If FWJsonDeserialize(oWS:GetContent(), @oParser) Exit aArea := GetArea() EndIf aAreaSTJ := STJ->(GetArea()) dbSelectArea("STJ") dbSelectAreadbSetOrder("STL"1) If dbSeek(xFilial("STJ") + oParser:order + oParser:plan) dbSkip(Reclock("STJ", .F.) STJ->TJ_DTPRINI := STJ->TJ_DTMRINI EndDo STJ->TJ_HOPRINI := STJ->TJ_HOMRINI STJ->TJ_DTPRFIM EndIf:= STJ->TJ_DTMRFIM STJ->TJ_HOPRFIM EndIf := STJ->TJ_HOMRFIM If !lOkMsUnlock() Endif Return 'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + ; RestArea(aAreaSTJ) RestArea(aArea) Endif ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos 'Verifique oReturn insumo/produto" 'AND +B1_GRUPO cCode= + ' data ' + Dtoc( aDate[1] ) 97'" ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem cCodBem EndIf:= PARAMIXB[3] dbSelectArea("ST9") Next nInputdbSetOrder(1) If dbSeek( xFilial("ST9") + EndIf cCodBem ) .And. !Empty( ST9->T9_CLIENTE + EndIfST9->T9_LOJACLI ) ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem cAddress := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json + ST9->T9_LOJACLI,"SA1->A1_END") EndIf Return If EmptyAlltrim( oParser:messagecAddress )//verifica campo observação foi passado vazio ElseIf cId == 'FILTER_ORDER' Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' Return "A observação do cancelamento é obrigatória." ) ) ElseIf cId EndIf== 'FILTER_REQUEST' Return ' AND EndIf TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) ) ElseIf cId == "'UPDATE_FINISH_VALID_ORDER"' If FWJsonDeserializeAttIsMemberOf( oWS:GetContent(), @oParser) If Empty( oParser:observation ) //verifica campo observação foi passado vazio , 'counter' ) If Len( oWS:counter ) > 0 Return "Campo observação deve ser informado." oWS:counter[1]:value EndIf EndIf := 3334 ElseIf cId == "FINISHED_ORDER" oWS:counter[1]:time If FWJsonDeserialize(oWS:GetContent(), @oParser) := '10:10' EndIf aArea := GetArea() If Len( oWS:counter ) > 1 aAreaSTJ := STJ->(GetArea()) oWS:counter[2]:value dbSelectArea("STJ"):= 3334 dbSetOrder(1) oWS:counter[2]:time If dbSeek(xFilial("STJ") + oParser:order + oParser:plan) := '10:10' EndIf Reclock("STJ", .F.) EndIf If STJ->TJ_DTPRINI := STJ->TJ_DTMRINIAttIsMemberOf( oWS, 'observation' ) STJ->TJ_HOPRINIoWS:observation := STJ->TJ_HOMRINI 'ALTERADO PELO P.E. MNTNG' EndIf STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIMReturn oWS EndIf Return |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch" User Function MNTNG() Local STJ->TJ_HOPRFIMcId := STJ->TJ_HOMRFIM PARAMIXB[1] //Indica o momento da chamada do PE If cId == 'FILTER_WAREHOUSE' Return " AND B2_LOCAL = '01' " EndIf Return |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch" User Function MNTNG MsUnlock() Local cId := PARAMIXB[1] //Indica o Endif momento da chamada do PE If cId RestArea== 'COMPANY_GROUP_IGNORE' Return {"T1", "T2"} // Indica os grupos que devem ser ignorados pelo app EndIf Return |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch" User Function MNTNG() (aAreaSTJ) RestArea(aArea) Endif Local cId ElseIf cId == "FILTER_PRODUCT":= PARAMIXB[1] //adicionaIndica o filtromomento parada buscachamada dedo produtosPE Local cEmail Return " AND B1_GRUPO = '97'" ElseIf If cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem 'FILTER_EXECUTOR' cCodBemcEmail := PARAMIXB[3] //Indica o email do usuário logado Return dbSelectArea("ST9") AND TQ4_EMAIL1 = " + ValtoSql( cEmail dbSetOrder(1) EndIf Return |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch" User Function MNTNG() If dbSeek( xFilial("ST9") + cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI ) Local cId := PARAMIXB[1] //Indica o momento da chamada do PE If cAddresscId := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END") == 'SEARCH_FIELD_SB1' Return "B1_FAMILY" // indica EndIf o nome do campo para pesquisa de produto Return Alltrim( cAddress ) EndIf Return |