Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

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:
RotinaNome Técnico
MNTNGFunção do aplicativo MNT NG

Países:

Todos

Bancos de Dados:

Todos

Sistemas Operacionais:

Todos

Ponto de Entrada

{ "startDate"

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:
PosiçãoTipoDescrição
ParamIXB[1]string

ID do local de execução do ponto de entrada.

IDDescrição
CREATED_ORDERApós a inclusão de uma ordem de serviço.
CREATE_VALID_ORDERAntes da inclusão de uma ordem de serviço.
UPDATE_VALID_ORDERAntes da alteração de uma ordem de serviço.

UPDATE_FINISH_ORDER

Após a confirmação da finalização, sendo permitido manipular as informações enviadas na finalização.
FINISHED_ORDERApós a finalização de uma ordem de serviço.
FINISH_VALID_ORDERValidação antes da finalização de uma ordem de serviço.
CANCEL_VALIDValidação antes do cancelamento de uma ordem de serviço.
CREATED_PLANNED_INPUTApós incluir um insumo previsto.
COUNTER_VALID_FINISHValidação de contador na finalização.
FILTER_PRODUCTFiltro para produtos.

FILTER_EQUIPMENT

Filtro para bens ou localizações.

FILTER_SERVICE

Filtro para serviços.

FILTER_COSTCENTER

Filtro para centros de custo.

FILTER_FAMILY

Filtro para famílias de bens.

FILTER_TOOL

Filtro para ferramentas.

FILTER_EXECUTORFiltro para executantes de S.S.

FILTER_AREA

Filtro para áreas da manutenção.

FILTER_THIRDPART

Filtro para terceiros.

DESCRIPTION_LOCALIZATIONSincronização, ao gerar o arquivo que contém dados dos bens.
FILTER_ORDER

Filtro para ordens de serviço.

Informações
titleObservação
  • Este ID somente terá efeito ao acionado quando feito logout no aplicativo MNTNG.
FILTER_REQUEST

Filtro para solicitações de serviço.

ParamIXB[2]obejctObjeto com referência ao webservice.
Informações
titleObservação
  • Este ID somente terá efeito ao acionado quando feito logout no aplicativo MNTNG.
FILTER_WAREHOUSE

Filtro para locais de estoque (SB2)

Informações
titleObservação
  • Este ID somente terá efeito ao acionado quando feito logout no aplicativo MNTNG.
COMPANY_GROUP_IGNORE

Grupo de empresas que devem ser ignoradas pelo aplicativo

Aviso

Para a utilização do MNT NG via Mingle este ID para filtrar filiais não é considerado tendo em vista que a autenticação e permissão de acesso é realizada via Api Totvs. Qualquer restrição de acesso deve ser realizada via configurador Protheus.  

SEARCH_FIELD_SB1Nome do campo utilizado para pesquisa/busca de produto (insumo da ordem de serviço).
ParamIXB[2]obejct
IDConteúdo
CREATED_ORDER / CREATE_VALID_ORDER
Bloco de código
languagexml
titleExemplo
linenumberstrue
collapsetrue
{ 
   "startDate"
Eventos:
IDConteúdo do objeto no 2º parâmetro

CREATED_ORDER / CREATE_VALID_ORDER

Bloco de código
titleExemplo do conteúdo
linenumberstrue
collapsetrue
:"20180326 17:56",
   "observation":"observação da ordem de serviço",
   "inputs":[ 

      { 

         "sublot":"",
         "location":"",
         "task":"0",
         "serialNumber":"",
         "destiny":"A",
         "code":"007",
         "type":"P",
         "warehouse":"01",
         "date":"20180321 17:56",
         "amount":1,
         "isDone":true,
         "unity":"PC",
         "lot":"",
         "note":"observação insumo"
      }
   ],
   "plan":"LOCAL",
   "counter":[
 
      {
 
         "datetime":"20170128 10:00",
         "value":370
      }
   ],
   "service":"CORG2",
   "endDate":"20180326 17:56",
   "equipment":"EMPILHADEIRA 002",
   "code":"000000",
   "type":"C",
   "checklist":[ 

      {
 
         "worker":"1008",
         "isDone":true,
         "task":"0",
         "step":"MOTOLE"
      }
   ]
}
FINISHED_ORDER / FINISH_VALID_ORDER /  / COUNTER_VALID_FINISH / UPDATE_FINISH_ORDER
Bloco de código
languagexml
titleExemplo
do conteúdo
linenumberstrue
collapsetrue
{
 
   "startDate":"20180326 17:
56
55",
   "observation":"
observ finaliza
444",
   "plan":"000000",
   "order":"
001008
001007",
   "json":"{\"startDate\":\"20180326 17:
56
55\",\"observation\":\"teste
stj
\",\"inputs\":[{\"amount\":1,\"isDone\":true,\"unity\":\"PC\",\"task\":\"0\",\"destiny\":\"A\",\"code\":\"
007
005\",\"type\":\"P\",\"warehouse\":\"01\",\"date\":\"
20180321
20180326 17:
56
55\",\"note\":\"teste
observação insumo
\"}],\"plan\":\"000000\",\"counter\":[{\"datetime\":\"
20170128
20180104 
10
08:
00
05\",\"value\":
370
1000}],\"service\":\"CORG2\",\"endDate\":\"20180326 17:
56
55\",\"equipment\":\"
EMPILHADEIRA 002
EMPGEN001\",\"code\":\"
001008
001007\",\"type\":\"C\",\"checklist\":[
{\"worker\":\"1008\",\"isDone\":true,\"task\":\"0\",\"step\":\"MOTOLE\"}
]}",
   "counter":[ 

      { 

         "value":
370
1001,
         "datetime":"20180326 18:
03
06"
      }
   ],
   "hourCounter":"18:
03
06",
   "endDate":"20180326 17:
56
55",
   "fault":"01"
}
COUNTER
CANCEL_VALID
_FINISH
Bloco de código
languagexml
titleExemplo
do conteúdo
linenumberstrue
collapsetrue
{
 
   "
startDate
message":"
20180326 17:55", "observation":"444",
observação da ordem de serviço", //observação
   "plan":"000000", //código do plano da ordem
   "order":"
001007",
001006" //código da ordem de serviço
}
UPDATE_VALID_ORDER
Bloco de código
languagexml
titleExemplo
linenumberstrue
collapsetrue
{
   "
json
plan":
"{\"startDate\":\"20180326 17:55\",\"observation\":\"teste\",\"inputs\":[{\"amount\":1,\"isDone\":true,\"unity\":\"PC\",\"task\":\"0\",\"destiny\":\"A\",\"code\":\"005\",\"type\":\"P\",\"warehouse\":\"01\",\"date\":\"20180326 17:55\",\"note\":\"teste\"}],\"plan\":\"000000\",\"counter\":[{\"datetime\":\"20180104 08:05\",\"value\":1000}],\"service\":\"CORG2\",\"endDate\":\"20180326 17:55\",\"equipment\":\"EMPGEN001\",\"code\":\"001007\",\"type\":\"C\",\"checklist\":[]}", "counter":[ {
"000000",
   "code":"007822",
   "counter":[
],
   "type":"C",
   "equipment":"100002",
   "service":"COR1",
   "observation":"",
   "startDate":"20190708 09:00",
   "endDate":"20190708 10:58",
   "checklist":[
 
   ],
   "inputs":[
      {
         "code":"S001",
         "task":"0",
         "amount":3,
         "date":"20190708 10:00",
         "destiny":"A",
         "warehouse":"01",
         "isDone":true,
         "unity":"LT",
         "type":"P",
         "note":"",
         "lot":"",
         "sublot":"",
         "
value
location":
1001
"",
         "
datetime
serialNumber":"
20180326 18:06
"
      },
      
],
{
         "
hourCounter
code":"
18:06
S001",
         "
endDate
task":"
20180326 17:55
0",
   
"fault":"01" }CANCEL_VALID Bloco de código
titleExemplo do conteúdo
collapsetrue
{
      "amount":1.33,
         "
message
date":"
observação da ordem de serviço", //observação
20190708 09:00",
         "
plan
destiny":"
000000
A",
 
//código
  
do
 
plano
 
da
 
ordem
   "
order
warehouse":"
001006
01"
//código da ordem de serviço }UPDATE_VALID_ORDER Bloco de código
titleExemplo do conteúdo
collapsetrue
{ "plan":"000000
,
         "warehouseRequest":"",
   
"code
      "warehouseItem":"
007822
",
         "
counter
isDone":
[ ]
false,
         "
type
unity":"
C
LT",
         "
equipment
type":"
100002
P",
         "
service
note":"
COR1
",
         "
observation
lot":"",
   
"startDate
      "sublot":"
20190708 09:00
",
   
"endDate
      "location":"
20190708 10:58
",
         "
checklist
serialNumber":
[
""
   
],
   
"inputs":[
},
      {
         "code":"
S001
000036",
         "task":"0",
         "amount":
3
1.33,
         "
date
startDate":"20190708 
10
09:
00
38",
         "
destiny
endDate":"
A
20190708 10:58",
         "
warehouse
isDone":
"01"
false,
         "
isDone
unity":
true
"H",
         "
unity
type":"
LT
M",
         "
type
percent":
"P"
0,
         "note":""
,

      
"lot":"",
}
   
"sublot":"", "location":"", "serialNumber":"" }, { "code":"S001", "task":"0", "amount":1.33, "date":"20190708 09:00", "destiny":"A", "warehouse":"01", "warehouseRequest":"", "warehouseItem":"", "isDone":false, "unity":"LT", "type":"P", "note":"", "lot":"", "sublot":"", "location":"", "serialNumber":"" }, { "code":"000036", "task":"0", "amount":1.33, "startDate":"20190708 09:38", "endDate":"20190708 10:58", "isDone":false, "unity":"H", "type":"M", "percent":0, "note":"" } ] }

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:

IDMOMENTO DE EXECUÇÃO DO PONTO DE ENTRADARETORNO
CREATED_ORDERApós a inclusão de uma ordem de serviçoNulo
CREATE_VALID_ORDERAntes da inclusão de uma ordem de serviçoString (retorna string com motivo quando a validação é negativa. Quando é positivo deve retornar vazio)
UPDATE_VALID_ORDERAntes da alteração de uma ordem de serviçoString (retorna string com motivo quando a validação é negativa. Quando é positivo deve retornar vazio)
FINISHED_ORDERApós a finalização de uma ordem de serviçoNulo
FINISH_VALID_ORDERValidação antes da finalização de uma ordem de serviçoString (retorna string com motivo quando a validação é negativa. Quando é positivo deve retornar vazio)
CANCEL_VALIDValidação antes do cancelamento de uma ordem de serviço

String (retorna string com motivo quando a validação é negativa. Quando é positivo deve retornar vazio)

CREATED_PLANNED_INPUTApós incluir um insumo previstoNulo
COUNTER_VALID_FINISHValidação de contador na finalizaçãoString (retorna string com motivo quando a validação é negativa. Quando é positivo deve retornar vazio)
FILTER_PRODUCTFiltro para produtosString que será adicionada à cláusura 'where' para produtos (SB1).

FILTER_EQUIPMENT

Filtro para bensString que será adicionada à cláusura 'where' para bens (ST9).

FILTER_SERVICE

Filtro para serviçosString que será adicionada à cláusura 'where' para serviços (ST4).

FILTER_COSTCENTER

Filtro para centros de custoString que será adicionada à cláusura 'where' para centros de custo (CTT).

FILTER_FAMILY

Filtro para famílias de bens

String que será adicionada à cláusura 'where' para famílias de bens (ST6).

FILTER_TOOL

Filtro para ferramentas

String que será adicionada à cláusura 'where' para ferramentas (SH4).

FILTER_AREA

Filtro para áreas da manutençãoString que será adicionada à cláusura 'where' para área (STD).

FILTER_THIRDPART

Filtro para terceiros

String que será adicionada à cláusura 'where' terceiros (SA2).

DESCRIPTION_LOCALIZATIONSincronização, ao gerar o arquivo que contém dados dos bensString que será utilizada para localização do bem.
]
}
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:

IDTipoDescrição
CREATED_ORDERnullSem retorno.
CREATE_VALID_ORDERstringMotivo quando a validação é negativa. Quando é positivo deve retornar vazio.
UPDATE_VALID_ORDERstringMotivo quando a validação é negativa. Quando é positivo deve retornar vazio.
FINISHED_ORDERnullSem retorno.
FINISH_VALID_ORDERstringMotivo quando a validação é negativa. Quando é positivo deve retornar vazio.
CANCEL_VALIDstringMotivo quando a validação é negativa. Quando é positivo deve retornar vazio.
CREATED_PLANNED_INPUTnullSem retorno.
COUNTER_VALID_FINISHstringMotivo quando a validação é negativa. Quando é positivo deve retornar vazio.
FILTER_PRODUCTstringCondição SQL que será inclusa na cláusula WHERE para tabela Produtos - SB1.
FILTER_EQUIPMENTstringCondição SQL que será inclusa na cláusula WHERE para tabela Bens - ST9/Localizações - TAF.
FILTER_SERVICEstringCondição SQL que será inclusa na cláusula WHERE para tabela Serviços - ST4.
FILTER_COSTCENTERstringCondição SQL que será inclusa na cláusula WHERE para tabela Centro de Custos - CTT.
FILTER_FAMILYstringCondição SQL que será inclusa na cláusula WHERE para tabela Família de Bens - ST6.
FILTER_TOOLstringCondição SQL que será inclusa na cláusula WHERE para tabela Ferramentas - SH4.
FILTER_AREAstringCondição SQL que será inclusa na cláusula WHERE para tabela Área - STD.
FILTER_THIRDPARTstringCondição SQL que será inclusa na cláusula WHERE para tabela Terceiros - SA2.
DESCRIPTION_LOCALIZATIONstringString que será utilizada para localização do bem.
FILTER_ORDERstringCondição SQL que será inclusa na cláusula WHERE para tabela Ordens de Serviço - STJ.
FILTER_REQUESTstringCondição SQL que será inclusa na cláusula WHERE para tabela Solicitações de Serviço - TQB.
FILTER_WAREHOUSEstringCondição SQL que será inclusa na cláusula WHERE para tabela Saldos físicos - SB2
FILTER_EXECUTORstringCondição SQL que será inclusa na cláusula WHERE e filtrar executantes de S.S. com o usuário logado.
UPDATE_FINISH_ORDERobjectJSON contendo informações da finalização da O.S.
COMPANY_GROUP_REJECTarray

Array com os grupos de empresas que devem ser ignorados pelo app

Aviso

Para a utilização do MNT NG via Mingle este ID para filtrar filiais não é considerado tendo em vista que a autenticação e permissão de acesso é realizada via Api Totvs. Qualquer restrição de acesso deve ser realizada via configurador Protheus.  

SEARCH_FIELD_SB1STRING

Nome do campo utilizado para realizar a pesquisa/busca de produto (insumo da ordem de serviço.)

Bloco de código
languagesql
titleExemplo de ponto de entrada mntng.prw
linenumberstrue
collapsetrue
#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, " " )
                    EndIf
                    aDate := { STOD( aDate[1] ), aDate[2] }
Bloco de código
languagesql
titleExemplo de ponto de entrada mntng.prw
linenumberstrue
collapsetrue
#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

                cOrder  := IIf( AttIsMemberOf( oParser, 'code' ), oParser:code, '' )
      //Neste exemplo haverá validações somente quando informar data anterior a data atual
           cPlan   := IIf( AttIsMemberOf( oParser, 'plan'  ), oParser:plan, '000000' )If aDate[1] >= dDatabase
                //Bloco abaixo realiza validações nos insumos
   Loop
             For nInput := 1 To Len( oParser:inputs )EndIf

                    oInputcTask   := oParser:inputs[ nInput ]
 IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' )
                    cTypecCode   := IIf( AttIsMemberOf( oInput , 'typecode'  ), oInput:typecode, '' )
                    lIsDonenAmount := IIf( AttIsMemberOf( oInput , 'isDoneamount'), oInput:isDoneamount, .F.0 )
                    
                    //NesteIf exemplocId haverá validações somente para produtos realizados
== "CREATE_VALID_ORDER"
                        IflOk cType !:= "P" .OrF. !lIsDone 
                    Else
    Loop
                    EndIf

                    aDate   := { dDatabase, '08:00' }
          /*Trecho abaixo verifica se o insumo  está gravado no lOkbanco
     := .T.

                    If AttIsMemberOf( oInput, "startDate" )
    caso exista não há necessidade de validação*/

                    aDate := StrTokArr( oInput:startDate, dbSelectArea(" STL" )
                      ElseIf  AttIsMemberOfdbSetOrder( oInput, "date"1 )
                        If !dbSeek(  aDate := StrTokArr( oInput:date, " " )xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
                    EndIf
                PADR( cPlan, Len( STL->TL_PLANO aDate) :=) {+ STODPADR( aDate[1] )cTask, aDate[2] }
    Len( STL->TL_TAREFA ) ) + ;
                
                    //Neste exemplo haverá validações somente quando informar data anterior a data atualcType + PADR( cCode, Len( STL->TL_CODIGO ) ) )
                    If aDate[1] >= dDatabase
     lOk := .F.
                 Loop
       Else
             EndIf

               lOk := .F.
   cTask   := IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' )
              //Verificação abaixo para garantir que o cCodeinsumo não existe := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' )
no banco
                           nAmount := IIfWhile !STL->( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 )

Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
                    If cId == "CREATE_VALID_ORDER"
          STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == 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 verifica se o insumo  está gravado no banco
        cType + PADR( cCode, Len( STL->TL_CODIGO ) )

             caso exista não  necessidade de validação*/

             If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é  dbSelectArea("STL")
insumo realizado
                           dbSetOrder( 1 )
       .And. nAmount == STL->TL_QUANTID //comparação de quantidade
           If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
               lOk := .T. //já está gravado e não  necessidade de validar
            PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
          Exit
                          cType + PADR( cCode, Len( STL->TL_CODIGO ) ) )
 EndIf
                              lOk := .F. dbSelectArea("STL")
                        Else
        dbSkip()
                    lOk := .F.
      EndDo
                      //Verificação abaixo paraEndIf
 garantir que o insumo não existe no banco
            EndIf

                While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
If !lOk
                        Return 'Não é permitido realizar insumos do tipo produto com a data  STL->TL_TAREFAretroativa. ' + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
;
                                    'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc(  PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
aDate[1] )
                    EndIf

                Next nInput
            EndIf
 cType + PADR( cCode, Len( STL->TL_CODIGO ) )EndIf

    ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem
        If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
        If Val( STL->TL_SEQRELA ) >If 0 ; Empty( oParser:message )//verifica secampo observação éfoi insumopassado realizadovazio
                Return "A observação do cancelamento é obrigatória."
            EndIf
  .And. nAmount == STL->TL_QUANTID //comparação de quantidadeEndIf
     
	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 lOkser := .T. //já está gravado e não há necessidade de validar
   informado."
            EndIf
		EndIf
	
    ElseIf cId == "FINISHED_ORDER"       
        If FWJsonDeserialize(oWS:GetContent(), @oParser)
         Exit
    
            aArea := GetArea()
              EndIf
    aAreaSTJ := STJ->(GetArea())
 
 
            dbSelectArea("STJ")
            dbSelectAreadbSetOrder("STL"1)
            If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
                dbSkip(Reclock("STJ", .F.)
                STJ->TJ_DTPRINI := STJ->TJ_DTMRINI
              EndDo
  STJ->TJ_HOPRINI := STJ->TJ_HOMRINI
                STJ->TJ_DTPRFIM    EndIf:= STJ->TJ_DTMRFIM
                STJ->TJ_HOPRFIM    EndIf

:= STJ->TJ_HOMRFIM
                    If !lOkMsUnlock()
            Endif
 
           Return 'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + ; RestArea(aAreaSTJ)
            RestArea(aArea)
        Endif
         
    ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos
      'Verifique oReturn insumo/produto" 'AND +B1_GRUPO cCode= + ' data ' + Dtoc( aDate[1] )
          97'"

	ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem
    	cCodBem      EndIf:= PARAMIXB[3]

        dbSelectArea("ST9")
        Next nInputdbSetOrder(1)
        If dbSeek( xFilial("ST9") + EndIf
cCodBem ) .And. !Empty( ST9->T9_CLIENTE +   EndIfST9->T9_LOJACLI )
    ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem
 cAddress := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE   If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
  + ST9->T9_LOJACLI,"SA1->A1_END")
        EndIf

        Return  If EmptyAlltrim( oParser:messagecAddress )//verifica campo observação foi passado vazio
	
	ElseIf cId == 'FILTER_ORDER'

    	Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020'   Return "A observação do cancelamento é obrigatória."
) )
        
    ElseIf cId  EndIf== 'FILTER_REQUEST'

    	Return ' AND  EndIf
     TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) )

	ElseIf cId == "'UPDATE_FINISH_VALID_ORDER"'
	
		
          If FWJsonDeserializeAttIsMemberOf( oWS:GetContent(), @oParser)
			If Empty( oParser:observation ) //verifica campo observação foi passado vazio
, 'counter' )

               If Len( oWS:counter ) > 0

     Return "Campo observação deve ser informado."
          oWS:counter[1]:value  EndIf
		EndIf
	
:= 3334
    ElseIf cId == "FINISHED_ORDER"       
      oWS:counter[1]:time  If FWJsonDeserialize(oWS:GetContent(), @oParser)
:= '10:10'

               EndIf

            aArea := GetArea()
 If Len( oWS:counter ) > 1

      aAreaSTJ := STJ->(GetArea())
 
 
          oWS:counter[2]:value  dbSelectArea("STJ"):= 3334
            dbSetOrder(1)
        oWS:counter[2]:time    If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
:= '10:10'

               EndIf

     Reclock("STJ", .F.)
    EndIf

          If  STJ->TJ_DTPRINI := STJ->TJ_DTMRINIAttIsMemberOf( oWS, 'observation' )
		
                STJ->TJ_HOPRINIoWS:observation := STJ->TJ_HOMRINI
 'ALTERADO PELO P.E. MNTNG'

	      EndIf

          STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIMReturn oWS
 
    EndIf
 
Return
Bloco de código
languagesql
titleExemplo do id FILTER_WAREHOUSE
collapsetrue
#include "PROTHEUS.ch"
User Function MNTNG()
  
    Local STJ->TJ_HOPRFIMcId := STJ->TJ_HOMRFIM
       PARAMIXB[1] //Indica o momento da chamada do PE

	If cId == 'FILTER_WAREHOUSE'
		Return " AND B2_LOCAL = '01' "
	EndIf

Return
Bloco de código
languagesql
titleExemplo do id COMPANY_GROUP_IGNORE
collapsetrue
#include "PROTHEUS.ch"
User Function MNTNG          MsUnlock()
  
    Local cId := PARAMIXB[1] //Indica o Endif
momento 
da chamada do PE

	If cId        RestArea== 'COMPANY_GROUP_IGNORE'
		Return  {"T1", "T2"} // Indica os grupos que devem ser ignorados pelo app
	EndIf

Return
Bloco de código
languagesql
titleExemplo do id FILTER_EXECUTOR
collapsetrue
#include "PROTHEUS.ch"
User Function MNTNG()
   (aAreaSTJ)
            RestArea(aArea)
        Endif
    Local cId    
    ElseIf cId == "FILTER_PRODUCT":= PARAMIXB[1] //adicionaIndica o filtromomento parada buscachamada dedo produtosPE
    Local cEmail
 
 Return " AND B1_GRUPO = '97'"

	ElseIf If cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem
'FILTER_EXECUTOR'
        	cCodBemcEmail := PARAMIXB[3]

 //Indica o email do usuário logado
        Return dbSelectArea("ST9")
 AND TQ4_EMAIL1 = " + ValtoSql( cEmail dbSetOrder(1)
    EndIf

Return
Bloco de código
languagesql
titleExemplo do id SEARCH_FIELD_SB1
collapsetrue
#include "PROTHEUS.ch"
User Function MNTNG()
 If dbSeek( xFilial("ST9") + cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI )
        
    Local cId := PARAMIXB[1] //Indica o momento da chamada do PE
 
    If cAddresscId := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END")
== 'SEARCH_FIELD_SB1'
        Return "B1_FAMILY" // indica EndIf

o nome do campo para pesquisa de produto
 Return Alltrim( cAddress )
	EndIf
 
Return