Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
rebel25 Большой шоколадный орден

Зарегистрирован: 06.10.2008 Сообщения: 580 Откуда: Москва
|
Добавлено: Чт Июн 05, 2014 17:01 Заголовок сообщения: Уволенные за 12 последних месяцев |
|
|
Есть тиражный отчет Пример движение кадров. В нём показатель уволенных.
Мне нужно создать отчет, в котором уволенные будут считаться не просто за выбранный период (выбирать можно будет только год), а по такому условию:
Если год из getdate() равен году, указаному в диалоге, то
{
посчитать количество уволенных за последний полный месяц перед getdate и одиннадцать месяцев, предшествующих последнему полному месяцу.
Например: сегодня 05.06.2014. Запускаю отчет и указываю за 2014 год - уволенные должны собраться за июнь 2013 - май 2014.
}
Иначе
{
просто количество уволенных за год указанный в диалоге. Например если сегодня указали 2013, то нужно просто посчитать уволенных в 2013 году.
}
Скажите, как реализовать такой показатель? |
|
Вернуться к началу |
|
 |
Joenka
Зарегистрирован: 08.11.2013 Сообщения: 77 Откуда: Moscow
|
Добавлено: Пт Июн 06, 2014 09:07 Заголовок сообщения: |
|
|
if year(getdate())=@Dialog_var:1 // Dialog_var выбираем в диалоге.
select .....
from people p
inner join .....
where
p.out_date between convert(datetime,'01.'+Right('0'+month(getdate()),2)+'.'+cast(year(dateadd(year,-1,getdate())) as varchar(4)),104)
and
convert(datetime,'01.'+Right('0'+month(getdate()),2)+'.'+cast(year(getdate()) as varchar(4)),104)-1 //
else
select .....
from people p
inner join .....
where
year(p.out_date) = year(@Dialog_var:1)
Ну примерно как то так.
Причем если вы хотите исключить повторные увольнения (человек принят, уволен, потом опять принят), то можно в принципе брать расчет по distinct auto_card.
К тому же если нужно считать только уволенных, т.е. можут случится так что он уволен в 2013, но потом снова пришел и сейчас работает и таких считать не надо, то еще условие нужно добавить, что на данный момент или на момент позднее периода расчета человек не работает в организации. |
|
Вернуться к началу |
|
 |
rebel25 Большой шоколадный орден

Зарегистрирован: 06.10.2008 Сообщения: 580 Откуда: Москва
|
Добавлено: Пт Июн 06, 2014 17:22 Заголовок сообщения: |
|
|
Спасибо, но к сожелению программа не позволила писать в поле селекта для показателя if и Dialog_var:1. Если есть работающий текст, который можно вставить туда, прошу показать.
Сейчас я решил выходить из положения так: создам один проект для текущего года (там вообще не будет временного измерения) и другой для прошлых лет. |
|
Вернуться к началу |
|
 |
Joenka
Зарегистрирован: 08.11.2013 Сообщения: 77 Откуда: Moscow
|
Добавлено: Пн Июн 09, 2014 08:51 Заголовок сообщения: |
|
|
rebel25 писал(а): | Спасибо, но к сожелению программа не позволила писать в поле селекта для показателя if и Dialog_var:1. Если есть работающий текст, который можно вставить туда, прошу показать.
Сейчас я решил выходить из положения так: создам один проект для текущего года (там вообще не будет временного измерения) и другой для прошлых лет. |
Напишите вот так (а уж сам ыид и колонки и селекты правьте как Вам нужно):
STABLE @XName Select year(DATEADD(year,-2,getdate())) ,year(DATEADD(year,-2,getdate()));
alias _dlgresource={
(0,0,460,120,0);
e,(50,0,340,20, 0x28),'Год:',(50,20,340,20,0x4),1,
{Select year(DATEADD(year,-2,getdate())) ,year(DATEADD(year,-2,getdate()))
union all
select year(DATEADD(year,-1,getdate())) ,year(DATEADD(year,-1,getdate()))
union all
Select
Year(Getdate()),Year(Getdate())
},0,2,1;
};
DIALOG @XName,,'~Уволенные за год';
if _Result <> 10 then {
DESTROY @XName;
error;
};
if year(getdate())=@XName:1 then
{
stable @su
select c1.full_name,
convert(varchar(10),p.out_date,104)
from people p _hintbrowser
inner join card c1 _hintbrowser on c1.auto_card=p.auto_card
where
p.out_date between convert(datetime,'01.'+Right('0'+month(getdate()),2)+'.'+cast(year(dateadd(year,-1,getdate())) as varchar(4)),104)
and
convert(datetime,'01.'+Right('0'+month(getdate()),2)+'.'+cast(year(getdate()) as varchar(4)),104)-1;
}
else
{
stable @su
select c1.full_name,
convert(varchar(10),p.out_date,104)
from people p _hintbrowser
inner join card c1 _hintbrowser on c1.auto_card=p.auto_card
where
year(p.out_date) = year(@XName:1);
};
BROWSER @su;
DESTROY @su;
Alias _Result = -1; |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|