Validar enederecamento de produto no Protheus

Preciso por favor fazer uma validação/crítica quando for endereçar produto apresentar se já existe no endereço

Exemplo:

Mensagem - Este produto já existe no endereço X ...

e/ou

Este endereço já está sendo utilizado pelo produto X...

Desde já agradeço

Att.

Alan, dependerá muito de qual rotina está sendo utilizada para endereçar. Suponho que seja a MATA265 (Endereçamento): MA265TDOK - Validações adicionais na inclusão do produto - Linha Microsiga Protheus - TDN

Todos os campos e cabeçalhos estarão disponíveis nas variáveis aCols e aHeader.

Se sua intenção for uma validação em tela, adicione pelo dicionário de dados a validação abaixo no campo desejado (desenvolvi a função agora pelo Bloco de Notas, portanto, não cheguei a testar):

Alan, dependerá muito de qual rotina está sendo utilizada para endereçar. Suponho que seja a MATA265 (Endereçamento): https://tdn.totvs.com/pages/releaseview.action?pageId=6087623

Todos os campos e cabeçalhos estarão disponíveis nas variáveis aCols e aHeader.

Se sua intenção for uma validação em tela, adicione pelo dicionário de dados a validação abaixo no campo desejado (desenvolvi a função agora pelo Bloco de Notas, portanto, não cheguei a testar):


User Function vldProd()
    Local lReturn   := .F.
    Local aArea     := GetArea()
    Local cEndereco    := IIF( AllTrim(Upper(ReadVar())) == "M->DB_LOCALIZ", &(ReadVar()), GdFieldGet("DB_LOCALIZ") ) // Descubro se a funcao foi chamada via interface, ou se devo buscar o produto na linha do Grid
    Local cSeek
    dbSelectArea("SBF")
    SBF->( dbSetOrder(1) )
    cSeek:=xFilial("SBF")+ cEndereco+SDA->DA_LOCAL+SDA->DA_PRODUTO
    If SBF->( dbSeek(cSeek) ) 
        Alert("Produto " + SDA->DA_PRODUTO + " encontrado no endereço " + cEndereco)
    Else
    EndIf
    RestArea(aArea)
Return (lReturn

Olá Murilo. Irei testar. Desde já agradeço. Abs. Att.

Neste meio tempo localizei 2 exemplos abaixo:
User Function MA265TDOK

Local lRet := .T.
Local aAreas := {SBF->(GetArea()), GetArea()}

cFiltro := “@ (BF_FILIAL =='” + xFilial(“SBF”) + "’ AND "
cFiltro += "R_E_C_D_E_L_ = 0 AND "
cFiltro += “BF_QUANT > 0”

DbSelectArea(“SBF”)
SBF ->(dbSetFilter( {|| &cFiltro }, ))
SBF ->(DbGotop())

if !SBF ->(eOF())
MsgInfo(“Aviso”, “OK”)
Endif

SBF ->(dbSetFilter())

aEval(aArea,{|z,y| RestArea(x)}) // Restaura areas de trabalho

Return(lRet)

User Function fMta265I()

Local aCab := {}
Local aItem:= {}

lMsErroAuto := .F.

aCab := { {“DA_PRODUTO”,“000000000000001”,NIL},;
{“DA_LOCAL”,“01”,NIL}}

aAdd(aItem, { {“DB_ITEM”,“001”,NIL},;
{“DB_LOCALIZ”,“TESTE”,NIL},;
{“DB_DATA”,dDataBase,NIL},;
{“DB_QUANT”,25,NIL}})

MSExecAuto({|x,y,z| mata265(x,y,z)},aCab,aItem,3) //Distribui

If lMsErroAuto
MostraErro()
Else
Alert(“Ok”)
Endif

Return