Имя: Пароль:
1C
1С v8
Получение списка сотрудников
, ,
0 eandrs
 
17.04.12
11:32
Раньше я свято верил в непогрешимость 1ски, поэтому без вопросов использовал нижеследующий запрос. Однако сейчас возник вопрос. Мне одному кажется, что третья часть объединения в следующем запросе избыточна? (которая с периодами перекрытия):

           ТекстЗапросаПоСпискуРаботников =
           "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
           |    РаботникиОрганизации.Сотрудник КАК Сотрудник,
           |    РаботникиОрганизации.Сотрудник.Физлицо КАК Физлицо
           |ПОМЕСТИТЬ ВТСписокРаботников
           |ИЗ
           |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(
           |            &парамНачало,
           |            Организация = &парамГоловнаяОрганизация
           |                И (&ПоВсемФизЛицам
           |                    ИЛИ Сотрудник.ФизЛицо В (&ФизЛица))) КАК РаботникиОрганизации
           |ГДЕ
           |    ВЫБОР
           |            КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
           |                    И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
           |                ТОГДА РаботникиОрганизации.ПричинаИзмененияСостоянияЗавершения
           |            ИНАЧЕ РаботникиОрганизации.ПричинаИзмененияСостояния
           |        КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
           |    И ВЫБОР
           |            КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
           |                    И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
           |                ТОГДА РаботникиОрганизации.ОбособленноеПодразделениеЗавершения
           |            ИНАЧЕ РаботникиОрганизации.ОбособленноеПодразделение
           |        КОНЕЦ = &парамОрганизация
           |    И ВЫБОР
           |            КОГДА &ПоВсемПодразделениям
           |                ТОГДА ИСТИНА
           |            КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
           |                    И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
           |                ТОГДА РаботникиОрганизации.ПодразделениеОрганизацииЗавершения В
           |                        (ВЫБРАТЬ
           |                            Подразделения.Подразделение
           |                        ИЗ
           |                            ВТПодразделенияОтбора КАК Подразделения)
           |            ИНАЧЕ РаботникиОрганизации.ПодразделениеОрганизации В
           |                    (ВЫБРАТЬ
           |                        Подразделения.Подразделение
           |                    ИЗ
           |                        ВТПодразделенияОтбора КАК Подразделения)
           |        КОНЕЦ
           |
           |ОБЪЕДИНИТЬ
           |
           |ВЫБРАТЬ РАЗЛИЧНЫЕ
           |    РаботникиОрганизации.Сотрудник,
           |    РаботникиОрганизации.Сотрудник.Физлицо
           |ИЗ
           |    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизации
           |ГДЕ
           |    РаботникиОрганизации.Период > &парамНачало
           |    И РаботникиОрганизации.Период <= &парамКонец
           |    И РаботникиОрганизации.Организация = &парамГоловнаяОрганизация
           |    И (&ПоВсемФизЛицам
           |            ИЛИ РаботникиОрганизации.Сотрудник.Физлицо В (&ФизЛица))
           |    И РаботникиОрганизации.ОбособленноеПодразделение = &парамОрганизация
           |    И (&ПоВсемПодразделениям
           |            ИЛИ РаботникиОрганизации.ПодразделениеОрганизации В
           |                (ВЫБРАТЬ
           |                    Подразделения.Подразделение
           |                ИЗ
           |                    ВТПодразделенияОтбора КАК Подразделения))
           |
           |ОБЪЕДИНИТЬ
           |
           |ВЫБРАТЬ РАЗЛИЧНЫЕ
           |    Работники.Сотрудник,
           |    Работники.Сотрудник.Физлицо
           |ИЗ
           |    РегистрСведений.РаботникиОрганизаций КАК Работники
           |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК ПериодыПерекрытия
           |        ПО Работники.Сотрудник = ПериодыПерекрытия.Сотрудник
           |            И (ПериодыПерекрытия.Период <= Работники.ПериодЗавершения)
           |            И (ПериодыПерекрытия.Период > Работники.Период)
           |            И (ПериодыПерекрытия.Организация = &парамГоловнаяОрганизация)
           |ГДЕ
           |    Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
           |    И Работники.ПериодЗавершения > &парамНачало
           |    И Работники.ПериодЗавершения <= &парамКонец
           |    И Работники.Организация = &парамГоловнаяОрганизация
           |    И Работники.ОбособленноеПодразделениеЗавершения = &парамОрганизация
           |    И (&ПоВсемФизЛицам
           |            ИЛИ Работники.Сотрудник.Физлицо В (&ФизЛица))
           |    И (&ПоВсемПодразделениям
           |            ИЛИ Работники.ПодразделениеОрганизацииЗавершения В
           |                (ВЫБРАТЬ
           |                    Подразделения.Подразделение
           |                ИЗ
           |                    ВТПодразделенияОтбора КАК Подразделения))
           |    И ПериодыПерекрытия.Период ЕСТЬ NULL
           |
           |ОБЪЕДИНИТЬ
           |
           |ВЫБРАТЬ РАЗЛИЧНЫЕ
           |    ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник,
           |    ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо
           |ИЗ
           |    Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорНаВыполнениеРаботСФизЛицом
           |ГДЕ
           |    ДоговорНаВыполнениеРаботСФизЛицом.ДатаНачала <= &парамКонец
           |    И ДоговорНаВыполнениеРаботСФизЛицом.ДатаОкончания >= &парамНачало
           |    И ДоговорНаВыполнениеРаботСФизЛицом.Проведен
           |    И ДоговорНаВыполнениеРаботСФизЛицом.Организация = &парамОрганизация
           |    И (&ПоВсемФизЛицам
           |            ИЛИ ДоговорНаВыполнениеРаботСФизЛицом.ФизЛицо В (&ФизЛица))
           |    И (&ПоВсемПодразделениям
           |            ИЛИ ДоговорНаВыполнениеРаботСФизЛицом.ПодразделениеОрганизации В
           |                (ВЫБРАТЬ
           |                    Подразделения.Подразделение
           |                ИЗ
           |                    ВТПодразделенияОтбора КАК Подразделения))
           |
           |ИНДЕКСИРОВАТЬ ПО
           |    Сотрудник";
1 eandrs
 
17.04.12
11:35
Всплывай
2 eandrs
 
17.04.12
11:42
Всплывай, говорю.
3 vicof
 
17.04.12
11:43
Да оно не тонет.
В чем конкретно вопрос?
4 vmv
 
17.04.12
11:45
(2) а корабль с золотишком конкистадоров поднимешь, я не против если там будет лишний сундучок
5 eandrs
 
17.04.12
11:46
Вопрос в том - зачем нужна эта третья часть объединения. Без неё, мне кажется, сей запрос будет работать точно также, как и с ней.
6 vmv
 
17.04.12
11:46
непогрешимость 1ски - как мощьно звучит, прям сейчас сяду писать образа и нимбы на холстах, фото небожителей в студию
7 eandrs
 
17.04.12
11:47
(6) Я старался)
8 vmv
 
17.04.12
11:49
краткое содержание

...     |ОБЪЕДИНИТЬ
           |
           |ВЫБРАТЬ РАЗЛИЧНЫЕ
           |    РаботникиОрганизации.Сотрудник,
           |    РаботникиОрганизации.Сотрудник.Физлицо
           |ИЗ
           |    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизации

.....  |ОБЪЕДИНИТЬ
           |
           |ВЫБРАТЬ РАЗЛИЧНЫЕ
           |    Работники.Сотрудник,
           |    Работники.Сотрудник.Физлицо
           |ИЗ
           |    РегистрСведений.РаботникиОрганизаций КАК Работники
           |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК ПериодыПерекрытия

......       |ВЫБРАТЬ РАЗЛИЧНЫЕ
           |    ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник,
           |    ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо
           |ИЗ
           |    Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорНаВыполнениеРаботСФизЛицом

действительно, никаких очевидных различий - разчленить!
9 Fish
 
17.04.12
11:51
(5) Проверял?
10 eandrs
 
17.04.12
11:53
(8) Ну ладно. Давай поподробней. Как я понимаю, в третьей части выбираются записи с заполненной плановой датой завершения, попадающей в исследуемый интервал, действие которых не было "досрочно" прекращено другими записями по этому сотруднику.
Дата завершения в исследуемом интервале. Дата начала записи может в интервал входить, а может - и нет. Если входит - то она будет также выбрана запросом второй части объединения. Если не входит - то запросом первой части объединения, т.е. срезом последних на дату начала исследуемого интервала. Где я не прав?
11 eandrs
 
17.04.12
11:54
(9) - насколько позволила кривизна рук - да.
12 eandrs
 
17.04.12
12:07
Подъем
13 eandrs
 
17.04.12
12:24
Без жертвы Ктулху, видимо, не обойтись...
14 eandrs
 
17.04.12
13:38
Видимо, все обсуждают митинг
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn