Resolvido!
a forma citada a cima está certa!, percebi que no qrItensTempAfterPost, estava percorrendo novamente essa tabela para pegar o valor total, então coloquei uma qrItensTemp.Tag=1, ficou assim:
var
q2: TQuery;
begin
q2:=TQuery.Create(Self);
q2.DatabaseName:='SISTEMA';
qrItensTemp.Tag:=1;//Incluir essa tag
qrItensTemp.DisableControls;//Tabela temporário com dados
qrItensTemp.First;
while not qrItensTemp.Eof do
begin
q2.Close;//Consulta para pegar novo valor
q2.SQL.Text:='select vl_venda from tb_item '+
' where cod_item=:cod_item';
q2.ParamByName('cod_item').Value := qrItensTempcod_item.AsInteger;
q2.Open;
qrItensTemp.Edit;
qrItensTempvl_unit.Value := q2.FieldByName('vl_venda').AsFloat;
qrItensTemp.Post;
qrItensTemp.Next;
end;
qrItensTemp.Enablecontrols;
qrItensTemp.Tag:=0;//Incluir essa tag
q2.Close;
q2.Destroy;
edtCod.SetFocus;
end;
e no qrItensTempAfterPost dei um exit para não percorrer a tabela
if qrItensTemp.Tag=1 then exit;
Obrigado a todos.
Resolvido!