Wop!
El problema es que estas usando el mismo dataset para la edición y para la búsqueda. Cuando haces el locate, se cambia el registro activo y se provoca un post (como si hicieses un Next). Creo que la mejor solución es que te crees una query que te busque si existe el código de producto, de este modo dejaras el dataset detalle en edición sin problemas.
Ah! otra cosa, es mejor que uses el tag [delphi] enlugar de [code] si lo que pones es código Delphi
