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 | ID | Conteúdo | CREATED_ORDER / CREATE_VALID_ORDER | Bloco de código |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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:
UPDATE_FINISH_ORDER | object | JSON contendo informações da finalização da O.S. |
|
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
| ||||||||
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 ) > 0EndIf cOrder aDate := IIf( AttIsMemberOf( oParser{ dDatabase, 'code08:00' ), oParser:code, '' ) } lOk cPlan := IIf( AttIsMemberOf( oParser, 'plan' ), oParser:plan, '000000' ) .T. If AttIsMemberOf( oInput, "startDate" ) //Bloco abaixo realiza validações nos insumos For nInputaDate := 1 To Len( oParser:inputsStrTokArr( oInput:startDate, " " ) ElseIf AttIsMemberOf( oInput, := oParser:inputs[ nInput ] "date" ) cType aDate := IIfStrTokArr( AttIsMemberOf( oInput :date, 'type'" " ), oInput:type, '' ) EndIf lIsDoneaDate := IIf({ AttIsMemberOfSTOD( oInput , 'isDone'aDate[1] ), oInput:isDone, .F. )aDate[2] } //Neste exemplo haverá validações somente para produtos realizados quando informar data anterior a data atual If cType != "P" .Or. !lIsDone aDate[1] >= dDatabase Loop EndIf aDatecTask := { dDatabase, '08:00' } lOkIIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' ) := .T. cCode := IIf( AttIsMemberOf( oInput If AttIsMemberOf(, 'code'), oInput:code, "startDate"'' ) nAmount := IIf( AttIsMemberOf( aDateoInput := StrTokArr(, 'amount'), oInput:startDateamount, " "0 ) ElseIfIf AttIsMemberOf( oInput, "date" )cId == "CREATE_VALID_ORDER" aDatelOk := StrTokArr( oInput:date, " " ).F. EndIfElse aDate := { STOD( aDate[1] ), aDate[2] } /*Trecho abaixo verifica se o insumo já está gravado no banco //Neste exemplo haverá validações somente quando informar data anterior a data atual caso exista não há necessidade de If aDate[1] >= dDatabase validação*/ dbSelectArea("STL") Loop dbSetOrder( EndIf1 ) cTask :=If IIf!dbSeek( AttIsMemberOfxFilial( oInput , 'taskSTL'), oInput:task, '' ) + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; cCode := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' ) PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, nAmount := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 ) Len( STL->TL_TAREFA ) ) + ; If cId == "CREATE_VALID_ORDER" cType + PADR( cCode, Len( STL->TL_CODIGO ) ) ) lOk := .F. lOk := Else.F. Else /*Trecho abaixo verifica selOk o insumo já está gravado no banco := .F. //Verificação abaixo para garantir que casoo existainsumo não háexiste necessidadeno de validação*/ banco dbSelectArea("STL") While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +; dbSetOrder( 1 ) STL->TL_TAREFA + STL->TL_TIPOREG + If !dbSeek( 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 ) ) ) lOk := .F. Len( STL->TL_CODIGO ) ) Else If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é lOk := .F.insumo realizado //Verificação abaixo para garantir que o insumo não existe.And. nonAmount banco == STL->TL_QUANTID //comparação de quantidade While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +; lOk := .T. //já está gravado e não há necessidade de validar STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; Exit PADR(EndIf cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ; dbSelectArea("STL") cType + PADR( cCode, Len( STL->TL_CODIGO ) ) dbSkip() If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo realizado EndDo EndIf EndIf .And. nAmount == STL->TL_QUANTID //comparação de quantidade If !lOk lOk := .T. //já está gravado e não há necessidade de validar Return 'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + ; Exit 'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] ) EndIf EndIf Next nInput dbSelectArea("STL") EndIf EndIf ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem If dbSkipFWJsonDeserialize(oWS:GetContent() ,@oParser) //Parse da string no formato Json If Empty( oParser:message )//verifica campo observação foi passado EndDovazio Return "A observação do cancelamento EndIfé obrigatória." EndIf EndIf ElseIf cId If !lOk== "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." Return 'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + ; EndIf EndIf ElseIf cId == "FINISHED_ORDER" If FWJsonDeserialize(oWS:GetContent(), @oParser) 'Verifique o insumo/produto ' + cCode + ' dataaArea ' + Dtoc( aDate[1] := GetArea() aAreaSTJ := STJ->(GetArea()) EndIf Next nInputdbSelectArea("STJ") EndIfdbSetOrder(1) EndIf ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem If dbSeek(xFilial("STJ") + oParser:order + oParser:plan) If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json Reclock("STJ", .F.) If Empty( oParser:message )//verifica campo observação foi passado vazio STJ->TJ_DTPRINI := STJ->TJ_DTMRINI STJ->TJ_HOPRINI Return "A observação do cancelamento é obrigatória." := STJ->TJ_HOMRINI STJ->TJ_DTPRFIM EndIf:= STJ->TJ_DTMRFIM EndIf ElseIf cId == "FINISH_VALID_ORDER" If FWJsonDeserialize(oWS:GetContent(), @oParser) If Empty( oParser:observation ) //verifica campo observação foi passado vazio STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM MsUnlock() Endif Return "Campo observação deve ser informado." RestArea(aAreaSTJ) EndIf EndIf RestArea(aArea) ElseIf cId == "FINISHED_ORDER" Endif If FWJsonDeserialize(oWS:GetContent(), @oParser) ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos Return " AND B1_GRUPO = '97'" ElseIf cId aArea := GetArea() == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem cCodBem aAreaSTJ := STJ->(GetArea()) PARAMIXB[3] dbSelectArea("STJST9") dbSetOrder(1) If dbSeek( xFilial("STJST9") + oParser:order + oParser:plan cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI ) cAddress := ReclockPosicione("STJSA1", .F.) STJ->TJ_DTPRINI := STJ->TJ_DTMRINI,1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END") EndIf STJ->TJ_HOPRINI := STJ->TJ_HOMRINI Return Alltrim( cAddress ) ElseIf cId == 'FILTER_ORDER' Return ' AND STJ->TJ.TJ_DTPRFIMDTMPINI := STJ->TJ_DTMRFIM ' + ValToSQL( cToD( '24/11/2020' ) ) STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM ElseIf cId == 'FILTER_REQUEST' Return ' MsUnlock() Endif AND TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) ) ElseIf cId == 'UPDATE_FINISH_ORDER' If AttIsMemberOf( RestArea(aAreaSTJoWS, 'counter' ) RestArea(aArea) If Len( oWS:counter ) > Endif0 ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos oWS:counter[1]:value := 3334 Return " AND B1_GRUPO = '97'" ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem oWS:counter[1]:time := '10:10' cCodBem := PARAMIXB[3] dbSelectArea("ST9")EndIf dbSetOrder(1) If dbSeek( xFilial("ST9") + cCodBemLen( oWS:counter ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI ) > 1 cAddress := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END") oWS:counter[2]:value := 3334 EndIf Return Alltrim( cAddress ) ElseIf cId == 'FILTER_ORDER oWS:counter[2]:time := '10:10' Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) )EndIf ElseIf cId == 'FILTER_REQUEST'EndIf Return ' AND TQB.TQB_DTABER = ' +If ValToSQLAttIsMemberOf( cToD(oWS, '24/11/2020' )observation' ) ElseIf cId == 'UPDATE_FINISH_ORDER' If AttIsMemberOf( oWS, 'counter' ):observation := 'ALTERADO PELO P.E. MNTNG' EndIf Return oWS If Len( oWS:counter ) > 0 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 " oWS:counter[1]:value := 3334 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 oWSPE 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' :counter[1]:time := '10:10' EndIf If Len( oWS:counter ) > 1 oWS:counter[2]:value := 3334 cEmail oWS:counter= PARAMIXB[23]:time //Indica := '10:10' o email do usuário logado Return " AND EndIf TQ4_EMAIL1 = " + ValtoSql( cEmail ) EndIf Return |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch" User Function MNTNG() If AttIsMemberOf( oWS, 'observation' ) Local cId := PARAMIXB[1] //Indica o momento da chamada do PE If cId oWS:observation :== 'ALTERADO PELO P.E. MNTNG' SEARCH_FIELD_SB1' EndIf Return "B1_FAMILY" // indica o nome do campo para Returnpesquisa oWS de produto EndIf Return |