Não sei se cabe, mas se couber, no X3_WHEN do campo C6_LOTECTL, você coloca: Posicione("SB1",1,xFilial("SB1")+GdFieldGet("C6_PRODUTO"),"B1_RASTRO") != "L". Caso não caiba, vejo 2 alternativas: ( alternativa 1) se eu não me engano, quando você coloca o produto no item do pedido, já posiciona na tabela SB1, se for isso mesmo você pode colocar no X3_WHEN somente: SB1->B1_RASTRO != "L", se não estiver posicionado, você pode criar um gatilho do tipo posicionamento no campo C6_PRODUTO; ( alternativa 2) você cria um fonte e chama ele no X3_WHEN, exemplo:
user function VldRastro()
local aSB1 := SB1->( GetArea() )
local cProd := GdFieldGet("C6_PRODUTO")
local lLiber as logical
SB1->( dbSetOrder(RetOrder("SB1","B1_FILIAL+B1_COD")) )
SB1->( dbSeek(xFilial()+cProd) )
lLiber := ( SB1->B1_RASTRO != "L" )
SB1->( RestArea(aSB1) )
return lLiber
Ai você adiciona no X3_WHEN: u_VldRastro(). Dava pra esse fonte ter somente uma linha:
user function VldRastro()
return Posicione("SB1",1,xFilial("SB1")+GdFieldGet("C6_PRODUTO"),"B1_RASTRO") != "L"
mas coloquei ele mais detalhado na primeira opção para ficar mais didático. Espero ter ajudado.