Á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":"20180326

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.

Informações
titleObservação
  • Este ID somente terá efeito ao acionado quando feito logout no aplicativo MNTNG.
ParamIXB[2]obejctObjeto 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:

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.
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_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":"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
Eventos:
IDConteúdo do objeto no 2º parâmetro

CREATED_ORDER / CREATE_VALID_ORDER

Bloco de código
titleExemplo do conteúdo
linenumberstrue
collapsetrue
 17:56",
   
"observation":"observação da
 
ordem
 
de
 
serviço",
   "
inputs
amount":
[
1,
  
      
{
 "isDone":true,
         "
sublot
unity":"PC",
         "
location
lot":"",
         "
task
note":"
0
observação insumo"
,

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

}
FINISHED_ORDER / FINISH_VALID_ORDER /  / COUNTER_VALID_FINISH / UPDATE_FINISH_ORDER
Bloco de código
languagexml
titleExemplo
linenumberstrue
collapsetrue
{ 
   "
endDate
startDate":"20180326 17:
56
55",
   "
equipment
observation":"
EMPILHADEIRA 002
444",
   "
code
plan":"000000",
   "
type
order":"
C
001007",
   "
checklist
json":
[ { "worker":"1008", "isDone":true, "task":"0", "step":"MOTOLE" } ] }

FINISHED_ORDER / FINISH_VALID_ORDER

Bloco de código
titleExemplo do conteúdo
linenumberstrue
collapsetrue
{ "startDate":"20180326 17:56", "observation":"observ finaliza", "plan":"000000", "order":"001008", "json":"{\"startDate
"{\"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:
56
55\",\"
observation
note\":\"teste
stj
\"}],\"
inputs
plan\":
[{
\"
amount
000000\"
:1
,\"
isDone
counter\":
true,
[{\"
unity
datetime\":\"
PC
20180104 08:05\",\"
task
value\":
\"0\"
1000}],\"
destiny
service\":\"
A
CORG2\",\"
code
endDate\":\"
007
20180326 17:55\",\"
type
equipment\":\"
P
EMPGEN001\",\"
warehouse
code\":\"
01
001007\",\"
date
type\":\"
20180321 17:56
C\",\"
note
checklist\":
\"teste observação insumo\"}],\"plan\":\"000000\",\"counter\":[{\"datetime\":\"20170128 10:00\",\"value\":370}],\"service\":\"CORG2\",\"endDate\":\"20180326 17:56\",\"equipment\":\"EMPILHADEIRA 002\",\"code\":\"001008\",\"type\":\"C\",\"checklist\":[{\"worker\":\"1008\",\"isDone\":true,\"task\":\"0\",\"step\":\"MOTOLE\"}]}", "counter":[ { "value":370, "datetime":"20180326 18:03" } ], "hourCounter":"18:03
[]}",
   "counter":[ 
      { 
         "value":1001,
         "datetime":"20180326 18:06"
      }
   ],
   "hourCounter":"18:06",
   "endDate":"20180326 17:55",
   "fault":"01"
}
CANCEL_VALID
Bloco de código
languagexml
titleExemplo
linenumberstrue
collapsetrue
{ 
   "message":"observação da ordem de serviço", //observação
   "plan":"000000", //código do plano da ordem
   "order":"001006" //código da ordem de serviço
}
UPDATE_VALID_ORDER
Bloco de código
languagexml
titleExemplo
linenumberstrue
collapsetrue
{
   "plan":"000000",
   "
endDate
code":"
20180326 17:56
007822",
   "
fault
counter":
"01" }COUNTER_VALID_FINISH Bloco de código
titleExemplo do conteúdo
collapsetrue
{
[
],
   "
startDate
type":"
20180326 17:55
C",
   "
observation
equipment":"
444
100002",
   "
plan
service":"
000000
COR1",
   "
order
observation":"
001007
",
   
"json
"
:"{\"
startDate
\
":
\
"
20180326
20190708 
17
09:
55\
00",
\"observation\

   "endDate":
\"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":[
"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":"",
         "location":"",
         "serialNumber":""
      },
      {

         "
value
code":
1001
"S001",
         "
datetime
task":"
20180326 18:06
0",
      
}
   
]
"amount":1.33,
         "
hourCounter
date":"
18
20190708 09:
06
00",
   
"endDate
      "destiny":
"20180326 17:55
"A",
         "warehouse":"01",
         "
fault":"01" }CANCEL_VALID
Bloco de código
titleExemplo do conteúdo
collapsetrue
{  
   "message":"observação da ordem de serviço", //observação
   "plan":"000000", //código do plano da ordem
   "order":"001006" //código da ordem de serviço
}
UPDATE_VALID_ORDER Bloco de código
titleExemplo do conteúdo
collapsetrue
{ "plan":"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":"",
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:

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
           

...

         

...

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
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  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  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
languagesql
titleExemplo do id FILTER_WAREHOUSE
collapsetrue
#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
languagesql
titleExemplo do id COMPANY_GROUP_IGNORE
collapsetrue
#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
languagesql
titleExemplo do id FILTER_EXECUTOR
collapsetrue
#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
languagesql
titleExemplo do id SEARCH_FIELD_SB1
collapsetrue
#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