Á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ís(es)Países:

Todos

Banco(s)

Bancos de Dados:

Todos

Sistema(s) Operacional(is)Sistemas Operacionais:

Todos

Ponto de Entrada

Conteúdo do objeto no 2º parâmetro

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]
C
string

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

2OObjeto com referência ao webservice
Eventos:

.

IDDescrição
ID
CREATED_ORDER
/
Após a inclusão de uma ordem de serviço.
CREATE_VALID_ORDER
Bloco de código
titleExemplo do conteúdo
linenumberstrue
collapsetrue
{
Antes 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.
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":[ 
"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 17:56", "amount":1, "isDone":true, "unity":"PC", "lot":"", "note":"observação insumo" } ], "plan":"LOCAL", "counter":[

      { 

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

FINISHED_ORDER / FINISH_VALID_ORDER

Bloco de código
titleExemplo do conteúdo
linenumberstrue
collapsetrue
{ "startDate
"note":"
20180326
observação 
17:56
insumo"
,

   
"observation":"observ finaliza"
   }
   ],
   "plan":"
000000
LOCAL",
   "
order
counter":
"001008",
[ 
   
"json":"{\"startDate\":\"20180326 17:56\",\"observation\":\"teste stj\",\"inputs\":[{\"amount\":1,\"isDone\":true,\"unity\":\"PC\",\"task\":\"0\",\"destiny\":\"A\",\"code\":\"007\",\"type\":\"P\",\"warehouse\":\"01\",\"date\":\"20180321 17:56\",\"note\":\"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
   { 
         "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
linenumberstrue
collapsetrue
{ 
   "startDate":"20180326 17:55",
   "observation":"444",
   "plan":"000000",
   "order":"001007",
   "json":"{\"startDate\":\"20180326 17:55\",\"observation\":\"teste\",\"inputs\":[{\"amount\":1,\"isDone\":true,\"unity\":\"PC\",\"task\":\"0\",\"
step
destiny\":\"
MOTOLE\"}]}", "counter":[ { "value":370, "datetime":"20180326 18:03" } ], "hourCounter":"18:03", "endDate":"20180326 17:56", "fault":"01" }COUNTER_VALID_FINISH Bloco de código
titleExemplo do conteúdo
collapsetrue
{ "startDate":"20180326 17:55", "observation":"444", "plan":"000000", "order":"001007", "json":"{\"startDate
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\",\"
observation
equipment\":\"
teste
EMPGEN001\",\"
inputs
code\":
[{
\"
amount
001007\"
:1
,\"
isDone
type\":
true,
\"
unity\":
C\"
PC\"
,\"
task
checklist\":
\"0\",\"destiny\":\"A\",\"code\":\"005\",\"type\":\"P\",\"warehouse\":\"01\",\"date\":\
[]}",
   "counter":[ 
      { 
         "value":1001,
         "datetime":"20180326 18:06"
      }
   ],
   "hourCounter":"18:06",
   "endDate":"20180326 17:55
\
",
\"note\

   "fault":
\
"
teste\
01"
}],\"plan\":\"000000\",\"counter\":[{\"datetime\":\"20180104 08:05\",\"value\":1000}],\"service\":\"CORG2\",\"endDate\":\"20180326 17:55\",\"equipment\":\"EMPGEN001\",\"code\":\"001007\",\"type\":\"C\",\"checklist\":[]}", "counter":[

}
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",
   "code":"007822",
   "counter":[
],
   "type":"C",
   "equipment":"100002",
   "service":"COR1",
   "observation":"",
   "startDate":"20190708 09:00",
   "endDate":"20190708 10:58",
   "checklist":[
 
   ],
   "inputs":[
      {

         "
value
code":
1001
"S001",
         "
datetime
task":"
20180326 18:06
0",
      
}
   
]
"amount":3,
         "
hourCounter
date":"
18
20190708 10:
06
00",
   
"endDate
      "destiny":"
20180326 17:55
A",
         "
fault
warehouse":"01"
}CANCEL_VALID Bloco de código
titleExemplo do conteúdo
collapsetrue
{
,
         "
message
isDone":
"observação da ordem de serviço", //observação
true,
         "
plan
unity":"
000000
LT",
  
//código
 
do
 
plano
 
da
 
ordem
   "
order
type":"
001006
P",
 
//código
  
da
 
ordem
 
de
 
serviço }UPDATE_VALID_ORDER Bloco de código
titleExemplo do conteúdo
collapsetrue
{
   "
plan
note":"
000000
",
   
"code
      "lot":"
007822
",
         "
counter
sublot":
[ ]
"",
   
"type":"C",
   
"equipment":"100002",
   "
service
location":"
COR1
",
   
"observation":"",
   
"startDate":"20190708
 
09:00",
  "
endDate
serialNumber":"
20190708 10:58
"
,

   
"checklist":[
   
]
},
   
"inputs":[
   
{
         "code":"S001",
         "task":"0",
         "amount":
3
1.33,
         "date":"20190708 
10
09:00",
         "destiny":"A",
         "warehouse":"01",
         "
isDone
warehouseRequest":
true
"",
         "
unity
warehouseItem":"",
         "isDone":false,
         "unity":"LT",
         "type":"P",
         "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,
"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   

...

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).

...

titlemntng.prw

...

:= 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] }
                    
                    //Neste exemplo haverá validações somente quando informar data anterior a data atual
                    If aDate[1] >= dDatabase
                        Loop
            

...

    

...

 

...

 

...

 

...

 EndIf

                    cTask 

...

  := IIf( AttIsMemberOf( 

...

oInput , '

...

task'

...

), 

...

oInput:

...

task, '' )
                

...

    cCode   := IIf( AttIsMemberOf( oInput 

...

, '

...

code'

...

), 

...

oInput:

...

code, '

...

' )
                

...

 

...

 

...

 

...

 

...

nAmount 

...

:= IIf( AttIsMemberOf( oInput , 

...

'amount'), oInput:amount, 0 )

                    If 

...

cId 

...

== 

...

"CREATE_VALID_ORDER"
                      

...

  lOk :=

...

 .F.
                    Else
               

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...


                    

...

    /*Trecho abaixo verifica se o insumo  está gravado no banco
       

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

              caso exista não  necessidade de 

...

validação*/

 

...

 

...

 

...

 

...

 

...

 

...

                  dbSelectArea("STL")
      

...

                  dbSetOrder( 1 

...

)
                    

...

   

...

 

...

If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
           

...

     

...

 

...

                   PADR( 

...

cPlan, 

...

Len( 

...

STL->TL_PLANO ) )

...

 + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
               

...

 

...

 

...

 

...

 

...

 

...

 

...

               cType + PADR( cCode, 

...

Len( STL->TL_CODIGO ) ) )
                        

...

 

...

 

...

 

...

 

...

lOk 

...

:= .F.
                    

...

    Else
                

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

     lOk := .F.
             

...

               

...

//

...

Verificação 

...

abaixo 

...

para 

...

garantir 

...

que 

...

o 

...

insumo 

...

não 

...

existe 

...

no 

...

banco
               

...

             While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
      

...

                    

...

      STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ 

...

;
   

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

                    

...

   

...

 

...

 

...

PADR( 

...

cPlan, 

...

Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
          

...

                         

...

 

...

cType 

...

+ PADR( cCode, Len( STL->TL_CODIGO ) )

                   

...

 

...

 

...

           If Val( STL->TL_SEQRELA ) > 0 ; //verifica se 

...

é insumo realizado
                      

...

              .And. nAmount == STL->TL_QUANTID //comparação de quantidade
    

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

                      lOk := .T. //já está gravado 

...

e 

...

não há necessidade de 

...

validar
                            

...

        Exit
                

...

 

...

 

...

              EndIf
          

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

            dbSelectArea("STL")
                        

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

dbSkip()
                            EndDo
        

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

        EndIf
                    

...

EndIf

                    

...

If !lOk
                        Return 'Não é 

...

permitido realizar insumos do tipo produto com a data retroativa. ' + ;
                 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

         'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] )
      

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

    EndIf

                Next nInput
           

...

 EndIf
        EndIf
    ElseIf cId == "CANCEL_VALID" //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
                Return "A observação do cancelamento é obrigatória."
            EndIf
        EndIf
   

...

 

...

 

...


	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."
  

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 EndIf
		EndIf
	
    ElseIf cId == "FINISHED_ORDER"       
        

...

If FWJsonDeserialize(oWS:GetContent(), @oParser)
         

...

 

...

 

...

 

...

 

...


            aArea := GetArea()
            aAreaSTJ := STJ->(GetArea())
 
 
      

...

 

...

 

...

 

...

 

...

 

...

 dbSelectArea("STJ")
            dbSetOrder(1)
            If dbSeek(xFilial("STJ") + 

...

oParser:order + oParser:plan)
          

...

      Reclock("STJ", .F.)
                STJ->TJ_DTPRINI := STJ->TJ_DTMRINI
       

...

         STJ->TJ_HOPRINI := STJ->TJ_HOMRINI
                STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIM
   

...

             STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM
                

...

MsUnlock()

...

            Endif
 
            

...

RestArea(aAreaSTJ)
            RestArea(aArea)
        Endif
    

...

     
    ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos
  

...

     Return " AND B1_GRUPO = '97'"

	ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do 

...

bem
    	cCodBem 

...

:= PARAMIXB[3]

        dbSelectArea("ST9")
      

...

 

...

 

...

dbSetOrder(1)
 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

If 

...

dbSeek( xFilial("ST9") + 

...

cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI )
            cAddress := Posicione("SA1",1,xFilial("SA1") 

...

+ ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END")
        

...

EndIf

        Return Alltrim( cAddress )
	
	ElseIf cId == 'FILTER_ORDER'

    	Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) )
        
    ElseIf cId == 'FILTER_REQUEST'

  

...

 

...

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

...

)

	ElseIf cId == 'UPDATE_FINISH_ORDER'

     

...

    

...

 

...

If 

...

AttIsMemberOf( oWS, 'counter' )

      

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

  If Len( oWS:counter ) > 0

     

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

       oWS:counter[1]:value := 3334
       

...

 

...

 

...

 

...

 

...

 

...

 

...

       oWS:counter[1]:time  

...

:= '10:10'

        

...

     

...

 

...

 EndIf

               If Len( oWS:counter ) > 1

       

...

 

...

 

...

 

...

 

...

 

...

       

...

 oWS:counter[2]:value := 3334
           

...

        

...

 

...

oWS:

...

counter[2]:time  := '10:10'

           

...

    EndIf

        

...

 

...

 EndIf

          If AttIsMemberOf( 

...

oWS, 'observation' )
		
               oWS:observation := 'ALTERADO PELO 

...

P.E. MNTNG'

	      EndIf

      

...

    Return oWS
 
    EndIf
 

...


Return
Bloco de código
languagesql
titleExemplo do id FILTER_WAREHOUSE
collapsetrue
#include "PROTHEUS.ch"
User Function MNTNG()
  
    Local 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()
  
    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
languagesql
titleExemplo do id FILTER_EXECUTOR
collapsetrue
#include "PROTHEUS.ch"
User Function MNTNG()
   
    Local cId    := PARAMIXB[1] //Indica o momento da chamada do PE
    Local cEmail
 
    If cId == 'FILTER_EXECUTOR'
        cEmail := PARAMIXB[3] //Indica o email do usuário logado
        Return " AND 

...

TQ4_EMAIL1 = " + ValtoSql( cEmail )
    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
 
    

...

If cId == 

...

'SEARCH_FIELD_SB1'
        Return "B1_FAMILY" // indica o nome do campo para pesquisa de produto
    

...

EndIf

...


Return