Имя: Пароль:
1C
 
Получить Сотрудников через физлиц в запросе
, ,
0 cyberandr
 
31.01.20
13:09
Всем привет! У меня в ЗУПе поставлена задача найти сотрудников по физлицам (из платежных документов). Сотрудники понятно бывают уволенные, принятые и еще договорники( которые могут быть и нашими сотрудниками)
Попробовал сделать таким образом - по физлицам находим кто договорник, кто в штате и кто уволен(последнее увольнение). А дальше если сотрудник в штате -значит считаем его, если не но договорник -тогда он ну и в конце тогда уволенный. Для этого сделал в запросе общее объединение, но почему-то он задваевает строки.  

/code
ВЫБРАТЬ
    ПлатежноеПоручениеИсходящееРаботники.Физлицо КАК Физлицо,
    ПлатежноеПоручениеИсходящееРаботники.Сумма КАК Сумма
ПОМЕСТИТЬ ФизЛица
ИЗ
    Документ.ПлатежноеПоручениеИсходящее.Работники КАК ПлатежноеПоручениеИсходящееРаботники
ГДЕ
    ПлатежноеПоручениеИсходящееРаботники.Ссылка В
            (ВЫБРАТЬ
                ПлатежноеПоручение.Ссылка
            ИЗ
                Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручение
            ГДЕ
                ПлатежноеПоручение.ДатаПеречисления = &Нашадата
                И ПлатежноеПоручение.Проведен
                И НЕ ПлатежноеПоручение.детскиеПособия
                И НЕ ПлатежноеПоручение.ПометкаУдаления)
;

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

СГРУППИРОВАТЬ ПО
    ФизЛица.Физлицо,
    СотрудникиОрганизаций.Ссылка

ОБЪЕДИНИТЬ ВСЕ

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

СГРУППИРОВАТЬ ПО
    ФизЛица.Физлицо,
    СотрудникиОрганизаций.Ссылка

ОБЪЕДИНИТЬ ВСЕ

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

СГРУППИРОВАТЬ ПО
    ФизЛица.Физлицо,
    СотрудникиОрганизаций.Ссылка
;
1 RomanYS
 
31.01.20
13:14
(0) Что значит задваивает. Ты же ищешь первых, вторых, третьих - никаких приоритетов нет.
Возможно через соединение нужно было делать.
2 Gucci76
 
31.01.20
13:14
А не проще получить сотрудников по движению ведомости?
Или надо до проведения найти сотрудников?
3 Gucci76
 
31.01.20
13:15
Например Регистр накопления "Бухгалтерские взаиморасчеты с сотрудниками" содержит поле СОТРУДНИК
4 Gucci76
 
31.01.20
13:16
Регистр накопления "Взаиморасчеты с сотрудниками" тоже
5 cyberandr
 
31.01.20
13:18
(3) увы нет я только что смотрел -физлицо
6 cyberandr
 
31.01.20
13:18
и взаиморасчеты не подойдут - там есть некоторые ограничения на сам документ
7 cyberandr
 
31.01.20
13:22
(1) Планировал Типа Иванов И.И  NULL   ИвановРаботающий   ИвановУволенный
Петров А.А, ПетровДоговорник Петровработающий NULL.  а в следующей части запроса приоритеты  раставить. А получилось
Иванов И.И  NULL   ИвановРаботающий   NULL  
Иванов И.И  NULL   NULL   ИвановУволенный
8 RomanYS
 
31.01.20
13:23
(5) Неплохо бы сразу уточнять версию ЗУП, по-умолчанию предполагается что сейчас это 3.1
9 Gucci76
 
31.01.20
13:24
(5) есть в ЗУП 3.1 в регистре накопления "Бухгалтерские взаиморасчеты с сотрудниками" поле СОТРУДНИК
10 RomanYS
 
31.01.20
13:25
(7) Так тебе нужно 3 соединения, а не объединение 3 запросов.
А естьNULL избавит от необходимости "следующей части запроса"
11 cyberandr
 
31.01.20
13:29
Да сорри она не 3.1 Еще на обычных формах.
(10) я изначально так и планировал, но идея получить "Иванов И.И  NULL   ИвановРаботающий   ИвановУволенный" показалась мне хорошей и не понятно что не срабатывает в объединении.
12 RomanYS
 
31.01.20
13:32
(11) В объединение все отрабатывает как должно. У тебя неправильные ожидания
13 karpik666
 
31.01.20
13:33
(0) жесть, для таких целей есть регистр сведений Работники организаций, и данные о состоянии сотрудника, работает или уволен
14 Sayan_mi
 
31.01.20
13:36
И ещё на одно физ. лицо сотрудников может быть несколько.
15 cyberandr
 
31.01.20
13:40
Да именно - я выбираю "основное".  По поводу регистров изначально пользовался регистром состояния пока не обнаружил что у некоторых действующих сотрудников нет записей.
16 unenu
 
31.01.20
13:58
КадровыйУчетРасширенный.ТаблицаСотрудниковОрганизации(ФизическоеЛицо, Организация, Период,
ФизическоеЛицо - может быть ссылка, массив, список, неопределено

хватит костыли лепить
17 cyberandr
 
31.01.20
14:15
(16) нет такого модуля в моей зуп :(