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_2 Após a confirmação da finalização, sendo que o campo contador 2 não deve ter sido informado no APP. | Após a confirmação da finalização, sendo que o campo contador 1 não deve ter sido informado no APP. |
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:
FINISH_COUNTER_1 numeric | Valor a ser reportado no contador 1 para o processo de finalização de O.S. | FINISH_COUNTER_2 numeric | Valor a ser reportado no contador 2 para o processo de finalização de O.S. |
UPDATE_FINISH_ORDER | object | JSON contendo informações da
|
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 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 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 aabaixo seguir realiza validações dosnos insumos If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json For nInput := 1 To Len( oParser:inputs ) If AttIsMemberOf( oParser, "inputs" ) .And. Len(oInput := oParser:inputs[ )nInput > 0] cOrder cType := IIf( AttIsMemberOf( oParseroInput , 'codetype' ), oParseroInput:codetype, '' ) cPlan lIsDone := IIf( AttIsMemberOf( oInput oParser, 'planisDone' ), oParseroInput:planisDone, '000000' ).F. ) //BlocoNeste abaixoexemplo realizahaverá validações nos insumos somente para produtos realizados For nInput := 1 To Len( oParser:inputs ) If cType != "P" .Or. !lIsDone oInput := oParser:inputs[ nInput ] Loop cType := IIf( AttIsMemberOf( oInput , 'type' EndIf ), oInput:type, '' ) aDate := { lIsDonedDatabase, '08:= IIf( AttIsMemberOf( oInput , 'isDone'), oInput:isDone, .F. ) 00' } lOk := .T. //Neste exemplo haverá validações somente para produtos realizados If AttIsMemberOf( oInput, "startDate" ) If cTypeaDate !:= StrTokArr( oInput:startDate, "P " .Or. !lIsDone ) ElseIf AttIsMemberOf( oInput, "date" Loop) EndIf aDate := StrTokArr( oInput:date, " " ) aDate := { dDatabase, '08:00' } EndIf lOk aDate := .T. { STOD( aDate[1] ), aDate[2] } If AttIsMemberOf( oInput, "startDate" ) //Neste exemplo haverá validações somente aDatequando :=informar StrTokArr( oInput:startDate, " " ) data anterior a data atual ElseIf AttIsMemberOf( oInput, "date" ) If aDate[1] >= dDatabase aDate := StrTokArr( oInput:date, " " )Loop EndIf aDatecTask := {IIf( STODAttIsMemberOf( aDate[1] ), aDate[2] } oInput , 'task'), oInput:task, '' ) cCode := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' ) //Neste exemplo haverá validações somente quando informar data anterior a data atual nAmount := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 ) If aDate[1] >= dDatabase If cId == "CREATE_VALID_ORDER" Loop lOk := .F. EndIf Else cTask := IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' ) cCode := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' ) /*Trecho abaixo verifica se o insumo já está gravado no banco nAmount := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 ) caso exista não há necessidade de validação*/ If cId == "CREATE_VALID_ORDER" dbSelectArea("STL") lOk := .F. dbSetOrder( 1 Else) If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; /*Trecho abaixo verifica se o insumo já está gravado no banco PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ; caso exista não há necessidade de validação*/ dbSelectArea("STL") cType + PADR( cCode, Len( STL->TL_CODIGO ) ) ) dbSetOrder( 1 ) lOk := .F. If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; Else lOk PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ; := .F. //Verificação abaixo para garantir que o insumo não existe no banco cType + PADR( cCode, Len( STL->TL_CODIGO ) ) ) While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +; lOk := .F. STL->TL_TAREFA + Else STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; lOk := .F. PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( //Verificação abaixo para garantir que o insumo não existe no banco STL->TL_TAREFA ) ) + ; While !STL->( Eof() ) .AND. STL->TL_FILIAL + cType + PADR( cCode, Len( STL->TL_ORDEMCODIGO + STL->TL_PLANO +; ) ) STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder,If LenVal( STL->TL_ORDEMSEQRELA ) )+> 0 ; //verifica se é insumo realizado PADR( cPlan, Len( STL->TL_PLANO ) ).And. + PADR( cTask, Len( nAmount == STL->TL_TAREFAQUANTID )//comparação )de +quantidade ; lOk cType + PADR( cCode, Len( STL->TL_CODIGO ) ) := .T. //já está gravado e não há necessidade de validar If Val( STL->TL_SEQRELA ) > 0 ; //verificaExit se é insumo realizado EndIf .And. nAmount == STL->TL_QUANTID //comparação de quantidade dbSelectArea("STL") lOk := .T. //já está gravado e não há necessidade de validar dbSkip() EndDo Exit EndIf EndIf EndIf If !lOk dbSelectArea("STL") Return 'Não é permitido realizar insumos do tipo produto com a dbSkip() data retroativa. ' + ; EndDo 'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] EndIf) EndIf Next nInput If !lOk EndIf EndIf ElseIf cId == "CANCEL_VALID" //valida cancelamento da Returnordem 'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + ;If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json If Empty( oParser:message )//verifica campo observação foi passado vazio Return 'Verifique"A oobservação insumo/produtodo 'cancelamento + cCode + ' data ' + Dtoc( aDate[1] ) é obrigatória." EndIf EndIf ElseIf cId EndIf == "FINISH_VALID_ORDER" If FWJsonDeserialize(oWS:GetContent(), @oParser) If Empty( oParser:observation ) //verifica campo observação foi passado vazio Next nInput Return "Campo observação deve ser EndIfinformado." EndIf EndIf ElseIf cId == "CANCELFINISHED_VALIDORDER" //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 aArea := GetArea() aAreaSTJ := STJ->(GetArea()) dbSelectArea("STJ") Return "A observação do cancelamento é obrigatória." dbSetOrder(1) If dbSeek(xFilial("STJ") + EndIfoParser:order + oParser:plan) EndIf ElseIf cId == "FINISH_VALID_ORDER" If FWJsonDeserialize(oWS:GetContent(), @oParser) If Empty( oParser:observation ) //verifica campo observação foi passado vazio Reclock("STJ", .F.) STJ->TJ_DTPRINI := STJ->TJ_DTMRINI Return "Campo observação deve ser informado." STJ->TJ_HOPRINI := STJ->TJ_HOMRINI EndIf EndIf ElseIf cId == "FINISHED_ORDER" STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIM If FWJsonDeserialize(oWS:GetContent(), @oParser) STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM aArea := GetAreaMsUnlock() aAreaSTJ := STJ->(GetArea()) Endif dbSelectAreaRestArea("STJ"aAreaSTJ) dbSetOrderRestArea(1aArea) Endif If dbSeek(xFilial("STJ") + oParser:order + oParser:plan) ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos Return Reclock("STJ", .F.) " AND B1_GRUPO = '97'" ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem STJ->TJ_DTPRINI cCodBem := STJ->TJ_DTMRINIPARAMIXB[3] dbSelectArea("ST9") STJ->TJ_HOPRINI := STJ->TJ_HOMRINIdbSetOrder(1) If dbSeek( xFilial("ST9") + cCodBem ) .And. !Empty( STJST9->TJ>T9_DTPRFIMCLIENTE :=+ STJST9->TJ>T9_DTMRFIMLOJACLI ) cAddress := Posicione("SA1",1,xFilial("SA1") + STJST9->TJ>T9_HOPRFIMCLIENTE := STJ->TJ_HOMRFIM+ ST9->T9_LOJACLI,"SA1->A1_END") MsUnlock()EndIf Return Alltrim( cAddress Endif) ElseIf cId == 'FILTER_ORDER' RestArea(aAreaSTJ) RestArea(aArea Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) ) Endif ElseIf cId == 'FILTER_REQUEST' Return ' ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtosAND TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) ) ElseIf cId == 'UPDATE_FINISH_ORDER' Return " AND B1_GRUPO =If AttIsMemberOf( oWS, '97counter'" ) ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem cCodBem := PARAMIXB[3] dbSelectArea("ST9") If Len( oWS:counter ) > 0 dbSetOrder(1) If dbSeek( xFilial("ST9") + cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI ) oWS:counter[1]:value := 3334 cAddress := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END") oWS:counter[1]:time := '10:10' EndIf Return Alltrim( cAddress ) ElseIf cId == 'FILTER_ORDER' If Len( oWS:counter ) > 1 Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) ) oWS:counter[2]:value := 3334 ElseIf cId == 'FILTER_REQUEST' Return ' AND TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) ) ElseIf cId == 'FINISH_COUNTER_1' oWS:counter[2]:time := '10:10' Return 150EndIf EndIf ElseIf If cId == 'FINISH_COUNTER_2' AttIsMemberOf( oWS, 'observation' ) Return 222 ElseIf cId == 'UPDATE_FINISH_ORDER' oWS:observation := 'ALTERADO PELO P.E. MNTNG' If AttIsMemberOf( oWS, 'counter' ) 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 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' oWS: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 |