zxc, ну и где у тебя сравнение старой и новой цены?
В твоем коде есть лишняя переменная и соответственно - лишняя проверка.
Кроме того ВыбратьЭлементы() не нужно для НайтиПоРеквизиту().
С учетом сказанного вот оптимизированный аналог твоего кода (но это не решает твою проблему. Почему? Смотри вопрос в начале ответа...):
СпрЦен = СоздатьОбъект("Справочник.Цены");
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
СпрЦен.ИспользоватьВладельца(Номенклатура);
Если СпрЦен.НайтиПоРеквизиту("ТипЦен", Константа.ОсновнаяЦенаПриобретения, 0)=1 тогда
СпрЦен.Цена.Установить(ДатаДок,Цена);
КонецЕсли;
КонецЦикла;
Кстати - если ты делаешь это в обработке проведения документа - то можно использовать УстановитьРеквизитСправочника() (см. в справке). Тогда у тебя новое значение будет привязано к документу в просмотре истории