Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PlugFox/7abd98935e3775a0b10fbc8c972a5f74 to your computer and use it in GitHub Desktop.
Save PlugFox/7abd98935e3775a0b10fbc8c972a5f74 to your computer and use it in GitHub Desktop.
Выбрать имениников с учетом производственного календаря
// ВЫБЕРЕМ КАДРОВУЮ ИСТОРИЮ СОТРУДНИКОВ
ВЫБРАТЬ
Р.ФизическоеЛицо КАК 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 ВОЗР
@PlugFox
Copy link
Author

PlugFox commented Feb 6, 2019

Запрос.УстановитьПараметр("тДата", НачалоДня(ТекущаяДата())); // Обязательно начало дня

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment