Имя: Пароль:
1C
1С v8
Помогите: слепить один с запрос из двух запросов
0 dft2014
 
19.03.17
00:33
Подскажите, как два запроса соединить правильно в один. В одном запросе я получаю кадровую историю сотрудника, а в другом - его состояние. Как мне получить эти данные одним запросом?


Запрос1:

ВЫБРАТЬ
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник,
    КадроваяИсторияСотрудниковСрезПоследних.Регистратор,
    КадроваяИсторияСотрудниковСрезПоследних.Должность,
    ЕСТЬNULL(КадроваяИсторияСотрудниковСрезПоследних.Подразделение, """") КАК Подразделение,
    КадроваяИсторияСотрудниковСрезПоследних.Период,
    КадроваяИсторияСотрудниковСрезПоследних.КоличествоСтавок,
    КадроваяИсторияСотрудниковСрезПоследних.ВидЗанятости,
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.Код КАК ТабельныйНомер,
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.Наименование КАК ФИО
ИЗ
    РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(КОНЕЦПЕРИОДА(&НачалоПериода, ДЕНЬ), ) КАК КадроваяИсторияСотрудниковСрезПоследних
ГДЕ
    ТИПЗНАЧЕНИЯ(КадроваяИсторияСотрудниковСрезПоследних.Регистратор) <> ТИП(Документ.Увольнение)
    И КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = &Сотрудник



Запрос2:

ВЫБРАТЬ
    СостоянияСотрудников.Сотрудник КАК Сотрудник,
    СостоянияСотрудников.Состояние КАК Состояние,
    СостоянияСотрудников.Период КАК Период
ИЗ
    РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
ГДЕ
    СостоянияСотрудников.Период В
            (ВЫБРАТЬ
                МАКСИМУМ(СредСост.Период)
            ИЗ
                РегистрСведений.СостоянияСотрудников КАК СредСост
            ГДЕ
                СредСост.Период <= &НачалоПериода
                И СостоянияСотрудников.Сотрудник = СредСост.Сотрудник)
1 dft2014
 
19.03.17
00:34
Т.е. из Запроса2 мне надо получить только поле "Состояние".
2 dft2014
 
19.03.17
00:50
Ап!
3 Dmitry77
 
19.03.17
00:58
можно Объеъденить (это если лень запросы переписывать) потом сгрупировать.

можно левое соединение сделать

Можно посмотреть как в типовых запросах сделано.
4 dft2014
 
19.03.17
01:08
(3) Типовые смотреть в ЗУП8, в качестве примера, это утопия ((
5 ВРедная
 
19.03.17
01:28
(4) И первые предложенные два варианта тебе тоже не подошли?
6 dft2014
 
19.03.17
01:35
(5) Если бы я смогла, то я бы не написала на форум...
7 alexoren
 
19.03.17
01:36
Пакет запроса никак?
8 alexoren
 
19.03.17
01:39
Вероятно самым оптимальным в данном случае будет пакет запрос. МенеджерВременныхТаблиц в руки и вперёд )
9 dft2014
 
19.03.17
01:44
(7) Как?
10 alexoren
 
19.03.17
01:44
Но можно просто соединение по Сотруднику сделать, и ненапрягайтесь
11 alexoren
 
19.03.17
01:45
Какая конфигурация? ЗИП?
12 dft2014
 
19.03.17
01:48
(11) ЗУП 3.1.2.121. Там поменялась структура регистра "Состояние сотрудников", добавлено измерение Год.
13 Da D
 
19.03.17
01:49
без фото не взлетит, а ты там кем, вызовите специалист - вы где ?
14 alexoren
 
19.03.17
01:54
Щас гляну
15 dft2014
 
19.03.17
01:56
Вот я что-то состряпала, но что-то некрасиво как-то получается, на мой взгляд. Подскажите, как правильно сделать:


ВЫБРАТЬ
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник,
    КадроваяИсторияСотрудниковСрезПоследних.Регистратор,
    КадроваяИсторияСотрудниковСрезПоследних.Должность,
    ЕСТЬNULL(КадроваяИсторияСотрудниковСрезПоследних.Подразделение, """") КАК Подразделение,
    КадроваяИсторияСотрудниковСрезПоследних.Период,
    КадроваяИсторияСотрудниковСрезПоследних.КоличествоСтавок,
    КадроваяИсторияСотрудниковСрезПоследних.ВидЗанятости,
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.Код КАК ТабельныйНомер,
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.ФизическоеЛицо.Наименование КАК ФИО,
    КадроваяИсторияСотрудниковСрезПоследних.Подразделение.РайонныйКоэффициент
ПОМЕСТИТЬ ВТКадрИстория
ИЗ
    РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(КОНЕЦПЕРИОДА(&НачалоПериода, ДЕНЬ), ) КАК КадроваяИсторияСотрудниковСрезПоследних
ГДЕ
    ТИПЗНАЧЕНИЯ(КадроваяИсторияСотрудниковСрезПоследних.Регистратор) <> ТИП(Документ.Увольнение)
    И КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = &Сотрудник
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СостоянияСотрудников.Состояние,
    ВТКадрИстория.Сотрудник,
    ВТКадрИстория.Регистратор,
    ВТКадрИстория.Должность,
    ВТКадрИстория.Подразделение,
    ВТКадрИстория.Период,
    ВТКадрИстория.КоличествоСтавок,
    ВТКадрИстория.ВидЗанятости,
    ВТКадрИстория.ТабельныйНомер,
    ВТКадрИстория.ФИО,
    ВТКадрИстория.ПодразделениеРайонныйКоэффициент
ПОМЕСТИТЬ ВТСостояния
ИЗ
    ВТКадрИстория КАК ВТКадрИстория
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
        ПО ВТКадрИстория.Сотрудник = СостоянияСотрудников.Сотрудник
ГДЕ
    СостоянияСотрудников.Период В
            (ВЫБРАТЬ
                МАКСИМУМ(СредСост.Период)
            ИЗ
                РегистрСведений.СостоянияСотрудников КАК СредСост
            ГДЕ
                СредСост.Период <= &НачалоПериода
                И СостоянияСотрудников.Сотрудник = СредСост.Сотрудник)
16 alexoren
 
19.03.17
01:58
ВЫБРАТЬ
    КадроваяИсторияСотрудниковСрезПоследних.Должность
ИЗ
    РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияСотрудников.СрезПоследних КАК СостоянияСотрудниковСрезПоследних
        ПО КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = СостоянияСотрудниковСрезПоследних.Сотрудник

Вот так соедините.

Или тот пакет запроса выполняйте, и выбираете результат из массивов.
17 alexoren
 
19.03.17
01:59
Этот код в конструктор запроса, там поля необходимые и условия уже по ходу и всё. Либо выполнить пакет запросов. Который вы состряпали. На правильность не смотрел.
18 alexoren
 
19.03.17
02:00
Хотя что-то там не так
19 dft2014
 
19.03.17
02:06
(16) Спасибо, но у меня ключевым является в запросе именно это условие ниже:

ВЫБРАТЬ
                СостоянияСотрудников.Сотрудник КАК Сотрудник,
                СостоянияСотрудников.Состояние КАК Состояние,
                СостоянияСотрудников.Период КАК Период
ИЗ
                РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
ГДЕ
                СостоянияСотрудников.Период В
                (ВЫБРАТЬ МАКСИМУМ (СредСост.Период)
                ИЗ РегистрСведений.СостоянияСотрудников КАК СредСост
                ГДЕ
                СредСост.Период <= &НачалоПериода
                и СостоянияСотрудников.Сотрудник = СредСост.Сотрудник)
20 alexoren
 
19.03.17
02:10
(19) так я вам только соединение таблиц скинул, вы условия и поля добавьте в него и все
21 alexoren
 
19.03.17
02:18
ВЫБРАТЬ
    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник,
    СостоянияСотрудников.Состояние,
    СостоянияСотрудников.Период
ИЗ
    РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
        ПО КадроваяИсторияСотрудниковСрезПоследних.Период = СостоянияСотрудников.Период
            И КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = СостоянияСотрудников.Сотрудник
ГДЕ
    ТИПЗНАЧЕНИЯ(КадроваяИсторияСотрудниковСрезПоследних.Регистратор) <> ТИП(Документ.Увольнение)
            И КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = &Сотрудник
    И СостоянияСотрудников.Период В
            (ВЫБРАТЬ
                МАКСИМУМ(СредСост.Период)
            ИЗ
                РегистрСведений.СостоянияСотрудников КАК СредСост
            ГДЕ
                СредСост.Период <= &НачалоПериода
                И СостоянияСотрудников.Сотрудник = СредСост.Сотрудник)

Поля укажите, вроде то что вам нужно
22 alexoren
 
19.03.17
02:20
Но вообще лучше пакетом )
23 dft2014
 
19.03.17
02:28
(21) Вроде результат получается нужный (в консоли по одному сотруднику проверила)! Спасибо!!! Буду тестировать!
24 Da D
 
19.03.17
02:29
(23) протестируйте.
25 alexoren
 
19.03.17
02:31
(23) не за что )