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: |
| FINISH
| COUNTER_1Após a confirmação da finalização, sendo que o campo contador 1 não deve ter sido informado no APP. |
| |||||||||||||||||||||||||||||||||||
FINISH_COUNTER_2 | Após a confirmação da finalização, sendo que o campo contador 2 não deve ter sido informado no APP. | ||||||||||||||||||||||||||||||||||||||
CANCEL_VALID | Validação antes do cancelamento de uma ordem de serviço. |
| ParamIXB[2] | obejct | |||||||||||||||||||||||||||||||||||
ID | Conteúdo | CREATED_ORDER / CREATE_VALID_ORDER | |||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bloco de código | |||||||||||||||||||||||||||||||||||||||
language | xml | ||||||||||||||||||||||||||||||||||||||
title | Exemplo | ||||||||||||||||||||||||||||||||||||||
linenumbers | true |
| FINISH_COUNTER_1 / FINISH_COUNTER_2 /
| ||||||||||||||||||||||||||||||||||||
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:
| FINISH
| COUNTER_1
| numeric||||||||||||||||||||||||||||||||||||
FINISH_COUNTER_2 | numeric | Valor a ser reportado no contador 2 para o processo de finalização de O.S. | CANCEL_VALID | string | Motivo quando a validação é negativa.
| Valor a ser reportado no contador 1 para o processo de finalização de 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
EndIf
aDate := { dDatabase, '08:00' }
lOk := .T.
If AttIsMemberOf( oInput, "startDate" )
aDate := StrTokArr( oInput:startDate, " " )
ElseIf AttIsMemberOf( oInput, "date" )
aDate := StrTokArr( oInput:date, " " ) | ||||||||
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 EndIf cOrder aDate := IIf({ AttIsMemberOfSTOD( oParser, 'code'aDate[1] ), oParser:code, '' ) aDate[2] } cPlan := IIf( AttIsMemberOf( oParser, 'plan' ), oParser:plan, '000000' ) //Bloco abaixo realiza validações nos insumos //Neste exemplo haverá validações somente quando informar data anterior a data atual For nInput := 1 To Len( oParser:inputs ) If aDate[1] >= dDatabase oInput := oParser:inputs[ nInput ] Loop cType := IIf( AttIsMemberOf( oInput , 'type' ), oInput:type, '' ) EndIf cTask lIsDone := IIf( AttIsMemberOf( oInput , 'isDonetask'), oInput:isDonetask, .F.'' ) cCode := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, //Neste exemplo haverá validações somente para produtos realizados'' ) IfnAmount cType != "P" .Or. !lIsDone := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 ) Loop If cId == "CREATE_VALID_ORDER" EndIf lOk := .F. aDate := { dDatabase, '08:00' } Else lOk := .T. If AttIsMemberOf( oInput, "startDate" ) /*Trecho abaixo verifica se o insumo já está gravado no banco aDate := StrTokArr( oInput:startDate, " " ) caso exista ElseIfnão AttIsMemberOf(há oInput, "date" )necessidade de validação*/ aDate := StrTokArr( oInput:date, " " dbSelectArea("STL") EndIf dbSetOrder( 1 ) aDate := { STOD( aDate[1] ), aDate[2] } If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; //Neste exemplo haverá validações somente quando informar data anterior a data atual PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + If aDate[1] >= dDatabase ; Loop cType + PADR( cCode, Len( STL->TL_CODIGO ) ) EndIf ) cTask := IIf( AttIsMemberOf( oInput , 'task'),lOk oInput:task, '' ) = .F. cCode :=Else IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' ) nAmountlOk := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 ) .F. If cId == "CREATE_VALID_ORDER" //Verificação abaixo para garantir que o insumo não existe no banco lOk := .F. While !STL->( Eof() ) .AND. Else STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +; STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( /*Trecho abaixo verifica se o insumo já está gravado no banco STL->TL_ORDEM ) )+ ; casoPADR( existacPlan, não há necessidade de validação*/ Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ; dbSelectArea("STL") cType dbSetOrder( 1+ PADR( cCode, Len( STL->TL_CODIGO ) ) If !dbSeek( xFilial('STL') + PADR( cOrder,If LenVal( STL->TL_ORDEMSEQRELA ) > )+0 ; //verifica se é insumo realizado .And. nAmount == STL->TL_QUANTID //comparação de PADR(quantidade cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ; lOk := .T. //já está gravado e não há necessidade de validar cType + PADR( cCode, Len( STL->TL_CODIGO ) ) ) Exit lOk := .F. Else EndIf lOk := .F. dbSelectArea("STL") //Verificação abaixo para garantir que o insumo não existe no bancodbSkip() While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +; EndDo EndIf STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; EndIf If !lOk Return PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) )'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + ; cType'Verifique + PADR( cCode, Len( STL->TL_CODIGO ) ) o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] ) EndIf If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é insumoNext realizadonInput EndIf EndIf ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem .And. nAmount == STL->TL_QUANTID //comparação de quantidadeIf FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json If Empty( oParser:message )//verifica campo observação foi passado vazio lOkReturn := .T. //já está gravado e não há necessidade de validar "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 Exitvazio Return "Campo observação deve ser informado." EndIf EndIf ElseIf cId == "FINISHED_ORDER" If FWJsonDeserialize(oWS:GetContent(), @oParser) dbSelectArea("STL") aArea := GetArea() aAreaSTJ dbSkip:= STJ->(GetArea() ) dbSelectArea("STJ") EndDo dbSetOrder(1) If dbSeek(xFilial("STJ") + oParser:order + EndIfoParser:plan) EndIf Reclock("STJ", .F.) STJ->TJ_DTPRINI If !lOk:= STJ->TJ_DTMRINI STJ->TJ_HOPRINI := STJ->TJ_HOMRINI Return 'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + ; STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIM STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM MsUnlock() 'Verifique o insumo/produto ' + cCode + ' dataEndif ' + Dtoc( aDate[1] ) RestArea(aAreaSTJ) EndIf RestArea(aArea) Endif Next nInput ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de EndIfprodutos Return EndIf " AND B1_GRUPO = '97'" ElseIf cId == "CANCELDESCRIPTION_VALIDLOCALIZATION" //valida cancelamento da ordem Altera descrição de localização do bem cCodBem := PARAMIXB[3] If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json dbSelectArea("ST9") dbSetOrder(1) If EmptydbSeek( oParser:message )//verifica campo observação foi passado vazio xFilial("ST9") + cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI ) cAddress Return "A observação do cancelamento é obrigatória.":= Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END") EndIf EndIf Return Alltrim( cAddress ) ElseIf cId == "FINISH'FILTER_VALID_ORDER" If FWJsonDeserialize(oWS:GetContent(), @oParser) If Empty( oParser:observation ) //verifica campo observação foi passado vazioORDER' Return ' Return "Campo observação deve ser informado."AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) ) EndIf EndIf ElseIf cId == "FINISHED_ORDER"'FILTER_REQUEST' Return ' AND TQB.TQB_DTABER = ' + If FWJsonDeserialize(oWS:GetContent(), @oParser) ValToSQL( cToD( '24/11/2020' ) ) ElseIf cId == 'UPDATE_FINISH_ORDER' If AttIsMemberOf( oWS, 'counter' ) aArea := GetArea() If Len( aAreaSTJ := STJ->(GetArea()) oWS:counter ) > 0 dbSelectArea("STJ") oWS:counter[1]:value := 3334 dbSetOrder(1) If dbSeek(xFilial("STJ") + oParser:order + oParser:plan) oWS:counter[1]:time := '10:10' Reclock("STJ", .F.) EndIf If Len( STJ->TJ_DTPRINI := STJ->TJ_DTMRINI oWS:counter ) > 1 STJ->TJ_HOPRINI oWS:counter[2]:value := STJ->TJ_HOMRINI3334 STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIM oWS:counter[2]:time := '10:10' STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM EndIf EndIf MsUnlock() If AttIsMemberOf( oWS, 'observation' Endif) RestArea(aAreaSTJ) oWS:observation := 'ALTERADO RestArea(aArea) PELO P.E. MNTNG' EndIf Endif Return oWS 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 == 'FINISH_COUNTER_1' Return 150 ElseIf cId == 'FINISH_COUNTER_2' Return 222 EndIf 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 |