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: |
linenumbers |
Ordenação das etapas da ordem de serviço | ParamIXB[2] | obejct | ID | Conteúdo | CREATED_ORDER / CREATE_VALID_ORDER | Bloco de código | language | xml | title | Exemplo |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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:
string | Condição SQL que será utilizada para definir ordenação da tabela Etapas da Ordens de Serviço - STQ. |
|
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 //Bloco a seguir realiza validações dos insumos " 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, '' ) If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json lIsDone := IIf( AttIsMemberOf( oInput , 'isDone'), oInput:isDone, .F. ) If AttIsMemberOf( oParser, "inputs" ) .And. Len( oParser:inputs ) > 0 cOrder := IIf( AttIsMemberOf( oParser, 'code' ), oParser:code, '' ) //Neste exemplo haverá validações somente para produtos realizados cPlan := IIf( AttIsMemberOf( oParser, 'plan' ), oParser:plan, '000000' ) If cType != "P" .Or. !lIsDone //Bloco abaixo realiza validações nos insumos Loop For nInput := 1 To Len( oParser:inputs ) EndIf oInput := oParser:inputs[ nInput ] aDate := { dDatabase, '08:00' } cType := IIf( AttIsMemberOf( oInput , 'type' lOk ), oInput:type, '' ) := .T. lIsDone := IIf(If AttIsMemberOf( oInput, , 'isDone'), oInput:isDone, .F. ) "startDate" ) aDate := StrTokArr( oInput:startDate, " " ) //Neste exemplo haverá validaçõesElseIf somenteAttIsMemberOf( para produtos realizadosoInput, "date" ) If cTypeaDate !:= StrTokArr( oInput:date, "P " .Or. !lIsDone ) EndIf Loop aDate := { STOD( aDate[1] ), EndIf aDate[2] } aDate := { dDatabase, '08:00' } //Neste exemplo haverá validações somente lOkquando informar data anterior a := .T. data atual If AttIsMemberOf( oInput, "startDate" ) aDate[1] >= dDatabase Loop aDate := StrTokArr( oInput:startDate, " " ) EndIf ElseIf AttIsMemberOf( oInput, "date" ) cTask := IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' ) aDate := StrTokArr( oInput:date, " " ) cCode := IIf( AttIsMemberOf( oInput , 'code'), EndIfoInput:code, '' ) aDatenAmount := {IIf( STODAttIsMemberOf( aDate[1] ), aDate[2] } oInput , 'amount'), oInput:amount, 0 ) If cId == "CREATE_VALID_ORDER" //Neste exemplo haverá validações somente quandolOk informar data anterior a data atual := .F. Else If aDate[1] >= dDatabase Loop /*Trecho abaixo verifica EndIf se o insumo já está gravado no banco cTask := IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' ) caso exista não há necessidade de validação*/ cCode := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' ) dbSelectArea("STL") nAmount := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 dbSetOrder( 1 ) If cId == "CREATE_VALID_ORDER" If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; lOk := .F. Else PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ; /*Trecho abaixo verificacType se+ oPADR( insumocCode, já está gravado no bancoLen( STL->TL_CODIGO ) ) ) casolOk exista não há necessidade de validação*/ := .F. dbSelectArea("STL")Else dbSetOrder( 1 ) lOk := .F. If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; //Verificação abaixo para garantir que o insumo não existe no banco PADR( cPlan, Len(While !STL->TL_PLANO >( Eof() ) + PADR( cTask, Len(.AND. STL->TL_FILIAL + STL->TL_TAREFA ) )ORDEM + STL->TL_PLANO + ; STL->TL_TAREFA + STL->TL_TIPOREG cType+ STL->TL_CODIGO == xFilial('STL') + PADR( cCodecOrder, Len( STL->TL_CODIGOORDEM ) )+ ); lOk := .F. PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + Else; lOk := .F. cType + PADR( cCode, Len( STL->TL_CODIGO ) ) //Verificação abaixo para garantir que o insumo não existe no banco If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo realizado While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +; .And. nAmount == STL->TL_QUANTID //comparação de quantidade STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ; lOk := .T. //já está gravado e não há necessidade de validar PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ; Exit cType + PADR( cCode, Len( STL->TL_CODIGO ) )EndIf If ValdbSelectArea( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo realizado "STL") dbSkip() .And. nAmount == STL->TL_QUANTID //comparação de quantidade EndDo EndIf lOk := .T. //já está gravado e não há necessidade de validar EndIf If !lOk Exit Return 'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + EndIf; dbSelectArea("STL") 'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] ) dbSkip() EndIf Next nInput EndDo EndIf EndIf ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem EndIf If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json EndIf If Empty( oParser:message )//verifica campo observação foi passado vazio If !lOk Return "A observação do cancelamento é obrigatória." Return 'Não éEndIf permitido realizar insumos do tipo produto com aEndIf data retroativa. ' + ; 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." 'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] ) EndIf EndIf ElseIf cId == "FINISHED_ORDER" EndIf If FWJsonDeserialize(oWS:GetContent(), @oParser) Next nInput EndIf aArea := GetArea() EndIf ElseIfaAreaSTJ cId :== "CANCEL_VALID" //valida cancelamento da ordem STJ->(GetArea()) If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json dbSelectArea("STJ") If Empty( oParser:message )//verifica campo observação foi passado vazio dbSetOrder(1) If dbSeek(xFilial("STJ") + oParser:order + oParser:plan) Return "A observação do cancelamento é obrigatória." Reclock("STJ", .F.) EndIf EndIf STJ->TJ_DTPRINI := ElseIf cId == "FINISH_VALID_ORDER" If FWJsonDeserialize(oWS:GetContent(), @oParser) If Empty( oParser:observation ) //verifica campo observação foi passado vazio STJ->TJ_DTMRINI STJ->TJ_HOPRINI := STJ->TJ_HOMRINI Return "Campo observação deve ser informado." STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIM EndIf EndIf ElseIf cId == "FINISHED_ORDER"STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM If FWJsonDeserializeMsUnlock(oWS:GetContent(), @oParser) Endif aArea := GetArea(RestArea(aAreaSTJ) aAreaSTJ := STJ->(GetArea()) RestArea(aArea) Endif dbSelectArea("STJ") ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de dbSetOrder(1)produtos Return " AND B1_GRUPO = If dbSeek(xFilial("STJ") + oParser:order + oParser:plan) '97'" ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem cCodBem := PARAMIXB[3] ReclockdbSelectArea("STJST9", .F.) STJ->TJ_DTPRINI := STJ->TJ_DTMRINIdbSetOrder(1) If dbSeek( xFilial("ST9") + cCodBem ) .And. !Empty( STJST9->TJ>T9_HOPRINICLIENTE :=+ STJST9->TJ>T9_HOMRINILOJACLI ) cAddress := Posicione("SA1",1,xFilial("SA1") + STJST9->TJ>T9_DTPRFIMCLIENTE := STJ->TJ_DTMRFIM+ ST9->T9_LOJACLI,"SA1->A1_END") EndIf Return Alltrim( cAddress ) ElseIf STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIMcId == 'FILTER_ORDER' Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) MsUnlock() Endif ElseIf cId == 'FILTER_REQUEST' Return ' RestArea(aAreaSTJ) RestArea(aArea) AND TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) ) ElseIf cId == 'UPDATE_FINISH_ORDER' Endif If AttIsMemberOf( oWS, 'counter' ) ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos If Len( oWS:counter ) > Return0 " AND B1_GRUPO = '97'" ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem cCodBem oWS:= PARAMIXBcounter[31] :value := 3334 dbSelectArea("ST9") dbSetOrder(1) oWS:counter[1]:time If dbSeek( xFilial("ST9") + cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI ) := '10:10' EndIf cAddress := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END") If Len( oWS:counter ) > EndIf1 Return Alltrim( cAddress ) ElseIf cId == 'FILTER_ORDER' Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) ) oWS:counter[2]:value := 3334 oWS:counter[2]:time ElseIf cId :== 'FILTER_REQUEST10:10' Return ' AND TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) )EndIf ElseIf cId == 'UPDATE_FINISH_ORDER' EndIf If AttIsMemberOf( oWS, 'counterobservation' ) If Len( oWS:counter ) > 0 oWS:observation := 'ALTERADO PELO P.E. MNTNG' EndIf Return oWS oWS:counter[1]:value := 3334EndIf Return |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch" User Function MNTNG() Local cId := PARAMIXB[1] //Indica o momento da chamada oWS:counter[1]:time := '10:10' EndIf If Len( oWS:counter do PE If cId == 'FILTER_WAREHOUSE' Return " AND B2_LOCAL = '01' " EndIf Return |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch" User Function MNTNG() ) > 1 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 oWS:counter[2]:value := 3334 oWS:counter[2]:time := '10:10' EndIf EndIf If AttIsMemberOf( oWS,cId == 'observation' ) FILTER_EXECUTOR' cEmail := PARAMIXB[3] //Indica o email do oWS:observation := 'ALTERADO PELO P.E. MNTNG' usuário logado EndIf Return " AND TQ4_EMAIL1 = " + Return oWS 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 == 'ORDERBYSEARCH_FIELD_CHECKSOSB1' Return ' ORDER BY STQ.TQ_ORDEM, STQ.TQ_PLANO, STQ.TQ_SEQETA, STQ.TQ_TAREFA, STQ.TQ_ETAPA ' Return "B1_FAMILY" // indica o nome do campo para pesquisa de produto EndIf Return |