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 | Objeto com referência ao webservice. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Eventos: | ID | Conteúdo do objeto no 2º parâmetro | CREATED_ORDER / CREATE_VALID_ORDER Bloco de código |
FINISHED_ORDER / FINISH_VALID_ORDER Bloco de código |
COUNTER_VALID_FINISH | Bloco de código |
CANCEL_VALID |
UPDATE_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:
|
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 |
...
|
...
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 If cType != "P" .Or. !lIsDone Loop EndIf aDate := { dDatabase, '08:00' } lOk := .T. If AttIsMemberOf( oInput, "startDate" ) //Bloco a seguir realiza validações dos insumos aDate := StrTokArr( oInput:startDate, " " ) If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json IfElseIf AttIsMemberOf( oParseroInput, "inputsdate" ) .And. Len( oParser:inputs ) > 0 cOrder aDate := IIfStrTokArr( AttIsMemberOf( oParseroInput:date, 'code' ), oParser:code, ''" " ) cPlan := IIf( AttIsMemberOf( oParser, 'plan' ), oParser:plan, '000000' ) EndIf aDate := //Bloco abaixo realiza validações nos insumos { STOD( aDate[1] ), aDate[2] } For nInput := 1 To Len( oParser:inputs ) //Neste exemplo haverá validações somente quando informar oInputdata := oParser:inputs[ nInput ] anterior a data atual If cType aDate[1] >= dDatabase := IIf( AttIsMemberOf( oInput , 'type' ), oInput:type, '' ) Loop lIsDone := IIf( AttIsMemberOf( oInput , 'isDone'), oInput:isDone, .F. ) EndIf cTask := IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' ) //Neste exemplo haverá validações somente para produtos realizados cCode := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' ) If cType != "P" .Or. !lIsDone nAmount := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 ) Loop If cId EndIf == "CREATE_VALID_ORDER" aDate := { dDatabase,lOk '08:00' } = .F. lOk := .T. Else If AttIsMemberOf( oInput, "startDate" ) aDate := StrTokArr( oInput:startDate, " " ) /*Trecho abaixo verifica se o insumo já está gravado no banco ElseIf AttIsMemberOf( oInput, "date" ) caso exista não há 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, If aDate[1] >= dDatabaseLen( STL->TL_TAREFA ) ) + ; Loop cType + PADR( cCode, Len( STL->TL_CODIGO ) ) EndIf) cTask := IIf( AttIsMemberOf( oInput , 'task'),lOk oInput:task, '' )= .F. cCode := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' ) Else nAmount := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 ) lOk := .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. STL->TL_FILIAL + Else STL->TL_ORDEM + STL->TL_PLANO +; STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) /*Trecho abaixo verifica se o insumo já está gravado no banco )+ ; PADR( cPlan, caso exista não há necessidade de validação*/ Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ; dbSelectArea("STL") cType + PADR( cCode, dbSetOrder( 1Len( STL->TL_CODIGO ) ) If !dbSeek( xFilial('STL') + PADR( cOrder, Len If Val( STL->TL_ORDEMSEQRELA ) )+> 0 ; //verifica se é insumo realizado PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len(.And. nAmount == STL->TL_TAREFA ) ) + ; QUANTID //comparação de quantidade lOk := cType + PADR( cCode, Len( STL->TL_CODIGO ) ) ).T. //já está gravado e não há necessidade de validar lOk := .F. Exit Else EndIf lOk := .F. dbSelectArea("STL") //Verificação abaixo para garantir que o insumo não existe no banco dbSkip() 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 PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA )Return )'Não +é ; permitido realizar insumos do tipo produto com a data retroativa. ' + ; cType + PADR( cCode, Len( STL->TL_CODIGO ) ) 'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] ) If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo realizado EndIf Next nInput EndIf EndIf .And.ElseIf nAmountcId == STL->TL_QUANTID"CANCEL_VALID" //comparaçãovalida cancelamento deda quantidadeordem If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json If Empty( oParser:message )//verifica campo observação foi passado vazio lOk := .T. //já está gravado e não há necessidade de validar Return "A observação do cancelamento é obrigatória." EndIf EndIf ElseIf cId == "FINISH_VALID_ORDER" If Exit FWJsonDeserialize(oWS:GetContent(), @oParser) If Empty( oParser:observation ) //verifica campo observação foi passado vazio Return "Campo observação deve ser informado." EndIf EndIf EndIf ElseIf cId == "FINISHED_ORDER" If dbSelectArea("STL"FWJsonDeserialize(oWS:GetContent(), @oParser) aArea dbSkip:= GetArea() aAreaSTJ := STJ->(GetArea()) EndDodbSelectArea("STJ") dbSetOrder(1) EndIf If dbSeek(xFilial("STJ") + oParser:order + oParser: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) EndIfRestArea(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_VALID'FILTER_ORDER"' If FWJsonDeserialize(oWS:GetContent(), @oParser) If Empty( oParser:observation ) //verifica campo observação foi passado vazio Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) ) ElseIf cId Return "Campo observação deve ser informado." EndIf EndIf == 'FILTER_REQUEST' Return ' AND TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) ) ElseIf cId == "FINISHED_ORDER"'UPDATE_FINISH_ORDER' If AttIsMemberOf( oWS, 'counter' ) If FWJsonDeserializeLen( oWS:GetContent(), @oParser) counter ) > 0 oWS:counter[1]:value := 3334 aArea := GetArea() aAreaSTJoWS:counter[1]:time := STJ->(GetArea()) '10:10' dbSelectArea("STJ") EndIf dbSetOrder(1) If Len( oWS:counter ) > 1 If dbSeek(xFilial("STJ") + oParser:order + oParser:plan) oWS:counter[2]:value := 3334 Reclock("STJ", .F.) STJ->TJ_DTPRINIoWS:counter[2]:time := STJ->TJ_DTMRINI '10:10' EndIf STJ->TJ_HOPRINI := STJ->TJ_HOMRINI EndIf If STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIMAttIsMemberOf( oWS, 'observation' ) STJ->TJ_HOPRFIM oWS:observation := STJ->TJ_HOMRFIM 'ALTERADO PELO P.E. MNTNG' EndIf MsUnlock() Return oWS EndIf Endif Return |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch" User Function MNTNG() Local RestArea(aAreaSTJ) RestArea(aArea) 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() Endif ElseIfLocal cId :== "FILTER_PRODUCT" PARAMIXB[1] //adicionaIndica o filtromomento parada buscachamada dedo produtosPE If Return " AND B1_GRUPO cId == '97COMPANY_GROUP_IGNORE'" ElseIfReturn cId == {"T1", "DESCRIPTION_LOCALIZATIONT2"} // Indica os grupos que devem ser ignorados pelo app EndIf Return |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch" User Function MNTNG(Altera descrição de localização do bem cCodBem := PARAMIXB[3] dbSelectArea("ST9") Local dbSetOrder(1) cId := PARAMIXB[1] //Indica o If dbSeek( xFilial("ST9") + cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI ) momento da chamada do PE Local cEmail If cId == 'FILTER_EXECUTOR' cAddresscEmail := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END") PARAMIXB[3] //Indica o email do usuário logado EndIf Return " AND TQ4_EMAIL1 = " Return+ AlltrimValtoSql( cAddresscEmail ) ElseIf cId EndIf Return |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.ch" User Function MNTNG() Local cId := PARAMIXB[1] //Indica o momento da chamada do PE == 'FILTER_ORDER' Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) ) ElseIfIf cId == 'FILTERSEARCH_FIELD_REQUESTSB1' Return ' AND TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) ) EndIf "B1_FAMILY" // indica o nome do campo para pesquisa de produto EndIf Return |