Histórico da Página
...
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: |
| ||||
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: |
| Após a confirmação da finalização, sendo que o campo contador 1 não deve ter sido informado no APP. |
|
FINISHED_COUNTER_2
|
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:
ID | Tipo | Descrição |
---|---|---|
CREATED_ORDER | null | Sem retorno. |
CREATE_VALID_ORDER | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. |
UPDATE_VALID_ORDER | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. |
FINISHED_ORDER | null | Sem retorno. |
FINISH_VALID_ORDER | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. |
FINISHED_COUNTER_1 | numeric | Valor a ser reportado no contador 1 para o processo de finalização de O.S. |
FINISHED_COUNTER_2 | numeric | Valor a ser reportado no contador 2 para o processo de finalização de O.S. |
CANCEL_VALID | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. |
CREATED_PLANNED_INPUT | null | Sem retorno. |
COUNTER_VALID_FINISH | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. |
FILTER_PRODUCT | string | Condição SQL que será inclusa na cláusula WHERE para tabela Produtos - SB1. |
FILTER_EQUIPMENT | string | Condição SQL que será inclusa na cláusula WHERE para tabela Bens - ST9. |
FILTER_SERVICE | string | Condição SQL que será inclusa na cláusula WHERE para tabela Serviços - ST4. |
FILTER_COSTCENTER | string | Condição SQL que será inclusa na cláusula WHERE para tabela Centro de Custos - CTT. |
FILTER_FAMILY | string | Condição SQL que será inclusa na cláusula WHERE para tabela Família de Bens - ST6. |
FILTER_TOOL | string | Condição SQL que será inclusa na cláusula WHERE para tabela Ferramentas - SH4. |
FILTER_AREA | string | Condição SQL que será inclusa na cláusula WHERE para tabela Área - STD. |
FILTER_THIRDPART | string | Condição SQL que será inclusa na cláusula WHERE para tabela Terceiros - SA2. |
DESCRIPTION_LOCALIZATION | string | String que será utilizada para localização do bem. |
FILTER_ORDER | string | Condição SQL que será inclusa na cláusula WHERE para tabela Ordens de Serviço - STJ. |
FILTER_REQUEST | string | Condição SQL que será inclusa na cláusula WHERE para tabela Solicitações de Serviço - TQB. |
| |||||||||||||||||
ParamIXB[2] | obejct |
|
CREATED_ORDER / CREATE_VALID_ORDER
title | Exemplo do conteúdo |
---|---|
linenumbers | true |
collapse | true |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FINISHED_ORDER / FINISH_VALID_ORDER
title | Exemplo do conteúdo |
---|---|
linenumbers | true |
collapse | true |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
title | Exemplo do conteúdo |
---|---|
collapse | true |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
title | Exemplo do conteúdo |
---|---|
collapse | true |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
title | Exemplo do conteúdo |
---|---|
collapse | true |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
ID | Tipo | Descrição | ||
---|---|---|---|---|
CREATED_ORDER | null | Sem retorno. | ||
CREATE_VALID_ORDER | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. | ||
UPDATE_VALID_ORDER | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. | ||
FINISHED_ORDER | null | Sem retorno. | ||
FINISH_VALID_ORDER | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. | ||
CANCEL_VALID | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. | ||
CREATED_PLANNED_INPUT | null | Sem retorno. | ||
COUNTER_VALID_FINISH | string | Motivo quando a validação é negativa. Quando é positivo deve retornar vazio. | ||
FILTER_PRODUCT | string | Condição SQL que será inclusa na cláusula WHERE para tabela Produtos - SB1. | ||
FILTER_EQUIPMENT | string | Condição SQL que será inclusa na cláusula WHERE para tabela Bens - ST9/Localizações - TAF. | ||
FILTER_SERVICE | string | Condição SQL que será inclusa na cláusula WHERE para tabela Serviços - ST4. | ||
FILTER_COSTCENTER | string | Condição SQL que será inclusa na cláusula WHERE para tabela Centro de Custos - CTT. | ||
FILTER_FAMILY | string | Condição SQL que será inclusa na cláusula WHERE para tabela Família de Bens - ST6. | ||
FILTER_TOOL | string | Condição SQL que será inclusa na cláusula WHERE para tabela Ferramentas - SH4. | ||
FILTER_AREA | string | Condição SQL que será inclusa na cláusula WHERE para tabela Área - STD. | ||
FILTER_THIRDPART | string | Condição SQL que será inclusa na cláusula WHERE para tabela Terceiros - SA2. | ||
DESCRIPTION_LOCALIZATION | string | String que será utilizada para localização do bem. | ||
FILTER_ORDER | string | Condição SQL que será inclusa na cláusula WHERE para tabela Ordens de Serviço - STJ. | ||
FILTER_REQUEST | string | Condição SQL que será inclusa na cláusula WHERE para tabela Solicitações de Serviço - TQB. | ||
FILTER_WAREHOUSE | string | Condição SQL que será inclusa na cláusula WHERE para tabela Saldos físicos - SB2 | ||
FILTER_EXECUTOR | string | Condição SQL que será inclusa na cláusula WHERE e filtrar executantes de S.S. com o usuário logado. | ||
UPDATE_FINISH_ORDER | object | JSON contendo informações da finalização da O.S. | ||
COMPANY_GROUP_REJECT | array | Array com os grupos de empresas que devem ser ignorados pelo app
| ||
SEARCH_FIELD_SB1 | STRING | Nome do campo utilizado para realizar a pesquisa/busca de produto (insumo da ordem de serviço.) |
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#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 | ||||||||
| ||||||||
#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 já está gravado no banco //Neste casoexemplo existahaverá nãovalidações há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 há/*Trecho necessidadeabaixo de validar verifica se o insumo já está gravado no banco Exit caso exista não há 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 | ||||||
---|---|---|---|---|---|---|
| ||||||
#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 | ||||||
---|---|---|---|---|---|---|
| ||||||
#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 | ||||||
---|---|---|---|---|---|---|
| ||||||
#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 | ||||||
---|---|---|---|---|---|---|
| ||||||
#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 |