|
Разбить данные по годам | ☑ | ||
---|---|---|---|---|
0
anikulnikova
29.12.15
✎
13:23
|
Добрый день, стоит такая задача: по невыходам сотрудников сформировать отчет, который по каждому рабочему году того или иного сотрудника будет показывать невыходы.
Т.е. допустим, я устроилась 20.06.2013г., мне необходимо увидеть данные за эти рабочие годы, с 20.06.13 по 20.06.14, с 20.06.14 по 20.06.15 и соответственно за этот незаконченный рабочий год сколько у меня было неявок(за каждый год по отдельности). Запрос по документу я вытащила, он отображает данные, загвоздка в том, как раскидать всё по рабочим годам. ВЫБРАТЬ НевыходыВОрганизацияхНачисления.Ссылка, НевыходыВОрганизацияхНачисления.Сотрудник КАК Сотрудник, СУММА(НевыходыВОрганизацияхНачисления.ОтработаноДней) КАК КоличествоДней, СУММА(НевыходыВОрганизацияхНачисления.ОтработаноЧасов) КАК КоличествоЧасов, СотрудникиОрганизаций.ДатаПриемаНаРаботу ИЗ Документ.НевыходыВОрганизациях.Начисления КАК НевыходыВОрганизацияхНачисления ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций ПО НевыходыВОрганизацияхНачисления.Сотрудник = СотрудникиОрганизаций.Ссылка ГДЕ НевыходыВОрганизацияхНачисления.Ссылка.ПометкаУдаления = &Ложь СГРУППИРОВАТЬ ПО НевыходыВОрганизацияхНачисления.Сотрудник, СотрудникиОрганизаций.ДатаПриемаНаРаботу, НевыходыВОрганизацияхНачисления.Ссылка УПОРЯДОЧИТЬ ПО Сотрудник |
|||
1
sash-ml
29.12.15
✎
13:31
|
Выразить(РАЗНОСТЬДАТ(датаневыхода,датаприема, ДЕНЬ)/365 как число (2,0)) + 1
как то так |
|||
2
anikulnikova
29.12.15
✎
13:36
|
(1) спасибо, но как-то не понятно )))
|
|||
3
sash-ml
29.12.15
✎
13:38
|
можно проще
РАЗНОСТЬДАТ(датаприема,датаневыхода, ГОД) как НомерГодаСМоментаПреима |
|||
4
anikulnikova
29.12.15
✎
14:03
|
(3) Дата невыхода может быть не одним днем, и определяется ДатойНачала и ДатойОкончания, конкретно датыневыхода - нет.
|
|||
5
sash-ml
29.12.15
✎
14:07
|
(4) бери по дате окончания, будет небольшая погрешность если невыходы были как раз на рубеже года. Но если таких невыходов нет то никто не заметит.
|
|||
6
anikulnikova
29.12.15
✎
14:13
|
Ругается,пишет неверные параметры...
|
|||
7
sash-ml
29.12.15
✎
14:17
|
покажи запрос который получился
|
|||
8
salvator
29.12.15
✎
14:17
|
ГДЕ
НевыходыВОрганизацияхНачисления.Ссылка.ПометкаУдаления = &Ложь Замени на ГДЕ НЕ НевыходыВОрганизацияхНачисления.Ссылка.ПометкаУдаления |
|||
9
anikulnikova
29.12.15
✎
14:19
|
Не не, не то выходит.Выходит просто разница лет. допустим я устроилась 13-го, а документ 15-го, он и выдает - 2 года. Это, увы, не то.
Необходимо создать возможно что-то типа нового поля для отображения года, в нем как-то привязать рабочий год сотрудника от даты приема, и потом отбирать по рабочему году неявки. Но.. я это только представляю, а как сделать не знаю. |
|||
10
sash-ml
29.12.15
✎
14:26
|
А разница лет чем тебе не рабочий год сотрудника от даты приема? Группируй по этой разнице
|
|||
11
anikulnikova
29.12.15
✎
14:43
|
(10) ну допустим я попробую из этого что-то построить, а как быть с теми сотрудниками, которые в этом году и пришли
|
|||
12
sash-ml
29.12.15
✎
14:47
|
тогда (1), бери разницу в днях и дели на 365, округляй, прибавляй 1
|
|||
13
anikulnikova
29.12.15
✎
14:56
|
(12) Смысл не такой все-равно получается. Хотелось бы получить именно год, а не его количество (от разницы), т.е. высчитать, допустим у меня с 13 года было не полных 3 года, и чтобы в группировке отображалось что-то типа:
1) группировка 13-14 год 2) группировка 14-15 год 3) группировка 15-16 год |
|||
14
salvator
29.12.15
✎
15:04
|
(9) Создай таблицу значений с годами, с нужным интервалом с...по. Например с 1990 по 2100.
Потом таблицу с данными соединяй с таблицей годов. Чтобы получить начало и окончание периодов, исходя из даты приема по даты увольнения, что-то типа этого придется написать. Вероятно, можно короче, не проверял. ВЫБРАТЬ ТабДанные.ДатаПрихода, ТабДанные.ДатаУхода, ДОБАВИТЬКДАТЕ(ТабДанные.ДатаПрихода,ГОД,ТабГода.Год-1-ГОД(ТабДанные.ДатаПрихода)) КАК НачалоПериода, ВЫБОР КОГДА ДОБАВИТЬКДАТЕ(ТабДанные.ДатаПрихода,ГОД,ТабГода.Год-ГОД(ТабДанные.ДатаПрихода))>ТабДанные.ДатаУхода ТОГДА ДОБАВИТЬКДАТЕ(ТабДанные.ДатаУхода,СЕКУНДА,-1) ИНАЧЕ ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ТабДанные.ДатаПрихода,ГОД,ТабГода.Год-ГОД(ТабДанные.ДатаПрихода)),СЕКУНДА,-1) КОНЕЦ КАК ОкончаниеПериода, ИЗ ТабДанные КАК ТабДанные ЛЕВОЕ СОЕДИНЕНИЕ ТабГода КАК ТабГода ПО ГОД(ТабДанные.ДатаПрихода)+1 <= ТабГода.Год И ГОД(ТабДанные.ДатаУхода)+1 >= ТабГода.Год |
|||
15
FIXXXL
29.12.15
✎
15:09
|
Функция ГОД(<Дата>) в запросе вернет год от даты
по этому полю и группируй |
|||
16
elisabet
29.12.15
✎
15:09
|
(0) А нахера шарахаться по документам, когда в регистре расчета невыходу соответствует расчет "отпуск за свой счет", и количество дней и часов там же в регистре указано, на которые он приходится.
И потом эту выборку просто соедини с годами. |
|||
17
sash-ml
29.12.15
✎
15:42
|
(13) чистым запросом практически невозможно получить такую группировку, нужно делать оформление через макет в СКД, или через вычисляемые поля
|
|||
18
strange2007
29.12.15
✎
15:46
|
В задачу не вникал, но раз по датам (годам, месяцам), то просто рабочий запрос по выбору всех месяцев от одной даты до другой. Глядишь может кому пригодится
ВЫБРАТЬ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d КАК НомерДняИзДиапазона ПОМЕСТИТЬ ВТ_Дни ИЗ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК cc ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК d ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК dd ПО (ИСТИНА) ГДЕ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, ВТ_Дни.НомерДняИзДиапазона) КАК Дата ПОМЕСТИТЬ Даты ИЗ ВТ_Дни КАК ВТ_Дни ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Месяцы.НачалоМес, Месяцы.КонецМес ИЗ (ВЫБРАТЬ НАЧАЛОПЕРИОДА(Даты.Дата, МЕСЯЦ) КАК НачалоМес, КОНЕЦПЕРИОДА(Даты.Дата, МЕСЯЦ) КАК КонецМес ИЗ Даты КАК Даты СГРУППИРОВАТЬ ПО НАЧАЛОПЕРИОДА(Даты.Дата, МЕСЯЦ), КОНЕЦПЕРИОДА(Даты.Дата, МЕСЯЦ)) КАК Месяцы |
|||
19
anikulnikova
30.12.15
✎
11:46
|
(3) Спасибо, Ваш способ помогает, но не совсем как необходимо. Если сгруппировать по этому полю, то отбор документов будет производится, но не за рабочий год, а за календарный. Скриншот могу выложить, только куда?
|
|||
20
aka AMIGO
30.12.15
✎
11:48
|
(19) Ложи сюда: http://pics.rsh.ru/
|
|||
21
anikulnikova
30.12.15
✎
11:57
|
http://pics.rsh.ru/img/screenshot_q740iyz9.jpg
По скриншоту можно увидеть, что у сотрудника рабочий год начинается 4 июня 13 года, и заканчивается 3 июня 2014, и соответственно начинается следующий, НО, с помощью предложенного в (3) сообщении варианта выходит так. Как можно сделать, чтоб попадали данные за именно рабочий год, а не календарный. |
|||
22
anikulnikova
30.12.15
✎
11:59
|
По скриншоту документ № 5 должен был попасть в верхние документы, т.к. 28.04 рабочий год у сотрудника не был завершен.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |