Интересный принцип работы очереди расчета цен в УНФ
Я уже раньше писал про очередь расчета цен, где заменил ее своей обработкой.
И вот у одного клиента столкнулся опять с проблемой расчета цен.
Он подозревает, что цены у него не перерасчитываются.
Устанавливает галочку «Включено» у регламентного задания «Очередь расчета цен», оно выполняется раз и галочка сбрасывается:

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

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

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

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

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