Интересный принцип работы очереди расчета цен в УНФ

Я уже раньше писал про очередь расчета цен, где заменил ее своей обработкой.

И вот у одного клиента столкнулся опять с проблемой расчета цен.

Он подозревает, что цены у него не перерасчитываются.

Устанавливает галочку «Включено» у регламентного задания «Очередь расчета цен», оно выполняется раз и галочка сбрасывается:

Пришлось разбираться, подключившись монитором к фоновым заданиям.

Было обнаружено, что активность задания сбрасывается в процедуре ЦенообразованиеСервер.УстановитьИспользованиеРегламентногоЗадания для регламентного задания Метаданные.РегламентныеЗадания.ОчередьРасчетаЦен.

Логика такая — при записи цены в подписке ЦенообразованиеСервер.ПодпискаНаСобытиеПриЗаписиЦены проверяется, нужен ли динамический пересчет цен, если нужен, включается регламентное задание. А когда оно отработает, проверяется, пуста ли очередь расчета цен (регистр сведений ОчередьРасчетаЦен), и если пуста, регламентное задание отключается.

Регистр пуст e1cib/list/РегистрСведений.ОчередьРасчетаЦен:

В целом, если 1с где-то сбоит в этой логике, можно создать свое регламентное задание, которое будет запускать расчет цен раз в 30 минут. Типовой функционал не будет его отключать. Можно даже через внешнюю обработку, запускаемую по расписанию, чтобы лишний раз не насиловать конфигурацию и расширения.

Оказалось, что проблема в загрузке курсов валют. При этом должны перерасчитываться рублевые цены.

Загрузка курсов происходит ежедневно в 0:10:

Создал обработку по запуску расчета цен и поставил ее запуск на 1 час ночи:

Обработка просто делает вызов расчета цен:

ЗаписьЖурналаРегистрации("Отладка.РасчетЦенПоРасписанию");
ЦенообразованиеСервер.ОчередьРасчетаЦен();

Делюсь этой простой обработкой:

В журнале регистрации выглядит так:

Среда: УНФ 3.0.12.261. Объем: 0.5 час