Как найти ближайший к дате рабочий день по производственному календарю. УНФ 3.0

Используем основной производственный календарь, у него код РФ (а предопределенного элемента нет):

Поискал по конфигурации, готовых функций не нашел.

Написал свою:

Функция ПроизводственныйКалендарьОсновной() Экспорт                                               
	Возврат Справочники.ПроизводственныеКалендари.НайтиПоКоду("РФ");
КонецФункции

Функция БлижайшийРабочийДеньПоДате(Дата, Знач ПроизводственныйКалендарь = Неопределено) Экспорт
	
	//Включая дату Дата, т.е. если Дата - рабочая дата, будет возвращена она
	//Дата можно передавать со временем, время отбрасывается
	//Возвращаются рабочие и предпразничные даты 
	//Если ПроизводственныйКалендарь не заполнен, берется календарь с кодом РФ
	
	
	Если ПроизводственныйКалендарь = Неопределено Тогда
		ПроизводственныйКалендарь = ПроизводственныйКалендарьОсновной();
	КонецЕсли;
	
	Запрос = Новый Запрос();
	Запрос.Текст =
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	ДанныеПроизводственногоКалендаря.Дата КАК Дата,
	|	ДанныеПроизводственногоКалендаря.ВидДня КАК ВидДня
	|ИЗ
	|	РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
	|ГДЕ
	|	ДанныеПроизводственногоКалендаря.Дата >= &Дата
	|	И (ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
	|			ИЛИ ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
	|	И ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь
	|
	|УПОРЯДОЧИТЬ ПО
	|	ДанныеПроизводственногоКалендаря.Дата";
	Запрос.УстановитьПараметр("Дата", НачалоДня(Дата));
	Запрос.УстановитьПараметр("ПроизводственныйКалендарь", ПроизводственныйКалендарь);
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка.Дата;
	КонецЕсли;
КонецФункции

Проверка для вторника 5.12.2023 и субботы 9.12.2023 проходит корректно:

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

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 2

  1. Вас:

    Ближайший день может быть не больше, а меньше выбранной даты

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *