Каталог решений - Номер дня недели в месяце

Номер дня недели в месяце

Номер дня недели в месяце

В наличии

В продолжение темы "Добавить к дате рабочие дни в запросе" (http://infostart.ru/public/166349/) — у клиента была самописная конфигурация, в которой график посещения торговой точки указывался в виде дней недели (например, вторник и пятница), а нужно было сделать так, чтобы указывался ещё и номер этого дня в месяце (например, третий четверг).

Категория:

Описание

Бывает в самописных конфигурациях делают некое расписание, например, посещения торговых точек. Простейшим расписанием может быть, например, указание дня недели и какого-то ещё номера — номера недели в месяце или номера дня недели в месяце.

Первый вариант реализуется в запросе на проверку попадания торговой точки в расписание очень просто — решается формулой типа НЕДЕЛЯ(ТекущаяДата) — НЕДЕЛЯ(НАЧАЛОПЕРИОДА(ТекущаяДата, МЕСЯЦ)) + 1. Тогда описание расписания будет типа «понедельник первой недели и пятница третей недели». Но на слух, без просмотра календаря, такое расписание воспринимается не очень хорошо — например, первая неделя января начинается со вторника, т.е. понедельника в ней просто нет, а всего недель в месяце может быть аж 6, при этом в двух неделях будет по одному и по два дня. Такое решение просто будет путать пользователя.

Более понятно будет, если указать номер дня недели в месяце, тогда расписание будет звучать типа «первый понедельник и третья пятница». Вот для этого случая написал запрос. Собственно, цели статьи: 1. не ломать голову над этой задачей другому, 2. может быть кто-то предложит более красивое решение. 

В запрос добавлена таблица с названиями дней недели. Параметр &Дата1 должен начинаться с начала месяца. 

 

ВЫБРАТЬ
	"Понедельник" КАК Название,
	1 КАК Номер
ПОМЕСТИТЬ НазванияДней

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Вторник",
	2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Среда",
	3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Четверг",
	4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Пятница",
	5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Суббота",
	6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Воскресенье",
	7
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	Календарь.ДатаКалендаря КАК Дата,
	ДЕНЬНЕДЕЛИ(Календарь.ДатаКалендаря) КАК ДеньНедели,
	НазванияДней.Название,
	СУММА(1) КАК НомерДняВМесяце
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь1
		ПО (Календарь.ДатаКалендаря МЕЖДУ &Дата1 И &Дата2)
			И (Календарь1.ДатаКалендаря МЕЖДУ &Дата1 И &Дата2)
			И (ДЕНЬНЕДЕЛИ(Календарь.ДатаКалендаря) = ДЕНЬНЕДЕЛИ(Календарь1.ДатаКалендаря))
			И Календарь.ДатаКалендаря >= Календарь1.ДатаКалендаря
			И (НАЧАЛОПЕРИОДА(Календарь.ДатаКалендаря, МЕСЯЦ) = НАЧАЛОПЕРИОДА(Календарь1.ДатаКалендаря, МЕСЯЦ))
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ НазванияДней КАК НазванияДней
		ПО (ДЕНЬНЕДЕЛИ(Календарь.ДатаКалендаря) = НазванияДней.Номер)

СГРУППИРОВАТЬ ПО
	Календарь.ДатаКалендаря,
	НазванияДней.Название

УПОРЯДОЧИТЬ ПО
	Дата
 
 
Ну и кусок результата:
 
    
ДатаДеньНеделиНазваниеНомерДняВМесяце 
01.12.20126Суббота1 
02.12.20127Воскресенье1 
03.12.20121Понедельник1 
04.12.20122Вторник1 
05.12.20123Среда1 
06.12.20124Четверг1 
07.12.20125Пятница1 
08.12.20126Суббота2 
09.12.20127Воскресенье2 
10.12.20121Понедельник2 
11.12.20122Вторник2 
12.12.20123Среда2 
13.12.20124Четверг2 
14.12.20125Пятница2 
15.12.20126Суббота3 
16.12.20127Воскресенье3 
17.12.20121Понедельник3 
18.12.20122Вторник3 
19.12.20123Среда3 
20.12.20124Четверг3 
21.12.20125Пятница3 
22.12.20126Суббота4 
23.12.20127Воскресенье4 
 
has been added to your cart:
Оформление заказа