Á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

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.
FINISHED
CANCEL_
COUNTER_1
Após a confirmação da finalização, sendo que o campo contador 1 não deve ter sido informado no APP.
VALIDValidação antes do cancelamento de uma ordem de serviço.
CREATED_PLANNED_INPUTApós incluir um

FINISHED_COUNTER_2

Após a confirmação da finalização, sendo que o campo contador 2 não deve ter sido informado no APP.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.

FINISHED_COUNTER_1

numericValor a ser reportado no contador 1 para o processo de finalização de O.S.

FINISHED_COUNTER_2

numericValor a ser reportado no contador 2 para o processo de finalização de O.S.
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 17:56",
         "amount":1,
         "isDone":true,
         "unity":"PC",
         "lot
Eventos:
IDConteúdo do objeto no 2º parâmetro

CREATED_ORDER / CREATE_VALID_ORDER

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

      }
   ],
   "
task
plan":"
0
LOCAL",
   "counter":[ 
      { 
"serialNumber":"",

         "
destiny
datetime":"
A
20170128 10:00",
         "
code
value":
"007",
370
      }
   
"type
],
   "service":"
P
CORG2",
   
"endDate":"20180326 17:56",
   
"
warehouse
equipment":"
01
EMPILHADEIRA 002",
   
"code":"000000",
   
"
date
type":"
20180321 17:56
C",
   "checklist":[ 
      { 
"amount":1,

         "
isDone
worker":
true
"1008",
         "
unity
isDone":
"PC"
true,
         "
lot
task":"0",
         "
note
step":"
observação insumo
MOTOLE"
      }
   ]
, "plan":"LOCAL

}
FINISHED_ORDER / FINISH_VALID_ORDER /  / COUNTER_VALID_FINISH / UPDATE_FINISH_ORDER
Bloco de código
languagexml
titleExemplo
linenumberstrue
collapsetrue
{ 
   "startDate":"20180326 17:55",
   "
counter
observation":
[
"444",
   
{
"plan":"000000",
   
"
datetime
order":"
20170128 10:00
001007",
   
"value":370 } ], "service":"CORG2", "endDate":
"json":"{\"startDate\":\"20180326 17:
56
55\",
"equipment
\"observation\":\"
EMPILHADEIRA 002
teste\",
"code
\"inputs\":[{\"
000000
amount\"
, "type":"C", "checklist":[ { "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", "plan":"000000", "order":"001008", "observation":"observ finaliza", JSON:"{"startDate":"20210126 16:43","observation":"","inputs":[],"plan":"000000","counter":[{"datetime":"20210126
: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":[ 
      { 
         
16:44
"
,"
value":
0,"time
1001,
         "datetime":"
16
20180326 18:
44"}],"service":"CORGEN",
06"
      }
   ],
   "hourCounter":"18:06",
   "endDate":"
20210126
20180326 
16
17:
43
55",
   "
equipment
fault":"
0000000000000003","code":"000432","type":"C","checklist":[]}"
01"
}
CANCEL_VALID
Bloco de código
languagexml
titleExemplo
linenumberstrue
collapsetrue
{ 
   "
counter
message":
[
"observação da 
ordem de serviço", //observação
   
{
"plan":"000000", //código do plano da ordem
   
"
value":370, TIME:"16:44"
order":"001006" //código da ordem de serviço
}
UPDATE_VALID_ORDER
Bloco de código
languagexml
titleExemplo
linenumberstrue
collapsetrue
{
   "
datetime
plan":"
20180326 18:03
000000",
   "code":"007822",
   
}
"counter":[
],
   "
hourCounter
type":"
18:03
C",
   "
endDate
equipment":"
20180326 17:56
100002",
   "
fault
service":"
01
COR1"
}COUNTER_VALID_FINISH Bloco de código
titleExemplo do conteúdo
collapsetrue
{
,
   "observation":"",
   "startDate":"
20180326
20190708 
17
09:
55
00",
   "
observation
endDate":"
444
20190708 10:58",
   "
plan
checklist":
"000000",
[
 
   ],
   "inputs":[
      {
         "
order
code":"
001007
S001",
         "
json
task":"
{\"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":[ {
0",
         "amount":3,
         "date":"20190708 10:00",
         "destiny":"A",
         "warehouse":"01",
         "isDone":true,
         "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",
         "
value
type":
1001
"P",
         "
datetime
note":"
20180326 18:06
",
      
}
   
], "hourCounter
"lot":"
18:06
",
   
"endDate
      "sublot":"
20180326 17:55
",
         "
fault
location":"
01
"
}CANCEL_VALID Bloco de código
titleExemplo do conteúdo
collapsetrue
{
,
         "
message
serialNumber":""
observação

   
da
 
ordem
 
de
 
serviço", //observação
},
      {
   
"plan
      "code":"
000000
000036",
 
//código
  
do
 
plano
 
da
 
ordem
   "
order
task":"
001006
0",
  
//código
 
da
 
ordem
 
de
 
serviço }UPDATE_VALID_ORDER Bloco de código
titleExemplo do conteúdo
collapsetrue
{
   "
plan
amount":
"000000"
1.33,
         "
code
startDate":"
007822
20190708 09:38",
     
"counter":[ ],
    "
type
endDate":"
C
20190708 10:58",
      
"equipment":"100002",
   "
service
isDone":
"COR1"
false,
   
"observation":"", "startDate":"20190708 09:00",
      "
endDate
unity":"
20190708 10:58
H",
   
"checklist":[
   
],
   "
inputs":[ { "code
type":"
S001
M",
         "
task
percent":
"
0
"
,
         "
amount
note":
3,
""
      }
   
"date":"20190708 10:00", "destiny":"A", "warehouse":"01", "isDone":true, "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, "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
  
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, '' )
                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] }
                    
                    //Neste exemplo haverá validações somente quando informar data anterior a data atual
                    If aDate[1] >= dDatabase
                        Loop
          If AttIsMemberOf( oParser, "inputs" ) .And. Len( oParser:inputs ) > EndIf0

                    cTask cOrder  := IIf( AttIsMemberOf( oInput oParser, 'taskcode' ), oInputoParser:taskcode, '' )
                    cCodecPlan   := IIf( AttIsMemberOf( oInput oParser, 'codeplan'  ), oInputoParser:codeplan, '000000' )
                    nAmount := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 )

     //Bloco abaixo realiza validações nos insumos
                IfFor cIdnInput =:= "CREATE_VALID_ORDER"
    1 To Len( oParser:inputs )

                    lOkoInput := .F.
  oParser:inputs[ nInput ]

                  Else
  cType   := IIf( AttIsMemberOf( oInput , 'type'  ), oInput:type, '' )
         
           lIsDone  := IIf( AttIsMemberOf( oInput , 'isDone'), oInput:isDone, .F. )
   /*Trecho abaixo verifica se o insumo  está gravado no banco
       
                    //Neste casoexemplo existahaverá nãovalidações somente necessidadepara deprodutos validação*/realizados

                    If cType  != dbSelectArea("STLP")
 .Or. !lIsDone 
                     dbSetOrder(  1 )Loop
                    EndIf

    If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
       aDate   := { dDatabase, '08:00' }
                    lOk  PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
 := .T.

                    If AttIsMemberOf( oInput, "startDate" )
                      cType + PADR( cCode, Len( STL->TL_CODIGO ) )aDate := StrTokArr( oInput:startDate, " " )
                    ElseIf AttIsMemberOf( oInput, "date" )
    lOk := .F.
                  aDate := StrTokArr( oInput:date, " " Else)
                    EndIf
        lOk := .F.
          aDate := { STOD( aDate[1] ), aDate[2] }
           //Verificação abaixo para garantir que o insumo não existe no banco
                    //Neste exemplo haverá validações somente quando informar data anterior While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
a data atual
                    If aDate[1] >= dDatabase
                  STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
 Loop
                    EndIf

                    cTask   := PADRIIf( cPlan, LenAttIsMemberOf( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
oInput , 'task'), oInput:task, '' )
                    cCode   := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' )
           cType + PADR( cCode, Len( STL->TL_CODIGO ) )

  nAmount := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 )

                    If IfcId Val( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo realizado
== "CREATE_VALID_ORDER"
                        lOk   := .F.
                  .And. nAmount == STL->TL_QUANTID //comparação de quantidade
Else
                        
                lOk := .T. //já está gravado e não /*Trecho necessidadeabaixo de validar
          verifica se o insumo já está gravado no banco
                          Exit
  caso exista não  necessidade de validação*/

                        EndIfdbSelectArea("STL")
                        dbSetOrder( 1 )
       dbSelectArea("STL")
                 If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
     dbSkip()
                            EndDo
   PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
       EndIf
                    EndIf

         cType + PADR( cCode, Len( STL->TL_CODIGO ) ) )
   If !lOk
                        ReturnlOk 'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + ;
:= .F.
                        Else
                         'Verifique o insumo/produto 'lOk + cCode + ' data ' + Dtoc( aDate[1] )
:= .F.
                           EndIf

 //Verificação abaixo para garantir que o insumo não existe no banco
     Next nInput
            EndIf
        EndIf
  While  ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem!STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
        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."
STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
                     EndIf
        EndIf
     
	ElseIf cId == "FINISH_VALID_ORDER"
	
		If FWJsonDeserialize(oWS:GetContent(), @oParser)
			If Empty( oParser:observation ) //verifica campo observação foi passado vazio
PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
                   Return "Campo observação deve ser informado."
            EndIf
		EndIf
	
    ElseIf cId == "FINISHED_ORDER"cType + PADR( cCode, Len( STL->TL_CODIGO ) )

       
        If FWJsonDeserialize(oWS:GetContent(), @oParser)
             
  If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo aArearealizado
 := GetArea()
            aAreaSTJ := STJ->(GetArea())
 
 
            dbSelectArea("STJ")
      .And. nAmount == STL->TL_QUANTID //comparação de dbSetOrder(1)
quantidade
               If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
                      Reclock("STJ",lOk := .F.)
    T. //já está gravado e não há necessidade de validar
            STJ->TJ_DTPRINI := STJ->TJ_DTMRINI
                STJ->TJ_HOPRINI := STJ->TJ_HOMRINI
    Exit
            STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIM
                STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM
 EndIf
                   MsUnlock()
            Endif
  dbSelectArea("STL")
            RestArea(aAreaSTJ)
            RestArea(aArea)
        EndifdbSkip()
           
    ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos
    EndDo
   Return " AND B1_GRUPO = '97'"

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

 EndIf
            dbSelectArea("ST9")
        dbSetOrder(1)EndIf

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

 Return 'Não é permitido realizar insumos do Returntipo Alltrim(produto cAddress )
	
	ElseIf cId == 'FILTER_ORDER'

com a data retroativa. ' + ;
     	Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) )
        
    ElseIf cId == 'FILTER_REQUEST'

    	Return 'Verifique AND TQB.TQB_DTABER =o insumo/produto ' + ValToSQL(cCode cToD( '24/11/2020+ ' ) )
	
	ElseIf cId == 'FINISHED_COUNTER_1'
data ' + Dtoc( aDate[1] )
          aAreaSTP := STP->( GetArea() )
         EndIf

 aAreaSTJ := STJ->( GetArea() )

          cCode Next :=nInput
 Posicione( 'STJ', 1, xFilial( 'STJ' ) + oWS:order + oWs:plan, 'TJ_CODBEM' )EndIf
        EndIf
    cDateElseIf cId :== StrTokArr( oWs:endDate, ' ' )[1]
"CANCEL_VALID" //valida cancelamento da ordem
        If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da cHourstring no := oWs:counter[1]:time

formato Json
            If dbSelectAreaEmpty( 'STP'oParser:message )
//verifica campo observação foi passado vazio
     dbSetOrder( 5 ) // TP_FILIAL + TP_CODBEM + TP_DTLEITU + TP_HORA
 Return "A observação do cancelamento é obrigatória."
   dbSeek( xFilial( 'STP') + cCode + cDate + cHour, .T. )EndIf
          EndIf
     
	ElseIf cId    If STP->( !EoF() )

         == "FINISH_VALID_ORDER"
	
		If FWJsonDeserialize(oWS:GetContent(), @oParser)
			If Empty( oParser:observation ) //verifica campo observação foi passado vazio
      If STP->TP_CODBEM == cCode .And. ( STP->TP_DTLEITU <= sToD( cDate ) .Or.;
    Return "Campo observação deve ser informado."
            EndIf
		EndIf
	
    ( STP->TP_DTLEITUElseIf cId == sToD( cDate) .And. STP->TP_HORA <= cHour ) )
"FINISHED_ORDER"       
        If FWJsonDeserialize(oWS:GetContent(), @oParser)
      
       
            aArea nCount := STP->TP_POSCONT
GetArea()
            aAreaSTJ :=  Else

STJ->(GetArea())
 
 
            dbSelectArea("STJ")
            dbSkipdbSetOrder(-1)

            If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
   If STP->( !BoF() ) .And. STP->TP_CODBEM == cCode

        Reclock("STJ", .F.)
                nCountSTJ->TJ_DTPRINI := STPSTJ->TP>TJ_POSCONTDTMRINI
                STJ->TJ_HOPRINI    := STJ->TJ_HOMRINI
                STJ->TJ_DTPRFIM    EndIf
:= STJ->TJ_DTMRFIM
               EndIf

    STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM
       Else

         MsUnlock()
      dbSkip(-1)

       Endif
 
          If STP->( !BoF() ) .And. STP->TP_CODBEM == cCode

 RestArea(aAreaSTJ)
            RestArea(aArea)
        Endif
       nCount := STP->TP_POSCONT
    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 EndIfbem

    	cCodBem      EndIf:= PARAMIXB[3]

          RestArea( aAreaSTJ dbSelectArea("ST9")
          RestArea( aAreaSTP dbSetOrder(1)
 
       If dbSeek(  Return nCount
         
     ElseIf cId == 'FINISHED_COUNTER_2'

xFilial("ST9") + cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI )
            aAreaTPPcAddress := TPP->( GetArea() Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END")
        EndIf

       aAreaSTJ := STJ->Return Alltrim( GetArea()cAddress )
	
	ElseIf cId == 'FILTER_ORDER'

    	Return '  cCode  := Posicione( 'STJ', 1, xFilial( 'STJ' ) + oWS:order + oWs:plan, 'TJ_CODBEM'AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) )
        
  cDate  :=ElseIf StrTokArr( oWs:endDate, ' ' )[1]cId == 'FILTER_REQUEST'

    	Return ' AND TQB.TQB_DTABER = ' cHour+ ValToSQL( := oWs:counter[1]:time

          dbSelectArea( 'TPP' )
cToD( '24/11/2020' ) )

	ElseIf cId == 'UPDATE_FINISH_ORDER'

          If dbSetOrderAttIsMemberOf( 5 oWS, 'counter' )

 // TPP_FILIAL + TPP_CODBEM + TPP_DTLEIT + TPP_HORA
         If dbSeekLen( xFilial( 'STP'oWS:counter ) +> cCode0

 + cDate + cHour, .T. )
          
       oWS:counter[1]:value := 3334
   If TPP->( !EoF() )

               If TPP->TPP_CODBEM == cCode .And. ( TPP->TPP_DTLEIT <= sToD( cDate ) .Or.;
oWS:counter[1]:time  := '10:10'

               EndIf

             ( TPP->TPP_DTLEIT == sToD( cDate If Len( oWS:counter ) .And. TPP->TPP_HORA <= cHour ) )
> 1

                    oWS:counter[2]:value := 3334
                    nCountoWS:counter[2]:time  := TPP->TPP_POSCONT'10:10'

               ElseEndIf

          EndIf

          dbSkip(-1)
If AttIsMemberOf( oWS, 'observation' )
		
               oWS:observation := 'ALTERADO PELO  If TPP->( !BoF() ) .And. TPP->TPP_CODBEM == cCodeP.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 nCountcId := TPP->TPP_POSCON
      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'
              
                    EndIf

               EndIf

          Else

               dbSkip(-1)

               If TPP->( !BoF() ) .And. TPP->TPP_CODBEM == cCode

        cEmail := PARAMIXB[3] //Indica o email do usuário logado
    nCount  := TPP->TPP_POSCON
 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  EndIf

          EndIf

PE
 
    If cId     RestArea( aAreaSTJ )== 'SEARCH_FIELD_SB1'
        Return  RestArea( aAreaTPP )
 
          Return nCount
 "B1_FAMILY" // indica o nome do campo para pesquisa de produto
     EndIf

	EndIf
 
Return