Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Запросы в 1с

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует