Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Превышение нормы сверхурочных

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: ТЗК (Табельно-зарплатный контур)
Предыдущая тема :: Следующая тема  
Автор Сообщение
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 580
Откуда: Москва

СообщениеДобавлено: Ср Ноя 30, 2016 14:50    Заголовок сообщения: Превышение нормы сверхурочных Ответить с цитатой

Нужно написать запрос, который выявит работников в основном табеле которых, есть превышение нормы сверхурочных согласно ТК - не более 4 часов за два любых календарных дня. Желательно без построчного перебора. Нужно анализировать и последнее число предыдущего месяца и первое следующего.
Если у кого есть поделитесь пожалуйста.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 580
Откуда: Москва

СообщениеДобавлено: Чт Дек 01, 2016 14:41    Заголовок сообщения: Ответить с цитатой

select dateadd(day,-1,dateadd(month,1,'@@tYear-@@tMonth-01')) into dt_; --последнее число месяца
select dateadd(dd,-1,dateadd(month,-1,dateadd(day,1,dt_))) into dt_1; --последнее число предыдущего месяца
select dateadd(day,-1,dateadd(month,1,'@@tYear-01-01')) into dt_01; --первое января года

browser
{
select
TN,
FIO,
s.struct_name,
r1.dt[dd.mm.yyyy],
r.dt[dd.mm.yyyy],
r.sm + r1.sm[]"Часов сверхурочных",
'Более 4 часов сверхурочных за два дня подряд'
from
(
select pid,dt,sum(hours) sm from tb_tabel t
where t2 in ('С') and dt between dt_1 and dt_
group by pid, dt
) r
join
(
select pid,dt,sum(hours) sm from tb_tabel t
where t2 in ('С') and dt between dt_1 and dt_
group by pid, dt
) r1 on (r.pid=r1.pid and dateadd(dd,1,r1.dt) = r.dt)
join people p on (p.pid = r.pid)
join user_tabel l on (l.pid = p.pid and cmonth = @@tYear*12+@@tMonth)
join structs s on (s.struct_code=l.shop)
where r.sm + r1.sm > 4

UNION ALL

select
TN,
FIO,
s.struct_name,
'' as dt,
'' as dt1,
r.sm,
'Превышено 120 часов сверхурочных с начала года'
from
(
select pid, sum(hours) sm from tb_tabel t
where t2 in ('С') and dt between dt_01 and dt_
group by pid
) r
join people p on (p.pid = r.pid)
join user_tabel l on (l.pid = p.pid and cmonth = @@tYear*12+@@tMonth)
join structs s on (s.struct_code=l.shop)
where r.sm > 120
order by 2,3
},,ПРОВЕРКА СВЕРХУРОЧНЫХ без учета табеля по изменениям;


Последний раз редактировалось: rebel25 (Чт Дек 01, 2016 17:21), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Volod
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 11.02.2015
Сообщения: 252

СообщениеДобавлено: Чт Дек 01, 2016 16:04    Заголовок сообщения: Ответить с цитатой

судя по названию таблицы leroy_tabel Smile
вы не используете базовые объекты табельного учёта от бкс
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 580
Откуда: Москва

СообщениеДобавлено: Чт Дек 01, 2016 17:23    Заголовок сообщения: Ответить с цитатой

эта пользовательская таблица не влияет на логику, я ее использовал чтобы по быстрому подтянуть фамилию и другие реквизиты работника, сам табель тиражный.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 580
Откуда: Москва

СообщениеДобавлено: Чт Окт 31, 2024 18:46    Заголовок сообщения: Ответить с цитатой

Посмотрел на своё творение восьмилетней давности и ужаснулся его производительности. Переписал.

select
top 1 1
from
(
select t.pid,dt,sum(hours) sm from tb_tabel t (nolock) Join #pidlist TT (nolock) on (t.pid = TT.pid)
where t2 in ('С') and dt between dt_1 and dt_
and TAB_ID = @@tb_type
group by t.pid, dt
) r
left join
(
select t.pid,dt,sum(hours) sm from tb_tabel t (nolock) Join #pidlist TT (nolock) on (t.pid = TT.pid)
where t2 in ('С') and dt between dt_1 and dt_
and TAB_ID = @@tb_type
group by t.pid, dt
) r1 on (r.pid=r1.pid and dateadd(dd,1,r1.dt) = r.dt)
--join people p on (p.pid = r.pid)
--Join #pidlist TT on (TT.pid = p.pid) --#11934
--join leroy_tabel l (nolock) on (l.pid = p.pid and cmonth = @@tYear*12+@@tMonth)
--join structs s on (s.struct_code=l.shop)
where isnull(r.sm,0) + isnull(r1.sm,0) > 4
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: ТЗК (Табельно-зарплатный контур) Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU