Histórico da Página
...
Descrição
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 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: |
|
Observações
Exemplos
Preview
Veja também
Idioma
Português(Brasil)
Versões
A partir 12.1.16
Sistemas Operacionais Suportados
Todos
Compatível com as Bases de Dados
Todas
Updates
Parâmetros
Posição | Tipo | Descrição |
---|---|---|
1 | C | ID do local de execução do ponto de entrada |
2 | O | Objeto com referência ao webservice |
CREATED_ORDER
title | Exemplo do conteúdo |
---|---|
linenumbers | true |
collapse | true |
|
|
|
|
|
|
|
|
|
|
title | Exemplo do conteúdo |
---|---|
linenumbers | true |
collapse | true |
|
|
|
|
|
|
|
|
Bloco de código | ||||
---|---|---|---|---|
| ||||
{
"startDate":"20180326 17:55",
"observation":"444",
"plan":"000000",
"order":"001007",
"json":"{\"startDate\":\"20180326 17:55\",\"observation\":\"teste\",\"inputs\":[{\"amount\":1,\"isDone\":true,\"unity\":\"PC\",\"task\":\"0\",\"destiny\":\"A\",\"code\":\"005\",\"type\":\"P\",\"warehouse\":\"01\",\"date\":\"20180326 17:55\",\"note\":\"teste\"}],\"plan\":\"000000\",\"counter\":[{\"datetime\":\"20180104 08:05\",\"value\":1000}],\"service\":\"CORG2\",\"endDate\":\"20180326 17:55\",\"equipment\":\"EMPGEN001\",\"code\":\"001007\",\"type\":\"C\",\"checklist\":[]}",
"counter":[
{
"value":1001,
"datetime":"20180326 18:06"
}
],
"hourCounter":"18:06",
"endDate":"20180326 17:55",
"fault":"01"
} |
Bloco de código | ||||
---|---|---|---|---|
| ||||
{
"message":"observação da ordem de serviço", //observação
"plan":"000000", //código do plano da ordem
"order":"001006" //código da ordem de serviço
} |
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 |
FINISHED_ORDER | Após a finalização de uma ordem de serviço | Nulo |
CANCEL_VALID | Validação antes do cancelamento de uma ordem de serviço | Vetor: 1º posição: boleano que indica validação 2º posição: string para indicar o motivo quando validação retorna negativo. |
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_ORDER | Filtro para ordens de serviço | String que será adicionada à cláusura 'where' para ordens de serviço (STJ). |
FILTER_THIRDPART | Filtro para terceiros | String que será adicionada à cláusura 'where' terceiros (SA2). |
Eventos de chamada do Ponto de Entrada
Variáveis
Programa Fonte
MNTNG.APW
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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:
|
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] }
//Neste exemplo haverá validações somente quando informar data anterior a data atual
If aDate[1] >= dDatabase
Loop
EndIf
cTask := IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' )
cCode := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' )
nAmount := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 )
If cId == "CREATE_VALID_ORDER"
lOk := .F.
Else
/*Trecho abaixo verifica se o insumo já está gravado no banco
caso exista não há necessidade de validação*/
dbSelectArea("STL")
dbSetOrder( 1 )
If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
cType + PADR( cCode, Len( STL->TL_CODIGO ) ) )
lOk := .F.
Else
lOk := .F.
//Verificação abaixo para garantir que o insumo não existe no banco
While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
cType + PADR( cCode, Len( STL->TL_CODIGO ) )
If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo realizado
.And. nAmount == STL->TL_QUANTID //comparação de quantidade
lOk := .T. //já está gravado e não há necessidade de validar
Exit
EndIf
dbSelectArea("STL")
dbSkip()
EndDo
EndIf
EndIf
If !lOk
Return 'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + ;
'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] )
EndIf
Next nInput
EndIf
EndIf
ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem
If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
If Empty( oParser:message )//verifica campo observação foi passado vazio
Return "A observação do cancelamento é obrigatória."
EndIf
EndIf
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 ser informado."
EndIf
EndIf
ElseIf cId == "FINISHED_ORDER"
If FWJsonDeserialize(oWS:GetContent(), @oParser)
aArea := GetArea()
aAreaSTJ := STJ->(GetArea())
dbSelectArea("STJ")
dbSetOrder(1)
If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
Reclock("STJ", .F.)
STJ->TJ_DTPRINI := STJ->TJ_DTMRINI
STJ->TJ_HOPRINI := STJ->TJ_HOMRINI
STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIM
STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM
MsUnlock()
Endif
RestArea(aAreaSTJ)
RestArea(aArea)
Endif
ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos
Return " AND B1_GRUPO = '97'"
ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem
cCodBem := PARAMIXB[3]
dbSelectArea("ST9")
dbSetOrder(1)
If dbSeek( xFilial("ST9") + cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI )
cAddress := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END")
EndIf
Return Alltrim( cAddress )
ElseIf cId == 'FILTER_ORDER'
Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) )
ElseIf cId == 'FILTER_REQUEST'
Return ' AND TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) )
ElseIf cId == 'UPDATE_FINISH_ORDER'
If AttIsMemberOf( oWS, 'counter' )
If Len( oWS:counter ) > 0
oWS:counter[1]:value := 3334
oWS:counter[1]:time := '10:10'
EndIf
If Len( oWS:counter ) > 1
oWS:counter[2]:value := 3334
oWS:counter[2]:time := '10:10'
EndIf
EndIf
If AttIsMemberOf( oWS, 'observation' )
oWS:observation := 'ALTERADO PELO P.E. MNTNG'
EndIf
Return oWS
EndIf
Return |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch"
User Function MNTNG()
Local cId := 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()
Local cId := PARAMIXB[1] //Indica o momento da chamada do PE
If cId == '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()
Local cId := PARAMIXB[1] //Indica o momento da chamada do PE
Local cEmail
If cId == 'FILTER_EXECUTOR'
cEmail := PARAMIXB[3] //Indica o email do usuário logado
Return " AND TQ4_EMAIL1 = " + ValtoSql( cEmail )
EndIf
Return |
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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 If cId == "CANCEL_VALID" //valida cancelamento da ordem If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json If Empty( oParser:message )//verifica campo observação foi passado vazio Return "A observação do cancelamento é obrigatória." EndIf EndIf ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos Return " AND B1_GRUPO = '97'" EndIf Local cId := PARAMIXB[1] //Indica o momento da chamada do PE If cId == 'SEARCH_FIELD_SB1' Return "B1_FAMILY" // indica o nome do campo para pesquisa de produto EndIf Return |