В месяце может быть от 4 до 6 недель, как программно определить номер недели в месяце (для даты), в запросе? Номер может варьироваться от 1 до 6.

Краткий ответ

| НЕДЕЛЯ(Документ.Дата) - НЕДЕЛЯ(НАЧАЛОПЕРИОДА(Документ.Дата, МЕСЯЦ)) + 1 КАК НеделяНомерВМесяце

Подробный ответ

Пример задачи, условия:

Есть регистр сведений — «Производственный календарь». Необходимо запросом вывести даты из данного регистра и номера недель в месяце.

Программный код запроса:

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

Пока Выборка.Следующий() Цикл
	Сообщить("Дата " + Строка(Выборка.Дата)); 
	Сообщить("Дата " + Строка(Выборка.НеделяНомерВМесяце)); 
КонецЦикла;

Данный запрос выводит все даты из календаря и номера недель от 1 до 6 с отбором по номеру месяца.

Как узнать номер недели в году — читайте в статье.