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 | País(es): | Todos | |||
Bancos de Dados: | Todos | ||||
Sistema(s) Operacional(is)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: |
|
|
|
|
|
title | Exemplo do conteúdo |
---|---|
linenumbers | true |
collapse | true |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FINISHED_ORDER / FINISH_VALID_ORDER
title | Exemplo do conteúdo |
---|---|
linenumbers | true |
collapse | true |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 | 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_THIRDPART | Filtro para terceiros | String que será adicionada à cláusura 'where' terceiros (SA2). |
title | mntng.prw |
---|---|
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:
|
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch" User Function |
...
MNTNG( |
...
) 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 |