|   |   | 
| 
 | Запросы в 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) спасибо большое     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |