Á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.
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.
ORDERBY
linenumbers
FILTER_
CHECKSOOrdenação das etapas da ordem de serviçoParamIXB[2]obejctIDConteúdoCREATED_ORDER / CREATE_VALID_ORDER Bloco de códigolanguagexmltitleExemplo
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
linenumbers
true
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":"",
         "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
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\",\"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":[ 
      { 
         "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",
   "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":"",
         "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.
ORDERBY
COMPANY_GROUP_
CHECKSO
REJECT
stringCondição SQL que será utilizada para definir ordenação da tabela Etapas da Ordens de Serviço - STQ.
array

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
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
"
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, '' )
             If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
lIsDone := IIf( AttIsMemberOf( oInput , 'isDone'), oInput:isDone, .F. )
   If AttIsMemberOf( oParser, "inputs" ) .And. Len( oParser:inputs ) > 0

       
         cOrder  := IIf( AttIsMemberOf( oParser, 'code' ), oParser:code, '' )
 //Neste exemplo haverá validações somente para produtos realizados
        cPlan   := IIf( AttIsMemberOf( oParser, 'plan'  ), oParser:plan, '000000' )
If cType != "P" .Or. !lIsDone 
          //Bloco abaixo realiza validações nos insumos
         Loop
       For nInput := 1 To Len( oParser:inputs )

      EndIf

              oInput := oParser:inputs[ nInput ]

  aDate   := { dDatabase, '08:00' }
           cType   := IIf( AttIsMemberOf( oInput , 'type' lOk ), oInput:type, '' )
 := .T.

                  lIsDone := IIf(If AttIsMemberOf( oInput, , 'isDone'), oInput:isDone, .F. )
"startDate" )
                        aDate :=  
   StrTokArr( oInput:startDate, " " )
                 //Neste exemplo haverá validaçõesElseIf somenteAttIsMemberOf( para produtos realizadosoInput, "date" )
                    If    cTypeaDate !:= StrTokArr( oInput:date, "P " .Or. !lIsDone 
)
                    EndIf
      Loop
              aDate := { STOD( aDate[1] ),  EndIf
aDate[2] }
                    aDate 
  := { dDatabase, '08:00' }
               //Neste exemplo haverá validações somente lOkquando informar data anterior a := .T.
data atual
                    If AttIsMemberOf( oInput, "startDate" )
aDate[1] >= dDatabase
                        Loop
 aDate := StrTokArr( oInput:startDate, " " )
             EndIf

       ElseIf AttIsMemberOf( oInput, "date" )
         cTask   := IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' )
    aDate := StrTokArr( oInput:date, " " )
          cCode   := IIf( AttIsMemberOf( oInput , 'code'),  EndIfoInput:code, '' )
                    aDatenAmount := {IIf( STODAttIsMemberOf( aDate[1] ), aDate[2] }
 oInput , 'amount'), oInput:amount, 0 )

                    If cId == "CREATE_VALID_ORDER"
                    //Neste exemplo haverá validações somente quandolOk informar data anterior a data atual
:= .F.
                    Else
    If aDate[1] >= dDatabase
                 
       Loop
                 /*Trecho abaixo verifica EndIf

se o insumo  está gravado no banco
             cTask   := IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' )
    caso exista não  necessidade de validação*/

          cCode   := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' )
    dbSelectArea("STL")
                nAmount  := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 dbSetOrder( 1 )

                     If cId == "CREATE_VALID_ORDER"
           If !dbSeek( 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 verificacType se+ oPADR( insumocCode, já está gravado no bancoLen( STL->TL_CODIGO ) ) )
                            casolOk exista não há necessidade de validação*/

:= .F.
                        dbSelectArea("STL")Else
                        dbSetOrder( 1 )
    lOk := .F.
                  If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
           //Verificação abaixo para garantir que o insumo não existe no banco
                          PADR( cPlan, Len(While !STL->TL_PLANO >( Eof() ) + PADR( cTask, Len(.AND. STL->TL_FILIAL + STL->TL_TAREFA ) )ORDEM + STL->TL_PLANO + ;
                                STL->TL_TAREFA + STL->TL_TIPOREG  cType+ STL->TL_CODIGO == xFilial('STL') + PADR( cCodecOrder, Len( STL->TL_CODIGOORDEM ) )+ );
                            lOk := .F.
      PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) +     Else;
                            lOk := .F.
        cType + PADR( cCode, Len( STL->TL_CODIGO ) )

             //Verificação abaixo para garantir que o insumo não existe no banco
         If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo realizado
        While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
                  .And. nAmount == STL->TL_QUANTID //comparação de quantidade
        STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == 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

                                If ValdbSelectArea( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo realizado
"STL")
                                dbSkip()
           .And. nAmount == STL->TL_QUANTID //comparação de quantidade
           EndDo
                        EndIf
 lOk := .T. //já está gravado e não  necessidade de validar
        EndIf

                    If !lOk
       Exit
                 Return 'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + EndIf;
                                dbSelectArea("STL")
                  'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] )
                  dbSkip()
  EndIf

                Next nInput
         EndDo
   EndIf
        EndIf
    ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem
  EndIf
      If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
       EndIf

     If Empty( oParser:message )//verifica campo observação foi passado vazio
       If !lOk
        Return "A observação do cancelamento é obrigatória."
          Return 'Não éEndIf
 permitido realizar insumos do tipo produto com aEndIf
 data retroativa. ' + ;
	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."
 'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] ) EndIf
		EndIf
	
    ElseIf cId == "FINISHED_ORDER"       
      EndIf

  If FWJsonDeserialize(oWS:GetContent(), @oParser)
            Next nInput
            EndIf aArea := GetArea()
        EndIf
    ElseIfaAreaSTJ cId :== "CANCEL_VALID" //valida cancelamento da ordem
  STJ->(GetArea())
 
 
       If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json dbSelectArea("STJ")
            If Empty( oParser:message )//verifica campo observação foi passado vazio
dbSetOrder(1)
            If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
    Return "A observação do cancelamento é obrigatória."
      Reclock("STJ", .F.)
     EndIf
        EndIf
   STJ->TJ_DTPRINI := 
	ElseIf cId == "FINISH_VALID_ORDER"
	
		If FWJsonDeserialize(oWS:GetContent(), @oParser)
			If Empty( oParser:observation ) //verifica campo observação foi passado vazio
   STJ->TJ_DTMRINI
                STJ->TJ_HOPRINI := STJ->TJ_HOMRINI
             Return "Campo observação deve ser informado."
 STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIM
           EndIf
		EndIf
	
    ElseIf cId == "FINISHED_ORDER"STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM
       
        If FWJsonDeserializeMsUnlock(oWS:GetContent(), @oParser)
            Endif
 
            aArea := GetArea(RestArea(aAreaSTJ)
            aAreaSTJ := STJ->(GetArea())
 
 
RestArea(aArea)
        Endif
         dbSelectArea("STJ")
    ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de dbSetOrder(1)produtos
       Return " AND B1_GRUPO =  If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
  '97'"

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

        ReclockdbSelectArea("STJST9", .F.)
                STJ->TJ_DTPRINI := STJ->TJ_DTMRINIdbSetOrder(1)
        If dbSeek( xFilial("ST9") + cCodBem ) .And. !Empty( STJST9->TJ>T9_HOPRINICLIENTE :=+ STJST9->TJ>T9_HOMRINILOJACLI )
            cAddress := Posicione("SA1",1,xFilial("SA1") + STJST9->TJ>T9_DTPRFIMCLIENTE := STJ->TJ_DTMRFIM+ ST9->T9_LOJACLI,"SA1->A1_END")
        EndIf

        Return Alltrim( cAddress )
	
	ElseIf  STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIMcId == 'FILTER_ORDER'

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

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

	ElseIf cId == 'UPDATE_FINISH_ORDER'

     Endif
     If AttIsMemberOf( oWS, 'counter' )

    ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos
  If Len( oWS:counter ) > Return0

 " AND B1_GRUPO = '97'"

	ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem
    	cCodBem oWS:= PARAMIXBcounter[31]

:value := 3334
      dbSelectArea("ST9")
        dbSetOrder(1)
      oWS:counter[1]:time  If dbSeek( xFilial("ST9") + cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI )
:= '10:10'

               EndIf

      cAddress := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END")
   If Len( oWS:counter ) > EndIf1

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

    	Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) )
oWS:counter[2]:value := 3334
                  
  oWS:counter[2]:time  ElseIf cId :== 'FILTER_REQUEST10:10'

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

	ElseIf cId == 'UPDATE_FINISH_ORDER'          EndIf

          If AttIsMemberOf( oWS, 'counterobservation' )
		
               If Len( oWS:counter ) > 0

oWS:observation := 'ALTERADO PELO P.E. MNTNG'

	      EndIf

          Return oWS
 
  oWS:counter[1]:value := 3334EndIf
 
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  oWS:counter[1]:time  := '10:10'

               EndIf

               If Len( oWS:counter 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()
  ) > 1

    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
 
     oWS:counter[2]:value := 3334
                    oWS:counter[2]:time  := '10:10'

               EndIf

          EndIf

          If AttIsMemberOf( oWS,cId == 'observation' )
		FILTER_EXECUTOR'
        cEmail := PARAMIXB[3] //Indica o email do oWS:observation := 'ALTERADO PELO P.E. MNTNG'

	usuário logado
      EndIf

  Return " AND TQ4_EMAIL1 = " +  Return oWS
 ValtoSql( cEmail )
    EndIf
 
Return
Bloco de código
languagesql
titleExemplo do id ORDERBYSEARCH_FIELD_CHECKSOSB1
collapsetrue
#include "PROTHEUS.ch"
User Function MNTNG()
   
    Local cId := PARAMIXB[1] //Indica o momento da chamada do PE
 
	    If cId == 'ORDERBYSEARCH_FIELD_CHECKSOSB1'
		Return ' ORDER BY STQ.TQ_ORDEM, STQ.TQ_PLANO, STQ.TQ_SEQETA, STQ.TQ_TAREFA, STQ.TQ_ETAPA '
	        Return "B1_FAMILY" // indica o nome do campo para pesquisa de produto
    EndIf

Return