Запрос (одно окно; границы &НачалоПериода, &КонецПериода подставляются в цикле):
ВЫБРАТЬ
Цены.Номенклатура КАК Номенклатура,
Цены.Цена КАК Цена,
Цены.Период КАК Период
ИЗ
РегистрСведений.ЦеныНоменклатуры25 КАК Цены
ГДЕ
Цены.Номенклатура = &Номенклатура
И Цены.ВидЦены = &ВидЦеныЗакупочная
И Цены.Период МЕЖДУ &НачалоПериода И &КонецПериода
И ВЫРАЗИТЬ(Цены.Регистратор КАК Документ.УстановкаЦенНоменклатуры).ДокументОснование ССЫЛКА Документ.ПоступлениеТоваровУслуг
УПОРЯДОЧИТЬ ПО
Период УБЫВ
Обёртка на выборку окон по одной номенклатуре:
Функция ПолучитьСреднююЦену(Номенклатура, ВидЦены) Экспорт
ГраницаМинимум = Дата(2026, 1, 1, 0, 0, 0);
КонецПериода = ТекущаяДата();
ШагМесяцев = 3;
Пока Истина Цикл
НачалоПериода = ДобавитьМесяц(КонецПериода, -ШагМесяцев);
Если НачалоПериода < ГраницаМинимум Тогда
НачалоПериода = ГраницаМинимум;
КонецЕсли;
Запрос = Новый Запрос(ТекстЗапроса); // текст выше
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("ВидЦеныЗакупочная", ВидЦены);
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() >= 2 Тогда
Сумма = 0; Кол = 0;
Пока Выборка.Следующий() Цикл
Сумма = Сумма + Выборка.Цена;
Кол = Кол + 1;
КонецЦикла;
Возврат Сумма / Кол;
КонецЕсли;
// не нашли 2 записи — расширяем окно вниз
Если НачалоПериода <= ГраницаМинимум Тогда
Прервать; // дошли до 01.01.2026, глубже нельзя
КонецЕсли;
КонецПериода = НачалоПериода; // следующее окно продолжает вниз
КонецЦикла;
Возврат Неопределено; // не набралось 2 записей до 01.01.2026
КонецФункции