Last active
February 7, 2019 02:26
-
-
Save PlugFox/7abd98935e3775a0b10fbc8c972a5f74 to your computer and use it in GitHub Desktop.
Выбрать имениников с учетом производственного календаря
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ВЫБЕРЕМ КАДРОВУЮ ИСТОРИЮ СОТРУДНИКОВ | |
ВЫБРАТЬ | |
Р.ФизическоеЛицо КАК personID | |
, МАКСИМУМ(ВЫБОР | |
КОГДА Р.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение) | |
ТОГДА О.НаименованиеСокращенное // В ЗУПе ЭТО НЕОГРАНИЧЕННАЯ СТРОКА, ИСПОЛЬЗОВАТЬ ПОДСТРОКА() ИЛИ .Наименование ИЛИ ВЫРАЗИТЬ КАК СТРОКА() | |
ИНАЧЕ null | |
КОНЕЦ) КАК organization | |
, МАКСИМУМ(ВЫБОР | |
КОГДА Р.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение) | |
ТОГДА П.Наименование | |
ИНАЧЕ null | |
КОНЕЦ) КАК subdivision | |
, МАКСИМУМ(ВЫБОР | |
КОГДА Р.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение) | |
ТОГДА Д.Наименование | |
ИНАЧЕ null | |
КОНЕЦ) КАК position | |
, МАКСИМУМ(Р.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)) | |
КАК isEmployee | |
, МИНИМУМ(ВЫБОР | |
КОГДА Месяц(Ф.ДатаРождения)*100 + День(Ф.ДатаРождения) < Месяц(&тДата)*100 + День(&тДата) | |
ТОГДА ГОД(ДОБАВИТЬКДАТЕ(&тДата, ГОД, 1))*10000 + МЕСЯЦ(Ф.ДатаРождения)*100 + ДЕНЬ(Ф.ДатаРождения) | |
ИНАЧЕ ГОД(&тДата)*10000 + МЕСЯЦ(Ф.ДатаРождения)*100 + ДЕНЬ(Ф.ДатаРождения) | |
КОНЕЦ) КАК _следующийДеньРождения | |
ПОМЕСТИТЬ втСотрудники | |
ИЗ | |
РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних() КАК Р | |
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК Ф | |
ПО Р.ФизическоеЛицо = Ф.Ссылка | |
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК О | |
ПО (Р.Организация = О.Ссылка) | |
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК П | |
ПО (Р.Подразделение = П.Ссылка) | |
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Должности КАК Д | |
ПО (Р.Должность = Д.Ссылка) | |
ГДЕ | |
Ф.ДатаРождения <> ДАТАВРЕМЯ(1, 1, 1) | |
СГРУППИРОВАТЬ ПО | |
Р.ФизическоеЛицо | |
ИНДЕКСИРОВАТЬ ПО personID, _следующийДеньРождения | |
; | |
// ВЫБЕРЕМ ПРОИЗВОДСТВЕННЫЙ КАЛЕНДАРЬ С РАБОЧИМИ ДНЯМИ ЗА ГОД | |
ВЫБРАТЬ | |
Дата КАК Дата | |
, ГОД(Дата)*10000 + МЕСЯЦ(Дата)*100 + ДЕНЬ(Дата) | |
КАК _годМесяцДата | |
ПОМЕСТИТЬ втКалендарь | |
ИЗ | |
РегистрСведений.ДанныеПроизводственногоКалендаря | |
ГДЕ | |
Дата МЕЖДУ &тДата И ДОБАВИТЬКДАТЕ(&тДата, ГОД, 1) | |
И ВидДня В(ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий) | |
, ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)) | |
; | |
// НАЙДЕМ ДАТЫ СОБЫТИЙ ПОЗДРАВЛЕНИЙ | |
ВЫБРАТЬ | |
С.personID КАК personID | |
, МИНИМУМ(К.Дата) КАК event | |
, С.organization КАК organization | |
, С.subdivision КАК subdivision | |
, С.position КАК position | |
, С.isEmployee КАК isEmployee | |
ПОМЕСТИТЬ втСобытия | |
ИЗ | |
втСотрудники КАК С | |
ЛЕВОЕ СОЕДИНЕНИЕ втКалендарь КАК К | |
ПО К._годМесяцДата >= С._следующийДеньРождения | |
СГРУППИРОВАТЬ ПО | |
С.personID, С.organization, С.subdivision, С.position, С.isEmployee | |
ИНДЕКСИРОВАТЬ ПО personID | |
; | |
// ПРИБЕРЕМСЯ ЗА СОБОЙ | |
УНИЧТОЖИТЬ втСотрудники;УНИЧТОЖИТЬ втКалендарь | |
; | |
// СОБЕРЕМ РЕЗУЛЬТАТ | |
ВЫБРАТЬ | |
Ф.Ссылка КАК personID | |
, Ф.Фамилия КАК lastName | |
, Ф.Имя КАК firstName | |
, Ф.Отчество КАК patronymic | |
, ВЫБОР | |
КОГДА Ф.Пол = Значение(Перечисление.ПолФизическогоЛица.Мужской) | |
ТОГДА "m" | |
КОГДА Ф.Пол = Значение(Перечисление.ПолФизическогоЛица.Женский) | |
ТОГДА "f" | |
ИНАЧЕ null | |
КОНЕЦ КАК sex | |
, ДЕНЬ(Ф.ДатаРождения) КАК bdDay | |
, МЕСЯЦ(Ф.ДатаРождения) КАК bdMonth | |
, ДЕНЬ(Ф.ДатаРождения) = ДЕНЬ(&тДата) И МЕСЯЦ(Ф.ДатаРождения) = МЕСЯЦ(&тДата) | |
КАК bdToday | |
, С.event КАК event | |
, С.event = &тДата КАК eventToday | |
, С.isEmployee КАК isEmployee | |
, С.organization КАК organization | |
, С.subdivision КАК subdivision | |
, С.position КАК position | |
, ЕСТЬNULL(Н.Режим, 0) КАК mode // УДАЛИТЬ ДЛЯ ТИПОВОЙ КОНФЫ | |
ИЗ | |
втСобытия КАК С | |
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК Ф | |
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.веб_др_настройки КАК Н // УДАЛИТЬ ДЛЯ ТИПОВОЙ КОНФЫ | |
ПО Ф.Ссылка = Н.ФизическоеЛицо | |
ПО С.personID = Ф.Ссылка | |
УПОРЯДОЧИТЬ ПО | |
bdMonth ВОЗР, bdDay ВОЗР |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Запрос.УстановитьПараметр("тДата", НачалоДня(ТекущаяДата())); // Обязательно начало дня