|
Запросы в 1с | ☑ | ||
---|---|---|---|---|
0
Славянин
06.09.16
✎
13:48
|
Добрый день. Ребята, изучаю запросы. Есть задачка.
Нужно получить список работников которые работали в подразделении за определённый период. И надо вывести дату приема и увольнения. Проблема в том, что приниматься они могли в другое подразделение и увольняться тоже могли из другого подразделения. Есть регистр сведений "работники организации". ТАм есть вся информация. Как я предполагаю мне для начала нужно отобрать людей который засветились в указанном подразделении за указанный период, и закинуть их всех в какую-то табличку. А потом перебирая эту табличку найти в том же регистре их даты увольнения и приема. Подскажите конкретнее по реализации. Что использовать? в каком направлении двигаться? |
|||
1
golem14
06.09.16
✎
13:55
|
а это задачка для изучения или по работе?
|
|||
2
Sapiens_bru
06.09.16
✎
13:57
|
(1) Там же написано "изучаю запросы"
(0) Давай структуру регистра. Запрос такая штука, что без знания структуры данных его не напишешь. |
|||
3
golem14
06.09.16
✎
14:02
|
(2) а ты на практике никогда ничего не изучал умник?
|
|||
4
piter3
06.09.16
✎
14:03
|
(2)Знаем мы эти изучаем.
Открой типовую и посмотри. |
|||
5
piter3
06.09.16
✎
14:05
|
Есть отчет Списки работников,что не показывает?
|
|||
6
Славянин
06.09.16
✎
14:14
|
(5) Списки работников не даёт, то что просят
|
|||
7
Славянин
06.09.16
✎
14:16
|
(1) И по работе и изучаю)
|
|||
8
piter3
06.09.16
✎
14:19
|
(6) и что же не показывает,прямо интересно стало
|
|||
9
del123
06.09.16
✎
14:21
|
+(8) Просто кто то не умеет их настраивать :)
|
|||
10
Славянин
06.09.16
✎
14:22
|
(9) может быть
|
|||
11
piter3
06.09.16
✎
14:23
|
ок,ну возьми перемещение тогда еще глянь.
|
|||
12
piter3
06.09.16
✎
14:23
|
это разовая задача или на постоянную?
|
|||
13
Славянин
06.09.16
✎
14:24
|
(12) на постоянно
|
|||
14
piter3
06.09.16
✎
14:47
|
ВЫБРАТЬ
РаботникиОрганизаций.Период, РаботникиОрганизаций.ПодразделениеОрганизации, РаботникиОрганизаций.Сотрудник, Прием.Период КАК Период1 ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК Прием ПО РаботникиОрганизаций.Сотрудник = Прием.Сотрудник И (Прием.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу)) ГДЕ РаботникиОрганизаций.Период МЕЖДУ &НачалоПериода И &КонецПериода И РаботникиОрганизаций.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение) И ВЫБОР КОГДА РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения ИНАЧЕ РаботникиОрганизаций.ПодразделениеОрганизации КОНЕЦ = &ПодразделениеОрганизации |
|||
15
Akela has missed
06.09.16
✎
15:00
|
(14) Если сотрудник 01.01 работал в Подразделении1, а с 20.01 перевелся в Подраделение2, то при формировании отчета с 10.01 по 31.01 по Подразделению1, за период с 10.01-20.01 ты ведь его не увидишь...
|
|||
16
piter3
06.09.16
✎
15:02
|
(15) А почему я должен формировать его с 10.01 по 31.01?
Это где-то написано в (0)? |
|||
17
Akela has missed
06.09.16
✎
15:04
|
(16) получить список работников которые работали в подразделении за определённый период
|
|||
18
piter3
06.09.16
✎
15:05
|
(17) давай свой вариант
|
|||
19
Akela has missed
06.09.16
✎
15:10
|
ВЫБРАТЬ
РаботникиОрганизаций.Период, РаботникиОрганизаций.ПериодЗавершения, МИНИМУМ(ЕСТЬNULL(РаботникиОрганизацийСледующаяЗапись.Период, &КонПериода)) КАК ПериодСледующий, РаботникиОрганизаций.Сотрудник, РаботникиОрганизаций.ПодразделениеОрганизации, РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения, РаботникиОрганизаций.ПричинаИзмененияСостояния, РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения ПОМЕСТИТЬ втКадроваяИстория ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизацийСледующаяЗапись ПО РаботникиОрганизаций.Сотрудник = РаботникиОрганизацийСледующаяЗапись.Сотрудник И РаботникиОрганизаций.Период < РаботникиОрганизацийСледующаяЗапись.Период И (РаботникиОрганизацийСледующаяЗапись.Период <= &КонПериода) ГДЕ РаботникиОрганизаций.Период <= &КонПериода СГРУППИРОВАТЬ ПО РаботникиОрганизаций.Сотрудник, РаботникиОрганизаций.ПодразделениеОрганизации, РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения, РаботникиОрганизаций.Период, РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения, РаботникиОрганизаций.ПричинаИзмененияСостояния, РаботникиОрганизаций.ПериодЗавершения ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втКадроваяИстория.Период, втКадроваяИстория.Сотрудник, втКадроваяИстория.ПодразделениеОрганизации КАК Подразделение, втКадроваяИстория.ПричинаИзмененияСостояния ПОМЕСТИТЬ втПолнаяКадроваяИстория ИЗ втКадроваяИстория КАК втКадроваяИстория ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ВЫБОР КОГДА втКадроваяИстория.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) И втКадроваяИстория.ПериодЗавершения >= втКадроваяИстория.ПериодСледующий ТОГДА ДАТАВРЕМЯ(1, 1, 1) ИНАЧЕ втКадроваяИстория.ПериодЗавершения КОНЕЦ, втКадроваяИстория.Сотрудник, втКадроваяИстория.ПодразделениеОрганизацииЗавершения, втКадроваяИстория.ПричинаИзмененияСостоянияЗавершения ИЗ втКадроваяИстория КАК втКадроваяИстория ГДЕ ВЫБОР КОГДА втКадроваяИстория.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) И втКадроваяИстория.ПериодЗавершения >= втКадроваяИстория.ПериодСледующий ТОГДА ДАТАВРЕМЯ(1, 1, 1) ИНАЧЕ втКадроваяИстория.ПериодЗавершения КОНЕЦ <> ДАТАВРЕМЯ(1, 1, 1) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МИНИМУМ(взПолнаяКадроваяИстория.Период) КАК ДатаНачала, ДОБАВИТЬКДАТЕ(взПолнаяКадроваяИстория.ПериодСледующий, ДЕНЬ, -1) КАК ДатаОкончания, взПолнаяКадроваяИстория.Сотрудник, взПолнаяКадроваяИстория.Подразделение ИЗ (ВЫБРАТЬ втПолнаяКадроваяИстория.Период КАК Период, МИНИМУМ(втПолнаяКадроваяИсторияСледующаяЗапись.Период) КАК ПериодСледующий, втПолнаяКадроваяИстория.Сотрудник КАК Сотрудник, втПолнаяКадроваяИстория.Подразделение КАК Подразделение ИЗ втПолнаяКадроваяИстория КАК втПолнаяКадроваяИстория ЛЕВОЕ СОЕДИНЕНИЕ втПолнаяКадроваяИстория КАК втПолнаяКадроваяИсторияСледующаяЗапись ПО втПолнаяКадроваяИстория.Сотрудник = втПолнаяКадроваяИсторияСледующаяЗапись.Сотрудник И втПолнаяКадроваяИстория.Период < втПолнаяКадроваяИсторияСледующаяЗапись.Период И (втПолнаяКадроваяИсторияСледующаяЗапись.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение) ИЛИ втПолнаяКадроваяИстория.Подразделение <> втПолнаяКадроваяИсторияСледующаяЗапись.Подразделение) ГДЕ втПолнаяКадроваяИстория.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение) СГРУППИРОВАТЬ ПО втПолнаяКадроваяИстория.Период, втПолнаяКадроваяИстория.Сотрудник, втПолнаяКадроваяИстория.Подразделение) КАК взПолнаяКадроваяИстория ГДЕ ЕСТЬNULL(ДОБАВИТЬКДАТЕ(взПолнаяКадроваяИстория.ПериодСледующий, ДЕНЬ, -1), &КонПериода) >= &НачПериода И взПолнаяКадроваяИстория.Подразделение В ИЕРАРХИИ(&Подразделение) СГРУППИРОВАТЬ ПО взПолнаяКадроваяИстория.Подразделение, взПолнаяКадроваяИстория.Сотрудник, ДОБАВИТЬКДАТЕ(взПолнаяКадроваяИстория.ПериодСледующий, ДЕНЬ, -1) |
|||
20
piter3
06.09.16
✎
15:13
|
(19) проверял?
|
|||
21
Akela has missed
06.09.16
✎
15:16
|
(20) когда-то давно, работало
|
|||
22
Славянин
06.09.16
✎
15:17
|
Что-то мудрёно сильно. Нужны поля Сотрудник,датаприема,датаувольнения. И всё. Сотрудники выбираются согласно выбранному подразделению и периоду. А датыприема и увольнения заполняются не зависимо от выбранного подразделения
|
|||
23
Славянин
06.09.16
✎
15:17
|
и всё это выбирается из регистра "работникиорганизации"
|
|||
24
piter3
06.09.16
✎
15:18
|
(23) Читай внимательно
|
|||
25
piter3
06.09.16
✎
15:18
|
(21) проверил на одном,разницы не заметил.может быть на работе как говорит автор и покрутил бы,а так сойдет
|
|||
26
piter3
06.09.16
✎
15:22
|
(17) [Проблема в том, что приниматься они могли в другое подразделение и увольняться тоже могли из другого подразделения. ] один косяк нашел,так что у тебе условие не такое как у него
|
|||
27
DTX 4th
06.09.16
✎
15:29
|
Дату приема/увольнения на работу надо? Или в подразделение?
Данные без дат получить легко - срезпоследних + сотрудники за период. Мб даты левым соединением проще прицепить? |
|||
28
DTX 4th
06.09.16
✎
15:29
|
Левым соединением со всех таблицей регистра
|
|||
29
Akela has missed
06.09.16
✎
15:33
|
(26) Если в январе принялся в одно, в феврале работал в другом, а в марте уволился из третьего, то при формировании отчета за год с отбором по подразделению 1 или 2 или 3, сотрудник должен попасть в любом случае. Я понял задачу так.
А дату приема и увольнения уже можно вытащить из сотрудника. |
|||
30
piter3
06.09.16
✎
15:34
|
(29) [А дату приема и увольнения уже можно вытащить из сотрудника.] неправильно.Это точно твое в (19)?
|
|||
31
4eater
06.09.16
✎
15:38
|
левое соединение реальной таблицы с самой собой с периодом минимальный больше пустой даты, а потом максимальный меньше 3999 года. запрос похож на остатки на каждый день
|
|||
32
Akela has missed
06.09.16
✎
15:39
|
(30) ок, из срезов по сотруднику)
|
|||
33
HEKPOH
06.09.16
✎
15:49
|
(0) в качестве самопиара: http://catalog.mista.ru/public/439245/
Даты приема и увольнения поймешь откуда вытащить... В публикации задача более широкая - сократи под свои нужды |
|||
34
Славянин
06.09.16
✎
15:56
|
(33) спасибо большое
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |